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
1
What language is this? Does it support bitwise operators (if not, what is the equivalent)? What is the type of self.status and BLIND?

2
Is there any way to turn the HiSpeed into a framelocked hi-speed?  For example, locking the game to 30fps?  right now it bounces back and forth between 15 (battles), 30 (overworld maps/fields), and 60 (menus)

Maybe. Take a look at 56A8DC9C. I noticed when HiSpeed is enabled the FPS increases and, maybe I'm wrong, but I think this is a side-effect of "speed hack" and the two are independent. Generally speaking (especially in older games), things are tied to the FPS and there is "good" reason to limit it.

thanks for the interest, even if it doesnt pan out.

are you using any specific program to access these? nothing i tried allowed me to even get into the data of the file, only letting me see header info and other useless things.

You can use any memory editor and/or debugger (I prefer Cheat Engine and x64dbg). The idea is to view the module after the processes has loaded it. You won't get far if you don't understand x86 assembly, though.

This was actually much easier than I anticipated--NOP these 6 addresses and you will have the desired effect. That said, I would still advocate for something like Cheat Engine to enable/disable this on-the-fly rather than patch this into your game permanently.

Code: [Select]
Party Member 1 (Top)
56A5C48D | 66:8991 72010000         | mov word ptr ds:[ecx+172],dx            | HP
56A5C494 | 8B50 10                  | mov edx,dword ptr ds:[eax+10]           | ATB

Party Member 2 (Middle)
56A5C4BC | 66:8991 42030000         | mov word ptr ds:[ecx+342],dx            | HP
56A5C4C3 | 8B90 E0000000            | mov edx,dword ptr ds:[eax+E0]           | ATB

Party Member 3 (Bottom)
56A5C4F7 | 66:8991 12050000         | mov word ptr ds:[ecx+512],dx            | HP
56A5C4FE | 8B90 B0010000            | mov edx,dword ptr ds:[eax+1B0]          | ATB

P.S.

It is probably worth mentioning these are for the English version.

3
I have only had about 30m to look at this, but here is a starting point:

Code: [Select]
AF3DN.P+3DC78 | BYTE | HiSpeed
AF3DN.P+3DC79 | BYTE | Assist <- This is what you are interested in
AF3DN.P+3DC80 | BYTE | 9999

References (AF3DN.P):
Address  | Disassembly                 
569EC460 | cmp byte ptr ds:[56A1DC79],0
569EC857 | xor byte ptr ds:[56A1DC79],1 <- This toggles off/on
569ECA86 | cmp byte ptr ds:[56A1DC79],0

Unless someone gets to it before me, I will follow up when I get more time. To be clear, this does nothing. I still need to determine how it interacts with ATB, HP, and Limit Break.

4
If all goes well, I'll look into this weekend. No promises.

5
Is it absolutely necessary to modify the built-in Boosters? If not, it would be trivial to just use a program like Cheat Engine...

6
General discussion / Re: Fort Condor donation bug
« on: 2018-08-08 22:28:39 »
Read the second paragraph here.

7
For limitless magic, using FF8_EN.exe, try:

Code: [Select]
#Battle
86B0C = 90 : 2
#Field
F3027 = 90 : 2

Note: This assumes global addition +400000 has been set.

8
Post the hext file so I can look at the syntax.

9
Still using these outdated dll files? :3

10
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".

11
FF8 Gameplay Releases / [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

12
Gameplay Modding / Re: FF VIII How to MOD?
« on: 2017-09-20 01:39:11 »
Is there a particular reason people want to make the game artificially harder (more damage in, less damage out, etc.) instead of simply placing a limitation on themselves like not leveling, no magic, no junctions, etc.?

13
You can use 'db 90 90' in place of 'nop nop', etc.

14
Cheat Engine is about as simple as it gets; create a script and enable/disable it. It won't interfere with any mods you have installed.

Code: [Select]
[ENABLE]
FF8_EN.exe+86B0C:
nop
nop

[DISABLE]
FF8_EN.exe+86B0C:
dec cl

The only time I use a dll anymore is to hook functions (which can be done in CE, but is much more effort than it is worth) and even then I do not use a proxy like ddraw.dll.

15
It would be easier to use a program like Cheat Engine, but you can translate the instructions here.

16
Can you clarify the syntax for me?

{ = comment?
address = relative or absolute?
<address> = <hex>:<size>?

@Mcindus -> http://forums.qhimm.com/index.php?topic=15354.msg252994#msg252994

17
Gameplay Modding / Re: Final fantasy 8 Steam mod help
« on: 2017-08-15 15:05:26 »
Can you elaborate? Choose like FF7? Choose in battle from a sub-menu? Choose from equipped weapon? All of the above? Something different?

18
You are using the French version and the addresses are for the English version. You will need to do a file comparison with a disassembler to calculate the correct offset. The easiest way is to find what writes to the address and either use a nearby string reference or do a byte signature search.

19
Are you sure this was not a localization issue?

20
Gameplay Modding / Re: [REL] FF8Launcher 1.4
« on: 2017-07-25 00:59:44 »
You can use Cheat Engine to apply the patches I linked to in my previous post without needing to inject dlls.

21
Gameplay Modding / Re: [REL] FF8Launcher 1.4
« on: 2017-07-23 22:45:15 »

22
It is easiest to freeze the value.

23
General discussion / Re: Final Fantasy XV
« on: 2017-07-08 22:42:54 »
Am I a heretic for liking 12?

24
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)

25
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)

Pages: [1] 2