Qhimm.com Forums

Final Fantasy 8 => Gameplay => Releases => Topic started by: gaaasstly on 2017-09-20 23:10:03

Title: [FF8] Training Center
Post by: gaaasstly on 2017-09-20 23:10:03
Steam BuildID: 296320 (FF8_EN.exe)
I put the absolute minimum effort into this program because I was not sure if something like it already existed. If it garners enough support, I may continue the project.

What is Training Center?
In its current state, it is a battle simulator.

What does it do?
(Re)Play any battle with the current party (untested).

Can I switch/customize my party?
Not yet, but that is the long term goal.

Can I play as a monster?
Maybe one day.

How do I use it?
Start FF8_EN.exe and load a save file
Start FF8_TrainingCenter.exe
Enter a number in the edit box
Check the Check1 checkbox
Go to B-Garden- Training Center location and encounter!

I do not have time to catalog each battle right now which is why the UI is practically non-existent.

https://www.virustotal.com/#/file/074de361c9ab329f2e71adb28b4878da29735ae58e041754ed299bab7d42e299/detection (https://www.virustotal.com/#/file/074de361c9ab329f2e71adb28b4878da29735ae58e041754ed299bab7d42e299/detection)

https://drive.google.com/open?id=0Bx_SMFEky68FSWZ3eHIwcWpzTXc (https://drive.google.com/open?id=0Bx_SMFEky68FSWZ3eHIwcWpzTXc)
Title: Re: [FF8] Training Center
Post by: Maki on 2017-09-21 06:43:06
Just to make addition to this. I was working on FF8 engine commandline. You can just type BATTLE (id) and it forces it anywhere you are, although it's abandoned project and has to be compiled by yourself:


code for battle:
Code: [Select]
const int _BATTLE = 0x5230C0;
ENTRY = 0x0188C810;

void BATTLE(int encounter)
byte* b = (byte*)(ENTRY + 0x184); //MOV AL, [EDX+184h] (MOVSX ECX, AL)
*b = 9;
UINT16* moviepo = (UINT16*)(ENTRY + *b * 4 - 4); //stack pointer
*moviepo = (UINT16)(encounter & 0xFFFF);
moviepo = (UINT16*)(ENTRY + *b * 4);
*moviepo = 0x0000;
signed int(*Func)(int a1) = ((signed int(*)(int))(_BATTLE + _entry));
int result = Func(ENTRY);
printf("\nBATTLE returned: %d\n", result);

Entry is dynamic, so you might want to check the code for entry search code