• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
March 28, 2024, 11:47:15 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 or our Discord!


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 - dw6561

1
FFT Arena / What should happen to counter flood?
November 19, 2016, 07:41:06 pm
Counter flood has been shown to be bugged (dealing unintentional increases/decreases in damage) in a way that can influence matches, and I am unable to fix the problem currently. What should we do to it?

EDIT: I need to mention that I came up with counter comet, which would basically do the same thing but be much more balanced. It counterattacks with comet if attacked by something with the counter flood flag.
2
Help! / Can someone help me with my code?
October 07, 2016, 03:24:06 am
I'm trying to make brave and faith work differently. What my hack is supposed to do is whenever brave and faith are changed, it would add or subtract 5 brave when the unit gets their turn, gradually bringing the unit back to their original brave and faith. I want this to work even if a unit is dead, and after the unit's turn is over. But the hack is just immediately returning the unit to their original stats, or doing it per clocktick instead of per turn (not entirely sure which). I'm thinking I put this hack in the wrong place. I've been putting it in the end section of the "in between turn control routine" if that helps.

Don't mind the somewheres, those are just how I code things when I don't know the exact locations of jumps. I wrote all of this by hand btw, but I think I ironed out the myriads of mistakes I made when I first coded it. There are probably several ways I can optimize this code too, but first I need to know where to put the dang thing.


Location of hack: Battle.bin, E83AC (0x0014f3ac)
Place where hack jumps from: Battle.bin, 11C020 (0x00183020)

3c038019 lui r3,0x8019   
8c632d94 lw r3,0x2d94(r3)      Load attacker data pointer
00000000 nop
90640023 lbu r4,0x0023(r3)      Load original brave
90650024 lbu r5,0x0024(r3)      Load current brave
10850014 beq r4,r5,somewhere   Branch to faith changes if current = original
00000000 nop
0085082a slt r1,r4,r5         Set if r4 < r5
10200009 beq r1,r0,somewhere   Branch if less than original???
00850823 subu r1,r5,r4         r1 = current - original
28210005 slti r1,r1,0x0005      Set if less than 5
10200003 beq r1,r0,somewhere   Branch if greater than or equal to 5
00000000 nop
1000000c beq r0,r0,somewhere   Jump to faith changes
a0640024 sb r4,0x0024(r3)      Store current = original
24a5fffb addiu r5,r5,0xfffb      Current brave - 5
10000009 beq r0,r0,somewhere   Jump to faith changes
a0650024 sb r5,0x0024(r3)      Store new brave

00010823 subu r1,r0,r1         r1 = original - current
28210005 slti r1,r1,0x0005      Set if less than 5
10200003 beq r1,r0,somewhere   Branch if greater than or equal to 5
00000000 nop
10000003 beq r0,r0,somewhere   Jump to faith changes
a0640024 sb r4,0x0024(r3)      Store current = original
24a50005 addiu r5,r5,0x0005      Current brave + 5
a0650024 sb r5,0x0024(r3)      Store new brave

90640025 lbu r4,0x0025(r3)      Load original faith
90650026 lbu r5,0x0026(r3)      Load current faith
10850014 beq r4,r5,somewhere   Branch to end if current = original
00000000 nop
0085082a slt r1,r4,r5         Set if r4 < r5
10200009 beq r1,r0,somewhere   Branch if less than original???
00850823 subu r1,r5,r4         r1 = current - original
28210005 slti r1,r1,0x0005      Set if less than 5
10200003 beq r1,r0,somewhere   Branch if greater than or equal to 5
00000000 nop
1000000c beq r0,r0,somewhere   Jump to end
a0640026 sb r4,0x0026(r3)      Store current = original
24a5fffb addiu r5,r5,0xfffb      Current faith - 5
10000009 beq r0,r0,somewhere   Jump to end
a0650026 sb r5,0x0026(r3)      Store new faith

00010823 subu r1,r0,r1         r1 = original - current
28210005 slti r1,r1,0x0005      Set if less than 5
10200003 beq r1,r0,somewhere   Branch if greater than or equal to 5
00000000 nop
10000003 beq r0,r0,somewhere    Jump to end
a0640026 sb r4,0x0026(r3)      Store current = original
24a50005 addiu r5,r5,0x0005      Current faith + 5
a0650026 sb r5,0x0026(r3)      Store new faith
08060c0a j 0x00183028         Back to main routine
8fa60010 lw r6,0x0010(r29)


If anyone knows where this should go or sees any glaring mistakes, please let me know.
3
FFT Arena / Dancer Skill Set Rework?
September 08, 2016, 04:36:09 pm
Hey guys, I had some interesting ideas for dances and Andrew suggested I make a new thread for it. So here you go. Remember though that these are just me brainstorming and it's not at all set in stone what the skills do or even if they are all included. This idea will turn dancers into decent close up units that can use punch art/other physical skills or their cloths without ignoring their own innate skills. Dance will no longer need mimic to follow up, and will no longer be as trolly/spammy as it is now. The idea with making them all 0 range is because I want them to have to stay in the action (which IMMEDIATELY makes me think of the new cloth ideas we made- Cashmere for initial protect/shell + auto potion sounds like a great dancer set up). Hopefully this also makes the AI actually STOP dancing lol.

Wiznaibus: 2-3 AoE, 0 Range (doesn't hit caster), retains current formula
Witch Hunt: Deals MP damage, 3 AoE, 0 Range
Dirty Dance: 2 AoE, Either deals 1 damage, or Target's current HP - 1 damage if it hits
Nameless Dance: Inflicts Darkness, DM, Slow, or Oil if it hits, 2 AoE (will need higher hit rate to compensate), 0 range
Square Dance: Jarbles the code, turning every unit into a crystal
Tap Dance: 3 AoE, 0 Range, 50% hit, Creates odd soundwaves, dispeling most positive statuses (what it includes can be discussed, however should at least cancel faith/innocent)
Swords Dance: 2 AoE, 0 Range, 5-6 CT, Dmg_[Weapon] (weapon elemental can be debated), Hit 50% (more jobs could use dance, but the 50% hit rate balances it. Basically, an elemental spin fist with concentrate + darkness. Synergizes very well with Dancer's PA and would definitely help with mitigating the effects of evasion for all units)
Ballet: 2 AoE, 0 Range, 100% add slow, ?? CT no persevere (only if haste 2/slow 2 go bye bye)
Foxtrot: 2 AoE, 0 Range, 100% add Haste, ?? CT no persevere (only if haste 2/slow 2 go bye bye, this may not seem balanced but it will help with the masamune issues. Plus, this skill set is a LOT more useful for physical units than Draw Out or time magic is, and it can be used on non-mages.)
Last Dance: Becomes instant, 2 AoE/0 range like the other new dances and loses persevere (Altima 2 will use return 2 like mad sometimes, so we MIGHT want to study how the AI uses this before implementing it.)
4
PSX FFT Hacking / DW's ASM Thread
August 19, 2016, 08:58:36 pm
Credits to Emmy for helping me fix the smart brave/faith hack!

RSM Hacks:

<Patch name="Brave up triggers on MP Cost">
<Location file="BATTLE_BIN" offset="00125B88"> 5F420508 00000000 </Location>
<Location file="BATTLE_BIN" offset="000E997C"> DD33060C AD010434 09330608 00000000 </Location>
</Patch>


<Patch name="Abandon gives 100/XX% evasion bonus">
<Description>Fixing an old hack by FFM. Not sure if this hack was already fixed by someone else, but here you go anyway. The first section is vanilla, so you don't have to use that (it's mainly for when I patch FFT Arena with it).

For 50% evasion bonus, XX = 43 and for 33% bonus, XX = 4b
</Description>
<Location file="BATTLE_BIN" offset="11E3BC">
1980033c
dc386324
00006290
00000000
</Location>
<Variable name="XX" file="BATTLE_BIN" offset="11E3CC" />
<Location file="BATTLE_BIN" offset="11E3CD">
000234
000062a0
</Location>
</Patch>


<Patch name="Geomastery RSM">
<Description>Replaces Secret Hunt/Train Routine with Geomastery. Example: If a unit is standing on Lava (which corresponds to Lava Ball, which is fire elemental), this movement will boost all Fire elemental skills. If the unit is standing on Grass (which corresponds to Hell Ivy, which is non-elemental), this movement will do nothing. Default for this RSM is Move on Lava. Will be coded to work with weapons shortly :)</Description>
<Location file="BATTLE_BIN" offset="124988">
00000000
</Location>
<Location file="BATTLE_BIN" offset="11EFFC">
e8ffbd27
1000bfaf
281f060c
00000000
834e050c
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
<Location file="BATTLE_BIN" offset="120CA0">
e8ffbd27
1000bfaf
1980023c
942d428c
00000000
95004390
00004434
20006330
16006010
00000000
b6fc050c
00000000
0680033c
f0fb6324
0e000434
18004400
12100000
21186200
07006390
00000000
08006010
00000000
1980023c
942d428c
00000000
71004490
00000000
25186400
710043a0
1000bf8f
1800bd27
0800e003
00000000
</Location>
<Location file="BATTLE_BIN" offset="ECA0C">
1980023c
942d428c
1980033c
f7386390
71004290
00000000
24104300
0c004010
00000000
1980033c
ce386384
00000000
80100300
21104300
02004104
00000000
03004224
83100200
1980013c
ce3822a4
0800e003
00000000
</Location>
</Patch>


<Patch name="Geomastery works on Weapon Attacks">
<Location file="BATTLE_BIN" offset="11EFA4">
e8ffbd27
1000bfaf
281f060c
00000000
994e050c
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
<Location file="BATTLE_BIN" offset="ECA64">
1980023c
942d428c
1980033c
04396390
71004290
00000000
24104300
0c004010
00000000
1980033c
ce386384
00000000
80100300
21104300
02004104
00000000
03004224
83100200
1980013c
ce3822a4
0800e003
00000000
</Location>
</Patch>


<Patch name="Disables Move+1">
<Location file="SCUS_942_21" offset="4D11C"> 00000000 </Location>
</Patch>
<Patch name="Disables Move+2">
<Location file="SCUS_942_21" offset="4D128"> 00000000 </Location>
</Patch>
<Patch name="Disables Move+3">
<Location file="SCUS_942_21" offset="4D134"> 00000000 </Location>
</Patch>
<Patch name="Disables Jump+1">
<Location file="SCUS_942_21" offset="4D140"> 00000000 </Location>
</Patch>
<Patch name="Disables Jump+2">
<Location file="SCUS_942_21" offset="4D14C"> 00000000 </Location>
</Patch>
<Patch name="Disables Jump+3">
<Location file="SCUS_942_21" offset="4D158"> 00000000 </Location>
</Patch>
<Patch name="Disables Move-Get EXP">
<Location file="BATTLE_BIN" offset="126E1A"> 00 </Location>
</Patch>
<Patch name="Disables Move-Get JP">
<Location file="BATTLE_BIN" offset="126E82"> 00 </Location>
</Patch>


<Patch name="Move/Jump+X Routine Condensation">
<Description>Removes the checks for move/jump +2 and 3, and nops space afterward. This frees up SCUS space from 0x5c950-0x5c980. Useful if you are only using move/jump+1 for your hack.</Description>
<Location file="SCUS_942_21" offset="4D0EC">
0500a014
00000000
2a008294
2e008394
280082a4
2c0083a4
3a008590
93008690
3b008390
8000c230
02004010
1000c230
0100a524
02004010
00000000
01006324
fd00422c
02004014
ffff6230
fc000534
0800422c
02004014
3a0085a0
07000334
0800e003
3b0083a0
</Location>
<Location file="SCUS_942_21" offset="4D150">
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
</Location>
</Patch>


<Patch name="Move-Get EXP becomes Reflect Null">
<Description>Reflectable skills become unreflectable when equipped. A word of warning: This hack also makes stuff in math skill reflectable, so don't use unless you plan on scrapping calculators!</Description>
<Location file="BATTLE_BIN" offset="125FE8">
1980033c
942d6390
1980023c
94006390
f5384290
40006330
11006010
00000000
</Location>
</Patch>


Formula Hacks:

<Patch name="Formula 26 becomes Random Steal">
<Description>Was going to be 100% status if nothing can be stolen/broken, but I couldn't really do that feasibly in 37 lines or less. I set the base chance to steal/break as 50% for each slot here.</Description>
<Location file="BATTLE_BIN" offset="122794">
e8ffbd27
1000bfaf
4421060c
00000000
1c004014
00000000
8c17060c
00000000
7e21060c
00000000
6719060c
00000000
441d060c
00000000
1980023c
982d428c
00000000
8c014390
91004290
0d006010
00000000
04004230
05004014
00000000
d076050c
00000000
0400c014
00000000
18000434
100044a0
1a0048a0
00000000
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
<Location file="BATTLE_BIN" offset="F6B40">
e8ffbd27
1000bfaf
21300000
21380000
1980023c
982d428c
00000000
21104700
1a004890
ff000334
05000311
00000000
32000534
3378010c
64000434
05004014
06000234
f2ffe214
0100e724
07000010
01000134
1980023c
902d428c
80000334
0718e300
190043a0
030048a0
1000bf8f
1800bd27
0800e003
00000000
</Location>
</Patch>


<Patch name="Turn HP damage/healing into MP damage/healing">
<Description>Useful if you wanted to make a weapon the deals MP damage, but heals MP upon absorb for instance.</Description>
<Location file="BATTLE_BIN" offset="F6AFC">
1980023c
902d428c
00000000
06004494
10000334
03008010
060040a4
0a0044a4
250043a0
04004494
20000334
03008010
040040a4
080044a4
250043a0
0800e003
00000000
</Location>
</Patch>


<Patch name="Versatile Cure">
<Description>Depends on the higher of PA or MA</Description>
<Location file="BATTLE_BIN" offset="ECA10">
1980023c
942d428c
1980043c
36002280
37002480
fa382380
2b288200
0300a010
ce3824a4
00000000
ce3822a4
0800e003
d03823a4
</Location>
<Location file="BATTLE_BIN" offset="121EF8">
e8ffbd27
1000bfaf
844e050c
00000000
1622060c
00000000
541c060c
00000000
d41c060c
00000000
ad1f060c
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
</Patch>


<Patch name="Formula 5d adds status (critical only)">
<Location file="BATTLE_BIN" offset="123A54">
e8ffbd27
1000bfaf
1980023c
942d428c
00000000
5a004290
00000000
01004230
03004010
00000000
c91f060c
00000000
1000bf8f
1800bd27
0800e003
00000000
00000000
</Location>
</Patch>


<Patch name="Formula 05 deals MP damage, heals MP on absorb">
<Description>Requires Turn HP damage/healing into MP damage/healing hack. Also accepts status procs, but doesn't show them.</Description>
<Location file="BATTLE_BIN" offset="121C9C">
e8ffbd27
1000bfaf
4421060c
00000000
0d004014
00000000
8e21060c
00000000
03004014
00000000
ad1f060c
00000000
bf76050c
00000000
00000000
00000000
00000000
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
</Patch>


<Patch name="Formula 53 becomes Faith(PA*Y)">
<Location file="BATTLE_BIN" offset="1235e4">
e8ffbd27
1000bfaf
4421060c
00000000
13004014
00000000
8117060c
00000000
ff17060c
00000000
7e21060c
00000000
df21060c
00000000
09004014
00000000
541c060c
00000000
c721060c
00000000
03004014
00000000
ad1f060c
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
</Patch>


<Patches>
<Patch name="New talk skill">
<Description>Stat + Status Hack: Replaces talk skill formula
Includes:
- (MA+X)% chance to hit
- 100% add status if ability lands
- Change PA, MA, brave, faith, or speed based on elemental flags
- Y value is between 0 and 255, determines whether it's raised or lowered (sign bit) and the amount (everything else)
- Blockable by Finger Guard

Notes:
- You can only really change one stat unless you want both stats to be changed by the same amount
- Quick and CT 00 can be done by setting a CT change of FF (255) and 7F (127), respectively.
- How to determine the Y value if you're not familiar with hex: Take the amount you want to change the stat and add 128 to make it add the stat, and leave it as is to make it subtract.

Elemental Flag correspondance:
0x19E/0x12 - (SP Change Byte)   Fire
0x19F/0x13 - (CT Change Byte)   Ice
0x1A0/0x14 - (PA Change Byte)   Lightning
0x1A1/0x15 - (MA Change Byte)   Wind
0x1A2/0x16 - (Br Change Byte)   Earth
0x1A3/0x17 - (Fa Change Byte)   Water
</Description>
<Location file="BATTLE_BIN" offset="E8334">
e8ffbd27
1000bfaf
1980023c
902d418c
fa384390
f7384290
00000000
80004430
02008010
40004430
120023a0
02008010
20004430
130023a0
02008010
10004430
140023a0
02008010
08004430
150023a0
02008010
04004430
160023a0
02008010
00000000
170023a0
1000bf8f
1800bd27
0800e003
00000000
</Location>
<Location file="BATTLE_BIN" offset="1229A4">
e8ffbd27
1000bfaf
1980023c
902d428c
00000000
00004290
00000000
1b004010
00000000
be20060c
00000000
1980023c
902d428c
00000000
00004290
00000000
14004010
00000000
6017060c
00000000
5912060c
00000000
6719060c
00000000
441d060c
00000000
1980023c
902d428c
00000000
00004290
00000000
05004010
00000000
cd3c050c
00000000
ad1f060c
00000000
1000bf8f
1800bd27
0800e003
00000000
</Location>
</Patch>
</Patches>


<Patches>
<Patch name="Status Conditional - Check if target has X status">
<Description>The status to check for is indexed as X in the patcher and it is a value between 0-27 (hex).

TUTORIAL:
Offset represented by X/8:
0-7      00000000 - 00000111 => 00000 = 0 => Group 1
8-f      00001000 - 00001111 => 00001 = 1 => Group 2
10-17   00010000 - 00010111 => 00010 = 2 => Group 3
18-1f   00011000 - 00011111 => 00011 = 3 => Group 4
20-27   00100000 - 00100111 => 00100 = 4 => Group 5

This is the offset you want to read from byte 0x0058 in the unit's data.

Last 3 bits of X value to status flags correlation:
X   Bits   Flags   Example
0   000    0x01   Wall
1   001      0x02   Stop
2   010      0x04   Slow ***
3   011      0x08   Haste
4   100      0x10   Shell
5   101      0x20   Protect
6   110      0x40   Regen
7   111      0x80   Poison

Slow is in the 4th group of statuses and has a value of 0x04. So to check for slow, we go to the start of the unit's current statuses (byte 0x0058 in the unit data) and we look 3 bytes after that. The offset is 3, therefore our first 5 bytes of the X value will be 00011. Then we need to get the last 3 bytes from the table shown above. 0x04 corresponds to 010. Now we just need to OR the two values to get the final X value: 00011010 = 1A in hex = 26 in decimal. Don't forget that the X field in patcher is decimal.</Description>
<Location file="BATTLE_BIN" offset="E8480">
1980023c
fa384390
982d428c
c2200300
21208200
58008290
07006330
47106200
c0170200
c2170200
02004010
00000334
01000334
0800e003
00000000
</Location>
</Patch>
<Patch name="Faith-based damage, 2x damage if target has X status">
<Description>Replaces formula 56. Does faith-based damage, and 2x damage if the target has a certain status.</Description>
<Location file="BATTLE_BIN" offset="1236F8">
e8ffbd27
1000bfaf
6123060c
00000000
203d050c
00000000
08006010
00000000
1980023c
902d428c
00000000
04004384
00000000
00883100
040064a4
1000bf8f
1800bd27
0800e003
00000000
</Location>
</Patch>
</Patches>


<Patches>
<Patch name="Untruth Condensation">
<Description>Removes faith/innocent checks from the untruth formula, and seperates the unfaith calculation into a subroutine.</Description>
<Location file="BATTLE_BIN" offset="122464">
e8ffbd27
1000bfaf
6e21060c
00000000
4f004014
00000000
3017060c
00000000
ff17060c
00000000
d121060c
00000000
df21060c
00000000
45004014
00000000
4d25060c
00000000
c721060c
00000000
03004014
00000000
ad1f060c
00000000
1000bf8f
1800bd27
0800e003
00000000
1980053c
902da58c
1980023c
d2384290
0400a484
23106200
18008200
1980023c
d3384290
12200000
23186200
00000000
18008300
12180000
db68023c
ad8b4234
18006200
c31f0300
10100000
03130200
23104300
0400a2a4
0800e003
00000000
</Location>
</Patch>
</Patches>


Other Hacks:

<Patches>
<Patch name="Faith/Innocent Check Removal">
<Description>Removes the faith/innocent checks from the faith calculation. Also frees up a bunch of space.</Description>
<Location file="BATTLE_BIN" offset="120150">
1980043c
902d848c
1980023c
d2384290
04008384
00000000
18006200
12180000
1980023c
d3384290
00000000
18006200
12180000
db68023c
ad8b4234
18006200
c31f0300
10100000
03130200
23104300
0800e003
040082a4
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
</Location>
</Patch>
</Patches>


<Patch name="Smart brave/faith hack 2.0">
<Description>Original idea by DW, Fixed by Emmy. :)
What it does:
- Brave and faith gradually return to original values when changed
- Works in increments of 5
- Works! :)
</Description>
    <Location file="BATTLE_BIN" offset="11c280">
E7780508
00000000
    </Location>
<Location file="BATTLE_BIN" offset="f739c">
24000B92
23000C92
26000D92
25000E92
2A106C01
0A004010
00000000
23188B01
0500622C
02004014
80006324
85000334
25002292
160023A2
01004234
250022A2
2A10AE01
0A004010
00000000
2318CD01
0500622C
02004014
80006324
85000334
25002292
170023A2
01004234
250022A2
A90C0608
00000000
</Location>
</Patch>


<Patch name="Multi-hit determined by random fire flag">
<Description>X + 1 hits, Y + 1 hits if math skill is checked.</Description>
<Location file="BATTLE_BIN" offset="1165D0">
04004590
00000000
08004530
1600a010
ff00c330
00000000
05004590
00000000
4000a530
0300a010
00000000
1980023c
fa385090
00000000
bbf50508
01000226
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
00000000
</Location>
</Patch>


AI Hacks:

<Patch name="Jump on Sleeping Unit Fix">
<Description>AI no longer jumps on sleeping allies. Replaces the check for charge.</Description>
<Location file="BATTLE_BIN" offset="137958">
09000234
</Location>
</Patch>


<Patch name="AI becomes not dumb with protect/shell">
<Description>AI will now use these statuses only if GREATER than 50% HP.</Description>
<Location file="BATTLE_BIN" offset="137CD4">
01004230
03004010
</Location>
</Patch>


<Patch name="AI Throw Item Fix">
<Description>AI correctly sees throw item as 4 range.</Description>
<Location file="BATTLE_BIN" offset="12E9FC">
04000234
</Location>
</Patch>
5
For 140a, the Desperation support skill DOES NOT WORK with these weapons:

Romanda Gun
Mythril Gun
Healing Gun
Stone Gun
Blaze Gun
Glacier Gun
Blast Gun
Bloody Strings
Healing Staff
Murasame
Blood Sword

I did this because I was weary of absorb weapons being stupidly powerful, and it wouldn't really be practical for healing weapons. Magic Guns shoot their respective spells, so it wouldn't really make any sense there.

Regular guns not being affected is an oversight, but if you guys think it's not OP, I can rewrite the WP*WP formula to be affected by Desperation for 140b.

Also: If we decide not to have this, can we have another column in the master guide for weapons labeled "Desperation"? There's enough weapons to where it could be confusing to explain to first timers.
6
FFT Arena / Luck Up Clarification
August 07, 2016, 05:28:44 pm
There is apparently still some confusion about the skill "luck up" despite our efforts to clear it up in the master guide. Let me reiterate it here: Luck up does not increase the accuracy of skills. Only the % chance of "extra effects" happening gets increased. If a skill always adds status when it connects, such as yin yang magic or talk skill, its "proc chance" is already at 100% and can't be raised via Luck Up. If its something like "50% add X" or "50% cast climhazzard", those are what is affected.

Just wanted to clarify this.
7
FFT Arena / FFT Arena 1.40 ASMs
June 20, 2016, 09:37:37 pm
Here are the ASM's we're using for FFT Arena 1.40! For people making the patches, all you have to do is check all of the hacks and you're good. I tried to make it as simple as possible, so please let me know if there are any problems.

What's in the XML files:

Old Oil (actually current oil :P)
MP Regen/MP Poison
Wall reduces most forms of damage to 1 revert


Formula 05 becomes DmgMP_[Weapon]
Slow Dance repurposed to Break Dance
Formula 39 lowers PA and MA by 1
Formula 28 becomes Heal_(Y)% Hit_UnBrave(PA+X)% NE
Formula 14 becomes DmgMP_F(MA*Y)
Formula 44 becomes Dmg_(CasMaxMP)
Jump CT formula hack
Formula 63 becomes New Shuriken v2
Formula 57 becomes Gil Toss
Book Formula Changes to MA*WP
Tons Become Magic Evadable


Regenerator grants MP Regen and Regen
Sunken State gives Faith Status
Catch becomes New Caution
MP Switch Overflows to HP Damage
Equip X Supports
1/3 of MP
Train becomes Desperation - Updated to work for all weapons
Luck UP Support Hack
Brave Up gets MP Cost Trigger
Abandon ACTUALLY gives 50% evade bonus


Also included: MP Regen/MP Poison color edits, Extended Item Attributes.

UPDATE: Desperation is (theoretically) fixed to work with all weapons now. USE AT YOUR OWN RISK. Abandon Fixed to be 50% instead of 33%.

Attached free XML contains the old desperation just in case the other one doesn't work.
8
FFT Arena / Transparent Magic Evade "Bug"
April 13, 2016, 08:23:14 pm
Guys, I figured out what was wrong with the transparent status. Or rather what was already there in vanilla. The developers must not have taken into account that innate transparent would be a thing, and it ISN'T in vanilla. All the magic evadable skills have charge times so the status wears off before the spell is cast, and other spells that are magic based like Draw Out are unevadable anyway. They probably figured that it didn't matter since it would effectively only apply to physical attacks.

I pulled out my WoTL iOS (I know, groan all you want to, but it was easiest since I have my master file on there) and had Ramza (with Vanish Mantle) target Agrias (Aegis Shield + Abandon) with a fire spell, and it said 100% to hit. When the spell was cast, she guarded.

I then pulled out my chemist SSCC files on the PSX version and tried using Fire on an archer with an elf mantle. It also said 100%:








Also, there is this little gem I pulled from the wiki:

Transparent Calculation
001854b8: 3c028019 lui r2,0x8019
001854bc: 8c422d94 lw r2,0x2d94(r2)      Load Attacker's Data Pointer
001854c0: 27bdffe8 addiu r29,r29,0xffe8
001854c4: afbf0010 sw r31,0x0010(r29)
001854c8: 9042005a lbu r2,0x005a(r2)      Load Attacker's 3rd set of statuses
001854cc: 00000000 nop
001854d0: 30420010 andi r2,r2,0x0010
001854d4: 10400005 beq r2,r0,0x001854ec      Branch if Attacker isn't Transparent
001854d8: 00000000 nop
001854dc: 3c048019 lui r4,0x8019
001854e0: 248438de addiu r4,r4,0x38de      Prep Evade Pointer
001854e4: 0c017991 jal 0x0005e644      Data Nulling (evade)
001854e8: 34050004 ori r5,r0,0x0004      r5 = 4 (all 4 evades)
001854ec: 8fbf0010 lw r31,0x0010(r29)
001854f0: 27bd0018 addiu r29,r29,0x0018
001854f4: 03e00008 jr r31
001854f8: 00000000 nop


So it's not a problem with any ASM that was done, it was just remnants from vanilla's coding. Now the remaining issue is: how are we going to balance FFT Arena around this? Or should we just remove innate transparent from the patch all together? Just another thing we can discuss in the 1.4 thread.
9
Event Editing / DW's Events
February 28, 2016, 12:12:45 am
Okay, so I started trying to event. Here's my first attempt at one. But remember, I'm still learning so things may not be up to snuff at first.

UPDATE: Camera commands (No focus) added, learned how to savestate edit






[youtube]p-q1iUx4sgw[youtube]



Updated Script:

// __________________________________________________________________
//| Event Script x002 | Event Offset: x004000 | Text offset: x0041C5 |
// ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯

Offset(x00004000)
//Remove the previous line if you wish not to override the offset in CONFIG.INI.

//Remove the previous line if you wish text to compile directly after instructions.

UnitAnim(x01,x00,x0002,x00)
Reveal(030)
Focus(x01,x00,x01,x00,x00)
Camera(+00504,+00180,+00840,+00302,+00512,+00000,+04096,+00001)
WaitForInstruction(x04,x00)
Wait(030)
DisplayMessage(x10,x11,x01,x01,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
Camera(+00504,-00144,+00504,+00302,+03500,+00000,+04096,+00080)   
WalkTo(x01,x00,004,007,x00,x00,+008,x01)         
WaitWalk(x01,x00)                 
UnitAnim(x01,x00,x0002,x00)
UnitAnimRotate(x01,x00,x00,x005E,x00)
Music(x01,+127,000)
AddUnitStart()
AddUnit(x02,x00,x01)
AddUnit(x03,x00,x01)
AddUnit(x04,x00,x01)
AddUnitEnd()
WaitAddUnitEnd()
DisplayMessage(x10,x11,x02,x02,x00,x09,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
BlockStart()
SpriteMove(x02,x00,+00000,+00000,-00014,x00,x01,+00000)
ColorUnit(x02,x00,x01,-006,-004,-002,000)
Wait(00002)
Draw(x02,x00)
ColorUnit(x02,x00,x08,+000,+000,+000,004)
SpriteMove(x02,x00,+00000,+00000,+00000,x00,x01,+00018)
WaitSpriteMove(x02,x00)
WalkTo(x02,x00,001,005,x00,x00,+008,x01)
WaitWalk(x02,x00)
UnitAnim(x02,x00,x0002,x00)
BlockEnd()
Sound(x0040)
WaitForInstruction(x08,x00)
UnitAnim(x01,x00,x0022,x00)
DisplayMessage(x10,x11,x03,x01,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
BlockStart()
SpriteMove(x03,x00,+00000,+00000,-00014,x00,x01,+00000)
ColorUnit(x03,x00,x01,-006,-004,-002,000)
Wait(00002)
Draw(x03,x00)
ColorUnit(x03,x00,x08,+000,+000,+000,004)
SpriteMove(x03,x00,+00000,+00000,+00000,x00,x01,+00018)
WaitSpriteMove(x03,x00)
WalkTo(x03,x00,001,005,x00,x00,+008,x01)
WaitWalk(x03,x00)
UnitAnim(x03,x00,x0002,x00)
BlockEnd()
Camera(+00392,-00144,+00504,+00302,+04609,+00000,+04096,+00060)                  
WaitForInstruction(x04,x00)
DisplayMessage(x10,x11,x04,x03,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
UnitAnimRotate(x01,x00,x00,x0002,x00)
FaceUnit(x02,x00,x03,x00,x00,x00,x01)
Sound(x0030)
DisplayMessage(x10,x11,x05,x03,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
BlockStart()
SpriteMove(x04,x00,+00000,+00000,-00014,x00,x01,+00000)
ColorUnit(x04,x00,x01,-006,-004,-002,000)
Wait(00002)
Draw(x04,x00)
ColorUnit(x04,x00,x08,+000,+000,+000,004)
SpriteMove(x04,x00,+00000,+00000,+00000,x00,x01,+00018)
WaitSpriteMove(x04,x00)
WalkTo(x04,x00,001,005,x00,x00,+008,x01)
WaitWalk(x04,x00)
UnitAnim(x04,x00,x0002,x00)
BlockEnd()
FaceUnit(x04,x00,x04,x01,x00,x00,x01)
Camera(+00616,-00144,+00504,+00302,+03584,+00000,+04096,+00030)               
WaitForInstruction(x04,x00)
DisplayMessage(x10,x11,x06,x04,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
FaceUnit(x01,x00,x04,x01,x00,x00,x01)
DisplayMessage(x10,x11,x07,x01,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
Camera(+00392,-00144,+00392,+00302,+04609,+00000,+04096,+00030)
WaitForInstruction(x04,x00)
DisplayMessage(x10,x11,x08,x03,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
AddGhostUnit(x72,x00,x00,004,007,x00,x00,x01)
WaitAddUnit()
Camera(+00392,-00144,+00504,+00302,+04780,+00000,+04096,+00030)
WaitForInstruction(x04,x00)
DisplayMessage(x10,x11,x09,x01,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
RotateUnit(x01,x00,x08,x00,x01,x00)
UnitAnim(x01,x00,x002C,x00)
DisplayMessage(x10,x11,x0A,x01,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
DisplayMessage(x10,x11,x0B,x01,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
DisplayMessage(x10,x11,x0C,x02,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
Camera(+00504,-00144,+00504,+00302,+03584,+00000,+04096,+00020)
UnitAnim(x01,x00,x0002,x00)
WalkTo(x02,x00,004,006,x00,x00,+032,x01)
RotateUnit(x01,x00,x00,x00,x01,x00)
WaitWalk(x02,x00)
UnitAnim(x02,x00,x0041,x00)
Sound(x001A)
UnitAnim(x01,x00,x0018,x00)
Sound(x0030)
WaitForInstruction(x0B,x00)
Wait(060)
WalkTo(x02,x00,004,004,x00,x00,+008,x01)
WaitWalk(x02,x00)
UnitAnim(x02,x00,x0002,x00)
UnitAnim(x01,x00,x0002,x00)
Camera(+00616,-00144,+00392,+00302,+03413,+00000,+04096,+00020)
WaitForInstruction(x04,x00)
FaceUnit(x04,x00,x02,x00,x00,x00,x00)
DisplayMessage(x10,x11,x0D,x02,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
UnitAnim(x02,x00,x0002,x00)
DisplayMessage(x10,x11,x0E,x04,x00,x00,+00000,+00000,+00000,x03)
WaitForInstruction(x01,x00)
FaceUnit(x01,x00,x04,x01,x00,x00,x01)
UnitAnim(x04,x00,x65,x00,x00)
Camera(+00504,-00144,+00616,+00302,+03584,+00000,+04096,+00020)
WaitForInstruction(x04,x00)
Effect(x000F,x64,005,000,x00)
EffectStart()
UnitAnim(x01,x00,x19,x00,x00)
EffectEnd()
WaitForInstruction(x41,x00)
Sound(x009A)
UnitAnim(x01,x00,x34,x00,x00)
Wait(30)
EventEnd()

//INSTRUCTION SECTION END -  TEXT START
//Message x01
{font:08}Suspicious Dude{br}
{font:00}This must be the place.{br}
Now to find a way in...{end}

//Message x02
{font:08}Alicia{br}
{font:00}Stop, thief!{end}

//Message x03
{font:08}Totally Not A Thief{br}
{font:00}What! How dare you{br}
insinuate that?{br}
Do I look like a thief?{end}

//Message x04
{font:08}Lavian{br}
{font:00}Yes...{end}

//Message x05
{font:08}Lavian{br}
{font:00}We don't have time{br}
for this...{end}

//Message x06
{font:08}Rad{br}
{font:00}Stop playing games, Zero.{end}

//Message x07
{font:08}Zero{br}
{font:00}How do you even know my{br}
name, anyway?{end}

//Message x08
{font:08}Lavian{br}
{font:00}Do the words "Beloved{br}
Lord Bafai, I've come{br}
to steal your treasure!" ring{br}
a bell?{end}

//Message x09
{font:08}Zero{br}
{font:00}Well well well...{br}
It looks like the cat{br}
has caught the mouse.{end}

//Message 0A
{font:08}Zero{br}
{font:00}Of course, I didn't{br}
think the help he'd{br}
hire would be SUCH a bore.{end}

//Message x0B
{font:08}Zero{br}
{font:00}Not that it matters,{br}
as I will simply be{br}
going now.{end}

//Message x0C
{font:08}Alicia{br}
{font:00}Not so fast!{end}

//Message x0D
{font:08}Alicia{br}
{font:00}This is getting really{br}
dumb. Rad? Will you do {br}
the honors?{end}

//Message x0E
{font:08}Rad{br}
{font:00}Sure thing.{br}
Level 5 Holy!{end}

10
PSX FFT Hacking / Status Ailment Priority
November 10, 2015, 05:35:57 pm
Debuff Priority List (top is most prioritized):

Crystal/Treasure
Dead
Invite
Petrify/Blood Suck
Stop
Death Sentence
Don't Act
Charm/Confusion
Frog
Don't Move/Sleep
Slow
Berserk
Undead
Critical
Chicken
Darkness/Silence?
Poison
Oil
Innocent
Dark/Evil Looking


- If two moves have statuses that are considered equal, the move that appears first in the skill set is used.
- If two moves have statuses that are not considered equal, the topmost status on the priority list is inflicted.
- This is really just an observation with no real basis, but canceling a status seems to relate to its priority, which explains why Holy Water isn't used very often whereas Phoenix Downs are used almost every time someone dies.


Words of my original post:
QuoteI used inflict status 7A and 7B (two unused ones) and set them to the skills, made sure that Ramza had only those two skills and got into a random battle. He was a wizard (no spells learned) with the skill set secondary. I tested both Talk Skill and Yin-Yang magic because Talk Skill does not affect sleeping units.

What I found was surprising because it conflicts somewhat with what is said here: http://ffhacktics.com/smf/index.php?topic=8718.0

Some other things I've noticed are that the AI seems to prioritize re-applying status when it wears off rather than inflict it on a new target, and that the AI also loves to stack some statuses on top of each other. When I tested DM and sleep, Ramza would inflict DM then inflict sleep on the exact same target very consistantly (no I did not keep reloading a save state for every action - I left it going for a while). The AI also seems to be very smart when it comes to blind and silence, because it breaks the pattern listed to inflict silence on casters (even prioritized over Don't Act) and Blind on units like Knights (when the status is usually not used often).


Some thing to note here is that I didn't think to swap inflict statuses to see if it was just using the topmost move in the skill set, and that appeared to be the case with sleep and don't move. Since then, I figured out that some statuses are considered equal by the AI like charm/confusion, sleep/DM, and petrify/blood suck. Also, I said silence was prioritized over DA, but that now appears to not be the case. Silence and Darkness don't seem to behave like the rest of the statuses, but there isn't really a good way of testing that without being able to control the skills an enemy unit knows so I may need to start looking at the code for answers there.


Again, I am super interested in learning how the AI works on a level beyond just a "rough heirarchy" of decisions, and I didn't see anything like this being done so I jumped in. Feel free to chime in if you think something's wrong.
11
Final Fantasy Tactics / WoTL SCC Problems
May 31, 2015, 11:37:11 pm
So I have the iOS version of War Of the Lions, and I have attempted some SCCs on it. Unfortunately, there is one fight that they plastered right before you fight Zalera that has consistently given me problems.

We all know that Argath is a jerk. What the heck were they thinking when they made that fight? When I attempted it with white mages, I was not surprised to find difficulty because the demons are immune to holy and Argath has 25 faith, mirror mail, and Critical: Recover HP. I had to BRING IN ORLANDEAU, who still did less damage then was necessary to kill him without knocking him into critical. I was so ashamed about breaking the rules that I quit. This was also the stopping point for my oracle SCC for the same reasons.

When I used Monks, I did not expect to see the same problems. But we still can't do enough damage in one turn to outpace his healing. In fact, the only SCC I have successfully beaten this fight in as of date is geomancer, by way of geomancy status effects. I want to know if anyone else has attempted an SCC on War of the Lions like this, and if anyone absolutely loathes this fight as much as I do.

12
The Lounge / Hello Guys!
May 30, 2015, 08:54:17 pm
Hello to everyone who likes FFT as much as I do. I started playing about a year ago and have been hooked ever since. I am a college aged girl who has almost no experience with coding, but I am very interested in how the game works and want to develop my own hack of FFT anyways.