øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.msg19497e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexcf47.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&topic=1883.0e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexcf47.html.zxg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ'½IOKtext/htmlISO-8859-1gzip@øÕ½IÿÿÿÿÿÿÿÿTue, 10 Mar 2020 05:00:23 GMT0ó°° ®0®P®€§²ð®g^ÿÿÿÿÿÿÿÿ‘½I 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 78645 times)

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #135 on: October 17, 2013, 03:02:56 PM »
Yes, the freed up bytes of Peep may allow you to have something much larger. A Blue Magic command fully equipped with Learning though...? Hmm... You may be able to use the code of Auto-Hide (which I should explore fuller rather than just finding who it effects.) as a start to have it always on, so when your character is hit by those specific effects they automatically (or have a chance?) to learn said spell, since all Auto-Hide does is execute (almost without a doubt) is the (7E2X86) Auto-Hider in Critical? Then Used Command Hide. If you set up a range of Monster Spells and change that to "Is Learner being hit with a spell above say 60 (Start of Monster Spells) Then... Is the Learner being hit with a spell after 60 (18 Bytes, 24 spells to a spell set so...) is it before 78? (If either of these are untrue, return). Then add the spell directly to the spell set. IF not already there.

That seems like it might be the best way to set up an FFIV Blue Mage. I'll see about finding out more about Auto-Hide shortly.

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 (FFI spell routines in FFIV!)
« Reply #136 on: October 17, 2013, 05:32:57 PM »
I actually was planning on having it be a user-activated command, a la Gau's Jump in FFIV. The base would be similar to Copy - execute "Learn" after a monster uses a Tech (and before it makes its next move - while the command is still in the "next sub-action" byte in RAM) and if that spell is set to be learnable, you'll learn it (if not already learned).
But if we could figure out how to make it automatic... well that would be fantastic!
I figured that Auto-commands (remember, there's auto-Cover, too) were limited to characters that had the same command as executable, too. If I'm not mistaken, any character that can execute Hide will auto-hide when critical. I'd love to find out I was mistaken, though.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #137 on: October 17, 2013, 06:43:12 PM »
My notes on Auto-Hide lead me on quite a hunt and I may have found the start of a character's turn dealings in hex...

Code: [Select]
$03/A37B AD 00 18 LDA $1800  [$7E:1800] A:0003 X:0000 Y:0012 P:envMxdizc - Load Current Encounter.
$03/A37E C9 B7 CMP #$B7 A:0010 X:0000 Y:0012 P:envMxdizc - Is it B7 (Zeromus)
$03/A380 D0 0A BNE $0A    [$A38C] A:0010 X:0000 Y:0012 P:envMxdizc - If not branch to 03A38C.
-----------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------
$03/A38C AD F3 38 LDA $38F3  [$7E:38F3] A:0010 X:0000 Y:0012 P:envMxdizc - Load 7E38F3 into A.
$03/A38F D0 0F BNE $0F    [$A3A0] A:0000 X:0000 Y:0012 P:envMxdiZc - If not 00 branch to 03A3A0.
$03/A391 AD 82 22 LDA $2282  [$7E:2282] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Monster Slot 1's Level into A.
$03/A394 C9 63 CMP #$63 A:0001 X:0000 Y:0012 P:envMxdizc - Is it 99?
$03/A396 F0 0B BEQ $0B    [$A3A3] A:0001 X:0000 Y:0012 P:eNvMxdizc - If so branch to 03A3A3.
$03/A398 C9 62 CMP #$62 A:0001 X:0000 Y:0012 P:eNvMxdizc - Is it 98?
$03/A39A F0 07 BEQ $07    [$A3A3] A:0001 X:0000 Y:0012 P:eNvMxdizc - If so branch to 03A3A3.
$03/A39C C9 61 CMP #$61 A:0001 X:0000 Y:0012 P:eNvMxdizc - Is it 97?
$03/A39E F0 03 BEQ $03    [$A3A3] A:0001 X:0000 Y:0012 P:eNvMxdizc - If so branch to 03A3A3.
$03/A3A0 9C D6 38 STZ $38D6  [$7E:38D6] A:0001 X:0000 Y:0012 P:eNvMxdizc - Store Zero in
7E38D6.
$03/A3A3 7B TDC A:0001 X:0000 Y:0012 P:eNvMxdizc - Transfer Direct Page.
$03/A3A4 AA TAX A:0000 X:0000 Y:0012 P:envMxdiZc - Transfer A to X
-----------------------------------------------------------(Looping Point)-----------------------------------------
$03/A3A5 BD 29 39 LDA $3929,x[$7E:3929] A:0000 X:0000 Y:0012 P:envMxdiZc - Load 7E3929 into A.
$03/A3A8 C5 D2 CMP $D2    [$00:00D2] A:00FF X:0000 Y:0012 P:eNvMxdizc - Is it D2?
$03/A3AC E8 INX A:00FF X:0000 Y:0012 P:eNvMxdizC - +1 to X.
$03/A3AD E0 05 00 CPX #$0005 A:00FF X:0001 Y:0012 P:envMxdizC - Has this pattern continued five times?
$03/A3B0 D0 F3 BNE $F3    [$A3A5] A:00FF X:0001 Y:0012 P:eNvMxdizc - If not, loop back to 03A3A5.
-------------------------------------------------------------------------------------------------------------------------
$03/A3B2 A5 D0 LDA $D0    [$00:00D0] A:00FF X:0005 Y:0012 P:envMxdiZC - Load D0 into A.
$03/A3B4 85 8C STA $8C    [$00:008C] A:00FF X:0005 Y:0012 P:eNvMxdizC - Store A in 8C.
$03/A3B6 A5 D2 LDA $D2    [$00:00D2] A:00FF X:0005 Y:0012 P:eNvMxdizC - Load D2 into A.
$03/A3B8 20 89 84 JSR $8489  [$03:8489] A:0001 X:0005 Y:0012 P:envMxdizC - Jump to Subroutine (Preparation?)
$03/A3BB A9 03 LDA #$03 A:0000 X:0120 Y:0012 P:envMxdizc - Load 03 into A.
$03/A3BD 20 69 85 JSR $8569  [$03:8569] A:0003 X:0120 Y:0012 P:envMxdizc - Jump to Subroutine (Possibly something to do with timers?)
$03/A3C0 AE 98 35 LDX $3598  [$7E:3598] A:0000 X:0120 Y:0012 P:envMxdiZc - Load X from 7E3598.
$03/A3C3 BD 06 2A LDA $2A06,x[$7E:2A1E] A:0000 X:0018 Y:0012 P:envMxdizc - Load A from 7E2A06 +X (Something in the status timers.)
$03/A3C6 29 FE AND #$FE A:0081 X:0018 Y:0012 P:eNvMxdizc Add -1 to A.
$03/A3C8 9D 06 2A STA $2A06,x[$7E:2A1E] A:0080 X:0018 Y:0012 P:eNvMxdizc - Store A in 7E2A1E.
$03/A3CB A5 D2 LDA $D2    [$00:00D2] A:0080 X:0018 Y:0012 P:eNvMxdizc - Load A from D2.
$03/A3CD 85 D0 STA $D0    [$00:00D0] A:0001 X:0018 Y:0012 P:envMxdizc - Store A in D0.
$03/A3CF 20 9D A5 JSR $A59D  [$03:A59D] A:0001 X:0018 Y:0012 P:envMxdizc - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/A59D A5 D0 LDA $D0    [$00:00D0] A:0001 X:0018 Y:0012 P:envMxdizc - Load D0 into A.
$03/A59F C9 FF CMP #$FF A:0001 X:0018 Y:0012 P:envMxdizc - Is it FF?
$03/A5A1 F0 1A BEQ $1A    [$A5BD] A:0001 X:0018 Y:0012 P:envMxdizc - If so branch to 03A5BD.
$03/A5A3 20 89 84 JSR $8489  [$03:8489] A:0001 X:0018 Y:0012 P:envMxdizc - Jump to Subroutine (Preparation?)
$03/A5A6 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0120 Y:0012 P:envMxdizc - Load A from A6.
$03/A5A8 BD 03 20 LDA $2003,x[$7E:2083] A:0000 X:0080 Y:0012 P:envMxdizc - Load Character Slot's Status Byte 1.
$03/A5AB 29 C0 AND #$C0 A:0000 X:0080 Y:0012 P:envMxdiZc - Is it Dead or Petrified?
$03/A5AD D0 0E BNE $0E    [$A5BD] A:0000 X:0080 Y:0012 P:envMxdiZc - If so branch to 03A5BD.
----------------------------------------------------------------------------------------------------------------------------------
$03/A5AF BD 04 20 LDA $2004,x[$7E:2084] A:0000 X:0080 Y:0012 P:envMxdiZc - Load Character Slot's Status Byte 2.
$03/A5B2 29 3C AND #$3C A:0000 X:0080 Y:0012 P:envMxdiZc - Is it Berserk, Charm, Sleep, or Paralyze?
$03/A5B4 D0 07 BNE $07    [$A5BD] A:0000 X:0080 Y:0012 P:envMxdiZc - If so, branch to 03A5BD.
--------------------------------------------------------------------------------------------------------------------------------------
$03/A5B6 BD 05 20 LDA $2005,x[$7E:2085] A:0000 X:0080 Y:0012 P:envMxdiZc - Load Character Slot's Status Byte 3.
$03/A5B9 29 C6 AND #$C6 A:0010 X:0080 Y:0012 P:envMxdizc - Is it Magnetized, Stopped, Twincasting, or Jumping?
$03/A5BB F0 04 BEQ $04    [$A5C1] A:0000 X:0080 Y:0012 P:envMxdiZc - If not, branch to 03A5C1.
--------------------------------------------------------------------------------------------------
$03/A5C1 60 RTS A:0000 X:0080 Y:0012 P:envMxdiZc - Return
--------------------------------------------------------------------------------------------------
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/A3D2 A5 D0 LDA $D0    [$00:00D0] A:0000 X:0080 Y:0012 P:envMxdiZc - Load A from D0.
$03/A3D4 85 AA STA $AA    [$00:00AA] A:0001 X:0080 Y:0012 P:envMxdizc - Store A in AA.
$03/A3D6 A5 8C LDA $8C    [$00:008C] A:0001 X:0080 Y:0012 P:envMxdizc - Load A from 8C.
$03/A3D8 85 D0 STA $D0    [$00:00D0] A:00FF X:0080 Y:0012 P:eNvMxdizc - Store A in D0.
$03/A3DA A5 AA LDA $AA    [$00:00AA] A:00FF X:0080 Y:0012 P:eNvMxdizc - Load A from AA.
$03/A3DC C9 FF CMP #$FF A:0001 X:0080 Y:0012 P:envMxdizc - Is it FF?
$03/A3DE F0 0C BEQ $0C    [$A3EC] A:0001 X:0080 Y:0012 P:envMxdizc - If so branch to 03A3EC.
$03/A3E0 AD 2F 39 LDA $392F  [$7E:392F] A:0001 X:0080 Y:0012 P:envMxdizc - Load 7E392F into A.
$03/A3E3 AA TAX A:0000 X:0080 Y:0012 P:envMxdiZc - Transfer A to X.
$03/A3E4 A5 D2 LDA $D2    [$00:00D2] A:0000 X:0000 Y:0012 P:envMxdiZc - Load A from D2.
$03/A3E6 9D 29 39 STA $3929,x[$7E:3929] A:0001 X:0000 Y:0012 P:envMxdizc - Store A in 7E3929
$03/A3E9 EE 2F 39 INC $392F  [$7E:392F] A:0001 X:0000 Y:0012 P:envMxdizc - +1 to 7E392F.
$03/A3EC 60 RTS A:0001 X:0000 Y:0012 P:envMxdizc - Return.
--------------------------------------------------------------------------------------------------------------

I'm not really sure what the above is doing, but it seemed quite important.

Code: [Select]
$03/A3ED A5 D7 LDA $D7    [$00:00D7] A:0005 X:0004 Y:0012 P:envMxdiZC - Load A from D7.
$03/A3EF F0 52 BEQ $52    [$A443] A:0001 X:0004 Y:0012 P:envMxdizC - If it is 00 branch to 03A443.
$03/A3F1 A5 D0 LDA $D0    [$00:00D0] A:0001 X:0004 Y:0012 P:envMxdizC - Load A from D0.
$03/A3F3 C9 FF CMP #$FF A:0001 X:0004 Y:0012 P:envMxdizC - Is it FF?
$03/A3F5 F0 4B BEQ $4B    [$A442] A:0001 X:0004 Y:0012 P:envMxdizc - If so branch to 03A442.
$03/A3F7 20 9D A5 JSR $A59D  [$03:A59D] A:0001 X:0004 Y:0012 P:envMxdizc - Jump to Subroutine (Status Checking)
$03/A3FA A5 D0 LDA $D0    [$00:00D0] A:0000 X:0080 Y:0012 P:envMxdiZc - Load A from D0.
$03/A3FC C9 FF CMP #$FF A:0001 X:0080 Y:0012 P:envMxdizc - Is it FF?
$03/A3FE F0 39 BEQ $39    [$A439] A:0001 X:0080 Y:0012 P:envMxdizc - If so branch to 03A439.
$03/A400 A6 A6 LDX $A6    [$00:00A6] A:0001 X:0080 Y:0012 P:envMxdizc - Load X from A6 (character slot).
$03/A402 BD 00 20 LDA $2000,x[$7E:2080] A:0001 X:0080 Y:0012 P:envMxdizc - Load Character Slot's ID.
$03/A405 29 1F AND #$1F A:0085 X:0080 Y:0012 P:eNvMxdizc - -80 to A.
$03/A407 C9 05 CMP #$05 A:0005 X:0080 Y:0012 P:envMxdizc - Is it Edward?
$03/A409 D0 14 BNE $14    [$A41F] A:0005 X:0080 Y:0012 P:envMxdiZC - If not branch to 03A41F.
---------------------------------------------------------------------------------------------------------------------------
$03/A40B AD 82 35 LDA $3582  [$7E:3582] A:0005 X:0080 Y:0012 P:envMxdiZC - Load a value close to encounter type into A (May deal something with the WaterHag battle)
$03/A40E D0 0F BNE $0F    [$A41F] A:0000 X:0080 Y:0012 P:envMxdiZC - If it is not 00 branch to 03A41F
------------------------------------------------------------------------------------------------------------------------.
$03/A410 AD DB 38 LDA $38DB  [$7E:38DB] A:0000 X:0080 Y:0012 P:envMxdiZC - Load 7E38DB into A.
$03/A413 3A DEC A A:0000 X:0080 Y:0012 P:envMxdiZC - -1 to A.
$03/A414 F0 09 BEQ $09    [$A41F] A:00FF X:0080 Y:0012 P:eNvMxdizC - If it is 00 branch to 03A41F.
---------------------------------------------------------------------------------------------------------------------
$03/A416 BD 06 20 LDA $2006,x[$7E:2086] A:00FF X:0080 Y:0012 P:eNvMxdizC - Load Edward's Status Byte 4. 
$03/A419 30 04 BMI $04    [$A41F] A:0000 X:0080 Y:0012 P:envMxdiZC - If he is currently Hiding  branch to 03A41F.
$03/A41B 29 01 AND #$01 A:0000 X:0080 Y:0012 P:envMxdiZC - Is it 01? (Critical)
$03/A41D D0 1A BNE $1A    [$A439] A:0000 X:0080 Y:0012 P:envMxdiZC - If it is so, branch to 03A439.
-----------------------------------------------------------------------------------------------------------------------------
$03/A41F 20 AA A1 JSR $A1AA  [$03:A1AA] A:0000 X:0080 Y:0012 P:envMxdiZC - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/A1AA 64 A9 STZ $A9    [$00:00A9] A:0000 X:0080 Y:0012 P:envMxdiZC - Store Zero in A9.
$03/A1AC 64 AA STZ $AA    [$00:00AA] A:0000 X:0080 Y:0012 P:envMxdiZC - Store Zero in AA.
$03/A1AE 64 AB STZ $AB    [$00:00AB] A:0000 X:0080 Y:0012 P:envMxdiZC - Store Zero in AB.
$03/A1B0 64 AC STZ $AC    [$00:00AC] A:0000 X:0080 Y:0012 P:envMxdiZC - Store Zero in AC.
$03/A1B2 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0080 Y:0012 P:envMxdiZC - Load Character Slot into X.
$03/A1B4 BD 03 20 LDA $2003,x[$7E:2083] A:0000 X:0080 Y:0012 P:envMxdizC - Load Character Slot's Status Byte 1 into A.
$03/A1B7 29 04 AND #$04 A:0000 X:0080 Y:0012 P:envMxdiZC - Is it Mute?
$03/A1B9 F0 04 BEQ $04    [$A1BF] A:0000 X:0080 Y:0012 P:envMxdiZC - If not branch to 03A1BF.
-------------------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------------------
$03/A1BF BD 03 20 LDA $2003,x[$7E:2083] A:0000 X:0080 Y:0012 P:envMxdiZC - Load Character's Status Byte 1 into A.
$03/A1C2 29 20 AND #$20 A:0000 X:0080 Y:0012 P:envMxdiZC - Is it Toad?
$03/A1C4 F0 04 BEQ $04    [$A1CA] A:0000 X:0080 Y:0012 P:envMxdiZC - If not branch to 03A1CA.
----------------------------------------------------------------------------------

---------------------------------------------------------------------------------------
$03/A1CA BD 03 20 LDA $2003,x[$7E:2083] A:0000 X:0080 Y:0012 P:envMxdiZC - Load Character Slot's Status Byte 1 into A.
$03/A1CD 29 08 AND #$08 A:0000 X:0080 Y:0012 P:envMxdiZC - Is it Pig?
$03/A1CF F0 04 BEQ $04    [$A1D5] A:0000 X:0080 Y:0012 P:envMxdiZC - If not branch to 03A1D5.
--------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------
$03/A1D5 BD 0B 20 LDA $200B,x[$7E:208B] A:0000 X:0080 Y:0012 P:envMxdiZC - Load Character Slot's Current MP Byte 1.
$03/A1D8 85 AD STA $AD    [$00:00AD] A:0000 X:0080 Y:0012 P:envMxdiZC - Store A in AD.
$03/A1DA BD 0C 20 LDA $200C,x[$7E:208C] A:0000 X:0080 Y:0012 P:envMxdiZC - Load Character Slot's Current MP Byte 2.
$03/A1DD F0 04 BEQ $04    [$A1E3] A:0000 X:0080 Y:0012 P:envMxdiZC - If 00 branch to 03A1E3.
------------------------------------------------------------------------------------

------------------------------------------------------------------------------------
$03/A1E5 BD 06 20 LDA $2006,x[$7E:2086] A:0000 X:0080 Y:0012 P:envMxdizC - Load Character Slot's Status Byte 4 into A.
$03/A1E8 30 17 BMI $17    [$A201] A:0000 X:0080 Y:0012 P:envMxdiZC - If it is Hiding branch to 03A201.
$03/A1EA A0 05 00 LDY #$0005 A:0000 X:0080 Y:0012 P:envMxdiZC - Load 0005 into Y.
$03/A1ED AE 34 35 LDX $3534  [$7E:3534] A:0000 X:0080 Y:0005 P:envMxdizC - Load 7E3534 into A.
--------------------------------------------------------------(Looping Point)------------------------------------------------------------
$03/A1F0 BD 03 33 LDA $3303,x[$7E:331F] A:0000 X:001C Y:0005 P:envMxdizC - Load 7E3303 +X into A.
$03/A1F3 C9 FF CMP #$FF A:0000 X:001C Y:0005 P:envMxdiZC - Is it FF?
$03/A1F5 F0 03 BEQ $03    [$A1FA] A:0000 X:001C Y:0005 P:envMxdizc - If so branch to 03A1FA.
$03/A1F7 20 88 A2 JSR $A288  [$03:A288] A:0000 X:001C Y:0005 P:envMxdizc - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/A288 64 B5 STZ $B5    [$00:00B5] A:0000 X:001C Y:0005 P:envMxdizc - Store Zero in B5.
$03/A28A DA PHX A:0000 X:001C Y:0005 P:envMxdizc - Push X onto Stack.
$03/A28B BD 03 33 LDA $3303,x[$7E:331F] A:0000 X:001C Y:0005 P:envMxdizc - Load A from 7E331F.
$03/A28E C9 05 CMP #$05 A:0000 X:001C Y:0005 P:envMxdiZc - Is it 05?
$03/A290 F0 0C BEQ $0C    [$A29E] A:0000 X:001C Y:0005 P:eNvMxdizc -If so branch to 03A29E.
$03/A292 C9 08 CMP #$08 A:0000 X:001C Y:0005 P:eNvMxdizc - Is it 08?
$03/A294 F0 08 BEQ $08    [$A29E] A:0000 X:001C Y:0005 P:eNvMxdizc - If so branch to 03A29E.
$03/A296 C9 0C CMP #$0C A:0000 X:001C Y:0005 P:eNvMxdizc - Is it 0C?
$03/A298 F0 04 BEQ $04    [$A29E] A:0000 X:001C Y:0005 P:eNvMxdizc - If so branch to 03A29E.
$03/A29A C9 10 CMP #$10 A:0000 X:001C Y:0005 P:eNvMxdizc - Is it 10?
$03/A29C D0 07 BNE $07    [$A2A5] A:0000 X:001C Y:0005 P:eNvMxdizc - If so branch to 03A29E.
$03/A2A5 FA PLX A:0000 X:001C Y:0005 P:eNvMxdizc - Pull X from Stack.
$03/A2A6 DA PHX A:0000 X:001C Y:0005 P:envMxdizc - Push X onto Stack.
$03/A2A7 BD 03 33 LDA $3303,x[$7E:331F] A:0000 X:001C Y:0005 P:envMxdizc - Load A from 7E331F.
$03/A2AA 0A ASL A A:0000 X:001C Y:0005 P:envMxdiZc - x2 to A.
$03/A2AB AA TAX A:0000 X:001C Y:0005 P:envMxdiZc - Transfer A to X.
$03/A2AC BF 19 FD 13 LDA $13FD19,x[$13:FD19] A:0000 X:0000 Y:0005 P:envMxdiZc - Load A from LoRom.
$03/A2B0 85 B3 STA $B3    [$00:00B3] A:0000 X:0000 Y:0005 P:envMxdiZc - Store A in B3.
$03/A2B2 BF 1A FD 13 LDA $13FD1A,x[$13:FD1A] A:0000 X:0000 Y:0005 P:envMxdiZc - Load A from LoRom.
$03/A2B6 85 B4 STA $B4    [$00:00B4] A:0000 X:0000 Y:0005 P:envMxdiZc - Store A in B4.
$03/A2B8 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0000 Y:0005 P:envMxdiZc - Load X from Character Slot.
$03/A2BA BD 03 20 LDA $2003,x[$7E:2083] A:0000 X:0080 Y:0005 P:envMxdizc  - Load Character Slot's Status Byte 1.
$03/A2BD 25 B3 AND $B3    [$00:00B3] A:0000 X:0080 Y:0005 P:envMxdiZc - Add the value in B3 onto A.
$03/A2BF D0 07 BNE $07    [$A2C8] A:0000 X:0080 Y:0005 P:envMxdiZc - If not 00 branch to 03A2C8.
----------------------------------------------------------------------------------------------------------------
$03/A2C1 BD 04 20 LDA $2004,x[$7E:2084] A:0000 X:0080 Y:0005 P:envMxdiZc - Load Character Slot's Status Byte 2 into A.
$03/A2C4 25 B4 AND $B4    [$00:00B4] A:0000 X:0080 Y:0005 P:envMxdiZc - Add the value in B4 onto A.
$03/A2C6 F0 04 BEQ $04    [$A2CC] A:0000 X:0080 Y:0005 P:envMxdiZc - If 00 branch to 03A2CC.
----------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------------
$03/A2CD BD 02 33 LDA $3302,x[$7E:331E] A:0000 X:001C Y:0005 P:envMxdizc - Load A from Character's Command Menu +X.
$03/A2D0 48 PHA A:0050 X:001C Y:0005 P:envMxdizc - Push A from Stack. (If the character may use Fight)
$03/A2D1 29 7F AND #$7F A:0050 X:001C Y:0005 P:envMxdizc - Reduce negatives to positives.
$03/A2D3 05 B5 ORA $B5    [$00:00B5] A:0050 X:001C Y:0005 P:envMxdizc - Also add the value in B5 if applicable onto A.
$03/A2D5 9D 02 33 STA $3302,x[$7E:331E] A:0050 X:001C Y:0005 P:envMxdizc - Store A in 7E331E.
$03/A2D8 68 PLA A:0050 X:001C Y:0005 P:envMxdizc - Pull A from Stack.
$03/A2D9 DD 02 33 CMP $3302,x[$7E:331E] A:0050 X:001C Y:0005 P:envMxdizc - Does the value in match the one in the Command Slot?
$03/A2DC F0 04 BEQ $04    [$A2E2] A:0050 X:001C Y:0005 P:envMxdiZC - If so branch to 03A2E2.
-----------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------
$03/A2E2 60 RTS A:0050 X:001C Y:0005 P:envMxdiZC - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/A1FA E8 INX A:0050 X:001C Y:0005 P:envMxdiZC( + 4 to X.
$03/A1FB E8 INX A:0050 X:001D Y:0005 P:envMxdizC
$03/A1FC E8 INX A:0050 X:001E Y:0005 P:envMxdizC
$03/A1FD E8 INX A:0050 X:001F Y:0005 P:envMxdizC              )
$03/A1FE 88 DEY A:0050 X:0020 Y:0005 P:envMxdizC - -1 to Y
$03/A1FF D0 EF BNE $EF    [$A1F0] A:0050 X:0020 Y:0004 P:envMxdizC - Repeat for each of the commands.
--------------------------------------------------------------------------------------------------------------------
$03/A201 A5 AA LDA $AA    [$00:00AA] A:00FF X:0030 Y:0000 P:envMxdiZC - Load AA into A.
$03/A203 F0 0A BEQ $0A    [$A20F] A:0000 X:0030 Y:0000 P:envMxdiZC - If 00 branch to 03A20F
------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------
$03/A20F AE 36 35 LDX $3536  [$7E:3536] A:0000 X:0030 Y:0000 P:envMxdiZC - Load 7E3536 into X.
$03/A212 86 AF STX $AF    [$00:00AF] A:0000 X:0120 Y:0000 P:envMxdizC - Store X in AF.
$03/A214 7B TDC A:0000 X:0120 Y:0000 P:envMxdizC - Transfer Direct Page.
$03/A215 AA TAX A:0000 X:0120 Y:0000 P:envMxdiZC - Transfer A to X.
$03/A216 86 B1 STX $B1    [$00:00B1] A:0000 X:0000 Y:0000 P:envMxdiZC - Store X in B1 -
$03/A218 A6 AF LDX $AF    [$00:00AF] A:0000 X:0000 Y:0000 P:envMxdiZC - Load X from AF.
$03/A21A BD 7B 2C LDA $2C7B,x[$7E:2D9B] A:0000 X:0120 Y:0000 P:envMxdizC  - Load Character's Spell Menu Data into A.
$03/A21D F0 4B BEQ $4B    [$A26A] A:0000 X:0120 Y:0000 P:envMxdiZC - If 00 branch to 03A26A.
----------------------------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------------------------------
$03/A26A A6 AF LDX $AF    [$00:00AF] A:0000 X:0120 Y:0000 P:envMxdiZC - Load X from AF.
$03/A26C E8 INX A:0000 X:0120 Y:0000 P:envMxdizC - (+4 to X.)
$03/A26D E8 INX A:0000 X:0121 Y:0000 P:envMxdizC -
$03/A26E E8 INX A:0000 X:0122 Y:0000 P:envMxdizC
$03/A26F E8 INX A:0000 X:0123 Y:0000 P:envMxdizC
$03/A270 86 AF STX $AF    [$00:00AF] A:0000 X:0124 Y:0000 P:envMxdizC - Store X in AF.
$03/A272 E6 B1 INC $B1    [$00:00B1] A:0000 X:0124 Y:0000 P:envMxdizC - +1 to B1.
$03/A274 A5 B1 LDA $B1    [$00:00B1] A:0000 X:0124 Y:0000 P:envMxdizC - Load A from B1.
$03/A276 C9 48 CMP #$48 A:0001 X:0124 Y:0000 P:envMxdizC - Has it gone through 48 times? (Amount of spells one can have 48 = 72, which is 24x3)
$03/A278 F0 03 BEQ $03    [$A27D] A:0001 X:0124 Y:0000 P:eNvMxdizc - If so branch to 03A27D.
$03/A27A 4C 18 A2 JMP $A218  [$03:A218] A:0001 X:0124 Y:0000 P:eNvMxdizc - Jump to Back to 03A218.
------------------------------------------------------------------------------------------------------------------------------------------------------

-----------------------------------------------------------------------------------------------------------------------------------------------------
$03/A27D AD 22 18 LDA $1822  [$7E:1822] A:0048 X:0240 Y:0000 P:envMxdiZC - Load A from 7E1822.
$03/A280 85 00 STA $00    [$00:0000] A:0001 X:0240 Y:0000 P:envMxdizC - Store A in 00.
$03/A282 A9 0E LDA #$0E A:0001 X:0240 Y:0000 P:envMxdizC - Load 0E into A.
$03/A284 20 85 80 JSR $8085  [$03:8085] A:000E X:0240 Y:0000 P:envMxdizC - Jump to Subroutine (???)
$03/A287 60 RTS A:0000 X:0002 Y:000D P:envMxdiZc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/A422 A5 D0 LDA $D0    [$00:00D0] A:0000 X:0002 Y:000D P:envMxdiZc - Load D0 into A.
$03/A424 20 7E 84 JSR $847E  [$03:847E] A:0001 X:0002 Y:000D P:envMxdizc - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/847E 0A ASL A A:0001 X:0002 Y:000D P:envMxdizc - x2 A.
$03/847F 0A ASL A A:0002 X:0002 Y:000D P:envMxdizc - x2 A.
$03/8480 0A ASL A A:0004 X:0002 Y:000D P:envMxdizc - x2 A.
$03/8481 60 RTS A:0008 X:0002 Y:000D P:envMxdizc - Return
$03/A427 AA TAX A:0008 X:0002 Y:000D P:envMxdizc - Transfer A to X.
$03/A428 BD DB 32 LDA $32DB,x[$7E:32E3] A:0008 X:0008 Y:000D P:envMxdizc - Load A from Right Hand Item.
$03/A42B C9 4C CMP #$4C A:0044 X:0008 Y:000D P:envMxdizc - Is it The Avenger?
$03/A42D F0 07 BEQ $07    [$A436] A:0044 X:0008 Y:000D P:eNvMxdizc - If so branch to 03A436.
$03/A42F BD DF 32 LDA $32DF,x[$7E:32E7] A:0044 X:0008 Y:000D P:eNvMxdizc - Load A from Left Hand Item.
$03/A432 C9 4C CMP #$4C A:0000 X:0008 Y:000D P:envMxdiZc - Is it The Avenger?
$03/A434 D0 0C BNE $0C    [$A442] A:0000 X:0008 Y:000D P:eNvMxdizc - If not branch to 03A442.
-------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------
$03/A442 60 RTS A:0000 X:0008 Y:000D P:eNvMxdizc - Return

Well that was draining and unfortunately there isn't much to show for it. But there was this...

Code: [Select]
$03/A400 A6 A6 LDX $A6    [$00:00A6] A:0001 X:0080 Y:0012 P:envMxdizc - Load X from A6 (character slot).
$03/A402 BD 00 20 LDA $2000,x[$7E:2080] A:0001 X:0080 Y:0012 P:envMxdizc - Load Character Slot's ID.
$03/A405 29 1F AND #$1F A:0085 X:0080 Y:0012 P:eNvMxdizc - -80 to A.
$03/A407 C9 05 CMP #$05 A:0005 X:0080 Y:0012 P:envMxdizc - Is it Edward?
$03/A409 D0 14 BNE $14    [$A41F] A:0005 X:0080 Y:0012 P:envMxdiZC - If not branch to 03A41F.
---------------------------------------------------------------------------------------------------------------------------
$03/A40B AD 82 35 LDA $3582  [$7E:3582] A:0005 X:0080 Y:0012 P:envMxdiZC - Load a value close to encounter type into A (May deal something with the WaterHag battle)
$03/A40E D0 0F BNE $0F    [$A41F] A:0000 X:0080 Y:0012 P:envMxdiZC - If it is not 00 branch to 03A41F
------------------------------------------------------------------------------------------------------------------------.
$03/A410 AD DB 38 LDA $38DB  [$7E:38DB] A:0000 X:0080 Y:0012 P:envMxdiZC - Load 7E38DB into A.
$03/A413 3A DEC A A:0000 X:0080 Y:0012 P:envMxdiZC - -1 to A.
$03/A414 F0 09 BEQ $09    [$A41F] A:00FF X:0080 Y:0012 P:eNvMxdizC - If it is 00 branch to 03A41F.
---------------------------------------------------------------------------------------------------------------------
$03/A416 BD 06 20 LDA $2006,x[$7E:2086] A:00FF X:0080 Y:0012 P:eNvMxdizC - Load Edward's Status Byte 4. 
$03/A419 30 04 BMI $04    [$A41F] A:0000 X:0080 Y:0012 P:envMxdiZC - If he is currently Hiding  branch to 03A41F.
$03/A41B 29 01 AND #$01 A:0000 X:0080 Y:0012 P:envMxdiZC - Is it 01? (Critical)
$03/A41D D0 1A BNE $1A    [$A439] A:0000 X:0080 Y:0012 P:envMxdiZC - If it is so, branch to 03A439.
-----------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------
$03/A439 A9 FF LDA #$FF A:0001 X:0080 Y:0012 P:envMxdizC - Load FF into A.
$03/A43B 85 D0 STA $D0    [$00:00D0] A:00FF X:0080 Y:0012 P:eNvMxdizC - Store A in D0.
$03/A43D A9 01 LDA #$01 A:00FF X:0080 Y:0012 P:eNvMxdizC - Load 01 into A.
$03/A43F 20 85 80 JSR $8085  [$03:8085] A:0001 X:0080 Y:0012 P:envMxdizC - Jump to Subroutine (??)
$03/A442 60 RTS A:0002 X:0002 Y:0012 P:envMxdizc - Return
(Appears to somehow get rid of the pointer for choosing commands quite important when for an Auto-Hide dealing)


Which is the Routine revolving the activation of Edward's Auto-Hide command.




Hmm, you were quite mistaken about the Auto-Commands.

Auto-Cover looks for Paladin Cecil Specifically (any other character that uses Cover is thereby protected by the Paladin) but is disabled when the Dark Knight is present (which can never logically happen...)

Auto-Hide looks for Edward's ID, sees that it is his, and then uses the command.

http://slickproductions.org/forum/index.php?topic=1754.msg18211#msg18211

Quite old info. by this point, but I can see how those sorts of things could fall through the cracks.

Aside from Auto-Cover and Auto-Hide I can't think of any other Auto-Commands off the top of my head, unless you consider Berserk to give Auto-Fight (which is likely does)

Though the information is quite old. The new information above allows you to switch the conditions for activating Auto-Hide (in one instance. Its likely not too useful or reliable because this instance is so specific. It Has to be Edward's Turn, when he is put in critical for this instance to occur, which means there must be another instance I haven't located. Likely close to the second instance at 03AB56. I'll take a look at that a little bit later and see if that will make it work once and for all.











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 (FFI spell routines in FFIV!)
« Reply #138 on: October 17, 2013, 07:07:53 PM »
Huh... Intriguing. I might be able to alter these conditions to make an auto-learn happen (...maybe...) but unless I'm missing it, the instruction to actually execute Hide isn't here, right?

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #139 on: October 17, 2013, 08:02:07 PM »
That is correct. In what I found is If Edward is knocked into Critical While his Turn is Active, get rid of his menu. The rest of the code assumes that Auto-Hide is running from its proper course elsewhere.



Hmm, there's a bit of interesting dealings around this area as well...

Code: [Select]
$03/AA98 22 B4 FF 13 JSL $13FFB4[$13:FFB4] A:00FF X:FFFF Y:001A P:eNvMxdizC - Jump to Subroutine Long (In Lo Rom)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$13/FFB4 A0 05 00 LDY #$0005 A:00FF X:FFFF Y:001A P:eNvMxdizC - Load 0005 into A.
$13/FFB7 7B TDC A:00FF X:FFFF Y:0005 P:envMxdizC - Transfer Direct Page.
$13/FFB8 AA TAX A:0000 X:FFFF Y:0005 P:envMxdiZC - Transfer a to X.
$13/FFB9 BD 00 20 LDA $2000,x[$7E:2000] A:0000 X:0000 Y:0005 P:envMxdiZC - Load Character Slot ID into A.
$13/FFBC 29 1F AND #$1F A:0081 X:0000 Y:0005 P:eNvMxdizC - Get rid of negative bits.
$13/FFBE C9 13 CMP #$13 A:0001 X:0000 Y:0005 P:envMxdizC - Is it FuSoYa?
$13/FFC0 D0 15 BNE $15    [$FFD7] A:0001 X:0000 Y:0005 P:eNvMxdizc - If not branch to 13FFD7.
-------------------------------------------------------------------------------------------------------------------------
$13/FFC2 BD 03 20 LDA $2003,x[$7E:2083] A:0013 X:0080 Y:0004 P:envMxdiZC - Load Status Byte 1 from FuSoYa.
$13/FFC5 29 C0 AND #$C0 A:0000 X:0080 Y:0004 P:envMxdiZC - Is he Dead or Petrified?
$13/FFC7 D0 07 BNE $07    [$FFD0] A:0000 X:0080 Y:0004 P:envMxdiZC - If so branch to 13FFD0.
$13/FFC9 BD 04 20 LDA $2004,x[$7E:2084] A:0000 X:0080 Y:0004 P:envMxdiZC - Load Status Byte 2 from FuSoYa.
$13/FFCC 29 3C AND #$3C A:0000 X:0080 Y:0004 P:envMxdiZC -Is he Berserk, Charm, Sleep, or Paralyzed?
$13/FFCE F0 15 BEQ $15    [$FFE5] A:0000 X:0080 Y:0004 P:envMxdiZC - If not branch to 13FFE5.
--------------------------------------------------------------------------------------------------------------------
$13/FFD0 A9 FF LDA #$FF A:0040 X:0080 Y:0004 P:envMxdizC - Load FF into A.
$13/FFD2 8D 7C 35 STA $357C  [$7E:357C] A:00FF X:0080 Y:0004 P:eNvMxdizC - Store A in 7E357C.
$13/FFD5 80 0E BRA $0E    [$FFE5] A:00FF X:0080 Y:0004 P:eNvMxdizC - Branch to 13FFE5
-----------------------------------------------------------------------------------------------------------------------
$13/FFD7 C2 20 REP #$20 A:0001 X:0000 Y:0005 P:eNvMxdizc - Reset Processor Status
$13/FFD9 8A TXA A:0001 X:0000 Y:0005 P:eNvmxdizc - Transfer X to A.
$13/FFDA 18 CLC A:0000 X:0000 Y:0005 P:envmxdiZc - Clear Carry Flag.
$13/FFDB 69 80 00 ADC #$0080 A:0000 X:0000 Y:0005 P:envmxdiZc
$13/FFDE AA TAX A:0080 X:0000 Y:0005 P:envmxdizc - Transfer A to X.
$13/FFDF 7B TDC A:0080 X:0080 Y:0005 P:envmxdizc - Transfer Direct Page.
$13/FFE0 E2 20 SEP #$20 A:0000 X:0080 Y:0005 P:envmxdiZc
$13/FFE2 88 DEY A:0000 X:0080 Y:0005 P:envMxdiZc - -1 to Y.
$13/FFE3 D0 D4 BNE $D4    [$FFB9] A:0000 X:0080 Y:0004 P:envMxdizc Loop back to FFB9 (looks through all five characters)
-------------------------------------------------------------------------------------------------------------------
$13/FFE5 6B RTL A:0000 X:0080 Y:0004 P:envMxdiZC - Return from Long Jump.
(This may have something to do with the termination of Regen if FuSoYa is incapacitated but we've never noticed a problem with that without FuSoYa using it, have we?)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/AA9C AD 7C 35 LDA $357C  [$7E:357C] A:00FF X:0080 Y:0004 P:eNvMxdizC - Load A from 7E357C.
$03/AA9F C9 FF CMP #$FF A:00FF X:0080 Y:0004 P:eNvMxdizC - Is it FF?
$03/AAA1 F0 45 BEQ $45    [$AAE8] A:00FF X:0080 Y:0004 P:envMxdiZC - If so branch to 03AAE8
------------------------------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------------------------
$03/AAE8 A9 11 LDA #$11 A:00FF X:0080 Y:0004 P:envMxdiZC - Load 11 into A.
$03/AAEA 20 85 80 JSR $8085  [$03:8085] A:0011 X:0080 Y:0004 P:envMxdizC - Jump to Subroutine (??)
$03/AAED A9 0C LDA #$0C A:0000 X:001A Y:0004 P:envMxdiZC - Load 0C into A,
$03/AAEF 4C 85 80 JMP $8085  [$03:8085] A:000C X:001A Y:0004 P:envMxdizC - Jump to Subroutine (??)
(I'll leave this part alone for now. It doesn't seem to have any useful information at this time and I will pick it back up at...)
$03/AB09 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0000 Y:0012 P:envMxdiZc - Load X from Character Slot.
$03/AB0B BD 03 20 LDA $2003,x[$7E:2003] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Character Slot's Status Byte 1 into A.
$03/AB0E 29 C0 AND #$C0 A:0000 X:0000 Y:0012 P:envMxdiZc - Is it Dead or Petrified?
$03/AB10 D0 05 BNE $05    [$AB17] A:0000 X:0000 Y:0012 P:envMxdiZc - If so branch to 03AB17.
$03/AB12 BD 04 20 LDA $2004,x[$7E:2004] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Character Slot's Status Byte 2 into A.
$03/AB15 29 30 AND #$30 A:0000 X:0000 Y:0012 P:envMxdiZc - Is it Sleep or Paralyze?
$03/AB17 D0 07 BNE $07    [$AB20] A:0000 X:0000 Y:0012 P:envMxdiZc - If so branch to 03AB20.
$03/AB19 BD 05 20 LDA $2005,x[$7E:2005] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Character's Status Byte 3 into A.
$03/AB1C 29 42 AND #$42 A:0000 X:0000 Y:0012 P:envMxdiZc - Is it Stopped or Jumping?
$03/AB1E F0 03 BEQ $03    [$AB23] A:0000 X:0000 Y:0012 P:envMxdiZc - If not branch to 03AB23.
----------------------------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------------------------------
$03/AB23 BD 04 20 LDA $2004,x[$7E:2004] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Status Byte 2 into A.
$03/AB26 29 0C AND #$0C A:0000 X:0000 Y:0012 P:envMxdiZc - Is it Berserk or Charm?
$03/AB28 F0 20 BEQ $20    [$AB4A] A:0000 X:0000 Y:0012 P:envMxdiZc - If so branch to 03AB4A.
$03/AB4A BD 06 20 LDA $2006,x[$7E:2006] A:0000 X:0000 Y:0012 P:envMxdiZc - Load Status Byte 4 into A.
$03/AB4D 29 01 AND #$01 A:0000 X:0000 Y:0012 P:envMxdiZc - Is it Critical?
$03/AB4F F0 50 BEQ $50    [$ABA1] A:0000 X:0000 Y:0012 P:envMxdiZc - If not branch to 03ABA1.
------------------------------------------------------------------------------------------------------------------------------------
$03/AB51 BD 00 20 LDA $2000,x[$7E:2080] A:0001 X:0080 Y:0012 P:envMxdizc - Load Character ID into A.
$03/AB54 29 1F AND #$1F A:0085 X:0080 Y:0012 P:eNvMxdizc - -Get rid of negative bits.
$03/AB56 C9 05 CMP #$05 A:0005 X:0080 Y:0012 P:envMxdizc - Is it Edward?
$03/AB58 D0 47 BNE $47    [$ABA1] A:0005 X:0080 Y:0012 P:envMxdiZC - If not branch to 03ABA1.
----------------------------------------------------------------------------------------------------------------------------------------
$03/AB5A AD 82 35 LDA $3582  [$7E:3582] A:0005 X:0080 Y:0012 P:envMxdiZC - Load A from 7E3582 (One byte after what kind of attack the battle started in. Likely related to the WaterHag battle somehow...)
$03/AB5D D0 42 BNE $42    [$ABA1] A:0000 X:0080 Y:0012 P:envMxdiZC - If it is not 00 branch to 03ABA1.
-----------------------------------------------------------------------------------------------------------------------------------------
$03/AB5F A9 03 LDA #$03 A:0000 X:0080 Y:0012 P:envMxdiZC - Load 03 into A.
$03/AB61 20 69 85 JSR $8569  [$03:8569] A:0003 X:0080 Y:0012 P:envMxdizC - Jump to Subroutine (Something to do with timers?)
$03/AB64 AE 98 35 LDX $3598  [$7E:3598] A:0000 X:0080 Y:0012 P:envMxdiZc - Load X from 7E3598
$03/AB67 BD 06 2A LDA $2A06,x[$7E:2A1E] A:0000 X:0018 Y:0012 P:envMxdizc - Load A from Status Durations.
$03/AB6A 29 08 AND #$08 A:0000 X:0018 Y:0012 P:envMxdiZc - Is it 08?
$03/AB6C D0 33 BNE $33    [$ABA1] A:0000 X:0018 Y:0012 P:envMxdiZc - Branch if not 00 to 03ABA1.
$03/AB6E A6 A6 LDX $A6    [$00:00A6] A:0000 X:0018 Y:0012 P:envMxdiZc- Load A from Character Slot.
$03/AB70 BD 06 20 LDA $2006,x[$7E:2086] A:0000 X:0080 Y:0012 P:envMxdizc - Load Edward's Status Byte 4.
$03/AB73 10 0B BPL $0B    [$AB80] A:0001 X:0080 Y:0012 P:envMxdizc - If he is not already Hiding branch to 03AB80.
----------------------------------------------------------------------------------------------------------------------------------------------------
$03/AB80 20 33 AD JSR $AD33  [$03:AD33] A:0001 X:0080 Y:0012 P:envMxdizc - Jump to Subroutine (Checks if current characters are alive or Stone/Dead.
$03/AB83 3A DEC A A:0002 X:0080 Y:0012 P:envMxdizC - -1 to A.
$03/AB84 F0 1B BEQ $1B    [$ABA1] A:0001 X:0080 Y:0012 P:envMxdizC - If 00 branch to 03ABA1.
$03/AB86 20 09 AD JSR $AD09  [$03:AD09] A:0001 X:0080 Y:0012 P:envMxdizC - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/AD09 A6 A6 LDX $A6    [$00:00A6] A:0001 X:0080 Y:0012 P:envMxdizC - Load X from Character Slot.
$03/AD0B A9 09 LDA #$09 A:0001 X:0080 Y:0012 P:envMxdizC - Load 09 into A. (Command - Hide)
$03/AD0D 9D 51 20 STA $2051,x[$7E:20D1] A:0009 X:0080 Y:0012 P:envMxdizC - Store A in Next Action to Take
$03/AD10 80 07 BRA $07    [$AD19] A:0009 X:0080 Y:0012 P:envMxdizC - Branch to 03AD19.
---------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------
$03/AD19 A9 80 LDA #$80 A:0009 X:0080 Y:0012 P:envMxdizC - Load 80 into A.
$03/AD1B 9D 50 20 STA $2050,x[$7E:20D0] A:0080 X:0080 Y:0012 P:eNvMxdizC - Store A in 50 (Unknown)
$03/AD1E 9E 53 20 STZ $2053,x[$7E:20D3] A:0080 X:0080 Y:0012 P:eNvMxdizC - Store Zero in Targeting (Meaning Always Target Self)
$03/AD21 A5 8E LDA $8E    [$00:008E] A:0080 X:0080 Y:0012 P:eNvMxdizC - Load the value 8E into A.
$03/AD23 AA TAX A:0001 X:0080 Y:0012 P:envMxdizC - Transfer A to X.
$03/AD24 7B TDC A:0001 X:0001 Y:0012 P:envMxdizC - Transfer Direct Page.
$03/AD25 20 5F 85 JSR $855F  [$03:855F] A:0000 X:0001 Y:0012 P:envMxdiZC - Jump to Subroutine.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/855F 1F FE FE 13 ORA $13FEFE,x[$13:FEFF] A:0000 X:0001 Y:0012 P:envMxdiZC - Add the value in 13FEFE+X into A.
$03/8563 60 RTS A:0040 X:0001 Y:0012 P:envMxdizC - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/AD28 A6 A6 LDX $A6    [$00:00A6] A:0040 X:0001 Y:0012 P:envMxdizC - Load Character Slot into X.
$03/AD2A 9D 54 20 STA $2054,x[$7E:20D4] A:0040 X:0080 Y:0012 P:envMxdizC - Store A in Edward's Next Party Target (but I thought 00 would suffice? Hmm...)
$03/AD2D A2 01 00 LDX #$0001 A:0040 X:0080 Y:0012 P:envMxdizC - Load 01 into X.
$03/AD30 86 D4 STX $D4    [$00:00D4] A:0040 X:0001 Y:0012 P:envMxdizC - Store X in D4.
$03/AD32 60 RTS A:0040 X:0001 Y:0012 P:envMxdizC - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

And there you have it. The way Hide works and the ways to modify it. The entire point of the Critical Check seems Purely for Edward's Auto-Hiding purpose. And the means to switch conditions (and targeting from the looks of it) seems quite a simple matter. But for the purposes of what you want to use it for, it doesn't even need to be a command. Just something that especially looks at the character and responds appropriately.












Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #140 on: October 20, 2013, 06:14:35 PM »
While looking for In-battle names in memory I stumbled upon what makes Yang unique as for how his damage is calculated. This is quite important as this is the first time I've seen actual damage formulas being compiled and created.

Attack Building Formula

Code: [Select]
$03/9B03 9C 77 39 STZ $3977  [$7E:3977] A:0001 X:FFFF Y:0024 P:eNvMxdizc - Store Zero in 7E3977 (this seems to be what tells the game to ignore Equipped Weapon's power and go with a different damage formula.
$03/9B06 A0 01 00 LDY #$0001 A:0001 X:FFFF Y:0024 P:eNvMxdizc - Load 1 into Y.
$03/9B09 B1 80 LDA ($80),y[$7E:2001] A:0001 X:FFFF Y:0001 P:envMxdizc - Load Slot's ID.
$03/9B0B 29 0F AND #$0F A:0000 X:FFFF Y:0001 P:envMxdiZc - Get rid of negatives?
$03/9B0D C9 00 CMP #$06 A:0000 X:FFFF Y:0001 P:envMxdiZc - Is it Yang's ID?
$03/9B0F D0 03 BNE $03    [$9B14] A:0000 X:FFFF Y:0001 P:envMxdiZC - If not branch to 039B14.
$03/9B11 EE 77 39 INC $3977  [$7E:3977] A:0000 X:FFFF Y:0001 P:envMxdiZC - +1 to 7E397 (purpose listed above)
$03/9B14 A0 33 00 LDY #$0033 A:0000 X:FFFF Y:0001 P:envMxdizC - Load 33 into Y.
$03/9B17 B1 80 LDA ($80),y[$7E:2033] A:0000 X:FFFF Y:0033 P:envMxdizC - Load Slot's Right Hand Equipped Weapon into A.
$03/9B19 F0 20 BEQ $20    [$9B3B] A:0000 X:FFFF Y:0033 P:envMxdiZC - If Nothing branch to 039B3B.
------------------------------------------------------------------------------------------------------------------------------
(Branches off to a normal weapon)
$03/9B1B A0 25 00 LDY #$0025 A:0016 X:FFFF Y:0033 P:envMxdizc - Load Slot's Right Handed Weapon ???.
$03/9B1E B1 82 LDA ($82),y[$7E:27A5] A:0016 X:FFFF Y:0025 P:envMxdizc - Load it into A.
$03/9B20 30 19 BMI $19    [$9B3B] A:002D X:FFFF Y:0025 P:envMxdizc - If it is negative branch to 039B3B.
$03/9B22 AD 77 39 LDA $3977  [$7E:3977] A:002D X:FFFF Y:0025 P:envMxdizc - Load A from Yang's Formula byte.
$03/9B25 09 80 ORA #$80 A:0000 X:FFFF Y:0025 P:envMxdiZc - Add 80 if applicable.
$03/9B27 8D 77 39 STA $3977  [$7E:3977] A:0080 X:FFFF Y:0025 P:eNvMxdizc - Store 80 in ?Yang's Formula Byte?
$03/9B2A A0 21 00 LDY #$0021 A:0080 X:FFFF Y:0025 P:eNvMxdizc - Load 20 into Y.
$03/9B2D 7B TDC A:0080 X:FFFF Y:0021 P:envMxdizc - Transfer Direct Page.
$03/9B2E AA TAX A:0000 X:FFFF Y:0021 P:envMxdiZc - Transfer A to X.
-------------------------------------------------(Looping Point)------------------------------------------------------------
$03/9B2F B1 82 LDA ($82),y[$7E:27A1] A:0000 X:0000 Y:0021 P:envMxdiZc - Load A from Right Handed Weapon Property.
$03/9B31 9D 9C 28 STA $289C,x[$7E:289C] A:0001 X:0000 Y:0021 P:envMxdizc - Store A in 7E289C+X.
$03/9B34 C8 INY A:0001 X:0000 Y:0021 P:envMxdizc + 1 to Y.
$03/9B35 E8 INX A:0001 X:0000 Y:0022 P:envMxdizc +1 to X.
$03/9B36 E0 0B 00 CPX #$000B A:0001 X:0001 Y:0022 P:envMxdizc - Has it gone through 11 times? (put the entire weapon data in another section.)
$03/9B39 D0 F4 BNE $F4    [$9B2F] A:0001 X:0001 Y:0022 P:eNvMxdizc - If not loop back to 039B2F.
------------------------------------------------------------------------------------------------------------------------------------
$03/9B3B A0 35 00 LDY #$0035 A:0000 X:FFFF Y:0033 P:envMxdiZC - Load 35 into Y.
$03/9B3E B1 80 LDA ($80),y[$7E:2035] A:0000 X:FFFF Y:0035 P:envMxdizC -  Load Slot's Left Hand Equipped Weapon into A.
$03/9B40 F0 21 BEQ $21    [$9B63] A:0062 X:FFFF Y:0035 P:envMxdizC - If nothing branch to 03B963.
------------------------------------------------------------------------------------------------
$03/9B42 A0 30 00 LDY #$0030 A:0062 X:FFFF Y:0035 P:envMxdizC - Load 30 into Y.
$03/9B45 B1 82 LDA ($82),y[$7E:27B0] A:0062 X:FFFF Y:0030 P:envMxdizC - Load A from Left-Hand Equipment.

$03/9B47 30 1A BMI $1A    [$9B63] A:0084 X:FFFF Y:0030 P:eNvMxdizC - If it is over 80 (Shield) branch to 03B963.
---------------------------------------------------------------------------------------------------------
$03/9B49 AD 77 39 LDA $3977  [$7E:3977] A:0006 X:000B Y:0030 P:envMxdizC - Load "Is it Yang?" Byte into A.
$03/9B4C 09 40 ORA #$40 A:0080 X:000B Y:0030 P:eNvMxdizC 0 Add 40 if applicable to A.
$03/9B4E 8D 77 39 STA $3977  [$7E:3977] A:00C0 X:000B Y:0030 P:eNvMxdizC - Store A in "Is it Yang?" Byte.
$03/9B51 A0 2C 00 LDY #$002C A:00C0 X:000B Y:0030 P:eNvMxdizC - Load 002C into Y.
$03/9B54 A2 0B 00 LDX #$000B A:00C0 X:000B Y:002C P:envMxdizC - Load 000B into X.
-----------------------------------------------------------------------(Looping Point)------------------------------------------------------
$03/9B57 B1 82 LDA ($82),y[$7E:27E3] A:00C0 X:000B Y:002C P:envMxdizC - Load A from Weapon Property.
$03/9B59 9D 9C 28 STA $289C,x[$7E:28A7] A:0020 X:000B Y:002C P:envMxdizC - Store A in 7E28A7.(Where it will store weapon dealings now)
$03/9B5C C8 INY A:0020 X:000B Y:002C P:envMxdizC - +1 X.
$03/9B5D E8 INX A:0020 X:000B Y:002D P:envMxdizC - +1 Y.
$03/9B5E E0 16 00 CPX #$0016 A:0020 X:000C Y:002D P:envMxdizC - Has it gone through 11 times?
$03/9B61 D0 F4 BNE $F4    [$9B57] A:0020 X:000C Y:002D P:eNvMxdizc - If not loop back to 039B57.
-----------------------------------------------------------------------------------------------------------------
$03/9B63 AD 77 39 LDA $3977  [$7E:3977] A:0084 X:FFFF Y:0030 P:eNvMxdizC - Load 7E3977 into A.
$03/9B66 29 C0 AND #$C0 A:0001 X:FFFF Y:0030 P:envMxdizC - Get rid of inapplicable bits.
$03/9B68 F0 09 BEQ $09    [$9B73] A:0000 X:FFFF Y:0030 P:envMxdiZC - If it is 00 branch to 039B73.
----------------------------------------------------------------------------------------------------------------------
$03/9B6A 49 C0 EOR #$C0 A:0080 X:000B Y:0030 P:eNvMxdizC - Add C0 if applicable to A.
$03/9B6C D0 55 BNE $55    [$9BC3] A:0040 X:000B Y:0030 P:envMxdizC - If not 00 branch to 039BC3.
-------------------------------------------------------------------------------------------------------------------------------
$03/9B6E AD A2 28 LDA $28A2  [$7E:28A2] A:0000 X:0016 Y:0037 P:envMxdiZC - Load A from Equip Index (Arrow Bit presumably it what it is looking at)
$03/9B71 29 C0 AND #$C0 A:0042 X:0016 Y:0037 P:envMxdizc - Get rid of inapplicable bits.
--------------------------------------------------------------------------------------------------------------------------
$03/9B73 F0 4C BEQ $4C    [$9BC1] A:0000 X:FFFF Y:0030 P:envMxdiZC - If it is 00 branch to 03B8C1.
---------------------------------------------------------------------------------------------------------------
(Only takes this path if it is arrows)
$03/9B75 A9 80 LDA #$80 A:0040 X:0016 Y:0037 P:envMxdizC - Load 80 into A.
$03/9B77 8D 78 39 STA $3978  [$7E:3978] A:0080 X:0016 Y:0037 P:eNvMxdizC - Store A in 7E3978.
$03/9B7A AD A2 28 LDA $28A2  [$7E:28A2] A:0080 X:0016 Y:0037 P:eNvMxdizC - Load A from Equipment Branch.
$03/9B7D 29 80 AND #$80 A:0042 X:0016 Y:0037 P:envMxdizC - Get rid of inapplicable bits. (Positive bits?)
$03/9B7F D0 36 BNE $36    [$9BB7] A:0000 X:0016 Y:0037 P:envMxdiZC - If not 00 branch to 039BB7.
$03/9B81 A9 40 LDA #$40 A:0000 X:0016 Y:0037 P:envMxdiZC - Load 40 into A.
$03/9B83 8D 78 39 STA $3978  [$7E:3978] A:0040 X:0016 Y:0037 P:envMxdizC - Store A in 7E3978.
$03/9B86 7B TDC A:0040 X:0016 Y:0037 P:envMxdizC - Transfer Direct Page.
$03/9B87 AA TAX A:0000 X:0016 Y:0037 P:envMxdiZC - Transfer A to X.
$03/9B88 A0 16 00 LDY #$0016 A:0000 X:0000 Y:0037 P:envMxdiZC - Load 16 into Y.
----------------------------------------------------------------------------------(Looping Point)-------------------------------------
$03/9B8B BD 9C 28 LDA $289C,x[$7E:289C] A:0000 X:0000 Y:0016 P:envMxdizC - Load A from 7E289C+x (Weapon property?)
$03/9B8E 99 9C 28 STA $289C,y[$7E:28B2] A:00A0 X:0000 Y:0016 P:eNvMxdizC - Store A in 7E289C+Y
$03/9B91 E8 INX A:00A0 X:0000 Y:0016 P:eNvMxdizC +1 X
$03/9B92 C8 INY A:00A0 X:0001 Y:0016 P:envMxdizC +1 Y
$03/9B93 E0 0B 00 CPX #$000B A:00A0 X:0001 Y:0017 P:envMxdizC - Compare X to 0B (11 times, copying Weapon information... again)
$03/9B96 D0 F3 BNE $F3    [$9B8B] A:00A0 X:0001 Y:0017 P:eNvMxdizc - If not done 11 times loop back to 039B8B
-------------------------------------------------------------------------------------------------------------------------------------------
$03/9B98 7B TDC A:0000 X:000B Y:0021 P:envMxdiZC - Transfer Direct Page.
$03/9B99 A8 TAY A:0000 X:000B Y:0021 P:envMxdiZC - Transfer A to Y.
--------------------------------------------------------(Looping Point)-------------------------------------------------------
$03/9B9A BD 9C 28 LDA $289C,x[$7E:28A7] A:0000 X:000B Y:0000 P:envMxdiZC - Load A from Left-Handed Weapon Property.
$03/9B9D 99 9C 28 STA $289C,y[$7E:289C] A:0020 X:000B Y:0000 P:envMxdizC - Store A in 7E289C.
$03/9BA0 E8 INX A:0020 X:000B Y:0000 P:envMxdizC - +1 X
$03/9BA1 C8 INY A:0020 X:000C Y:0000 P:envMxdizC - +1 Y
$03/9BA2 E0 16 00 CPX #$0016 A:0020 X:000C Y:0001 P:envMxdizC - Repeat this 11 times.
$03/9BA5 D0 F3 BNE $F3    [$9B9A] A:0020 X:000C Y:0001 P:eNvMxdizc - If not loop back to 039B9A.
-------------------------------------------------------------------------------------------------------------------
$03/9BA7 A0 0B 00 LDY #$000B A:0000 X:0016 Y:000B P:envMxdiZC - Load 000B into Y.
---------------------------------------------------------(Looping Point)---------------------------------------------
$03/9BAA BD 9C 28 LDA $289C,x[$7E:28B2] A:0000 X:0016 Y:000B P:envMxdizC - Load Weapon Property from Right Hand into A.
$03/9BAD 99 9C 28 STA $289C,y[$7E:28A7] A:00A0 X:0016 Y:000B P:eNvMxdizC - Store A in 7E289C.
$03/9BB0 E8 INX A:00A0 X:0016 Y:000B P:eNvMxdizC +1 X
$03/9BB1 C8 INY A:00A0 X:0017 Y:000B P:envMxdizC - +1 Y
$03/9BB2 C0 16 00 CPY #$0016 A:00A0 X:0017 Y:000C P:envMxdizC - Has it gone through 11 times?
$03/9BB5 D0 F3 BNE $F3    [$9BAA] A:00A0 X:0017 Y:000C P:eNvMxdizc - If not branch back to 039BAA.
-----------------------------------------------------------------------------------------------------------------------
$03/9BB7 AD 77 39 LDA $3977  [$7E:3977] A:0000 X:0021 Y:0016 P:envMxdiZC - Load "Is it Yang?" Byte into A.
$03/9BBA 29 3F AND #$3F A:00C0 X:0021 Y:0016 P:eNvMxdizC - Get rid of inapplicable bits.
$03/9BBC 09 A0 ORA #$A0 A:0000 X:0021 Y:0016 P:envMxdiZC - Add A0 if applicable.
$03/9BBE 8D 77 39 STA $3977  [$7E:3977] A:00A0 X:0021 Y:0016 P:eNvMxdizC - Store A in 7E3977
---------------------------------------------------------------------------------------------------------------
$03/9BC1 80 2B BRA $2B    [$9BEE] A:0000 X:FFFF Y:0030 P:envMxdiZC - Branch to 039BEE.
-------------------------------------------------------------------------------------------------------------------
$03/9BC3 AD 77 39 LDA $3977  [$7E:3977] A:0040 X:000B Y:0030 P:envMxdizC - Load Yang's Damage Byte into A.
$03/9BC6 30 26 BMI $26    [$9BEE] A:0080 X:000B Y:0030 P:eNvMxdizC - Branch if negative to 039BEE.

------------------------------------------------------------------------------------------------------------------------
$03/9BEE 7B TDC A:0000 X:FFFF Y:0030 P:envMxdiZC - Transfer Direct Page.
$03/9BEF AA TAX A:0000 X:FFFF Y:0030 P:envMxdiZC - Transfer A to X.
$03/9BF0 86 A9 STX $A9    [$00:00A9] A:0000 X:0000 Y:0030 P:envMxdiZC - Store X in A9.
$03/9BF2 AD A0 28 LDA $28A0  [$7E:28A0] A:0000 X:0000 Y:0030 P:envMxdiZC - Load A from 7E28A0.
$03/9BF5 30 05 BMI $05    [$9BFC] A:0000 X:0000 Y:0030 P:envMxdiZC - If negative (Shield) branch to 039BFC.
$03/9BF7 AD A4 28 LDA $28A4  [$7E:28A4] A:0000 X:0000 Y:0030 P:envMxdiZC - Load A from Weapon Elemental.
$03/9BFA 85 A9 STA $A9    [$00:00A9] A:0000 X:0000 Y:0030 P:envMxdiZC - Store A in A9.
$03/9BFC AD AB 28 LDA $28AB  [$7E:28AB] A:0000 X:0000 Y:0030 P:envMxdiZC - Load A from 7E28AB.
$03/9BFF 30 05 BMI $05    [$9C06] A:0000 X:0000 Y:0030 P:envMxdiZC - If negative(Shield) branch to 039C06
$03/9C01 AD AF 28 LDA $28AF  [$7E:28AF] A:0000 X:0000 Y:0030 P:envMxdiZC - Load A from 7E28AF.
$03/9C04 85 AA STA $AA    [$00:00AA] A:0000 X:0000 Y:0030 P:envMxdiZC - Store A in AA.
$03/9C06 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0000 Y:0030 P:envMxdiZC - Load A from A9.
$03/9C08 05 AA ORA $AA    [$00:00AA] A:0000 X:0000 Y:0030 P:envMxdiZC - Add the applicable value from AA onto it.
$03/9C0A A0 19 00 LDY #$0019 A:0000 X:0000 Y:0030 P:envMxdiZC - Load 0019 into Y.
$03/9C0D 91 80 STA ($80),y[$7E:2019] A:0000 X:0000 Y:0019 P:envMxdizC - Store A in Yang's Attack Elemental.
$03/9C0F 7B TDC A:0000 X:0000 Y:0019 P:envMxdizC - Transfer Direct Page.
$03/9C10 AA TAX A:0000 X:0000 Y:0019 P:envMxdiZC - Transfer A to X.
$03/9C11 86 A9 STX $A9    [$00:00A9] A:0000 X:0000 Y:0019 P:envMxdiZC - Store X in A9.
$03/9C13 AD A0 28 LDA $28A0  [$7E:28A0] A:0000 X:0000 Y:0019 P:envMxdiZC - Load A from 7E28A0.
$03/9C16 30 05 BMI $05    [$9C1D] A:0000 X:0000 Y:0019 P:envMxdiZC - If negative branch to 039C1B.
$03/9C18 AD A1 28 LDA $28A1  [$7E:28A1] A:0000 X:0000 Y:0019 P:envMxdiZC - Load A from Character's Weapon Creature Strength.
$03/9C1B 85 A9 STA $A9    [$00:00A9] A:0000 X:0000 Y:0019 P:envMxdiZC - Store A in A9.
$03/9C1D AD AB 28 LDA $28AB  [$7E:28AB] A:0000 X:0000 Y:0019 P:envMxdiZC - Load A from 7E28AB.
$03/9C20 30 05 BMI $05    [$9C27] A:0000 X:0000 Y:0019 P:envMxdiZC - Branch if negative to 039C27.
$03/9C22 AD AC 28 LDA $28AC  [$7E:28AC] A:0000 X:0000 Y:0019 P:envMxdiZC - Load A from Weapon's Creature Strength.
$03/9C25 85 AA STA $AA    [$00:00AA] A:0000 X:0000 Y:0019 P:envMxdiZC - Store A in AA.
$03/9C27 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0000 Y:0019 P:envMxdiZC - Load A from A9.
$03/9C29 05 AA ORA $AA    [$00:00AA] A:0000 X:0000 Y:0019 P:envMxdiZC - Add applicable bits from AA as well.
$03/9C2B A0 1A 00 LDY #$001A A:0000 X:0000 Y:0019 P:envMxdiZC - Load Character's Creature Type Weaknesses into A..
$03/9C2E 91 80 STA ($80),y[$7E:201A] A:0000 X:0000 Y:001A P:envMxdizC - Store A in Character's Creature Type Weaknesses.
$03/9C30 AD 66 39 LDA $3966  [$7E:3966] A:0000 X:0000 Y:001A P:envMxdizC - Load Character's Strength (from a copy) into A.
$03/9C33 20 85 84 JSR $8485  [$03:8485] A:000D X:0000 Y:001A P:envMxdizC - Jump to Subroutine (Value /8 = A)
$03/9C38 AD 67 39 LDA $3967  [$7E:3967] A:0001 X:0000 Y:001A P:envMxdizC - Load A from Character's Agility  into A.
$03/9C3B 20 84 84 JSR $8484  [$03:8484] A:000D X:0000 Y:001A P:envMxdizC - Jump to Subroutine (Value /16 = A)
$03/9C3E 18 CLC A:0000 X:0000 Y:001A P:envMxdiZC - Clear Carry Flag.
$03/9C3F 65 A9 ADC $A9    [$00:00A9] A:0000 X:0000 Y:001A P:envMxdiZc - Add the value in A9 (Str/8) into A
$03/9C41 1A INC A A:0001 X:0000 Y:001A P:envMxdizc - +1 to A.
$03/9C42 A0 1B 00 LDY #$001B A:0002 X:0000 Y:001A P:envMxdizc - Load Character's Attack Multiplier.
$03/9C45 91 80 STA ($80),y[$7E:201B] A:0002 X:0000 Y:001B P:envMxdizc - Store A in Character's Attack Multiplier.
$03/9C47 AD 65 39 LDA $3965  [$7E:3965] A:0002 X:0000 Y:001B P:envMxdizc - Load Character's Level into A.
$03/9C4A 20 86 84 JSR $8486  [$03:8486] A:000A X:0000 Y:001B P:envMxdizc - Jump to Subroutine (Value/4 = A)
$03/9C4D 85 A9 STA $A9    [$00:00A9] A:0002 X:0000 Y:001B P:envMxdizC - Store A in A9.
$03/9C4F AD 77 39 LDA $3977  [$7E:3977] A:0002 X:0000 Y:001B P:envMxdizC - Load A from "Weapon Equipped - Is it Yang?" from much earlier.
$03/9C52 29 C0 AND #$C0 A:0001 X:0000 Y:001B P:envMxdizC - Get rid of inapplicable bytes.
$03/9C54 F0 21 BEQ $21    [$9C77] A:0000 X:0000 Y:001B P:envMxdiZC - If 00 branch to 039C77
---------------------------------------------------------------------------------------------------------
$03/9C56 49 C0 EOR #$C0 A:0080 X:0000 Y:001B P:eNvMxdizC - -40 to A.
$03/9C58 D0 26 BNE $26    [$9C80] A:0040 X:0000 Y:001B P:envMxdizC - If not 00 branch to 039C80.
--------------------------------------------------------------------------------------------------------------
(Unique to Dual-Wielding? - Not Yang?)
$03/9C5A 18 CLC A:0000 X:0000 Y:001B P:envMxdiZc - Clear Carry Flag.
$03/9C5B AD 9E 28 LDA $289E  [$7E:289E] A:0000 X:0000 Y:001B P:envMxdiZc - Load A from Weapon Hit%
$03/9C5E 29 7F AND #$7F A:005A X:0000 Y:001B P:envMxdizc - Get rid of negative bits.
$03/9C60 65 A9 ADC $A9    [$00:00A9] A:005A X:0000 Y:001B P:envMxdizc - Add the value of Level/4 into A.
$03/9C62 85 AA STA $AA    [$00:00AA] A:0060 X:0000 Y:001B P:envMxdizc - Store A in AA.
$03/9C64 18 CLC A:0060 X:0000 Y:001B P:envMxdizc - Clear Carry Flag.
$03/9C65 AD A9 28 LDA $28A9  [$7E:28A9] A:0060 X:0000 Y:001B P:envMxdizc - Load A from Second Weapon Hit %.
$03/9C68 29 7F AND #$7F A:005A X:0000 Y:001B P:envMxdizc - Get rid of negative bits.
$03/9C6A 65 A9 ADC $A9    [$00:00A9] A:005A X:0000 Y:001B P:envMxdizc - Add this value onto A9.
$03/9C6C 65 AA ADC $AA    [$00:00AA] A:0060 X:0000 Y:001B P:envMxdizc - Add AA onto that value.
$03/9C6E 4A LSR A A:00C0 X:0000 Y:001B P:eNVMxdizc - / A by 2.
$03/9C6F C9 63 CMP #$63 A:0060 X:0000 Y:001B P:enVMxdizc - Is it over 99?
$03/9C71 90 18 BCC $18    [$9C8B] A:0060 X:0000 Y:001B P:eNVMxdizc - If not branch to 039C8B
-----------------------------------------------------------------------------------------------------------------

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

---------------------------------------------------------------------------------------------------------------
$03/9C77 18 CLC A:0000 X:0000 Y:001B P:envMxdiZC - Clear Carry Flag.
$03/9C78 AF 02 91 0F LDA $0F9102[$0F:9102] A:0000 X:0000 Y:001B P:envMxdiZc - Load A from 0F9102. (Default Accuracy of Nothing)
$03/9C7C 65 A9 ADC $A9    [$00:00A9] A:0032 X:0000 Y:001B P:envMxdizc - Add Level /4 onto the accuracy.
$03/9C7E 80 08 BRA $08    [$9C88] A:0034 X:0000 Y:001B P:envMxdizc - Branch to 039C88
--------------------------------------------------------------------------------------------------------------------
$03/9C80 18 CLC A:0040 X:0000 Y:001B P:envMxdizC - Clear Carry Flag.
$03/9C81 AD 9E 28 LDA $289E  [$7E:289E] A:0040 X:0000 Y:001B P:envMxdizc - Load A from Weapon Accuracy.
$03/9C84 29 7F AND #$7F A:005A X:0000 Y:001B P:envMxdizc - Get rid of negative bits?
$03/9C86 65 A9 ADC $A9    [$00:00A9] A:005A X:0000 Y:001B P:envMxdizc - Add the value in A9 into it (Level /4)
------------------------------------------------------------------------------------------------------------------------
$03/9C88 20 2A 9E JSR $9E2A  [$03:9E2A] A:0034 X:0000 Y:001B P:envMxdizc - Jump to Subroutine
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/9E2A C9 63 CMP #$63 A:0034 X:0000 Y:001B P:envMxdizc - Is the accuracy 99?
$03/9E2C 90 02 BCC $02    [$9E30] A:0034 X:0000 Y:001B P:eNvMxdizc - If 99 or below branch to 039E30
-----------------------------------------------------------------------------------------------------
(This likely mitigates the accuracy back down to 99)
-------------------------------------------------------------------------------------------------
$03/9E30 60 RTS A:0034 X:0000 Y:001B P:eNvMxdizc - Return
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/9C8B A0 1C 00 LDY #$001C A:0034 X:0000 Y:001B P:eNvMxdizc - Load Character's Physical Accuracy.
$03/9C8E 91 80 STA ($80),y[$7E:201C] A:0034 X:0000 Y:001C P:envMxdizc - Store Accuracy+Level/4 into Character's Physical Accuracy.
$03/9C90 AD 66 39 LDA $3966  [$7E:3966] A:0034 X:0000 Y:001C P:envMxdizc - Load A from Character's Strength.
$03/9C93 20 86 84 JSR $8486  [$03:8486] A:000D X:0000 Y:001C P:envMxdizc - Jump to Subroutine (Value/4 = A)
$03/9C96 85 AA STA $AA    [$00:00AA] A:0003 X:0000 Y:001C P:envMxdizc - Store Str/4 into AA.
$03/9C98 AD 77 39 LDA $3977  [$7E:3977] A:0003 X:0000 Y:001C P:envMxdizc - Load "Weapon Equipped - Is it Yang?" into A.
$03/9C9B 29 01 AND #$01 A:0001 X:0000 Y:001C P:envMxdizc - Is it 01?
$03/9C9D F0 0B BEQ $0B    [$9CAA] A:0001 X:0000 Y:001C P:envMxdizc - If not branch to 039DAA.
$03/9C9F AD 65 39 LDA $3965  [$7E:3965] A:0001 X:0000 Y:001C P:envMxdizc - Load Character's Level.
$03/9CA2 0A ASL A A:000A X:0000 Y:001C P:envMxdizc - Level x2.
$03/9CA3 18 CLC A:0014 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CA4 65 AA ADC $AA    [$00:00AA] A:0014 X:0000 Y:001C P:envMxdizc - Add Levelx2 + Str/4 into A.
$03/9CA6 69 02 ADC #$02 A:0017 X:0000 Y:001C P:envMxdizc - Add 02 onto the value.
$03/9CA8 80 66 BRA $66    [$9D10] A:0019 X:0000 Y:001C P:envMxdizc  - Branch to 03D910
-----------------------------------------------------------------------------------
$03/9CAA AD 77 39 LDA $3977  [$7E:3977] A:0000 X:0000 Y:001C P:envMxdiZc - Load A from "Is it Yang?" Byte.
$03/9CAD 29 C0 AND #$C0 A:0080 X:0000 Y:001C P:eNvMxdizc - Is it C0?
$03/9CAF F0 57 BEQ $57    [$9D08] A:0080 X:0000 Y:001C P:eNvMxdizc - If it is, branch to 039D08.
$03/9CB1 49 C0 EOR #$C0 A:0080 X:0000 Y:001C P:eNvMxdizc - Get rid of inapplicable bits.
$03/9CB3 D0 17 BNE $17    [$9CCC] A:0040 X:0000 Y:001C P:envMxdizc - If not 00 branch to 039CCC
--------------------------------------------------------------------------------------
(Unique to Dual-Wielding?)
03/9CB5 18 CLC A:0000 X:0000 Y:001C P:enVMxdiZC - Clear Carry Flag.
$03/9CB6 AD 9D 28 LDA $289D  [$7E:289D] A:0000 X:0000 Y:001C P:enVMxdiZc - Load 1st Weapon Attack Power into A.
$03/9CB9 65 A9 ADC $A9    [$00:00A9] A:0019 X:0000 Y:001C P:enVMxdizc - Add Level /4 onto A.
$03/9CBB 65 AA ADC $AA    [$00:00AA] A:001F X:0000 Y:001C P:envMxdizc - Add Str/4 onto A.
$03/9CBD 85 AB STA $AB    [$00:00AB] A:0026 X:0000 Y:001C P:envMxdizc - Store Weapon +Str/4 +Lvl/4 into AB.
$03/9CBF 18 CLC A:0026 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CC0 AD A8 28 LDA $28A8  [$7E:28A8] A:0026 X:0000 Y:001C P:envMxdizc - Load 2nd Weapon Attack Power into A.
$03/9CC3 65 A9 ADC $A9    [$00:00A9] A:0019 X:0000 Y:001C P:envMxdizc -Add Level/4 into A.
$03/9CC5 65 AA ADC $AA    [$00:00AA] A:001F X:0000 Y:001C P:envMxdizc - Add Str/4 into A.
$03/9CC7 18 CLC A:0026 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CC8 65 AB ADC $AB    [$00:00AB] A:0026 X:0000 Y:001C P:envMxdizc - Add 1st Weapon Power + Str/4 + Level/4 onto A.
$03/9CCA 80 44 BRA $44    [$9D10] A:004C X:0000 Y:001C P:envMxdizc - Branch to 039D10.
-------------------------------------------------------------------------------------------
$03/9CCC AD 77 39 LDA $3977  [$7E:3977] A:0040 X:0000 Y:001C P:envMxdizc - Load A from "Is it Yang?" Byte.
$03/9CCF 29 20 AND #$20 A:0080 X:0000 Y:001C P:eNvMxdizc - Get rid of inapplicable bits.
$03/9CD1 F0 35 BEQ $35    [$9D08] A:0000 X:0000 Y:001C P:envMxdiZc - Branch if 00 to 039D08
------------------------------------------------------------------------------------------------
(Only carried through by Bow+Arrow?)
$03/9CD3 AD 9D 28 LDA $289D  [$7E:289D] A:0020 X:0000 Y:001C P:envMxdizc - Load Bow's Attack Power into A.
$03/9CD6 4A LSR A A:000A X:0000 Y:001C P:envMxdizc - /2.
$03/9CD7 18 CLC A:0005 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CD8 6D A8 28 ADC $28A8  [$7E:28A8] A:0005 X:0000 Y:001C P:envMxdizc - Add the Value of the  Arrow into A.
$03/9CDB 65 AA ADC $AA    [$00:00AA] A:000A X:0000 Y:001C P:envMxdizc - Add the value from Str/4 onto A.
$03/9CDD 85 BF STA $BF    [$00:00BF] A:000C X:0000 Y:001C P:envMxdizc - Store A in BF.
$03/9CDF A0 00 00 LDY #$0000 A:000C X:0000 Y:001C P:envMxdizc - Load 00 into Y.
$03/9CE2 B1 80 LDA ($80),y[$7E:2080] A:000C X:0000 Y:0000 P:envMxdiZc - Load Character ID.
$03/9CE4 29 C0 AND #$C0 A:0086 X:0000 Y:0000 P:eNvMxdizc - Get rid of inapplicable bits.
$03/9CE6 2D 78 39 AND $3978  [$7E:3978] A:0080 X:0000 Y:0000 P:eNvMxdizc - Get rid of inapplicable bits.
$03/9CE9 F0 19 BEQ $19    [$9D04] A:0000 X:0000 Y:0000 P:envMxdiZc - Branch if 00 to 039D04.
-----------------------------------------------------------------------------------------------------------------------------------------
(Only accessible if the Bow is in the dominant hand and the Arrow is in the recessive hand)

$03/9CEB A5 BF LDA $BF    [$00:00BF] A:0080 X:0000 Y:0000 P:eNvMxdizc - Load A from Culminated Attack Power
$03/9CED AA TAX A:000C X:0000 Y:0000 P:envMxdizc - Transfer A to X.
$03/9CEE 8E 45 39 STX $3945  [$7E:3945] A:000C X:000C Y:0000 P:envMxdizc - Store X in 7E3945.
$03/9CF1 A2 05 00 LDX #$0005 A:000C X:000C Y:0000 P:envMxdizc - Load 0005 into X.
$03/9CF4 8E 47 39 STX $3947  [$7E:3947] A:000C X:0005 Y:0000 P:envMxdizc - Store X in 7E3947.
$03/9CF7 20 07 84 JSR $8407  [$03:8407] A:000C X:0005 Y:0000 P:envMxdizc - Jump to Subroutine (Rolls a 0 value at 3949 16 times before spitting out a 2) - In other word it takes away 1/16th of the final result)
$03/9CFB A5 BF LDA $BF    [$00:00BF] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from Culminated Attack Power.
$03/9CFD ED 49 39 SBC $3949  [$7E:3949] A:000C X:0000 Y:0000 P:envMxdizC - Subtract the value from 7E3949.
$03/9D00 85 BF STA $BF    [$00:00BF] A:000A X:0000 Y:0000 P:envMxdizC - Store A in Culminated Attack Power
$03/9D02 80 0F BRA $0F    [$9D13] A:000A X:0000 Y:0000 P:envMxdizC - Branch to 039D13.
----------------------------------------------------------------------------------------------------------------------------------
(Only Accessible from Bows)
$03/9D04 A5 BF LDA $BF    [$00:00BF] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from Bow Attack /2, +Arrow Attack + Str/4.
$03/9D06 80 0B BRA $0B    [$9D13] A:000C X:0000 Y:0000 P:envMxdizc - Branch to 039D13
-------------------------------------------------------------------------------------------------
$03/9D08 18 CLC A:0000 X:0000 Y:001C P:envMxdiZc - Clear Carry Flag.
$03/9D09 AD 9D 28 LDA $289D  [$7E:289D] A:0000 X:0000 Y:001C P:envMxdiZc - Load Weapon's Physical Attack.
$03/9D0C 65 A9 ADC $A9    [$00:00A9] A:001E X:0000 Y:001C P:envMxdizc - Add the value from A9 into it (Level/4)
$03/9D0E 65 AA ADC $AA    [$00:00AA] A:0020 X:0000 Y:001C P:envMxdizc - Add the value from AA into it. (Str/4)
$03/9D10 20 31 9E JSR $9E31  [$03:9E31] A:0023 X:0000 Y:001C P:envMxdizc - Jump to Subroutine (Checking to see if it is above 00)
 (Continued in the second section of code, below)
-----------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------
$03/9E31 90 02 BCC $02    [$9E35] A:0019 X:0000 Y:001C P:envMxdizc - If more than 00 branch to 039E35.
$03/9E35 60 RTS A:0019 X:0000 Y:001C P:envMxdizc - Return

Well, well! Looks like DeathLike2's Formula for Yang's Attack was almost 100% on the mark! The only miscalculation was Level x2 +2 rather than +1, but its so miniscule anyhow. This is where I would normally stop and look at the collected results above, but unlike a normal routine, this just ends abruptly so I have to follow it back from the RTS. Maybe this will, in the end, reveal the location of all Attack Formula.


Code: [Select]
$03/9D13 A0 1D 00 LDY #$001D A:0019 X:0000 Y:001C P:envMxdizc - Load Slot's Attack Base into A.
$03/9D16 91 80 STA ($80),y[$7E:201D] A:0019 X:0000 Y:001D P:envMxdizc - Store Levelx2 +2 + Str/4 into Physical Attack Base.
$03/9D18 AD A5 28 LDA $28A5  [$7E:28A5] A:0019 X:0000 Y:001D P:envMxdizc - Load Slot's Attack Status from Weapon into A.
$03/9D1B 0D B0 28 ORA $28B0  [$7E:28B0] A:0000 X:0000 Y:001D P:envMxdiZc - Add the value from the other weapon onto that if applicable.
$03/9D1E A0 1E 00 LDY #$001E A:0000 X:0000 Y:001D P:envMxdiZc - Load Slot's Attack Status into A.
$03/9D21 91 80 STA ($80),y[$7E:201E] A:0000 X:0000 Y:001E P:envMxdizc - Store A in Attack Status 1.
$03/9D23 AD A6 28 LDA $28A6  [$7E:28A6] A:0000 X:0000 Y:001E P:envMxdizc - Load Slot's Attack Status 2 from Weapon into A.
$03/9D26 0D B1 28 ORA $28B1  [$7E:28B1] A:0000 X:0000 Y:001E P:envMxdiZc - Add the value from the other weapon onto that if applicable.
$03/9D29 C8 INY A:0000 X:0000 Y:001E P:envMxdiZc - +1 to Y (making it read the very next byte)
$03/9D2A 91 80 STA ($80),y[$7E:201F] A:0000 X:0000 Y:001F P:envMxdizc - Store A in Attack Status 2.
$03/9D2F B1 80 LDA ($80),y[$7E:2041] A:0000 X:0000 Y:0041 P:envMxdizc - Load A from Slot's Unknown.
$03/9D31 85 A9 STA $A9    [$00:00A9] A:0000 X:0000 Y:0041 P:envMxdiZc - Store A in A9
$03/9D33 C8 INY A:0000 X:0000 Y:0041 P:envMxdiZc - +1 to Y.
$03/9D34 B1 80 LDA ($80),y[$7E:2042] A:0000 X:0000 Y:0042 P:envMxdizc - Load A from Slot's Unknown2.
$03/9D36 85 AA STA $AA    [$00:00AA] A:0000 X:0000 Y:0042 P:envMxdiZc - Store A in AA.
$03/9D38 AD 77 39 LDA $3977  [$7E:3977] A:0000 X:0000 Y:0042 P:envMxdiZc - Load A from "No Weapon, is it Yang?" Byte.
$03/9D3B 29 C0 AND #$C0 A:0001 X:0000 Y:0042 P:envMxdizc - Get rid of inapplicable bits.
$03/9D3D F0 51 BEQ $51    [$9D90] A:0000 X:0000 Y:0042 P:envMxdiZc - Branch if 00 to 039D90.
-----------------------------------------------------------------------------------------
$03/9D3F 49 C0 EOR #$C0 A:0080 X:0000 Y:0042 P:eNvMxdizc - Get rid of inapplicable bits.
$03/9D41 F0 4D BEQ $4D    [$9D90] A:0040 X:0000 Y:0042 P:envMxdizc - If 00 branch to 039D90
$03/9D43 AD 77 39 LDA $3977  [$7E:3977] A:0040 X:0000 Y:0042 P:envMxdizc - Load A from "Is it Yang?" byte.
$03/9D46 29 20 AND #$20 A:0080 X:0000 Y:0042 P:eNvMxdizc - Get rid of inapplicable bits.
$03/9D48 F0 22 BEQ $22    [$9D6C] A:0000 X:0000 Y:0042 P:envMxdiZc - If 00 branch to 039D6C
--------------------------------------------------------------------------------------------------------------------------
(Unique to Bow/Arrows?)
$03/9D4A A5 A9 LDA $A9    [$00:00A9] A:0020 X:0000 Y:0042 P:envMxdizc - Load A from Level/4.
$03/9D4C C9 21 CMP #$21 A:0002 X:0000 Y:0042 P:envMxdizc - Is it the same value that is in 21?
$03/9D4E 90 02 BCC $02    [$9D52] A:0002 X:0000 Y:0042 P:eNvMxdizc  - If greater than or equal branch to 039D52.
------------------------------------------------------------------------------------------------------------------------

-------------------------------------------------------------------------------------------------------------------------------
$03/9D52 85 DF STA $DF    [$00:00DF] A:0002 X:0000 Y:0042 P:eNvMxdizc - Store Level /4 into DF.
$03/9D54 A9 03 LDA #$03 A:0002 X:0000 Y:0042 P:eNvMxdizc - Load 03 into A.
$03/9D56 85 E1 STA $E1    [$00:00E1] A:0003 X:0000 Y:0042 P:envMxdizc - Store A in E1.
$03/9D58 20 E0 83 JSR $83E0  [$03:83E0] A:0003 X:0000 Y:0042 P:envMxdizc - Jump to Subroutine (??)
$03/9D5D 85 A9 STA $A9    [$00:00A9] A:0006 X:0000 Y:0042 P:envMxdizc - Store A in A9.
$03/9D5F 18 CLC A:0006 X:0000 Y:0042 P:envMxdizc - Clear Carry Flag.
$03/9D60 A5 AA LDA $AA    [$00:00AA] A:0006 X:0000 Y:0042 P:envMxdizc - Load A from AA.
$03/9D62 6D A8 28 ADC $28A8  [$7E:28A8] A:003C X:0000 Y:0042 P:envMxdizc - Add Arrow's Attack Power onto A.
$03/9D65 20 31 9E JSR $9E31  [$03:9E31] A:0041 X:0000 Y:0042 P:envMxdizc - Jump to Subroutine.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/9E31 90 02 BCC $02    [$9E35] A:0041 X:0000 Y:0042 P:envMxdizc - Is it less than 00 or 00 if so branch to 039E35.
$03/9E35 60 RTS A:0041 X:0000 Y:0042 P:envMxdizc - Return.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
$03/9D68 85 AA STA $AA    [$00:00AA] A:0041 X:0000 Y:0042 P:envMxdizc - Store A in AA.
$03/9D6A 80 18 BRA $18    [$9D84] A:0041 X:0000 Y:0042 P:envMxdizc - Branch to 039D84.
------------------------------------------------------------------------------------------------------------------------------
$03/9D6C 06 A9 ASL $A9    [$00:00A9] A:0000 X:0000 Y:0042 P:envMxdiZc - x2 the Slot Unknown.
$03/9D6E 90 04 BCC $04    [$9D74] A:0000 X:0000 Y:0042 P:envMxdizc - Branch if 00 or less to 039D74
----------------------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------------------
$03/9D74 A5 A9 LDA $A9    [$00:00A9] A:0000 X:0000 Y:0042 P:envMxdizc - Load A from Unknown x2
$03/9D76 85 A9 STA $A9    [$00:00A9] A:0004 X:0000 Y:0042 P:envMxdizc - Store A in A9.
$03/9D78 AD 9D 28 LDA $289D  [$7E:289D] A:0004 X:0000 Y:0042 P:envMxdizc - Load Weapon's Attack.
$03/9D7B 4A LSR A A:001E X:0000 Y:0042 P:envMxdizc - /2.
$03/9D7C 18 CLC A:000F X:0000 Y:0042 P:envMxdizc - Clear Carry Flag.
$03/9D7D 65 AA ADC $AA    [$00:00AA] A:000F X:0000 Y:0042 P:envMxdizc - Add A from Slot's Unknown2.
$03/9D7F 20 31 9E JSR $9E31  [$03:9E31] A:0023 X:0000 Y:0042 P:envMxdizc - If over 99, make 99 routine.
$03/9D82 85 AA STA $AA    [$00:00AA] A:0023 X:0000 Y:0042 P:envMxdizc - Store A in AA.
$03/9D84 A0 2D 00 LDY #$002D A:0023 X:0000 Y:0042 P:envMxdizc - Load  2D into Y.
$03/9D87 A5 A9 LDA $A9    [$00:00A9] A:0023 X:0000 Y:002D P:envMxdizc - Load A from Level/4. (Or in Arrow/Bow's Case Load A from ???)
$03/9D89 91 80 STA ($80),y[$7E:202D] A:0004 X:0000 Y:002D P:envMxdizc - Store A in Critical Hit%.
$03/9D8C A5 AA LDA $AA    [$00:00AA] A:0004 X:0000 Y:002E P:envMxdizc - Load A from Str/4. (In Bow/Arrow's Case Load A from ?Levelx6?)
$03/9D8E 91 80 STA ($80),y[$7E:202E] A:0023 X:0000 Y:002E P:envMxdizc - Store A in Critical Hit Bonus.
--------------------------------------------------------------------------------------------------------------------------------------------------
$03/9D90 AD 77 39 LDA $3977  [$7E:3977] A:0023 X:0000 Y:002E P:envMxdizc - Load "Is it Yang?" byte.
$03/9D93 29 20 AND #$20 A:0080 X:0000 Y:002E P:eNvMxdizc - Get rid of bits.
$03/9D95 D0 07 BNE $07    [$9D9E] A:0000 X:0000 Y:002E P:envMxdiZc - If not 00 branch to 039D9E.
$03/9D97 AD 9C 28 LDA $289C  [$7E:289C] A:0000 X:0000 Y:002E P:envMxdiZc - Load A from Weapon Properties.
$03/9D9A 29 20 AND #$20 A:0001 X:0000 Y:002E P:envMxdizc - Get rid of bits.
$03/9D9C F0 09 BEQ $09    [$9DA7] A:0000 X:0000 Y:002E P:envMxdiZc - If 00 branch to 039DA7
-------------------------------------------------------------------------------------------
(Only for Bow/Arrow?)
$03/9DA1 B1 80 LDA ($80),y[$7E:2081] A:0020 X:0000 Y:0001 P:envMxdizc - Load Character Class/Row/Long Range.
$03/9DA3 09 20 ORA #$20 A:0025 X:0000 Y:0001 P:envMxdizc - Add Long Range Bit.
$03/9DA5 91 80 STA ($80),y[$7E:2081] A:0025 X:0000 Y:0001 P:envMxdizc - Store A in Character Class/Row/Long Range.
----------------------------------------------------------------------------------------------------------------------

$03/9DA7 60 RTS A:0000 X:0000 Y:0042 P:envMxdiZc - Return
----------------------------------------------------------------------------------------------

And there we go! I have to head out for a short while, but this should be good enough to post. It is clear now that the other attack formula are probably very nearby. Likely in between the bytes that read specifically Yang in the first bit of code above. Because clearly this second portion of code is used by every attack formula I would imagine.


And it seems I was right. The normal attack building formula is within. Though there is a lot of reference to this 3977 byte that I've erroneously called "Is it Yang?" since it seems to be used for a lot of other dealings as well.

And it would seem I was wrong all around for Critical Hits and Critical Hit Bonuses. They aren't unique to each character but it seemed that way to me because I did not think Level or Strength would play into it at all.

This did reveal two more things as well...

Bytes 41 and 42 of Character's data is Level /4 and Levelx2. When not cheating, it appears. Hence why just changing the levell doesn't actually appear to do much of anything on its own.

 :edit: And the Bow and Arrow section has been added! That only leaves dual weapons, I would think.

As to how to figure out Bow/Arrow Formula... well let's see...

Code: [Select]
$03/9CD3 AD 9D 28 LDA $289D  [$7E:289D] A:0020 X:0000 Y:001C P:envMxdizc - Load Left-Handed Weapon's Power.
$03/9CD6 4A LSR A A:000A X:0000 Y:001C P:envMxdizc - /2.
$03/9CD7 18 CLC A:0005 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CD8 6D A8 28 ADC $28A8  [$7E:28A8] A:0005 X:0000 Y:001C P:envMxdizc - Add the Value of the Right Handed Weapon onto A.
$03/9CDB 65 AA ADC $AA    [$00:00AA] A:000A X:0000 Y:001C P:envMxdizc - Add the value from Level/4 onto A.
$03/9CDD 85 BF STA $BF    [$00:00BF] A:000C X:0000 Y:001C P:envMxdizc - Store A in BF.
$03/9CDF A0 00 00 LDY #$0000 A:000C X:0000 Y:001C P:envMxdizc - Load 00 into Y.
$03/9CE2 B1 80 LDA ($80),y[$7E:2080] A:000C X:0000 Y:0000 P:envMxdiZc - Load Character ID.
$03/9CE4 29 C0 AND #$C0 A:0086 X:0000 Y:0000 P:eNvMxdizc - Get rid of inapplicable bits.
$03/9CE6 2D 78 39 AND $3978  [$7E:3978] A:0080 X:0000 Y:0000 P:eNvMxdizc - Get rid of inapplicable bits.
$03/9CE9 F0 19 BEQ $19    [$9D04] A:0000 X:0000 Y:0000 P:envMxdiZc - Branch if 00 to 039D04.
-----------------------------------------------------------------------------------------------------------------------------------------------------
(Only accessible if the Bow is in the dominant hand and the Arrow is in the recessive hand)

$03/9CEB A5 BF LDA $BF    [$00:00BF] A:0080 X:0000 Y:0000 P:eNvMxdizc - Load A from Culminated Attack Power
$03/9CED AA TAX A:000C X:0000 Y:0000 P:envMxdizc - Transfer A to X.
$03/9CEE 8E 45 39 STX $3945  [$7E:3945] A:000C X:000C Y:0000 P:envMxdizc - Store X in 7E3945.
$03/9CF1 A2 05 00 LDX #$0005 A:000C X:000C Y:0000 P:envMxdizc - Load 0005 into X.
$03/9CF4 8E 47 39 STX $3947  [$7E:3947] A:000C X:0005 Y:0000 P:envMxdizc - Store X in 7E3947.
$03/9CF7 20 07 84 JSR $8407  [$03:8407] A:000C X:0005 Y:0000 P:envMxdizc - Jump to Subroutine (Rolls a 0 value at 3949 16 times before spitting out a 1/5 value)
$03/9CFB A5 BF LDA $BF    [$00:00BF] A:0000 X:0000 Y:0000 P:envMxdiZC - Load A from Culminated Attack Power.
$03/9CFD ED 49 39 SBC $3949  [$7E:3949] A:000C X:0000 Y:0000 P:envMxdizC - Subtract the value from 7E3949.
$03/9D00 85 BF STA $BF    [$00:00BF] A:000A X:0000 Y:0000 P:envMxdizC - Store A in Culminated Attack Power
$03/9D02 80 0F BRA $0F    [$9D13] A:000A X:0000 Y:0000 P:envMxdizC - Branch to 039D13.

-----------------------------------------------------------------------------------------------------------------------------------------
$03/9D04 A5 BF LDA $BF    [$00:00BF] A:0000 X:0000 Y:0000 P:envMxdiZc - Load A from Bow Attack /2, +Arrow Attack + Str/4.
$03/9D06 80 0B BRA $0B    [$9D13] A:000C X:0000 Y:0000 P:envMxdizc - Branch to 039D13

Deathlike 2's formula says...
Bow and Arrow (with Bow in recessive hand):
Base Attack Power = Bow's Attack Power/2 + Arrow's Attack Power + Str/4

This is entirely accurate as the data above would attest.

It appears to be Bow Attack /2 + Arrow Attack, + Str/4 = Attack Power. Testing with default Rosa shows the power of the bow is turned to 05, then the Arrow's attack is added and the Strength bonus is included.

Now for...

If the bow is in the character's primary hand...

Base Attack Power = Base Attack Power (Bow and Arrow) * 4/5

That too is 100% accurate. The game takes it through a routine which chops the main power of the attack by 1/5 in total.

 :edit: And Dual Wielding is finished which means this Formula Building should be done all in all.

Code: [Select]
03/9CB5 18 CLC A:0000 X:0000 Y:001C P:enVMxdiZC - Clear Carry Flag.
$03/9CB6 AD 9D 28 LDA $289D  [$7E:289D] A:0000 X:0000 Y:001C P:enVMxdiZc - Load 1st Weapon Attack Power into A.
$03/9CB9 65 A9 ADC $A9    [$00:00A9] A:0019 X:0000 Y:001C P:enVMxdizc - Add Level /4 onto A.
$03/9CBB 65 AA ADC $AA    [$00:00AA] A:001F X:0000 Y:001C P:envMxdizc - Add Str/4 onto A.
$03/9CBD 85 AB STA $AB    [$00:00AB] A:0026 X:0000 Y:001C P:envMxdizc - Store Weapon +Str/4 +Lvl/4 into AB.
$03/9CBF 18 CLC A:0026 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CC0 AD A8 28 LDA $28A8  [$7E:28A8] A:0026 X:0000 Y:001C P:envMxdizc - Load 2nd Weapon Attack Power into A.
$03/9CC3 65 A9 ADC $A9    [$00:00A9] A:0019 X:0000 Y:001C P:envMxdizc -Add Level/4 into A.
$03/9CC5 65 AA ADC $AA    [$00:00AA] A:001F X:0000 Y:001C P:envMxdizc - Add Str/4 into A.
$03/9CC7 18 CLC A:0026 X:0000 Y:001C P:envMxdizc - Clear Carry Flag.
$03/9CC8 65 AB ADC $AB    [$00:00AB] A:0026 X:0000 Y:001C P:envMxdizc - Add 1st Weapon Power + Str/4 + Level/4 onto A.
$03/9CCA 80 44 BRA $44    [$9D10] A:004C X:0000 Y:001C P:envMxdizc - Branch to 039D10.

The Algorithm FAQ says...


Edge (when he has both hands in use):

Base Attack Power = Weapon on Left Hand's Attack Power +
                    Weapon on Right Hand's Attack Power +
                    (Str/4 + Level/4)*2

And it was right on the dot. Weapon Attack Power + Str/4 + Level/4 * 2 is indeed the formula that is put together for this.
« Last Edit: October 22, 2013, 07:14:26 PM by Grimoire LD »

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #141 on: October 22, 2013, 07:17:47 PM »
The post above now contains the Attack Building Formulas for...

Normal Weapons, Yang, Bow/Arrows (Arrows/Bow as well), and Dual-Wielding, this is of most value in the special cases as the normal weapon routine only goes through the necessities that these others mostly go through as well.  However changing the special cases is likely difficult since they only reinforce values from the normal routines for the most part.

Deathlike2

  • Moderator
  • *
  • Posts: 3,538
  • I'm looking at you, bitch!
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #142 on: October 23, 2013, 12:45:26 AM »
Maybe I'll get around to updating my guide, but that seems like forever and maybe some event would get me going on that.

I got the Yang algo and Edge algo from the original BSiron FAQ.

With respect to the Bow+Arrow algo, I had an actual epiphany one day. It never made sense as to how it was calculated until I went trying out different Bows and doing the math. FF4A revealed quite a bit of the critical hit details.
Working on the next Yet To Be Named FF4 "Hardtype" Hack Download Latest: v1.48

Video Demos: #1 #2 #3

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #143 on: October 30, 2013, 02:01:11 PM »
Hmm... Well let's take a closer look at that Level Up Data (After 70) shall we?

Random Level Up Selection.

Code: [Select]
$03/EF20 C9 46 CMP #$46 A:0046 X:0000 Y:0004 P:envMxdizc - Is the Level 70?
$03/EF22 90 02 BCC $02    [$EF26] A:0046 X:0000 Y:0004 P:envMxdiZC - If less, branch to 03EF26
----------------------------------------------------------------------------------------------------------------------------------------
$03/EF24 A9 45 LDA #$45 A:0046 X:0000 Y:0004 P:envMxdiZC - Load 69 into A.
---------------------------------------------------------------------------------------------------------------------------------------------
$03/EF26 3A DEC A A:0045 X:0000 Y:0004 P:envMxdizC - -1 to A.
$03/EF27 85 DF STA $DF    [$00:00DF] A:0044 X:0000 Y:0004 P:envMxdizC - Store A in DF.
$03/EF29 A9 05 LDA #$05 A:0044 X:0000 Y:0004 P:envMxdizC - Load 05 into A.
$03/EF2B 85 E1 STA $E1    [$00:00E1] A:0005 X:0000 Y:0004 P:envMxdizC - Store A in E1.
$03/EF2D 20 E0 83 JSR $83E0  [$03:83E0] A:0005 X:0000 Y:0004 P:envMxdizC - Jump to Subroutine (??)
$03/EF30 A4 E3 LDY $E3    [$00:00E3] A:0000 X:0000 Y:0004 P:envMxdiZc - Load Y from E3.
$03/EF32 7B TDC A:0000 X:0000 Y:0154 P:envMxdizc - Transfer Direct Page.
$03/EF33 AA TAX A:0000 X:0000 Y:0154 P:envMxdiZc - Transfer A to X.
---------------------------------------------------------(Looping Point)-------------------------------------------------------------
$03/EF34 B7 80 LDA [$80],y[$0F:B78B] A:0000 X:0000 Y:0154 P:envMxdiZc - Load A from Address in 80+Y (0154)
$03/EF36 9D 9C 28 STA $289C,x[$7E:289C] A:00A9 X:0000 Y:0154 P:eNvMxdizc - Store A in 7E289C.
$03/EF39 C8 INY A:00A9 X:0000 Y:0154 P:eNvMxdizc - +1 to Y.
$03/EF3A E8 INX A:00A9 X:0000 Y:0155 P:envMxdizc - +1 to X
$03/EF3B E0 05 00 CPX #$0005 A:00A9 X:0001 Y:0155 P:envMxdizc - Has it looped five times?
$03/EF3E D0 F4 BNE $F4    [$EF34] A:00A9 X:0001 Y:0155 P:eNvMxdizc - If not loop back to 03EF34
--------------------------------------------------------------------------------------------------------------------------------------------
$03/EF42 BD 02 10 LDA $1002,x[$7E:1002] A:00CB X:0000 Y:0159 P:envMxdiZC - Load Character Level into A.
$03/EF45 C9 46 CMP #$46 A:0046 X:0000 Y:0159 P:envMxdizC - Is it 70?
$03/EF47 90 1C BCC $1C    [$EF65] A:0046 X:0000 Y:0159 P:envMxdiZC - If below 70 branch to 03EF65
----------------------------------------------------------------------------------------------------------------------------------------------
$03/EF4A A2 00 00 LDX #$0000 A:0046 X:0000 Y:0159 P:envMxdiZC - Load 00 into X.
$03/EF4D A9 07 LDA #$07 A:0046 X:0000 Y:0159 P:envMxdiZC - Load 07 into A.
$03/EF4F 20 79 83 JSR $8379  [$03:8379] A:0007 X:0000 Y:0159 P:envMxdizC - Put 00-07 into a Random Number Generator (choosing which of the eight selections to take)
$03/EF52 AA TAX A:0003 X:0000 Y:0059 P:eNvMxdizc - Transfer A to X.
$03/EF53 86 AD STX $AD    [$00:00AD] A:0003 X:0003 Y:0059 P:envMxdizc - Store X in AD.
$03/EF55 7A PLY A:0003 X:0003 Y:0059 P:envMxdizc - Pull Y from Stack.
$03/EF56 C2 20 REP #$20 A:0003 X:0003 Y:0159 P:envMxdizc - Reset Processor Status.
$03/EF58 98 TYA A:0003 X:0003 Y:0159 P:envmxdizc - Transfer Y to A.
$03/EF59 18 CLC A:0159 X:0003 Y:0159 P:envmxdizc - Clear Carry Flag.
$03/EF5A 65 AD ADC $AD    [$00:00AD] A:0159 X:0003 Y:0159 P:envmxdizc - Add the value in AD onto A.
$03/EF5C A8 TAY A:015C X:0003 Y:0159 P:envmxdizc - Transfer A to Y.
$03/EF5D 7B TDC A:015C X:0003 Y:015C P:envmxdizc - Transfer Direct Page.
$03/EF5E E2 20 SEP #$20 A:0000 X:0003 Y:015C P:envmxdiZc - Set Processor STatus.
$03/EF60 B7 80 LDA [$80],y[$0F:B793] A:0000 X:0003 Y:015C P:envMxdiZc - Load A from Address in 80 + y (to reach appropriate section of data)
$03/EF62 8D 9C 28 STA $289C  [$7E:289C] A:00F9 X:0003 Y:015C P:eNvMxdizc - Store A in 7E289C.
$03/EF65 AD 9F 28 LDA $289F  [$7E:289F] A:00F9 X:0003 Y:015C P:eNvMxdizc - Load A from 7E289F.
$03/EF68 85 AD STA $AD    [$00:00AD] A:0062 X:0003 Y:015C P:envMxdizc - Store A in AD.
$03/EF6A AD A0 28 LDA $28A0  [$7E:28A0] A:0062 X:0003 Y:015C P:envMxdizc - Load A from 7E28A0.
$03/EF6D 85 AE STA $AE    [$00:00AE] A:00CB X:0003 Y:015C P:eNvMxdizc - Store A in AE.
$03/EF6F AD 9E 28 LDA $289E  [$7E:289E] A:00CB X:0003 Y:015C P:eNvMxdizc - Load A from 7E289E.
$03/EF72 20 83 84 JSR $8483  [$03:8483] A:00BA X:0003 Y:015C P:eNvMxdizc - Jump to Subroutine (Divide the value in A 5 times.)
$03/EF75 85 AF STA $AF    [$00:00AF] A:0005 X:0003 Y:015C P:envMxdizC - Store A in AF.
$03/EF77 A6 A6 LDX $A6    [$00:00A6] A:0005 X:0003 Y:015C P:envMxdizC - Load X from A6 (I swear the random choice above wasn't even used...)
$03/EF79 18 CLC A:0005 X:0000 Y:015C P:envMxdiZC - Clear Carry Flag.
$03/EF7A BD 3D 10 LDA $103D,x[$7E:103D] A:0005 X:0000 Y:015C P:envMxdiZc - Load Experience Byte 1.
(A lot of basic experience computing here for a while, skipping it...)

Yet even with all of this I can't figure it out properly, hmm...






Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #144 on: December 23, 2013, 05:46:00 PM »
Code: [Select]
It's been a while since I delved into the coding, but I decided to take a look at how Auto-Cover works and I think I found Part of the answer.

$03/AFA8 AD 5E 35 LDA $355E  [$7E:355E] A:0081 X:0000 Y:0000 P:eNvMxdizC - Load Paladin Slot
$03/AFAB C5 CE CMP $CE    [$00:00CE] A:0000 X:0000 Y:0000 P:envMxdiZC - Compare it to Current Slot.
$03/AFAD F0 4C BEQ $4C    [$AFFB] A:0000 X:0000 Y:0000 P:eNvMxdizc - If the two are equal branch to 03AFFB (seems to be if it is "not allowed" to Cover.)
$03/AFAF AD 5E 35 LDA $355E  [$7E:355E] A:0000 X:0000 Y:0000 P:eNvMxdizc - Load Paladin Slot
$03/AFB2 20 89 84 JSR $8489  [$03:8489] A:0000 X:0000 Y:0000 P:envMxdiZc - Jump to Subroutine (unimportant for this)
$03/8489 8D 2F 35 STA $352F  [$7E:352F] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in 7E352F.
$03/848C 85 DF STA $DF    [$00:00DF] A:0000 X:0000 Y:0000 P:envMxdiZc - Store A in DF.
$03/848E A9 80 LDA #$80 A:0000 X:0000 Y:0000 P:envMxdiZc - Load 80 into A.
$03/8490 85 E1 STA $E1    [$00:00E1] A:0080 X:0000 Y:0000 P:eNvMxdizc - Store A in E1.
$03/8492 20 E0 83 JSR $83E0  [$03:83E0] A:0080 X:0000 Y:0000 P:eNvMxdizc - Jump to Subroutine (unimportant for this)
$03/83E0 64 E0 STZ $E0    [$00:00E0] A:0080 X:0000 Y:0000 P:eNvMxdizc - Store Zero in E0.
$03/AFB5 A6 A6 LDX $A6    [$00:00A6] A:0000 X:0000 Y:0000 P:envMxdiZc - Load X from A6 (Character Position)
$03/AFB7 BD 03 20 LDA $2003,x[$7E:2003] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Coverer's Status Byte 1.
$03/AFBA 29 C0 AND #$C0 A:0000 X:0000 Y:0000 P:envMxdiZc - Are they Petrified or Dead?
$03/AFBC D0 38 BNE $38    [$AFF6] A:0000 X:0000 Y:0000 P:envMxdiZc - If so branch to 03AFF6.
$03/AFBE BD 04 20 LDA $2004,x[$7E:2004] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Coverer's Status Byte 2.
$03/AFC1 29 3C AND #$3C A:0000 X:0000 Y:0000 P:envMxdiZc - Are they Berserk, Charm, Sleep, or Paralyzed?
$03/AFC3 D0 31 BNE $31    [$AFF6] A:0000 X:0000 Y:0000 P:envMxdiZc - If so branch to 03AFF6.
$03/AFC5 BD 05 20 LDA $2005,x[$7E:2005] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Coverer's Status Byte 3.
$03/AFC8 29 50 AND #$50 A:0000 X:0000 Y:0000 P:envMxdiZc - Are they ?Defending? or Stopped?
$03/AFCA D0 2A BNE $2A    [$AFF6] A:0000 X:0000 Y:0000 P:envMxdiZc - If so branch to 03AFF6.
$03/AFCC BD 06 20 LDA $2006,x[$7E:2006] A:0000 X:0000 Y:0000 P:envMxdiZc - Load Coverer's Status Byte 4.
$03/AFCF 29 01 AND #$01 A:0000 X:0000 Y:0000 P:envMxdiZc - Are they in Critical?
$03/AFD1 D0 23 BNE $23    [$AFF6] A:0000 X:0000 Y:0000 P:envMxdiZc - If so branch to 03AFF6.

That's the important parts of it, but I might be missing necessary portions that could be used to modify it effectively.

« Last Edit: January 10, 2014, 03:12:00 PM by Grimoire LD »

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #145 on: December 23, 2013, 07:59:26 PM »
Final Fantasy II (The Real Final Fantasy II) was an interesting experiment with some good ideas here and there.

I was looking through their spells and came across a very interesting Black Magic which seems like it would be a neat addition to FFIV.

Aura - Aura is a Black Magic spell that adds elements to physical attacks depending on its level. Any character can learn Aura by the use of Aura Tome (called the Aura Scroll in the Origins release).

Aura adds the following effects per success:

1: Extra damage vs. Magic Beasts
2: Extra damage vs. Aquatic
3: Extra damage vs. Earth
4: Extra damage vs. Giants
5: Extra damage vs. Spellcasters
6: Extra damage vs. Dragon
7: Extra damage vs. Werebeasts

This is a very creative and absolutely fascinating idea! I think it would fit perfectly in FFIV with a bit of a different execution...

Every 10 Wisdom will enable a new addition to the effectiveness of the spell so...

Default - x4 Zombie (Add 80)
20 Wisdom - x4 Mage (Add C0)
30 Wisdom - x4 Spirit (Add C8)
40 Wisdom - x4 Robot (Add CA)
50 Wisdom - x4 Reptile (Add CE)
60 Wisdom - x4 Giant (Add DE)
70 Wisdom - x4 Slime (Add FE)
80 Wisdom - x4 Dragon (Add FF)

Now I've built code but for some reason it doesn't work. It makes the game hang, but not outright crash and I can't figure out why... (Currently replacing Dispel for testing purposes)

Code: [Select]
$03/D8B0 EA NOP A:0003 X:0020 Y:0000 P:envMxdizc - NOP (Not used in the final, just a remnant and has been replaced. Is not the issue)
$03/D8B1 E2 10 SEP #$10 A:0003 X:0020 Y:0000 P:envMxdizc - Set Processor to 8 bit (so X only reads one byte instead f 2)
$03/D8B3 AD 18 27 LDA $2717  [$7E:2717] A:0003 X:0020 Y:0000 P:envMXdizc - Load Target's Wisdom into A.
$03/D8B6 A2 80 LDX #$80 A:0063 X:0020 Y:0000 P:envMXdizc - Load 80 into X (Strong against Zombies)
$03/D8B8 C9 14 CMP #$14 A:0063 X:0080 Y:0000 P:eNvMXdizc - Compare to 20 (20 Wisdom)
$03/D8BA 90 26 BCC $26    [$D8E2] A:0063 X:0080 Y:0000 P:envMXdizC - Branch if less to 03D8E2 (X being placed into Strong vs. Creature Type byte.)
$03/D8BC A2 C0 LDX #$C0 A:0063 X:0080 Y:0000 P:envMXdizC - Load C0 into X.
$03/D8BE C9 1E CMP #$1E A:0063 X:00C0 Y:0000 P:eNvMXdizC - Compare to 30.
$03/D8C0 90 20 BCC $20    [$D8E2] A:0063 X:00C0 Y:0000 P:envMXdizC - Branch if less to 03D8E2.
$03/D8C2 A2 C8 LDX #$C8 A:0063 X:00C0 Y:0000 P:envMXdizC - Load C8 into X.
$03/D8C4 C9 28 CMP #$28 A:0063 X:00C8 Y:0000 P:eNvMXdizC - Compare to 40.
$03/D8C6 90 1A BCC $1A    [$D8E2] A:0063 X:00C8 Y:0000 P:envMXdizC - Branch if less to 03D8E2.
$03/D8C8 A2 CA LDX #$CA A:0063 X:00C8 Y:0000 P:envMXdizC - Load CA into X.
$03/D8CA C9 32 CMP #$32 A:0063 X:00CA Y:0000 P:eNvMXdizC - Compare to 50.
$03/D8CC 90 14 BCC $14    [$D8E2] A:0063 X:00CA Y:0000 P:envMXdizC - Branch if less to 03D8E2.
$03/D8CE A2 CE LDX #$CE A:0063 X:00CA Y:0000 P:envMXdizC - Load CE into X.
$03/D8D0 C9 3C CMP #$3C A:0063 X:00CE Y:0000 P:eNvMXdizC - Compare to 60.
$03/D8D2 90 0E BCC $0E    [$D8E2] A:0063 X:00CE Y:0000 P:envMXdizC - Branch if less to 03D8E2.
$03/D8D4 A2 DE LDX #$DE A:0063 X:00CE Y:0000 P:envMXdizC - Load DE into X.
$03/D8D6 C9 46 CMP #$46 A:0063 X:00DE Y:0000 P:eNvMXdizC - Compare to 70.
$03/D8D8 90 08 BCC $08    [$D8E2] A:0063 X:00DE Y:0000 P:envMXdizC - Branch if less to 03D8E2.
$03/D8DA A2 FE LDX #$FE A:0063 X:00DE Y:0000 P:envMXdizC - Load FE into X.
$03/D8DC C9 50 CMP #$50 A:0063 X:00FE Y:0000 P:eNvMXdizC - Compare to 80
$03/D8DE 90 02 BCC $02    [$D8E2] A:0063 X:00FE Y:0000 P:envMXdizC - Branch if less to 03D8E2.
$03/D8E0 A2 FF LDX #$FF A:0063 X:00FE Y:0000 P:envMXdizC - Load FF into X.
$03/D8E2 8E 1A 27 STX $271A  [$7E:271A] A:0063 X:00FF Y:0000 P:eNvMXdizC - Store X in Strong vs. Creature Type Byte.
$03/D8E5 C2 10 REP #$10 A:0000 X:0080 Y:0000 P:envMXdiZc - Reset Processor Status from 8-Bit
$03/D8E7 60 RTS A:0063 X:00FF Y:0000 P:eNvMXdizC - Return

Now for some reason this doesn't appear to work. I've followed it in code and everything Should work right, it goes through the new formula without a whimper but it is never actually written to 271A and the game hangs from there on. The only thing I can figure is that SEP 10 which is crucial to having this keep the proper amount of space is wrecking the game somehow, despite it being put right back to 20.

Oh... I figured it out. I wanted to Reset the Processor Status of 10, not force a switch.

Alright! Looks like Aura works just as I had hoped!

Well that was fun and I learned a bit more about ASM in the process!



Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #146 on: December 24, 2013, 12:04:35 AM »
I was looking at FFIII DS's commands and some of them are rather neat. I've tried to port a couple of them into FFIV while keeping the spirit of the original command alive starting with Advance (now renamed Advnc).

In FFIII DS this increases your attack power and lowers your defense dependent on how high your job level is. In FFIV I decided to change it so that it your attack power will increase dependent on your current Strength and will subtract your Strength from your defense. To prevent stacking this, when it is used the command changes (invisibly) to Parry, so it cannot be stacked.

Code: [Select]
$03/E876 A6 A6 LDX $A6    [$00:00A6] A:0003 X:0012 Y:0000 P:envMxdizc - Load User's Position into X.
$03/E878 A9 09 LDA #$09 A:0003 X:0000 Y:0000 P:envMxdiZc - Load 09 into A (Graphic for Berserk)
$03/E87A 8D C4 33 STA $33C4  [$7E:33C4] A:0009 X:0000 Y:0000 P:envMxdizc - Store A in Audiovisual Code.
$03/E87D BD 14 20 LDA $2014,x[$7E:2014] A:0009 X:0000 Y:0000 P:envMxdizc - Load User's Modified Strength into A.
$03/E880 7D 1D 20 ADC $201D,x[$7E:201D] A:000D X:0000 Y:0000 P:envMxdizc - Add User's Attack Base into A.
$03/E883 C9 FF CMP #$FF A:002E X:0000 Y:0000 P:envMxdizc - Is it above 255?
$03/E885 90 02 BCC $02    [$E889] A:002E X:0000 Y:0000 P:envMxdizc - If not branch to 03E889
-------------------------------------------------------------------------------------------------------------------------
(Code here to set Attack to FF) A9 FF
------------------------------------------------------------------------------------------------------------------------
$03/E889 8D 1D 20 STA $201D  [$7E:201D] A:002E X:0000 Y:0000 P:envMxdizc - Store A in User's Attack Base.
$03/E88C BD 2A 20 LDA $202A,x[$7E:202A] A:002E X:0000 Y:0000 P:envMxdizc - Load User's Defense Base into A.
$03/E88F FD 14 20 SBC $2014,x[$7E:2014] A:0011 X:0000 Y:0000 P:envMxdizc - Subtract A from User's Strength.
$03/E892 B0 02 BCS $02    [$E896] A:0003 X:0000 Y:0000 P:envMxdizC - If more than 00 branch to 03E896.
--------------------------------------------------------------------------------------------------------------------------
(Code here to set Defense to 01) A9 01
----------------------------------------------------------------------------------------------------------------------------
$03/E896 8D 2A 20 STA $202A  [$7E:202A] A:0003 X:0000 Y:0000 P:envMxdizC - Store A in User's Defense Base.
$03/E899 A9 1B LDA #$1B A:0003 X:0000 Y:0000 P:envMxdizC - Load 1B (Parry) into A.
$03/E89B 9D 0F 33 STA $330F,x[$7E:330F] A:001B X:0000 Y:0000 P:envMxdizC - Store A in Advnc's current position.
$03/E89E 60 RTS A:001B X:0000 Y:0000 P:envMxdizC - Return.

And this works absolutely flawlessly! It keeps the spirit of the FFIII Command (using Strength instead of Job Level) and goes on from there.

Unfortunately most of the other commands seem a bit beyond me (Barrage seems neat, with 4 random attacks using 4 arrows, but having it target random foes is tricky as is multiple attacks) and Geomancy is a bit silly in a game where 75% of the game is Caves) and while I would Love to include some form of Item Lore, there's really no room in the Magic Formula where it counts. It wouldn't be difficult to combine FFIII DS's version of Scan with FFIV's Command. Maybe next I'll try to tackle some FFIV-TAY abilities. Piercing Sight was always one of my favorite from a thematic basis.


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 (FFI spell routines in FFIV!)
« Reply #147 on: December 24, 2013, 01:01:57 AM »
Regarding your Aura spell - is there a particular reason you chose
Zombie
Mage
Spirit
Robot
Reptile
Giant
Slime
Dragon

Instead of
Zombie
Mage
Slime
Giant
Spirit
Reptile
Machine
Dragon

I think I can think of a way the code could be shorter if you were to follow the "natural order" of creature types. Not that it needs to be, it's just fun for me to think about that kind of thing.

Grimoire LD

  • FF4 Hacker
  • *
  • Posts: 1,684
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #148 on: December 24, 2013, 09:56:11 AM »
Ah, the reason I put it that way was to keep it useful through the entire game rather than lulls off in usefulness or is a little too overpowered. That's the problem with Slime being a bit early, it could make Flans not very threatening. But perhaps at 70 Wisdom it comes too late... and if you can squeeze the instructions down a bit so that it can occupy another spot and not Dispel, per se that might be for the best as well.

Sure, the natural order might work better from an efficiency stand point.


Pinkpuff

  • Flan Princess
  • *
  • Posts: 924
  • Find a Megalixir in Unprecedented Crisis!
    • View Profile
Re: Grimoire LD's Notes, Methods, and Hacks (FFI spell routines in FFIV!)
« Reply #149 on: December 24, 2013, 01:53:04 PM »
You could get the best of both worlds with a lot of work, by changing around which monsters have which race flags set so that the "natural order" is the preferred order... (i.e. make it so all the slime monsters have the race that normally would indicate spirit, all the giant monsters to have the race that would normally indicate robot, etc.) That would be where FF4kster's handy-dandy config files come into play (I'm looking at you, races.dat)...
Let's dance!