Author Topic: [FF8] Training Center  (Read 474 times)

gaaasstly

  • Fast newbie
  • *
  • Posts: 27
  • Karma: 2
    • View Profile
[FF8] Training Center
« 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!

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

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

Download
https://drive.google.com/open?id=0Bx_SMFEky68FSWZ3eHIwcWpzTXc

Maki

  • Lana Del Rey
  • Insane poster
  • *
  • Posts: 450
  • Karma: 76
  • Final Fantasy VIII reverse team
    • View Profile
Re: [FF8] Training Center
« Reply #1 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:

https://github.com/MaKiPL/AdelWhisperer

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