If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working at any time.
The current URL is datacrystal.tcrf.net.
The current URL is datacrystal.tcrf.net.
Final Fantasy VI/ROM map/Assembly C23
< Final Fantasy VI | ROM map
Jump to navigation
Jump to search
This is a sub-page of Final Fantasy VI/ROM map.
C2/30DC unknow
C2/30DC: 98 TYA C2/30DD: EB XBA C2/30DE: A9 25 LDA #$25 (multiple by 37 bytes, size of character block) C2/30E0: 20 81 47 JSR $4781 C2/30E3: A8 TAY C2/30E4: B9 00 16 LDA $1600,Y (sprite? actual # of character?) C2/30E7: 60 RTS
C2/30E8 loads battle formation data
C2/30E8: 08 PHP
C2/30E9: C2 30 REP #$30 (Set 16-bit A, X, & Y)
C2/30EB: AD B9 3E LDA $3EB9
C2/30EE: 85 EE STA $EE
C2/30F0: A2 1C 00 LDX #$001C
C2/30F3: A5 EE LDA $EE
C2/30F5: 10 10 BPL $3107
C2/30F7: BF 80 37 CF LDA $CF3780,X
C2/30FB: CD E0 11 CMP $11E0
C2/30FE: D0 07 BNE $3107 (If Battle formation is not 1C4 (SrBehemoth))
C2/3100: BF 82 37 CF LDA $CF3782,X
C2/3104: 8D E0 11 STA $11E0 (Change Battle formation to 1A8 (SrBehemoth undead))
C2/3107: 06 EE ASL $EE
C2/3109: CA DEX
C2/310A: CA DEX
C2/310B: CA DEX
C2/310C: CA DEX
C2/310D: 10 E4 BPL $30F3
C2/310F: A9 00 80 LDA #$8000
C2/3112: 1C E0 11 TRB $11E0 (Clear highest bit of battle formation)
C2/3115: F0 10 BEQ $3127 (Branch if not rand w/ next 3)
C2/3117: E2 30 SEP #$30
C2/3119: 7B TDC
C2/311A: 20 5A 4B JSR $4B5A (0 to 255)
C2/311D: 29 03 AND #$03 (0 to 3)
C2/311F: C2 31 REP #$31 (set 16-bit A, X and Y. clear Carry)
C2/3121: 6D E0 11 ADC $11E0
C2/3124: 8D E0 11 STA $11E0 (Add 0 to 3 to battle formation)
C2/3127: AD D4 3E LDA $3ED4
C2/312A: 0A ASL
C2/312B: AD E0 11 LDA $11E0 (Battle formation)
C2/312E: 90 03 BCC $3133 (If highest bit of Battle formation not set)
C2/3130: 8D D4 3E STA $3ED4
C2/3133: 0A ASL
C2/3134: 0A ASL
C2/3135: AA TAX
C2/3136: BF 02 59 CF LDA $CF5902,X (bytes 2-3 of extra enemy formation data)
C2/313A: 8D 4A 2F STA $2F4A
C2/313D: BF 00 59 CF LDA $CF5900,X (bytes 0-1 of extra enemy formation data)
C2/3141: 49 F0 00 EOR #$00F0 (invert the top nibble of byte 0, which contains the
attack formations masked -- Front, Back, Pincer, Side)
C2/3143: 8D 48 2F STA $2F48
C2/3147: AD E0 11 LDA $11E0
C2/314A: 0A ASL
C2/314B: 0A ASL
C2/314C: 0A ASL
C2/314D: 0A ASL
C2/314E: 38 SEC
C2/314F: ED E0 11 SBC $11E0 (A = Monster formation * 15)
C2/3152: AA TAX
C2/3153: 7B TDC
C2/3154: A8 TAY
C2/3155: BF 00 62 CF LDA $CF6200,X (Load Battle formation data)
C2/3159: 99 44 3F STA $3F44,Y
C2/315C: E8 INX
C2/315D: E8 INX
C2/315E: C8 INY
C2/315F: C8 INY
C2/3160: C0 10 00 CPY #$0010
C2/3163: 90 F0 BCC $3155
C2/3165: 28 PLP
C2/3166: 60 RTS
C2/3167 unknow
C2/3167: A9 80 LDA #$80
C2/3169: 14 B3 TRB $B3 (Set Ignore Clear)
C2/316B: A9 0C LDA #$0C
C2/316D: 04 BA TSB $BA (Sets Can target dead/hidden entities, and
Don't retarget if target invalid)
C2/316F: 9C 1B 34 STZ $341B
C2/3172: C2 20 REP #$20
C2/3174: BD 18 30 LDA $3018,X
C2/3177: 85 B8 STA $B8 (Sets attacker as target)
C2/3179: E2 20 SEP #$20
C2/317B character executes one hit
Character Executes One Hit (Loops for Multiple-Strike Attack)
C2/317B: DA PHX
C2/317C: A5 BD LDA $BD
C2/317E: 85 BC STA $BC (Damage increment)
C2/3180: A9 FF LDA #$FF
C2/3182: 8D 82 3A STA $3A82 (Null Golem block)
C2/3185: 8D 83 3A STA $3A83 (Null Dog block)
C2/3188: AD 00 34 LDA $3400 (Spell # for a second attack. Used by the Magicite item,
weapons with normal addition magic [Flame Sabre,
Pearl Lance, etc], and Tempest.
Sketch also sets $3400, but the variable is swapped into
$B6 by the Sketch command (C2/151F) rather than by this
routine. Thus, $3400 will always be null at this point
for Sketch.)
C2/318B: 1A INC
C2/318C: D0 25 BNE $31B3 (Branch if there is a spell [i.e. the spell # is not FFh])
C2/318E: AD 13 34 LDA $3413 (If Fight or Capture command, holds command number.
[Note that Rage's Battle and Special also qualify as
"Fight".]
That way, if a spell is cast by a weapon for one strike
(which will overwrite the command # and attack data),
we'll be able to continue with the Fight/Capture command
and use the weapon as normal on the next strike.
If command isn't Fight or Capture, this holds FFh. )
C2/3191: 30 20 BMI $31B3 (branch if negative)
C2/3193: 85 B5 STA $B5 (Restore command #)
C2/3195: 20 D3 26 JSR $26D3 (Load command data and data of "Battle" spell)
C2/3198: AD 70 3A LDA $3A70 (# of extra attacks - set by Quadra Slam, Dragon Horn,
Offering, etc)
C2/319B: 1A INC (add one. even number will check right hand, odd number
the left. so in a Genji Glove+Offering sequence, for
instance, we'd have: 8 = Right, 7 = Left, 6 = Right,
5 = Left, 4 = Right, 3 = Left, 2 = Right, then 1 = Left)
C2/319C: 4A LSR (put bottommost bit of # attacks in carry flag)
C2/319D: 20 9F 29 JSR $299F (Load weapon data into attack data.
Plus Sniper Sight, Offering and more)
C2/31A0: AD A6 11 LDA $11A6
C2/31A3: D0 03 BNE $31A8
C2/31A5: 4C 75 32 JMP $3275 (branch if zero battle power, which can result from a hand
without a weapon, among other things. Fight/Capture set
the strike quantity to 2 -- or 8 if you have Offering --
regardless of whether you have Genji Glove. thus, when
there's only 1 attack hand, this branch is what skips all
the even or odd strikes corresponding to the other hand.)
C2/31A8: A5 B5 LDA $B5
C2/31AA: C9 06 CMP #$06
C2/31AC: D0 05 BNE $31B3 (branch if command isn't Capture)
C2/31AE: A9 A4 LDA #$A4 (Causes attack to also steal)
C2/31B0: 8D A9 11 STA $11A9 (save special effect)
C2/31B3: 20 EB 37 JSR $37EB (Set up weapon addition magic, Tempest's Wind Slash,
and Espers summoned by the Magicite item)
C2/31B6: A9 20 LDA #$20
C2/31B8: 14 B2 TRB $B2 (Bit 5 is set to begin a turn)
C2/31BA: F0 05 BEQ $31C1 (branch if it was already clear -- in other words, if
we're on the second strike or later of this turn.)
C2/31BC: 2C A3 11 BIT $11A3
C2/31BF: D0 04 BNE $31C5 (Branch if Retarget if target invalid/dead)
C2/31C1: A9 04 LDA #$04
C2/31C3: 04 BA TSB $BA (NOTE: in $BA, the bit now means *Don't* retarget
if target dead/invalid)
(To recap the above: if we're on the 1st strike, "Don't Retarget if no valid targets" will
depend on the attack stats. If we're on a later strike, it always gets set. This explains
why Genji Glove's [sans Offering] second strike will always smack the initial target, even
if the first one killed it. However, most multi-strike attacks -- Offering, Dragon Horn,
and Quadra Slam/Slice -- set "Randomize Target", which makes you retarget anyway.)
C2/31C5: A5 B8 LDA $B8
C2/31C7: 05 B9 ORA $B9
C2/31C9: D0 08 BNE $31D3 (branch if at least one target exists)
C2/31CB: A9 04 LDA #$04
C2/31CD: 24 B3 BIT $B3
C2/31CF: F0 02 BEQ $31D3
C2/31D1: 14 BA TRB $BA (clear "Don't retarget if target invalid"..
iow, retarget if target invalid)
C2/31D3: AD 15 34 LDA $3415 (will be zero for: the attack performed via Sketch,
Umaro's Blizzard, Runic, Tempest's Wind Slash, and
Espers summoned with the Magicite item)
C2/31D6: 30 04 BMI $31DC (otherwise, it's FFh, so branch.)
C2/31D8: A9 40 LDA #$40
C2/31DA: 04 BA TSB $BA (Set randomize targets)
C2/31DC: A5 B3 LDA $B3
C2/31DE: 4A LSR
C2/31DF: B0 08 BCS $31E9 (branch if Bit 0 of $B3 set. to my knowledge, it's
only UNset by a failed Blitz input.)
C2/31E1: A9 04 LDA #$04
C2/31E3: 04 BA TSB $BA (set Don't retarget if target invalid)
C2/31E5: 64 B8 STZ $B8
C2/31E7: 64 B9 STZ $B9 (clear targets)
C2/31E9: 20 66 36 JSR $3666
C2/31EC: AD 17 34 LDA $3417
C2/31EF: 30 01 BMI $31F2 (branch if Sketcher is null)
C2/31F1: AA TAX (use Sketcher as attacker)
C2/31F2: AD 7C 3A LDA $3A7C
C2/31F5: C9 1E CMP #$1E (is command Enemy Roulette?)
C2/31F7: D0 08 BNE $3201 (branch if not)
C2/31F9: 64 B8 STZ $B8
C2/31FB: 64 B9 STZ $B9 (clear targets)
C2/31FD: A9 04 LDA #$04
C2/31FF: 85 BA STA $BA (Don't retarget if target invalid)
C2/3201: AD A5 11 LDA $11A5
C2/3204: F0 1F BEQ $3225 (If 0 MP cost)
C2/3206: BD E5 3E LDA $3EE5,X
C2/3209: 89 08 BIT #$08
C2/320B: D0 0E BNE $321B (Branch if Mute)
C2/320D: BD E4 3E LDA $3EE4,X
C2/3210: 89 20 BIT #$20 (Check for Imp status)
C2/3212: F0 11 BEQ $3225 (Branch if not ^)
C2/3214: AD 10 34 LDA $3410
C2/3217: C9 23 CMP #$23
C2/3219: F0 0A BEQ $3225 (Branch if spell is Imp?)
C2/321B: 8A TXA
C2/321C: 4A LSR
C2/321D: EB XBA
C2/321E: A9 0E LDA #$0E
C2/3220: 20 BF 62 JSR $62BF
C2/3223: 80 50 BRA $3275
C2/3225: 20 2B 35 JSR $352B (Runic function)
C2/3228: 20 38 38 JSR $3838 (Check Air Anchor action death)
C2/322B: 20 9D 2B JSR $2B9D (Damage Calculation)
C2/322E: 20 4A 0D JSR $0D4A (Atlas Armlet / Earring)
C2/3231: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3233: 20 92 32 JSR $3292
C2/3236: AD A2 11 LDA $11A2
C2/3239: 4A LSR
C2/323A: B0 07 BCS $3243 (Branch if physical attack)
C2/323C: A5 A6 LDA $A6 (Reflected spell or Launcher/Super Ball special effect?)
C2/323E: F0 03 BEQ $3243 (branch if not)
C2/3240: 20 83 34 JSR $3483 (Super Ball, Launcher, and Reflected spells function)
C2/3243: AD 30 3A LDA $3A30
C2/3246: 85 B8 STA $B8
C2/3248: E2 20 SEP #$20 (Set 8-bit Accumulator)
C2/324A: 20 91 43 JSR $4391 (update statuses for everybody onscreen)
C2/324D: 20 3E 36 JSR $363E (handle random addition magic for weapons,
in preparation for next strike)
C2/3250: AD 01 34 LDA $3401
C2/3253: C9 FF CMP #$FF (is there text to display for the command or attack?)
C2/3255: F0 0B BEQ $3262 (branch if not)
C2/3257: EB XBA
C2/3258: A9 02 LDA #$02
C2/325A: 20 BF 62 JSR $62BF (queue display of text?)
C2/325D: A9 FF LDA #$FF
C2/325F: 8D 01 34 STA $3401 (no more text to display)
C2/3262: AD A7 11 LDA $11A7
C2/3265: 89 02 BIT #$02
C2/3267: F0 0C BEQ $3275 (if there's no text if spell hits, branch)
C2/3269: E0 08 CPX #$08
C2/326B: 90 08 BCC $3275 (if attacker isn't monster, branch)
C2/326D: A5 B6 LDA $B6 (get attack/spell #)
C2/326F: EB XBA
C2/3270: A9 02 LDA #$02
C2/3272: 20 BF 62 JSR $62BF (queue display of text for spell that hit)
C2/3275: A9 FF LDA #$FF
C2/3277: 8D 14 34 STA $3414 (clear Ignore Damage Modification)
C2/327A: 8D 15 34 STA $3415
C2/327D: 8D 1C 34 STA $341C
C2/3280: AD 83 3A LDA $3A83 (get Dog block)
C2/3283: 30 03 BMI $3288 (if it didn't occur, branch)
C2/3285: 8D 16 34 STA $3416 (save backup of who benefitted from Dog block
as $3A83 will be nulled on next strike should
it be a multi-strike attack.)
C2/3288: FA PLX
C2/3289: CE 70 3A DEC $3A70 (# more attacks set by Offering, Quadra Slam,
Dragon Horn, etc)
C2/328C: 30 03 BMI $3291 (if it's negative, there's no more, so exit)
C2/328E: F4 7A 31 PEA $317A (if there are more, repeat this $317B function)
C2/3291: 60 RTS
C2/3292: 9C 5A 3A STZ $3A5A
C2/3295: 9C 54 3A STZ $3A54
C2/3298: 20 00 64 JSR $6400 (Zero $A0 through $AF)
C2/329B: 20 7E 58 JSR $587E (targeting function)
C2/329E: DA PHX
C2/329F: A5 B8 LDA $B8 (load targets)
C2/32A1: 20 0E 52 JSR $520E (Number of bits set in A)
C2/32A4: 8E C9 3E STX $3EC9 (# of targets)
C2/32A7: FA PLX
C2/32A8: 20 3B 12 JSR $123B (True Knight and Love Token)
C2/32AB: 20 C2 57 JSR $57C2
C2/32AE: 20 65 38 JSR $3865
C2/32B1: AD 4C 3A LDA $3A4C (actual MP cost to caster)
C2/32B4: F0 36 BEQ $32EC (if there is none, skip these affordability checks)
C2/32B6: 38 SEC (set Carry for upcoming subtraction)
C2/32B7: BD 08 3C LDA $3C08,X (attacker MP)
C2/32BA: ED 4C 3A SBC $3A4C (MP cost to attacker)
C2/32BD: 9C 4C 3A STZ $3A4C (clear MP cost)
C2/32C0: B0 1E BCS $32E0 (branch if attacker had sufficient MP)
C2/32C2: E0 08 CPX #$08
C2/32C4: 90 04 BCC $32CA (branch if character)
C2/32C6: A0 12 LDY #$12
C2/32C8: 84 B5 STY $B5
C2/32CA: 20 AD 35 JSR $35AD
C2/32CD: 64 A2 STZ $A2
C2/32CF: 64 A4 STZ $A4
C2/32D1: A9 02 00 LDA #$0002
C2/32D4: 1C A7 11 TRB $11A7 (clear Text if Hits bit)
C2/32D7: A9 02 28 LDA #$2802
C2/32DA: 20 9B 62 JSR $629B (Copy $3A28-$3A2B variables into ($76) buffer)
C2/32DD: 4C DB 63 JMP $63DB (Copy $An variables to ($78) buffer)
C2/32E0: 9D 08 3C STA $3C08,X (attacker MP = attacker MP - spell MP cost)
C2/32E3: A9 80 00 LDA #$0080
C2/32E6: 1D 04 32 ORA $3204,X
C2/32E9: 9D 04 32 STA $3204,X
C2/32EC: E2 20 SEP #$20 (Set 8-bit Accumulator)
C2/32EE: AD 12 34 LDA $3412
C2/32F1: C9 06 CMP #$06
C2/32F3: D0 5A BNE $334F
C2/32F5: DA PHX
C2/32F6: A9 02 LDA #$02
C2/32F8: 04 B2 TSB $B2 (Set no critical & ignore True Knight)
C2/32FA: 4A LSR
C2/32FB: 04 A0 TSB $A0
C2/32FD: BD 81 3C LDA $3C81,X
C2/3300: 85 B7 STA $B7
C2/3302: BD 2D 32 LDA $322D,X (get monster's special attack)
C2/3305: 48 PHA
C2/3306: 0A ASL (is bit 6, "Do no damage," set?)
C2/3307: 10 08 BPL $3311 (if it isn't, branch)
C2/3309: 9C A6 11 STZ $11A6 (clear Battle Power)
C2/330C: A9 01 LDA #$01
C2/330E: 0C A7 11 TSB $11A7 (set to "Miss if No Status Set or Clear")
C2/3311: 90 05 BCC $3318 (branch if Bit 7 wasn't set)
C2/3313: A9 20 LDA #$20
C2/3315: 0C A4 11 TSB $11A4 (set Can't be Dodged)
C2/3318: 68 PLA
C2/3319: 29 3F AND #$3F (get bottom 6 bits of monster's special attack)
C2/331B: C9 30 CMP #$30
C2/331D: 90 1A BCC $3339 (branch if value < 30h, "Absorb HP")
C2/331F: C9 32 CMP #$32
C2/3321: B0 0F BCS $3332 (branch if value > 31h, "Absorb MP")
C2/3323: 4A LSR (get bottom bit)
C2/3324: A9 02 LDA #$02
C2/3326: 0C A4 11 TSB $11A4 (turn on Redirection bit of spell)
C2/3329: 90 23 BCC $334E (branch if bottom bit of attack byte was 0)
C2/332B: A9 80 LDA #$80
C2/332D: 0C A3 11 TSB $11A3 (Set to Concern MP)
C2/3330: 80 1C BRA $334E
C2/3332: A9 04 LDA #$04 (s/b reached if bottom 6 bits of attack byte >= 32h.
so real examples are 32h, "Remove Reflect", and
Skull Dragon's 3Fh, which had "???" for description)
C2/3334: 0C A4 11 TSB $11A4 (turn on "Lift status" spell bit)
C2/3337: A9 17 LDA #$17 (act is if just "Reflect" is in attack byte, so
there'll be no attack power)
C2/3339: C9 20 CMP #$20
C2/333B: 90 08 BCC $3345 (if value < 20h, there is no Attack Level boost, but
there is a status to alter)
C2/333D: E9 20 SBC #$20
C2/333F: 65 BC ADC $BC
C2/3341: 85 BC STA $BC (add attack level btwn 0 and Fh, plus the carry flag
[which is always 1 here], to Damage Incrementer)
C2/3343: 80 09 BRA $334E (don't mess with statuses)
C2/3345: 20 17 52 JSR $5217 (transform the attack byte value 0 to 1F into
a spell status bit to set in $11AA, $11AB,
$11AC, or $11AD)
C2/3348: 1D AA 11 ORA $11AA,X
C2/334B: 9D AA 11 STA $11AA,X
C2/334E: FA PLX
C2/334F: A9 40 LDA #$40
C2/3351: 04 B2 TSB $B2 (Clear little Runic sword animation?)
C2/3353: D0 0F BNE $3364 (If it wasn't set to begin with, branch over
this animation code.)
C2/3355: A9 25 LDA #$25
C2/3357: EB XBA
C2/3358: A9 06 LDA #$06
C2/335A: 20 BF 62 JSR $62BF
C2/335D: 20 DB 63 JSR $63DB (Copy $An variables to ($78) buffer)
C2/3360: A9 10 LDA #$10
C2/3362: 14 A0 TRB $A0
C2/3364: A9 08 LDA #$08
C2/3366: 3C F9 3E BIT $3EF9,X
C2/3369: F0 04 BEQ $336F (Branch if attacker not morphed)
C2/336B: E6 BC INC $BC
C2/336D: E6 BC INC $BC (Double damage if morphed)
C2/336F: AD A2 11 LDA $11A2
C2/3372: 4A LSR
C2/3373: 90 09 BCC $337E (Branch if magic damage)
C2/3375: A9 10 LDA #$10
C2/3377: 3C E5 3E BIT $3EE5,X
C2/337A: F0 02 BEQ $337E (Branch if attacker not berserked)
C2/337C: E6 BC INC $BC (Add 50% damage if berserk and physical attack)
C2/337E: AD A2 11 LDA $11A2
C2/3381: 89 40 BIT #$40
C2/3383: D0 0D BNE $3392 (Branch if no split damage)
C2/3385: AD C9 3E LDA $3EC9
C2/3388: C9 02 CMP #$02
C2/338A: 90 06 BCC $3392 (Branch if only one target)
C2/338C: 4E B1 11 LSR $11B1
C2/338F: 6E B0 11 ROR $11B0 (Cut damage in half)
C2/3392: A9 20 LDA #$20
C2/3394: 24 B3 BIT $B3
C2/3396: D0 0B BNE $33A3 (Branch if ignore attacker row)
C2/3398: 3C A1 3A BIT $3AA1,X
C2/339B: F0 06 BEQ $33A3 (Branch if attacker in Front Row)
C2/339D: 4E B1 11 LSR $11B1
C2/33A0: 6E B0 11 ROR $11B0 (Cut damage in half)
C2/33A3: 20 AD 14 JSR $14AD
C2/33A6: 20 7D 3E JSR $3E7D (Special effect code from 42E1, once per strike)
C2/33A9: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/33AB: AC 05 34 LDY $3405 (# of hits left from Super Ball/Launcher)
C2/33AE: 30 01 BMI $33B1 (If there aren't any, those special effects aren't being
used, so jump to the normal Combat function.
If there are, we skip the Combat function, as C2/3483
more or less takes its place.)
C2/33B0: 60 RTS
C2/33B1 combat function
C2/33B1: A0 12 LDY #$12
C2/33B3: B9 18 30 LDA $3018,Y
C2/33B6: 24 A4 BIT $A4
C2/33B8: F0 07 BEQ $33C1 (Skip if spell doesn't target that target)
C2/33BA: 20 0D 22 JSR $220D (Hit or miss function)
C2/33BD: 90 02 BCC $33C1
C2/33BF: 14 A4 TRB $A4 (Makes attack miss target)
C2/33C1: 88 DEY
C2/33C2: 88 DEY
C2/33C3: 10 EE BPL $33B3 (Do for all 10 possible targets)
C2/33C5: E2 20 SEP #$20 (Set 8-bit accumulator)
C2/33C7: AD 1C 34 LDA $341C
C2/33CA: 30 0A BMI $33D6 (branch if not a missable weapon spellcasting)
C2/33CC: A5 A4 LDA $A4
C2/33CE: 05 A5 ORA $A5
C2/33D0: D0 04 BNE $33D6 (Branch if at least one target hit)
C2/33D2: A9 12 LDA #$12
C2/33D4: 85 B5 STA $B5 (use null animation for strike)
C2/33D6: AD 1D 34 LDA $341D
C2/33D9: 30 0A BMI $33E5 (branch if an insta-kill weapon hasn't activated
instant death this turn.)
C2/33DB: A5 A2 LDA $A2
C2/33DD: 05 A3 ORA $A3
C2/33DF: D0 04 BNE $33E5 (Branch if at least one target targetted)
C2/33E1: A9 12 LDA #$12
C2/33E3: 85 B5 STA $B5 (use null animation for strike)
C2/33E5: A9 40 LDA #$40
C2/33E7: 3C 95 3C BIT $3C95,X
C2/33EA: F0 06 BEQ $33F2 (Branch if not auto critical when Imp)
C2/33EC: 4A LSR
C2/33ED: 3C E4 3E BIT $3EE4,X
C2/33F0: D0 1A BNE $340C (If Attacker is imp do auto critical)
C2/33F2: A9 02 LDA #$02
C2/33F4: 24 B3 BIT $B3
C2/33F6: F0 14 BEQ $340C (Automatic critical if bit 1 of $B3 not set)
C2/33F8: 24 B2 BIT $B2
C2/33FA: D0 18 BNE $3414 (No critical if bit 1 of $B2 set)
C2/33FC: 24 BA BIT $BA
C2/33FE: F0 14 BEQ $3414 (No critical if not attacking opposition)
C2/3400: 20 5A 4B JSR $4B5A (Random Number 0 to 255)
C2/3403: C9 08 CMP #$08 (1 in 32 chance)
C2/3405: B0 0D BCS $3414
C2/3407: AD C9 3E LDA $3EC9
C2/340A: F0 08 BEQ $3414 (No critical if no targets)
C2/340C: E6 BC INC $BC (Critical hit x2 damage)
C2/340E: E6 BC INC $BC
C2/3410: A9 20 LDA #$20 (Set to flash screen?)
C2/3412: 04 A0 TSB $A0
C2/3414: 20 AD 35 JSR $35AD
C2/3417: C2 20 REP #$20
C2/3419: AD B0 11 LDA $11B0 (Maximum Damage)
C2/341C: 20 0B 37 JSR $370B (Increment damage function)
C2/341F: 8D B0 11 STA $11B0 (Maximum Damage)
C2/3422: E2 20 SEP #$20
C2/3424: AD A3 11 LDA $11A3
C2/3427: 0A ASL
C2/3428: 10 04 BPL $342E (Branch if not Caster dies)
C2/342A: 9B TXY
C2/342B: 20 52 38 JSR $3852 (Kill caster)
C2/342E: BC B9 32 LDY $32B9,X (who's Controlling this entity?)
C2/3431: 30 09 BMI $343C (branch if nobody is)
C2/3433: DA PHX
C2/3434: BB TYX (X points to controller)
C2/3435: BC B8 32 LDY $32B8,X (Y = whom the controller is controlling
[in other words, the entity we previously
had in X])
C2/3438: 20 2F 37 JSR $372F (regenerate the Control menu. it will
account for the MP cost of a spell cast
this turn, but unfortunately, the call is too
early to account for actual MP damage/healing/
draining done by the spell, so the menu will
lag a turn behind in that respect.)
C2/343B: FA PLX (restore X pointing to original entity)
C2/343C: C2 20 REP #$20
C2/343E: A0 12 LDY #$12
C2/3440: B9 18 30 LDA $3018,Y
C2/3443: 14 A4 TRB $A4 (Make spell miss target)
C2/3445: F0 25 BEQ $346C (Skip if not target of spell)
C2/3447: 2C 54 3A BIT $3A54
C2/344A: F0 02 BEQ $344E
C2/344C: E6 BC INC $BC (Increment damage)
C2/344E: 20 E3 35 JSR $35E3 (initialize several variables for counterattack
purposes)
C2/3451: CC F8 33 CPY $33F8 (Has this target used Zinger?)
C2/3454: F0 16 BEQ $346C (If it has, branch to next target)
C2/3456: 9C 48 3A STZ $3A48
C2/3459: 20 06 44 JSR $4406 (determine status to be set/removed when attack hits;
miss if attack doesn't change target status)
C2/345C: 20 7E 38 JSR $387E (Special effect code for target)
C2/345F: AD 48 3A LDA $3A48
C2/3462: D0 08 BNE $346C (If $3A48 is not 0)
C2/3464: B9 18 30 LDA $3018,Y
C2/3467: 04 A4 TSB $A4 (Make attack hit target)
C2/3469: 20 83 0B JSR $0B83 (Modify Damage, Heal Undead, and Elemental modification)
C2/346C: 88 DEY
C2/346D: 88 DEY
C2/346E: 10 D0 BPL $3440
C2/3470: 20 EF 62 JSR $62EF
C2/3473: 20 D6 36 JSR $36D6 (Learn lore)
C2/3476: A5 A4 LDA $A4
C2/3478: D0 06 BNE $3480 (Branch if 1 or more targets)
C2/347A: A9 02 00 LDA #$0002
C2/347D: 1C A7 11 TRB $11A7 (Clear text if hit if no targets hit)
C2/3480: 4C DB 63 JMP $63DB (Copy $An variables to ($78) buffer)
(Super Ball / Launcher / Reflected off targets function.
Seems to be a specialized counterpart of the "Combat Function" at C2/33B1.
For Super Ball / Launcher, it replaces that function. For Reflect, this is called
shortly after that function.)
C2/3483: DA PHX
C2/3484: 48 PHA
C2/3485: 20 00 64 JSR $6400 (Zero $A0 through $AF)
C2/3488: 9C 5A 3A STZ $3A5A (Set no targets as missed)
C2/348B: E2 20 SEP #$20 (Set 8-bit Accumulator)
C2/348D: A9 22 LDA #$22
C2/348F: 0C A3 11 TSB $11A3 (Set Retarget on dead, not reflectable)
C2/3492: A9 40 LDA #$40
C2/3494: 85 BB STA $BB (Set to cursor start on enemy. Note we're NOT
doing any spread-aim here, as the game hits at
most one target for each target reflected off.
Likewise, each Launcher firing or Super Ball bounce
will only hit 1 target.)
C2/3496: A9 50 LDA #$50
C2/3498: 04 BA TSB $BA (Sets randomize target & Reflected)
C2/349A: A5 B6 LDA $B6
C2/349C: 8D 2A 3A STA $3A2A (Stores final damage)
C2/349F: AE 05 34 LDX $3405 (# more times to attack, for Super Ball or Launcher)
C2/34A2: 30 08 BMI $34AC (branch if negative, which should only happen if this
function was reached due to Reflection)
C2/34A4: A9 10 LDA #$10
C2/34A6: 14 BA TRB $BA (Clear Reflected property)
C2/34A8: A9 15 LDA #$15
C2/34AA: 80 02 BRA $34AE
C2/34AC: A9 09 LDA #$09
C2/34AE: 20 9B 62 JSR $629B (Copy $3A28-$3A2B variables into ($76) buffer)
C2/34B1: A9 FF LDA #$FF
C2/34B3: A0 09 LDY #$09
C2/34B5: 99 A0 00 STA $00A0,Y ($A0 thru $A9 = #$FF)
C2/34B8: 88 DEY
C2/34B9: 10 FA BPL $34B5 (loop 10 times. as this little loop suggests, you can't go
setting the Launcher/Super Ball effect to have more than
10 "hits." that means that $3405 can have a maximum of 9,
for those of you planning your own special effect.)
C2/34BB: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/34BD: 4E B0 11 LSR $11B0 (Half damage)
C2/34C0: A0 12 LDY #$12
C2/34C2: B9 18 30 LDA $3018,Y
C2/34C5: 23 01 AND $01,S (is the target among those being "reflected off" by
Reflect/Super Ball/Launcher ?)
C2/34C7: F0 46 BEQ $350F (if not, skip it)
C2/34C9: BB TYX (save loop variable)
C2/34CA: 20 7E 58 JSR $587E (get new targets.. since the targeting at C2/3494 was set
to "cursor start on enemy" and X holds the "reflected off"
target going into the call, we're essentially performing
a reflection here)
C2/34CD: A5 B8 LDA $B8 (new targets after reflection)
C2/34CF: F0 3E BEQ $350F (if there's none, skip our current loop target)
C2/34D1: 5A PHY
C2/34D2: 20 F9 51 JSR $51F9 (Y = [Number of highest target after reflection] * 2)
C2/34D5: DA PHX
C2/34D6: E2 20 SEP #$20 (Set 8-bit Accumulator)
C2/34D8: 8A TXA
C2/34D9: 4A LSR
C2/34DA: AA TAX ( [onscreen target # of reflected off target] / 2.
so characters are now 0-3, and enemies are 4-9)
C2/34DB: AD 05 34 LDA $3405 (# more times to attack, for Super Ball or Launcher)
C2/34DE: 30 04 BMI $34E4 (branch if negative, which should only happen if this
function was reached due to Reflection)
C2/34E0: CE 05 34 DEC $3405 (decrement it)
C2/34E3: AA TAX (replace reflected off target # with our iterator
for Super Ball/Launcher?)
C2/34E4: 98 TYA
C2/34E5: 4A LSR (A = bit # of highest target after reflection)
C2/34E6: 95 A0 STA $A0,X (Reflect: $A0,reflected_off_target = new_target
Super Ball/Launcher: $A0,hit_iterator = new_target )
C2/34E8: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/34EA: FA PLX
C2/34EB: 20 0D 22 JSR $220D (Determine if attack hits)
C2/34EE: B0 19 BCS $3509 (branch if it misses)
C2/34F0: 9C 48 3A STZ $3A48
C2/34F3: 20 E3 35 JSR $35E3 (initialize several variables for counterattack
purposes)
C2/34F6: 20 06 44 JSR $4406 (determine status to be set/removed when attack hits;
miss if attack doesn't change target status)
C2/34F9: 20 7E 38 JSR $387E (special effect code for target)
C2/34FC: AD 48 3A LDA $3A48 (does attack miss due to status unchange [immunity] ?)
C2/34FF: D0 08 BNE $3509 (if so, branch)
C2/3501: BD 18 30 LDA $3018,X
C2/3504: 04 AE TSB $AE (Set this Reflector as AN originator of the attack
graphically? Since $AE will get overwritten later in
the case of Super Ball / Launcher, this setting only
applies to Reflection)
C2/3506: 20 83 0B JSR $0B83 (Modify Damage, Heal Undead, and Elemental modification)
C2/3509: 7A PLY
C2/350A: AE 05 34 LDX $3405 (# more times to attack, for Super Ball or Launcher)
C2/350D: 10 B3 BPL $34C2 (If it's positive, go again. This means that for
Super Ball/Launcher, if "reflecting off" a certain initial
target produces at least one valid final target, *all* our
final targets will be determined by that initial one.
Also note that "reflecting off" multiple initial targets
for Super Ball / Launcher -- which the game never does --
would produce rather meaningless results. $3405 would
equal FFh after the first such target, but the main loop
would still get repeated by C2/3511. Shouldn't glitch
anything, though. )
C2/350F: 88 DEY
C2/3510: 88 DEY
C2/3511: 10 AF BPL $34C2 (loop for everybody on screen)
(Uh oh..! If there were no targets found to reflect onto above, we can reach this point
with $3405 not being FFh. As a result, the branch at C2/33AE will keep skipping the normal
"Combat function" at C2/33B1.. bugging up the current battle. This will continue until
another Launcher/Super Ball is attempted when there are actually target(s) to hit. C2/3483
will then loop through those targets, bringing $3405 to a "safe" FFh in the process.)
C2/3513: 68 PLA
C2/3514: FA PLX
C2/3515: A9 10 00 LDA #$0010
C2/3518: 24 BA BIT $BA (was there Reflection?)
C2/351A: D0 09 BNE $3525 (branch if so)
C2/351C: BD 18 30 LDA $3018,X
C2/351F: 85 AE STA $AE (Set the missile launcher or the Super Ball thrower as
THE originator of attack graphically?)
C2/3521: 64 AA STZ $AA
C2/3523: 64 AC STZ $AC
C2/3525: 20 EF 62 JSR $62EF (Related to display of damage and healing numbers
and "Miss" messages)
C2/3528: 4C DB 63 JMP $63DB (Copy $An variables to ($78) buffer)
C2/352B runic function
C2/352B: AD A3 11 LDA $11A3 C2/352E: 89 08 BIT #$08 (can this spell by absorbed by Runic?) C2/3530: F0 7A BEQ $35AC (Exits function if not) C2/3532: 64 EE STZ $EE C2/3534: 64 EF STZ $EF (start off assuming no eligible Runickers) C2/3536: A0 12 LDY #$12 C2/3538: B9 A0 3A LDA $3AA0,Y C2/353B: 4A LSR (is this a valid target?) C2/353C: 90 20 BCC $355E (branch if not) C2/353E: B9 4C 3E LDA $3E4C,Y C2/3541: 89 06 BIT #$06 C2/3543: F0 19 BEQ $355E (Branch if not runic or enemy runic) C2/3545: 29 FB AND #$FB C2/3547: 99 4C 3E STA $3E4C,Y (clear runic) C2/354A: F4 C0 80 PEA $80C0 (Sleep, Death, Petrify) C2/354D: F4 10 22 PEA $2210 (Freeze, Hide, Stop) C2/3550: 20 64 58 JSR $5864 C2/3553: 90 09 BCC $355E (Branch if entity has any of above ailments) C2/3555: C2 20 REP #$20 C2/3557: B9 18 30 LDA $3018,Y C2/355A: 04 EE TSB $EE (mark this entity as an eligible Runicker) C2/355C: E2 20 SEP #$20 (Set 8-bit Accumulator) C2/355E: 88 DEY C2/355F: 88 DEY (have we run through all 10 entities yet?) C2/3560: 10 D6 BPL $3538 (loop if not) C2/3562: A5 EE LDA $EE C2/3564: 05 EF ORA $EF (are there any eligible Runickers?) C2/3566: F0 44 BEQ $35AC (Exits function if not) C2/3568: DA PHX C2/3569: 20 65 38 JSR $3865 C2/356C: 9C 15 34 STZ $3415 C2/356F: C2 20 REP #$20 (Set 16-bit Accumulator) C2/3571: A5 EE LDA $EE (get eligible Runickers) C2/3573: 85 B8 STA $B8 (save as targets) C2/3575: 20 0E 52 JSR $520E (X = # of bits set in A, i.e. the # of targets) C2/3578: 9C AA 11 STZ $11AA C2/357B: 9C AC 11 STZ $11AC (Make attack set no statuses) C2/357E: A9 82 21 LDA #$2182 C2/3581: 8D A3 11 STA $11A3 (Set concern MP, not reflectable, Unblockable, Heal) C2/3584: E2 20 SEP #$20 (Set 8-bit Accumulator) C2/3586: A9 60 LDA #$60 C2/3588: 8D A2 11 STA $11A2 (Set ignore defense, no split damage) C2/358B: 7B TDC C2/358C: AD A5 11 LDA $11A5 (MP cost of spell) C2/358F: 20 92 47 JSR $4792 (divide by X) C2/3592: 8D A6 11 STA $11A6 (save as Battle Power) C2/3595: 20 5E 38 JSR $385E (Sets level, magic power to 0) C2/3598: 9C 14 34 STZ $3414 (Skip damage modification) C2/359B: A9 40 LDA #$40 C2/359D: 14 B2 TRB $B2 (Flag little Runic sword animation?) C2/359F: A9 04 LDA #$04 C2/35A1: 85 BA STA $BA (Don't retarget if target invalid) C2/35A3: A9 03 LDA #$03 C2/35A5: 1C A7 11 TRB $11A7 (turn off text and miss if status isn't set or clear) C2/35A8: 9C A9 11 STZ $11A9 (Set attack to no special effect) C2/35AB: FA PLX C2/35AC: 60 RTS
C2/35AD unknow
C2/35AD: DA PHX C2/35AE: AE 72 3A LDX $3A72 (get ($76) animation buffer pointer) C2/35B1: 8E 71 3A STX $3A71 (copy to "previous ($76) animation buffer pointer"?) C2/35B4: FA PLX C2/35B5: 20 D4 35 JSR $35D4 C2/35B8: 4C 9E 62 JMP $629E
C2/35BB change atma weapon length
C2/35BB: 20 D4 35 JSR $35D4
C2/35BE: DA PHX (preserve X)
C2/35BF: 08 PHP
C2/35C0: AE 72 3A LDX $3A72
C2/35C3: DA PHX (preserve animation buffer pointer)
C2/35C4: AE 71 3A LDX $3A71 (get "previous ($76) animation buffer pointer"?)
C2/35C7: 8E 72 3A STX $3A72 (copy it into current ($76) animation buffer pointer)
C2/35CA: 20 9E 62 JSR $629E (update animation data in the previous ($76) buffer
entry)
C2/35CD: FA PLX
C2/35CE: 8E 72 3A STX $3A72 (restore ($76) animation buffer pointer)
C2/35D1: 28 PLP
C2/35D2: FA PLX (restore X)
C2/35D3: 60 RTS
C2/35D4 unknow
(Copy animation data from $B4 - $B7 into $3A28 - $3A2B variables) C2/35D4: 08 PHP C2/35D5: C2 20 REP #$20 (Set 16-bit Accumulator) C2/35D7: A5 B4 LDA $B4 C2/35D9: 8D 28 3A STA $3A28 C2/35DC: A5 B6 LDA $B6 C2/35DE: 8D 2A 3A STA $3A2A C2/35E1: 28 PLP C2/35E2: 60 RTS
C2/35E3 initialize counterattack variables
(Initialize several variables for counterattack purposes)
C2/35E3: 08 PHP
C2/35E4: E2 30 SEP #$30
C2/35E6: 20 1B 36 JSR $361B
C2/35E9: 8A TXA
C2/35EA: 99 90 32 STA $3290,Y (save attacker [or reflector if reflection involved] #)
C2/35ED: AD 7C 3A LDA $3A7C
C2/35F0: 99 48 3D STA $3D48,Y (save command #)
C2/35F3: AD 10 34 LDA $3410
C2/35F6: C9 FF CMP #$FF
C2/35F8: F0 07 BEQ $3601 (branch if there's no Spell # [or a Skean/Tool/
piece of equipment using a spell] defined for attack.)
C2/35FA: 99 49 3D STA $3D49,Y (save the spell #)
C2/35FD: 8A TXA
C2/35FE: 99 91 32 STA $3291,Y (save attacker [or reflector if reflection involved] #)
C2/3601: AD 11 34 LDA $3411
C2/3604: C9 FF CMP #$FF
C2/3606: F0 07 BEQ $360F (branch if there's no Item # [or a Skean/Tool that
doesn't use a spell] defined for attack.)
C2/3608: 99 5C 3D STA $3D5C,Y (save item #)
C2/360B: 8A TXA
C2/360C: 99 A4 32 STA $32A4,Y (save attacker [or reflector if reflection involved] #)
C2/360F: AD A1 11 LDA $11A1
C2/3612: 99 5D 3D STA $3D5D,Y (save attack's element/s)
C2/3615: 8A TXA
C2/3616: 99 A5 32 STA $32A5,Y (save attacker [or reflector if reflection involved] #)
C2/3619: 28 PLP
C2/361A: 60 RTS
C2/361B unknow
C2/361B: 08 PHP
C2/361C: E2 21 SEP #$21 (Set 8-bit Accumulator, and set Carry)
C2/361E: B9 E0 32 LDA $32E0,Y
C2/3621: 10 05 BPL $3628 (branch if this target doesn't yet have an attacker
[which can be a reflector, if reflection is involved])
C2/3623: 20 53 4B JSR $4B53
C2/3626: 90 05 BCC $362D (50% chance this attacker overwrites current one)
C2/3628: 8A TXA
C2/3629: 6A ROR ( [onscreen index of attacker] / 2.
so characters are now 0-3, and enemies are 4-9)
C2/362A: 99 E0 32 STA $32E0,Y (save index in bottom 7 bits, and turn on top bit)
C2/362D: 28 PLP
C2/362E: 60 RTS
C2/362F unknow
C2/362F: 48 PHA
C2/3630: 08 PHP
C2/3631: B9 E0 32 LDA $32E0,Y
C2/3634: 30 05 BMI $363B (branch if this target already has an attacker for
this turn)
C2/3636: 8A TXA
C2/3637: 6A ROR (Bits 0-6 = [onscreen index of attacker] / 2.
so characters are now 0-3, and enemies are 4-9.
Bit 7 = Carry flag passed by caller. sadly, it's
arbitrary gibberish from three of the callers:
function C2/0C2D, function C2/384A when called
via C2/387E, and function C2/384A when called via
C2/3E7D.)
C2/3638: 99 E0 32 STA $32E0,Y
C2/363B: 28 PLP
C2/363C: 68 PLA
C2/363D: 60 RTS
C2/363E weapon spell cast
(Weapon "addition magic")
C2/363E: A5 B5 LDA $B5
C2/3640: C9 16 CMP #$16 (is Command Jump?)
C2/3642: D0 05 BNE $3649 (if not, branch)
C2/3644: AD 70 3A LDA $3A70 (are there more attacks to do from Offering /
Quadra Slam / Dragon Horn / etc?)
C2/3647: D0 1C BNE $3665 (if so, exit function)
C2/3649: AD 89 3A LDA $3A89
C2/364C: 89 40 BIT #$40 (is "cast randomly with fight" bit set in the
weapon spellcast byte?)
C2/364E: F0 15 BEQ $3665 (if not, Exit function)
C2/3650: EB XBA
C2/3651: 20 5A 4B JSR $4B5A (random #, 0 to 255)
C2/3654: C9 40 CMP #$40
C2/3656: B0 0D BCS $3665 (if that # is 64 or greater, exit function. iow, exit
3/4 of time.)
C2/3658: EB XBA
C2/3659: 29 3F AND #$3F (isolate spell # of weapon in bottom 6 bits)
C2/365B: 8D 00 34 STA $3400 (save it)
C2/365E: A9 10 LDA #$10
C2/3660: 14 B2 TRB $B2 (this bit distinguishes traditional "addition magic"
spellcasts from Tempest's Wind Slash in a few ways in
C2/37EB.)
(one is that it'll cause the targeting byte to be set to
only "Cursor start on enemy" for the followup spell.
maybe the goal is to prevent the spell from targeting
multiple enemies..? but i'm not sure when the spellcast
would even try to target anything other than the target
whacked by the weapon, unless the spell randomizes
targets, which no normal "addition magic" does.)
C2/3662: EE 70 3A INC $3A70 (increment # of attacks remaining. since the calling
code will soon decrement this, the addition magic
should be cast with the same # of attacks remaining
as the weapon strike preceding it was)
C2/3665: 60 RTS
C2/3666 unknow
C2/3666: A9 01 LDA #$01 C2/3668: 14 B2 TRB $B2 C2/366A: F0 F9 BEQ $3665 C2/366C: AD 12 34 LDA $3412 C2/366F: 30 F4 BMI $3665 C2/3671: DA PHX C2/3672: 9B TXY C2/3673: 8D 29 3A STA $3A29 C2/3676: 0A ASL C2/3677: AA TAX C2/3678: A9 01 LDA #$01 C2/367A: 8D 28 3A STA $3A28 C2/367D: FC C4 36 JSR ($36C4,X) C2/3680: 8D 2A 3A STA $3A2A C2/3683: FA PLX C2/3684: 4C 9E 62 JMP $629E C2/3687: A5 B6 LDA $B6 C2/3689: 60 RTS C2/368A: AD 7D 3A LDA $3A7D C2/368D: 60 RTS C2/368E: 38 SEC C2/368F: A5 B6 LDA $B6 C2/3691: E9 36 SBC #$36 C2/3693: 60 RTS C2/3694: A5 B5 LDA $B5 C2/3696: 60 RTS C2/3697: A9 11 LDA #$11 C2/3699: 8D 28 3A STA $3A28 C2/369C: B9 A8 33 LDA $33A8,Y C2/369F: 8D 29 3A STA $3A29 C2/36A2: B9 A9 33 LDA $33A9,Y C2/36A5: 60 RTS
C2/36A6 joker doom
(Joker Dooms)
C2/36A6: A9 02 LDA #$02
C2/36A8: 0C 46 3A TSB $3A46 (set flag to let attack target normally untargetable
entities: Jumpers [err, scratch that, since they'd
have to be un-Hidden, which i don't think is
possible], Seized characters, etc.)
C2/36AB: 1C A2 11 TRB $11A2 (Clear miss if death protected)
C2/36AE: A9 20 LDA #$20
C2/36B0: 0C A4 11 TSB $11A4 (Sets unblockable)
C2/36B3: A9 00 LDA #$00
C2/36B5: 8D 29 3A STA $3A29
C2/36B8: A9 55 LDA #$55 (Joker Doom)
C2/36BA: 60 RTS
C2/36BB unknow
C2/36BB: A9 00 LDA #$00 C2/36BD: 8D 29 3A STA $3A29 C2/36C0: AD 7D 3A LDA $3A7D C2/36C3: 60 RTS
C2/36C4 pointers: commands
C2/36C4: 87 36 (Magic, non-Summoning non-Joker Doom Slot, successful Dance, Lore,
Magitek, enemy non-Specials, and many others)
C2/36C6: 8A 36 (Item)
C2/36C8: 8E 36 (Esper Summon)
C2/36CA: 65 36
C2/36CC: 87 36 (SwdTech)
C2/36CE: 94 36 (GP Rain)
C2/36D0: 97 36 (enemy Special)
C2/36D2: A6 36 (Slot - Joker Dooms)
C2/36D4: BB 36 (Blitz)
C2/36D6 learn lore if casted
C2/36D6: DA PHX C2/36D7: 08 PHP C2/36D8: E2 20 SEP #$20 C2/36DA: AD A3 11 LDA $11A3 C2/36DD: 89 04 BIT #$04 C2/36DF: F0 27 BEQ $3708 (Branch if not learn when casted) C2/36E1: AC 07 30 LDY $3007 C2/36E4: 30 22 BMI $3708 (Exit if Strago not in party) C2/36E6: F4 C3 B0 PEA $B0C3 (Death, Petrify, Zombie, Dark, Sleep, Muddled, Berserk) C2/36E9: F4 10 23 PEA $2310 (Stop, Hide, Rage, Freeze) C2/36EC: 20 64 58 JSR $5864 C2/36EF: 90 17 BCC $3708 (Exit function if any set) C2/36F1: A5 B6 LDA $B6 C2/36F3: E9 8B SBC #$8B C2/36F5: 18 CLC C2/36F6: 20 17 52 JSR $5217 C2/36F9: E0 03 CPX #$03 C2/36FB: B0 0B BCS $3708 C2/36FD: 3C 29 1D BIT $1D29,X (Known lores) C2/3700: D0 06 BNE $3708 C2/3702: 1D 84 3A ORA $3A84,X (Lores to learn) C2/3705: 9D 84 3A STA $3A84,X C2/3708: 28 PLP C2/3709: FA PLX C2/370A: 60 RTS
C2/370B damage increment function
Damage = damage * (1 + (.5 * $BC))
C2/370B: 5A PHY
C2/370C: A4 BC LDY $BC
C2/370E: F0 1D BEQ $372D (Exit if $BC = 0)
C2/3710: 48 PHA
C2/3711: A5 B2 LDA $B2
C2/3713: 0A ASL
C2/3714: 2D A1 11 AND $11A1
C2/3717: 0A ASL
C2/3718: 0A ASL
C2/3719: 0A ASL
C2/371A: 68 PLA
C2/371B: B0 10 BCS $372D (Exit function if Ignores defense and bit 4 of $B3
[Ignore Damage Increment on Ignore Defense] is set)
C2/371D: 85 EE STA $EE
C2/371F: 46 EE LSR $EE
C2/3721: 18 CLC
C2/3722: 65 EE ADC $EE (Add 50% damage)
C2/3724: 90 02 BCC $3728
C2/3726: 7B TDC
C2/3727: 3A DEC (Set damage to 65535)
C2/3728: 88 DEY
C2/3729: D0 F6 BNE $3721 (Do this $BC times)
C2/372B: 84 BC STY $BC (Store 0 in $BC)
C2/372D: 7A PLY
C2/372E: 60 RTS
C2/372F: DA PHX
C2/3730: 5A PHY
C2/3731: 08 PHP
C2/3732: C2 31 REP #$31 (set 16-bit A, X and Y. clear Carry)
C2/3734: BF 4A 54 C2 LDA $C2544A,X (address of controlling character's menu?)
C2/3738: 69 30 00 ADC #$0030
C2/373B: 8F 81 21 00 STA $002181
C2/373F: BB TYX
C2/3740: BD 08 3C LDA $3C08,X (MP of monster?)
C2/3743: 1A INC
C2/3744: 85 EE STA $EE (add 1, as it'll make future comparisons easier)
C2/3746: BD F9 1F LDA $1FF9,X (Monster Type)
C2/3749: 0A ASL
C2/374A: 0A ASL
C2/374B: AA TAX (X = monster number * 4)
C2/374C: E2 20 SEP #$20 (set 8-bit accumulator)
C2/374E: 7B TDC (clear A)
C2/374F: 8F 83 21 00 STA $002183
C2/3753: A0 04 00 LDY #$0004
C2/3756: 7B TDC
C2/3757: 48 PHA
C2/3758: BF 00 3D CF LDA $CF3D00,X (get Relm's Control command)
C2/375C: 8F 80 21 00 STA $002180 (store it in a menu)
C2/3760: C9 FF CMP #$FF
C2/3762: F0 1C BEQ $3780 (branch if the command [aka the spell #] was null)
C2/3764: EB XBA
C2/3765: A9 0E LDA #$0E (there are 14d bytes per spell in magic data)
C2/3767: 20 81 47 JSR $4781 (spell number * 14)
C2/376A: DA PHX
C2/376B: AA TAX
C2/376C: BF C5 6A C4 LDA $C46AC5,X (get MP cost)
C2/3770: EB XBA
C2/3771: BF C0 6A C4 LDA $C46AC0,X (get targeting byte)
C2/3775: FA PLX (restore X = monster num * 4)
C2/3776: 83 01 STA $01,S (replace zero value on stack from C2/3757 with
targeting byte?)
C2/3778: 18 CLC (clear carry)
C2/3779: A5 EF LDA $EF (retrieve (MP of monster + 1) / 256 ?)
C2/377B: D0 03 BNE $3780 (if it's nonzero, branch. spell MP costs are
only 1 byte, so we don't have to worry whether
it's castable)
C2/377D: EB XBA (get MP cost of spell)
C2/377E: C5 EE CMP $EE (carry will be clear if the Cost of spell is less
than (monster MP + 1), or if the foe has >= 255 MP)
(IOW, if the spell is affordable.)
C2/3780: 6A ROR (rotate carry into top bit of A. doubt the other bits
matter, given the XBA above is only done sometimes..)
C2/3781: 8F 80 21 00 STA $002180
C2/3785: 68 PLA (get the targeting byte, or zero if the menu entry
was null)
C2/3786: 8F 80 21 00 STA $002180
C2/378A: E8 INX
C2/378B: 88 DEY
C2/378C: D0 C8 BNE $3756 (loop 4 times, once for each Control command)
C2/378E: 28 PLP
C2/378F: 7A PLY
C2/3790: FA PLX
C2/3791: 60 RTS
C2/3792 sketch and control chance
(Returns Carry clear if successful, set if fails) C2/3792: DA PHX C2/3793: B9 18 3B LDA $3B18,Y (Target's Level) C2/3796: 90 07 BCC $379F (if sketch/control chance isn't boosted by equip, branch) C2/3798: EB XBA C2/3799: A9 AA LDA #$AA C2/379B: 20 81 47 JSR $4781 (Multiply target level by #$AA) C2/379E: EB XBA (Multiply target level by 170 / 256) C2/379F: 48 PHA (save target level (or target level * 170/256)) C2/37A0: 7B TDC C2/37A1: BD 18 3B LDA $3B18,X (Attacker's Level) C2/37A4: EB XBA (* 256) C2/37A5: FA PLX (restore target level (or target level * 170/256)) C2/37A6: 20 92 47 JSR $4792 (A / X) C2/37A9: 48 PHA C2/37AA: 18 CLC C2/37AB: EB XBA C2/37AC: D0 05 BNE $37B3 (Automatically hit if result of division is >= 256) C2/37AE: 20 5A 4B JSR $4B5A (random #: 0 to 255) C2/37B1: C3 01 CMP $01,S (compare to result of division) C2/37B3: 68 PLA C2/37B4: FA PLX C2/37B5: 60 RTS
C2/37B6 reduce gold for steal or GP rain
Reduce gold for GP Rain or Enemy Steal
Gold = Gold - A (no lower than 0)
For GP Rain: A = Level * 30 (Gold if gold < level * 30)
For Enemy Steal: High A = Enemy level, low A = 20 (14 hex) (Enemy level * 256 + 20)
(Gold if gold < (Enemy level * 256) + 20)
C2/37B6: 48 PHA
C2/37B7: 38 SEC
C2/37B8: AD 60 18 LDA $1860 (party's gold, bottom 16 bits)
C2/37BB: 85 EE STA $EE
C2/37BD: E3 01 SBC $01,S
C2/37BF: 8D 60 18 STA $1860 (subtract A from gold)
C2/37C2: E2 20 SEP #$20 (8-bit mem/acc)
C2/37C4: AD 62 18 LDA $1862 (party's gold, top 8 bits)
C2/37C7: E9 00 SBC #$00
C2/37C9: 8D 62 18 STA $1862 (now continue subtraction with borrow)
C2/37CC: C2 20 REP #$20 (16-bit mem/acc)
C2/37CE: B0 0A BCS $37DA (branch if party's gold was >= amount thrown or stolen)
C2/37D0: A5 EE LDA $EE
C2/37D2: 83 01 STA $01,S (otherwise, lower amount thrown/stolen to what the
party's gold was)
C2/37D4: 9C 60 18 STZ $1860
C2/37D7: 9C 61 18 STZ $1861 (zero the party's gold, all 3 bytes)
C2/37DA: 68 PLA
C2/37DB: 60 RTS
C2/37DC pick random esper
Pick a random Esper (not Odin or Raiden) C2/37DC: A9 19 LDA #$19 C2/37DE: 20 65 4B JSR $4B65 (0 to $18) C2/37E1: C9 0B CMP #$0B C2/37E3: 90 02 BCC $37E7 (Branch if A < $0B) C2/37E5: 1A INC (Add 2 if over $0B) C2/37E6: 1A INC C2/37E7: 18 CLC C2/37E8: 69 36 ADC #$36 C2/37EA: 60 RTS
C2/37EB setup weapon addition magic
(Set up weapon addition magic, Tempest's Wind Slash, and Espers summoned
by the Magicite item)
C2/37EB: AD 00 34 LDA $3400
C2/37EE: C9 FF CMP #$FF
C2/37F0: F0 45 BEQ $3837 (Exit if $3400 = #$FF)
C2/37F2: 85 B6 STA $B6 (Set spell #)
C2/37F4: 20 BF 1D JSR $1DBF (Get command based on attack/spell number.
A bottom = Command #, A top = Attack #)
C2/37F7: 85 B5 STA $B5 (Set command to that type)
C2/37F9: 20 D3 26 JSR $26D3 (load command and spell data)
C2/37FC: 20 51 29 JSR $2951 (Load Magic Power / Vigor and Level)
C2/37FF: 9C A5 11 STZ $11A5 (Set MP cost to 0)
C2/3802: A9 FF LDA #$FF
C2/3804: 8D 00 34 STA $3400 (null out the "spell # for a second attack", as
we've already processed it.)
C2/3807: A9 02 LDA #$02
C2/3809: 04 B2 TSB $B2 (Set no critical & ignore True Knight)
C2/380B: A9 10 LDA #$10
C2/380D: 24 B2 BIT $B2
C2/380F: F0 03 BEQ $3814 (branch if it's weapon addition magic, which won't
let the followup spell hit anybody but the initial
weapon victim. why the hell doesn't this just
branch directly to $3816?)
C2/3811: 9C 15 34 STZ $3415
C2/3814: D0 17 BNE $382D (and why the hell isn't this an unconditional BRA?
i'm tempted to make a Readability patch just
combining these two trivial changes..)
(To be clear: Traditional weapon "addition magic" will start its journey at C2/3816.
As far as I know, anything else will take the C2/382D path. That includes Espers
summoned by the Magicite item and Tempest's Wind Slash [which is technically
addition magic, but a special case].)
C2/3816: A9 0C LDA #$0C
C2/3818: 1C A3 11 TRB $11A3 (Clear learn if cast, clear enable Runic)
C2/381B: 04 BA TSB $BA (Set Don't retarget if target invalid, and
Can target dead/hidden targets)
C2/381D: A9 40 LDA #$40
C2/381F: 85 BB STA $BB (Set only to cursor start on enemy [and clear any
multi-targeting ability]).
C2/3821: A9 10 LDA #$10
C2/3823: 2C A4 11 BIT $11A4
C2/3826: F0 05 BEQ $382D (Branch if Stamina can't block)
C2/3828: 9C 1C 34 STZ $341C (this makes a weapon spell -- like Soul Sabre's
Doom -- have its animation skipped entirely when
missing rather than show a "Miss" message)
C2/382B: 80 05 BRA $3832
C2/382D: A9 20 LDA #$20
C2/382F: 0C A4 11 TSB $11A4 (Set Unblockable)
C2/3832: A9 02 LDA #$02
C2/3834: 0C A3 11 TSB $11A3 (Set Not Reflectable)
C2/3837: 60 RTS
C2/3838 air anchor effect: kill target if it acts
C2/3838: BD 05 32 LDA $3205,X C2/383B: 89 04 BIT #$04 C2/383D: D0 0A BNE $3849 (Exit function if not under Air Anchor effect) C2/383F: 09 04 ORA #$04 C2/3841: 9D 05 32 STA $3205,X (Clear Air Anchor effect) C2/3844: A9 40 LDA #$40 C2/3846: 0C A3 11 TSB $11A3 (Set caster dies) C2/3849: 60 RTS
C2/384A unknow
C2/384A: BD E9 3D LDA $3DE9,X C2/384D: 09 20 ORA #$20 C2/384F: 9D E9 3D STA $3DE9,X (Mark Hide status to be set) C2/3852: 20 2F 36 JSR $362F C2/3855: A9 80 LDA #$80 C2/3857: 1D D4 3D ORA $3DD4,X C2/385A: 9D D4 3D STA $3DD4,X (Mark Death status to be set) C2/385D: 60 RTS
C2/385E null level and magic power
Sets level, and magic power for attack to 0 C2/385E: 9C AF 11 STZ $11AF C2/3861: 9C AE 11 STZ $11AE C2/3864: 60 RTS
C2/3865 unknow
C2/3865: 08 PHP C2/3866: C2 20 REP #$20 C2/3868: AD 14 34 LDA $3414 C2/386B: 30 07 BMI $3874 C2/386D: AD 30 3A LDA $3A30 C2/3870: 85 B8 STA $B8 C2/3872: 80 08 BRA $387C C2/3874: A5 B8 LDA $B8 C2/3876: 8D 30 3A STA $3A30 C2/3879: 0C 4E 3A TSB $3A4E C2/387C: 28 PLP C2/387D: 60 RTS
C2/387E calls special effect for attacks
C2/387E: DA PHX C2/387F: 5A PHY C2/3880: 08 PHP C2/3881: E2 30 SEP #$30 C2/3883: AE A9 11 LDX $11A9 C2/3886: FC CD 3D JSR ($3DCD,X) C2/3889: 28 PLP C2/388A: 7A PLY C2/388B: FA PLX C2/388C: 60 RTS
C2/388D special effect: scimitar
( Slice/Scimitar special effect starts here )
C2/388D: 38 SEC
C2/388E: A9 EE LDA #$EE
C2/3890: EB XBA (Call from Kill with "X" effect enters here,
with A = #$7E)
C2/3891: B9 A1 3A LDA $3AA1,Y
C2/3894: 89 04 BIT #$04
C2/3896: D0 F4 BNE $388C (Exit function if prot. from death)
C2/3898: B0 05 BCS $389F (Skip code to make auto hit undead)
C2/389A: B9 95 3C LDA $3C95,Y
C2/389D: 30 0C BMI $38AB (If Undead auto hit 100% of time)
C2/389F: 20 5A 4B JSR $4B5A (Random number 0 to 255)
C2/38A2: C9 40 CMP #$40
C2/38A4: B0 E6 BCS $388C (Exit 75% chance)
C2/38A6: 20 B2 23 JSR $23B2 (Check if Stamina blocks)
C2/38A9: B0 E1 BCS $388C (Exit if it does)
C2/38AB: AD 70 3A LDA $3A70 (number of strikes remaining from Offering /
Dragon Horn / etc)
C2/38AE: F0 06 BEQ $38B6 (if this is final strike, branch)
C2/38B0: A5 B5 LDA $B5
C2/38B2: C9 16 CMP #$16
C2/38B4: F0 D6 BEQ $388C (Exit if Command = Jump)
C2/38B6: B9 18 30 LDA $3018,Y
C2/38B9: 04 A4 TSB $A4 (Related to animation? This special effect function is
different in that it jumps to C2/63DB instead of
immediately returning. When it does return, the caller
sets $A4 in an identical fashion, so I can't think of
any reason to do it here outside of animation.)
C2/38BB: 1C 4E 3A TRB $3A4E (Remove this [character] target from a
"backup targets byte", which stops Offering/
Genji Glove/etc from beating on their corpse..)
C2/38BE: B9 19 30 LDA $3019,Y
C2/38C1: 04 A5 TSB $A5 (see note at C2/38B9.)
C2/38C3: 1C 4F 3A TRB $3A4F (Remove this [monster] target from a "backup targets
byte". see C2/38BB note for elaboration.)
C2/38C6: A9 10 LDA #$10
C2/38C8: 04 A0 TSB $A0
C2/38CA: A9 80 LDA #$80
C2/38CC: 20 32 0E JSR $0E32 (Set Death in Status to Set)
C2/38CF: 9C 1D 34 STZ $341D (this will make C2/33B1 null the animation for each
strike in the remainder of this turn where no targets
are found. this is part of the "corpse beating"
prevention described above. without this instruction,
the character will wave their hand around like an
idiot.)
C2/38D2: 9C A6 11 STZ $11A6 (set Battle Power to 0)
C2/38D5: A9 02 LDA #$02
C2/38D7: 85 B5 STA $B5
C2/38D9: EB XBA
C2/38DA: 85 B6 STA $B6
C2/38DC: C9 EE CMP #$EE
C2/38DE: D0 0C BNE $38EC (Kill with 'X' branches)
C2/38E0: C0 08 CPY #$08 (Check for monster or character)
C2/38E2: 90 08 BCC $38EC (branch if character target)
C2/38E4: B9 E9 3D LDA $3DE9,Y
C2/38E7: 09 20 ORA #$20
C2/38E9: 99 E9 3D STA $3DE9,Y (Set Hide in Status to Set)
C2/38EC: 20 AD 35 JSR $35AD
C2/38EF: 4C DB 63 JMP $63DB (Copy $An variables to ($78) buffer)
C2/38F2 special effect: double damage for humans
C2/38F2: B9 95 3C LDA $3C95,Y C2/38F5: 89 10 BIT #$10 C2/38F7: F0 04 BEQ $38FD (Exit if target not human) C2/38F9: E6 BC INC $BC C2/38FB: E6 BC INC $BC (Double damage dealt) C2/38FD: 60 RTS
C2/38FE special effect: throw weapon
Sniper/Hawk Eye effect C2/38FE: 20 53 4B JSR $4B53 (0 or 1) C2/3901: 90 FA BCC $38FD (50% chance exit) C2/3903: E6 BC INC $BC (Add 1 to damage incrementor) C2/3905: B9 F9 3E LDA $3EF9,Y C2/3908: 10 F3 BPL $38FD (Exit if not target not Floating) C2/390A: A5 B5 LDA $B5 C2/390C: C9 00 CMP #$00 C2/390E: D0 ED BNE $38FD (Exit if command not Fight?) C2/3910: E6 BC INC $BC C2/3912: E6 BC INC $BC C2/3914: E6 BC INC $BC (Add another 3 to damage incrementor) C2/3916: A9 08 LDA #$08 C2/3918: 85 B5 STA $B5 (Store Throw for *purposes of animation*) C2/391A: A5 B7 LDA $B7 C2/391C: 3A DEC C2/391D: 85 B6 STA $B6 C2/391F: 4C BB 35 JMP $35BB
C2/3922 special effect: stone lore effect
C2/3922: A3 05 LDA $05,S C2/3924: AA TAX C2/3925: BD 18 3B LDA $3B18,X (Attacker's level) C2/3928: D9 18 3B CMP $3B18,Y (Target's Level) C2/392B: D0 06 BNE $3933 (If not same level, exit) C2/392D: A9 0D LDA #$0D (Add 13 to damage incrementer) C2/392F: 65 BC ADC $BC C2/3931: 85 BC STA $BC C2/3933: 60 RTS
C2/3934 special effect: palidor
C2/3934: A9 01 LDA #$01 C2/3936: 20 4C 46 JSR $464C C2/3939: B9 CC 32 LDA $32CC,Y C2/393C: 48 PHA C2/393D: 20 54 4E JSR $4E54 C2/3940: 99 CC 32 STA $32CC,Y C2/3943: A8 TAY C2/3944: 0A ASL C2/3945: AA TAX C2/3946: 68 PLA C2/3947: C9 FF CMP #$FF C2/3949: F0 03 BEQ $394E C2/394B: 99 84 31 STA $3184,Y C2/394E: 7B TDC C2/394F: 9D 20 36 STA $3620,X C2/3952: C2 20 REP #$20 C2/3954: 9D 20 35 STA $3520,X C2/3957: A9 16 00 LDA #$0016 C2/395A: 9D 20 34 STA $3420,X C2/395D: 60 RTS
C2/395E special effect: engulf
C2/395E: B9 18 30 LDA $3018,Y C2/3961: 0C 8A 3A TSB $3A8A (Set character as engulfed) C2/3964: 80 06 BRA $396C (Branch to remove from combat code)
C2/3966 special effect: bababreath
Bababreath from 3DCD
C2/3966: B9 18 30 LDA $3018,Y
C2/3969: 0C 88 3A TSB $3A88 (flag to remove target from party at end of battle)
C2/396C: C2 20 REP #$20 (Special effect $27 & $38 & $4B jump here)
(Escape, Sneeze, Smoke Bomb)
C2/396E: B9 18 30 LDA $3018,Y
C2/3971: 0C 4C 2F TSB $2F4C (mark target to removed from the battlefield?)
C2/3974: 0C 39 3A TSB $3A39
C2/3977: 60 RTS
C2/3978 special effect: dischord
C2/3978: BB TYX C2/3979: FE 18 3B INC $3B18,X (Level) C2/397C: 5E 18 3B LSR $3B18,X (Half level rounded up) C2/397F: 60 RTS
C2/3980 special effect: R. polarity
C2/3980: B9 A1 3A LDA $3AA1,Y (Target's Row) C2/3983: 49 20 EOR #$20 C2/3985: 99 A1 3A STA $3AA1,Y (Switch) C2/3988: 60 RTS
C2/3989 special effect: wall change
C2/3989: 7B TDC C2/398A: A9 FF LDA #$FF C2/398C: 20 2A 52 JSR $522A (Pick a random bit) C2/398F: 99 E0 3B STA $3BE0,Y (Set your weakness to A) C2/3992: 49 FF EOR #$FF C2/3994: 99 CD 3B STA $3BCD,Y (Nullify all other elements) C2/3997: 20 2A 52 JSR $522A (Pick a random bit, not the one picked for weakness) C2/399A: 99 CC 3B STA $3BCC,Y (Absorb that element) C2/399D: 60 RTS
C2/399E special effect: steal
C2/399E: A3 05 LDA $05,S (Attacker)
C2/39A0: AA TAX
C2/39A1: A9 01 LDA #$01
C2/39A3: 8D 01 34 STA $3401 (=1) (Sets message to "Doesn't have anything!")
C2/39A6: E0 08 CPX #$08 (Check if attacker is monster)
C2/39A8: B0 5F BCS $3A09 (Branch if monster)
C2/39AA: C2 20 REP #$20 (Set 16-bit accumulator)
C2/39AC: B9 08 33 LDA $3308,Y (Target's stolen items)
C2/39AF: 1A INC
C2/39B0: E2 21 SEP #$21 (Set 8-bit Accumulator AND Carry Flag)
C2/39B2: F0 4D BEQ $3A01 (Fail to steal if no items)
C2/39B4: EE 01 34 INC $3401 (now = 2) (Sets message to "Couldn't steal!!")
C2/39B7: BD 18 3B LDA $3B18,X (Attacker's Level)
C2/39BA: 69 32 ADC #$32 (adding 51, since Carry Flag was set)
C2/39BC: B0 1A BCS $39D8 (Automatically steal if level >= 205)
C2/39BE: F9 18 3B SBC $3B18,Y (Subtract Target's Level, along with an extra 1 because
Carry Flag is unset at this point. Don't worry; this
cancels out with the extra 1 from C2/39BA.)
(StealValue = [attacker level + 51] - [target lvl + 1]
= Attacker level + 50 - Target level )
C2/39C1: 90 3E BCC $3A01 (Fail to steal if StealValue < 0)
C2/39C3: 30 13 BMI $39D8 (Automatically steal if StealValue >= 128)
C2/39C5: 85 EE STA $EE (save StealValue)
C2/39C7: BD 45 3C LDA $3C45,X
C2/39CA: 4A LSR
C2/39CB: 90 02 BCC $39CF (If no sneak ring)
C2/39CD: 06 EE ASL $EE (Double value)
C2/39CF: A9 64 LDA #$64
C2/39D1: 20 65 4B JSR $4B65 (Random: 0 to 99)
C2/39D4: C5 EE CMP $EE
C2/39D6: B0 29 BCS $3A01 (Fail to steal if the random number >= StealValue)
C2/39D8: 5A PHY
C2/39D9: 20 5A 4B JSR $4B5A (Random: 0 to 255)
C2/39DC: C9 20 CMP #$20
C2/39DE: 90 01 BCC $39E1 (branch 1/8 of the time, so Rare steal slot
will be checked)
C2/39E0: C8 INY (Check the 2nd [Common] slot 7/8 of the time)
C2/39E1: B9 08 33 LDA $3308,Y (Target's stolen item)
C2/39E4: 7A PLY
C2/39E5: C9 FF CMP #$FF (If no item)
C2/39E7: F0 18 BEQ $3A01 (Fail to steal)
C2/39E9: 8D 35 2F STA $2F35 (Item stolen, for message purposes)
C2/39EC: 9D F4 32 STA $32F4,X (Store in "Acquired item")
C2/39EF: BD 18 30 LDA $3018,X
C2/39F2: 0C 8C 3A TSB $3A8C (flag character to have any applicable item in
$32F4,X added to inventory when turn is over.)
C2/39F5: A9 FF LDA #$FF
C2/39F7: 99 08 33 STA $3308,Y (Set to no item to steal)
C2/39FA: 99 09 33 STA $3309,Y (in both slots)
C2/39FD: EE 01 34 INC $3401 (now = 3) (Sets message to "Stole #whatever ")
C2/3A00: 60 RTS
If no items to steal
C2/3A01: E2 20 SEP #$20
C2/3A03: A9 00 LDA #$00
C2/3A05: 99 48 3D STA $3D48,Y
C2/3A08: 60 RTS
(Steal for monsters)
C2/3A09: 9C 3A 2F STZ $2F3A
C2/3A0C: EE 01 34 INC $3401 (Sets message to "Couldn't steal!!")
C2/3A0F: 20 5A 4B JSR $4B5A (random #: 0 to 255)
C2/3A12: C9 C0 CMP #$C0
C2/3A14: B0 EB BCS $3A01 (fail to steal 1/4 of the time)
C2/3A16: CE 01 34 DEC $3401 (Sets message to "Doesn't have anything!")
C2/3A19: BD 18 3B LDA $3B18,X (enemy level)
C2/3A1C: EB XBA
C2/3A1D: A9 14 LDA #$14 (enemy will swipe: level * 256 + 20 gold)
C2/3A1F: C2 20 REP #$20 (set 16-bit A)
C2/3A21: 20 B6 37 JSR $37B6 (subtract swiped gold from party's inventory)
C2/3A24: F0 DB BEQ $3A01 (branch if party had zero gold before
the steal)
C2/3A26: 8D 38 2F STA $2F38 (save gold swiped for message output)
C2/3A29: 18 CLC
C2/3A2A: 7D 98 3D ADC $3D98,X (add amount stolen to gold possessed by enemy)
C2/3A2D: 90 02 BCC $3A31 (branch if no overflow)
C2/3A2F: 7B TDC
C2/3A30: 3A DEC (if sum overflowed, set enemy's gold to 65535)
C2/3A31: 9D 98 3D STA $3D98,X (update enemy's gold)
C2/3A34: E2 20 SEP #$20 (set 8-bit A)
C2/3A36: A9 3F LDA #$3F
C2/3A38: 8D 01 34 STA $3401 (Set message to "# GP was stolen!!")
C2/3A3B: 60 RTS
C2/3A3C special effect: metamorph
C2/3A3C: C0 08 CPY #$08 (Checks if target is monster)
C2/3A3E: 90 4A BCC $3A8A (branch if not)
C2/3A40: B9 94 3C LDA $3C94,Y (Metamorph info: Morph chance in bits 5-7,
and Morph pack in bits 0-4)
C2/3A43: 48 PHA
C2/3A44: 29 1F AND #$1F (isolate pack #)
C2/3A46: 20 53 4B JSR $4B53 (Random number 0 or 1)
C2/3A49: 2A ROL
C2/3A4A: 20 53 4B JSR $4B53 (Random number 0 or 1)
C2/3A4D: 2A ROL
C2/3A4E: AA TAX (now we have the Metamorph pack # in bits 2-6,
and a random 0-3 index into that pack in bits 0-1)
C2/3A4F: BF 40 7F C4 LDA $C47F40,X (get the item we're attempting to Metamorph
the enemy into)
C2/3A53: 8D 35 2F STA $2F35 (save it for message purposes)
C2/3A56: A9 02 LDA #$02
C2/3A58: 8D 28 3A STA $3A28
C2/3A5B: A9 1D LDA #$1D
C2/3A5D: 8D 29 3A STA $3A29
C2/3A60: 20 BE 35 JSR $35BE
C2/3A63: 20 AD 35 JSR $35AD
C2/3A66: 68 PLA
C2/3A67: 4A LSR
C2/3A68: 4A LSR
C2/3A69: 4A LSR
C2/3A6A: 4A LSR
C2/3A6B: 4A LSR (isolate 0-7 Metamorph Chance index)
C2/3A6C: AA TAX (copy it to X)
C2/3A6D: 20 5A 4B JSR $4B5A (Random number 0 to 255)
C2/3A70: DF C5 3D C2 CMP $C23DC5,X (compare to actual Metamorph Chance)
C2/3A74: B0 14 BCS $3A8A (if greater than or equal, branch and fail to
Metamorph)
C2/3A76: A3 05 LDA $05,S
C2/3A78: AA TAX
C2/3A79: AD 35 2F LDA $2F35 (get ID of Metamorphed item)
C2/3A7C: 9D F4 32 STA $32F4,X (save it in this character's
"Item to add to inventory" variable)
C2/3A7F: BD 18 30 LDA $3018,X
C2/3A82: 0C 8C 3A TSB $3A8C (flag this character to have their inventory
variable checked when the turn ends)
C2/3A85: A9 80 LDA #$80
C2/3A87: 4C 32 0E JMP $0E32 (Mark death status to be set)
C2/3A8A: 4C 1B 3B JMP $3B1B (flag Miss message)
C2/3A8D special effect: debilitator
C2/3A8D: 7B TDC
C2/3A8E: B9 E0 3B LDA $3BE0,Y (Elements weak against)
C2/3A91: 0D C8 3E ORA $3EC8 (Elements nullified by ForceField)
C2/3A94: 49 FF EOR #$FF
C2/3A96: F0 F2 BEQ $3A8A (Miss if weak to all)
C2/3A98: 20 2A 52 JSR $522A (Randomly pick an element not weak to that hasn't
been nullified by ForceField)
C2/3A9B: 48 PHA
C2/3A9C: 20 F0 51 JSR $51F0
C2/3A9F: 8A TXA
C2/3AA0: 18 CLC
C2/3AA1: 69 0B ADC #$0B
C2/3AA3: 8D 01 34 STA $3401 (Set to display that element as text)
C2/3AA6: A3 01 LDA $01,S
C2/3AA8: 19 E0 3B ORA $3BE0,Y
C2/3AAB: 99 E0 3B STA $3BE0,Y (Make weak vs. that element)
C2/3AAE: 68 PLA
C2/3AAF: 49 FF EOR #$FF
C2/3AB1: 48 PHA
C2/3AB2: 39 E1 3B AND $3BE1,Y
C2/3AB5: 99 E1 3B STA $3BE1,Y (Make not resist that element)
C2/3AB8: A3 01 LDA $01,S
C2/3ABA: EB XBA
C2/3ABB: 68 PLA
C2/3ABC: C2 20 REP #$20 (Set 16-bit accumulator)
C2/3ABE: 39 CC 3B AND $3BCC,Y
C2/3AC1: 99 CC 3B STA $3BCC,Y (Make not absorb or nullify that element)
C2/3AC4: 60 RTS
C2/3AC5 special effect: control
C2/3AC5: C0 08 CPY #$08
C2/3AC7: 90 4D BCC $3B16 (Miss w/text if target is character)
C2/3AC9: B9 80 3C LDA $3C80,Y
C2/3ACC: 30 48 BMI $3B16 (Miss w/text if Can't Control bit set)
C2/3ACE: F4 D2 B0 PEA $B0D2 (Death, Petrify, Clear, Zombie, Sleep, Muddled, Berserk)
C2/3AD1: F4 00 29 PEA $2900 (Rage, Morph, Hide)
C2/3AD4: 20 64 58 JSR $5864
C2/3AD7: 90 3D BCC $3B16 (Miss w/text if any set on target)
C2/3AD9: B9 B9 32 LDA $32B9,Y
C2/3ADC: 10 38 BPL $3B16 (If already controlled then miss w/text)
C2/3ADE: A3 05 LDA $05,S
C2/3AE0: AA TAX
C2/3AE1: BD 45 3C LDA $3C45,X (Coronet "boost Control chance" in Bit 3)
C2/3AE4: 4A LSR
C2/3AE5: 4A LSR
C2/3AE6: 4A LSR
C2/3AE7: 4A LSR
C2/3AE8: 20 92 37 JSR $3792 (Sketch/Control Chance - pass bit 3 of $3C45 as carry)
C2/3AEB: B0 2E BCS $3B1B (Miss w/o text)
C2/3AED: 98 TYA
C2/3AEE: 9D B8 32 STA $32B8,X (save who attacker is Controlling)
C2/3AF1: 8A TXA
C2/3AF2: 99 B9 32 STA $32B9,Y (save who target is Controlled by)
C2/3AF5: B9 19 30 LDA $3019,Y
C2/3AF8: 0C 54 2F TSB $2F54
C2/3AFB: BD 4D 3E LDA $3E4D,X
C2/3AFE: 09 01 ORA #$01
C2/3B00: 9D 4D 3E STA $3E4D,X
C2/3B03: BD F9 3E LDA $3EF9,X
C2/3B06: 09 10 ORA #$10
C2/3B08: 9D F9 3E STA $3EF9,X (Set spell status to attacker)
C2/3B0B: B9 A1 3A LDA $3AA1,Y
C2/3B0E: 09 40 ORA #$40
C2/3B10: 99 A1 3A STA $3AA1,Y (Set controlled bit to target)
C2/3B13: 4C 2F 37 JMP $372F (generate the Control menu)
C2/3B16: A9 04 LDA #$04
C2/3B18: 8D 01 34 STA $3401 (Set to display text #4)
C2/3B1B: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3B1D: B9 18 30 LDA $3018,Y (Represents the target)
C2/3B20: 8D 48 3A STA $3A48 (Indicate a Miss, due to the attack not changing any
statuses or due to checks in its special effect)
C2/3B23: 0C 5A 3A TSB $3A5A (Set target as missed)
C2/3B26: 14 A4 TRB $A4 (Miss target)
C2/3B28: 60 RTS
C2/3B29: C0 08 CPY #$08 C2/3B2B: 90 EE BCC $3B1B (Miss if aimed at party) C2/3B2D: B9 80 3C LDA $3C80,Y C2/3B30: 89 20 BIT #$20 C2/3B32: D0 30 BNE $3B64 (Branch if can't sketch) C2/3B34: A3 05 LDA $05,S C2/3B36: AA TAX C2/3B37: BD 45 3C LDA $3C45,X (Beret "boost Sketch chance" in Bit 2) C2/3B3A: 4A LSR C2/3B3B: 4A LSR C2/3B3C: 4A LSR C2/3B3D: 20 92 37 JSR $3792 (Sketch/Control chance - pass bit 2 of $3C45 as carry) C2/3B40: B0 D9 BCS $3B1B (branch if sketch missed) C2/3B42: 8C 17 34 STY $3417 (save Target as Sketchee) C2/3B45: 98 TYA C2/3B46: E9 07 SBC #$07 (subtract 8, as Carry is clear) C2/3B48: 4A LSR C2/3B49: 85 B7 STA $B7 (save 0-5 index of our Sketched monster) C2/3B4B: 20 BB 35 JSR $35BB C2/3B4E: 20 5A 4B JSR $4B5A (random: 0 to 255) C2/3B51: C9 40 CMP #$40 (75% chance for second sketch attack) C2/3B53: C2 30 REP #$30 (Set 16-bit Accumulator and Index registers) C2/3B55: B9 F9 1F LDA $1FF9,Y (get monster #) C2/3B58: 2A ROL C2/3B59: AA TAX C2/3B5A: BF 00 43 CF LDA $CF4300,X C2/3B5E: E2 30 SEP #$30 (Set 8-bit A,X & Y) C2/3B60: 8D 00 34 STA $3400 (Set attack to sketched attack) C2/3B63: 60 RTS C2/3B64: A9 1F LDA #$1F C2/3B66: 8D 01 34 STA $3401 (Store can't sketch message) C2/3B69: 80 B0 BRA $3B1B (Make attack miss)
C2/3B6B special effect: quake
C2/3B6B: B9 F9 3E LDA $3EF9,Y C2/3B6E: 30 AB BMI $3B1B (If Float status set, miss) C2/3B70: 60 RTS
C2/3B71 special effect: leap
C2/3B71: AD 49 2F LDA $2F49 C2/3B74: 89 08 BIT #$08 C2/3B76: D0 18 BNE $3B90 (Miss w/text) C2/3B78: AD 76 3A LDA $3A76 (Number of characters in party) C2/3B7B: C9 02 CMP #$02 C2/3B7D: 90 11 BCC $3B90 (Miss w/text) C2/3B7F: A3 05 LDA $05,S C2/3B81: AA TAX C2/3B82: BD E9 3D LDA $3DE9,X C2/3B85: 09 20 ORA #$20 C2/3B87: 9D E9 3D STA $3DE9,X (Mark Hide status to be set in attacker) C2/3B8A: A9 04 LDA #$04 C2/3B8C: 8D 6E 3A STA $3A6E C2/3B8F: 60 RTS C2/3B90: A9 05 LDA #$05 C2/3B92: 8D 01 34 STA $3401 (Set to display text #5) C2/3B95: 4C 1B 3B JMP $3B1B (Miss target)
C2/3B98 special effect: possess
C2/3B98: A3 05 LDA $05,S
C2/3B9A: AA TAX
C2/3B9B: BD 18 30 LDA $3018,X
C2/3B9E: 0C 4C 2F TSB $2F4C (mark Possessor to be removed from battlefield?)
(what about the Possessee?)
C2/3BA1: 0C 88 3A TSB $3A88 (flag to remove Possessor from party at end of
battle)
C2/3BA4: 20 4A 38 JSR $384A
C2/3BA7: DA PHX
C2/3BA8: BB TYX
C2/3BA9: 20 4A 38 JSR $384A
C2/3BAC: 7A PLY
C2/3BAD: 4C 1B 36 JMP $361B
C2/3BB0 special effect: mind blast
C2/3BB0: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3BB2: 20 FF 44 JSR $44FF (Clear Status to Set and Status to Clear bytes)
C2/3BB5: B9 18 30 LDA $3018,Y
C2/3BB8: A2 06 LDX #$06
C2/3BBA: 3C 5C 3A BIT $3A5C,X (is this target in list of "Mind Blast victims"?
[this list was created previously in the other
Mind Blast special effect function.])
C2/3BBD: F0 07 BEQ $3BC6 (branch if not)
C2/3BBF: 48 PHA
C2/3BC0: DA PHX
C2/3BC1: 20 D0 3B JSR $3BD0 (Randomly mark a status from attack data to be set)
C2/3BC4: FA PLX
C2/3BC5: 68 PLA
C2/3BC6: CA DEX
C2/3BC7: CA DEX
C2/3BC8: 10 F0 BPL $3BBA (Do for all 4 list entries. an entity who's listed
N times can get N statuses from this spell.)
C2/3BCA: 60 RTS
C2/3BCB special effect: evil toot
(Sets a random status from attack data)
C2/3BCB: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3BCD: 20 FF 44 JSR $44FF (Clear Status to Set and Status to Clear bytes)
C2/3BD0: AD AA 11 LDA $11AA
C2/3BD3: 20 0E 52 JSR $520E (X = Number of statuses set by attack in bytes 1 & 2)
C2/3BD6: 86 EE STX $EE
C2/3BD8: AD AC 11 LDA $11AC
C2/3BDB: 20 0E 52 JSR $520E (X = Number of statuses set by attack in bytes 3 & 4)
C2/3BDE: E2 20 SEP #$20 (Set 8-bit Accumulator)
C2/3BE0: 8A TXA
C2/3BE1: 18 CLC
C2/3BE2: 65 EE ADC $EE (A = # of total statuses flagged in attack data)
C2/3BE4: 20 65 4B JSR $4B65 (random number: 0 to A - 1)
C2/3BE7: C5 EE CMP $EE (Clear Carry if the random status we want to
set is in spell status byte 1 or 2;
Set Carry if it's in byte 3 or 4.)
C2/3BE9: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3BEB: 08 PHP
C2/3BEC: AD AA 11 LDA $11AA
C2/3BEF: 90 03 BCC $3BF4 (branch if we're attempting to set a status
from status byte 1 or 2)
C2/3BF1: AD AC 11 LDA $11AC (otherwise, it's from byte 3 or 4)
C2/3BF4: 20 2A 52 JSR $522A (randomly pick a bit set in A)
C2/3BF7: 28 PLP
C2/3BF8: B0 03 BCS $3BFD
C2/3BFA: 4C 32 0E JMP $0E32 (Set status picked bytes 1 or 2)
C2/3BFD: 19 E8 3D ORA $3DE8,Y (Set status picked bytes 3 or 4)
C2/3C00: 99 E8 3D STA $3DE8,Y
C2/3C03: 60 RTS
C2/3C04 special effect: rippler
C2/3C04: A3 05 LDA $05,S
C2/3C06: AA TAX
C2/3C07: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3C09: BD E4 3E LDA $3EE4,X (status bytes 1-2, caster)
C2/3C0C: 39 E4 3E AND $3EE4,Y (status bytes 1-2, target)
C2/3C0F: 49 FF FF EOR #$FFFF
C2/3C12: 85 EE STA $EE (save the statuses that aren't shared among caster
and target. iow, turn on any bits that aren't
set in both)
C2/3C14: BD E4 3E LDA $3EE4,X
C2/3C17: 25 EE AND $EE (get statuses exclusive to caster)
C2/3C19: 99 D4 3D STA $3DD4,Y (target status to set = statuses that were only set
in caster)
C2/3C1C: 9D FC 3D STA $3DFC,X (caster status to clear = statuses that were only set
in caster)
C2/3C1F: B9 E4 3E LDA $3EE4,Y
C2/3C22: 25 EE AND $EE (get statuses exclusive to target)
C2/3C24: 9D D4 3D STA $3DD4,X (caster status to set = statuses that were only set
in target)
C2/3C27: 99 FC 3D STA $3DFC,Y (target status to clear = statuses that were only set
in target)
C2/3C2A: BD F8 3E LDA $3EF8,X (status bytes 3-4, caster)
C2/3C2D: 39 F8 3E AND $3EF8,Y (status bytes 3-4, target)
C2/3C30: 49 FF FF EOR #$FFFF
C2/3C33: 85 EE STA $EE (save the statuses that aren't shared among caster
and target. iow, turn on any bits that aren't
set in both)
C2/3C35: BD F8 3E LDA $3EF8,X
C2/3C38: 25 EE AND $EE (get statuses exclusive to caster)
C2/3C3A: 99 E8 3D STA $3DE8,Y (target status to set = statuses that were only set
in caster)
C2/3C3D: 9D 10 3E STA $3E10,X (caster status to clear = statuses that were only set
in caster)
C2/3C40: B9 F8 3E LDA $3EF8,Y
C2/3C43: 25 EE AND $EE (get statuses exclusive to target)
C2/3C45: 9D E8 3D STA $3DE8,X (caster status to set = statuses that were only set
in target)
C2/3C48: 99 10 3E STA $3E10,Y (target status to clear = statuses that were only set
in target)
C2/3C4B: 60 RTS
C2/3C4C special effect: exploder
Exploder effect from 3DCD C2/3C4C: A3 05 LDA $05,S C2/3C4E: AA TAX C2/3C4F: 86 EE STX $EE C2/3C51: C4 EE CPY $EE C2/3C53: D0 05 BNE $3C5A C2/3C55: BD 18 30 LDA $3018,X C2/3C58: 14 A4 TRB $A4 C2/3C5A: 60 RTS
C2/3C5B special effect: scan
C2/3C5B: B9 80 3C LDA $3C80,Y C2/3C5E: 89 10 BIT #$10 C2/3C60: D0 06 BNE $3C68 (Branch if can't scan) C2/3C62: BB TYX C2/3C63: A9 27 LDA #$27 C2/3C65: 4C 91 4E JMP $4E91 C2/3C68: A9 2C LDA #$2C C2/3C6A: 8D 01 34 STA $3401 (Store "Can't Scan" message) C2/3C6D: 60 RTS
C2/3C6E special effect: suplex
C2/3C6E: B9 80 3C LDA $3C80,Y C2/3C71: 89 04 BIT #$04 (Is Can't Suplex set in Misc/Special enemy byte?) C2/3C73: F0 E5 BEQ $3C5A (If not, exit function) C2/3C75: 4C 1B 3B JMP $3B1B (Makes miss)
C2/3C78 special effect: air anchor
C2/3C78: B9 A1 3A LDA $3AA1,Y C2/3C7B: 89 04 BIT #$04 C2/3C7D: D0 F6 BNE $3C75 (Miss if death prot.) C2/3C7F: A9 13 LDA #$13 C2/3C81: 8D 01 34 STA $3401 (Display text $13 - "Move, and you're dust!") C2/3C84: B9 05 32 LDA $3205,Y C2/3C87: 29 FB AND #$FB C2/3C89: 99 05 32 STA $3205,Y (Set Air Anchor effect) C2/3C8C: 9C 1A 34 STZ $341A (Special Effect $23 -- X-Zone, Odin, etc -- jumps here) C2/3C8F: 60 RTS
C2/3C90 special effect: L? peral
C2/3C90: 60 RTS
C2/3C91 special effect: charm
C2/3C91: A3 05 LDA $05,S C2/3C93: AA TAX C2/3C94: BD 94 33 LDA $3394,X C2/3C97: 10 DC BPL $3C75 (Miss if attacker already charmed a target) C2/3C99: 98 TYA C2/3C9A: 9D 94 33 STA $3394,X (Attacker data: save which target they charmed) C2/3C9D: 8A TXA C2/3C9E: 99 95 33 STA $3395,Y (Target data: save who has charmed them) C2/3CA1: 60 RTS
C2/3CA2 special effect: tapir
C2/3CA2: B9 E5 3E LDA $3EE5,Y C2/3CA5: 10 CE BPL $3C75 (Miss if target is not asleep) C2/3CA7: C2 20 REP #$20 (Set 16-bit Accumulator) C2/3CA9: B9 1C 3C LDA $3C1C,Y C2/3CAC: 99 F4 3B STA $3BF4,Y (Set HP to max HP) C2/3CAF: C2 20 REP #$20 (Pep Up and Elixir/Megalixir branch here) C2/3CB1: B9 30 3C LDA $3C30,Y C2/3CB4: 99 08 3C STA $3C08,Y (Set MP to max MP) C2/3CB7: 60 RTS
C2/3CB8 special effect: pep up
C2/3CB8: A3 05 LDA $05,S C2/3CBA: AA TAX C2/3CBB: 20 4A 38 JSR $384A (Mark death and hide to be set) C2/3CBE: C2 20 REP #$20 (Set 16-bit Accumulator) C2/3CC0: BD 18 30 LDA $3018,X C2/3CC3: 0C 4C 2F TSB $2F4C (mark caster to be removed from the battlefield?) C2/3CC6: 9E F4 3B STZ $3BF4,X (Set caster HP to 0) C2/3CC9: 9E 08 3C STZ $3C08,X (Set caster MP to 0) C2/3CCC: 80 E1 BRA $3CAF (Set target's MP to max MP)
C2/3CCE special effect: seize
C2/3CCE: A3 05 LDA $05,S
C2/3CD0: AA TAX
C2/3CD1: BD 58 33 LDA $3358,X (who attacker is Seizing)
C2/3CD4: 10 9F BPL $3C75 (branch if already Seizing someone.
this jumps to $3B1B - Miss)
C2/3CD6: C0 08 CPY #$08
C2/3CD8: B0 9B BCS $3C75 (If target is not character - Miss)
C2/3CDA: 98 TYA
C2/3CDB: 9D 58 33 STA $3358,X (save who attacker is Seizing)
C2/3CDE: 8A TXA
C2/3CDF: 99 59 33 STA $3359,Y (save who target is Seized by)
C2/3CE2: BD AC 3D LDA $3DAC,X
C2/3CE5: 09 80 ORA #$80
C2/3CE7: 9D AC 3D STA $3DAC,X
C2/3CEA: B9 18 30 LDA $3018,Y
C2/3CED: 1C 03 34 TRB $3403
C2/3CF0: B9 A0 3A LDA $3AA0,Y
C2/3CF3: 29 7F AND #$7F (Clear bit 7)
C2/3CF5: 99 A0 3A STA $3AA0,Y
C2/3CF8: A9 40 LDA #$40
C2/3CFA: 4C 4C 46 JMP $464C
C2/3CFF special effect: discard
C2/3CFD: A3 05 LDA $05,S C2/3CFF: AA TAX C2/3D00: BD AC 3D LDA $3DAC,X C2/3D03: 29 7F AND #$7F C2/3D05: 9D AC 3D STA $3DAC,X C2/3D08: A9 FF LDA #$FF C2/3D0A: 9D 58 33 STA $3358,X (attacker Seizing nobody) C2/3D0D: 99 59 33 STA $3359,Y (target Seized by nobody) C2/3D10: B9 18 30 LDA $3018,Y C2/3D13: 0C 03 34 TSB $3403 C2/3D16: 60 RTS
C2/3D17 special effect: elixir
(Special effect $4C - Elixir and Megalixir. In Item data, this appears as Special effect $04) C2/3D17: A9 80 LDA #$80 C2/3D19: 20 4C 46 JSR $464C (Sets bit 7 in $3204,Y) C2/3D1C: 80 91 BRA $3CAF (Set MP to Max MP)
C2/3D1E special effect: overcast
C2/3D1E: B9 4D 3E LDA $3E4D,Y
C2/3D21: 09 02 ORA #$02
C2/3D23: 99 4D 3E STA $3E4D,Y (Turn on Overcast bit, which will be checked by
function C2/450D to give a dying target Zombie
instead)
C2/3D26: 60 RTS
C2/3D27 special effect: zinger
C2/3D27: A3 05 LDA $05,S C2/3D29: AA TAX C2/3D2A: 8E F8 33 STX $33F8 (save attacker as the Zingerer) C2/3D2D: 8C F9 33 STY $33F9 (save target as who's being Zingered) C2/3D30: BD 19 30 LDA $3019,X C2/3D33: 0C 4D 2F TSB $2F4D (mark attacker to be removed from the battlefield?) C2/3D36: 60 RTS
C2/3D37 special effect: love token
C2/3D37: A3 05 LDA $05,S
C2/3D39: AA TAX
C2/3D3A: 98 TYA
C2/3D3B: 9D 6C 33 STA $336C,X (Attacker data: save which target takes damage
for them)
C2/3D3E: 8A TXA
C2/3D3F: 99 6D 33 STA $336D,Y (Target data: save who they're taking damage for)
C2/3D42: 60 RTS
C2/3D43 special effect: kill target
(Auto hit undead, Restores undead) C2/3D43: 18 CLC C2/3D44: A9 7E LDA #$7E C2/3D46: 20 90 38 JSR $3890 C2/3D49: B9 95 3C LDA $3C95,Y (Doom effect jumps here) C2/3D4C: 10 14 BPL $3D62 (Exit function if not undead) C2/3D4E: C0 08 CPY #$08 C2/3D50: B0 11 BCS $3D63 (Branch if not character) C2/3D52: B9 D4 3D LDA $3DD4,Y C2/3D55: 29 7F AND #$7F C2/3D57: 99 D4 3D STA $3DD4,Y (Remove Death from Status to Set) C2/3D5A: C2 20 REP #$20 C2/3D5C: B9 1C 3C LDA $3C1C,Y C2/3D5F: 99 F4 3B STA $3BF4,Y (Fully heal HP) C2/3D62: 60 RTS
C2/3D63 unknow
C2/3D63: 7B TDC C2/3D64: B9 E9 3D LDA $3DE9,Y C2/3D67: 09 20 ORA #$20 C2/3D69: 99 E9 3D STA $3DE9,Y (Add hide to target) C2/3D6C: B9 19 30 LDA $3019,Y C2/3D6F: EB XBA C2/3D70: C2 20 REP #$20 (Set 16-bit Accumulator) C2/3D72: 85 B8 STA $B8 C2/3D74: A2 0A LDX #$0A C2/3D76: A9 24 00 LDA #$0024 C2/3D79: 4C 91 4E JMP $4E91
C2/3D7C special effect: phantasm
C2/3D7C: B9 4D 3E LDA $3E4D,Y C2/3D7F: 09 40 ORA #$40 C2/3D81: 99 4D 3E STA $3E4D,Y (give Seizure-like quasi status to target) C2/3D84: 60 RTS
C2/3D85 special effect: stunner
(Only a Hit Rate / 256 chance it will actually try to inflict
statuses on the target)
C2/3D85: 20 5A 4B JSR $4B5A (random: 0 to 255)
C2/3D88: CD A8 11 CMP $11A8
C2/3D8B: 90 1A BCC $3DA7 (If less than hit rate then exit)
C2/3D8D: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3D8F: AD AA 11 LDA $11AA (Spell's Status to Set bytes 1+2)
C2/3D92: 49 FF FF EOR #$FFFF
C2/3D95: 39 D4 3D AND $3DD4,Y (Subtract it from target's
Status to Set bytes 1+2)
C2/3D98: 99 D4 3D STA $3DD4,Y
C2/3D9B: AD AC 11 LDA $11AC (Spell's Status to Set bytes 3+4)
C2/3D9E: 49 FF FF EOR #$FFFF
C2/3DA1: 39 E8 3D AND $3DE8,Y (Subtract it from target's
Status to Set bytes 3+4)
C2/3DA4: 99 E8 3D STA $3DE8,Y
C2/3DA7: 60 RTS
C2/3DA8 special effect: targeting
C2/3DA8: A3 05 LDA $05,S C2/3DAA: AA TAX C2/3DAB: 98 TYA C2/3DAC: 9D F5 32 STA $32F5,X (Stores target) C2/3DAF: 60 RTS
C2/3DB0 special effect: fallen one
C2/3DB0: C2 20 REP #$20 (Set 16-bit Accumulator) C2/3DB2: 7B TDC (Clear Accumulator) C2/3DB3: 1A INC C2/3DB4: 99 F4 3B STA $3BF4,Y (Store 1 in HP) C2/3DB7: 60 RTS
C2/3DB8 special effect: super ball
C2/3DB8: 20 5A 4B JSR $4B5A (Random Number 0 to 255) C2/3DBB: 29 07 AND #$07 (Random Number 0 to 7) C2/3DBD: 1A INC (1 to 8) C2/3DBE: 8D B1 11 STA $11B1 (Set damage to 256 to 2048 in steps of 256) C2/3DC1: 9C B0 11 STZ $11B0 C2/3DC4: 60 RTS
C2/3DC5 data: metamorph chance
C2/3DC5: FF C2/3DC6: C0 C2/3DC7: 80 C2/3DC8: 40 C2/3DC9: 20 C2/3DCA: 10 C2/3DCB: 08 C2/3DCC: 00
C2/3DCD pointers: special effects
C2/3DCD: 8C 38 C2/3DCF: 8C 38 C2/3DD1: 8C 38 C2/3DD3: 43 3D ($03) C2/3DD5: F2 38 ($04) C2/3DD7: 8C 38 C2/3DD9: 8C 38 C2/3DDB: 8C 38 C2/3DDD: FE 38 ($08) C2/3DDF: 8C 38 C2/3DE1: 8C 38 C2/3DE3: 8C 38 C2/3DE5: 8C 38 C2/3DE7: 8D 38 ($0D) C2/3DE9: 8C 38 C2/3DEB: 8C 38 C2/3DED: 5B 3C ($10) C2/3DED: 8C 38 C2/3DF1: 3C 3A ($12) C2/3DF3: 34 39 ($13) C2/3DF5: 8C 38 C2/3DF7: 8C 38 C2/3DF9: 8C 38 C2/3DFB: A2 3C ($17) C2/3DFD: 8C 38 C2/3DFF: 4C 3C ($19) C2/3E01: 8C 38 C2/3E03: 8C 38 C2/3E05: 90 3C ($1C) C2/3E08: 8C 38 C2/3E09: 8C 38 C2/3E0B: 78 39 ($1F) C2/3E0D: B8 3C ($20) C2/3E0F: 04 3C ($21) C2/3E11: 22 39 ($22) C2/3E13: 8C 3C ($23) C2/3E15: 8C 38 C2/3E17: 6B 3B ($25) C2/3E19: 89 39 ($26) C2/3E1B: 6C 39 ($27) C2/3E1D: B0 3B ($28) C2/3E1F: 8C 38 C2/3E21: 8C 38 C2/3E23: 80 39 ($2B) C2/3E25: 8C 38 C2/3E27: 37 3D ($2D) C2/3E29: CE 3C ($2E) C2/3E2B: A8 3D ($2F) C2/3E2D: 6E 3C ($30) C2/3E2F: 8C 38 C2/3E31: 8C 38 C2/3E33: 66 39 ($33) C2/3E35: 91 3C ($34) C2/3E37: 49 3D ($35) C2/3E39: 8C 38 C2/3E3B: 1E 3D ($37) C2/3E3D: 6C 39 ($38) C2/3E3F: 5E 39 ($39) C2/3E41: 27 3D ($3A) C2/3E43: CB 3B ($3B) C2/3E45: 8C 38 C2/3E47: 8C 38 C2/3E49: 7C 3D ($3E) C2/3E4B: 85 3D ($3F) C2/3E4D: B0 3D ($40) C2/3E4F: 8C 38 C2/3E51: 8C 38 C2/3E53: 8C 38 C2/3E55: FD 3C ($44) C2/3E57: 8C 38 C2/3E59: 8C 38 C2/3E5B: 8C 38 C2/3E5D: 8C 38 C2/3E5F: 8C 38 C2/3E61: B8 3D ($4A) C2/3E63: 6C 39 ($4B) C2/3E65: 17 3D ($4C) C2/3E67: 8C 38 C2/3E69: 8C 38 C2/3E6B: 8C 38 C2/3E6D: 98 3B ($50) C2/3E6F: 8C 38 C2/3E71: 9E 39 ($52) C2/3E73: C5 3A ($53) C2/3E75: 71 3B ($54) C2/3E77: 29 3B ($55) C2/3E79: 8D 3A ($56) C2/3E7B: 78 3C ($57)
C2/3E7D unknow
C2/3E7D: DA PHX C2/3E7E: 08 PHP C2/3E7F: E2 30 SEP #$30 C2/3E81: 9B TXY C2/3E82: AE A9 11 LDX $11A9 C2/3E85: FC E1 42 JSR ($42E1,X) (Calls special effect code) C2/3E88: 28 PLP C2/3E89: FA PLX C2/3E8A: 60 RTS
C2/3E8B special effect: random steal
C2/3E8B: 20 53 4B JSR $4B53 (50% chance to steal) C2/3E8E: B0 0F BCS $3E9F C2/3E90: A9 A4 LDA #$A4 (Add steal effect to attack) C2/3E92: 8D A9 11 STA $11A9 C2/3E95: A5 B5 LDA $B5 C2/3E97: C9 00 CMP #$00 C2/3E99: D0 04 BNE $3E9F (Exit if $B5 is not 0) C2/3E9B: A9 06 LDA #$06 C2/3E9D: 85 B5 STA $B5 (Set $B5 to $06) C2/3E9F: 60 RTS
C2/3EA0 special effect: step mine
C2/3EA0: 9C 14 34 STZ $3414 (Set to ignore damage modifiers)
C2/3EA3: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3EA5: 7B TDC
C2/3EA6: 3A DEC
C2/3EA7: 8D B0 11 STA $11B0 (Store 65535 in maximum damage)
C2/3EAA: AD 67 18 LDA $1867 (Steps High 2 Bytes)
C2/3EAD: AE A6 11 LDX $11A6 (Spell Power)
C2/3EB0: 20 92 47 JSR $4792 (Division function Steps / Spell Power)
C2/3EB3: E2 20 SEP #$20 (Set 8-bit Accumulator)
C2/3EB5: EB XBA
C2/3EB6: D0 11 BNE $3EC9 (If the top byte of quotient is nonzero, we know the
final result will exceed 2 bytes, so leave it
at 65535 and branch)
C2/3EB8: 8A TXA
C2/3EB9: EB XBA
C2/3EBA: 8D B1 11 STA $11B1 (Store in Maximum Damage high byte)
C2/3EBD: AD 66 18 LDA $1866 (Steps Low Byte)
C2/3EC0: AE A6 11 LDX $11A6 (Spell Power)
C2/3EC3: 20 92 47 JSR $4792 (Division function)
C2/3EC6: 8D B0 11 STA $11B0 (Store in Maximum Damage low byte)
C2/3EC9: 60 RTS
C2/3ECA special effect: weapon randomly breaks
(Ogre Nix - Weapon randomly breaks. Also uses MP for criticals)
C2/3ECA: A5 B1 LDA $B1
C2/3ECC: 4A LSR
C2/3ECD: B0 53 BCS $3F22 (Jump to code for attack with MP if bit 0 of $B1 is set)
C2/3ECF: B9 A0 3A LDA $3AA0,Y
C2/3ED2: 89 04 BIT #$04
C2/3ED4: D0 4C BNE $3F22 (Jump to code for attack with MP if bit 2 of $3AA0,Y is set)
C2/3ED6: B9 F5 3B LDA $3BF5,Y (Load high byte of HP)
C2/3ED9: EB XBA
C2/3EDA: B9 F4 3B LDA $3BF4,Y (Load low byte of HP)
C2/3EDD: A2 0A LDX #$0A
C2/3EDF: 20 92 47 JSR $4792 (HP / 10. X = remainder, or the ones digit)
C2/3EE2: E8 INX
C2/3EE3: 8A TXA
C2/3EE4: 20 65 4B JSR $4B65 (Random number 0 to last digit of HP)
C2/3EE7: 3A DEC
C2/3EE8: 10 38 BPL $3F22 (If number was not 0, branch)
C2/3EEA: 98 TYA
C2/3EEB: 4A LSR
C2/3EEC: AA TAX (X = target [0, 1, 2, 3, etc])
C2/3EED: FE 30 2F INC $2F30,X (flag character's properties to be recalculated from
his/her equipment at end of turn.)
C2/3EF0: EB XBA
C2/3EF1: A9 05 LDA #$05
C2/3EF3: 20 81 47 JSR $4781 (Multiplication function)
C2/3EF6: 85 EE STA $EE (save target # * 5)
C2/3EF8: BB TYX
C2/3EF9: AD 70 3A LDA $3A70 (# of strikes remaining in attack. with Fight/Capture,
this value is always odd when the right hand is
striking, and even when the left is. unfortunately,
that's not the case with Jump -- the hand used has
nothing to do with the strike # (in fact, it's random
when Genji Glove is worn) -- resulting in a bug where
Ogre Nix fails to break when it should [as C2/3F0B
will check the wrong hand].)
C2/3EFC: 4A LSR (Carry = 1 for right hand, 0 for left)
C2/3EFD: B0 07 BCS $3F06 (branch if right hand is attacking)
C2/3EFF: E8 INX (point to left hand equipment slot)
C2/3F00: A5 EE LDA $EE
C2/3F02: 69 14 ADC #$14
C2/3F04: 85 EE STA $EE (point to the character's left hand in their
menu data?)
C2/3F06: 9E 68 3B STZ $3B68,X (zero this hand's Battle Power)
C2/3F09: A6 EE LDX $EE
C2/3F0B: BD 86 2B LDA $2B86,X (get item in this hand)
C2/3F0E: C9 17 CMP #$17
C2/3F10: D0 10 BNE $3F22 (Branch if it's not Ogre Nix)
C2/3F12: A9 FF LDA #$FF
C2/3F14: 9D 86 2B STA $2B86,X (null this hand slot in the character's menu data)
C2/3F17: 9D 87 2B STA $2B87,X
C2/3F1A: 9E 89 2B STZ $2B89,X
C2/3F1D: A9 44 LDA #$44
C2/3F1F: 8D 01 34 STA $3401 (Display weapon broke text)
C2/3F22: A9 0C LDA #$0C (Special Effect 7 - Use MP for criticals - jumps here.
Featured in weapons such as Rune Edge and Illumina.)
C2/3F24: 85 EE STA $EE
C2/3F26: A5 B2 LDA $B2
C2/3F28: 89 02 BIT #$02
C2/3F2A: D0 23 BNE $3F4F (Exit function if "No Critical and Ignore True Knight"
is set)
C2/3F2C: AD C9 3E LDA $3EC9
C2/3F2F: F0 1E BEQ $3F4F (Exit function if no targets)
C2/3F31: 7B TDC (Clear 16-bit A)
C2/3F32: 20 5A 4B JSR $4B5A (random #: 0 to 255)
C2/3F35: 29 07 AND #$07 (now random #: 0 to 7)
C2/3F37: 18 CLC
C2/3F38: 65 EE ADC $EE (Add to $EE [#$0C])
C2/3F3A: C2 20 REP #$20 (Set 16-bit Accumulator)
C2/3F3C: 85 EE STA $EE
C2/3F3E: B9 08 3C LDA $3C08,Y (MP)
C2/3F41: C5 EE CMP $EE
C2/3F43: 90 0A BCC $3F4F (Exit function if weapon would drain more MP than the
wielder currently has)
C2/3F45: E5 EE SBC $EE
C2/3F47: 99 08 3C STA $3C08,Y (MP - $EE)
C2/3F4A: A9 00 02 LDA #$0200
C2/3F4D: 14 B2 TRB $B2 (Set always critical)
C2/3F4F: 60 RTS
C2/3F50 special effect: use MP for criticals (unused)
C2/3F50: A9 1C LDA #$1C C2/3F52: 80 D0 BRA $3F24
C2/3F54 special effect: pearl wind
C2/3F54: A9 60 LDA #$60 C2/3F56: 0C A2 11 TSB $11A2 (Sets no split damage, and ignore defense) C2/3F59: 9C 14 34 STZ $3414 (Set to not modify damage) C2/3F5C: C2 20 REP #$20 C2/3F5E: B9 F4 3B LDA $3BF4,Y (HP) C2/3F61: 8D B0 11 STA $11B0 (Maximum Damage = HP) C2/3F64: 60 RTS
C2/3F65 special effect: golem
C2/3F65: C2 20 REP #$20 C2/3F67: B9 F4 3B LDA $3BF4,Y (HP) C2/3F6A: 8D 36 3A STA $3A36 (HP that Golem will absorb) C2/3F6D: 60 RTS
C2/3F6E special effect: soul sabre
C2/3F6E: A9 80 LDA #$80 C2/3F70: 0C A3 11 TSB $11A3 (Sets attack to Concern MP) C2/3F73: A9 08 LDA #$08 (Special Effect 5 - Drainer jumps here) C2/3F75: 0C A2 11 TSB $11A2 (Sets attack to heal undead) C2/3F78: A9 02 LDA #$02 C2/3F7A: 0C A4 11 TSB $11A4 (Sets attack to redirection) C2/3F7D: 60 RTS
C2/3F7E special effect: heal rod
C2/3F7E: A9 20 LDA #$20 C2/3F80: 0C A2 11 TSB $11A2 (Sets attack to ignore defense) C2/3F83: A9 01 LDA #$01 C2/3F85: 0C A4 11 TSB $11A4 (Sets attack to heal) C2/3F88: 60 RTS
C2/3F89 special effect: valiant knife
C2/3F89: A9 20 LDA #$20 C2/3F8B: 0C A2 11 TSB $11A2 (Sets attack to ignore defense) C2/3F8E: C2 20 REP #$20 C2/3F90: 38 SEC C2/3F91: B9 1C 3C LDA $3C1C,Y (Max HP) C2/3F94: F9 F4 3B SBC $3BF4,Y (HP) C2/3F97: 18 CLC C2/3F98: 6D B0 11 ADC $11B0 (Add Max HP - Current HP to damage) C2/3F9B: 8D B0 11 STA $11B0 C2/3F9E: 60 RTS
C2/3F9F special effect: wind slash
(Wind Slash - Tempest) C2/3F9F: 20 5A 4B JSR $4B5A (Random Number Function: 0 to 255) C2/3FA2: C9 80 CMP #$80 C2/3FA4: B0 10 BCS $3FB6 (50% chance exit function) C2/3FA6: 9C A6 11 STZ $11A6 (Clear Battle Power) C2/3FA9: A9 65 LDA #$65 (Wind Slash spell number) C2/3FAB: 80 03 BRA $3FB0
C2/3FAD special effect: magicite
(Magicite) C2/3FAD: 20 DC 37 JSR $37DC (Picks random Esper, not Odin or Raiden) C2/3FB0: 8D 00 34 STA $3400 (Save the spell number) C2/3FB3: EE 70 3A INC $3A70 (Increment the number of attacks remaining) C2/3FB6: 60 RTS
C2/3FB7 special effect: GP rain
C2/3FB7: B9 18 3B LDA $3B18,Y (Attacker's Level)
C2/3FBA: EB XBA
C2/3FBB: A9 1E LDA #$1E
C2/3FBD: 20 81 47 JSR $4781 (attack will cost: Attacker's Level * 30)
C2/3FC0: C2 20 REP #$20 (Set 16-bit accumulator)
C2/3FC2: C0 08 CPY #$08
C2/3FC4: B0 0D BCS $3FD3 (Branch if attacker is monster)
C2/3FC6: 20 B6 37 JSR $37B6 (deduct thrown gold from party's inventory)
C2/3FC9: D0 1E BNE $3FE9 (branch if there was actually some GP to throw)
C2/3FCB: 64 A4 STZ $A4 (Makes attack target nothing)
C2/3FCD: A2 08 LDX #$08
C2/3FCF: 8E 01 34 STX $3401 (Set to display text 8 - "No money!!")
C2/3FD2: 60 RTS
C2/3FD3: 85 EE STA $EE (Level * 30)
C2/3FD5: B9 98 3D LDA $3D98,Y (Gold monster gives)
C2/3FD8: F0 F1 BEQ $3FCB (Miss all w/text if = 0)
C2/3FDA: E5 EE SBC $EE
C2/3FDC: B0 06 BCS $3FE4 (Branch if monster's gold >= Level * 30)
C2/3FDE: B9 98 3D LDA $3D98,Y
C2/3FE1: 85 EE STA $EE (if gold to consume was more than current
gold, set $EE to current gold)
C2/3FE3: 7B TDC
C2/3FE4: 99 98 3D STA $3D98,Y (Set Gold to 0 or Gold - Level * 30)
C2/3FE7: A5 EE LDA $EE (get amount of gold to consume)
C2/3FE9: A2 02 LDX #$02
C2/3FEB: 86 E8 STX $E8
C2/3FED: 20 B7 47 JSR $47B7 (24-bit $E8 = A * 2)
C2/3FF0: A5 E8 LDA $E8 (A = gold to consume * 2)
C2/3FF2: AE C9 3E LDX $3EC9 (Number of targets)
C2/3FF5: 20 92 47 JSR $4792 (A / number of targets)
C2/3FF8: 8D B0 11 STA $11B0 (Sets maximum damage)
C2/3FFB: 60 RTS
C2/3FFC special effect: exploder
C2/3FFC: BB TYX C2/3FFD: 64 BC STZ $BC C2/3FFF: A9 10 LDA #$10 C2/4001: 04 B0 TSB $B0 C2/4003: 9C 14 34 STZ $3414 (Set to not modify damage) C2/4006: C2 20 REP #$20 (Set 16-bit A) C2/4008: A5 A4 LDA $A4 (Load target hit) C2/400A: 48 PHA C2/400B: BD 18 30 LDA $3018,X C2/400E: 85 B8 STA $B8 C2/4010: 20 C2 57 JSR $57C2 C2/4013: 20 DB 63 JSR $63DB (Copy $An variables to ($78) buffer) C2/4016: A3 01 LDA $01,S C2/4018: 85 B8 STA $B8 C2/401A: 20 C2 57 JSR $57C2 C2/401D: 68 PLA C2/401E: 1D 18 30 ORA $3018,X C2/4021: 85 A4 STA $A4 C2/4023: BD F4 3B LDA $3BF4,X C2/4026: 8D B0 11 STA $11B0 (Sets damage to HP) C2/4029: 4C AD 35 JMP $35AD