• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
October 23, 2020, 04:05:56 am

News:

Don't be hasty to start your own mod; all our FFT modding projects are greatly understaffed. Find out how you can help in the Recruitment section.


Tutorial Requests

Started by RavenOfRazgriz, September 17, 2012, 07:00:39 pm

Mrfuzzy

AHHHHHH I'm new and I'm a n00b
I hate it but I know how intelligent and willing this community is please help me
I'm been a fft since forever but I've never done modding before
I'm trying to turn a fft patcher into a ppf so I can eventually patch the vanilla game and I'm stuck . Please anyone who can personally help me I would greatly appreciate
Also I'm here to make some friends
Btw I'm happy to have joined everyone here
  • Modding version: PSX

Elric

Look though this post

http://ffhacktics.com/smf/index.php?topic=9204.0

ISO Patching Tutorials is the section you want.
  • Modding version: PSX
<@Angel> Teach a man to fish and he'll open up a fishery to compete against yours.


Journey of the Five Youtube ChannelThe Lion War Current Status
  
Jot5 Leader :: Eventer :: OtherTLW Leader :: Eventer :: Other

Nyzer

Quote from: Mrfuzzy on June 22, 2017, 05:54:08 am
I'm trying to turn a fft patcher into a ppf so I can eventually patch the vanilla game




FFTPatcher is a program you mod the game with. Download it, open it, select your ISO.

PPFs are for patching already completed mods.
  • Modding version: PSX & WotL
  • Discord username: Nyzer

Mrfuzzy

Okay so let's say I go into fft patcher and I start from scratch
After I'm done what exactly do I do???
How do I turn it into a bin so I can play it??
  • Modding version: PSX

Nyzer

  • Modding version: PSX & WotL
  • Discord username: Nyzer

Mrfuzzy

Okay so I tried to do that and after I select the fft vanilla bin file it tells me to find the " cd-tool.exe " idk what that is
  • Modding version: PSX

Nyzer

  • Modding version: PSX & WotL
  • Discord username: Nyzer

Xifanie

Please use the latest version of the FFTPatcher suite and not the oldest...
  • Modding version: PSX
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

Elric

Please keep your posts on the forum, rather than PMs... PMs are for things that don't need to be posted here, where others can help you.
  • Modding version: PSX
<@Angel> Teach a man to fish and he'll open up a fishery to compete against yours.


Journey of the Five Youtube ChannelThe Lion War Current Status
  
Jot5 Leader :: Eventer :: OtherTLW Leader :: Eventer :: Other

Mrfuzzy

Thanks everyone for the quick reply and the help
I have the newest version and so I'm testing it out
You guys just opened the door to new horizons for me thank you
  • Modding version: PSX

Nyzer

Quote from: Elric on June 22, 2017, 11:37:44 am
Please keep your posts on the forum, rather than PMs... PMs are for things that don't need to be posted here, where others can help you.


Not only that, but try to avoid PMing the mods about a few-hour old post, especially considering the time of day you made your posts at - or should I say time of night?

I get that you want to get started modding right away, but PMing for that purpose, at a time when most people in the same general time zone are likely asleep, is not going to earn anyone's respect.
  • Modding version: PSX & WotL
  • Discord username: Nyzer

Mrfuzzy

Hahaha yeah I know it was pretty late
Sorry about that
I honestly didint really know how to go about asking for help
To be honest I didn't think anyone would reply at all
So my desperate method was not to annoy anyone
I really thought people rarely got on the site
  • Modding version: PSX

Blitzball Pro

I would like a tutorial on modifying or creating new R/S/M abilities. I assume outside of patcher it requires at least some basic ASM skills. Also I know it's possible in FFT patcher to make use of unused slots, for example some of the empty formula slots can be used for new formulas, and possibly unused ability slots etc. Anyways, is there a way to assign text to unused but present in game slots?
That moment when Delita smacks Olan around and you realize his holy days are over . . .

Nyzer

I'm pretty sure that RSM editing is exclusively done through ASM.
  http://ffhacktics.com/smf/index.php?topic=9204.0
  • Modding version: PSX & WotL
  • Discord username: Nyzer

Daydreams5

I'm trying to work on making these formulas (with very little knowledge on ASM, but an okay-ish level on C++, idk if it helps):

DMG = (Caster Lvl * Caster Faith * Caster MA / X) + Y  {Subject to M-Ev} ### trying this out as a way to balance magical damage, X and Y are values exactly like those in FFTPatcher
Heal1 = Same as above, but without M-evasion

Heal = [Heal 1]/2 + (tgt Max HP - tgt Cur HP)/5 ### heal for Z+20% missing HP (I'm still figuring out if the % healing should be MA/100)

DMG = (insert random Phys Dmg here) * (100 - TargetBrave/3)/100 {subject to P-Ev} ### Trying to use brave as means to reduce incoming phys damage

I saw that there's several blank slots in the FFTPatcher "Formulas" menu-thing and I thought "welp, How hard can it be?" I want turn the blanks into useful stuff - is it feasible with little ASM experience but lots of free time?

Also - I've seen Xif's, formerDC's, and Pokey's tutorials, but apparently none of them talk about including things into the game (I assume that's because it's an uber hard process, which scares me a bit, lol)

sidenote: This topic (http://ffhacktics.com/smf/index.php?topic=8841.0) is cool, but I also needed a few Healing shenanigans like those mentioned abovve to be completely happy with my patch... (I've basically looked at all of these (http://ffhacktics.com/smf/index.php?topic=9204.0 ), but couldn't really find how to insert new formulas, so.... here I am, lol)

sidenote2: i'd also like to know which up-to-date softwares you guys use for meddling with damage formulas

Thanks in advance :D Cheers!
  • Modding version: PSX
Official Newbie - at your disposal for facepalm-demaning posts!

Pride

Well building new formulas isn't terrible difficult, and yes we can replace those blank formulas with new custom formulas. In terms of making what programs we use, I use Xifanie's Spreadsheet but we can just use a text editor like Notepad or Notepad++, FFTorgASM, and MassHexASM if you're not super familiar with excel or you don't have it. So first we need to a spot to place a this new hack. Allocated Space has sections of BATTLE.bin that are being used or planned on being used by ASMers. If you don't plan on using a hack from one of these hackers we can take spot from there or take a spot in the kanji space that isn't being used. We'll borrow the start of Sentinal Blade's section (0xEA0E4) for this example. We'll add 0x67000 to this offset so we can get its proper place in RAM or 0x801510E4 (see Offset Conversion).

Now that we have where the hack will go, we'll change the pointer found on the Formula Table. We'll change the pointer for Formula 18 at 0x0018F670 to E4101580. Remember we have to flip these bytes or you'll end up somewhere you don't want to be and just crash the game when you try to use an ability with this formula. As a note, we can move these pointers for formulas that we aren't going to use anyways and write new code; I'm just using formula 18 since you mentioned the blank ones but I could move the pointer to any of the others. Now, we might as well set up our new xml at this time too.


<?xml version="1.0" encoding="utf-8" ?>
<Patches>
  <Patch name="Formula 18 Edit">
    <Location file="BATTLE_BIN" offset="128670">      #Offset to table location; remember this is saving to the file and not RAM so we -0x67000 from the offset
      E4101580      #new pointer
    </Location>
    <Location file="BATTLE_BIN" offset="EA0E4">         #Offset to new formula routine
 
  </Location>
  </Patch>

</Patches>


Now that we have all our set up done, let's take a look at how formulas are set up. We can look at vanilla formulas to see how they normally go through the modifier routines and all that. Formula 31 or Formula 08 are good examples to see how the game normally processes these. Typically they'll go Evasion Routines -> Set Base XA & YA -> XA Modifiers -> XA */+ YA -> Elemental Half, Resist, and Immunity -> Faith -> Elemental Absorb -> Status. You can also do stuff like putting the dragon check or steals equipment at the start of the routine. Here's a list of some commonly used routines or if you want to look at most of the routines in BATTLE.BIN check here.



01 80188510   Physical Evasion
02 801885b8 Magical Evasion   
03 80185a9c Base Weapon XA & YA   
04 80185c94 Store MA and Y
05 80185cc0 Base XA and YA for MA + Y / 2
06 80185d00 Store PA and PA + Y / 2
07 80185d40 Store MA and PA + Y / 2
08 80185d80 Store MA and X
09 80185dac Store PA and X
10 80185dd8 Store PA and WP
11 80185e04 Store PA and Y
12 80185e30 Store Speed and X
13 80185e5c Store PA and WP + Y
14 80185e94 Formula 64 or Jump Base XA / YA   
15 80186568 XA * YA
16 8018659c XA + YA
17 80187510 Store Accuracy from XA + YA
18 80185f80 Charge Calculation
19 80185fa4 Weapon Elemental Boost
20 80185ffc Ability Elemental Boost
21 80184964 Compat
22 80186054 Attack Up/Two Hands/Martial Arts
23 8018614c Attack Up/Martial Arts
24 80186204 Magic Attack Up
25 80186254 Attacker Berserk/Frog Check
26 801862cc Defense Up
27 8018631c Magic Defense Up
28 8018636c   Protect/Frog/Chicken/Sleeping/Charging
29 80186460   Shell/Frog/Chicken
30 801864f8   Critical Hit
31 80186ed0   Weather Effects
32 80186ff8   Elemental Effects (Oil, Float, Weak, etc)
33 801870fc   Absorb Element
34 80187eb4 Status Roll
35 80187150   Faith Calculation
36 80187f24   Status Ability Inflict
37 8018acdc   Cancel: Dead for Raise skills
38 80186624   Deal % (Y/100) HP Damage
39 80187350   Undead Reversal



Now lets make a simple PA * Y formula that uses Physical Evasion, Faith (?), and inflicts Status. Let's put in the basic frame work. You'll need this for most formulas and you shouldn't change it unless you know what you're doing.



addiu r29,r29,-0x0018
sw r31,0x0010(r29)


lw r31,0x0010(r29)
addiu r29,r29,0x0018
jr r31
nop



Now let's add in physical evasion and a check to make sure the attack hit



addiu r29,r29,-0x0018
sw r31,0x0010(r29)
jal 0x80188510            #Physical Evasion
nop                     
bne r2,r0,END            #Jump to end if attack was evaded
nop

END: lw r31,0x0010(r29)
addiu r29,r29,0x0018
jr r31
nop



The END is a tag to let FFTorgASM and MassHexASM know where you want this branch to go. Alright, now we can follow the little outline and add in the rest of the functions I wanted to put in.



addiu r29,r29,-0x0018
sw r31,0x0010(r29)
jal 0x80188510            #Physical Evasion
nop                     
bne r2,r0,END            #Jump to end if attack was evaded
nop
jal 0x80185e04            #Get PA & Y
nop
jal 0x80186568            #XA * YA or in this case PA * Y
nop
jal 0x80187150            #Calculate Faith
nop
jal 0x80187eb4            #Status Roll
nop
END: lw r31,0x0010(r29)
addiu r29,r29,0x0018
jr r31
nop



Hopefully you can follow exactly where I got these values off the list and why they are in the places that they are. We can compile this code in MassHexASM, take the hex values it outputs and add them to our xml but let's add in some other modifiers as well.



addiu r29,r29,-0x0018
sw r31,0x0010(r29)
jal 0x80188510            #Physical Evasion
nop                     
bne r2,r0,END            #Jump to end if attack was evaded
nop
jal 0x80185e04            #Get PA & Y
nop
jal 0x80185ffc            #Ability Elemental Strengthen Routine (XA Modifier)
nop
jal 0x80186204            #Magic Attack Up (XA Modifier)
nop
jal 0x801862cc            #Defense Up (XA Modifier)
nop
jal 0x80186568            #XA * YA or in this case PA * Y
nop
jal 0x80187150            #Calculate Faith
nop
jal 0x80187eb4            #Status Roll
nop
END: lw r31,0x0010(r29)
addiu r29,r29,0x0018
jr r31
nop



Well it takes Magic Attack Up and Defense Up but that's fine, it'll just be some wacky physical/magical hybrid attack. But we added elemental strengthen but not half/resist/immunity/absorb, and that's cause we cant just link to the absorb routine, we need to set up a check specifically for the immunity part.



addiu r29,r29,-0x0018
sw r31,0x0010(r29)
jal 0x80188510            #Physical Evasion
nop                     
bne r2,r0,END            #Jump to end if attack was evaded
nop
jal 0x80185e04            #Get PA & Y
nop
jal 0x80185ffc            #Ability Elemental Strenghten Routine
nop
jal 0x80186204            #Magic Attack Up
nop
jal 0x801862cc            #Defense Up
nop
jal 0x80186568            #XA * YA or in this case PA * Y
nop
jal 0x80186ff8            #Elemental Half/Resist/Immunity
nop
lui r2,0x8019
lw r2,0x2d90(r2)         #Load Defender's Data
nop                     
lbu r2,0x0000(r2)         #Load byte that stores if the attack will hit
nop
beq r2,r0,END            #Jump to end if attack was affected by Immunity
nop                     
jal 0x80187150            #Calculate Faith
nop
jal 0x801870fc            #Elemental Absorb
nop
jal 0x80187eb4            #Status Roll
nop
END: lw r31,0x0010(r29)
addiu r29,r29,0x0018
jr r31
nop



Okay now I'm happy with this code and we can put it into MassHexASM and get the output and place that into our xml and save that.



<?xml version="1.0" encoding="utf-8" ?>
<Patches>
  <Patch name="Formula 18 Edit">
    <Location file="BATTLE_BIN" offset="128670">
      E4101580      #new pointer
    </Location>
    <Location file="BATTLE_BIN" offset="EA0E4">
      E8FFBD27
      1000BFAF
      4421060C
      00000000
      1A004014
      00000000
      8117060C
      00000000
      FF17060C
      00000000
      8118060C
      00000000
      B318060C
      00000000
      5A19060C
      00000000
      FE1B060C
      00000000
      1980023C
      902D428C
      00000000
      00004290
      00000000
      07004010
      00000000
      541C060C
      00000000
      3F1C060C
      00000000
      AD1F060C
      00000000
      1000BF8F
      1800BD27
      0800E003
      00000000
  </Location>
  </Patch>
</Patches>



This would be good enough to change the formula entirely. For some of the stuff you want you would need to write new XA & YA storage routines, like in this example instead of jal 0x80185e04 you would do jal 0x80?????? to the new section where you write your code to store these values. Or you could write it inline with the rest of the code. Regardless I hope this information helps.
  • Modding version: PSX
Check out my ASM thread. Who doesn't like hax?