[ENABLE]
ALLOC(newmem, 1024)
newmem:
// disable Junction in menu
menu_junction_disable:
push eax
push ebx
test cl,cl
jnz menu_junction_disable_cleanup
mov eax,FF8_EN.exe+1976C75
mov bl,0
menu_junction_disable_begin_loop:
cmp byte ptr [eax],4
je menu_junction_disable_cleanup
inc eax
inc bl
cmp bl,8
jb menu_junction_disable_begin_loop
inc cl
menu_junction_disable_cleanup:
pop ebx
pop eax
menu_junction_disable_original:
mov [esi+40],cl
test dh,-80
jmp menu_junction_disable_return
// disable Junction in sub-menu
submenu_junction_disable:
cmp byte ptr [FF8_EN.exe+1976C80],0
jne submenu_junction_disable_original
cmp byte ptr [FF8_EN.exe+1976C62],4
jne submenu_junction_disable_return
submenu_junction_disable_original:
mov word ptr [esi+10],0004
jmp submenu_junction_disable_return
FF8_EN.exe+C1056:
jmp menu_junction_disable
nop
menu_junction_disable_return:
FF8_EN.exe+C11FC:
jmp submenu_junction_disable
nop
submenu_junction_disable_return:
FF8_EN.exe+DBCF2:
nop
nop
nop
FF8_EN.exe+DBF68:
nop
nop
nop
[DISABLE]
FF8_EN.exe+DBF68:
mov [esi+43],al
FF8_EN.exe+DBCF2:
mov [esi+43],al
FF8_EN.exe+C11FC:
mov word ptr [esi+10],0004
FF8_EN.exe+C1056:
mov [esi+40],cl
test dh,-80
DEALLOC(newmem)
... (cumulative damage counter to pass threshold to make attack -> limit, and then reset) ...
... Would be wonderful to change threshold value multiplier too to make 1 -> 2 -> 3 -> 4 style tiers in vein of Omnislash = Lionheart. ...
To equip a GF:
Enable the script and equip any GF to any character
To unequip a GF:
Enable the Unequip <Character> script
[ENABLE]
FF8_EN.exe+DF5E6:
db 90 90 90 90 90 90 90
FF8_EN.exe+E2D6F:
db 90 90
db 90 90
db 90 90
[DISABLE]
FF8_EN.exe+E2D6F:
test esi,ebx
je FF8_EN.exe+E2D75
mov [eax],dl
FF8_EN.exe+DF5E6:
mov [eax*4+"FF8_EN.exe"+198B2E5],bl
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
xor ecx,ecx
// Field
loop1_begin:
mov eax,98
mul ecx
inc ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
cmp ecx,7
jb loop1_begin
xor ecx,ecx
// Quezacotl -> Eden
loop2_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop2_begin
xor ecx,ecx
// Menu
loop3_begin:
mov eax,1C
mul ecx
inc ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
cmp ecx,7
jb loop3_begin
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)[code]
[b]Unequip Squall:[/b]
[code][ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,0
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,0
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,1
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,1
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,2
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,2
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,3
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,3
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,4
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,4
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,5
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,5
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,6
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,6
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
[ENABLE]
ALLOC(newmem,1024)
newmem:
// Prologue
push eax
push ecx
// Field
mov eax,98
mov ecx,7
mul ecx
mov word ptr [eax+FF8_EN.exe+18FE140],0
xor ecx,ecx
// Quezacotl -> Eden
loop_begin:
mov eax,C
mul ecx
inc ecx
mov byte ptr [eax+FF8_EN.exe+198B2E5],FF
cmp ecx,10
jb loop_begin
// Menu
mov eax,1C
mov ecx,7
mul ecx
mov word ptr [eax+FF8_EN.exe+198B6AE],0
// Epilogue
pop ecx
pop eax
retn
CREATETHREAD(newmem)
[DISABLE]
DEALLOC(newmem)
The obstacle I am facing is an intuitive way to represent the Limit Gauge value (because there is not one) without extensive patches. I would like to figure this out before I begin.