Final Fantasy VI:ROM map/Assembly C22

From Data Crystal
Jump to: navigation, search

Contents

C2/2011 unknow

(48) (49) (4A) (4B)
C2/2011: 8A           TXA
C2/2012: 38           SEC 
C2/2013: E9 24        SBC #$24
C2/2015: AA           TAX 
C2/2016: BD A0 3A     LDA $3AA0,X
C2/2019: 4A           LSR 
C2/201A: 90 83        BCC $1F9F
C2/201C: BD 18 30     LDA $3018,X
C2/201F: 85 B8        STA $B8
C2/2021: 80 A7        BRA $1FCA

C2/2023 unknow

(36)
C2/2023: C2 20        REP #$20
C2/2025: B9 18 30     LDA $3018,Y
C2/2028: 85 B8        STA $B8
C2/202A: 4C 93 1F     JMP $1F93

C2/202D remove self as target

C2/202D: 08           PHP
C2/202E: C2 20        REP #$20
C2/2030: B9 18 30     LDA $3018,Y
C2/2033: 14 B8        TRB $B8
C2/2035: 28           PLP 
C2/2036: 60           RTS 

C2/2037 sets targets to all dead monsters and characters

C2/2037: 08           PHP         (Set 16-bit Accumulator)
C2/2038: C2 20        REP #$20
C2/203A: 64 B8        STZ $B8
C2/203C: A2 12        LDX #$12
C2/203E: BD E3 3E     LDA $3EE3,X 
C2/2041: 10 05        BPL $2048   (Branch if not dead)
C2/2043: BD 18 30     LDA $3018,X
C2/2046: 04 B8        TSB $B8
C2/2048: CA           DEX 
C2/2049: CA           DEX 
C2/204A: 10 F2        BPL $203E
C2/204C: 28           PLP 
C2/204D: 60           RTS 

C2/204E set targets to all monsters and characters with reflect status

C2/204E: 08           PHP
C2/204F: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/2051: 64 B8        STZ $B8
C2/2053: A2 12        LDX #$12
C2/2055: BD F7 3E     LDA $3EF7,X
C2/2058: 10 05        BPL $205F   (Branch if not Reflect status)
C2/205A: BD 18 30     LDA $3018,X
C2/205D: 04 B8        TSB $B8
C2/205F: CA           DEX 
C2/2060: CA           DEX 
C2/2061: 10 F2        BPL $2055
C2/2063: 28           PLP 
C2/2064: 60           RTS 

C2/2065 pointers: monster script: F1 opcode

C2/2065: 23 20     (36)
C2/2067: A5 1F     (37)
C2/2069: A8 1F     (38)
C2/206B: AC 1F     (39)
C2/206D: AF 1F     (3A)
C2/206F: B3 1F     (3B)
C2/2071: B8 1F     (3C)
C2/2073: BD 1F     (3D)
C2/2075: C2 1F     (3E)
C2/2077: C7 1F     (3F)
C2/2079: CC 1F     (40)
C2/207B: D1 1F     (41)
C2/207D: D6 1F     (42)
C2/207F: A1 1F     (43)
C2/2081: 88 1F     (44)
C2/2083: FB 1F     (45)
C2/2085: 93 1F     (46)
C2/2087: 9F 1F     (47)
C2/2089: 11 20     (48)
C2/208B: 11 20     (49)
C2/208D: 11 20     (4A)
C2/208F: 11 20     (4B)
C2/2091: DB 1F     (4C)
C2/2093: E5 1F     (4D)

C2/2095 recalculate characters data for equipments and relics

C2/2095: A2 03        LDX $#03
C2/2097: BD 2F 30     LDA $2F30,X   (was character flagged to have his/her properties be
                                     recalculated from his/her equipment at end of turn?)
C2/209A: F0 3E        BEQ $20DA     (skip to next character if not)
C2/209C: 9E 30 2F     STZ $2F30,X   (clear this character's flag)
C2/209F: DA           PHX 
C2/20A0: 5A           PHY 
C2/20A1: 8A           TXA 
C2/20A2: 85 EE        STA $EE
C2/20A4: 0A           ASL 
C2/20A5: 85 EF        STA $EF
C2/20A7: 0A           ASL 
C2/20A8: 65 EE        ADC $EE
C2/20AA: AA           TAX 
C2/20AB: BD 86 2B     LDA $2B86,X
C2/20AE: EB           XBA 
C2/20AF: BD 9A 2B     LDA $2B9A,X
C2/20B2: A6 EF        LDX $EF
C2/20B4: C2 10        REP #$10      (Set 16-bit X and Y)
C2/20B6: BC 10 30     LDY $3010,X   (get offset to character info block)  
C2/20B9: 99 20 16     STA $1620,Y
C2/20BC: EB           XBA 
C2/20BD: 99 1F 16     STA $161F,Y
C2/20C0: BD E4 3E     LDA $3EE4,X
C2/20C3: 99 14 16     STA $1614,Y
C2/20C6: E2 10        SEP #$10      (Set 8-bit X and Y)
C2/20C8: BD D9 3E     LDA $3ED9,X
C2/20CB: 22 77 0E C2  JSR $C20E77
C2/20CF: 20 6D 28     JSR $286D
C2/20D2: 20 7D 52     JSR $527D
C2/20D5: 20 75 26     JSR $2675
C2/20D8: 7A           PLY 
C2/20D9: FA           PLX 
C2/20DA: CA           DEX 
C2/20DB: 10 BA        BPL $2097     (loop for all 4 onscreen characters)
C2/20DD: 60           RTS 

C2/20DE command #$2A

C2/20DE: AD 45 2F     LDA $2F45   (characters trying to run)
C2/20E1: F0 7F        BEQ $2162   (exit if not trying to run)
C2/20E3: C2 20        REP #$20
C2/20E5: A9 02 09     LDA #$0902
C2/20E8: 8D 28 3A     STA $3A28   (default some animation variable to
                                   unsuccessful run?)
C2/20EB: E2 20        SEP #$20
C2/20ED: A5 B1        LDA $B1
C2/20EF: 89 02        BIT #$02    (is Can't Run set?)
C2/20F1: D0 6C        BNE $215F   (branch if so)
C2/20F3: AD 38 3A     LDA $3A38   (characters successfully running)
C2/20F6: F0 6A        BEQ $2162   (branch if none)
C2/20F8: 85 B8        STA $B8     (save successfully running characters)
C2/20FA: 9C 38 3A     STZ $3A38
C2/20FD: 20 00 64     JSR $6400   (Zero $A0 through $AF)
C2/2100: A2 06        LDX #$06
C2/2102: BD 18 30     LDA $3018,X
C2/2105: 14 B8        TRB $B8     (remove current party member from list
                                   of successfully running characters)
C2/2107: F0 3B        BEQ $2144   (skip to next party member if they were
                                   never in it) 
C2/2109: EB           XBA 
C2/210A: BD 19 32     LDA $3219,X  (top byte of ATB timer, which is zeroed
                                    when the gauge is full)
C2/210D: D0 35        BNE $2144    (it it's nonzero, the gauge isn't full,
                                    so skip to next party member)
C2/210F: BD A0 3A     LDA $3AA0,X
C2/2112: 89 50        BIT #$50     (???)
C2/2114: D0 2E        BNE $2144
C2/2116: 4A           LSR          (is entity even present in the battle?)
C2/2117: 90 2B        BCC $2144    (skip to next party member if not)
C2/2119: BD E4 3E     LDA $3EE4,X
C2/211C: 89 02        BIT #$02     (Check for Zombie status)
C2/211E: D0 24        BNE $2144
C2/2120: BD F9 3E     LDA $3EF9,X
C2/2123: 89 20        BIT #$20
C2/2125: D0 1D        BNE $2144    (Branch if Hide status)
C2/2127: EB           XBA 
C2/2128: 04 B8        TSB $B8      (mark character as successfully running,
                                    for realz now.)
C2/212A: 0C 39 3A     TSB $3A39
C2/212D: 0C 4C 2F     TSB $2F4C    (mark runner to be removed from the battlefield?)
C2/2130: BD A1 3A     LDA $3AA1,X
C2/2133: 09 40        ORA #$40
C2/2135: 9D A1 3A     STA $3AA1,X  (Set bit 6 of $3AA1)
C2/2138: BD 04 32     LDA $3204,X
C2/213B: 09 40        ORA #$40     (set bit 6 of $3204)
C2/213D: 9D 04 32     STA $3204,X
C2/2140: 20 C8 07     JSR $07C8
C2/2143: 9B           TXY 
C2/2144: CA           DEX 
C2/2145: CA           DEX 
C2/2146: 10 BA        BPL $2102    (loop for all 4 party members)
C2/2148: A5 B8        LDA $B8      (get successfully running characters)
C2/214A: F0 16        BEQ $2162    (branch if none)
C2/214C: 64 B9        STZ $B9
C2/214E: BB           TYX 
C2/214F: 20 C2 57     JSR $57C2    (Update $An variables, and do other stuff)
C2/2152: 20 DB 63     JSR $63DB    (Copy $An variables to ($78) buffer)
C2/2155: C2 20        REP #$20     (set 16-bit Accumulator)
C2/2157: A9 06 22     LDA #$2206
C2/215A: 8D 28 3A     STA $3A28    (change some animation variable to
                                    successful run?)
C2/215D: E2 20        SEP #$20     (set 8-bit Accumulator)
C2/215F: 20 9E 62     JSR $629E    
C2/2162: 60           RTS 

C2/2163 unknow

C2/2163: F4 18 00     PEA $0018
C2/2166: 48           PHA 
C2/2167: 0A           ASL 
C2/2168: A8           TAY 
C2/2169: 18           CLC 
C2/216A: 20 76 02     JSR $0276
C2/216D: 68           PLA 
C2/216E: A8           TAY 
C2/216F: B9 84 31     LDA $3184,Y
C2/2172: CD 0A 34     CMP $340A
C2/2175: D0 02        BNE $2179
C2/2177: A9 FF        LDA #$FF
C2/2179: 8D 0A 34     STA $340A
C2/217C: A9 FF        LDA #$FF
C2/217E: 99 84 31     STA $3184,Y
C2/2181: A9 01        LDA #$01
C2/2183: 04 B1        TSB $B1
C2/2185: 4C D3 13     JMP $13D3

C2/2188 unknow

C2/2188: A9 80        LDA #$80
C2/218A: 20 AB 5B     JSR $5BAB
C2/218D: BD A0 3A     LDA $3AA0,X
C2/2190: 89 50        BIT #$50
C2/2192: D0 76        BNE $220A
C2/2194: BD A1 3A     LDA $3AA1,X
C2/2197: 29 7F        AND #$7F    (Clear bit 7)
C2/2199: 09 01        ORA #$01    (Set bit 0)
C2/219B: 9D A1 3A     STA $3AA1,X
C2/219E: 20 1C 03     JSR $031C
C2/21A1: BD CC 32     LDA $32CC,X
C2/21A4: 30 64        BMI $220A
C2/21A6: 0A           ASL 
C2/21A7: A8           TAY 
C2/21A8: B9 20 34     LDA $3420,Y
C2/21AB: C9 1E        CMP #$1E
C2/21AD: B0 5B        BCS $220A
C2/21AF: 8D 6F 2D     STA $2D6F
C2/21B2: C9 16        CMP #$16
C2/21B4: F0 06        BEQ $21BC
C2/21B6: E0 08        CPX #$08
C2/21B8: 90 2C        BCC $21E6
C2/21BA: 80 4E        BRA $220A
C2/21BC: BD 05 32     LDA $3205,X
C2/21BF: 10 49        BPL $220A
C2/21C1: C2 20        REP #$20
C2/21C3: E0 08        CPX #$08
C2/21C5: B0 0C        BCS $21D3
C2/21C7: A9 16 00     LDA #$0016
C2/21CA: 8D 28 3F     STA $3F28
C2/21CD: B9 20 35     LDA $3520,X
C2/21D0: 8D 2A 3F     STA $3F2A
C2/21D3: BD 18 30     LDA $3018,X
C2/21D6: 0C 2C 3F     TSB $3F2C
C2/21D9: E2 20        SEP #$20
C2/21DB: BD F9 3E     LDA $3EF9,X
C2/21DE: 09 20        ORA #$20
C2/21E0: 9D F9 3E     STA $3EF9,X  (Set Hide Status)
C2/21E3: 20 26 5D     JSR $5D26
C2/21E6: 20 39 26     JSR $2639
C2/21E9: 20 00 64     JSR $6400    (Zero $A0 through $AF)
C2/21EC: C2 20        REP #$20
C2/21EE: B9 20 35     LDA $3520,Y
C2/21F1: 85 B8        STA $B8
C2/21F3: E2 20        SEP #$20
C2/21F5: A9 0C        LDA #$0C
C2/21F7: 8D 6E 2D     STA $2D6E
C2/21FA: A9 FF        LDA #$FF
C2/21FC: 8D 72 2D     STA $2D72
C2/21FF: 20 C2 57     JSR $57C2
C2/2202: 20 DB 63     JSR $63DB    (Copy $An variables to ($78) buffer)
C2/2205: A9 04        LDA #$04
C2/2207: 20 11 64     JSR $6411
C2/220A: 4C 19 00     JMP $0019

C2/220D determine if attack hits

C2/220D: 48           PHA
C2/220E: DA           PHX 
C2/220F: 18           CLC 
C2/2210: 08           PHP 
C2/2211: E2 20        SEP #$20
C2/2213: 64 FE        STZ $FE
C2/2215: A5 B3        LDA $B3
C2/2217: 10 1C        BPL $2235   (Skip Clear check if bit 7 of $B3 not set)
C2/2219: B9 E4 3E     LDA $3EE4,Y
C2/221C: 89 10        BIT #$10    (Check for Clear status)
C2/221E: F0 15        BEQ $2235   (Branch if not vanished)
C2/2220: AD A4 11     LDA $11A4
C2/2223: 0A           ASL 
C2/2224: 30 07        BMI $222D   (Branch if L.X spell)
C2/2226: AD A2 11     LDA $11A2
C2/2229: 4A           LSR 
C2/222A: 4C B3 22     JMP $22B3   (If physical attack then miss, otherwise hit)

C2/222D: B9 FC 3D     LDA $3DFC,Y
C2/2230: 09 10        ORA #$10
C2/2232: 99 FC 3D     STA $3DFC,Y  (mark Clear status to be cleared.  that way,
                                    it'll still be removed even if the attack
                                    misses and C2/4406, which is what normally
                                    removes Clear, is skipped.)
C2/2235: AD A3 11     LDA $11A3
C2/2238: 89 02        BIT #$02    (Check for not reflectable)
C2/223A: D0 0F        BNE $224B   (Branch if ^)
C2/223C: B9 F8 3E     LDA $3EF8,Y
C2/223F: 10 0A        BPL $224B   (Branch if target does not have Reflect)
C2/2241: C2 20        REP #$20    (set 16-bit accumulator)
C2/2243: B9 18 30     LDA $3018,Y
C2/2246: 04 A6        TSB $A6     (turn on target in "reflected off of" byte?)
C2/2248: 4C E5 22     JMP $22E5   (Always miss if target has Reflect)

C2/224B: AD A2 11     LDA $11A2
C2/224E: 89 02        BIT #$02    (Check for spell miss if death prot.)
C2/2250: F0 07        BEQ $2259   (Branch if not ^)
C2/2252: B9 A1 3A     LDA $3AA1,Y
C2/2255: 89 04        BIT #$04
C2/2257: D0 5C        BNE $22B5   (Always miss if Prot. from death)
C2/2259: AD A2 11     LDA $11A2
C2/225C: 89 04        BIT #$04    (Check for hit only (dead XOR undead) targets)
C2/225E: F0 08        BEQ $2268
C2/2260: B9 E4 3E     LDA $3EE4,Y
C2/2263: 59 95 3C     EOR $3C95,Y (death status XOR undead attribute)
C2/2266: 10 4D        BPL $22B5   (If neither or both of above set, then miss)
C2/2268: A5 B5        LDA $B5
C2/226A: C9 00        CMP #$00
C2/226C: F0 04        BEQ $2272   (Branch if command is Fight)
C2/226E: C9 06        CMP #$06
C2/2270: D0 2F        BNE $22A1   (Branch if command not Capture)
C2/2272: AD A9 11     LDA $11A9
C2/2275: D0 2A        BNE $22A1   (Branch if has special effect)
C2/2277: AD C9 3E     LDA $3EC9
C2/227A: C9 01        CMP #$01
C2/227C: D0 23        BNE $22A1   (branch if # of targets isn't 1)
C2/227E: C0 08        CPY #$08
C2/2280: B0 1F        BCS $22A1   (Branch if target is monster)
C2/2282: B9 F9 3E     LDA $3EF9,Y
C2/2285: 0A           ASL 
C2/2286: 10 0B        BPL $2293   (Branch if not dog block)
C2/2288: 20 53 4B     JSR $4B53   (0 or 1)
C2/228B: 90 06        BCC $2293   (50% chance)
C2/228D: A9 40        LDA #$40
C2/228F: 85 FE        STA $FE	    (set dog block animation flag)
C2/2291: 80 22        BRA $22B5   (Miss)
C2/2293: AD 36 3A     LDA $3A36
C2/2296: 0D 37 3A     ORA $3A37
C2/2299: F0 06        BEQ $22A1   (Branch if no Golem)
C2/229B: A9 20        LDA #$20
C2/229D: 85 FE        STA $FE     (set golem block animation flag)
C2/229F: 80 14        BRA $22B5   (Miss)
C2/22A1: AD A4 11     LDA $11A4
C2/22A4: 89 20        BIT #$20    (Check for can't be dodged)
C2/22A6: D0 40        BNE $22E8   (Always hit if can't be dodged)
C2/22A8: 89 40        BIT #$40
C2/22AA: D0 40        BNE $22EC   (Check if hit for L? Spells) 
C2/22AC: 89 10        BIT #$10
C2/22AE: F0 4B        BEQ $22FB   (Check if hit if Stamina not involved?)
C2/22B0: 20 9C 23     JSR $239C   (Check if hit if Stamina involved?)
C2/22B3: 90 33        BCC $22E8   (branch if hits)
C2/22B5: B9 E4 3E     LDA $3EE4,Y
C2/22B8: 89 1A        BIT #$1A    (Check target for Clear, M-Tek, or Zombie)
C2/22BA: D0 15        BNE $22D1   (Always miss if ^)
C2/22BC: C0 08        CPY #$08    (Check if target is monster)
C2/22BE: B0 11        BCS $22D1   (Always miss if ^)
C2/22C0: 20 BF 23     JSR $23BF   (Determine miss animation)
C2/22C3: C9 06        CMP #$06
C2/22C5: 90 0A        BCC $22D1   (Always miss)
C2/22C7: A2 03        LDX #$03
C2/22C9: 9E AA 11     STZ $11AA,X (Clear all status setting effects of attack)
C2/22CC: CA           DEX 
C2/22CD: 10 FA        BPL $22C9
C2/22CF: 80 17        BRA $22E8   (Always hit)
C2/22D1: A9 02        LDA #$02
C2/22D3: 04 B2        TSB $B2     (Set no critical and ignore True Knight)
C2/22D5: 9C 89 3A     STZ $3A89   (turn off random weapon spellcast)
C2/22D8: AD 1C 34     LDA $341C   (0 if current strike is missable weapon spellcast)
C2/22DB: F0 08        BEQ $22E5   (if it is, skip flagging the "Miss" message,
                                   since we'll be skipping the animation
                                   entirely.)
C2/22DD: C2 20        REP #$20
C2/22DF: B9 18 30     LDA $3018,Y
C2/22E2: 0C 5A 3A     TSB $3A5A   (Set target as missed)
C2/22E5: 28           PLP 
C2/22E6: 38           SEC         (Makes attack miss)
C2/22E7: 08           PHP 
C2/22E8: 28           PLP 
C2/22E9: FA           PLX 
C2/22EA: 68           PLA 
C2/22EB: 60           RTS 

C2/22EC determine if attack hits: L? spells

C2/22EC: AE A8 11     LDX $11A8   (Hit Rate)
C2/22EF: 7B           TDC 
C2/22F0: B9 18 3B     LDA $3B18,Y (Level)
C2/22F3: 20 92 47     JSR $4792   (Division)
C2/22F6: 8A           TXA 
C2/22F7: D0 D8        BNE $22D1   (Always miss)
C2/22F9: 80 ED        BRA $22E8   (Always Hit)

C2/22FB determine if attack hits

C2/22FB: F4 40 80     PEA $8040   (Sleep, Petrify)
C2/22FE: F4 10 02     PEA $0210   (Freeze, Stop)
C2/2301: 20 64 58     JSR $5864
C2/2304: 90 E2        BCC $22E8   (Always hit if any set)
C2/2306: C2 20        REP #$20
C2/2308: B9 18 30     LDA $3018,Y
C2/230B: 2C 54 3A     BIT $3A54
C2/230E: E2 20        SEP #$20
C2/2310: D0 D6        BNE $22E8   (Always hit)
C2/2312: AD A8 11     LDA $11A8   (Hit Rate)
C2/2315: C9 FF        CMP #$FF
C2/2317: F0 CF        BEQ $22E8   (Automatically hit if Hit Rate is 255)
C2/2319: 85 EE        STA $EE
C2/231B: AD A2 11     LDA $11A2   
C2/231E: 4A           LSR 
C2/231F: 90 1E        BCC $233F   (If Magic attack then skip this next code)
C2/2321: B9 4C 3E     LDA $3E4C,Y 
C2/2324: 4A           LSR         (Check for retort)
C2/2325: B0 C1        BCS $22E8   (Always hits)
C2/2327: B9 E5 3E     LDA $3EE5,Y (Check for image status)         
C2/232A: 89 04        BIT #$04
--------------------------------------------------
(Original Code)
C2/232C: F0 11        BEQ $233F   (Branch if not Image status on target)
C2/232E: 20 5A 4B     JSR $4B5A   
C2/2331: C9 40        CMP #$40    (1 in 4 chance clear Image status)
C2/2333: B0 9C        BCS $22D1   (Always misses)
C2/2335: B9 FD 3D     LDA $3DFD,Y 
C2/2338: 09 04        ORA #$04
C2/233A: 99 FD 3D     STA $3DFD,Y (Clear Image status)
C2/233D: 80 92        BRA $22D1   (Always misses)
C2/233F: B9 54 3B     LDA $3B54,Y (255 - Evade * 2 + 1)   
C2/2342: B0 03        BCS $2347             
C2/2344: B9 55 3B     LDA $3B55,Y (255 - MBlock * 2 + 1)
C2/2347: 48           PHA                   
C2/2348: 90 3E        BCC $2388             
(Evade Patch Applied)
C2/232C: F0 17        BEQ $2345   (Branch if not Image status on target)
C2/232E: 20 5A 4B     JSR $4B5A   
C2/2331: C9 40        CMP #$40    (1 in 4 chance clear Image status)
C2/2333: B0 9C        BCS $22D1   (Always misses)
C2/2335: B9 FD 3D     LDA $3DFD,Y 
C2/2338: 09 04        ORA #$04
C2/233A: 99 FD 3D     STA $3DFD,Y (Clear Image status)
C2/233D: 80 92        BRA $22D1   (Always misses)
C2/233F: B9 55 3B     LDA $3B55,Y (255 - MBlock * 2 + 1)   
C2/2342: 48           PHA
C2/2343: 80 43        BRA $2388
C2/2345: B9 54 3B     LDA $3B54,Y (255 - Evade * 2 + 1)
C2/2348: 48           PHA
C2/2349: EA           NOP
-------------------------------------------------
C2/234A: BD E4 3E     LDA $3EE4,X
C2/234D: 4A           LSR 
C2/234E: 90 02        BCC $2352   (Branch if attacker not blinded [Dark status])
C2/2350: 46 EE        LSR $EE     (Cut hit rate in half)
C2/2352: B9 58 3C     LDA $3C58,Y
C2/2355: 89 04        BIT #$04
C2/2357: F0 02        BEQ $235B   (Branch if no Beads)
C2/2359: 46 EE        LSR $EE     (Cut hit rate in half)
C2/235B: F4 03 20     PEA $2003   (Muddled, Dark, Zombie)
C2/235E: F4 04 04     PEA $0404   (Life 3, Slow)
C2/2361: 20 64 58     JSR $5864
C2/2364: B0 0C        BCS $2372   (Branch if none set on target)
C2/2366: A5 EE        LDA $EE
C2/2368: 4A           LSR 
C2/2369: 4A           LSR 
C2/236A: 65 EE        ADC $EE     (Adds 1/4 to hit rate)
C2/236C: 90 02        BCC $2370
C2/236E: A9 FF        LDA #$FF
C2/2370: 85 EE        STA $EE     (if hit rate overflowed, set to 255)
C2/2372: F4 04 42     PEA $4204   (Seizure, Near Fatal, Poison)
C2/2375: F4 08 00     PEA $0008   (Haste)
C2/2378: 20 64 58     JSR $5864
C2/237B: B0 0B        BCS $2388   (Branch if none set on target)
C2/237D: A5 EE        LDA $EE
C2/237F: 46 EE        LSR $EE
C2/2381: 46 EE        LSR $EE
C2/2383: 38           SEC 
C2/2384: E5 EE        SBC $EE     (Subtracts 1/4 from hit rate)
C2/2386: 85 EE        STA $EE
C2/2388: 68           PLA         
C2/2389: EB           XBA 
C2/238A: A5 EE        LDA $EE     (Hit Rate)
C2/238C: 20 81 47     JSR $4781   (Multiply Evade/Mblock * Hit Rate)
C2/238F: EB           XBA 
C2/2390: 85 EE        STA $EE     (High byte of Evade/Mblock * Hit Rate)
C2/2392: A9 64        LDA #$64
C2/2394: 20 65 4B     JSR $4B65   (Random number 0 to 99)
C2/2397: C5 EE        CMP $EE
C2/2399: 4C B3 22     JMP $22B3

C2/239C check if hit: stamina

C2/239C: B9 55 3B     LDA $3B55,Y (MBlock)
C2/239F: EB           XBA 
C2/23A0: AD A8 11     LDA $11A8   (Hit Rate)
C2/23A3: 20 81 47     JSR $4781   (Multiplication Function)
C2/23A6: EB           XBA 
C2/23A7: 85 EE        STA $EE     (High byte of Mblock * Hit Rate)
C2/23A9: A9 64        LDA #$64    
C2/23AB: 20 65 4B     JSR $4B65   (Random Number 0 to 99)
C2/23AE: C5 EE        CMP $EE
C2/23B0: B0 0C        BCS $23BE   (Attack misses, so exit)
C2/23B2: 20 5A 4B     JSR $4B5A   (Random Number 0 to 255)
C2/23B5: 29 7F        AND #$7F    (0 to 127)
C2/23B7: 85 EE        STA $EE
C2/23B9: B9 40 3B     LDA $3B40,Y (Stamina)
C2/23BC: C5 EE        CMP $EE
C2/23BE: 60           RTS 

C2/23BF check if hit: dog and golem

C2/23BF: 5A           PHY
C2/23C0: AD A2 11     LDA $11A2
C2/23C3: 4A           LSR 
C2/23C4: B0 01        BCS $23C7   (Branch if physical attack)
C2/23C6: C8           INY         (if it was magical, read from 3CE5,old_Y instead)
C2/23C7: 7B           TDC         
C2/23C8: B9 E4 3C     LDA $3CE4,Y (shield/weapon miss animations)
C2/23CB: 05 FE        ORA $FE     (miss due to Interceptor/Golem)
C2/23CD: F0 1C        BEQ $23EB   (Exit function if none of above)
C2/23CF: 20 2A 52     JSR $522A   (Pick a random bit that is set)
C2/23D2: 89 40        BIT #$40
C2/23D4: F0 03        BEQ $23D9   (Branch if no dog protection)
C2/23D6: 8C 83 3A     STY $3A83   (save character target in "Dog blocked" byte)
C2/23D9: 89 20        BIT #$20
C2/23DB: F0 03        BEQ $23E0   (Branch if no Golem protection)
C2/23DD: 8C 82 3A     STY $3A82   (save character target in "Golem blocked" byte)
C2/23E0: 20 F0 51     JSR $51F0   (X = position of highest [and only] bit that is set)
C2/23E3: 98           TYA 
C2/23E4: 4A           LSR 
C2/23E5: A8           TAY         (Y = Y DIV 2, so it won't matter if Y was incremented
                                   above.  it now holds a 0-3 character #.)
C2/23E6: 8A           TXA 
C2/23E7: 1A           INC 
C2/23E8: 99 AA 00     STA $00AA,Y  (save the dodge animation type for this character?)
C2/23EB: 7A           PLY 
C2/23EC: 60           RTS 

C2/23ED unknow

C2/23ED: 08           PHP
C2/23EE: C2 30        REP #$30    (Set 16-bit A, X, & Y)
C2/23F0: A2 58 02     LDX #$0258
C2/23F3: 9E 20 3A     STZ $3A20,X
C2/23F6: 9E 7A 3C     STZ $3C7A,X
C2/23F9: CA           DEX 
C2/23FA: CA           DEX
C2/23FB: 10 F6        BPL $23F3
C2/23FD: 7B           TDC 
C2/23FE: 3A           DEC 
C2/23FF: A2 0E 0A     LDX #$0A0E
C2/2402: 9D 00 20     STA $2000,X
C2/2405: 9D 10 2A     STA $2A10,X
C2/2408: CA           DEX 
C2/2409: CA           DEX 
C2/240A: 10 F6        BPL $2402
C2/240C: 9C 44 2F     STZ $2F44
C2/240F: 9C 4C 2F     STZ $2F4C
C2/2412: 9C 4E 2F     STZ $2F4E
C2/2415: 9C 53 2F     STZ $2F53
C2/2418: 64 B0        STZ $B0
C2/241A: 64 B2        STZ $B2
C2/241C: A2 02 26     LDX #$2602
C2/241F: A0 18 30     LDY #$3018
C2/2422: A9 1B 00     LDA #$001B
C2/2424: 54 7E C2     MVN #$C2,7E
C2/2427: AD 11 E0     LDA $11E0
C2/242B: C9 D7 01     CMP #$01D7  (Check for Short Arm, Long arm, Face formation)
C2/242E: E2 30        SEP #$30    (Set 8-bit A, X & Y)
C2/2430: D0 03        BNE $2435   (branch if it's not 1st tier of final 4-tier
                                   multi-battle)
C2/2432: 9C E0 3E     STZ $3EE0   (zero byte to indicate that we're in the final
                                   4-tier multi-battle)
C2/2435: A2 13        LDX #$13
C2/2437: BD C9 1D     LDA $1DC9,X
C2/243A: 9D B4 3E     STA $3EB4,X
C2/243D: CA           DEX 
C2/243E: 10 F7        BPL $2437
C2/2440: AD 1E 02     LDA $021E
C2/2443: 0A           ASL 
C2/2444: 0A           ASL 
C2/2445: 85 BE        STA $BE
C2/2447: 20 E8 30     JSR $30E8   (Loads battle formation data)
C2/244A: 20 2F 2F     JSR $2F2F
C2/244D: A9 80        LDA #$80
C2/244F: 1C BB 3E     TRB $3EBB
C2/2452: A9 91        LDA #$91
C2/2454: 1C BC 3E     TRB $3EBC
C2/2457: A2 12        LDX #$12
C2/2459: 20 5A 4B     JSR $4B5A   (0 to 255)
C2/245C: 9D F0 3A     STA $3AF0,X (Store random number at $3AF0,X)
C2/245F: A9 BC        LDA #$BC
C2/2461: EC E2 3E     CPX $3EE2
C2/2464: D0 02        BNE $2468
C2/2466: 09 02        ORA #$02
C2/2468: 9D 04 32     STA $3204,X
C2/246B: CA           DEX 
C2/246C: CA           DEX 
C2/246D: 10 EA        BPL $2459
C2/246F: 20 44 25     JSR $2544
C2/2472: AD 4D 1D     LDA $1D4D   (Battle Speed variable from user Configuration.
                                   Note that its actual value ranges from 0 to 5, but
                                   the menu choices the player sees are 1 thru 6.)
C2/2475: 30 03        BMI $247A   (branch if "Short" Command Set)
C2/2477: 9C 2E 2F     STZ $2F2E   (otherwise, it's "Window")
C2/247A: 89 08        BIT #$08    (is "Wait" Battle Mode set?)
C2/247C: F0 03        BEQ $2481   (branch if not, meaning it's Active)
C2/247E: EE 8F 3A     INC $3A8F
C2/2481: 29 07        AND #$07    (bottom 3 bits of Battle Speed)
C2/2483: 0A           ASL 
C2/2484: 0A           ASL 
C2/2485: 0A           ASL 
C2/2486: 85 EE        STA $EE     (Battle Speed * 8)
C2/2488: 0A           ASL         ( * 16)
C2/2489: 65 EE        ADC $EE     (Battle Speed * 24)
C2/248B: 49 FF        EOR #$FF    
C2/248D: 8D 90 3A     STA $3A90   (= 255 - (Battle Speed * 24) )
                                  (this variable is a multiplier which is used for
                                   slowing down enemies in the Battle Time Counter
                                   Function at C2/09D2.  as you can see here and
                                   from experience, a Battle Speed of zero will leave
                                   enemies the fastest.)
C2/2490: AD 4E 1D     LDA $1D4E
C2/2493: 10 03        BPL $2498   (branch if the Gauge is not disabled) 
C2/2495: 9C 21 20     STZ $2021
C2/2498: 9C 41 2F     STZ $2F41
C2/249B: 20 6E 54     JSR $546E
C2/249E: 20 0C 58     JSR $580C
C2/24A1: 20 E1 2E     JSR $2EE1
C2/24A4: 20 91 43     JSR $4391   (Status effects?)
C2/24A7: 20 9B 06     JSR $069B
C2/24AA: A9 14        LDA #$14
C2/24AC: 8D AF 11     STA $11AF
C2/24AF: 20 3F 08     JSR $083F
C2/24B2: 20 B9 4A     JSR $4AB9
C2/24B5: 20 3A 2E     JSR $2E3A
C2/24B8: 20 C9 26     JSR $26C9
C2/24BB: 20 68 2E     JSR $2E68
C2/24BE: 20 75 25     JSR $2575   (Initialize ATB Timers)
C2/24C1: A2 00        LDX #$00
C2/24C3: AD 4B 2F     LDA $2F4B   (extra formation data, byte 3)
C2/24C6: 89 04        BIT #$04
C2/24C8: D0 20        BNE $24EA   (branch if "hide starting messages" set)
C2/24CA: AD 1F 20     LDA $201F   (get encounter type.  0 = front, 1 = back,
                                   2 = pincer, 3 = side)
C2/24CD: C9 01        CMP #$01    
C2/24CF: D0 04        BNE $24D5   (branch if not back attack)
C2/24D1: A2 23        LDX #$23
C2/24D3: 80 15        BRA $24EA
C2/24D5: C9 02        CMP #$02
C2/24D7: D0 04        BNE $24DD   (branch if not pincer attack)
C2/24D9: A2 25        LDX #$25
C2/24DB: 80 0D        BRA $24EA
C2/24DD: C9 03        CMP #$03
C2/24DF: D0 02        BNE $24E3   (branch if not side attack)
C2/24E1: A2 24        LDX #$24
C2/24E3: A5 B0        LDA $B0
C2/24E5: 0A           ASL 
C2/24E6: 10 02        BPL $24EA   (branch if not preemptive attack)
C2/24E8: A2 22        LDX #$22
C2/24EA: 9B           TXY 
C2/24EB: F0 05        BEQ $24F2
C2/24ED: A9 25        LDA #$25
C2/24EF: 20 91 4E     JSR $4E91
C2/24F2: 20 73 5C     JSR $5C73
C2/24F5: 20 54 5C     JSR $5C54
C2/24F8: 64 B8        STZ $B8
C2/24FA: 64 B9        STZ $B9
C2/24FC: A2 06        LDX #$06
C2/24FE: BD 18 30     LDA $3018,X
C2/2501: 2C 2C 3F     BIT $3F2C
C2/2504: F0 16        BEQ $251C    (branch if not Jumping)
C2/2506: BD A0 3A     LDA $3AA0,X
C2/2509: 09 28        ORA #$28
C2/250B: 9D A0 3A     STA $3AA0,X
C2/250E: 9E 19 32     STZ $3219,X  (zero top byte of ATB Timer)
C2/2511: 20 77 4E     JSR $4E77    (put character in action queue)
C2/2514: A9 16        LDA #$16
C2/2516: 8D 7A 3A     STA $3A7A
C2/2519: 20 CB 4E     JSR $4ECB
C2/251C: CA           DEX 
C2/251D: CA           DEX 
C2/251E: 10 DE        BPL $24FE    (loop for all 4 party members)
C2/2520: AD E1 3E     LDA $3EE1
C2/2523: 1A           INC 
C2/2524: F0 19        BEQ $253F
C2/2526: 3A           DEC 
C2/2527: 8D 6F 2D     STA $2D6F
C2/252A: A9 12        LDA #$12
C2/252C: 8D 6E 2D     STA $2D6E
C2/252F: AD 75 3A     LDA $3A75
C2/2532: 8D 71 2D     STA $2D71
C2/2535: A9 FF        LDA #$FF
C2/2537: 8D 70 2D     STA $2D70
C2/253A: 8D 72 2D     STA $2D72
C2/253D: A9 04        LDA #$04
C2/253F: 20 11 64     JSR $6411
C2/2542: 28           PLP 
C2/2543: 60           RTS 

C2/2544 unknow

C2/2544: 20 51 55     JSR $5551
C2/2547: A2 06        LDX #$06
C2/2549: BD D8 3E     LDA $3ED8,X (Which character it is)
C2/254C: 30 22        BMI $2570   (Branch if monster?)
C2/254E: C9 10        CMP #$10
C2/2550: B0 05        BCS $2557
C2/2552: A8           TAY 
C2/2553: 8A           TXA 
C2/2554: 99 00 30     STA $3000,Y
C2/2557: BD 18 30     LDA $3018,X
C2/255A: 0C 8D 3A     TSB $3A8D
C2/255D: BD D9 3E     LDA $3ED9,X
C2/2560: 22 77 0E C2  JSR $C20E77
C2/2564: 20 6D 28     JSR $286D
C2/2567: 20 A8 27     JSR $27A8
C2/256A: 20 8D 56     JSR $568D
C2/256D: 20 2C 53     JSR $532C
C2/2570: CA           DEX 
C2/2571: CA           DEX 
C2/2572: 10 D5        BPL $2549
C2/2574: 60           RTS 

C2/2575 initialize ATB timers

C2/2575: 08           PHP
C2/2576: 64 F3        STZ $F3      (zero General Incrementor)
C2/2578: A0 12        LDY #$12
C2/257A: B9 A0 3A     LDA $3AA0,Y
C2/257D: 4A           LSR 
C2/257E: B0 07        BCS $2587    (branch if entity is present in battle?)
C2/2580: 18           CLC 
C2/2581: A9 10        LDA #$10
C2/2583: 65 F3        ADC $F3
C2/2585: 85 F3        STA $F3      (add 16 to $F3 [our General Incrementor] for
                                    each entity shy of the possible 10)
C2/2587: 88           DEY 
C2/2588: 88           DEY 
C2/2589: 10 EF        BPL $257A    (loop for all 10 characters and monsters)
C2/258B: C2 20        REP #$20     (Set 16-bit accumulator)
C2/258D: A9 FF 03     LDA #$03FF   (10 bits set, 10 possible entities in battle)
C2/2590: 85 F0        STA $F0
C2/2592: A0 12        LDY #$12
C2/2594: A5 F0        LDA $F0
C2/2596: 20 2A 52     JSR $522A   (randomly choose one of the 10 bits [targets])
C2/2599: 14 F0        TRB $F0     (and clear it, so it won't be used for
                                   subsequent iterations of loop)
C2/259B: 20 F0 51     JSR $51F0   (X = bit # of the chosen bit, thus a 0-9
                                   target #)
C2/259E: E2 20        SEP #$20    (Set 8-bit accumulator)
C2/25A0: 8A           TXA 
C2/25A1: 0A           ASL 
C2/25A2: 0A           ASL 
C2/25A3: 0A           ASL 
C2/25A4: 85 F2        STA $F2      (save [0..9] * 8 in our Specific Incrementor)
                                   (the result is that each entity is randomly
                                    assigned a different value for $F2:
                                    0, 8, 16, 24, 32, 40, 48, 56, 64, 72)
C2/25A6: B9 19 32     LDA $3219,Y  (get top byte of ATB Timer)
C2/25A9: 1A           INC 
C2/25AA: D0 4E        BNE $25FA    (skip to next target if it wasn't FFh)
C2/25AC: AD E1 3E     LDA $3EE1    (FFh in every case, except for last 3 tiers
                                    of final 4-tier multi-battle?)
C2/25AF: 1A           INC 
C2/25B0: D0 48        BNE $25FA    (skip to next target if one of those 3 tiers)
C2/25B2: AE 1F 20     LDX $201F    (get encounter type.  0 = front, 1 = back,
                                    2 = pincer, 3 = side)
C2/25B5: B9 18 30     LDA $3018,Y
C2/25B8: 2C 40 3A     BIT $3A40    (is target a character acting as enemy?)
C2/25BB: D0 14        BNE $25D1    (branch if so)
C2/25BD: C0 08        CPY #$08
C2/25BF: B0 10        BCS $25D1    (branch if target is a monster)
C2/25C1: A5 B0        LDA $B0
C2/25C3: 0A           ASL 
C2/25C4: 30 34        BMI $25FA    (skip to next target if Preemptive Attack)
C2/25C6: CA           DEX          (decrement encounter type)
C2/25C7: 30 15        BMI $25DE    (branch if front attack)
C2/25C9: CA           DEX 
C2/25CA: CA           DEX 
C2/25CB: F0 2D        BEQ $25FA    (skip to next target if side attack)
C2/25CD: A5 F2        LDA $F2
C2/25CF: 80 22        BRA $25F3    (it's a back or pincer attack)
                                   (go set top byte of ATB timer to $F2 + 1)
C2/25D1: A5 B0        LDA $B0      (we'll reach here only if target is monster
                                    or character acting as enemy)
C2/25D3: 0A           ASL 
C2/25D4: 30 04        BMI $25DA    (branch if Preemptive Attack)
C2/25D6: E0 03        CPX #$03     (checking encounter type again)
C2/25D8: D0 04        BNE $25DE    (branch if not side attack)
C2/25DA: A9 01        LDA #$01
C2/25DC: 80 15        BRA $25F3    (go set top byte of ATB timer to 2)
C2/25DE: B9 19 3B     LDA $3B19,Y  (A = Speed)
C2/25E1: 20 65 4B     JSR $4B65    (random #: 0 to A - 1)
C2/25E4: 79 19 3B     ADC $3B19,Y  (A = random: Speed to ((2 * Speed) - 1) )
C2/25E7: B0 08        BCS $25F1    (branch if exceeded 255)
C2/25E9: 65 F2        ADC $F2      (add entity's Specific Incrementor, a
                                    0,8,16,24,32,40,48,56,64,72 random boost)
C2/25EB: B0 04        BCS $25F1    (branch if exceeded 255)
C2/25ED: 65 F3        ADC $F3      (add our General Incrementor,
                                    (10 - number of valid entities) * 16 )
C2/25EF: 90 02        BCC $25F3    (branch if byte didn't exceed 255)
C2/25F1: A9 FF        LDA #$FF     (if it overflowed, set it to FFh [255d])
C2/25F3: 1A           INC 
C2/25F4: D0 01        BNE $25F7
C2/25F6: 3A           DEC          (so A is incremented if it was < FFh)
C2/25F7: 99 19 32     STA $3219,Y  (save top byte of ATB timer)
C2/25FA: C2 20        REP #$20
C2/25FC: 88           DEY 
C2/25FD: 88           DEY 
C2/25FE: 10 94        BPL $2594    (loop for all 10 possible characters and
                                    monsters)
C2/2600: 28           PLP 
C2/2601: 60           RTS 

C2/2602 data: unknow

Data to load into $3018 and $3019 
C2/2602: 01 00       
C2/2604: 02 00       
C2/2606: 04 00       
C2/2608: 08 00         
C2/260A: 00 01
C2/260C: 00 02       
C2/260E: 00 04       
C2/2610: 00 08       
C2/2612: 00 10       
C2/2614: 00 20       

Data

C2/2616: 8E
C2/2617: 20
C2/2618: CA
C2/2619: 21
C2/261A: 06
C2/261B: 23
C2/261C: 42
C2/261D: 24

C2/261E unknow

C2/261E: 7B           TDC
C2/261F: A2 5F        LDX #$5F
C2/2621: 9D E4 3E     STA $3EE4,X
C2/2624: CA           DEX 
C2/2625: 10 FA        BPL $2621
C2/2627: 3A           DEC 
C2/2628: A2 0F        LDX #$0F 
C2/262A: 9D D4 3E     STA $3ED4,X
C2/262D: CA           DEX 
C2/262E: 10 FA        BPL $262A
C2/2630: A9 12        LDA #$12
C2/2632: 8D 28 3F     STA $3F28
C2/2635: 8D 24 3F     STA $3F24
C2/2638: 60           RTS 

C2/2639 unknow

C2/2639: 08           PHP
C2/263A: 9C 72 3A     STZ $3A72
C2/263D: 9C 70 3A     STZ $3A70
C2/2640: C2 20        REP #$20
C2/2642: 9C 32 3A     STZ $3A32
C2/2645: 9C 34 3A     STZ $3A34
C2/2648: 9C 30 3A     STZ $3A30
C2/264B: 9C 4E 3A     STZ $3A4E
C2/264E: 28           PLP 
C2/264F: 60           RTS 

C2/2650 change death immunity into death protection

(Turn Death immunity into Instant Death protection by moving it into another byte; otherwise you'd
 be bloody immortal.  If the Poison elemental is nullified, make immune to Poison status.)
C2/2650: BD A1 3A     LDA $3AA1,X
C2/2653: 29 FB        AND #$FB    (Clear protection from "instant death")
C2/2655: EB           XBA 
C2/2656: BD 1C 33     LDA $331C,X (Blocked status byte 1)
C2/2659: 30 06        BMI $2661   (Branch if not block death)
C2/265B: 09 80        ORA #$80    (Clear block death)
C2/265D: EB           XBA 
C2/265E: 09 04        ORA #$04    (Set protection from "instant death")
C2/2660: EB           XBA 
C2/2661: EB           XBA 
C2/2662: 9D A1 3A     STA $3AA1,X
C2/2665: BD CD 3B     LDA $3BCD,X (Nullified elements)
C2/2668: 89 08        BIT #$08
C2/266A: F0 04        BEQ $2670   (Branch if not nullify poison)
C2/266C: EB           XBA 
C2/266D: 29 FB        AND #$FB    (Set block poison status if)
C2/266F: EB           XBA 
C2/2670: EB           XBA 
C2/2671: 9D 1C 33     STA $331C,X
C2/2674: 60           RTS 

C2/2675 check and set status as permanent

(Make some monster or equipment statuses permanent by setting immunity to them:
  Mute, Berserk, Muddled, Seizure, Regen, Slow, Haste, Shell, Safe, Reflect, Float *
 * If Float is only marked in Monster status byte 4, it won't be permanent
   [not to worry; no actual monsters do this].
 Then if you're immune to one status in a "mutually exclusive" pair, make immune to
 the other.  The pairs are Slow/Haste and Seizure/Regen.)
C2/2675: BD 31 33     LDA $3331,X
C2/2678: EB           XBA         (put blocked status byte 4 in top of A)
C2/2679: BD 6D 3C     LDA $3C6D,X (monster/equip status byte 3)
C2/267C: 4A           LSR 
C2/267D: 90 04        BCC $2683   (if perm-float (aka dance) wasn't set, branch)
C2/267F: EB           XBA 
C2/2680: 29 7F        AND #$7F
C2/2682: EB           XBA         (if it^ was, then block float.  thus the permanence)
C2/2683: AD BB 3E     LDA $3EBB
C2/2686: 89 04        BIT #$04
C2/2688: F0 04        BEQ $268E   (branch if we're not in Phunbaba battle #4
                                   [iow, Terra's second Phunbaba meeting])
C2/268A: EB           XBA 
C2/268B: 29 F7        AND #$F7    (if we are, give immunity to Morph to make it permanent)
C2/268D: EB           XBA 
C2/268E: EB           XBA 
C2/268F: 9D 31 33     STA $3331,X (update blocked status #4)
C2/2692: BD 30 33     LDA $3330,X
C2/2695: EB           XBA 
C2/2696: BD 1D 33     LDA $331D,X (A.top=blocked status byte 3, A.btm=blocked status #2)
C2/2699: C2 20        REP #$20
C2/269B: 85 EE        STA $EE
C2/269D: BD 6C 3C     LDA $3C6C,X (monster/equip status bytes 2-3)
C2/26A0: 29 78 EE     AND #$EE78  (Dance, Stop, Sleep, Condemned, Near Fatal, Image will all be 0)
C2/26A3: 49 FF FF     EOR #$FFFF  (now they'll all be 1)
C2/26A6: 25 EE        AND $EE     (SO Blocked Statuses = what you were blocking before, plus
                                   whatever the enemy/equip has.  with the exception of the
                                   above.. which will only be blocked if they were before)
C2/26A8: 89 00 02     BIT #$0200
C2/26AB: F0 05        BEQ $26B2   (if Regen blocked, branch)
C2/26AD: 89 40 00     BIT #$0040
C2/26B0: D0 03        BNE $26B5   (if Seizure isn't blocked, branch)
C2/26B2: 29 BF FD     AND #$FDBF  (SO if either Regen or Seizure is blocked, block both.
                                   should explain Regen failing on Ribbon)
C2/26B5: E2 20        SEP #$20
C2/26B7: 9D 1D 33     STA $331D,X (update blocked status byte #2.  we'll update byte #3 below.)
C2/26BA: EB           XBA         (now examine #3)
C2/26BB: 89 04        BIT #$04
C2/26BD: F0 04        BEQ $26C3   (if Slow blocked, branch)
C2/26BF: 89 08        BIT #$08
C2/26C1: D0 02        BNE $26C5   (if Haste isn't blocked, branch)
C2/26C3: 29 F3        AND #$F3    (SO if either Slow or Haste is blocked, block 'em both.
                                   should explain Slow failing on RunningShoes)
C2/26C5: 9D D0 33     STA $3330,X (update blocked status byte #3)
C2/26C8: 60           RTS

C2/26C9 unknow

C2/26C9: A2 12        LDX #$12    (start from 6th enemy)
C2/26CB: 20 75 26     JSR $2675
C2/26CE: CA           DEX 
C2/26CF: CA           DEX 
C2/26D0: 10 F9        BPL $26CB   (and do function 2675 for everybody in the battle)
C2/26D2: 60           RTS 

C2/26D3 unknow

When called:
A Low = $B5
A High = $B6  (or in some cases like Tools, $B6 appears to hold just the 0-7 Tool index
               rather than the item #.  some of the Item code indirectly puts $3A7D
               in top of A, and i believe that holds the full item number.)

C2/26D3: DA           PHX
C2/26D4: 5A           PHY 
C2/26D5: 48           PHA 
C2/26D6: 64 BA        STZ $BA
C2/26D8: A2 40        LDX #$40
C2/26DA: 86 BB        STX $BB        (default to targeting byte just being
                                      Cursor Start on Enemy)
C2/26DC: A2 00        LDX #$00
C2/26DE: C9 1E        CMP #$1E
C2/26E0: B0 1F        BCS $2701      (branch if command >= 1Eh)
C2/26E2: AA           TAX 
C2/26E3: BF 8A 27 C2  LDA $C2278A,X  (get miscellaneous Command properties byte)
C2/26E7: 48           PHA 
C2/26E8: 29 E1        AND #$E1       (isolate Abort on Characters, Randomize Target, beat on
                                      corpses if no valid targets left, and Exclude Attacker
                                      From Targets properties)
C2/26EA: 85 BA        STA $BA     
C2/26EC: A3 01        LDA $01,S
C2/26EE: 29 18        AND #$18       (now check what will become Can Target Dead/Hidden Entities
                                      and Don't Retarget if Target Invalid)
C2/26F0: 4A           LSR 
C2/26F1: 04 BA        TSB $BA
C2/26F3: 8A           TXA 
C2/26F4: 0A           ASL 
C2/26F5: AA           TAX            (multiply command number by 2)
C2/26F6: BF 01 FE CF  LDA $CFFE01,X  
C2/26FA: 85 BB        STA $BB        (get the command's targeting from some table)
C2/26FC: 68           PLA 
C2/26FD: 29 06        AND #$06       (two second lowest bits from C2/278A determine
                                      what function to call next)
C2/26FF: AA           TAX 
C2/2700: EB           XBA            (now get spell # or miscellaneous index.. ex- it might
                                      indicate the item Number)
C2/2701: FC 82 27     JSR ($2782,X)
C2/2704: 68           PLA 
C2/2705: 7A           PLY 
C2/2706: FA           PLX 
C2/2707: 60           RTS 

C2/2708 unknow

C2/2708: A2 04        LDX #$04
C2/270A: DF 78 27 C2  CMP $C22778,X (is the tool or skean one that uses a spell?)
C2/270E: D0 06        BNE $2716     (if not, branch)
C2/2710: FF 7D 27 C2  SBC $C2277D,X (if yes, subtract constant to determine its spell number)
C2/2714: 80 37        BRA $274D     (see, certain Tools and Skeans just load spells to do their work)

				    (Bio Blaster will use spell 7D, Bio Blast
				     Flash will use spell 7E, Flash
				     Fire Skean will use spell 51h, Fire Skean
				     Water Edge will use spell 52, Water Edge
				     Bolt Edge will use spell 53, Bolt Edge        )

C2/2716: CA           DEX 
C2/2717: 10 F1        BPL $270A     (loop 5 times, provided we didn't jump out of the loop)
C2/2719: 38           SEC           (set Carry.. for check at C2/18BD ??)
C2/271A: 8D 11 34     STA $3411     (save item #)
C2/271D: 20 63 2B     JSR $2B63     (Multiply A by 30)
C2/2720: C2 10        REP #$10      (Set 16-bit X and Y)
C2/2722: AA           TAX 
C2/2723: BF 0E 50 D8  LDA $D8500E,X (Targeting byte)
C2/2727: 85 BB        STA $BB
C2/2729: BF 15 50 D8  LDA $D85015,X (Condition 1 when Item used)
C2/272D: 89 C2        BIT #$C2
C2/272F: D0 04        BNE $2735     (Branch if Death, Zombie, or Petrify set)
C2/2731: A9 08        LDA #$08
C2/2733: 14 BA        TRB $BA       (Clear Can Target Dead/Hidden Entities)
C2/2735: BF 12 50 D8  LDA $D85012,X (equipment spell byte.
                                      Bits 0-5: spell #
                                      Bit 6: cast randomly after weapon strike [handled
                                             elsewhere, shouldn't apply here]
                                      Bit 7: 1 = remove from inventory upon usage, 0 = nope)
C2/2739: E2 10        SEP #$10      (Set 8-bit X and Y)
C2/273B: 60           RTS 


C2/273C: C9 E6        CMP #$E6    (Carry is set if item # >= 230, Sprint Shoes?  i.e. it's
                                   Item type.  Carry won't be set for Equipment Magic)
C2/273E: 20 1A 27     JSR $271A
C2/2741: B0 C4        BCS $2707   (if it's a plain ol' Item, always deduct from inventory,
                                   and don't attempt to save the [meaningless] spell # or
                                   load spell data)
C2/2743: 30 06        BMI $274B   (branch if equipment gets used up when used for Item Magic.
                                   i'm not aware of any equipment this *doesn't* happen with,
                                   though the game supports it.)
C2/2745: EB           XBA 
C2/2746: A9 10        LDA #$10
C2/2748: 04 B1        TSB $B1     (set "don't deplete from Item inventory" flag)
C2/274A: EB           XBA 
C2/274B: 29 3F        AND #$3F    (isolate spell # cast by equipment)
C2/274D: 8D 10 34     STA $3410   (Magic and numerous other commands enter here)
C2/2750: 80 02        BRA $2754   (load spell data for [equipment] magic)


C2/2752: A9 EE        LDA #$EE    (select Spell EEh - Battle)
C2/2754: 20 66 29     JSR $2966   (go load spell data)
C2/2757: A5 BB        LDA $BB     (targeting byte as read from $CFFE01 table?)
C2/2759: 1A           INC        
C2/275A: D0 05        BNE $2761   (branch if it wasn't FF.. if it was, it's null, so we use
                                   the spell byte instead)
C2/275C: AD A0 11     LDA $11A0   (spell aiming byte)
C2/275F: 85 BB        STA $BB
C2/2761: AD A2 11     LDA $11A2   
C2/2764: 48           PHA 
C2/2765: 29 04        AND #$04    (Isolate bit 2.  This spell bit is used for two properties:
                                   Bit 2 of $11A2 will be "Hit only (dead XOR undead) targets",
                                   and Bit 3 of $BA will be "Can Target Dead/Hidden entities".)
C2/2767: 0A           ASL 
C2/2768: 04 BA        TSB $BA     (Sets Can Target Dead/Hidden entities)
C2/276A: A3 01        LDA $01,S   (get $11A2 again)
C2/276C: 29 10        AND #$10    (Randomize target)
C2/276E: 0A           ASL 
C2/276F: 0A           ASL 
C2/2770: 04 BA        TSB $BA     (Sets randomize target)
C2/2772: 68           PLA         (get $11A2 again)
C2/2773: 29 80        AND #$80    (Abort on characters)
C2/2775: 04 BA        TSB $BA     (Sets abort on characters)
C2/2777: 60           RTS 

C2/2778 data: items with related spells: tools and skean

(Data - item numbers of Tools and Skeans that use spells to do a good chunk
 of their work)
C2/2778: A4  (Bio Blaster)
C2/2779: A5  (Flash)
C2/277A: AB  (Fire Skean)
C2/277B: AC  (Water Edge)
C2/277C: AD  (Bolt Edge)

C2/277D data: constants to subtract from C2/2778 table

(Data - constants we subtract from the above item #s to get the numbers
 of the spells they rely on)
C2/277D: 27
C2/277E: 27
C2/277F: 5A
C2/2780: 5A
C2/2781: 5A

C2/2782 pointers

Code Pointers (indexed by bits 1 and 2 of data values below)
C2/2782: 52 27  (Fight, Morph, Revert, Steal, Capture, Runic, Sketch, Control, Leap, Mimic,
                 Row, Def, Jump, GP Rain, Possess)
C2/2784: 3C 27  (Item)
C2/2786: 4D 27  (Magic, SwdTech, Blitz, Lore, Slot, Rage, Dance, X-Magic, Summon, Health,
                 Shock, MagiTek)
C2/2788: 08 27  (Throw, Tools)

C2/278A pointers: commands

(Data - indexed by command # 0 thru 1Dh?)
C2/278A: 20   (Fight)
C2/278B: 1A   (Item)
C2/278C: 04   (Magic)
C2/278D: 18   (Morph)
C2/278E: 18   (Revert)
C2/278F: 00   (Steal)
C2/2790: 20   (Capture)
C2/2791: 24   (SwdTech)
C2/2792: 06   (Throw)
C2/2793: 06   (Tools)
C2/2794: 04   (Blitz)
C2/2795: 18   (Runic)
C2/2796: 04   (Lore)
C2/2797: 80   (Sketch)
C2/2798: 80   (Control)
C2/2799: 04   (Slot)
C2/279A: 04   (Rage)
C2/279B: 80   (Leap)
C2/279C: 18   (Mimic)
C2/279D: 04   (Dance)
C2/279E: 18   (Row)
C2/279F: 18   (Def)
C2/27A0: 21   (Jump)
C2/27A1: 04   (X-Magic)
C2/27A2: 01   (GP Rain)
C2/27A3: 04   (Summon)
C2/27A4: 04   (Health)
C2/27A5: 04   (Shock)
C2/27A6: 81   (Possess)
C2/27A7: 04   (MagiTek)

C2/27A8 unknow

C2/27A8: 08           PHP
C2/27A9: C2 30        REP #$30    (Set 16-bit Accumulator & Index Registers)
C2/27AB: BC 10 30     LDY $3010,X (get offset to character info block)
C2/27AE: B9 09 16     LDA $1609,Y (get current HP)
C2/27B1: 9D F4 3B     STA $3BF4,X (HP)
C2/27B4: B9 0D 16     LDA $160D,Y (get current MP)
C2/27B7: 9D 08 3C     STA $3C08,X (MP)
C2/27BA: B9 0B 16     LDA $160B,Y (get maximum HP)
C2/27BD: 20 3C 28     JSR $283C   (get max HP after equipment/relic boosts)
C2/27C0: C9 10 27     CMP #$2710
C2/27C3: 90 03        BCC $27C8
C2/27C5: A9 0F 27     LDA #$270F  (if it was >= 10000, make it 9999)
C2/27C8: 9D 1C 3C     STA $3C1C,X (Max HP)
C2/27CB: B9 0F 16     LDA $160F,Y (get maximum MP)
C2/27CE: 20 3C 28     JSR $283C   (get max MP after equipment/relic boosts)
C2/27D1: C9 E8 03     CMP #$03E8
C2/27D4: 90 03        BCC $27D9
C2/27D6: A9 E7 03     LDA #$03E7  (if it was >= 1000, make it 999)
C2/27D9: 9D 30 3C     STA $3C30,X (Max MP)
C2/27DC: BD 18 30     LDA $3018,X
C2/27DF: 24 B8        BIT $B8
C2/27E1: F0 15        BEQ $27F8
C2/27E3: BD 1C 3C     LDA $3C1C,X (Max HP)
C2/27E6: 9D F4 3B     STA $3BF4,X (HP)
C2/27E9: BD 30 3C     LDA $3C30,X (Max MP)
C2/27EC: 9D 08 3C     STA $3C08,X (MP)
C2/27EF: B9 14 16     LDA $1614,Y (outside battle statuses 1-2?  from tashibana doc)
                                  (^ statuses correspond to in-battle statuses 1+4)
C2/27F2: 29 2D FF     AND #$FF2D
C2/27F5: 99 14 16     STA $1614,Y  (remove Clear, Petrify, death, zombie..  Colosseum related?)
C2/27F8: BD 6C 3C     LDA $3C6C,X  (monster/equip status bytes 2-3)
C2/27FB: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/27FD: 9D D5 3D     STA $3DD5,X (Status to set byte 2)
C2/2800: 4A           LSR 
C2/2801: 90 08        BCC $280B   (branch if Condemned not marked to be set)
C2/2803: BD 04 32     LDA $3204,X
C2/2806: 29 EF        AND #$EF
C2/2808: 9D 04 32     STA $3204,X (^ if it is going to be set, then turn off Bit 4)
C2/280B: B9 14 16     LDA $1614,Y
C2/280E: 9D D4 3D     STA $3DD4,X (Status to set byte 1)
C2/2811: 89 08        BIT #$08
C2/2813: F0 0A        BEQ $281F   (If not set M-Tek)
C2/2815: A9 1D        LDA #$1D
C2/2817: 8D 20 3F     STA $3F20   (save MagiTek as default last command for Mimic)
C2/281A: A9 83        LDA #$83
C2/281C: 8D 21 3F     STA $3F21   (save Fire Beam as default last attack for Mimic)
                                  (if Gogo uses Mimic before any other character acts in a
                                   battle, he'll normally use Fight.  all i can figure is that
                                   this code is here to make him use Fire Beam instead should
                                   anybody be found to be wearing MagiTek armor -- in the normal
                                   game, we can assume that if anybody's in armor, everybody
                                   [including Gogo] is in it.)

C2/281F: B9 15 16     LDA $1615,Y (outside battle status 2?  corresponds to
                                   in-battle status byte 4)
C2/2822: 29 C0        AND #$C0    (only keep Dog Block and Float)
C2/2824: EB           XBA         (get monster/equip status byte 3)
C2/2825: 4A           LSR         (shift out the lowest bit - Dance)
C2/2826: 90 04        BCC $282C   (branch if Dance aka Permanent Float isn't set)
C2/2828: EB           XBA         
C2/2829: 09 80        ORA #$80    (turn on Float in status byte 4)
C2/282B: EB           XBA 
C2/282C: 0A           ASL         (shift monster/equip status byte 3 back up, zeroing the
                                   lowest bit)
C2/282D: 9D E8 3D     STA $3DE8,X (Status to set byte 3)
C2/2830: EB           XBA 
C2/2831: 9D E9 3D     STA $3DE9,X (Status to set byte 4)
C2/2834: B9 08 16     LDA $1608,Y
C2/2837: 9D 18 3B     STA $3B18,X (Level)
C2/283A: 28           PLP 
C2/283B: 60           RTS 

C2/283C apply equipment boost to HP or MP

(Apply percentage boost to HP or MP.  Bit 14 set = 25% boost,
 Bit 15 set = 50% boost, Both of those bits set = 12.5% boost)
C2/283C: DA           PHX
C2/283D: 0A           ASL 
C2/283E: 2A           ROL 
C2/283F: 85 EE        STA $EE
C2/2841: 2A           ROL 
C2/2842: 2A           ROL         (Bit 15 is now in Bit 2, and Bit 14 is in Bit 1)
C2/2843: 29 06 00     AND #$0006  (isolate Bits 1 and 2)
C2/2846: AA           TAX         (and use them as function pointer)
C2/2847: A5 EE        LDA $EE
C2/2849: 4A           LSR 
C2/284A: 4A           LSR 
C2/284B: 85 EE        STA $EE     (all that crazy shifting was equivalent to
                                   $EE = A AND 16383.  gotta love Square =] )
C2/284D: 7C 59 28     JMP ($2859,X)

C2/2850 generic boost calculation

(Boost A by some fraction, if any)
C2/2850: 7B           TDC      (enter here for A = 0 + $EE)
C2/2851: 4A           LSR      (enter here for A = (A * 1/8) + $EE)
C2/2852: 4A           LSR      (enter here for A = (A * 1/4) + $EE)
C2/2853: 4A           LSR      (enter here for A = (A * 1/2) + $EE)
C2/2854: 18           CLC
C2/2855: 65 EE        ADC $EE
C2/2857: FA           PLX 
C2/2858: 60           RTS 

C2/2859 pointers: boosts formulae

C2/2859: 50 28  (A = A) (technically, A = $EE, but it's the same deal.)
C2/285B: 52 28  (A = A + (A * 1/4) )
C2/285D: 53 28  (A = A + (A * 1/2) )
C2/285F: 51 28  (A = A + (A * 1/8) )

C2/2861 math: A = 255 - (A * 2) + 1

(A = 255 - (A * 2) + 1
 If A was >= 128 to start with, then A = 1.
 If A was 0 to start with, then A ends up as 255.)
C2/2861: 0A           ASL
C2/2862: 90 02        BCC $2866
C2/2864: A9 FF        LDA #$FF
C2/2866: 49 FF        EOR #$FF
C2/2868: 1A           INC 
C2/2869: D0 01        BNE $286C
C2/286B: 3A           DEC 
C2/286C: 60           RTS 

C2/286D initialize battle characters: add equipments proprieties

(Initialize in-battle character properties from equipment properties.
 A lot of the equipment bytes in this function were explained in C2/0E77, C2/0F9A, and C2/10B2,
 so consult those functions.  Terii's Offsets List at http://www.rpglegion.com/ff6/hack/offset2.txt
 is another great resource.)
C2/286D: 0B           PHD
C2/286E: F4 00 11     PEA $1100         (Set direct page register 11 $1100)
C2/2871: 2B           PLD 
C2/2872: A5 C9        LDA $C9 ($11C9)
C2/2874: C9 9F        CMP #$9F          (Moogle Suit in character's Armor slot?)
C2/2876: D0 0B        BNE $2883         (if not, branch)
C2/2878: 8A           TXA
C2/2879: 0A           ASL
C2/287A: 0A           ASL
C2/287B: 0A           ASL
C2/287C: 0A           ASL
C2/287D: A8           TAY
C2/287E: A9 0A        LDA #$0A
C2/2880: 99 AE 2E     STA $2EAE,Y       (Use Mog's sprite?)
C2/2883: 8A           TXA 
C2/2884: 4A           LSR 
C2/2885: A8           TAY 
C2/2886: A5 D8        LDA $D8 ($11D8)
C2/2888: 29 10        AND #$10
C2/288A: 99 6E 2E     STA $2E6E,Y       (store Genji Glove effect.  this variable is used in Bank C1,
                                         apparently to check for Genji Glove's presence when handling
                                         mid-battle equipment changes via the Item menu.)
C2/288D: 18           CLC 
C2/288E: A5 A6        LDA $A6 ($11A6)
C2/2890: 65 A6        ADC $A6 ($11A6)   (add Vigor to itself)
C2/2892: 90 02        BCC $2896         (branch if it's under 256)
C2/2894: A9 FF        LDA #$FF          (else make it 255)
C2/2896: 9D 2C 3B     STA $3B2C,X       (store Vigor * 2)
C2/2899: A5 A4        LDA $A4 ($11A4)   (Speed)
C2/289B: 9D 2D 3B     STA $3B2D,X 
C2/289E: 9D 19 3B     STA $3B19,X
C2/28A1: A5 A2        LDA $A2 ($11A2)   (Stamina)
C2/28A3: 9D 40 3B     STA $3B40,X
C2/28A6: A5 A0        LDA $A0 ($11A0)   (Magic Power)
C2/28A8: 9D 41 3B     STA $3B41,X
C2/28AB: A5 A8        LDA $A8 ($11A8)
C2/28AD: 20 61 28     JSR $2861
C2/28B0: 9D 54 3B     STA $3B54,X      ( 255 - (Evade * 2) + 1 , capped at low of 1 and high of 255 )
C2/28B3: A5 AA        LDA $AA ($11AA)
C2/28B5: 20 61 28     JSR $2861
C2/28B8: 9D 55 3B     STA $3B55,X      ( 255 - (MBlock * 2) + 1 , capped at low of 1 and high of 255 )
C2/28BB: A5 CF        LDA $CF ($11CF)  
C2/28BD: 14 D8        TRB $D8 ($11D8)  (clear Genji Glove effect from "Battle Effects 2" if its bit
                                        was ON in $11CF [i.e. if both hands hold a weapon].  yes, this
                                        reeks of a bug.  likely, they instead wanted the GG effect
                                        cleared only when one or zero hands held a weapon.)
C2/28BF: A5 BC        LDA $BC ($11BC)
C2/28C1: 9D 6C 3C     STA $3C6C,X      (Equipment status byte 2)
C2/28C4: A5 D4        LDA $D4 ($11D4)
C2/28C6: 9D 6D 3C     STA $3C6D,X      (Equipment status byte 3)
C2/28C9: A5 DC        LDA $DC ($11DC)
C2/28CB: 9D 71 3D     STA $3D71,X      (Amount to add to character's "Run Success" variable.  has range
                                        of 2 thru 5.  higher means that, on average, they can run away
                                        quicker from battle.)
C2/28CE: A5 D9        LDA $D9 ($11D9)
C2/28D0: 29 80        AND #$80         (undead bit from relic ring)
C2/28D2: 09 10        ORA #$10         (always set Human for party members)
C2/28D4: 9D 95 3C     STA $3C95,X      (save in "Special Byte 3")
C2/28D7: A5 D5        LDA $D5 ($11D5)
C2/28D9: 0A           ASL              (A = 0, raise attack dmg, double earring, hp+25%, hp+50,
                                        hp+12.5, mp+25, mp+50)  (carry = mp+12.5)
C2/28DA: EB           XBA 
C2/28DB: A5 D6        LDA $D6 ($11D6)
C2/28DD: 0C 6D 3A     TSB $3A6D        (combine with existing "Battle Effects 1" properties)  
C2/28E0: 0A           ASL              (carry = jump continously)
C2/28E1: A5 D7        LDA $D7 ($11D7)
C2/28E3: EB           XBA 
C2/28E4: 6A           ROR              (Top half A [will be $3C45] = $11D7 =
                                        boost steal, single Earring, boost sketch,
                                        boost control, sniper sight, gold hairpin,
                                        economizer, vigor + 50%

                                        Bottom half [will be $3C44] = raise attack dmg,
                                        double Earring, hp+25%, hp+50%, hp+12.5%, mp+25%,
                                        mp+50%, jump continuously.  The HP/MP bonuses
                                        were already read from $11D5 earlier, so they're
                                        essentially junk in $3C44.  All that's read are
                                        Bits 0, 1, and 7.)

C2/28E5: C2 20        REP #$20         (Set 16-bit Accumulator)
C2/28E7: 9D 44 3C     STA $3C44,X
C2/28EA: A5 AC        LDA $AC ($11AC)
C2/28EC: 9D 68 3B     STA $3B68,X      ($3B68 = battle power for 1st hand,
                                        $3B69 = bat pwr for 2nd hand)
C2/28EF: A5 AE        LDA $AE ($11AE)
C2/28F1: 9D 7C 3B     STA $3B7C,X      (hit rate)
C2/28F4: A5 B4        LDA $B4 ($11B4)  
C2/28F6: 9D 34 3D     STA $3D34,X      (random weapon spellcast, for both hands)
C2/28F9: A5 B0        LDA $B0 ($11B0)
C2/28FB: 9D 90 3B     STA $3B90,X      (elemental properties of weapon)
C2/28FE: A5 D8        LDA $D8 ($11D8)
C2/2900: 89 08 00     BIT #$0008       (is Gauntlet bit set?)
C2/2903: D0 05        BNE $290A
C2/2905: A9 40 40     LDA #$4040       (if it's not, turn off 2-hand effect
                                        for both hands)
C2/2908: 14 DA        TRB $DA ($11DA)
C2/290A: A5 DA        LDA $DA ($11DA)
C2/290C: 9D A4 3B     STA $3BA4,X      (save "Weapon effects")
C2/290F: A5 BA        LDA $BA ($11BA)
C2/2911: 9D B8 3B     STA $3BB8,X      (bottom = Defense, top = Magic Defense)
C2/2914: A9 FF FF     LDA #$FFFF
C2/2917: 9D 1C 33     STA $331C,X      (Status Immunity Bytes 1 and 2: character is vulnerable
                                        to everything -- i.e. immune to nothing)
C2/291A: 45 D2        EOR $D2 ($11D2)  (equipment immunities)
C2/291C: 9D 1C 33     STA $331C,X      (for Immunity Bytes 1-2, character is now vulnerable to
                                        whatever the equipment doesn't block)
C2/291F: A5 B6        LDA $B6 ($11B6)
C2/2921: 9D CC 3B     STA $3BCC,X      (bottom = absorbed elements, top = nullified elements)
C2/2924: A5 B8        LDA $B8 ($11B8)   
C2/2926: 9D E0 3B     STA $3BE0,X      (bottom = weak elements, top = 50% resist elements)   
C2/2929: A5 BE        LDA $BE ($11BE)
C2/292B: 9D BC 3C     STA $3CBC,X      (bottom = special action for right hand,
                                        top = special action for left hand)
C2/292E: A5 C6        LDA $C6 ($11C6)  (item # of equipment in both hands)
C2/2930: 9D A8 3C     STA $3CA8,X
C2/2933: A5 CA        LDA $CA ($11CA)  (item # of equipment in both relic slots)
C2/2935: 9D D0 3C     STA $3CD0,X
C2/2938: A5 D0        LDA $D0 ($11D0)
C2/293A: 9D E4 3C     STA $3CE4,X      (deals with weapon and shield animation for blocking
                                        magical and physical attacks)
C2/293D: A5 D8        LDA $D8 ($11D8)
C2/293F: 9D 58 3C     STA $3C58,X      (save "Battle Effects 2")
C2/2942: E2 20        SEP #$20         (Set 8-bit Accumulator)
C2/2944: 1E 21 3A     ASL $3A21,X      (Bit X is set, where X is the actual character # of this
                                        onscreen character.  corresponding bits are set in Items
                                        to see if they're equippable.  shift out the top bit, as
                                        that corresponds to "heavy" merit awardable equipment and
                                        will be set below)
C2/2947: 0A           ASL             
C2/2948: 0A           ASL 
C2/2949: 0A           ASL              (rotate "wearer can equip heavy armor" bit from
                                        Battle Effects 2 into carry bit)
C2/294A: 7E 21 3A     ROR $3A21,X      (now put it in "character # for purposes of equipping" byte)
C2/294D: 2B           PLD 
C2/294E: 4C 50 26     JMP $2650        (deal with Instant Death protection, and Poison elemental
                                        nullification giving immunity to Poison status)


C2/2951: AD A2 11     LDA $11A2
C2/2954: 4A           LSR
C2/2955: BD 41 3B     LDA $3B41,X      (magic power * 1.5)
C2/2958: 90 03        BCC $295D        (Branch if not physical attack)
C2/295A: BD 2C 3B     LDA $3B2C,X      (vigor * 2)
C2/295D: 8D AE 11     STA $11AE
C2/2960: 9C 89 3A     STZ $3A89        (turn off random weapon spellcast)
C2/2963: 4C 21 2C     JMP $2C21

C2/2966 load spell data

(Load spell data)
C2/2966: DA           PHX
C2/2967: 08           PHP 
C2/2968: EB           XBA 
C2/2969: A9 0E        LDA #$0E     
C2/296B: 20 81 47     JSR $4781    (length of spell data * spell #)
C2/296E: C2 31        REP #$31     (Set 16-bit A, X, Y.  Clear carry flag)
C2/2970: 69 C0 6A     ADC #$6AC0   (spells start at 46CC0 ROM offset, or C4/6AC0)
C2/2973: AA           TAX 
C2/2974: A0 A0 11     LDY #$11A0
C2/2977: A9 0D 00     LDA #$000D
C2/297A: 54 7E C4     MVN #$C4,7E  (copy 14 spell bytes into RAM)
C2/297D: E2 20        SEP #$20
C2/297F: 0E A9 11     ASL $11A9    (multiply special effect by 2)
C2/2982: 90 03        BCC $2987   
C2/2984: 9C A9 11     STZ $11A9    (if it exceeded 255, make it 0)
C2/2987: 28           PLP 
C2/2988: FA           PLX 
C2/2989: 60           RTS 

C2/298A load command data

(Loads command data, clears special effect, sets unblockable, sets Level to 0,
 sets Vigor/Mag. Pwr to 0)
C2/298A: AD 7C 3A     LDA $3A7C
C2/298D: 20 D3 26     JSR $26D3
C2/2990: A9 20        LDA #$20
C2/2992: 0C A4 11     TSB $11A4   (Set Unblockable)
C2/2995: 9C A9 11     STZ $11A9   (Clear special effects)
C2/2998: 9C AF 11     STZ $11AF   (Set Level to 0)
C2/299B: 9C AE 11     STZ $11AE   (Set Vigor / M. Power to 0)
C2/299E: 60           RTS 

C2/299F load weapon data

(Load weapon data into attack data.  Also handles Offering, Sniper Sight, etc)
C2/299F: 08           PHP
C2/29A0: BD 2C 3B     LDA $3B2C,X
C2/29A3: 8D AE 11     STA $11AE   (Vigor * 2 / Magic Power)
C2/29A6: 20 21 2C     JSR $2C21
C2/29A9: BD 45 3C     LDA $3C45,X
C2/29AC: 89 10        BIT #$10
C2/29AE: F0 05        BEQ $29B5   (If no Sniper Sight)
C2/29B0: A9 20        LDA #$20
C2/29B2: 0C A4 11     TSB $11A4   (Sets Can't be Dodged)
C2/29B5: A5 B6        LDA $B6
C2/29B7: C9 EF        CMP #$EF
C2/29B9: D0 0C        BNE $29C7   (Branch if not Special)
C2/29BB: BD E4 3E     LDA $3EE4,X
C2/29BE: 89 20        BIT #$20    (Check for Imp status)
C2/29C0: D0 05        BNE $29C7   (if an Imp, branch)
C2/29C2: A9 06        LDA #$06
C2/29C4: 8D 12 34     STA $3412   
C2/29C7: 28           PLP 
C2/29C8: DA           PHX 
C2/29C9: 66 B6        ROR $B6     (if carry was set going into function, this is an
                                   odd-numbered attack of sequence, related to $3A70..
                                   top bit of $B6 will be used in animation:
                                   Clear = right hand, Set = left hand)

C2/29CB: 10 01        BPL $29CE   (if Carry wasn't set, branch and use right hand)
C2/29CD: E8           INX         (if it was, point to left weapon hand)
C2/29CE: BD 68 3B     LDA $3B68,X 
C2/29D1: 8D A6 11     STA $11A6   (Battle Power)
C2/29D4: A9 62        LDA #$62
C2/29D6: 04 B3        TSB $B3     (turn off Always Critical and Gauntlet.  Turn on
                                   ignore attacker row)
C2/29D8: BD A4 3B     LDA $3BA4,X
C2/29DB: 29 60        AND #$60    (isolate "Same damage from back row" and "2-hand" properties)
C2/29DD: 49 20        EOR #$20    (flip "Same damage from back row" to get "Damage affected
                                   by attacker row")
C2/29DF: 14 B3        TRB $B3     (Bit 6 = 0 for Gauntlet [2-hand] and Bit 5 = 0 for
                                   "Damage affected by attacker row")
C2/29E1: BD 90 3B     LDA $3B90,X
C2/29E4: 8D A1 11     STA $11A1   (Element)
C2/29E7: BD 7C 3B     LDA $3B7C,X
C2/29EA: 8D A8 11     STA $11A8   (Hit Rate)
C2/29ED: BD 34 3D     LDA $3D34,X
C2/29F0: 8D 89 3A     STA $3A89   (random weapon spellcast)
C2/29F3: BD BC 3C     LDA $3CBC,X
C2/29F6: 29 F0        AND #$F0
C2/29F8: 4A           LSR 
C2/29F9: 4A           LSR 
C2/29FA: 4A           LSR 
C2/29FB: 8D A9 11     STA $11A9   (Special effect)
C2/29FE: BD A8 3C     LDA $3CA8,X (Get equipment in current hand)
C2/2A01: 1A           INC 
C2/2A02: 85 B7        STA $B7
C2/2A04: FA           PLX 
C2/2A05: BD 58 3C     LDA $3C58,X (Check for offering)
C2/2A08: 4A           LSR 
C2/2A09: 90 10        BCC $2A1B   (Branch if no Offering)
C2/2A0B: A9 20        LDA #$20
C2/2A0D: 0C A4 11     TSB $11A4   (Set Can't be dodged)
C2/2A10: A9 40        LDA #$40
C2/2A12: 04 BA        TSB $BA     (Sets randomize target)
C2/2A14: A9 02        LDA #$02
C2/2A16: 04 B2        TSB $B2     (Set no critical and ignore True Knight)
C2/2A18: 9C 89 3A     STZ $3A89   (Turn off random spellcast)
C2/2A1B: AD A6 11     LDA $11A6
C2/2A1E: F0 16        BEQ $2A36   (Exit if 0 Battle Power)
C2/2A20: E0 08        CPX #$08
C2/2A22: 90 12        BCC $2A36   (Exit if character)
C2/2A24: A9 20        LDA #$20
C2/2A26: 3C E4 3E     BIT $3EE4,X
C2/2A29: F0 0B        BEQ $2A36   (Exit if not Imp)
C2/2A2B: 0A           ASL 
C2/2A2C: 3C 95 3C     BIT $3C95,X (Check for auto critical if Imp)
C2/2A2F: D0 05        BNE $2A36   (If set then exit)
C2/2A31: A9 01        LDA #$01
C2/2A33: 8D A6 11     STA $11A6   (Set Battle Power to 1)
C2/2A36: 60           RTS 

C2/2A37 item usage setup

(Item usage setup.  Used for Items, Skeans, Tools?)
(Going in: A = Item number.
  Carry flag = Command >= 2.  It's set for Magic or Throw or Tools, but not plain Item.)
C2/2A37: DA           PHX
C2/2A38: 08           PHP 
C2/2A39: 48           PHA 
C2/2A3A: DA           PHX 
C2/2A3B: A2 0F        LDX #$0F
C2/2A3D: 9E A0 11     STZ $11A0,X   (zero out all spell data -related bytes)
C2/2A40: CA           DEX 
C2/2A41: 10 FA        BPL $2A3D
C2/2A43: FA           PLX 
C2/2A44: A9 21        LDA #$21
C2/2A46: 8D A2 11     STA $11A2     (Set to ignore defense, physical attack)
C2/2A49: A9 22        LDA #$22
C2/2A4B: 8D A3 11     STA $11A3     (Set attack to retarget if target dead, not reflectable)
C2/2A4E: A9 20        LDA #$20
C2/2A50: 8D A4 11     STA $11A4     (Set to unblockable)
C2/2A53: 90 09        BCC $2A5E     (branch if not Skean or Item Magic or Tools)
C2/2A55: BD 2C 3B     LDA $3B2C,X
C2/2A58: 8D AE 11     STA $11AE     (Vigor * 2 or Magic Power)
C2/2A5B: 20 21 2C     JSR $2C21
C2/2A5E: A3 01        LDA $01,S
C2/2A60: 20 63 2B     JSR $2B63     (Multiply A by 30)
C2/2A63: C2 10        REP #$10      (Set 16-bit X and Y)
C2/2A65: AA           TAX 
C2/2A66: BF 14 50 D8  LDA $D85014,X (Item "HP/MP affected", aka power)
C2/2A6A: 8D A6 11     STA $11A6
C2/2A6D: BF 0F 50 D8  LDA $D8500F,X (Item's element)
C2/2A71: 8D A1 11     STA $11A1
C2/2A74: B0 66        BCS $2ADC     (branch if Skean or Item Magic or Tools)
C2/2A76: A9 01        LDA #$01
C2/2A78: 1C A2 11     TRB $11A2     (Sets to magical attack)
C2/2A7B: BF 1B 50 D8  LDA $D8501B,X (item special action)
C2/2A7F: 0A           ASL 
C2/2A80: B0 05        BCS $2A87     (Branch if top bit set, i.e. no action, usually FFh)
C2/2A82: 69 90        ADC #$90      
C2/2A84: 8D A9 11     STA $11A9     (Else store 90h + (action*2) in special effect)
C2/2A87: C2 20        REP #$20      (set 16-bit accumulator)
C2/2A89: BF 15 50 D8  LDA $D85015,X (Item conditions 1+2 when used)
C2/2A8D: 8D AA 11     STA $11AA
C2/2A90: BF 17 50 D8  LDA $D85017,X (Item conditions 3+4 when used)
C2/2A94: 8D AC 11     STA $11AC
C2/2A97: E2 20        SEP #$20      (Set 8-bit accumulator)
C2/2A99: BF 13 50 D8  LDA $D85013,X (Get Item Properties)
C2/2A9D: 85 FE        STA $FE
C2/2A9F: 06 FE        ASL $FE       (Does it manipulate 1/16th of actual values?)
C2/2AA1: 90 05        BCC $2AA8     (If not ^, branch)
C2/2AA3: A9 80        LDA #$80
C2/2AA5: 0C A4 11     TSB $11A4     (Set bit to take HP at fraction of spell byte 7)
C2/2AA8: 06 FE        ASL $FE
C2/2AAA: 06 FE        ASL $FE
C2/2AAC: 90 05        BCC $2AB3     (If item doesn't remove status conditions, branch)
C2/2AAE: A9 04        LDA #$04     
C2/2AB0: 0C A4 11     TSB $11A4     (Set remove status spell bit)
C2/2AB3: 06 FE        ASL $FE
C2/2AB5: 90 07        BCC $2ABE     (Branch if "restore MP" item bit unset)
C2/2AB7: A9 80        LDA #$80
C2/2AB9: 0C A3 11     TSB $11A3     (Set spell to concern MP)
C2/2ABC: 04 FE        TSB $FE       (And automatically set "restore HP" in item properties,
                                     so MP-related items always try to give MP, not take it)
C2/2ABE: 06 FE        ASL $FE
C2/2AC0: 90 05        BCC $2AC7     (Branch if "restore HP" (or restore MP) bit unset)
C2/2AC2: A9 01        LDA #$01
C2/2AC4: 0C A4 11     TSB $11A4     (Set Heal spell bit)
C2/2AC7: 06 FE        ASL $FE
C2/2AC9: 06 FE        ASL $FE
C2/2ACB: 90 05        BCC $2AD2     (Branch if Item doesn't reverse damage on undead)
C2/2ACD: A9 08        LDA #$08
C2/2ACF: 0C A2 11     TSB $11A2     (Sets Cures undead)
C2/2AD2: AD AA 11     LDA $11AA
C2/2AD5: 10 05        BPL $2ADC     (Branch if not death attack)
C2/2AD7: A9 0C        LDA #$0C
C2/2AD9: 0C A2 11     TSB $11A2     (Sets Cures undead and Hit only (dead XOR undead) targets)

C2/2ADC: A3 01        LDA $01,S
C2/2ADE: C9 AE        CMP #$AE      (Item number 174 - Inviz Edge?)
C2/2AE0: D0 07        BNE $2AE9     (branch if not)
C2/2AE2: A9 10        LDA #$10
C2/2AE4: 0C AA 11     TSB $11AA     (Set Clear effect to attack)
C2/2AE7: 80 09        BRA $2AF2
C2/2AE9: C9 AF        CMP #$AF      (Item number 175 - Shadow Edge?)
C2/2AEB: D0 05        BNE $2AF2     (branch if not)
C2/2AED: A9 04        LDA #$04
C2/2AEF: 0C AB 11     TSB $11AB     (Set Image effect to attack)

(NOTE: special Inviz and Shadow Edge checks are needed because much code
 [including that at C2/2A89 that normally loads statuses] is skipped if we're
 doing Throw or Item Magic)

C2/2AF2: BF 00 50 D8  LDA $D85000,X (Item type)
C2/2AF6: 29 07        AND #$07
C2/2AF8: D0 1C        BNE $2B16     (If item's not a Tool, branch)
C2/2AFA: A9 20        LDA #$20
C2/2AFC: 1C A2 11     TRB $11A2     (Clears ignore defense)
C2/2AFF: 1C A4 11     TRB $11A4     (Clears unblockable)
C2/2B02: BF 15 50 D8  LDA $D85015,X  
C2/2B06: 8D A8 11     STA $11A8     (Get and store hitrate)
C2/2B09: 7B           TDC 
C2/2B0A: A3 01        LDA $01,S   (get item #.  number of first tool [NoiseBlaster] is A3h)
C2/2B0C: 38           SEC 
C2/2B0D: E9 A3        SBC #$A3
C2/2B0F: 29 07        AND #$07   (subtract 163 from item # and use bottom 3 bits to get a
                                  "tool number" of 0-7)
C2/2B11: 0A           ASL        (multiply it by 2 to index table below)
C2/2B12: AA           TAX 
C2/2B13: FC 1A 2B     JSR ($2B1A,X)   (load Tool's miscellaneous effect)
C2/2B16: 68           PLA 
C2/2B17: 28           PLP 
C2/2B18: FA           PLX 
C2/2B19: 60           RTS 

C2/2B1A pointers: tools table

C2/2B1A: 2A 2B     (Noise Blaster)
C2/2B1C: 2F 2B     (Bio Blaster) (do nothing)
C2/2B1E: 2F 2B     (Flash) (do nothing)
C2/2B20: 30 2B     (Chainsaw)
C2/2B22: 53 2B     (Debilitator)
C2/2B24: 4D 2B     (Drill)
C2/2B26: 57 2B     (Air Anchor)
C2/2B28: 5D 2B     (Autocrossbow)

C2/2B2A tools: noiseblaster

C2/2B2A: A9 20        LDA #$20
C2/2B2C: 8D AB 11     STA $11AB   (Set Muddled in attack data)
C2/2B2F: 60           RTS

C2/2B30 tools: chainsaw

C2/2B30: 20 5A 4B     JSR $4B5A   (0 to 255)
C2/2B33: 29 03        AND #$03
C2/2B35: D0 16        BNE $2B4D   (75% chance)
C2/2B37: A9 08        LDA #$08
C2/2B39: 85 B6        STA $B6     (Animation)
C2/2B3B: 9C A6 11     STZ $11A6   (Battle power)
C2/2B3E: A9 80        LDA #$80
C2/2B40: 0C AA 11     TSB $11AA   (Set death status)
C2/2B43: A9 10        LDA #$10    
C2/2B45: 8D A4 11     STA $11A4   (Set stamina can block)
C2/2B48: A9 02        LDA #$02
C2/2B4A: 0C A2 11     TSB $11A2   (Set miss if death prot.)
C2/2B4D: A9 20        LDA #$20
C2/2B4F: 0C A2 11     TSB $11A2   (Set ignore defense)
C2/2B52: 60           RTS 

C2/2B53 tools: debilitator

C2/2B53: A9 AC        LDA #$AC
C2/2B55: 80 02        BRA $2B59   (Set Debilitator effect)

C2/2B57 tools: air anchor

C2/2B57: A9 AE        LDA #$AE    (Add Air Anchor effect)
C2/2B59: 8D A9 11     STA $11A9
C2/2B5C: 60           RTS 

C2/2B5D tools: autocrossbow

C2/2B5D: A9 40        LDA #$40
C2/2B5F: 0C A2 11     TSB $11A2   (Set no split damage)
C2/2B62: 60           RTS 

C2/2B63 math: A = A * 30

C2/2B63: EB           XBA
C2/2B64: A9 1E        LDA #$1E
C2/2B66: 4C 81 47     JMP $4781

C2/2B69 magic damage calculation

$11B0 = (Spell Power * 4) + (Level * Magic Power * Spell Power) / 32
(If Level of 0 is passed, $11B0 = Spell Power)

NOTE: Unlike damage modification functions, this one does NOTHING to make sure damage
doesn't exceed 65535.  That means with a spell like Ultima, a character at level 99
who has reached 140+ Magic Power via Esper bonuses and equipment will do only
triple-digit damage.

C2/2B69: AD AF 11     LDA $11AF   (Level)
C2/2B6C: 85 E8        STA $E8
C2/2B6E: C9 01        CMP #$01
C2/2B70: 7B           TDC         (Clear 16-bit A)
C2/2B71: AD A6 11     LDA $11A6   (Spell Power)
C2/2B74: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/2B76: 90 02        BCC $2B7A   (If Level > 0, Spell Power *= 4)
C2/2B78: 0A           ASL 
C2/2B79: 0A           ASL 
C2/2B7A: 8D B0 11     STA $11B0   (Maximum Damage)
C2/2B7D: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/2B7F: AD AE 11     LDA $11AE   (Magic Power)
C2/2B82: EB           XBA 
C2/2B83: AD A6 11     LDA $11A6   (Spell Power)
C2/2B86: 20 81 47     JSR $4781   (Multiplication Function)
C2/2B89: 20 B7 47     JSR $47B7   (Multiplication Function 2)
C2/2B8C: A9 04        LDA #$04
C2/2B8E: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/2B90: 20 D1 0D     JSR $0DD1   (Divide 24-bit Damage by 32.  [note the
                                   division operates on 4 bytes] )
C2/2B93: 18           CLC 
C2/2B94: 6D B0 11     ADC $11B0   (Maximum Damage)
C2/2B97: 8D B0 11     STA $11B0   (Maximum Damage)
C2/2B9A: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/2B9C: 60           RTS 

C2/2B9D physical damage calculation

Physical Damage Calculation:
X = Determines if monster or player

Results:

For characters:
If Gauntlet equipped, treat Battle Power as 7/4 its normal value.
Attack = Battle Power + (Vigor * 2).  Vigor * 2 is capped at 255. 
$11B0 = Battle Power + ( (Level * Level * Attack) DIV 256 ) * 3/2

For monsters:
Vigor is Random number 56 to 63
Attack = (Battle Power * 4) + Vigor
$11B0 = (Level * Level * Attack) DIV 256

C2/2B9D: AD A2 11     LDA $11A2   (Check if magic attack)
C2/2BA0: 4A           LSR 
C2/2BA1: B0 03        BCS $2BA6
C2/2BA3: 4C 69 2B     JMP $2B69   (Magical Damage Calculation)
C2/2BA6: 08           PHP 
C2/2BA7: AD AF 11     LDA $11AF   (attacker Level)
C2/2BAA: 48           PHA         (save it)
C2/2BAB: 85 E8        STA $E8
C2/2BAD: 7B           TDC 
C2/2BAE: AD A6 11     LDA $11A6   (Battle Power)
C2/2BB1: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/2BB3: E0 08        CPX #$08    (If monster then Battle Power *= 4) 
C2/2BB5: 90 02        BCC $2BB9
C2/2BB7: 0A           ASL 
C2/2BB8: 0A           ASL 
C2/2BB9: 48           PHA 
C2/2BBA: A5 B2        LDA $B2
C2/2BBC: 89 00 40     BIT #$4000
C2/2BBF: D0 0C        BNE $2BCD   (If Gauntlet is not equipped, branch)
C2/2BC1: A3 01        LDA $01,S   (Battle Power *= 7/4)
C2/2BC3: 4A           LSR 
C2/2BC4: 18           CLC 
C2/2BC5: 63 01        ADC $01,S
C2/2BC7: 4A           LSR 
C2/2BC8: 18           CLC 
C2/2BC9: 63 01        ADC $01,S
C2/2BCB: 83 01        STA $01,S   
C2/2BCD: 68           PLA 
C2/2BCE: E2 20        SEP #$20    (Set 8-bit Accumulator)
C2/2BD0: 6D AE 11     ADC $11AE   (add Vigor * 2 if character, or Vigor if monster)
C2/2BD3: EB           XBA 
C2/2BD4: 69 00        ADC #$00    (add carry from the bottom byte of Attack
                                   into the top byte)
C2/2BD6: EB           XBA 
C2/2BD7: 20 B7 47     JSR $47B7   (get 16-bit "Attack" * 8-bit level, and put
                                   24-bit product in Variables $E8 thru $EA)
C2/2BDA: A5 E8        LDA $E8
C2/2BDC: 85 EA        STA $EA     (use top byte of result as temporary variable,
                                   since it's generally 0 anyway.
                                   to see why that's a bad idea, keep reading.)
C2/2BDE: 68           PLA 
C2/2BDF: 85 E8        STA $E8     (get attacker level again)
C2/2BE1: C2 20        REP #$20    (Set 16-bit Accumulator)
C2/2BE3: A5 E9        LDA $E9
C2/2BE5: EB           XBA         (A = bottom two bytes of the first multiplication
                                   result..  typically, we'll always have zero in the
                                   top byte, so we can ignore it.  but with a 255
                                   Battle Power weapon, Gauntlet, and a character at
                                   Level 99 with 128 Vigor, that product WILL need 3
                                   bytes.  failure to use that top byte in our next
                                   multiplication means we'll lose a lot of damage.
                                   BUG!)

C2/2BE6: 20 B7 47     JSR $47B7   (multiply 16-bit result of [Level * Attack] by
                                   our 8-bit level again, and put the new 24-bit
                                   product in Variables $E8 thru $EA.
                                   16-bit A will hold the new product DIV 256.)
C2/2BE9: 8D B0 11     STA $11B0   (Maximum Damage)
C2/2BEC: E0 08        CPX #$08    (If Player then multiply $11B0 by 3/2)
C2/2BEE: B0 2F        BCS $2C1F   (And add Battle Power)
C2/2BF0: AD A6 11     LDA $11A6   (Battle Power)
C2/2BF3: 29 FF 00     AND #$00FF
C2/2BF5: 0A           ASL
C2/2BF7: 6D B0 11     ADC $11B0   (Maximum Damage)
C2/2BFA: 4A           LSR 
C2/2BFB: 18           CLC 
C2/2BFC: 6D B0 11     ADC $11B0   (Maximum Damage)
C2/2BFF: 8D B0 11     STA $11B0   (Maximum Damage)
C2/2C02: BD 58 3C     LDA $3C58,X 
C2/2C05: 4A           LSR 
C2/2C06: 90 03        BCC $2C0B   (Check for offering)
C2/2C08: 4E B0 11     LSR $11B0   (Halves damage)
C2/2C0B: 89 08 00     BIT #$0008
C2/2C0E: F0 0F        BEQ $2C1F   (Check for Genji Glove)
C2/2C10: AD B0 11     LDA $11B0   (Maximum Damage)
C2/2C13: 4A           LSR 
C2/2C14: 4A           LSR 
C2/2C15: 49 FF FF     EOR #$FFFF
C2/2C18: 38           SEC
C2/2C19: 6D B0 11     ADC $11B0   (Maximum Damage)
C2/2C1B: 8D B0 11     STA $11B0   (Subtract 1/4 from Maximum Damage)
C2/2C1F: 28           PLP 
C2/2C20: 60           RTS 

C2/2C21 unknow

C2/2C21: DA           PHX
C2/2C22: AD 17 34     LDA $3417   (get Sketcher)
C2/2C25: 30 01        BMI $2C28   (branch if null)
C2/2C27: AA           TAX         (if there's a valid Sketcher, use their Level
                                   for attack)
C2/2C28: BD 18 3B     LDA $3B18,X (Level)
C2/2C2B: 8D AF 11     STA $11AF   (Level)
C2/2C2E: FA           PLX 
C2/2C2F: 60           RTS 

C2/2C30 unknow

(Coming into function: A = Enemy Number.  Y = in-battle enemy index, should be between
 8 and 18d)
(throughout this function, "main enemy" will mean the enemy referenced by the A and Y
 values that are initially passed to the function.  "loop enemy" will mean the enemy
 currently referenced by the iterator of the loop that compares the main enemy to all
 other enemies in the battle.)
C2/2C30: DA           PHX
C2/2C31: 08           PHP 
C2/2C32: C2 30        REP #$30       (16-bit accumulator and index registers)
C2/2C34: 99 F9 1F     STA $1FF9,Y
C2/2C37: 99 A8 33     STA $33A8,Y
C2/2C3A: 20 71 2D     JSR $2D71      (read enemy command script.  function explicitly
                                      preserves A and X, doesn't seem to touch Y)
C2/2C3D: 0A           ASL 
C2/2C3E: 0A           ASL 
C2/2C3F: 48           PHA
C2/2C40: AA           TAX            (enemy number * 4.  there are 4 bytes for
                                      steal+win slots) 
C2/2C41: BF 00 30 CF  LDA $CF3000,X
C2/2C45: 99 08 33     STA $3308,Y    (enemy steal slots)
C2/2C48: 68           PLA 
C2/2C49: 0A           ASL            (enemy number * 8)
C2/2C4A: 48           PHA 
C2/2C4B: DA           PHX 	       (push enemy number * 4)
C2/2C4C: 5A           PHY 
C2/2C4D: AA           TAX     
C2/2C4E: B9 F9 1F     LDA $1FF9,Y   (get enemy number)
C2/2C51: 99 80 33     STA $3380,Y   (Store it in the name structure.
                                     $3380 is responsible for the listing of enemy
                                     names in battle.  Whatever reads from that
                                     structure ensures there's no duplicates -- e.g.
                                     if there's 2 Leafers, "Leafer" is just displayed once.
                                     And if the code below didn't have bugs,
                                     2 *different* Mag Roaders would yield only one
                                     "Mag Roader" display, as it works in FF6j.)
C2/2C54: 7B           TDC 
C2/2C55: A8           TAY            (Y = 0)
C2/2C56: BF 50 C0 CF  LDA $CFC050,X  (enemy names)
C2/2C5A: 99 F8 00     STA $00F8,Y    (store name in temporary string)
C2/2C5D: E8           INX 
C2/2C5E: E8           INX 
C2/2C5F: C8           INY 
C2/2C60: C8           INY 
C2/2C61: C0 08 00     CPY #$0008   
C2/2C64: 90 F0        BCC $2C56     (loop until 8 characters of name are read)
C2/2C66: A0 12 00     LDY #$0012    (point to last enemy in battle)
C2/2C69: B9 F9 1F     LDA $1FF9,Y   (get number of enemy)
C2/2C6C: 30 28        BMI $2C96     (if 16-bit enemy number is negative, no enemy in slot,
                                     so skip it)
C2/2C6E: 5A           PHY 
C2/2C6F: 0A           ASL 
C2/2C70: 0A           ASL 
C2/2C71: 0A           ASL 
C2/2C72: AA           TAX            (enemy # * 8)
C2/2C73: 7B           TDC 
C2/2C74: A8           TAY            (Y = 0)
C2/2C75: B9 F8 00     LDA $00F8,Y     
C2/2C78: DF 50 C0 CF  CMP $CFC050,X  (compare name in temporary string to name of
                                      loop enemy)
C2/2C7C: 18           CLC 
C2/2C7D: D0 09        BNE $2C88      (if they're not equal, exit loop)
C2/2C7F: E8           INX 
C2/2C80: E8           INX 
C2/2C81: C8           INY 
C2/2C82: C8           INY 
C2/2C83: C0 08 00     CPY #$0008     
C2/2C86: 90 ED        BCC $2C75      (compare all the 1st 8 characters of the names as long
                                      as they keep matching)
C2/2C88: 7A           PLY            (Y points to in-battle index of loop enemy)
C2/2C89: 90 0B        BCC $2C96      (if we exited string comparison early, the names
                                      don't match, so branch)
C2/2C8B: A3 01        LDA $01,S
C2/2C8D: AA           TAX            (retrieve in-battle enemy index passed to function)
C2/2C8E: B9 F9 1F     LDA $1FF9,Y    (number of loop enemy)
C2/2C91: 9D 80 33     STA $3380,X    (If the strings did match, store enemy # of loop
                                      enemy in the "name structure", at the position
                                      of the main enemy.)

                                      This way, all enemies with the same name are
                                      represented by the same enemy # in $3380.  Whatever
                                      mechanism displays the $3380 structure must "detect"
                                      duplicate enemy numbers to avoid listing duplicate
                                      enemy names.

                                      Sadly, none of this works.  Enemy names were
                                      8 characters in FF6j according to Lord J, but 10
                                      characters in FF3us, and this function was unchanged.
                                      This means differing enemies with the same name
                                      (like Mag Roader) will have duplicate listings.
                                      Also, you can make an enemy name be wrongly OMITTED
                                      thru clever renaming and grouping of enemies
                                      (try giving Enemy #0 and #4 the same name --
                                      e.g. "gangster" -- and put Enemy #0 and #5 in a
                                      formation together) or really bad luck.

                                      A patch for this function has been released;
                                      see http://masterzed.cavesofnarshe.com/ )

C2/2C94: 80 07        BRA $2C9D      (we had a match, so exit the crazy loop)
C2/2C96: 88           DEY 
C2/2C97: 88           DEY 
C2/2C98: C0 08 00     CPY #$0008    
C2/2C9B: B0 CC        BCS $2C69      (loop and compare string to all enemies in battle)
C2/2C9D: 7A           PLY
C2/2C9E: FA           PLX
C2/2C9F: 68           PLA 
C2/2CA0: 0A           ASL 
C2/2CA1: 0A           ASL 
C2/2CA2: AA           TAX            (X = enemy # * 4 * 8.  Monster data block at $CF0000
                                      is 32 bytes)

C2/2CA3: BF 05 00 CF  LDA $CF0005,X (bottom = Defense, top = Magic Defense)
C2/2CA7: 99 B8 3B     STA $3BB8,Y
C2/2CAA: BF 0C 00 CF  LDA $CF000C,X (XP)
C2/2CAE: 99 84 3D     STA $3D84,Y
C2/2CB1: BF 0E 00 CF  LDA $CF000E,X (GP)
C2/2CB5: 99 98 3D     STA $3D98,Y
C2/2CB8: AD 46 3A     LDA $3A46
C2/2CBB: 30 27        BMI $2CE4     (branch if there was an enemy formation # switch, and
                                     it designates that the new enemies retain HP and Max HP
                                     from the current formation.)
C2/2CBD: BF 0A 00 CF  LDA $CF000A,X (MP)
C2/2CC1: 99 08 3C     STA $3C08,Y
C2/2CC4: 99 30 3C     STA $3C30,Y
C2/2CC7: BF 08 00 CF  LDA $CF0008,X (HP)
C2/2CCB: 99 F4 3B     STA $3BF4,Y
C2/2CCE: 99 1C 3C     STA $3C1C,Y
C2/2CD1: AD D4 3E     LDA $3ED4   (Battle formation)
C2/2CD4: C9 CF 01     CMP #$01CF  
C2/2CD7: D0 0B        BNE $2CE4   (Branch if not Doom Gaze's formation)
C2/2CD9: 8C FA 33     STY $33FA
C2/2CDC: AD BE 3E     LDA $3EBE   (Doom Gaze's HP)
C2/2CDF: F0 03        BEQ $2CE4
C2/2CE1: 99 F4 3B     STA $3BF4,Y (Set current HP to Doom Gaze's HP)
C2/2CE4: E2 21        SEP #$21    (Set 8-bit Accumulator)
C2/2CE6: B9 1D 3C     LDA $3C1D,Y (High byte of max HP)
C2/2CE9: 4A           LSR         
C2/2CEA: C9 19        CMP #$19    
C2/2CEC: 90 02        BCC $2CF0   
C2/2CEE: A9 17        LDA #$17       (Stamina = (Max HP / 512) + 16. If this number
                                      is greater than 40, then the monster's stamina is
                                      set to 40)
C2/2CF0: 69 10        ADC #$10             
C2/2CF2: 99 40 3B     STA $3B40,Y    (Stamina)
C2/2CF5: BF 01 00 CF  LDA $CF0001,X
C2/2CF9: 99 68 3B     STA $3B68,Y    (Battle Power)
C2/2CFC: BF 1A 00 CF  LDA $CF001A,X
C2/2D00: 99 A8 3C     STA $3CA8,Y    (Monster's regular weapon graphic)
C2/2D03: BF 03 00 CF  LDA $CF0003,X  (Evade)
C2/2D07: 20 61 28     JSR $2861
C2/2D0A: 99 54 3B     STA $3B54,Y    (255 - Evade * 2 + 1)
C2/2D0D: BF 04 00 CF  LDA $CF0004,X  (MBlock)
C2/2D11: 20 61 28     JSR $2861
C2/2D14: 99 55 3B     STA $3B55,Y    (255 - MBlock * 2 + 1)
C2/2D17: BF 02 00 CF  LDA $CF0002,X
C2/2D1B: 99 7C 3B     STA $3B7C,Y    (Hit Rate)
C2/2D1E: BF 10 00 CF  LDA $CF0010,X
C2/2D22: 99 18 3B     STA $3B18,Y    (Level)
C2/2D25: BF 00 00 CF  LDA $CF0000,X
C2/2D29: 99 19 3B     STA $3B19,Y    (Speed)
C2/2D2C: BF 07 00 CF  LDA $CF0007,X  (Magic Power)
C2/2D30: 20 D6 47     JSR $47D6      (* 1.5)
C2/2D33: 99 41 3B     STA $3B41,Y    (Magic Power)
C2/2D36: BF 1E 00 CF  LDA $CF001E,X  (monster status byte 4?)
C2/2D3A: 29 82        AND #$82       (only keep float and enemy runic?)
C2/2D3C: 19 4C 3E     ORA $3E4C,Y
C2/2D3F: 99 4C 3E     STA $3E4C,Y    (turn them on in Retort/Runic/etc byte)
C2/2D42: BF 13 00 CF  LDA $CF0013,X
C2/2D46: 99 80 3C     STA $3C80,Y    (Special Byte 2)
C2/2D49: 20 C1 2D     JSR $2DC1      (load enemy elemental reactions, statuses and
                                      status protection, metamorph info, special info
                                      like human/undead/etc)
C2/2D4C: BE A8 33     LDX $33A8,Y
C2/2D4F: BF C0 37 CF  LDA $CF37C0,X  (get Enemy Special Move graphic)  
C2/2D53: 99 81 3C     STA $3C81,Y    
C2/2D56: E2 10        SEP #$10
C2/2D58: 20 99 2D     JSR $2D99      (Carry will be set if the monster is present and has
                                      the "Attack First" attribute, clear otherwise)
C2/2D5B: 7B           TDC 
C2/2D5C: 6A           ROR 
C2/2D5D: 04 B1        TSB $B1        (if Carry is set, turn on Bit 7 of $B1)
C2/2D5F: 20 5A 4B     JSR $4B5A
C2/2D62: 29 07        AND #$07       (random number: 0-7)
C2/2D64: 18           CLC 
C2/2D65: 69 38        ADC #$38       (add 56)
C2/2D67: 99 2C 3B     STA $3B2C,Y    (save monster Vigor as a random number from 56 to 63)
C2/2D6A: BB           TYX 
C2/2D6B: 20 50 26     JSR $2650   (deal with Instant Death protection, and Poison elemental
                                   nullification giving immunity to Poison status)
C2/2D6E: 28           PLP 
C2/2D6F: FA           PLX 
C2/2D70: 60           RTS 

C2/2D71 read command script at start of combat

Read command script at start of combat
A = Monster number
C2/2D71: DA           PHX
C2/2D72: 48           PHA 
C2/2D73: 08           PHP 
C2/2D74: C2 20        REP #$20
C2/2D76: 0A           ASL 
C2/2D77: AA           TAX 
C2/2D78: BF 00 84 CF  LDA $CF8400,X  (Monster command script pointers)
C2/2D7C: 99 54 32     STA $3254,Y    (Index into main command script)
C2/2D7F: AA           TAX 
C2/2D80: E2 20        SEP #$20
C2/2D82: 20 43 1A     JSR $1A43      (Read command script, up through an FEh or FFh
                                      command)
C2/2D85: 1A           INC 
C2/2D86: D0 FA        BNE $2D82      (If FFh wasn't the last thing read, we're not at
                                      end of main command script, so loop and read more)
C2/2D88: BF 00 87 CF  LDA $CF8700,X  (Monster command scripts)
C2/2D8C: 1A           INC 
C2/2D8D: F0 06        BEQ $2D95      (if first byte of counterattack script is FFh, it's
                                      empty, so skip saving the index)
C2/2D8F: C2 20        REP #$20       (Set 16-bit Accumulator)
C2/2D91: 8A           TXA 
C2/2D92: 99 68 32     STA $3268,Y    (Index into counterattack script)
C2/2D95: 28           PLP 
C2/2D96: 68           PLA 
C2/2D97: FA           PLX 
C2/2D98: 60           RTS 

C2/2D99 unknow

C2/2D99: DA           PHX
C2/2D9A: BB           TYX 
C2/2D9B: 20 A0 2D     JSR $2DA0
C2/2D9E: FA           PLX 
C2/2D9F: 60           RTS 

C2/2DA0 handle "attack first" property for monsters

(Handle "Attack First" property for monster)
(Also, returns Carry clear if Attack First unset, Carry set if it's set.)
C2/2DA0: 18           CLC 
C2/2DA1: BD 80 3C     LDA $3C80,X
C2/2DA4: 89 02        BIT #$02     (is "Attack First" set in Misc/Special enemy byte?)
C2/2DA6: F0 18        BEQ $2DC0    (if not, exit)
C2/2DA8: BD A0 3A     LDA $3AA0,X
C2/2DAB: 89 01        BIT #$01
C2/2DAD: F0 11        BEQ $2DC0    (exit if enemy not present?)
C2/2DAF: 09 08        ORA #$08
C2/2DB1: 9D A0 3A     STA $3AA0,X
C2/2DB4: 9E 19 32     STZ $3219,X  (zero top byte of ATB Timer)
C2/2DB7: A9 FF        LDA #$FF
C2/2DB9: 9D B5 3A     STA $3AB5,X  (max out top byte of enemy's Wait Timer, which
                                    means they'll spend essentially no time in
                                    the monster equivalent to a ready stance.
                                    normally, monsters do this by having a 0 "Time to
                                    Wait" in $322C, but since this function is doing
                                    things earlier and $322C is still FFh, we instead
                                    fill out the timer to meet the threshold.) 
C2/2DBC: 20 66 4E     JSR $4E66    (put monster in the Wait to Attack queue)
C2/2DBF: 38           SEC 
C2/2DC0: 60           RTS 

C2/2DC1 unknow

C2/2DC1: 08           PHP
C2/2DC2: BF 1F 00 CF  LDA $CF001F,X  (Special attack)
C2/2DC6: 99 2D 32     STA $322D,Y
C2/2DC9: BF 19 00 CF  LDA $CF0019,X  (elemental weaknesses)
C2/2DCD: 19 E0 3B     ORA $3BE0,Y
C2/2DD0: 99 E0 3B     STA $3BE0,Y
C2/2DD3: BF 16 00 CF  LDA $CF0016,X  (blocked status byte 3)
C2/2DD7: 49 FF        EOR #$FF       (invert it)
C2/2DD9: 39 30 33     AND $3330,Y
C2/2DDC: 99 30 33     STA $3330,Y
C2/2DDF: A9 FF        LDA #$FF
C2/2DE1: 39 31 33     AND $3331,Y
C2/2DE4: 99 31 33     STA $3331,Y
C2/2DE7: C2 20        REP #$20       (Set 16-bit Accumulator)
C2/2DE9: BF 1B 00 CF  LDA $CF001B,X  (monster status bytes 1-2)
C2/2DED: 99 D4 3D     STA $3DD4,Y    (copy into "status to set" bytes)
C2/2DF0: BF 1D 00 CF  LDA $CF001D,X  (get monster status bytes 3-4)
C2/2DF4: 48           PHA 
C2/2DF5: 29 01 00     AND #$0001  
C2/2DF8: 4A           LSR         
C2/2DF9: 6A           ROR  	  
C2/2DFA: 03 01        ORA $01,S    (this moves Byte 3,Bit 0 into Byte 4,Bit 7 position)
                                   (it turns out "Dance" in B3,b0 is permanent float,
                                    while B4,b7 is a dispellable float)
C2/2DFC: 29 FE 84     AND #$84FE   (filter out character stats like dog and rage)
                                   (in byte 4, only Float and Life 3 are kept)		   
C2/2DFF: 99 E8 3D     STA $3DE8,Y  (put in "status to set")
C2/2E02: 68           PLA
C2/2E03: EB           XBA         (now swap enemy status bytes 3<->4 within A)
C2/2E04: 4A           LSR         
C2/2E05: 90 09        BCC $2E10   (if byte4, bit 0 (aka "Rage") had not been set, branch)
C2/2E07: B9 58 3C     LDA $3C58,Y 
C2/2E0A: 09 40 00     ORA #$0040     (Set True Knight effect?)
C2/2E0D: 99 58 3C     STA $3C58,Y
C2/2E10: BF 1C 00 CF  LDA $CF001C,X  (monster status bytes 2-3)
C2/2E14: 19 6C 3C     ORA $3C6C,Y    (this makes a copy of ^, used in procs like c2/2675)
C2/2E17: 99 6C 3C     STA $3C6C,Y
C2/2E1A: BF 14 00 CF  LDA $CF0014,X  (blocked status bytes 1-2)
C2/2E1E: 49 FF FF     EOR #$FFFF     (invert 'em)
C2/2E21: 39 1C 33     AND $331C,Y
C2/2E24: 99 1C 33     STA $331C,Y
C2/2E27: BF 17 00 CF  LDA $CF0017,X  (elements absorbed and nullified)
C2/2E2B: 19 CC 3B     ORA $3BCC,Y
C2/2E2E: 99 CC 3B     STA $3BCC,Y
C2/2E31: BF 11 00 CF  LDA $CF0011,X
C2/2E35: 99 94 3C     STA $3C94,Y    ($3C94 = Metamorph info
                                      $3C95 = Special Byte 3:
                                       Dies at 0 MP, No name, Human, Auto critical if Imp,
                                       Undead)
C2/2E38: 28           PLP 
C2/2E39: 60           RTS

C2/2E3A determine front, back, pincer or side attack

C2/2E3A: AD 6D 3A     LDA $3A6D
C2/2E3D: 4A           LSR  
C2/2E3E: 4A           LSR        (Put Back Guard effect into Carry)
C2/2E3F: AD 48 2F     LDA $2F48  (Get extra enemy formation data, byte 0, top half, inverted)
C2/2E42: 90 0C        BCC $2E50  (Branch if no Back Guard)
C2/2E44: 89 B0        BIT #$B0   (Are Side, Back, or Normal attacks allowed?)
C2/2E46: F0 02        BEQ $2E4A  (If only Pincer or nothing[??] allowed, branch)
C2/2E48: 29 B0        AND #$B0   (Otherwise, disable Pincer)
C2/2E4A: 89 D0        BIT #$D0   (Are Side, Pincer, or Normal attacks allowed?)
C2/2E4C: F0 02        BEQ $2E50  (If only Back or nothing[??] allowed, branch)
C2/2E4E: 29 D0        AND #$D0   (Otherwise, disable Back)
C2/2E50: 48           PHA 
C2/2E51: AD 76 3A     LDA $3A76  (Number of characters in party)
C2/2E54: C9 03        CMP #$03
C2/2E56: 68           PLA 
C2/2E57: B0 06        BCS $2E5F  (If 3 or more in party, branch)
C2/2E59: 89 70        BIT #$70   (Are any of Normal, Back, or Pincer allowed?)
C2/2E5B: F0 02        BEQ $2E5F  (If only Side or nothing[??] allowed, branch)
C2/2E5D: 29 70        AND #$70   (Otherwise, disable Side attack)
C2/2E5F: A2 10        LDX #$10
C2/2E61: 20 47 52     JSR $5247  (Randomly choose attack type.  If some fictional jackass
                                  masked them all, we enter an.. INFINITE LOOP!)
C2/2E64: 8E 1F 20     STX $201F  (Save encounter type:  0 = Front, 1 = Back,
                                                        2 = Pincer, 3 = Side)
C2/2E67: 60           RTS 

C2/2E68 unknow

C2/2E68: AE 1F 20     LDX $201F    (get encounter type:  0 = front, 1 = back,
                                    2 = pincer, 3 = side)
C2/2E6B: E0 00        CPX #$00
C2/2E6D: F0 05        BEQ $2E74    (if front attack, branch)
C2/2E6F: A9 01        LDA #$01
C2/2E71: 1C E4 11     TRB $11E4
C2/2E74: 8A           TXA 
C2/2E75: 0A           ASL         
C2/2E76: AA           TAX           (multiply encounter type by 2, so it acts as index
                                     into function pointers)
C2/2E77: FC 93 2E     JSR ($2E93,X) (Change rows for pincer and back, see if preemptive attack)
C2/2E7A: A2 06        LDX #$06
C2/2E7C: DA           PHX 
C2/2E7D: BD A1 3A     LDA $3AA1,X
C2/2E80: 29 20        AND #$20      (Check row)
C2/2E82: 48           PHA 
C2/2E83: 8A           TXA 
C2/2E84: 0A           ASL 
C2/2E85: 0A           ASL 
C2/2E86: 0A           ASL 
C2/2E87: 0A           ASL 
C2/2E88: AA           TAX 
C2/2E89: 68           PLA 
C2/2E8A: 9D C5 2E     STA $2EC5,X
C2/2E8D: FA           PLX 
C2/2E8E: CA           DEX 
C2/2E8F: CA           DEX 
C2/2E90: 10 EA        BPL $2E7C
C2/2E92: 60           RTS 

C2/2E93 pointers: normal, back, pincer or side attack

(Pointers to functions that do stuff based on battle formation)
C2/2E93: 9B 2E     (Normal attack)
C2/2E95: CE 2E     (Back attack)
C2/2E97: C1 2E     (Pincer attack)
C2/2E99: 9B 2E     (Side attack)

C2/2E9B preemptive attack

(Determines if a battle is a preemptive attack)
(Preemptive attack chance = 1 in 8 for normal attacks, 7 in 32 for side attacks)
(Gale Hairpin doubles chance)
C2/2E9B: A5 B1        LDA $B1
C2/2E9D: 30 21        BMI $2EC0   (Exit function if bit 7 of $B1 is set)    
C2/2E9F: AD 4B 2F     LDA $2F4B   (load formation data, byte 3)
C2/2EA2: 89 04        BIT #$04    (is "hide starting messages" set?)
C2/2EA4: D0 1A        BNE $2EC0   (branch if so)
C2/2EA6: 8A           TXA         (coming in, X is 0 or 6)
C2/2EA7: 0A           ASL 
C2/2EA8: 0A           ASL 
C2/2EA9: 09 20        ORA #$20
C2/2EAB: 85 EE        STA $EE     ($EE = $201F * 8 + #$20.  so pre-emptive
                                   rate is #$20 or #$38.)
C2/2EAD: AD 6D 3A     LDA $3A6D
C2/2EB0: 4A           LSR 
C2/2EB1: 90 02        BCC $2EB5   (Branch if no gale hairpin equipped)
C2/2EB3: 06 EE        ASL $EE     (Double chance of preemptive attack)
C2/2EB5: 20 5A 4B     JSR $4B5A   (random number 0 to 255)
C2/2EB8: C5 EE        CMP $EE     (compare it against pre-emptive rate)
C2/2EBA: B0 04        BCS $2EC0   (Branch if random number >= $EE, meaning
                                   no pre-emptive strike)
C2/2EBC: A9 40        LDA #$40
C2/2EBE: 04 B0        TSB $B0     (Set preemptive attack)
C2/2EC0: 60           RTS 

C2/2E61 pincer attack

(Sets all characters to front row for pincer attacks)
C2/2EC1: A2 06        LDX #$06
C2/2EC3: A9 DF        LDA #$DF
C2/2EC5: 20 43 0A     JSR $0A43   (Sets character X to front row, by clearing
                                   Bit 5 of $3AA1,X)
C2/2EC8: CA           DEX 
C2/2EC9: CA           DEX 
C2/2ECA: 10 F7        BPL $2EC3   (loop for all 4 characters)
C2/2ECC: 80 0E        BRA $2EDC

C2/2ECE back attacks

(Switches character's row placement for back attacks)
C2/2ECE: A2 06        LDX #$06
C2/2ED0: BD A1 3A     LDA $3AA1,X
C2/2ED3: 49 20        EOR #$20
C2/2ED5: 9D A1 3A     STA $3AA1,X (Toggle Row)
C2/2ED8: CA           DEX 
C2/2ED9: CA           DEX 
C2/2EDA: 10 F4        BPL $2ED0   (loop for all 4 characters)
C2/2EDC: A9 20        LDA #$20
C2/2EDE: 04 B1        TSB $B1
C2/2EE0: 60           RTS 

C2/2EE1 unknow

C2/2EE1: 08           PHP 
C2/2EE2: C2 10        REP #$10      (Set 16-bit X and Y)
C2/2EE4: AD 45 3F     LDA $3F45     (get enemy presence byte from monster formation data)
C2/2EE7: A2 0A 00     LDX #$000A    
C2/2EEA: 0A           ASL
C2/2EEB: 0A           ASL           (move 6 relevant bits into top of byte, as there's
                                     only 6 possible enemies)
C2/2EEC: 9E A8 3A     STZ $3AA8,X   (mark enemy as absent to start)
C2/2EEF: 0A           ASL
C2/2EF0: 3E A8 3A     ROL $3AA8,X   ($3AA8 = 1 for present enemy, 0 for absent)
C2/2EF3: CA           DEX
C2/2EF4: CA           DEX
C2/2EF5: 10 F5        BPL $2EEC     (loop for all 6 enemies)
C2/2EF7: AD 52 3F     LDA $3F52     (get boss switches byte of monster formation data)
C2/2EFA: 0A           ASL
C2/2EFB: 0A           ASL	      (move 6 relevant bits into top of byte)
C2/2EFC: 85 EE        STA $EE       
C2/2EFE: A2 05 00     LDX #$0005   
C2/2F01: A0 12 00     LDY #$0012   (Y = onscreen index of enemy, should be between
                                    8 and 18d)
C2/2F04: 7B           TDC
C2/2F05: 0E 73 3A     ASL $3A73   (prepare to set next bit for which monsters are in
                                   template/formation.  this is initialized to 0
                                   at C2/23F3.)
C2/2F08: 06 EE        ASL $EE     (get boss bit for current enemy)
C2/2F0A: 2A           ROL
C2/2F0B: EB           XBA         (save boss bit in top of A)
C2/2F0C: AD 97 3A     LDA $3A97    (colosseum related??  it's decremented elsewhere
                                    -- decremented from WHAT, i dunno -- if the enemy
                                    formation is >=574.  574 is "shadow at colosseum",
                                    and setting 575 with FF3usME plunges Terra into
                                    a Colosseum style battle with Guard.)
C2/2F0F: 0A           ASL
C2/2F10: BD 46 3F     LDA $3F46,X  (get enemy number from monster formation data)
C2/2F13: 90 05        BCC $2F1A    (if top bit of $3A97 was unset, branch)
C2/2F15: AD 06 02     LDA $0206    (some enemy number passed from somewhere else?????
                                    Bank C3 seems to use this address...  probably
                                    passed by Colosseum setup)
C2/2F18: 80 04        BRA $2F1E    (the Colosseum only supports enemies 0-255, so branch
                                    immediately to check the boss bit, since we know
                                    any enemy # > 256 is unacceptable.)
C2/2F1A: C9 FF        CMP #$FF    
C2/2F1C: D0 04        BNE $2F22    (branch if bottom byte of enemy # isn't 255.  if it
                                    is 255, it might be empty.) 
C2/2F1E: EB           XBA
C2/2F1F: D0 07        BNE $2F28    (if the boss bit is set, the enemy slot's empty, and we
                                    skip its stats.  otherwise it's Pugs, and it's valid.)
C2/2F21: EB           XBA
C2/2F22: 20 30 2C     JSR $2C30    (load enemy name and stats)
C2/2F25: EE 73 3A     INC $3A73    (which monsters are in template/formation?  turn on
                                    bit for the current enemy index.)
C2/2F28: 88           DEY
C2/2F29: 88           DEY
C2/2F2A: CA           DEX
C2/2F2B: 10 D7        BPL $2F04    (loop for all 6 enemies)
C2/2F2D: 28           PLP
C2/2F2E: 60           RTS

C2/2F2F unknow

C2/2F2F: 08           PHP
C2/2F30: C2 10        REP #$10    (Set 16-bit X & Y)
C2/2F32: 64 FC        STZ $FC
C2/2F34: 64 B8        STZ $B8
C2/2F36: AD E0 3E     LDA $3EE0
C2/2F39: D0 3A        BNE $2F75    (branch if not in final 4-tier multi-battle?
                                    completely guessing here.)
C2/2F3B: A2 00 00     LDX #$0000   (start looking at first character)
C2/2F3E: A9 FF        LDA #$FF
c2/2F40: 9D D9 3E     STA $3ED9,X
C2/2F43: DD D8 3E     CMP $3ED8,X  (Which character it is)
C2/2F46: D0 24        BNE $2F6C    (if character # was actually defined, don't use the
                                    list to determine this character)
C2/2F48: A0 00 00     LDY #$0000
C2/2F4B: B9 05 02     LDA $0205,Y  (get some character index from preferred order list
                                    set pre-battle?)
C2/2F4E: C9 FF        CMP #$FF
C2/2F50: F0 14        BEQ $2F66    (if no character in slot, skip to next one)
C2/2F52: EB           XBA 
C2/2F53: A9 FF        LDA #$FF
C2/2F55: 99 05 02     STA $0205,Y  (null out the entry from the pre-chosen list)
C2/2F58: A9 25        LDA #$25
C2/2F5A: 20 81 47     JSR $4781    (multiply by 37, size of character info block)
C2/2F5D: A8           TAY 
C2/2F5E: B9 00 16     LDA $1600,Y  (get actual character #)
C2/2F61: 9D D8 3E     STA $3ED8,X  (save Which character it is)
C2/2F64: 80 06        BRA $2F6C    (we've found our party member, so exit loop,
                                    and move onto next party slot.)
C2/2F66: C8           INY          (check next character)
C2/2F67: C0 0C 00     CPY #$000C
C2/2F6A: 90 DF        BNE $2F4B    (loop for all 12 preferred character slots)
C2/2F6C: E8           INX
C2/2F6D: E8           INX
C2/2F6E: E0 08 00     CPX #$0008
C2/2F71: 90 CB        BCC $2F3E   (loop for all 4 party members)
C2/2F73: 80 64        BRA $2FD9   (since we're in the final battle, we know we're not
                                   in the Colosseum or on the Veldt, so skip those
                                   checks.  also skip the party initialization loop
                                   at C2/2F8C.)
C2/2F75: AE D4 3E     LDX $3ED4   (Battle formation)
C2/2F78: E0 3E 02     CPX #$023E  (Shadow at Colosseum formation)
C2/2F7B: 90 0F        BCC $2F8C   (if not ^ or Colosseum formation #575, branch)
C2/2F7D: AD 08 02     LDA $0208    
C2/2F80: 8D D8 3E     STA $3ED8   (Set "Which Character this is" to our chosen
                                   combatant.)
C2/2F83: A9 01        LDA #$01
C2/2F85: 04 B8        TSB $B8
C2/2F87: CE 97 3A     DEC $3A97   (set $3A97 to FFh.  future checks will look at Bit 7
                                   to determine we're in the Colosseum.)
C2/2F8A: 80 4D        BRA $2FD9   (we're in the Colosseum using a single character
                                   to fight, so skip the party initialization loop.)
C2/2F8C: A0 0F 00     LDY #$000F
C2/2F8F: B9 50 18     LDA $1850,Y (get character roster information)
                                  (Bit 7: 1 = party leader, as set in non-overworld areas
                                   Bit 6: ??
                                   Bit 5: row, 0 = front, 1 = back
                                   Bit 3-4: position in party, 0-3
                                   Bit 0-2: which party in)
C2/2F92: 85 FE        STA $FE
C2/2F94: 29 07        AND #$07    (isolate which party character is in.  don't know
                                   why it takes 3 bits rather than 2.)
C2/2F96: CD 6D 1A     CMP $1A6D   (compare to Which Party is Active)
C2/2F99: D0 12        BNE $2FAD   (branch if not equal)
C2/2F9B: 5A           PHY 
C2/2F9C: E6 FC        INC $FC     (increment count of characters in active party)
C2/2F9E: 7B           TDC 
C2/2F9F: A5 FE        LDA $FE
C2/2FA1: 29 18        AND #$18    (isolate the position of character in party)
C2/2FA3: 4A           LSR 
C2/2FA4: 4A           LSR 
C2/2FA5: AA           TAX         (convert to a 0,2,4,6 index)
C2/2FA6: 20 DC 30     JSR $30DC
C2/2FA9: 9D D8 3E     STA $3ED8,X  (save "which character it is")
C2/2FAC: 7A           PLY 
C2/2FAD: 88           DEY 
C2/2FAE: 10 DF        BPL $2F8F
C2/2FB0: AD DF 1E     LDA $1EDF
C2/2FB3: 89 08        BIT #$08    (is Gau enlisted and not Leapt?)
C2/2FB5: D0 0C        BNE $2FC3   (branch if so)
C2/2FB7: AD 4B 3F     LDA $3F4B   (get monster index of enemy #6 in formation)
C2/2FBA: 1A           INC 
C2/2FBB: D0 06        BNE $2FC3  (branch if an enemy is in the slot.  thankfully, there's
                                  no formation with Pugs [enemy #255] in Slot #6, as this
                                  code makes no distinction between that and a nonexistent
                                  enemy.  one problem i noticed is that if you're in
                                  a Veldt battle where Gau's destined to return, the 6th
                                  Pugs will often be untargetable.)

C2/2FBD: A5 FC        LDA $FC     (# of characters in party?)
C2/2FBF: C9 04        CMP #$04
C2/2FC1: 90 05        BCC $2FC8   (branch if less than 4)
C2/2FC3: A9 01        LDA #$01
C2/2FC5: 1C E4 11     TRB $11E4   (clear Gau as being leapt and available to return on
                                   Veldt)
C2/2FC8: A9 01        LDA #$01
C2/2FCA: 2C E4 11     BIT $11E4   (set when fighting on Veldt, Gau is Leapt, and he's
                                   available to return.)
C2/2FCD: F0 0A        BEQ $2FD9   (branch if unset)
C2/2FCF: A9 0A        LDA #$0A
C2/2FD1: 8D 4A 2F     STA $2F4A   (extra enemy formation data, byte 2.  store special
                                   event.)
C2/2FD4: A9 80        LDA #$80
C2/2FD6: 0C 49 2F     TSB $2F49   (extra enemy formation data, byte 1: activate
                                   special event)
C2/2FD9: AD 49 2F     LDA $2F49
C2/2FDC: 10 6C        BPL $304A   (if no special event active, branch)
C2/2FDE: AD 4A 2F     LDA $2F4A
C2/2FE1: EB           XBA 
C2/2FE2: A9 18        LDA #$18
C2/2FE4: 20 81 47     JSR $4781     (multiply by 24 bytes for some structure)
C2/2FE7: AA           TAX 
C2/2FE8: BF 00 FD D0  LDA $D0FD00,X
C2/2FEC: 10 0C        BPL $2FFA
C2/2FEE: A0 06 00     LDY #$0006
C2/2FF1: A9           LDA #$FF
C2/2FF3: 99 D8 3E     STA $3ED8,Y   (store null in Which Character it is)
C2/2FF6: 88           DEY 
C2/2FF7: 88           DEY 
C2/2FF8: 10 F7        BPL $2FF1     (loop for all 4 characters)
C2/2FFA: A0 04 00     LDY #$0004
C2/2FFD: 5A           PHY
C2/2FFE: BF 04 FD D0  LDA $D0FD04,X (character we want to replace?)
C2/3002: C9 FF        CMP #$FF
C2/3004: F0 3B        BEQ $3041     (branch if undefined)
C2/3006: 29 3F        AND #$3F      (isolate character to replace in bottom 6 bits)
C2/3008: A0 06 00     LDY #$0006
C2/300B: D9 D8 3E     CMP $3ED8,Y   (Which character it is)
C2/300E: F0 13        BEQ $3023     (if one of characters in party matches desired
                                     character to replace, branch and exit loop)
C2/3010: 88           DEY 
C2/3011: 88           DEY 
C2/3012: 10 F7        BPL $300B     (loop through all 4 party members)
C2/3014: C8           INY 
C2/3015: C8           INY 
C2/3016: B9 D8 3E     LDA $3ED8,Y   (Which character it is)
C2/3019: 1A           INC 
C2/301A: F0 07        BEQ $3023     (if the current character is null, branch and
                                     exit loop)
C2/301C: C0 06 00     CPY #$0006
C2/301F: 90 F3        BCC $3014     (loop through all 4 characters in party)
C2/3021: 80 1E        BRA $3041     (we couldn't find the desired character to replace,
                                     nor a null slot, so skip to next entry in the
                                     battle event data.)
C2/3023: B9 18 30     LDA $3018,Y
C2/3026: 04 B8        TSB $B8
C2/3028: C2 20        REP #$20        (Set 16-bit Accumulator)
C2/302A: BF 04 FD D0  LDA $D0FD04,X
C2/302E: 99 D8 3E     STA $3ED8,Y
C2/3031: E2 20        SEP #$20        (Set 8-bit Accumulator)
C2/3033: A9 01        LDA #$01        (top byte of monster # is always 1)
C2/3035: EB           XBA 
C2/3036: BF 06 FD D0  LDA $D0FD06,X   (get bottom byte of monster # from battle event
                                       data)
C2/303A: C9 FF        CMP #$FF        (is our monster # 511, meaning it's null?)
C2/303C: F0 03        BEQ $3041       (branch if so)
C2/303E: 20 71 2D     JSR $2D71       (read command script at start of combat.
                                       A = monster num)
C2/3041: 7A           PLY 
C2/3042: E8           INX 
C2/3043: E8           INX 
C2/3044: E8           INX 
C2/3045: E8           INX 
C2/3046: E8           INX 
C2/3047: 88           DEY 
C2/3048: D0 B3        BNE $2FFD
C2/304A: A2 06 00     LDX #$0006
C2/304D: BD D8 3E     LDA $3ED8,X   (which character it is)
C2/3050: C9 FF        CMP #FF
C2/3052: F0 7F        BEQ $30D3    (If monster)
C2/3054: 0A           ASL          (check bit 7 of which character it is)
C2/3055: B0 03        BCS $305A    (if set, branch)
C2/3057: FE A0 3A     INC $3AA0,X  (mark character as onscreen?)
C2/305A: 0A           ASL          (check bit 6 of which character it is)
C2/305B: 90 08        BCC $3065    (if unset, branch)
C2/305D: 48           PHA          (save shifted "Which Character" byte)
C2/305E: BD 18 30     LDA $3018,X
C2/3061: 0C 40 3A     TSB $3A40
C2/3064: 68           PLA 
C2/3065: 4A           LSR                  
C2/3066: 4A           LSR          (original Which Character byte, except top 2 bits
                                    are zeroed)
C2/3067: 9D D8 3E     STA $3ED8,X  
C2/306A: A0 0F 00     LDY #$000F
C2/306D: 5A           PHY          (save loop variable)
C2/306E: 48           PHA          (save Which Character)
C2/306F: B9 50 18     LDA $1850,Y
C2/3072: 29 20        AND #$20     (Isolate character row.  clear if Front, set if Back.)
C2/3074: 85 FE        STA $FE
C2/3076: 20 DC 30     JSR $30DC    (get actual character #?)
C2/3079: C3 01        CMP $01,S
C2/307B: D0 51        BNE $30CE    (skip character if their "actual #" doesn't match
                                    value of Which Character byte)
C2/307D: DA           PHX          (save 0,2,4,6 index of character?)
C2/307E: 48           PHA          (save actual # of character?)
C2/307F: A5 FE        LDA $FE
C2/3081: 9D A1 3A     STA $3AA1,X  (save character row in Special Properties)
C2/3084: BD D9 3E     LDA $3ED9,X  (s/b FFh provided $3EE0 wasn't set)
C2/3087: 48           PHA          
C2/3088: A3 06        LDA $06,S    (retrieve loop variable of 0 to 0F?)
C2/308A: 9D D9 3E     STA $3ED9,X  
C2/308D: 7B           TDC 
C2/308E: 8A           TXA          (put onscreen character index in A)
C2/308F: 0A           ASL 
C2/3090: 0A           ASL 
C2/3091: 0A           ASL 
C2/3092: 0A           ASL 
C2/3093: AA           TAX 
C2/3094: 68           PLA 
C2/3095: C9 FF        CMP #$FF
C2/3097: D0 03        BNE $309C
C2/3099: B9 01 16     LDA $1601,Y
C2/309C: 9D AE 2E     STA $2EAE,X
C2/309F: 7B           TDC 
C2/30A0: 68           PLA           (retrieve actual ID of character?)
C2/30A1: 9D C6 2E     STA $2EC6,X
C2/30A4: C9 0E        CMP #$0E
C2/30A6: C2 20        REP #$20      (Set 16-bit Accumulator)
C2/30A8: 48           PHA           (save actual ID of character?)
C2/30A9: B9 02 16     LDA $1602,Y   (1st two letters of character's name)
C2/30AC: 9D AF 2E     STA $2EAF,X
C2/30AF: B9 04 16     LDA $1604,Y   (middle two letters of character's name)
C2/30B2: 9D B1 2E     STA $2EB1,X
C2/30B5: B9 06 16     LDA $1606,Y   (last two letters of character's name)  
C2/30B8: 9D B3 2E     STA $2EB3,X
C2/30BB: FA           PLX           (get actual ID of character?)
C2/30BC: B0 06        BCS $30C4     (if character # is >= 0Eh [Banon], then don't bother marking
                                     them for purposes of what can be equipped on whom)
		  
C2/30BE: 7B           TDC           (Clear Accumulator)
C2/30BF: 38           SEC           (set carry flag)
C2/30C0: 2A           ROL           (move up a bit, starting with bottom)
C2/30C1: CA           DEX 
C2/30C2: 10 FC        BPL $30C0     (move bit into position determined by actual # of character.
                                     so for Character #3, only Bit #3 is on)

(the following is still executed for Banon and up.  seemingly, jibberish [the last 2 characters of
 the character name] is stored in that character's equippable items byte.  i'm not sure
 why this is done, but the game does have a property on these characters that prevents you
 from equipping all sorts of random crap via the Item menu in battle.)

C2/30C4: FA           PLX           (get onscreen 0,2,4,6 index of character)
C2/30C5: 9D 20 3A     STA $3A20,X   (related to what characters item can be equipped on.
                                     should only be our basic 14)
C2/30C8: 98           TYA 
C2/30C9: 9D 10 30     STA $3010,X   (save offset of character info block)
C2/30CC: E2 20        SEP #$20      (Set 8-bit Accumulator)
C2/30CE: 68           PLA           (retrieve Which Character byte)
C2/30CF: 7A           PLY           (retrieve loop index)
C2/30D0: 88           DEY 
C2/30D1: 10 9A        BPL $306D     (loop for all 16 character info blocks)
C2/30D3: CA           DEX 
C2/30D4: CA           DEX 
C2/30D5: 30 03        BMI $30DA
C2/30D7: 4C 4D 30     JMP $304D     (loop for all 4 characters)
C2/30DA: 28           PLP 
C2/30DB: 60           RTS