Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - gaaasstly

Pages: 1 [2]
26
General Discussion / Re: Final Fantasy XV
« on: 2017-07-08 22:42:54 »
Am I a heretic for liking 12?

27
There is no ETA on an updated Summoner or the FF7 x FF8 Limit Break scripts. I will probably finish the Summoner script next, after I finish a request to always draw 100 magic, unless someone can help me RE the UI or has some slick idea on how to add a Limit Gauge and select Limit Breaks from the Command list (like Quistis' Blue Magic).

I finally had time to finish the idea I mentioned in the OP. I have not tested this beyond Squall and Qusitis, but I am confident it will work as intended; however, if it does not, let me know so I can fix it.

Video (gif):


Instructions:
Quote
To equip a GF:
Enable the script and equip any GF to any character

To unequip a GF:
Enable the Unequip <Character> script

Break GF Limit:
Code: [Select]
[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

Unequip All:
Code: [Select]
[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 -&gt; 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 -&gt; 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)

Unequip Zell:
Code: [Select]
[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 -&gt; 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)

Unequip Irvine:
Code: [Select]
[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 -&gt; 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)

Unequip Quistis:
Code: [Select]
[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 -&gt; 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)

Unequip Rinoa:
Code: [Select]
[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 -&gt; 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)

Unequip Selphie:
Code: [Select]
[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 -&gt; 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)

Unequip Seifer:
Code: [Select]
[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 -&gt; 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)

Unequip Edea:
Code: [Select]
[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 -&gt; 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)

28
Draw 100 Magic (not thoroughly tested, probably buggy):
Code: [Select]
[ENABLE]
FF8_EN.exe+86A89:
mov al,64
mov [ecx],al
nop
nop
nop
nop
pop edi
pop esi
nop
nop

[DISABLE]
FF8_EN.exe+86A89:
mov al,[ecx]
cmp al,64
jnl FF8_EN.exe+86A75
inc al
pop edi
pop esi
mov [ecx],al

I will look more into the drawing 100 magic tomorrow night, if I can, so that will have to do for now.

"Notes" for breaking 2 byte damage limit:
Code: [Select]
[ENABLE]
ALLOC(newmem,1024)

newmem:
mov edx,[FF8_EN.exe+1927AE4]
mov [eax+04],cx
mov ecx,[FF8_EN.exe+1927AE8]
mov [eax+06],edx
jmp returnhere

FF8_EN.exe+8EFC4:
jmp newmem
nop
nop
db 90 90 90 90 // mov [eax+04],cx
db 90 90 90 90 90 90 // mov ecx,[FF8_EN.exe+1927AE8]
db 90 90 90 90 // mov [eax+06],dx
returnhere:

FF8_EN.exe+9113D:
mov esi,0001869F // F423F
nop
db 90 90 // jmp FF8_EN.exe+9114F
db 90 90 // xor ecx,ecx
db 90 90 // test esi,esi
db 90 90 90 // setl cl
db 90 // dec ecx
db 90 90 // and esi,ecx

FF8_EN.exe+93F24:
mov ecx,[ebp+06]
nop

FF8_EN.exe+106920:
mov esi,[edi+06]
nop

[DISABLE]
FF8_EN.exe+106920:
mov si,[edi+06]

FF8_EN.exe+93F24:
mov cx,[ebp+06]

FF8_EN.exe+9113D:
cmp esi,ecx
jle FF8_EN.exe+91145
mov esi,ecx
jmp FF8_EN.exe+9114F
xor ecx,ecx
test esi,esi
setl cl
dec ecx
and esi,ecx

FF8_EN.exe+8EFC4:
mov dx,[FF8_EN.exe+1927AE4]
mov [eax+04],cx
mov ecx,[FF8_EN.exe+1927AE8]
mov [eax+06],dx

DEALLOC(newmem)

29
Hey guys, was looking around the forum for mods to play FFVIII, such as Hardcore Mode, HP 9999+ and Dmg 9999. ...

http://forums.qhimm.com/index.php?topic=15354.msg250751#msg250751 - There may be something else available, but you can apply those patches to an Auto Assembler script in Cheat Engine.

... The HP and DMG are still cap to 32k but I saw an image from Maki in this thread: http://forums.qhimm.com/index.php?topic=16838.msg240173#msg240173 ...

The HP limit for your party is 65,535 (2 bytes), but for monsters it is 4,294,967,295 (4 bytes). The damage limit for both is 65,535 (2 bytes).

... Squall dealed 98765 dmg, is this mod working? Or still in process? ...

http://imgur.com/a/NwlWA - You can do more than 65,535 damage by forcing the registers to 32 bits, but the engine will not render more than 5 digits, as Maki said. There is no reason to do this, though, as you will never reach numbers that high.

Video (gif):


... Another thing, is there a mod to draw 100 magic at once? ...

I would imagine it is trivial to accomplish. I will look into it tomorrow.

30
... (cumulative damage counter to pass threshold to make attack -> limit, and then reset) ...

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.

... Would be wonderful to change threshold value multiplier too to make 1 -> 2 -> 3 -> 4 style tiers in vein of Omnislash = Lionheart. ...

There is no easy way to select which Limit Break/Final Blow to use from a menu. The game was programmed with space for one sub-command (Attack>Limit Break). The bytes immediately after are for Quistis' Blue Magic.

31
There are a few things I plan to change/improve with the summoner mod and I might take it further if it does not take too much time. Unfortunately, changing portions of the story is not one of them, so unless someone wants to put that effort in, whatever I come up with will have to suffice.

As for your 7 x 8 Limit Break idea, I can help make that a reality, though not until Tuesday-ish. Contact me through Personal Message to stay updated on development.

32
Gameplay / Re: Final Fantasy 8 Steam version v1.0.10 ENG
« on: 2017-06-14 04:39:17 »
Final update, with the most accurate information I could gather. Both the address lists are in-battle; the 'Status 2' status(es) will persist.

Status 1:
Address: FF8_EN.exe+1927B18
Address: FF8_EN.exe+1927BE8
Address: FF8_EN.exe+1927CB8
Type: 4 Bytes (Binary)
0 - Sleep
1 - Haste
2 - Slow
3 - Stop
4 - Regen
5 - Protect
6 - Shell
7 - Reflect
0 - Aura
1 - Curse
2 - Doom
3 - Invincible <--- <--- <--- <--- <---
4 - Petrifying
5 - Float
6 - Confuse
7 -
0 -
1 - Eject
2 - Double
3 - Triple
4 - Defend
5 -
6 -
7 -
0 - Vit 0
1 - Angel Wing
2 -
3 -
4 -
5 -
6 -
7 -

Status 2:
Address: FF8_EN.exe+1927B90
Address: FF8_EN.exe+1927C60
Address: FF8_EN.exe+1927D30
Type: Byte (Binary)
0 - Death
1 - Poison
2 - Petrify
3 - Darkness
4 - Silence
5 - Berserk
6 - Zombie
7 -

33
Sorry for the double-post, but I felt like this deserved its own reply and I did not want to create a thread for it.

I thought the idea you proposed of having a character as a dedicated summoner was very interesting. So interesting, in fact, that I implemented it, albeit roughly. Unfortunately, I am not far enough in my current save to find the variable that would allow me to add the restriction of summoning based on story progress, but perhaps it is for the best. I made Rinoa the summoner, for reasons I mentioned in my previous post, but that can be changed. You will see other character-related information, miss learning/Command abilities while Rinoa is not in the party, and miss plot elements (RIP Ifrit x Shiva).

Create an Auto Assembly script in Cheat Engine, paste the following code, and enable it.

Code: [Select]
[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)

34
Having a "summoner" is an interesting idea for FF8, but I do not think it would work well with the plot or mechanics without significant modification. It could be done, roughly, with code patches, but it would not "feel good". The only character that makes sense (at least to myself) would be Rinoa, but not until after the party defeats Edea and her powers are passed on to Rinoa. That is a long time to not have access to your GF's. If you are really pressed to do something like this, it would be much easier to not junction anything until you have access to Rinoa after that point in the story. I would categorize this type of thing as a mod or, if taking the latter approach, a challenge run, but not a gameplay enhancement.

Again, I am not interested in discussing if changes make the game easier/harder in this thread. If you really want the game to be as hard as possible: run from every battle, do not junction, do not use magic, do not upgrade your weapons, do not use items, etc.; there are countless ways to challenge yourself in the vanilla game.

As for junctioning all GF's simultaneously to any character, I found the instructions I needed. Currently, you cannot unequip a GF once it has been junctioned while the patch is enabled, but I am working on that.

35
Gameplay / [FF8] What gameplay enhancements interest you?
« on: 2017-06-07 15:53:25 »
I began playing FF8 again and have been making small adjustments to gameplay I feel are quality of life improvements. One could argue the vanilla game is too easy and certain proposed changes will make it easier, but that is not the focus of this thread. I want to take suggestions the community has and possibly implement them.

I'll begin with something I posted in another thread:

Save Anywhere:
Spoiler: show
Save Anywhere - Address (set value to 1 and freeze):
Code: [Select]
FF8_EN.exe+18FEA89
Save Anywhere - Patch:
Code: [Select]
Save Point

FF8_EN.exe+1221CF | 8A 88 D1 00 00 00        | mov cl,byte ptr ds:[eax+D1]             | mov cl, 1
FF8_EN.exe+1221D7 | 80 C9 01                 | or cl,1                                 | nop
FF8_EN.exe+1221E6 | 80 E1 FE                 | and cl,FE                               | nop

Loading Zone

FF8_EN.exe+12BE1D | 8A 90 D1 00 00 00        | mov dl,byte ptr ds:[eax+D1]             | mov dl, 1
FF8_EN.exe+12BE2D | 80 E2 FC                 | and dl,FC                               | nop


I was also interested in allowing any GF to be junctioned simultaneously by all of the characters. I had partial success by writing the value (flag) that determines which GF(s) a character has junctioned. I will eventually determine which instruction(s) disable the GF once it has been junctioned and modify them accordingly. For now, you will have to live with this screenshot:


36
First is to have a fraction of all damage you take persist to your max HP for that battle. Easily done with a Post-Attack Character AI script in WallMarket and works fine; only problem is that the max HP value does not update in the battle menu. It works - you cannot heal above the new max HP value - but the menu doesn't reflect that. Anybody know a way to deal with this issue in the PC version?

FF7_EN.exe+9BA4AA
FF7_EN.exe+9BA8EA
FF7_EN.exe+9BAD2A

37
Gameplay / Re: Final Fantasy 8 Steam version v1.0.10 ENG
« on: 2017-06-06 04:52:49 »
Type: 2 bytes, Value: 8

Member 1: FF8_EN.exe+1927B19
Member 2: FF8_EN.exe+1927BE9
Member 3: FF8_EN.exe+1927CB9 - Not verified

38
Gameplay / Re: Final Fantasy 8 Steam version v1.0.10 ENG
« on: 2017-06-04 02:06:23 »
Use a memory editor, like Cheat Engine, to search for the value. I found them within 5 minutes using Unknown initial value, Changed value, and Unchanged value.

39
Releases / Re: [FF8PC-Steam] Add-on DLLs (2014-07-11)
« on: 2017-06-01 03:49:08 »
I am the author of the dll files. The reason something might not work is due to version discrepancies and because it was poorly coded. These were put together before the Steam release and I stopped playing FF8 shortly after to work on other projects. I no longer have the source files, but I can show you how they work.

Spoiler: show
Damage.dll:
Code: [Select]
510620C8 | 81 C1 FF FF 00 00        | add ecx,FFFF                            |
Hard.dll (pseudocode):
Code: [Select]
ReturnType CallingConvention FunctionHook(VariableType VariableName, ...)
{
    VariableName *= Multiplier;
    return OriginalFunction(VariableName);
}

HP.dll:
Code: [Select]
510620C8 | 81 FA FF 7F 00 00        | cmp edx,7FFF                            |
510620CE | 7E 05                    | jle hp.510620D5                         |
510620D0 | BA FF 7F 00 00           | mov edx,7FFF                            |

Magic.dll:
Code: [Select]
0F7120C8 | 32 C9                    | xor cl,cl                               |


I will modify the post with updated patches for Steam BuildID: 296320 as I rediscover them.

Spoiler: show
Break Damage Limit:
Code: [Select]
FF8_EN.exe+91137 | 81 C1 0F 27 00 00        | add ecx,270F                            | add ecx, 0xffff
Break HP Limit:
Code: [Select]
GF

FF8_EN.exe+95E6D | 81 FA 0F 27 00 00        | cmp edx,270F                            | cmp edx, 0xffff
FF8_EN.exe+95E75 | BA 0F 27 00 00           | mov edx,270F                            | mov edx, 0xffff

Party

FF8_EN.exe+95A1A | 81 FA 0F 27 00 00        | cmp edx,270F                            | cmp edx, 0xffff
FF8_EN.exe+95A22 | BA 0F 27 00 00           | mov edx,270F                            | mov edx, 0xffff

Limitless Magic (does not break Double/Triple and works in Battle/Field):
Code: [Select]
Battle

FF8_EN.exe+86B0C | FE C9                    | dec cl                                  | nop

Field

FF8_EN.exe+F3027 | FE CB                    | dec bl                                  | nop

Save Anywhere - Address (set value to 1 and freeze):
Code: [Select]
FF8_EN.exe+18FEA89
Save Anywhere - Patch:
Code: [Select]
Save Point

FF8_EN.exe+1221CF | 8A 88 D1 00 00 00        | mov cl,byte ptr ds:[eax+D1]             | mov cl, 1
FF8_EN.exe+1221D7 | 80 C9 01                 | or cl,1                                 | nop
FF8_EN.exe+1221E6 | 80 E1 FE                 | and cl,FE                               | nop

Loading Zone

FF8_EN.exe+12BE1D | 8A 90 D1 00 00 00        | mov dl,byte ptr ds:[eax+D1]             | mov dl, 1
FF8_EN.exe+12BE2D | 80 E2 FC                 | and dl,FC                               | nop

Pages: 1 [2]