Qhimm.com Forums

Miscellaneous Forums => Gameplay => Topic started by: gaaasstly on 2017-06-07 15:53:25

Title: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly 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:

(http://i.imgur.com/1PIxJa4.png)
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: Girl next door on 2017-06-07 20:03:35
I don't think it's a good idea, the game is already too easy as you can kill all the ennemies until Adel just by using Gfs. I think it's more interesting to give the summoner status to a character (like Yuna in FFX for example). I don't know if it's possible. In FFVIII Reloaded by mexico, all the GFs commands have been removed and you received a GF Scroll at the end of test seed. That's the only way to use GFs in battle. That's not perfect because if you like GFs, you should have to change your junctions often. But well, that's a possible way.
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly on 2017-06-10 03:00:07
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.
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly on 2017-06-11 04:48:07
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)
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: CoolMitten on 2017-06-17 18:48:37
I like your idea of creating a "summoner class." I've been playing around with something similar but a little different: creating a class-based character set and dividing GFs accordingly (with rebalance/reassignment of a few abilities to make the classes more delineated/distinct). Give it some flavor and spice to really bring out the characters' personalities, also adding value to the fun in acquiring a new GF.

What I've really wanted for a while is to find a way to implement FFVII-style limit breaks in VIII (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. I think that this would add a ton of identity to the characters and really make big battles POP.

Who didn't love it in VII when the limit bar would flash rainbows, while you were down on your luck in a big boss battle, and a character would start popping off big hits, coming up with a clutch victory. This, of course, would be with enemy rebalance to avoid making the game "too easy" (but also not too tough).

That's what I'd like to work on and create VIII (trying to figure out where to start). Foreseeable problems with creating something like this? Thoughts? Questions? Feelings? Anyone know of any attempt to do something like this before?
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly on 2017-06-18 02:28:20
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.
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: volvania on 2017-06-19 04:16:28
I have alot of ideas and we can change everything in the game so far story dialog quests items abilites cards , and i want to make my perfect ffviii mod but there is one thing stopping the mod to be fun and that is the stupid Ai . We can change that in .dat files but so far two people know or rather understand the code (not fully) if only there is explnation or a tool to change the dump ai we could make the perfect ffviii mod
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly on 2017-06-20 19:44:25
... (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.
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly on 2017-06-26 03:27:54
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):
(http://i.imgur.com/4UNqwAd.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)
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: slothica on 2017-07-02 23:14:01
Probably something to replace the terrible Junction system and add new TT cards.
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: Lunareste on 2017-07-29 03:19:20
Actually, I think having Rinoa not need any junctions after the Ragnarok scene would be justified by the plot.

Title: Re: [FF8] What gameplay enhancements interest you?
Post by: CoolMitten on 2017-09-23 15:25:26
Quote
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 it be possible to enter the %age to limit as simple text next to character's name or just represent it as an integer somewhere else? Possible to change text color to indicate a certain %age?

Also, is damage threshold based on accumulated HP points -> limit possible? What I mean is, is it possible to write the "counter" script into the game, e.g. after 2,000 HP lost -> limit break. Didn't even think about damage accumulated from status effects such as poison. How to exclude those from counter?

Also, chain "amount to limit" to character level or something else? That would make it so the HP needed to limit would go up with the character, e.g. 500, 1,000, 2,000 and so on.

What do you think?

P.S. Just finished reading through your GF Equip/Unequip scripts from late June. Nice work!
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: gaaasstly on 2017-09-25 21:54:42
It might be quick to change the text color, but I would like to find a better way. Pretty much anything you can think of is possible, it is just a matter of time and effort. I will look into it more "soon".
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: JWP on 2017-09-25 22:23:00
Looking here (http://finalfantasy.wikia.com/wiki/Crisis_Level) for the formula and the function that calculates this is at 0x4941F0 in the English Steam version.
For representation, I'd suggest using the expected value of the RandomMod, which would be ~287.5 and treat crisis level 4 using that RandomMod as 50% and 8+ as 100%.
This would mean that you would calculate the value of (StatusBonus + DeathBonus - HPMod) and treat it as a scale of 0 - 2300.
Title: Re: [FF8] What gameplay enhancements interest you?
Post by: CoolMitten on 2017-10-12 02:00:42
Wow! Had no idea that all of that went into calculating Limit Break.

How did you find the expected value of RandomMod? Crisis Level wiki lists this as random number between 0 and 255 + 160.

When you write "treat crisis level 4 using that RandomMod as 50%," do you mean percent of character's max HP? (so, if a character had max HP and had limit, it would be crisis level 8?)

Why treat LimitLevel (StatusBonus + DeathBonus - HPMod)/RandomMod as scale of 0 - 2300?

Edit: Ten seconds later, discovered that 2300/8=287.5 Still trying to figure out how this could yield "damage threshold -> limit" mechanic. Might need a bit more help on that one  :P

Edit 2: I think I see what RandomMod would achieve. Changing the divisor allows a higher or lower LimitLevel, and therefore, you can edit the threshold at which LimitLevel 5 is reached. I'm tired though, so that might be incorrect. Still wondering how a "damage counter" could be created (because healing changes HPMod and erases/resets progress toward limit).