increases stripper limit from 16 to 127

This commit is contained in:
duncathan 2021-03-23 19:29:02 -06:00
parent b5115d4d03
commit 5b6b353fff
10 changed files with 502 additions and 416 deletions

View File

@ -3,60 +3,41 @@ offset 40cf90
#define
count=EBP-4
Strip_addr=0049D628
Credit=49D620
Credit.mode=49D620
MAX_STRIP=7F
size=50
Strip.flag=EAX
Strip.x=EAX+4
Strip.y=EAX+8
Strip.cast=EAX+0C
Strip.str=EAX+10
#enddefine
push ebp
mov ebp, esp
push ecx
:ActionStripper
PUSH EBP
MOV EBP,ESP
PUSH ECX
MOV [count],0 // s = 0
mov eax, [Strip_addr]
mov edx, MAX_STRIP
MOV ECX,[Strip_addr] // ECX = *Strip
#define
Strip.flag=ECX
Strip.x=ECX+4
Strip.y=ECX+8
Strip.cast=ECX+0C
Strip.str=ECX+10
#enddefine
:$LL4@ActionStri
test BYTE [Strip.flag], 80
je :$LN5@ActionStri
cmp [Credit.mode], 0
je :$LN5@ActionStri
JMP :loop
sub [Strip.y], 100
:increment
MOV EAX,[count]
ADD EAX,1
MOV [count],EAX // s++
:loop
CMP [count],MAX_STRIP // s < MAX_STRIP
JGE :end
:$LN5@ActionStri
cmp [Strip.y], -2000
jg :$LN2@ActionStri
MOV EBX,[count]
IMUL EBX,EBX,size // EBX = s * sizeof(STRIP)
and [Strip.flag], 0
:move_up
MOV EAX,[EBX+Strip.flag]
AND EAX,00000080
JE :remove_offscreen
CMP [Credit],0
JE :remove_offscreen
:$LN2@ActionStri
add eax, size
sub edx, 1
jne :$LL4@ActionStri
MOV EAX,[EBX+Strip.y]
SUB EAX,100
MOV [EBX+Strip.y],EAX
:remove_offscreen
CMP [EBX+Strip.y],-2000
JG :endloop
MOV [EBX+Strip.flag],0
:endloop
JMP :increment
:end
MOV ESP,EBP
POP EBP
RETN
INT3
leave
retn

View File

@ -8,18 +8,28 @@ Strip_addr=0049d628
PUSH EBP
MOV EBP,ESP
PUSH 18
PUSH 0
PUSH 0049D610
CALL 00480D30
ADD ESP,0C
/*
PUSH 500
PUSH 0
PUSH 0049D628
CALL 00480D30
ADD ESP,0C
*/
PUSH size
PUSH MAX_STRIP
CALL 00487701
ADD ESP,8
MOV [Strip_addr],EAX
POP EBP
RETN
INT3

View File

@ -4,4 +4,5 @@ LoadGenericDataMAX_STRIP.txt
PutStripper.txt
RestoreStripper.txt
SetStripper.txt
StartCreditScript.txt
StartCreditScript.txt
ReleaseCreditScript.txt

View File

@ -1,120 +1,135 @@
offset 40D010
#define
count=EBP-14
Strip_addr=0049D628
Credit=49D620
; Constants
MAX_STRIP=7F
MAX_STRIPx10=7f0
size=50
; Locals
ArrayPad=EBP-4
rc_addr=EBP-14
rc.left=EBP-14
rc.right=EBP-0C
rc.top=EBP-10
rc.bottom=EBP-8
; References
Strip_addr=0049D628
Strip.flag=ecx
Strip.x=ecx+4
Strip.y=ecx+8
Strip.cast=ecx+0c
Strip.str=ecx+10
grcFull=0048f92c
rc = EBP-10
rcleft=EBP-10
rcright=EBP-8
rctop=EBP-0C
rcbottom=EBP-4
; Functions
PutBitmap3=0040c3c0
DIV200=data 99 81 E2 FF 01 00 00 03 C2 C1 F8 09
; Builtins
___security_cookie=498b20
__security_check_cookie=00480dc1
#enddefine
PUSH EBP
MOV EBP,ESP
SUB ESP,14
MOV [count],0 // s = 0
push ebp
mov ebp,esp
sub esp, 14 ; 00000018H
MOV ECX,[Strip_addr] //ECX = *Strip
#define
Strip.flag=ECX
Strip.x=ECX+4
Strip.y=ECX+8
Strip.cast=ECX+0C
Strip.str=ECX+10
#enddefine
JMP :loop
push ebx
push esi
push edi
; Line 92
xor esi, esi
xor edi, edi
:increment
MOV EBX,[count]
INC EBX
MOV [count],EBX
:loop
CMP EBX,MAX_STRIP
JGE :end
:$LL4@PutStrippe
; Line 94
mov ecx, [Strip_addr]
test BYTE [esi+Strip.flag], 80 ; 00000080H
je :$LN2@PutStrippe
; Line 97
and [rc.left], 0
mov [rc.right], 140 ; 00000140H
mov [rc.top], edi
lea eax, [edi+10]
mov [rc.bottom], eax
IMUL EBX,EBX,size //EBX = s * sizeof(STRIP)
; Line 102
push 23 ; 00000023H
MOV EDX,[EBX+Strip.flag]
AND EDX,00000080
JE :increment
lea eax, [rc_addr]
push eax
//rects
MOV [rcleft],0
MOV [rcright],140
MOV EAX,[count]
SHL EAX,4
MOV [rctop],EAX
ADD EAX,10
MOV [rcbottom],EAX
mov ebx, 1ff ; 000001ffH
mov eax, [esi+Strip.y]
cdq
and edx, ebx
add eax, edx
sar eax, 9
push eax
//arg5 = SURFACE_ID_CREDIT_CAST
PUSH 23
//arg4 = &rc
LEA EDX,[rc]
PUSH EDX
//arg3 = Strip[s].y / 0x200
MOV EAX,[EBX+Strip.y]
DIV200
PUSH EAX
//arg2 = Strip[s].x / 0x200
MOV EAX,[EBX+Strip.x]
DIV200
PUSH EAX
//arg1 = &grcFull
PUSH grcFull
//PutBitmap3()
CALL 0040C3C0
ADD ESP,14
mov eax, [esi+Strip.x]
cdq
and edx, ebx
add eax, edx
sar eax, 9
push eax
//rects
MOV EAX,[EBX+Strip.cast]
CDQ
PUSH ECX
MOV ECX,0D
IDIV ECX
POP ECX
IMUL EDX,EDX,18
MOV [rc.left],EDX
ADD EDX,18
MOV [rc.right],EDX
IMUL EAX,EAX,18
MOV [rc.top],EAX
ADD EAX,18
MOV [rc.bottom],EAX
push grcFull
//arg5 = SURFACE_ID_CASTS
PUSH 25
//arg4 = &rc
LEA EAX,[rc]
PUSH EAX
//arg3 = Strip[s].y / 0x200 - 8
MOV EAX,[EBX+Strip.y]
DIV200
SUB EAX,8
PUSH EAX
//arg2 = Strip[s].x / 0x200 - 24
MOV EAX,[EBX+Strip.x]
DIV200
SUB EAX,18
PUSH EAX
//arg1 = &grcFull
PUSH grcFull
//PutBitmap3()
CALL 0040C3C0
ADD ESP,14
call PutBitmap3
JMP :increment
; Line 110
push 25 ; 00000025H
:end
MOV ESP,EBP
POP EBP
RETN
INT3
mov ecx, [Strip_addr]
mov eax, [esi+Strip.cast]
cdq
mov ebx, 0d
idiv ebx
imul edx, edx, 18
imul eax, eax, 18
mov [rc.left], edx
add edx, 18 ; 00000018H
mov [rc.right], edx
mov [rc.top], eax
add eax, 18
mov [rc.bottom], eax
lea eax, [rc_addr]
push eax
mov ebx, 1ff
mov eax, [esi+Strip.y]
cdq
and edx, ebx
add eax, edx
sar eax, 9
sub eax, 8
push eax
mov eax, [esi+Strip.x]
cdq
and edx, ebx
add eax, edx
sar eax, 9
sub eax, 18 ; 00000018H
push eax
push grcFull
call PutBitmap3
add esp, 28 ; 00000028H
:$LN2@PutStrippe
; Line 92
add edi, 10 ; 00000010H
add esi, size ; 00000050H
cmp edi, MAX_STRIPx10 ; 000007f0H
jl :$LL4@PutStrippe
; Line 113
pop edi
pop esi
pop ebx
leave
retn

View File

@ -0,0 +1,32 @@
offset 40d410
#define
Credit.pData=49d614
Strip=49d628
_free=0048128b
#enddefine
push ebp
mov ebp,esp
mov eax, [Credit.pData]
test eax, eax
je :$LN2@ReleaseCre
push eax
call _free
pop ecx
and [Credit.pData], 0
:$LN2@ReleaseCre
mov eax, [Strip]
test eax, eax
je :$LN3@ReleaseCre
push eax
call _free
pop ecx
:$LN3@ReleaseCre
retn

View File

@ -1,79 +1,83 @@
offset 40d240
#define
count=EBP-14
Strip_addr=0049D628
; Constants
MAX_STRIPx10=7F0
; Locals
ArrayPad = EBP-4
rc_addr = EBP-14
rc.left=EBP-14
rc.right=EBP-0c
rc.top=EBP-10
rc.bottom=EBP-8
; References
Credit=49D620
MAX_STRIP=7F
size=50
Strip_addr=0049D628
Strip.flag=0049D628
Strip.x=0049D62C
Strip.y=0049D630
Strip.cast=0049D634
Strip.str=0049D638
rc = EBP-10
rcleft=EBP-10
rcright=EBP-8
rctop=EBP-0C
rcbottom=EBP-4
; Functions
CortBox2=0040ca80
PutText2=0040ceb0
; Builtins
___security_cookie=498b20
__security_check_cookie=00480dc1
#enddefine
PUSH EBP
MOV EBP,ESP
SUB ESP,14
MOV [count],0
push ebp
mov ebp, esp
sub esp, 14 ; 00000014H
push esi
push edi
; Line 151
xor edi, edi
xor esi, esi
:$LL4@RestoreStr
; Line 153
mov eax, [Strip_addr]
test [edi+eax], 128 ; 00000080H
je :$LN2@RestoreStr
; Line 155
and [rc.left], 0
; Line 156
mov [rc.right], 140 ; 00000140H
; Line 157
mov [rc.top], esi
; Line 158
lea eax, [esi+16]
mov [rc.bottom], eax
; Line 160
push 23 ; 00000023H
push 0
lea eax, [rc_addr]
push eax
MOV ECX,[Strip_addr] // ECX = *Strip
#define
Strip.flag=ECX
Strip.x=ECX+4
Strip.y=ECX+8
Strip.cast=ECX+0C
Strip.str=ECX+10
#enddefine
JMP :loop
:increment
MOV EAX,[count]
INC EAX
MOV [count],EAX
:loop
CMP [count],MAX_STRIP
JGE :end
MOV EBX,[count]
IMUL EBX,EBX,size
MOV EDX,[EBX+Strip.flag]
AND EDX,00000080
JE :increment
MOV [rcleft],0
MOV [rcright],140
MOV EAX,[count]
SHL EAX,4
MOV [rctop],EAX
ADD EAX,10
MOV [rcbottom],EAX
PUSH 23
PUSH 0
LEA EDX,[rc]
PUSH EDX
CALL 0040CA80
ADD ESP,0C
PUSH 23
PUSH 0FEFFFF
LEA EAX,[EBX+Strip.str]
PUSH EAX
MOV EAX,[rctop]
PUSH EAX
PUSH 0
CALL 0040CEB0
ADD ESP,14
JMP :increment
:end
MOV ESP,EBP
POP EBP
RETN
INT3
call CortBox2
; Line 161
push 23 ; 00000023H
push 00feffff ; 00feffffH
mov eax, [Strip_addr]
add eax, 10 ; 00000010H
add eax, edi
push eax
push [rc.top]
push 0
call PutText2
add esp, 20 ; 00000020H
:$LN2@RestoreStr
; Line 151
add esi, 10 ; 00000010H
add edi, 50 ; 00000050H
cmp esi, MAX_STRIPx10 ; 000007f0H
jl :$LL4@RestoreStr
; Line 164
pop edi
pop esi
leave
retn

View File

@ -1,92 +1,116 @@
offset 40d150
#define
count=EBP-14
Strip_addr=0049D628
Credit=49D620
; Constants
MAX_STRIP=7F
size=50
rc=EBP-10
rcleft=EBP-10
rcright=EBP-8
rctop=EBP-14
rcbottom=EBP-0C
; Locals
ArrayPad=EBP-4
rc_addr=EBP-14
rc.left=EBP-14
rc.right=EBP-0C
rc.top=EBP-10
rc.bottom=EBP-8
; Arguments
argx=EBP+8
argy=EBP+0C
argtext=EBP+10
argcast=EBP+14
; References
Strip_addr=0049D628
Strip.flag=edx
Strip.x=edx+4
Strip.y=edx+8
Strip.cast=edx+0c
Strip.str=edx+10
; Functions
CortBox2=0040ca80
PutText2=0040ceb0
; Builtins
___security_cookie=498b20
__security_check_cookie=00480dc1
_strcpy=00481100
#enddefine
PUSH EBP
MOV EBP,ESP
SUB ESP,14
MOV [count],0
MOV ECX,[Strip_addr] //ECX = *Strip
#define
Strip.flag=ECX
Strip.x=ECX+4
Strip.y=ECX+8
Strip.cast=ECX+0C
Strip.str=ECX+10
#enddefine
JMP :loop
push ebp
mov ebp, esp
sub esp, 14 ; 00000014H
mov eax, [___security_cookie]
mov [ArrayPad], eax
mov edx, [Strip_addr]
mov eax, edx
push esi
push edi
mov edi, [argtext]
; Line 121
xor esi, esi
:$LL4@SetStrippe
; Line 122
test [eax], 80 ; 00000080H
je :$LN13@SetStrippe
; Line 121
inc esi
add eax, size ; 00000050H
mov ecx, esi
cmp esi, MAX_STRIP ; 0000007fH
jl :$LL4@SetStrippe
; Line 125
cmp ecx, MAX_STRIP ; 0000007fH
je :$LN1@SetStrippe
:$LN13@SetStrippe
; Line 129
imul ecx, esi, size
mov [ecx+Strip.flag], 80 ; 00000080H
; Line 130
mov eax, [argx]
mov [ecx+Strip.x], eax
; Line 131
mov eax, [argy]
mov [ecx+Strip.y], eax
; Line 132
mov eax, [argcast]
mov [ecx+Strip.cast], eax
; Line 133
push edi
lea eax, [Strip.str]
add eax, ecx
push eax
call _strcpy
; Line 136
and [rc.left], 0
; Line 137
mov [rc.right], 140 ; 00000140H
; Line 138
shl esi, 4
mov [rc.top], esi
; Line 139
lea eax, [esi+10]
mov [rc.bottom], eax
:increment
MOV EAX,[count]
INC EAX
MOV [count],EAX
:loop
MOV EBX,[count]
IMUL EBX,EBX,size //EBC = s * sizeof(STRIP)
CMP [count],MAX_STRIP
JGE :break
MOV EDX,[EBX+Strip.flag]
AND EDX,00000080
JNE :increment
JMP :break
:break
CMP [count],MAX_STRIP
JNE :initcast
JMP :end
:initcast
MOV [EBX+Strip.flag],80
MOV [EBX+Strip.x],[EBP+8]
MOV [EBX+Strip.y],[EBP+0C]
MOV [EBX+Strip.cast],[EBP+14]
MOV EAX,[EBP+10]
PUSH EAX
LEA EAX,[EBX+Strip.str]
PUSH EAX
CALL 00481100
ADD ESP,8
MOV [rcleft],0
MOV [rcright],140
MOV EAX,[count]
SHL EAX,4
MOV [rctop],EAX
ADD EAX,10
MOV [rcbottom],EAX
PUSH 23
PUSH 0
LEA EDX,[rc]
PUSH EDX
CALL 0040CA80
ADD ESP,0C
PUSH 23
PUSH 0FEFFFF
MOV EAX,[EBP+10]
PUSH EAX
MOV EAX,[rctop]
PUSH EAX
PUSH 0
CALL 0040CEB0
ADD ESP,14
:end
MOV ESP,EBP
POP EBP
RETN
INT3
; Line 141
push 23 ; 00000023H
push 0
lea eax, [rc_addr]
push eax
call CortBox2
; Line 142
push 23 ; 00000023H
push 00feffff ; 00feffffH
push edi
push [rc.top]
push 0
call PutText2
add esp, 28 ; 00000028H
:$LN1@SetStrippe
; Line 143
pop edi
pop esi
mov ecx, [ArrayPad]
call __security_check_cookie
leave
retn

View File

@ -1,12 +1,16 @@
offset 40d440
#define
Strip_addr=0049D628
; Constants
MAX_STRIP=7F
sizeof=50
fullsize=27b0 ; 0x50 * 0x7f
fp=EBP-4
path=EBP-110
; Locals
path=EBP-108
ArrayPad=EBP-4
; References
Strip_addr=0049D628
Credit.pData=49D614
Credit.size=49d610
Credit.offset=49d618
@ -15,117 +19,132 @@ Credit.mode=49d620
Illust.x=49d60c
Illust.act_no=49d608
grcGame.left=48f91c
gDataPath=0049E220
; Functions
GetFileSizeLong=00410d80
EncryptionBinaryData2=004215c0
ReloadBitmapFile=0040BFD0
; Builtins
___security_cookie=498b20
__security_check_cookie=00480dc1
_malloc=004813a3
_free=0048128B
_memset=00480d30
_sprintf=00481010
_fopen=00480FFD
_fread=00480f55
; Strings
credit_script=48f918
format=0048C374
str_rb=0048C37C
str_casts=0048c380
#enddefine
PUSH EBP
MOV EBP,ESP
SUB ESP,110
MOV EAX,[498B20]
MOV [EBP-8],EAX
push ebp
mov ebp, esp
sub esp, 108 ; 00000108H
mov eax, [___security_cookie]
mov [ArrayPad], eax
; Line 241
mov eax, [Credit.pData]
push esi
xor esi, esi
push edi
test eax, eax
je :$LN2@StartCredi
; Line 243
push eax
call _free
pop ecx
; Line 244
mov [Credit.pData], esi
CMP [Credit.pData],0
JE :openfile
MOV EAX,[Credit.pData]
PUSH EAX
CALL 0048128B
ADD ESP,4
MOV [Credit.pData],0
:$LN2@StartCredi
; Line 248
push [credit_script]
lea eax, [path]
push gDataPath
push format
push eax
call _sprintf
; Line 250
lea eax, [path]
push eax
call GetFileSizeLong
add esp, 14 ; 00000014H
mov [Credit.size], eax
; Line 251
cmp eax, -1
je :$LN8@StartCredi
; Line 255
push eax
call _malloc
mov [Credit.pData], eax
pop ecx
; Line 256
test eax, eax
je :$LN8@StartCredi
; Line 259
lea eax, [path]
push str_rb
push eax
call _fopen
pop ecx
pop ecx
; Line 260
test eax, eax
jne :$LN5@StartCredi
; Line 262
push [Credit.pData]
call _free
pop ecx
:$LN8@StartCredi
; Line 299
xor eax, eax
:$LN1@StartCredi
pop edi
pop esi
mov ecx, [ArrayPad]
call __security_check_cookie
leave
retn
:$LN5@StartCredi
; Line 267
push eax
push [Credit.size]
xor edi, edi
inc edi
push edi
push [Credit.pData]
call _fread
; Line 274
push [Credit.size]
push [Credit.pData]
call EncryptionBinaryData2
; Line 293
push 25 ; 00000025H
push str_casts
mov [Credit.offset], esi
mov [Credit.wait], esi
mov [Credit.mode], edi
mov [Illust.x], fffec000 ; fffec000H
mov [Illust.act_no], esi
mov [grcGame.left], 0a0 ; 000000a0H
call ReloadBitmapFile
add esp, 20 ; 00000020H
test eax, eax
je SHORT :$LN8@StartCredi
; Line 297
push fullsize
push esi
push [Strip_addr]
call _memset
add esp, 0c ; 0000000cH
; Line 298
mov eax, edi
jmp :$LN1@StartCredi
:openfile
MOV ECX,[48F918]
PUSH ECX
PUSH 0049E220
PUSH 0048C374
LEA EDX,[path]
PUSH EDX
CALL 00481010
ADD ESP,10
LEA EDX,[path]
PUSH EDX
CALL 00410D80
ADD ESP,4
MOV [Credit.size],EAX
CMP EAX,-1
JNE :allocatebuffer
XOR EAX,EAX
JMP :end
:allocatebuffer
MOV ECX,[Credit.size]
PUSH ECX
CALL 004813A3
ADD ESP,4
MOV [Credit.pData],EAX
CMP EAX,0
JNE :fopen
JMP :end //EAX must be 0, return false
:fopen
PUSH 0048C37C
LEA EAX,[path]
PUSH EAX
CALL 00480FFD
ADD ESP,8
MOV [fp],EAX
CMP EAX,0
JNE :readdata
MOV EDX,[Credit.pData]
PUSH EDX
CALL 0048128B
ADD ESP,4
JMP :end //EAX must be 0, return false
:readdata
MOV ECX,[fp]
PUSH ECX
MOV EDX,[Credit.size]
PUSH EDX
PUSH 1
MOV EAX,[Credit.pData]
PUSH EAX
CALL 00480F55
ADD ESP,8
MOV EDX,[Credit.size]
PUSH EDX
MOV ECX,[Credit.pData]
PUSH ECX
CALL 004215C0
ADD ESP,8
MOV [Credit.offset],0
MOV [Credit.wait],0
MOv [Credit.mode],1
MOV [Illust.x],FFFEC000
MOV [Illust.act_no],0
MOV [grcGame.left],0A0
PUSH 25
PUSH 0048C380
CALL 0040BFD0
ADD ESP,8
TEST EAX,EAX
JNE :clearcasts
JMP :end //EAX is 0, return false
:clearcasts
MOV EDX,sizeof
IMUL EDX,EDX,MAX_STRIP
PUSH EDX
PUSH 0
MOV EAX,[Strip_addr]
PUSH EAX
CALL 00480D30
ADD ESP,0C
MOV EAX,1
:end
MOV ECX,[EBP-8]
CALL 00480DC1
MOV ESP,EBP
POP EBP
RETN
INT3
data cc cc cc cc cc cc cc cc

Binary file not shown.

Binary file not shown.