• Welcome to Final Fantasy Hacktics. Please login or sign up.
 
March 28, 2024, 07:46:55 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!


ASM Requests

Started by The Damned, October 29, 2014, 09:16:45 pm

JadeKnightblazer

Looking for flexibility with Dark/Evil Looking.

To my limited knowledge this status is not used in game besides a Color shader on the unit.

Would like to be able to attach other effects or formulas to the unit while under this effect.

Such as, dealing damage to another target, they gain %MP(10%) back.

Or is there a way via FFTPatcher or the like to edit what status affects do and customize from there?
  • Modding version: PSX
  • Discord username: JadeKnightblazer

Gregory

Requesting a Meliadoul buff for TLW.

All Mighty Sword skills to have vertical range of 3, area of effect of 2, inflict damage like WotL, as well as the following:

Shellbust Stab: chance to inflict slow.
Blastar Punch: chance to inflict confuse.
Hellcry Punch: chance to inflict disable.
Icewolf Bite: chance to inflict immobilize.

Anyone willing to help a dude out? ^__^
  • Modding version: PSX & WotL

JadeKnightblazer

May 25, 2021, 11:06:29 pm #342 Last Edit: May 31, 2021, 09:10:26 pm by JadeKnightblazer Reason: found solutions
Edited:

Change Distribute (Cup of Life) to. If a unit equipped with this ability is healed beyond their maximum MP, the unit is inflicted with Curse.

2. Give Pyscho Shift a damage to target:
<Patch name="Formula 58 = Psycho Shift">
    <Description>Hit F(Ma+x)%.  On a successful hit, user will transfer all active status effects to target, and cancel them on self.  Affects all statuses (positive or negative).  Will not cancel innate status, or inflict statuses to invalid targets (such as inflicting poison to a unit immune to it). </Description>
    <Location file="BATTLE_BIN" offset="123824">
E8FFBD27
1000BFAF
8922060C
00000000
25004014
00000000
1980013C
942D228C
902D238C
8C2D2A8C
21200000
58004590
59004690
5A004790
5B004890
5C004990
1B0065A0
1C0066A0
1D0067A0
1E0068A0
1F0069A0
200045A1
210046A1
220047A1
230048A1
240049A1
C912060C
00000000
1980013C
8C2D258C
902D238C
09004010
00000000
01000434
0000A4A0
000064A0
08000434
2500A4A0
250064A0
02000010
00000000
000062A0
1000BF8F
1800BD27
0800E003
00000000
    </Location>
  </Patch>

3. A formula. Deal target HP damage, restore Y%  caster MP
  • Modding version: PSX
  • Discord username: JadeKnightblazer

3lric

Quote from: Gregory on May 24, 2021, 09:07:45 pmRequesting a Meliadoul buff for TLW.

All Mighty Sword skills to have vertical range of 3, area of effect of 2, inflict damage like WotL, as well as the following:

Shellbust Stab: chance to inflict slow.
Blastar Punch: chance to inflict confuse.
Hellcry Punch: chance to inflict disable.
Icewolf Bite: chance to inflict immobilize.

Anyone willing to help a dude out? ^__^

This isn't ASM. You can do all of this yourself in FFTP
  • Modding version: PSX

Nyzer

Unless the status chances are in addition to the existing effect, but yeah, it didn't seem like that was the intent.
  • Modding version: Other/Unknown

Gregory

Oh nice, thank you. Gonna look into FFTP. But yeah hoping to get (or learn how to make) those status effects in addition to damage and existing gear break effects.
  • Modding version: PSX & WotL

JadeKnightblazer

Replace Move +3 or Jump + 3, with an ASM that forces the unit to start a battle with MP at 0.
  • Modding version: PSX
  • Discord username: JadeKnightblazer

nitwit

Hack Idea: Disable crytalization and treasure chest effects, and when a non-essential character's KO countdown expires they instead become unusable for a number of days equal to their character level. Essential characters still produce a game over when they are made unusable.

I think I remember seeing a piece of text for the "unusable" effect - or maybe "unavailable" - similar to the text for characters that are on errands.

RetroTypes

Quote from: nitwit on June 30, 2021, 09:37:13 pmHack Idea: Disable crytalization and treasure chest effects, and when a non-essential character's KO countdown expires they instead become unusable for a number of days equal to their character level. Essential characters still produce a game over when they are made unusable.

I think I remember seeing a piece of text for the "unusable" effect - or maybe "unavailable" - similar to the text for characters that are on errands.

Xif already made something kinda similar, the "Permadeath Terminator" spreadsheet/hack. Even allows Ramza to not die, but that's a toggle I believe. Although they just get stars like guests do when KO'd, they return to normal as soon as the battle is over.
  • Modding version: PSX
  • Discord username: RetroTypes

JadeKnightblazer

Request: Formulas 0F and 10 (AbsMP/AbsHP) allow Status infliction.
  • Modding version: PSX
  • Discord username: JadeKnightblazer

Nyzer

There's an ASM hack to make Geomancy trigger absorption of either type.

There might also be a general purpose status infliction hack, but I'm only guessing offhand, I couldn't say for certain.
  • Modding version: Other/Unknown

JadeKnightblazer

Ty Nyzer, i'll take a closer looking into the collective ASMs. Luckily since I am aiming to use 100% max MP abs on self, I should be able to just blast the target with a crazy variable to meet my needs.

Trying to figure out how to bring Dart from LOD to life XD So looking for a way to create a dragoon transformation toggle. Active a status, then let status naturally fade off to restore normal form.
  • Modding version: PSX
  • Discord username: JadeKnightblazer

nitwit

July 20, 2021, 04:48:02 pm #352 Last Edit: July 20, 2021, 06:44:11 pm by nitwit
Quote from: JadeKnightblazer on July 09, 2021, 11:19:57 amRequest: Formulas 0F and 10 (AbsMP/AbsHP) allow Status infliction.

https://ffhacktics.com/wiki/0F_AbsMP_(Y)%25_Hit_F(MA%2BX)%25
https://ffhacktics.com/wiki/10_AbsHP_(Y)%25_Hit_F(MA%2BX)%25

Looking at them on the wiki, they share between 1/3 and 1/2 of the same assembly code, and they are sequential (one right after the other). Look at the RAM addresses (the 8 digit hexadecimal numbers before the colons) in the code tags below to see what I mean.

[0f]
00189084: 27bdffe8 addiu r29,r29,0xffe8         //start of formula 0F
00189088: afbf0010 sw r31,0x0010(r29)
0018908c: 0c06216e jal 0x 001885b8            Magic Evade
00189090: 00000000 nop
00189094: 1440000d bne r2,r0,0x 001890cc
00189098: 00000000 nop
0018909c: 0c062273 jal 0x 001889cc            Calculate_Accuracy_for_Magical_Spells - Calculate (MA + X)*Faith% This is essentially the same routine as 0x188a24 except without elemental boosting.
001890a0: 00000000 nop
001890a4: 14400009 bne r2,r0,0x 001890cc
001890a8: 00000000 nop
001890ac: 0c0619a3 jal 0x 0018668c            MP Damage
001890b0: 00000000 nop
001890b4: 3c038019 lui r3,0x8019
001890b8: 8c632d90 lw r3,0x2d90(r3)
001890bc: 00000000 nop
001890c0: 94620008 lhu r2,0x0008(r3)           r2 = MP Dmg
001890c4: 0c061d1b jal 0x 0018746c            MP_Recovery_Routine
001890c8: a4620004 sh r2,0x0004(r3)            Store r2 as HP Dmg (used in MP recovery routine - HP Dmg set to 0x00 in MP recovery routine)     
001890cc: 8fbf0010 lw r31,0x0010(r29)
001890d0: 27bd 0018 addiu r29,r29,0x 0018
001890d4: 03e00008 jr r31
001890d8: 00000000 nop                         //end of formula 0F

[10]
001890dc: 27bdffe8 addiu r29,r29,0xffe8        //start of formula 10... and just after the end of the previous formula.
001890e0: afbf0010 sw r31,0x0010(r29)
001890e4: 0c06216e jal 0x001885b8            Magical_Evade_Calculation
001890e8: 00000000 nop
001890ec: 14400009 bne r2,r0,0x 00189114
001890f0: 00000000 nop
001890f4: 0c062273 jal 0x 001889cc            Calculate Accuracy for Magical Spells
001890f8: 00000000 nop
001890fc: 14400005 bne r2,r0,0x 00189114
00189100: 00000000 nop
00189104: 0c061989 jal 0x 00186624      Calculate HP% damage 
00189108: 00000000 nop
0018910c: 0c061c92 jal 0x 00187248      HP Absorption
00189110: 00000000 nop
00189114: 8fbf0010 lw r31,0x0010(r29)
00189118: 27bd 0018 addiu r29,r29,0x 0018
0018911c: 03e00008 jr r31
00189120: 00000000 nop                          //end of formula 10

You might be able to make them into one formula, with conditional branches (assembly version of if-elseif-else) for the parts that differ. I haven't thought about how you would do that, but it's probably interesting enough that someone will help you on the discord if you put in the effort.

I just now thought about it, and you need to check the formula byte for the skill that used it. I'm sure someone documented where this data is and how to get it.

There is probably a lot of hardcoded stuff that uses the formula IDs, so you'll need to if possible make sure that whatever formula pointer table exists has both formulas point to the same code block. If it won't let you point to the same block of code and each sequential pointer must point to a part of ram that is after the previous pointer's value, then add a nop (00 00 00 00) at the beginning, have formula 0F point to that, then have formula 10 point to the actual start of the code. That's the easiest (read: most half-assed) way to do it until we someday understand all the hardcoding and have a fully commented and assemble-able disassembly.

I think this is the formula pointer table:
https://ffhacktics.com/wiki/Formula_Table

No idea what you have to change in that table to get it to behave, probably the starting address (in RAM) of the first line of code in each formula.

As for adding status procs, I think you need to add some routines from formula 08 Dmg_F(MA*Y).
https://ffhacktics.com/wiki/08_Dmg_F(MA*Y)

Specifically these:
00188dcc: 0c0621c7 jal 0x 0018871c        ; Elemental Absorb and status roll
00188dd0: 00000000 nop                   
00188dd4: 14400003 bne r2,r0,0x 00188de4 ; Branch if status effect roll fails
00188dd8: 00000000 nop                   
00188ddc: 0c061fad jal 0x 00187eb4        ; Apply status (to action) - (Preserve hit status, evade type, hit %)

Though if you go that far and you have room left, you may as well add full elemental modification to formulas 0F and 10 - elemental strengthen and elemental XA * YA.

edit

On further thought, mixing an absorb formula, undead reversal, and elemental affinities (especially weak, halve, and absorb) will have unforeseen consequences and probably won't work out how you want it to.

I instead recommend you use the status proc code in formula 0A.
https://ffhacktics.com/wiki/0A_Hit_F(MA%2BX)%25
https://ffhacktics.com/wiki/Apply_status_(to_action)

JadeKnightblazer

Ty for all the information!! Much to toy around with.
  • Modding version: PSX
  • Discord username: JadeKnightblazer

Ansehelm

Are there any ASMs that improve the utility of being mounted?  Mounting is such a cool mechanic in theory, but the increase in move and status immunity are rarely enough to make it worth turning 2 units into 1. Something like +4 Speed and PA and +20% Evade while mounted would be a dream come true
  • Modding version: PSX

RetroTypes

Quote from: Ansehelm on July 21, 2021, 11:57:27 pmAre there any ASMs that improve the utility of being mounted?  Mounting is such a cool mechanic in theory, but the increase in move and status immunity are rarely enough to make it worth turning 2 units into 1. Something like +4 Speed and PA and +20% Evade while mounted would be a dream come true

Choto has a (buggy? incomplete?) hack HERE that allows both the mounted unit and the rider to take separate movements or something like that, but other than that I dont recall seeing much. I'm sure a hack like you requested is possible, but I dont think anyone's done something like that yet (dont quote me tho! lol)
  • Modding version: PSX
  • Discord username: RetroTypes

JadeKnightblazer

August 04, 2021, 12:44:52 am #356 Last Edit: August 07, 2021, 04:28:33 am by JadeKnightblazer
LF an ASM that allows Death Sentence (Doom), to apply a status along with or in replacement of Dead.

Mainly I would like it to apply wall at the end of the duration, and can make the job immune to dead.

Unless Death Sentence uses an inflict status ID? in which would love to know :3


Sometimes Manual input is better than automagicly.
Worked with status canceling each other out and a manual toggle.
  • Modding version: PSX
  • Discord username: JadeKnightblazer

JadeKnightblazer

September 01, 2021, 06:45:58 pm #357 Last Edit: September 02, 2021, 04:49:39 pm by JadeKnightblazer
Looking to make one of the multi hit (random + x) formulas into physical

Much like:
Formula 5E becomes (PA + Y) / 2 * PA Hit_(1+X) ASM by Pride.
<Patch name="Formula 5E = (PA + Y) / 2 * PA Hit_(1+X)">
    <Description>Replaces Formula 5E.</Description>
    <Location file="BATTLE_BIN" offset="000f6e20">
E8FFBD27
1000BFAF
4421060C
00000000
FBFF4014
00000000
4017060C
00000000
FF17060C
00000000
5318060C
00000000
B722060C
00000000
3E15060C
00000000
5A19060C
00000000
B41B060C
00000000
FE1B060C
00000000
1980023C
902D428C
00000000
00004290
00000000
E4FF4010
00000000
3F1C060C
00000000
3021060C
00000000
AD1F060C
00000000
1000BF8F
1800BD27
0800E003
00000000
    </Location>
    <Location file="BATTLE_BIN" offset="00123AB0">
8877050C
    </Location>
  </Patch>

I tried to use FFmaster's
Formula 1E, 1F, 5E, 5F, 60 ((MA+Y)*MA/2) becomes ((PA+Y)*PA/2) : THIS AFFECTS ALL THE FORMULAS

But boy was I in a world of hurt when I needed ((MA+Y)*MA/2) for scaling with a few spells. T_T


Possible to change this ASM: OR Pride's above formula

<Patch name="Formula 1E (Truth Skillset) becomes Dmg_(MA*Y) #Hit(Rdm{1,X})">
<Description>Formula 1E - Dmg_((MA+Y)*MA/2) #Hit(Rdm(1,X)) becomes Formula 1E - Dmg_(MA*Y) #Hit(Rdm{1,X})
</Description>
<Location file="BATTLE_BIN" offset="11ECE8">
21106000
00000000
</Location>
</Patch>

into Dmg_((PA+Y)*PA/2) #Hit(Rdm(1,X))  ?
  • Modding version: PSX
  • Discord username: JadeKnightblazer

stuminator

This one has probably been asked for before, but I haven't seen a good solution for it:

Alter formula 40 (Seal Evil) to require any status on the target of your choosing

I have a good idea for what the hack should be, but don't know how to actually code this myself.  Utilize the Y and element fields in FFTpatcher.  At the point in the routine when it pulls up status group 0x58, instead pull up the value in Y, and when it checks for status 0x10 (Undead), instead check the value in the element field.

This would allow quite a bit of customization without having to overwrite any other existing formulas.

Also, it would be very appreciated if anyone could show me how to code this myself.  My knowledge of ASM is pretty basic.
  • Modding version: PSX
  • Discord username: stuminator

nitwit

Quote from: stuminator on September 23, 2021, 04:34:51 pmThis one has probably been asked for before, but I haven't seen a good solution for it:

Alter formula 40 (Seal Evil) to require any status on the target of your choosing

I have a good idea for what the hack should be, but don't know how to actually code this myself.  Utilize the Y and element fields in FFTpatcher.  At the point in the routine when it pulls up status group 0x58, instead pull up the value in Y, and when it checks for status 0x10 (Undead), instead check the value in the element field.

This would allow quite a bit of customization without having to overwrite any other existing formulas.

Also, it would be very appreciated if anyone could show me how to code this myself.  My knowledge of ASM is pretty basic.
https://ffhacktics.com/smf/index.php?topic=12720.0

The hack here is almost what you want. You need to add some stuff to select the status byte loaded and bit tested for.