If you are still using the old URL (datacrystal.romhacking.net), please update your bookmarks! The old URL may stop working soon.
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