øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.msg19350e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexa55c.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.0e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexa55c.html.zxãg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ'„nOKtext/htmlISO-8859-1gzip@øÕ„nÿÿÿÿÿÿÿÿTue, 10 Mar 2020 04:59:36 GMT0ó°° ®0®P®€§²ð®àg^ÿÿÿÿÿÿÿÿ嵄n 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 78641 times)

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #90 on: October 06, 2013, 09:29:12 PM »
Next up is the Focus/Power/Boost routine. It should seem simple enough in practice.

Code: [Select]
$03/E7F0 EE 0A 39 INC $390A  [$7E:390A] A:0003 X:001A Y:0000 P:envMxdizc - +1 to 7E390A.
$03/E7F3 A9 1F LDA #$1F A:0003 X:001A Y:0000 P:envMxdizc - Load 1F into A.
$03/E7F5 8D 7B 39 STA $397B  [$7E:397B] A:001F X:001A Y:0000 P:envMxdizc - Store A in 7E397B.
$03/E7F8 A9 0C LDA #$0C A:001F X:001A Y:0000 P:envMxdizc - Load 0C into A.
$03/E7FA 85 D6 STA $D6    [$00:00D6] A:000C X:001A Y:0000 P:envMxdizc  - Store A in D6.
$03/E7FC A5 CD LDA $CD    [$00:00CD] A:000C X:001A Y:0000 P:envMxdizc - Load Character Identifier Into A.
$03/E7FE 20 36 9E JSR $9E36  [$03:9E36] A:0000 X:001A Y:0000 P:envMxdiZc - Jump to Subroutine (Likely something dealing with Timers and Speed.)
$03/E801 A9 03 LDA #$03 A:0000 X:0005 Y:0005 P:envMxdizc - Load 03 into A.
$03/E803 20 C8 85 JSR $85C8  [$03:85C8] A:0003 X:0005 Y:0005 P:envMxdizc - Jump to Subroutine (Difficult to Say)
$03/E806 A9 08 LDA #$08 A:0000 X:0003 Y:0005 P:envMxdiZc - Load 08 into A.
$03/E808 9D 06 2A STA $2A06,x[$7E:2A09] A:0008 X:0003 Y:0005 P:envMxdizc - Store A in 7E2A09.
$03/E80B A6 A6 LDX $A6    [$00:00A6] A:0008 X:0003 Y:0005 P:envMxdizc - Load X from A6 (Character Slot)
$03/E80D BD 05 20 LDA $2005,x[$7E:2005] A:0008 X:0000 Y:0005 P:envMxdiZc - Load Slot X's Status Byte 3.
$03/E810 09 08 ORA #$08 A:0000 X:0000 Y:0005 P:envMxdiZc - Add 08 if not already there (Charging)
$03/E812 9D 05 20 STA $2005,x[$7E:2005] A:0008 X:0000 Y:0005 P:envMxdizc - Store Charging in Slot X's Status Byte 3.
$03/E815 A9 1F LDA #$1F A:0008 X:0000 Y:0005 P:envMxdizc - Load 1F into A. (Action to take after the timer has expired.)
$03/E817 9D 51 20 STA $2051,x[$7E:2051] A:001F X:0000 Y:0005 P:envMxdizc - Store 1F in Slot X's Next Action to Take.
$03/E81A 20 A6 85 JSR $85A6  [$03:85A6] A:001F X:0000 Y:0005 P:envMxdizc - Jump to Subroutine (??)
$03/E81D A9 39 LDA #$39 A:0003 X:0000 Y:0005 P:envMxdizc - Load 39 into A (D)
$03/E81F 8D CA 34 STA $34CA  [$7E:34CA] A:0039 X:0000 Y:0005 P:envMxdizc - Store A in Battle Message Data.
$03/E822 60 RTS A:0039 X:0000 Y:0005 P:envMxdizc - Return

Only the basics of what you would expect are in here, but most interestingly is $03/E817   9D 51 20   STA $2051,x[$7E:2051]   A:001F   X:0000   Y:0005   P:envMxdizc - Store 1F in Slot X's Next Action to Take..

What this does is it would allow you to set the next action you take. what takes away the Charging Status is held in Command 1F. You could set it to a normal command of any sort (as long as it doesn't open a sub-menu) and you would effectively have a permanent Charge status, meaning you would deal double the damage, but you would also still be heavily afflicted by Charging's detriments.

The second part of Focus as you would imagine is the actual attack.

Focus (Command 1F) Routine -

Code: [Select]
$03/E823 20 99 C4 JSR $C499  [$03:C499] A:0003 X:003E Y:0000 P:envMxdizc - Jump to Subroutine (All of the Fight Routine)
$03/E826 A5 CD LDA $CD    [$00:00CD] A:0000 X:750E Y:0018 P:envMxdiZC - Load Character Identifier into A.
$03/E828 20 89 84 JSR $8489  [$03:8489] A:0000 X:750E Y:0018 P:envMxdiZC - Jump to Subroutine (Preparation?)
$03/E82B A6 A6 LDX $A6    [$00:00A6] A:0000 X:0000 Y:0018 P:envMxdiZc - Load Character Slot into X.
$03/E82D BD 05 20 LDA $2005,x[$7E:2005] A:0000 X:0000 Y:0018 P:envMxdiZc - Load Slot X's Status Byte 3 into A.
$03/E830 29 F7 AND #$F7 A:0008 X:0000 Y:0018 P:envMxdizc - -8, getting rid of Charging Status.
$03/E832 9D 05 20 STA $2005,x[$7E:2005] A:0000 X:0000 Y:0018 P:envMxdiZc - Store A in 7E2005.
$03/E835 60 RTS A:0000 X:0000 Y:0018 P:envMxdiZc - Return.

And that is it for Focus. Maybe with a bit more wit we could refocus the JSR to not look at Fight, but then where would an applicable place be?







Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #91 on: October 06, 2013, 10:33:25 PM »
Next up is Aim another self-explanatory command.

Code: [Select]
$03/E836 AD 9C 26 LDA $269C  [$7E:269C] A:0003 X:0018 Y:0000 P:envMxdizc - Load Caster's Physical Attack Percent.
$03/E839 48 PHA A:0034 X:0018 Y:0000 P:envMxdizc - Push A.
$03/E83A AD 29 27 LDA $2729  [$7E:2729] A:0034 X:0018 Y:0000 P:envMxdizc - Load Enemies (Non-existent) Evasion.
$03/E83D 48 PHA A:0000 X:0018 Y:0000 P:envMxdiZc - Push A.
$03/E83E 7B TDC A:0000 X:0018 Y:0000 P:envMxdiZc - Transfer Direct Page (thereby making it 00)
$03/E83F 8D 29 27 STA $2729  [$7E:2729] A:0000 X:0018 Y:0000 P:envMxdiZc - Store 00 in Target's Evasion.
$03/E842 3A DEC A A:0000 X:0018 Y:0000 P:envMxdiZc -1 to A.
$03/E843 8D 9C 26 STA $269C  [$7E:269C] A:00FF X:0018 Y:0000 P:eNvMxdizc - Store A  (FF - 255%) into Physical Attack Percent.
$03/E846 20 99 C4 JSR $C499  [$03:C499] A:00FF X:0018 Y:0000 P:eNvMxdizc - Jump to Subroutine (Full Fight Routine)
$03/E849 68 PLA A:0000 X:750E Y:0018 P:envMxdiZC - Pull A.
$03/E84A 8D 29 27 STA $2729  [$7E:2729] A:0000 X:750E Y:0018 P:envMxdiZC - Store A in Target's Evasion.
$03/E84D 68 PLA A:0000 X:750E Y:0018 P:envMxdiZC - Pull A.
$03/E84E 8D 9C 26 STA $269C  [$7E:269C] A:0034 X:750E Y:0018 P:envMxdizC - Store A in Caster's Accuracy.
$03/E851 60 RTS A:0034 X:750E Y:0018 P:envMxdizC - Return

It seems like only yesterday that I was flummoxed about how to make Aim into a less absolute command. At the time I knew very little and thought it was hopeless, but now I see what Square meant to do and because of what we have a bit freer space. Evasion would only ever effect battles against Valvalis/Barbariccia in the normal game. Therefore I think we could take those Evasion references and make them into something else.

I decided for this experiment to make the Accuracy of the currently equipped Bow to become the new Critical Hit Chance and x2 Accuracy.


$03/E836   AD 9C 26   LDA $269C  [$7E:269C]   A:0003   X:0018   Y:0000   P:envMxdizc - Load Caster's Accuracy.
$03/E839   48    PHA   A:0034   X:0018   Y:0000   P:envMxdizc - Push it onto the Stack in A.
$03/E83A   AE AD 26   LDX $26AD  [$7E:26AD]   A:0034   X:0018   Y:0000   P:envMxdizc - Load Caster's Critical Hit chance.
$03/E83D   DA    PHX   A:0034   X:2306   Y:0000   P:envMxdizc - Push it onto the Stack in X.
$03/E83E   0A    ASL A   A:0034   X:2306   Y:0000   P:envMxdizc - x2 A (Caster's Accuracy)
$03/E83F   8D 9C 26   STA $269C  [$7E:269C]   A:0068   X:2306   Y:0000   P:envMxdizc - Store A in current accuracy.
$03/E842   4A    LSR A   A:0068   X:2306   Y:0000   P:envMxdizc - /2 A (Caster's Accuracy)
$03/E843   8D AD 26   STA $26AD  [$7E:26AD]   A:0034   X:2306   Y:0000   P:envMxdizc - Store in Critical Hit Chance.
$03/E846   20 99 C4   JSR $C499  [$03:C499]   A:0034   X:2306   Y:0000   P:envMxdizc - Jump to Fighting Subroutine.
$03/E849   FA    PLX   A:0000   X:750E   Y:0018   P:envMxdiZC - Pull X from Stack. (To restore original values)
$03/E84A   8E AD 26   STX $26AD  [$7E:26AD]   A:0000   X:2306   Y:0018   P:envMxdizC - Store X in Critical Hit Chance.
$03/E84D   68    PLA   A:0000   X:2306   Y:0018   P:envMxdizC - Pull A from Stack. (To restore original values)
$03/E84E   8D 9C 26   STA $269C  [$7E:269C]   A:0034   X:2306   Y:0018   P:envMxdizC - Store A in Accuracy.
$03/E851   60    RTS   A:0034   X:2306   Y:0018   P:envMxdizC - Return.


It took a little bit of time to figure it out, to make all of this work but it is tried and tested and works flawlessly. It gives Aim that extra push it needs to stack up against the better Commands and it only gets better as the game goes on, with the last bow the player will likely get topping out at 60% Critical Hit Chance for each attack whenever they use Aim with the Samurai Bow. Perhaps its a bit broken, but I was working with a bit of limited space after all, hehe.

 :edit: January 5th 2014 - 2 New Aim Replacements!

Wow... Barrage (FFIII DS, FFT:War of the Lions) was a Stupidly easy thing to program in the end... at least in a basic form...

Because of space limitations I decided to call it (Arrow Symbol)Strm (Arrow Storm) after a tactic common to the Romance of the Three Kingdoms series.

Code: [Select]
$03/E836 20 99 C4 JSR $C499  [$03:C499] A:0003 X:0018 Y:0000 P:envMxdizc - Fight Routine x4
$03/E839 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC
$03/E83C 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC
$03/E83F 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC
$03/E842 60 RTS A:0000 X:750E Y:0018 P:envMxdiZC - Return
Yes, four normal attacks. I honestly thought this was going to cause an overflow problem with the arrows, but to my amazement the game Properly decrements them without overflowing. (And if used with less than 3 Arrows you will no longer have any arrows) And as you'd expect it deals x4 Damage (though without my Infinite Arrow-Glitch fix it still has that problem as you'd expect.)


Now, these all add up properly, but there's still two pieces I'm missing. This first is how to divide the damage by 2. I may need to look back at the original Aim Command for guidance... Specifically at...

$03/E836   AD 9C 26   LDA $269C  [$7E:269C]   A:0003   X:0018   Y:0000   P:envMxdizc - Load Caster's Physical Attack Percent.
$03/E839   48    PHA   A:0034   X:0018   Y:0000   P:envMxdizc - Push A.

That seems like a fine start to a recipe actually.

Well... I learned something through this experience... Never Ever Forget to Retrieve Your Pushed Values!!

For roughly an hour I was looking at my preliminary code, wondering what I was doing wrong, when it finally dawned on me that because I was testing the pure functionality I never retrieved the Pushed value back and this causes a system crash.

So I now have Arrowstorm working like Barrage from FFT:War of the Lions! 4 half-damage attack that takes 4 Ammo for roughly 2x damage (but it attacks four times so even more chance of a status infliction if applicable)

Arrowstorm

Code: [Select]
$03/E836 AD 9D 26 LDA $269D  [$7E:269D] A:0003 X:0018 Y:0000 P:envMxdizc - Load Caster's Physical Attack Base.
$03/E839 48 PHA A:0053 X:0018 Y:0000 P:envMxdizc - Push A onto Stack.
$03/E83A 4A LSR A A:0053 X:0018 Y:0000 P:envMxdizc - Divide Physical Attack Base by 2.
$03/E83B 8D 9D 26 STA $269D  [$7E:269D] A:0029 X:0018 Y:0000 P:envMxdizC - Store A in Physical Attack Base.
$03/E83E 20 99 C4 JSR $C499  [$03:C499] A:0029 X:0018 Y:0000 P:envMxdizC - Fight Routine x 4
$03/E841 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC
$03/E844 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC
$03/E847 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC
$03/E84A 68 PLA A:0000 X:750E Y:0018 P:envMxdiZC - Pull A
$03/E84B 8D 9D 26 STA $269D  [$7E:269D] A:0053 X:750E Y:0018 P:envMxdizC - Store A in Physical Attack Base (original value)
$03/E84E 60 RTS A:0053 X:750E Y:0018 P:envMxdizC - Return


Now, FFIII's Barrage is a little trickier to get down...

The way that works is each shot deals full damage +another 10-40% depending on the Job Level. To mimic this, (as well as I can...) I would instead make it look at Strength. At
0-39 Str. There would be no bonus. 40-60 1/8 Bonus in Damage, 60-99 1/4 Bonus in damage. It might encourage people to use Rosa in a Strength set-up rather than always going for the Will set-up possibly. But this seems like it will take a bit more space than Aim actually supports. So I'll have to hold off on that for now.

Though I suppose I could make a variant... (looks back at how he programmed Aura originally...) Yes. Instead make it so that Two Attacks will occur automatically. And if you have over 45 Strength a third one happens and at over 60 strength a fourth one occurs.

Barrage (Arrowstorm) FFIII "Style" (Sort of)

Code: [Select]
$03/E836 20 99 C4 JSR $C499  [$03:C499] A:0003 X:0018 Y:0000 P:envMxdizc - Fight Routine
$03/E839 20 99 C4 JSR $C499  [$03:C499] A:0000 X:750E Y:0018 P:envMxdiZC - Fight Routine
$03/E83C AD 94 26 LDA $2694  [$7E:2694] A:0000 X:750E Y:0018 P:envMxdiZC - Load Modified Strength
$03/E83F C9 2D CMP #$2D A:005D X:750E Y:0018 P:envMxdizC - Is it 45 or Higher?
$03/E841 90 0E BCC $0E    [$E851] A:005D X:750E Y:0018 P:envMxdizC - If lower branch to 03E851
$03/E843 20 99 C4 JSR $C499  [$03:C499] A:005D X:750E Y:0018 P:envMxdizC - Fight Routine
$03/E846 AD 94 26 LDA $2694  [$7E:2694] A:0000 X:750E Y:0018 P:envMxdiZC - Load Modified Strength
$03/E849 C9 3C CMP #$3C A:005D X:750E Y:0018 P:envMxdizC - Is it 60 or Higher?
$03/E84B 90 04 BCC $04    [$E851] A:005D X:750E Y:0018 P:envMxdizC - If lower branch to 03E851
$03/E84D 20 99 C4 JSR $C499  [$03:C499] A:005D X:750E Y:0018 P:envMxdizC - Fight Routine
$03/E850 60 RTS A:0000 X:750E Y:0018 P:envMxdiZC - Return

Geez, I must really love the Aim Command, I've now made three variants for it!
« Last Edit: January 05, 2014, 02:25:47 PM by Grimoire LD »

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #92 on: October 06, 2013, 11:49:36 PM »
Next up is Pray, just like with Gird, I don't expect to find many surprises and it is a fairly short command by all accounts.

Pray Routine -

Code: [Select]
$03/E852 20 93 85 JSR $8593  [$03:8593] A:0003 X:0016 Y:0000 P:envMxdizc - Jump to Subroutine (Generate Random Number)
$03/E855 C9 80 CMP #$80 A:00EA X:00CE Y:0000 P:eNvMxdizC - Is it 80?
$03/E857 90 0A BCC $0A    [$E863] A:00EA X:00CE Y:0000 P:envMxdizC - If more than 80 branch to 03E863.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E859 20 A6 85 JSR $85A6  [$03:85A6] A:00EA X:00CE Y:0000 P:envMxdizC - Jump to Subroutine (??)
$03/E85C A9 10 LDA #$10 A:0003 X:00CE Y:0000 P:envMxdizC - Load 10 into A (D) (Failed Prayer)
$03/E85E 8D CA 34 STA $34CA  [$7E:34CA] A:0010 X:00CE Y:0000 P:envMxdizC - Store A in Battle Message Data.
$03/E861 80 08 BRA $08    [$E86B] A:0010 X:00CE Y:0000 P:envMxdizC - Branch Always to 03E86B
--------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E863 A9 0E LDA #$0E A:001C X:0083 Y:0000 P:eNvMxdizc - Load Cure into A.
$03/E865 8D D2 26 STA $26D2  [$7E:26D2] A:000E X:0083 Y:0000 P:envMxdizc - Store A in Next Action to take.
$03/E868 20 3E CD JSR $CD3E  [$03:CD3E] A:000E X:0083 Y:0000 P:envMxdizc - Jump to Subroutine (Magic Call)
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E86B A9 0B LDA #$0B A:0010 X:00CE Y:0000 P:envMxdizC - Load 0B into A.
$03/E86D 8D C8 34 STA $34C8  [$7E:34C8] A:000B X:00CE Y:0000 P:envMxdizC - Store A in 7E34C8.
$03/E870 A9 10 LDA #$10 A:000B X:00CE Y:0000 P:envMxdizC - Load 10 into A.
$03/E872 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:00CE Y:0000 P:envMxdizC - Store A in 7E34C7.
$03/E875 60 RTS A:0010 X:00CE Y:0000 P:envMxdizC -Return

Quite short and quite simple. It's becoming alarmingly clear. It seems all you need to do to get a command to use a Spell is...


$03/E863   A9 0E   LDA #$0E   A:001C   X:0083   Y:0000   P:eNvMxdizc - Load Spell into A.
$03/E865   8D D2 26   STA $26D2  [$7E:26D2]   A:000E   X:0083   Y:0000   P:envMxdizc - Store A in Next Action to take.
$03/E868   20 3E CD   JSR $CD3E  [$03:CD3E]   A:000E   X:0083   Y:0000   P:envMxdizc - Jump to Subroutine (Magic Call)

And that's it. Gird and Pray tell the same story in this regard. Making the "break the game" Command into an Actual skill for Cid (by using the saved bytes from their copied Peep info) is becoming more and more like a simple reality.

Next is Hide, let's see what that can tell us...

Code: [Select]
$03/E876 A6 A6 LDX $A6    [$00:00A6] A:0003 X:0012 Y:0000 P:envMxdizc - Load Character Slot into A.
$03/E878 BD 06 20 LDA $2006,x[$7E:2006] A:0003 X:0000 Y:0000 P:envMxdiZc - Load Slot X's Status Byte 4.
$03/E87B 09 80 ORA #$80 A:0000 X:0000 Y:0000 P:envMxdiZc - Add 80.
$03/E87D 9D 06 20 STA $2006,x[$7E:2006] A:0080 X:0000 Y:0000 P:eNvMxdizc - Store A in Slot X's Status Byte 4.
$03/E880 AE 34 35 LDX $3534  [$7E:3534] A:0080 X:0000 Y:0000 P:eNvMxdizc - Load X from 7E3534.
$03/E883 64 A9 STZ $A9    [$00:00A9] A:0080 X:0000 Y:0000 P:envMxdiZc - Store Zero in A9.
----------------------------------------------------(Looping Point)------------------------------------------------------------------------
$03/E885 BD 03 33 LDA $3303,x[$7E:3303] A:0080 X:0000 Y:0000 P:envMxdiZc - Load A from 7E3303.
$03/E888 C9 09 CMP #$09 A:0000 X:0000 Y:0000 P:envMxdiZc - Is it 09? (Hide)
$03/E88A D0 07 BNE $07    [$E893] A:0000 X:0000 Y:0000 P:eNvMxdizc - If not, branch to 03E893.
-------------------------------------------------------------------------------------------------------------------------------------------
$03/E88C A9 1C LDA #$1C A:0009 X:0010 Y:0000 P:envMxdiZC - Load 1C into A. (Show)
$03/E88E 9D 03 33 STA $3303,x[$7E:3313] A:001C X:0010 Y:0000 P:envMxdizC - Store A in 7E3313. (Location of Command to Replace.)
$03/E891 80 08 BRA $08    [$E89B] A:001C X:0010 Y:0000 P:envMxdizC - Branch to 08.
--------------------------------------------------------------------------------------------------------------------------------------------
$03/E893 BD 02 33 LDA $3302,x[$7E:3302] A:0000 X:0000 Y:0000 P:eNvMxdizc - Load A from 7E3302
$03/E896 09 80 ORA #$80 A:0050 X:0000 Y:0000 P:envMxdizc - Add 80 into A. (Makes it so no other command is selectable but Show)
$03/E898 9D 02 33 STA $3302,x[$7E:3302] A:00D0 X:0000 Y:0000 P:eNvMxdizc - Store A in 7E3302.
$03/E89B E8 INX A:00D0 X:0000 Y:0000 P:eNvMxdizc - +1 to X
$03/E89C E8 INX A:00D0 X:0001 Y:0000 P:envMxdizc +1 to X
$03/E89D E8 INX A:00D0 X:0002 Y:0000 P:envMxdizc +1 to X
$03/E89E E8 INX A:00D0 X:0003 Y:0000 P:envMxdizc +1 to X.
$03/E89F E6 A9 INC $A9    [$00:00A9] A:00D0 X:0004 Y:0000 P:envMxdizc - +1 to A9.
$03/E8A1 A5 A9 LDA $A9    [$00:00A9] A:00D0 X:0004 Y:0000 P:envMxdizc - Load A9 into A.
$03/E8A3 C9 05 CMP #$05 A:0001 X:0004 Y:0000 P:envMxdizc - Is it 05?
$03/E8A5 D0 DE BNE $DE    [$E885] A:0001 X:0004 Y:0000 P:eNvMxdizc - If not, loop back to 03E885.
$03/E8A7 A5 CD LDA $CD    [$00:00CD] A:0005 X:0014 Y:0000 P:envMxdiZC - Load Character ID into A.
$03/E8A9 85 00 STA $00    [$00:0000] A:0000 X:0014 Y:0000 P:envMxdiZC - Store A in 00.
$03/E8AB A9 09 LDA #$09 A:0000 X:0014 Y:0000 P:envMxdiZC - Load 09 into A.
$03/E8AD 20 85 80 JSR $8085  [$03:8085] A:0009 X:0014 Y:0000 P:envMxdizC - Jump to Subroutine (Lots of jumping)
$03/E8B0 A9 09 LDA #$09 A:0005 X:7504 Y:000A P:envMxdiZC - Load 09 into A.
$03/E8B2 8D C8 34 STA $34C8  [$7E:34C8] A:0009 X:7504 Y:000A P:envMxdizC - Store A in 7E34C8.
$03/E8B5 A9 10 LDA #$10 A:0009 X:7504 Y:000A P:envMxdizC - Load 10 into A.
$03/E8B7 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:7504 Y:000A P:envMxdizC - Store A in 7E34C7.
$03/E8BA 60 RTS A:0010 X:7504 Y:000A P:envMxdizC - Return

Now this is the first command that I've actively noticed this (and is likely true to Cover and Off as well) but the forced changing of the command is purely dealt with by using the Hide command. Now this has very interesting possibilities... Due to the way the game works, changing Commands that are on a character with the normal tools available to do so are only done normally through Different References of the same character outside of battle and Commands in-battle. What this seems to show is that we can change commands with a little bit of custom code at any time we please. Say we make an item that utilizes Dispel's formula space that gives a character a new skill. For instance, giving Paladin Cecil back Dark Wave through a custom event that rewards a special item that could only be used by Cecil (Proof of Concept in Crystal) which would move Item to Slot 5 and add Dark Wave to Slot 4.

Next up is Show.

Code: [Select]

$03/E8BB A6 A6 LDX $A6    [$00:00A6] A:0003 X:0038 Y:0000 P:envMxdizc - Load Slot X into A.
$03/E8BD BD 06 20 LDA $2006,x[$7E:2006] A:0003 X:0000 Y:0000 P:envMxdiZc - Load Slot X's Status Byte 4.
$03/E8C0 29 7F AND #$7F A:0080 X:0000 Y:0000 P:eNvMxdizc - Add 7F to it.
$03/E8C2 9D 06 20 STA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A Slot X's Status Byte 4.
$03/E8C5 AE 34 35 LDX $3534  [$7E:3534] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from 7E3534.
-----------------------------------------------(Looping Point)-------------------------------------------------------------------------------
$03/E8C8 64 A9 STZ $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZc - Store Zero in A9.
$03/E8CA BD 03 33 LDA $3303,x[$7E:3303] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Command Data into A.
$03/E8CD C9 1C CMP #$1C A:0000 X:0000 Y:0000 P:envMxdiZc - Is it Show?
$03/E8CF D0 07 BNE $07    [$E8D8] A:0000 X:0000 Y:0000 P:eNvMxdizc - If not, branch to 03E8D8.
--------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E8D1 A9 09 LDA #$09 A:001C X:0010 Y:0000 P:envMxdiZC - Load Sing into A.
$03/E8D3 9D 03 33 STA $3303,x[$7E:3313] A:0009 X:0010 Y:0000 P:envMxdizC - Store Sing to its original position.
$03/E8D6 80 08 BRA $08    [$E8E0] A:0009 X:0010 Y:0000 P:envMxdizC - Branch to 03E8E0.
---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E8D8 BD 02 33 LDA $3302,x[$7E:3302] A:0000 X:0000 Y:0000 P:eNvMxdizc - Load State of Commands (Usable/Not)
$03/E8DB 29 7F AND #$7F A:00D0 X:0000 Y:0000 P:eNvMxdizc - Add 7F (to counter 80) (Restores Commands)
$03/E8DD 9D 02 33 STA $3302,x[$7E:3302] A:0050 X:0000 Y:0000 P:envMxdizc - Store A in 7E3302.
$03/E8E0 E8 INX A:0050 X:0000 Y:0000 P:envMxdizc +1 to X.
$03/E8E1 E8 INX A:0050 X:0001 Y:0000 P:envMxdizc +1 to X.
$03/E8E2 E8 INX A:0050 X:0002 Y:0000 P:envMxdizc +1 to X.
$03/E8E3 E8 INX A:0050 X:0003 Y:0000 P:envMxdizc +1 to X.
$03/E8E4 E6 A9 INC $A9    [$00:00A9] A:0050 X:0004 Y:0000 P:envMxdizc - +1 to A9.
$03/E8E6 A5 A9 LDA $A9    [$00:00A9] A:0050 X:0004 Y:0000 P:envMxdizc - Load A9 into A
$03/E8E8 C9 05 CMP #$05 A:0001 X:0004 Y:0000 P:envMxdizc - Has it checked all 5 commands?
$03/E8EA D0 DE BNE $DE    [$E8CA] A:0001 X:0004 Y:0000 P:eNvMxdizc - If not, loop to 03E8CA.
$03/E8EC A5 CD LDA $CD    [$00:00CD] A:0005 X:0014 Y:0000 P:envMxdiZC - Load Character ID into A.
$03/E8EE 85 00 STA $00    [$00:0000] A:0000 X:0014 Y:0000 P:envMxdiZC - Store A in 00.
$03/E8F0 A9 09 LDA #$09 A:0000 X:0014 Y:0000 P:envMxdiZC - Load 09 into A.
$03/E8F2 20 85 80 JSR $8085  [$03:8085] A:0009 X:0014 Y:0000 P:envMxdizC - Jump to Subroutine (Lots of Jumping)
$03/E8F5 A9 1C LDA #$1C A:0005 X:7504 Y:000A P:envMxdiZC - Load Command Name into A.
$03/E8F7 8D C8 34 STA $34C8  [$7E:34C8] A:001C X:7504 Y:000A P:envMxdizC - Store A in Small Message Data.
$03/E8FA A9 10 LDA #$10 A:001C X:7504 Y:000A P:envMxdizC - Load 10 into A.
$03/E8FC 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:7504 Y:000A P:envMxdizC - Store A in 7E34C7.
$03/E8FF 60 RTS A:0010 X:7504 Y:000A P:envMxdizC - Return.

Some interesting information gleaned from this. Something that is not seen in other commands and wholly unique to Hide is the inability to use any Command but Show afterwards. What is clear now is that the reference to 3302 (first byte of commands) is that it governs whether it can or can't be used. You can use no Commands under hide because the only exception made in it is for Show. All the others had have 80 added to their base value.



Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #93 on: October 07, 2013, 12:24:24 AM »
Let's finish this batch of information up with Sing. I don't expect to find much here, likely the percentage chance of each Song to occur and perhaps even find Frog Song.


Code: [Select]
$03/E900 AD 83 26 LDA $2683  [$7E:2683] A:0003 X:0010 Y:0000 P:envMxdizc - Load Caster's Status Byte 1.
$03/E903 29 20 AND #$20 A:0000 X:0010 Y:0000 P:envMxdiZc - Is it Frog?
$03/E905 F0 09 BEQ $09    [$E910] A:0000 X:0010 Y:0000 P:envMxdiZc -If not, branch to 03E910.
------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E907 A9 0B LDA #$0B A:0020 X:0010 Y:0000 P:envMxdizc - Load 0B into A (Song of Toad)
$03/E909 8D CA 34 STA $34CA  [$7E:34CA] A:000B X:0010 Y:0000 P:envMxdizc - Store A in Battle Message Data.
$03/E90C A9 19 LDA #$19 A:000B X:0010 Y:0000 P:envMxdizc - Load Toad into A.
$03/E90E 80 31 BRA $31    [$E941] A:0019 X:0010 Y:0000 P:envMxdizc - Branch always to 03E941.
------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E910 20 93 85 JSR $8593  [$03:8593] A:0000 X:0010 Y:0000 P:envMxdiZc - Jump to Subroutine (Generate Random Number.)
$03/E913 C9 C0 CMP #$C0 A:005C X:00BD Y:0000 P:envMxdizC - Is it C0?
$03/E915 90 09 BCC $09    [$E920] A:005C X:00BD Y:0000 P:eNvMxdizc - If it is less than C0 branch to 03E920.
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E924 A9 0E LDA #$0E A:0095 X:0052 Y:0000 P:envMxdizC - Load 0E into A (Song of Mute)
$03/E926 8D CA 34 STA $34CA  [$7E:34CA] A:000E X:0052 Y:0000 P:envMxdizC - Store A in Battle Message Data.
$03/E929 A9 02 LDA #$02 A:000E X:0052 Y:0000 P:envMxdizC - Load 02 into A (Mute)
$03/E92B 80 14 BRA $14    [$E941] A:0002 X:0052 Y:0000 P:envMxdizC - Branch to 03E941.
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E920 C9 80 CMP #$80 A:005C X:00BD Y:0000 P:eNvMxdizc - Is it 80?
$03/E922 90 09 BCC $09    [$E92D] A:005C X:00BD Y:0000 P:eNvMxdizc - If it less than 80 branch to 03E92D.
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E917 A9 00 LDA #$00 A:00C0 X:0054 Y:0000 P:envMxdiZC - Load 00 into A (Nothing Happened.)
$03/E919 8D CA 34 STA $34CA  [$7E:34CA] A:0000 X:0054 Y:0000 P:envMxdiZC - Store A in Battle Message Data.
$03/E91C A9 00 LDA #$00 A:0000 X:0054 Y:0000 P:envMxdiZC - Load 00 (Nothing) into A.
$03/E91E 80 21 BRA $21    [$E941] A:0000 X:0054 Y:0000 P:envMxdiZC - Branch to 03E941.
----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E92D C9 40 CMP #$40 A:005C X:00BD Y:0000 P:eNvMxdizc - Is it 40?
$03/E92F 90 09 BCC $09    [$E93A] A:005C X:00BD Y:0000 P:envMxdizC - If it is less than 40 branch to 03E93A
--------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E931 A9 0D LDA #$0D A:005C X:00BD Y:0000 P:envMxdizC - Load 0D (Song of Charm) into A.
$03/E933 8D CA 34 STA $34CA  [$7E:34CA] A:000D X:00BD Y:0000 P:envMxdizC - Store A in Battle Message Data.
$03/E936 A9 03 LDA #$03 A:000D X:00BD Y:0000 P:envMxdizC - Load 03 into A. (Charm)
$03/E938 80 07 BRA $07    [$E941] A:0003 X:00BD Y:0000 P:envMxdizC - Branch to 03E941.
------------------------------------------------------------------------------------------------------------------------------------
$03/E93A A9 0C LDA #$0C A:0030 X:0054 Y:0000 P:eNvMxdizc - Load 0C into A. (Lullaby)
$03/E93C 8D CA 34 STA $34CA  [$7E:34CA] A:000C X:0054 Y:0000 P:envMxdizc - Load A into Battle Message Data.
$03/E93F A9 29 LDA #$29 A:000C X:0054 Y:0000 P:envMxdizc - Load 29 into A (Sleep)
$03/E941 8D D2 26 STA $26D2  [$7E:26D2] A:0029 X:0054 Y:0000 P:envMxdizc - Store A in Caster's Next Action to Take.
$03/E944 20 3E CD JSR $CD3E  [$03:CD3E] A:0029 X:0054 Y:0000 P:envMxdizc - Jump to Subroutine (Magic Call)
---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E947 A9 08 LDA #$08 A:0010 X:0680 Y:001A P:envMxdizC - Load 08 (Sing) into A.
$03/E949 8D C8 34 STA $34C8  [$7E:34C8] A:0008 X:0680 Y:001A P:envMxdizC - Store A in Mini-Battle Message Data.
$03/E94C A9 10 LDA #$10 A:0008 X:0680 Y:001A P:envMxdizC - Load 10 into A.
$03/E94E 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:0680 Y:001A P:envMxdizC - Store A in 7E34C7.
$03/E951 4C B1 85 JMP $85B1  [$03:85B1] A:0010 X:0680 Y:001A P:envMxdizC - Jump to 0385B1. (May possibly tell the game to use a default targetting as labeled by command?)


Indeed, now this is a Command! Four random options, one easily located reasoning for how things work as they do, and a bonus of Status specialty. Which one can easily change and make look for anything they desire to make it play the special circumstance song. And plainly listed above are the chances for each song to change if they would like.

But that will do it for tonight, only a couple standard Commands left to go!


Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #94 on: October 07, 2013, 08:59:48 AM »
Jump is the next object of interest I don't expect to see much different from the other "apply status to self" commands, but we'll see.

Jump Routine

Code: [Select]
$03/E954 A5 CD LDA $CD    [$00:00CD] A:0003 X:000C Y:0000 P:envMxdizc - Load Character Identifier into A.
$03/E956 30 11 BMI $11    [$E969] A:0000 X:000C Y:0000 P:envMxdiZc - Branch if Minus (If it is Enemy Kain) to 03E969.
$03/E958 A5 CE LDA $CE    [$00:00CE] A:0000 X:000C Y:0000 P:envMxdiZc - Load CE into A (Must be target's ID!)
$03/E95A 30 0D BMI $0D    [$E969] A:0083 X:000C Y:0000 P:eNvMxdizc - Branch if Minus (If Jumping on Enemy, not Ally) to 03E969.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E95C A9 D3 LDA #$D3 A:0003 X:000C Y:0000 P:envMxdizc - Load D3 into A.
$03/E95E 8D C4 33 STA $33C4  [$7E:33C4] A:00D3 X:000C Y:0000 P:eNvMxdizc - Store D3 into 7E33C4.
$03/E961 A9 00 LDA #$00 A:00D3 X:000C Y:0000 P:eNvMxdizc - Load 00 into A (Nothing Happened)
$03/E963 8D CA 34 STA $34CA  [$7E:34CA] A:0000 X:000C Y:0000 P:envMxdiZc - Store A in Battle Message Data.
$03/E966 4C A6 85 JMP $85A6  [$03:85A6] A:0000 X:000C Y:0000 P:envMxdiZc - Jump to Routine (Leaves Routine from here)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E969 EE 0A 39 INC $390A  [$7E:390A] A:0083 X:000C Y:0000 P:eNvMxdizc - +1 to 7E390A
$03/E96C A2 04 00 LDX #$0004 A:0083 X:000C Y:0000 P:envMxdizc - Load 04 into X.
$03/E96F 86 D4 STX $D4    [$00:00D4] A:0083 X:0004 Y:0000 P:envMxdizc - Store X in D4.
$03/E971 A9 03 LDA #$03 A:0083 X:0004 Y:0000 P:envMxdizc - Load 03 into A.
$03/E973 20 C8 85 JSR $85C8  [$03:85C8] A:0003 X:0004 Y:0000 P:envMxdizc - Jump to Subroutine (Difficult to say)
$03/E976 A9 08 LDA #$08 A:0000 X:0003 Y:0000 P:envMxdiZc - Load 08 into A.
$03/E978 9D 06 2A STA $2A06,x[$7E:2A09] A:0008 X:0003 Y:0000 P:envMxdizc - Store A in 7EA06 +3
$03/E97B A6 A6 LDX $A6    [$00:00A6] A:0008 X:0003 Y:0000 P:envMxdizc - Load Active Character Slot into X.
$03/E97D BD 05 20 LDA $2005,x[$7E:2005] A:0008 X:0000 Y:0000 P:envMxdiZc - Load User's Status Byte 3.
$03/E980 09 02 ORA #$02 A:0000 X:0000 Y:0000 P:envMxdiZc - Add 02 to it (Jumping)
$03/E982 9D 05 20 STA $2005,x[$7E:2005] A:0002 X:0000 Y:0000 P:envMxdizc -Store A in User's Status Byte 3.
$03/E985 A5 CD LDA $CD    [$00:00CD] A:0002 X:0000 Y:0000 P:envMxdizc - Load Character Identifier into A.
$03/E987 10 04 BPL $04    [$E98D] A:0000 X:0000 Y:0000 P:envMxdiZc - Branch if Plus (Not Enemy Kain)
----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E989 A9 DE LDA #$DE A:0080 X:0280 Y:0000 P:eNvMxdizc - Load DE into A. (Command DE...? Wha?)
$03/E98B 80 02 BRA $02    [$E98F] A:00DE X:0280 Y:0000 P:eNvMxdizc - Branch to 03E98F
---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E98D A9 1E LDA #$1E A:0000 X:0000 Y:0000 P:envMxdiZc - Load 1E into A.
$03/E98F 9D 51 20 STA $2051,x[$7E:2051] A:001E X:0000 Y:0000 P:envMxdizc - Store A in User's Next Command to Take
$03/E992 A5 CD LDA $CD    [$00:00CD] A:001E X:0000 Y:0000 P:envMxdizc - Load Character Identifier into A.
$03/E994 0A ASL A A:0000 X:0000 Y:0000 P:envMxdiZc - x2 to A.
$03/E995 AA TAX A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to X.
$03/E996 BD EA 29 LDA $29EA,x[$7E:29EA] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A in 7E29EA.
$03/E999 8D 7F 35 STA $357F  [$7E:357F] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E357F.
$03/E99C A9 40 LDA #$40 A:0000 X:0000 Y:0000 P:envMxdiZc - Load 40 into A.
$03/E99E 9D EA 29 STA $29EA,x[$7E:29EA] A:0040 X:0000 Y:0000 P:envMxdizc - Store A in 7E29EA.
$03/E9A1 60 RTS A:0040 X:0000 Y:0000 P:envMxdizc - Return

Other than the strange part at the end, everything seems to be self-explanatory. Except for Enemy Kain having such a high Command that he branches to specifically. It's rather strange, considering it seems to functionally lead to the exact same place as 1E.





Next is 1E, "coming back down" basically Routine.

Jump (Actual Attack) Routine -

Code: [Select]
$03/E9A2 20 99 C4 JSR $C499  [$03:C499] A:0003 X:003C Y:0000 P:envMxdizc - Jump to Subroutine (Fight Routine)
$03/E9A5 A5 CD LDA $CD    [$00:00CD] A:0000 X:0680 Y:001A P:envMxdiZC - Load Character ID into A.
$03/E9A7 10 05 BPL $05    [$E9AE] A:0000 X:0680 Y:001A P:envMxdiZC - If Positive (Not Enemy Kain) branch to 03E9AE.
-------------------------------------------------------------------------------------------------------------------------------
$03/E9A9 29 7F AND #$7F A:0080 X:0680 Y:001A P:eNvMxdizC - Clear A.
$03/E9AB 18 CLC A:0000 X:0680 Y:001A P:envMxdiZC - Clear Carry Flag.
$03/E9AC 69 05 ADC #$05 A:0000 X:0680 Y:001A P:envMxdiZc - Add 05 into A.
------------------------------------------------------------------------------------------------------------------------------------
$03/E9AE 20 89 84 JSR $8489  [$03:8489] A:0000 X:0680 Y:001A P:envMxdiZC - Jump to Subroutine (Preparation?)
$03/E9B1 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0000 Y:001A P:envMxdiZc - Load Appropriate Slot.
$03/E9B3 BD 05 20 LDA $2005,x[$7E:2005] A:0000 X:0000 Y:001A P:envMxdiZc - Load User's Status Byte 3.
$03/E9B6 29 FD AND #$FD A:0002 X:0000 Y:001A P:envMxdizc - Add -2 to it (Get rid of Jump)
$03/E9B8 9D 05 20 STA $2005,x[$7E:2005] A:0000 X:0000 Y:001A P:envMxdiZc - Store A User's Status Byte 3.
$03/E9BB A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:001A P:envMxdiZc - Load Character ID.
$03/E9BD 0A ASL A A:0000 X:0000 Y:001A P:envMxdiZc - x2 to A.
$03/E9BE AA TAX A:0000 X:0000 Y:001A P:envMxdiZc - Transfer A to X.
$03/E9BF AD 7F 35 LDA $357F  [$7E:357F] A:0000 X:0000 Y:001A P:envMxdiZc - Load 7E357F into A.
$03/E9C2 9D EA 29 STA $29EA,x[$7E:29EA] A:0000 X:0000 Y:001A P:envMxdiZc - Store A in 7E29EA.
$03/E9C5 A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:001A P:envMxdiZc - Load Character ID into A.
$03/E9C7 10 14 BPL $14    [$E9DD] A:0000 X:0000 Y:001A P:envMxdiZc - If it is Positive (Not Enemy Kain?), branch to 03E9DD.
--------------------------------------------------------------------------------------------------------------------------------------------------
$03/E9C9 A9 DE LDA #$DE A:0080 X:0000 Y:001A P:eNvMxdizC - Load DE into A.
$03/E9CB 8D C2 33 STA $33C2  [$7E:33C2] A:00DE X:0000 Y:001A P:eNvMxdizC - Store A in 7E33C2.
$03/E9CE A9 F8 LDA #$F8 A:00DE X:0000 Y:001A P:eNvMxdizC - Load F8 into A.
$03/E9D0 8D C3 33 STA $33C3  [$7E:33C3] A:00F8 X:0000 Y:001A P:eNvMxdizC - Store A in 7E33C3.
$03/E9D3 A9 04 LDA #$04 A:00F8 X:0000 Y:001A P:eNvMxdizC - Load 04 into A.
$03/E9D5 8D C4 33 STA $33C4  [$7E:33C4] A:0004 X:0000 Y:001A P:envMxdizC - Store A in 7E33C4.
$03/E9D8 A9 FF LDA #$FF A:0004 X:0000 Y:001A P:envMxdizC - Load FF into A.
$03/E9DA 8D C5 33 STA $33C5  [$7E:33C5] A:00FF X:0000 Y:001A P:eNvMxdizC - Store A in 7E33C5.
-----------------------------------------------------------------------------------------------------------------------------------------------------
$03/E9DD 60 RTS A:0000 X:0000 Y:001A P:envMxdiZc - Return

Quite a few "Enemy Kain Only" branches to be found within the routine, likely targeting and special circumstance. Still not sure why it doesn't use 1E like the normal Jump does or what is even different about DE.


It seems like the only purpose of the branches for Enemy Kain are to allow the Jump attack to actually go through, which is a strange thing to limit in the first place. Why shouldn't Kain be allowed to target Allies? It would free up a bit of space in the routine as well for anything a hacker would like to add.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #95 on: October 07, 2013, 10:49:15 AM »
Parry Routine - A very simple matter. It can be guessed what it does...

Code: [Select]
$03/E9DE A6 A6 LDX $A6    [$00:00A6] A:0003 X:0036 Y:0000 P:envMxdizc - Load User's Character Slot.
$03/E9E0 BD 05 20 LDA $2005,x[$7E:2085] A:0003 X:0080 Y:0000 P:envMxdizc - Load Character's Status Byte 3.
$03/E9E3 09 10 ORA #$10 A:0000 X:0080 Y:0000 P:envMxdiZc - Add Defend.
$03/E9E5 9D 05 20 STA $2005,x[$7E:2085] A:0010 X:0080 Y:0000 P:envMxdizc - Store A in Character's STatus Byte 3.
$03/E9E8 60 RTS A:0010 X:0080 Y:0000 P:envMxdizc - Return.

Now, let's revisit one of the first commands I looked at and see if I can completely decipher it now...

Dark Wave Routine -
Code: [Select]
$03/E9E9 A5 CD LDA $CD    [$00:00CD] A:0003 X:000A Y:0000 P:envMxdizc - Load User's ID.
$03/E9EB 30 26 BMI $26    [$EA13] A:0000 X:000A Y:0000 P:envMxdiZc - Is it Minus? (Enemy Cecil) If so, branch to 03EA13.
$03/E9ED C2 20 REP #$20 A:0000 X:000A Y:0000 P:envMxdiZc - Reset Processor Status
$03/E9EF A6 A6 LDX $A6    [$00:00A6] A:0000 X:000A Y:0000 P:envmxdiZc - Load User's Slot.
$03/E9F1 BD 09 20 LDA $2009,x[$7E:2009] A:0000 X:0000 Y:0000 P:envmxdiZc - Load User's Max HP.
$03/E9F4 20 85 84 JSR $8485  [$03:8485] A:00C8 X:0000 Y:0000 P:envmxdizc - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
$03/8485 4A LSR A A:00C8 X:0000 Y:0000 P:envmxdizc - /2 A.
$03/8486 4A LSR A A:0064 X:0000 Y:0000 P:envmxdizc - /2 A.
$03/8487 4A LSR A A:0032 X:0000 Y:0000 P:envmxdizc - /2 A.
$03/8488 60 RTS A:0019 X:0000 Y:0000 P:envmxdizc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/E9F7 85 A9 STA $A9    [$00:00A9] A:0019 X:0000 Y:0000 P:envmxdizc - Store A in A9. (Amount of HP to subtract)
$03/E9F9 38 SEC A:0019 X:0000 Y:0000 P:envmxdizc - Set Carry Flag.
$03/E9FA BD 07 20 LDA $2007,x[$7E:2007] A:0019 X:0000 Y:0000 P:envmxdizC - Load User's Current HP.
$03/E9FD E5 A9 SBC $A9    [$00:00A9] A:002C X:0000 Y:0000 P:envmxdizC - Reduce A by the value in A9 (1/8th of Max HP)
$03/E9FF 9D 07 20 STA $2007,x[$7E:2007] A:0013 X:0000 Y:0000 P:envmxdizC - Store A in User's Current HP.
$03/EA02 B0 0C BCS $0C    [$EA10] A:0013 X:0000 Y:0000 P:envmxdizC - If greater than 00 branch to 03EA10.
---------------------------------------------------------------------------------------------------------------------------------------
$03/EA04 A9 00 00 LDA #$0000 A:FFFA X:0000 Y:0000 P:eNvmxdizc - Load 0000 into A.
$03/EA07 9D 07 20 STA $2007,x[$7E:2007] A:0000 X:0000 Y:0000 P:envmxdiZc - Store A in User's Current HP.
$03/EA0A A9 80 00 LDA #$0080 A:0000 X:0000 Y:0000 P:envmxdiZc - Load 0080 into A. (Death)
$03/EA0D 9D 03 20 STA $2003,x[$7E:2003] A:0080 X:0000 Y:0000 P:envmxdizc - Store A in 7E2003.
------------------------------------------------------------------------------------------------------------------------------------------
$03/EA10 7B TDC A:0013 X:0000 Y:0000 P:envmxdizC - Transfer Direct Page
$03/EA11 E2 20 SEP #$20 A:0000 X:0000 Y:0000 P:envmxdiZC - Set Processor Status.
$03/EA13 A9 01 LDA #$01 A:0000 X:0000 Y:0000 P:envMxdiZC - Load 01 into A.
$03/EA15 85 C1 STA $C1    [$00:00C1] A:0001 X:0000 Y:0000 P:envMxdizC - Store A in C1 (Used in the Kick Routine)
$03/EA17 4C B9 E6 JMP $E6B9  [$03:E6B9] A:0001 X:0000 Y:0000 P:envMxdizC - Jump to Routine (Most of Kick Routine)

Well that was quite a bit simpler this time around, everything was easily deciphered.

First, I've decided to make Dark Wave's death penalty more substantial...


$03/EA04   A9 00 00   LDA #$0000   A:FFF8   X:0000   Y:0000   P:eNvmxdizc - Load 0000 into A.
$03/EA07   9D 07 20   STA $2007,x[$7E:2007]   A:0000   X:0000   Y:0000   P:envmxdiZc - Store A in User's HP.
$03/EA0A   A9 80 00   LDA #$0080   A:0000   X:0000   Y:0000   P:envmxdiZc - Load 0080 into A.
$03/EA0D   9D 40 20   STA $2040,x[$7E:2040]   A:0080   X:0000   Y:0000   P:envmxdizc - Store A in User's Creature Type (Undead)


I'm going to go out on a limb and say this is what it May have originally been, or at least planned. Because setting the HP to 0 automatically will kill the user regardless, making the Death Application superfluous. This will prevent the player from being able to revive Cecil if he killed himself with Dark Wave, as it applied the Undead-type to him.

Furthermore the jump to Kick is basically reading the entirely of the Kick Routine, meaning that you could Easily set it to the Fight Routine and have Dark Wave hit only a single target, now unfortunately, it would then only act like a normal attack without modifying the Fight Routine or Dark Wave Routine itself to compensate the new addition to it.

For instance, say you want to make Dark Wave more like Darkness in FFIV:DS, an attack that hits one enemy for Double Damage, but takes HP.

You would change...

$03/EA10   7B    TDC   A:0013   X:0000   Y:0000   P:envmxdizC - Transfer Direct Page
$03/EA11   E2 20   SEP #$20   A:0000   X:0000   Y:0000   P:envmxdiZC - Set Processor Status.
$03/EA13   A9 01   LDA #$01   A:0000   X:0000   Y:0000   P:envMxdiZC - Load 01 into A.
$03/EA15   85 C1   STA $C1    [$00:00C1]   A:0001   X:0000   Y:0000   P:envMxdizC - Store A in C1 (Used in the Kick Routine)
$03/EA17   4C B9 E6   JMP $E6B9  [$03:E6B9]   A:0001   X:0000   Y:0000   P:envMxdizC - Jump to Routine (Most of Kick Routine)

To this...

$03/EA10   E2 20   SEP #$20   A:0039   X:0000   Y:0000   P:envmxdizC - Set Processor Status (in order to have it read only one byte rather than two)
$03/EA12   A9 04   LDA #$04   A:0039   X:0000   Y:0000   P:envMxdizC - Load 04 into A. (x2 Power)
$03/EA14   8D FE 38   STA $38FE  [$7E:38FE]   A:0004   X:0000   Y:0000   P:envMxdizC - Store A in Damage Altering Field.
$03/EA17   4C 99 C4   JMP $C499  [$03:C499]   A:0004   X:0000   Y:0000   P:envMxdizC - Jump to Fight Routine.

As long as the enemy itself has no weakness or resistance to the Elemental or Creature Type Attack, then Dark Wave will carry through as a normal attack at x2 Damage. Otherwise those variables will nullify it and replace it with an ordinary one.

Or if you want to make Dark Wave cast a Spell at 1/8th of your HP you would instead...

$03/EA10   E2 20   SEP #$20   A:0039   X:0000   Y:0000   P:envmxdizC - Set Processor Status (in order to have it read only one byte rather than two)
$03/EA12   A9 A2   LDA #$A2   A:0039   X:0000   Y:0000   P:envMxdizC - Load A2 into A. (Emission)
$03/EA14   8D D2 26   STA $26D2  [$7E:26D2]   A:00A2   X:0000   Y:0000   P:envMxdizC - Store A in Next Action to take.
$03/EA17   4C 3E CD   JMP $CD3E  [$03:CD3E]   A:00A2   X:0000   Y:0000   P:envMxdizC - Jump to Spell Routine.

But it is not that simple. The Magic Call seems to put the Caster stats above all else and will put that in initial stats at the end of the routine, meaning that if you want Dark Wave to cast a spell that hurts Cecil 1/8 HP you would also bear this in mind and change an earlier part of the routine...

Change this...

$03/E9FA   BD 07 20   LDA $2007,x[$7E:2007]   A:0019   X:0000   Y:0000   P:envmxdizC - Load User's Current HP.
$03/E9FD   E5 A9   SBC $A9    [$00:00A9]   A:002C   X:0000   Y:0000   P:envmxdizC - Reduce A by the value in A9 (1/8th of Max HP)
$03/E9FF   9D 07 20   STA $2007,x[$7E:2007]   A:0013   X:0000   Y:0000   P:envmxdizC - Store A in User's Current HP.
$03/EA02   B0 0C   BCS $0C    [$EA10]   A:0013   X:0000   Y:0000   P:envmxdizC - If greater than 00 branch to 03EA10.
---------------------------------------------------------------------------------------------------------------------------------------
$03/EA04   A9 00 00   LDA #$0000   A:FFFA   X:0000   Y:0000   P:eNvmxdizc - Load 0000 into A.
$03/EA07   9D 07 20   STA $2007,x[$7E:2007]   A:0000   X:0000   Y:0000   P:envmxdiZc - Store A in User's Current HP.
$03/EA0A   A9 80 00   LDA #$0080   A:0000   X:0000   Y:0000   P:envmxdiZc - Load 0080 into A. (Death)
$03/EA0D   9D 03 20   STA $2003,x[$7E:2003]   A:0080   X:0000   Y:0000   P:envmxdizc - Store A in 7E2003.

To this...

$03/E9FA   BD 87 26   LDA $2687,x[$7E:2687]   A:0019   X:0000   Y:0000   P:envmxdizC - Load Caster's Current HP.
$03/E9FD   E5 A9   SBC $A9    [$00:00A9]   A:0079   X:0000   Y:0000   P:envmxdizC - Subtract it by the value in A9.
$03/E9FF   8D 87 26   STA $2687,[$7E:2687]   A:0060   X:0000   Y:0000   P:envmxdizC - Store A in Caster's Current HP.
$03/EA02   B0 0C   BCS $0C    [$EA10]   A:0060   X:0000   Y:0000   P:envmxdizC - If more than 00 branch to 03EA02.
----------------------------------------------------------------------------------------------------------------------
$03/EA04   A9 00 00   LDA #$0000   A:FFFA   X:0000   Y:0000   P:eNvmxdizc - Load 0000 into A. - Load 0000 into A.
$03/EA07   8D 87 26   STA $2687, [$7E:2687]   A:0000   X:0000   Y:0000   P:envmxdiZc - Store A in User's Current HP. - Store A in Caster
$03/EA0A   A9 80 00   LDA #$0080   A:0000   X:0000   Y:0000   P:envmxdiZc - Load 0080 into A. (Death)
$03/EA0D   8D 03 20   STA $2003, [$7E:2003]   A:0080   X:0000   Y:0000   P:envmxdizc - Store A in 7E2003.

And there you have it. Two different ways to modify Dark Wave, one is to simulate Darkness from FFIV:DS and the other is to allow it to cast a spell, if one actually wanted to use something more complex than Kick's routine or normal attack modification.


Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #96 on: October 07, 2013, 12:45:06 PM »
Next up is a personal favorite of mine, and a very important command for documenting purposes, and that is Recall. It is the only command aside from Twin which uses MP to cast its magics and fails if the MP is not enough.

Recall Routine -

Code: [Select]
$03/EA1A 7B TDC A:0003 X:000E Y:0000 P:envMxdizc - Transfer Direct Page.
$03/EA1B AA TAX A:0000 X:000E Y:0000 P:envMxdiZc - Transfer A to X.
$03/EA1C A9 A0 LDA #$A0 A:0000 X:0000 Y:0000 P:envMxdiZc - Load A0 into A.
$03/EA1E 20 79 83 JSR $8379  [$03:8379] A:00A0 X:0000 Y:0000 P:eNvMxdizc - Jump to Subroutine (Generate Random Number Likely 00-A0)
$03/EA21 C9 08 CMP #$08 A:0087 X:0000 Y:0000 P:eNvMxdizc - Is it 08
$03/EA23 B0 04 BCS $04    [$EA29] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 08 branch to 03EA29.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA25 A9 2A LDA #$2A A:0000 X:0000 Y:0000 P:eNvMxdizc - Load 2A (Stone) into A.
$03/EA27 80 40 BRA $40    [$EA69] A:002A X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA29 C9 10 CMP #$10 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 10?
$03/EA2B B0 04 BCS $04    [$EA31] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 10 branch to 03EA31.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA2D A9 26 LDA #$26 A:000D X:0000 Y:0000 P:eNvMxdizc - Load 26 (Virus) into A.
$03/EA2F 80 38 BRA $38    [$EA69] A:0026 X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA31 C9 18 CMP #$18 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 18?
$03/EA33 B0 04 BCS $04    [$EA39] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 18 branch to 03EA39.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA35 A9 27 LDA #$27 A:0016 X:0000 Y:0000 P:eNvMxdizc - Load 27 (Weak) into A.
$03/EA37 80 30 BRA $30    [$EA69] A:0027 X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA39 C9 20 CMP #$20 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 20?
$03/EA3B B0 04 BCS $04    [$EA41] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 20 branch to 03EA41.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA3D A9 2B LDA #$2B A:001F X:0000 Y:0000 P:eNvMxdizc - Load 2B (Fatal) into A.
$03/EA3F 80 28 BRA $28    [$EA69] A:002B X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA41 C9 38 CMP #$38 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 38?
$03/EA43 B0 04 BCS $04    [$EA49] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 38 branch to 03EA49.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA45 A9 1D LDA #$1D A:0025 X:0000 Y:0000 P:eNvMxdizc - Load 1D (Fire 1) into A.
$03/EA47 80 20 BRA $20    [$EA69] A:001D X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA49 C9 50 CMP #$50 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 50?
$03/EA4B B0 04 BCS $04    [$EA51] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 50 branch to 03EA51.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA4D A9 20 LDA #$20 A:0045 X:0000 Y:0000 P:eNvMxdizc - Load 20 (Ice 1) into A.
$03/EA4F 80 18 BRA $18    [$EA69] A:0020 X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA51 C9 68 CMP #$68 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 68?
$03/EA53 B0 04 BCS $04    [$EA59] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 68 branch to 03EA59.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA55 A9 23 LDA #$23 A:0067 X:0000 Y:0000 P:eNvMxdizc - Load 23 (Lit 1) into A.
$03/EA57 80 10 BRA $10    [$EA69] A:0023 X:0000 Y:0000 P:envMxdizc - Branch to 03EA69
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA59 C9 80 CMP #$80 A:0087 X:0000 Y:0000 P:envMxdizC - Is it 80?
$03/EA5B B0 04 BCS $04    [$EA61] A:0087 X:0000 Y:0000 P:envMxdizC - If it is more than 80 branch to 03EA61
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA5D A9 19 LDA #$19 A:006E X:0000 Y:0000 P:eNvMxdizc - Load 19 into A. (Toad)
$03/EA5F 80 08 BRA $08    [$EA69] A:0019 X:0000 Y:0000 P:envMxdizc - Branch to 03EA69.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA61 A9 09 LDA #$09 A:0087 X:0000 Y:0000 P:envMxdizC - Load 09 into A. (Failed)
$03/EA63 8D CA 34 STA $34CA  [$7E:34CA] A:0009 X:0000 Y:0000 P:envMxdizC - Store A in Battle Message Data.
$03/EA66 4C B1 85 JMP $85B1  [$03:85B1] A:0009 X:0000 Y:0000 P:envMxdizC - Jump to Routine (Leads out of Subroutine)
------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA69 48 PHA A:0019 X:0000 Y:0000 P:envMxdizc - Push A into Stack.
$03/EA6A AA TAX A:0019 X:0000 Y:0000 P:envMxdizc - Transfer A to X.
$03/EA6B 86 E5 STX $E5    [$00:00E5] A:0019 X:0019 Y:0000 P:envMxdizc - Store X in E5.
$03/EA6D A2 A0 97 LDX #$97A0 A:0019 X:0019 Y:0000 P:envMxdizc - Load 97A0 into X.
$03/EA70 86 80 STX $80    [$00:0080] A:0019 X:97A0 Y:0000 P:eNvMxdizc - Store X in 80.
$03/EA72 A9 0F LDA #$0F A:0019 X:97A0 Y:0000 P:eNvMxdizc - Load 0F into A.
$03/EA74 85 82 STA $82    [$00:0082] A:000F X:97A0 Y:0000 P:envMxdizc - Store A in 82.
$03/EA76 A9 06 LDA #$06 A:000F X:97A0 Y:0000 P:envMxdizc - Load 06 into A.
$03/EA78 20 5E 84 JSR $845E  [$03:845E] A:0006 X:97A0 Y:0000 P:envMxdizc - Jump to Subroutine (??)
$03/EA7B AD A0 28 LDA $28A0  [$7E:28A0] A:0007 X:0006 Y:009C P:envMxdiZC - Load the value in 28A0 into A. (?Spell Multiplier?)
$03/EA7E 29 7F AND #$7F A:0004 X:0006 Y:009C P:envMxdizC - Get rid of negative bits.
$03/EA80 85 DF STA $DF    [$00:00DF] A:0004 X:0006 Y:009C P:envMxdizC - Store A in DF. (Spell Multiplier Stored)
$03/EA82 A9 03 LDA #$03 A:0004 X:0006 Y:009C P:envMxdizC  - Load 03 into A.
$03/EA84 85 E1 STA $E1    [$00:00E1] A:0003 X:0006 Y:009C P:envMxdizC - Store A in E1.
$03/EA86 20 E0 83 JSR $83E0  [$03:83E0] A:0003 X:0006 Y:009C P:envMxdizC - Jump to Subroutine (HP Dealings?)
$03/EA89 A6 E3 LDX $E3    [$00:00E3] A:0000 X:0000 Y:009C P:envMxdiZc - Load X from E3.
$03/EA8B 7B TDC A:0000 X:000C Y:009C P:envMxdizc - Transfer Direct Page.
$03/EA8C A8 TAY A:0000 X:000C Y:009C P:envMxdiZc - Transfer A to Y.
--------------------------------------------------------(Looping Point)--------------------------------------------------------------------
$03/EA8D BF 90 A5 0F LDA $0FA590,x[$0F:A59C] A:0000 X:000C Y:0000 P:envMxdiZc - Load A from 0FA590(+X)
$03/EA91 99 A2 28 STA $28A2,y[$7E:28A2] A:0008 X:000C Y:0000 P:envMxdizc - Store A in 7E28A2.
$03/EA94 C8 INY A:0008 X:000C Y:0000 P:envMxdizc +1 to Y.
$03/EA95 E8 INX A:0008 X:000C Y:0001 P:envMxdizc +1 to X.
$03/EA96 C0 03 00 CPY #$0003 A:0008 X:000D Y:0001 P:envMxdizc - Is Y 3?
$03/EA99 D0 F2 BNE $F2    [$EA8D] A:0008 X:000D Y:0001 P:eNvMxdizc - If not, branch back to 03EA8D
-------------------------------------------------------------------------------------------------------------------------------------------------
$03/EA9B AD 8B 26 LDA $268B  [$7E:268B] A:0000 X:000F Y:0003 P:envMxdiZC - Load Caster's MP Byte 1.
$03/EA9E 85 A9 STA $A9    [$00:00A9] A:00E7 X:000F Y:0003 P:eNvMxdizC - Store A in A9.
$03/EAA0 AD 8C 26 LDA $268C  [$7E:268C] A:00E7 X:000F Y:0003 P:eNvMxdizC - Load Caster's MP Byte 2.
$03/EAA3 F0 04 BEQ $04    [$EAA9] A:0003 X:000F Y:0003 P:envMxdizC - Branch if not 00 to 03EAA9.
-------------------------------------------------------------------------------------------------------------------------------------------------
$03/EAA5 A9 FF LDA #$FF A:0003 X:000F Y:0003 P:envMxdizC - Load FF into A. (Assumes you have enough MP to cast spell)
$03/EAA7 85 A9 STA $A9    [$00:00A9] A:00FF X:000F Y:0003 P:eNvMxdizC - Store A in A9.
-----------------------------------------------------------------------------------------------------------------------------------------------
$03/EAA9 AD A1 28 LDA $28A1  [$7E:28A1] A:00FF X:000F Y:0003 P:eNvMxdizC - Load A from Spell's MP Cost.
$03/EAAC 29 7F AND #$7F A:0007 X:000F Y:0003 P:envMxdizC - Get rid of negative bits.
$03/EAAE C5 A9 CMP $A9    [$00:00A9] A:0007 X:000F Y:0003 P:envMxdizC - Is it the same as what is in A9?
$03/EAB0 F0 06 BEQ $06    [$EAB8] A:0007 X:000F Y:0003 P:envMxdizc - Branch if Equal to 03EAB8.
$03/EAB2 90 04 BCC $04    [$EAB8] A:0007 X:000F Y:0003 P:envMxdizc - Branch  if More to 03EAB8.
-------------------------------------------------------------------------------------------------------------------------------------------------
$03/EAB4 68 PLA A:0005 X:0009 Y:0003 P:envMxdizC - Pull A.
$03/EAB5 4C C2 EA JMP $EAC2  [$03:EAC2] A:0020 X:0009 Y:0003 P:envMxdizC - Jump to Routine (Return)
-------------------------------------------------------------------------------------------------------------------------------------------------
$03/EAB8 68 PLA A:0007 X:000F Y:0003 P:envMxdizc - Pull A from Stack (retrieving the spell to be cast)
$03/EAB9 8D D2 26 STA $26D2  [$7E:26D2] A:0019 X:000F Y:0003 P:envMxdizc - Store A in Caster's Action to be Taken.
$03/EABC EE 5D 35 INC $355D  [$7E:355D] A:0019 X:000F Y:0003 P:envMxdizc - +1 to 7E355D.
$03/EABF 20 46 CC JSR $CC46  [$03:CC46] A:0019 X:000F Y:0003 P:envMxdizc - Jump to Subroutine (Magic Call - Full)
$03/EAC2 60 RTS A:00E0 X:0680 Y:001A P:eNvMxdizC - Return

Well that was as expected. Except I expected MP to be in here, but I think I see what's going on... what is unique about Recall that is not in the other Commands is that it starts At The Start of the Magic Call routine. Unlike Pray and Gird, MP Cost is likely a part of the near-beginning of the Magic Call Routine.

And... that's not the reason why. The real reason it takes MP into account is because 7E355D.

$03/CE38   AD D2 26   LDA $26D2  [$7E:26D2]   A:0020   X:0005   Y:0000   P:eNvMxdizc - Load Caster's Action Taken.
$03/CE3B   F0 3E   BEQ $3E    [$CE7B]   A:00CE   X:0005   Y:0000   P:eNvMxdizc - if 00 branch to 03CE7B.
$03/CE3D   AD 5D 35   LDA $355D  [$7E:355D]   A:00CE   X:0005   Y:0000   P:eNvMxdizc - Load 7E355D into A.
$03/CE40   F0 39   BEQ $39    [$CE7B]   A:0000   X:0005   Y:0000   P:envMxdiZc - If equal branch to 03CE7B.
--------------------------------------------------------------------------------------------------------------------------------------
$03/CE42   A5 CD   LDA $CD    [$00:00CD]   A:0002   X:0001   Y:0000   P:envMxdizc - Load User's ID.
$03/CE44   30 35   BMI $35    [$CE7B]   A:0001   X:0001   Y:0000   P:envMxdizc - Branch if a Monster is using it to 03CE7B.
$03/CE46   AD 8B 38   LDA $388B  [$7E:388B]   A:0001   X:0001   Y:0000   P:envMxdizc - Load 7E388B into A.
$03/CE49   D0 30   BNE $30    [$CE7B]   A:0000   X:0001   Y:0000   P:envMxdiZc - If not 00 branch to 03CE7B.
.....
$03/CE73   8D 8B 26   STA $268B  [$7E:268B]   A:00CE   X:0003   Y:0000   P:eNvMxdizC - Store A (reduced MP) in Caster's MP Byte 1.
-----------------------------------------------------------------------------------------------------------------------------------------


So to have Recall not take any MP it is as simple as changing this...


$03/EABC   EE 5D 35   INC $355D  [$7E:355D]   A:0019   X:000F   Y:0003   P:envMxdizc - +1 to 7E355D.

To this...

$03/EABC   9C 5D 35   STZ $355D  [$7E:355D]   A:0020   X:0009   Y:0003   P:envMxdizc - Store Zero in 7E355D.



Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #97 on: October 07, 2013, 04:01:05 PM »
We are at the home stretch now! All that remains are Boast/Bluff, Cry, and Item and that will be it for conventional commands.

Boast Routine -

Code: [Select]
$03/EAC3 A9 11 LDA #$11 A:0003 X:0022 Y:0000 P:envMxdizc - Load 11 (Boast) into A.
$03/EAC5 8D C8 34 STA $34C8  [$7E:34C8] A:0011 X:0022 Y:0000 P:envMxdizc - Store A in Mini-Battle Message Data.
$03/EAC8 A9 10 LDA #$10 A:0011 X:0022 Y:0000 P:envMxdizc - Type of Message.
$03/EACA 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:0022 Y:0000 P:envMxdizc - Store A in Message Type.
$03/EACD A6 A6 LDX $A6    [$00:00A6] A:0010 X:0022 Y:0000 P:envMxdizc - Load Slot of User.
$03/EACF 18 CLC A:0010 X:0000 Y:0000 P:envMxdiZc - Clear Carry Flag.
$03/EAD0 BD 17 20 LDA $2017,x[$7E:2017] A:0010 X:0000 Y:0000 P:envMxdiZc - Load User's Wisdom.
$03/EAD3 69 10 ADC #$10 A:0012 X:0000 Y:0000 P:envMxdizc - Add 10 to it.
$03/EAD5 C9 63 CMP #$63 A:0022 X:0000 Y:0000 P:envMxdizc - Is it 63? (99)
$03/EAD7 90 02 BCC $02    [$EADB] A:0022 X:0000 Y:0000 P:eNvMxdizc - If it is less than 63 branch to 03EADB.
---------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EAD9 A9 63 LDA #$63 A:0073 X:0000 Y:0000 P:envMxdizC - Load 63 into A.
----------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EADB 9D 17 20 STA $2017,x[$7E:2017] A:0022 X:0000 Y:0000 P:eNvMxdizc - Store A in User's Wisdom
$03/EADE A9 12 LDA #$12 A:0022 X:0000 Y:0000 P:eNvMxdizc - Load 12 into A (D)
$03/EAE0 8D CA 34 STA $34CA  [$7E:34CA] A:0012 X:0000 Y:0000 P:envMxdizc - Store A in Battle Message Data.
$03/EAE3 4C A6 85 JMP $85A6  [$03:85A6] A:0012 X:0000 Y:0000 P:envMxdizc - Jump to Routine (Leaves Routine from here)

That was simple. I've written instructions on how to have the routine read and increase any stat the player may please, but it should be very obvious by just looking at the commented data above.

Next up is Cry, that I've already discussed at some length elsewhere. I don't expect to find much here.

Code: [Select]
$03/EAE6 A9 12 LDA #$12 A:0003 X:0024 Y:0000 P:envMxdizc - Load 12 (Cry) into A.
$03/EAE8 8D C8 34 STA $34C8  [$7E:34C8] A:0012 X:0024 Y:0000 P:envMxdizc - Store A in Mini-Message Data
$03/EAEB A9 10 LDA #$10 A:0012 X:0024 Y:0000 P:envMxdizc - Load Type of Message into A.
$03/EAED 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:0024 Y:0000 P:envMxdizc - Store it in Message Type.
$03/EAF0 A6 A6 LDX $A6    [$00:00A6] A:0010 X:0024 Y:0000 P:envMxdizc - Load User's Slot.
$03/EAF2 BD 2F 20 LDA $202F,x[$7E:202F] A:0010 X:0000 Y:0000 P:envMxdiZc - Load User's ?Steal Prevention?
$03/EAF5 4A LSR A A:000A X:0000 Y:0000 P:envMxdizc - /2.
$03/EAF6 85 A9 STA $A9    [$00:00A9] A:0005 X:0000 Y:0000 P:envMxdizc Store it in A9.
$03/EAF8 A2 05 00 LDX #$0005 A:0005 X:0000 Y:0000 P:envMxdizc - Load 0005 into X. (Gets to Monster Slots)
$03/EAFB 86 AB STX $AB    [$00:00AB] A:0005 X:0005 Y:0000 P:envMxdizc - Store X in AB.
-------------------------------------------------------------------------(Looping Point)--------------------------------------------------------------------------------------
$03/EAFD A6 AB LDX $AB    [$00:00AB] A:0005 X:0005 Y:0000 P:envMxdizc - Load X from AB.
$03/EAFF BD 40 35 LDA $3540,x[$7E:3545] A:0005 X:0005 Y:0000 P:envMxdizc - Load A from 7E3545 (Slots of Monsters)
$03/EB02 D0 15 BNE $15    [$EB19] A:0000 X:0005 Y:0000 P:envMxdiZc - If not 00 branch to 03EB19.
$03/EB04 8A TXA A:0000 X:0005 Y:0000 P:envMxdiZc - Transfer X to A.
$03/EB05 20 89 84 JSR $8489  [$03:8489] A:0005 X:0005 Y:0000 P:envMxdizc - Jump to Subroutine (Preparation?)
$03/EB08 A6 A6 LDX $A6    [$00:00A6] A:0000 X:05A0 Y:0000 P:envMxdizc - Load Slot from A6.
$03/EB0A 38 SEC A:0000 X:0280 Y:0000 P:envMxdizc - Set Carry Flag.
$03/EB0B BD 2F 20 LDA $202F,x[$7E:22AF] A:0000 X:0280 Y:0000 P:envMxdizC - Load Monster's Steal Prevention.
$03/EB0E E5 A9 SBC $A9    [$00:00A9] A:006E X:0280 Y:0000 P:envMxdizC - The value from what is in A9 (which will always be 05, because it does not change throughout the game as far as I'm aware)
$03/EB10 F0 02 BEQ $02    [$EB14] A:0069 X:0280 Y:0000 P:envMxdizC - If 00 branch to 03EB14.
$03/EB12 B0 02 BCS $02    [$EB16] A:0069 X:0280 Y:0000 P:envMxdizC - If above 00 branch to 03EB16.
-------------------------------------------------------------------------------------------------------------------------------------------
$03/EB14 A9 01 LDA #$01 A:00FC X:0280 Y:0000 P:eNvMxdizc - Load 01 into A.
-------------------------------------------------------------------------------------------------------------------------------------------
$03/EB16 9D 2F 20 STA $202F,x[$7E:22AF] A:0069 X:0280 Y:0000 P:envMxdizC - Store A in Monster's Steal Prevention.
$03/EB19 E6 AB INC $AB    [$00:00AB] A:0069 X:0280 Y:0000 P:envMxdizC - +1 to AB
$03/EB1B A5 AB LDA $AB    [$00:00AB] A:0069 X:0280 Y:0000 P:envMxdizC - Load AB into A.
$03/EB1D C9 0D CMP #$0D A:0006 X:0280 Y:0000 P:envMxdizC - Is it Equal to the value in 0D?
$03/EB1F D0 DC BNE $DC    [$EAFD] A:0006 X:0280 Y:0000 P:eNvMxdizc - If not branch back to 03EAFD. (It does this for each monster slot)
--------------------------------------------------------------------------------------------------------------------------------------------
$03/EB21 A9 13 LDA #$13 A:000D X:000C Y:0000 P:envMxdiZC - Load 13 into A. (D)
$03/EB23 8D CA 34 STA $34CA  [$7E:34CA] A:0013 X:000C Y:0000 P:envMxdizC - Store A in Battle Message Data.
$03/EB26 4C A6 85 JMP $85A6  [$03:85A6] A:0013 X:000C Y:0000 P:envMxdizC - Jump to Routine (Leaves Routine from here)

Oh? So it seems as if it was not supposed to be a static value, but by the way the game works "Steal Prevention" never goes up for Porom and is always at a static 0A /2 = 5. Because it reads Monster Slots rather than any real kind of targeting, changing targeting could be difficult.

There is a part of code that Phoenix could never decipher which he just labelled "Item/Dart Check?" That I cannot figure how to access. I could not get it to activate with either Dart or Item checks, using any kind of item I couldn't get it to activate, hmm...

Last in conventional commands is Items then...

Item Routine -

Code: [Select]
$03/EB9D AD 83 26 LDA $2683  [$7E:2683] A:0003 X:0002 Y:0000 P:envMxdizc - Load Caster's Status Byte 1.
$03/EBA0 29 C0 AND #$C0 A:0000 X:0002 Y:0000 P:envMxdiZc - Are they Petrified or Dead?
$03/EBA2 D0 68 BNE $68    [$EC0C] A:0000 X:0002 Y:0000 P:envMxdiZc - If so, branch to 03EC0C.
$03/EBA4 AD 84 26 LDA $2684  [$7E:2684] A:0000 X:0002 Y:0000 P:envMxdiZc - Load Caster's Status Byte 2.
$03/EBA7 29 3C AND #$3C A:0000 X:0002 Y:0000 P:envMxdiZc - Are they Charmed, Paralyzed, Sleep, or Berserk?
$03/EBA9 D0 61 BNE $61    [$EC0C] A:0000 X:0002 Y:0000 P:envMxdiZc - If so branch to 03EC0C.
$03/EBAB AD 85 26 LDA $2685  [$7E:2685] A:0000 X:0002 Y:0000 P:envMxdiZc - Load Caster's Status Byte 3.
$03/EBAE 29 C6 AND #$C6 A:0000 X:0002 Y:0000 P:envMxdiZc - Are they Magnetized, Stopped, Jumping or Twin Casting?
$03/EBB0 D0 5A BNE $5A    [$EC0C] A:0000 X:0002 Y:0000 P:envMxdiZc - If so branch to 03EC0C.
$03/EBB2 AD D2 26 LDA $26D2  [$7E:26D2] A:0000 X:0002 Y:0000 P:envMxdiZc - Load Caster's Next Action to Take.
$03/EBB5 48 PHA A:00CE X:0002 Y:0000 P:eNvMxdizc - Push A into Stack.
$03/EBB6 AD D2 26 LDA $26D2  [$7E:26D2] A:00CE X:0002 Y:0000 - Load Caster's Next Action to Take.
$03/EBB9 C9 CA CMP #$CA A:00CE X:0002 Y:0000 P:eNvMxdizc - Is it Grimoire? (Summon Book, Call Book, etc)
$03/EBBB D0 05 BNE $05    [$EBC2] A:00CE X:0002 Y:0000 P:envMxdizC - If not, branch to 03EBC2
---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EBBD 20 0D EC JSR $EC0D  [$03:EC0D] A:00CA X:0002 Y:0000 P:envMxdiZC - Jump to Subroutine (Used Uniquely by Grimoire)
$03/EBC0 80 33 BRA $33    [$EBF5] A:00FF X:0001 Y:0000 P:eNvMxdizc - Branch to 03EBF5.
---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EBC2 C9 B0 CMP #$B0 A:00CE X:0002 Y:0000 P:envMxdizC - Is it B0? (Fire 1 Item, but likely just a check to see if it is in the proper start of items.)
$03/EBC4 90 07 BCC $07    [$EBCD] A:00CE X:0002 Y:0000 P:envMxdizC - If less than Fire 1 Item, branch to 03EBCD.
-------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EBC6 AD D0 26 LDA $26D0  [$7E:26D0] A:00CE X:0002 Y:0000 P:envMxdizC - Load (Unknown) into A.
$03/EBC9 29 10 AND #$10 A:0040 X:0002 Y:0000 P:envMxdizC - Get rid of bits.
$03/EBCB F0 25 BEQ $25    [$EBF2] A:0000 X:0002 Y:0000 P:envMxdiZC - Branch if 00 to 03EBF2.
--------------------------------------------------------------------------------------------------------------------------------------------------------------
(NOTE: Seems to be special and possibly unique to Spell Weapons.)

$03/EBCD AE D5 26 LDX $26D5  [$7E:26D5] A:0007 X:0002 Y:0000 P:envMxdizc - Load X from 7E26D5. (Unknown)
$03/EBD0 86 80 STX $80    [$00:0080] A:0007 X:32E6 Y:0000 P:envMxdizc - Store X in 80.
$03/EBD2 AD D2 26 LDA $26D2  [$7E:26D2] A:0007 X:32E6 Y:0000 P:envMxdizc - Load A from Action taken.  (Item in this case)
$03/EBD5 C9 61 CMP #$61 A:0007 X:32E6 Y:0000 P:envMxdizc  - Is it Shields?
$03/EBD7 90 04 BCC $04    [$EBDD] A:0007 X:32E6 Y:0000 P:eNvMxdizc - If Shields or lower branch to 03EBDD.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EBD9 A9 00 LDA #$00 A:0075 X:32DA Y:0000 P:envMxdizC- Load 00 into A.
$03/EBDB 80 10 BRA $10    [$EBED] A:0000 X:32DA Y:0000 P:envMxdiZC - Branch to 03EBED.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EBDE BF 70 90 0F LDA $0F9070,x[$0F:9077] A:0007 X:0007 Y:0000 P:envMxdizc - Load A from 0F9070+X. (Spell's Power as designated by weapon)
$03/EBE2 8D EC 38 STA $38EC  [$7E:38EC] A:0001 X:0007 Y:0000 P:envMxdizc - Store A in 7E38EC. - Store A in Spell Power.
$03/EBE5 EE EB 38 INC $38EB  [$7E:38EB] A:0001 X:0007 Y:0000 P:envMxdizc - +1 to 7E38EB. - +1 to Ignore Accuracy. (Thereby ignoring the accuracy of the weapon spell)
$03/EBE8 A0 03 00 LDY #$0003 A:0001 X:0007 Y:0000 P:envMxdizc - Load 0003 into Y. (To get to the Spell)
$03/EBEB B1 80 LDA ($80),y[$7E:32E9] A:0001 X:0007 Y:0003 P:envMxdizc - Load A from Character's Hand Data - Spell.
$03/EBED 8D D2 26 STA $26D2  [$7E:26D2] A:0048 X:0007 Y:0003 P:envMxdizc - Store A in 7E26D2.
$03/EBF0 80 03 BRA $03    [$EBF5] A:0048 X:0007 Y:0003 P:envMxdizc - Branch to 03EBF5.
------------------------------------------------------------------------------------------------------------------------------------
$03/EBF2 EE 2A 35 INC $352A  [$7E:352A] A:0000 X:0002 Y:0000 P:envMxdiZC - +1 to 7E352A.
$03/EBF5 20 3E CD JSR $CD3E  [$03:CD3E] A:0000 X:0002 Y:0000 P:envMxdizC - Jump to Subroutine (Magic Call)
$03/EBFB F0 03 BEQ $03    [$EC00] A:0000 X:0680 Y:001A P:envMxdiZC - Branch if 00 to EC00.
--------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EC00 68 PLA A:0000 X:0680 Y:001A P:envMxdiZC - Pull A from Stack (Item)
$03/EC01 8D C5 33 STA $33C5  [$7E:33C5] A:00CE X:0680 Y:001A P:eNvMxdizC - Store A in 7E33C5.
$03/EC04 8D C8 34 STA $34C8  [$7E:34C8] A:00CE X:0680 Y:001A P:eNvMxdizC - Store A in 7E34C8.
$03/EC07 A9 20 LDA #$20 A:00CE X:0680 Y:001A P:eNvMxdizC - Load 20 into A.
$03/EC09 8D C7 34 STA $34C7  [$7E:34C7] A:0020 X:0680 Y:001A P:envMxdizC - Store A in 7E34C7.
$03/EC0C 60 RTS A:0020 X:0680 Y:001A P:envMxdizC - Return.

Grimoire Routine -

Code: [Select]
$03/EC0D A9 E5 LDA #$E5 A:00CA X:0002 Y:0000 P:envMxdiZC - Load E5 into A. (Effect to use. E5 is used by Summons to phase the party in and out)
$03/EC0F 8D C4 33 STA $33C4  [$7E:33C4] A:00E5 X:0002 Y:0000 P:eNvMxdizC - Store A in 7E33C4.
$03/EC12 EE ED 38 INC $38ED  [$7E:38ED] A:00E5 X:0002 Y:0000 P:eNvMxdizC - +1 to 7E38ED.
$03/EC15 EE 84 35 INC $3584  [$7E:3584] A:00E5 X:0002 Y:0000 P:envMxdizC - +1 to 7E3584.
$03/EC18 7B TDC A:00E5 X:0002 Y:0000 P:envMxdizC - Transfer Direct Page.
$03/EC19 AA TAX A:0000 X:0002 Y:0000 P:envMxdiZC - Transfer A to X.
$03/EC1A A9 09 LDA #$09 A:0000 X:0000 Y:0000 P:envMxdiZC - Load 09 into A (Likely used as a benchmark of randomness to choose from)
$03/EC1C 20 79 83 JSR $8379  [$03:8379] A:0009 X:0000 Y:0000 P:envMxdizC - Jump to Subroutine (Generate Random Number 0-9)
$03/EC1F AA TAX A:0002 X:0000 Y:0000 P:envMxdizc - Transfer A to X.
$03/EC20 BF EC FE 13 LDA $13FEEC,x[$13:FEEE] A:0002 X:0002 Y:0000 P:envMxdizc - Load A from 13FEEC +X.

(NOTE: 13FEEC is a group of numbers in this order... D1,52,53,54,55,56,D7,58,59,5D - Now the AND 7F below makes it so it can't be above 80 and will always reduce them to 50's. I'm not sure what else this section of data is used for, I'm going to assume, not very much, so you should be able to change them if you are planning on it Not being Summons, because somewhere in the Grimoire Routine is something that makes the party vanish as it assumes Summons are going to be used.)

$03/EC24 48 PHA A:0053 X:0002 Y:0000 P:envMxdizc - Push A into Stack.
$03/EC25 29 7F AND #$7F A:0053 X:0002 Y:0000 P:envMxdizc - Get rid of negative bits.
$03/EC27 8D D2 26 STA $26D2  [$7E:26D2] A:0053 X:0002 Y:0000 P:envMxdizc - Store A in Caster's Next Action to take.
$03/EC2A 8D C5 33 STA $33C5  [$7E:33C5] A:0053 X:0002 Y:0000 P:envMxdizc - Store A in 7E33C5.
$03/EC2D 68 PLA A:0052 X:0001 Y:0000 P:envMxdizc - Pull A from Stack.
$03/EC2E 10 33 BPL $33    [$EC63] A:0052 X:0001 Y:0000 P:envMxdizc Branch if Positive to 03EC63. (This can only be bypassed by Chocobo and Sylph calls)
------------------------------------------------------(Looping Point)-----------------------------------------------------------------------------
$03/EC30 A2 05 00 LDX #$0005 A:00D7 X:0006 Y:0000 P:eNvMxdizc - Load 0005 into X.
$03/EC33 A9 0C LDA #$0C A:00D7 X:0005 Y:0000 P:envMxdizc - Load 0C into A.
$03/EC35 20 79 83 JSR $8379  [$03:8379] A:000C X:0005 Y:0000 P:envMxdizc - Jump to Subroutine (Generate Random Number)
$03/EC38 A8 TAY A:0006 X:0000 Y:0000 P:eNvMxdizc - Transfer A to Y.
$03/EC39 84 A9 STY $A9    [$00:00A9] A:0006 X:0000 Y:0006 P:envMxdizc - Store Y in A9.
$03/EC3B B9 40 35 LDA $3540,y[$7E:3546] A:0006 X:0000 Y:0006 P:envMxdizc - Load 7E3540+RNG into X (Ah! I see, the Grimoire has special targeting, or rather random targeting for the Chocobo and Sylph Summon)
$03/EC3E D0 F0 BNE $F0    [$EC30] A:0000 X:0000 Y:0006 P:envMxdiZc - If not 00 loop back to 03EC30.
------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EC40 98 TYA A:0000 X:0000 Y:0006 P:envMxdiZc - Transfer Y to A.
$03/EC41 85 DF STA $DF    [$00:00DF] A:0006 X:0000 Y:0006 P:envMxdizc - Store A in DF.
$03/EC43 A9 80 LDA #$80 A:0006 X:0000 Y:0006 P:envMxdizc - Load 80 into A.
$03/EC45 85 E1 STA $E1    [$00:00E1] A:0080 X:0000 Y:0006 P:eNvMxdizc - Store A in E1.
$03/EC47 20 E0 83 JSR $83E0  [$03:83E0] A:0080 X:0000 Y:0006 P:eNvMxdizc - Jump to Subroutine (HP Dealings?)
$03/EC4A A6 E3 LDX $E3    [$00:00E3] A:0000 X:0000 Y:0006 P:envMxdiZc - Load Targeted Monster Slot into X.
$03/EC4C BD 03 20 LDA $2003,x[$7E:2303] A:0000 X:0300 Y:0006 P:envMxdizc - Load Targeted Monster's Status Byte 1 into A.
$03/EC4F 29 C0 AND #$C0 A:0000 X:0300 Y:0006 P:envMxdiZc - Is it Dead or Petrified?
$03/EC51 D0 DD BNE $DD    [$EC30] A:0000 X:0300 Y:0006 P:envMxdiZc - If so loop back to 03EC30.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EC53 38 SEC A:0000 X:0300 Y:0006 P:envMxdiZc - Set Carry Flag.
$03/EC54 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0300 Y:0006 P:envMxdiZC - Load Targeted Choice into A.
$03/EC56 E9 05 SBC #$05 A:0006 X:0300 Y:0006 P:envMxdizC - -5 to A.
$03/EC58 AA TAX A:0001 X:0300 Y:0006 P:envMxdizC - Transfer A to X.
$03/EC59 09 80 ORA #$80 A:0001 X:0001 Y:0006 P:envMxdizC - Add 80.
$03/EC5B 85 CE STA $CE    [$00:00CE] A:0081 X:0001 Y:0006 P:eNvMxdizC - Store A in CE.
$03/EC5D 7B TDC A:0081 X:0001 Y:0006 P:eNvMxdizC - Transfer Direct Page.
$03/EC5E 20 5F 85 JSR $855F  [$03:855F] A:0000 X:0001 Y:0006 P:envMxdiZC - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/855F 1F FE FE 13 ORA $13FEFE,x[$13:FEFF] A:0000 X:0001 Y:0006 P:envMxdiZC - Add the value in 13FEFE+X into A.
$03/8563 60 RTS A:0040 X:0001 Y:0006 P:envMxdizC - Return.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/EC61 80 06 BRA $06    [$EC69] A:0040 X:0001 Y:0006 P:envMxdizC - Branch to 03EC69
------------------------------------------------------------------------------------------------------------------------------------
$03/EC63 A9 80 LDA #$80 A:0052 X:0001 Y:0000 P:envMxdizc - Load 80 into A.
$03/EC65 85 CE STA $CE    [$00:00CE] A:0080 X:0001 Y:0000 P:eNvMxdizc - Store A in CE.
$03/EC67 A9 FF LDA #$FF A:0080 X:0001 Y:0000 P:eNvMxdizc - Load FF into A.
$03/EC69 8D D3 26 STA $26D3  [$7E:26D3] A:00FF X:0001 Y:0000 P:eNvMxdizc - Store A in Next Monster Target
$03/EC6C 60 RTS A:00FF X:0001 Y:0000 P:eNvMxdizc - Return.

There was a wealth of information to find there within! First and possibly most importantly is how the game makes Summons vanish the party.

$03/EC0D   A9 E5   LDA #$E5   A:00CA   X:0002   Y:0000   P:envMxdiZC - Load E5 into A. (Effect to use. E5 is used by Summons to phase the party in and out) - E5 is some sort of effect and it is very definitely an effect, considering if you change the value to say 01, it would use Hold's graphic. 00 it shows no graphic.
$03/EC0F   8D C4 33   STA $33C4  [$7E:33C4]   A:00E5   X:0002   Y:0000   P:eNvMxdizC - Store A in 7E33C4.

Secondly is how the game draws the summons in the first place and how they are specialized.

$03/EC20   BF EC FE 13   LDA $13FEEC,x[$13:FEEE]   A:0002   X:0002   Y:0000   P:envMxdizc - Load A from 13FEEC +X.

(NOTE: 13FEEC is a group of numbers in this order... D1,52,53,54,55,56,D7,58,59,5D - Now the AND 7F below makes it so it can't be above 80 and will always reduce them to 50's. I'm not sure what else this section of data is used for, I'm going to assume, not very much, so you should be able to change them if you are planning on it Not being Summons, because somewhere in the Grimoire Routine is something that makes the party vanish as it assumes Summons are going to be used.)

If you change the E5 as listed above to 00 you can use the Grimoire to use any spell and combination thereof of to spells that you would like it to use. The purpose of the negative values is for spells that only hit one enemy (Chocobo, Sylph) and the negative part allows it to go through a special part of the routine where its targeting becomes randomized, neatly enough.

$03/EC30   A2 05 00   LDX #$0005   A:00D7   X:0006   Y:0000   P:eNvMxdizc - Load 0005 into X.
$03/EC33   A9 0C   LDA #$0C   A:00D7   X:0005   Y:0000   P:envMxdizc - Load 0C into A.
$03/EC35   20 79 83   JSR $8379  [$03:8379]   A:000C   X:0005   Y:0000   P:envMxdizc - Jump to Subroutine (Generate Random Number)
$03/EC38   A8    TAY   A:0006   X:0000   Y:0000   P:eNvMxdizc - Transfer A to Y.
$03/EC39   84 A9   STY $A9    [$00:00A9]   A:0006   X:0000   Y:0006   P:envMxdizc - Store Y in A9.
$03/EC3B   B9 40 35   LDA $3540,y[$7E:3546]   A:0006   X:0000   Y:0006   P:envMxdizc - Load 7E3540+RNG into X (Ah! I see, the Grimoire has special targeting, or rather random targeting for the Chocobo and Sylph Summon)
$03/EC3E   D0 F0   BNE $F0    [$EC30]   A:0000   X:0000   Y:0006   P:envMxdiZc - If not 00 loop back to 03EC30.

The one thing I could not figure out is how the Grimoire's damage is calculated. Their default power according to the item is 00. Maybe it's something I missed in the routine.

That does it for the moment, I still need to post a full look at the Magic Call routine, but I think we're at the home stretch.

 :edit: Magic Weapon Section Added.
« Last Edit: October 28, 2013, 10:22:15 PM by Grimoire LD »

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #98 on: October 07, 2013, 11:24:40 PM »
I held this off for as long as I could but there's no keeping it aside now. Onto the full Magic Call Routine... (Will likely be split into multiple posts)

White/Black/Call/Ninja Routine -

Code: [Select]
$03/CC46 7B TDC A:0003 X:0004 Y:0000 P:envMxdizc - Transfer Direct Page.
$03/CC47 AA TAX A:0000 X:0004 Y:0000 P:envMxdiZc - Transfer A to X.
$03/CC48 8E 96 28 STX $2896  [$7E:2896] A:0000 X:0000 Y:0000 P:envMxdiZc - Store X in in 7E2896.
$03/CC4B A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Character Slot into A.
$03/CC4D 30 03 BMI $03    [$CC52] A:0001 X:0000 Y:0000 P:envMxdizc - Branch if Monster to 03CC52.
$03/CC4F 4C 20 CD JMP $CD20  [$03:CD20] A:0001 X:0000 Y:0000 P:envMxdizc - Jump to 03CD20 (Later Part of Routine.
----------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/CD20 AD D2 26 LDA $26D2  [$7E:26D2] A:0001 X:0000 Y:0000 P:envMxdizc - Load Caster's Action to Take.
$03/CD23 C9 19 CMP #$19 A:001D X:0000 Y:0000 P:envMxdizc - Is it Lower than Toad? (White Magic)
$03/CD25 90 17 BCC $17    [$CD3E] A:001D X:0000 Y:0000 P:envMxdizC - If so, branch to 03CD3E.
------------------------------------------------------------------------------------------------------------------------------------------------------
$03/CD27 C9 31 CMP #$31 A:001D X:0000 Y:0000 P:envMxdizC - Is it Lower than Imp? (Black Magic)
$03/CD29 90 04 BCC $04    [$CD2F] A:001D X:0000 Y:0000 P:eNvMxdizc - If so branch to 03CD2F.
-------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------
$03/CD2B C9 40 CMP #$40 A:0033 X:0000 Y:0000 P:envMxdizC - Is it Lower than Bahamut (Summon Magic)
$03/CD2D 90 04 BCC $04    [$CD33] A:0033 X:0000 Y:0000 P:eNvMxdizc - If so branch to 03CD33.
-------------------------------------------------------------------------------------------------------------------------------------------
$03/CD2F A9 C3 LDA #$C3 A:001D X:0000 Y:0000 P:eNvMxdizc - Load C3 into A. (Black Magic Aura)
$03/CD31 80 08 BRA $08    [$CD3B] A:00C3 X:0000 Y:0000 P:eNvMxdizc - Branch to 03CD3B.
-----------------------------------------------------------------------------------------------------------------------------------------------
$03/CD33 20 50 E0 JSR $E050  [$03:E050] A:0033 X:0000 Y:0000 P:eNvMxdizc - Jump to Subroutine (Unique to Summon Routine)
$03/CD36 A9 C4 LDA #$C4 A:004F X:0000 Y:0000 P:envMxdizc - Load C4 into A (Summon Orbs - Vanishing Party)
$03/CD38 8D FF 35 STA $35FF  [$7E:35FF] A:00C4 X:0000 Y:0000 P:eNvMxdizc - Store A in 7E35FF.
-----------------------------------------------------------------------------------------------------------------------------------------------
$03/CD3B 8D C4 33 STA $33C4  [$7E:33C4] A:00C3 X:0000 Y:0000 P:eNvMxdizc - Store A in 7E33C4. (Audiovisual code)
$03/CD3E AD D2 26 LDA $26D2  [$7E:26D2] A:00C3 X:0000 Y:0000 P:eNvMxdizc - Load Caster's Next Action to Take into A.
-------------------------------------------------------------------------------------------------------------------------------------------------
$03/CD3E AD D2 26 LDA $26D2  [$7E:26D2] A:00CE X:7510 Y:0018 P:envMxdizc - Load Caster's Action Taken.
$03/CD41 8D C5 33 STA $33C5  [$7E:33C5] A:00CE X:7510 Y:0018 P:eNvMxdizc - Store in 7E33C5.
$03/CD44 A9 F8 LDA #$F8 A:00CE X:7510 Y:0018 P:eNvMxdizc - Load F8 into A.
$03/CD46 8D C6 33 STA $33C6  [$7E:33C6] A:00F8 X:7510 Y:0018 P:eNvMxdizc - Store A in 7E33C6.
$03/CD49 A9 04 LDA #$04 A:00F8 X:7510 Y:0018 P:eNvMxdizc - Load 04 into A.
$03/CD4B 8D C7 33 STA $33C7  [$7E:33C7] A:0004 X:7510 Y:0018 P:envMxdizc - Store A in 7E33C7.
$03/CD4E EE 5B 35 INC $355B  [$7E:355B] A:0004 X:7510 Y:0018 P:envMxdizc - +1 to 7E355B.
$03/CD51 A5 CE LDA $CE    [$00:00CE] A:0004 X:7510 Y:0018 P:envMxdizc - Load A from CE.
$03/CD53 29 80 AND #$80 A:0000 X:7510 Y:0018 P:envMxdiZc - Get rid of bits.
$03/CD55 8D C4 34 STA $34C4  [$7E:34C4] A:0000 X:7510 Y:0018 P:envMxdiZc - Store A in 7E34C4.
$03/CD58 9C 22 35 STZ $3522  [$7E:3522] A:0000 X:7510 Y:0018 P:envMxdiZc - Store Zero in 7E3522.
$03/CD5B 9C 23 35 STZ $3523  [$7E:3523] A:0000 X:7510 Y:0018 P:envMxdiZc - Store Zero in 7E3523.
$03/CD5E AD D2 26 LDA $26D2  [$7E:26D2] A:0000 X:7510 Y:0018 P:envMxdiZc - Load A from Target's Action.
$03/CD61 C9 92 CMP #$92 A:00CE X:7510 Y:0018 P:eNvMxdizc - Is it (Spell) Retreat?
$03/CD63 D0 0A BNE $0A    [$CD6F] A:00CE X:7510 Y:0018 P:envMxdizC - If not branch to 03CD6F.
------------------------------------------------------------------------------------------------------------------------
$03/CD65 48 PHA A:0092 X:0000 Y:0006 P:envMxdiZC - Push A onto stack.
$03/CD66 A9 04 LDA #$04 A:0092 X:0000 Y:0006 P:envMxdiZC - Load 04 into A (Death Sound)
$03/CD68 8D E6 38 STA $38E6  [$7E:38E6] A:0004 X:0000 Y:0006 P:envMxdizC - Store A in 7E38E6.
$03/CD6B 68 PLA A:0004 X:0000 Y:0006 P:envMxdizC - Pull A from stack.
$03/CD6C EE 82 38 INC $3882  [$7E:3882] A:0092 X:0000 Y:0006 P:eNvMxdizC - +1 to 7E3882. (Cancels Exp. Gain)
--------------------------------------------------------------------------------------------------------------------------
$03/CD6F AA TAX A:00CE X:7510 Y:0018 P:envMxdizC - Transfer A to X.
$03/CD70 86 E5 STX $E5    [$00:00E5] A:00CE X:00CE Y:0018 P:envMxdizC - Store X in E5.
$03/CD72 AD 2A 35 LDA $352A  [$7E:352A] A:00CE X:00CE Y:0018 P:envMxdizC - Load A from 7E352A.
$03/CD75 D0 33 BNE $33    [$CDAA] A:0001 X:00CE Y:0018 P:envMxdizC - If not 00 branch to 03CDAA.
------------------------------------------------------------------------------------------------------------------------------
$03/CD77 AD D2 26 LDA $26D2  [$7E:26D2] A:0000 X:001D Y:0000 P:envMxdiZc - Load Caster's Action into A.
$03/CD7A 20 3E D3 JSR $D33E  [$03:D33E] A:001D X:001D Y:0000 P:envMxdizc - Jump to Subroutine (Spell Subroutine - Early - Not sure what is being done though)
$03/CD7D 8D C8 34 STA $34C8  [$7E:34C8] A:001D X:0003 Y:FFFF P:envMxdizc - Store A in 7E34C8.
$03/CD80 D0 08 BNE $08    [$CD8A] A:001D X:0003 Y:FFFF P:envMxdizc - Branch if not 00 to 03CD8A.
-------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------
$03/CD8A AD D2 26 LDA $26D2  [$7E:26D2] A:001D X:0003 Y:FFFF P:envMxdizc - Load Caster's Action into A.
$03/CD8D 20 64 D3 JSR $D364  [$03:D364] A:001D X:0003 Y:FFFF P:envMxdizc - Jump to Subroutine (??)
-----------------------------------------------------------------------------------------------------------------------------------
$03/CD90 F0 08 BEQ $08    [$CD9A] A:0000 X:0003 Y:FFFF P:envMxdiZc - Branch if 00 to 03CD9A.
-----------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------
$03/CD9A A9 40 LDA #$40 A:0000 X:0003 Y:FFFF P:envMxdiZc  - Load 40 into A.
$03/CD9C 8D C7 34 STA $34C7  [$7E:34C7] A:0040 X:0003 Y:FFFF P:envMxdizc - Store A in 7E34C7.
$03/CD9F A2 A0 97 LDX #$97A0 A:0040 X:0003 Y:FFFF P:envMxdizc - Load 97A0 into X.
$03/CDA2 86 80 STX $80    [$00:0080] A:0040 X:97A0 Y:FFFF P:eNvMxdizc - Store X in 80.
$03/CDA4 A9 0F LDA #$0F A:0040 X:97A0 Y:FFFF P:eNvMxdizc - Load 0F into A.
$03/CDA6 85 82 STA $82    [$00:0082] A:000F X:97A0 Y:FFFF P:envMxdizc - Store A in 82.
$03/CDA8 80 1B BRA $1B    [$CDC5] A:000F X:97A0 Y:FFFF P:envMxdizc - Branch to 03CDC5
---------------------------------------------------------------------------------------------------------------------------------
$03/CDAA AD D2 26 LDA $26D2  [$7E:26D2] A:0001 X:00CE Y:0018 P:envMxdizC - Load A from Target's Action.
$03/CDAD 8D C8 34 STA $34C8  [$7E:34C8] A:00CE X:00CE Y:0018 P:eNvMxdizC - Store A in 7E34C8.
$03/CDB0 A9 20 LDA #$20 A:00CE X:00CE Y:0018 P:eNvMxdizC - Load 20 into A.
$03/CDB2 8D C7 34 STA $34C7  [$7E:34C7] A:0020 X:00CE Y:0018 P:envMxdizC - Store A in 7E34C7.
$03/CDB5 A2 80 96 LDX #$9680 A:0020 X:00CE Y:0018 P:envMxdizC - Load 9680 into X.
$03/CDB8 86 80 STX $80    [$00:0080] A:0020 X:9680 Y:0018 P:eNvMxdizC - Store X in 80.
$03/CDBA A9 0F LDA #$0F A:0020 X:9680 Y:0018 P:eNvMxdizC - Load 0F into A.
$03/CDBC 85 82 STA $82    [$00:0082] A:000F X:9680 Y:0018 P:envMxdizC - Store A in 82.
$03/CDBE 38 SEC A:000F X:9680 Y:0018 P:envMxdizC - Set Carry Flag.
$03/CDBF A5 E5 LDA $E5    [$00:00E5] A:000F X:9680 Y:0018 P:envMxdizC - Load the value in E5 into A.
$03/CDC1 E9 B0 SBC #$B0 A:00CE X:9680 Y:0018 P:eNvMxdizC - -B0 from A.
$03/CDC3 85 E5 STA $E5    [$00:00E5] A:001E X:9680 Y:0018 P:envMxdizC - Store A in E5.
$03/CDC5 A9 06 LDA #$06 A:001E X:9680 Y:0018 P:envMxdizC - Load 06 into A.
$03/CDC7 20 5E 84 JSR $845E  [$03:845E] A:0006 X:9680 Y:0018 P:envMxdizC - Load Stored Spell Power.
$03/CDCA AD A0 28 LDA $28A0  [$7E:28A0] A:0080 X:0006 Y:00BA P:envMxdiZC - Load  from 7E28A0.
$03/CDCD 48 PHA A:0000 X:0006 Y:00BA P:envMxdiZC - Push A.
$03/CDCE 29 80 AND #$80 A:0000 X:0006 Y:00BA P:envMxdiZC - And 80.
$03/CDD0 8D E2 38 STA $38E2  [$7E:38E2] A:0000 X:0006 Y:00BA P:envMxdiZC - Store A in 7E38E2.
$03/CDD3 68 PLA A:0000 X:0006 Y:00BA P:envMxdiZC - Pull A.
$03/CDD4 29 7F AND #$7F A:0000 X:0006 Y:00BA P:envMxdiZC - And 7F.
$03/CDD6 85 DF STA $DF    [$00:00DF] A:0000 X:0006 Y:00BA P:envMxdiZC - Store A in DF.
$03/CDD8 A9 03 LDA #$03 A:0000 X:0006 Y:00BA P:envMxdiZC - Load 03 into A.
$03/CDDA 85 E1 STA $E1    [$00:00E1] A:0003 X:0006 Y:00BA P:envMxdizC - Store A in E1.
$03/CDDC 20 E0 83 JSR $83E0  [$03:83E0] A:0003 X:0006 Y:00BA P:envMxdizC - Jump to Subroutine (HP Dealing?)
$03/CDDF A6 E3 LDX $E3    [$00:00E3] A:0000 X:0000 Y:00BA P:envMxdiZc - Load X from E3.
$03/CDE1 7B TDC A:0000 X:0000 Y:00BA P:envMxdiZc - Transfer Direct Page.
$03/CDE2 A8 TAY A:0000 X:0000 Y:00BA P:envMxdiZc - Transfer A to Y.
-------------------------------------------------------------------------------(Looping Point)--------------------------------------------------------------
$03/CDE3 BF 90 A5 0F LDA $0FA590,x[$0F:A590] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from 0FA590.
$03/CDE7 99 A2 28 STA $28A2,y[$7E:28A2] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E28A2.
$03/CDEA C8 INY A:0000 X:0000 Y:0000 P:envMxdiZc - +1 Y
$03/CDEB E8 INX A:0000 X:0000 Y:0001 P:envMxdizc - +1 X
$03/CDEC C0 03 00 CPY #$0003 A:0000 X:0001 Y:0001 P:envMxdizc - Is X 03?
$03/CDEF D0 F2 BNE $F2    [$CDE3] A:0000 X:0001 Y:0001 P:eNvMxdizc - If not branch back to 03CDE3.
$03/CDF1 AD A2 28 LDA $28A2  [$7E:28A2] A:0000 X:0003 Y:0003 P:envMxdiZC - Load A from Casted Spell's Elemental?
$03/CDF4 8D 00 36 STA $3600  [$7E:3600] A:0000 X:0003 Y:0003 P:envMxdiZC - Store A in 7E3600.
$03/CDF7 A5 CE LDA $CE    [$00:00CE] A:0000 X:0003 Y:0003 P:envMxdiZC - Load A from CE.
$03/CDF9 29 80 AND #$80 A:0000 X:0003 Y:0003 P:envMxdiZC - Get rid of bits.
$03/CDFB 8D 4E 35 STA $354E  [$7E:354E] A:0000 X:0003 Y:0003 P:envMxdiZC - Store A in 7E354E.
$03/CDFE 30 0D BMI $0D    [$CE0D] A:0000 X:0003 Y:0003 P:envMxdiZC - Branch if Minus to 03CE0D.
$03/CE00 20 18 C4 JSR $C418  [$03:C418] A:0000 X:0003 Y:0003 P:envMxdiZC - Jump to Subroutine (Status Checking?)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/C418 7B TDC A:0000 X:0003 Y:0003 P:envMxdiZC - Transfer Direct Page.
$03/C419 AA TAX A:0000 X:0003 Y:0003 P:envMxdiZC - Transfer A to X.
$03/C41A A8 TAY A:0000 X:0000 Y:0003 P:envMxdiZC - Transfer A to Y.
$03/C41B 84 A9 STY $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZC - Store Y in A9.
$03/C41D B9 40 35 LDA $3540,y[$7E:3540] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from 7E3540
$03/C420 D0 13 BNE $13    [$C435] A:0000 X:0000 Y:0000 P:envMxdiZC - Branch if not 00 to 03C435
---------------------------------------------------------------------------------------------------------------------------------------------.
$03/C422 BD 03 20 LDA $2003,x[$7E:2003] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Status of Character.
$03/C425 29 C0 AND #$C0 A:0000 X:0000 Y:0000 P:envMxdiZC - Is it Petrify or KO?
$03/C427 D0 0C BNE $0C    [$C435] A:0000 X:0000 Y:0000 P:envMxdiZC - If not 00 branch to 03C435.
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/C429 BD 05 20 LDA $2005,x[$7E:2005] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Character's Status Byte 3,
$03/C42C 29 82 AND #$82 A:0000 X:0000 Y:0000 P:envMxdiZC - Is it Magnetized or Twincasting?
$03/C42E D0 05 BNE $05    [$C435] A:0000 X:0000 Y:0000 P:envMxdiZC - If not 00 branch to 03C435.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/C430 BD 06 20 LDA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Character's Status Byte 4.
$03/C433 10 0B BPL $0B    [$C440] A:0000 X:0000 Y:0000 P:envMxdiZC - If they are not in Hide status branch to 03C440.
------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/C440 60 RTS A:0000 X:0000 Y:0000 P:envMxdiZC
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/CE03 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A9 into A.
$03/CE05 F0 06 BEQ $06    [$CE0D] A:0000 X:0000 Y:0000 P:envMxdiZC - If 00 branch to 03CE0D
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/CE0D AD D3 26 LDA $26D3  [$7E:26D3] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Caster's Monster Target.
$03/CE10 D0 03 BNE $03    [$CE15] A:0000 X:0000 Y:0000 P:envMxdiZC - If not 00 branch to 03CE15.
$03/CE12 AD D4 26 LDA $26D4  [$7E:26D4] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Caster's Party Targets.
$03/CE15 20 BC D2 JSR $D2BC  [$03:D2BC] A:00F8 X:0000 Y:0000 P:eNvMxdizC - Jump to Subroutine (Spell Routines?)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/D2AF BF 92 E0 03 LDA $03E092,x[$03:E092] A:0088 X:0000 Y:FFFF P:eNvMxdizc - Load 03E092+X into A.
$03/D2B3 85 81 STA $81    [$00:0081] A:00D3 X:0000 Y:FFFF P:eNvMxdizc - Store A in 81.
$03/D2B5 A9 03 LDA #$03 A:00D3 X:0000 Y:FFFF P:eNvMxdizc - Load 03 into A.
$03/D2B7 85 82 STA $82    [$00:0082] A:0003 X:0000 Y:FFFF P:envMxdizc - Store A in 82l
$03/D2B9 DC 80 00 JML [$0080][$03:D388] A:0003 X:0000 Y:FFFF P:envMxdizc - Jump to Damaging Spells Subroutine (I'm not sure how the game recognized it as such...)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/D2BC 85 A9 STA $A9    [$00:00A9] A:00F8 X:0000 Y:0000 P:eNvMxdizC - Store Targeting in A9.
$03/D2BE 20 0C 85 JSR $850C  [$03:850C] A:00F8 X:0000 Y:0000 P:eNvMxdizC - Jump to Subroutine (??)
$03/D2C1 CA DEX A:0000 X:0005 Y:0000 P:envMxdiZc - -1 to X.
$03/D2C2 F0 77 BEQ $77    [$D33B] A:0000 X:0004 Y:0000 P:envMxdizc - Branch if Equal to... 00? to 03D33B.
$03/D2C4 AD E7 38 LDA $38E7  [$7E:38E7] A:0000 X:0004 Y:0000 P:envMxdizc - Load 7E38E7 into A (Maybe something to do with Encounter flags?)
$03/D2C7 D0 72 BNE $72    [$D33B] A:0001 X:0004 Y:0000 P:envMxdizc - Branch if not equal to 00 to 03D33B.
------------------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/D33B A5 A9 LDA $A9    [$00:00A9] A:0001 X:0004 Y:0000 P:envMxdizc - Load A9 into A.
$03/D33D 60 RTS A:00F8 X:0004 Y:0000 P:eNvMxdizc - Return
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/CE18 8D 4F 35 STA $354F  [$7E:354F] A:00F8 X:0004 Y:0000 P:eNvMxdizc - Store A in 7E354F.
$03/CE1B 8D 50 35 STA $3550  [$7E:3550] A:00F8 X:0004 Y:0000 P:eNvMxdizc - Store A in 7E3550.
$03/CE1E 20 0C 85 JSR $850C  [$03:850C] A:00F8 X:0004 Y:0000 P:eNvMxdizc - Jump to Subroutine (??)
$03/CE21 8A TXA A:0000 X:0005 Y:0000 P:envMxdiZc - Transfer X to A.
$03/CE22 8D 06 39 STA $3906  [$7E:3906] A:0005 X:0005 Y:0000 P:envMxdizc - Store A in 7E3906.
$03/CE25 8D 4D 35 STA $354D  [$7E:354D] A:0005 X:0005 Y:0000 P:envMxdizc  - Store A in 7E354D.
$03/CE28 F0 DD BEQ $DD    [$CE07] A:0005 X:0005 Y:0000 P:envMxdizc - If 00 loop back to 03CE07
$03/CE2A AD 9C 28 LDA $289C  [$7E:289C] A:0005 X:0005 Y:0000 P:envMxdizc - Load 7E289C into A. -
$03/CE2D 29 60 AND #$60 A:0020 X:0005 Y:0000 P:envMxdizc - Get rid of bits.
$03/CE2F C9 40 CMP #$40 A:0020 X:0005 Y:0000 P:envMxdizc - Is it 40?
$03/CE31 D0 05 BNE $05    [$CE38] A:0020 X:0005 Y:0000 P:eNvMxdizc - If not branch to 03CE31.
--------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------
$03/CE38 AD D2 26 LDA $26D2  [$7E:26D2] A:0020 X:0005 Y:0000 P:eNvMxdizc - Load Caster's Action Taken.
$03/CE3B F0 3E BEQ $3E    [$CE7B] A:00CE X:0005 Y:0000 P:eNvMxdizc - if 00 branch to 03CE7B.
$03/CE3D AD 5D 35 LDA $355D  [$7E:355D] A:00CE X:0005 Y:0000 P:eNvMxdizc - Load 7E355D into A.
$03/CE40 F0 39 BEQ $39    [$CE7B] A:0000 X:0005 Y:0000 P:envMxdiZc - If equal branch to 03CE7B.
-----------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------
$03/CE7B AD 2A 35 LDA $352A  [$7E:352A] A:0000 X:0005 Y:0000 P:envMxdiZc - Load A from 7E352A
$03/CE7E D0 37 BNE $37    [$CEB7] A:0001 X:0005 Y:0000 P:envMxdizc - If not 00 branch to 03CEB7.
--------------------------------------------------------------------------------------------------------------------------------------------------
$03/CEB7 7B TDC A:0001 X:0005 Y:0000 P:envMxdizc - Transfer Direct Page.
$03/CEB8 AA TAX A:0000 X:0005 Y:0000 P:envMxdiZc - Transfer A to X.
$03/CEB9 AD D2 26 LDA $26D2  [$7E:26D2] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Target's Action.
$03/CEBC C9 19 CMP #$19 A:00CE X:0000 Y:0000 P:eNvMxdizc - Is it 19?
$03/CEBE B0 01 BCS $01    [$CEC1] A:00CE X:0000 Y:0000 P:eNvMxdizC - If it is more than 19 branch to 03CEC1. (Looking at the start of Black Magic, it seems)
---------------------------------------------------------------------------------------------------------------------------
$03/CEC0 E8 INX A:0005 X:0000 Y:0000 P:eNvMxdizc +1 to X.
---------------------------------------------------------------------------------------------------------------------------
$03/CEC1 86 C7 STX $C7    [$00:00C7] A:00CE X:0000 Y:0000 P:eNvMxdizC - Store X in C7.
$03/CEC3 BD 97 26 LDA $2697,x[$7E:2697] A:00CE X:0000 Y:0000 P:eNvMxdizC - Load Caster's Wisdom (Is Very Likely the formulaic check of Wisdom based spells)
$03/CEC6 4A LSR A A:0012 X:0000 Y:0000 P:envMxdizC - /2.
$03/CEC7 85 A9 STA $A9    [$00:00A9] A:0009 X:0000 Y:0000 P:envMxdizc - Store /2 Wisdom in A9.
$03/CEC9 AD 9E 28 LDA $289E  [$7E:289E] A:0009 X:0000 Y:0000 P:envMxdizc - Load Casted Spell's Hit Percentage
$03/CECC 29 7F AND #$7F A:0064 X:0000 Y:0000 P:envMxdizc - Get rid of bits (possibly over 80)
$03/CECE 18 CLC A:0064 X:0000 Y:0000 P:envMxdizc - Clear Carry Flag.
$03/CECF 65 A9 ADC $A9    [$00:00A9] A:0064 X:0000 Y:0000 P:envMxdizc - Add the value in A9 into A (Wisdom /2)
$03/CED1 90 02 BCC $02    [$CED5] A:006D X:0000 Y:0000 P:envMxdizc -If Greater than 00 branch to 03CED5.
----------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------
$03/CED5 8D FA 38 STA $38FA  [$7E:38FA] A:006D X:0000 Y:0000 P:envMxdizc - Store A in 7E38FA
$03/CED8 AD 83 26 LDA $2683  [$7E:2683] A:006D X:0000 Y:0000 P:envMxdizc - Load Caster's Status Byte 1.
$03/CEDB 29 02 AND #$02 A:0000 X:0000 Y:0000 P:envMxdiZc - Is it Darkness?
$03/CEDD F0 03 BEQ $03    [$CEE2] A:0000 X:0000 Y:0000 P:envMxdiZc - If equal to 00 branch to 03CEE2.
--------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------
$03/CEE2 A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:0000 P:envMxdiZc - Load CD into A.
$03/CEE4 29 7F AND #$7F A:0000 X:0000 Y:0000 P:envMxdiZc - Get rid of negative bits.
$03/CEE6 D0 19 BNE $19    [$CF01] A:0000 X:0000 Y:0000 P:envMxdiZc - If not 00 branch to 03CF01.
$03/CEE8 AD FA 38 LDA $38FA  [$7E:38FA] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from 7E38FA (Wis/2 +Hit%)
$03/CEEB 85 DF STA $DF    [$00:00DF] A:006D X:0000 Y:0000 P:envMxdizc - Store A in DF.
$03/CEED A9 05 LDA #$05 A:006D X:0000 Y:0000 P:envMxdizc - Load 05 into A.
$03/CEEF 85 E1 STA $E1    [$00:00E1] A:0005 X:0000 Y:0000 P:envMxdizc - Store A in E1.
$03/CEF1 20 E0 83 JSR $83E0  [$03:83E0] A:0005 X:0000 Y:0000 P:envMxdizc - Jump to Subroutine (Timing?)
$03/CEF4 46 E4 LSR $E4    [$00:00E4] A:0000 X:0000 Y:0000 P:envMxdiZc - /2 Value in E4.
$03/CEF6 66 E3 ROR $E3    [$00:00E3] A:0000 X:0000 Y:0000 P:envMxdizc - /2 Value in E3.
$03/CEF8 46 E4 LSR $E4    [$00:00E4] A:0000 X:0000 Y:0000 P:envMxdizC - /2 Value in E4.
$03/CEFA 66 E3 ROR $E3    [$00:00E3] A:0000 X:0000 Y:0000 P:envMxdiZC - /2 Value in E3
$03/CEFC A5 E3 LDA $E3    [$00:00E3] A:0000 X:0000 Y:0000 P:eNvMxdizc - Load E3 into A.
$03/CEFE 8D FA 38 STA $38FA  [$7E:38FA] A:0088 X:0000 Y:0000 P:eNvMxdizc - Store A in 7E38FA.
$03/CF01 AD 9F 28 LDA $289F  [$7E:289F] A:0088 X:0000 Y:0000 P:eNvMxdizc - Load A in 7E289F.
$03/CF04 29 80 AND #$80 A:0002 X:0000 Y:0000 P:envMxdizc - Get rid of Positive bits.
$03/CF06 F0 07 BEQ $07    [$CF0F] A:0000 X:0000 Y:0000 P:envMxdiZc - If 00 branch to 03CF0F
----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------
$03/CF0F A6 C7 LDX $C7    [$00:00C7] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from C7. (If White Magic...)
$03/CF11 BD 97 26 LDA $2697,x[$7E:2697] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Caster's Modified Wisdom. (If X is 01 it would load Modified Will instead, labeling it as White Magic)
$03/CF14 20 86 84 JSR $8486  [$03:8486] A:0012 X:0000 Y:0000 P:envMxdizc - Jump to Subroutine (Divide the value by 4.)
$03/CF17 1A INC A A:0004 X:0000 Y:0000 P:envMxdizC - +1 to A.
$03/CF18 8D FB 38 STA $38FB  [$7E:38FB] A:0005 X:0000 Y:0000 P:envMxdizC - Store A (Widsom/4 +1) into 7E38FB.
$03/CF1B 20 97 C9 JSR $C997  [$03:C997] A:0005 X:0000 Y:0000 P:envMxdizC - Jump to Subroutine (From my other notes, seems to be some sort of RNG)
$03/CF1E AD FD 38 LDA $38FD  [$7E:38FD] A:0010 X:0000 Y:0000 P:envMxdiZc - Load A from 7E38FD.
$03/CF21 8D 51 35 STA $3551  [$7E:3551] A:0005 X:0000 Y:0000 P:envMxdizc - Store A in 7E3551.
$03/CF24 AD 2A 35 LDA $352A  [$7E:352A] A:0005 X:0000 Y:0000 P:envMxdizc - Load From 7E352A.
$03/CF27 D0 05 BNE $05    [$CF2E] A:0001 X:0000 Y:0000 P:envMxdizc - If not 00 branch to 03CF27
---------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------
$03/CF2E A9 08 LDA #$08 A:0001 X:0000 Y:0000 P:envMxdizc - Load 08 into A.
$03/CF30 8D 51 35 STA $3551  [$7E:3551] A:0008 X:0000 Y:0000 P:envMxdizc - Store A in 7E3551.
$03/CF33 AD EB 38 LDA $38EB  [$7E:38EB] A:0008 X:0000 Y:0000 P:envMxdizc - Load A from 7E38EB.
$03/CF36 F0 06 BEQ $06    [$CF3E] A:0000 X:0000 Y:0000 P:envMxdiZc - If not 00 branch to 03CF3E.
------------------------------------------------------------------------------------------------------------------------------------------------------
03/CF38 AD EC 38 LDA $38EC  [$7E:38EC] A:0001 X:0000 Y:0000 P:envMxdizc - Load A from 7E38EC.
$03/CF3B 8D 51 35 STA $3551  [$7E:3551] A:0001 X:0000 Y:0000 P:envMxdizc - Store A in 7E3551.
----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/CF3E 9C 54 35 STZ $3554  [$7E:3554] A:0000 X:0000 Y:0000 P:envMxdiZc - Store Zero in 7E3554.
$03/CF41 7B TDC A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer Direct Page.
$03/CF42 AA TAX A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to X.
$03/CF43 AD 4F 35 LDA $354F  [$7E:354F] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from 7E354F.
$03/CF46 0A ASL A A:00F8 X:0000 Y:0000 P:eNvMxdizc - x2 Targeting (to roll back)
$03/CF47 B0 03 BCS $03    [$CF4C] A:00F0 X:0000 Y:0000 P:eNvMxdizC - Branch if more than 03.
$03/CF4C AD 4F 35 LDA $354F  [$7E:354F] A:00F0 X:0000 Y:0000 P:eNvMxdizC - Load 7E354F.
$03/CF4F 20 5A 85 JSR $855A  [$03:855A] A:00F8 X:0000 Y:0000 P:eNvMxdizC - Jump to Subroutine
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/855A 3F F6 FE 13 AND $13FEF6,x[$13:FEF6] A:00F8 X:0000 Y:0000 P:eNvMxdizC - ???
$03/855E 60 RTS A:0078 X:0000 Y:0000 P:envMxdizC - Return
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/CF59 85 CE STA $CE    [$00:00CE] A:0000 X:0000 Y:0000 P:envMxdiZC - Store CE from A.
$03/CF5B A5 CE LDA $CE    [$00:00CE] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from CE.
$03/CF5D 10 05 BPL $05    [$CF64] A:0000 X:0000 Y:0000 P:envMxdiZC - Branch if plus to 03CF64.
$03/CF64 AA TAX A:0000 X:0000 Y:0000 P:envMxdiZC - Transfer A to X.
$03/CF65 BD 40 35 LDA $3540,x[$7E:3540] A:0000 X:0000 Y:0000 P:envMxdiZC - Load 7E3540 into A.
$03/CF68 F0 03 BEQ $03    [$CF6D] A:0000 X:0000 Y:0000 P:envMxdiZC - If 00 branch to 03CF6D.
--------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------
$03/CF6D A5 CE LDA $CE    [$00:00CE] A:0000 X:0000 Y:0000 P:envMxdiZC - Load CE into A.
$03/CF6F 20 73 B1 JSR $B173  [$03:B173] A:0000 X:0000 Y:0000 P:envMxdiZC - Jump to Subroutine (??)
$03/CF72 A0 7F 00 LDY #$007F A:0020 X:0000 Y:0000 P:envMxdizc - Load 7F into Y.
$03/CF75 B1 80 LDA ($80),y[$7E:207F] A:0020 X:0000 Y:007F P:envMxdizc - Load A (from 80?) which is Character's final byte, but is unknown.
$03/CF77 99 00 27 STA $2700,y[$7E:277F] A:0000 X:0000 Y:007F P:envMxdiZc -  Store A in Target's final byte?
$03/CF7A 88 DEY A:0000 X:0000 Y:007F P:envMxdiZc - -1 to Y.
$03/CF7B 10 F8 BPL $F8    [$CF75] A:0000 X:0000 Y:007E P:envMxdizc -It's a cleaning system, which will eventually put all of the character's data into the Targets data at 2700.
$03/CF7D AD 06 27 LDA $2706  [$7E:2706] A:0081 X:0000 Y:FFFF P:eNvMxdizc - Load Target's Status Byte 4.
$03/CF80 29 20 AND #$20 A:0000 X:0000 Y:FFFF P:envMxdiZc - Is it Wall?
$03/CF82 F0 05 BEQ $05    [$CF89] A:0000 X:0000 Y:FFFF P:envMxdiZc - Branch if 00 to 03CF89.
-----------------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------------
$03/CF89 4C 14 D0 JMP $D014  [$03:D014] A:0000 X:0000 Y:FFFF P:envMxdiZc - Jump to 03D014. (Just further in the same subroutine)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/D014 AD 03 27 LDA $2703  [$7E:2703] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load Target's Status Byte 1 into A.
$03/D017 29 C0 AND #$C0 A:0000 X:0000 Y:FFFF P:envMxdiZc - Is it Petrify or KO?
$03/D019 D0 0C BNE $0C    [$D027] A:0000 X:0000 Y:FFFF P:envMxdiZc - Branch if not equal to 03D027.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/D01B AD 05 27 LDA $2705  [$7E:2705] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load Target's Status Byte 3 into A.
$03/D01E 29 02 AND #$02 A:0000 X:0000 Y:FFFF P:envMxdiZc - Is it Jumping?
$03/D020 D0 21 BNE $21    [$D043] A:0000 X:0000 Y:FFFF P:envMxdiZc - If so branch to 03D043.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/D022 AD 06 27 LDA $2706  [$7E:2706] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load Target's Status Byte 4 into A.
$03/D025 10 22 BPL $22    [$D049] A:0000 X:0000 Y:FFFF P:envMxdiZc - If it is not Hiding branch to 03D049.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/D049 A9 02 LDA #$02 A:0000 X:0000 Y:FFFF P:envMxdiZc - Load 02 into A.
$03/D04B 8D FE 38 STA $38FE  [$7E:38FE] A:0002 X:0000 Y:FFFF P:envMxdizc - Store A in 7E38FE.
$03/D04E 8D FF 38 STA $38FF  [$7E:38FF] A:0002 X:0000 Y:FFFF P:envMxdizc - Store A in 7E38FF.
$03/D051 A9 00 LDA #$00 A:0002 X:0000 Y:FFFF P:envMxdizc - Load 00 into A.
$03/D053 8D 00 39 STA $3900  [$7E:3900] A:0000 X:0000 Y:FFFF P:envMxdiZc - Store A in 7E3900.
$03/D056 85 AA STA $AA    [$00:00AA] A:0000 X:0000 Y:FFFF P:envMxdiZc - Store A in AA.
$03/D058 AD 9D 28 LDA $289D  [$7E:289D] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load A in 7E289D.
$03/D05D AD 84 35 LDA $3584  [$7E:3584] A:0002 X:0000 Y:FFFF P:envMxdizc - Load A from 7E3584.
$03/D060 F0 0E BEQ $0E    [$D070] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load A from 7E3584.
$03/D070 06 A9 ASL $A9    [$00:00A9] A:0000 X:0000 Y:FFFF P:envMxdiZc - /2 A9
$03/D072 26 AA ROL $AA    [$00:00AA] A:0000 X:0000 Y:FFFF P:envMxdizc /2 AA
$03/D074 06 A9 ASL $A9    [$00:00A9] A:0000 X:0000 Y:FFFF P:envMxdiZc /2 A9
$03/D076 26 AA ROL $AA    [$00:00AA] A:0000 X:0000 Y:FFFF P:envMxdizc /2 AA
$03/D078 A6 A9 LDX $A9    [$00:00A9] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load A9 into A.
$03/D07A 8E 02 39 STX $3902  [$7E:3902] A:0000 X:0008 Y:FFFF P:envMxdizc - Store X in 7E3902.
$03/D07D 7B TDC A:0000 X:0008 Y:FFFF P:envMxdizc -  Transfer Direct Page.
$03/D07E AA TAX A:0000 X:0008 Y:FFFF P:envMxdiZc - Transfer A to X.
$03/D07F 86 A4 STX $A4    [$00:00A4] A:0000 X:0000 Y:FFFF P:envMxdiZc - Store X in A4.
$03/D081 86 A2 STX $A2    [$00:00A2] A:0000 X:0000 Y:FFFF P:envMxdiZc - Store X in A2.
$03/D083 A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load A from CD.
$03/D085 29 80 AND #$80 A:0000 X:0000 Y:FFFF P:envMxdiZc - Get rid of positive bits.
$03/D087 D0 0B BNE $0B    [$D094] A:0000 X:0000 Y:FFFF P:envMxdiZc - If not 00 branch to 03D094.
$03/D089 A5 CE LDA $CE    [$00:00CE] A:0000 X:0000 Y:FFFF P:envMxdiZc
$03/D08B 29 80 AND #$80 A:0000 X:0000 Y:FFFF P:envMxdiZc
$03/D08D D0 05 BNE $05    [$D094] A:0000 X:0000 Y:FFFF P:envMxdiZc
$03/D08F 8E 04 39 STX $3904  [$7E:3904] A:0000 X:0000 Y:FFFF P:envMxdiZc
$03/D092 80 07 BRA $07    [$D09B] A:0000 X:0000 Y:FFFF P:envMxdiZc - Branch to 03D09B.
------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------
$03/D09B A5 CE LDA $CE    [$00:00CE] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load A from CE.
$03/D09D 10 05 BPL $05    [$D0A4] A:0000 X:0000 Y:FFFF P:envMxdiZc - Branch if not negative to 03D0A4.
----------------------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/D0A4 85 CF STA $CF    [$00:00CF] A:0000 X:0000 Y:FFFF P:envMxdiZc - Store A in CF.
$03/D0A6 20 89 84 JSR $8489  [$03:8489] A:0000 X:0000 Y:FFFF P:envMxdiZc - Jump to Subroutine (Preparation?)
$03/D0A9 AD 23 27 LDA $2723  [$7E:2723] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load Target's Magical Evasion.
$03/D0AC 8D FA 38 STA $38FA  [$7E:38FA] A:000E X:0000 Y:FFFF P:envMxdizc - Store A in 7E38FA.
$03/D0AF AD 03 27 LDA $2703  [$7E:2703] A:000E X:0000 Y:FFFF P:envMxdizc - Load Target's Status Byte 1.
$03/D0B2 29 02 AND #$02 A:0000 X:0000 Y:FFFF P:envMxdiZc - Is it Darkness?
$03/D0B4 F0 03 BEQ $03    [$D0B9] A:0000 X:0000 Y:FFFF P:envMxdiZc - If not branch to 03D0B9.
---------------------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------------
$03/D0B9 A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load CD into A.
$03/D0BB 29 7F AND #$7F A:0000 X:0000 Y:FFFF P:envMxdiZc - Get rid of negative bits.
$03/D0BD D0 19 BNE $19    [$D0D8] A:0000 X:0000 Y:FFFF P:envMxdiZc - Branch if not 00 to 03D0D8.
$03/D0BF AD FA 38 LDA $38FA  [$7E:38FA] A:0000 X:0000 Y:FFFF P:envMxdiZc - Load Magic Evasion into A.
$03/D0C2 85 DF STA $DF    [$00:00DF] A:000E X:0000 Y:FFFF P:envMxdizc - Store A in DF.
$03/D0C4 A9 05 LDA #$05 A:000E X:0000 Y:FFFF P:envMxdizc - Load 05 into A.
$03/D0C6 85 E1 STA $E1    [$00:00E1] A:0005 X:0000 Y:FFFF P:envMxdizc - Store A in E1.
$03/D0C8 20 E0 83 JSR $83E0  [$03:83E0] A:0005 X:0000 Y:FFFF P:envMxdizc - Jump to Subroutine (Cleaning?)
$03/D0CB 46 E4 LSR $E4    [$00:00E4] A:0000 X:0000 Y:FFFF P:envMxdiZc - /2 E4.
$03/D0CD 66 E3 ROR $E3    [$00:00E3] A:0000 X:0000 Y:FFFF P:envMxdiZc /2 E3.
$03/D0CF 46 E4 LSR $E4    [$00:00E4] A:0000 X:0000 Y:FFFF P:envMxdizc /2 E4
$03/D0D1 66 E3 ROR $E3    [$00:00E3] A:0000 X:0000 Y:FFFF P:envMxdiZc /2 E3
$03/D0D3 A5 E3 LDA $E3    [$00:00E3] A:0000 X:0000 Y:FFFF P:envMxdizC Load E3 into A.
$03/D0D5 8D FA 38 STA $38FA  [$7E:38FA] A:0011 X:0000 Y:FFFF P:envMxdizC - Store A in 7E38FA.
$03/D0D8 AD 22 27 LDA $2722  [$7E:2722] A:0011 X:0000 Y:FFFF P:envMxdizC - Load Target's Magical Defense Multiplier into A.
$03/D0DB 8D FB 38 STA $38FB  [$7E:38FB] A:0003 X:0000 Y:FFFF P:envMxdizC - Store A in 7E38FB.
$03/D0DE F0 0C BEQ $0C    [$D0EC] A:0003 X:0000 Y:FFFF P:envMxdizC - If 00 branch to 03D0EC.
$03/D0E0 AD 9F 28 LDA $289F  [$7E:289F] A:0003 X:0000 Y:FFFF P:envMxdizC - Load 7E289F into A.
$03/D0E3 29 80 AND #$80 A:0002 X:0000 Y:FFFF P:envMxdizC - Remove positive bits.
$03/D0E5 F0 05 BEQ $05    [$D0EC] A:0000 X:0000 Y:FFFF P:envMxdiZC - If 00 branch to 03D0EC.
------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------
$03/D0EC AD 03 27 LDA $2703  [$7E:2703] A:0000 X:0000 Y:FFFF P:envMxdiZC - Load Target's Status Byte 1.
$03/D0EF 29 20 AND #$20 A:0000 X:0000 Y:FFFF P:envMxdiZC - Is it Toad?
$03/D0F1 D0 07 BNE $07    [$D0FA] A:0000 X:0000 Y:FFFF P:envMxdiZC - If so branch to 03D0FA.
$03/D0F3 AD 05 27 LDA $2705  [$7E:2705] A:0000 X:0000 Y:FFFF P:envMxdiZC - Load Target's Status Byte 3.
$03/D0F6 29 08 AND #$08 A:0000 X:0000 Y:FFFF P:envMxdiZC - Is it Charging?
$03/D0F8 F0 03 BEQ $03    [$D0FD] A:0000 X:0000 Y:FFFF P:envMxdiZC - If not branch to 03D0FD.
-------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------
$03/D0FD A5 CE LDA $CE    [$00:00CE] A:0000 X:0000 Y:FFFF P:envMxdiZC - Load CE into A.
$03/D0FF 10 0F BPL $0F    [$D110] A:0000 X:0000 Y:FFFF P:envMxdiZC - If not negative branch to 03D110
---------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------
$03/D110 20 97 C9 JSR $C997  [$03:C997] A:0000 X:0000 Y:FFFF P:envMxdiZC - Jump to Subroutine (RNG dealings)
$03/D113 A5 CD LDA $CD    [$00:00CD] A:005E X:0000 Y:0000 P:envMxdiZC - Load CD into A.
$03/D115 29 80 AND #$80 A:0000 X:0000 Y:0000 P:envMxdiZC - Get rid of positive bits.
$03/D117 D0 0C BNE $0C    [$D125] A:0000 X:0000 Y:0000 P:envMxdiZC - If not 00 branch to 03D125.
$03/D119 A5 CE LDA $CE    [$00:00CE] A:0000 X:0000 Y:0000 P:envMxdiZC - Load CE into A.
$03/D11B 29 80 AND #$80 A:0000 X:0000 Y:0000 P:envMxdiZC - Get rid of positive bits.
$03/D11D D0 06 BNE $06    [$D125] A:0000 X:0000 Y:0000 P:envMxdiZC - If not 00 branch to 03D125.
$03/D11F 38 SEC A:0000 X:0000 Y:0000 P:envMxdiZC - Set Carry Flag.
$03/D120 AD 51 35 LDA $3551  [$7E:3551] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from 7E3551.
$03/D123 80 11 BRA $11    [$D136] A:0008 X:0000 Y:0000 P:envMxdizC - Branch to 03D136.
------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------
$03/D136 8D FC 38 STA $38FC  [$7E:38FC] A:0008 X:0000 Y:0000 P:envMxdizC - Store A in 7E38FC.
$03/D139 F0 02 BEQ $02    [$D13D] A:0008 X:0000 Y:0000 P:envMxdizC - If 00 branch to 03D13D.
$03/D13B B0 25 BCS $25    [$D162] A:0008 X:0000 Y:0000 P:envMxdizC - If 00 or above? branch to 03D162
-------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------
$03/D162 A5 CE LDA $CE    [$00:00CE] A:0008 X:0000 Y:0000 P:envMxdizC - Load CE into A.
$03/D164 10 15 BPL $15    [$D17B] A:0000 X:0000 Y:0000 P:envMxdiZC - If positive branch to 03D17B.
-------------------------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/D17B AD 84 35 LDA $3584  [$7E:3584] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from 7E3584.
$03/D17E F0 0F BEQ $0F    [$D18F] A:0000 X:0000 Y:0000 P:envMxdiZC - If 00 branch to 03D18F.
$03/D192 29 7F AND #$7F A:0002 X:0000 Y:0000 P:envMxdizC - Get rid of negative bits.
$03/D194 C9 7E CMP #$7E A:0002 X:0000 Y:0000 P:envMxdizC - Is it 7E?
$03/D196 F0 0C BEQ $0C    [$D1A4] A:0002 X:0000 Y:0000 P:eNvMxdizc - If so branch to 03D1A4.
$03/D198 C9 7F CMP #$7F A:0002 X:0000 Y:0000 P:eNvMxdizc - Is it 7F?
$03/D19A D0 0E BNE $0E    [$D1AA] A:0002 X:0000 Y:0000 P:eNvMxdizc - If not branch to 03D1AA.
---------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------
$03/D1AA 48 PHA A:0002 X:0000 Y:0000 P:eNvMxdizc - Push A.
$03/D1AB A5 CE LDA $CE    [$00:00CE] A:0002 X:0000 Y:0000 P:eNvMxdizc - Load A from CE.
$03/D1AD C5 CD CMP $CD    [$00:00CD] A:0000 X:0000 Y:0000 P:envMxdiZc - Is it the value that is in CD?
$03/D1AF D0 0C BNE $0C    [$D1BD] A:0000 X:0000 Y:0000 P:envMxdiZC - If not branch to 03D1BD.
$03/D1B1 AD 8B 26 LDA $268B  [$7E:268B] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from Caster's Current MP
$03/D1B4 8D 0B 27 STA $270B  [$7E:270B] A:00E7 X:0000 Y:0000 P:eNvMxdizC - Store it in Target's Current MP?
$03/D1B7 AD 8C 26 LDA $268C  [$7E:268C] A:00E7 X:0000 Y:0000 P:eNvMxdizC - Load A from Caster's Current MP Byte 2.
$03/D1BA 8D 0C 27 STA $270C  [$7E:270C] A:0003 X:0000 Y:0000 P:envMxdizC - Store it in Target's Current MP Byte 2.
$03/D1BD 68 PLA A:0003 X:0000 Y:0000 P:envMxdizC - Pull A.
$03/D1BE 20 A7 D2 JSR $D2A7  [$03:D2A7] A:0002 X:0000 Y:0000 P:envMxdizC - Jump to Subroutine (Direct Spell Subroutine Starting Point)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
(Important! This is how the game generates its Spell Offsets!)

$03/D2A7 0A ASL A A:0002 X:0000 Y:0000 P:envMxdizC - x2 A.
$03/D2A8 AA TAX A:0004 X:0000 Y:0000 P:envMxdizc - Transfer A to X.
$03/D2A9 BF 91 E0 03 LDA $03E091,x[$03:E095] A:0004 X:0004 Y:0000 P:envMxdizc - Load A from 03E091 +X
$03/D2AD 85 80 STA $80    [$00:0080] A:001C X:0004 Y:0000 P:envMxdizc - Store A in 80.
$03/D2AF BF 92 E0 03 LDA $03E092,x[$03:E096] A:001C X:0004 Y:0000 P:envMxdizc - Load A from 03E092 +X
$03/D2B3 85 81 STA $81    [$00:0081] A:00D4 X:0004 Y:0000 P:eNvMxdizc - Store A in 81.
$03/D2B5 A9 03 LDA #$03 A:00D4 X:0004 Y:0000 P:eNvMxdizc - Load 03 into A.
$03/D2B7 85 82 STA $82    [$00:0082] A:0003 X:0004 Y:0000 P:envMxdizc
$03/D2B9 DC 80 00 JML [$0080][$03:D41C] A:0003 X:0004 Y:0000 P:envMxdizc - Jump Long to Specific Spell Subroutines.

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/E33C A9 CE LDA #$CE A:0080 X:0680 Y:001A P:eNvMxdizC - Load A from CE.
$03/E33E 8D C5 33 STA $33C5  [$7E:33C5] A:00CE X:0680 Y:001A P:eNvMxdizC - Store A in 7E33C5.
-----------------------------------------------------------------------------------------------------------------------------
$03/E341 A9 0A LDA #$0A A:000F X:00C0 Y:0030 P:envMxdizC - Load 0A into A.
$03/E343 8D C8 34 STA $34C8  [$7E:34C8] A:000A X:00C0 Y:0030 P:envMxdizC - Store in 7E34C8.
$03/E346 A9 10 LDA #$10 A:000A X:00C0 Y:0030 P:envMxdizC - Load 10 into A.
$03/E348 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:00C0 Y:0030 P:envMxdizC - Store in 7E34C7.
$03/E34B 60 RTS A:0010 X:00C0 Y:0030 P:envMxdizC - Return
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/E050 C9 3E CMP #$3E A:0033 X:0000 Y:0000 P:eNvMxdizc - Is it Asura?
$03/E052 90 1A BCC $1A    [$E06E] A:0033 X:0000 Y:0000 P:eNvMxdizc - If it is less than Asura branch to 03E06E
------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------
$03/E06E 38 SEC A:0033 X:0000 Y:0000 P:eNvMxdizc - Set Carry Flag
$03/E06F E9 31 SBC #$31 A:0033 X:0000 Y:0000 P:eNvMxdizC - Subtract 31 from A.
$03/E071 18 CLC A:0002 X:0000 Y:0000 P:envMxdizC - Clear Carry Flag.
$03/E072 69 4D ADC #$4D A:0002 X:0000 Y:0000 P:envMxdizc - Add 4D to A.
$03/E074 8D D2 26 STA $26D2  [$7E:26D2] A:004F X:0000 Y:0000 P:envMxdizc - Store A in Next Action to Take.
$03/E077 EE 84 35 INC $3584  [$7E:3584] A:004F X:0000 Y:0000 P:envMxdizc - +1 to 7E3584.
$03/E07A 60 RTS A:004F X:0000 Y:0000 P:envMxdizc - Return to 03CD33.







Note:
Another mystery solved!

Code for Command Starting Graphics...
Code: [Select]
00-BF - Assigned by Spell.

C0 - Weapon Swing
C1 - None
C2 - White Magic
C3 - Black Magic
C4 - Summon Magic (Also includes the party vanishing)
C5 - Dark Wave
C6 - Character Jumps into the Air
C7 - Character does their Special Pose. (Recall)
C8 - Spell Pose is Held as White Magic light shows (Sing)
C9 - Run from battle (Hide)
CA - Just normal Spell/Item Use pose. (Salve)
CB - Pray
CC - Special Pose - Weapon Attack (Aim)
CD - Spell Pose is Held while attack happens (Focus)
CE - Kick
CF - Gird
D0 - Twincasting
D1 - Boast
D2 - Cry
D3 - Cover
D4 - Peep
D5 - Crash (Just a normal spell casting pose)
D6 - Dart (When used outside of its normal routine, shows a hand stuck in the foe as used in Fight without a weapon)
D7 - Sneak
D8 - Ninja
D9 - Regen
DA - Change
DB - Parry
DC - Character runs all the way from one side of the screen to the other, back to the front. ??
DD - Normal Spell Casting Pose.
DE - Return from Jump
DF - Second part of Focus (Attack)


I am still not finished, there's still a bit more to find and a lot of this is copy-pasted from my Salve Routine. I am not sure how MP is handled or Accuracy, or how Items with magic attached to them is calculated. As what makes the special magic graphics appear, that I have found and can go back through my earlier routine searches and point them out now that I know what they are.

 :edit: 1/10/14 - Added the branch off of what occurs when an enemy uses Retreat.
« Last Edit: January 10, 2014, 02:46:23 PM by Grimoire LD »

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #99 on: October 08, 2013, 06:57:08 PM »
 I've found the Magic Weapons section! It is very small and all of the information I had hoped to find was plainly there. (For full information refer to the Item Routine post as that is where it is stored)

So now open to us is the ability to decide what powers the Weapon Spell. Default it is Magic Power (Weapon) + Spell Power of Spell.

$03/EBDE   BF 70 90 0F   LDA $0F9070,x[$0F:9077]   A:0007   X:0007   Y:0000   P:envMxdizc - Load A from 0F9070+X. (Spell's Power as designated by weapon)
$03/EBE2   8D EC 38   STA $38EC  [$7E:38EC]   A:0001   X:0007   Y:0000   P:envMxdizc - Store A in 7E38EC. - Store A in Spell Power.

To those who were never comfortable with this you can change or null both of these values (with EA's) to have the weapon use the ordinary magic routines, using Wisdom or Will dependent on the spell's location on the list.

Though more importantly is the Accuracy Exception. This took a bit of time to track down, and I imagine its likely in other attack Commands as well.
$03/EBE5   EE EB 38   INC $38EB  [$7E:38EB]   A:0001   X:0007   Y:0000   P:envMxdizc - +1 to 7E38EB. - +1 to Ignore Accuracy. (Thereby ignoring the accuracy of the weapon spell)

From preliminary testing it seems that it works for any action taken. Fighting or otherwise. Now I have to wonder why they didn't just use that for Aim rather than a rather clumsy way of making the value FF?

That said, I'm not sure how the Slumber Blade worked previously... it is the only Weapon Spell Effect that did not seem 100%, but clearly the Ignore Accuracy byte was enabled normally. I think the team must not have been aware of this byte, as the Weapon Spells clearly were not meant to be 100% seeing as they have Accuracy that are in all different amounts.

Now I wonder how difficult it would be to make the Fight Routine read the Weapon Spells and cast them on a random basis...
« Last Edit: October 08, 2013, 07:18:03 PM by Grimoire LD »

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells & Commands Disassembly)
« Reply #100 on: October 08, 2013, 07:41:42 PM »
Quote
Now I wonder how difficult it would be to make the Fight Routine read the Weapon Spells and cast them on a random basis...

I was just thinking about that the other day. You'd definitely have to write some custom code... I guess it would look like (in english):
Check if spell is assigned
If not, return
Generate random #
Check if # is (in desired range)
If not, return
Check/store assigned spell
Jump to magic routine

... something like that?

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells & Commands Disassembly)
« Reply #101 on: October 08, 2013, 08:11:47 PM »
Quote
Now I wonder how difficult it would be to make the Fight Routine read the Weapon Spells and cast them on a random basis...

I was just thinking about that the other day. You'd definitely have to write some custom code... I guess it would look like (in english):
Check if spell is assigned
If not, return
Generate random #
Check if # is (in desired range)
If not, return
Check/store assigned spell
Jump to magic routine

... something like that?

It seems so simple in theory. I've already seen that the game is capable of showing one effect, then another, whether that effect be Dark Wave which transitions into a different graphic or what have you.

What you have there seems perfect for that idea.

Check if spell is assigned
B1 80   LDA ($80),y[$7E:32E9]   A:0001   X:0007   Y:0003   P:envMxdizc - Load A from Character's Hand Data - Spell

If not, return
BEQ XX - Branch if 00 to elsewhere.       

Generate random #
20 93 85   JSR $8593  [$03:8593]   A:0000   X:0010   Y:0000   P:envMxdiZc - Jump to Subroutine (Generate Random Number.
Check if # is (in desired range)
CMP 34 - Did it land below 34?
If not, return
BNE XX - If not, branch to elsewhere.
Check/store assigned spell
B1 80   LDA ($80),y[$7E:32E9]   A:0001   X:0007   Y:0003   P:envMxdizc - Load A from Character's Hand Data - Spell

Jump to magic routine
20 3E CD   JSR $CD3E  [$03:CD3E]   A:0029   X:0054   Y:0000   P:envMxdizc - Jump to Subroutine (Magic Call)

In theory it looks so simple. But the only problem would be, is the Spell over-riding the Normal Attack then? Only trouble is where could this be put and drawn from? When should it occur in the routine and most importantly and what will it be replacing in the routine itself?

chillyfeez

  • FF4 Hacker
  • *
  • Posts: 1,285
  • Gender: Male
  • Go ahead, ask me about Angel Feathers!
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells & Commands Disassembly)
« Reply #102 on: October 08, 2013, 09:33:28 PM »
Ideally, I guess the player would want the spell to occur in addition to the attack damage. I mean, if I just want to cast the spell, I'll just use the weapon as an item. But I sincerely doubt that the game is capable of doing that - there is no other instance of a single character attack that generates multiple damage calls.
You could (I think):
  • Store zero in 00A2-00A3 (end damage result location)
  • Check for weapon spell
  • If none, jump down to regular attack routine
  • RNG
  • Check if random number is within range
  • If not, jump to regular attack routine
  • Load weapon spell
  • Jump to spell subroutine (which will return here when finished)
  • Regular attack routine
  • Add attack result to 00A2-00A3

In theory, I think this would cast the spell (if luck deems it so), then attack, and combine the resultant damage. Setting A2-A3 to zero first would ensure that if no spell is cast, only the attack's damage would be applied (instead of, say, being added to residual values from whatever the last attack was).

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells & Commands Disassembly)
« Reply #103 on: October 08, 2013, 10:21:30 PM »
That is quite the theory. I can see no problem with it, only I find it a bit difficult to work through in our current Attack and Magic routines. Using Peep and turning it into a composite command (maybe a "Fight" command especially for Mages only, that have a chance to use these Weapon Spells when they attack.)

This would ideally be stacked with a "Weapon Charge" or "Weapon Decrement" hack, so as to make the choice a bit more tempting. I can see utilizing the Fight Command to full, and then something that loads the spell into the next action to take... it is quite a difficult theory to utilize, at least with thoughts of success.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells & Commands Disassembly)
« Reply #104 on: October 09, 2013, 02:32:59 PM »
Here Square, let me help you out a little with this...

Code: [Select]
$03/E153 A9 0D LDA #$0D A:0003 X:0028 Y:0000 P:envMxdizc - Load Peep into A.
$03/E155 8D D2 26 STA $26D2  [$7E:26D2] A:000D X:0028 Y:0000 P:envMxdizc  - Store A in Next Action to Take
$03/E158 9C C4 33 STZ $33C4  [$7E:33C4] A:000D X:0028 Y:0000 P:envMxdizc - Store Zero in 7E33C4.
$03/E15B 4C 3E CD JMP $CD3E  [$03:CD3E] A:000D X:0028 Y:0000 P:envMxdizc - Jump to Magic Call.

And Done!

That accomplishes the Peep Command in only 12 Bytes. When the normal command is...

94 Bytes. That frees up 82 Bytes for "Airship" Or whatever the "crash the game" skill was supposed to be. Or should it be a Mechanize skill that looks for the Third Weapon Property to work? (As all Hammers have) That will transform the Foe into a Machine? Or maybe he should get a variation on his FFIV DS skill that would turn his weapon into an Elemental, using the system laid down by Salve that looks for the first reference to an Elemental-Damage Item, and stores that in Cid's Elemental Attack.

And if we do go the Airship Route, what would it exactly do? From the sound of things it may have been intended to be an Airstrike of some sort. (After all Cid did say he had the Enterprise on Remote Control) Non-Elemental Damage on all enemies using Strength as a base, maybe? The possibilities in this regard are literally endless. (Or within 82 Bytes worth)

So please, feel free to give your own thoughts on what should be done with the freed up space left by Peep?