Just as requested I'm posting the code for manipulating the party for both 2000 and Steam version:
At 48B7F5 you have:
mov al, byte ptr ss:SG_PARTY_BATTLE1[ebp]
SG_PARTY_BATTLE1 is DWORD, and EBP holds current pointer to index for getting byte
When EBP is higher than 3 (4) then parsing is done. When AL holds 0xFF, then next character is parsed. Sample party variable:
.data:01CFE74C SG_PARTY_BATTLE dd 0FF050100h
(remember to read variables from end to beginning).
Interesting note: just after party_battle dword there's UnlockedWeapons DWORD and griever name (allocated on 12 bytes including terminator)
so just change (byte):
01CFE74F - to replace 1st party member
01CFE74E - to replace 2nd party member
01CFE74D - to replace 3rd party member
Anyway-
that's wrong. I was enough reckless to not note where is the actual model ID stored and that what happened. Anyway, the new method I discovered doesn't require 1ms memory injection but simple memory change and requires you to have fixed party (if not, I'll tell you how to calculate it)
Let's get started:
ParseBattleParty+93 push eax ; eax stores Party member ID as variables from above
ParseBattleParty+94 call ParseBattleCharacter
ParseBattleCharacter in PC2000 is located at: 495520
Step by step:
mov ebx, [esp+CharacterID]
;EBX now stores party ID. Here 00 because Squall is first in party
ParseBattleCharacter+A lea eax, [ebx+ebx*8] ;
dark magic shit
ParseBattleCharacter+17 lea edi, [ebx+eax*2] ;
another dark magic shit
ParseBattleCharacter+20 mov dl, SG_CHARACTER_MODEL_ID[edi] ;
DL stores
real model ID from
King's Edgar codes
SG_CHARACTER_MODEL_ID is at
01CFE0F0
Now math time!
If Squall (ID=00) is in party, then:
x=(0+0*8 )
y=x*2 + 0
z = ((x+y) << 3) + SG_CHARACTER_MODEL_ID_ptr
If Selphie (ID==05) is in party, then:
x=(5+5*8 )
y=x*2 + 5
z = ((x+y) << 3) + SG_CHARACTER_MODEL_ID_ptr
Example calculation in python for selphie:
Code: [Select]
will give 0x2f8
Then: 01CFE0F0 + 0x2F8 = 01CFE3E8 = Byte to change - you can do it in CE freely
Changing 01CFE3E8 to 0x20 will give you Cockatrice instead of Selphie in party
Non-hacker guide: (2000 PC)
Now, I'm pretty sure you don't want to do all the calculations and also you don't have all engine IDs for party, so I pre-calculated values for you:
Squall replace- 0x1CFE0F0
Zell replace- 0x1CFE188
Irvine replace- 0x1CFE220
Quistis replace- 0x1CFE2B8
(CharID=4)- 0x1CFE350
Selphie replace- 0x1CFE3E8
Non-hacker guide: (Steam)
I know many of you play Steam version, so here are the codes for Steam:
ParseBattleParty is 0048B7E0 sub_48B7E0
ParseBattleCharacter is 00495530
so SG_CHARACTER_MODEL_ID_ptr is byte_1CFE0F0 (01CFE0F0)
Therefore 2000 PC version and Steam version BOTH SHARE THE SAME ADDRESSES.