[FF8] What gameplay enhancements interest you?

  • Thread starter Thread starter gaaasstly
  • Start date Start date
Status
Not open for further replies.
G

gaaasstly

Guest
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:

Save Anywhere - Address (set value to 1 and freeze):
Code: [Select]
Code:
FF8_EN.exe+18FEA89
Save Anywhere - Patch:
Code: [Select]
Code:
Save PointFF8_EN.exe+1221CF | 8A 88 D1 00 00 00        | mov cl,byte ptr ds:[eax+D1]             | mov cl, 1FF8_EN.exe+1221D7 | 80 C9 01                 | or cl,1                                 | nopFF8_EN.exe+1221E6 | 80 E1 FE                 | and cl,FE                               | nopLoading ZoneFF8_EN.exe+12BE1D | 8A 90 D1 00 00 00        | mov dl,byte ptr ds:[eax+D1]             | mov dl, 1FF8_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:

1PIxJa4.png
 
Last edited:
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.
 
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.
 
Last edited:
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]
Code:
[ENABLE]ALLOC(newmem, 1024)newmem:// disable Junction in menumenu_junction_disable:push eaxpush ebxtest cl,cljnz menu_junction_disable_cleanupmov eax,FF8_EN.exe+1976C75mov bl,0menu_junction_disable_begin_loop:cmp byte ptr [eax],4je menu_junction_disable_cleanupinc eaxinc blcmp bl,8jb menu_junction_disable_begin_loopinc clmenu_junction_disable_cleanup:pop ebxpop eaxmenu_junction_disable_original:mov [esi+40],cltest dh,-80jmp menu_junction_disable_return// disable Junction in sub-menusubmenu_junction_disable:cmp byte ptr [FF8_EN.exe+1976C80],0jne submenu_junction_disable_originalcmp byte ptr [FF8_EN.exe+1976C62],4jne submenu_junction_disable_returnsubmenu_junction_disable_original:mov word ptr [esi+10],0004jmp submenu_junction_disable_returnFF8_EN.exe+C1056:jmp menu_junction_disablenopmenu_junction_disable_return:FF8_EN.exe+C11FC:jmp submenu_junction_disablenopsubmenu_junction_disable_return:FF8_EN.exe+DBCF2:nopnopnopFF8_EN.exe+DBF68:nopnopnop[DISABLE]FF8_EN.exe+DBF68:mov [esi+43],alFF8_EN.exe+DBCF2:mov [esi+43],alFF8_EN.exe+C11FC:mov word ptr [esi+10],0004FF8_EN.exe+C1056:mov [esi+40],cltest dh,-80DEALLOC(newmem)
 
Last edited:
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?
 
Last edited:
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.
 
Last edited:
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
 
... (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.
 
Last edited:
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):
4UNqwAd.gif


Instructions:
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]
Code:
[ENABLE]FF8_EN.exe+DF5E6:db 90 90 90 90 90 90 90FF8_EN.exe+E2D6F:db 90 90db 90 90db 90 90[DISABLE]FF8_EN.exe+E2D6F:test esi,ebxje FF8_EN.exe+E2D75mov [eax],dlFF8_EN.exe+DF5E6:mov [eax*4+"FF8_EN.exe"+198B2E5],bl
Unequip All:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecxxor ecx,ecx// Fieldloop1_begin:mov eax,98mul ecxinc ecxmov word ptr [eax+FF8_EN.exe+18FE140],0cmp ecx,7jb loop1_beginxor ecx,ecx// Quezacotl -> Edenloop2_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop2_beginxor ecx,ecx// Menuloop3_begin:mov eax,1Cmul ecxinc ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0cmp ecx,7jb loop3_begin// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)[code][b]Unequip Squall:[/b][code][ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,0mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,0mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Zell:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,1mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,1mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Irvine:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,2mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,2mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Quistis:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,3mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,3mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Rinoa:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,4mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,4mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Selphie:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,5mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,5mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Seifer:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,6mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,6mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
Unequip Edea:
Code: [Select]
Code:
[ENABLE]ALLOC(newmem,1024)newmem:// Prologuepush eaxpush ecx// Fieldmov eax,98mov ecx,7mul ecxmov word ptr [eax+FF8_EN.exe+18FE140],0xor ecx,ecx// Quezacotl -> Edenloop_begin:mov eax,Cmul ecxinc ecxmov byte ptr [eax+FF8_EN.exe+198B2E5],FFcmp ecx,10jb loop_begin// Menumov eax,1Cmov ecx,7mul ecxmov word ptr [eax+FF8_EN.exe+198B6AE],0// Epiloguepop ecxpop eaxretnCREATETHREAD(newmem)[DISABLE]DEALLOC(newmem)
 
Last edited:
Probably something to replace the terrible Junction system and add new TT cards.
 
Actually, I think having Rinoa not need any junctions after the Ragnarok scene would be justified by the plot.
 
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!
 
Last edited:
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".
 
Looking here 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.
 
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).
 
Last edited:
Status
Not open for further replies.
Back
Top