øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.msg21916e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index70b8.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.375e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index70b8.html.zxA!g^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿȰ™bnñOKtext/htmlISO-8859-1gzip8:ÖnñÿÿÿÿÿÿÿÿTue, 10 Mar 2020 05:26:47 GMT0ó°° ®0®P®€§²ð®@!g^ÿÿÿÿÿÿÿÿDnñ Grimoire LD's Notes, Patches, and Hacks (Dark Knight/Paladin Swap In Battle!)

Author Topic: Grimoire LD's Notes, Patches, and Hacks (Dark Knight/Paladin Swap In Battle!)  (Read 78676 times)

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Under Charm Routine

Code: [Select]
$03/AB3E BD 04 20 LDA $2004,x[$7E:2004] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Status Byte 02 into A.
$03/AB41 29 08 AND #$08 A:0008 X:0000 Y:0012 P:envMxdizc - Is it Charm?
$03/AB43 F0 05 BEQ $05    [$AB4A] A:0008 X:0000 Y:0012 P:envMxdizc - If not, branch.
$03/AB45 20 AD AB JSR $ABAD  [$03:ABAD] A:0008 X:0000 Y:0012 P:envMxdizc - Jump to Subroutine.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/ABAD A6 A6 LDX $A6    [$00:00A6] A:0008 X:0000 Y:0012 P:envMxdizc - Load Target Identifier.
$03/ABAF 9E 53 20 STZ $2053,x[$7E:2053] A:0008 X:0000 Y:0012 P:envMxdiZc - Store Zero in Monster Target
$03/ABB2 9E 54 20 STZ $2054,x[$7E:2054] A:0008 X:0000 Y:0012 P:envMxdiZc - Store Zero in Party Target
$03/ABB5 20 8B 85 JSR $858B  [$03:858B] A:0008 X:0000 Y:0012 P:envMxdiZc - Jump to Subroutine (Random Number)
$03/ABB8 C9 46 CMP #$46 A:0025 X:0000 Y:0012 P:envMxdizc - Compare the number to 46
$03/ABBA B0 24 BCS $24    [$ABE0] A:0025 X:0000 Y:0012 P:eNvMxdizc - If greater than 46, branch to normal Fight Routine
$03/ABBC AE 34 35 LDX $3534  [$7E:3534] A:0025 X:0000 Y:0012 P:eNvMxdizc - Load Slot into X.
$03/ABBF A0 05 00 LDY #$0005 A:0025 X:0000 Y:0012 P:envMxdiZc - Load 0005 into Y.
$03/ABC2 BD 03 33 LDA $3303,x[$7E:3303] A:0025 X:0000 Y:0005 P:envMxdizc - Load A from Command Locations.
$03/ABC5 C9 02 CMP #$02 A:0000 X:0000 Y:0005 P:envMxdiZc - Is it Black Magic?
$03/ABC7 F0 0D BEQ $0D    [$ABD6] A:0000 X:0000 Y:0005 P:eNvMxdizc - If so branch.
------------------------------------------------------------------------------------------------------------------
$03/ABC9 C9 03 CMP #$03 A:0000 X:0000 Y:0005 P:eNvMxdizc - Is it White Magic?
$03/ABCB F0 09 BEQ $09    [$ABD6] A:0000 X:0000 Y:0005 P:eNvMxdizc - If so branch.
--------------------------------------------------------------------------------------------------------------------
$03/ABCD E8 INX A:0000 X:0000 Y:0005 P:eNvMxdizc - +4
$03/ABCE E8 INX A:0000 X:0001 Y:0005 P:envMxdizc
$03/ABCF E8 INX A:0000 X:0002 Y:0005 P:envMxdizc
$03/ABD0 E8 INX A:0000 X:0003 Y:0005 P:envMxdizc
$03/ABD1 88 DEY A:0000 X:0004 Y:0005 P:envMxdizc -1 Y
$03/ABD2 D0 EE BNE $EE    [$ABC2] A:0000 X:0004 Y:0004 P:envMxdizc - Branch back if not gone through all five commands looking for White/Black Magic.
$03/ABD4 80 0A BRA $0A    [$ABE0] A:0001 X:0014 Y:0000 P:envMxdiZc - Branch always.
---------------------------------------------------------------------------------------------------------------------
$03/ABD6 64 90 STZ $90    [$00:0090] A:0002 X:0058 Y:0004 P:envMxdiZC - Store Zero in 90
$03/ABD8 20 FD AB JSR $ABFD  [$03:ABFD] A:0002 X:0058 Y:0004 P:envMxdiZC - Jump to Subroutine

---------------------------------------------------------------------------------------------------------------------
$03/ABE0 A6 A6 LDX $A6    [$00:00A6] A:0001 X:0014 Y:0000 P:envMxdiZc - Load Slot Identity.
$03/ABE2 A9 80 LDA #$80 A:0001 X:0000 Y:0000 P:envMxdiZc - Load 80 into A.
$03/ABE4 9D 50 20 STA $2050,x[$7E:2050] A:0080 X:0000 Y:0000 P:eNvMxdizc - Store A in 2050
$03/ABE7 9E 51 20 STZ $2051,x[$7E:2051] A:0080 X:0000 Y:0000 P:eNvMxdizc - Store Zero in 2051 (Fight)
$03/ABEA 20 82 85 JSR $8582  [$03:8582] A:0080 X:0000 Y:0000 P:eNvMxdizc - Jump to Subroutine (0-4 Random Choice)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/8582 A2 00 00 LDX #$0000 A:0080 X:0000 Y:0000 P:eNvMxdizc - Load 00 into X.
$03/8585 A9 04 LDA #$04 A:0080 X:0000 Y:0000 P:envMxdiZc - Load 04 into A.
$03/8587 20 79 83 JSR $8379  [$03:8379] A:0004 X:0000 Y:0000 P:envMxdizc - Jump to RNG.
$03/8379 E2 10 SEP #$10 A:0004 X:0000 Y:0000 P:envMxdizc - Set Processor to 10.
$03/858A 60 RTS A:0004 X:0000 Y:0000 P:envMxdizc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/ABEE BD 40 35 LDA $3540,x[$7E:3544] A:0004 X:0004 Y:0000 P:envMxdizc - Load Slot to Target ?Status?
$03/ABF1 D0 F7 BNE $F7    [$ABEA] A:0000 X:0004 Y:0000 P:envMxdiZc - Branch if ?Incapacitated? back to roll again.
$03/ABF3 7B TDC A:0000 X:0004 Y:0000 P:envMxdiZc - Tranfer Direct Page.
$03/ABF4 20 5F 85 JSR $855F  [$03:855F] A:0000 X:0004 Y:0000 P:envMxdiZc  - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/855F 1F FE FE 13 ORA $13FEFE,x[$13:FF02] A:0000 X:0004 Y:0000 P:envMxdiZc - ??
$03/8563 60 RTS A:0008 X:0004 Y:0000 P:envMxdizc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/ABF7 A6 A6 LDX $A6    [$00:00A6] A:0008 X:0004 Y:0000 P:envMxdizc - Load Slot Identifier
$03/ABF9 9D 54 20 STA $2054,x[$7E:2054] A:0008 X:0000 Y:0000 P:envMxdiZc - Store A in Party Target.
$03/ABFC 60 RTS A:0008 X:0000 Y:0000 P:envMxdiZc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/ABFD AE 36 35 LDX $3536  [$7E:3536] A:0002 X:0058 Y:0004 P:envMxdiZC - Load Spell Pointer
$03/AC00 86 A9 STX $A9    [$00:00A9] A:0002 X:0360 Y:0004 P:envMxdizC - Store X in A9.
$03/AC02 A0 30 00 LDY #$0030 A:0002 X:0360 Y:0004 P:envMxdizC - Load 0030 into Y.
$03/AC05 BD 7A 2C LDA $2C7A,x[$7E:2FDA] A:0002 X:0360 Y:0030 P:envMxdizC - Load A from Spell Menu Data
$03/AC08 10 0C BPL $0C    [$AC16] A:0020 X:0360 Y:0030 P:envMxdizC -Branch if Positive (meaning a spell is there).
-------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------
$03/AC16 7B TDC A:0020 X:0360 Y:0030 P:envMxdizC - Transfer Direct Page
$03/AC17 AA TAX A:0000 X:0360 Y:0030 P:envMxdiZC - Transfer A to X.
$03/AC18 A9 2F LDA #$2F A:0000 X:0000 Y:0030 P:envMxdiZC - Load 2F into A.
$03/AC1A 20 79 83 JSR $8379  [$03:8379] A:002F X:0000 Y:0030 P:envMxdizC - Jump to RNG
$03/AC1E 8E 3D 39 STX $393D  [$7E:393D] A:0002 X:0002 Y:0030 P:envMxdizc - Store X in 393D.
$03/AC21 A2 04 00 LDX #$0004 A:0002 X:0002 Y:0030 P:envMxdizc - Load 04 into X.
$03/AC24 8E 3F 39 STX $393F  [$7E:393F] A:0002 X:0004 Y:0030 P:envMxdizc - Store X in 393F.
$03/AC27 20 B9 83 JSR $83B9  [$03:83B9] A:0002 X:0004 Y:0030 P:envMxdizc - Jump to Subroutine (Divides several 393X values)
$03/AC2A 18 CLC A:0000 X:0000 Y:0030 P:envMxdiZc - Clear Carry Flag.
$03/AC2B A5 A9 LDA $A9    [$00:00A9] A:0000 X:0000 Y:0030 P:envMxdiZc - Load A from A9.
$03/AC2D 6D 41 39 ADC $3941  [$7E:3941] A:0060 X:0000 Y:0030 P:envMxdizc - Add value from 3941 onto A.
$03/AC30 85 AB STA $AB    [$00:00AB] A:0068 X:0000 Y:0030 P:envMxdizc - Store A in AB.
$03/AC32 A5 AA LDA $AA    [$00:00AA] A:0068 X:0000 Y:0030 P:envMxdizc - Load A from AA.
$03/AC34 6D 42 39 ADC $3942  [$7E:3942] A:0003 X:0000 Y:0030 P:envMxdizc - Add value from 3942 onto A.
$03/AC37 85 AC STA $AC    [$00:00AC] A:0003 X:0000 Y:0030 P:envMxdizc - Store A in AC.
$03/AC39 A6 AB LDX $AB    [$00:00AB] A:0003 X:0000 Y:0030 P:envMxdizc - Load X from AB.
$03/AC3B BD 7A 2C LDA $2C7A,x[$7E:2FE2] A:0003 X:0368 Y:0030 P:envMxdizc - Load A from next Spell.
$03/AC3E 85 AD STA $AD    [$00:00AD] A:0080 X:0368 Y:0030 P:eNvMxdizc - Store A in AD.
$03/AC40 30 D4 BMI $D4    [$AC16] A:0080 X:0368 Y:0030 P:eNvMxdizc - Branch back if 80.
------------------------------------------------------------------------------------------------------------------------------
$03/AC42 BD 7B 2C LDA $2C7B,x[$7E:2FDB] A:0020 X:0360 Y:0030 P:envMxdizc - Load Spell Number into A.
$03/AC45 A6 A6 LDX $A6    [$00:00A6] A:001C X:0360 Y:0030 P:envMxdizc - Load Slot ID into A.
$03/AC47 9D 52 20 STA $2052,x[$7E:21D2] A:001C X:0180 Y:0030 P:envMxdizc - Store A in Spell Choice.
$03/AC4A A9 20 LDA #$20 A:001C X:0180 Y:0030 P:envMxdizc - Load 20 into A.
$03/AC4C 9D 50 20 STA $2050,x[$7E:21D0] A:0020 X:0180 Y:0030 P:envMxdizc - Store A in 2050.
$03/AC4F A9 02 LDA #$02 A:0020 X:0180 Y:0030 P:envMxdizc - Load 02 into A.
$03/AC51 9D 51 20 STA $2051,x[$7E:21D1] A:0002 X:0180 Y:0030 P:envMxdizc - Store A in Command.
$03/AC54 A5 AD LDA $AD    [$00:00AD] A:0002 X:0180 Y:0030 P:envMxdizc - Load AD into A.
$03/AC56 29 40 AND #$40 A:0020 X:0180 Y:0030 P:envMxdizc - Get rid of all bytes that not 40.
$03/AC58 D0 25 BNE $25    [$AC7F] A:0000 X:0180 Y:0030 P:envMxdiZc - Branch if not 00.
-------------------------------------------------------------------------------------------------------------------
$03/AC5A A5 AD LDA $AD    [$00:00AD] A:0000 X:0180 Y:0030 P:envMxdiZc - Load AD into A (Targeting?)
$03/AC5C 29 10 AND #$10 A:0020 X:0180 Y:0030 P:envMxdizc - Get rid of all bytes that are not 10.
$03/AC5E F0 17 BEQ $17    [$AC77] A:0000 X:0180 Y:0030 P:envMxdiZc - Branch if 00.
-------------------------------------------------------------------------------------

---------------------------------------------------------------------------------
$03/AC77 A9 FF LDA #$FF A:0000 X:0180 Y:0030 P:envMxdiZc - Load FF into A.
$03/AC79 A6 A6 LDX $A6    [$00:00A6] A:00FF X:0180 Y:0030 P:eNvMxdizc - Load A from A6.
$03/AC7B 9D 53 20 STA $2053,x[$7E:21D3] A:00FF X:0180 Y:0030 P:envMxdizc - Store A in Party Target.
$03/AC7E 60 RTS A:00FF X:0180 Y:0030 P:envMxdizc - Return

Whew! A lot of coding there, but worth it in some respects, the way the game draws spells can easily be discerned, but I somewhat doubt this set is used for monsters at all.









LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Well, that was interesting. I found what I was looking for and here is the useful information to the casual hacker who may not want to pore through code to find inexact numbers.
...
And there you have it! All of the Status Timers to see where these are in ROM just add 1FE00 to these values. (Remember, non-headered ROM)
 :edit:
Heh, well Count's Timer is silly simple. It's the Spell Power of any spell that casts Count. All things with Count are mostly drawn from my initial Routine recording.
Count Routine

Pointers to Status Expirations

Located at 038922

Status Expirations

03A897 - Stop Timer
03A8CC - Hold/Sleep Timer
03A8E6 - HP Leak
03A8FD - Poison
03A978 - Gradual Petrification
03A9D8 - Wall
03A9EF  - Count


That is so cool!  :cycle:  It's the little the little things like that (regardless of whether or not they actually work) that always keep me coming back. It's what made me a scientist too. But truly; as always, excellent work my friend.  :cookie:

Far too long if you ask me, yes I noticed this as well that the game's battle system is generally slow, I even removed the "Damaged from Poison" text box because it is generally clear why something is taking the damage that they're taking. I do wonder if they made an error with HP Leak though, wearing off after 40 ticks of 1 HP seems ill-made, I imagine it was meant to go for a lot longer or deal a lot more damage at one point in time. But as far as I'm aware no remake has bothered to make it do more than that.

I was actually screwing around late last night, thinking about this topic specifically: Would it be possible to cause Zeromus to die from HP Leak when he is in the last phase of his battle script and sitting there casting Meteo over and over. I remember discovering on this forum (I think) that negating status effects was built into his routine - but I wasn't sure if that carried into the final phase where he is no longer scripted to shake. I'll poke around more into that but these kinds of things pique my curiosity and it's always neat to see the gears that make the works.  -- It was also for my own more personal interests a bit of a math puzzle - I was trying in the end to balance out damage done by Palom's Virus amount restored by Porom's Cure 2/3 and then (save-state / rewind ) - repeat. It was an amusing way to kill a spot of time  :tongue:  Note: For extra fun notice the slightly non-standard party  :wink:


Thanks!  My purposes were just to figure out the fundamentals of the ATB system, including how long between each turn and how long each status timer typically lasts.  I hadn't come across discussion that quite satisfied my need for something more formulaic.  The most interesting thing to me is that the ATB ticks are paused almost all the time.  Any time a character or monster is performing an action, showing a spell animation, showing a message on the top of the screen, the timers all wait.  This can be witnessed with a very short casting period for a spell when nothing else is happening vs a very long casting period if any other players or monsters are "doing" something.


Agreed! ATB in FF IV is very "except after 'C'." I would love to have formulas that you could easily follow the changes in - but that's my answer to everything.  :wink:   One thing that interests me is that I know that there are problems (at least in some versions) with Stop - some pretty severe...I'm curious as to where the game actually fails.  :hmm:  BTW - Welcome to the Forum, avalanche!  :happy: that notes you posted on ATB seemed pretty interesting: keep up the good work!  :childish:


"Now I know; and knowing makes it even more confusing..."

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Interesting experiment, I would see no reason why you couldn't kill Zeromus with HP Leak, he is just another enemy. The only thing I'd wonder is if the line "HP Ran out" would show up. You didn't quite write if the experiment worked or not. I imagine it would have, but you can never be too sure with FFIV.

That is a good question on why Stop breaks the game in several ways in the SNES versions, my guess is something about timers not clearing correctly, hence the entire battle system grinds to a halt. In theory all of the information to figure that out is now available. I would also love to know what goes wrong with Count. Death Sentence is such a neat idea for a status and would make an ideal replacement to any "instant-ko" weapon, but Count doesn't work properly on enemies for some reason...


chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Weirdest part about count is that it works fine on the first monster it's used on each battle, but doesn't work at all after that. I believe, too, that if the effects are split, it doesn't work on any of the monsters (I might be wrong about that - it was a while ago that I played around with it).

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Weirdest part about count is that it works fine on the first monster it's used on each battle, but doesn't work at all after that. I believe, too, that if the effects are split, it doesn't work on any of the monsters (I might be wrong about that - it was a while ago that I played around with it).

Oh no, if you try to use Count on all or split-all monsters, the game locks up when the timers reach 00, seemingly unable to figure out what to do next. I think Count can take out the first two enemies (as seen with the plague enemies), but it cannot take out the last one at all. It is rather strange and my bet is some built-in safeguards against it which actually end up making things worse, but without seeing the routine it's difficult to say.

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
Interesting experiment, I would see no reason why you couldn't kill Zeromus with HP Leak, he is just another enemy. The only thing I'd wonder is if the line "HP Ran out" would show up. You didn't quite write if the experiment worked or not. I imagine it would have, but you can never be too sure with FFIV.

I didn't say because the vote wasn't in yet - though at the very least I could have said that  :tongue:  I was trying to batt Zeromus' HP around - without watching the RAM (I was in ZSNES at the time) - but eventually I fell asleep. But I saddled up for another round in good ol' 9X and - yep! You see no reason it shouldn't work because there is no reason it wouldn't work: it did work!! :laugh:

Does anyone have a line on how accurate or recent this list is:     http://datacrystal.romhacking.net/wiki/Final_Fantasy_IV:RAM_map

I will say that:   "7E2307-8 - Enemy's current HP - Slot 01"    is spot on even for US_IIv1.1 - That's what I ended up exploiting to finish him off: Cast Virus, made sure the leak was is full effect, paused and took his HP down to 5 (see how he likes it!) and then when I called 'time-in' - that was pretty much that.  :wink:

 :hmm:  -- Very strange about count. I've seen a lot of speed runs where through various methods they manage to get "Reaction" as spell that that FuSoYa can cast - labeled "upt Co" from falling between Disrupt and ColdMist. Anyway...the reason I bring that up is I've heard Reaction explained as a change of state: straight Living --> Dead...rather than inflicting death. I was wondering if Count worked the same way. Also, looking in Pink's editor it looks like the "Reaction" Spell is entry 173 in the spell list marked Dummy - with and effect of: "Suicide, bring in next monster" - hmmm
"Now I know; and knowing makes it even more confusing..."

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Interesting experiment, I would see no reason why you couldn't kill Zeromus with HP Leak, he is just another enemy. The only thing I'd wonder is if the line "HP Ran out" would show up. You didn't quite write if the experiment worked or not. I imagine it would have, but you can never be too sure with FFIV.

I didn't say because the vote wasn't in yet - though at the very least I could have said that  :tongue:  I was trying to batt Zeromus' HP around - without watching the RAM (I was in ZSNES at the time) - but eventually I fell asleep. But I saddled up for another round in good ol' 9X and - yep! You see no reason it shouldn't work because there is no reason it wouldn't work: it did work!! :laugh:

Does anyone have a line on how accurate or recent this list is:     http://datacrystal.romhacking.net/wiki/Final_Fantasy_IV:RAM_map

I will say that:   "7E2307-8 - Enemy's current HP - Slot 01"    is spot on even for US_IIv1.1 - That's what I ended up exploiting to finish him off: Cast Virus, made sure the leak was is full effect, paused and took his HP down to 5 (see how he likes it!) and then when I called 'time-in' - that was pretty much that.  :wink:

 :hmm:  -- Very strange about count. I've seen a lot of speed runs where through various methods they manage to get "Reaction" as spell that that FuSoYa can cast - labeled "upt Co" from falling between Disrupt and ColdMist. Anyway...the reason I bring that up is I've heard Reaction explained as a change of state: straight Living --> Dead...rather than inflicting death. I was wondering if Count worked the same way. Also, looking in Pink's editor it looks like the "Reaction" Spell is entry 173 in the spell list marked Dummy - with and effect of: "Suicide, bring in next monster" - hmmm

Reaction is indeed a change of state, you can see this here...

http://slickproductions.org/forum/index.php?topic=1883.msg19250#msg19250

Load Death into All enemy's status bytes. No checks, no nothing. Count is the same way since even if you are protected from Death you will still be killed by Count.

Surprisingly, this can be fixed very easily...

$03/A9F8   BD 06 20   LDA $2006,x[$7E:2012]   A:0003   X:000C   Y:000D   P:envMxdizc - Load Status Byte 04 into A.
$03/A9FB   30 11   BMI $11    [$AA0E]   A:0003   X:000C   Y:000D   P:envMxdizc - Branch if Hiding to Return.
$03/A9FD   A6 A6   LDX $A6    [$00:00A6]   A:0003   X:000C   Y:000D   P:envMxdizc - Load Target Identifier (But you just did that!)
$03/A9FF   BD 03 20   LDA $2003,x[$7E:200F]   A:0003   X:000C   Y:000D   P:envMxdizc - Load Status Byte 01 into A.
$03/AA02   09 80   ORA #$80   A:0003   X:000C   Y:000D   P:envMxdizc - Add 80 (Death) if applicable.
$03/AA04   9D 03 20   STA $2003,x[$7E:200F]   A:0003   X:000C   Y:000D   P:envMxdizc - Store A in Status Byte 01

This does show that they intended to have Edward come back to the party, but it's never utilized in the original FFIV,  you can switch that to look at the Status Resistance Byte which is literally the same value in this case as Hide (80) and you could fix it like that. I don't think that will solve the issue... but you may be onto something... if instead of going through with the original routine, I wonder if linking it to the basic "Status Routine" might fix these weird timer problems, I will have to try that soon, thanks for the idea LordGarmonde.

You are under one misinterpretation though. Reaction's Routine is called... well, Reaction, it's fully unique. What you are thinking of is a routine I've dubbed "Tradeoff" since it's one enemy trading off for another and that is utilized by several enemies, Calbrena, Dr. Lugae, and the Fiends in the Giant of Babil are the most notable examples.

avalanche

  • Mom Bomb
  • *
  • Posts: 122
    • View Profile
My take on all status-inflicting spell routines is that they are only good for the limited set of statuses for which they're intended.  Especially true with the status timers.  The "plain" status routine doesn't setup Count's timer, for example, or HP leak or poison...  Otherwise there is no good reason why there are multiple status related routines. I think it kept it simpler on the coders.  Actually that one might not even touch status bytes 3 and 4 if I'm remembering correctly, and hp leak and count are in those.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
My take on all status-inflicting spell routines is that they are only good for the limited set of statuses for which they're intended.  Especially true with the status timers.  The "plain" status routine doesn't setup Count's timer, for example, or HP leak or poison...  Otherwise there is no good reason why there are multiple status related routines. I think it kept it simpler on the coders.  Actually that one might not even touch status bytes 3 and 4 if I'm remembering correctly, and hp leak and count are in those.

They are, you're right. But my plan was to set up the basic necessities of a Death status in the expiration of Count's Timer Load 80, store it in 28A3, then jump to the normal status routine...

For some reason it did not work. I tried an alternative method to load 0000 into an enemy's HP and they did die when their turn elapsed, but there was still that"only 2 can be killed by Count" enforced limit that I've had no luck locating.

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
You are under one misinterpretation though. Reaction's Routine is called... well, Reaction, it's fully unique. What you are thinking of is a routine I've dubbed "Tradeoff" since it's one enemy trading off for another and that is utilized by several enemies, Calbrena, Dr. Lugae, and the Fiends in the Giant of Babil are the most notable examples.

 :blush: Yep there it is... 142: Dummy "Trigger a Reaction"  -  Between 141: Call and 143: Vanish   :isuck:   --  But in the future I also plan to call Spell # 173 "Tradeoff" - good call!   :terrydia:


Tradeoff reminds me of something I once read about Dummy Kefka:    http://finalfantasy.wikia.com/wiki/Kefka_(Boss)

"The dummy version of Kefka inherently has the Hide status so it never appears and cannot be targeted. The AI script of the dummy implies that the enemy was a device used to help switch the tiers in the final battle. However, since the enemy does not actually appear in the final battle, the enemy is a dummied enemy."

I tried an alternative method to load 0000 into an enemy's HP and they did die when their turn elapsed, but there was still that"only 2 can be killed by Count" enforced limit that I've had no luck locating.

One thing that might work - though not ideal - could be (if I'm understanding this correctly) to stagger the deaths. Say if there were three Imps (A, B & C) - and they all had Count with turn order A-B-C. A dies...B dies...and normally at this point the game would lock up while trying to kill C, correct? What if part the count routine was to increment the counts of others that haven't hit zero yet. I sketched something out but retracted it while typing it up... I feel like there's got to be a way around this.  :hmm:

I liked 0000 HP - that should have been nice and clean. What about what I just did to Zeromus: 0000 for Imp-A, 0003 (With HP Leak) for Imp-B, and 0005 (With HP Leak) for Imp-C - then they'd go down like dominos. Not as clean, and it's getting further from Counts purpose of knock-knock--you're-dead...but then again, the way things are in this game sometimes it's just crazy enough to work.  :wink:
"Now I know; and knowing makes it even more confusing..."

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
It's not so much that the game locks up when you use Count thrice, it's that the timer for Count just stops running and will stay at 0A, what does freeze the game is when you inflict it on many enemies at once.

You might be onto something with the Set HP to 0005 (HP Drain) or something like that to kill an enemy, but I think the way they've developed the status is probably the problem.

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
That's a nifty idea as a fix for Count. You'd have to get rid of the "Ran out of HP" message in order to complete the illusion, though.
 :hmm:

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
It's not so much that the game locks up when you use Count thrice, it's that the timer for Count just stops running and will stay at 0A, what does freeze the game is when you inflict it on many enemies at once.

Ahh - That is tricky... I mean - it shouldn't be  :wink:   but that's why we're here.    :laugh:

You might be onto something with the Set HP to 0005 (HP Drain) or something like that to kill an enemy, but I think the way they've developed the status is probably the problem.

That's a nifty idea as a fix for Count. You'd have to get rid of the "Ran out of HP" message in order to complete the illusion, though.
 :hmm:

Aww, thanks guys  :blush:   --  Perhaps we could banish the message along with its cousin: "Damaged By Poison"  :yabin:

And speaking of battle messages... is there a reason to keep "The Water is Gathering" - it has a visual...or am I neglecting something as I'm thinking it out in my head?
"Now I know; and knowing makes it even more confusing..."

Pinkpuff

  • Flan Princess
  • *
  • Posts: 924
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
And speaking of battle messages... is there a reason to keep "The Water is Gathering" - it has a visual...or am I neglecting something as I'm thinking it out in my head?

I think that battle just has a lot of unnecessary narration generally... "Hiding in the shell!" "The Lit scared him!"
Let's dance!

LordGarmonde

  • Baigan
  • *
  • Posts: 271
  • Gender: Male
  • "Power only breeds war..."
    • View Profile
I think that battle just has a lot of unnecessary narration generally... "Hiding in the shell!" "The Lit scared him!"

Oh yeah - I forgot about those! So even in my head I was cutting that battle too much slack.  :tongue:

One legit reason I could have thought of could have been to somehow buffer the counters, etc. while the transition is taking place. But it didn't take long to counterexample that with Valvalis - when Kain hits her she stops spinning and they don't have to tell us about it...because they already told us to do it in the first place...  :bah:
"Now I know; and knowing makes it even more confusing..."