• Welcome to Final Fantasy Hacktics. Please login or sign up.
 

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.

Topics - pokeytax

1
While it's not really a mod, the Suikogaiden Vol. 1 translation patch I have been working on is finally done.  If you love visual novels and Suikoden, or if you love one of those things and are willing to tolerate the other, it's worth a look.
2
This is an Excel workbook (Excel-only, OpenOffice won't work) that converts MIDI files (.mid) to SMD files (.SMD), which FFT can play.

It is not finished, and 10% of what you put in will come out unlistenable, but for a lot of songs it sounds... surprisingly nice.  If you apply the patch and select New Game, that will give you an idea of what an ambitious MIDI sounds like right now.  Or just listen to the .mp3, which I recorded out of pSX: Test SMD

Important notes:
- You're going to get a bum instrument once in a while.  I might be able to sort these out, or it might have to be done in "post-production".
- The files are rather large and the sound is tinny.  You may need to overwrite one of the larger tracks to get even a small MIDI to fit.  Again, still under construction.

Instructions:
Open the notebook and change the file path as desired.  You can either leave the "Y" in the yellow box to have the spreadsheet automatically spit out an .xml file which will tell FFTorgASM to overwrite MUSIC99 into the same directory, or leave it blank and just let the spreadsheet produce raw hex.  Run the "Convert" macro.  If you didn't choose XML, copy the hex and overwrite an existing file using a hex editor, then use CDMage to import that file back to your FFT ISO.  Leaving the remainder of the existing file in there is fine, there's no need to zero it.

If you're going to be trying a bunch of midis, I suggest just plopping this into your FFTorgASM folder to streamline the process.  Change path, run macro, run FFTorgASM.

I thoughtlessly neglected to mention before that this is really little more than an implementation of the excellent work gomtuu did on this a while back.  I'm not sure if anyone else helped, but if so, thanks to them as well!

EDIT: Fixed some critical bugs with sustained notes and instrumentation.  It's sounding much improved.
3/3/2014 EDIT: I fixed a really stupid bug that threw errors sometimes, although the hex output was still okay. However, I'm not certain what's causing fdc's bug without seeing the midi file. I will be back in a month or two when my schedule is clearer to see if people are still having issues.

03/Dec/2020 NYZER EDIT: Fixed a bug in the macro that caused an issue when running the Convert macro. DO NOT change the file name or it'll return. Kept the original file as the one labeled "(Old)". Also added some further instructions in the Control Panel to help anyone who might not be familiar with Excel macros.
3
Hacking/Patching Tools / Emulators with debuggers
February 09, 2013, 12:19:20 pm
pSX seems to be crashing in the item shop ("Buy") for me on Windows 7.  This is distressing as I rely on the built-in debugger.

Has anyone else tried NO$PSX yet?  It seems to be working fine for me so far (EDIT: well until I tried to go to the Formation screen), after applying a proper BIOS, although using proper register labels (v2, r1, a0, etc.) drives me nuts.  Based on my experience using NO$GBA to hack Suikoden Card Stories for GBA, this might prove to be a superior hacking emulator in the long run.

If I somehow missed a previous emulator discussion thread by all means move this there.
4
Tutorials and Learning / Pokey's ASM Tutorial: Part #0
October 24, 2011, 09:17:12 pm
ASM Tutorial #0: Breaking Code

NEEDED
pSX debugger, psxrel.exe {http://ffhacktics.com/smf/index.php?topic=5185.0}
a Final Fantasy Tactics ISO {left as an exercise for the reader}

In this lesson we are going to do the simplest thing we can: break something. Creating something is hard, but destroying something is easy. I may need to go back and do tutorial #-1 before moving on to tutorial #1, if this one is too complicated and I took too much knowledge for granted! But we'll start here for now.

You can learn to ASM.

Victory Condition

Today's goal is to break "Monster Talk" - disable its effect so the RSM slot can be used for other stuff.

Step 0: Basic Knowledge
Hex numbers are represented by "0x00". "0x08" is 8. "0x10" is 16. "0x1A" is 26. "0x100" is 256. You don't need to be able to add hex to ASM hack, that's what computers and calculators are for; but, you do need to not mix up your hex and decimals.

Step 1: Set Up A Repeatable Test Condition

To examine Monster Talk, we need to set up a situation where it has an effect. While the byte might be checked if a human talks to a human, it'll definitely be checked if a human talks to a monster; and equally importantly, we'll need a monster to test if our hack worked or not. So enter a battle with a monster and savestate when it's someone with Talk Skill's turn in range of a monster, so we can keep reloading and testing. I suggest Ramza because he's a little easier to pick out of a crowd. If at any point you goof up, reload your savestate.

Step 2: Set Up A Breakpoint

In order to find out where the code we want to edit is located, we need to set up a breakpoint. A breakpoint is a trigger that stops everything when certain memory is loaded, written, or executed.

Lots of stats are checked over the course of using Talk Skill, but what we are interested in is when it asks whether the player has Monster Talk. So we are going to put a READ breakpoint on our human unit's Monster Talk byte, which will freeze the action when Monster Talk is checked. First, though, we have to look up that byte.

Step 2A: Unit Data

The most important page on the wiki is ffhacktics.com/wiki/Formula_Hacking. It tells you about unit data in battle. Just about everything that happens in battle starts or ends with unit data, and this details what most of the bytes mean. This will let you figure out where to look, but you need to know which unit to check as well.

The following are the offsets for each unit, taken from the Final Fantasy Tactics Gameshark Handbook, which is a useful source in its own right.


 UNIT  |  ppp qqq rrr sss ttt uuu  DETAILS
======================================================
No. 17 |  1924CC  [Ally #1]
------------------------------------------------------
No. 18 |  19268C  [Ally #2]
------------------------------------------------------
No. 19 |  19284C  [Ally #3]
------------------------------------------------------
No. 20 |  192A0C  [Ally #4]
------------------------------------------------------
No. 21 |  192BCC  [Ally #5]
------------------------------------------------------
No. 01 |  1908CC  [Enemy / Guest #1]
------------------------------------------------------
No. 02 |  190A8C  [Enemy / Guest #2]
------------------------------------------------------
No. 03 |  190C4C  [Enemy]  
------------------------------------------------------
No. 04 |  190E0C  [Enemy]  
------------------------------------------------------
No. 05 |  190FCC  [Enemy]  
------------------------------------------------------
No. 06 |  19118C  [Enemy]  
------------------------------------------------------
No. 07 |  19134C  [Enemy]  
------------------------------------------------------
No. 08 |  19150C  [Enemy]  
------------------------------------------------------
No. 09 |  1916CC  [Enemy]  
------------------------------------------------------
No. 10 |  19188C  [Enemy]  
------------------------------------------------------
No. 11 |  191A4C  [Enemy]  
------------------------------------------------------
No. 12 |  191C0C  [Enemy]
------------------------------------------------------
No. 13 |  191DCC  [Enemy]  
------------------------------------------------------
No. 14 |  191F8C  [Enemy]  
------------------------------------------------------
No. 15 |  19214C  [Enemy]  
------------------------------------------------------
No. 16 |  19230C  [Enemy]  
------------------------------------------------------


In order to get the unit's Monster Talk byte, we have to add the unit offset from the table above and the data offset from Formula Hacking.

How do we know which Ally our unit is? You can either set your units up properly on the pre-battle screen, using the grid in Xifanie's ASM tutorial or the FFT Gameshark Handbook, or look for the one whose data matches the unit you're playing with. I prefer to just use Ramza and look for the ally whose very first byte is "01" for Chapter 1 Ramza. (If you're in a later chapter, it'll be "02" or "03".)



How do we know which support we want to check? After all, Monster Talk can be an innate ability or an equipped support ability. In the first hack I ever did, I checked the equipped support ability, but it turns out that we don't want to check either of these. The best place to go, and the place the game goes to check RSM, is bytes 0x8B - 0x95. These bytes always tell you exactly what RSM are active, whether innate, equipped, or hacked in. Monster Talk is part of byte 0x91, so that's the byte we want to set a breakpoint on.

Trying to add hexadecimal numbers in your head when you're starting out is asking for trouble. Just take your unit offset [1924cc] and data offset [91] and add them together in Windows Calculator's Hex mode [19255D]. That's where our breakpoint is going.

Step 2B: Seriously, Set Up A Breakpoint

Now that you are where you want to be, open the debugger by selecting Debug > Monitor > r3000.

To actually set a breakpoint, you need to right-click and Add in the Breakpoint pane of the debugger. I keep this pane in the lower right.





Make sure it's set to Read/Write, not Execute. Write is irrelevant right now but generally a good idea to leave in, since you'll want to know if something is sneaking in and touching the data before it's retrieved.

You must enter your offset specifically as hex; type in "0x19255D", not "19255D".



At this point, you should have Ramza able to Act and your breakpoint in place - the trap is set. Switch back to the game window and spring it by choosing your Talk Skill...

Step 3: Search

When the game froze up, that was a good thing! Switch over to the debugger and you'll see the message "Breakpoint on memory read" at the bottom of the screen and a ">" cursor next to a line of code in the Disassembly window. This is the line after your breakpoint triggered. The code you should see is the following:

0x133bd4:  lbu r2, 0x0091(r20)
0x133bd8: >nop
0x133bdc:  andi r2, r2, 0x0002
0x133be0:  beq r2, r0, 0x00133bf4

This is a very common code formation - it's the simplest way to check a flag and then make a decision based on the check. In fact, if you don't know anything else about ASM, this is probably the best thing to remember.

lbu says to load the byte into register 2.
nop says nothing happens. (This is what the hex string "00000000" means.) This is there because lbu needs a minute to think; you can ignore it for now.
andi says to either set register 2 to 0x0002 if Two Hands is checked, or to zero if Two Hands is not checked.
bne says to ignore this line if register 2 is not zero (Two Hands), but jump ahead if register 2 is zero (no Two Hands).

You can tell that this is addressing Two Hands and not Monster Talk because we have the line

"andi r2, r2, 0x0002"
instead of
"andi r2, r2, 0x0010".

If you pull up the Formula Hacking page on the wiki, you will see that each of the eight flags on this byte has its own value to check.



These correspond to the eight bits in a byte, but right now you just need to know you're looking for 0x0010.

Since we don't want to mess with Two Hands right now, we'll skip this. Press F9 and switch to the other window and Ramza will be walking again.

Now move the cursor onto the target - you should get another freeze. Switch back to the debugger.

0x133bd4:  lbu r2, 0x0091(r20)
0x133bd8: >nop
0x133bdc:  andi r2, r2, 0x0002
0x133be0:  beq r2, r0, 0x00133bf4

The same exact line of code. Another false alarm, press F9 and switch back. This time, press X and select a monster to talk to.


Yeah, it does this sometimes when you have to stop at multiple breakpoints. It's a nuisance. I usually try to press F9 and immediately click on the play window to cancel the "ghost" directional input. You can also turn the cursor repeat speed down in FFT's options if it's becoming a real problem.



0x1899e0:  lbu r2, 0x0091(r2)
0x1899e4: >nop
0x1899e8:  andi r2, r2, 0x0010
0x1899ec:  bne r2, r0, 0x001899fc

Success! This has a check for Monster Talk.

Everything you need to worry about right now is in these four lines, so forget about the rest.

lbu says to load the byte into register 2.
nop says nothing happens. (This is what the hex string "00000000" means.) This is there because lbu needs a minute to think; you can ignore it for now.
andi says to either set register 2 to 0x0010 if Monster Talk is checked, or to zero if Monster Talk is not checked.
bne says to ignore this line if register 2 is zero (no Monster Talk), but jump ahead if register 2 is nonzero (yes Monster Talk).

Step 4: Destroy

0x1899e0:  lbu r2, 0x0091(r2)
0x1899e4: >nop
0x1899e8:  andi r2, r2, 0x0010
0x1899ec:  bne r2, r0, 0x001899fc

So if we can make r2 always equal to zero when we get to the bne, the game will never ever trigger the Monster Talk code.

How do we do that? Well, it's easy to break something, there are lots of ways.
Maybe the most obvious way is to change andi r2, r2, 0x0010 to andi r2, r2, 0x0000. That will make r2 always equal to zero.


You could also change either lbu or andi to

or r2, r0, r0
ori r2, r0, 0x0000
and r2, r2, r0
add r2, r0, r0
addi r2, r0, 0x0000

which are all other ways of saying r2 = 0.

Or you could change bne to bne r0, r0, 0x00198000, so that instead of skipping ahead when r2 != 0, it skips ahead when 0 != 0 - never.


You can go ahead and enter this right now. Click on the Memory pane of the debugger and press CTRL+G, then enter "0x1899e8" - that's where the line of code we want to change is stored. Click on that "10" and type in "00". (It's stored as 1000 instead of 0010 because numbers are stored smallest-to-largest instead of largest-to-smallest.)

Be careful you type exactly two zeroes. Your entries will get screwed up fast if you just type one zero, then click away because it says "00" just like you want. Always type the full two-digit hex byte in.

Now if you click somewhere on the Disassembly window, you should see the line change to "andi r2, r2, 0x0000" to reflect your changes. You just made the hack!

Step 5: Verify and Share

To test your hack, delete your breakpoint (highlight it and press Delete) and press F9 to restart game flow. You should see a 00% success rate. Congratulations, you have made an almost useless skill completely useless!

How do you duplicate your hack? The hack is at RAM location 0x1899e8. Most RAM locations in battle are converted to BATTLE.BIN locations by subtracting 0x67000. So get out the Windows Calculator again and do the subtraction - this hack is at 0x1229e8.


BATTLE_BIN
0x1229e8
00


ASM Tutorial #1: Modifying Code & Reading ASM (to come)
5
Hacking/Patching Tools / Gameflow Editor
September 10, 2011, 07:44:46 pm
Xifaniedid a spreadsheet a while back called WORLD_MAP_1.00 that lets you fiddle with the conditionals on the world map. I put together a new front end for it that makes the editing more transparent. While you can't do anything you couldn't do by entering the correct hex before, it's more usable.

There are a few things that need to be touched up (several of the paths are drawing the wrong direction by default, better variable documentation, calling events not ordinarily called from main map will cause issues until I fill in that table) but if you want to take a look here it is.

Notes:
Look at an existing event to get an idea of how to replicate it. (Copy, don't Cut!) Bethla Garrison, the Deep Dungeon, and Goug Machine City obviously have some things happening.

The parameter used by "BattleSeries" events is, I think, a variable tracking your progress, but it's not the variable entered.

Camera centers the camera on a location. You must follow these by some kind of draw or erase.
BattleSeries initiates an event chain like Riovanes or Orbonne. It's also used for the branch at Bethla.
Code1D is called during the game startup.
Code1E is used in the Deep Dungeon to create a menu entry.
Code1F is used in the Deep Dungeon and seems to do something like decrement a variable and rerun the location's conditionals until the variable = 0.


v 3.00
Tacked on an ATTACK.OUT conditionals editor for the heck of it.

v 2.01
Changed to alphabet tabs to make it easier to find events.
Rewrote behind the scenes to handle things less stupidly.

v 2.00
Initial release.


Gameflow Editor download
6
Help! / Event editing
September 03, 2011, 02:43:53 pm
I am looking for event editing resources to help me write an event editor. I've never touched an event before so I have to learn everything first.

I already have:
- Kokojo's tutorial
- Xifanie's compiler/decompiler (obviously!)
- Event instructions (http://ffhacktics.com/instructions.php)

I need:
Raven's list of events??
7
Bugs and Suggestions / Wiki edit error
August 11, 2011, 10:37:09 pm
Whenever I try to edit the wiki, I get an error. Is it still down? It's cool if it's low priority at the moment, I do find it very useful though.
8
PSX FFT Hacking / ARH: Ability Requirements Hack
June 21, 2011, 06:46:03 pm


Reposting this hack because IMO it needs its own thread (mods feel free to merge this if you disagree). Xifanie's ARH is below as ARH v1.1.

If you are a newbie, this hack lets you set abilities to only be usable when ______, where the blank can be just about anything. It works like Cloud's Materia Blade requirement and ALL SWORDSKILL needing a sword equipped, but on steroids.

Because I need to upgrade this slightly to play well with ALMA, I am posting my own tweaked version here too, although it's a bit sloppy. Notably it has .xml output because opening a hex editor gives me hives.

Changelog

- Fixed for console (in theory) and added arbitrary byte to byte (or halfword to halfword) comparisons (in theory).  Use at your own risk.



- Finally made Celdia's bugfixes.



- Raven fixed a bug! Thanks Raven!
- Some Item/Throw etc. abilities were messed up and being banned.
- Status byte #1 fixed to no longer also be a required item.



- "Character" field added, limiting abilities to specific special characters.
- R/S/M field adjusted to work with ALMA better.
- Ability to wholly disable Item through Math Skill added, so they can be better used as ALMA passives.
- Restriction indices shifted up to start at 05, because I'm seriously that lazy. Will probably be fixed later.
- Export to .xml added.
- probably crashes all the damn time who even knows
9
Help! / ISO expansion/cramming in more sprites
April 15, 2011, 08:18:59 pm
I am working on a hack that doubles the job wheel to 40 slots. How do I fit in 40 more sprites (20 male, 20 female)? I have some experience hacking but spriting is not something I've touched much to date.

It's a given that I'll have to rewrite multiple loading routines and that the sprites will not fit neatly after the current generic sprites; I just want to know if it's possible to get more space or if I need to start thinking palette swaps.

As near as I can tell it's UNIT.BIN that's the biggest problem (BATTLE.BIN has already been expanded, WLDFACE.BIN has room).
10
PSX FFT Hacking / RAD 3: 35 jobs.
April 12, 2011, 08:42:20 pm
Conga line!



This spreadsheet works a lot like ALMA's: input values, press the button, out comes .xml for FFTorgASM.

If you do some FFTPatcher work, you can give these classes separate slots (e.g. Chemist A1 - A8, RSM1 - RSM3; Astrologist A9 - A16, RSM4 - RSM6) so that all they share is JP and job level. The lazy demo .ppf attached bothers to do this about half of the time.

These jobs should work like normal. They learn abilities; their skillsets become equippable secondaries; they gain JP and grant spillover JP; they have gender and job level requirements. They're only different in that they share JP and job level with their "host" jobs.

To-do:
- more types of requirements
- allow the AI to autolearn these abilities (currently it ignores RAD's existence)
- fix the status screen during battle
- monster job wheels

Known issues:
- If your squadmate can access a job but you can't, it doesn't show up at all, instead of being grayed out. This requires some painful coding and is low priority for now.
- Extra jobs don't show up in the extended status screen during battle yet (the one that resembles the Learn menu).
- Going past 15 added jobs, i.e. 32 available secondaries, causes crashes in the Secondary select menu
11
PSX FFT Hacking / Terrain/Movement data
March 13, 2011, 06:30:50 pm
While picking apart the Movement routine to make it possible to disable Movement abilities, I found some interesting data. I am just going to dump the stuff and make sense of it later; hopefully I will be able to update it with more thorough notes.

These are all RAM values, which can be adjusted by editing SCUS_942_21 at RAM minus $F800.

tl;dr
"Elemental" terrain table: 0x5E9D0
Terrain status inflict table: 0x5EA10 (e.g. Poison swamp)
Default movement cost table: 0x5EA50


Offset 0x5ea50 through 0x5ea8F is the default Movement table. These tables have $40 values, one for each of http://www.ffhacktics.com/wiki/Terrain_Surface_Types.
So offset 0x5ea62 corresponds to 0x12, "Lava".

General terrain is "01" (Natural Surface, Roof, Furniture).
Swamp is "00" (Poisoned marsh, Salt, Water plant).
Water is "02" (River, Sea, Waterfall).
Impassable terrain is "FF" (Obstacle, Darkness, Lava).

There are five more Movement tables. Subject to some shuffling, they correspond to the following:

0x5ea90: Fly/Teleport
0x5ead0: Float
0x5eb10: Walk on Water/Move in Water
0x5eb50: Move Underwater
0x5eb90: Move on Lava

All terrain tables have an "FF" byte in spot 3F and a "00" byte for "Salt" terrain (an oversight?).

Fly/Teleport and Float are "01" elsewhere.
Walk on Water/Move in Water and Move Underwater are elsewhere "01", except impassable terrain.
Move on Lava is identical to base movement, but with "Lava" set to "01".

When the table is read, "00" becomes "02" if there is weather and Any Weather is not equipped, "01" otherwise.
Values other than "FF" are converted to "01" if Any Ground is equipped.

So it seems that this determines the movement cost for different terrain. "Cannot enter water" must be covered later. Looks like a great starting point for implementing aquatic/lava monsters, or barriers that keep out demons, or even a sensible terrain system where mud/rock/furniture are harder to walk over. I will let someone who can hex edit but not ASM hack investigate further, since I have about a billion lines more of this movement mess to sift through.

Offset 0x5e9d0 is the Elemental table. Values correspond to the ability numbers of the associated "Elemental" skills. As long as you add the skill to "Elemental" as well, looks like you can use anything. Might be useful for consolidating Elemental, which as fun as it is probably doesn't need twelve abilities.
Offset 0x5ea10 is the poison-on-movement table. All values are "00" except for "80" at Poisoned swamp.
12

v 4.2
- PA/MA/SP buffs and debuffs now properly persist through item breaks, level ups, and everything else that triggers an ALMA check.

v 4.15
- ALMA's internal equipment Judge no longer throws red cards at the enemies (and dumps their stuff in your inventory).
- Some usability upgrades in progress, e.g. a Text tab so things are named correctly for your patch.

v 4.14
- Attribute offsets finally shipshape, I think. A preview issue and ALMAscript issue fixed.

v 4.13
- More bugs fixed with attribute offsets, and an HP overflow-ish issue resolved.

v 4.12
- Attribute summary added.

v 4.11
- Females can now equip bags/ribbons/perfume.
- SP/PA/MA bonuses and MOV/JMP/WP bonuses are no longer jumbled together.
- Statuses should work better.
- Disabling Move +1/2/3 and Jump +1/2/3 should work now.

v 4.10
- Well, got to release sometime. I wouldn't call this reliable but it's only half broken now.
- The skillset hack especially should be less broken, and finally handles equality checks as well as flags.

v 4.04
- This version should theoretically be good enough to be released as ALMA 4, if not ALMA 4.1. But I plan some more testing so don't hold me to that.
- It includes the old ALMA 3 disables and skillset hack, as well as limited preview.

v 4.03
- Some bugs were due to this code brushing against the end of the kanji table/freespace. I've temporarily moved it (so the hack functions) to the SentinelBlade/VincentCraven block, like a huge jerk, but I'm going to have to come up with a permanent solution, 'cause that's obviously not cool.
- That leaves limited preview and the ALMA 3 skillsets/disables as missing pieces.

v 4.02
- Changed layout so users can better avoid the acres of space wasted on passives.
- Fixed some more known issues like HP overflow at 32768 and stat buffs/debuffs not working. Getting closer to a release that's strictly superior to ALMA 3.

v 4.01
- Fixed a herd of bugs (RSM & traits not working, ALMAscript set up unintuitively, some attributes wonky...). This will continue for a while longer.
- Improved the ALMAscript description so that it's barely usable.

v 4.00
- Set bonuses implemented. An item can belong to two sets (or count twice for one set), e.g. Masamune can be in set 01 ("Genji") and set 05 ("katanas").
- Job level bonuses scrapped and replaced with simple attributes attached to jobs and secondaries. The replaced functionality will be available in ALMAscript.
- Identity attributes; e.g. Ramza (not uberSquire) gains Gained JP Up, Mustadio (not Engineer) gains Equip Gun.
- Revamped passives to work with RAD. Knight ability A4 can apply a passive to Knights and freelancers, A5 can apply to Knights and Battle Skill secondary, and A6 can apply to Knights only. There is more flexibility to give special characters global passives in their base class.
- Added "natural" stat boosts, which are affected by HPM/MPM/PAM/MAM/SPM.
- Added percentage stat multipliers for people who hate the number sixty.
- Fixed the issue where several low multipliers were all rounded down to zero instead of compounding.
- Added bonuses/multipliers for wonky stuff like evasion stats which may or may not work.
- Added brave/faith modification to attributes. YOU MUST DISABLE PERMANENT BRAVE/FAITH MODIFICATION. YOU SHOULD PROBABLY DISABLE IN-BATTLE BRAVE/FAITH MODIFICATION.
- Added the ability to strip RSM/status/elements (e.g. Flame Shield grants Absorb:Fire and Weak:Water, removes Absorb:Water).
- Added the ability to disable, enable, and disable with extreme prejudice equipment types, in that order. Example:
Knights can equip Swords.
If White Magic secondary disables Swords, Knight/White Magic cannot equip Swords.
Knight/White Magic/Equip Sword can equip Swords.
If the shield Escutcheon III hard disables all weapons, Knight/Equip Sword cannot equip Swords.
- There is an equipment check which enforces Two Swords/equipment restrictions, so stuff like Merit Awards and offhand daggers that grant Two Swords should be okay now. Two Hands might still be iffy, we'll see.
- Attributes have limited space now. Attributes 50-77 are "long" and can hold sixteen mods. Attributes 78-EF are "short" and can hold four mods.
- Attributes can be chained together; attribute 50 can hold fifteen mods and then call attribute 51, which can hold fifteen mods and then call attribute 52 to accommodate whatever monstrosities are required. (But don't have attribute 52 call attribute 50...)
- ALMAscript is going to be rad when it's done, but it's not. I'll tease it when it is.



v 3.32
- Fixed a minor bug where Lucavi gained 50 MA when any attributes applied - no biggie!

v 3.31
- Skillsets were broken, again? Really? I must have accidentally reverted to a previous version when adding previewability. Anyway they work now (hopefully).

v 3.3
- Added previewability for constant stat bumps on items.

v 3.2
- A somehow overlooked fatal bug with skillsets was fixed.

v 3.1
- A couple ugly bugs fixed with movement abilities.

v 3.0
- Skillset hack implemented: R/S/M can change the "Act" menu.
- Movement abilities can be disabled, allowing use of the slot for other purposes.
- "Equip Gear" support abilities and grayed-out support abilities for certain classes can be edited.
- The "Att. Summary" tab summarizes what your attributes do.

v 2.0
- pSXfin's persnickety attitude toward loads in delay slots has been catered to. This should be a stable release.
- Attributes rearranged for byte alignment. Don't be alarmed if the hex data seems out of order.
- Several bugs fixed, including one with "+C" entry.
- Useless Attributes II tab consolidated into Attributes.

v 1.e
- Patch currently working in ePSXe but not pSX. Yeah, I know, it's not good. I'm working on it, but I'm putting it out for now.
- Conditions on passives!
- Minimum class multipliers (HPM, etc.)
- Active R/S/M can be granted.
- Lucavi/??? stats no longer capped at 999.
- A few spreadsheet bugs caught.


ALMA: Ability-Linked Multiplier Attributes

In a nutshell, the ALMA hack lets you modify stats, status, elements, innates, and equipment availability based on a unit's loadout.

ALMA adds a new set of 160 ALMA attributes. ALMA attributes are a lot like item attributes, but they can do more; multiply stats, decrement stats, remove and grant equips or RSM, add Faith.

You can assign a multiplier attribute, or an existing item attribute to a ton of things, like jobs, known abilities, equipped R/S/M, and more.

These extra attributes are "add-ons", operating in addition to ordinary functioning - items still retain their FFTPatcher stats and item attribute, abilities still do what they normally do.


Instructions:
- Enter your changes into ALMA 4.xls.
- Copy and paste the entire 'XML' tab to a text file and save it as "ALMA 4.xml".
- Patch via FFTorgASM.

Known Issues:
- The item preview only works for flat increments/decrements of HP/MP/SP/PA/MA/MOV/JMP.
- WP and evasion modifiers are not yet functional in battle (right now the game overwrites these with actual equipment data).
- The hack is shoddily written, as the code is still in debug mode. It takes a ludicrous amount of allocated space in both BATTLE.BIN and WORLD.BIN, and even with better writing it'll still be quite large. There are no guarantees this is 100% stable. Let me know when you find a reproducible bug or crash.

To-Do:

- Finish R/S/M disables.
- Add previewability.
- Put off rounding down until the end, so several small multipliers can combine to add +1 PA.
- Revamp the ARH to allow use of Jump/Charge/Math Skill.
- Add RAD support to passives.
- Add basic scripting.

Technical Notes:
This patch branches from SCUS to BATTLE.BIN or WORLD.BIN depending on the unit ID. At the point I chose (RAM 0x5c82c, right after item attributes) unit ID (r17) is either a 0x19**** (in battle, BATTLE.BIN loaded), 0x1d**** (pre-battle placement, still BATTLE.BIN loaded), or 0x1f**** (world map formation, WORLD.BIN loaded - probably a temp location). So by branching based on unit ID, I was able to effectively add space to SCUS - the HP > min HP? and MP > min MP? checks the branch overwrites are duplicated in the routine.

I will document and post my code for this (although it's hideous; among other things, the SCUS branch takes almost twice the space it needs, and there are ton of hastily-inserted nops in the routine because I didn't know what load delay was until debugging).

Thanks to:
FDC, for where to patch the SCUS code I needed
Xifanie, for the ASM tutorial and the ARH hack
posters to the request thread, for tossing out ideas which led to this

Questions/comments/suggestions/scoldings solicited! This is not a finished product, it just finally stopped crashing. Right now it is a raw lump of pure functionality, so if you have an idea to make it more useful for your patch, or especially more useful in general, post it. I am going to relax a while but I'll be taking notes.
13
Bugfixes/Improvements


WORLD_WORLD_BIN
0x42D6C
40100700
2010E200
00210200
0680023C
20204400
B8108424
01008290
FF00C330
06006210
0F008330
0E006328
FAFF0314
02008424
02000010
00000000
0040C634
01001026
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
0x44B08
0680013C
0x44B28
0680013C
40280300
20286500
00290500
20082500
B8102124
01002294
62008594
00000000
0200A214
02002124
620080A4
0F002530
F8FF0514
00000000
F8FF2120
01002294
64008594
00000000
0200A214
02002124
640080A4
0F002530
F8FF0514
00000000
F8FF2120
01002294
66008594
00000000
0200A214
02002124
660080A4
0F002530
F8FF0514
00000000
F8FF2120
62008194
64008294
00000000
02004114
00000000
620080A4
66008294
00000000
02004114
00000000
620080A4
64008194
00000000
02004114
80101400
640080A4

Instead of preventing Chemist & Throw Item / Mediator & Monster Talk / Ninja & Two Swords / Monk & Martial Arts, this hack prevents all inherent abilities from being equipped. So in vanilla it alters nothing, but it will adjust to whatever you do in FFTPatcher. If you're feeling silly, you can do things like giving Knights innate Equip Armor / Equip Sword / Equip Shield to prevent the player from equipping junk. It does not stack with the previous hack; you can't ban specific combos.

It also prevents equipping multiple copies of a single R/S/M ability, which again has no effect in vanilla, but is probably desirable if you're using a "merge Support/Movement" hack.


BATTLE.BIN
0x11C0B4
53000492


0x11C104
54001F92


0x11C110
40008430


0x11C11C
0100FF33


0x11C124
82210400


0x11C12C
24F89F00


0x11C140
2530DF00


0x11C1c0
54001F92
02008010
0100FF33
0FFFC630
00F91F00
2530E603
1000C230


SCUS_942_21
0x4E28C
23105502
03000334
E4700508
1A004300

BATTLE_BIN
0xF5390
12100000
00006392
06006492
0400632C
08006014
02000334
80008330
05006014
25180000
40008330
02006014
01000334
03000334
0580013C
20082200
0C000434
18008300
12200000
20202400
0CF18490
05000234
18004300
12100000
20102200
3CF14290
80230400
40130200
20104400
23100202
1B005700
12100000
AB760108
23800202


Hacks & Edits


Units with the specified support ability (value XX on byte WW) equipped are treated as having the specified job/skillset (job YY, skillset ZZ) for the duration of learn-on-hit checks. So if you specify byte 91, value 10, job 51, skillset 0c, units with Monster Talk equipped learn Time Magic (e.g. Haste 2 and Slow 2), not their current skillset. It should not interfere with the support ability's ordinary functioning.

A previous version of this hack functioned only for the Support slot, not for Reaction/Movement or innates. This version should be fine.

BATTLE.BIN
0xF2F14
03000292
1680053C
12000492
549FA524
0800A2A0
WW000292
0400A4A0
XX004230
04000210
ZZ000234
120002A2
YY000234
030002A2
DE390608
00000000

0xF2F54
52FF7322
0C000234
51000334
120062A2
030063A2
623A0608
00000000

0x127774
c5670508

0x127774
25104202
000062A0
D5670508



A quick fix to make all learn-on-hit checks succeed X% of the time instead of "Chance to learn" %. Obviously you could do this in FFTPatcher, but with this ASM you can manipulate that flag for crystallization/AI learning purposes instead.

BATTLE.BIN
0x127844
XX000534


BATTLE.BIN
0x10fc70
XX000534
1800A300
3378010C
12280000


XX = status bit from here (e.g. $10 for Undead, $78 for Regen + Protect + Shell + Haste)
YY = status bit offset - 3C (1C, 1D, 1E, 1F, 20)

examples:
Transparent + Chicken
XX = $10 + $04 = $14
YY = bit 3 = $1E

Innocent:
XX = $40
YY = bit 5 = $20

Sunken State
BATTLE.BIN
0x00124020
XX000234

0x00124028
YY0062A0

Caution
BATTLE.BIN
0x00124038
XX000234

0x00124040
YY0062A0

Dragon Spirit
BATTLE.BIN
0x00124050
XX000234

0x00124058
YY0062A0

Regenerator
BATTLE.BIN
0x00124068
XX000234

0x0012406c
YY0062A0


XX:
10 = level
11 = level, down
12 = speed
13 = CT
14 = PA
15 = MA
16 = Brave
17 = Faith

YY = desired boost + $80

example: XX = 16, YY = E4 converts to Brave + 100

Speed Save
BATTLE.BIN
0x124008
YY000234
862C0608
XX0062A0

A Save
BATTLE.BIN
0x123fe0
YY000234
862C0608
XX0062A0

MA Save
BATTLE.BIN
0x123ff4
YY000234
862C0608
XX0062A0

Brave Up
BATTLE.BIN
0x124090
YY000234
862C0608
XX0062A0

Faith Up
BATTLE.BIN
0x1240a4
YY000234
862C0608
XX0062A0



BATTLE.BIN
0x11AA34
E4670508

0xF2F90
F800A88F
06000810
XX000234
18005100
YY000234
12880000
1A002202
12880000
92060608
00000000


BATTLE.BIN
0x11F064
0x186064
0F000214
04006230
0D000210
1980023C
D9384290
0A000210
1980023C
CE384284
XX000134
18002200
YY000134
12100000
1A004100
12100000
1980013C
CE3822A4
1980023C
942D428C


BATTLE.BIN

Disables Potion slot
0x117798
20100000

Disables Hi-Potion slot
0x1177AC
20100000

Disables X-Potion slot
0x1177c8
20180000


BATTLE_BIN
0x118038
0c00a534


WORLD_WORLD_BIN
AAAA - BBBB: Action Abilities (fiddling not recommended)
CCCC - DDDD: Reaction Slot
EEEE - FFFF: Support Slot
GGGG - HHHH: Movement Slot

Note that these are all half-words, with the lowest byte first. So CCCC defaults to A601 for 01A6 (A Save).

0x429B8
AAAA0334
0x429C0
BBBB0234

0x429D0
CCCC0334
0x429D8
DDDD0234

0x429E4
EEEE0334
0x429EC
FFFF0234

0x429F8
GGGG0334
0x429FC
HHHH0234


SCUS_942_21
0x4E278
80FF0234

0x4C0FC
80FF0234


WORLD.BIN
0x4539C
B0008228

WORLD.BIN
0xAD7E0
09

SCUS_942_21
0x483E8
AFAEADAC
ABAAA9A8
A7A6A5A4
A3A2A1A0
9F9E9D9C
9B9A9998
97969594
93929190
FFCFCECD
CCCBCAC9
C8C7C6C5
C4C3C2C1
C0BFBEBD
BCBBBAB9
B8B7B6B5
B4B3B2B1
B0FF


Outstanding (for my own benefit, not ordered):

FFTorgASM XML is attached.

I have some vague ambitions about hacks for my own use, but I'm not sure how to do most of them yet. So in the meantime, I'm going to try to fill requests, since the last request thread seems dead - I know there is a lot of mundane stuff out there that can be done to augment FFTPatcher so might as well practice on that.

Requests will get filled in order of:
- personal interest
- applicability to ongoing project(s)
- utility-to-effort ratio

Just like every other request thread, lots of requests will never get filled, it doesn't mean you are unloved. I am pretty new to this so it may just be beyond me.
14
FFT Arena / Team submissions
November 15, 2010, 06:31:45 pm
POST ALL TEAMS HERE

RULES FOR POSTING
- 1 POST PER PERSON. MULTIPLE POSTS WILL BE DELETED WITHOUT WARNING
- ALL TEAMS MUST BE IN SPOILER TAGS
- LABEL YOUR VERSION. UNLABELED POSTS MAY BE DELETED UPON NEW VERSION RELEASES
- MAKE A NEW POST AND DELETE YOUR OLD ONE WHEN YOU UPDATE



Standard Rules of Arena Teams
-Any Zodiac, including Serpentarius, is legal
-State which palettes you want your team in
#0 Black
#1 Blue
#2 Red
#3 Green
#4 White
#5 Purple
#6 Yellow
#7 Brown

Please use the following format and request someone to record the battle if you want to.
Master Guide

RULES:
  • Teams will consist of 4 generic humans at Level 35, controlled by enemy AI routines.

  • Fury and Faith range is between 40 and 70. There is no minimum or maximum for Team Fury/Faith

  • Each unit has 3000 JP to spend on various abilities. It costs 250 JP to unlock ANY job.(includes Squire/Chemist) For example, to unlock Ninja, you only have to spend 250 JP(the 250 JP is lost forever). You do not need to unlock Squire/Knight/etc to unlock Ninja.

  • Only two units can buy any individual ability. Innates do not count towards this. (i.e. four units could have the Punch Art skillset, but only two could have purchased Earth Slash; conversely, you can have two Chemists and a Knight with Throw Item)

  • Only two units can equip any individual item.



REGISTRATION FORMAT:
Name
Gender
Zodiac
Fury
Faith
Primary Class
Secondary
Reaction
Support
Movement
Right Hand
Left Hand
Head
Body
Accessory

Primary abilities known
Second abilities known

For example
Cirno
Female
Sagittarius
60
70
Wizard
Item
Counter Magic
Magic Attack Up
Float
Wizard Rod

Flash Hat
Black Robe
Sprint Shoes

Ice, Ice 2, Ice 3, Frog
X-Potion, Ether, Remedy



  • All fields are case-insensitive. (You'll probably want to capitalize names, though)

  • Name can only be a maximum of 16 characters.

  • Sex is male or female ONLY.

  • Skillset action abilities have no limit on writing style, though the briefer yet more understandable it is, the better. Refrain from writing JP costs, though.

  • Leave any blank slots empty. DO NOT write "blank", "---", etc.

  • Don't forget proper spelling. Whilst it will probably be corrected when received, it will save people from a bit of extra work. For example, Magic AttackUP is "Magic Attack UP", Move HP UP is "Move-HP UP", H-Bag is "H Bag", etc.


You can edit your post to add new teams and retire old teams. If you have more than one team and care, just mark which one you want tested most.

Note: If you have previously posted a team for a previous version of the patch and still would like to access, please visit the "Older patch teams" thread. Teams will be moved there as they become obsolete (in other words, as they become no longer compatible with the current release.)