øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.msg19272e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index7c6f.htmldelayedslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.75e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/index7c6f.html.zxQg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ`bºÁOKtext/htmlISO-8859-1gzip@øÕºÁÿÿÿÿÿÿÿÿÑHTue, 10 Mar 2020 05:05:41 GMT0ó°° ®0®P®€§²ð®Ng^ÿÿÿÿÿÿÿÿ[ɺÁ 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 78652 times)

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #75 on: September 27, 2013, 04:40:24 PM »
Part of Damage Routine

Code: [Select]
$03/C924 AD 83 26 LDA $2683  [$7E:2683] A:0004 X:0000 Y:0000 P:envMxdizc - Load Caster's Status Byte 1.
$03/C927 29 30 AND #$30 A:0000 X:0000 Y:0000 P:envMxdiZc - Are they inflicted with Small or Toad?
$03/C929 D0 6B BNE $6B    [$C996] A:0000 X:0000 Y:0000 P:envMxdiZc - If so branch to 03C996.
$03/C92B A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from CD.
$03/C92D 20 89 84 JSR $8489  [$03:8489] A:0000 X:0000 Y:0000 P:envMxdiZc - Jump to Subroutine (Preparation? Subroutine)
$03/C930 18 CLC A:0000 X:0000 Y:0000 P:envMxdiZc - Clear Carry Flag
$03/C931 AD 32 35 LDA $3532  [$7E:3532] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from 7E3532
$03/C934 69 21 ADC #$21 A:0000 X:0000 Y:0000 P:envMxdiZc - Add 21 to A.
$03/C936 85 A9 STA $A9    [$00:00A9] A:0021 X:0000 Y:0000 P:envMxdizc - Store A in A9.
$03/C938 AD 33 35 LDA $3533  [$7E:3533] A:0021 X:0000 Y:0000 P:envMxdizc - Load A from 7E3553.
$03/C93B 69 00 ADC #$00 A:0000 X:0000 Y:0000 P:envMxdiZc - Add 00 into A.
$03/C93D 85 AA STA $AA    [$00:00AA] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in AA.
$03/C93F 7B TDC A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer Direct Page.
$03/C940 A8 TAY A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to Y.
$03/C941 84 AB STY $AB    [$00:00AB] A:0000 X:0000 Y:0000 P:envMxdiZc - Store Y in a AB.
$03/C943 8D E3 38 STA $38E3  [$7E:38E3] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E38E3.
$03/C946 A6 A9 LDX $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from A9.
$03/C948 BD 86 27 LDA $2786,x[$7E:27A7] A:0000 X:0021 Y:0000 P:envMxdizc - Load A from 7E27A7. (Equip Index?)
$03/C94B 29 40 AND #$40 A:0015 X:0021 Y:0000 P:envMxdizc - If not 40 or none of the bits align change to lowered number
$03/C94D F0 03 BEQ $03    [$C952] A:0000 X:0021 Y:0000 P:envMxdiZc - If 00 branch to 03C94D.
--------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------
$03/C952 BD 91 27 LDA $2791,x[$7E:27B2] A:0000 X:0021 Y:0000 P:envMxdiZc - Load A from 7E27B2.
$03/C955 29 40 AND #$40 A:0015 X:0021 Y:0000 P:envMxdizc - If not 40 (as above)
$03/C957 F0 09 BEQ $09    [$C962] A:0000 X:0021 Y:0000 P:envMxdiZc - Branch if 00 to 03C962.
---------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------
$03/C962 A5 CD LDA $CD    [$00:00CD] A:0000 X:0021 Y:0000 P:envMxdiZc - Load A from CD.
$03/C964 20 7E 84 JSR $847E  [$03:847E] A:0000 X:0021 Y:0000 P:envMxdiZc - Jump to Subroutine (Multiplying x6 Subroutine)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/847E 0A ASL A A:0000 X:0021 Y:0000 P:envMxdiZc - x2 to A.
$03/847F 0A ASL A A:0000 X:0021 Y:0000 P:envMxdiZc - x2 to A
$03/8480 0A ASL A A:0000 X:0021 Y:0000 P:envMxdiZc - x2 to A
$03/8481 60 RTS A:0000 X:0021 Y:0000 P:envMxdiZc - Return
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/C967 AA TAX A:0000 X:0021 Y:0000 P:envMxdiZc - Transfer A to X.
$03/C968 98 TYA A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer Y to A.
$03/C969 F0 2B BEQ $2B    [$C996] A:0000 X:0000 Y:0000 P:envMxdiZc - If 00 branch to 03C996.
------------------------------------------------------------------------------------------------------------------
(Arrow Decrementing Subroutine starts here!)
$03/C96B 88 DEY A:0001 X:0008 Y:0001 P:envMxdizc - -1 to Y.
$03/C96C F0 04 BEQ $04    [$C972] A:0001 X:0008 Y:0000 P:envMxdiZc - If not 00 branch to 03C972
--------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------
$03/C972 38 SEC A:0001 X:0008 Y:0000 P:envMxdiZc - Set Carry Flag.
$03/C973 BD DC 32 LDA $32DC,x[$7E:32E4] A:0001 X:0008 Y:0000 P:envMxdiZC - Load A from Right Hand Quantity.
$03/C976 E9 01 SBC #$01 A:0032 X:0008 Y:0000 P:envMxdizC - -1 to A. (-1 Arrow)
$03/C978 D0 0E BNE $0E    [$C988] A:0031 X:0008 Y:0000 P:envMxdizC  - If not 00 branch to 03C988.
----------------------------------------------------------------------------------------------------------
$03/C97A A5 CD LDA $CD    [$00:00CD] A:0000 X:0008 Y:0000 P:envMxdiZC - Load A from CD.
$03/C97C AA TAX A:0001 X:0008 Y:0000 P:envMxdizC - Transfer A to X.
$03/C97D BD DC 38 LDA $38DC,x[$7E:38DD] A:0001 X:0001 Y:0000 P:envMxdizC - Load A from 7E38DC.
$03/C980 1A INC A A:0000 X:0001 Y:0000 P:envMxdiZC - +1 to A.
$03/C981 05 AB ORA $AB    [$00:00AB] A:0001 X:0001 Y:0000 P:envMxdizC - Check it against address AB.
$03/C983 9D DC 38 STA $38DC,x[$7E:38DD] A:0001 X:0001 Y:0000 P:envMxdizC - Store A in 7E38DD.
$03/C986 80 03 BRA $03    [$C98B] A:0001 X:0001 Y:0000 P:envMxdizC - Branch to 03C98B
-------------------------------------------------------------------------------------------------------------
$03/C988 9D DC 32 STA $32DC,x[$7E:32E4] A:0031 X:0008 Y:0000 P:envMxdizC - Store A in 7E32E4.
$03/C98B EE E1 38 INC $38E1  [$7E:38E1] A:0031 X:0008 Y:0000 P:envMxdizC - +1 to 7E38E1.
$03/C98E A5 CD LDA $CD    [$00:00CD] A:0031 X:0008 Y:0000 P:envMxdizC - Load A from CD.
$03/C990 8D 75 39 STA $3975  [$7E:3975] A:0001 X:0008 Y:0000 P:envMxdizC - Store A in 7E3975
$03/C993 20 08 9E JSR $9E08  [$03:9E08] A:0001 X:0008 Y:0000 P:envMxdizC - Jump to Subroutine.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/9E08 AD 75 39 LDA $3975  [$7E:3975] A:0001 X:0008 Y:0000 P:envMxdizC - Load A from 7E3975.
$03/9E0B 20 7E 84 JSR $847E  [$03:847E] A:0001 X:0008 Y:0000 P:envMxdizC - Jump to Subroutine. (Multiplying A 3 times. )
$03/9E0E A8 TAY A:0008 X:0008 Y:0000 P:envMxdizc - Transfer A to Y
$03/9E0F A6 A6 LDX $A6    [$00:00A6] A:0008 X:0008 Y:0008 P:envMxdizc - Load X from A6.
$03/9E11 B9 DB 32 LDA $32DB,y[$7E:32E3] A:0008 X:0080 Y:0008 P:envMxdizc - Load A from Right Hand Data.
$03/9E14 9D 33 20 STA $2033,x[$7E:20B3] A:0054 X:0080 Y:0008 P:envMxdizc - Store A in Character Data's Right Hand Data.
$03/9E17 B9 DC 32 LDA $32DC,y[$7E:32E4] A:0054 X:0080 Y:0008 P:envMxdizc - Load A from Right Hand Quantity.
$03/9E1A 9D 34 20 STA $2034,x[$7E:20B4] A:0031 X:0080 Y:0008 P:envMxdizc - Store A in Character Data's Right Hand Quantity.
$03/9E1D B9 DF 32 LDA $32DF,y[$7E:32E7] A:0031 X:0080 Y:0008 P:envMxdizc - Load A from Left Hand Data.
$03/9E20 9D 35 20 STA $2035,x[$7E:20B5] A:004D X:0080 Y:0008 P:envMxdizc - Store A in Character Data's Left Hand.
$03/9E23 B9 E0 32 LDA $32E0,y[$7E:32E8] A:004D X:0080 Y:0008 P:envMxdizc - Load A from Left Hand Quantity.
$03/9E26 9D 36 20 STA $2036,x[$7E:20B6] A:0001 X:0080 Y:0008 P:envMxdizc - Store A in Character's Left Hand Quantity.
$03/9E29 60 RTS A:0001 X:0080 Y:0008 P:envMxdizc - Return
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
----------------------------------------------------------------------------------------------------------------------
$03/C996 60 RTS A:0000 X:0000 Y:0000 P:envMxdiZc - Return

This is Very Important the code revolving around Arrows is included within, including how to respond where there's 1 arrow left. The game sets up a catch for this. It is not a glitch but a programmed facet that there is 1 arrow until that character's next turn comes around again. There's a number of rather useless bytes around that special catch that can be replaced. If we can just make a JSR to the proper "get rid of item and quantity" code that takes place when their turn arrives we might be able to fix that abominable glitch.

Code: [Select]
$03/C997 9C FD 38 STZ $38FD  [$7E:38FD] A:0002 X:0001 Y:0003 P:envMxdizC - Store Zero in 7E38FD
$03/C99A AD FB 38 LDA $38FB  [$7E:38FB] A:0002 X:0001 Y:0003 P:envMxdizC - Load A from 7E38FB.
$03/C99D F0 0F BEQ $0F    [$C9AE] A:0002 X:0001 Y:0003 P:envMxdizC - If 00 branch to 03C9AE
$03/C99F A8 TAY A:0002 X:0001 Y:0003 P:envMxdizC - Transfer A to Y.
--------------------------------------------------------------(Looping Point)-------------------------------------------
$03/C9A0 20 8B 85 JSR $858B  [$03:858B] A:0002 X:0001 Y:0002 P:envMxdizC - Jump to Subroutine (Random Number Generator)
$03/C9A3 CD FA 38 CMP $38FA  [$7E:38FA] A:0004 X:0000 Y:0002 P:envMxdizc - Does the Value in A match the Value in 7E38FA?
$03/C9A6 B0 03 BCS $03    [$C9AB] A:0004 X:0000 Y:0002 P:eNvMxdizc - If so branch to 03C9AB
$03/C9A8 EE FD 38 INC $38FD  [$7E:38FD] A:0004 X:0000 Y:0002 P:eNvMxdizc - +1 to 7E38FD.
$03/C9AB 88 DEY A:0004 X:0000 Y:0002 P:envMxdizc -1 to Y.
$03/C9AC D0 F2 BNE $F2    [$C9A0] A:0004 X:0000 Y:0001 P:envMxdizc - If not 00 loop back to 03C9A0
$03/C9AE 60 RTS A:0021 X:0000 Y:0000 P:envMxdiZc - Return

Code: [Select]
$03/CA72 85 A9 STA $A9    [$00:00A9] A:0080 X:0062 Y:0000 P:eNvMxdizc
$03/CA74 10 05 BPL $05    [$CA7B] A:0080 X:0062 Y:0000 P:eNvMxdizc
$03/CA76 29 7F AND #$7F A:0080 X:0062 Y:0000 P:eNvMxdizc
$03/CA78 18 CLC A:0000 X:0062 Y:0000 P:envMxdiZc
$03/CA79 69 05 ADC #$05 A:0000 X:0062 Y:0000 P:envMxdiZc
$03/CA7B 0A ASL A A:0005 X:0062 Y:0000 P:envMxdizc
$03/CA7C AA TAX A:000A X:0062 Y:0000 P:envMxdizc
$03/CA7D 60 RTS A:000A X:000A Y:0000 P:envMxdizc

Code: [Select]
$03/CA7E C2 20 REP #$20 A:00F8 X:0001 Y:0000 P:envMxdiZC - Reset Status Processor?
$03/CA80 7B TDC A:00F8 X:0001 Y:0000 P:envmxdiZC - Transfer Direct Page to Accumulator?
$03/CA81 AA TAX A:0000 X:0001 Y:0000 P:envmxdiZC - Transfer A to X
$03/CA82 86 A9 STX $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envmxdiZC - Store X in A9.
$03/CA84 A8 TAY A:0000 X:0000 Y:0000 P:envmxdiZC - Transfer A to Y
$03/CA85 98 TYA A:0000 X:0000 Y:0000 P:envmxdiZC - Transfer Y to A (Sure, why not?)
$03/CA86 4A LSR A A:0000 X:0000 Y:0000 P:envmxdiZC - Divide A by 2 (Now we're talking!)
$03/CA87 AA TAX A:0000 X:0000 Y:0000 P:envmxdiZc - Transfer A to X (Eh...)
$03/CA88 BD 40 35 LDA $3540,x[$7E:3540] A:0000 X:0000 Y:0000 P:envmxdiZc - Load A from 7E3540.
$03/CA8B 29 FF 00 AND #$00FF A:0100 X:0000 Y:0000 P:envmxdizc - Not really sure. Possibly saying to load A from 0xFF
$03/CA8E F0 03 BEQ $03    [$CA93] A:0000 X:0000 Y:0000 P:envmxdiZc - I see no way to pass it.
$03/CA93 A6 A9 LDX $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envmxdiZc - Load X from A9.
$03/CA95 B9 D4 34 LDA $34D4,y[$7E:34D4] A:0000 X:0000 Y:0000 P:envmxdiZc - Load A from 7E34D4 (Healing/Damage)
$03/CA98 29 00 40 AND #$4000 A:0005 X:0000 Y:0000 P:envmxdizc - (No idea)
$03/CA9B F0 11 BEQ $11    [$CAAE] A:0000 X:0000 Y:0000 P:envmxdiZc - Another unpassable check?
$03/CAAE B9 D4 34 LDA $34D4,y[$7E:34D4] A:0000 X:0000 Y:0000 P:envmxdiZc - Load A from 7E34D4 (Healing/Damage)
$03/CAB1 10 11 BPL $11    [$CAC4] A:0005 X:0000 Y:0000 P:envmxdizc - Branch if positive and go to 7ECAC4.
-------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------
$03/CAC4 B9 D4 34 LDA $34D4,y[$7E:34D4] A:0005 X:0000 Y:0000 P:envmxdizc  - Load A from 7E34D4. (Healing/Damage Slot)
$03/CAC7 29 FF BF AND #$BFFF A:0005 X:0000 Y:0000 P:envmxdizc - No idea.
$03/CACA 8D 98 28 STA $2898  [$7E:2898] A:0005 X:0000 Y:0000 P:envmxdizc - Store A in 7E2898.
$03/CACD 38 SEC A:0005 X:0000 Y:0000 P:envmxdizc - Set Carry Flag.
$03/CACE BD 07 20 LDA $2007,x[$7E:2007] A:0005 X:0000 Y:0000 P:envmxdizC - Load Character/Monster's HP.
$03/CAD1 F0 0E BEQ $0E    [$CAE1] A:00C8 X:0000 Y:0000 P:envmxdizC - Branch if Flag is set (it should be as far as I can see, but eh...)
$03/CAD3 ED 98 28 SBC $2898  [$7E:2898] A:00C8 X:0000 Y:0000 P:envmxdizC - Subtract A from what is in 7E2898.
$03/CAD6 F0 02 BEQ $02    [$CADA] A:00C3 X:0000 Y:0000 P:envmxdizC - If 00 branch to 03CADA.
$03/CAD8 B0 1C BCS $1C    [$CAF6] A:00C3 X:0000 Y:0000 P:envmxdizC - Branch if Carry is Set. 
---------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------------
$03/CAF6 9D 07 20 STA $2007,x[$7E:2007] A:00C3 X:0000 Y:0000 P:envmxdizC - Store the new Character/Monster's HP.
$03/CAF9 DD 09 20 CMP $2009,x[$7E:2009] A:00C3 X:0000 Y:0000 P:envmxdizC - Compare to Max HP.
$03/CAFC 90 08 BCC $08    [$CB06] A:00C3 X:0000 Y:0000 P:eNvmxdizc - Branch if Carry Cleared.
$03/CB06 BD 09 20 LDA $2009,x[$7E:2009] A:00C3 X:0000 Y:0000 P:eNvmxdizc - Load Max HP.
$03/CB09 20 86 84 JSR $8486  [$03:8486] A:00C8 X:0000 Y:0000 P:envmxdizc - Jump to dividing? Subroutine.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~`
$03/8486 4A LSR A A:00C8 X:0000 Y:0000 P:envmxdizc - Divide Max HP by half.
$03/8487 4A LSR A A:0064 X:0000 Y:0000 P:envmxdizc - Divide Max HP by another half
$03/8488 60 RTS A:0032 X:0000 Y:0000 P:envmxdizc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/CB0C DD 07 20 CMP $2007,x[$7E:2007] A:0032 X:0000 Y:0000 P:envmxdizc - Compare Character/Monster's Current HP with /4 HP?
$03/CB0F 90 12 BCC $12    [$CB23] A:0032 X:0000 Y:0000 P:eNvmxdizc - If unsuccessful Branch to 03CB23
--------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------
$03/CB23 7B TDC A:0032 X:0000 Y:0000 P:eNvmxdizc - Transfer Direct Page to Accumulator
$03/CB24 E2 20 SEP #$20 A:0000 X:0000 Y:0000 P:envmxdiZc - Set Processor Status Bits
$03/CB26 A6 A9 LDX $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from A9.
$03/CB28 BD 06 20 LDA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from Status Byte 3 of Character/Monster.
$03/CB2B 29 FE AND #$FE A:0000 X:0000 Y:0000 P:envMxdiZc - ??
$03/CB2D 9D 06 20 STA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E2006.
$03/CB30 C2 20 REP #$20 A:0000 X:0000 Y:0000 P:envMxdiZc - Clear bit 5.
$03/CB32 A6 A9 LDX $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envmxdiZc - Load X from A9.
$03/CB34 8A TXA A:0000 X:0000 Y:0000 P:envmxdiZc - Transfer X to A
$03/CB35 18 CLC A:0000 X:0000 Y:0000 P:envmxdiZc - Clear Carry Flag.
$03/CB36 69 80 00 ADC #$0080 A:0000 X:0000 Y:0000 P:envmxdiZc - Add 80 to A.
$03/CB39 AA TAX A:0080 X:0000 Y:0000 P:envmxdizc - Transfer A to X.
$03/CB3A 86 A9 STX $A9    [$00:00A9] A:0080 X:0080 Y:0000 P:envmxdizc - Store X in A9.
$03/CB3C C8 INY A:0080 X:0080 Y:0000 P:envmxdizc - +1 to Y.
$03/CB3D C8 INY A:0080 X:0080 Y:0001 P:envmxdizc - +1 to y.
$03/CB3E C0 1A 00 CPY #$001A A:0080 X:0080 Y:0002 P:envmxdizc - ??
$03/CB41 F0 03 BEQ $03    [$CB46] A:0080 X:0080 Y:0002 P:eNvmxdizc - Branch if flag is set to 03CB46.
$03/CB43 4C 85 CA JMP $CA85  [$03:CA85] A:0080 X:0080 Y:0002 P:eNvmxdizc - Jump to Subroutine.

Code: [Select]
$03/CB46 7B TDC A:0680 X:0680 Y:001A P:envmxdiZC - Transfer Direct Page with 16 Bit Accumulator
$03/CB47 E2 20 SEP #$20 A:0000 X:0680 Y:001A P:envmxdiZC - Set Processor Status
$03/CB49 60 RTS A:0000 X:0680 Y:001A P:envMxdiZC - Return

(Seems to activate every few seconds)

Code: [Select]
$03/CB4A AD 08 39 LDA $3908  [$7E:3908] A:0000 X:0010 Y:0001 P:envMxdiZC - Load Status to Inflict into A.
$03/CB4D 10 0E BPL $0E    [$CB5D] A:0080 X:0010 Y:0001 P:eNvMxdizC - If it is Positive branch to 03CB5D. (Not Death)
----------------------------------------------------------------------------------------------------------------------
$03/CB4F AD 40 27 LDA $2740  [$7E:2740] A:0080 X:0010 Y:0001 P:eNvMxdizC - Load Target's Creature Type into A.
$03/CB52 29 82 AND #$82 A:0000 X:0010 Y:0001 P:envMxdiZC - Is it Undead or Machine?
$03/CB54 F0 07 BEQ $07    [$CB5D] A:0000 X:0010 Y:0001 P:envMxdiZC - If not, branch to 03CB5D
-------------------------------------------------------------------------------------------------------------------------------
$03/CB56 9C 08 39 STZ $3908  [$7E:3908] A:0080 X:0010 Y:0001 P:eNvMxdizC - Store Zero in 7E3908
$03/CB59 9C 09 39 STZ $3909  [$7E:3909] A:0080 X:0010 Y:0001 P:eNvMxdizC - Store Zero in 7E3909
$03/CB5C 60 RTS A:0080 X:0010 Y:0001 P:eNvMxdizC - Return

---------------------------------------------------------------------------------------------------------------------------------
$03/CB5D C2 20 REP #$20 A:0000 X:0010 Y:0001 P:envMxdiZC - Reset Process Status.
$03/CB5F AD 03 27 LDA $2703  [$7E:2703] A:0000 X:0010 Y:0001 P:envmxdiZC - Load Target's Status Byte 1 into A.
$03/CB62 29 FF BF AND #$BFFF A:4000 X:0010 Y:0001 P:envmxdizC - -3F? I've never seen an AND with two bytes before.)
$03/CB65 CD 08 39 CMP $3908  [$7E:3908] A:0000 X:0010 Y:0001 P:envmxdiZC - Compare between Status to Inflict.
$03/CB68 90 06 BCC $06    [$CB70] A:0000 X:0010 Y:0001 P:eNvmxdizc - Branch if it is less than that value.
---------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------
$03/CB70 A6 C7 LDX $C7    [$00:00C7] A:0000 X:0010 Y:0001 P:eNvmxdizc - Load X from C7.
$03/CB72 AD 03 27 LDA $2703  [$7E:2703] A:0000 X:0014 Y:0001 P:envmxdizc - Load Target's Status Byte 1.
$03/CB75 0D 08 39 ORA $3908  [$7E:3908] A:4000 X:0014 Y:0001 P:envmxdizc - Add Status from before if applicable.
$03/CB78 9D 8E 33 STA $338E,x[$7E:33A2] A:4080 X:0014 Y:0001 P:envmxdizc - Store A in 7E338E.
$03/CB7B AD 08 39 LDA $3908  [$7E:3908] A:4080 X:0014 Y:0001 P:envmxdizc - Load A from Status to Inflict.
$03/CB7E 29 01 3B AND #$3B01 A:0080 X:0014 Y:0001 P:envmxdizc - ??
$03/CB81 D0 03 BNE $03    [$CB86] A:0000 X:0014 Y:0001 P:envmxdiZc -Branch if not 00.
$03/CB83 4C 42 CC JMP $CC42  [$03:CC42] A:0000 X:0014 Y:0001 P:envmxdiZc - Jump to 03CC42.

Called by the Status Infliction portion of Normal Attack as one may expect.

Code: [Select]
$03/CB86 7B TDC A:0001 X:0020 Y:0001 P:envmxdizc - Transfer Direct Page Accumulator 16 Bit
$03/CB87 E2 20 SEP #$20 A:0000 X:0020 Y:0001 P:envmxdiZc - Set Process Status
$03/CB89 AD 08 39 LDA $3908  [$7E:3908] A:0000 X:0020 Y:0001 P:envMxdiZc - Load Status to Inflict.
$03/CB8C 29 01 AND #$01 A:0001 X:0020 Y:0001 P:envMxdizc - Is it Poison?
$03/CB8E F0 29 BEQ $29    [$CBB9] A:0001 X:0020 Y:0001 P:envMxdizc - If it is not, branch to 03CBB9
----------------------------------------------------------------------------------------------------------------------------------------------------
$03/CB90 A9 06 LDA #$06 A:0001 X:0020 Y:0001 P:envMxdizc - Load 06 into A.
$03/CB92 85 D6 STA $D6    [$00:00D6] A:0006 X:0020 Y:0001 P:envMxdizc - Store A in D6.
$03/CB94 A5 CF LDA $CF    [$00:00CF] A:0006 X:0020 Y:0001 P:envMxdizc - Load A from CF.
$03/CB96 20 36 9E JSR $9E36  [$03:9E36] A:0008 X:0020 Y:0001 P:envMxdizc - Jump to Subroutine.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/9E36 9C 58 35 STZ $3558  [$7E:3558] A:0008 X:0020 Y:0001 P:envMxdizc - Store Zero in 7E3558
$03/9E39 C9 05 CMP #$05 A:0008 X:0020 Y:0001 P:envMxdizc - Is A 05?
$03/9E3B 90 03 BCC $03    [$9E40] A:0008 X:0020 Y:0001 P:envMxdizC - If so branch to 039E40.
$03/9E3D EE 58 35 INC $3558  [$7E:3558] A:0008 X:0020 Y:0001 P:envMxdizC - +1 to 7E3558.
$03/9E40 20 89 84 JSR $8489  [$03:8489] A:0008 X:0020 Y:0001 P:envMxdizC - Jump to Subroutine (Timing Routine?)
$03/9E43 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0900 Y:0001 P:envMxdizc - Load X from A6.
$03/9E45 BD 60 20 LDA $2060,x[$7E:2460] A:0000 X:0400 Y:0001 P:envMxdizc - Load A from Slot's Speed Byte.
$03/9E48 85 A9 STA $A9    [$00:00A9] A:0010 X:0400 Y:0001 P:envMxdizc - Store A in A9.
$03/9E4A BD 61 20 LDA $2061,x[$7E:2461] A:0010 X:0400 Y:0001 P:envMxdizc - Load A from Slot's Speed Byte 2.
$03/9E4D 85 AA STA $AA    [$00:00AA] A:0000 X:0400 Y:0001 P:envMxdiZc - Store A in AA.
$03/9E4F BD 3B 20 LDA $203B,x[$7E:243B] A:0000 X:0400 Y:0001 P:envMxdiZc - Load A from Speed Modifier
$03/9E52 A8 TAY A:0010 X:0400 Y:0001 P:envMxdizc - Transfer A to Y.
$03/9E53 8C 79 39 STY $3979  [$7E:3979] A:0010 X:0400 Y:0010 P:envMxdizc - Store Y in 7E3979
$03/9E56 DA PHX A:0010 X:0400 Y:0010 P:envMxdizc - Push X.
$03/9E57 A5 D6 LDA $D6    [$00:00D6] A:0010 X:0400 Y:0010 P:envMxdizc - Load D6 into A.
$03/9E59 0A ASL A A:0006 X:0400 Y:0010 P:envMxdizc - x2 A.
$03/9E5A AA TAX A:000C X:0400 Y:0010 P:envMxdizc - Transfer A to X.
$03/9E5B BF 05 A0 03 LDA $03A005,x[$03:A011] A:000C X:000C Y:0010 P:envMxdizc - Load A from 03A011.
$03/9E5F 85 80 STA $80    [$00:0080] A:000D X:000C Y:0010 P:envMxdizc - Store A in 80.
$03/9E61 BF 06 A0 03 LDA $03A006,x[$03:A012] A:000D X:000C Y:0010 P:envMxdizc - Load A from 03A012
$03/9E65 85 81 STA $81    [$00:0081] A:009F X:000C Y:0010 P:eNvMxdizc - Store A in 81.
$03/9E67 A9 03 LDA #$03 A:009F X:000C Y:0010 P:eNvMxdizc - Load 03 into A.
$03/9E69 85 82 STA $82    [$00:0082] A:0003 X:000C Y:0010 P:envMxdizc - Store A in  82.
$03/9E6B FA PLX A:0003 X:000C Y:0010 P:envMxdizc - Push X Left.
$03/9E6C DC 80 00 JML [$0080][$03:9F0D] A:0003 X:0400 Y:0010 P:envMxdizc - Jump Long to 039F0D.
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/9F0D AD 58 35 LDA $3558  [$7E:3558] A:0003 X:0400 Y:0010 P:envMxdizc - Load A from 7E3558.
$03/9F10 F0 05 BEQ $05    [$9F17] A:0001 X:0400 Y:0010 P:envMxdizc - Branch if 00 t0 039F17.
$03/9F12 BD 2F 20 LDA $202F,x[$7E:242F] A:0001 X:0400 Y:0010 P:envMxdizc - Load Slot's ?Run Strength?
$03/9F15 80 03 BRA $03    [$9F1A] A:0010 X:0400 Y:0010 P:envMxdizc - Branch to 039F1A
$03/9F1A 18 CLC A:0010 X:0400 Y:0010 P:envMxdizc - Clear Carry Flag.
$03/9F1B 69 14 ADC #$14 A:0010 X:0400 Y:0010 P:envMxdizc - Add 14 to A.
$03/9F1D AA TAX A:0024 X:0400 Y:0010 P:envMxdizc - Transfer A to X.
$03/9F1E 86 A9 STX $A9    [$00:00A9] A:0024 X:0024 Y:0010 P:envMxdizc - Store X in A9.
$03/9F20 20 E2 9F JSR $9FE2  [$03:9FE2] A:0024 X:0024 Y:0010 P:envMxdizc - Jump to Subroutine
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/9FE2 A6 A9 LDX $A9    [$00:00A9] A:0024 X:0024 Y:0010 P:envMxdizc - Load X from A9.
$03/9FE4 8E 3D 39 STX $393D  [$7E:393D] A:0024 X:0024 Y:0010 P:envMxdizc - Store X in 7E393D
$03/9FE7 AE 79 39 LDX $3979  [$7E:3979] A:0024 X:0024 Y:0010 P:envMxdizc - Load X from 7E39F9
$03/9FEA 8E 3F 39 STX $393F  [$7E:393F] A:0024 X:0010 Y:0010 P:envMxdizc - Store X in 7E393F
$03/9FED 20 B9 83 JSR $83B9  [$03:83B9] A:0024 X:0010 Y:0010 P:envMxdizc - Jump to Subroutine (Divide's several 393X values)
$03/9FF0 AE 41 39 LDX $3941  [$7E:3941] A:0000 X:0000 Y:0010 P:envMxdiZc - Load X from 7E3941
$03/9FF3 8E 45 39 STX $3945  [$7E:3945] A:0000 X:0240 Y:0010 P:envMxdizc - Store X in 7E3945.
$03/9FF6 A2 10 00 LDX #$0010 A:0000 X:0240 Y:0010 P:envMxdizc - Load 10 into X.
$03/9FF9 8E 47 39 STX $3947  [$7E:3947] A:0000 X:0010 Y:0010 P:envMxdizc - Store X in 7E3947
$03/9FFC 20 07 84 JSR $8407  [$03:8407] A:0000 X:0010 Y:0010 P:envMxdizc - Jump to Subroutine (Something with HP?)
$03/9FFF AE 49 39 LDX $3949  [$7E:3949] A:0000 X:0000 Y:0010 P:envMxdiZc - Load X from 7E3949.
$03/A002 86 AB STX $AB    [$00:00AB] A:0000 X:0024 Y:0010 P:envMxdizc - Store X in AB.
$03/A004 60 RTS A:0000 X:0024 Y:0010 P:envMxdizc - Return
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/9F23 4C D9 9F JMP $9FD9  [$03:9FD9] A:0000 X:0024 Y:0010 P:envMxdizc - Jump to Subroutine
$03/9FD9 A4 AB LDY $AB    [$00:00AB] A:0000 X:0024 Y:0010 P:envMxdizc - Load AB into Y.
$03/9FDB 10 02 BPL $02    [$9FDF] A:0000 X:0024 Y:0024 P:envMxdizc - Branch if Positive to 039FDF
-----------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------
$03/9FDF 84 D4 STY $D4    [$00:00D4] A:0000 X:0024 Y:0024 P:envMxdizc - Store Y in D4.
$03/9FE1 60 RTS A:0000 X:0024 Y:0024 P:envMxdizc - Return
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/CB99 A9 09 LDA #$09 A:0000 X:0024 Y:0024 P:envMxdizc - Load 09 into A.
$03/CB9B 20 C8 85 JSR $85C8  [$03:85C8] A:0009 X:0024 Y:0024 P:envMxdizc - Jump to Subroutine (Was thought to deal something with healing, but now I'm not sure, Seems to be loading the values that were holding Run Strength and depositing them in several different areas.)
$03/CB9E A9 40 LDA #$40 A:0000 X:00B1 Y:0024 P:envMxdiZc - Load 40 into A.
$03/CBA0 9D 06 2A STA $2A06,x[$7E:2AB7] A:0040 X:00B1 Y:0024 P:envMxdizc - Store A in 7E2AB7.
$03/CBA3 A5 CF LDA $CF    [$00:00CF] A:0040 X:00B1 Y:0024 P:envMxdizc - Load A from CF.
$03/CBA5 0A ASL A A:0008 X:00B1 Y:0024 P:envMxdizc - x2 A.
$03/CBA6 AA TAX A:0010 X:00B1 Y:0024 P:envMxdizc - Transfer A to X.
$03/CBA7 BD EB 29 LDA $29EB,x[$7E:29FB] A:0010 X:0010 Y:0024 P:envMxdizc - Load A from Bitmask of Active Status.
$03/CBAA 09 10 ORA #$10 A:0040 X:0010 Y:0024 P:envMxdizc - Add 10 to A.
$03/CBAC 9D EB 29 STA $29EB,x[$7E:29FB] A:0050 X:0010 Y:0024 P:envMxdizc - Store A in Bitmask of Active Status.
$03/CBAF A5 D4 LDA $D4    [$00:00D4] A:0050 X:0010 Y:0024 P:envMxdizc - Load A from D4.
$03/CBB1 9D 2A 2B STA $2B2A,x[$7E:2B3A] A:0024 X:0010 Y:0024 P:envMxdizc - Store A in 7E2B2A (definitely worth checking this out. It's clear this isn't "Run Strength".
$03/CBB4 A5 D5 LDA $D5    [$00:00D5] A:0024 X:0010 Y:0024 P:envMxdizc - Load A from D5.
$03/CBB6 9D 2B 2B STA $2B2B,x[$7E:2B3B] A:0000 X:0010 Y:0024 P:envMxdiZc - Store A in 7E2B3B
$03/CBB9 AD 09 39 LDA $3909  [$7E:3909] A:0000 X:0010 Y:0024 P:envMxdiZc - Load A from Status Byte 2.
$03/CBBC 29 30 AND #$30 A:0000 X:0010 Y:0024 P:envMxdiZc - Is it 30? (Sleep or Stun?)
$03/CBBE F0 14 BEQ $14    [$CBD4] A:0000 X:0010 Y:0024 P:envMxdiZc - If not branch to 03CBDE.
------------------------------------------------------------------------------------------------------------------------------------------------
$03/CBC0 A9 04 LDA #$04 A:0030 X:0020 Y:0002 P:envMxdizc - Load 04 into A.
$03/CBC2 85 D6 STA $D6    [$00:00D6] A:0004 X:0020 Y:0002 P:envMxdizc - Store A in D6.
$03/CBC4 A5 CF LDA $CF    [$00:00CF] A:0004 X:0020 Y:0002 P:envMxdizc - Load A from CF.
$03/CBC6 20 36 9E JSR $9E36  [$03:9E36] A:0008 X:0020 Y:0002 P:envMxdizc - Jump to Subroutine (Shown above, it seems to do something with timers and "run strength")
$03/CBC9 A9 03 LDA #$03 A:0000 X:0027 Y:0027 P:envMxdizc - Load 03 into A.
$03/CBCB 20 C8 85 JSR $85C8  [$03:85C8] A:0003 X:0027 Y:0027 P:envMxdizc - Jump to Subroutine (Not really sure anymore)
$03/CBD0 9D 06 2A STA $2A06,x[$7E:2AB1] A:0040 X:00AB Y:0027 P:envMxdizc - Store A in 7E2AB1.
$03/CBD3 60 RTS A:0040 X:00AB Y:0027 P:envMxdizc Return
------------------------------------------------------------------------------------------------------------------------------------------
$03/CBD4 AD 09 39 LDA $3909  [$7E:3909] A:0000 X:0010 Y:0024 P:envMxdiZc - Load A from Status Byte
$03/CBD7 29 03 AND #$03 A:0000 X:0010 Y:0024 P:envMxdiZc - Is it 03? (Calcify1 or 2.)
$03/CBD9 F0 66 BEQ $66    [$CC41] A:0000 X:0010 Y:0024 P:envMxdiZc -  If not branch to 03CC41.
--------------------------------------------------------------------------------------------------------------------------------------------------
$03/CBDB A6 C7 LDX $C7    [$00:00C7] A:0001 X:0020 Y:0001 P:envMxdizc - Load X from C7.
$03/CBDD AD 04 27 LDA $2704  [$7E:2704] A:0001 X:0020 Y:0001 P:envMxdizc - Load A from Target's Status Byte 2.
$03/CBE0 29 FC AND #$FC A:0000 X:0020 Y:0001 P:envMxdiZc - Ignore anything else but Calcify 1 and 2.
$03/CBE2 85 A9 STA $A9    [$00:00A9] A:0000 X:0020 Y:0001 P:envMxdiZc - Store this in A9.
$03/CBE4 AD 04 27 LDA $2704  [$7E:2704] A:0000 X:0020 Y:0001 P:envMxdiZc - Load A from Target's Status Byte 2.
$03/CBE7 29 03 AND #$03 A:0000 X:0020 Y:0001 P:envMxdiZc - Is it 03? (Is it Calcify 1 or 2?)
$03/CBE9 F0 2C BEQ $2C    [$CC17] A:0000 X:0020 Y:0001 P:envMxdiZc - If not branch to 03CC17.
----------------------------------------------------------------------------------------------------------------------------------------------
(I don't think you can logically reach this as you can never make a foe react if they're already under Calcify 1 or 2)
----------------------------------------------------------------------------------------------------------------------------------------------
$03/CC17 A9 04 LDA #$04 A:0000 X:0020 Y:0001 P:envMxdiZc - Load 04 into A.
$03/CC19 85 D6 STA $D6    [$00:00D6] A:0004 X:0020 Y:0001 P:envMxdizc - Store A into D6.
$03/CC1B A5 CF LDA $CF    [$00:00CF] A:0004 X:0020 Y:0001 P:envMxdizc - Load A from CF.
$03/CC1D 20 36 9E JSR $9E36  [$03:9E36] A:0008 X:0020 Y:0001 P:envMxdizc - Jump to Subroutine (As above, has something to do with Timers and Run Strength)
$03/CC20 A9 0C LDA #$0C A:0000 X:0027 Y:0027 P:envMxdizc - Load 0C into A
$03/CC22 20 C8 85 JSR $85C8  [$03:85C8] A:000C X:0027 Y:0027 P:envMxdizc - Jump to Subroutine (I am going to guess now that it must deal something with Statuses.)
$03/CC25 A9 40 LDA #$40 A:0000 X:00B4 Y:0027 P:envMxdiZc - Load 40 into A.
$03/CC27 9D 06 2A STA $2A06,x[$7E:2ABA] A:0040 X:00B4 Y:0027 P:envMxdizc - Store A in 7E2A06.
$03/CC2A A5 CF LDA $CF    [$00:00CF] A:0040 X:00B4 Y:0027 P:envMxdizc - Load A from CF.
$03/CC2C 0A ASL A A:0008 X:00B4 Y:0027 P:envMxdizc - x2 A.
$03/CC2D AA TAX A:0010 X:00B4 Y:0027 P:envMxdizc - Transfer A to X.
$03/CC2E BD EB 29 LDA $29EB,x[$7E:29FB] A:0010 X:0010 Y:0027 P:envMxdizc - Load A from Bitmask of Active Status
$03/CC31 09 08 ORA #$08 A:0040 X:0010 Y:0027 P:envMxdizc - Add 08.
$03/CC33 9D EB 29 STA $29EB,x[$7E:29FB] A:0048 X:0010 Y:0027 P:envMxdizc - Store A in Bitmask of Active Status
$03/CC36 A5 D4 LDA $D4    [$00:00D4] A:0048 X:0010 Y:0027 P:envMxdizc - Load A from D4 (Run Strength?).
$03/CC38 9D 44 2B STA $2B44,x[$7E:2B54] A:0027 X:0010 Y:0027 P:envMxdizc - Store A in 7E2B54.
$03/CC3B A5 D5 LDA $D5    [$00:00D5] A:0027 X:0010 Y:0027 P:envMxdizc - Load A from D5.
$03/CC3D 9D 45 2B STA $2B45,x[$7E:2B55] A:0000 X:0010 Y:0027 P:envMxdiZc
$03/CC40 60 RTS A:0000 X:0010 Y:0027 P:envMxdiZc - Return
------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/CC41 60 RTS A:0000 X:0010 Y:0024 P:envMxdiZc - Return
--------------------------------------------------------------------------------------------------------------------------------------------------------------

Looks like this may be the true face of "Run Strength". Something to deal with Poison or possibly any Timer? It is quite interesting to think on its purpose.


Code: [Select]
$03/CC42 7B TDC A:0000 X:0014 Y:0001 P:envmxdiZc - Transfer Direct Page Accumulator 16 bit.
$03/CC43 E2 20 SEP #$20 A:0000 X:0014 Y:0001 P:envmxdiZc - Set Process Status
$03/CC45 60 RTS A:0000 X:0014 Y:0001 P:envMxdiZc - Return

And that's All Damage Subroutines (at least according to Phoenix's Notes) down! Whew, that was a marathon! But now we know where Calcify is, I wonder if its possible to just plug it into the Calcify Spell effect rather than let it run on its own flawed version. Maybe comparing the two will reveal what goes wrong when applying the status with a weapon?

 :edit: No, it is not. I don't know where the issue lies but it is apparently not as simple as linking it to the Calcify Spell Routine.
« Last Edit: October 09, 2013, 01:32:41 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 Disassembly)
« Reply #76 on: September 27, 2013, 05:14:26 PM »
Hey, Grimoire - Just wondering, are you planning on eventually disassembling the Dart routine?
My "things I'd like to do when I get the chance" list includes looking into whether we can hack the routine to consider the thrown weapon's elemental (and status, for that matter) properties. Something I always felt they were really silly to have left out.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #77 on: September 27, 2013, 07:25:19 PM »
Hmm...

08 1E537-1E5BB   Throw/Dart
--
1C 1ED14-1ED87   (part of Throw/Dart, item check?)

I wouldn't mind taking a look at that. The command (commands?) don't appear to be that long when compared to something like Steal.

So sure, let's see what's there...

Code: [Select]
$03/E34C A9 16 LDA #$16 A:0003 X:002C Y:0000 P:envMxdizc - Load 16 into A. (Dart Text)
$03/E34E 8D C8 34 STA $34C8  [$7E:34C8] A:0016 X:002C Y:0000 P:envMxdizc - Store A in Command Message.
$03/E351 A9 10 LDA #$10 A:0016 X:002C Y:0000 P:envMxdizc - Load 10 into A.
$03/E353 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:002C Y:0000 P:envMxdizc - Store A in 7E34C7.
$03/E356 A9 F8 LDA #$F8 A:0010 X:002C Y:0000 P:envMxdizc - Load F8 into A. (When changed seems to cause a variety of effects but no longer displays damage done)
$03/E358 8D C6 33 STA $33C6  [$7E:33C6] A:00F8 X:002C Y:0000 P:eNvMxdizc - Store A in Graphic/Text Data?
$03/E35B A9 04 LDA #$04 A:00F8 X:002C Y:0000 P:eNvMxdizc - Load 04 into A. (F8 and 04 seems to be related somehow)
$03/E35D 8D C7 33 STA $33C7  [$7E:33C7] A:0004 X:002C Y:0000 P:envMxdizc - Store A in 7E33C7
$03/E360 A5 CE LDA $CE    [$00:00CE] A:0004 X:002C Y:0000 P:envMxdizc - Load A from CE.
$03/E362 30 10 BMI $10    [$E374] A:0083 X:002C Y:0000 P:eNvMxdizc - Branch if negative.
-----------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------
$03/E374 AD 81 38 LDA $3881  [$7E:3881] A:0083 X:002C Y:0000 P:eNvMxdizc - Load 7E3881 into A.
$03/E377 D0 EB BNE $EB    [$E364] A:0000 X:002C Y:0000 P:envMxdiZc - If above 00 branch to 03E364
$03/E379 AD D2 26 LDA $26D2  [$7E:26D2] A:0000 X:002C Y:0000 P:envMxdiZc - Load Caster's next Sub-Action into A.
$03/E37C 8D 80 35 STA $3580  [$7E:3580] A:0016 X:002C Y:0000 P:envMxdizc - Store A in 7E3580
$03/E37F AA TAX A:0016 X:002C Y:0000 P:envMxdizc - Transfer A to X.
$03/E380 86 E5 STX $E5    [$00:00E5] A:0016 X:0016 Y:0000 P:envMxdizc - Store X in E5.
$03/E382 A2 00 91 LDX #$9100 A:0016 X:0016 Y:0000 P:envMxdizc - Load 9100 into X.
$03/E385 86 80 STX $80    [$00:0080] A:0016 X:9100 Y:0000 P:eNvMxdizc - Store X in 80.
$03/E387 A9 0F LDA #$0F A:0016 X:9100 Y:0000 P:eNvMxdizc - Load 0F into A.
$03/E389 85 82 STA $82    [$00:0082] A:000F X:9100 Y:0000 P:envMxdizc - Store A in 82.
$03/E38B A9 08 LDA #$08 A:000F X:9100 Y:0000 P:envMxdizc - Load 08 into A.
$03/E38D 20 5E 84 JSR $845E  [$03:845E] A:0008 X:9100 Y:0000 P:envMxdizc - Jump to Subroutine (??)
$03/E390 AD 9D 28 LDA $289D  [$7E:289D] A:0003 X:0008 Y:00B8 P:envMxdiZC - Load Stored Attack Power of Thrown Weapon (Casted Spell's Spell Power) into A. (30 in this case)
$03/E393 85 DF STA $DF    [$00:00DF] A:001E X:0008 Y:00B8 P:envMxdizC - Store A in DF.
$03/E395 AD 82 26 LDA $2682  [$7E:2682] A:001E X:0008 Y:00B8 P:envMxdizC - Load Caster's Level into A. (10 in this case)
$03/E398 85 E1 STA $E1    [$00:00E1] A:000A X:0008 Y:00B8 P:envMxdizC - Store A in E1
$03/E39A 20 E0 83 JSR $83E0  [$03:83E0] A:000A X:0008 Y:00B8 P:envMxdizC - Jump to Subroutine (Cleaning?)
$03/E39D A6 E3 LDX $E3    [$00:00E3] A:0000 X:0000 Y:00B8 P:envMxdiZc - Load X from E3. (300 Base Damage)
$03/E39F 8E 9C 28 STX $289C  [$7E:289C] A:0000 X:012C Y:00B8 P:envMxdizc - Store X into 7E289C
$03/E3A2 20 8B 85 JSR $858B  [$03:858B] A:0000 X:012C Y:00B8 P:envMxdizc - Jump to Subroutine (Random Number Generator)
$03/E3A5 18 CLC A:0001 X:0000 Y:00B8 P:envMxdizc - Clear Carry Flag.
$03/E3A6 6D 9C 28 ADC $289C  [$7E:289C] A:0001 X:0000 Y:00B8 P:envMxdizc - Add the value in 7E289C into A (2C + 1 = 2D This is the damage bonus)
$03/E3A9 85 E3 STA $E3    [$00:00E3] A:002D X:0000 Y:00B8 P:envMxdizc - Store A in E3.
$03/E3AB A9 00 LDA #$00 A:002D X:0000 Y:00B8 P:envMxdizc -  Load 00 into A.
$03/E3AD 6D 9D 28 ADC $289D  [$7E:289D] A:0000 X:0000 Y:00B8 P:envMxdiZc - Add the value in 7E289D into A.
$03/E3B0 85 E4 STA $E4    [$00:00E4] A:0001 X:0000 Y:00B8 P:envMxdizc - Store A in E4 (E3 and E4 are likely damage holders.)
$03/E3B2 A6 E3 LDX $E3    [$00:00E3] A:0001 X:0000 Y:00B8 P:envMxdizc - Load X from E3.
$03/E3B4 E0 0F 27 CPX #$270F A:0001 X:012D Y:00B8 P:envMxdizc - Compare X to 9999 Damage.
$03/E3B7 90 05 BCC $05    [$E3BE] A:0001 X:012D Y:00B8 P:eNvMxdizc - Is it dealing 9999 damage? (Oh I'm an idiot! That's what all of those "270F had meant!")
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E3B9 A2 0F 27 LDX #$270F A:0001 X:0188 Y:00B8 P:eNvMxdizc - Then deal 9999 damage.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E3BE A5 CE LDA $CE    [$00:00CE] A:0001 X:012D Y:00B8 P:eNvMxdizc - Load A from CE.
$03/E3C0 20 72 CA JSR $CA72  [$03:CA72] A:0080 X:012D Y:00B8 P:eNvMxdizc - Jump to Subroutine (Cleaning Routine)
$03/E3A5 18 CLC A:004F X:0000 Y:00B8 P:envMxdizc - Clear Carry Flag
$03/E3C3 A5 E3 LDA $E3    [$00:00E3] A:000A X:000A Y:00B8 P:envMxdizc - Load A from E3.
$03/E3C5 9D D4 34 STA $34D4,x[$7E:34DE] A:007B X:000A Y:00B8 P:envMxdizc - Store A in 7E34DE.
$03/E3C8 A5 E4 LDA $E4    [$00:00E4] A:007B X:000A Y:00B8 P:envMxdizc - Load A from E4,
$03/E3CA 9D D5 34 STA $34D5,x[$7E:34DF] A:0001 X:000A Y:00B8 P:envMxdizc - Store A in 7E34DF.
$03/E3CD 20 7E CA JSR $CA7E  [$03:CA7E] A:0001 X:000A Y:00B8 P:envMxdizc - Jump to Subroutine (Damage Dealing Routine)
(From there it eventually jumps into the normal routine and ends)
---------------------------------------------------------------------------------------------------------------------------------------------------------------


This is the Thrown part of the code. DeathLike2 was right on the mark as far as damage went. Level * Attack Power of Thrown Weapon + Random 0,98= Throw's damage. We can change that as we like moving forward. All the pieces in doing so are right there.

Though how to make it take Elemental into effect... hmm... that is a difficult one.


289D      Casted Spell's Spell Power
289E      Casted Spell's Hit Percentage
28A0      Casted Spell's ???
28A1      Casted Spell's MP Cost.
28A2      Casted Spell's Elemental
28A3-28A4 Casted Spell's Status Infliction.

And then the Statuses are stored in AD and AE. Of course if you can find another way to go about it then that might be for the best. I have a few ideas that I'll have to try out a little later.

 :edit: It does appear as if the Thrown Weapon's Elemental and Status Inflictions are never recorded by the game unfortunately, hmm... I'll have to take a look at the second Throw/Dart formula listed and see if that helps at all.
« Last Edit: September 27, 2013, 07:45:52 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 #78 on: September 28, 2013, 12:50:07 AM »
Immense Updates to Damage Subroutines at the top of the page, with a nearly full list of everything included therein.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #79 on: September 28, 2013, 11:18:12 AM »
I thought it was short and I'm working on limited time anyhow, so...

Change Routine
Code: [Select]
$03/E3D1 7B TDC A:0003 X:0034 Y:0000 P:envMxdizc - Transfer Direct Page.
$03/E3D2 AA TAX A:0000 X:0034 Y:0000 P:envMxdiZc - Transfer A to X.
$03/E3D3 A8 TAY A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to Y.
$03/E3D4 BD 01 20 LDA $2001,x[$7E:2001] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Character's Row/Long Range/Class byte into A.
$03/E3D7 85 A9 STA $A9    [$00:00A9] A:0020 X:0000 Y:0000 P:envMxdizc - Store A in A9.
$03/E3D9 29 80 AND #$80 A:0020 X:0000 Y:0000 P:envMxdizc - Is it 80?
$03/E3DB 49 80 EOR #$80 A:0000 X:0000 Y:0000 P:envMxdiZc - Add 80.
$03/E3DD 85 AA STA $AA    [$00:00AA] A:0080 X:0000 Y:0000 P:eNvMxdizc - Store A  in AA.
$03/E3DF A5 A9 LDA $A9    [$00:00A9] A:0080 X:0000 Y:0000 P:eNvMxdizc - Load A from A9
$03/E3E1 29 7F AND #$7F A:0020 X:0000 Y:0000 P:envMxdizc - Add +80 if applicable to A.
$03/E3E3 05 AA ORA $AA    [$00:00AA] A:0020 X:0000 Y:0000 P:envMxdizc - Add 80 into register?
$03/E3E5 9D 01 20 STA $2001,x[$7E:2001] A:00A0 X:0000 Y:0000 P:eNvMxdizc - Store A in Row/Long Range/ID.
$03/E3E8 C2 20 REP #$20 A:00A0 X:0000 Y:0000 P:eNvMxdizc - Reset Process Status.
$03/E3EA 8A TXA A:00A0 X:0000 Y:0000 P:eNvmxdizc - Transfer X to A.
$03/E3EB 18 CLC A:0000 X:0000 Y:0000 P:envmxdiZc - Clear Carry Flag.
$03/E3EC 69 80 00 ADC #$0080 A:0000 X:0000 Y:0000 P:envmxdiZc - Add 80 to A.
$03/E3EF AA TAX A:0080 X:0000 Y:0000 P:envmxdizc - Transfer A to X.
$03/E3F0 7B TDC A:0080 X:0080 Y:0000 P:envmxdizc - Transfer Direc Page.
$03/E3F1 E2 20 SEP #$20 A:0000 X:0080 Y:0000 P:envmxdiZc - Set Processor Status.
$03/E3F3 C8 INY A:0000 X:0080 Y:0000 P:envMxdiZc - Increment Y.
$03/E3F4 C0 05 00 CPY #$0005 A:0000 X:0080 Y:0001 P:envMxdizc - Has it gone through 05 times? (For each party member slot?)
$03/E3F7 D0 DB BNE $DB    [$E3D4] A:0000 X:0080 Y:0001 P:eNvMxdizc If not loop back from 03E3D4.
$03/E3F9 60 RTS A:0000 X:0280 Y:0005 P:envMxdiZC - Return

Hmm, nothing about graphical representation here as far as I can tell. It all seems fairly straightforward.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #80 on: September 29, 2013, 10:12:36 PM »
Code: [Select]
Let's switch gears here a little to Item Acquisition...

$00/9818 A9 01 LDA #$01 A:0000 X:0000 Y:00D0 P:envMxdizC - Load 01 into A.
$00/981A 85 06 STA $06    [$00:0606] A:0001 X:0000 Y:00D0 P:envMxdizC - Store A in 0606.
$00/981C AD FB 08 LDA $08FB  [$00:08FB] A:0001 X:0000 Y:00D0 P:envMxdizC - Load A from Item Identifier
$00/981F C9 60 CMP #$60 A:00CE X:0000 Y:00D0 P:eNvMxdizC - Compare it to 60 (End of arrows)
$00/9821 B0 08 BCS $08    [$982B] A:00CE X:0000 Y:00D0 P:envMxdizC - If it is more than 60 branch to 00982B
--------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------
$00/982B A0 00 00 LDY #$0000 A:00CE X:0000 Y:00D0 P:envMxdizC - Load 00 into Y.
----------------------------------------(Looping Point)---------------------------------------------------------------------------------------
$00/982E B9 40 14 LDA $1440,y[$00:1440] A:00CE X:0000 Y:0000 P:envMxdiZC - Load A from First Item Slot
$00/9831 CD FB 08 CMP $08FB  [$00:08FB] A:0016 X:0000 Y:0000 P:envMxdizC - Is it the same item as currently in the First Item Slot?
$00/9834 D0 07 BNE $07    [$983D] A:0016 X:0000 Y:0000 P:envMxdizc - If not, branch to 00983D
-----------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------
$00/983D C8 INY A:0016 X:0000 Y:0000 P:envMxdizc - +1 to X.
$00/983E C8 INY A:0016 X:0000 Y:0001 P:envMxdizc - +1 to Y.
$00/983F C0 60 00 CPY #$0060 A:0016 X:0000 Y:0002 P:envMxdizc - Has it passed through 60 slots?
$00/9842 D0 EA BNE $EA    [$982E] A:0016 X:0000 Y:0002 P:eNvMxdizc - If not loop back to 00982E.
---------------------------------------------------------------------------------------------------------------------------------------
$00/9844 A0 00 00 LDY #$0000 A:00FF X:0000 Y:0060 P:envMxdiZC - Load 00 into Y.
---------------------------------------------------(Looping Point)--------------------------------------------------------------------------------
$00/9847 B9 40 14 LDA $1440,y[$00:1440] A:00FF X:0000 Y:0000 P:envMxdiZC - Load the first Item Slot into A.
$00/984A F0 5E BEQ $5E    [$98AA] A:0016 X:0000 Y:0000 P:envMxdizC - If it is 00 branch to 0098AA.
$00/984C C8 INY A:0016 X:0000 Y:0000 P:envMxdizC - +1 to Y.
$00/984D C8 INY A:0016 X:0000 Y:0001 P:envMxdizC +1 to Y.
$00/984E C0 60 00 CPY #$0060 A:0016 X:0000 Y:0002 P:envMxdizC - Has it passed through 60 slots?
$00/9851 F0 03 BEQ $03    [$9856] A:0016 X:0000 Y:0002 P:eNvMxdizc - If so, branch to 009856.
$00/9853 4C 47 98 JMP $9847  [$00:9847] A:0016 X:0000 Y:0002 P:eNvMxdizc - Jump to 9847 (Why not loop?)
----------------------------------------------------------------------------------------------------------------------------------
$00/98AA AD FB 08 LDA $08FB  [$00:08FB] A:0000 X:0000 Y:0002 P:envMxdiZc - Load A from ?Item Storage spot?
$00/98AD 99 40 14 STA $1440,y[$00:1442] A:00CE X:0000 Y:0002 P:eNvMxdizc - Store A in Open Item Slot.
$00/98B0 B9 41 14 LDA $1441,y[$00:1443] A:00CE X:0000 Y:0002 P:eNvMxdizc - Load A from Open Item Slot Quantity.
$00/98B3 18 CLC A:0000 X:0000 Y:0002 P:envMxdiZc - Clear Carry Flag.
$00/98B4 65 06 ADC $06    [$00:0606] A:0000 X:0000 Y:0002 P:envMxdiZc - Add Value from 0606.
$00/98B6 C9 64 CMP #$64 A:0001 X:0000 Y:0002 P:envMxdizc - Has it reached 100?
$00/98B8 90 0D BCC $0D    [$98C7] A:0001 X:0000 Y:0002 P:eNvMxdizc - If so branch to 0098C7.
----------------------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------------------
$00/98C7 99 41 14 STA $1441,y[$00:1443] A:0001 X:0000 Y:0002 P:eNvMxdizc - Store A in Open Item Slot Quantity.
$00/98CA 60 RTS A:0001 X:0000 Y:0002 P:eNvMxdizc - Return

-------------------------------------------------------------------------------------------------------------------------------------


It's not quite finished, but I've found all of the essential pieces I need.



Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #81 on: October 01, 2013, 08:04:02 PM »
Let's get back to commands shall we? We will start anew with Peep.

Code: [Select]
$03/E153 AD 70 27 LDA $2770  [$7E:2770] A:0003 X:0028 Y:0000 P:envMxdizc - Load Target's Boss Bit/Level Bit.
$03/E156 10 03 BPL $03    [$E15B] A:0006 X:0028 Y:0000 P:envMxdizc - If it is 00 or above branch to 03E15B. (if 80 or more which is the Boss Bit, don't branch)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E158 4C B1 E1 JMP $E1B1  [$03:E1B1] A:008A X:0028 Y:0000 P:eNvMxdizc -(Go to RTS)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E15B C2 20 REP #$20 A:0006 X:0028 Y:0000 P:envMxdizc - Reset Processor Status
$03/E15D AD 07 27 LDA $2707  [$7E:2707] A:0006 X:0028 Y:0000 P:envmxdizc - Load A from Target's Current HP.
$03/E160 8D 9A 35 STA $359A  [$7E:359A] A:01F4 X:0028 Y:0000 P:envmxdizc - Store A in 7E359A.
$03/E163 AD 09 27 LDA $2709  [$7E:2709] A:01F4 X:0028 Y:0000 P:envmxdizc - Load A from Target's Max HP.
$03/E166 8D 9D 35 STA $359D  [$7E:359D] A:01F4 X:0028 Y:0000 P:envmxdizc - Store a 7E359D.
$03/E169 7B TDC A:01F4 X:0028 Y:0000 P:envmxdizc - Transfer Direct Page.
$03/E16A E2 20 SEP #$20 A:0000 X:0028 Y:0000 P:envmxdiZc - Set Processor Status
$03/E16C 9C 9C 35 STZ $359C  [$7E:359C] A:0000 X:0028 Y:0000 P:envMxdiZc - Store Zero in 7E359C.
$03/E16F 9C 9F 35 STZ $359F  [$7E:359F] A:0000 X:0028 Y:0000 P:envMxdiZc - Store Zero in 7E359F.
$03/E172 AD 20 27 LDA $2720  [$7E:2720] A:0000 X:0028 Y:0000 P:envMxdiZc - Load Target's Weakness
$03/E175 2D 25 27 AND $2725  [$7E:2725] A:0010 X:0028 Y:0000 P:envMxdizc - -Their Resistances?
$03/E178 49 FF EOR #$FF A:0000 X:0028 Y:0000 P:envMxdiZc - ??
$03/E17A 2D 20 27 AND $2720  [$7E:2720] A:00FF X:0028 Y:0000 P:eNvMxdizc - ?And Their Weaknesses?)
$03/E17D 29 3F AND #$3F A:0010 X:0028 Y:0000 P:envMxdizc - ?And 3F?
$03/E17F 85 A9 STA $A9    [$00:00A9] A:0010 X:0028 Y:0000 P:envMxdizc - Store Weakness - Applicable Resistances in A9.
$03/E181 D0 07 BNE $07    [$E18A] A:0010 X:0028 Y:0000 P:envMxdizc - If not 00 branch to 03E18A
------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------
$03/E18A 7B TDC A:0010 X:0028 Y:0000 P:envMxdizc - Transfer Direct Page.
$03/E18B AA TAX A:0000 X:0028 Y:0000 P:envMxdiZc - Transfer A to X
$03/E18C A8 TAY A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to Y.
------------------------------------------------------(Looping Point)---------------------------------------------------------------------
$03/E18D 46 A9 LSR $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZc - /2 Value in A9. (Weaknesses)
$03/E18F 90 08 BCC $08    [$E199] A:0000 X:0000 Y:0000 P:envMxdizc - If clear flag is set branch to 03E199.
------------------------------------------------------------------------------------------------------------------------------------------
$03/E191 98 TYA A:0000 X:0000 Y:0004 P:envMxdiZC - Transfer Y to A.
$03/E192 18 CLC A:0004 X:0000 Y:0004 P:envMxdizC - Clear Carry Flag
$03/E193 69 15 ADC #$15 A:0004 X:0000 Y:0004 P:envMxdizc - Add 15 to A (making it 19 which is HP message)
$03/E195 9D CB 34 STA $34CB,x[$7E:34CB] A:0019 X:0000 Y:0004 P:envMxdizc - Store A in 7E34CB. (Battle Message Data)
--------------------------------------------------------------------------------------------------------------------------------------------
$03/E199 C8 INY A:0000 X:0000 Y:0000 P:envMxdizc - +1 to Y.
$03/E19A C0 06 00 CPY #$0006 A:0000 X:0000 Y:0001 P:envMxdizc - Has it done this six times?
$03/E19D D0 EE BNE $EE    [$E18D] A:0000 X:0000 Y:0001 P:eNvMxdizc - If not, loop back ot 03E18D
$03/E19F 20 A6 85 JSR $85A6  [$03:85A6] A:0019 X:0001 Y:0006 P:envMxdiZC - Jump to Subroutine (??)
$03/E1A2 A9 1E LDA #$1E A:0003 X:0001 Y:0006 P:envMxdizC - Load Message 1E into A.
$03/E1A4 8D CA 34 STA $34CA  [$7E:34CA] A:001E X:0001 Y:0006 P:envMxdizC - Store A in 7E34CA (Battle Message Data)
$03/E1A7 A9 14 LDA #$14 A:001E X:0001 Y:0006 P:envMxdizC - Load 14 into A
$03/E1A9 8D C8 34 STA $34C8  [$7E:34C8] A:0014 X:0001 Y:0006 P:envMxdizC - Store A in...? (no idea what this value does, if it does anything)
$03/E1AC A9 10 LDA #$10 A:0014 X:0001 Y:0006 P:envMxdizC - Load 10 into A.
$03/E1AE 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:0001 Y:0006 P:envMxdizC - Store A in...? (no idea what this value does)
$03/E1B1 60 RTS A:0010 X:0001 Y:0006 P:envMxdizC - Return

Now this is mysterious! Everything about this seems stupidly similar to the spell Peep (and indeed works exactly like it in-game) but that 14 and 10, while unique to this Command that are loaded closeby into 7E34C7 and 7E34C8 don't do Anything. They can be erased and you will see no change to the normal execution of the command. I've set a breakpoint on 7E34C7 and saw several references to it looking at 10 specifically, but I could not Fathom what this is actually doing. Whatever it is doing it seems to be a heavily buried concept. In any case it can't be terribly important, as I've said I can delete both and change them to 00 and nothing different happens. Unfortunately I can't quite grasp on how to make it read a Spell (or else I would just have it use Scan) maybe that knowledge will become available once I figure out more spell based commands like Recall and Pray.


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)
« Last Edit: October 09, 2013, 02:28:02 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 #82 on: October 01, 2013, 09:56:58 PM »
Steal Routine

Code: [Select]
$03/E1CC A9 17 LDA #$17 A:0003 X:002E Y:0000 P:envMxdizc - Load 17 into A.
$03/E1CE 8D C8 34 STA $34C8  [$7E:34C8] A:0017 X:002E Y:0000 P:envMxdizc - Store A in 7E34C8
$03/E1D1 A9 10 LDA #$10 A:0017 X:002E Y:0000 P:envMxdizc - Load 10 into A.
$03/E1D3 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:002E Y:0000 P:envMxdizc - Store A in 7E34C7
$03/E1D6 A9 F8 LDA #$F8 A:0010 X:002E Y:0000 P:envMxdizc - Load F8 into A.
$03/E1D8 8D C6 33 STA $33C6  [$7E:33C6] A:00F8 X:002E Y:0000 P:eNvMxdizc - Store A in 7E33C6,
$03/E1DB A9 04 LDA #$04 A:00F8 X:002E Y:0000 P:eNvMxdizc - Load 04 into A.
$03/E1DD 8D C7 33 STA $33C7  [$7E:33C7] A:0004 X:002E Y:0000 P:envMxdizc - Store A in 7E33C7
$03/E1E0 20 B1 85 JSR $85B1  [$03:85B1] A:0004 X:002E Y:0000 P:envMxdizc - Jump to Subroutine (Nothing of great value as far as I can tell)
$03/E1E3 A5 CE LDA $CE    [$00:00CE] A:0003 X:002E Y:0000 P:envMxdizc - Load CE into A. (Is the Target a Monster?)
$03/E1E5 30 03 BMI $03    [$E1EA] A:0081 X:002E Y:0000 P:eNvMxdizc - Branch if Negative to 03E1EA.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E1E7 4C 39 E2 JMP $E239  [$03:E239] A:0001 X:002E Y:0000 P:envMxdizc - Jump to 03E239.
----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E1EA 20 8B 85 JSR $858B  [$03:858B] A:0081 X:002E Y:0000 P:eNvMxdizc - 03858B - Jump to RNG Routine.
$03/E1ED 85 A9 STA $A9    [$00:00A9] A:000F X:0000 Y:0000 P:eNvMxdizc - Store Random Number in A9.
$03/E1EF 18 CLC A:0035 X:0000 Y:0000 P:envMxdizc - Clear Carry Flag.
$03/E1F0 A9 32 LDA #$32 A:0035 X:0000 Y:0000 P:envMxdizc - Load 32 into A (50?)
$03/E1F2 6D 82 26 ADC $2682  [$7E:2682] A:0032 X:0000 Y:0000 P:envMxdizc - + Caster's Level.
$03/E1F5 38 SEC A:003C X:0000 Y:0000 P:envMxdizc - Set Carry Flag
$03/E1F6 ED 2F 27 SBC $272F  [$7E:272F] A:003C X:0000 Y:0000 P:envMxdizC - (Oh my God... It's the real purpose of 2F in Data... "Run Strength" is actually "Steal Prevention" - It mostly coincides with Enemy Level + 10, which is why we thought it was based solely on level. So what Cry actually does is it Increases your chance to Steal... So Why in Heaven's Name is it given to a character that can't even be in the party at the same time as the one with Steal?!.)
$03/E1F9 B0 04 BCS $04    [$E1FF] A:002C X:0000 Y:0000 P:envMxdizC - If greater than 00? branch to 03E1FF
---------------------------------------------------------------------------------------------------------------------------------------------------
$03/E1FB A9 01 LDA #$01 A:00CE X:0000 Y:0000 P:eNvMxdizc - Load 01 into A.
$03/E1FD 80 06 BRA $06    [$E205] A:0001 X:0000 Y:0000 P:envMxdizc - Branch to 03E205.
--------------------------------------------------------------------------------------------------------------------------------------------------
$03/E1FF C9 63 CMP #$63 A:002C X:0000 Y:0000 P:envMxdizC - Compare it to 100.
$03/E201 90 02 BCC $02    [$E205] A:002C X:0000 Y:0000 P:eNvMxdizc - If less than 100 branch to 03E205.
---------------------------------------------------------------------------------------------------------------------------------
$03/E203 A9 63 LDA #$63 A:0063 X:0000 Y:0000 P:envMxdiZC - Load 63 into A.
----------------------------------------------------------------------------------------------------------------------------------
$03/E205 C5 A9 CMP $A9    [$00:00A9] A:002C X:0000 Y:0000 P:eNvMxdizc - Compare A to the Random Number.
$03/E207 B0 36 BCS $36    [$E23F] A:002C X:0000 Y:0000 P:eNvMxdizc - If greater than it branch to 03E23F (Successful Steal)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E209 20 8B 85 JSR $858B  [$03:858B] A:002C X:0000 Y:0000 P:eNvMxdizc - Jump to Subroutine (Random Number Generator)
$03/E20C CD 2F 27 CMP $272F  [$7E:272F] A:0047 X:0000 Y:0000 P:envMxdizc - Compare to Target's Steal Prevention.
$03/E20F 90 28 BCC $28    [$E239] A:0047 X:0000 Y:0000 P:envMxdizC - If less than Target's Steal Prevention branch to 03E239.
------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E211 C2 20 REP #$20 A:0047 X:0000 Y:0000 P:envMxdizC - Reset Processor Status
$03/E213 AD 89 26 LDA $2689  [$7E:2689] A:0047 X:0000 Y:0000 P:envmxdizC - Load Caster's Max HP.
$03/E216 20 84 84 JSR $8484  [$03:8484] A:00C8 X:0000 Y:0000 P:envmxdizC - Jump to Subroutine (/Max HP amount by 8.)
$03/E219 85 A9 STA $A9    [$00:00A9] A:000C X:0000 Y:0000 P:envmxdizC - Store A (Damage?) in A9.
$03/E21B A9 00 00 LDA #$0000 A:000C X:0000 Y:0000 P:envmxdizC - Load 00 into A.
$03/E21E E2 20 SEP #$20 A:0000 X:0000 Y:0000 P:envmxdiZC - Reset Processor Status.
$03/E220 A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from CD.
$03/E222 20 72 CA JSR $CA72  [$03:CA72] A:0000 X:0000 Y:0000 P:envMxdiZC - Jump to Subroutine (Possibly dealing something with clearing for damage)
$03/E225 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A9 into A.
$03/E227 9D D4 34 STA $34D4,x[$7E:34D4] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E34D4 (Damage Slot for Slot 1.)
$03/E22A A5 AA LDA $AA    [$00:00AA] A:0000 X:0000 Y:0000 P:envMxdiZc - Load the value in AA into A.
$03/E22C 9D D5 34 STA $34D5,x[$7E:34D5] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E34D5
$03/E22F 20 7E CA JSR $CA7E  [$03:CA7E] A:0000 X:0000 Y:0000 P:envMxdiZc - Jump to Subroutine (Definitely Damage)
$03/E232 A9 1C LDA #$1C A:0000 X:0680 Y:001A P:envMxdiZC - Load 1C into A. (Message 1C)
$03/E234 8D CA 34 STA $34CA  [$7E:34CA] A:001C X:0680 Y:001A P:envMxdizC - Store A in 7E34CA (Battle Message Area)
$03/E237 80 05 BRA $05    [$E23E] A:001C X:0680 Y:001A P:envMxdizC - Branch to 03E23E.
-----------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E239 A9 1B LDA #$1B A:0001 X:002E Y:0000 P:envMxdizc - Load 1B into A. (FaileD)
$03/E23B 8D CA 34 STA $34CA  [$7E:34CA] A:001B X:002E Y:0000 P:envMxdizc - Store A in Battle Message Data.
--------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E23E 60 RTS A:001C X:0680 Y:001A P:envMxdizC - Return
------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E23F AD 73 27 LDA $2773  [$7E:2773] A:002C X:0000 Y:0000 P:envMxdizC - Load Target's Item Byte.
$03/E242 29 C0 AND #$C0 A:0076 X:0000 Y:0000 P:envMxdizC - Get rid of inapplicable bits.
$03/E244 C9 C0 CMP #$C0 A:0040 X:0000 Y:0000 P:envMxdizC - Is it C0?
$03/E246 D0 01 BNE $01    [$E249] A:0040 X:0000 Y:0000 P:eNvMxdizc - If not, branch to 03E426
----------------------------------------------------------------------------------------------------------------------------------
(DeathLike2 surmised long ago that you can't steal an Auto-Drop and that's what this is likely related to)
------------------------------------------------------------------------------------------------------------------------------------
$03/E249 7B TDC A:0040 X:0000 Y:0000 P:eNvMxdizc - Transfer Direct Page.
$03/E24A 1A INC A A:0000 X:0000 Y:0000 P:envMxdiZc - +1 to A (+1 to Item)
$03/E24B 85 AA STA $AA    [$00:00AA] A:0001 X:0000 Y:0000 P:envMxdizc - Store A in Quantity Holder.
$03/E24D AD 73 27 LDA $2773  [$7E:2773] A:0001 X:0000 Y:0000 P:envMxdizc - Load Target's Item Byte.
$03/E250 29 3F AND #$3F A:0076 X:0000 Y:0000 P:envMxdizc - Get rid of inapplicable bits.
$03/E252 20 7F 84 JSR $847F  [$03:847F] A:0036 X:0000 Y:0000 P:envMxdizc - Jump to Subroutine (x4 the original value of A)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/847F 0A ASL A A:0036 X:0000 Y:0000 P:envMxdizc - x2 A.
$03/8480 0A ASL A A:006C X:0000 Y:0000 P:envMxdizc - x2 A
$03/8481 60 RTS A:00D8 X:0000 Y:0000 P:eNvMxdizc - Return
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/E255 AA TAX A:00D8 X:0000 Y:0000 P:eNvMxdizc - Transfer A to X.
$03/E256 BF 00 9F 0E LDA $0E9F00,x[$0E:9FD8] A:00D8 X:00D8 Y:0000 P:envMxdizc - Load A from Target's Drop Table.
$03/E25A F0 DD BEQ $DD    [$E239] A:00CF X:00D8 Y:0000 P:eNvMxdizc - Branch if it is 00 to E239. (likely an RTS)
$03/E25C 85 A9 STA $A9    [$00:00A9] A:00CF X:00D8 Y:0000 P:eNvMxdizc - Store Item Value in A9.
$03/E25E C9 61 CMP #$61 A:00CF X:00D8 Y:0000 P:eNvMxdizc - Compare to 61 (Armor Start, likely an Arrow Check)
$03/E260 B0 08 BCS $08    [$E26A] A:00CF X:00D8 Y:0000 P:envMxdizC - If more than 61 branch to 03E26A
-----------------------------------------------------------------------------------------------------------------------
$03/E262 C9 54 CMP #$54 A:005A X:0024 Y:0000 P:eNvMxdizc - Is it 54 or Below?
$03/E264 90 04 BCC $04    [$E26A] A:005A X:0024 Y:0000 P:envMxdizC  - If so, branch to 03E26A.
--------------------------------------------------------------------------------------------------------------------------------
$03/E266 A9 0A LDA #$0A A:005A X:0024 Y:0000 P:envMxdizC - Load 0A (10) into A.
$03/E268 85 AA STA $AA    [$00:00AA] A:000A X:0024 Y:0000 P:envMxdizC - Store A in Quantity Holder .
---------------------------------------------------------------------------------------------------------------------
$03/E26A 7B TDC A:00CF X:00D8 Y:0000 P:envMxdizC - Transfer Direct Page.
$03/E26B AA TAX A:0000 X:00D8 Y:0000 P:envMxdiZC - Transfer A to X.
$03/E26C 9B TXY A:0000 X:0000 Y:0000 P:envMxdiZC - Transfer X to Y.
----------------------------------------------------(Looping Point)--------------------------------------------------------------------------------------
$03/E26D BD 1B 32 LDA $321B,x[$7E:321B] A:0000 X:0000 Y:0000 P:envMxdiZC - Load 7E321B into A (Item menu Data)
$03/E270 C5 A9 CMP $A9    [$00:00A9] A:0016 X:0000 Y:0000 P:envMxdizC - Is the stolen item the same as the current item?
$03/E272 F0 2D BEQ $2D    [$E2A1] A:0016 X:0000 Y:0000 P:envMxdizc - If so branch to 03E2A1.
--------------------------------------------------------------------------------------------------------------------------------------------------
$03/E274 E8 INX A:0016 X:0000 Y:0000 P:envMxdizc +1 to X.
$03/E275 E8 INX A:0016 X:0001 Y:0000 P:envMxdizc + 1 to X
$03/E276 E8 INX A:0016 X:0002 Y:0000 P:envMxdizc +1 to X.
$03/E277 E8 INX A:0016 X:0003 Y:0000 P:envMxdizc +1 to X
$03/E278 C8 INY A:0016 X:0004 Y:0000 P:envMxdizc +1 to Y
$03/E279 C0 30 00 CPY #$0030 A:0016 X:0004 Y:0001 P:envMxdizc - Is Y 30? (Has it looped 30 times?)
$03/E27C D0 EF BNE $EF    [$E26D] A:0016 X:0004 Y:0001 P:eNvMxdizc - If not loop back to 03E26D.
$03/E27E AD F4 38 LDA $38F4  [$7E:38F4] A:00FF X:00C0 Y:0030 P:envMxdiZC - Load 7E38F4 into A.
$03/E281 C9 FF CMP #$FF A:0001 X:00C0 Y:0030 P:envMxdizC - Is it FF?
$03/E283 F0 B4 BEQ $B4    [$E239] A:0001 X:00C0 Y:0030 P:envMxdizc - If so branch to 03E239.
$03/E285 A8 TAY A:0001 X:00C0 Y:0030 P:envMxdizc - Transfer A to Y.
$03/E286 C2 20 REP #$20 A:0001 X:00C0 Y:0001 P:envMxdizc - Reset Processor Status.
$03/E288 0A ASL A A:0001 X:00C0 Y:0001 P:envmxdizc - x2 A.
$03/E289 0A ASL A A:0002 X:00C0 Y:0001 P:envmxdizc - x2 A.
$03/E28A AA TAX A:0004 X:00C0 Y:0001 P:envmxdizc - Transfer A to X.
$03/E28B 7B TDC A:0004 X:0004 Y:0001 P:envmxdizc - Transfer Direct Page.
$03/E28C E2 20 SEP #$20 A:0000 X:0004 Y:0001 P:envmxdiZc - Set Processor Status.
$03/E28E A5 AA LDA $AA    [$00:00AA] A:0000 X:0004 Y:0001 P:envMxdiZc - Load the value in AA into A.
$03/E290 9D 1C 32 STA $321C,x[$7E:3220] A:0001 X:0004 Y:0001 P:envMxdizc - Store A in Item Slot.(Must be the storing of the Item, with a 1 by it.)
$03/E293 A5 A9 LDA $A9    [$00:00A9] A:0001 X:0004 Y:0001 P:envMxdizc - Load A9 (Item) into A.
$03/E295 9D 1B 32 STA $321B,x[$7E:321F] A:00CF X:0004 Y:0001 P:eNvMxdizc - Store A in Item Slot.
$03/E298 86 AB STX $AB    [$00:00AB] A:00CF X:0004 Y:0001 P:eNvMxdizc - Store X in AB.
$03/E29A 5A PHY A:00CF X:0004 Y:0001 P:eNvMxdizc - Push Y.
$03/E29B 20 29 EB JSR $EB29  [$03:EB29] A:00CF X:0004 Y:0001 P:eNvMxdizc - Jump to Subroutine (Part of Item/Dart Check?)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/EB29 F0 71 BEQ $71    [$EB9C] A:00CF X:0004 Y:0001 P:eNvMxdizc - Branch if 00 to 03EB9C.
$03/EB2B C9 DE CMP #$DE A:00CF X:0004 Y:0001 P:eNvMxdizc - Is it DE or above?
$03/EB2D B0 6D BCS $6D    [$EB9C] A:00CF X:0004 Y:0001 P:eNvMxdizc - If so branch to 03EB9C.
$03/EB2F C9 B0 CMP #$B0 A:00CF X:0004 Y:0001 P:eNvMxdizc - Is it B0 or above?
$03/EB31 B0 44 BCS $44    [$EB77] A:00CF X:0004 Y:0001 P:envMxdizC - If so, branch to 03EB77.
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EB33 C9 6D CMP #$6D A:005A X:0004 Y:0001 P:eNvMxdizc - Is it Armor?
$03/EB35 B0 65 BCS $65    [$EB9C] A:005A X:0004 Y:0001 P:eNvMxdizc - If so, branch to 03EB9C.
$03/EB37 C9 61 CMP #$61 A:005A X:0004 Y:0001 P:eNvMxdizc  - Is it Less than Shields?
$03/EB39 90 04 BCC $04    [$EB3F] A:005A X:0004 Y:0001 P:eNvMxdizc - If so, branch to 03EB3F.
---------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------
$03/EB3F AA TAX A:005A X:0004 Y:0001 P:eNvMxdizc - Transfer A to X.
$03/EB40 86 E5 STX $E5    [$00:00E5] A:005A X:005A Y:0001 P:envMxdizc - Store X in E5.
$03/EB42 A2 00 91 LDX #$9100 A:005A X:005A Y:0001 P:envMxdizc - Load 9100 into X.
$03/EB45 86 80 STX $80    [$00:0080] A:005A X:9100 Y:0001 P:eNvMxdizc - Store X in 80.
$03/EB47 A9 0F LDA #$0F A:005A X:9100 Y:0001 P:eNvMxdizc - Load 0F into A.
$03/EB49 85 82 STA $82    [$00:0082] A:000F X:9100 Y:0001 P:envMxdizc - Store A in 82.
$03/EB4B A9 08 LDA #$08 A:000F X:9100 Y:0001 P:envMxdizc - Load 08 into A
$03/EB4D 20 5E 84 JSR $845E  [$03:845E] A:0008 X:9100 Y:0001 P:envMxdizc - Jump to Subroutine (??)
$03/EB50 48 PHA A:0000 X:0008 Y:02D8 P:envMxdiZC - Push A onto Stack,
$03/EB51 AD 9C 28 LDA $289C  [$7E:289C] A:0000 X:0008 Y:02D8 P:envMxdiZC - Load Caster's Unknown (3C)
$03/EB54 20 85 84 JSR $8485  [$03:8485] A:0020 X:0008 Y:02D8 P:envMxdizC - Jump to Subroutine (Divide the Unknown 3 times)
 $03/EB57 29 08 AND #$08 A:0004 X:0008 Y:02D8 P:envMxdizc - Add 08 if applicable?
$03/EB59 85 C7 STA $C7    [$00:00C7] A:0000 X:0008 Y:02D8 P:envMxdiZc - Store A in C7.
$03/EB5B 68 PLA A:0000 X:0008 Y:02D8 P:envMxdiZc - Pull A from Stack.
$03/EB5C AA TAX A:0000 X:0008 Y:02D8 P:envMxdiZc - Transfer A to X.
$03/EB5D 86 E5 STX $E5    [$00:00E5] A:0000 X:0000 Y:02D8 P:envMxdiZc - Store X in E5.
$03/EB5F A2 A0 97 LDX #$97A0 A:0000 X:0000 Y:02D8 P:envMxdiZc - Load 97A0 into X.
$03/EB62 86 80 STX $80    [$00:0080] A:0000 X:97A0 Y:02D8 P:eNvMxdizc - Store X in 80.
$03/EB64 A9 0F LDA #$0F A:0000 X:97A0 Y:02D8 P:eNvMxdizc - Load 0F into A,
$03/EB66 85 82 STA $82    [$00:0082] A:000F X:97A0 Y:02D8 P:envMxdizc - Store A in 82.
$03/EB68 A9 06 LDA #$06 A:000F X:97A0 Y:02D8 P:envMxdizc - Load 06 into A.
$03/EB6A 20 5E 84 JSR $845E  [$03:845E] A:0006 X:97A0 Y:02D8 P:envMxdizc - Jump to Subroutine (??)
$03/EB6D A6 AB LDX $AB    [$00:00AB] A:0000 X:0006 Y:0006 P:envMxdiZC - Load X from AB.
$03/EB6F AD 9F 28 LDA $289F  [$7E:289F] A:0000 X:0004 Y:0006 P:envMxdizC - Load Load A from 7E289F.
$03/EB72 9D 1D 32 STA $321D,x[$7E:3221] A:007F X:0004 Y:0006 P:envMxdizC - Store A in 7E3221.
$03/EB75 80 1C BRA $1C    [$EB93] A:007F X:0004 Y:0006 P:envMxdizC - Branch to 03EB93.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/EB77 38 SEC A:00CF X:0004 Y:0001 P:envMxdizC - Set Carry Flag.
$03/EB78 E9 B0 SBC #$B0 A:00CF X:0004 Y:0001 P:envMxdizC - Subtract B0 from Item.
$03/EB7A AA TAX A:001F X:0004 Y:0001 P:envMxdizC - Transfer A to X.
$03/EB7B 86 E5 STX $E5    [$00:00E5] A:001F X:001F Y:0001 P:envMxdizC - Store X in E5.
$03/EB7D A2 80 96 LDX #$9680 A:001F X:001F Y:0001 P:envMxdizC - Load 9680 into X.
$03/EB80 86 80 STX $80    [$00:0080] A:001F X:9680 Y:0001 P:eNvMxdizC - Store X in 80.
$03/EB82 A9 0F LDA #$0F A:001F X:9680 Y:0001 P:eNvMxdizC - Load 0F into A.
$03/EB84 85 82 STA $82    [$00:0082] A:000F X:9680 Y:0001 P:envMxdizC - Store A in 82.
$03/EB86 A9 06 LDA #$06 A:000F X:9680 Y:0001 P:envMxdizC - Load 06 into A.
$03/EB88 20 5E 84 JSR $845E  [$03:845E] A:0006 X:9680 Y:0001 P:envMxdizC - Jump to Subroutine.
$03/EB8B A6 AB LDX $AB    [$00:00AB] A:0080 X:0006 Y:00C0 P:envMxdiZC - Load AB into X.
$03/EB8D AD 9F 28 LDA $289F  [$7E:289F] A:0080 X:0004 Y:00C0 P:envMxdizC - Load A from 7E289F.
$03/EB90 9D 1D 32 STA $321D,x[$7E:3221] A:0002 X:0004 Y:00C0 P:envMxdizC - Store A in Item Data.
$03/EB93 AD 9C 28 LDA $289C  [$7E:289C] A:0002 X:0004 Y:00C0 P:envMxdizC - Load A from 7E289C.
$03/EB96 29 E0 AND #$E0 A:0020 X:0004 Y:00C0 P:envMxdizC - Get rid of bits.
$03/EB98 4A LSR A A:0020 X:0004 Y:00C0 P:envMxdizC - /2 A.
$03/EB99 9D 1A 32 STA $321A,x[$7E:321E] A:0010 X:0004 Y:00C0 P:envMxdizc - Store A in 7E321E.
$03/EB9C 60 RTS A:0010 X:0004 Y:00C0 P:envMxdizc - Return.
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$03/E29E 7A PLY A:0010 X:0004 Y:00C0 P:envMxdizc - Pull Y.
$03/E29F 80 20 BRA $20    [$E2C1] A:0010 X:0004 Y:0001 P:envMxdizc - Branch to 03E2C1
------------------------------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------------------------
$03/E2C1 20 CF E2 JSR $E2CF  [$03:E2CF] A:0010 X:0004 Y:0001 P:envMxdizc  - Jump to ...Own Routine?
------------------------------------------------------------------------------------------------------------------------------------------
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
(Special Code, only accessed by an RTS at the end of its ordinary routine, oddly enough.)
$03/E2C4 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0004 Y:0001 P:envMxdizc - Load Stolen Item into A.
$03/E2C6 8D 9A 35 STA $359A  [$7E:359A] A:00CF X:0004 Y:0001 P:eNvMxdizc - Store A in 7E359A.
$03/E2C9 A9 1D LDA #$1D A:00CF X:0004 Y:0001 P:eNvMxdizc - Load Message 1D
$03/E2CB 8D CA 34 STA $34CA  [$7E:34CA] A:001D X:0004 Y:0001 P:envMxdizc - Store Message in Battle Message Data.
$03/E2CE 60 RTS A:001D X:0004 Y:0001 P:envMxdizc - Return
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/E2CF DA PHX A:0010 X:0004 Y:0001 P:envMxdizc - Push X.
$03/E2D0 5A PHY A:0010 X:0004 Y:0001 P:envMxdizc - Push Y.
$03/E2D1 98 TYA A:0010 X:0004 Y:0001 P:envMxdizc - Transfer Y to A.
$03/E2D2 85 01 STA $01    [$00:0001] A:0001 X:0004 Y:0001 P:envMxdizc - Store A in 01.
$03/E2D4 A9 06 LDA #$06 A:0001 X:0004 Y:0001 P:envMxdizc - Load 06 into A.
$03/E2D6 20 85 80 JSR $8085  [$03:8085] A:0006 X:0004 Y:0001 P:envMxdizc - Jump to Subroutine (A lot of jumping. A lot of things that don't make much sense to me.)
$03/E2D9 7A PLY A:0000 X:7510 Y:0018 P:envMxdiZc - Pull Y.
$03/E2DA FA PLX A:0000 X:7510 Y:0001 P:envMxdizc - Pull X.
$03/E2DB 60 RTS A:0000 X:0004 Y:0001 P:envMxdizc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Whew! Now that was work but a lot of valuable information came out of this. First and foremost is finally the purpose of that Mystery Byte that we've been calling "Run Strength" for years on end. What it actually is a "Steal Prevention" byte. It appears to be Enemy Level +10(decimal) for Enemies. Which means the Purpose of Cry is to make it easier to Steal Items. Well done Square! Under normal circumstances that situation can never happen! In addition is all the chances of success are recorded below so Cry is absolutely, positively, worthless under normal gameplay circumstances.

50 + Level - Target's Steal Prevention = Amount that will be tested against a Random Number (which seems like it can range from 1-255.) - If the value is over 100 it is an automatic success. (which can only happen in levels 60 and up.)  I wonder if this 2F Byte might also be dealing something with Odin as well....


Well no matter. That was a worthwhile venture.

 :edit: Added the branch that goes off of Arrows for quick and easy modification.

 :edit: 10/11/13 - Added information on branches.







« Last Edit: October 11, 2013, 06:53:21 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 #83 on: October 03, 2013, 09:44:38 PM »
Next up is Salve/Heal/Medicine, whatever you wish to call it.

Salve Routine

Code: [Select]
$03/E2DC A9 C1 LDA #$C1 A:0003 X:0014 Y:0000 P:envMxdizc - Load C1 into A.
$03/E2DE 8D C4 33 STA $33C4  [$7E:33C4] A:00C1 X:0014 Y:0000 P:eNvMxdizc - Store A in Audiovisual Code.
$03/E2E1 7B TDC A:00C1 X:0014 Y:0000 P:eNvMxdizc - Transfer Direct Page.
$03/E2E2 AA TAX A:0000 X:0014 Y:0000 P:envMxdiZc - Transfer A to X
$03/E2E3 A8 TAY A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to Y.
-------------------------------------------------(Looping Point)------------------------------------------------------------------
$03/E2E4 BD 1B 32 LDA $321B,x[$7E:321B] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from 7E321B (Start of Items in battle)
$03/E2E7 C9 D4 CMP #$CE A:00CE X:0000 Y:0000 P:eNvMxdizc - Is it Cure 1?
$03/E2E9 F0 14 BEQ $14    [$E2FF] A:00CE X:0000 Y:0000 P:eNvMxdizc - If so branch to 03E2FF.
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E2EB C8 INY A:00CE X:0000 Y:0000 P:eNvMxdizc +1 Y.
$03/E2EC E8 INX A:00CE X:0000 Y:0001 P:envMxdizc +1 X.
$03/E2ED E8 INX A:00CE X:0001 Y:0001 P:envMxdizc +1 X
$03/E2EE E8 INX A:00CE X:0002 Y:0001 P:envMxdizc +1 X
$03/E2EF E8 INX A:00CE X:0003 Y:0001 P:envMxdizc +1 X
$03/E2F0 E0 C0 00 CPX #$00C0 A:00CE X:0004 Y:0001 P:envMxdizc - Has X reached C0 yet?
$03/E2F3 D0 EF BNE $EF    [$E2E4] A:00CE X:0004 Y:0001 P:eNvMxdizc - If not branch back to 03E2E4.
$03/E2F5 20 A6 85 JSR $85A6  [$03:85A6] A:00FF X:00C0 Y:0030 P:envMxdiZC - Jump to Subroutine (??)
$03/E2F8 A9 0F LDA #$0F A:0003 X:00C0 Y:0030 P:envMxdizC - Load 0F into A. (Not Enough Medicine)
$03/E2FA 8D CA 34 STA $34CA  [$7E:34CA] A:000F X:00C0 Y:0030 P:envMxdizC - Store A in Battle Message Data
$03/E2FD 80 42 BRA $42    [$E341] A:000F X:00C0 Y:0030 P:envMxdizC - Branch to 03E341.
---------------------------------------------------------------------------------------------------------------------
$03/E2FF BD 1A 32 LDA $321A,x[$7E:321A] A:00CE X:0000 Y:0000 P:envMxdiZC - Load Item Slot.
$03/E302 29 7F AND #$7F A:0010 X:0000 Y:0000 P:envMxdizC - Get rid of all negative bytes?
$03/E304 9D 1A 32 STA $321A,x[$7E:321A] A:0010 X:0000 Y:0000 P:envMxdizC - Store this in Item Slot?
$03/E307 BD 1C 32 LDA $321C,x[$7E:321C] A:0010 X:0000 Y:0000 P:envMxdizC - Load A from Item Quantity.
$03/E30A C9 01 CMP #$01 A:0002 X:0000 Y:0000 P:envMxdizC - Is it 01?
$03/E30C 90 E7 BCC $E7    [$E2F5] A:0002 X:0000 Y:0000 P:envMxdizC - If 01 or less, branch to 03E2F5
--------------------------------------------------------------------------------------------------------------------------------
$03/E30E 38 SEC A:0002 X:0000 Y:0000 P:envMxdizC  - Set Carry Flag.
$03/E30F BD 1C 32 LDA $321C,x[$7E:321C] A:0002 X:0000 Y:0000 P:envMxdizC - Load Item Quantity into A.
$03/E312 E9 01 SBC #$01 A:0002 X:0000 Y:0000 P:envMxdizC -1 to A.
$03/E314 9D 1C 32 STA $321C,x[$7E:321C] A:0001 X:0000 Y:0000 P:envMxdizC - Store A in Item Quantity.
$03/E317 D0 0B BNE $0B    [$E324] A:0001 X:0000 Y:0000 P:envMxdizC - If A is not 00 branch to 03E324.
----------------------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------------------
$03/E324 98 TYA A:0001 X:0000 Y:0000 P:envMxdizC - Transfer Y to A.
$03/E325 85 01 STA $01    [$00:0001] A:0000 X:0000 Y:0000 P:envMxdiZC - Store A in 01.
$03/E327 A9 06 LDA #$06 A:0000 X:0000 Y:0000 P:envMxdiZC - Load 06 into A.
$03/E329 20 85 80 JSR $8085  [$03:8085] A:0006 X:0000 Y:0000 P:envMxdizC - Jump to Subroutine (A lot of jumping.)
$03/E32C A9 F8 LDA #$F8 A:0000 X:7510 Y:0018 P:envMxdiZc - Load F8 into A. - Load F8 into A. (All Ally Target)
$03/E32E 8D D4 26 STA $26D4  [$7E:26D4] A:00F8 X:7510 Y:0018 P:eNvMxdizc - Store A in Targeting (!!! I finally found the first case of identifiable targeting in a Command!)
$03/E331 A9 CE LDA #$CE A:00F8 X:7510 Y:0018 P:eNvMxdizc - Load Cure 1 into A.
$03/E333 8D D2 26 STA $26D2  [$7E:26D2] A:00CE X:7510 Y:0018 P:eNvMxdizc - Store A in Action Taken.
$03/E336 EE 2A 35 INC $352A  [$7E:352A] A:00CE X:7510 Y:0018 P:eNvMxdizc - +1 to 7E352A.
$03/E339 20 3E CD JSR $CD3E  [$03:CD3E] A:00CE X:7510 Y:0018 P:envMxdizc - Jump to Subroutine (!Everything! in the Magic Call...)
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
$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.
------------------------------------------------------------------------------------------------------------------------
(Unless you're using the Sorcerer's Robe as the Item, I don't think this can Ever apply) from this JSR anyhow.
--------------------------------------------------------------------------------------------------------------------------
$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/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/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/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



 
This was an absolute ton of work, considering that 1/100th of the actual Subroutine does anything! A lot of it is a jump to an area I was trying to avoid for as long as possible in the Magic Call Subroutines, but I got pulled into it. However I did locate some very important things within.

First and foremost is Command Targeting!

$03/E32C   A9 F8   LDA #$F8   A:0000   X:7510   Y:0018   P:envMxdiZc - Load F8 into A. - Load F8 into A. (All Ally Target)
$03/E32E   8D D4 26   STA $26D4  [$7E:26D4]   A:00F8   X:7510   Y:0018   P:eNvMxdizc - Store A in Targeting (!!! I finally found the first case of identifiable targeting in a Command!)

00 - No Target
01 - Monster Target 1 (Slot 3)
02 - Monster Target 2 (Slot 2)
04 - Monster Target 3 (Slot 1)
08 - Character Target 1 (Slot 5)
10 - Character Target 2(Slot 2)
20 - Character Target 3(Slot 3)
40 - Character Target 4 (Slot4)
80 - Character Target 5 (Slot 1)

(I'm uncertain why I can't hit more than 3 monsters)
F8 is the ordinary command targeting, meaning target all allies, I'm not sure how to hit all monster 0F only hits 3 of them. Unfortunately by the way this particular sequence is developed it is also retargetted in the crazy Magic Call routine, so I can't quite make good use of that, not in this routine anyhow. Also because of the way the command works (Subroutine makes it act as if it were a healing spell) I don't think I can get rid of the Split Damage portion of it.

Furthermore is how the game Really tells what is considered White and Black Magic (granted Phoenix's hack a long time ago may have fixed this, I'm not really sure.)

$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 Or Will (dependent on whether X above was triggered)

And...

$03/CF0F   A6 C7   LDX $C7    [$00:00C7]   A:0000   X:0000   Y:0000   P:envMxdiZc - Load X from C7.
$03/CF11   BD 97 26   LDA $2697,x[$7E:2697]   A:0000   X:0000   Y:0000   P:envMxdiZc - Load Caster's Modified Wisdom or Will
$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.)

Hmm, I'd love to try and add a Wisdom/Will combination for Summons, but that seems like it would be quite a tricky JSR to even work to.

And that should do it for Salve! ...I think. It was a lot more work than I was ever anticipating, but the yields were quite fantastic.

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 Disassembly)
« Reply #84 on: October 03, 2013, 10:19:07 PM »
Couple of questions about the targetting...
Did you try other values beyond what you listed? For example, what happens if you use 78? Does it target everyone except slot 5? Have you tried FF?
More compelling to me than that: have you noticed any other routines storing a value into 26D4? Is this always used as the targeting byte in RAM?

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #85 on: October 03, 2013, 11:15:34 PM »
I did try a few of these, but I'll check out the others and see what happens...

FF will only target your party and three of the enemy. (Splitting it eight ways, hilariously enough)
78 works just as you predicted. It hits all except Character 5 (Slot 1)

26D4? When I was just browsing through the Dark Wave routine, I may have seen it, let me check...

No, apparently I did not.

...Just did a search for it!

You were the one who found a reference, ironically enough...

"
$03/E050 A9 F8       LDA #$F8                A:0000 X:0000 Y:0000
$03/E052 8D D4 26    STA $26D4  [$7E:26D4]   A:0000 X:0000 Y:0000 ;(Don't know what's going on here, seems irrelevant)
"

Load Target All, Store A in Targeting Area. Why can the Life Item when split through Salve go through the normal check? Likely the same reason Asura can go through the normal check. A specific targetting that goes beyond the normal "Is Target Dead? Check."

To my knowledge it is always used as targeting. The reason we have a very compressed version to use in casual editing is because they shoved targeting into only a half-byte.
« Last Edit: October 03, 2013, 11:27:18 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 #86 on: October 04, 2013, 09:15:59 AM »
Hmm, I've just done a bit of testing Chillyfeez and it seems that you may not have tested Salve as thoroughly as possible. I can change its targeting without any issue. 80- Auto Target All Allies , 60 - Target All Enemies, 50 - Target one Enemy. 10 - Target one Ally, 20 - Target all Allies. F0 Target split Enemies/Allies.

 I wonder if we can turn the Salve Command into a "Split Any Item" effect by checking it, broadly speaking, against the first item and seeing if it falls within the B0 to DD. As the routine itself only seems to load the item routine to load from another area (Magic Call) and giving it Ally/Enemy targeting (F0) allowing the player that much more versaility in using it?


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 Disassembly)
« Reply #87 on: October 04, 2013, 02:58:24 PM »
 :blush: my mistake. Did you try targeting enemies with it? Maybe I tried that first and the result was unchanged so I jumped to conclusions... wonder what else I might have missed.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (All Spells Disassembly)
« Reply #88 on: October 06, 2013, 02:55:09 PM »
Indeed, you can target enemies with it in a normal fashion as well.

As for some Commands though... I don't think they will have the ability to have their targeting changed, mainly the skills that invoke the normal attack routine. Jump, Focus, and Aim since they are modified normal attacks that are only given special circumstances through the same said normal attack routine. (In all fairness Aim is probably a little different) But we will see in time.

Next up is the Cover Routine -

Cover is a very special command for several reasons.

1. It is the first command (inwardly) that changes to something else depending on whether it has been used (In this case "Off")
2. It requires a specific character (and surprisingly it has a safeguard ?against cheaters? that makes it so Cover is disabled if the Dark Knight is present).
3. The behavior can be applied to all characters except the Coverer.
4. If another character uses Cover they can then set another target or themselves to be covered. In essence targeting the Coverer's Cover (perhaps a command for Rosa?)

So let's see what its routine reveals...

Code: [Select]
$03/E60F A5 CE LDA $CE    [$00:00CE] A:0003 X:0026 Y:0000 P:envMxdizc - Load CE from A (Slot of Character that will be Covered)
$03/E611 8D 7A 35 STA $357A  [$7E:357A] A:0001 X:0026 Y:0000 P:envMxdizc - Store A in 7E357A.  (Store A in Character Slot that Will be Covered)
$03/E614 20 89 84 JSR $8489  [$03:8489] A:0001 X:0026 Y:0000 P:envMxdizc - Jump to Subroutine (Preparation?)
$03/E617 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0240 Y:0000 P:envMxdizc - Load the value in A6 into X.
$03/E619 BD 06 20 LDA $2006,x[$7E:2106] A:0000 X:0100 Y:0000 P:envMxdizc - Load A from the Target of Cover's Status Byte 4.
$03/E61C 09 02 ORA #$02 A:0000 X:0100 Y:0000 P:envMxdiZc - Add 02 to A if applicable.
$03/E61E 9D 06 20 STA $2006,x[$7E:2106] A:0002 X:0100 Y:0000 P:envMxdizc - Store "Covered" in Target of Cover's Status Byte 4.
$03/E621 A5 CD LDA $CD    [$00:00CD] A:0002 X:0100 Y:0000 P:envMxdizc - Load A from CD.
$03/E623 20 89 84 JSR $8489  [$03:8489] A:0000 X:0100 Y:0000 P:envMxdiZc - Jump to Subroutine. (Preparation?)
$03/E626 AE 34 35 LDX $3534  [$7E:3534] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from 7E3534.
-----------------------------------------------------------(Looping Point)-----------------------------------------------------------------------------
$03/E629 BD 03 33 LDA $3303,x[$7E:3303] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from User's Command Byte X.
$03/E62C C9 13 CMP #$13 A:0000 X:0000 Y:0000 P:envMxdiZc - Is it Cover?
$03/E62E F0 06 BEQ $06    [$E636] A:0000 X:0000 Y:0000 P:eNvMxdizc - Branch if equal to 03E636.
$03/E630 E8 INX A:0000 X:0000 Y:0000 P:eNvMxdizc - +1 to X
$03/E631 E8 INX A:0000 X:0001 Y:0000 P:envMxdizc +1 to X
$03/E632 E8 INX A:0000 X:0002 Y:0000 P:envMxdizc +1 to X
$03/E633 E8 INX A:0000 X:0003 Y:0000 P:envMxdizc +1 to X
$03/E634 80 F3 BRA $F3    [$E629] A:0000 X:0004 Y:0000 P:envMxdizc - Loop back to 03E629. - Continue looking for it.
$03/E636 A9 1D LDA #$1D A:0013 X:0004 Y:0000 P:envMxdiZC - Load 1D into A. - Load Off into A.
$03/E638 9D 03 33 STA $3303,x[$7E:3307] A:001D X:0004 Y:0000 P:envMxdizC - Store A in Command Byte.
$03/E63B 7B TDC A:001D X:0004 Y:0000 P:envMxdizC - Transfer Direct Page. - Transfer Direct Page.
$03/E63C 9D 02 33 STA $3302,x[$7E:3306] A:0000 X:0004 Y:0000 P:envMxdiZC  - Store 00 in the byte before Command.
$03/E63F A5 CD LDA $CD    [$00:00CD] A:0000 X:0004 Y:0000 P:envMxdiZC - Load A from CD. -
$03/E641 85 00 STA $00    [$00:0000] A:0000 X:0004 Y:0000 P:envMxdiZC - Store A in 00.
$03/E643 A9 09 LDA #$09 A:0000 X:0004 Y:0000 P:envMxdiZC - Load 09 into A.
$03/E645 20 85 80 JSR $8085  [$03:8085] A:0009 X:0004 Y:0000 P:envMxdizC - Jump to Subroutine. (A lot of jumping)
$03/E648 A9 13 LDA #$13 A:0005 X:7504 Y:000A P:envMxdiZC - Cover Message into A.
$03/E64A 8D C8 34 STA $34C8  [$7E:34C8] A:0013 X:7504 Y:000A P:envMxdizC - Store A in 7E34C8.
$03/E64D A9 10 LDA #$10 A:0013 X:7504 Y:000A P:envMxdizC - Load Mini-message into A.
$03/E64F 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:7504 Y:000A P:envMxdizC - Store A 7E34C7.
$03/E652 60 RTS A:0010 X:7504 Y:000A P:envMxdizC - Return
--------------------------------------------------------------------------------------------------------------------------------------------------

Well that was short and to the point. Apply Status to the Covered. Now there were a few other things in there as well, but I couldn't really make much sense of them.
Alot of its peculiarities would probably deal with the coding of status ailments and that's a completely unexplored region.



Off Routine -

Code: [Select]
$03/E653 A9 1D LDA #$1D A:0003 X:003A Y:0000 P:envMxdizc - Load 1D into A. - Load Off into Message.
$03/E655 8D C8 34 STA $34C8  [$7E:34C8] A:001D X:003A Y:0000 P:envMxdizc - Store A in 7E34C8.
$03/E658 A9 10 LDA #$10 A:001D X:003A Y:0000 P:envMxdizc - Load 10 into A. - Load Min-Message
$03/E65A 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:003A Y:0000 P:envMxdizc - Store A in 7E34C7. 
$03/E65D AD 7A 35 LDA $357A  [$7E:357A] A:0010 X:003A Y:0000 P:envMxdizc - Load A from 7E357A. (Character last covered)
$03/E660 20 89 84 JSR $8489  [$03:8489] A:0000 X:003A Y:0000 P:envMxdiZc  - Jump to Subroutine (Preparation?)
$03/E663 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Character Slot into X.
$03/E665 BD 06 20 LDA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from Character that was Covered's Status Byte 4.
$03/E668 29 FD AND #$FD A:0002 X:0000 Y:0000 P:envMxdizc - Add -2 to it.
$03/E66A 9D 06 20 STA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in the Character that was Covered's Status Byte 4.
$03/E66D A5 CD LDA $CD    [$00:00CD] A:0000 X:0000 Y:0000 P:envMxdiZc - Load CD into A.
$03/E66F 20 89 84 JSR $8489  [$03:8489] A:0000 X:0000 Y:0000 P:envMxdiZc - Jump to Subroutine (Preparation?)
$03/E672 AE 34 35 LDX $3534  [$7E:3534] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from 7E3534.
-------------------------------------------------------(Looping Point)----------------------------------------------------------------------
$03/E675 BD 03 33 LDA $3303,x[$7E:3303] A:0000 X:0000 Y:0000 P:envMxdiZc - Load from User's Command Byte.
$03/E678 C9 1D CMP #$1D A:0000 X:0000 Y:0000 P:envMxdiZc - Is it Off?
$03/E67A F0 06 BEQ $06    [$E682] A:0000 X:0000 Y:0000 P:eNvMxdizc - If so branch to 03E682.
$03/E67C E8 INX A:0000 X:0000 Y:0000 P:eNvMxdizc - +1 X
$03/E67D E8 INX A:0000 X:0001 Y:0000 P:envMxdizc +1 X
$03/E67E E8 INX A:0000 X:0002 Y:0000 P:envMxdizc +1 X
$03/E67F E8 INX A:0000 X:0003 Y:0000 P:envMxdizc +1 X
$03/E680 80 F3 BRA $F3    [$E675] A:0000 X:0004 Y:0000 P:envMxdizc - Loop back to 03E675. - Look for it until you find it.
$03/E682 A9 13 LDA #$13 A:001D X:0004 Y:0000 P:envMxdiZC - Load Cover into A.
$03/E684 9D 03 33 STA $3303,x[$7E:3307] A:0013 X:0004 Y:0000 P:envMxdizC - Store A in User's Command Byte.
$03/E687 A9 18 LDA #$18 A:0013 X:0004 Y:0000 P:envMxdizC - Load 18 into A -
$03/E689 9D 02 33 STA $3302,x[$7E:3306] A:0018 X:0004 Y:0000 P:envMxdizC - Store A in byte before Command Byte.
$03/E68C A5 CD LDA $CD    [$00:00CD] A:0018 X:0004 Y:0000 P:envMxdizC - Load A from CD.
$03/E68E 85 00 STA $00    [$00:0000] A:0000 X:0004 Y:0000 P:envMxdiZC - Store A in 00.
$03/E690 A9 09 LDA #$09 A:0000 X:0004 Y:0000 P:envMxdiZC - Load 09 into A.
$03/E692 20 85 80 JSR $8085  [$03:8085] A:0009 X:0004 Y:0000 P:envMxdizC (Lots of jumping)
$03/E695 60 RTS A:0005 X:7504 Y:000A P:envMxdiZC - Return

It is almost a carbon copy of what is above surprisingly enough. Except with a -2 rather than a +2.

Well that seems quite simple to figure out. But it seems because of the way it is made it can't be multi-targetted as it has no support in doing so.


:edit: 1/10/14 - Fixed up a bit of the above, adding information that I am more aware of now.


« Last Edit: January 10, 2014, 12:11:48 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 #89 on: October 06, 2013, 06:54:52 PM »
Next up is Gird/Endure/Bear - Yang Casting Protect on Himself for free.

Gird Routine -

Code: [Select]
$03/E696 A9 05 LDA #$05 A:0003 X:001E Y:0000 P:envMxdizc - Load 05 into A. (Protect)
$03/E698 8D D2 26 STA $26D2  [$7E:26D2] A:0005 X:001E Y:0000 P:envMxdizc - Store A in Next Action (Protect)
$03/E69B 9C C4 33 STZ $33C4  [$7E:33C4] A:0005 X:001E Y:0000 P:envMxdizc - Store Zero in 7E33C4.
$03/E69E 20 3E CD JSR $CD3E  [$03:CD3E] A:0005 X:001E Y:0000 P:envMxdizc - Jump to Subroutine (Magic Call... Look at Salve Routine for more detail)
$03/E6A1 20 B1 85 JSR $85B1  [$03:85B1] A:0080 X:0680 Y:001A P:eNvMxdizC - Jump to Subroutine (Nothing of great value as far as I can tell.)
$03/E6A4 A9 3A LDA #$3A A:0003 X:0680 Y:001A P:envMxdizC - Load 3A into A. (D)
$03/E6A6 8D CA 34 STA $34CA  [$7E:34CA] A:003A X:0680 Y:001A P:envMxdizC - Store A in 7E34CA (Battle Message Area)
$03/E6A9 A9 0F LDA #$0F A:003A X:0680 Y:001A P:envMxdizC - Load 0F into A.
$03/E6AB 8D C8 34 STA $34C8  [$7E:34C8] A:000F X:0680 Y:001A P:envMxdizC - Store A in 7E34C8.
$03/E6AE A9 10 LDA #$10 A:000F X:0680 Y:001A P:envMxdizC - Load 10 into A.
$03/E6B0 8D C7 34 STA $34C7  [$7E:34C7] A:0010 X:0680 Y:001A P:envMxdizC - Store A in 7E34C7.
$03/E6B3 60 RTS A:0010 X:0680 Y:001A P:envMxdizC - Return

That was a routine? Much shorter than I expected for a literal Spell Casting routine, but this is actually Very good news. Look at how short it is to Actually make a Command cast a given spell? It seems much shorter than Peep. So in reality you could virtually copy this data, paste it into Peep, change 05 to Peep's spell number and there you go. You would probably even save yourself quite a few bytes in doing so.

Interestingly, while Gird clearly shows the character taking a defensive stance it doesn't actually give the user Defensive Status.

Next up is Kick Routine, that we already know is linked to directly to Dark Wave, unfortunately. Change the stat determination in one and you change the stats in the other.

So let's see what the Routine has to show us.


Kick Routine -

Code: [Select]
$03/E6B4 64 C1 STZ $C1    [$00:00C1] A:0003 X:001C Y:0000 P:envMxdizc - Store Zero in C1.
$03/E6B6 4C B9 E6 JMP $E6B9  [$03:E6B9] A:0003 X:001C Y:0000 P:envMxdizc - Jump to... 0 bytes away. Sure, alright.
$03/E6B9 A5 CD LDA $CD    [$00:00CD] A:0003 X:001C Y:0000 P:envMxdizc - Load CD into A. (Character ID?)
$03/E6BB 10 4A BPL $4A    [$E707] A:0000 X:001C Y:0000 P:envMxdiZc - Branch if Plus to 03E707. (If a player is not using it (and is for Enemy Yang)
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E6BD 8D C7 34 STA $34C7  [$7E:34C7] A:0080 X:001C Y:0000 P:eNvMxdizc - Store A in 7E34C7.
$03/E6C0 A9 F8 LDA #$F8 A:0080 X:001C Y:0000 P:eNvMxdizc - Load F8 into A
$03/E6C2 8D C5 34 STA $34C5  [$7E:34C5] A:00F8 X:001C Y:0000 P:eNvMxdizc - Store A in 7E34C5.
$03/E6C5 7B TDC A:00F8 X:001C Y:0000 P:eNvMxdizc - Transfer Direct Page.
$03/E6C6 AA TAX A:0000 X:001C Y:0000 P:envMxdiZc - Transfer A to X.
$03/E6C7 A8 TAY A:0000 X:0000 Y:0000 P:envMxdiZc - Transfer A to Y.
------------------------------------------------------------------(Looping Point)------------------------------------------------------------------------------
$03/E6C8 BD C2 33 LDA $33C2,x[$7E:33C2] A:0000 X:0000 Y:0000 P:envMxdiZc - Load 7E33C2 into A. (Graphics of some kind?)
$03/E6CB 99 9C 28 STA $289C,y[$7E:289C] A:00F2 X:0000 Y:0000 P:eNvMxdizc - Store A in 7E289C.
$03/E6CE C9 CE CMP #$CE A:00F2 X:0000 Y:0000 P:eNvMxdizc - Is it CE?
$03/E6D0 F0 08 BEQ $08    [$E6DA] A:00F2 X:0000 Y:0000 P:envMxdizC - If so branch to 03E6DA.
$03/E6D2 C9 C5 CMP #$C5 A:00F2 X:0000 Y:0000 P:envMxdizC - Is it C5?
$03/E6D4 F0 04 BEQ $04    [$E6DA] A:00F2 X:0000 Y:0000 P:envMxdizC - If so branch to 03E6DA.
$03/E6D6 E8 INX A:00F2 X:0000 Y:0000 P:envMxdizC - +1 X.
$03/E6D7 C8 INY A:00F2 X:0001 Y:0000 P:envMxdizC - +1 Y.
$03/E6D8 80 EE BRA $EE    [$E6C8] A:00F2 X:0001 Y:0001 P:envMxdizC - Loop back to 03E6C8.
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E6DA C8 INY A:00CE X:0002 Y:0002 P:envMxdiZC - +1 to Y.
$03/E6DB A9 F8 LDA #$F8 A:00CE X:0002 Y:0003 P:envMxdizC - Load F8 into A.
$03/E6DD 99 9C 28 STA $289C,y[$7E:289F] A:00F8 X:0002 Y:0003 P:eNvMxdizC - Store A in 7E289F.
$03/E6E0 C8 INY A:00F8 X:0002 Y:0003 P:eNvMxdizC - +1 to Y.
$03/E6E1 A9 04 LDA #$04 A:00F8 X:0002 Y:0004 P:envMxdizC + Load 04 into A.
$03/E6E3 99 9C 28 STA $289C,y[$7E:28A0] A:0004 X:0002 Y:0004 P:envMxdizC - Store A in 7E28A0.
$03/E6E6 C8 INY A:0004 X:0002 Y:0004 P:envMxdizC - +1 to Y.
$03/E6E7 E8 INX A:0004 X:0002 Y:0005 P:envMxdizC +1 to X.
$03/E6E8 BD C2 33 LDA $33C2,x[$7E:33C5] A:0004 X:0003 Y:0005 P:envMxdizC - Load A from 7E33C5 (Graphics of some kind?)
$03/E6EB 99 9C 28 STA $289C,y[$7E:28A1] A:00FE X:0003 Y:0005 P:eNvMxdizC - Store A in 7E28A1.
$03/E6EE C9 FF CMP #$FF A:00FE X:0003 Y:0005 P:eNvMxdizC - Is it FF?
 $03/E6F0 F0 04 BEQ $04    [$E6F6] A:00FE X:0003 Y:0005 P:eNvMxdizc - If it is branch to 03E6F6.
$03/E6F2 E8 INX A:00FE X:0003 Y:0005 P:eNvMxdizc - +1 to X.
$03/E6F3 C8 INY A:00FE X:0004 Y:0005 P:envMxdizc  - +1 to Y.
$03/E6F4 80 F2 BRA $F2    [$E6E8] A:00FE X:0004 Y:0006 P:envMxdizc - Loop back to 03E6E8.
--------------------------------------------------------------------------------------------------------------------------------------
$03/E6F6 7B TDC A:00FF X:0004 Y:0006 P:envMxdiZC - Transfer Direct Page.
$03/E6F7 AA TAX A:0000 X:0004 Y:0006 P:envMxdiZC - Transfer A to X.
$03/E6F8 BD 9C 28 LDA $289C,x[$7E:289C] A:0000 X:0000 Y:0006 P:envMxdiZC - Load 7E289C.
$03/E6FB 9D C2 33 STA $33C2,x[$7E:33C2] A:00F2 X:0000 Y:0006 P:eNvMxdizC - Store A in 7E33C2.
$03/E6FE C9 FF CMP #$FF A:00F2 X:0000 Y:0006 P:eNvMxdizC - Is it FF?
$03/E700 F0 03 BEQ $03    [$E705] A:00F2 X:0000 Y:0006 P:eNvMxdizc -If so branch to 03E705.
$03/E702 E8 INX A:00F2 X:0000 Y:0006 P:eNvMxdizc - +1 to X.
$03/E703 80 F3 BRA $F3    [$E6F8] A:00F2 X:0001 Y:0006 P:envMxdizc - Loop back to 03E6F8.
$03/E705 80 0A BRA $0A    [$E711] A:00FF X:0006 Y:0006 P:envMxdiZC - Branch to 03E711
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E707 A9 F8 LDA #$F8 A:0000 X:001C Y:0000 P:envMxdiZc - Load F8 into A. (Possibly Graphics Data of sorts)
$03/E709 8D C6 33 STA $33C6  [$7E:33C6] A:00F8 X:001C Y:0000 P:eNvMxdizc - Store A in 7E33C6.
$03/E70C A9 04 LDA #$04 A:00F8 X:001C Y:0000 P:eNvMxdizc - Load 04 into A.
$03/E70E 8D C7 33 STA $33C7  [$7E:33C7] A:0004 X:001C Y:0000 P:envMxdizc - Store A in 7E33C7.
$03/E711 AD 81 38 LDA $3881  [$7E:3881] A:0004 X:001C Y:0000 P:envMxdizc - Load A from 7E3881.
$03/E714 F0 03 BEQ $03    [$E719] A:0000 X:001C Y:0000 P:envMxdiZc - If 00 branch to 03E719.
----------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------
$03/E719 A6 A6 LDX $A6    [$00:00A6] A:0000 X:001C Y:0000 P:envMxdiZc - Load X from A6 (Must be to see who is using Kick)
$03/E71B BD 1B 20 LDA $201B,x[$7E:201B] A:0000 X:0000 Y:0000 P:envMxdiZc - Load User's Physical Attack Multiplier.
$03/E71E 85 DF STA $DF    [$00:00DF] A:0003 X:0000 Y:0000 P:envMxdizc - Store A in DF.
$03/E720 A5 C1 LDA $C1    [$00:00C1] A:0003 X:0000 Y:0000 P:envMxdizc - Load A from C1.
$03/E722 D0 08 BNE $08    [$E72C] A:0000 X:0000 Y:0000 P:envMxdiZc - Branch if not 00 to 03E72C. (Skipped by Dark Wave)
$03/E724 46 DF LSR $DF    [$00:00DF] A:0000 X:0000 Y:0000 P:envMxdiZc - Divide Physical Attack Multiplier by 2.
$03/E726 A5 DF LDA $DF    [$00:00DF] A:0000 X:0000 Y:0000 P:envMxdizC - Load DF into A.
$03/E728 D0 02 BNE $02    [$E72C] A:0001 X:0000 Y:0000 P:envMxdizC - If not 00 branch to 03E72C.
$03/E72C A5 DF LDA $DF    [$00:00DF] A:0001 X:0000 Y:0000 P:envMxdizC - Load DF into A (In case it came from an earlier branch)
$03/E72E 85 84 STA $84    [$00:0084] A:0001 X:0000 Y:0000 P:envMxdizC - Store A in 84.
$03/E730 BD 1D 20 LDA $201D,x[$7E:201D] A:0001 X:0000 Y:0000 P:envMxdizC - Load User's Physical Attack Base.
$03/E733 85 C5 STA $C5    [$00:00C5] A:0027 X:0000 Y:0000 P:envMxdizC - Store A in C5.
$03/E735 85 E1 STA $E1    [$00:00E1] A:0027 X:0000 Y:0000 P:envMxdizC - Store A in E1.
$03/E737 20 E0 83 JSR $83E0  [$03:83E0] A:0027 X:0000 Y:0000 P:envMxdizC - Jump to Subroutine (HP Dealing?)
$03/E73A 46 E4 LSR $E4    [$00:00E4] A:0000 X:0000 Y:0000 P:envMxdiZc - E4 /2.
$03/E73C 66 E3 ROR $E3    [$00:00E3] A:0000 X:0000 Y:0000 P:envMxdiZc - E3 /2.
$03/E73E A6 E3 LDX $E3    [$00:00E3] A:0000 X:0000 Y:0000 P:envMxdizC - Load X from E3.
$03/E740 86 CB STX $CB    [$00:00CB] A:0000 X:0013 Y:0000 P:envMxdizC - Store X in CB.
$03/E742 A5 CD LDA $CD    [$00:00CD] A:0000 X:0013 Y:0000 P:envMxdizC - Load A from CD. (Character ID)
$03/E744 30 0C BMI $0C    [$E752] A:0000 X:0013 Y:0000 P:envMxdiZC - Branch if Negative to 03E752. (Enemy Yang using it)
$03/E746 A2 05 00 LDX #$0005 A:0000 X:0013 Y:0000 P:envMxdiZC - Load 0005 into X. (Starting points of Targets -1)
$03/E749 86 C7 STX $C7    [$00:00C7] A:0000 X:0005 Y:0000 P:envMxdizC - Store X in C7.
$03/E74B A2 0D 00 LDX #$000D A:0000 X:0005 Y:0000 P:envMxdizC - Load 0000D into X (Number of Targets)
$03/E74E 86 C3 STX $C3    [$00:00C3] A:0000 X:000D Y:0000 P:envMxdizC - Store X in C3.
$03/E750 80 09 BRA $09    [$E75B] A:0000 X:000D Y:0000 P:envMxdizC -Branch to 03E75B.
----------------------------------------------------------------------------------------------------------------------------------------
$03/E752 7B TDC A:0080 X:0081 Y:0006 P:eNvMxdizc - Transfer Direct Page.
$03/E753 AA TAX A:0000 X:0081 Y:0006 P:envMxdiZc - Transfer A to X.
$03/E754 86 C7 STX $C7    [$00:00C7] A:0000 X:0000 Y:0006 P:envMxdiZc - Store X in C7.
$03/E756 A2 05 00 LDX #$0005 A:0000 X:0000 Y:0006 P:envMxdiZc - Load 0005 into X.
$03/E759 86 C3 STX $C3    [$00:00C3] A:0000 X:0005 Y:0006 P:envMxdizc - Store X in C3 (Possibly enemy targeting works differently inwardly)
----------------------------------------------------------------------------------------------------------------------------------------
$03/E75B 7B TDC A:0000 X:000D Y:0000 P:envMxdizC - Transfer Direct Page.
$03/E75C AA TAX A:0000 X:000D Y:0000 P:envMxdiZC - Transfer A to X.
$03/E75D A5 C5 LDA $C5    [$00:00C5] A:0000 X:0000 Y:0000 P:envMxdiZC - Load Physical Attack Base into A.
$03/E75F 20 79 83 JSR $8379  [$03:8379] A:0027 X:0000 Y:0000 P:envMxdizC - Jump to Subroutine (Generated Random Number, likely between 0-Physical Attack Base)
$03/E762 85 C9 STA $C9    [$00:00C9] A:001E X:0000 Y:0000 P:envMxdizc - Store A in C9.
$03/E764 18 CLC A:001E X:0000 Y:0000 P:envMxdizc - Clear Carry Flag.
$03/E765 A5 CB LDA $CB    [$00:00CB] A:001E X:0000 Y:0000 P:envMxdizc - Load A from CB.
$03/E767 65 C9 ADC $C9    [$00:00C9] A:0013 X:0000 Y:0000 P:envMxdizc - Add A to C9.
$03/E769 85 C9 STA $C9    [$00:00C9] A:0031 X:0000 Y:0000 P:envMxdizc - Store A in C9.
$03/E76B A5 CC LDA $CC    [$00:00CC] A:0031 X:0000 Y:0000 P:envMxdizc - Load A from CC.
$03/E76D 69 00 ADC #$00 A:0000 X:0000 Y:0000 P:envMxdiZc - Add 00 to A.
$03/E76F 85 CA STA $CA    [$00:00CA] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in CA.
$03/E771 A5 C7 LDA $C7    [$00:00C7] A:0000 X:0000 Y:0000 P:envMxdiZc - Load C7 into A.
$03/E773 AA TAX A:0005 X:0000 Y:0000 P:envMxdizc - Transfer A to X.
$03/E774 BD 40 35 LDA $3540,x[$7E:3545] A:0005 X:0005 Y:0000 P:envMxdizc - Load A from 7E3545.
$03/E777 D0 68 BNE $68    [$E7E1] A:0000 X:0005 Y:0000 P:envMxdiZc - If not 00 branch to 03E7E1.
-----------------------------------------------------------------------------------------------------------------------------------------------
$03/E779 A5 C7 LDA $C7    [$00:00C7] A:0000 X:0005 Y:0000 P:envMxdiZc - Load A from C7.
$03/E77B 20 89 84 JSR $8489  [$03:8489] A:0005 X:0005 Y:0000 P:envMxdizc - Jump to Subroutine (Preparation?)
$03/E77E A6 A6 LDX $A6    [$00:00A6] A:0000 X:05A0 Y:0000 P:envMxdizc - Load X from A6 (Tells the game what is being targetted)
$03/E780 BD 03 20 LDA $2003,x[$7E:2283] A:0000 X:0280 Y:0000 P:envMxdizc - Load Status Byte 1 of Monster Slot X into A.
$03/E783 29 C0 AND #$C0 A:0000 X:0280 Y:0000 P:envMxdiZc - Are they Petrified or Dead?
$03/E785 D0 5A BNE $5A    [$E7E1] A:0000 X:0280 Y:0000 P:envMxdiZc - If so branch to 03E7E1.
----------------------------------------------------------------------------------------------------------------------------------------------------
$03/E787 BD 05 20 LDA $2005,x[$7E:2285] A:0000 X:0280 Y:0000 P:envMxdiZc - Load Status Byte 3 of Monster Slot X into A.
$03/E78A 29 02 AND #$02 A:0000 X:0280 Y:0000 P:envMxdiZc - Is it Jumping?
$03/E78C D0 53 BNE $53    [$E7E1] A:0000 X:0280 Y:0000 P:envMxdiZc - If so branch to 03E7E1.
---------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E78E BD 06 20 LDA $2006,x[$7E:2286] A:0000 X:0280 Y:0000 P:envMxdiZc - Load Status Byte 4 of Monster Slot X into A.
$03/E791 30 4E BMI $4E    [$E7E1] A:0000 X:0280 Y:0000 P:envMxdiZc - Is it Hiding?, if so branch to 03E7E1.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E793 BD 40 20 LDA $2040,x[$7E:22C0] A:0000 X:0280 Y:0000 P:envMxdiZc - Load Creature Type of Monster Slot X into A.
$03/E796 29 20 AND #$20 A:0000 X:0280 Y:0000 P:envMxdiZc - Is it Slime?
$03/E798 D0 47 BNE $47    [$E7E1] A:0000 X:0280 Y:0000 P:envMxdiZc - If so branch to 03E7E1.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E79A A5 C1 LDA $C1    [$00:00C1] A:0000 X:0280 Y:0000 P:envMxdiZc - Load A from C1.
$03/E79C F0 0D BEQ $0D    [$E7AB] A:0000 X:0280 Y:0000 P:envMxdiZc - If it is 00 branch to 03E7AB
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!(Special Part of Code, Used by Dark Wave)!!!!!!!!!!!!!!!!!!!!!!!!!!
$03/E79E BD 40 20 LDA $2040,x[$7E:22C0] A:002E X:0280 Y:0000 P:envMxdizc - Load Creature Type of Monster Slot X into A.
$03/E7A1 10 08 BPL $08    [$E7AB] A:0000 X:0280 Y:0000 P:envMxdiZc - If it not Zombie, branch to 03E7AB.
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E7A3 46 CA LSR $CA    [$00:00CA] A:0080 X:0280 Y:0000 P:eNvMxdizc - /2 CA.
$03/E7A5 66 C9 ROR $C9    [$00:00C9] A:0080 X:0280 Y:0000 P:envMxdiZc /2 C9
$03/E7A7 46 CA LSR $CA    [$00:00CA] A:0080 X:0280 Y:0000 P:envMxdizC /2 CA
$03/E7A9 66 C9 ROR $C9    [$00:00C9] A:0080 X:0280 Y:0000 P:envMxdiZc /2 C9 9 (Divide Damage by 4)
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E7AB A5 C1 LDA $C1    [$00:00C1] A:0000 X:0280 Y:0000 P:envMxdiZc  - Load A from C1.
$03/E7AD D0 20 BNE $20    [$E7CF] A:0000 X:0280 Y:0000 P:envMxdiZc - If it is not 00 branch to 03E7CF.
-------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E7AF A5 84 LDA $84    [$00:0084] A:0000 X:0280 Y:0000 P:envMxdiZc - Load A from 84.
$03/E7B1 85 DF STA $DF    [$00:00DF] A:0001 X:0280 Y:0000 P:envMxdizc  - Store A in DF (same as normal?)
$03/E7B3 BD 2A 20 LDA $202A,x[$7E:22AA] A:0001 X:0280 Y:0000 P:envMxdizc - Load Monster Slot X's Physical Defense Base.
$03/E7B6 85 E1 STA $E1    [$00:00E1] A:0000 X:0280 Y:0000 P:envMxdiZc - Store A in E1.
$03/E7B8 20 E0 83 JSR $83E0  [$03:83E0] A:0000 X:0280 Y:0000 P:envMxdiZc - Jump to Subroutine (HP Dealing?)
$03/E7BB 38 SEC A:0000 X:0000 Y:0000 P:envMxdiZc - Set Carry Flag
$03/E7BC A5 C9 LDA $C9    [$00:00C9] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from C9. (Where Random Number +Attack Base seemed to be stored)
$03/E7BE E5 E3 SBC $E3    [$00:00E3] A:0031 X:0000 Y:0000 P:envMxdizC  - A from E3. (-Random Number +Attack Base from E3.)
$03/E7C0 85 C9 STA $C9    [$00:00C9] A:0031 X:0000 Y:0000 P:envMxdizC - Store A in C9.
$03/E7C2 A5 CA LDA $CA    [$00:00CA] A:0031 X:0000 Y:0000 P:envMxdizC - Load A from CA.
$03/E7C4 E5 E4 SBC $E4    [$00:00E4] A:0000 X:0000 Y:0000 P:envMxdiZC - A from E4.
$03/E7C6 85 CA STA $CA    [$00:00CA] A:0000 X:0000 Y:0000 P:envMxdiZC - Store A in CA.
$03/E7C8 B0 05 BCS $05    [$E7CF] A:0000 X:0000 Y:0000 P:envMxdiZC - ?Branch if 00 or less than.?
------------------------------------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------------------------
$03/E7CF A6 C9 LDX $C9    [$00:00C9] A:0000 X:0000 Y:0000 P:envMxdiZC - Load X from C9 (Random Number +Attack Base)
$03/E7D1 F0 F7 BEQ $F7    [$E7CA] A:0000 X:0031 Y:0000 P:envMxdizC - Loop if equal to ?00? to 03E7CA.
$03/E7D3 A5 C7 LDA $C7    [$00:00C7] A:0000 X:0031 Y:0000 P:envMxdizC - Load C7 into A. (5 static, it seems)
$03/E7D5 0A ASL A A:0005 X:0031 Y:0000 P:envMxdizC - x2 A.
$03/E7D6 AA TAX A:000A X:0031 Y:0000 P:envMxdizc - Transfer A to X.
$03/E7D7 A5 C9 LDA $C9    [$00:00C9] A:000A X:000A Y:0000 P:envMxdizc - Load A from C9 (Random Number +Attack Base)
$03/E7D9 9D D4 34 STA $34D4,x[$7E:34DE] A:0031 X:000A Y:0000 P:envMxdizc - Store A in Damage Slot X.
$03/E7DC A5 CA LDA $CA    [$00:00CA] A:0031 X:000A Y:0000 P:envMxdizc - Load A from CA (Second byte of damage, no doubt)
$03/E7DE 9D D5 34 STA $34D5,x[$7E:34DF] A:0000 X:000A Y:0000 P:envMxdiZc - Store A in in Damage Slot X Byte 2.
$03/E7E1 E6 C7 INC $C7    [$00:00C7] A:0000 X:000A Y:0000 P:envMxdiZc - +1 to C7.
$03/E7E3 A5 C7 LDA $C7    [$00:00C7] A:0000 X:000A Y:0000 P:envMxdizc Load C7 into A.
$03/E7E5 C5 C3 CMP $C3    [$00:00C3] A:0006 X:000A Y:0000 P:envMxdizc - Is it the same value that is in C3? (Number of Targets)
$03/E7E7 F0 03 BEQ $03    [$E7EC] A:0006 X:000A Y:0000 P:eNvMxdizc - if so branch to 03E7EC.
$03/E7E9 4C 5B E7 JMP $E75B  [$03:E75B] A:0006 X:000A Y:0000 P:eNvMxdizc  - Jump Back to 03E75B and recalculate everything for all targets.
------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E7EC 20 7E CA JSR $CA7E  [$03:CA7E] A:000D X:000C Y:0000 P:envMxdiZC - Jump to Subroutine (Damage Dealing Routine)
------------------------------------------------------------------------------------------------------------------------------------------------------------------
$03/E7EF 60 RTS A:0000 X:0680 Y:001A P:envMxdiZC - Return

Now this is extremely informative!

Keep the addresses below in mind because this appears to be near universal....


C5 - Where Attack Base is Stored
DF - Where Attack Multiplier is Stored
E1 - Enemies Physical Defense Base.

What is even more curious is that it seems that the programmers may have planned a way for Kick's damage not to be decremented under some special circumstance. A value stored at C1 that if it does not read 00 (which it seems it Must because of the STZ at the start of the routine) it will branch past the Decrementing Routine. I thought at first it may be something special for Enemy Yang, but C1 in his portion of the routine never changes. Turns out that it is used by Dark Wave, which likely jumps into the Kick routine fairly early on and keeps on going with it. We'll know more when we get to the Dark Wave routine. I never noticed that Dark Wave dealt more damage than Kick, that is quite curious...

Now, some more targeting news, what we're looking at here is something that we've never really seen before and its the way the game puts damage into the individual slots. Kick and Dark Wave are stupidly special in that the normal Caster/Target damage is never used. It uses a different targeting system....

Because it does not look into the section of RAM that Yousei labeled Caster/Target and only looks at their basic battle slots, I will call it "User". Dark Wave/Kick both look at the User's stats. In that same respect there is no Target as there ordinarily is considered to be, but the enemy's stats are looked at directly. Now this was puzzling, until I came across this...

$03/E746   A2 05 00   LDX #$0005   A:0000   X:0013   Y:0000   P:envMxdiZC - Load 0005 into X. (Starting points of Targets -1)
$03/E749   86 C7   STX $C7    [$00:00C7]   A:0000   X:0005   Y:0000   P:envMxdizC - Store X in C7.
$03/E74B   A2 0D 00   LDX #$000D   A:0000   X:0005   Y:0000   P:envMxdizC - Load 0000D into X (Number of Targets)
$03/E74E   86 C3   STX $C3    [$00:00C3]   A:0000   X:000D   Y:0000   P:envMxdizC - Store X in C3.

When I first saw these I had just the normal instructions for what the system was doing and moved on without another thought until I saw this as well...


$03/E7D5   0A    ASL A   A:0005   X:0031   Y:0000   P:envMxdizC - x2 A.
$03/E7D6   AA    TAX   A:000A   X:0031   Y:0000   P:envMxdizc - Transfer A to X.
$03/E7D7   A5 C9   LDA $C9    [$00:00C9]   A:000A   X:000A   Y:0000   P:envMxdizc - Load A from C9 (Random Number +Attack Base)
$03/E7D9   9D D4 34   STA $34D4,x[$7E:34DE]   A:0031   X:000A   Y:0000   P:envMxdizc - Store A in Damage Slot X.
$03/E7DC   A5 CA   LDA $CA    [$00:00CA]   A:0031   X:000A   Y:0000   P:envMxdizc - Load A from CA (Second byte of damage, no doubt)
$03/E7DE   9D D5 34   STA $34D5,x[$7E:34DF]   A:0000   X:000A   Y:0000   P:envMxdiZc - Store A in in Damage Slot X Byte 2.
$03/E7E1   E6 C7   INC $C7    [$00:00C7]   A:0000   X:000A   Y:0000   P:envMxdiZc - +1 to C7.
$03/E7E3   A5 C7   LDA $C7    [$00:00C7]   A:0000   X:000A   Y:0000   P:envMxdizc Load C7 into A.
$03/E7E5   C5 C3   CMP $C3    [$00:00C3]   A:0006   X:000A   Y:0000   P:envMxdizc - Is it the same value that is in C3? (Number of Targets)
$03/E7E7   F0 03   BEQ $03    [$E7EC]   A:0006   X:000A   Y:0000   P:eNvMxdizc - if so branch to 03E7EC.
$03/E7E9   4C 5B E7   JMP $E75B  [$03:E75B]   A:0006   X:000A   Y:0000   P:eNvMxdizc  - Jump Back to 03E75B and recalculate everything for all targets.

Then it made sense, what I was looking at earlier was "range of targets" 05+1 places it just outside the range of Allies. 0D is the final amount of times it should add data into the data slots and the x2 portion was assuring that it was giving two bytes to each slot in terms of damage. I verified this by setting the 05 to 00 and watching as Kick hurt everything on the field. Now this is a bit difficult to deal with. While you can make Kick/Dark Wave only hit one enemy, you could only make it hit a Specific Enemy Placement on the field, and that would be a difficult thing to make use of.

As of now we do not know how stats are written in and out of 2780-2800, but without that we can't change these two routines to look at anything on a Target by Target basis.