• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
May 01, 2024, 02:37:46 pm

News:

Use of ePSXe before 2.0 is highly discouraged. Mednafen, RetroArch, and Duckstation are recommended for playing/testing, pSX is recommended for debugging.


Is possible to do this?

Started by Rfh, March 11, 2012, 09:14:21 am

Rfh

Finally, here is the  hack:
 
<Patch name=" Good/Bad compat is +/- 12.5% and Best/Worst compat is +/- 25%">
    <Description> Good/Bad compat is +/- 12.5% and Best/Worst compat is +/- 25%</Description>
    <Location file="BATTLE_BIN" offset="011DA9C">
      82
    </Location>
    <Location file="BATTLE_BIN" offset="011DAB8">
      42
    </Location>
    <Location file="BATTLE_BIN" offset="011DAD8">
      82
    </Location>
    <Location file="BATTLE_BIN" offset="011DAF0">
      42
    </Location>
  </Patch>

This hack I think that is created by PX_Timefordeath, I only find the hack in the FFT Arena RAM. (I have learned a lot of things doing this)

About the status Dark / Evil Looking, Is there the possibility of adding CT to this status?
  • Modding version: PSX
  • Discord username: rfh

Xifanie

You can theorically if you sacrifice one other status' CT counter.
  • Modding version: PSX
Love what you're seeing? https://supportus.ffhacktics.com/ 💜 it's really appreciated

Anything is possible as long as it is within the hardware's limits. (ie. disc space, RAM, Video RAM, processor, etc.)
<R999> My target market is not FFT mod players
<Raijinili> remember that? it was awful

Rfh

I want to sacrifice Wall CT.
I find this in the byte in the Half-Word Wall CT in the end of a turn when a unit has the status wall.
0x0001 I think that is referred to Wall Status, but Wall is in 0x005B and cursed is in byte 0x0059, so I cannot change it simply.
So, how would I do this?
(I think I'm making a mess)
  • Modding version: PSX
  • Discord username: rfh

Rfh

Well, I have no idea how to do this, What should I know to do this?
  • Modding version: PSX
  • Discord username: rfh

Choto

You'd have to do a couple things

Basically you want to store whatever CT amount desired for the dark status into the wall status CT counter for the affected unit. So you need to find the routine that puts that CT in there initially when the status is applied. You'd also have to make sure that that CT isn't gonna get overwritten when Wall is applied, so to overwrite that would be convenient.

Then you also need to make it so when Status CT is lowered, if the Wall status CT = 0, then you remove the dark status.

So each status that can hold CT has a location that is written to to hold this CT amount, and is lowered each clocktick or turn or whatever. You'll find these locatiosn right after the status bytes (59,5A,etc.) in unit data. You're just gonna program it to use the dark status CT instead of Wall status CT.

I'm not sure if these routines can all be found on the wiki that you need to edit, but i think they may be up there. I also may be overlooking something but i'm not sure. Try setting a breakpoint on the Wall status CT when its applied, lowered, and removed to see where you need to change it to use dark status CT.

Rfh

April 03, 2012, 08:40:52 am #25 Last Edit: April 03, 2012, 09:31:08 am by Rfh
I use breakpoint 0x80192530, (Wall CT) but the game only freezes when the status is finished, and I can see the previous image. In the wiki nothing appears on Wall CT, but appear this: http://ffhacktics.com/wiki/Status_CT_Setting I'm tired of searching, not knowing what to do ...
  • Modding version: PSX
  • Discord username: rfh

Rfh

April 05, 2012, 02:34:12 pm #26 Last Edit: April 05, 2012, 02:41:58 pm by Rfh
I have been unable to really learn mips assembly because my English level (besides I have only 14 years) I tried the guide that Glain  posting in his topic and I was stuck in Part 3.(Just the act of writing all this text in English is awkward for me)  I've been looking for guides in Spanish, but the only ones I've found using a very cultured language and involve knowing things in advance. If someone could sacrifice Wall CT the to put CT in cursed status ...would greatly appreciate it, really. I swear I will be the last ASM hack to ask in this forum. (The simple things I know to do them). In the future, when I know more things, I'll try again. I also get good marks in my secondary school, and I always have been the goal to study ''ingenieria en informática'' in english I think that is computer science engineering. Perhaps here, I will learn something about Mips Assembly.
  • Modding version: PSX
  • Discord username: rfh

Rfh

April 06, 2012, 12:58:55 pm #27 Last Edit: April 06, 2012, 03:53:46 pm by Rfh
Do not know if it will be easier ... Or at least make the duration of  dark status is 2 turns and ends when the second shift ends. (I prefer with CT)
  • Modding version: PSX
  • Discord username: rfh

Rfh

I am interested in 2 formulas hacks.
The first I got it done:

  <Patch name="Formula 0C Heal_F(MA*Y) become Heal_F(MA+Y)/2*MA)">
    <Description> Formula 0C Heal_F(MA*Y) become Heal F(MA+Y)/2*MA)</Description>
    <Location file="BATTLE_BIN" offset="121F00">
      3017060C
    </Location>
  </Patch>

But my other formula hack is to transform a formula in WP * PA # Hit_ (X +1). I could change Routine Location  ''2Truth/Formula 5E-5F Calculate damage'' load WP * PA, but affect all formulas that are based in # Hit_ (X +1).
Could there be any way to do that only affects one formula?
  • Modding version: PSX
  • Discord username: rfh

Pride

Yes... But you'd have to write a new routine in some Kanji space.

[1e]
00189434: 27bdffe8 addiu r29,r29,0xffe8
00189438: afbf0010 sw r31,0x0010(r29)
0018943c: 0c06216e jal 0x001885b8    Magic Evade  <--- May want to change that to Physical Evade
00189440: 00000000 nop
00189444: 14400003 bne r2,r0,0x00189454
00189448: 00000000 nop
0018944c: 0c062269 jal 0x001889a4    Truth Formula <--- You'd have to write a new routine for this formula
00189450: 00000000 nop
00189454: 8fbf0010 lw r31,0x0010(r29)
00189458: 27bd0018 addiu r29,r29,0x0018
0018945c: 03e00008 jr r31
00189460: 00000000 nop
  • Modding version: PSX
Check out my ASM thread. Who doesn't like hax?

Rfh

One question, where is the space kanji?
  • Modding version: PSX
  • Discord username: rfh

Pride

http://ffhacktics.com/wiki/Allocated_space

You could probably just use Sentinal Blade or VincentCraven's space and that's the BATTLE.BIN offset, you need to add 0x67000 to get the RAM offset
  • Modding version: PSX
Check out my ASM thread. Who doesn't like hax?

Rfh

April 10, 2012, 10:49:24 am #32 Last Edit: April 10, 2012, 11:00:58 am by Rfh
I have done, this, but the game freeze when I select a target with the formula:

<Patch name="Formula 5F become Dmg (PA*WP) # Hit_ (X +1)">
<Description>Formula 5F become Dmg (PA*WP) # Hit_ (X +1)</Description>
<Location file="BATTLE_BIN" offset="123AD0"> -- In the formula 5F
4421060C (jal 0x00188510) -- Physical Evade Calculation
</Location>
<Location file="BATTLE_BIN" offset="123AE0"> -- In the formula 5F
C747050C (jal 0x00151f1c) ''Truth Formula''  -- Jump to offset EAF1D (Kenji Space of VicentCraven)
</Location>
<Location file="BATTLE_BIN" offset="EAF1D"> -- In the Kanji space
(These hex is the same that routine ''2Truth/Formula 5E-5F Calculate damage'')
E8FFBD27
1000BFAF
3017060C (jal 0x00185cc0) ''Get XA and YA''  (I need to change it by 7617060C (jal 0x00185dd8) for Store WP and PA, but the game freezes in the both cases.
00000000
5922060C
00000000
1000BF8F
1800BD27
0800E003
00000000
</Location>
</Patch>

What is the wrong?

Other formula that I'm interested is convert formula 24 Dmg ((PA+Y)/2*MA) in to 24 Dmg ((PA+Y)*XX/YY/2*MA):
I change the routine location ''Store MA and PA + Y / 2''

<Patch name="Formula 24 Dmg ((PA+Y)/2*MA) become 24 Dmg ((PA+Y)*XX/YY/2*MA)">
<Description>Describe Your Patch Here</Description>
<Location file="BATTLE_BIN" offset="11ED48">
37006290
1980013C
CE3822A4
36006290
1980033C
FA386390
21104300
XXXX0200 (sll r2,r2,0x0X) For example, If I change to 0x02  the value is multiplied by 2, if you put 3 is multiplied by 4...
YYYY0200  (sra r2,r2,0x0Y) The same, but divided
1980013C
00000000
</Location>
</Patch>


This patch works, but I want to do something like ''Pride's Formula 2D becomes (PA + Y)*XX/ZZ*WP'' in that I can multiply that by 3 and divide by 3. How can I do this?
  • Modding version: PSX
  • Discord username: rfh

Pride

The first one seems like it should work... Not sure off hand (or maybe I'm looking at it wrong since I'm tired)

And the second you need to use Mult and Div such as...


lui r2,0x8019
lw r3,0x2d94(r2) Load Attacker's Data
lbu r4,0x38fa(r2) Load Ability Y
lbu r2,0x0036(r3) Load Attacker's PA
lbu r3,0x0037(r3) Load Attacker's MA
add r4,r4,r2 PA + Y
ori r2,r0,0x0003 Set Numerator as x03
mult r3,r2 MA * 3
mflo r3 Move to r3
lui r2,0x8019
sh r4,0x38d0(r2) Store PA + Y as YA
ori r4,r0,0x0004 Set Denominator as x04
div r3,r4 MA * 3 / 4
mflo r3 Move to r3
jr r31 Return
sh r3,0x38ce(r2) Store MA * 3 / 4 as XA
  • Modding version: PSX
Check out my ASM thread. Who doesn't like hax?

Rfh

May 09, 2012, 09:02:36 am #34 Last Edit: May 09, 2012, 09:26:37 am by Rfh
(- All this time been without internet...)

Thanks FFH members!, I have learned to create many types of formulas, is not very difficult!

But.. I want to do other types of hacks...

Change some  easy things like the regen recovery I had no problem... but basically I like to do 3 hacks...




1- I want that Shop Availabity is based on your Highest Party Level and the level for unlock each item is the value put in ''Enemy level'' in FFPatcher.

Glain helps me, and gave me some information.
I managed to do that the shop availabity load the value put in ''Enemy Level'' instead of ''Shop Availabity'' with this hack:


  <Patch name="Enemy Level'' instead of ''Shop Availabity">
    <Description>Enemy Level'' instead of ''Shop Availabity</Description>
    <Location file="WORLD_WORLD_BIN" offset="0451BC">
      BA2E2290
    </Location>
  </Patch>

But now I need to change that the game load the Highest level party instead of Story Progression, but do not really know how to do this...
Glain tell me: ''0x125128: Normally it calls routine 0xef1a8 here, which loads the value of a script variable (in this case, shop availability), but we would want to change it to load the highest party level. Data Locations says this is at 0x66308, so we should be able to just load it in, as that seems to be SCUS memory (almost at the very end of it)'' But I haven't understand what happens in this offset and in offset 0xef1a8.

2- Do not know if it will be possible at this time... Could it be possible to have a unit to equip more than one accessory? (you can use for example the headgear or hand slot to equip an accessory.) The only thing that I know is changing the length of each type of object by changing a few bytes that I discovered them thanks to a pokeytax hack.

3- I like to do that all units become immortal except undeads... but I dont't know what routine I need to edit. I think that I need to edit a ''branch is the unit is immortal''


  • Modding version: PSX
  • Discord username: rfh

Choto

Excellent job Rfh! I'm glad you learned quite a bit about making hacks!

My last final is tomorrow, so friday i plan on finishing up a few FFH related things, and i'll look into what you posted and see if i can help.

Glain

May 09, 2012, 11:09:45 pm #36 Last Edit: May 10, 2012, 10:42:29 am by Glain
I suppose I didn't clarify that too well...

0x125128 is where the game loads in the current storyline shop availability, so that it can check that value against all the item values to figure out what should be available in the shops.

Right now, it's calling a routine at 0xef1a8, with r4=0x6f, that loads the variable into r2 (the routine return value register):

00125128: 0c03bc6a jal 0x000ef1a8
0012512c: 3404006f ori r4,r0,0x006f      # r2 = shop availability

You just need to replace those lines with something that will instead load the highest party level into r2, because that's what we want to compare against the item level values. The highest party level is in memory at 0x66308, so you're probably looking at:

lui r2,0x8006
lbu r2,0x6308(r2)

EDIT - Highest party level is probably a byte, not a word... changed lw to lbu.
  • Modding version: Other/Unknown

Rfh

1: I don't know what I have to do... I think I have to learn even more things

2: I need to find the routine that makes that each slot of the unit equipment select the type of item and change this.

3: I do this:

<Patch name="death countdown only for undeads">
    <Description>death countdown only for undeads</Description>
    <Location file="SCUS_942_21" offset="4E37C">
5800E290
00000000
10004230
07004010
FF000234
5800E290
00000000
10004230
02004010



</Location>
<Location file="SCUS_942_21" offset="4DC8C">
58000292
00000000
10004230
07004010
FF000234
58000292
00000000
10004230
02004010

</Location>
  </Patch>

The only problem of this is that when a unit that isn't undead (a normal unit) die, the unit appear as a immortal unit, but after a turn, happens a graphic glitch on the unit, but otherwise the patch works perfectly. Maybe I need to edit something more...
I like that the undead revive is at 100% and retores all HP, but I don't really understand the routine in which it occurs. (0x 00183078 in RAM)
  • Modding version: PSX
  • Discord username: rfh

Rfh

May 14, 2012, 05:27:38 pm #38 Last Edit: June 22, 2012, 08:43:21 am by Rfh
Thanks Choto for comment the routine!

The finish version of the hack (It haven't got the graphical glitch)


 
   <Patch name="death countdown only for undeads">
    <Description>death countdown only for undeads</Description>
    <Location file="SCUS_942_21" offset="4E37C">
5800E290
00000000
10004230
07004010
FF000234
5800E290
00000000
10004230
02004010



</Location>
<Location file="SCUS_942_21" offset="4DC8C">
58000292
00000000
10004230
07004010
FF000234
58000292
00000000
10004230
02004010

</Location>



<Location file="BATTLE_BIN" offset="11C128">
58000292
00000000
10004230
5F004010
21100000
58000292
00000000
10004230
5A004010


</Location>
  </Patch>
  • Modding version: PSX
  • Discord username: rfh

Rfh

I have 2 questions,

What is the meaning of ''Counter'' put in the comments of this routine?: http://ffhacktics.com/wiki/Status_CT_Setting
What is the value of r4 if r5=0x18 in this command?: addiu r4,r5,0xffe8  (0xffe8 + 0x18 = 0x10000)
  • Modding version: PSX
  • Discord username: rfh