øAslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;u=123;area=showposts;start=1095e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexf72f.htmlslickproductions.org/forum/index.php?PHPSESSID=5f0fck550j2m4m2fpbtkj2vkm1&action=profile;area=showposts;u=123e:/My Web Sites/Slick Productions - FFIV Message Board/slickproductions.org/forum/indexf72f.html.zx.òg^ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÈ @S ‚ÅOKtext/htmlISO-8859-1gzip8:Ö‚ÅÿÿÿÿÿÿÿÿTue, 10 Mar 2020 20:18:12 GMT0ó°° ®0®P®€§²ð®,òg^ÿÿÿÿÿÿÿÿìz‚Å Show Posts - Grimoire LD

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - Grimoire LD

1096
Here's a neat little addition that should be a very simple addition to the editor. How the game decides if the character is Yang and how to process Damage from Fight.

The code surrounding it is in my other thread, quite a bit was revealed within. But for the purposes of the editor this should suffice...

In LoRom/HiRom...

$03/9B0D   C9 00   CMP #$06   A:0000   X:FFFF   Y:0001   P:envMxdiZc - Is it Yang's ID?

This is the check for which character is considered to have special considerations when it comes to weapons.

But you could really link this special behavior to anything...

$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.

You could have it look at specific weapons, different armors, etc.

1097
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.

1098
It would appear the first attempt at figuring out what commands could be targeted used a faulty method... Here is the revised list, you'll notice anything that casts an actual spell can be retargeted easily enough.

Fight - No
Dark Wave - No
Jump - No
Recall - Yes
Sing - Yes
Hide - No
Salve - Yes
Pray - Yes (It can target either allies or enemies without worry)
Aim - No
Focus - No
Kick - No
Gird - Yes (As above with Pray)
Twin - Yes
Boast - No
Cry - No
Cover - No
Peep - No
Crash - Yes
Dart - No
Sneak - No
Regen - No

Now Jump/Aim/Focus can't be made multi-attacks because they follow the same formula that Fight uses. The only difference in Focus and Jump's case is that they put on a special status which is removed when the attack resolves.. Aim is just the Attack Command with 255% Accuracy. (and 0 evasion on the enemy, but that's a moot point really)

This unfortunately also applies to Dark Wave and Kick Commands because they both derive from the same source. You could change this of course to use the magic formula (in Dark Wave's case as a way to differentiate it from Kick). Dart/Sneak/Regen are all different beasts all together, but they cannot be changed either it appears.

So while you can't change them all, everyone that uses a spell call can be easily manipulated, including Salve.

1099
Final Fantasy IV Research & Development / Re: Actor names in battle
« on: October 20, 2013, 03:48:10 PM »
Finally found this one! I failed to find it in LoRom/HiRom/RAM in any way but I went to where the original sequence was in ROM and thought there had to be a copy of it elsewhere, so I copied the original sequence, searched and found the location in only a minute.

In Rom at...

0B7B3F-0B7B54 - Location of Character Names (In Battle)

And that should be that in regards to this matter.

1100
Alright, I've taken another look at this because it was important for my FFIV-FFI mod and hopefully have come up with some decent results...

Something I did not notice is that spells are aligned in such a way that their usability is dependent on a range and index 0E-1B (Game looks at 1C but it is 1B, 1C is Venom, 1B is Warp).

01B27F - C9 0E - (CMP with 0E) is actually what spells to highlight and Only what spells to highlight.

$01/B283   C9 1C   CMP #$1C   A:0219   X:0248   Y:0000   P:envMxdIzC - This is where the index of usable spells end. So if you wanted to change the index of usable spells you would change these two values to whatever was desired. When I saw the value the first time I must have confused the 1C for a 13, I'm not really sure how I did that, but eh...

And here is the actual ranges of spells as well.

01B52E - C9 0E - CMP 0E - Start of Index of usable Spells outside of battle.
01B532 - C9 1C - CMP 1C - End of Index of usable Spells (Using spells outside of their intended range tends to have glitchy and game crashing effects)

I've tried to find anything more than that, but have so far come up empty handed, I'm afraid.

1101
Ah! You didn't mention you included the Auto-Battles! Fantastic! How much space is allotted to those? I added some more instructions to the script and saw no issues in being carried out. All that needs is the "Only this character must be present" or "This character should stay out of battle" code I found a while back. (though since that doesn't necessarily deal completely with auto-battles maybe it would go elsewhere?) Oh, and Golbez's auto-battle information. I have a feeling it will be closeby the original code, but not immediately next to it. I already have a proper search point to find them...

"389A-???? Autobattle script for second character." Thanks to the Tower of Bab-il Docs. I'll see if I can''t find those later today.

Spell Animations look to be properly ordered, no errors to be seen in those, good work in implementing them.

Ah right, and a quick question about the "Start of Magic..." in the editor. Is that referring to their formulaic properties as well? I found in the Magic code not too long ago how the game decides what kind of magic it is and how to take it into accordance when casting spells. In addition to that is also the starting point of when the game looks at Wisdom or Will to decide what powers a certain magic. I wasn't certain if the editor includes that information as well or was in some old notes I may have missed.

1102
Final Fantasy IV Research & Development / Re: Fun with Summons
« on: October 18, 2013, 07:25:03 AM »
Yeah, I kind of got lost in that last part a little... no matter, great work on this tutorial so far! Looking forward to the next part.

1103
Final Fantasy IV Research & Development / Re: Fun with Summons
« on: October 17, 2013, 09:26:58 PM »
Hmm, so far the only way to add Summons is to remove current images? Can the images that were changed be relocated? (Like Cagnazzo on one of the unused Monster slots?) or are they set in stone?

1104
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.












1105
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.











1106
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.

1107
That is some clever hacking! Fantastic work there Chillyfeez. So where is this code planned to be plugged into? The newly unused portion of Peep linked to the old 0000 of "Crashes Game"?

1108
Hmm, yeah I noticed similar problems in using the Un-Berserked Avenger Sword. Though for the most part things seemed well in hand before trying to mimic magic outside White froze the game. I think your idea to have this character mimic only Monster actions is probably the best idea that can be arranged.

Are you wondering what happens to the byte at 33C4 or are you wondering what becomes of the routine it arrived at 33C4 on? If it's the latter it gets overwritten for its original value, has a x2 added to it (to find its proper routine offset) and then it is replace by a 3 which is likely how the game reaches the address 03XXXX for Command Routines.

1109
I thought I would but I now come to the realization that I do not, this is for several reasons now that I think on it. This is never actually related to the routines. You could change the routines to the end of days and you would not see a change in the animation undertaken in said routine.

Now I am intrigued... let me see the reason for that, though I suspect its going to be Index based, depending on command used.

Let's see for sure...

Code: [Select]
$03/B138 BD 51 20 LDA $2051,x[$7E:2051] A:0002 X:0000 Y:0000 P:envMxdiZc - Load Action Used into A.
$03/B13B C9 02 CMP #$02 A:0005 X:0000 Y:0000 P:envMxdizc - Is it Magic of any sort?
$03/B13D F0 08 BEQ $08    [$B147] A:0005 X:0000 Y:0000 P:envMxdizC - If so branch to 03B147.
$03/B13F C9 07 CMP #$07 A:0005 X:0000 Y:0000 P:envMxdizC - Is it Think?
$03/B141 F0 04 BEQ $04    [$B147] A:0005 X:0000 Y:0000 P:eNvMxdizc - If so branch to 03B147.
$03/B143 C9 20 CMP #$20 A:0005 X:0000 Y:0000 P:eNvMxdizc - Is it ?20?
$03/B145 D0 03 BNE $03    [$B14A] A:0005 X:0000 Y:0000 P:eNvMxdizc - If so branch to 03B14A.
$03/B14A 48 PHA A:0005 X:0000 Y:0000 P:eNvMxdizc - Push A onto Stack.
$03/B14B 18 CLC A:0005 X:0000 Y:0000 P:eNvMxdizc - Clear Carry Flag.
$03/B14C 69 C0 ADC #$C0 A:0005 X:0000 Y:0000 P:eNvMxdizc - Add C0 onto A.
$03/B14E 8D C4 33 STA $33C4  [$7E:33C4] A:00C5 X:0000 Y:0000 P:eNvMxdizc - Store A in Audio/Visual. (C5 is the Animation of Dark Wave)
$03/B151 C9 C1 CMP #$C1 A:00C5 X:0000 Y:0000 P:eNvMxdizc - Is it ?None? (possibly used as a return)
$03/B153 D0 02 BNE $02    [$B157] A:00C5 X:0000 Y:0000 P:envMxdizC - If not branch to 03B157.
--------------------------------------------

-----------------------------------------------
$03/B157 8D FF 35 STA $35FF  [$7E:35FF] A:00C5 X:0000 Y:0000 P:envMxdizC - Store A in 7E35FF.
$03/B15A 9C C5 33 STZ $33C5  [$7E:33C5] A:00C5 X:0000 Y:0000 P:envMxdizC - Store Zero in another byte of Audio/Visual code.
$03/B15D 68 PLA A:00C5 X:0000 Y:0000 P:envMxdizC - Pull A.
$03/B15E 0A ASL A A:0005 X:0000 Y:0000 P:envMxdizC - x2 to A.
$03/B15F AA TAX A:000A X:0000 Y:0000 P:envMxdizc - Transer A to X.
$03/B160 BF 7C B3 03 LDA $03B37C,x[$03:B386] A:000A X:000A Y:0000 P:envMxdizc - Draw out First two bytes of the location of subroutine.
$03/B164 85 80 STA $80    [$00:0080] A:00E9 X:000A Y:0000 P:eNvMxdizc - Store it in 80.
$03/B166 BF 7D B3 03 LDA $03B37D,x[$03:B387] A:00E9 X:000A Y:0000 P:eNvMxdizc - Draw out second two bytes of the location of subroutine. (E9E9 in this case)
$03/B16C A9 03 LDA #$03 A:00E9 X:000A Y:0000 P:eNvMxdizc - Load 03 into A.
$03/B16E 85 82 STA $82    [$00:0082] A:0003 X:000A Y:0000 P:envMxdizc - Store A in 82.
$03/B170 DC 80 00 JML [$0080][$03:E9E9] A:0003 X:000A Y:0000 P:envMxdizc - Jump to Subroutine (defined by 80, which now holds the location of Commands subroutine)

Well that was unfortunate. However there is nothing stopping you from changing the used graphic within the subroutine itself... I think. And it did completely reveal where the Command Subroutines are being held which will be the way to fix "crashes game".

The way it is set up does not leave room for variables, unfortunately. (Command Number + C0 = Graphic shown) With only Magics and Think given special priority because of their variable factors.





1110
Yes, but the instructions for actually getting the... yeah you're right I meant Jinn. I think I jumped the gun on that one, hehe.