Replaces the entirety of the engine's CharSet-graphics rendering process and removes their strict size-standard of 24×32 per frame, 72×128 per character and 288×256 pixels per file. Instead, the character-size will be calculated automatically by dividing the actual full image-width by 12 and the image-height by 8, this also means that graphic-files are not allowed to be too small or big to function properly.
This is a completely rewritten iteration of previously released FlexibleWalker's concept that finally supports correct display of characters walking through tiles with terrains that have a bush-setting of third, half or full.
In versions for RPG2003, the unused CharSet2-feature's code gets completely wiped by this patch.
Originally made and first released by KotatsuAkira.
RPG2000 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.00 | UNKNOWN | 2000-05-07 | 2000-06-19 | 2000-07-11 | 2000-11-13 | 2000-11-15 | 2000-12-27 1.07 | 2001-05-05 1.10 | 2003-03-27 1.50 | 2003-06-25 1.51/1.52 | 2015-07-05 1.60 | 2015-09-15 1.61 | 2017-09-14 1.62 |
✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✔ | ✕ | ✕ | ✕ | ✕ | ✕ | ✔ |
RPG2003 | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1.00 | UNKNOWN1 | UNKNOWN2 | 1.0.2.1 1.0.2.1 | 1.0.3.0 1.0.4.0 | 1.0.5.0 1.0.5.0 | 1.0.6.0 1.0.6.0 | 1.0.7.0 1.0.7.0 | 1.0.8.0 1.0.8.0 | 1.0.9.1 1.0.9.1 | 1.10 | 1.11 | 1.12 | mp210414 |
✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✕ | ✔ | ✔ | ✔ | ✔ | ✔ | ✔ |
RPG2000 | |
---|---|
2000-12-27 1.07 | 2017-09-14 1.62 |
00465B88h 00064F88h | 0046B494h 0006A894h |
RPG2003 | |||||
---|---|---|---|---|---|
1.0.8.0 1.0.8.0 | 1.0.9.1 1.0.9.1 | 1.10 | 1.11 | 1.12 | mp210414 |
00483BAEh 00082FAEh |
MOV BYTE PTR [EDI+618h], 1 ; Prevent strict image sizing JMP __00465B99h NOP NOP NOP NOP NOP NOP NOP NOP
MOV BYTE PTR [EDI+618h], 1 ; Prevent strict image sizing JMP __0046B4A5h NOP NOP NOP NOP NOP NOP NOP NOP
MOV BYTE PTR [EDI+618h], 1 ; Prevent strict image sizing JMP __00483B6Ah NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP NOP
C6871806000001 EB08 90 90 90 90 90 90 90 90
C6871806000001 EB08 90 90 90 90 90 90 90 90
C6871806000001 EB13 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90
RPG2000 | |
---|---|
2000-12-27 1.07 | 2017-09-14 1.62 |
00465C20h 00065020h | 0046B52Ch 0006A92Ch |
RPG2003 | |||||
---|---|---|---|---|---|
1.0.8.0 1.0.8.0 | 1.0.9.1 1.0.9.1 | 1.10 | 1.11 | 1.12 | mp210414 |
00483CC4h 000830C4h |
PROC__00465C20h: PUSH EBP MOV EBP, ESP SUB ESP, 28h PUSH EBX PUSH ESI PUSH EDI MOV DWORD PTR [EBP-08h], ECX MOV DWORD PTR [EBP-04h], EDX MOV EBX, EAX MOV ESI, DWORD PTR [EBP+18h] MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet MOV EDX, ESI CALL PROC__0040F72Ch MOV EDI, EAX MOV EAX, DWORD PTR [EDI+608h] ; CharSet Width PUSH 12 POP ECX CDQ IDIV EAX, ECX ; CharSet Width / 12 = Frame Width PUSH EAX LEA EAX, [EAX+EAX*2] ; Frame Width * 3 = Character Box Width XOR ECX, ECX MOV EDX, DWORD PTR [EBP+14h] ; Character Slot (Top: 0_1_2_3, Bottom: 4_5_6_7) INC EDX CMP EDX, 5 JB LoopSlot SUB EDX, 4 ; Simplify Slot Management: 0=4 1=5 2=6 3=7 LoopSlot: ADD ECX, EAX DEC EDX JNZ LoopSlot SUB ECX, EAx POP EAX MOV EDX, DWORD PTR [EBP+0Ch] ; Character Step ([0], [1|3], [2]) INC EDX CMP EDX, 4 JNE LoopX SUB EDX, 2 ; Trait InMove-StandFrame (3) like Idle (1) LoopX: ADD ECX, EAX DEC EDX JNZ LoopX SUB ECX, EAX MOV DWORD PTR [EBP-18h], ECX MOV EDI, DWORD PTR [EDI+60Ch] ; CharSet Height SHR EDI, 3 ; CharSet Height / 8 = Frame Height MOV ECX, DWORD PTR [EBP+10h] INC ECX XOR EDX, EDX CMP BYTE PTR [EBP+14h], 4 JB LoopY MOV EDX, EDI SHL EDX, 2 LoopY: ADD EDX, EDI DEC ECX JNZ LoopY SUB EDX, EDI MOV DWORD PTR [EBP-14h], EDX PUSH EBX PUSH ESI MOV EBX, DWORD PTR [EBP-08h] MOV ESI, EAX SHR ESI, 1 SUB EBX, ESI TEST EBX, EBX JGE TotallyFine SUB DWORD PTR [EBP-18h], EBX ADD EAX, EBX SAR EBX, 1 SUB DWORD PTR [EBP-08h], EBX TotallyFine: POP ESI POP EBX PUSH EDI PUSH EAX PUSH EDI LEA EDX, [EBP-28h] PUSH EDX MOV ECX, EAX MOV EDX, DWORD PTR [EBP-14h] ; SourceY MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__0040ECD0h ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__0040F72Ch MOV DL, BYTE PTR [EBX+10h] MOV BYTE PTR [EAX+610h], DL PUSH 100 CMP BYTE PTR [EBX+18h], 0 JZ NopeSkip PUSH 0 JMP DoubleNope NopeSkip: PUSH 100 DoubleNope: PUSH 1 MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__0040F72Ch MOV EAX, DWORD PTR [EAX+61Ch] PUSH 100 POP ECX PUSH 100 POP EDX CALL PROC__00450FACh JudgeGroundBush: MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040F72Ch MOV AL, BYTE PTR [EBP+08h] ; BushType SUB AL, 1 JC BushTypeNormal ; Normal JZ BushTypeThird ; Third DEC AL JZ BushTypeHalf ; Half DEC AL JZ BushTypeFull ; Full JMP Finish BushTypeNormal: CALL PROC__CalculateOpacity MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 100% MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040F72Ch PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__004527D0h JMP Finish BushTypeThird: MOV EDI, 11 JMP BushTypePartly BushTypeHalf: MOV EDI, 16 BushTypePartly: CALL PROC__CalculateOpacity MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 100% MOV EAX, DWORD PTR [ESP+04h] ; Character Height SUB EAX, EDI ; Character Height - 11 or 16 TEST EAX, EAX JLE BushTypePartlyLower ; Skip upper Part (smaller than 12 or 17) PUSH EAX ; Character Height - 11 or 16 LEA EAX, [EBP-28h] PUSH EAX MOV ECX, DWORD PTR [ESP+08h] ; Character Width MOV EDX, DWORD PTR [EBP-14h] ; SourceY MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__0040ECD0h ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040F72Ch PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__004527D0h BushTypePartlyLower: CALL PROC__CalculateOpacity SAR ECX, 1 JNS BushTypePartlyNoCarry ADC ECX, 0 ; (BaseOpacity - (TrLevel * 30)) / 2 BushTypePartlyNoCarry: MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 50% MOV EAX, DWORD PTR [ESP+04h] ; Character Height CMP EAX, EDI JLE BushTypePartlyLowerOkay PUSH EDI ; Get 11 or 16 if Character Height is above 11 or 16 JMP BushTypePartlyLowerBig BushTypePartlyLowerOkay: PUSH EAX ; Character Height is below or equal 11 or 16 BushTypePartlyLowerBig: LEA EAX, [EBP-28h] PUSH EAX MOV ECX, DWORD PTR [ESP+08h] ; Character Width (08h + ESP Shift 08h) MOV EDX, DWORD PTR [EBP-14h] ; SourceY ADD EDX, DWORD PTR [ESP+0Ch] ; Character Height (0Ch + ESP Shift 08h) SUB EDX, EDI ; SourceY + Height - {11 or 16} MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__0040ECD0h ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040F72Ch PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase ADD ECX, DWORD PTR [ESP+0Ch] ; Character Height (0Ch + ESP Shift 08h) SUB ECX, EDI ; ScreenY - {11 or 16} CALL PROC__004527D0h JMP Finish BushTypeFull: CALL PROC__CalculateOpacity SAR ECX, 1 JNS BushTypeFullNoCarry ADC ECX, 0 BushTypeFullNoCarry: MOV DWORD PTR [EAX+614h], ECX ; Set Visibility to relative 50% MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040F72Ch PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__004527D0h Finish: POP EDI POP EDI POP EDI POP ESI POP EBX MOV ESP, EBP POP EBP RET 0018h NOP NOP NOP PROC__GetPositionBase: MOV ECX, DWORD PTR [EBP+1Ch] ; ScreenY SUB ECX, DWORD PTR [ESP+10h] ; ScreenY - Character Height {ESP shifted} MOV EDX, DWORD PTR [EBP-08h] ; ScreenX SHL EDX, 1 ; ScreenX * 2 SUB EDX, DWORD PTR [ESP+0Ch] ; (ScreenX * 2) - Character Width {ESP shifted} SHR EDX, 1 ; ((ScreenX * 2) - Character Width) / 2 MOV EAX, DWORD PTR [EBP-04h] RET NOP NOP PROC__DeportRectData: PUSH ESI PUSH EDI LEA ESI, [EBP-28h] LEA EDI, [EBP-18h] MOVSD MOVSD MOVSD MOVSD POP EDI POP ESI RET NOP PROC__CalculateOpacity: MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__0040F72Ch IMUL EDX, [EBX+14h], 30 ; Character's TransparencyLevel * 30 XOR ECX, ECX MOV CL, 255 ; BaseOpacity SUB ECX, EDX ; BaseOpacity - (TransparencyLevel * 30) RET NOP NOP NOP (220 more NOPs...)
PROC__0046B52Ch: PUSH EBP MOV EBP, ESP SUB ESP, 28h PUSH EBX PUSH ESI PUSH EDI MOV DWORD PTR [EBP-08h], ECX MOV DWORD PTR [EBP-04h], EDX MOV EBX, EAX MOV ESI, DWORD PTR [EBP+18h] MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet MOV EDX, ESI CALL PROC__0040FBC8h MOV EDI, EAX MOV EAX, DWORD PTR [EDI+608h] ; CharSet Width PUSH 12 POP ECX CDQ IDIV EAX, ECX ; CharSet Width / 12 = Frame Width PUSH EAX LEA EAX, [EAX+EAX*2] ; Frame Width * 3 = Character Box Width XOR ECX, ECX MOV EDX, DWORD PTR [EBP+14h] ; Character Slot (Top: 0_1_2_3, Bottom: 4_5_6_7) INC EDX CMP EDX, 5 JB LoopSlot SUB EDX, 4 ; Simplify Slot Management: 0=4 1=5 2=6 3=7 LoopSlot: ADD ECX, EAX DEC EDX JNZ LoopSlot SUB ECX, EAx POP EAX MOV EDX, DWORD PTR [EBP+0Ch] ; Character Step ([0], [1|3], [2]) INC EDX CMP EDX, 4 JNE LoopX SUB EDX, 2 ; Trait InMove-StandFrame (3) like Idle (1) LoopX: ADD ECX, EAX DEC EDX JNZ LoopX SUB ECX, EAX MOV DWORD PTR [EBP-18h], ECX MOV EDI, DWORD PTR [EDI+60Ch] ; CharSet Height SHR EDI, 3 ; CharSet Height / 8 = Frame Height MOV ECX, DWORD PTR [EBP+10h] INC ECX XOR EDX, EDX CMP BYTE PTR [EBP+14h], 4 JB LoopY MOV EDX, EDI SHL EDX, 2 LoopY: ADD EDX, EDI DEC ECX JNZ LoopY SUB EDX, EDI MOV DWORD PTR [EBP-14h], EDX PUSH EBX PUSH ESI MOV EBX, DWORD PTR [EBP-08h] MOV ESI, EAX SHR ESI, 1 SUB EBX, ESI TEST EBX, EBX JGE TotallyFine SUB DWORD PTR [EBP-18h], EBX ADD EAX, EBX SAR EBX, 1 SUB DWORD PTR [EBP-08h], EBX TotallyFine: POP ESI POP EBX PUSH EDI PUSH EAX PUSH EDI LEA EDX, [EBP-28h] PUSH EDX MOV ECX, EAX MOV EDX, DWORD PTR [EBP-14h] ; SourceY MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__0040F16Ch ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__0040FBC8h MOV DL, BYTE PTR [EBX+10h] MOV BYTE PTR [EAX+610h], DL PUSH 100 CMP BYTE PTR [EBX+18h], 0 JZ NopeSkip PUSH 0 JMP DoubleNope NopeSkip: PUSH 100 DoubleNope: PUSH 1 MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__0040FBC8h MOV EAX, DWORD PTR [EAX+61Ch] PUSH 100 POP ECX PUSH 100 POP EDX CALL PROC__00451878h JudgeGroundBush: MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040FBC8h MOV AL, BYTE PTR [EBP+08h] ; BushType SUB AL, 1 JC BushTypeNormal ; Normal JZ BushTypeThird ; Third DEC AL JZ BushTypeHalf ; Half DEC AL JZ BushTypeFull ; Full JMP Finish BushTypeNormal: CALL PROC__CalculateOpacity MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 100% MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040FBC8h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__0045309Ch JMP Finish BushTypeThird: MOV EDI, 11 JMP BushTypePartly BushTypeHalf: MOV EDI, 16 BushTypePartly: CALL PROC__CalculateOpacity MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 100% MOV EAX, DWORD PTR [ESP+04h] ; Character Height SUB EAX, EDI ; Character Height - 11 or 16 TEST EAX, EAX JLE BushTypePartlyLower ; Skip upper Part (smaller than 12 or 17) PUSH EAX ; Character Height - 11 or 16 LEA EAX, [EBP-28h] PUSH EAX MOV ECX, DWORD PTR [ESP+08h] ; Character Width MOV EDX, DWORD PTR [EBP-14h] ; SourceY MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__0040F16Ch ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040FBC8h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__0045309Ch BushTypePartlyLower: CALL PROC__CalculateOpacity SAR ECX, 1 JNS BushTypePartlyNoCarry ADC ECX, 0 ; (BaseOpacity - (TrLevel * 30)) / 2 BushTypePartlyNoCarry: MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 50% MOV EAX, DWORD PTR [ESP+04h] ; Character Height CMP EAX, EDI JLE BushTypePartlyLowerOkay PUSH EDI ; Get 11 or 16 if Character Height is above 11 or 16 JMP BushTypePartlyLowerBig BushTypePartlyLowerOkay: PUSH EAX ; Character Height is below or equal 11 or 16 BushTypePartlyLowerBig: LEA EAX, [EBP-28h] PUSH EAX MOV ECX, DWORD PTR [ESP+08h] ; Character Width (08h + ESP Shift 08h) MOV EDX, DWORD PTR [EBP-14h] ; SourceY ADD EDX, DWORD PTR [ESP+0Ch] ; Character Height (0Ch + ESP Shift 08h) SUB EDX, EDI ; SourceY + Height - {11 or 16} MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__0040F16Ch ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040FBC8h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase ADD ECX, DWORD PTR [ESP+0Ch] ; Character Height (0Ch + ESP Shift 08h) SUB ECX, EDI ; ScreenY - {11 or 16} CALL PROC__0045309Ch JMP Finish BushTypeFull: CALL PROC__CalculateOpacity SAR ECX, 1 JNS BushTypeFullNoCarry ADC ECX, 0 BushTypeFullNoCarry: MOV DWORD PTR [EAX+614h], ECX ; Set Visibility to relative 50% MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__0040FBC8h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__0045309Ch Finish: POP EDI POP EDI POP EDI POP ESI POP EBX MOV ESP, EBP POP EBP RET 0018h NOP NOP NOP PROC__GetPositionBase: MOV ECX, DWORD PTR [EBP+1Ch] ; ScreenY SUB ECX, DWORD PTR [ESP+10h] ; ScreenY - Character Height {ESP shifted} MOV EDX, DWORD PTR [EBP-08h] ; ScreenX SHL EDX, 1 ; ScreenX * 2 SUB EDX, DWORD PTR [ESP+0Ch] ; (ScreenX * 2) - Character Width {ESP shifted} SHR EDX, 1 ; ((ScreenX * 2) - Character Width) / 2 MOV EAX, DWORD PTR [EBP-04h] RET NOP NOP PROC__DeportRectData: PUSH ESI PUSH EDI LEA ESI, [EBP-28h] LEA EDI, [EBP-18h] MOVSD MOVSD MOVSD MOVSD POP EDI POP ESI RET NOP PROC__CalculateOpacity: MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__0040FBC8h IMUL EDX, [EBX+14h], 30 ; Character's TransparencyLevel * 30 XOR ECX, ECX MOV CL, 255 ; BaseOpacity SUB ECX, EDX ; BaseOpacity - (TransparencyLevel * 30) RET NOP NOP NOP (220 more NOPs...)
PROC__00483CC4h: PUSH EBP MOV EBP, ESP SUB ESP, 28h PUSH EBX PUSH ESI PUSH EDI MOV DWORD PTR [EBP-08h], ECX MOV DWORD PTR [EBP-04h], EDX MOV EBX, EAX MOV ESI, DWORD PTR [EBP+1Ch] MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet MOV EDX, ESI CALL PROC__00417738h MOV EDI, EAX MOV EAX, DWORD PTR [EDI+608h] ; CharSet Width PUSH 12 POP ECX CDQ IDIV EAX, ECX ; CharSet Width / 12 = Frame Width PUSH EAX LEA EAX, [EAX+EAX*2] ; Frame Width * 3 = Character Box Width XOR ECX, ECX MOV EDX, DWORD PTR [EBP+18h] ; Character Slot (Top: 0_1_2_3, Bottom: 4_5_6_7) INC EDX CMP EDX, 5 JB LoopSlot SUB EDX, 4 ; Simplify Slot Management: 0=4 1=5 2=6 3=7 LoopSlot: ADD ECX, EAX DEC EDX JNZ LoopSlot SUB ECX, EAx POP EAX MOV EDX, DWORD PTR [EBP+10h] ; Character Step ([0], [1|3], [2]) INC EDX CMP EDX, 4 JNE LoopX SUB EDX, 2 ; Trait InMove-StandFrame (3) like Idle (1) LoopX: ADD ECX, EAX DEC EDX JNZ LoopX SUB ECX, EAX MOV DWORD PTR [EBP-18h], ECX MOV EDI, DWORD PTR [EDI+60Ch] ; CharSet Height SHR EDI, 3 ; CharSet Height / 8 = Frame Height MOV ECX, DWORD PTR [EBP+14h] INC ECX XOR EDX, EDX CMP BYTE PTR [EBP+18h], 4 JB LoopY MOV EDX, EDI SHL EDX, 2 LoopY: ADD EDX, EDI DEC ECX JNZ LoopY SUB EDX, EDI MOV DWORD PTR [EBP-14h], EDX PUSH EBX PUSH ESI MOV EBX, DWORD PTR [EBP-08h] MOV ESI, EAX SHR ESI, 1 SUB EBX, ESI TEST EBX, EBX JGE TotallyFine SUB DWORD PTR [EBP-18h], EBX ADD EAX, EBX SAR EBX, 1 SUB DWORD PTR [EBP-08h], EBX TotallyFine: POP ESI POP EBX PUSH EDI PUSH EAX PUSH EDI LEA EDX, [EBP-28h] PUSH EDX MOV ECX, EAX MOV EDX, DWORD PTR [EBP-14h] ; SourceY MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__00416140h ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__00417738h MOV DL, BYTE PTR [EBX+10h] MOV BYTE PTR [EAX+610h], DL PUSH 100 CMP BYTE PTR [EBX+18h], 0 JZ NopeSkip PUSH 0 JMP DoubleNope NopeSkip: PUSH 100 DoubleNope: PUSH 1 MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__00417738h MOV EAX, DWORD PTR [EAX+61Ch] PUSH 100 POP ECX PUSH 100 POP EDX CALL PROC__00466C40h JudgeGroundBush: MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__00417738h MOV AL, BYTE PTR [EBP+0Ch] ; BushType SUB AL, 1 JC BushTypeNormal ; Normal JZ BushTypeThird ; Third DEC AL JZ BushTypeHalf ; Half DEC AL JZ BushTypeFull ; Full JMP Finish BushTypeNormal: CALL PROC__CalculateOpacity MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 100% MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__00417738h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__004684C0h JMP Finish BushTypeThird: MOV EDI, 11 JMP BushTypePartly BushTypeHalf: MOV EDI, 16 BushTypePartly: CALL PROC__CalculateOpacity MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 100% MOV EAX, DWORD PTR [ESP+04h] ; Character Height SUB EAX, EDI ; Character Height - 11 or 16 TEST EAX, EAX JLE BushTypePartlyLower ; Skip upper Part (smaller than 12 or 17) PUSH EAX ; Character Height - 11 or 16 LEA EAX, [EBP-28h] PUSH EAX MOV ECX, DWORD PTR [ESP+08h] ; Character Width MOV EDX, DWORD PTR [EBP-14h] ; SourceY MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__00416140h ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__00417738h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__004684C0h BushTypePartlyLower: CALL PROC__CalculateOpacity SAR ECX, 1 JNS BushTypePartlyNoCarry ADC ECX, 0 ; (BaseOpacity - (TrLevel * 30)) / 2 BushTypePartlyNoCarry: MOV DWORD PTR [EAX+614h], ECX ; Set Opacity to relative 50% MOV EAX, DWORD PTR [ESP+04h] ; Character Height CMP EAX, EDI JLE BushTypePartlyLowerOkay PUSH EDI ; Get 11 or 16 if Character Height is above 11 or 16 JMP BushTypePartlyLowerBig BushTypePartlyLowerOkay: PUSH EAX ; Character Height is below or equal 11 or 16 BushTypePartlyLowerBig: LEA EAX, [EBP-28h] PUSH EAX MOV ECX, DWORD PTR [ESP+08h] ; Character Width (08h + ESP Shift 08h) MOV EDX, DWORD PTR [EBP-14h] ; SourceY ADD EDX, DWORD PTR [ESP+0Ch] ; Character Height (0Ch + ESP Shift 08h) SUB EDX, EDI ; SourceY + Height - {11 or 16} MOV EAX, DWORD PTR [EBP-18h] ; SourceX CALL PROC__00416140h ; -28h=SrcX, -24h=SrcY, -20h=W+SrcX, -1Ch=H+SrcY CALL PROC__DeportRectData MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__00417738h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase ADD ECX, DWORD PTR [ESP+0Ch] ; Character Height (0Ch + ESP Shift 08h) SUB ECX, EDI ; ScreenY - {11 or 16} CALL PROC__004684C0h JMP Finish BushTypeFull: CALL PROC__CalculateOpacity SAR ECX, 1 JNS BushTypeFullNoCarry ADC ECX, 0 BushTypeFullNoCarry: MOV DWORD PTR [EAX+614h], ECX ; Set Visibility to relative 50% MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] ; AuroraSheet CALL PROC__00417738h PUSH EAX LEA EAX, [EBP-18h] PUSH EAX CALL PROC__GetPositionBase CALL PROC__004684C0h Finish: POP EDI POP EDI POP EDI POP ESI POP EBX MOV ESP, EBP POP EBP RET 001Ch NOP NOP NOP PROC__GetPositionBase: MOV ECX, DWORD PTR [EBP+20h] ; ScreenY SUB ECX, DWORD PTR [ESP+10h] ; ScreenY - Character Height {ESP shifted} MOV EDX, DWORD PTR [EBP-08h] ; ScreenX SHL EDX, 1 ; ScreenX * 2 SUB EDX, DWORD PTR [ESP+0Ch] ; (ScreenX * 2) - Character Width {ESP shifted} SHR EDX, 1 ; ((ScreenX * 2) - Character Width) / 2 MOV EAX, DWORD PTR [EBP-04h] RET NOP NOP PROC__DeportRectData: PUSH ESI PUSH EDI LEA ESI, [EBP-28h] LEA EDI, [EBP-18h] MOVSD MOVSD MOVSD MOVSD POP EDI POP ESI RET NOP PROC__CalculateOpacity: MOV EDX, ESI MOV EAX, DWORD PTR [EBX+08h] CALL PROC__00417738h IMUL EDX, [EBX+14h], 30 ; Character's TransparencyLevel * 30 XOR ECX, ECX MOV CL, 255 ; BaseOpacity SUB ECX, EDX ; BaseOpacity - (TransparencyLevel * 30) RET NOP NOP NOP (1020 more NOPs...)
55 89E5 83EC28 53 56 57 894DF8 8955FC 89C3 8B7518 8B4308 89F2 E8EE9AFAFF 89C7 8B8708060000 6A0C 59 99 F7F9 50 8D0440 31C9 8B5514 42 83FA05 7203 83EA04 01C1 4A 75FB 29C1 58 8B550C 42 83FA04 7503 83EA02 01C1 4A 75FB 29C1 894DE8 8BBF0C060000 C1EF03 8B4D10 41 31D2 807D1404 7205 89FA C1E202 01FA 49 75FB 29FA 8955EC 53 56 8B5DF8 89C6 D1EE 29F3 85DB 7D0A 295DE8 01D8 D1FB 295DF8 5E 5B 57 50 57 8D55D8 52 89C1 8B55EC 8B45E8 E80190FAFF E88C010000 89F2 8B4308 E84E9AFAFF 8A5310 889010060000 6A64 807B1800 7404 6A00 EB02 6A64 6A01 89F2 8B4308 E82B9AFAFF 8B801C060000 6A64 59 6A64 5A E89AB2FEFF 89F2 8B4308 E8109AFAFF 8A4508 2C01 7213 743A FEC8 743D FEC8 0F84DE000000 E904010000 E835010000 898814060000 89F2 8B4308 E8E199FAFF 50 8D45E8 50 E8F3000000 E876CAFEFF E9DB000000 BF0B000000 EB05 BF10000000 E800010000 898814060000 8B442404 29F8 85C0 7E32 50 8D45D8 50 8B4C2408 8B55EC 8B45E8 E83C8FFAFF E8C7000000 89F2 8B4308 E88999FAFF 50 8D45E8 50 E89B000000 E81ECAFEFF E8B9000000 D1F9 7903 83D100 898814060000 8B442404 39F8 7E03 57 EB01 50 8D45D8 50 8B4C2408 8B55EC 0354240C 29FA 8B45E8 E8E78EFAFF E872000000 89F2 8B4308 E83499FAFF 50 8D45E8 50 E846000000 034C240C 29F9 E8C3C9FEFF EB2B E85C000000 D1F9 7903 83D100 898814060000 89F2 8B4308 E80199FAFF 50 8D45E8 50 E813000000 E896C9FEFF 5F 5F 5F 5E 5B 89EC 5D C21800 90 8D00 8B4D1C 2B4C2410 8B55F8 D1E2 2B54240C D1EA 8B45FC C3 8D00 56 57 8D75D8 8D7DE8 A5 A5 A5 A5 5F 5E C3 90 89F2 8B4308 E8B298FAFF 6B53141E 31C9 B1FF 29D1 C3 8D4000
55 89E5 83EC28 53 56 57 894DF8 8955FC 89C3 8B7518 8B4308 89F2 E87E46FAFF 89C7 8B8708060000 6A0C 59 99 F7F9 50 8D0440 31C9 8B5514 42 83FA05 7203 83EA04 01C1 4A 75FB 29C1 58 8B550C 42 83FA04 7503 83EA02 01C1 4A 75FB 29C1 894DE8 8BBF0C060000 C1EF03 8B4D10 41 31D2 807D1404 7205 89FA C1E202 01FA 49 75FB 29FA 8955EC 53 56 8B5DF8 89C6 D1EE 29F3 85DB 7D0A 295DE8 01D8 D1FB 295DF8 5E 5B 57 50 57 8D55D8 52 89C1 8B55EC 8B45E8 E8913BFAFF E88C010000 89F2 8B4308 E8DE45FAFF 8A5310 889010060000 6A64 807B1800 7404 6A00 EB02 6A64 6A01 89F2 8B4308 E8BB45FAFF 8B801C060000 6A64 59 6A64 5A E85A62FEFF 89F2 8B4308 E8A045FAFF 8A4508 2C01 7213 743A FEC8 743D FEC8 0F84DE000000 E904010000 E835010000 898814060000 89F2 8B4308 E87145FAFF 50 8D45E8 50 E8F3000000 E8367AFEFF E9DB000000 BF0B000000 EB05 BF10000000 E800010000 898814060000 8B442404 29F8 85C0 7E32 50 8D45D8 50 8B4C2408 8B55EC 8B45E8 E8CC3AFAFF E8C7000000 89F2 8B4308 E81945FAFF 50 8D45E8 50 E89B000000 E8DE79FEFF E8B9000000 D1F9 7903 83D100 898814060000 8B442404 39F8 7E03 57 EB01 50 8D45D8 50 8B4C2408 8B55EC 0354240C 29FA 8B45E8 E8773AFAFF E872000000 89F2 8B4308 E8C444FAFF 50 8D45E8 50 E846000000 034C240C 29F9 E88379FEFF EB2B E85C000000 D1F9 7903 83D100 898814060000 89F2 8B4308 E89144FAFF 50 8D45E8 50 E813000000 E85679FEFF 5F 5F 5F 5E 5B 89EC 5D C21800 90 8D00 8B4D1C 2B4C2410 8B55F8 D1E2 2B54240C D1EA 8B45FC C3 8D00 56 57 8D75D8 8D7DE8 A5 A5 A5 A5 5F 5E C3 90 89F2 8B4308 E84244FAFF 6B53141E 31C9 B1FF 29D1 C3 90 89C0
55 89E5 83EC28 53 56 57 894DF8 8955FC 89C3 8B751C 8B4308 89F2 E8563AF9FF 89C7 8B8708060000 6A0C 59 99 F7F9 50 8D0440 31C9 8B5518 42 83FA05 7203 83EA04 01C1 4A 75FB 29C1 58 8B5510 42 83FA04 7503 83EA02 01C1 4A 75FB 29C1 894DE8 8BBF0C060000 C1EF03 8B4D14 41 31D2 807D1804 7205 89FA C1E202 01FA 49 75FB 29FA 8955EC 53 56 8B5DF8 89C6 D1EE 29F3 85DB 7D0A 295DE8 01D8 D1FB 295DF8 5E 5B 57 50 57 8D55D8 52 89C1 8B55EC 8B45E8 E8CD23F9FF E88C010000 89F2 8B4308 E8B639F9FF 8A5310 889010060000 6A64 807B1800 7404 6A00 EB02 6A64 6A01 89F2 8B4308 E89339F9FF 8B801C060000 6A64 59 6A64 5A E88A2EFEFF 89F2 8B4308 E87839F9FF 8A450C 2C01 7213 743A FEC8 743D FEC8 0F84DE000000 E904010000 E835010000 898814060000 89F2 8B4308 E84939F9FF 50 8D45E8 50 E8F3000000 E8C246FEFF E9DB000000 BF0B000000 EB05 BF10000000 E800010000 898814060000 8B442404 29F8 85C0 7E32 50 8D45D8 50 8B4C2408 8B55EC 8B45E8 E80823F9FF E8C7000000 89F2 8B4308 E8F138F9FF 50 8D45E8 50 E89B000000 E86A46FEFF E8B9000000 D1F9 7903 83D100 898814060000 8B442404 39F8 7E03 57 EB01 50 8D45D8 50 8B4C2408 8B55EC 0354240C 29FA 8B45E8 E8B322F9FF E872000000 89F2 8B4308 E89C38F9FF 50 8D45E8 50 E846000000 034C240C 29F9 E80F46FEFF EB2B E85C000000 D1F9 7903 83D100 898814060000 89F2 8B4308 E86938F9FF 50 8D45E8 50 E813000000 E8E245FEFF 5F 5F 5F 5E 5B 89EC 5D C21C00 90 8D00 8B4D20 2B4C2410 8B55F8 D1E2 2B54240C D1EA 8B45FC C3 8D00 56 57 8D75D8 8D7DE8 A5 A5 A5 A5 5F 5E C3 90 89F2 8B4308 E81A38F9FF 6B53141E 31C9 B1FF 29D1 C3 90 89C0