; +-------------------------------------------------------------------------+ ; | | ; | FINAL FANTASY III | ; | | ; +-------------------------------------------------------------------------+ ; | file: ff3j.asm | ; | | ; | description: rom disassembly | ; | | ; | created: 12/1/2020 | ; | | ; | author: everything8215@gmail.com | ; +-------------------------------------------------------------------------+ ; prg-rom: 32 banks (512 kb) ; chr-rom: 0 banks (0 kb) ; mapper: 4 (nintendo mmc3) ; nmi vector: $0100 ; reset vector: $FF48 ; irq vector: $0103 ; -------------------------------------------------------------------------- ; [ final boss animation ] ; from 2E/9F7E, copied into ram at $7EF5 10/8A00: A5 7E LDA $7E 10/8A02: 0A ASL 10/8A03: A8 TAY 10/8A04: B9 11 8A LDA $8A11,Y 10/8A07: 85 7E STA $7E 10/8A09: B9 12 8A LDA $8A12,Y 10/8A0C: 85 7F STA $7F 10/8A0E: 6C 7E 00 JMP ($007E) ; final boss animation jump table 10/8A11: 8BD5 8A85 ; [ dark cloud green color cycle ] 10/8A15: A9 00 LDA #$00 10/8A17: 85 B6 STA $B6 10/8A19: 85 90 STA $90 10/8A1B: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 10/8A1E: A5 B6 LDA $B6 10/8A20: 29 01 AND #$01 10/8A22: D0 1F BNE $8A43 10/8A24: A5 90 LDA $90 10/8A26: 0A ASL 10/8A27: 0A ASL 10/8A28: A8 TAY 10/8A29: A2 00 LDX #$00 10/8A2B: B9 C9 8B LDA $8BC9,Y ; dark cloud green color palettes 10/8A2E: 9D F7 7C STA $7CF7,X ; color palettes 10/8A31: C8 INY 10/8A32: E8 INX 10/8A33: E0 04 CPX #$04 10/8A35: D0 F4 BNE $8A2B 10/8A37: A5 90 LDA $90 10/8A39: C9 02 CMP #$02 10/8A3B: D0 04 BNE $8A41 10/8A3D: A9 FF LDA #$FF 10/8A3F: 85 90 STA $90 10/8A41: E6 90 INC $90 10/8A43: E6 B6 INC $B6 10/8A45: A5 B6 LDA $B6 10/8A47: C9 68 CMP #$68 10/8A49: D0 D0 BNE $8A1B 10/8A4B: 60 RTS 10/8A4C: 20 25 30 23 27 1A 26 31 30 29 2D 21 2A 30 22 28 10/8A5C: 01 02 01 03 02 03 01 02 03 ; [ wait ] 10/8A65: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 10/8A68: CA DEX 10/8A69: D0 FA BNE $8A65 10/8A6B: 60 RTS ; [ flash screen ] 10/8A6C: A9 C3 LDA #$C3 ; sound effect $C3 10/8A6E: 8D 49 7F STA $7F49 10/8A71: A9 10 LDA #$10 ; 16 frames 10/8A73: 85 B6 STA $B6 10/8A75: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 10/8A78: A5 09 LDA $09 10/8A7A: 49 01 EOR #$01 ; toggle grayscale 10/8A7C: 85 09 STA $09 10/8A7E: 85 0A STA $0A 10/8A80: C6 B6 DEC $B6 10/8A82: D0 F1 BNE $8A75 10/8A84: 60 RTS ; [ final boss animation 1: death animation ] 10/8A85: 20 6C 8A JSR $8A6C ; flash screen 10/8A88: A2 3C LDX #$3C ; wait 60 frames 10/8A8A: 20 65 8A JSR $8A65 10/8A8D: 20 6C 8A JSR $8A6C ; flash screen 10/8A90: A2 0A LDX #$0A ; wait 10 frames 10/8A92: 20 65 8A JSR $8A65 10/8A95: 20 6C 8A JSR $8A6C ; flash screen 10/8A98: A2 78 LDX #$78 ; wait 120 frames 10/8A9A: 20 65 8A JSR $8A65 10/8A9D: A9 8E LDA #$8E ; sound effect $0E 10/8A9F: 8D 49 7F STA $7F49 10/8AA2: A9 F0 LDA #$F0 ; +$7E = $0FF0 10/8AA4: 85 7E STA $7E 10/8AA6: A9 0F LDA #$0F 10/8AA8: 85 7F STA $7F 10/8AAA: A9 00 LDA #$00 10/8AAC: 85 90 STA $90 10/8AAE: A9 00 LDA #$00 10/8AB0: 85 91 STA $91 10/8AB2: A2 00 LDX #$00 10/8AB4: A5 7E LDA $7E 10/8AB6: 9D 00 73 STA $7300,X 10/8AB9: A5 7F LDA $7F 10/8ABB: 9D 01 73 STA $7301,X 10/8ABE: A9 01 LDA #$01 10/8AC0: 20 F2 F8 JSR $F8F2 ; add to +$7E 10/8AC3: E8 INX 10/8AC4: E8 INX 10/8AC5: E0 20 CPX #$20 10/8AC7: D0 EB BNE $8AB4 10/8AC9: A2 00 LDX #$00 10/8ACB: BD 4C 8A LDA $8A4C,X 10/8ACE: 9D 20 73 STA $7320,X 10/8AD1: A9 00 LDA #$00 10/8AD3: 9D 30 73 STA $7330,X 10/8AD6: A9 8F LDA #$8F 10/8AD8: 9D 40 73 STA $7340,X 10/8ADB: E8 INX 10/8ADC: E0 10 CPX #$10 10/8ADE: D0 EB BNE $8ACB 10/8AE0: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 10/8AE3: A5 06 LDA $06 10/8AE5: 09 01 ORA #$01 10/8AE7: 85 06 STA $06 10/8AE9: A5 90 LDA $90 10/8AEB: 18 CLC 10/8AEC: 69 10 ADC #$10 10/8AEE: 85 90 STA $90 10/8AF0: A5 91 LDA $91 10/8AF2: 69 00 ADC #$00 10/8AF4: 85 91 STA $91 10/8AF6: 18 CLC 10/8AF7: 69 2B ADC #$2B 10/8AF9: 85 03 STA $03 10/8AFB: A5 B6 LDA $B6 10/8AFD: E6 B6 INC $B6 10/8AFF: 29 07 AND #$07 10/8B01: AA TAX 10/8B02: BD 5C 8A LDA $8A5C,X 10/8B05: 8D 0C 00 STA $000C 10/8B08: 20 80 FB JSR $FB80 10/8B0B: 20 AA F8 JSR $F8AA ; copy oam data to ppu 10/8B0E: A5 09 LDA $09 10/8B10: 8D 01 20 STA $2001 10/8B13: A0 00 LDY #$00 10/8B15: 8C 06 20 STY $2006 10/8B18: 8C 06 20 STY $2006 10/8B1B: 2C 02 20 BIT $2002 10/8B1E: B9 01 73 LDA $7301,Y 10/8B21: 8D 06 20 STA $2006 10/8B24: B9 00 73 LDA $7300,Y 10/8B27: 8D 06 20 STA $2006 10/8B2A: A9 00 LDA #$00 10/8B2C: 8D 07 20 STA $2007 10/8B2F: C8 INY 10/8B30: C8 INY 10/8B31: C0 20 CPY #$20 10/8B33: D0 E6 BNE $8B1B 10/8B35: 20 CB F8 JSR $F8CB ; update ppu registers 10/8B38: EE AA 00 INC $00AA 10/8B3B: 20 79 FB JSR $FB79 ; wait for irq 10/8B3E: A9 91 LDA #$91 10/8B40: 38 SEC 10/8B41: E5 03 SBC $03 10/8B43: 8D 00 C0 STA $C000 10/8B46: 8D 01 E0 STA $E001 10/8B49: 48 PHA 10/8B4A: 68 PLA 10/8B4B: 48 PHA 10/8B4C: 68 PLA 10/8B4D: EA NOP 10/8B4E: A9 20 LDA #$20 10/8B50: 8D 06 20 STA $2006 10/8B53: A9 A0 LDA #$A0 10/8B55: 8D 06 20 STA $2006 10/8B58: A5 07 LDA $07 10/8B5A: 8D 00 20 STA $2000 10/8B5D: 20 79 FB JSR $FB79 ; wait for irq 10/8B60: 48 PHA 10/8B61: 68 PLA 10/8B62: 48 PHA 10/8B63: 68 PLA 10/8B64: 48 PHA 10/8B65: 68 PLA 10/8B66: A9 22 LDA #$22 10/8B68: 8D 06 20 STA $2006 10/8B6B: A9 40 LDA #$40 10/8B6D: 8D 06 20 STA $2006 10/8B70: A5 08 LDA $08 10/8B72: 8D 00 20 STA $2000 10/8B75: A9 00 LDA #$00 10/8B77: 8D AA 00 STA $00AA 10/8B7A: 20 F2 FA JSR $FAF2 ; update sound 10/8B7D: A0 00 LDY #$00 10/8B7F: A2 00 LDX #$00 10/8B81: 84 7E STY $7E 10/8B83: B9 40 73 LDA $7340,Y 10/8B86: F0 28 BEQ $8BB0 10/8B88: E6 7E INC $7E 10/8B8A: B9 30 73 LDA $7330,Y 10/8B8D: 18 CLC 10/8B8E: 79 20 73 ADC $7320,Y 10/8B91: 99 30 73 STA $7330,Y 10/8B94: 90 1A BCC $8BB0 10/8B96: B9 40 73 LDA $7340,Y 10/8B99: 38 SEC 10/8B9A: E9 01 SBC #$01 10/8B9C: 99 40 73 STA $7340,Y 10/8B9F: BD 00 73 LDA $7300,X 10/8BA2: 38 SEC 10/8BA3: E9 10 SBC #$10 10/8BA5: 9D 00 73 STA $7300,X 10/8BA8: BD 01 73 LDA $7301,X 10/8BAB: E9 00 SBC #$00 10/8BAD: 9D 01 73 STA $7301,X 10/8BB0: E8 INX 10/8BB1: E8 INX 10/8BB2: C8 INY 10/8BB3: C0 10 CPY #$10 10/8BB5: D0 CC BNE $8B83 10/8BB7: A5 7E LDA $7E 10/8BB9: F0 03 BEQ $8BBE 10/8BBB: 4C E9 8A JMP $8AE9 10/8BBE: A5 06 LDA $06 10/8BC0: 29 FE AND #$FE 10/8BC2: 85 06 STA $06 10/8BC4: A9 97 LDA #$97 10/8BC6: 85 03 STA $03 10/8BC8: 60 RTS ; dark cloud green color palettes 10/8BC9: 0F 2B 16 1B 10/8BCD: 0F 3B 16 2B 10/8BD1: 0F 1B 16 3B ; [ final boss animation 0: flare wave ] 10/8BD5: 20 15 8A JSR $8A15 ; dark cloud green color cycle 10/8BD8: 20 19 8C JSR $8C19 ; reset vector angles 10/8BDB: A9 10 LDA #$10 10/8BDD: 8D 26 7E STA $7E26 ; vector distance 10/8BE0: A9 80 LDA #$80 10/8BE2: 85 8C STA $8C 10/8BE4: A0 00 LDY #$00 10/8BE6: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 10/8BE9: 98 TYA 10/8BEA: 48 PHA 10/8BEB: A0 00 LDY #$00 10/8BED: 20 35 8C JSR $8C35 10/8BF0: 85 8E STA $8E 10/8BF2: AD 3A 7E LDA $7E3A 10/8BF5: 18 CLC 10/8BF6: 69 10 ADC #$10 10/8BF8: 8D 3A 7E STA $7E3A 10/8BFB: 68 PLA 10/8BFC: A8 TAY 10/8BFD: 20 E6 8C JSR $8CE6 10/8C00: A5 8C LDA $8C 10/8C02: 18 CLC 10/8C03: 69 08 ADC #$08 10/8C05: 85 8C STA $8C 10/8C07: C9 E8 CMP #$E8 ; x position ??? 10/8C09: B0 0A BCS $8C15 10/8C0B: C8 INY 10/8C0C: C0 08 CPY #$08 10/8C0E: 90 D6 BCC $8BE6 10/8C10: A0 07 LDY #$07 10/8C12: 4C E6 8B JMP $8BE6 10/8C15: 20 23 8D JSR $8D23 ; clear oam data ($00-$9F) 10/8C18: 60 RTS ; [ reset vector angles ] 10/8C19: A2 0A LDX #$0A 10/8C1B: A9 00 LDA #$00 10/8C1D: 9D 39 7E STA $7E39,X 10/8C20: A9 40 LDA #$40 10/8C22: 9D 43 7E STA $7E43,X 10/8C25: CA DEX 10/8C26: D0 F3 BNE $8C1B 10/8C28: 60 RTS ; [ ] 10/8C29: BE 44 7E LDX $7E44,Y 10/8C2C: B9 30 7E LDA $7E30,Y 10/8C2F: 8D 4E 7E STA $7E4E 10/8C32: 4C 41 8C JMP $8C41 ; [ ] 10/8C35: BE 3A 7E LDX $7E3A,Y 10/8C38: B9 26 7E LDA $7E26,Y 10/8C3B: 8D 4E 7E STA $7E4E 10/8C3E: 4C 41 8C JMP $8C41 ; [ ] 10/8C41: BD 80 9A LDA $9A80,X 10/8C44: 10 11 BPL $8C57 10/8C46: 49 FF EOR #$FF 10/8C48: AE 4E 7E LDX $7E4E 10/8C4B: 20 5F 8C JSR $8C5F 10/8C4E: 49 FF EOR #$FF 10/8C50: 18 CLC 10/8C51: 69 01 ADC #$01 10/8C53: F0 08 BEQ $8C5D 10/8C55: 38 SEC 10/8C56: 60 RTS 10/8C57: AE 4E 7E LDX $7E4E 10/8C5A: 20 5F 8C JSR $8C5F 10/8C5D: 18 CLC 10/8C5E: 60 RTS ; [ ] 10/8C5F: 0A ASL 10/8C60: 85 7E STA $7E 10/8C62: 86 80 STX $80 10/8C64: A2 08 LDX #$08 10/8C66: A9 00 LDA #$00 10/8C68: 85 82 STA $82 10/8C6A: 46 7E LSR $7E 10/8C6C: 90 03 BCC $8C71 10/8C6E: 18 CLC 10/8C6F: 65 80 ADC $80 10/8C71: 6A ROR 10/8C72: 66 82 ROR $82 10/8C74: CA DEX 10/8C75: D0 F3 BNE $8C6A 10/8C77: 60 RTS ; [ ] 10/8C78: 85 7E STA $7E 10/8C7A: B9 26 7E LDA $7E26,Y 10/8C7D: 38 SEC 10/8C7E: E5 7E SBC $7E 10/8C80: 99 26 7E STA $7E26,Y 10/8C83: B9 30 7E LDA $7E30,Y 10/8C86: 38 SEC 10/8C87: E5 7E SBC $7E 10/8C89: 99 30 7E STA $7E30,Y 10/8C8C: 60 RTS ; [ ] 10/8C8D: 85 7E STA $7E 10/8C8F: B9 3A 7E LDA $7E3A,Y 10/8C92: 18 CLC 10/8C93: 65 7E ADC $7E 10/8C95: 99 3A 7E STA $7E3A,Y 10/8C98: B9 44 7E LDA $7E44,Y 10/8C9B: 18 CLC 10/8C9C: 65 7E ADC $7E 10/8C9E: 99 44 7E STA $7E44,Y 10/8CA1: 60 RTS ; [ update flare wave sprites ] 10/8CA2: 85 7E STA $7E 10/8CA4: 98 TYA 10/8CA5: 48 PHA 10/8CA6: A5 7E LDA $7E 10/8CA8: 0A ASL 10/8CA9: A8 TAY 10/8CAA: B9 80 8D LDA $8D80,Y 10/8CAD: 85 7E STA $7E 10/8CAF: B9 81 8D LDA $8D81,Y 10/8CB2: 85 7F STA $7F 10/8CB4: A6 C8 LDX $C8 10/8CB6: A0 00 LDY #$00 10/8CB8: B1 7E LDA ($7E),Y 10/8CBA: C9 FF CMP #$FF 10/8CBC: F0 23 BEQ $8CE1 10/8CBE: 18 CLC 10/8CBF: 65 8D ADC $8D 10/8CC1: 9D 00 02 STA $0200,X 10/8CC4: E8 INX 10/8CC5: C8 INY 10/8CC6: B1 7E LDA ($7E),Y 10/8CC8: 9D 00 02 STA $0200,X 10/8CCB: E8 INX 10/8CCC: C8 INY 10/8CCD: B1 7E LDA ($7E),Y 10/8CCF: 9D 00 02 STA $0200,X 10/8CD2: E8 INX 10/8CD3: C8 INY 10/8CD4: B1 7E LDA ($7E),Y 10/8CD6: 18 CLC 10/8CD7: 65 8C ADC $8C 10/8CD9: 9D 00 02 STA $0200,X 10/8CDC: E8 INX 10/8CDD: C8 INY 10/8CDE: 4C B8 8C JMP $8CB8 10/8CE1: 86 C8 STX $C8 10/8CE3: 68 PLA 10/8CE4: A8 TAY 10/8CE5: 60 RTS ; [ update flare wave animation ] 10/8CE6: 85 7E STA $7E 10/8CE8: 98 TYA 10/8CE9: 48 PHA 10/8CEA: A5 7E LDA $7E 10/8CEC: A2 0A LDX #$0A 10/8CEE: 20 EA F8 JSR $F8EA ; multiply 10/8CF1: 18 CLC 10/8CF2: 69 30 ADC #$30 ; 10/8D30 10/8CF4: 85 84 STA $84 10/8CF6: 8A TXA 10/8CF7: 69 8D ADC #$8D 10/8CF9: 85 85 STA $85 10/8CFB: 20 23 8D JSR $8D23 ; clear oam data ($00-$9F) 10/8CFE: A9 00 LDA #$00 10/8D00: 85 C8 STA $C8 10/8D02: A9 40 LDA #$40 10/8D04: 18 CLC 10/8D05: 65 8E ADC $8E 10/8D07: 85 8D STA $8D 10/8D09: A0 00 LDY #$00 10/8D0B: B1 84 LDA ($84),Y 10/8D0D: C9 FF CMP #$FF 10/8D0F: F0 03 BEQ $8D14 10/8D11: 20 A2 8C JSR $8CA2 10/8D14: A5 8D LDA $8D 10/8D16: 18 CLC 10/8D17: 69 08 ADC #$08 10/8D19: 85 8D STA $8D 10/8D1B: C8 INY 10/8D1C: C0 0A CPY #$0A 10/8D1E: D0 EB BNE $8D0B 10/8D20: 68 PLA 10/8D21: A8 TAY 10/8D22: 60 RTS ; [ clear oam data ($00-$9F) ] 10/8D23: A2 00 LDX #$00 10/8D25: A9 F0 LDA #$F0 10/8D27: 9D 00 02 STA $0200,X 10/8D2A: E8 INX 10/8D2B: E0 A0 CPX #$A0 10/8D2D: D0 F8 BNE $8D27 10/8D2F: 60 RTS ; -------------------------------------------------------------------------- 1F/A000: 4C A4 A0 JMP $A0A4 ; prologue 1F/A003: 4C 09 A0 JMP $A009 ; epilogue 1F/A006: 4C 12 A0 JMP $A012 ; ending ; [ epilogue ] 1F/A009: 20 6C A1 JSR $A16C ; cutscene init 1F/A00C: 20 46 B1 JSR $B146 ; epilogue 1F/A00F: 4C 5C A1 JMP $A15C ; cutscene deinit ; [ ending ] 1F/A012: 20 6C A1 JSR $A16C ; cutscene init 1F/A015: 20 B6 B5 JSR $B5B6 ; ending 1F/A018: 4C 5C A1 JMP $A15C ; cutscene deinit ; pointers to cutscene graphics ; +$00: source address ; +$02: ppu address ; $04: tile count ; $05: source bank 1F/A01B: B700 0700 50 06 ; 0: 0D/B700 (text/menu graphics 1) 1F/A021: BC00 0C00 40 06 ; 1: 0D/BC00 (text/menu graphics 2) 1F/A027: 8E00 0600 1A 08 ; 2: 10/8E00 (cutscene font 1) 1F/A02D: 8FA0 0180 0A 08 ; 3: 10/8FA0 (cutscene font 2) 1F/A033: 8E00 1000 50 08 ; 4: 10/8E00 (prologue sprite graphics) 1F/A039: 7575 1010 04 0F ; 5: $7575 (decompressed sprite graphics) 1F/A03F: 7575 0000 70 0F ; 6: $7575 (decompressed bg graphics) 1F/A045: 9290 1000 30 08 ; 7: 10/9290 (ending sprite graphics) 1F/A04B: 7575 2000 40 0F ; 8: $7575 (decompressed tilemap and attributes) 1F/A051: 7900 0000 04 0F ; 9: $7900 (text buffer) 1F/A057: 8E00 00D0 1C 08 ; A: 10/8E00 (ending font) 1F/A05D: 94C0 0E00 18 08 ; B: 10/94C0 (ending graphics) ; [ copy cutscene graphics to ppu ] ; A: cutscene graphics id 1F/A063: A2 00 LDX #$00 1F/A065: 86 7E STX $7E 1F/A067: 86 7F STX $7F 1F/A069: A2 06 LDX #$06 1F/A06B: 20 EA F8 JSR $F8EA ; multiply 1F/A06E: 18 CLC 1F/A06F: 69 1B ADC #$1B ; 1F/A01B 1F/A071: 85 18 STA $18 1F/A073: 8A TXA 1F/A074: 69 A0 ADC #$A0 1F/A076: 85 19 STA $19 1F/A078: 98 TYA 1F/A079: 48 PHA 1F/A07A: A0 00 LDY #$00 1F/A07C: B1 18 LDA ($18),Y ; source address 1F/A07E: 18 CLC 1F/A07F: 65 7E ADC $7E 1F/A081: 85 7E STA $7E 1F/A083: C8 INY 1F/A084: B1 18 LDA ($18),Y 1F/A086: 65 7F ADC $7F 1F/A088: 85 7F STA $7F 1F/A08A: C8 INY 1F/A08B: B1 18 LDA ($18),Y ; ppu address 1F/A08D: 85 80 STA $80 1F/A08F: C8 INY 1F/A090: B1 18 LDA ($18),Y 1F/A092: 85 81 STA $81 1F/A094: C8 INY 1F/A095: B1 18 LDA ($18),Y ; tile count 1F/A097: 85 82 STA $82 1F/A099: C8 INY 1F/A09A: B1 18 LDA ($18),Y ; source bank 1F/A09C: 85 84 STA $84 1F/A09E: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 1F/A0A1: 68 PLA 1F/A0A2: A8 TAY 1F/A0A3: 60 RTS ; [ prologue ] 1F/A0A4: 20 6C A1 JSR $A16C ; cutscene init 1F/A0A7: 20 26 A3 JSR $A326 ; prologue 1F/A0AA: 4C 5C A1 JMP $A15C ; cutscene deinit ; [ screen on ] 1F/A0AD: 20 80 FB JSR $FB80 ; wait for nmi 1F/A0B0: 58 CLI 1F/A0B1: E6 01 INC $01 ; enable irq 1F/A0B3: EE F3 7C INC $7CF3 1F/A0B6: A9 1E LDA #$1E ; -> $2001 (enable sprites and bg) 1F/A0B8: 85 09 STA $09 1F/A0BA: 85 0B STA $0B 1F/A0BC: 60 RTS ; [ reset frame counter ] 1F/A0BD: A9 00 LDA #$00 1F/A0BF: 85 B6 STA $B6 1F/A0C1: 60 RTS ; [ reset brightness counter ] 1F/A0C2: A9 00 LDA #$00 1F/A0C4: 85 B7 STA $B7 1F/A0C6: 60 RTS ; [ decrease palette brightness ] ; A: palette set ; $CC: use tint to interpolate between colors 1F/A0C7: 48 PHA 1F/A0C8: E6 B7 INC $B7 1F/A0CA: A5 B7 LDA $B7 1F/A0CC: 29 01 AND #$01 1F/A0CE: D0 0C BNE $A0DC ; tint every other frame 1F/A0D0: A5 CC LDA $CC 1F/A0D2: F0 08 BEQ $A0DC 1F/A0D4: A5 09 LDA $09 1F/A0D6: 09 E0 ORA #$E0 ; tint RGB 1F/A0D8: 85 09 STA $09 1F/A0DA: 68 PLA 1F/A0DB: 60 RTS 1F/A0DC: A5 09 LDA $09 1F/A0DE: 29 1F AND #$1F ; no tint 1F/A0E0: 85 09 STA $09 1F/A0E2: 68 PLA 1F/A0E3: 4C 87 FA JMP $FA87 ; fade out color palettes ; [ fade out all palettes ] 1F/A0E6: A9 00 LDA #$00 ; fallthrough ; [ fade out palettes ] 1F/A0E8: 85 90 STA $90 1F/A0EA: 20 C2 A0 JSR $A0C2 ; reset brightness counter 1F/A0ED: 20 BD A0 JSR $A0BD ; reset frame counter 1F/A0F0: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/A0F3: A5 B6 LDA $B6 1F/A0F5: 29 07 AND #$07 1F/A0F7: D0 05 BNE $A0FE 1F/A0F9: A5 90 LDA $90 1F/A0FB: 20 C7 A0 JSR $A0C7 ; decrease palette brightness 1F/A0FE: 20 57 A1 JSR $A157 1F/A101: C9 50 CMP #$50 1F/A103: D0 EB BNE $A0F0 1F/A105: A9 00 LDA #$00 1F/A107: 85 CC STA $CC 1F/A109: 60 RTS ; [ fade in palettes ] ; 0: all palettes ; 1: bg palettes ; 2: sprite palettes 1F/A10A: 85 90 STA $90 1F/A10C: A2 20 LDX #$20 1F/A10E: BD F6 7C LDA $7CF6,X ; copy palettes 1F/A111: 9D 77 7E STA $7E77,X 1F/A114: CA DEX 1F/A115: D0 F7 BNE $A10E 1F/A117: 20 BD A0 JSR $A0BD ; reset frame counter 1F/A11A: A5 90 LDA $90 1F/A11C: 20 BC A1 JSR $A1BC ; clear palettes 1F/A11F: A9 0D LDA #$0D 1F/A121: 85 18 STA $18 1F/A123: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/A126: A5 B6 LDA $B6 1F/A128: 29 07 AND #$07 1F/A12A: D0 1F BNE $A14B ; change colors every 8 frames 1F/A12C: A2 20 LDX #$20 1F/A12E: BD 77 7E LDA $7E77,X 1F/A131: 9D F6 7C STA $7CF6,X 1F/A134: CA DEX 1F/A135: D0 F7 BNE $A12E 1F/A137: 20 C2 A0 JSR $A0C2 ; reset brightness counter 1F/A13A: A5 18 LDA $18 1F/A13C: F0 0D BEQ $A14B 1F/A13E: 85 19 STA $19 1F/A140: A5 90 LDA $90 1F/A142: 20 C7 A0 JSR $A0C7 ; decrease palette brightness 1F/A145: C6 19 DEC $19 1F/A147: D0 F7 BNE $A140 1F/A149: C6 18 DEC $18 1F/A14B: 20 57 A1 JSR $A157 ; increment frame counter 1F/A14E: C9 70 CMP #$70 ; fade-in takes 112 frames 1F/A150: D0 D1 BNE $A123 1F/A152: A9 00 LDA #$00 1F/A154: 85 CC STA $CC 1F/A156: 60 RTS ; [ increment frame counter ] 1F/A157: E6 B6 INC $B6 1F/A159: A5 B6 LDA $B6 1F/A15B: 60 RTS ; [ cutscene deinit ] 1F/A15C: 20 1D FA JSR $FA1D ; reset ppu control 1F/A15F: 20 DD FA JSR $FADD ; pop interrupt jump code 1F/A162: 20 3B F8 JSR $F83B ; pop dp 1F/A165: 78 SEI 1F/A166: A9 80 LDA #$80 1F/A168: 8D 00 20 STA $2000 1F/A16B: 60 RTS ; [ cutscene init ] 1F/A16C: 20 17 FB JSR $FB17 ; push dp 1F/A16F: 20 B5 FA JSR $FAB5 ; set interrupt jump code 1F/A172: A9 0F LDA #$0F 1F/A174: 8D F6 7C STA $7CF6 1F/A177: 20 1D FA JSR $FA1D ; reset ppu control 1F/A17A: 8D F3 7C STA $7CF3 1F/A17D: 85 00 STA $00 1F/A17F: 85 05 STA $05 1F/A181: 85 A9 STA $A9 1F/A183: 85 AA STA $AA 1F/A185: 85 01 STA $01 1F/A187: 85 C9 STA $C9 1F/A189: 85 CA STA $CA 1F/A18B: 85 CC STA $CC 1F/A18D: 85 92 STA $92 1F/A18F: 85 0C STA $0C 1F/A191: 85 0D STA $0D 1F/A193: 85 10 STA $10 1F/A195: 85 11 STA $11 1F/A197: 85 09 STA $09 1F/A199: 85 0B STA $0B 1F/A19B: A9 88 LDA #$88 1F/A19D: 85 06 STA $06 1F/A19F: 85 08 STA $08 1F/A1A1: 20 27 FC JSR $FC27 ; init rng 1F/A1A4: A5 06 LDA $06 1F/A1A6: 09 80 ORA #$80 1F/A1A8: 8D 00 20 STA $2000 1F/A1AB: A9 08 LDA #$08 1F/A1AD: 85 03 STA $03 1F/A1AF: 20 DC A1 JSR $A1DC ; clear vram 1F/A1B2: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/A1B5: 60 RTS ; data for clearing palettes ; $00: first color ; $01: last color (exclusive) 1F/A1B6: 00 20 1F/A1B8: 00 10 1F/A1BA: 10 20 ; [ clear palettes ] ; A: fade type ; 0: all palettes ; 1: bg palettes ; 2: sprite palettes 1F/A1BC: 0A ASL 1F/A1BD: A8 TAY 1F/A1BE: B9 B7 A1 LDA $A1B7,Y 1F/A1C1: 85 18 STA $18 1F/A1C3: BE B6 A1 LDX $A1B6,Y 1F/A1C6: A9 0F LDA #$0F 1F/A1C8: 9D F7 7C STA $7CF7,X ; color palettes 1F/A1CB: E8 INX 1F/A1CC: E4 18 CPX $18 1F/A1CE: D0 F8 BNE $A1C8 1F/A1D0: 60 RTS ; [ clear oam data ] 1F/A1D1: A0 00 LDY #$00 1F/A1D3: A9 F0 LDA #$F0 1F/A1D5: 99 00 02 STA $0200,Y 1F/A1D8: C8 INY 1F/A1D9: D0 FA BNE $A1D5 1F/A1DB: 60 RTS ; [ clear vram ] 1F/A1DC: A9 00 LDA #$00 1F/A1DE: AA TAX 1F/A1DF: A0 30 LDY #$30 1F/A1E1: 20 E0 F8 JSR $F8E0 ; set ppu address 1F/A1E4: 8D 07 20 STA $2007 1F/A1E7: CA DEX 1F/A1E8: D0 FA BNE $A1E4 1F/A1EA: 88 DEY 1F/A1EB: D0 F7 BNE $A1E4 1F/A1ED: 60 RTS ; [ wait for vblank ] ; X: number of frames to wait 1F/A1EE: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 1F/A1F1: CA DEX 1F/A1F2: D0 FA BNE $A1EE 1F/A1F4: 60 RTS ; [ update cutscene sprite data ] ; +$7E: pointer to tile ids ; $80: number of sprites ; $82: attributes (unused ???) ; +$86: pointer to attributes ; $8C: x position ; $8D: y position ; $C8: sprite data offset 1F/A1F5: A0 00 LDY #$00 1F/A1F7: A6 C8 LDX $C8 1F/A1F9: A5 80 LDA $80 1F/A1FB: 85 84 STA $84 1F/A1FD: B9 00 73 LDA $7300,Y 1F/A200: 18 CLC 1F/A201: 65 8D ADC $8D 1F/A203: 9D 00 02 STA $0200,X 1F/A206: C8 INY 1F/A207: E8 INX 1F/A208: C8 INY 1F/A209: E8 INX 1F/A20A: A5 82 LDA $82 1F/A20C: 9D 00 02 STA $0200,X 1F/A20F: C8 INY 1F/A210: E8 INX 1F/A211: B9 00 73 LDA $7300,Y 1F/A214: 18 CLC 1F/A215: 65 8C ADC $8C 1F/A217: 9D 00 02 STA $0200,X 1F/A21A: C8 INY 1F/A21B: E8 INX 1F/A21C: C6 84 DEC $84 1F/A21E: D0 DD BNE $A1FD 1F/A220: A6 C8 LDX $C8 1F/A222: A0 00 LDY #$00 1F/A224: B1 7E LDA ($7E),Y 1F/A226: 9D 01 02 STA $0201,X 1F/A229: B1 86 LDA ($86),Y 1F/A22B: 9D 02 02 STA $0202,X 1F/A22E: C8 INY 1F/A22F: E8 INX 1F/A230: E8 INX 1F/A231: E8 INX 1F/A232: E8 INX 1F/A233: C6 80 DEC $80 1F/A235: D0 ED BNE $A224 1F/A237: 86 C8 STX $C8 1F/A239: 60 RTS ; [ init sprite positions ] ; $8C: width ; $8D: height 1F/A23A: A2 00 LDX #$00 1F/A23C: A9 F0 LDA #$F0 1F/A23E: 9D 00 73 STA $7300,X 1F/A241: E8 INX 1F/A242: D0 FA BNE $A23E 1F/A244: A2 00 LDX #$00 1F/A246: 86 80 STX $80 ; start of y-loop 1F/A248: A5 8C LDA $8C 1F/A24A: 85 82 STA $82 1F/A24C: A9 00 LDA #$00 1F/A24E: 85 7E STA $7E ; start of x-loop 1F/A250: A5 80 LDA $80 1F/A252: 9D 00 73 STA $7300,X 1F/A255: A5 7E LDA $7E 1F/A257: 9D 03 73 STA $7303,X 1F/A25A: E8 INX 1F/A25B: E8 INX 1F/A25C: E8 INX 1F/A25D: E8 INX 1F/A25E: A9 08 LDA #$08 1F/A260: 20 F2 F8 JSR $F8F2 ; add to +$7E 1F/A263: C6 82 DEC $82 1F/A265: D0 E9 BNE $A250 1F/A267: A9 08 LDA #$08 1F/A269: 20 FE F8 JSR $F8FE ; add to +$80 1F/A26C: C6 8D DEC $8D 1F/A26E: D0 D8 BNE $A248 1F/A270: 60 RTS ; [ add to +$18 ] 1F/A271: 18 CLC 1F/A272: 65 18 ADC $18 1F/A274: 85 18 STA $18 1F/A276: A5 19 LDA $19 1F/A278: 69 00 ADC #$00 1F/A27A: 85 19 STA $19 1F/A27C: 60 RTS ; -------------------------------------------------------------------------- ; [ decompress ] ; compressed data has a header that specifies the compressed size and a list ; of byte values that use run-length encoding (rle). the byte after an rle ; value determines the run length. all other byte values are not compressed. ; $7200-$72FF: rle table (1 if rle) ; $7575-$7D74: decompression buffer 1F/A27D: 0A ASL 1F/A27E: A8 TAY 1F/A27F: B9 32 A9 LDA $A932,Y 1F/A282: 85 18 STA $18 1F/A284: B9 33 A9 LDA $A933,Y 1F/A287: 85 19 STA $19 1F/A289: A2 00 LDX #$00 1F/A28B: A9 00 LDA #$00 1F/A28D: 9D 00 72 STA $7200,X 1F/A290: E8 INX 1F/A291: D0 FA BNE $A28D 1F/A293: A0 00 LDY #$00 1F/A295: B1 18 LDA ($18),Y 1F/A297: F0 0F BEQ $A2A8 1F/A299: 85 B1 STA $B1 1F/A29B: A0 03 LDY #$03 1F/A29D: B1 18 LDA ($18),Y 1F/A29F: AA TAX 1F/A2A0: FE 00 72 INC $7200,X 1F/A2A3: C8 INY 1F/A2A4: C6 B1 DEC $B1 1F/A2A6: D0 F5 BNE $A29D 1F/A2A8: A0 01 LDY #$01 1F/A2AA: B1 18 LDA ($18),Y 1F/A2AC: 85 AF STA $AF 1F/A2AE: C8 INY 1F/A2AF: B1 18 LDA ($18),Y 1F/A2B1: 85 B0 STA $B0 1F/A2B3: A0 00 LDY #$00 1F/A2B5: B1 18 LDA ($18),Y 1F/A2B7: 20 71 A2 JSR $A271 ; add to +$18 1F/A2BA: A9 03 LDA #$03 1F/A2BC: 20 71 A2 JSR $A271 ; add to +$18 1F/A2BF: A5 18 LDA $18 1F/A2C1: 85 AD STA $AD 1F/A2C3: A5 19 LDA $19 1F/A2C5: 85 AE STA $AE 1F/A2C7: A9 75 LDA #$75 ; $7575 1F/A2C9: 85 7E STA $7E 1F/A2CB: A9 75 LDA #$75 1F/A2CD: 85 7F STA $7F 1F/A2CF: A5 AF LDA $AF ; lo byte of size 1F/A2D1: 18 CLC 1F/A2D2: 65 18 ADC $18 1F/A2D4: 85 AF STA $AF 1F/A2D6: A5 B0 LDA $B0 ; hi byte of size 1F/A2D8: 65 19 ADC $19 1F/A2DA: 85 B0 STA $B0 ; start of loop 1F/A2DC: A0 00 LDY #$00 1F/A2DE: B1 AD LDA ($AD),Y 1F/A2E0: AA TAX 1F/A2E1: BD 00 72 LDA $7200,X 1F/A2E4: F0 1A BEQ $A300 1F/A2E6: 8A TXA 1F/A2E7: 48 PHA 1F/A2E8: C8 INY 1F/A2E9: B1 AD LDA ($AD),Y 1F/A2EB: AA TAX 1F/A2EC: 68 PLA 1F/A2ED: 88 DEY 1F/A2EE: 91 7E STA ($7E),Y ; rle 1F/A2F0: C8 INY 1F/A2F1: CA DEX 1F/A2F2: D0 FA BNE $A2EE 1F/A2F4: 98 TYA 1F/A2F5: 20 F2 F8 JSR $F8F2 ; add to +$7E 1F/A2F8: A9 02 LDA #$02 1F/A2FA: 20 1A A3 JSR $A31A ; add to +$AD 1F/A2FD: 4C 0D A3 JMP $A30D 1F/A300: 8A TXA 1F/A301: 91 7E STA ($7E),Y ; raw 1F/A303: A9 01 LDA #$01 1F/A305: 20 F2 F8 JSR $F8F2 ; add to +$7E 1F/A308: A9 01 LDA #$01 1F/A30A: 20 1A A3 JSR $A31A ; add to +$AD 1F/A30D: A5 AD LDA $AD 1F/A30F: C5 AF CMP $AF 1F/A311: D0 C9 BNE $A2DC 1F/A313: A5 AE LDA $AE 1F/A315: C5 B0 CMP $B0 1F/A317: D0 C3 BNE $A2DC 1F/A319: 60 RTS ; [ add to +$AD ] 1F/A31A: 18 CLC 1F/A31B: 65 AD ADC $AD 1F/A31D: 85 AD STA $AD 1F/A31F: A5 AE LDA $AE 1F/A321: 69 00 ADC #$00 1F/A323: 85 AE STA $AE 1F/A325: 60 RTS ; -------------------------------------------------------------------------- ; [ prologue ] 1F/A326: 20 CA A3 JSR $A3CA 1F/A329: 20 CF A3 JSR $A3CF ; load cutscene graphics 1F/A32C: A9 14 LDA #$14 1F/A32E: 20 E9 FA JSR $FAE9 ; play song 1F/A331: 20 AD A0 JSR $A0AD ; screen on 1F/A334: 20 28 A4 JSR $A428 ; flash crystal (3 times) 1F/A337: 20 1C A4 JSR $A41C ; draw full crystal 1F/A33A: 20 FB A3 JSR $A3FB ; show crystal sparkle sprites 1F/A33D: A9 00 LDA #$00 1F/A33F: 20 2D A5 JSR $A52D ; draw prologue text 1F/A342: A9 01 LDA #$01 1F/A344: 20 2D A5 JSR $A52D ; draw prologue text 1F/A347: A9 30 LDA #$30 1F/A349: 8D FA 7C STA $7CFA 1F/A34C: A9 01 LDA #$01 ; bg palettes 1F/A34E: 20 0A A1 JSR $A10A ; fade in palettes 1F/A351: A2 F0 LDX #$F0 1F/A353: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A356: A2 64 LDX #$64 1F/A358: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A35B: A9 01 LDA #$01 ; bg palettes 1F/A35D: 20 E8 A0 JSR $A0E8 ; fade out palettes 1F/A360: A9 02 LDA #$02 1F/A362: 20 2D A5 JSR $A52D ; draw prologue text 1F/A365: A9 03 LDA #$03 1F/A367: 20 2D A5 JSR $A52D ; draw prologue text 1F/A36A: 20 AC A3 JSR $A3AC ; move crystal up 1F/A36D: A9 09 LDA #$09 1F/A36F: 85 4B STA $4B 1F/A371: A9 04 LDA #$04 ; text $04 through $0C 1F/A373: 85 4A STA $4A 1F/A375: 20 95 A3 JSR $A395 ; show prologue text 1F/A378: C6 4B DEC $4B 1F/A37A: D0 F9 BNE $A375 1F/A37C: A9 0C LDA #$0C ; fade out music 1F/A37E: 8D 42 7F STA $7F42 1F/A381: A2 78 LDX #$78 1F/A383: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A386: A9 00 LDA #$00 ; all palettes 1F/A388: 4C E8 A0 JMP $A0E8 ; fade out palettes ; [ fade in bg palettes ] 1F/A38B: A9 01 LDA #$01 1F/A38D: 4C 0A A1 JMP $A10A ; [ fade out bg palettes ] 1F/A390: A9 01 LDA #$01 ; bg palettes 1F/A392: 4C E8 A0 JMP $A0E8 ; fade out palettes ; [ show prologue text ] 1F/A395: A5 4A LDA $4A 1F/A397: 20 2D A5 JSR $A52D ; draw prologue text 1F/A39A: E6 4A INC $4A 1F/A39C: A9 30 LDA #$30 1F/A39E: 8D FA 7C STA $7CFA 1F/A3A1: 20 8B A3 JSR $A38B ; fade in bg palettes 1F/A3A4: A2 EC LDX #$EC 1F/A3A6: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A3A9: 4C 90 A3 JMP $A390 ; fade out bg palettes ; [ move crystal up ] 1F/A3AC: A0 30 LDY #$30 1F/A3AE: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 1F/A3B1: A2 00 LDX #$00 1F/A3B3: BD 08 02 LDA $0208,X 1F/A3B6: 18 CLC 1F/A3B7: 69 FF ADC #$FF 1F/A3B9: 9D 08 02 STA $0208,X 1F/A3BC: E8 INX 1F/A3BD: E8 INX 1F/A3BE: E8 INX 1F/A3BF: E8 INX 1F/A3C0: E0 70 CPX #$70 1F/A3C2: D0 EF BNE $A3B3 1F/A3C4: 88 DEY 1F/A3C5: D0 E7 BNE $A3AE 1F/A3C7: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; [ load prologue color palettes ] 1F/A3CA: A9 00 LDA #$00 1F/A3CC: 4C 40 B3 JMP $B340 ; load color palettes ; [ load cutscene graphics ] 1F/A3CF: A0 00 LDY #$00 1F/A3D1: 98 TYA 1F/A3D2: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/A3D5: C8 INY 1F/A3D6: C0 05 CPY #$05 1F/A3D8: D0 F7 BNE $A3D1 1F/A3DA: 60 RTS ; crystal sparkle sprite data 1F/A3DB: 5D 3C 00 7C 1F/A3DF: 5D 3C C0 7C 1F/A3E3: 65 3D 00 7E 1F/A3E7: 6D 3D 00 7E 1F/A3EB: 72 3C 40 7C 1F/A3EF: 72 3C 80 7C 1F/A3F3: 75 3E 00 78 1F/A3F7: F0 F0 F0 E4 ; [ show crystal sparkle sprites ] 1F/A3FB: 20 BD A0 JSR $A0BD ; reset frame counter 1F/A3FE: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 1F/A401: A5 B6 LDA $B6 1F/A403: 29 1C AND #$1C ; change sprite every 4 frames 1F/A405: A8 TAY 1F/A406: A2 00 LDX #$00 1F/A408: B9 DB A3 LDA $A3DB,Y 1F/A40B: 9D 00 02 STA $0200,X 1F/A40E: C8 INY 1F/A40F: E8 INX 1F/A410: E0 04 CPX #$04 1F/A412: D0 F4 BNE $A408 1F/A414: 20 57 A1 JSR $A157 ; increment frame counter 1F/A417: 29 40 AND #$40 1F/A419: F0 E3 BEQ $A3FE 1F/A41B: 60 RTS ; [ draw full crystal ] 1F/A41C: A9 02 LDA #$02 ; full crystal 1F/A41E: 20 58 A4 JSR $A458 1F/A421: E6 CC INC $CC 1F/A423: A9 00 LDA #$00 ; all palettes 1F/A425: 4C 0A A1 JMP $A10A ; fade in palettes ; [ flash crystal (3 times) ] 1F/A428: 20 2E A4 JSR $A42E 1F/A42B: 20 2E A4 JSR $A42E ; fallthrough ; [ flash crystal ] 1F/A42E: A2 3C LDX #$3C 1F/A430: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A433: A9 00 LDA #$00 ; bottom left part of crystal 1F/A435: 20 52 A4 JSR $A452 ; update crystal sprites 1F/A438: A2 03 LDX #$03 1F/A43A: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A43D: A9 01 LDA #$01 ; top right part of crystal 1F/A43F: 20 52 A4 JSR $A452 ; update crystal sprites 1F/A442: A2 03 LDX #$03 1F/A444: 20 EE A1 JSR $A1EE ; wait for vblank 1F/A447: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/A44A: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/A44D: A2 3C LDX #$3C 1F/A44F: 4C EE A1 JMP $A1EE ; wait for vblank ; [ update crystal sprites ] 1F/A452: 20 58 A4 JSR $A458 1F/A455: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ update crystal sprites ] ; A: crystal part 1F/A458: A2 08 LDX #$08 1F/A45A: 20 EA F8 JSR $F8EA ; multiply 1F/A45D: 18 CLC 1F/A45E: 69 AB ADC #$AB ; 1F/A4AB 1F/A460: 85 88 STA $88 1F/A462: 8A TXA 1F/A463: 69 A4 ADC #$A4 1F/A465: 85 89 STA $89 1F/A467: A0 00 LDY #$00 1F/A469: B1 88 LDA ($88),Y 1F/A46B: 85 8C STA $8C 1F/A46D: C8 INY 1F/A46E: B1 88 LDA ($88),Y 1F/A470: 85 8D STA $8D 1F/A472: 20 3A A2 JSR $A23A ; init sprite positions 1F/A475: A0 02 LDY #$02 1F/A477: B1 88 LDA ($88),Y 1F/A479: A8 TAY 1F/A47A: B9 C3 A4 LDA $A4C3,Y 1F/A47D: 85 7E STA $7E 1F/A47F: B9 C4 A4 LDA $A4C4,Y 1F/A482: 85 7F STA $7F 1F/A484: B9 C9 A4 LDA $A4C9,Y 1F/A487: 85 86 STA $86 1F/A489: B9 CA A4 LDA $A4CA,Y 1F/A48C: 85 87 STA $87 1F/A48E: A0 03 LDY #$03 1F/A490: B1 88 LDA ($88),Y ; attributes 1F/A492: 85 82 STA $82 1F/A494: C8 INY 1F/A495: B1 88 LDA ($88),Y ; number of sprites 1F/A497: 85 80 STA $80 1F/A499: C8 INY 1F/A49A: B1 88 LDA ($88),Y 1F/A49C: 85 8C STA $8C 1F/A49E: C8 INY 1F/A49F: B1 88 LDA ($88),Y 1F/A4A1: 85 8D STA $8D 1F/A4A3: C8 INY 1F/A4A4: B1 88 LDA ($88),Y ; sprite data offset 1F/A4A6: 85 C8 STA $C8 1F/A4A8: 4C F5 A1 JMP $A1F5 ; 0: width ; 1: height ; 2: tile and attribute pointer offset ; 3: attributes ??? ; 4: number of sprites (width * height) ; 5: x position ; 6: y position ; 7: sprite data offset 1F/A4AB: 02 04 00 01 08 6C 68 00 1F/A4B3: 02 04 02 01 08 7C 50 00 1F/A4BB: 04 07 04 02 1C 6C 50 08 ; pointers to crystal tile ids and attributes 1F/A4C3: A4CF A4D7 A4DF 1F/A4C9: A4FB A4FB A503 ; 0: bottom left part of crystal 1F/A4CF: 43 FF 1F/A4D1: 44 45 1F/A4D3: 46 47 1F/A4D5: FF 3F ; 1: top right part of crystal 1F/A4D7: 25 FF 1F/A4D9: 40 29 1F/A4DB: 41 2D 1F/A4DD: FF 42 ; 2: full crystal 1F/A4DF: FF 24 25 FF 1F/A4E3: 26 27 28 29 1F/A4E7: 2A 2B 2C 2D 1F/A4EB: 2E 2F 30 31 1F/A4EF: 32 33 34 35 1F/A4F3: 36 37 38 39 1F/A4F7: FF 3A 3B FF ; attributes for 0 and 1 1F/A4FB: 01 01 1F/A4FD: 01 01 1F/A4FF: 01 01 1F/A501: 01 01 ; 2: attributes for full crystal 1F/A503: 00 02 00 00 1F/A507: 02 02 03 03 1F/A50B: 01 02 03 03 1F/A50F: 01 01 01 03 1F/A513: 01 01 01 02 1F/A517: 01 01 01 01 1F/A51B: 00 01 01 00 ; -------------------------------------------------------------------------- ; [ clear text buffer ] 1F/A51F: A9 FF LDA #$FF 1F/A521: A2 00 LDX #$00 1F/A523: 9D 00 79 STA $7900,X 1F/A526: 9D 00 7A STA $7A00,X 1F/A529: E8 INX 1F/A52A: D0 F7 BNE $A523 1F/A52C: 60 RTS ; [ draw prologue text ] 1F/A52D: 48 PHA 1F/A52E: A9 0F LDA #$0F 1F/A530: 8D FA 7C STA $7CFA 1F/A533: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/A536: 68 PLA 1F/A537: 20 3D A5 JSR $A53D ; draw prologue text 1F/A53A: 4C 81 A5 JMP $A581 ; copy prologue text to ppu ; [ draw prologue text ] 1F/A53D: A2 03 LDX #$03 1F/A53F: 20 EA F8 JSR $F8EA ; multiply 1F/A542: 18 CLC 1F/A543: 69 A6 ADC #$A6 ; 1F/A5A6 1F/A545: 85 8C STA $8C 1F/A547: 8A TXA 1F/A548: 69 A5 ADC #$A5 1F/A54A: 85 8D STA $8D 1F/A54C: 20 1F A5 JSR $A51F ; clear text buffer 1F/A54F: A0 02 LDY #$02 1F/A551: B1 8C LDA ($8C),Y ; text id 1F/A553: 0A ASL 1F/A554: A8 TAY 1F/A555: B9 DF A5 LDA $A5DF,Y ; get source address 1F/A558: 85 7E STA $7E 1F/A55A: B9 E0 A5 LDA $A5E0,Y 1F/A55D: 85 7F STA $7F 1F/A55F: A9 D7 LDA #$D7 ; destination: $7AD7 1F/A561: 85 80 STA $80 1F/A563: A9 7A LDA #$7A 1F/A565: 85 81 STA $81 1F/A567: A9 FF LDA #$FF ; 255 tiles 1F/A569: 85 82 STA $82 1F/A56B: A9 0F LDA #$0F ; bank 0F 1F/A56D: 85 84 STA $84 1F/A56F: 20 2F F9 JSR $F92F ; load rom data 1F/A572: A9 00 LDA #$00 ; destination: $7900 1F/A574: 85 4E STA $4E 1F/A576: A9 79 LDA #$79 1F/A578: 85 4F STA $4F 1F/A57A: A9 20 LDA #$20 ; line length: 32 tiles 1F/A57C: 85 18 STA $18 1F/A57E: 4C 01 FA JMP $FA01 ; draw text ; [ copy prologue text to ppu ] 1F/A581: A0 01 LDY #$01 1F/A583: B1 8C LDA ($8C),Y 1F/A585: A2 20 LDX #$20 1F/A587: 20 EA F8 JSR $F8EA ; multiply 1F/A58A: 18 CLC 1F/A58B: 69 00 ADC #$00 1F/A58D: 85 80 STA $80 1F/A58F: 8A TXA 1F/A590: 69 20 ADC #$20 1F/A592: 85 81 STA $81 1F/A594: A9 00 LDA #$00 1F/A596: 85 7E STA $7E 1F/A598: A9 79 LDA #$79 1F/A59A: 85 7F STA $7F 1F/A59C: A9 10 LDA #$10 1F/A59E: 85 82 STA $82 1F/A5A0: 85 84 STA $84 1F/A5A2: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 1F/A5A5: 60 RTS ; cutscene text positions (19 * 3 bytes) ; 0: x offset ; 1: y offset ; 2: string id ; prologue 1F/A5A6: 08 05 00 1F/A5A9: 09 14 01 1F/A5AC: 08 05 02 1F/A5AF: 09 14 02 1F/A5B2: 07 0F 03 1F/A5B5: 07 0F 04 1F/A5B8: 07 0F 05 1F/A5BB: 07 0F 06 1F/A5BE: 07 10 07 1F/A5C1: 07 10 08 1F/A5C4: 07 0F 09 1F/A5C7: 07 0F 0A 1F/A5CA: 07 10 0B ; epilogue 1F/A5CD: 0A 08 0C 1F/A5D0: 0A 08 0D 1F/A5D3: 0A 08 0E 1F/A5D6: 0A 08 0F 1F/A5D9: 0A 08 10 1F/A5DC: 0A 08 02 ; pointers to prologue text 1F/5ADF: A601 A614 A625 A628 A670 A68B A6AA A6D3 1F/5AEF: A6EA A700 A732 A75C ; pointers to epilogue text 1F/5AF7: A773 A7E3 A837 A8AD A901 ; cutscene text (17 items) ; 00 is a null-terminator ; 01 is a newline ; 02 is a tab (followed by the number of spaces) ; prologue text 1F/A601: 02 08 "FINAL FANTASY III" 00 1F/A614: 02 08 "(c) 1990 SQUARE" 00 1F/A625: 02 02 00 1F/A628: 02 07 "PROGRAM NASIR" 01 02 06 "SCENARIO K.TERADA" 01 02 07 "GRAPHIC Y.AMANO" 01 02 09 "MUSIC N.UEMATSU" 00 1F/A670: 02 08 "DESIGN H.TANAKA" 01 02 0F "K.AOKI" 00 1F/A68B: 02 07 "PROGRAM K.YOSHII" 01 02 0F "K.HIGUCHI" 00 1F/A6AA: 02 07 "GRAPHIC K.SHIBUYA" 01 02 0F "H.NAKADA" 01 02 0F "K.ISHII" 00 1F/A6D3: 02 06 "DIRECTOR H.SAKAGUCHI" 00 1F/A6EA: 02 06 "PRODUCER M.MIYAMOTO" 00 1F/A700: 02 0A "4にんは ひかりのなかで" 01 02 07 "そのいしを そのこころを かんじとり" 01 02 0A "たびだつ けついをした" 00 1F/A732: 02 0A "さあ やみをふりはらい" 01 02 0D "ふたたび" 01 02 07 "このせかいに ひかりをとりもどすのだ" 00 1F/A75C: 02 06 "クリスタルのひかりを きぼうにかえて__" 00 ; epilogue text 1F/A773: 02 05 "さいしょは なにもない むの せかいだった" 01 02 08 "あるとを ひかりと やみがでさた" 01 02 09 "すべては そこから つまれた" 01 02 05 "ほし つを みず ひ__  そして いのち" 01 02 03 "とをは それをまた もとのばしょに かえそうとする" 00 1F/A7E3: 02 04 "だが いのちは さらに べつのものをうみだした" 01 02 0A "ひかりと やみをわけ" 01 02 04 "そのかがやさをもって せかいを てらしだすもの" 01 02 08 "をぼう という エネリギニを__" 00 1F/A837: 02 06 "いつかまた ひかりと やみが からなり" 01 02 07 "すべてが むに かえろうとするとさ" 01 02 06 "それを2つに わけるものが あらわれる" 01 02 0B "わすれてはならない" 01 02 03 "そのものに ちからをあたえているのは ひとびとの" 01 02 0A "をぼうだということを__" 00 1F/A8AD: 02 09 "とをは すべてを おしながす" 01 02 0A "ゆめ ぜつぼう あい__" 01 02 08 "だが それを うけいれてはならない" 01 02 0B "ながられてはいけない" 01 02 08 "そこにみいださなければならない" 00 1F/A901: 01 01 02 07 "さいごにのこった 1つぶの かがやを" 01 02 09 "すべてをてらしだす かがやを" 01 02 0D "をぼうを__" 00 ; -------------------------------------------------------------------------- ; pointers to compressed data 1F/A932: A93C A93C A95F AD68 AD68 ; format ; $00: number of rle values ; +$01: compressed size ; $02-$XX: rle values ; $XX-...: compressed data ; star graphics (compressed) 1F/A93C: 02 001E 1F/A93F: 00 22 1F/A941: 00 01 1C 22 03 1C 00 04 1C 1C 1C 00 05 18 24 24 1F/A951: 18 00 05 18 18 00 07 18 18 00 0F 10 00 0A ; ending graphics (compressed) 1F/A95F: 03 0403 1F/A962: FF 00 2F 1F/A965: 00 10 FF 06 F8 00 01 FF 0D C3 00 02 FF 0E 7F 1F 1F/A975: FF 0C FC E0 00 02 FF 0A F1 C0 00 04 FF 0B 3F 07 1F/A985: 00 03 FF 0E 03 00 01 FF 10 00 08 FF 03 FE FC F8 1F/A995: F0 E0 00 05 01 02 06 FF 02 3F 3F 0F 14 08 04 00 1F/A9A5: 02 60 B0 38 7C 3C 7E FE FC F8 C0 00 05 01 03 07 1F/A9B5: 16 3C 68 A0 04 08 48 20 90 08 00 01 06 37 0F CF 1F/A9C5: E7 F1 F8 70 26 FF 01 E7 E7 FC F8 88 8F FF 01 00 1F/A9D5: 01 08 00 01 03 30 00 03 FF 02 E3 E3 FF 02 C7 C7 1F/A9E5: 00 02 0C 00 02 18 18 00 01 FF 04 DF 9F BF 9F 00 1F/A9F5: 06 20 20 00 08 FF 0E FC F8 00 07 06 FF 01 FD F0 1F/AA05: E4 84 40 41 06 00 01 02 0E 1E 4F EE E9 E7 FF 07 1F/AA15: 5F FF 01 FE F9 C6 AF 5A 60 E2 FF 08 F8 A1 44 8E 1F/AA25: 5D 22 4F 9E FF 09 27 01 83 10 00 01 34 CD FF 0A 1F/AA35: DD 67 8F 41 CA E5 F8 FA FC FE FF 04 3F 1F 07 03 1F/AA45: 03 01 00 07 40 81 D4 FF 07 7F C0 C0 80 00 05 0C 1F/AA55: 1B 36 6C 79 67 5E 1C 00 08 F1 CA 81 0E 0C 38 30 1F/AA65: E0 00 06 01 00 01 04 80 04 0C 19 31 61 D1 43 61 1F/AA75: 30 98 4C 27 12 81 DF E7 F3 F8 FC FF 01 BE DF FF 1F/AA85: 01 F7 F1 F1 FF 02 FE FE 00 01 06 00 06 FF 02 F7 1F/AA95: F1 F1 FF 01 3F 3F 00 02 06 00 02 C0 00 02 1F 03 1F/AAA5: 03 FF 05 3C 3C 00 0E FF 08 F0 E0 C4 C0 84 85 13 1F/AAB5: 52 0E 1E 2E 26 76 75 F3 F3 4C 1A 30 48 A0 88 00 1F/AAC5: 01 20 CF 9F 3F 7F FF 04 BF 7B 97 E3 FD FF 03 EF 1F/AAD5: FE FC FD FF 06 5E BF 5F AE F5 FF 01 F3 64 EF F7 1F/AAE5: FF 05 7F FF 01 7D 8A FF 03 F2 A1 CA BF FF 06 FD 1F/AAF5: DF AF 7F FF 03 6B FF 01 B7 FF 08 FE B5 EF FF 02 1F/AB05: AF 9B 25 5B FF 03 1C 9A 94 0E 30 78 C0 A0 5F DF 1F/AB15: DF DF BF 7F FF 02 00 08 3F 7F FE FC F8 F1 E2 C6 1F/AB25: 00 08 80 31 63 C7 CE 9E 3C FC 00 01 02 01 01 00 1F/AB35: 04 67 4B 9B 19 3C 3E 2B 2D 00 01 20 10 80 84 42 1F/AB45: 21 10 FA FD FE FE BF 5F A7 D3 FF 01 BF 8F 8F FF 1F/AB55: 04 00 01 30 00 06 FF 18 00 08 FF 01 0A 02 02 00 1F/AB65: 01 CE B2 48 00 01 D4 D6 D6 00 01 CE FF 02 B0 01 1F/AB75: 11 10 13 05 DA 20 4B DB DB D8 9B 27 FF 02 00 02 1F/AB85: 04 00 01 20 0F FF 08 70 80 00 03 20 04 E0 FF 08 1F/AB95: 1F 00 01 FF 0C FE FC E5 C3 FF 0C 1C AA 54 88 FF 1F/ABA5: 0D 0F 53 27 FF 05 F7 EB F5 FF 01 FE D7 8A 17 AF 1F/ABB5: DF FA 00 08 CC DB B6 6C 79 67 5E 1C C0 C0 C0 E0 1F/ABC5: F8 FC FE FF 01 04 09 13 02 00 01 01 00 09 80 F8 1F/ABD5: 9A 32 72 E6 27 02 00 08 0C 64 46 76 62 72 32 22 1F/ABE5: 00 04 03 07 1F 7F FF 01 B6 D4 D0 B0 80 00 03 03 1F/ABF5: 03 01 01 81 41 A3 91 F0 B8 0C 34 98 CC E0 F0 FF 1F/AC05: 02 7F 3F 1F 17 03 81 00 01 80 C0 60 B8 3C 1E 8F 1F/AC15: FE FC FC F8 F5 E5 C9 A1 00 02 01 02 07 0D 1D 29 1F/AC25: FF 0A FD F2 C4 AA B7 6D FF 09 F3 E7 8B 54 82 BC 1F/AC35: 86 FF 0A DF 2B 56 8F 53 87 84 88 8C D8 D0 D0 D8 1F/AC45: 94 2F 03 1F 1F 1F 1F 1F FE FF 01 AB DB FD FF 03 1F/AC55: F7 BE F5 FD FE FF 05 EF DB A6 5B FF 02 3C 7A F7 1F/AC65: FE 7F FF 04 FB FE 93 6F FF 03 D3 3F 7F FF 09 FB 1F/AC75: D5 A7 7F FF 01 BF 6F 97 6F FF 07 FC E1 D9 9A 00 1F/AC85: 08 FF 02 99 22 72 66 52 32 00 08 BA 94 24 2E 16 1F/AC95: 04 94 19 00 08 29 94 D2 9A DA 90 02 26 00 08 C0 1F/ACA5: 80 80 00 03 80 C0 0F 1E 34 28 11 23 06 00 01 C4 1F/ACB5: 70 10 0C 06 02 84 C0 F4 F8 58 2C 96 EA 9C E0 B3 1F/ACC5: 37 32 55 22 80 80 84 00 06 12 00 01 27 53 B3 5B 1F/ACD5: 37 07 0F 4F 00 06 20 00 04 60 F8 FE FF 05 9F 07 1F/ACE5: 01 00 02 FF 03 7F 3F 0F 07 01 FF 08 00 04 01 07 1F/ACF5: 3F FF 05 FE F8 C0 00 07 03 FF 07 FC 00 04 01 1F 1F/AD05: FF 06 FE E0 00 04 07 1F FF 06 F8 E0 00 06 C0 F0 1F/AD15: F8 FF 05 3F 0F 07 00 08 80 F0 FC FF 05 7F 0F 03 1F/AD25: 00 01 5B 3B 91 2A 01 00 02 C4 00 05 11 11 00 01 1F/AD35: A6 71 93 A3 37 00 02 49 00 05 22 22 00 01 FF 04 1F/AD45: 7F 8F B7 D3 00 08 FF 08 00 08 FF 04 DF AF D5 FF 1F/AD55: 02 F5 C8 95 A2 F1 FF 07 E7 5F FF 02 4F 23 7A DD 1F/AD65: BF FF 02 ; ending tilemap and attributes (compressed) 1F/AD68: 06 03BC 1F/AD6B: 10 2E 08 FF 0F 55 1F/AD71: 13 14 15 16 2E 01 23 24 25 26 2E 02 23 24 25 26 1F/AD81: 2E 02 23 24 25 26 2E 02 23 24 25 26 2E 01 13 14 1F/AD91: 15 16 23 24 25 26 2E 03 13 14 15 16 2E 01 37 47 1F/ADA1: 13 14 15 16 2E 02 13 14 15 16 2E 01 34 35 36 23 1F/ADB1: 24 25 26 2E 02 34 35 36 2E 02 23 24 25 26 2E 03 1F/ADC1: 23 24 25 26 2E 02 23 24 25 26 2E 01 44 45 46 2E 1F/ADD1: 02 23 24 2E 02 44 45 46 34 35 36 2E 02 40 41 42 1F/ADE1: 2E 03 34 35 36 2E 02 40 41 42 2E 03 34 35 36 2E 1F/ADF1: 02 37 47 2E 03 44 45 46 2E 02 44 45 46 37 47 2E 1F/AE01: 01 44 45 46 2E 02 44 45 46 2E 01 37 47 44 45 46 1F/AE11: 2E 0A 5C 5D 2E 06 27 2E 02 27 2E 07 27 2E 04 04 1F/AE21: 05 06 04 05 06 07 01 01 04 05 06 07 01 02 03 01 1F/AE31: 02 03 01 04 05 06 07 01 02 03 01 01 04 05 51 20 1F/AE41: 52 57 52 55 01 56 57 53 54 55 01 56 57 53 54 55 1F/AE51: 01 56 57 53 54 55 01 56 57 53 54 55 01 56 57 20 1F/AE61: 52 57 20 20 08 0C 09 0A 0B 3E 09 0A 0B 3E 09 0A 1F/AE71: 0B 3E 08 06 56 50 08 04 09 0A 0B 3E 09 0A 0B 2C 1F/AE81: 38 1A 1B 1C 3B 3A 1B 1C 19 1A 1B 1C 0C 3E 09 0A 1F/AE91: 09 3E 08 02 09 0B 3E 09 19 1A 1B 1C 1B 1C 1B 1C 1F/AEA1: 2B 2C 3A 3C 48 5A 39 3B 3A 3B 2A 1A 1B 1C 19 1A 1F/AEB1: 1B 1C 0B 3E 1A 1B 2C 0C 1B 2C 2B 2C 2B 2C 2B 2C 1F/AEC1: 3B 3C 08 01 48 4A 4B 49 5A 48 5A 39 1A 3A 3B 29 1F/AED1: 2A 2B 2C 2B 2C 1A 2B 2C 2A 2B 2C 2B 2C 2B 3B 3B 1F/AEE1: 3C 48 5A 0D 4E 58 59 58 4A 4A 4B 4A 4B 49 5A 4C 1F/AEF1: 1A 1B 1C 1B 1C 2A 1B 1C 1A 2B 2C 1B 1C 3C 59 4A 1F/AF01: 4B 58 4F 1D 1E 0F 01 0D 0E 58 58 59 58 59 58 4F 1F/AF11: 39 2A 2B 2C 2B 2C 29 2B 2C 2A 1B 1C 1B 1C 0B 3E 1F/AF21: 4E 4A 4A 0D 0E 1E 1F 0D 1E 2D 09 0A 0B 3E 0B 3E 1F/AF31: 19 1A 1B 1C 2A 2B 39 3A 3A 3B 2B 2C 2B 2C 1B 1C 1F/AF41: 3E 4E 4B 49 49 5A 08 02 2D 08 01 19 1A 1B 1C 1B 1F/AF51: 1C 1B 1C 2B 2C 3A 3B 08 02 09 0A 1B 1C 38 1A 1B 1F/AF61: 1C 1C 3E 4A 4B 4A 4B 5A 08 01 48 5A 39 3A 2B 2C 1F/AF71: 2B 2C 2B 2C 2B 2C 08 02 0B 0C 38 1A 2B 2C 29 2A 1F/AF81: 2B 2C 38 1C 4B 4A 4B 59 4F 08 01 4E 4B 49 5A 39 1F/AF91: 3A 2B 2C 3A 3B 3B 3C 12 30 1B 1C 2B 2C 2B 2C 2A 1F/AFA1: 2B 3A 3B 3B 3C 4A 4B 4F 08 01 48 5A 08 01 4E 58 1F/AFB1: 4F 0B 0C 2B 2C 11 12 30 31 22 10 01 2B 2C 2B 2C 1F/AFC1: 3A 3B 3A 3C 48 49 49 4A 4A 4F 08 02 4E 4F 09 0B 1F/AFD1: 3E 0B 1B 1C 3B 3C 21 22 10 04 29 2A 2B 2C 48 49 1F/AFE1: 4A 4B 4A 4B 4A 4B 4F 08 01 09 0A 0B 0C 2A 2B 1B 1F/AFF1: 1C 1B 1C 08 02 43 10 05 3A 3B 3B 3C 4A 4B 58 58 1F/B001: 4A 4B 4A 4B 49 5A 19 1A 1B 1C 2C 3B 3A 3A 3B 3C 1F/B011: 11 12 28 10 05 48 49 4A 4B 4B 4F 48 5A 08 01 4E 1F/B021: 4B 4A 4A 4B 19 1A 1B 1C 2C 48 4A 5A 11 12 31 22 1F/B031: 10 06 4A 4B 4A 4B 5A 08 01 4E 4F 08 02 4B 4A 58 1F/B041: 4F 39 2A 2B 2C 3C 4A 4B 4A 21 22 10 08 4E 4B 4A 1F/B051: 4B 4B 5A 08 03 48 4B 4A 08 02 3F 1C 1B 1C 4E 4A 1F/B061: 4B 4F 43 10 09 08 01 4E 4B 4B 4E 4F 08 03 4E 4E 1F/B071: 4F 08 01 3F 0C 1C 2B 2C 3E 4E 4E 4F 17 33 32 33 1F/B081: 18 10 05 08 02 4E 4F 08 02 09 0A 0B 3E 09 0A 0B 1F/B091: 0C 38 0C 1B 1C 1A 3E 0B 3E 09 3E 08 02 17 18 10 1F/B0A1: 04 08 02 09 3E 09 0A 19 1C 1B 1C 1B 1C 1B 1C 1B 1F/B0B1: 1C 2B 2C 1B 1C 1B 1C 19 1C 0C 3E 08 01 17 33 18 1F/B0C1: 10 02 0B 0A 2B 2C 2B 2C 2B 2C 1B 1C 2B 2C 2B 2C 1F/B0D1: 1B 1C 38 0C 1B 1C 1B 1C 1B 1C 1B 1C 3E 08 02 17 1F/B0E1: 32 33 2B 2C 2B 2C 1B 1C 2B 2C 2B 2C 2B 2C 2B 2C 1F/B0F1: 1B 1C 1B 1C 2B 2C 2B 2C 2B 2C 2B 2C 2B 3E 08 04 1F/B101: FF 08 0F 08 55 07 51 55 03 11 00 55 06 01 54 55 1F/B111: 01 95 A9 05 01 00 44 55 01 95 AA AA 65 54 50 55 1F/B121: 02 58 9A AA 05 05 05 05 05 05 05 0A ; -------------------------------------------------------------------------- ; [ ] 1F/B12D: 20 7A B2 JSR $B27A ; load star graphics 1F/B130: A9 30 LDA #$30 1F/B132: 8D FA 7C STA $7CFA 1F/B135: A9 00 LDA #$00 1F/B137: 85 93 STA $93 1F/B139: A9 28 LDA #$28 1F/B13B: 85 94 STA $94 1F/B13D: A9 00 LDA #$00 1F/B13F: 85 96 STA $96 1F/B141: A9 79 LDA #$79 1F/B143: 85 97 STA $97 1F/B145: 60 RTS ; [ epilogue ] 1F/B146: A9 06 LDA #$06 1F/B148: 20 40 B3 JSR $B340 ; load color palettes 1F/B14B: 20 CF A3 JSR $A3CF ; load cutscene graphics 1F/B14E: 20 2D B1 JSR $B12D 1F/B151: A9 3C LDA #$3C 1F/B153: 20 E9 FA JSR $FAE9 ; play song 1F/B156: 20 AD A0 JSR $A0AD ; screen on 1F/B159: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B15C: A9 01 LDA #$01 1F/B15E: 8D 00 A0 STA $A000 1F/B161: 20 EA B3 JSR $B3EA 1F/B164: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B167: 20 9F B3 JSR $B39F 1F/B16A: A9 00 LDA #$00 1F/B16C: 85 CC STA $CC 1F/B16E: 8D C2 7E STA $7EC2 1F/B171: 20 0A A1 JSR $A10A 1F/B174: A9 0D LDA #$0D 1F/B176: 85 98 STA $98 1F/B178: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B17B: 20 9F B3 JSR $B39F 1F/B17E: 20 13 B4 JSR $B413 1F/B181: A5 98 LDA $98 1F/B183: 20 0C B2 JSR $B20C 1F/B186: A5 98 LDA $98 1F/B188: C9 12 CMP #$12 1F/B18A: F0 05 BEQ $B191 1F/B18C: A2 64 LDX #$64 1F/B18E: 20 D6 B1 JSR $B1D6 1F/B191: E6 98 INC $98 1F/B193: A5 98 LDA $98 1F/B195: C9 13 CMP #$13 1F/B197: D0 DF BNE $B178 1F/B199: A9 01 LDA #$01 1F/B19B: 85 CC STA $CC 1F/B19D: A9 00 LDA #$00 1F/B19F: 85 CD STA $CD 1F/B1A1: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B1A4: 20 9F B3 JSR $B39F 1F/B1A7: 20 06 B4 JSR $B406 1F/B1AA: A5 CC LDA $CC 1F/B1AC: 85 88 STA $88 1F/B1AE: 20 13 B4 JSR $B413 1F/B1B1: C6 88 DEC $88 1F/B1B3: D0 F9 BNE $B1AE 1F/B1B5: A5 CC LDA $CC 1F/B1B7: C9 08 CMP #$08 1F/B1B9: F0 11 BEQ $B1CC 1F/B1BB: A5 CD LDA $CD 1F/B1BD: 38 SEC 1F/B1BE: E9 08 SBC #$08 1F/B1C0: 85 CD STA $CD 1F/B1C2: D0 DD BNE $B1A1 1F/B1C4: E6 CC INC $CC 1F/B1C6: A5 CC LDA $CC 1F/B1C8: C9 08 CMP #$08 1F/B1CA: D0 D5 BNE $B1A1 1F/B1CC: C6 CB DEC $CB 1F/B1CE: D0 D1 BNE $B1A1 1F/B1D0: A9 00 LDA #$00 1F/B1D2: 8D 00 A0 STA $A000 1F/B1D5: 60 RTS 1F/B1D6: 8A TXA 1F/B1D7: 48 PHA 1F/B1D8: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B1DB: 20 9F B3 JSR $B39F 1F/B1DE: 20 13 B4 JSR $B413 1F/B1E1: 68 PLA 1F/B1E2: AA TAX 1F/B1E3: CA DEX 1F/B1E4: D0 F0 BNE $B1D6 1F/B1E6: 60 RTS 1F/B1E7: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 1F/B1EA: 20 9F B3 JSR $B39F 1F/B1ED: 20 13 B4 JSR $B413 1F/B1F0: E6 0D INC $0D 1F/B1F2: A5 0D LDA $0D 1F/B1F4: C9 F0 CMP #$F0 1F/B1F6: D0 EF BNE $B1E7 1F/B1F8: A9 00 LDA #$00 1F/B1FA: 85 0D STA $0D 1F/B1FC: A5 06 LDA $06 1F/B1FE: 49 02 EOR #$02 1F/B200: 85 06 STA $06 1F/B202: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B205: A5 94 LDA $94 1F/B207: 49 08 EOR #$08 1F/B209: 85 94 STA $94 1F/B20B: 60 RTS 1F/B20C: 20 12 B2 JSR $B212 1F/B20F: 4C E7 B1 JMP $B1E7 1F/B212: 20 3D A5 JSR $A53D 1F/B215: A0 01 LDY #$01 1F/B217: B1 8C LDA ($8C),Y 1F/B219: A2 20 LDX #$20 1F/B21B: 20 EA F8 JSR $F8EA ; multiply 1F/B21E: 18 CLC 1F/B21F: 65 93 ADC $93 1F/B221: 85 46 STA $46 1F/B223: 8A TXA 1F/B224: 65 94 ADC $94 1F/B226: 85 47 STA $47 1F/B228: A5 96 LDA $96 1F/B22A: 85 48 STA $48 1F/B22C: A5 97 LDA $97 1F/B22E: 85 49 STA $49 1F/B230: A2 06 LDX #$06 1F/B232: 20 39 B2 JSR $B239 1F/B235: CA DEX 1F/B236: D0 FA BNE $B232 1F/B238: 60 RTS ; [ ] 1F/B239: 8A TXA 1F/B23A: 48 PHA 1F/B23B: 20 80 FB JSR $FB80 ; wait for nmi 1F/B23E: 20 AA F8 JSR $F8AA ; copy oam data to ppu 1F/B241: A5 47 LDA $47 1F/B243: A6 46 LDX $46 1F/B245: 20 E0 F8 JSR $F8E0 ; set ppu address 1F/B248: A0 00 LDY #$00 1F/B24A: B1 48 LDA ($48),Y 1F/B24C: 8D 07 20 STA $2007 1F/B24F: C8 INY 1F/B250: C0 40 CPY #$40 1F/B252: D0 F6 BNE $B24A 1F/B254: 20 CB F8 JSR $F8CB ; update ppu registers 1F/B257: A5 46 LDA $46 1F/B259: 18 CLC 1F/B25A: 69 40 ADC #$40 1F/B25C: 85 46 STA $46 1F/B25E: A5 47 LDA $47 1F/B260: 69 00 ADC #$00 1F/B262: 85 47 STA $47 1F/B264: A5 48 LDA $48 1F/B266: 18 CLC 1F/B267: 69 40 ADC #$40 1F/B269: 85 48 STA $48 1F/B26B: A5 49 LDA $49 1F/B26D: 69 00 ADC #$00 1F/B26F: 85 49 STA $49 1F/B271: 20 9F B3 JSR $B39F 1F/B274: 20 13 B4 JSR $B413 1F/B277: 68 PLA 1F/B278: AA TAX 1F/B279: 60 RTS ; [ load star graphics ] 1F/B27A: A9 01 LDA #$01 ; star graphics 1F/B27C: 20 7D A2 JSR $A27D ; decompress 1F/B27F: A9 05 LDA #$05 1F/B281: 4C 63 A0 JMP $A063 ; copy cutscene graphics to ppu ; color palettes 1F/B284: 0F 11 31 30 ; 00 1F/B288: 0F 01 11 21 1F/B28C: 0F 11 21 31 1F/B290: 0F 21 31 30 1F/B294: 0F 08 18 27 1F/B298: 0F 08 08 18 1F/B29C: 0F 08 0C 12 1F/B2A0: 0F 38 28 27 1F/B2A4: 0F 0A 1B 21 ; 08 1F/B2A8: 0F 0A 08 18 1F/B2AC: 0F 0A 01 11 1F/B2B0: 0F 21 21 21 1F/B2B4: 0F 12 22 30 1F/B2B8: 0F 23 33 30 1F/B2BC: 0F 0C 10 30 1F/B2C0: 0F 18 28 37 1F/B2C4: 0F 08 1C 22 ; 10 1F/B2C8: 0F 08 0F 1C 1F/B2CC: 0F 08 0F 07 1F/B2D0: 0F 08 0F 0C 1F/B2D4: 0F 2C 00 1C 1F/B2D8: 0F 00 1C 2C 1F/B2DC: 0F 10 31 30 1F/B2E0: 0F 36 30 16 1F/B2E4: 0F 27 18 21 ; 18 1F/B2E8: 0F 36 17 2A 1F/B2EC: 0F 00 0F 30 1F/B2F0: 0F 31 0F 02 1F/B2F4: 0F 1C 2C 3C 1F/B2F8: 0F 31 21 02 1F/B2FC: 0F 0F 0F 0F ; color palette sets 1F/B300: 1A 1A 1A 1A 00 01 02 03 ; 0: prologue 1F/B308: 04 05 06 07 0C 0D 0E 0F 1F/B310: 08 09 0A 0B 0C 0D 0E 16 1F/B318: 11 12 13 14 0C 0D 0E 15 ; 3: ending 1F/B320: 1E 1E 1E 1E 17 18 19 17 ; 4: end credits 1F/B328: 1A 1A 1A 1A 17 18 19 17 1F/B330: 1B 1B 1B 1B 00 01 1C 03 ; 6: epilogue 1F/B338: 1D 1D 1D 1D 00 01 1C 03 ; 7: the end ; [ load color palettes ] 1F/B340: 0A ASL 1F/B341: 0A ASL 1F/B342: 0A ASL 1F/B343: A8 TAY 1F/B344: A9 00 LDA #$00 1F/B346: 85 7E STA $7E 1F/B348: A9 08 LDA #$08 1F/B34A: 85 80 STA $80 1F/B34C: B9 00 B3 LDA $B300,Y 1F/B34F: 0A ASL 1F/B350: 0A ASL 1F/B351: AA TAX 1F/B352: 98 TYA 1F/B353: 48 PHA 1F/B354: A4 7E LDY $7E 1F/B356: A9 04 LDA #$04 1F/B358: 85 7F STA $7F 1F/B35A: BD 84 B2 LDA $B284,X 1F/B35D: 99 F7 7C STA $7CF7,Y ; color palettes 1F/B360: C8 INY 1F/B361: E8 INX 1F/B362: C6 7F DEC $7F 1F/B364: D0 F4 BNE $B35A 1F/B366: 84 7E STY $7E 1F/B368: 68 PLA 1F/B369: A8 TAY 1F/B36A: C8 INY 1F/B36B: C6 80 DEC $80 1F/B36D: D0 DD BNE $B34C 1F/B36F: 60 RTS ; [ ] 1F/B370: B9 B5 76 LDA $76B5,Y 1F/B373: C9 78 CMP #$78 1F/B375: 90 03 BCC $B37A 1F/B377: A9 01 LDA #$01 1F/B379: 60 RTS 1F/B37A: C9 64 CMP #$64 1F/B37C: 90 03 BCC $B381 1F/B37E: A9 02 LDA #$02 1F/B380: 60 RTS 1F/B381: C9 3C CMP #$3C 1F/B383: 90 03 BCC $B388 1F/B385: A9 03 LDA #$03 1F/B387: 60 RTS 1F/B388: A9 04 LDA #$04 1F/B38A: 60 RTS ; [ ] 1F/B38B: AD C2 7E LDA $7EC2 1F/B38E: F0 06 BEQ $B396 1F/B390: 20 96 B3 JSR $B396 1F/B393: 09 20 ORA #$20 1F/B395: 60 RTS 1F/B396: 98 TYA 1F/B397: 29 0F AND #$0F 1F/B399: D0 01 BNE $B39C 1F/B39B: 60 RTS 1F/B39C: A9 02 LDA #$02 1F/B39E: 60 RTS ; [ ] 1F/B39F: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/B3A2: A0 00 LDY #$00 1F/B3A4: 84 C8 STY $C8 1F/B3A6: 20 BB B4 JSR $B4BB 1F/B3A9: 48 PHA 1F/B3AA: 20 A1 B4 JSR $B4A1 1F/B3AD: A6 C8 LDX $C8 1F/B3AF: 18 CLC 1F/B3B0: 69 78 ADC #$78 1F/B3B2: 9D 00 02 STA $0200,X 1F/B3B5: 20 70 B3 JSR $B370 1F/B3B8: 9D 01 02 STA $0201,X 1F/B3BB: 20 8B B3 JSR $B38B 1F/B3BE: 9D 02 02 STA $0202,X 1F/B3C1: 68 PLA 1F/B3C2: 18 CLC 1F/B3C3: 69 80 ADC #$80 1F/B3C5: 9D 03 02 STA $0203,X 1F/B3C8: E8 INX 1F/B3C9: E8 INX 1F/B3CA: E8 INX 1F/B3CB: E8 INX 1F/B3CC: 86 C8 STX $C8 1F/B3CE: C8 INY 1F/B3CF: C4 CB CPY $CB 1F/B3D1: D0 D3 BNE $B3A6 1F/B3D3: 60 RTS ; [ ] 1F/B3D4: 8A TXA 1F/B3D5: 48 PHA 1F/B3D6: 98 TYA 1F/B3D7: 48 PHA 1F/B3D8: A2 01 LDX #$01 ; rng 1 1F/B3DA: 86 21 STX $21 1F/B3DC: A9 FF LDA #$FF 1F/B3DE: 20 EF FB JSR $FBEF ; random (X..A) 1F/B3E1: 85 18 STA $18 1F/B3E3: 68 PLA 1F/B3E4: A8 TAY 1F/B3E5: 68 PLA 1F/B3E6: AA TAX 1F/B3E7: A5 18 LDA $18 1F/B3E9: 60 RTS ; [ ] 1F/B3EA: 20 76 B4 JSR $B476 1F/B3ED: A0 00 LDY #$00 1F/B3EF: A9 01 LDA #$01 1F/B3F1: 99 F5 75 STA $75F5,Y 1F/B3F4: A9 FF LDA #$FF 1F/B3F6: 99 35 76 STA $7635,Y 1F/B3F9: C8 INY 1F/B3FA: C0 40 CPY #$40 1F/B3FC: D0 F1 BNE $B3EF 1F/B3FE: A9 3F LDA #$3F 1F/B400: 85 CB STA $CB 1F/B402: 20 13 B4 JSR $B413 1F/B405: 60 RTS ; [ ] 1F/B406: A0 00 LDY #$00 1F/B408: A9 02 LDA #$02 1F/B40A: 20 65 B4 JSR $B465 1F/B40D: C8 INY 1F/B40E: C0 40 CPY #$40 1F/B410: D0 F6 BNE $B408 1F/B412: 60 RTS ; [ ] 1F/B413: A0 00 LDY #$00 1F/B415: B9 75 76 LDA $7675,Y 1F/B418: 18 CLC 1F/B419: 79 35 76 ADC $7635,Y 1F/B41C: 99 75 76 STA $7675,Y 1F/B41F: 90 3E BCC $B45F 1F/B421: B9 B5 76 LDA $76B5,Y 1F/B424: 18 CLC 1F/B425: 69 01 ADC #$01 1F/B427: 99 B5 76 STA $76B5,Y 1F/B42A: B9 F5 75 LDA $75F5,Y 1F/B42D: 38 SEC 1F/B42E: E9 01 SBC #$01 1F/B430: 29 7F AND #$7F 1F/B432: 99 F5 75 STA $75F5,Y 1F/B435: D0 28 BNE $B45F 1F/B437: A5 B7 LDA $B7 1F/B439: E6 B7 INC $B7 1F/B43B: 29 0F AND #$0F 1F/B43D: AA TAX 1F/B43E: BD FA B4 LDA $B4FA,X 1F/B441: 99 F5 75 STA $75F5,Y 1F/B444: BD 0A B5 LDA $B50A,X 1F/B447: 99 35 76 STA $7635,Y 1F/B44A: A9 00 LDA #$00 1F/B44C: 99 B5 76 STA $76B5,Y 1F/B44F: E6 B6 INC $B6 1F/B451: A6 B6 LDX $B6 1F/B453: BD E3 7B LDA $7BE3,X ; rng table 1F/B456: 99 75 75 STA $7575,Y 1F/B459: 18 CLC 1F/B45A: 69 40 ADC #$40 1F/B45C: 99 B5 75 STA $75B5,Y 1F/B45F: C8 INY 1F/B460: C0 3F CPY #$3F 1F/B462: D0 B1 BNE $B415 1F/B464: 60 RTS ; [ ] 1F/B465: 48 PHA 1F/B466: 18 CLC 1F/B467: 79 75 75 ADC $7575,Y 1F/B46A: 99 75 75 STA $7575,Y 1F/B46D: 68 PLA 1F/B46E: 18 CLC 1F/B46F: 79 B5 75 ADC $75B5,Y 1F/B472: 99 B5 75 STA $75B5,Y 1F/B475: 60 RTS ; [ ] 1F/B476: A2 40 LDX #$40 1F/B478: A9 00 LDA #$00 1F/B47A: 9D 74 75 STA $7574,X 1F/B47D: A9 40 LDA #$40 1F/B47F: 9D B4 75 STA $75B4,X 1F/B482: CA DEX 1F/B483: D0 F3 BNE $B478 1F/B485: A9 80 LDA #$80 ; source = 10/9A80 (sine table) 1F/B487: 85 7E STA $7E 1F/B489: A9 9A LDA #$9A 1F/B48B: 85 7F STA $7F 1F/B48D: A9 00 LDA #$00 ; destination = $7200 1F/B48F: 85 80 STA $80 1F/B491: A9 72 LDA #$72 1F/B493: 85 81 STA $81 1F/B495: A9 00 LDA #$00 ; size = 256 bytes 1F/B497: 85 82 STA $82 1F/B499: A9 08 LDA #$08 1F/B49B: 85 84 STA $84 1F/B49D: 20 2F F9 JSR $F92F ; load rom data 1F/B4A0: 60 RTS ; [ ] 1F/B4A1: 98 TYA 1F/B4A2: 48 PHA 1F/B4A3: BE 75 75 LDX $7575,Y 1F/B4A6: B9 F5 75 LDA $75F5,Y 1F/B4A9: A8 TAY 1F/B4AA: B9 1A B5 LDA $B51A,Y 1F/B4AD: 4A LSR 1F/B4AE: 8D 4E 7E STA $7E4E 1F/B4B1: 20 C3 B4 JSR $B4C3 1F/B4B4: 85 7E STA $7E 1F/B4B6: 68 PLA 1F/B4B7: A8 TAY 1F/B4B8: A5 7E LDA $7E 1F/B4BA: 60 RTS ; [ ] 1F/B4BB: 98 TYA 1F/B4BC: 48 PHA 1F/B4BD: BE B5 75 LDX $75B5,Y 1F/B4C0: 4C A6 B4 JMP $B4A6 ; [ ] 1F/B4C3: BD 00 72 LDA $7200,X 1F/B4C6: 10 11 BPL $B4D9 1F/B4C8: 49 FF EOR #$FF 1F/B4CA: AE 4E 7E LDX $7E4E 1F/B4CD: 20 E1 B4 JSR $B4E1 1F/B4D0: 49 FF EOR #$FF 1F/B4D2: 18 CLC 1F/B4D3: 69 01 ADC #$01 1F/B4D5: F0 08 BEQ $B4DF 1F/B4D7: 38 SEC 1F/B4D8: 60 RTS 1F/B4D9: AE 4E 7E LDX $7E4E 1F/B4DC: 20 E1 B4 JSR $B4E1 1F/B4DF: 18 CLC 1F/B4E0: 60 RTS ; [ ] 1F/B4E1: 0A ASL 1F/B4E2: 85 7E STA $7E 1F/B4E4: 86 80 STX $80 1F/B4E6: A2 08 LDX #$08 1F/B4E8: A9 00 LDA #$00 1F/B4EA: 85 82 STA $82 1F/B4EC: 46 7E LSR $7E 1F/B4EE: 90 03 BCC $B4F3 1F/B4F0: 18 CLC 1F/B4F1: 65 80 ADC $80 1F/B4F3: 6A ROR 1F/B4F4: 66 82 ROR $82 1F/B4F6: CA DEX 1F/B4F7: D0 F3 BNE $B4EC 1F/B4F9: 60 RTS 1F/B4FA: 02 03 04 05 06 07 08 0A 14 19 1E 2D 3C 4D 5C 7F 1F/B50A: 40 40 40 40 50 60 70 80 90 A0 B0 C0 D0 E0 FF FF 1F/B51A: FF E3 CD BA AB 9E 93 89 80 79 72 6C 67 62 5E 5A 1F/B52A: 56 52 4F 4C 4A 47 45 43 40 3F 3D 3B 39 38 36 35 1F/B53A: 34 32 31 30 2F 2E 2D 2C 2B 2A 29 29 28 27 26 26 1F/B54A: 25 24 24 23 22 22 21 21 20 20 1F 1F 1E 1E 1E 1D 1F/B55A: 1D 1C 1C 1C 1B 1B 1B 1A 1A 1A 19 19 19 18 18 18 1F/B56A: 18 17 17 17 16 16 16 16 16 15 15 15 15 14 14 14 1F/B57A: 14 14 14 13 13 13 13 13 12 12 12 12 12 12 12 11 1F/B58A: 11 11 11 11 11 11 10 10 10 10 10 10 ; -------------------------------------------------------------------------- ; [ ] 1F/B596: 48 PHA 1F/B597: A9 01 LDA #$01 1F/B599: 20 40 B3 JSR $B340 ; load color palettes 1F/B59C: 68 PLA 1F/B59D: F0 0B BEQ $B5AA 1F/B59F: 85 82 STA $82 1F/B5A1: A9 00 LDA #$00 1F/B5A3: 20 87 FA JSR $FA87 1F/B5A6: C6 82 DEC $82 1F/B5A8: D0 F7 BNE $B5A1 1F/B5AA: 60 RTS ; [ ] 1F/B5AB: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B5AE: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/B5B1: A9 00 LDA #$00 1F/B5B3: 85 C8 STA $C8 1F/B5B5: 60 RTS ; [ ending ] 1F/B5B6: 20 B0 B7 JSR $B7B0 ; load ending graphics 1F/B5B9: A9 03 LDA #$03 1F/B5BB: 20 40 B3 JSR $B340 ; load color palettes 1F/B5BE: A9 04 LDA #$04 ; stop music (no fade out) 1F/B5C0: 8D 42 7F STA $7F42 1F/B5C3: 20 AD A0 JSR $A0AD ; screen on 1F/B5C6: A5 06 LDA $06 1F/B5C8: 09 01 ORA #$01 1F/B5CA: 85 06 STA $06 1F/B5CC: 85 08 STA $08 1F/B5CE: A9 02 LDA #$02 1F/B5D0: 85 90 STA $90 1F/B5D2: A9 78 LDA #$78 1F/B5D4: 85 03 STA $03 1F/B5D6: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B5D9: EE AA 00 INC $00AA 1F/B5DC: 20 79 FB JSR $FB79 ; wait for irq 1F/B5DF: A5 90 LDA $90 1F/B5E1: 8D 00 C0 STA $C000 1F/B5E4: 8D 01 E0 STA $E001 1F/B5E7: A9 00 LDA #$00 1F/B5E9: 8D AA 00 STA $00AA 1F/B5EC: A5 06 LDA $06 1F/B5EE: 29 FE AND #$FE 1F/B5F0: 8D 00 20 STA $2000 1F/B5F3: E6 90 INC $90 1F/B5F5: E6 90 INC $90 1F/B5F7: C6 03 DEC $03 1F/B5F9: A5 03 LDA $03 1F/B5FB: C9 08 CMP #$08 1F/B5FD: D0 D7 BNE $B5D6 ; wait for screen wipe ??? 1F/B5FF: A5 06 LDA $06 1F/B601: 29 FE AND #$FE 1F/B603: 85 06 STA $06 1F/B605: 85 08 STA $08 1F/B607: 20 BD A0 JSR $A0BD ; reset frame counter 1F/B60A: 85 B7 STA $B7 1F/B60C: 85 91 STA $91 1F/B60E: A9 F6 LDA #$F6 1F/B610: 85 9E STA $9E 1F/B612: A9 58 LDA #$58 1F/B614: 85 9D STA $9D 1F/B616: 20 AB B5 JSR $B5AB 1F/B619: 20 D1 B6 JSR $B6D1 1F/B61C: A2 00 LDX #$00 1F/B61E: 20 83 B7 JSR $B783 1F/B621: E8 INX 1F/B622: E0 04 CPX #$04 1F/B624: D0 F8 BNE $B61E 1F/B626: E6 B6 INC $B6 1F/B628: D0 02 BNE $B62C 1F/B62A: E6 B7 INC $B7 1F/B62C: A5 B6 LDA $B6 1F/B62E: 29 07 AND #$07 1F/B630: D0 E4 BNE $B616 1F/B632: C6 90 DEC $90 1F/B634: A5 B7 LDA $B7 1F/B636: C9 0C CMP #$0C 1F/B638: D0 DC BNE $B616 1F/B63A: 20 BD A0 JSR $A0BD ; reset frame counter 1F/B63D: 20 AB B5 JSR $B5AB 1F/B640: 20 B6 B6 JSR $B6B6 1F/B643: A5 B6 LDA $B6 1F/B645: 29 07 AND #$07 1F/B647: D0 12 BNE $B65B 1F/B649: A9 00 LDA #$00 1F/B64B: 20 87 FA JSR $FA87 1F/B64E: A2 00 LDX #$00 1F/B650: BD AE B6 LDA $B6AE,X ; color palettes for fading out 1F/B653: 9D 07 7D STA $7D07,X 1F/B656: E8 INX 1F/B657: E0 08 CPX #$08 1F/B659: D0 F5 BNE $B650 1F/B65B: 20 57 A1 JSR $A157 1F/B65E: 29 20 AND #$20 1F/B660: F0 DB BEQ $B63D 1F/B662: 20 AB B5 JSR $B5AB 1F/B665: A9 3C LDA #$3C 1F/B667: 85 90 STA $90 1F/B669: 20 BD A0 JSR $A0BD ; reset frame counter 1F/B66C: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/B66F: 20 80 B6 JSR $B680 ; flash screen 1F/B672: E6 B6 INC $B6 1F/B674: C6 90 DEC $90 1F/B676: D0 F4 BNE $B66C 1F/B678: A2 1E LDX #$1E 1F/B67A: 20 EE A1 JSR $A1EE ; wait for vblank 1F/B67D: 4C 4A B9 JMP $B94A ; end credits ; [ flash screen ] 1F/B680: A5 B6 LDA $B6 1F/B682: 29 04 AND #$04 ; change colors every 4 frames 1F/B684: 0A ASL 1F/B685: A8 TAY 1F/B686: A2 00 LDX #$00 1F/B688: B9 9E B6 LDA $B69E,Y ; color palettes for flashing screen 1F/B68B: 9D F7 7C STA $7CF7,X ; color palettes 1F/B68E: 9D FF 7C STA $7CFF,X 1F/B691: 9D 07 7D STA $7D07,X 1F/B694: 9D 0F 7D STA $7D0F,X 1F/B697: C8 INY 1F/B698: E8 INX 1F/B699: E0 08 CPX #$08 1F/B69B: D0 EB BNE $B688 1F/B69D: 60 RTS ; color palettes for flashing screen 1F/B69E: 0F 0F 0F 0F 0F 0F 0F 0F 1F/B6A6: 10 10 10 10 10 10 10 10 ; color palettes for fading out 1F/B6AE: 0F 12 22 30 0F 23 33 30 1F/B6B6: A9 30 LDA #$30 1F/B6B8: 85 8C STA $8C 1F/B6BA: 85 8D STA $8D 1F/B6BC: A5 B6 LDA $B6 1F/B6BE: 29 04 AND #$04 1F/B6C0: 4A LSR 1F/B6C1: 4A LSR 1F/B6C2: 18 CLC 1F/B6C3: 69 07 ADC #$07 1F/B6C5: 4C C9 B7 JMP $B7C9 1F/B6C8: A5 B6 LDA $B6 1F/B6CA: 29 03 AND #$03 1F/B6CC: 85 0C STA $0C 1F/B6CE: 85 10 STA $10 1F/B6D0: 60 RTS ; [ ] 1F/B6D1: A5 91 LDA $91 1F/B6D3: F0 18 BEQ $B6ED 1F/B6D5: 20 B6 B6 JSR $B6B6 1F/B6D8: A5 B7 LDA $B7 1F/B6DA: C9 05 CMP #$05 1F/B6DC: B0 09 BCS $B6E7 1F/B6DE: A5 09 LDA $09 1F/B6E0: 49 01 EOR #$01 1F/B6E2: 85 09 STA $09 1F/B6E4: 4C ED B6 JMP $B6ED 1F/B6E7: A5 09 LDA $09 1F/B6E9: 29 FE AND #$FE 1F/B6EB: 85 09 STA $09 1F/B6ED: A5 B7 LDA $B7 1F/B6EF: C9 06 CMP #$06 1F/B6F1: F0 12 BEQ $B705 1F/B6F3: C9 07 CMP #$07 1F/B6F5: D0 33 BNE $B72A 1F/B6F7: A5 B6 LDA $B6 1F/B6F9: D0 0A BNE $B705 1F/B6FB: A9 FF LDA #$FF 1F/B6FD: 8D 49 7F STA $7F49 1F/B700: A9 3B LDA #$3B 1F/B702: 20 E9 FA JSR $FAE9 ; play song 1F/B705: A5 B6 LDA $B6 1F/B707: 48 PHA 1F/B708: 29 01 AND #$01 1F/B70A: F0 02 BEQ $B70E 1F/B70C: C6 9E DEC $9E 1F/B70E: A5 9E LDA $9E 1F/B710: 85 8C STA $8C 1F/B712: 68 PLA 1F/B713: 29 07 AND #$07 1F/B715: D0 02 BNE $B719 1F/B717: C6 9D DEC $9D 1F/B719: A5 9D LDA $9D 1F/B71B: 85 8D STA $8D 1F/B71D: A5 B6 LDA $B6 1F/B71F: 29 08 AND #$08 1F/B721: 4A LSR 1F/B722: 4A LSR 1F/B723: 4A LSR 1F/B724: 18 CLC 1F/B725: 69 09 ADC #$09 1F/B727: 20 C9 B7 JSR $B7C9 1F/B72A: A5 B7 LDA $B7 1F/B72C: C9 02 CMP #$02 1F/B72E: D0 03 BNE $B733 1F/B730: 20 C8 B6 JSR $B6C8 1F/B733: A5 B7 LDA $B7 1F/B735: C9 03 CMP #$03 1F/B737: D0 38 BNE $B771 1F/B739: A5 B6 LDA $B6 1F/B73B: 30 1E BMI $B75B 1F/B73D: A9 30 LDA #$30 1F/B73F: 85 8C STA $8C 1F/B741: 85 8D STA $8D 1F/B743: A5 91 LDA $91 1F/B745: D0 13 BNE $B75A 1F/B747: A5 B6 LDA $B6 1F/B749: 29 38 AND #$38 1F/B74B: 4A LSR 1F/B74C: 4A LSR 1F/B74D: 4A LSR 1F/B74E: 18 CLC 1F/B74F: 69 02 ADC #$02 1F/B751: C9 07 CMP #$07 1F/B753: D0 02 BNE $B757 1F/B755: E6 91 INC $91 1F/B757: 20 C9 B7 JSR $B7C9 1F/B75A: 60 RTS 1F/B75B: A5 B6 LDA $B6 1F/B75D: C9 80 CMP #$80 1F/B75F: D0 06 BNE $B767 1F/B761: A9 01 LDA #$01 1F/B763: 20 96 B5 JSR $B596 1F/B766: 60 RTS 1F/B767: C9 C0 CMP #$C0 1F/B769: D0 05 BNE $B770 1F/B76B: A9 00 LDA #$00 1F/B76D: 20 96 B5 JSR $B596 1F/B770: 60 RTS 1F/B771: A5 B7 LDA $B7 1F/B773: C9 04 CMP #$04 1F/B775: D0 0B BNE $B782 1F/B777: A5 B6 LDA $B6 1F/B779: C9 80 CMP #$80 1F/B77B: D0 05 BNE $B782 1F/B77D: A9 02 LDA #$02 1F/B77F: 20 40 B3 JSR $B340 ; load color palettes 1F/B782: 60 RTS ; [ ] 1F/B783: 85 7E STA $7E 1F/B785: 8A TXA 1F/B786: 48 PHA 1F/B787: 0A ASL 1F/B788: 0A ASL 1F/B789: A8 TAY 1F/B78A: B9 A0 B7 LDA $B7A0,Y 1F/B78D: 18 CLC 1F/B78E: 65 90 ADC $90 1F/B790: 85 8C STA $8C 1F/B792: B9 A1 B7 LDA $B7A1,Y 1F/B795: 85 8D STA $8D 1F/B797: B9 A3 B7 LDA $B7A3,Y 1F/B79A: 20 C9 B7 JSR $B7C9 1F/B79D: 68 PLA 1F/B79E: AA TAX 1F/B79F: 60 RTS 1F/B7A0: 00 50 00 01 1F/B7A4: 80 68 00 01 1F/B7A8: 40 80 00 00 1F/B7AC: 54 A8 00 00 ; [ load ending graphics ] 1F/B7B0: A9 02 LDA #$02 ; ending graphics 1F/B7B2: 20 7D A2 JSR $A27D ; decompress 1F/B7B5: A9 06 LDA #$06 1F/B7B7: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B7BA: A9 07 LDA #$07 1F/B7BC: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B7BF: A9 04 LDA #$04 ; ending tilemap 1F/B7C1: 20 7D A2 JSR $A27D ; decompress 1F/B7C4: A9 08 LDA #$08 1F/B7C6: 4C 63 A0 JMP $A063 ; copy cutscene graphics to ppu ; [ ] 1F/B7C9: 0A ASL 1F/B7CA: A8 TAY 1F/B7CB: B9 05 B8 LDA $B805,Y 1F/B7CE: 85 7E STA $7E 1F/B7D0: B9 06 B8 LDA $B806,Y 1F/B7D3: 85 7F STA $7F 1F/B7D5: A0 00 LDY #$00 1F/B7D7: A6 C8 LDX $C8 1F/B7D9: B1 7E LDA ($7E),Y 1F/B7DB: C9 FF CMP #$FF 1F/B7DD: F0 23 BEQ $B802 1F/B7DF: 18 CLC 1F/B7E0: 65 8D ADC $8D 1F/B7E2: 9D 00 02 STA $0200,X 1F/B7E5: C8 INY 1F/B7E6: E8 INX 1F/B7E7: B1 7E LDA ($7E),Y 1F/B7E9: 9D 00 02 STA $0200,X 1F/B7EC: C8 INY 1F/B7ED: E8 INX 1F/B7EE: B1 7E LDA ($7E),Y 1F/B7F0: 9D 00 02 STA $0200,X 1F/B7F3: C8 INY 1F/B7F4: E8 INX 1F/B7F5: B1 7E LDA ($7E),Y 1F/B7F7: 18 CLC 1F/B7F8: 65 8C ADC $8C 1F/B7FA: 9D 00 02 STA $0200,X 1F/B7FD: C8 INY 1F/B7FE: E8 INX 1F/B7FF: 4C D9 B7 JMP $B7D9 1F/B802: 86 C8 STX $C8 1F/B804: 60 RTS 1F/B805: B81B B84C B86D B872 B877 B87C B88D B8CE 1F/B815: B8FF B930 B939 1F/B81B: 00 00 03 00 1F/B81F: 00 01 03 08 1F/B823: 00 02 03 10 1F/B827: 00 03 03 18 1F/B82B: 00 1C 03 20 1F/B82F: 08 10 03 00 1F/B833: 08 11 03 08 1F/B837: 08 12 03 10 1F/B83B: 08 13 03 18 1F/B83F: 08 1F 03 20 1F/B843: 10 04 03 08 1F/B847: 10 14 03 10 1F/B84B: FF 1F/B84C: 00 19 03 00 1F/B850: 00 1A 03 08 1F/B854: 00 1B 03 10 1F/B858: 00 1C 03 18 1F/B85C: 08 20 03 00 1F/B860: 08 1D 03 08 1F/B864: 08 1E 03 10 1F/B868: 08 1F 03 18 1F/B86C: FF 1F/B86D: 0C 05 00 0C 1F/B871: FF 1F/B872: 0C 06 00 0C 1F/B876: FF 1F/B877: 0C 07 00 0C 1F/B87B: FF 1F/B87C: 08 08 00 08 1F/B880: 08 08 40 10 1F/B884: 10 08 80 08 1F/B888: 10 08 C0 10 1F/B88C: FF 1F/B88D: 00 09 00 00 1F/B891: 00 0A 00 08 1F/B895: 00 0A 40 10 1F/B899: 00 09 40 18 1F/B89D: 08 0B 00 00 1F/B8A1: 08 0C 00 08 1F/B8A5: 08 0C 40 10 1F/B8A9: 08 0B 40 18 1F/B8AD: 10 0B 80 00 1F/B8B1: 10 0C 80 08 1F/B8B5: 10 0C C0 10 1F/B8B9: 10 0B C0 18 1F/B8BD: 18 09 80 00 1F/B8C1: 18 0A 80 08 1F/B8C5: 18 0A C0 10 1F/B8C9: 18 09 C0 18 1F/B8CD: FF 1F/B8CE: 00 0D 00 08 1F/B8D2: 00 0D 40 10 1F/B8D6: 08 0E 00 00 1F/B8DA: 08 0F 00 08 1F/B8DE: 08 0F 40 10 1F/B8E2: 08 0E 40 18 1F/B8E6: 10 0E 80 00 1F/B8EA: 10 0F 80 08 1F/B8EE: 10 0F C0 10 1F/B8F2: 10 0E C0 18 1F/B8F6: 18 0D 80 08 1F/B8FA: 18 0D C0 10 1F/B8FE: FF 1F/B8FF: 00 15 01 00 1F/B903: 00 16 01 08 1F/B907: 00 16 41 10 1F/B90B: 00 15 41 18 1F/B90F: 08 18 01 08 1F/B913: 08 18 41 10 1F/B917: 10 18 81 08 1F/B91B: 10 18 C1 10 1F/B91F: 18 15 81 00 1F/B923: 18 16 81 08 1F/B927: 18 16 C1 10 1F/B92B: 18 15 C1 18 1F/B92F: FF 1F/B930: 00 21 03 00 1F/B934: 04 22 03 0A 1F/B938: FF 1F/B939: 00 22 03 00 1F/B93D: 04 21 03 0A 1F/B941: FF ; -------------------------------------------------------------------------- ; [ ] 1F/B942: A9 04 LDA #$04 1F/B944: 20 40 B3 JSR $B340 ; load color palettes 1F/B947: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ end credits ] 1F/B94A: A9 01 LDA #$01 1F/B94C: 85 CC STA $CC 1F/B94E: A5 06 LDA $06 1F/B950: 09 01 ORA #$01 1F/B952: 85 06 STA $06 1F/B954: 85 08 STA $08 1F/B956: A9 00 LDA #$00 1F/B958: 85 0C STA $0C 1F/B95A: 85 10 STA $10 1F/B95C: AA TAX 1F/B95D: 9D 00 79 STA $7900,X ; clear text tilemap buffer 1F/B960: E8 INX 1F/B961: E0 40 CPX #$40 1F/B963: D0 F8 BNE $B95D 1F/B965: A9 09 LDA #$09 ; text buffer 1F/B967: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B96A: A9 00 LDA #$00 ; text/menu graphics 1 1F/B96C: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B96F: A9 01 LDA #$01 ; text/menu graphics 2 1F/B971: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B974: A9 0A LDA #$0A ; ending font 1F/B976: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B979: 20 BD A0 JSR $A0BD ; reset frame counter 1F/B97C: 85 C2 STA $C2 1F/B97E: 85 C5 STA $C5 1F/B980: 85 C4 STA $C4 1F/B982: 8D E2 7E STA $7EE2 ; end credits text id 1F/B985: 85 AC STA $AC 1F/B987: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/B98A: 20 42 B9 JSR $B942 1F/B98D: 20 41 BD JSR $BD41 1F/B990: 20 E6 A0 JSR $A0E6 ; fade out all palettes 1F/B993: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/B996: 20 42 B9 JSR $B942 1F/B999: 20 02 BC JSR $BC02 ; show characters 1F/B99C: 20 BC A1 JSR $A1BC ; clear palettes (all) 1F/B99F: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 1F/B9A2: 20 CD BC JSR $BCCD 1F/B9A5: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/B9A8: 20 42 B9 JSR $B942 1F/B9AB: 20 41 BD JSR $BD41 1F/B9AE: 20 E6 A0 JSR $A0E6 ; fade out all palettes 1F/B9B1: E6 C4 INC $C4 1F/B9B3: E6 AC INC $AC 1F/B9B5: 20 AB BB JSR $BBAB ; show credits 1F/B9B8: A9 0B LDA #$0B ; ending graphics 1F/B9BA: 20 63 A0 JSR $A063 ; copy cutscene graphics to ppu 1F/B9BD: 20 42 B9 JSR $B942 1F/B9C0: A9 00 LDA #$00 1F/B9C2: 20 21 A5 JSR $A521 1F/B9C5: 20 09 BA JSR $BA09 1F/B9C8: 20 95 BA JSR $BA95 1F/B9CB: A9 07 LDA #$07 1F/B9CD: 20 40 B3 JSR $B340 ; load color palettes 1F/B9D0: A9 00 LDA #$00 1F/B9D2: 20 0A A1 JSR $A10A 1F/B9D5: A0 0A LDY #$0A 1F/B9D7: A2 32 LDX #$32 1F/B9D9: 20 EE A1 JSR $A1EE ; wait for vblank 1F/B9DC: 88 DEY 1F/B9DD: D0 F8 BNE $B9D7 1F/B9DF: A9 01 LDA #$01 1F/B9E1: 8D C2 7E STA $7EC2 1F/B9E4: 85 CB STA $CB 1F/B9E6: 20 2D B1 JSR $B12D 1F/B9E9: 20 EA B3 JSR $B3EA 1F/B9EC: 20 BD A0 JSR $A0BD ; reset frame counter ; the end loop 1F/B9EF: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 1F/B9F2: 20 9F B3 JSR $B39F 1F/B9F5: 20 13 B4 JSR $B413 1F/B9F8: A5 B6 LDA $B6 1F/B9FA: 29 07 AND #$07 1F/B9FC: D0 F1 BNE $B9EF 1F/B9FE: A5 CB LDA $CB 1F/BA00: C9 3F CMP #$3F 1F/BA02: F0 EB BEQ $B9EF 1F/BA04: E6 CB INC $CB 1F/BA06: 4C EF B9 JMP $B9EF ; [ ] 1F/BA09: A2 00 LDX #$00 1F/BA0B: BD 23 BA LDA $BA23,X 1F/BA0E: 9D C4 79 STA $79C4,X 1F/BA11: BD 2D BA LDA $BA2D,X 1F/BA14: 9D E4 79 STA $79E4,X 1F/BA17: BD 37 BA LDA $BA37,X 1F/BA1A: 9D 04 7A STA $7A04,X 1F/BA1D: E8 INX 1F/BA1E: E0 0A CPX #$0A 1F/BA20: D0 E9 BNE $BA0B 1F/BA22: 60 RTS 1F/BA23: E0 E1 E2 E3 E4 E5 E6 E7 E8 E9 1F/BA2D: EA EB EC ED EE EF F0 F1 F2 F3 1F/BA37: F6 F7 00 00 00 00 00 00 F4 F5 ; [ load end credits text ] 1F/BA41: 20 1F A5 JSR $A51F ; clear text buffer 1F/BA44: AD E2 7E LDA $7EE2 1F/BA47: EE E2 7E INC $7EE2 ; increment end credits text id 1F/BA4A: 0A ASL 1F/BA4B: 18 CLC 1F/BA4C: 69 40 ADC #$40 ; 10/9640 (pointers to end credits text) 1F/BA4E: 85 7E STA $7E 1F/BA50: A9 00 LDA #$00 1F/BA52: 69 96 ADC #$96 1F/BA54: 85 7F STA $7F 1F/BA56: A9 D7 LDA #$D7 ; destination: $7AD7 1F/BA58: 85 80 STA $80 1F/BA5A: A9 7A LDA #$7A 1F/BA5C: 85 81 STA $81 1F/BA5E: A9 02 LDA #$02 ; size: 2 1F/BA60: 85 82 STA $82 1F/BA62: A9 08 LDA #$08 1F/BA64: 85 84 STA $84 1F/BA66: 20 2F F9 JSR $F92F ; load rom data 1F/BA69: AD D7 7A LDA $7AD7 1F/BA6C: 85 7E STA $7E 1F/BA6E: AD D8 7A LDA $7AD8 1F/BA71: 85 7F STA $7F 1F/BA73: A9 D7 LDA #$D7 ; destination $7AD7 1F/BA75: 85 80 STA $80 1F/BA77: A9 7A LDA #$7A 1F/BA79: 85 81 STA $81 1F/BA7B: A9 FE LDA #$FE ; size: 254 bytes 1F/BA7D: 85 82 STA $82 1F/BA7F: A9 08 LDA #$08 1F/BA81: 85 84 STA $84 1F/BA83: 20 2F F9 JSR $F92F ; load rom data 1F/BA86: A9 00 LDA #$00 ; destination $7900 1F/BA88: 85 4E STA $4E 1F/BA8A: A9 79 LDA #$79 1F/BA8C: 85 4F STA $4F 1F/BA8E: A9 20 LDA #$20 ; line length: 32 tiles 1F/BA90: 85 18 STA $18 1F/BA92: 4C 01 FA JMP $FA01 ; draw text ; [ ] 1F/BA95: A9 07 LDA #$07 1F/BA97: 85 80 STA $80 1F/BA99: A9 25 LDA #$25 1F/BA9B: 85 81 STA $81 1F/BA9D: A9 00 LDA #$00 1F/BA9F: 85 7E STA $7E 1F/BAA1: A9 79 LDA #$79 1F/BAA3: 85 7F STA $7F 1F/BAA5: A9 0E LDA #$0E 1F/BAA7: 85 82 STA $82 1F/BAA9: 20 80 FB JSR $FB80 ; wait for nmi 1F/BAAC: 20 AA F8 JSR $F8AA ; copy oam data to ppu 1F/BAAF: A5 81 LDA $81 1F/BAB1: A6 80 LDX $80 1F/BAB3: 20 E0 F8 JSR $F8E0 ; set ppu address 1F/BAB6: A0 00 LDY #$00 1F/BAB8: B1 7E LDA ($7E),Y 1F/BABA: 8D 07 20 STA $2007 1F/BABD: C8 INY 1F/BABE: C0 12 CPY #$12 1F/BAC0: D0 F6 BNE $BAB8 1F/BAC2: 20 CB F8 JSR $F8CB ; update ppu registers 1F/BAC5: A9 20 LDA #$20 1F/BAC7: 20 F2 F8 JSR $F8F2 ; add to +$7E 1F/BACA: A9 20 LDA #$20 1F/BACC: 20 FE F8 JSR $F8FE ; add to +$80 1F/BACF: C6 82 DEC $82 1F/BAD1: D0 D6 BNE $BAA9 1F/BAD3: 60 RTS 1F/BAD4: 2507 2518 7900 7911 ; [ ] 1F/BADC: 20 1F A5 JSR $A51F ; clear text buffer 1F/BADF: 20 95 BA JSR $BA95 1F/BAE2: A9 05 LDA #$05 1F/BAE4: 20 40 B3 JSR $B340 ; load color palettes 1F/BAE7: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/BAEA: A2 00 LDX #$00 1F/BAEC: 86 95 STX $95 1F/BAEE: BD D4 BA LDA $BAD4,X 1F/BAF1: 95 9D STA $9D,X 1F/BAF3: E8 INX 1F/BAF4: E0 08 CPX #$08 1F/BAF6: D0 F6 BNE $BAEE 1F/BAF8: 60 RTS ; [ ] 1F/BAF9: B5 9D LDA $9D,X 1F/BAFB: 18 CLC 1F/BAFC: 69 01 ADC #$01 1F/BAFE: 95 9D STA $9D,X 1F/BB00: B5 9E LDA $9E,X 1F/BB02: 69 00 ADC #$00 1F/BB04: 95 9E STA $9E,X 1F/BB06: 60 RTS 1F/BB07: B5 9D LDA $9D,X 1F/BB09: 38 SEC 1F/BB0A: E9 01 SBC #$01 1F/BB0C: 95 9D STA $9D,X 1F/BB0E: B5 9E LDA $9E,X 1F/BB10: E9 00 SBC #$00 1F/BB12: 95 9E STA $9E,X 1F/BB14: 60 RTS ; [ ] 1F/BB15: A5 AC LDA $AC 1F/BB17: D0 0B BNE $BB24 1F/BB19: A5 B6 LDA $B6 1F/BB1B: 29 07 AND #$07 1F/BB1D: D0 02 BNE $BB21 1F/BB1F: E6 95 INC $95 1F/BB21: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) 1F/BB24: A5 B6 LDA $B6 1F/BB26: 29 03 AND #$03 1F/BB28: F0 03 BEQ $BB2D 1F/BB2A: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) 1F/BB2D: A5 A1 LDA $A1 1F/BB2F: 85 7E STA $7E 1F/BB31: A5 A2 LDA $A2 1F/BB33: 85 7F STA $7F 1F/BB35: A5 A3 LDA $A3 1F/BB37: 85 80 STA $80 1F/BB39: A5 A4 LDA $A4 1F/BB3B: 85 81 STA $81 1F/BB3D: A0 00 LDY #$00 1F/BB3F: B1 7E LDA ($7E),Y 1F/BB41: 99 9E 7E STA $7E9E,Y 1F/BB44: B1 80 LDA ($80),Y 1F/BB46: 99 AC 7E STA $7EAC,Y 1F/BB49: A9 1F LDA #$1F 1F/BB4B: 20 F2 F8 JSR $F8F2 ; add to +$7E 1F/BB4E: A9 1F LDA #$1F 1F/BB50: 20 FE F8 JSR $F8FE ; add to +$80 1F/BB53: C8 INY 1F/BB54: C0 0E CPY #$0E 1F/BB56: D0 E7 BNE $BB3F 1F/BB58: 20 80 FB JSR $FB80 ; wait for nmi 1F/BB5B: A5 9E LDA $9E 1F/BB5D: A6 9D LDX $9D 1F/BB5F: 20 E0 F8 JSR $F8E0 ; set ppu address 1F/BB62: A5 06 LDA $06 1F/BB64: 09 04 ORA #$04 1F/BB66: 8D 00 20 STA $2000 1F/BB69: A2 00 LDX #$00 1F/BB6B: BD 9E 7E LDA $7E9E,X 1F/BB6E: 8D 07 20 STA $2007 1F/BB71: E8 INX 1F/BB72: E0 0E CPX #$0E 1F/BB74: D0 F5 BNE $BB6B 1F/BB76: A5 A0 LDA $A0 1F/BB78: A6 9F LDX $9F 1F/BB7A: 20 E0 F8 JSR $F8E0 ; set ppu address 1F/BB7D: A5 06 LDA $06 1F/BB7F: 09 04 ORA #$04 1F/BB81: 8D 00 20 STA $2000 1F/BB84: A2 00 LDX #$00 1F/BB86: BD AC 7E LDA $7EAC,X 1F/BB89: 8D 07 20 STA $2007 1F/BB8C: E8 INX 1F/BB8D: E0 0E CPX #$0E 1F/BB8F: D0 F5 BNE $BB86 1F/BB91: 20 CB F8 JSR $F8CB ; update ppu registers 1F/BB94: A2 00 LDX #$00 1F/BB96: 20 F9 BA JSR $BAF9 1F/BB99: A2 02 LDX #$02 1F/BB9B: 20 07 BB JSR $BB07 1F/BB9E: A2 04 LDX #$04 1F/BBA0: 20 F9 BA JSR $BAF9 1F/BBA3: A2 06 LDX #$06 1F/BBA5: 20 07 BB JSR $BB07 1F/BBA8: E6 95 INC $95 1F/BBAA: 60 RTS ; [ show credits ] 1F/BBAB: A9 00 LDA #$00 1F/BBAD: 85 C6 STA $C6 1F/BBAF: 20 42 B9 JSR $B942 1F/BBB2: A9 F0 LDA #$F0 1F/BBB4: 85 C0 STA $C0 1F/BBB6: A9 68 LDA #$68 1F/BBB8: 85 C1 STA $C1 1F/BBBA: A6 C6 LDX $C6 1F/BBBC: BD AD BF LDA $BFAD,X 1F/BBBF: 85 C3 STA $C3 1F/BBC1: 48 PHA 1F/BBC2: 20 3A BE JSR $BE3A 1F/BBC5: 68 PLA 1F/BBC6: AA TAX 1F/BBC7: BD C2 BF LDA $BFC2,X 1F/BBCA: 20 EA BD JSR $BDEA 1F/BBCD: 20 BD A0 JSR $A0BD ; reset frame counter 1F/BBD0: 20 BB BD JSR $BDBB 1F/BBD3: A5 C0 LDA $C0 1F/BBD5: C9 C0 CMP #$C0 1F/BBD7: D0 F7 BNE $BBD0 1F/BBD9: 20 D6 BE JSR $BED6 1F/BBDC: 20 DC BA JSR $BADC 1F/BBDF: 20 41 BA JSR $BA41 ; load end credits text 1F/BBE2: 20 6E BD JSR $BD6E 1F/BBE5: 20 9D BD JSR $BD9D 1F/BBE8: 20 D6 BE JSR $BED6 1F/BBEB: A2 3C LDX #$3C 1F/BBED: 20 EE A1 JSR $A1EE ; wait for vblank 1F/BBF0: 20 E6 A0 JSR $A0E6 ; fade out all palettes 1F/BBF3: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/BBF6: 20 42 B9 JSR $B942 1F/BBF9: E6 C6 INC $C6 ; next page (20 pages total) 1F/BBFB: A5 C6 LDA $C6 1F/BBFD: C9 14 CMP #$14 1F/BBFF: D0 B1 BNE $BBB2 1F/BC01: 60 RTS ; [ show characters ] 1F/BC02: A9 00 LDA #$00 1F/BC04: 85 C6 STA $C6 1F/BC06: A6 C5 LDX $C5 1F/BC08: BD 00 61 LDA $6100,X ; job id 1F/BC0B: 85 C3 STA $C3 1F/BC0D: A9 F0 LDA #$F0 1F/BC0F: 85 C0 STA $C0 1F/BC11: A9 68 LDA #$68 1F/BC13: 85 C1 STA $C1 1F/BC15: A5 C3 LDA $C3 1F/BC17: 48 PHA 1F/BC18: 20 3A BE JSR $BE3A 1F/BC1B: 68 PLA 1F/BC1C: AA TAX 1F/BC1D: BD C2 BF LDA $BFC2,X 1F/BC20: 20 EA BD JSR $BDEA 1F/BC23: 20 BD A0 JSR $A0BD ; reset frame counter 1F/BC26: 20 BB BD JSR $BDBB 1F/BC29: A5 C0 LDA $C0 1F/BC2B: C9 78 CMP #$78 1F/BC2D: D0 F7 BNE $BC26 1F/BC2F: A9 00 LDA #$00 1F/BC31: 85 95 STA $95 1F/BC33: 20 6E BD JSR $BD6E 1F/BC36: 20 D6 BE JSR $BED6 1F/BC39: 20 67 BC JSR $BC67 1F/BC3C: 20 9D BD JSR $BD9D 1F/BC3F: 20 D6 BE JSR $BED6 1F/BC42: A9 01 LDA #$01 ; bg palettes 1F/BC44: 20 E8 A0 JSR $A0E8 ; fade out palettes 1F/BC47: 20 BD A0 JSR $A0BD ; reset frame counter 1F/BC4A: 20 BB BD JSR $BDBB 1F/BC4D: A5 C0 LDA $C0 1F/BC4F: D0 F9 BNE $BC4A 1F/BC51: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/BC54: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/BC57: A5 C5 LDA $C5 ; next character 1F/BC59: 18 CLC 1F/BC5A: 69 40 ADC #$40 1F/BC5C: 85 C5 STA $C5 1F/BC5E: D0 A6 BNE $BC06 1F/BC60: 60 RTS 1F/BC61: 01 01 01 01 02 06 ; [ ] 1F/BC67: 20 1F A5 JSR $A51F ; clear text buffer 1F/BC6A: A0 00 LDY #$00 1F/BC6C: A6 C5 LDX $C5 1F/BC6E: BD 06 61 LDA $6106,X 1F/BC71: 99 DD 7A STA $7ADD,Y 1F/BC74: B9 61 BC LDA $BC61,Y 1F/BC77: 99 D7 7A STA $7AD7,Y 1F/BC7A: C8 INY 1F/BC7B: E8 INX 1F/BC7C: C0 06 CPY #$06 1F/BC7E: D0 EE BNE $BC6E 1F/BC80: A9 01 LDA #$01 1F/BC82: 99 DD 7A STA $7ADD,Y 1F/BC85: A9 02 LDA #$02 1F/BC87: 99 DE 7A STA $7ADE,Y 1F/BC8A: A9 07 LDA #$07 1F/BC8C: 99 DF 7A STA $7ADF,Y 1F/BC8F: A9 18 LDA #$18 1F/BC91: 99 E0 7A STA $7AE0,Y 1F/BC94: A9 22 LDA #$22 1F/BC96: 99 E1 7A STA $7AE1,Y 1F/BC99: A6 C5 LDX $C5 1F/BC9B: BD 01 61 LDA $6101,X 1F/BC9E: 85 18 STA $18 1F/BCA0: E6 18 INC $18 1F/BCA2: A9 00 LDA #$00 1F/BCA4: 85 19 STA $19 1F/BCA6: 85 1B STA $1B 1F/BCA8: A9 0A LDA #$0A 1F/BCAA: 85 1A STA $1A 1F/BCAC: 20 92 FC JSR $FC92 ; divide (16-bit) 1F/BCAF: A5 1C LDA $1C 1F/BCB1: 18 CLC 1F/BCB2: 69 80 ADC #$80 1F/BCB4: 8D E8 7A STA $7AE8 1F/BCB7: A5 1E LDA $1E 1F/BCB9: 18 CLC 1F/BCBA: 69 80 ADC #$80 1F/BCBC: 8D E9 7A STA $7AE9 1F/BCBF: A9 00 LDA #$00 1F/BCC1: 8D EA 7A STA $7AEA 1F/BCC4: 20 86 BA JSR $BA86 1F/BCC7: 20 95 BA JSR $BA95 1F/BCCA: 4C 56 BD JMP $BD56 ; [ ] 1F/BCCD: A9 00 LDA #$00 1F/BCCF: 85 C5 STA $C5 1F/BCD1: A9 01 LDA #$01 1F/BCD3: 85 C2 STA $C2 1F/BCD5: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/BCD8: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 1F/BCDB: A6 C5 LDX $C5 1F/BCDD: BD D0 BD LDA $BDD0,X 1F/BCE0: 85 C3 STA $C3 1F/BCE2: A9 78 LDA #$78 1F/BCE4: 85 C0 STA $C0 1F/BCE6: A9 68 LDA #$68 1F/BCE8: 85 C1 STA $C1 1F/BCEA: A5 C3 LDA $C3 1F/BCEC: 20 D8 BD JSR $BDD8 1F/BCEF: A9 04 LDA #$04 1F/BCF1: 20 40 B3 JSR $B340 ; load color palettes 1F/BCF4: A9 00 LDA #$00 1F/BCF6: 85 C8 STA $C8 1F/BCF8: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/BCFB: A6 C5 LDX $C5 1F/BCFD: BD 75 BF LDA $BF75,X 1F/BD00: 85 C3 STA $C3 1F/BD02: A5 C5 LDA $C5 1F/BD04: C9 04 CMP #$04 1F/BD06: D0 06 BNE $BD0E 1F/BD08: 20 20 BD JSR $BD20 1F/BD0B: 4C 11 BD JMP $BD11 1F/BD0E: 20 E1 BE JSR $BEE1 1F/BD11: 20 41 BD JSR $BD41 1F/BD14: 20 E6 A0 JSR $A0E6 ; fade out all palettes 1F/BD17: E6 C5 INC $C5 1F/BD19: A5 C5 LDA $C5 1F/BD1B: C9 08 CMP #$08 1F/BD1D: D0 BC BNE $BCDB 1F/BD1F: 60 RTS ; [ ] 1F/BD20: A9 84 LDA #$84 1F/BD22: 85 C0 STA $C0 1F/BD24: A9 01 LDA #$01 1F/BD26: 85 C2 STA $C2 1F/BD28: 85 C4 STA $C4 1F/BD2A: 20 E1 BE JSR $BEE1 1F/BD2D: A9 94 LDA #$94 1F/BD2F: 85 C0 STA $C0 1F/BD31: A9 06 LDA #$06 1F/BD33: 85 C2 STA $C2 1F/BD35: 20 E1 BE JSR $BEE1 1F/BD38: A9 00 LDA #$00 1F/BD3A: 85 C4 STA $C4 1F/BD3C: A9 01 LDA #$01 1F/BD3E: 85 C2 STA $C2 1F/BD40: 60 RTS ; [ ] 1F/BD41: 20 41 BA JSR $BA41 1F/BD44: 20 95 BA JSR $BA95 1F/BD47: A9 05 LDA #$05 1F/BD49: 20 40 B3 JSR $B340 ; load color palettes 1F/BD4C: A9 00 LDA #$00 1F/BD4E: 20 0A A1 JSR $A10A 1F/BD51: A2 82 LDX #$82 1F/BD53: 4C EE A1 JMP $A1EE ; wait for vblank ; [ ] 1F/BD56: A9 05 LDA #$05 1F/BD58: 20 40 B3 JSR $B340 ; load color palettes 1F/BD5B: A9 01 LDA #$01 1F/BD5D: 4C 4E BD JMP $BD4E ; [ ] 1F/BD60: A2 00 LDX #$00 1F/BD62: BD F0 7C LDA $7CF0,X 1F/BD65: 9D 14 7D STA $7D14,X 1F/BD68: E8 INX 1F/BD69: E0 03 CPX #$03 1F/BD6B: D0 F5 BNE $BD62 1F/BD6D: 60 RTS ; [ ] 1F/BD6E: 20 BD A0 JSR $A0BD ; reset frame counter 1F/BD71: 20 60 BD JSR $BD60 1F/BD74: 20 15 BB JSR $BB15 1F/BD77: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/BD7A: A9 00 LDA #$00 1F/BD7C: 85 C8 STA $C8 1F/BD7E: 20 E1 BE JSR $BEE1 1F/BD81: 20 80 BE JSR $BE80 1F/BD84: A5 B6 LDA $B6 1F/BD86: 29 04 AND #$04 1F/BD88: 4A LSR 1F/BD89: 4A LSR 1F/BD8A: 18 CLC 1F/BD8B: 69 02 ADC #$02 1F/BD8D: 85 C2 STA $C2 1F/BD8F: E6 B6 INC $B6 1F/BD91: A5 95 LDA $95 1F/BD93: C9 09 CMP #$09 1F/BD95: D0 DD BNE $BD74 1F/BD97: 20 AB B5 JSR $B5AB 1F/BD9A: 4C E1 BE JMP $BEE1 ; [ ] 1F/BD9D: 20 BD A0 JSR $A0BD ; reset frame counter 1F/BDA0: 20 AB B5 JSR $B5AB 1F/BDA3: 20 E1 BE JSR $BEE1 1F/BDA6: A5 B6 LDA $B6 1F/BDA8: 29 10 AND #$10 1F/BDAA: 4A LSR 1F/BDAB: 4A LSR 1F/BDAC: 4A LSR 1F/BDAD: 4A LSR 1F/BDAE: 18 CLC 1F/BDAF: 69 04 ADC #$04 1F/BDB1: 85 C2 STA $C2 1F/BDB3: 20 57 A1 JSR $A157 1F/BDB6: 29 80 AND #$80 1F/BDB8: F0 E6 BEQ $BDA0 1F/BDBA: 60 RTS 1F/BDBB: 20 AB B5 JSR $B5AB 1F/BDBE: 20 E1 BE JSR $BEE1 1F/BDC1: A5 B6 LDA $B6 1F/BDC3: 29 04 AND #$04 1F/BDC5: 4A LSR 1F/BDC6: 4A LSR 1F/BDC7: 85 C2 STA $C2 1F/BDC9: C6 C0 DEC $C0 1F/BDCB: C6 C0 DEC $C0 1F/BDCD: E6 B6 INC $B6 1F/BDCF: 60 RTS 1F/BDD0: 05 06 07 09 00 0A 0B 0C 1F/BDD8: A2 60 LDX #$60 1F/BDDA: 20 EA F8 JSR $F8EA ; multiply 1F/BDDD: 18 CLC 1F/BDDE: 69 20 ADC #$20 1F/BDE0: 85 7E STA $7E 1F/BDE2: 8A TXA 1F/BDE3: 69 BA ADC #$BA 1F/BDE5: 85 7F STA $7F 1F/BDE7: 4C 5A BE JMP $BE5A ; [ ] 1F/BDEA: A2 03 LDX #$03 1F/BDEC: 20 EA F8 JSR $F8EA ; multiply 1F/BDEF: 18 CLC 1F/BDF0: 69 98 ADC #$98 ; source = 2E/9098 (weapon animation properties) 1F/BDF2: 85 7E STA $7E 1F/BDF4: 8A TXA 1F/BDF5: 69 90 ADC #$90 1F/BDF7: 85 7F STA $7F 1F/BDF9: A9 1F LDA #$1F 1F/BDFB: 85 80 STA $80 1F/BDFD: A9 7E LDA #$7E 1F/BDFF: 85 81 STA $81 1F/BE01: A9 03 LDA #$03 1F/BE03: 85 82 STA $82 1F/BE05: A9 17 LDA #$17 1F/BE07: 85 84 STA $84 1F/BE09: 20 2F F9 JSR $F92F ; load rom data 1F/BE0C: AD 20 7E LDA $7E20 1F/BE0F: A2 10 LDX #$10 1F/BE11: 20 EA F8 JSR $F8EA ; multiply 1F/BE14: 18 CLC 1F/BE15: 69 00 ADC #$00 1F/BE17: 85 7E STA $7E 1F/BE19: 8A TXA 1F/BE1A: 69 B0 ADC #$B0 1F/BE1C: 85 7F STA $7F 1F/BE1E: A9 00 LDA #$00 1F/BE20: 85 80 STA $80 1F/BE22: A9 18 LDA #$18 1F/BE24: 85 81 STA $81 1F/BE26: A9 04 LDA #$04 1F/BE28: 85 82 STA $82 1F/BE2A: A9 15 LDA #$15 1F/BE2C: 85 84 STA $84 1F/BE2E: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 1F/BE31: AD 21 7E LDA $7E21 1F/BE34: 8D EF 7C STA $7CEF 1F/BE37: 4C 77 F8 JMP $F877 ; load general use palette ; [ ] 1F/BE3A: 85 18 STA $18 1F/BE3C: A9 00 LDA #$00 1F/BE3E: 85 19 STA $19 1F/BE40: A9 A0 LDA #$A0 1F/BE42: 85 1A STA $1A 1F/BE44: A9 02 LDA #$02 1F/BE46: 85 1B STA $1B 1F/BE48: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 1F/BE4B: AD 1C 00 LDA $001C 1F/BE4E: 18 CLC 1F/BE4F: 69 00 ADC #$00 1F/BE51: 85 7E STA $7E 1F/BE53: AD 1D 00 LDA $001D 1F/BE56: 69 80 ADC #$80 1F/BE58: 85 7F STA $7F 1F/BE5A: A9 00 LDA #$00 1F/BE5C: 85 80 STA $80 1F/BE5E: A9 10 LDA #$10 1F/BE60: 85 81 STA $81 1F/BE62: A9 2A LDA #$2A 1F/BE64: 85 82 STA $82 1F/BE66: A9 14 LDA #$14 1F/BE68: 85 84 STA $84 1F/BE6A: 4C 69 F9 JMP $F969 ; copy graphics to ppu (no flip) 1F/BE6D: A5 B6 LDA $B6 1F/BE6F: 29 04 AND #$04 1F/BE71: 4A LSR 1F/BE72: A8 TAY 1F/BE73: B9 89 BF LDA $BF89,Y 1F/BE76: 85 80 STA $80 1F/BE78: B9 8A BF LDA $BF8A,Y 1F/BE7B: 85 81 STA $81 1F/BE7D: A0 00 LDY #$00 1F/BE7F: 60 RTS ; [ ] 1F/BE80: A9 00 LDA #$00 1F/BE82: 85 CD STA $CD 1F/BE84: 20 8D BE JSR $BE8D 1F/BE87: A5 C4 LDA $C4 1F/BE89: F0 32 BEQ $BEBD 1F/BE8B: 85 CD STA $CD 1F/BE8D: 20 6D BE JSR $BE6D 1F/BE90: A6 C8 LDX $C8 1F/BE92: B1 80 LDA ($80),Y 1F/BE94: 18 CLC 1F/BE95: 65 C1 ADC $C1 1F/BE97: 9D 00 02 STA $0200,X 1F/BE9A: E8 INX 1F/BE9B: C8 INY 1F/BE9C: B1 80 LDA ($80),Y 1F/BE9E: 9D 00 02 STA $0200,X 1F/BEA1: E8 INX 1F/BEA2: C8 INY 1F/BEA3: B1 80 LDA ($80),Y 1F/BEA5: 9D 00 02 STA $0200,X 1F/BEA8: E8 INX 1F/BEA9: C8 INY 1F/BEAA: B1 80 LDA ($80),Y 1F/BEAC: 18 CLC 1F/BEAD: 65 C0 ADC $C0 1F/BEAF: 9D 00 02 STA $0200,X 1F/BEB2: 20 BE BE JSR $BEBE 1F/BEB5: E8 INX 1F/BEB6: C8 INY 1F/BEB7: C0 10 CPY #$10 1F/BEB9: D0 D7 BNE $BE92 1F/BEBB: 86 C8 STX $C8 1F/BEBD: 60 RTS ; [ ] 1F/BEBE: A5 CD LDA $CD 1F/BEC0: F0 13 BEQ $BED5 1F/BEC2: BD 00 02 LDA $0200,X 1F/BEC5: 49 FF EOR #$FF 1F/BEC7: 38 SEC 1F/BEC8: E9 08 SBC #$08 1F/BECA: 9D 00 02 STA $0200,X 1F/BECD: BD FF 01 LDA $01FF,X 1F/BED0: 49 40 EOR #$40 1F/BED2: 9D FF 01 STA $01FF,X 1F/BED5: 60 RTS ; [ ] 1F/BED6: 20 D1 A1 JSR $A1D1 ; clear oam data 1F/BED9: A9 00 LDA #$00 1F/BEDB: 85 C8 STA $C8 1F/BEDD: A9 01 LDA #$01 1F/BEDF: 85 C2 STA $C2 1F/BEE1: A9 00 LDA #$00 1F/BEE3: 85 CD STA $CD 1F/BEE5: 20 EE BE JSR $BEEE 1F/BEE8: A5 C4 LDA $C4 1F/BEEA: F0 48 BEQ $BF34 1F/BEEC: 85 CD STA $CD 1F/BEEE: A5 C2 LDA $C2 1F/BEF0: A2 06 LDX #$06 1F/BEF2: 20 EA F8 JSR $F8EA ; multiply 1F/BEF5: 18 CLC 1F/BEF6: 69 35 ADC #$35 ; 1F/BF35 1F/BEF8: 85 7E STA $7E 1F/BEFA: 8A TXA 1F/BEFB: 69 BF ADC #$BF 1F/BEFD: 85 7F STA $7F 1F/BEFF: A4 C3 LDY $C3 1F/BF01: B9 5F BF LDA $BF5F,Y 1F/BF04: 85 80 STA $80 1F/BF06: A0 00 LDY #$00 1F/BF08: A6 C8 LDX $C8 1F/BF0A: B9 83 BF LDA $BF83,Y 1F/BF0D: 18 CLC 1F/BF0E: 65 C1 ADC $C1 1F/BF10: 9D 00 02 STA $0200,X 1F/BF13: E8 INX 1F/BF14: B1 7E LDA ($7E),Y 1F/BF16: 9D 00 02 STA $0200,X 1F/BF19: E8 INX 1F/BF1A: A5 80 LDA $80 1F/BF1C: 9D 00 02 STA $0200,X 1F/BF1F: E8 INX 1F/BF20: B9 7D BF LDA $BF7D,Y 1F/BF23: 18 CLC 1F/BF24: 65 C0 ADC $C0 1F/BF26: 9D 00 02 STA $0200,X 1F/BF29: 20 BE BE JSR $BEBE 1F/BF2C: E8 INX 1F/BF2D: C8 INY 1F/BF2E: C0 06 CPY #$06 1F/BF30: D0 D8 BNE $BF0A 1F/BF32: 86 C8 STX $C8 1F/BF34: 60 RTS ; tile ids for character sprites ??? 1F/BF35: 00 01 02 03 06 07 1F/BF3B: 00 01 02 03 04 05 1F/BF41: 00 01 0E 03 0F 07 1F/BF47: 00 01 02 03 06 07 1F/BF4D: 00 01 02 03 04 05 1F/BF53: 18 19 1A 1B 1C 1D 1F/BF59: 06 07 08 09 0A 0B ; palette for each job ??? 1F/BF5F: 00 00 01 00 01 00 02 00 02 00 01 01 01 01 01 02 1F/BF6F: 02 01 00 02 00 00 1F/BF75: 00 02 06 06 06 00 00 00 1F/BF7D: 00 08 00 08 00 08 1F/BF83: 00 00 08 08 10 10 1F/BF89: BF9D BF8D 1F/BF8D: 00 80 03 F0 1F/BF91: 00 81 03 F8 1F/BF95: 08 82 03 F0 1F/BF99: 08 83 03 F8 1F/BF9D: F8 81 43 08 1F/BFA1: F8 80 43 10 1F/BFA5: 00 83 43 08 1F/BFA9: 00 82 43 10 ; ??? for each job 1F/BFAD: 01 04 03 05 02 09 06 07 08 10 0A 0C 0B 0D 0F 0E 1F/BFBD: 11 12 15 14 00 ; ??? for each job 1F/BFC2: 39 24 06 13 0C 25 1F 36 21 3D 45 1B 2D 08 34 0D 1F/BFD2: 1E 0D 14 0D 14 37 1F/BFD8: 00 00 00 00 00 00 00 00 1F/BFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 1F/BFF0: 00 00 00 00 00 00 00 ; long jump table 1F/BFF7: 4C 00 A0 JMP $A000 ; prologue 1F/BFFA: 4C 03 A0 JMP $A003 ; epilogue 1F/BFFD: 4C 06 A0 JMP $A006 ; ending ; -------------------------------------------------------------------------- 2E/9D50: 4C 5F 9D JMP $9D5F ; init battle graphics 2E/9D53: 4C 59 9D JMP $9D59 ; execute battle graphics 2E/9D56: 4C 8E 9E JMP $9E8E ; init battle ; [ execute battle graphics ] 2E/9D59: AE 52 00 LDX $0052 2E/9D5C: 4C 4E AF JMP $AF4E ; execute battle graphics ; [ init battle graphics ] ; also starts the battle song 2E/9D5F: 20 64 9E JSR $9E64 ; init character status and job 2E/9D62: 20 88 9D JSR $9D88 ; init battle color palettes 2E/9D65: 20 ED A9 JSR $A9ED ; init character/menu graphics 2E/9D68: 20 4A A1 JSR $A14A ; init monster/bg graphics 2E/9D6B: AD 68 7D LDA $7D68 2E/9D6E: 0A ASL 2E/9D6F: 30 04 BMI $9D75 ; branch if a boss battle 2E/9D71: A9 20 LDA #$20 ; "Battle 1" 2E/9D73: D0 0F BNE $9D84 2E/9D75: AD 73 7D LDA $7D73 2E/9D78: 29 1F AND #$1F 2E/9D7A: C9 08 CMP #$08 2E/9D7C: D0 04 BNE $9D82 2E/9D7E: A9 28 LDA #$28 ; "This is the Last Battle (Part 3)" 2E/9D80: D0 02 BNE $9D84 2E/9D82: A9 2A LDA #$2A ; "Battle 2" 2E/9D84: 20 E9 FA JSR $FAE9 ; play song 2E/9D87: 60 RTS ; [ init battle color palettes ] 2E/9D88: 20 97 9D JSR $9D97 ; clear battle color palettes 2E/9D8B: 20 80 FB JSR $FB80 ; wait for nmi 2E/9D8E: 20 97 F8 JSR $F897 ; copy color palettes to ppu 2E/9D91: 20 A2 9D JSR $9DA2 ; load battle color palettes 2E/9D94: 4C 01 9E JMP $9E01 ; init character palette ids ; [ clear battle color palettes ] 2E/9D97: A2 20 LDX #$20 2E/9D99: A9 0F LDA #$0F ; black 2E/9D9B: 9D F6 7C STA $7CF6,X 2E/9D9E: CA DEX 2E/9D9F: D0 FA BNE $9D9B 2E/9DA1: 60 RTS ; [ load battle color palettes ] 2E/9DA2: AD 69 7D LDA $7D69 ; monster palette 1 -> bg palette 0 2E/9DA5: 20 28 9E JSR $9E28 ; load battle palette 2E/9DA8: A0 00 LDY #$00 2E/9DAA: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DAD: AD 6A 7D LDA $7D6A ; monster palette 2 -> bg palette 1 2E/9DB0: 20 28 9E JSR $9E28 ; load battle palette 2E/9DB3: A0 04 LDY #$04 2E/9DB5: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DB8: 20 77 F8 JSR $F877 ; load general use palette 2E/9DBB: AD F0 7C LDA $7CF0 2E/9DBE: 85 7F STA $7F 2E/9DC0: AD F1 7C LDA $7CF1 2E/9DC3: 85 80 STA $80 2E/9DC5: AD F2 7C LDA $7CF2 2E/9DC8: 85 81 STA $81 2E/9DCA: A0 08 LDY #$08 ; battle bg palette -> bg palette 2 2E/9DCC: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DCF: A9 FB LDA #$FB ; menu window palette -> bg palette 3 2E/9DD1: 20 28 9E JSR $9E28 ; load battle palette 2E/9DD4: A0 0C LDY #$0C 2E/9DD6: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DD9: A9 FC LDA #$FC ; character palette 0 -> sprite palette 0 2E/9DDB: 20 28 9E JSR $9E28 ; load battle palette 2E/9DDE: A0 10 LDY #$10 2E/9DE0: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DE3: A9 FD LDA #$FD ; character palette 1 -> sprite palette 1 2E/9DE5: 20 28 9E JSR $9E28 ; load battle palette 2E/9DE8: A0 14 LDY #$14 2E/9DEA: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DED: A9 FE LDA #$FE ; character palette 2 -> sprite palette 2 2E/9DEF: 20 28 9E JSR $9E28 ; load battle palette 2E/9DF2: A0 18 LDY #$18 2E/9DF4: 20 1A 9E JSR $9E1A ; copy palette from buffer 2E/9DF7: A9 FF LDA #$FF ; cursor palette -> sprite palette 3 2E/9DF9: 20 28 9E JSR $9E28 ; load battle palette 2E/9DFC: A0 1C LDY #$1C 2E/9DFE: 4C 1A 9E JMP $9E1A ; copy palette from buffer ; [ init character palette ids ] 2E/9E01: A2 00 LDX #$00 2E/9E03: BC 8B 7D LDY $7D8B,X ; job id 2E/9E06: D0 06 BNE $9E0E 2E/9E08: BD 4A 9E LDA $9E4A,X ; freelancer 2E/9E0B: 4C 11 9E JMP $9E11 2E/9E0E: B9 4E 9E LDA $9E4E,Y ; other jobs 2E/9E11: 9D 93 7D STA $7D93,X 2E/9E14: E8 INX 2E/9E15: E0 04 CPX #$04 2E/9E17: D0 EA BNE $9E03 2E/9E19: 60 RTS ; [ copy palette from buffer ] ; $7E-$81: buffer ; Y: pointer to palette 2E/9E1A: A2 00 LDX #$00 2E/9E1C: B5 7E LDA $7E,X 2E/9E1E: 99 F7 7C STA $7CF7,Y ; color palettes 2E/9E21: C8 INY 2E/9E22: E8 INX 2E/9E23: E0 04 CPX #$04 2E/9E25: D0 F5 BNE $9E1C 2E/9E27: 60 RTS ; [ load battle palette ] ; A: battle palette id 2E/9E28: A2 03 LDX #$03 2E/9E2A: 20 EA F8 JSR $F8EA ; multiply 2E/9E2D: 18 CLC 2E/9E2E: 69 00 ADC #$00 ; 2E/8C00 2E/9E30: 85 82 STA $82 2E/9E32: 8A TXA 2E/9E33: 69 8C ADC #$8C 2E/9E35: 85 83 STA $83 2E/9E37: A9 0F LDA #$0F ; color index 0 is always black 2E/9E39: 85 7E STA $7E 2E/9E3B: A0 00 LDY #$00 2E/9E3D: A2 00 LDX #$00 2E/9E3F: B1 82 LDA ($82),Y 2E/9E41: 95 7F STA $7F,X 2E/9E43: E8 INX 2E/9E44: C8 INY 2E/9E45: C0 03 CPY #$03 2E/9E47: D0 F6 BNE $9E3F 2E/9E49: 60 RTS ; palette for each job (first 4 also correspond to onion knight) 2E/9E4A: 00 01 02 00 00 00 01 00 01 00 02 00 02 00 01 01 2E/9E5A: 01 01 01 02 02 01 00 02 00 00 ; [ init character status and job ] 2E/9E64: A2 00 LDX #$00 2E/9E66: A0 00 LDY #$00 2E/9E68: B9 0F 62 LDA $620F,Y ; character row 2E/9E6B: 29 01 AND #$01 2E/9E6D: 9D 8F 7D STA $7D8F,X 2E/9E70: B9 00 61 LDA $6100,Y ; job id 2E/9E73: 9D 8B 7D STA $7D8B,X 2E/9E76: 98 TYA 2E/9E77: 18 CLC 2E/9E78: 69 40 ADC #$40 2E/9E7A: A8 TAY 2E/9E7B: E8 INX 2E/9E7C: E0 04 CPX #$04 2E/9E7E: D0 E8 BNE $9E68 ; fallthrough ; [ update status buffer ] 2E/9E80: A2 00 LDX #$00 2E/9E82: BD BB 78 LDA $78BB,X ; update status buffer 2E/9E85: 9D 9B 7D STA $7D9B,X 2E/9E88: E8 INX 2E/9E89: E0 08 CPX #$08 2E/9E8B: D0 F5 BNE $9E82 2E/9E8D: 60 RTS ; [ init battle ] 2E/9E8E: AD D8 7E LDA $7ED8 2E/9E91: F0 02 BEQ $9E95 ; branch if not a boss battle 2E/9E93: A9 01 LDA #$01 ; set msb of battle id 2E/9E95: 8D EE 7C STA $7CEE 2E/9E98: AD D8 7E LDA $7ED8 2E/9E9B: 85 7E STA $7E 2E/9E9D: AD EF 7C LDA $7CEF 2E/9EA0: 48 PHA 2E/9EA1: 29 1F AND #$1F 2E/9EA3: 8D EF 7C STA $7CEF ; battle bg id 2E/9EA6: 68 PLA 2E/9EA7: 29 E0 AND #$E0 2E/9EA9: 8D D8 7E STA $7ED8 2E/9EAC: AD C6 74 LDA $74C6 2E/9EAF: C9 04 CMP #$04 2E/9EB1: 90 0B BCC $9EBE 2E/9EB3: A5 7E LDA $7E 2E/9EB5: C9 04 CMP #$04 2E/9EB7: F0 05 BEQ $9EBE 2E/9EB9: A9 06 LDA #$06 2E/9EBB: 8D EF 7C STA $7CEF 2E/9EBE: A9 17 LDA #$17 2E/9EC0: 8D F6 7C STA $7CF6 2E/9EC3: A9 00 LDA #$00 2E/9EC5: 8D 15 40 STA $4015 2E/9EC8: 8D 00 20 STA $2000 2E/9ECB: 8D 01 20 STA $2001 2E/9ECE: 8D F3 7C STA $7CF3 2E/9ED1: 85 C9 STA $C9 2E/9ED3: 85 CA STA $CA 2E/9ED5: 85 B8 STA $B8 2E/9ED7: 85 AC STA $AC 2E/9ED9: 85 00 STA $00 2E/9EDB: 8D 8E 7E STA $7E8E 2E/9EDE: 8D 95 7E STA $7E95 2E/9EE1: 8D E2 7E STA $7EE2 2E/9EE4: 85 A9 STA $A9 2E/9EE6: 85 AA STA $AA 2E/9EE8: 85 05 STA $05 2E/9EEA: 85 01 STA $01 2E/9EEC: 85 CB STA $CB 2E/9EEE: 85 CC STA $CC 2E/9EF0: A2 04 LDX #$04 2E/9EF2: 9D C0 7D STA $7DC0,X 2E/9EF5: 9D A2 7D STA $7DA2,X 2E/9EF8: 9D D2 7D STA $7DD2,X 2E/9EFB: 9D 21 7E STA $7E21,X 2E/9EFE: 95 0B STA $0B,X 2E/9F00: 9D 96 7D STA $7D96,X 2E/9F03: CA DEX 2E/9F04: D0 EC BNE $9EF2 2E/9F06: 85 10 STA $10 2E/9F08: 85 11 STA $11 2E/9F0A: 85 09 STA $09 2E/9F0C: 85 0A STA $0A 2E/9F0E: 85 0B STA $0B 2E/9F10: A9 88 LDA #$88 2E/9F12: 85 06 STA $06 2E/9F14: 85 07 STA $07 2E/9F16: A9 99 LDA #$99 2E/9F18: 85 08 STA $08 2E/9F1A: A9 10 LDA #$10 2E/9F1C: 85 04 STA $04 2E/9F1E: A9 97 LDA #$97 2E/9F20: 85 03 STA $03 2E/9F22: 20 8D 9F JSR $9F8D ; clear oam data 2E/9F25: 20 98 9F JSR $9F98 ; clear vram 2E/9F28: 20 27 FC JSR $FC27 ; init rng 2E/9F2B: 20 2A A0 JSR $A02A ; load monster set 2E/9F2E: 20 AA 9F JSR $9FAA ; get monster tilemap id 2E/9F31: 20 1F A3 JSR $A31F ; init monster slots 2E/9F34: 20 09 B9 JSR $B909 ; update number of monsters remaining 2E/9F37: A2 00 LDX #$00 2E/9F39: BD A7 7D LDA $7DA7,X 2E/9F3C: 9D CD 7E STA $7ECD,X 2E/9F3F: E8 INX 2E/9F40: E0 08 CPX #$08 2E/9F42: D0 F5 BNE $9F39 2E/9F44: A2 00 LDX #$00 2E/9F46: AD 68 7D LDA $7D68 2E/9F49: 4A LSR 2E/9F4A: 4A LSR 2E/9F4B: 4A LSR 2E/9F4C: 4A LSR 2E/9F4D: 4A LSR 2E/9F4E: 4A LSR 2E/9F4F: 29 03 AND #$03 2E/9F51: 0D D8 7E ORA $7ED8 2E/9F54: 8D D8 7E STA $7ED8 2E/9F57: A5 06 LDA $06 2E/9F59: 09 80 ORA #$80 2E/9F5B: 8D 00 20 STA $2000 2E/9F5E: A2 00 LDX #$00 2E/9F60: BD 6C 9F LDA $9F6C,X ; copy code below into ram 2E/9F63: 9D E3 7E STA $7EE3,X 2E/9F66: E8 INX 2E/9F67: E0 24 CPX #$24 2E/9F69: D0 F5 BNE $9F60 2E/9F6B: 60 RTS ; [ sine ] ; this code gets copied into ram at $7EE3 ; returns 256 * sin((2*pi) * X / 256) (signed) 2E/9F6C: A9 08 LDA #$08 2E/9F6E: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 2E/9F71: BD 80 9A LDA $9A80,X 2E/9F74: 48 PHA 2E/9F75: AD F6 7C LDA $7CF6 ; current prg-rom bank 2E/9F78: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 2E/9F7B: EA NOP 2E/9F7C: 68 PLA 2E/9F7D: 60 RTS ; [ final boss animation ] ; this code gets copied into ram at $7EF5 2E/9F7E: A9 08 LDA #$08 2E/9F80: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 2E/9F83: 20 00 8A JSR $8A00 ; 10/8A00 2E/9F86: AD F6 7C LDA $7CF6 2E/9F89: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 2E/9F8C: 60 RTS ; [ clear oam data ] 2E/9F8D: A0 00 LDY #$00 2E/9F8F: A9 F0 LDA #$F0 2E/9F91: 99 00 02 STA $0200,Y 2E/9F94: C8 INY 2E/9F95: D0 FA BNE $9F91 2E/9F97: 60 RTS ; [ clear vram ] 2E/9F98: A9 00 LDA #$00 2E/9F9A: AA TAX 2E/9F9B: A0 30 LDY #$30 ; clear $0000-$2FFF 2E/9F9D: 20 E0 F8 JSR $F8E0 ; set ppu address 2E/9FA0: 8D 07 20 STA $2007 ; write to ppu 2E/9FA3: CA DEX 2E/9FA4: D0 FA BNE $9FA0 2E/9FA6: 88 DEY 2E/9FA7: D0 F7 BNE $9FA0 2E/9FA9: 60 RTS ; [ get monster tilemap id ] 2E/9FAA: AD 73 7D LDA $7D73 ; monster 0 2E/9FAD: 29 E0 AND #$E0 2E/9FAF: 85 7E STA $7E 2E/9FB1: 29 C0 AND #$C0 2E/9FB3: D0 05 BNE $9FBA 2E/9FB5: A9 00 LDA #$00 ; 00? 2E/9FB7: 4C 26 A0 JMP $A026 2E/9FBA: A5 7E LDA $7E 2E/9FBC: C9 A0 CMP #$A0 2E/9FBE: D0 05 BNE $9FC5 2E/9FC0: A9 07 LDA #$07 ; 101 2E/9FC2: 4C 26 A0 JMP $A026 2E/9FC5: 29 C0 AND #$C0 2E/9FC7: C9 C0 CMP #$C0 2E/9FC9: D0 05 BNE $9FD0 2E/9FCB: A9 09 LDA #$09 ; 11? boss tilemap 2E/9FCD: 4C 26 A0 JMP $A026 2E/9FD0: C9 40 CMP #$40 2E/9FD2: D0 11 BNE $9FE5 2E/9FD4: AD 77 7D LDA $7D77 ; monster 2 2E/9FD7: 29 C0 AND #$C0 2E/9FD9: F0 05 BEQ $9FE0 2E/9FDB: A9 03 LDA #$03 ; 11? 2E/9FDD: 4C 26 A0 JMP $A026 2E/9FE0: A9 01 LDA #$01 2E/9FE2: 4C 26 A0 JMP $A026 2E/9FE5: AD 6F 7D LDA $7D6F ; monster 0 count 2E/9FE8: C9 01 CMP #$01 2E/9FEA: D0 23 BNE $A00F 2E/9FEC: AD 75 7D LDA $7D75 ; monster 1 2E/9FEF: 29 C0 AND #$C0 2E/9FF1: D0 05 BNE $9FF8 2E/9FF3: A9 02 LDA #$02 2E/9FF5: 4C 26 A0 JMP $A026 2E/9FF8: C9 40 CMP #$40 2E/9FFA: D0 05 BNE $A001 2E/9FFC: A9 04 LDA #$04 2E/9FFE: 4C 26 A0 JMP $A026 2F/A001: AD 75 7D LDA $7D75 2F/A004: 29 E0 AND #$E0 2F/A006: C9 A0 CMP #$A0 2F/A008: D0 05 BNE $A00F 2F/A00A: A9 08 LDA #$08 2F/A00C: 4C 26 A0 JMP $A026 2F/A00F: AD 6F 7D LDA $7D6F 2F/A012: C9 02 CMP #$02 2F/A014: D0 0E BNE $A024 2F/A016: AD 75 7D LDA $7D75 2F/A019: 29 C0 AND #$C0 2F/A01B: C9 40 CMP #$40 2F/A01D: D0 05 BNE $A024 2F/A01F: A9 05 LDA #$05 2F/A021: 4C 26 A0 JMP $A026 2F/A024: A9 06 LDA #$06 2F/A026: 8D 7B 7D STA $7D7B 2F/A029: 60 RTS ; [ load monster set ] 2F/A02A: AD ED 7C LDA $7CED ; battle index 2F/A02D: 85 7E STA $7E 2F/A02F: AD EE 7C LDA $7CEE 2F/A032: 85 7F STA $7F 2F/A034: 06 7E ASL $7E 2F/A036: 26 7F ROL $7F 2F/A038: A5 7E LDA $7E 2F/A03A: 18 CLC 2F/A03B: 69 00 ADC #$00 ; 2E/8000 2F/A03D: 85 7E STA $7E 2F/A03F: A5 7F LDA $7F 2F/A041: 69 80 ADC #$80 2F/A043: 85 7F STA $7F 2F/A045: A0 00 LDY #$00 2F/A047: B1 7E LDA ($7E),Y ; load battle properties 2F/A049: 8D 67 7D STA $7D67 ; monster set 2F/A04C: C8 INY 2F/A04D: B1 7E LDA ($7E),Y 2F/A04F: 8D 68 7D STA $7D68 ; monster count id 2F/A052: AD 67 7D LDA $7D67 2F/A055: A2 06 LDX #$06 2F/A057: 20 EA F8 JSR $F8EA ; multiply 2F/A05A: 18 CLC 2F/A05B: 69 00 ADC #$00 ; 2E/8400 2F/A05D: 85 7E STA $7E 2F/A05F: 8A TXA 2F/A060: 69 84 ADC #$84 2F/A062: 85 7F STA $7F 2F/A064: A0 00 LDY #$00 2F/A066: B1 7E LDA ($7E),Y ; load monster palette/id (6 bytes) 2F/A068: 99 69 7D STA $7D69,Y 2F/A06B: C8 INY 2F/A06C: C0 06 CPY #$06 2F/A06E: D0 F6 BNE $A066 2F/A070: A2 00 LDX #$00 2F/A072: A0 00 LDY #$00 2F/A074: BD 6B 7D LDA $7D6B,X ; monster id 2F/A077: 20 E7 A0 JSR $A0E7 ; get monster attribute id 2F/A07A: A5 7E LDA $7E 2F/A07C: 99 73 7D STA $7D73,Y 2F/A07F: A5 7F LDA $7F 2F/A081: 99 74 7D STA $7D74,Y 2F/A084: C8 INY ; next slot 2F/A085: C8 INY 2F/A086: E8 INX 2F/A087: E0 04 CPX #$04 2F/A089: D0 E9 BNE $A074 2F/A08B: AD 68 7D LDA $7D68 ; monster count id 2F/A08E: 29 3F AND #$3F 2F/A090: 85 7E STA $7E 2F/A092: A9 00 LDA #$00 2F/A094: 85 7F STA $7F 2F/A096: 06 7E ASL $7E 2F/A098: 26 7F ROL $7F 2F/A09A: 06 7E ASL $7E 2F/A09C: 26 7F ROL $7F 2F/A09E: A5 7E LDA $7E 2F/A0A0: 18 CLC 2F/A0A1: 69 00 ADC #$00 ; 2E/8A00 2F/A0A3: 85 7E STA $7E 2F/A0A5: A5 7F LDA $7F 2F/A0A7: 69 8A ADC #$8A 2F/A0A9: 85 7F STA $7F 2F/A0AB: A0 00 LDY #$00 2F/A0AD: B1 7E LDA ($7E),Y ; load monster count 2F/A0AF: 99 6F 7D STA $7D6F,Y 2F/A0B2: C8 INY 2F/A0B3: C0 04 CPY #$04 2F/A0B5: D0 F6 BNE $A0AD 2F/A0B7: A2 00 LDX #$00 2F/A0B9: BD 6F 7D LDA $7D6F,X 2F/A0BC: 20 C8 A0 JSR $A0C8 ; randomize monster count 2F/A0BF: 9D 6F 7D STA $7D6F,X 2F/A0C2: E8 INX 2F/A0C3: E0 04 CPX #$04 2F/A0C5: D0 F2 BNE $A0B9 2F/A0C7: 60 RTS ; [ randomize monster count ] 2F/A0C8: 85 7E STA $7E 2F/A0CA: 8A TXA 2F/A0CB: 48 PHA 2F/A0CC: A9 00 LDA #$00 ; rng 0 2F/A0CE: 85 21 STA $21 2F/A0D0: A5 7E LDA $7E 2F/A0D2: 29 F0 AND #$F0 ; min count (hi nybble) 2F/A0D4: 4A LSR 2F/A0D5: 4A LSR 2F/A0D6: 4A LSR 2F/A0D7: 4A LSR 2F/A0D8: AA TAX 2F/A0D9: A5 7E LDA $7E ; max count (lo nybble) 2F/A0DB: 29 0F AND #$0F 2F/A0DD: 20 EF FB JSR $FBEF ; random (X..A) 2F/A0E0: 85 7E STA $7E 2F/A0E2: 68 PLA 2F/A0E3: AA TAX 2F/A0E4: A5 7E LDA $7E 2F/A0E6: 60 RTS ; [ get monster attribute id ] ; A: monster id 2F/A0E7: 85 7E STA $7E 2F/A0E9: 8A TXA 2F/A0EA: 48 PHA 2F/A0EB: 98 TYA 2F/A0EC: 48 PHA 2F/A0ED: A5 7E LDA $7E 2F/A0EF: C9 FF CMP #$FF 2F/A0F1: D0 09 BNE $A0FC 2F/A0F3: A9 FF LDA #$FF ; no monster 2F/A0F5: 85 7E STA $7E 2F/A0F7: 85 7F STA $7F 2F/A0F9: 4C 45 A1 JMP $A145 2F/A0FC: 85 81 STA $81 2F/A0FE: AA TAX 2F/A0FF: BD 00 8B LDA $8B00,X ; monster graphics properties 2F/A102: 85 7E STA $7E 2F/A104: 29 1F AND #$1F ; graphics id 2F/A106: 85 80 STA $80 2F/A108: A5 7E LDA $7E 2F/A10A: 29 E0 AND #$E0 ; graphics size 2F/A10C: C9 20 CMP #$20 2F/A10E: D0 05 BNE $A115 2F/A110: A9 10 LDA #$10 ; offset for 4x6 2F/A112: 4C 20 A1 JMP $A120 2F/A115: C9 60 CMP #$60 2F/A117: D0 05 BNE $A11E 2F/A119: A9 18 LDA #$18 ; offset for 6x6 in bank 24/25 2F/A11B: 4C 20 A1 JMP $A120 2F/A11E: A9 00 LDA #$00 2F/A120: 18 CLC 2F/A121: 65 80 ADC $80 2F/A123: 85 7F STA $7F 2F/A125: A5 81 LDA $81 2F/A127: 29 07 AND #$07 2F/A129: 85 80 STA $80 2F/A12B: A5 81 LDA $81 2F/A12D: 4A LSR 2F/A12E: 4A LSR 2F/A12F: 4A LSR 2F/A130: A8 TAY 2F/A131: A6 80 LDX $80 2F/A133: A9 00 LDA #$00 2F/A135: 85 80 STA $80 2F/A137: E8 INX 2F/A138: B9 00 8F LDA $8F00,Y ; set msb for bosses 2F/A13B: 0A ASL 2F/A13C: 66 80 ROR $80 2F/A13E: CA DEX 2F/A13F: D0 FA BNE $A13B 2F/A141: 29 80 AND #$80 ; this does nothing ... 2F/A143: 05 7F ORA $7F 2F/A145: 68 PLA 2F/A146: A8 TAY 2F/A147: 68 PLA 2F/A148: AA TAX 2F/A149: 60 RTS ; [ init monster/bg graphics ] 2F/A14A: 20 7F A3 JSR $A37F ; init monster graphics 2F/A14D: 20 62 A3 JSR $A362 ; clear monster tilemap 2F/A150: 20 47 A2 JSR $A247 ; update monster positions 2F/A153: 20 B1 A6 JSR $A6B1 ; update monster attribute table 2F/A156: 20 34 AF JSR $AF34 ; copy attribute table to ppu 2F/A159: 20 F9 A1 JSR $A1F9 ; copy battle bg tilemap to ppu 2F/A15C: 4C F4 A1 JMP $A1F4 ; copy monster tilemap to ppu ; misc. battle graphics data 2F/A15F: 7900 20A0 1C 00 ; 00: monster tilemap ($7900) 2F/A165: B700 1700 90 06 ; 01: menu window & text (0D/B700) 2F/A16B: B000 1490 08 15 ; 02: weapon (2B/B000) 2F/A171: B000 1510 08 15 ; 03: hit (2B/B000) 2F/A177: 01E0 1390 06 14 ; 04: character being hit (28/01E0) 2F/A17D: 00E0 1390 10 14 ; 05: character animation (28/00E0) 2F/A183: B490 1610 0F 06 ; 06: diagonal gradient, miss, damage numerals (0D/B490) 2F/A189: B4E0 1390 0A 06 ; 07: target numerals (0D/B4E0) 2F/A18F: B440 1590 04 06 ; 08: hand cursor (0D/B440) 2F/A195: B600 1600 10 06 ; 09: item icons (0D/B600) 2F/A19B: B9C0 1490 06 14 ; 0A: dragoon ??? (29/B9C0) 2F/A1A1: BF80 1490 08 14 ; 0B: toad (29/BF80) 2F/A1A7: BF00 1490 08 14 ; 0C: mini (29/BF00) 2F/A1AD: B1D0 15A0 04 06 ; 0D: right arrow (0D/B1D0) ; [ load battle graphics ] 2F/A1B3: A2 00 LDX #$00 2F/A1B5: 86 7E STX $7E 2F/A1B7: 86 7F STX $7F ; fallthrough ; [ load battle graphics ] ; +$7E: offset 2F/A1B9: A2 06 LDX #$06 2F/A1BB: 20 EA F8 JSR $F8EA ; multiply 2F/A1BE: 18 CLC 2F/A1BF: 69 5F ADC #$5F ; 2F/A15F 2F/A1C1: 85 18 STA $18 2F/A1C3: 8A TXA 2F/A1C4: 69 A1 ADC #$A1 2F/A1C6: 85 19 STA $19 2F/A1C8: 98 TYA 2F/A1C9: 48 PHA 2F/A1CA: A0 00 LDY #$00 2F/A1CC: B1 18 LDA ($18),Y ; source address 2F/A1CE: 18 CLC 2F/A1CF: 65 7E ADC $7E 2F/A1D1: 85 7E STA $7E 2F/A1D3: C8 INY 2F/A1D4: B1 18 LDA ($18),Y 2F/A1D6: 65 7F ADC $7F 2F/A1D8: 85 7F STA $7F 2F/A1DA: C8 INY 2F/A1DB: B1 18 LDA ($18),Y ; ppu address 2F/A1DD: 85 80 STA $80 2F/A1DF: C8 INY 2F/A1E0: B1 18 LDA ($18),Y 2F/A1E2: 85 81 STA $81 2F/A1E4: C8 INY 2F/A1E5: B1 18 LDA ($18),Y ; tile count 2F/A1E7: 85 82 STA $82 2F/A1E9: C8 INY 2F/A1EA: B1 18 LDA ($18),Y ; source bank 2F/A1EC: 85 84 STA $84 2F/A1EE: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 2F/A1F1: 68 PLA 2F/A1F2: A8 TAY 2F/A1F3: 60 RTS ; [ copy monster tilemap to ppu ] 2F/A1F4: A9 00 LDA #$00 ; monster tilemap 2F/A1F6: 4C B3 A1 JMP $A1B3 ; load battle graphics ; [ copy battle bg tilemap to ppu ] 2F/A1F9: 20 8A A5 JSR $A58A ; load battle bg tilemap 2F/A1FC: 2C 02 20 BIT $2002 2F/A1FF: A9 20 LDA #$20 2F/A201: A2 20 LDX #$20 2F/A203: 20 E0 F8 JSR $F8E0 ; set ppu address 2F/A206: 20 10 A2 JSR $A210 ; copy tilemap row to ppu 2F/A209: A9 24 LDA #$24 2F/A20B: A2 20 LDX #$20 2F/A20D: 20 E0 F8 JSR $F8E0 ; set ppu address ; fallthrough ; [ copy tilemap row to ppu ] 2F/A210: A2 00 LDX #$00 2F/A212: BD 00 73 LDA $7300,X 2F/A215: 8D 07 20 STA $2007 2F/A218: E8 INX 2F/A219: E0 80 CPX #$80 2F/A21B: D0 F5 BNE $A212 2F/A21D: 60 RTS ; [ load boss tilemap ] 2F/A21E: AD A7 7D LDA $7DA7 ; monster 1 type (boss id) 2F/A221: C9 FF CMP #$FF 2F/A223: F0 1F BEQ $A244 2F/A225: A9 22 LDA #$22 ; $7922 2F/A227: 85 80 STA $80 2F/A229: A9 79 LDA #$79 2F/A22B: 85 81 STA $81 2F/A22D: AD 73 7D LDA $7D73 2F/A230: 29 1F AND #$1F 2F/A232: A2 D8 LDX #$D8 2F/A234: 20 EA F8 JSR $F8EA ; multiply 2F/A237: 18 CLC 2F/A238: 69 00 ADC #$00 ; 2A/8000 2F/A23A: 85 7E STA $7E 2F/A23C: 8A TXA 2F/A23D: 69 80 ADC #$80 2F/A23F: 85 7F STA $7F 2F/A241: 20 0A F9 JSR $F90A 2F/A244: 4C 9C A2 JMP $A29C ; [ update monster positions ] 2F/A247: AD 7B 7D LDA $7D7B ; monster tilemap id 2F/A24A: C9 09 CMP #$09 2F/A24C: D0 03 BNE $A251 ; branch if not a boss tilemap 2F/A24E: 4C 1E A2 JMP $A21E 2F/A251: 0A ASL 2F/A252: A8 TAY 2F/A253: B9 E6 A5 LDA $A5E6,Y ; pointer to monster position data 2F/A256: 85 84 STA $84 2F/A258: B9 E7 A5 LDA $A5E7,Y 2F/A25B: 85 85 STA $85 2F/A25D: A2 00 LDX #$00 2F/A25F: A0 00 LDY #$00 2F/A261: B1 84 LDA ($84),Y 2F/A263: C9 FF CMP #$FF 2F/A265: F0 32 BEQ $A299 2F/A267: BD A7 7D LDA $7DA7,X ; monster type 2F/A26A: C9 FF CMP #$FF 2F/A26C: F0 19 BEQ $A287 2F/A26E: A8 TAY 2F/A26F: B9 D0 A2 LDA $A2D0,Y 2F/A272: 85 91 STA $91 2F/A274: A0 00 LDY #$00 2F/A276: B1 84 LDA ($84),Y ; x position 2F/A278: 85 8C STA $8C 2F/A27A: C8 INY 2F/A27B: B1 84 LDA ($84),Y ; y position 2F/A27D: 85 8E STA $8E 2F/A27F: C8 INY 2F/A280: B1 84 LDA ($84),Y ; size id 2F/A282: 85 90 STA $90 2F/A284: 20 D4 A2 JSR $A2D4 ; load monster position 2F/A287: A5 84 LDA $84 2F/A289: 18 CLC 2F/A28A: 69 03 ADC #$03 2F/A28C: 85 84 STA $84 2F/A28E: A5 85 LDA $85 2F/A290: 69 00 ADC #$00 2F/A292: 85 85 STA $85 2F/A294: E8 INX 2F/A295: E0 08 CPX #$08 2F/A297: D0 C6 BNE $A25F 2F/A299: 4C 9C A2 JMP $A29C ; [ horizontally flip monster tilemap ] 2F/A29C: 20 48 AF JSR $AF48 ; check back attack 2F/A29F: D0 2E BNE $A2CF 2F/A2A1: A9 00 LDA #$00 2F/A2A3: 85 7E STA $7E 2F/A2A5: A9 79 LDA #$79 2F/A2A7: 85 7F STA $7F 2F/A2A9: A9 0E LDA #$0E 2F/A2AB: 85 80 STA $80 2F/A2AD: A0 00 LDY #$00 2F/A2AF: B1 7E LDA ($7E),Y 2F/A2B1: 99 00 73 STA $7300,Y 2F/A2B4: C8 INY 2F/A2B5: C0 20 CPY #$20 2F/A2B7: D0 F6 BNE $A2AF 2F/A2B9: A0 00 LDY #$00 2F/A2BB: A2 20 LDX #$20 2F/A2BD: BD FF 72 LDA $72FF,X 2F/A2C0: 91 7E STA ($7E),Y 2F/A2C2: C8 INY 2F/A2C3: CA DEX 2F/A2C4: D0 F7 BNE $A2BD 2F/A2C6: A9 20 LDA #$20 2F/A2C8: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/A2CB: C6 80 DEC $80 2F/A2CD: D0 DE BNE $A2AD 2F/A2CF: 60 RTS ; first tile id for each monster type 2F/A2D0: 70 B8 DC 94 ; [ load monster position ] ; $8C: x position ; $8E: y position ; $90: size id ; $91: first tile id (from 2F/A2D0) 2F/A2D4: 8A TXA 2F/A2D5: 48 PHA 2F/A2D6: A5 8E LDA $8E 2F/A2D8: 38 SEC 2F/A2D9: E9 05 SBC #$05 2F/A2DB: A2 20 LDX #$20 2F/A2DD: 20 EA F8 JSR $F8EA ; multiply 2F/A2E0: 18 CLC 2F/A2E1: 65 8C ADC $8C 2F/A2E3: 85 7E STA $7E 2F/A2E5: 8A TXA 2F/A2E6: 69 00 ADC #$00 2F/A2E8: 85 7F STA $7F 2F/A2EA: A5 7E LDA $7E 2F/A2EC: 18 CLC 2F/A2ED: 69 00 ADC #$00 2F/A2EF: 85 7E STA $7E ; +$7E = x + (y - 5) * 32 + $7900 2F/A2F1: A5 7F LDA $7F 2F/A2F3: 69 79 ADC #$79 2F/A2F5: 85 7F STA $7F 2F/A2F7: A5 90 LDA $90 2F/A2F9: 0A ASL 2F/A2FA: A8 TAY 2F/A2FB: B9 CC A4 LDA $A4CC,Y ; monster width 2F/A2FE: 85 80 STA $80 2F/A300: B9 CD A4 LDA $A4CD,Y ; monster height 2F/A303: 85 81 STA $81 2F/A305: A6 80 LDX $80 2F/A307: A0 00 LDY #$00 2F/A309: A5 91 LDA $91 2F/A30B: 91 7E STA ($7E),Y 2F/A30D: E6 91 INC $91 2F/A30F: C8 INY 2F/A310: CA DEX 2F/A311: D0 F6 BNE $A309 2F/A313: A9 20 LDA #$20 2F/A315: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/A318: C6 81 DEC $81 2F/A31A: D0 E9 BNE $A305 2F/A31C: 68 PLA 2F/A31D: AA TAX 2F/A31E: 60 RTS ; [ init monster slots ] 2F/A31F: A2 08 LDX #$08 2F/A321: A9 FF LDA #$FF 2F/A323: 9D A6 7D STA $7DA6,X ; reset monster types 2F/A326: 9D AE 7D STA $7DAE,X 2F/A329: CA DEX 2F/A32A: D0 F7 BNE $A323 2F/A32C: AD 7B 7D LDA $7D7B ; monster tilemap id 2F/A32F: 0A ASL 2F/A330: 0A ASL 2F/A331: 18 CLC 2F/A332: 69 DA ADC #$DA ; 2F/A4DA (monster types in tilemap) 2F/A334: 85 7E STA $7E 2F/A336: A9 00 LDA #$00 2F/A338: 69 A4 ADC #$A4 2F/A33A: 85 7F STA $7F 2F/A33C: A0 00 LDY #$00 2F/A33E: B1 7E LDA ($7E),Y 2F/A340: C9 FF CMP #$FF 2F/A342: F0 02 BEQ $A346 ; branch if monster is not in tilemap 2F/A344: 85 8C STA $8C 2F/A346: B9 6F 7D LDA $7D6F,Y ; monster count 2F/A349: F0 11 BEQ $A35C ; skip if zero monster count 2F/A34B: 85 82 STA $82 2F/A34D: A6 8C LDX $8C 2F/A34F: 98 TYA 2F/A350: 9D A7 7D STA $7DA7,X ; monster type 2F/A353: 9D AF 7D STA $7DAF,X 2F/A356: E6 8C INC $8C 2F/A358: C6 82 DEC $82 ; next monster of this type 2F/A35A: D0 F1 BNE $A34D 2F/A35C: C8 INY 2F/A35D: C0 04 CPY #$04 2F/A35F: D0 DD BNE $A33E 2F/A361: 60 RTS ; [ clear monster tilemap ] 2F/A362: A9 00 LDA #$00 2F/A364: 85 7E STA $7E 2F/A366: A9 79 LDA #$79 2F/A368: 85 7F STA $7F 2F/A36A: A2 0E LDX #$0E 2F/A36C: A0 00 LDY #$00 2F/A36E: A9 00 LDA #$00 2F/A370: 91 7E STA ($7E),Y 2F/A372: C8 INY 2F/A373: C0 20 CPY #$20 2F/A375: D0 F9 BNE $A370 2F/A377: 98 TYA 2F/A378: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/A37B: CA DEX 2F/A37C: D0 EE BNE $A36C 2F/A37E: 60 RTS ; [ init monster graphics ] ; all monsters 2F/A37F: A2 00 LDX #$00 2F/A381: 86 86 STX $86 2F/A383: 20 8C A3 JSR $A38C 2F/A386: E8 INX 2F/A387: E0 04 CPX #$04 2F/A389: D0 F8 BNE $A383 2F/A38B: 60 RTS ; [ init monster graphics ] ; single monster 2F/A38C: 8A TXA 2F/A38D: 48 PHA 2F/A38E: BD 6B 7D LDA $7D6B,X ; monster id 2F/A391: C9 FF CMP #$FF 2F/A393: F0 13 BEQ $A3A8 2F/A395: 8A TXA 2F/A396: 0A ASL 2F/A397: AA TAX 2F/A398: AD 7B 7D LDA $7D7B 2F/A39B: C9 09 CMP #$09 2F/A39D: D0 06 BNE $A3A5 ; branch if not a boss 2F/A39F: 20 AB A3 JSR $A3AB ; load boss graphics 2F/A3A2: 4C A8 A3 JMP $A3A8 2F/A3A5: 20 2E A4 JSR $A42E ; load monster graphics 2F/A3A8: 68 PLA 2F/A3A9: AA TAX 2F/A3AA: 60 RTS ; [ load boss graphics ] 2F/A3AB: AD 68 7D LDA $7D68 2F/A3AE: 0A ASL 2F/A3AF: 30 06 BMI $A3B7 ; return if a boss 2F/A3B1: 20 B8 A3 JSR $A3B8 ; get boss graphics pointer 2F/A3B4: 20 0B A4 JSR $A40B ; copy monster graphics to ppu 2F/A3B7: 60 RTS ; [ get boss graphics pointer ] ; bbs---tt tttttttt format of pointers at 2F/9068 ; b: bank id ; s: load summon graphics if set ; t: tile offset (16 bytes per tile) 2F/A3B8: 8A TXA 2F/A3B9: D0 4F BNE $A40A 2F/A3BB: AD 73 7D LDA $7D73 2F/A3BE: 29 1F AND #$1F 2F/A3C0: 0A ASL 2F/A3C1: A8 TAY 2F/A3C2: B9 69 90 LDA $9069,Y 2F/A3C5: 48 PHA 2F/A3C6: 29 03 AND #$03 2F/A3C8: 85 7F STA $7F 2F/A3CA: B9 68 90 LDA $9068,Y 2F/A3CD: 85 7E STA $7E 2F/A3CF: 06 7E ASL $7E ; asl4 2F/A3D1: 26 7F ROL $7F 2F/A3D3: 06 7E ASL $7E 2F/A3D5: 26 7F ROL $7F 2F/A3D7: 06 7E ASL $7E 2F/A3D9: 26 7F ROL $7F 2F/A3DB: 06 7E ASL $7E 2F/A3DD: 26 7F ROL $7F 2F/A3DF: A5 7E LDA $7E 2F/A3E1: 18 CLC 2F/A3E2: 69 00 ADC #$00 2F/A3E4: 85 7E STA $7E 2F/A3E6: A5 7F LDA $7F 2F/A3E8: 69 80 ADC #$80 2F/A3EA: 85 7F STA $7F 2F/A3EC: 68 PLA 2F/A3ED: 2A ROL 2F/A3EE: 2A ROL 2F/A3EF: 2A ROL 2F/A3F0: 90 05 BCC $A3F7 2F/A3F2: A9 06 LDA #$06 ; bank 0C (summon graphics ???) 2F/A3F4: 4C FC A3 JMP $A3FC 2F/A3F7: 29 03 AND #$03 2F/A3F9: 18 CLC 2F/A3FA: 69 10 ADC #$10 ; bank 20 (monster graphics) 2F/A3FC: 85 84 STA $84 2F/A3FE: A9 00 LDA #$00 2F/A400: 85 80 STA $80 2F/A402: A9 07 LDA #$07 2F/A404: 85 81 STA $81 2F/A406: A9 90 LDA #$90 2F/A408: 85 82 STA $82 2F/A40A: 60 RTS ; [ copy monster graphics to ppu ] ; if loading a summon as a boss, flip horizontally to face the characters 2F/A40B: B9 69 90 LDA $9069,Y ; 2E/9069 2F/A40E: 29 10 AND #$10 2F/A410: D0 03 BNE $A415 ; branch if summon graphics 2F/A412: 4C 42 F9 JMP $F942 ; copy graphics to ppu (flip if back attack) 2F/A415: AD C3 78 LDA $78C3 2F/A418: 48 PHA 2F/A419: C9 88 CMP #$88 2F/A41B: F0 04 BEQ $A421 ; branch if back attack 2F/A41D: A9 88 LDA #$88 2F/A41F: D0 02 BNE $A423 2F/A421: A9 00 LDA #$00 2F/A423: 8D C3 78 STA $78C3 2F/A426: 20 42 F9 JSR $F942 ; copy graphics to ppu (flip if back attack) 2F/A429: 68 PLA ; restore battle type 2F/A42A: 8D C3 78 STA $78C3 2F/A42D: 60 RTS ; [ load monster graphics ] 2F/A42E: BD 73 7D LDA $7D73,X 2F/A431: 85 88 STA $88 2F/A433: 29 E0 AND #$E0 ; monster graphics size 2F/A435: 4A LSR 2F/A436: 4A LSR 2F/A437: 4A LSR 2F/A438: A8 TAY 2F/A439: B9 B4 A4 LDA $A4B4,Y ; graphics address 2F/A43C: 85 8A STA $8A 2F/A43E: B9 B5 A4 LDA $A4B5,Y 2F/A441: 85 8B STA $8B 2F/A443: B9 B6 A4 LDA $A4B6,Y ; graphics bank 2F/A446: 85 84 STA $84 2F/A448: B9 B7 A4 LDA $A4B7,Y ; graphics size 2F/A44B: 0A ASL 2F/A44C: A8 TAY 2F/A44D: B9 CC A4 LDA $A4CC,Y ; monster width 2F/A450: BE CD A4 LDX $A4CD,Y ; monster height 2F/A453: 20 EA F8 JSR $F8EA ; multiply 2F/A456: 85 82 STA $82 2F/A458: 85 18 STA $18 2F/A45A: 86 19 STX $19 2F/A45C: 06 18 ASL $18 2F/A45E: 26 19 ROL $19 2F/A460: 06 18 ASL $18 2F/A462: 26 19 ROL $19 2F/A464: 06 18 ASL $18 2F/A466: 26 19 ROL $19 2F/A468: 06 18 ASL $18 ; +$18: number of bytes to copy 2F/A46A: 26 19 ROL $19 2F/A46C: A5 88 LDA $88 ; graphics id (within a given bank) 2F/A46E: 29 1F AND #$1F 2F/A470: 85 1A STA $1A 2F/A472: A9 00 LDA #$00 2F/A474: 85 1B STA $1B 2F/A476: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 2F/A479: A5 1C LDA $1C 2F/A47B: 18 CLC 2F/A47C: 65 8A ADC $8A ; add graphics address 2F/A47E: 85 7E STA $7E 2F/A480: A5 1D LDA $1D 2F/A482: 65 8B ADC $8B 2F/A484: 85 7F STA $7F ; +$7E: monster graphics address 2F/A486: A5 86 LDA $86 2F/A488: 0A ASL 2F/A489: AA TAX 2F/A48A: E6 86 INC $86 2F/A48C: A5 88 LDA $88 2F/A48E: 29 E0 AND #$E0 2F/A490: D0 05 BNE $A497 2F/A492: 8A TXA 2F/A493: 18 CLC 2F/A494: 69 08 ADC #$08 2F/A496: AA TAX 2F/A497: BD A4 A4 LDA $A4A4,X ; ppu address 2F/A49A: 85 80 STA $80 2F/A49C: BD A5 A4 LDA $A4A5,X 2F/A49F: 85 81 STA $81 2F/A4A1: 4C 42 F9 JMP $F942 ; copy graphics to ppu (flip if back attack) ; ppu addresses for monster graphics 2F/A4A4: 0700 0B80 0DC0 0940 ; for all other sizes 2F/A4AC: 0780 0C00 0E40 09C0 ; for 4x4 monsters (shift to bottom of 4x6 slot) ; pointers to monster graphics banks ; +$00: address ; $02: bank (multiply by 2) ; $03: size 2F/A4B4: 8000 10 00 ; 20/8000-20/8FFF, 4x4 (16 * 256 bytes) 2F/A4B8: 9000 10 01 ; 20/9000-21/B3FF, 4x6 (24 * 384 bytes) 2F/A4BC: 8000 11 02 ; 22/8000-23/AFFF, 6x6 (24 * 512 bytes) 2F/A4C0: 8000 12 03 ; 24/8000-25/AFFF, 6x6 (24 * 512 bytes) 2F/A4C4: 8000 13 04 ; 26/8000-26/91FF, 6x12 (4 * 1152 bytes) 2F/A4C8: 9200 13 05 ; 26/9200-27/A3FF, 12x6 (4 * 1152 bytes) ; monster sizes 2F/A4CC: 04 04 2F/A4CE: 04 06 2F/A4D0: 06 06 2F/A4D2: 06 06 2F/A4D4: 06 0C 2F/A4D6: 0C 06 2F/A4D8: 12 0C ; monster types in tilemap (10 * 4 bytes) 2F/A4DA: 00 FF FF FF 2F/A4DE: 00 01 02 FF 2F/A4E2: 00 01 FF FF 2F/A4E6: 00 FF FF FF 2F/A4EA: 00 01 FF FF 2F/A4EE: 00 02 FF FF 2F/A4F2: 00 FF FF FF 2F/A4F6: 00 02 FF FF 2F/A4FA: 00 01 FF FF 2F/A4FE: 00 FF FF FF ; tilemap id for each battle bg 2F/A502: 00 00 00 00 00 00 00 00 00 00 00 00 00 01 00 01 2F/A512: 00 02 00 01 02 00 00 02 ; tile ids for battle bg tilemaps (4 * 4 bytes) 2F/A51A: 62 63 66 67 2F/A51E: 60 61 64 65 2F/A522: 6A 6B 6E 6F 2F/A526: 68 69 6C 6D ; battle bg tilemaps (3 * 32 bytes) 2F/A52A: 00 01 01 00 00 01 01 00 00 01 01 00 00 01 01 00 2F/A53A: 02 03 03 02 02 03 03 02 02 03 03 02 02 03 03 02 2F/A54A: 00 01 00 01 00 01 00 01 00 01 00 01 00 01 00 01 2F/A55A: 02 03 02 03 02 03 02 03 02 03 02 03 02 03 02 03 2F/A56A: 01 01 00 01 01 01 00 01 01 00 01 01 01 00 01 01 2F/A57A: 03 03 02 03 03 03 02 03 03 02 03 03 03 02 03 03 ; [ load battle bg tilemap ] 2F/A58A: AC EF 7C LDY $7CEF ; battle bg id 2F/A58D: B9 02 A5 LDA $A502,Y 2F/A590: A2 20 LDX #$20 2F/A592: 20 EA F8 JSR $F8EA ; multiply 2F/A595: 18 CLC 2F/A596: 69 2A ADC #$2A ; 2F/A52A 2F/A598: 85 7E STA $7E 2F/A59A: 8A TXA 2F/A59B: 69 A5 ADC #$A5 2F/A59D: 85 7F STA $7F 2F/A59F: A0 00 LDY #$00 2F/A5A1: 84 80 STY $80 2F/A5A3: A9 10 LDA #$10 2F/A5A5: 85 82 STA $82 2F/A5A7: 20 B2 A5 JSR $A5B2 2F/A5AA: A9 40 LDA #$40 2F/A5AC: 85 80 STA $80 2F/A5AE: A9 20 LDA #$20 2F/A5B0: 85 82 STA $82 ; fallthrough ; [ load battle bg tilemap row ] 2F/A5B2: B1 7E LDA ($7E),Y 2F/A5B4: 0A ASL 2F/A5B5: 0A ASL 2F/A5B6: 20 BF A5 JSR $A5BF 2F/A5B9: C8 INY 2F/A5BA: C4 82 CPY $82 2F/A5BC: D0 F4 BNE $A5B2 2F/A5BE: 60 RTS ; [ load battle bg tile ] 2F/A5BF: 85 81 STA $81 2F/A5C1: 84 83 STY $83 2F/A5C3: A4 81 LDY $81 2F/A5C5: A6 80 LDX $80 2F/A5C7: B9 1A A5 LDA $A51A,Y 2F/A5CA: 9D 00 73 STA $7300,X 2F/A5CD: B9 1B A5 LDA $A51B,Y 2F/A5D0: 9D 01 73 STA $7301,X 2F/A5D3: B9 1C A5 LDA $A51C,Y 2F/A5D6: 9D 20 73 STA $7320,X 2F/A5D9: B9 1D A5 LDA $A51D,Y 2F/A5DC: 9D 21 73 STA $7321,X 2F/A5DF: E6 80 INC $80 2F/A5E1: E6 80 INC $80 2F/A5E3: A4 83 LDY $83 2F/A5E5: 60 RTS ; pointers to monster position data 2F/A5E6: A5FA A613 A62C A642 A655 A665 A672 A67C 2F/A5F6: A689 A693 ; monster position data ; $00: x position ; $01: y position ; $02: size id (see 2F/A4CC) ; 0: (8) 4x6 2F/A5FA: 04 06 01 2F/A5FD: 04 0C 01 2F/A600: 08 06 01 2F/A603: 08 0C 01 2F/A606: 0C 06 01 2F/A609: 0C 0C 01 2F/A60C: 10 06 01 2F/A60F: 10 0C 01 2F/A612: FF ; 1: (2) 6x6, (6) 4x6 2F/A613: 02 06 02 2F/A616: 02 0C 02 2F/A619: 08 06 01 2F/A61C: 08 0C 01 2F/A61F: 0C 06 01 2F/A622: 0C 0C 01 2F/A625: 10 06 01 2F/A628: 10 0C 01 2F/A62B: FF ; 2: (1) 6x12, (6) 4x6 2F/A62C: 02 06 04 2F/A62F: 08 06 01 2F/A632: 08 0C 01 2F/A635: 0C 06 01 2F/A638: 0C 0C 01 2F/A63B: 10 06 01 2F/A63E: 10 0C 01 2F/A641: FF ; 3: (6) 6x6 2F/A642: 02 06 02 2F/A645: 02 0C 02 2F/A648: 08 06 02 2F/A64B: 08 0C 02 2F/A64E: 0E 06 02 2F/A651: 0E 0C 02 2F/A654: FF ; 4: (1) 6x12, (4) 6x6 2F/A655: 02 06 04 2F/A658: 08 06 02 2F/A65B: 08 0C 02 2F/A65E: 0E 06 02 2F/A661: 0E 0C 02 2F/A664: FF ; 5: (2) 6x12, (2) 6x6 2F/A665: 02 06 04 2F/A668: 08 06 04 2F/A66B: 0E 06 02 2F/A66E: 0E 0C 02 2F/A671: FF ; 6: (3) 6x12 2F/A672: 02 06 04 2F/A675: 08 06 04 2F/A678: 0E 06 04 2F/A67B: FF ; 7: (2) 12x6, (2) 6x6 2F/A67C: 02 06 05 2F/A67F: 02 0C 05 2F/A682: 0E 06 02 2F/A685: 0E 0C 02 2F/A688: FF ; 8: (1) 6x12, (2) 12x6 2F/A689: 02 06 04 2F/A68C: 08 06 05 2F/A68F: 08 0C 05 2F/A692: FF ; 9: (1) 18x12 2F/A693: 02 06 06 2F/A696: FF ; [ reset attribute tables ] 2F/A697: A9 FF LDA #$FF ; set all tiles to palette 3 2F/A699: A2 40 LDX #$40 2F/A69B: 9D 26 7D STA $7D26,X 2F/A69E: CA DEX 2F/A69F: D0 FA BNE $A69B 2F/A6A1: A2 08 LDX #$08 2F/A6A3: A9 AA LDA #$AA ; use palette 2 for the bg (top 3 rows) 2F/A6A5: 9D 26 7D STA $7D26,X 2F/A6A8: A9 FA LDA #$FA 2F/A6AA: 9D 2E 7D STA $7D2E,X 2F/A6AD: CA DEX 2F/A6AE: D0 F3 BNE $A6A3 2F/A6B0: 60 RTS ; [ update monster attribute table ] 2F/A6B1: 20 57 A8 JSR $A857 ; load monster attribute data 2F/A6B4: 20 97 A6 JSR $A697 ; reset attribute tables 2F/A6B7: AD 7B 7D LDA $7D7B 2F/A6BA: 0A ASL 2F/A6BB: A8 TAY 2F/A6BC: B9 E6 A5 LDA $A5E6,Y ; pointer to monster position data 2F/A6BF: 85 18 STA $18 2F/A6C1: B9 E7 A5 LDA $A5E7,Y 2F/A6C4: 85 19 STA $19 2F/A6C6: A2 00 LDX #$00 2F/A6C8: A0 00 LDY #$00 2F/A6CA: B1 18 LDA ($18),Y 2F/A6CC: C9 FF CMP #$FF 2F/A6CE: F0 1F BEQ $A6EF ; return if terminator 2F/A6D0: BD A7 7D LDA $7DA7,X 2F/A6D3: C9 FF CMP #$FF 2F/A6D5: F0 06 BEQ $A6DD 2F/A6D7: 20 F0 A6 JSR $A6F0 2F/A6DA: 20 8D A7 JSR $A78D ; set attribute table for monster 2F/A6DD: A5 18 LDA $18 ; next monster 2F/A6DF: 18 CLC 2F/A6E0: 69 03 ADC #$03 2F/A6E2: 85 18 STA $18 2F/A6E4: A5 19 LDA $19 2F/A6E6: 69 00 ADC #$00 2F/A6E8: 85 19 STA $19 2F/A6EA: E8 INX 2F/A6EB: E0 08 CPX #$08 2F/A6ED: D0 D9 BNE $A6C8 2F/A6EF: 60 RTS ; [ ] 2F/A6F0: 0A ASL 2F/A6F1: 0A ASL 2F/A6F2: 85 1A STA $1A 2F/A6F4: A9 00 LDA #$00 2F/A6F6: 85 1B STA $1B 2F/A6F8: 85 1D STA $1D 2F/A6FA: 60 RTS ; [ get monster palette ] 2F/A6FB: 8A TXA 2F/A6FC: 48 PHA 2F/A6FD: AD 8E 7E LDA $7E8E 2F/A700: F0 06 BEQ $A708 ; branch if not flashing 2F/A702: AD 90 7E LDA $7E90 ; use flash palette 2F/A705: 4C 31 A7 JMP $A731 2F/A708: A6 1A LDX $1A 2F/A70A: BD 17 7D LDA $7D17,X ; get palette from attribute data 2F/A70D: A6 1B LDX $1B 2F/A70F: E8 INX 2F/A710: 0A ASL 2F/A711: 26 7E ROL $7E 2F/A713: CA DEX 2F/A714: D0 FA BNE $A710 2F/A716: A5 1B LDA $1B 2F/A718: 18 CLC 2F/A719: 69 01 ADC #$01 2F/A71B: 85 7F STA $7F 2F/A71D: 29 07 AND #$07 2F/A71F: 85 1B STA $1B 2F/A721: A5 7F LDA $7F 2F/A723: 29 08 AND #$08 2F/A725: 4A LSR 2F/A726: 4A LSR 2F/A727: 4A LSR 2F/A728: 18 CLC 2F/A729: 65 1A ADC $1A 2F/A72B: 85 1A STA $1A 2F/A72D: A5 7E LDA $7E 2F/A72F: 29 01 AND #$01 2F/A731: 85 1D STA $1D 2F/A733: 68 PLA 2F/A734: AA TAX 2F/A735: A5 1D LDA $1D 2F/A737: 60 RTS ; [ set monster palettes ] 2F/A738: 20 97 A6 JSR $A697 ; reset attribute tables 2F/A73B: 20 B1 A6 JSR $A6B1 ; update monster attribute table 2F/A73E: A0 00 LDY #$00 2F/A740: AD 8F 7E LDA $7E8F ; monsters to flash 2F/A743: 0A ASL 2F/A744: 90 09 BCC $A74F ; branch if not included 2F/A746: 48 PHA 2F/A747: 98 TYA 2F/A748: 48 PHA 2F/A749: 20 5A A7 JSR $A75A 2F/A74C: 68 PLA 2F/A74D: A8 TAY 2F/A74E: 68 PLA 2F/A74F: C8 INY ; next monster 2F/A750: C0 08 CPY #$08 2F/A752: D0 EF BNE $A743 2F/A754: A9 00 LDA #$00 2F/A756: 8D 8E 7E STA $7E8E ; not flashing 2F/A759: 60 RTS ; [ set monster palette ] 2F/A75A: 48 PHA 2F/A75B: AD 7B 7D LDA $7D7B 2F/A75E: 0A ASL 2F/A75F: A8 TAY 2F/A760: B9 E6 A5 LDA $A5E6,Y ; pointer to monster position data 2F/A763: 85 7E STA $7E 2F/A765: B9 E7 A5 LDA $A5E7,Y 2F/A768: 85 7F STA $7F 2F/A76A: 68 PLA 2F/A76B: A8 TAY 2F/A76C: B9 A7 7D LDA $7DA7,Y ; monster type 2F/A76F: C9 FF CMP #$FF 2F/A771: D0 01 BNE $A774 ; branch if monster slot valid 2F/A773: 60 RTS 2F/A774: 98 TYA 2F/A775: A2 03 LDX #$03 2F/A777: 20 EA F8 JSR $F8EA ; multiply 2F/A77A: 18 CLC 2F/A77B: 65 7E ADC $7E 2F/A77D: 85 18 STA $18 2F/A77F: 8A TXA 2F/A780: 65 7F ADC $7F 2F/A782: 85 19 STA $19 2F/A784: EE 8E 7E INC $7E8E ; flashing 2F/A787: 20 F0 A6 JSR $A6F0 2F/A78A: 4C 8D A7 JMP $A78D ; set attribute table for monster ; [ set attribute table for monster ] 2F/A78D: A0 00 LDY #$00 2F/A78F: B1 18 LDA ($18),Y ; x position 2F/A791: 85 8C STA $8C 2F/A793: C8 INY 2F/A794: B1 18 LDA ($18),Y ; y position 2F/A796: 85 8E STA $8E 2F/A798: C8 INY 2F/A799: B1 18 LDA ($18),Y ; size id 2F/A79B: 85 90 STA $90 2F/A79D: 8A TXA 2F/A79E: 48 PHA 2F/A79F: A5 90 LDA $90 2F/A7A1: 0A ASL 2F/A7A2: A8 TAY 2F/A7A3: B9 CC A4 LDA $A4CC,Y ; monster width 2F/A7A6: 85 1E STA $1E 2F/A7A8: B9 CD A4 LDA $A4CD,Y ; monster height 2F/A7AB: 85 1F STA $1F 2F/A7AD: A2 00 LDX #$00 2F/A7AF: 20 FB A6 JSR $A6FB 2F/A7B2: 85 82 STA $82 2F/A7B4: 8A TXA 2F/A7B5: 18 CLC 2F/A7B6: 65 8C ADC $8C 2F/A7B8: 85 7E STA $7E 2F/A7BA: A5 8E LDA $8E 2F/A7BC: 85 80 STA $80 2F/A7BE: 20 D4 A7 JSR $A7D4 ; set palette id for one monster tile 2F/A7C1: E8 INX 2F/A7C2: E8 INX 2F/A7C3: E4 1E CPX $1E 2F/A7C5: D0 E8 BNE $A7AF 2F/A7C7: E6 8E INC $8E 2F/A7C9: E6 8E INC $8E 2F/A7CB: C6 1F DEC $1F 2F/A7CD: C6 1F DEC $1F 2F/A7CF: D0 DC BNE $A7AD 2F/A7D1: 68 PLA 2F/A7D2: AA TAX 2F/A7D3: 60 RTS ; [ set palette id for one monster tile ] 2F/A7D4: 8A TXA 2F/A7D5: 48 PHA 2F/A7D6: 98 TYA 2F/A7D7: 48 PHA 2F/A7D8: A5 7E LDA $7E 2F/A7DA: 4A LSR 2F/A7DB: 4A LSR 2F/A7DC: 85 7F STA $7F 2F/A7DE: A5 80 LDA $80 2F/A7E0: 29 FC AND #$FC 2F/A7E2: 0A ASL 2F/A7E3: 18 CLC 2F/A7E4: 65 7F ADC $7F 2F/A7E6: 85 84 STA $84 2F/A7E8: A5 7E LDA $7E 2F/A7EA: 29 02 AND #$02 2F/A7EC: 85 86 STA $86 2F/A7EE: A5 80 LDA $80 2F/A7F0: 29 02 AND #$02 2F/A7F2: 0A ASL 2F/A7F3: 18 CLC 2F/A7F4: 65 86 ADC $86 2F/A7F6: 4A LSR 2F/A7F7: 85 86 STA $86 2F/A7F9: A5 82 LDA $82 2F/A7FB: 29 03 AND #$03 2F/A7FD: A6 86 LDX $86 2F/A7FF: F0 05 BEQ $A806 2F/A801: 0A ASL 2F/A802: 0A ASL 2F/A803: CA DEX 2F/A804: D0 FB BNE $A801 2F/A806: 85 87 STA $87 2F/A808: A6 84 LDX $84 2F/A80A: BD 27 7D LDA $7D27,X 2F/A80D: A4 86 LDY $86 2F/A80F: 39 1C A8 AND $A81C,Y 2F/A812: 05 87 ORA $87 2F/A814: 9D 27 7D STA $7D27,X ; set palette id in attribute table 2F/A817: 68 PLA 2F/A818: A8 TAY 2F/A819: 68 PLA 2F/A81A: AA TAX 2F/A81B: 60 RTS ; attribute table mask 2F/A81C: FC F3 CF 3F ; [ load boss attribute data ] 2F/A820: AD 74 7D LDA $7D74 2F/A823: 29 3F AND #$3F 2F/A825: A2 07 LDX #$07 2F/A827: 20 EA F8 JSR $F8EA ; multiply 2F/A82A: 18 CLC 2F/A82B: 69 C0 ADC #$C0 ; 2E/8FC0 2F/A82D: 85 7E STA $7E 2F/A82F: 8A TXA 2F/A830: 69 8F ADC #$8F 2F/A832: 85 7F STA $7F 2F/A834: A0 00 LDY #$00 2F/A836: B1 7E LDA ($7E),Y 2F/A838: 99 17 7D STA $7D17,Y 2F/A83B: C8 INY 2F/A83C: C0 08 CPY #$08 2F/A83E: D0 F6 BNE $A836 2F/A840: AD 74 7D LDA $7D74 2F/A843: 29 80 AND #$80 2F/A845: F0 0F BEQ $A856 2F/A847: A0 00 LDY #$00 2F/A849: B9 17 7D LDA $7D17,Y 2F/A84C: 49 FF EOR #$FF 2F/A84E: 99 17 7D STA $7D17,Y 2F/A851: C8 INY 2F/A852: C0 08 CPY #$08 2F/A854: D0 F3 BNE $A849 2F/A856: 60 RTS ; [ load monster attribute data ] 2F/A857: AD 7B 7D LDA $7D7B 2F/A85A: C9 09 CMP #$09 2F/A85C: D0 03 BNE $A861 ; branch if not a boss tilemap 2F/A85E: 4C 20 A8 JMP $A820 2F/A861: A2 00 LDX #$00 2F/A863: 20 6C A8 JSR $A86C ; load attribute data for one monster 2F/A866: E8 INX 2F/A867: E0 04 CPX #$04 2F/A869: D0 F8 BNE $A863 2F/A86B: 60 RTS ; [ load attribute data for one monster ] 2F/A86C: 8A TXA 2F/A86D: 48 PHA 2F/A86E: 0A ASL 2F/A86F: A8 TAY 2F/A870: 0A ASL 2F/A871: 85 82 STA $82 2F/A873: BD 6B 7D LDA $7D6B,X ; monster id 2F/A876: C9 FF CMP #$FF 2F/A878: F0 5B BEQ $A8D5 2F/A87A: B9 73 7D LDA $7D73,Y 2F/A87D: 85 8C STA $8C 2F/A87F: B9 74 7D LDA $7D74,Y 2F/A882: 85 8D STA $8D 2F/A884: A5 8C LDA $8C 2F/A886: 29 E0 AND #$E0 ; monster graphics size 2F/A888: 4A LSR 2F/A889: 4A LSR 2F/A88A: 4A LSR 2F/A88B: 4A LSR 2F/A88C: A8 TAY 2F/A88D: B9 D8 A8 LDA $A8D8,Y 2F/A890: 85 7E STA $7E 2F/A892: B9 D9 A8 LDA $A8D9,Y 2F/A895: 85 7F STA $7F 2F/A897: 98 TYA 2F/A898: 4A LSR 2F/A899: A8 TAY 2F/A89A: A5 8D LDA $8D 2F/A89C: 29 3F AND #$3F ; attribute data id 2F/A89E: BE E4 A8 LDX $A8E4,Y 2F/A8A1: 20 EA F8 JSR $F8EA ; multiply 2F/A8A4: 18 CLC 2F/A8A5: 65 7E ADC $7E 2F/A8A7: 85 7E STA $7E 2F/A8A9: 8A TXA 2F/A8AA: 65 7F ADC $7F 2F/A8AC: 85 7F STA $7F 2F/A8AE: A0 00 LDY #$00 2F/A8B0: A6 82 LDX $82 2F/A8B2: B1 7E LDA ($7E),Y 2F/A8B4: 9D 17 7D STA $7D17,X 2F/A8B7: E8 INX 2F/A8B8: C8 INY 2F/A8B9: C0 04 CPY #$04 2F/A8BB: D0 F5 BNE $A8B2 2F/A8BD: A5 8D LDA $8D 2F/A8BF: 29 80 AND #$80 2F/A8C1: F0 12 BEQ $A8D5 2F/A8C3: A0 00 LDY #$00 2F/A8C5: A6 82 LDX $82 2F/A8C7: BD 17 7D LDA $7D17,X 2F/A8CA: 49 FF EOR #$FF 2F/A8CC: 9D 17 7D STA $7D17,X 2F/A8CF: E8 INX 2F/A8D0: C8 INY 2F/A8D1: C0 04 CPY #$04 2F/A8D3: D0 F2 BNE $A8C7 2F/A8D5: 68 PLA 2F/A8D6: AA TAX 2F/A8D7: 60 RTS ; pointers to monster attribute data 2F/A8D8: 8F20 ; 4x4 (16 * 1 byte) 2F/A8DA: 8F20 ; 4x6 (24 * 1 byte) 2F/A8DC: 8F48 ; 6x6 (24 * 2 bytes) 2F/A8DE: 8F48 ; 6x6 (24 * 2 bytes) 2F/A8E0: 8FA8 ; 6x12 (4 * 3 bytes) 2F/A8E2: 8FB4 ; 12x6 (4 * 3 bytes) ; length of attribute data for each monster size 2F/A8E4: 01 01 02 02 03 03 ; [ load weapon animation properties ] ; weapon animations ; 0: unarmed ; 1: axe, spear, knife, sword ; 2: nunchuck, rod, staff, hammer ; 3: bow ; 4: harp ; 5: boomerang ; 6: fullmoon ; 7: shuriken ; 8: arrow ; 9: claw 2F/A8EA: AD 1F 7E LDA $7E1F ; weapon id (right hand) 2F/A8ED: A2 03 LDX #$03 2F/A8EF: 20 EA F8 JSR $F8EA ; multiply 2F/A8F2: 18 CLC 2F/A8F3: 69 98 ADC #$98 ; 2E/9098 (weapon animation properties) 2F/A8F5: 85 7E STA $7E 2F/A8F7: 8A TXA 2F/A8F8: 69 90 ADC #$90 2F/A8FA: 85 7F STA $7F 2F/A8FC: A0 00 LDY #$00 2F/A8FE: B1 7E LDA ($7E),Y ; weapon animation 2F/A900: 8D 1F 7E STA $7E1F 2F/A903: C8 INY 2F/A904: B1 7E LDA ($7E),Y ; weapon graphics 2F/A906: 8D 13 7E STA $7E13 2F/A909: C8 INY 2F/A90A: B1 7E LDA ($7E),Y ; weapon palette 2F/A90C: 8D 14 7E STA $7E14 2F/A90F: AD 20 7E LDA $7E20 ; weapon id (left hand) 2F/A912: A2 03 LDX #$03 2F/A914: 20 EA F8 JSR $F8EA ; multiply 2F/A917: 18 CLC 2F/A918: 69 98 ADC #$98 ; 2E/9098 (weapon animation properties) 2F/A91A: 85 7E STA $7E 2F/A91C: 8A TXA 2F/A91D: 69 90 ADC #$90 2F/A91F: 85 7F STA $7F 2F/A921: A0 00 LDY #$00 2F/A923: B1 7E LDA ($7E),Y ; weapon animation 2F/A925: 8D 20 7E STA $7E20 2F/A928: C8 INY 2F/A929: B1 7E LDA ($7E),Y ; weapon graphics 2F/A92B: 8D 15 7E STA $7E15 2F/A92E: C8 INY 2F/A92F: B1 7E LDA ($7E),Y ; weapon palette 2F/A931: 8D 16 7E STA $7E16 2F/A934: AD 13 7E LDA $7E13 2F/A937: A2 10 LDX #$10 2F/A939: 20 EA F8 JSR $F8EA ; multiply 2F/A93C: 85 7E STA $7E 2F/A93E: 86 7F STX $7F 2F/A940: A9 02 LDA #$02 ; weapon 2F/A942: 20 B9 A1 JSR $A1B9 ; load battle graphics 2F/A945: AD 15 7E LDA $7E15 2F/A948: A2 10 LDX #$10 2F/A94A: 20 EA F8 JSR $F8EA ; multiply 2F/A94D: 85 7E STA $7E 2F/A94F: 86 7F STX $7F 2F/A951: A9 03 LDA #$03 ; hit 2F/A953: 20 B9 A1 JSR $A1B9 ; load battle graphics 2F/A956: AD 14 7E LDA $7E14 ; use weapon palette for hit palette 2F/A959: 8D 17 7E STA $7E17 2F/A95C: AD 16 7E LDA $7E16 2F/A95F: 8D 18 7E STA $7E18 2F/A962: 60 RTS ; [ ] 2F/A963: A2 00 LDX #$00 2F/A965: 20 6E A9 JSR $A96E 2F/A968: E8 INX 2F/A969: E0 04 CPX #$04 2F/A96B: D0 F8 BNE $A965 2F/A96D: 60 RTS ; [ ] 2F/A96E: 8A TXA 2F/A96F: 48 PHA 2F/A970: BD 8B 7D LDA $7D8B,X ; job id 2F/A973: C9 FF CMP #$FF 2F/A975: F0 2A BEQ $A9A1 2F/A977: 85 7E STA $7E 2F/A979: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/A97C: A5 1C LDA $1C 2F/A97E: 18 CLC 2F/A97F: 69 80 ADC #$80 2F/A981: 85 7E STA $7E 2F/A983: A5 1D LDA $1D 2F/A985: 69 01 ADC #$01 2F/A987: 85 7F STA $7F 2F/A989: 8A TXA 2F/A98A: 0A ASL 2F/A98B: A8 TAY 2F/A98C: B9 A4 A9 LDA $A9A4,Y 2F/A98F: 85 80 STA $80 2F/A991: B9 A5 A9 LDA $A9A5,Y 2F/A994: 85 81 STA $81 2F/A996: A9 06 LDA #$06 2F/A998: 85 82 STA $82 2F/A99A: A9 14 LDA #$14 2F/A99C: 85 84 STA $84 2F/A99E: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 2F/A9A1: 68 PLA 2F/A9A2: AA TAX 2F/A9A3: 60 RTS 2F/A9A4: 1390 13F0 1450 14B0 ; [ load menu graphics ] 2F/A9AC: A9 01 LDA #$01 ; menu and window text 2F/A9AE: 4C B3 A1 JMP $A1B3 ; load battle graphics ; [ load character hit graphics ] 2F/A9B1: 8A TXA 2F/A9B2: 48 PHA 2F/A9B3: BD 8B 7D LDA $7D8B,X ; job id 2F/A9B6: C9 FF CMP #$FF 2F/A9B8: F0 12 BEQ $A9CC 2F/A9BA: 85 7E STA $7E 2F/A9BC: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/A9BF: A5 1C LDA $1C 2F/A9C1: 85 7E STA $7E 2F/A9C3: A5 1D LDA $1D 2F/A9C5: 85 7F STA $7F 2F/A9C7: A9 04 LDA #$04 ; character hit 2F/A9C9: 20 B9 A1 JSR $A1B9 ; load battle graphics 2F/A9CC: 68 PLA 2F/A9CD: AA TAX 2F/A9CE: 60 RTS ; [ load character animation graphics ] 2F/A9CF: 8A TXA 2F/A9D0: 48 PHA 2F/A9D1: BD 8B 7D LDA $7D8B,X ; job id 2F/A9D4: C9 FF CMP #$FF 2F/A9D6: F0 12 BEQ $A9EA 2F/A9D8: 85 7E STA $7E 2F/A9DA: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/A9DD: A5 1C LDA $1C 2F/A9DF: 85 7E STA $7E 2F/A9E1: A5 1D LDA $1D 2F/A9E3: 85 7F STA $7F 2F/A9E5: A9 05 LDA #$05 ; character animation 2F/A9E7: 20 B9 A1 JSR $A1B9 ; load battle graphics 2F/A9EA: 68 PLA 2F/A9EB: AA TAX 2F/A9EC: 60 RTS ; [ init character/menu graphics ] 2F/A9ED: 20 66 AC JSR $AC66 ; load stone toad/mini bg graphics 2F/A9F0: 20 D7 AC JSR $ACD7 ; load stone character bg graphics 2F/A9F3: A2 00 LDX #$00 2F/A9F5: 20 00 AA JSR $AA00 ; init character graphics 2F/A9F8: E8 INX 2F/A9F9: E0 04 CPX #$04 2F/A9FB: D0 F8 BNE $A9F5 2F/A9FD: 4C AC A9 JMP $A9AC ; load menu graphics ; [ load character graphics ] ; X: character slot 2F/AA00: 8A TXA 2F/AA01: 48 PHA 2F/AA02: BD 8B 7D LDA $7D8B,X ; job id 2F/AA05: C9 FF CMP #$FF 2F/AA07: F0 5C BEQ $AA65 2F/AA09: 85 7E STA $7E 2F/AA0B: 8A TXA 2F/AA0C: 0A ASL 2F/AA0D: A8 TAY 2F/AA0E: B9 9B 7D LDA $7D9B,Y 2F/AA11: 29 05 AND #$05 2F/AA13: F0 19 BEQ $AA2E ; branch if not toad or mini 2F/AA15: 29 04 AND #$04 2F/AA17: F0 0C BEQ $AA25 2F/AA19: A9 02 LDA #$02 ; toad 2F/AA1B: 9D A3 7D STA $7DA3,X 2F/AA1E: A9 18 LDA #$18 ; toad graphics 2F/AA20: 85 7E STA $7E 2F/AA22: 4C 2E AA JMP $AA2E 2F/AA25: A9 03 LDA #$03 ; mini 2F/AA27: 9D A3 7D STA $7DA3,X 2F/AA2A: A9 19 LDA #$19 ; mini graphics 2F/AA2C: 85 7E STA $7E 2F/AA2E: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/AA31: A5 1C LDA $1C 2F/AA33: 85 7E STA $7E 2F/AA35: A5 1D LDA $1D 2F/AA37: 85 7F STA $7F 2F/AA39: 8A TXA 2F/AA3A: 0A ASL 2F/AA3B: AA TAX 2F/AA3C: BD 68 AA LDA $AA68,X ; ppu address 2F/AA3F: 85 80 STA $80 2F/AA41: BD 69 AA LDA $AA69,X 2F/AA44: 85 81 STA $81 2F/AA46: A9 0E LDA #$0E ; 14 tiles 2F/AA48: 85 82 STA $82 2F/AA4A: A9 14 LDA #$14 ; bank 28 2F/AA4C: 85 84 STA $84 2F/AA4E: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 2F/AA51: 68 PLA 2F/AA52: 48 PHA 2F/AA53: 85 7E STA $7E 2F/AA55: 0A ASL 2F/AA56: AA TAX 2F/AA57: BD 9B 7D LDA $7D9B,X 2F/AA5A: 29 85 AND #$85 2F/AA5C: C9 80 CMP #$80 2F/AA5E: D0 05 BNE $AA65 ; branch if not dead 2F/AA60: A6 7E LDX $7E 2F/AA62: 20 D6 AA JSR $AAD6 2F/AA65: 68 PLA 2F/AA66: AA TAX 2F/AA67: 60 RTS ; ppu addresses for character graphics 2F/AA68: 1010 10F0 11D0 12B0 ; character graphics type jump table 2F/AA70: AAC1 AAD6 AAAB AA95 ; [ reload character graphics ] 2F/AA78: A2 00 LDX #$00 2F/AA7A: BD A3 7D LDA $7DA3,X ; character graphics type 2F/AA7D: 0A ASL 2F/AA7E: A8 TAY 2F/AA7F: B9 70 AA LDA $AA70,Y 2F/AA82: 85 7E STA $7E 2F/AA84: B9 71 AA LDA $AA71,Y 2F/AA87: 85 7F STA $7F 2F/AA89: 20 92 AA JSR $AA92 2F/AA8C: E8 INX 2F/AA8D: E0 02 CPX #$02 2F/AA8F: D0 E9 BNE $AA7A 2F/AA91: 60 RTS 2F/AA92: 6C 7E 00 JMP ($007E) ; [ character graphics type $03: mini ] 2F/AA95: A9 03 LDA #$03 2F/AA97: 9D A3 7D STA $7DA3,X 2F/AA9A: A9 00 LDA #$00 2F/AA9C: 85 82 STA $82 2F/AA9E: 85 83 STA $83 2F/AAA0: A9 19 LDA #$19 2F/AAA2: 85 7E STA $7E 2F/AAA4: A9 08 LDA #$08 ; 8 tiles 2F/AAA6: 85 84 STA $84 2F/AAA8: 4C 0D AB JMP $AB0D ; [ character graphics type $02: toad ] 2F/AAAB: A9 02 LDA #$02 2F/AAAD: 9D A3 7D STA $7DA3,X 2F/AAB0: A9 00 LDA #$00 2F/AAB2: 85 82 STA $82 2F/AAB4: 85 83 STA $83 2F/AAB6: A9 18 LDA #$18 2F/AAB8: 85 7E STA $7E 2F/AABA: A9 08 LDA #$08 ; 8 tiles 2F/AABC: 85 84 STA $84 2F/AABE: 4C 0D AB JMP $AB0D ; [ character graphics type $00: normal ] 2F/AAC1: A9 00 LDA #$00 2F/AAC3: 9D A3 7D STA $7DA3,X 2F/AAC6: 85 82 STA $82 2F/AAC8: 85 83 STA $83 2F/AACA: BD 8B 7D LDA $7D8B,X ; job id 2F/AACD: 85 7E STA $7E 2F/AACF: A9 0E LDA #$0E ; 14 tiles 2F/AAD1: 85 84 STA $84 2F/AAD3: 4C 0D AB JMP $AB0D ; [ character graphics type $01: dead ] 2F/AAD6: A9 01 LDA #$01 2F/AAD8: 9D A3 7D STA $7DA3,X 2F/AADB: A9 40 LDA #$40 ; $0240 (dead) 2F/AADD: 85 82 STA $82 2F/AADF: A9 02 LDA #$02 2F/AAE1: 85 83 STA $83 2F/AAE3: BD 8B 7D LDA $7D8B,X ; job id 2F/AAE6: 85 7E STA $7E 2F/AAE8: A9 06 LDA #$06 ; 6 tiles 2F/AAEA: 85 84 STA $84 2F/AAEC: 4C 0D AB JMP $AB0D ; [ ] 2F/AAEF: A5 7E LDA $7E 2F/AAF1: 48 PHA 2F/AAF2: BC 09 AB LDY $AB09,X 2F/AAF5: A9 18 LDA #$18 2F/AAF7: 85 7E STA $7E 2F/AAF9: A9 F0 LDA #$F0 2F/AAFB: 99 A0 02 STA $02A0,Y 2F/AAFE: C8 INY 2F/AAFF: C6 7E DEC $7E 2F/AB01: D0 F8 BNE $AAFB 2F/AB03: 68 PLA 2F/AB04: 85 7E STA $7E 2F/AB06: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) 2F/AB09: 00 18 30 48 ; [ reload character graphics ] 2F/AB0D: 8A TXA 2F/AB0E: 48 PHA 2F/AB0F: 20 EF AA JSR $AAEF 2F/AB12: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/AB15: A5 1C LDA $1C 2F/AB17: 18 CLC 2F/AB18: 65 82 ADC $82 2F/AB1A: 85 7E STA $7E 2F/AB1C: A5 1D LDA $1D 2F/AB1E: 65 83 ADC $83 2F/AB20: 85 7F STA $7F 2F/AB22: 8A TXA 2F/AB23: 0A ASL 2F/AB24: AA TAX 2F/AB25: BD 68 AA LDA $AA68,X ; ppu address 2F/AB28: 85 80 STA $80 2F/AB2A: BD 69 AA LDA $AA69,X 2F/AB2D: 85 81 STA $81 2F/AB2F: A5 84 LDA $84 2F/AB31: 85 82 STA $82 2F/AB33: A9 14 LDA #$14 ; bank 28 2F/AB35: 85 84 STA $84 2F/AB37: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 2F/AB3A: 68 PLA 2F/AB3B: AA TAX 2F/AB3C: 60 RTS ; [ get pointer to character graphics ] ; $7E: job id ; +$1C: pointer (out) 2F/AB3D: 8A TXA 2F/AB3E: 48 PHA 2F/AB3F: A5 7E LDA $7E 2F/AB41: C9 18 CMP #$18 2F/AB43: F0 0F BEQ $AB54 2F/AB45: C9 19 CMP #$19 2F/AB47: D0 16 BNE $AB5F 2F/AB49: A9 00 LDA #$00 ; 29/BF00 (mini graphics) 2F/AB4B: 85 1C STA $1C 2F/AB4D: A9 BF LDA #$BF 2F/AB4F: 85 1D STA $1D 2F/AB51: 4C 7D AB JMP $AB7D 2F/AB54: A9 80 LDA #$80 ; 29/BF80 (toad graphics) 2F/AB56: 85 1C STA $1C 2F/AB58: A9 BF LDA #$BF 2F/AB5A: 85 1D STA $1D 2F/AB5C: 4C 7D AB JMP $AB7D 2F/AB5F: 85 18 STA $18 2F/AB61: A9 00 LDA #$00 2F/AB63: 85 19 STA $19 2F/AB65: A9 A0 LDA #$A0 ; each job is 42 tiles 2F/AB67: 85 1A STA $1A 2F/AB69: A9 02 LDA #$02 2F/AB6B: 85 1B STA $1B 2F/AB6D: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 2F/AB70: A5 1C LDA $1C 2F/AB72: 18 CLC 2F/AB73: 69 00 ADC #$00 ; 28/8000 (character graphics) 2F/AB75: 85 1C STA $1C 2F/AB77: A5 1D LDA $1D 2F/AB79: 69 80 ADC #$80 2F/AB7B: 85 1D STA $1D 2F/AB7D: 68 PLA 2F/AB7E: AA TAX 2F/AB7F: 60 RTS ; [ shift stone character graphics ] 2F/AB80: 8A TXA 2F/AB81: 48 PHA 2F/AB82: A2 00 LDX #$00 2F/AB84: A9 04 LDA #$04 2F/AB86: 85 7E STA $7E 2F/AB88: BD 00 79 LDA $7900,X 2F/AB8B: 9D 84 79 STA $7984,X 2F/AB8E: BD 04 79 LDA $7904,X 2F/AB91: 9D A0 79 STA $79A0,X 2F/AB94: BD 08 79 LDA $7908,X 2F/AB97: 9D 8C 79 STA $798C,X 2F/AB9A: BD 0C 79 LDA $790C,X 2F/AB9D: 9D A8 79 STA $79A8,X 2F/ABA0: E8 INX 2F/ABA1: C6 7E DEC $7E 2F/ABA3: D0 E3 BNE $AB88 2F/ABA5: 8A TXA 2F/ABA6: 18 CLC 2F/ABA7: 69 0C ADC #$0C 2F/ABA9: AA TAX 2F/ABAA: C9 60 CMP #$60 2F/ABAC: D0 D6 BNE $AB84 2F/ABAE: A2 00 LDX #$00 2F/ABB0: A9 00 LDA #$00 2F/ABB2: 9D 80 79 STA $7980,X 2F/ABB5: 9D 88 79 STA $7988,X 2F/ABB8: 9D 90 79 STA $7990,X 2F/ABBB: 9D 98 79 STA $7998,X 2F/ABBE: 9D E4 79 STA $79E4,X 2F/ABC1: 9D EC 79 STA $79EC,X 2F/ABC4: 9D F4 79 STA $79F4,X 2F/ABC7: 9D FC 79 STA $79FC,X 2F/ABCA: E8 INX 2F/ABCB: E0 04 CPX #$04 2F/ABCD: D0 E3 BNE $ABB2 2F/ABCF: A2 00 LDX #$00 2F/ABD1: BD 80 79 LDA $7980,X 2F/ABD4: 9D 00 79 STA $7900,X 2F/ABD7: E8 INX 2F/ABD8: E0 80 CPX #$80 2F/ABDA: D0 F5 BNE $ABD1 2F/ABDC: 68 PLA 2F/ABDD: AA TAX 2F/ABDE: 60 RTS ; [ shift toad/mini graphics ] 2F/ABDF: A2 00 LDX #$00 2F/ABE1: A9 00 LDA #$00 2F/ABE3: 85 7E STA $7E 2F/ABE5: BD 00 79 LDA $7900,X 2F/ABE8: 0A ASL 2F/ABE9: 26 7E ROL $7E 2F/ABEB: 0A ASL 2F/ABEC: 26 7E ROL $7E 2F/ABEE: 0A ASL 2F/ABEF: 26 7E ROL $7E 2F/ABF1: 0A ASL 2F/ABF2: 26 7E ROL $7E 2F/ABF4: 9D 00 79 STA $7900,X 2F/ABF7: A5 7E LDA $7E 2F/ABF9: 9D 10 79 STA $7910,X 2F/ABFC: E8 INX 2F/ABFD: E0 10 CPX #$10 2F/ABFF: D0 E0 BNE $ABE1 2F/AC01: 60 RTS ; [ shift toad/mini graphics ] 2F/AC02: A2 00 LDX #$00 2F/AC04: BD 00 79 LDA $7900,X 2F/AC07: 9D 84 79 STA $7984,X 2F/AC0A: BD 04 79 LDA $7904,X 2F/AC0D: 9D 90 79 STA $7990,X 2F/AC10: BD 08 79 LDA $7908,X 2F/AC13: 9D 8C 79 STA $798C,X 2F/AC16: BD 0C 79 LDA $790C,X 2F/AC19: 9D 98 79 STA $7998,X 2F/AC1C: E8 INX 2F/AC1D: E0 04 CPX #$04 2F/AC1F: D0 E3 BNE $AC04 2F/AC21: A2 00 LDX #$00 2F/AC23: BD 80 79 LDA $7980,X 2F/AC26: 9D 00 79 STA $7900,X 2F/AC29: E8 INX 2F/AC2A: E0 20 CPX #$20 2F/AC2C: D0 F5 BNE $AC23 2F/AC2E: A2 00 LDX #$00 2F/AC30: A9 00 LDA #$00 2F/AC32: 9D 00 79 STA $7900,X 2F/AC35: 9D 08 79 STA $7908,X 2F/AC38: 9D 14 79 STA $7914,X 2F/AC3B: 9D 1C 79 STA $791C,X 2F/AC3E: E8 INX 2F/AC3F: E0 04 CPX #$04 2F/AC41: D0 EF BNE $AC32 2F/AC43: A2 00 LDX #$00 2F/AC45: A9 00 LDA #$00 2F/AC47: 85 7E STA $7E 2F/AC49: BD 00 79 LDA $7900,X 2F/AC4C: 0A ASL 2F/AC4D: 26 7E ROL $7E 2F/AC4F: 0A ASL 2F/AC50: 26 7E ROL $7E 2F/AC52: 0A ASL 2F/AC53: 26 7E ROL $7E 2F/AC55: 0A ASL 2F/AC56: 26 7E ROL $7E 2F/AC58: 9D 00 79 STA $7900,X 2F/AC5B: A5 7E LDA $7E 2F/AC5D: 9D 20 79 STA $7920,X 2F/AC60: E8 INX 2F/AC61: E0 20 CPX #$20 2F/AC63: D0 E0 BNE $AC45 2F/AC65: 60 RTS ; [ load stone toad/mini bg graphics ] 2F/AC66: A9 00 LDA #$00 2F/AC68: 85 86 STA $86 2F/AC6A: A6 86 LDX $86 2F/AC6C: BD D3 AC LDA $ACD3,X 2F/AC6F: 85 7E STA $7E 2F/AC71: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/AC74: A5 1C LDA $1C 2F/AC76: 18 CLC 2F/AC77: 69 20 ADC #$20 2F/AC79: 85 7E STA $7E 2F/AC7B: A5 1D LDA $1D 2F/AC7D: 69 00 ADC #$00 2F/AC7F: 85 7F STA $7F 2F/AC81: A9 00 LDA #$00 2F/AC83: 85 80 STA $80 2F/AC85: A9 79 LDA #$79 2F/AC87: 85 81 STA $81 2F/AC89: A9 10 LDA #$10 2F/AC8B: 85 82 STA $82 2F/AC8D: A9 14 LDA #$14 2F/AC8F: 85 84 STA $84 2F/AC91: 20 2F F9 JSR $F92F ; load rom data 2F/AC94: A5 86 LDA $86 2F/AC96: 29 01 AND #$01 2F/AC98: D0 06 BNE $ACA0 2F/AC9A: 20 02 AC JSR $AC02 2F/AC9D: 4C A3 AC JMP $ACA3 2F/ACA0: 20 DF AB JSR $ABDF 2F/ACA3: A9 00 LDA #$00 2F/ACA5: 85 7E STA $7E 2F/ACA7: A9 79 LDA #$79 2F/ACA9: 85 7F STA $7F 2F/ACAB: A5 86 LDA $86 2F/ACAD: 0A ASL 2F/ACAE: A8 TAY 2F/ACAF: B9 CB AC LDA $ACCB,Y ; ppu address 2F/ACB2: 85 80 STA $80 2F/ACB4: B9 CC AC LDA $ACCC,Y 2F/ACB7: 85 81 STA $81 2F/ACB9: A9 04 LDA #$04 ; copy 4 tiles 2F/ACBB: 85 82 STA $82 2F/ACBD: 85 84 STA $84 2F/ACBF: 20 42 F9 JSR $F942 ; copy graphics to ppu (flip if back attack) 2F/ACC2: E6 86 INC $86 2F/ACC4: A5 86 LDA $86 2F/ACC6: C9 04 CMP #$04 2F/ACC8: D0 A0 BNE $AC6A 2F/ACCA: 60 RTS ; ppu addresses for stone toad/mini bg graphics 2F/ACCB: 0380 03C0 03E0 0420 ; toad, toad, mini, mini 2F/ACD3: 18 18 19 19 ; [ load stone character bg graphics ] 2F/ACD7: A9 00 LDA #$00 2F/ACD9: 85 86 STA $86 2F/ACDB: A6 86 LDX $86 2F/ACDD: BD 8B 7D LDA $7D8B,X ; job id 2F/ACE0: C9 FF CMP #$FF 2F/ACE2: F0 4D BEQ $AD31 2F/ACE4: 85 7E STA $7E 2F/ACE6: 20 3D AB JSR $AB3D ; get pointer to character graphics 2F/ACE9: A5 1C LDA $1C 2F/ACEB: 18 CLC 2F/ACEC: 69 80 ADC #$80 ; source: 28/8080 (kneeling) 2F/ACEE: 85 7E STA $7E 2F/ACF0: A5 1D LDA $1D 2F/ACF2: 69 00 ADC #$00 2F/ACF4: 85 7F STA $7F 2F/ACF6: A9 00 LDA #$00 2F/ACF8: 85 80 STA $80 2F/ACFA: A9 79 LDA #$79 2F/ACFC: 85 81 STA $81 2F/ACFE: A9 60 LDA #$60 ; size: 96 bytes (6 tiles) 2F/AD00: 85 82 STA $82 2F/AD02: A9 14 LDA #$14 ; bank 28 2F/AD04: 85 84 STA $84 2F/AD06: 20 2F F9 JSR $F92F ; load rom data 2F/AD09: A5 86 LDA $86 2F/AD0B: 29 01 AND #$01 2F/AD0D: D0 03 BNE $AD12 2F/AD0F: 20 80 AB JSR $AB80 ; shift stone character graphics 2F/AD12: A9 00 LDA #$00 ; source: $7900 2F/AD14: 85 7E STA $7E 2F/AD16: A9 79 LDA #$79 2F/AD18: 85 7F STA $7F 2F/AD1A: A5 86 LDA $86 2F/AD1C: 0A ASL 2F/AD1D: A8 TAY 2F/AD1E: B9 4B AD LDA $AD4B,Y ; ppu address 2F/AD21: 85 80 STA $80 2F/AD23: B9 4C AD LDA $AD4C,Y 2F/AD26: 85 81 STA $81 2F/AD28: A9 08 LDA #$08 ; 8 tiles 2F/AD2A: 85 82 STA $82 2F/AD2C: 85 84 STA $84 2F/AD2E: 20 42 F9 JSR $F942 ; copy graphics to ppu (flip if back attack) 2F/AD31: E6 86 INC $86 2F/AD33: A5 86 LDA $86 2F/AD35: C9 04 CMP #$04 2F/AD37: D0 A2 BNE $ACDB 2F/AD39: A9 06 LDA #$06 ; ppu $0600 (overflow into battle bg graphics) 2F/AD3B: A2 00 LDX #$00 2F/AD3D: 20 E0 F8 JSR $F8E0 ; set ppu address 2F/AD40: A9 00 LDA #$00 2F/AD42: A2 20 LDX #$20 ; clear 2 tiles 2F/AD44: 8D 07 20 STA $2007 2F/AD47: CA DEX 2F/AD48: D0 FA BNE $AD44 2F/AD4A: 60 RTS ; ppu addresses for stone character bg graphics 2F/AD4B: 0440 04C0 0520 05A0 ; [ load battle bg graphics ] ; also monster/character entry and menu scroll-in 2F/AD53: AD EF 7C LDA $7CEF ; battle bg id 2F/AD56: 18 CLC 2F/AD57: 69 80 ADC #$80 ; source = 0C/8000 2F/AD59: 85 7F STA $7F 2F/AD5B: A9 00 LDA #$00 2F/AD5D: 85 7E STA $7E 2F/AD5F: A9 00 LDA #$00 ; dest = $7900 2F/AD61: 85 80 STA $80 2F/AD63: A9 79 LDA #$79 2F/AD65: 85 81 STA $81 2F/AD67: A9 00 LDA #$00 ; size = 256 bytes 2F/AD69: 85 82 STA $82 2F/AD6B: A9 06 LDA #$06 2F/AD6D: 85 84 STA $84 2F/AD6F: 20 2F F9 JSR $F92F ; load rom data 2F/AD72: 20 4F AE JSR $AE4F ; init monster entry 2F/AD75: EE 01 00 INC $0001 ; enable irq 2F/AD78: EE F3 7C INC $7CF3 2F/AD7B: A9 1E LDA #$1E ; show all layers 2F/AD7D: 85 09 STA $09 2F/AD7F: 85 0A STA $0A 2F/AD81: 85 0B STA $0B 2F/AD83: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 2F/AD86: 20 09 F8 JSR $F809 ; wait for last battle bg scanline 2F/AD89: 20 5E AE JSR $AE5E ; update monster/menu scroll-in 2F/AD8C: A2 00 LDX #$00 ; start of loop (7 loops, 4 frames per loop) 2F/AD8E: 20 9A AD JSR $AD9A ; update battle bg pixel mask 2F/AD91: 20 C0 AD JSR $ADC0 ; fade in battle bg 2F/AD94: E8 INX 2F/AD95: E0 07 CPX #$07 2F/AD97: D0 F5 BNE $AD8E 2F/AD99: 60 RTS ; [ update battle bg pixel mask ] ; X: frame id (0..6) 2F/AD9A: 8A TXA 2F/AD9B: 48 PHA 2F/AD9C: 0A ASL 2F/AD9D: 0A ASL 2F/AD9E: 0A ASL 2F/AD9F: 18 CLC 2F/ADA0: 69 A7 ADC #$A7 ; 2F/AEA7 (battle bg pixel masks) 2F/ADA2: 85 7E STA $7E 2F/ADA4: A9 00 LDA #$00 2F/ADA6: 69 AE ADC #$AE 2F/ADA8: 85 7F STA $7F 2F/ADAA: A0 00 LDY #$00 2F/ADAC: A2 00 LDX #$00 2F/ADAE: B1 7E LDA ($7E),Y 2F/ADB0: 9D 00 7A STA $7A00,X 2F/ADB3: E8 INX 2F/ADB4: C8 INY 2F/ADB5: 98 TYA 2F/ADB6: 29 07 AND #$07 ; copy 8 bytes 2F/ADB8: A8 TAY 2F/ADB9: E0 40 CPX #$40 ; copy 8 times (4 tiles) 2F/ADBB: D0 F1 BNE $ADAE 2F/ADBD: 68 PLA 2F/ADBE: AA TAX 2F/ADBF: 60 RTS ; [ fade in battle bg ] ; +$7900-$793F: graphics buffer ; +$7A00-$7A3F: pixel mask buffer 2F/ADC0: 48 PHA 2F/ADC1: 8A TXA 2F/ADC2: A9 00 LDA #$00 ; ppu $0600 (battle bg graphics) 2F/ADC4: 8D BB 7D STA $7DBB 2F/ADC7: A9 06 LDA #$06 2F/ADC9: 8D BC 7D STA $7DBC 2F/ADCC: A9 00 LDA #$00 ; $7900 (graphics buffer) 2F/ADCE: 8D BD 7D STA $7DBD 2F/ADD1: A9 79 LDA #$79 2F/ADD3: 8D BE 7D STA $7DBE 2F/ADD6: A9 04 LDA #$04 ; row/frame counter 2F/ADD8: 8D BF 7D STA $7DBF ; start of row loop 2F/ADDB: 20 80 FB JSR $FB80 ; wait for nmi 2F/ADDE: 20 AA F8 JSR $F8AA ; copy oam data to ppu 2F/ADE1: AD BC 7D LDA $7DBC 2F/ADE4: AE BB 7D LDX $7DBB 2F/ADE7: 20 E0 F8 JSR $F8E0 ; set ppu address 2F/ADEA: AD BD 7D LDA $7DBD 2F/ADED: 85 7E STA $7E 2F/ADEF: AD BE 7D LDA $7DBE 2F/ADF2: 85 7F STA $7F 2F/ADF4: A0 00 LDY #$00 2F/ADF6: B1 7E LDA ($7E),Y 2F/ADF8: 39 00 7A AND $7A00,Y ; and with pixel mask 2F/ADFB: 8D 07 20 STA $2007 ; transfer to ppu 2F/ADFE: C8 INY 2F/ADFF: C0 40 CPY #$40 ; transfer 4 tiles 2F/AE01: D0 F3 BNE $ADF6 2F/AE03: 20 CB F8 JSR $F8CB ; update ppu registers 2F/AE06: 20 09 F8 JSR $F809 ; wait for last battle bg scanline 2F/AE09: 20 5E AE JSR $AE5E ; update monster/menu scroll-in 2F/AE0C: 20 28 AF JSR $AF28 ; update character movement 2F/AE0F: AD BB 7D LDA $7DBB ; add $40 to ppu address 2F/AE12: 18 CLC 2F/AE13: 69 40 ADC #$40 2F/AE15: 8D BB 7D STA $7DBB 2F/AE18: AD BC 7D LDA $7DBC 2F/AE1B: 69 00 ADC #$00 2F/AE1D: 8D BC 7D STA $7DBC 2F/AE20: AD BD 7D LDA $7DBD ; add $40 to ram address 2F/AE23: 18 CLC 2F/AE24: 69 40 ADC #$40 2F/AE26: 8D BD 7D STA $7DBD 2F/AE29: AD BE 7D LDA $7DBE 2F/AE2C: 69 00 ADC #$00 2F/AE2E: 8D BE 7D STA $7DBE 2F/AE31: CE BF 7D DEC $7DBF ; next row 2F/AE34: D0 A5 BNE $ADDB 2F/AE36: 68 PLA 2F/AE37: AA TAX 2F/AE38: 60 RTS ; [ update monster entry ] 2F/AE39: A5 04 LDA $04 2F/AE3B: F0 11 BEQ $AE4E 2F/AE3D: A5 10 LDA $10 ; ppuscroll 2F/AE3F: 18 CLC 2F/AE40: 69 10 ADC #$10 2F/AE42: 85 10 STA $10 2F/AE44: C6 04 DEC $04 2F/AE46: D0 06 BNE $AE4E 2F/AE48: A5 08 LDA $08 ; change base name table address 2F/AE4A: 29 FE AND #$FE 2F/AE4C: 85 08 STA $08 2F/AE4E: 60 RTS ; [ init monster entry ] 2F/AE4F: 20 48 AF JSR $AF48 ; check back attack 2F/AE52: D0 05 BNE $AE59 2F/AE54: A9 10 LDA #$10 2F/AE56: 4C 5B AE JMP $AE5B 2F/AE59: A9 F0 LDA #$F0 2F/AE5B: 85 0F STA $0F ; ppuscroll x 2F/AE5D: 60 RTS ; [ update monster/menu scroll-in ] 2F/AE5E: 20 39 AE JSR $AE39 ; update monster entry 2F/AE61: A5 0F LDA $0F 2F/AE63: 8D 05 20 STA $2005 ; ppuscroll x 2F/AE66: A9 00 LDA #$00 2F/AE68: 8D 05 20 STA $2005 2F/AE6B: 20 48 AF JSR $AF48 ; check back attack 2F/AE6E: D0 23 BNE $AE93 ; branch if not back attack 2F/AE70: A5 0F LDA $0F 2F/AE72: D0 09 BNE $AE7D 2F/AE74: A5 07 LDA $07 2F/AE76: 29 FE AND #$FE 2F/AE78: 85 07 STA $07 2F/AE7A: 4C 88 AE JMP $AE88 2F/AE7D: 18 CLC 2F/AE7E: 69 10 ADC #$10 2F/AE80: 85 0F STA $0F 2F/AE82: A5 07 LDA $07 2F/AE84: 09 01 ORA #$01 2F/AE86: 85 07 STA $07 2F/AE88: A5 07 LDA $07 2F/AE8A: 8D 00 20 STA $2000 2F/AE8D: A5 0A LDA $0A 2F/AE8F: 8D 01 20 STA $2001 2F/AE92: 60 RTS 2F/AE93: A5 0F LDA $0F 2F/AE95: F0 05 BEQ $AE9C 2F/AE97: 38 SEC 2F/AE98: E9 10 SBC #$10 ; decrement x-scroll 2F/AE9A: 85 0F STA $0F 2F/AE9C: A5 07 LDA $07 2F/AE9E: 8D 00 20 STA $2000 2F/AEA1: A5 0A LDA $0A 2F/AEA3: 8D 01 20 STA $2001 2F/AEA6: 60 RTS ; battle bg pixel mask for fade-in 2F/AEA7: 00 00 00 18 18 00 00 00 2F/AEAF: 00 00 18 3C 3C 18 00 00 2F/AEB7: 00 18 3C 7E 7E 3C 18 00 2F/AEBF: 18 3C 7E FF FF 7E 3C 18 2F/AEC7: 3C 7E FF FF FF FF 7E 3C 2F/AECF: 7E FF FF FF FF FF FF 7E 2F/AED7: FF FF FF FF FF FF FF FF ; -------------------------------------------------------------------------- ; [ execute animation function ] 2F/AEDF: A9 00 LDA #$00 ; draw character sprite (32/9111, unused) 2F/AEE1: 4C 54 F8 JMP $F854 2F/AEE4: A9 01 LDA #$01 ; choose targets (32/9A1C) 2F/AEE6: D0 F9 BNE $AEE1 2F/AEE8: A9 02 LDA #$02 ; draw all character sprites (32/90D8) 2F/AEEA: D0 F5 BNE $AEE1 2F/AEEC: A9 03 LDA #$03 ; update status and target numeral sprites (32/9F11) 2F/AEEE: D0 F1 BNE $AEE1 2F/AEF0: A9 04 LDA #$04 ; weapon animation (33/A0C0) 2F/AEF2: D0 ED BNE $AEE1 2F/AEF4: A9 05 LDA #$05 ; character hit (33/A8B8) 2F/AEF6: D0 E9 BNE $AEE1 2F/AEF8: A9 06 LDA #$06 ; defend (33/ABF7) 2F/AEFA: D0 E5 BNE $AEE1 2F/AEFC: A9 07 LDA #$07 ; (33/AB27) 2F/AEFE: D0 E1 BNE $AEE1 2F/AF00: A9 08 LDA #$08 ; jump 1 (33/AAB8) 2F/AF02: D0 DD BNE $AEE1 2F/AF04: A9 09 LDA #$09 ; jump 2 (33/AA15) 2F/AF06: D0 D9 BNE $AEE1 2F/AF08: A9 0A LDA #$0A ; scare (33/A988) 2F/AF0A: D0 D5 BNE $AEE1 2F/AF0C: A9 0B LDA #$0B ; cheer (33/A92B) 2F/AF0E: D0 D1 BNE $AEE1 2F/AF10: A9 0C LDA #$0C ; damage numerals (33/AD2B) 2F/AF12: D0 CD BNE $AEE1 2F/AF14: A9 0D LDA #$0D ; magic animation (33/BAFD) 2F/AF16: D0 C9 BNE $AEE1 2F/AF18: A9 0E LDA #$0E ; summon animation (32/8CEF) 2F/AF1A: D0 C5 BNE $AEE1 2F/AF1C: A9 0F LDA #$0F ; cycle sprite palettes (32/8CBA) 2F/AF1E: D0 C1 BNE $AEE1 2F/AF20: A9 10 LDA #$10 ; summon pre-animation (33/AFB0) 2F/AF22: D0 BD BNE $AEE1 2F/AF24: A9 11 LDA #$11 ; characters run away (33/BC89) 2F/AF26: D0 B9 BNE $AEE1 2F/AF28: A9 12 LDA #$12 ; update character movement (33/BE89) 2F/AF2A: D0 B5 BNE $AEE1 2F/AF2C: A9 13 LDA #$13 ; move characters offscreen (33/BE74, unused) 2F/AF2E: D0 B1 BNE $AEE1 2F/AF30: A9 14 LDA #$14 ; move characters (33/BE9A) 2F/AF32: D0 AD BNE $AEE1 2F/AF34: A9 15 LDA #$15 ; copy attribute table to ppu (32/8EFB) 2F/AF36: D0 A9 BNE $AEE1 2F/AF38: A9 16 LDA #$16 ; unarmed/monster attack (33/A899) 2F/AF3A: D0 A5 BNE $AEE1 2F/AF3C: A9 17 LDA #$17 ; (32/89B7) 2F/AF3E: D0 A1 BNE $AEE1 2F/AF40: A9 18 LDA #$18 ; toad/mini (33/BE01) 2F/AF42: D0 9D BNE $AEE1 2F/AF44: A9 19 LDA #$19 ; cannon blast (32/84C9) 2F/AF46: D0 99 BNE $AEE1 ; [ check back attack ] 2F/AF48: AD C3 78 LDA $78C3 2F/AF4B: C9 88 CMP #$88 2F/AF4D: 60 RTS ; -------------------------------------------------------------------------- ; [ execute battle graphics ] ; A: battle graphics id ; X: attacker id 2F/AF4E: 85 93 STA $93 2F/AF50: 8A TXA 2F/AF51: 48 PHA 2F/AF52: 98 TYA 2F/AF53: 48 PHA 2F/AF54: 86 95 STX $95 2F/AF56: A5 93 LDA $93 2F/AF58: 0A ASL 2F/AF59: A8 TAY 2F/AF5A: B9 74 AF LDA $AF74,Y 2F/AF5D: 85 93 STA $93 2F/AF5F: B9 75 AF LDA $AF75,Y 2F/AF62: 85 94 STA $94 2F/AF64: 20 71 AF JSR $AF71 2F/AF67: A9 00 LDA #$00 ; move characters forward by default 2F/AF69: 8D 7D 7D STA $7D7D 2F/AF6C: 68 PLA 2F/AF6D: A8 TAY 2F/AF6E: 68 PLA 2F/AF6F: AA TAX 2F/AF70: 60 RTS 2F/AF71: 6C 93 00 JMP ($0093) ; battle graphics jump table 2F/AF74: B469 B3C7 B3CD B42A B443 B3F6 B3D9 B3D3 2F/AF84: B38B B38E B33E B343 B348 B34D B304 B2EB 2F/AF94: B2FA B260 B24F B24C B201 B246 B1D8 B1E0 2F/AFA4: B1CF B1C1 B1B5 B1AF B1AC B15E B050 B024 2F/AFB4: B005 AF24 AFFF AFE7 AF44 AFD8 ; sound effect for each summon attack 2F/AFC0: 33 0A 0A 1D 37 02 48 43 43 09 41 41 0A 0A 42 19 2F/AFD0: 0A 35 48 23 32 09 22 3C ; [ battle graphics $25: ] 2F/AFD8: A2 00 LDX #$00 2F/AFDA: A9 F0 LDA #$F0 2F/AFDC: 9D 00 02 STA $0200,X 2F/AFDF: E8 INX 2F/AFE0: E0 A0 CPX #$A0 2F/AFE2: D0 F8 BNE $AFDC 2F/AFE4: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; [ battle graphics $23: toad/mini ] 2F/AFE7: A5 7E LDA $7E 2F/AFE9: 20 BA BA JSR $BABA ; update monster tilemap for toad/mini 2F/AFEC: AD 9D 7E LDA $7E9D ; magic animation 2F/AFEF: C9 08 CMP #$08 2F/AFF1: D0 04 BNE $AFF7 ; branch if not toad 2F/AFF3: A9 0B LDA #$0B ; toad 2F/AFF5: D0 02 BNE $AFF9 2F/AFF7: A9 0C LDA #$0C ; mini 2F/AFF9: 20 B3 A1 JSR $A1B3 ; load battle graphics 2F/AFFC: 4C 40 AF JMP $AF40 ; toad/mini ; [ battle graphics $22: brak2 ] 2F/AFFF: 20 38 A7 JSR $A738 ; set monster palettes 2F/B002: 4C 34 AF JMP $AF34 ; copy attribute table to ppu ; [ battle graphics $20: unarmed/monster attack ] 2F/B005: A9 00 LDA #$00 ; unarmed 2F/B007: 8D 1F 7E STA $7E1F 2F/B00A: 8D 1F 7E STA $7E1F 2F/B00D: 20 EA A8 JSR $A8EA ; load weapon animation properties 2F/B010: A9 00 LDA #$00 2F/B012: 85 CD STA $CD 2F/B014: 85 C9 STA $C9 2F/B016: A5 BB LDA $BB 2F/B018: F0 09 BEQ $B023 2F/B01A: 85 BD STA $BD 2F/B01C: A9 0A LDA #$0A 2F/B01E: 85 CA STA $CA 2F/B020: 20 38 AF JSR $AF38 ; unarmed/monster attack 2F/B023: 60 RTS ; [ battle graphics $1F: flash monsters (pre-attack) ] 2F/B024: AD 9D 7E LDA $7E9D 2F/B027: C9 09 CMP #$09 2F/B029: F0 1E BEQ $B049 ; return if flare wave 2F/B02B: A9 00 LDA #$00 2F/B02D: 85 B6 STA $B6 ; clear frame counter 2F/B02F: A5 B6 LDA $B6 2F/B031: 29 01 AND #$01 2F/B033: D0 06 BNE $B03B ; branch every other frame 2F/B035: 20 4A B0 JSR $B04A 2F/B038: 4C 3E B0 JMP $B03E 2F/B03B: 20 4D B0 JSR $B04D ; update monster attribute table 2F/B03E: 20 34 AF JSR $AF34 ; copy attribute table to ppu 2F/B041: E6 B6 INC $B6 ; next frame 2F/B043: A5 B6 LDA $B6 2F/B045: C9 08 CMP #$08 2F/B047: D0 E6 BNE $B02F 2F/B049: 60 RTS 2F/B04A: 4C 38 A7 JMP $A738 ; set monster palettes 2F/B04D: 4C B1 A6 JMP $A6B1 ; update monster attribute table ; [ battle graphics $1E: summon ] 2F/B050: AD 94 7E LDA $7E94 2F/B053: 48 PHA 2F/B054: 4A LSR 2F/B055: 4A LSR 2F/B056: 4A LSR 2F/B057: 4A LSR 2F/B058: A2 03 LDX #$03 2F/B05A: 20 EA F8 JSR $F8EA ; multiply 2F/B05D: 18 CLC 2F/B05E: 69 C0 ADC #$C0 ; 2F/AFC0 (sound effect for each summon) 2F/B060: 85 18 STA $18 2F/B062: 8A TXA 2F/B063: 69 AF ADC #$AF 2F/B065: 85 19 STA $19 2F/B067: 68 PLA ; offset is summon attack id 2F/B068: 29 0F AND #$0F 2F/B06A: A8 TAY 2F/B06B: B1 18 LDA ($18),Y 2F/B06D: 85 CA STA $CA ; sound effect id 2F/B06F: AD 94 7E LDA $7E94 2F/B072: C9 11 CMP #$11 2F/B074: F0 18 BEQ $B08E ; branch if icy stare (shiva) 2F/B076: C9 21 CMP #$21 2F/B078: F0 14 BEQ $B08E ; branch if thunderstorm (ramuh) 2F/B07A: C9 22 CMP #$22 2F/B07C: F0 10 BEQ $B08E ; branch if judgment bolt (ramuh) 2F/B07E: C9 60 CMP #$60 2F/B080: F0 07 BEQ $B089 ; branch if demon eye (leviathan) 2F/B082: C9 51 CMP #$51 2F/B084: F0 08 BEQ $B08E ; branch if slash (odin) 2F/B086: 4C A9 B0 JMP $B0A9 2F/B089: A9 03 LDA #$03 ; palette 3 (menu window palette) 2F/B08B: 4C 90 B0 JMP $B090 2F/B08E: A9 02 LDA #$02 ; palette 2 (battle bg) 2F/B090: 8D 90 7E STA $7E90 ; flash color 2F/B093: A2 00 LDX #$00 2F/B095: BD 27 7D LDA $7D27,X ; save attribute table 2F/B098: 9D 40 74 STA $7440,X 2F/B09B: E8 INX 2F/B09C: E0 40 CPX #$40 2F/B09E: D0 F5 BNE $B095 2F/B0A0: AD 99 7E LDA $7E99 ; set targets to flash 2F/B0A3: 8D 8F 7E STA $7E8F 2F/B0A6: 20 38 A7 JSR $A738 ; set monster palettes 2F/B0A9: A6 95 LDX $95 2F/B0AB: 20 8E B3 JSR $B38E ; step forward 2F/B0AE: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B0B1: A9 9F LDA #$9F 2F/B0B3: 8D 49 7F STA $7F49 2F/B0B6: 20 20 AF JSR $AF20 2F/B0B9: 20 16 B1 JSR $B116 2F/B0BC: 20 7F B1 JSR $B17F 2F/B0BF: 20 18 AF JSR $AF18 ; summon animation 2F/B0C2: 20 78 AA JSR $AA78 ; reload character graphics 2F/B0C5: 20 EB B2 JSR $B2EB 2F/B0C8: AD E2 7E LDA $7EE2 ; return if chocobo dash (no fade in) 2F/B0CB: F0 01 BEQ $B0CE 2F/B0CD: 60 RTS 2F/B0CE: 20 B8 B5 JSR $B5B8 ; update character sprites 2F/B0D1: 20 D9 9D JSR $9DD9 2F/B0D4: 20 1C AF JSR $AF1C ; cycle sprite palettes 2F/B0D7: A6 95 LDX $95 2F/B0D9: 20 EB B2 JSR $B2EB 2F/B0DC: 20 03 B1 JSR $B103 2F/B0DF: 20 09 B9 JSR $B909 ; update number of monsters remaining 2F/B0E2: 20 5B B2 JSR $B25B ; move back after attack 2F/B0E5: AD 94 7E LDA $7E94 2F/B0E8: A2 00 LDX #$00 2F/B0EA: DD 58 B1 CMP $B158,X 2F/B0ED: D0 0B BNE $B0FA 2F/B0EF: BD 59 B1 LDA $B159,X 2F/B0F2: 85 8C STA $8C 2F/B0F4: 20 3C AF JSR $AF3C 2F/B0F7: 4C 00 B1 JMP $B100 2F/B0FA: E8 INX 2F/B0FB: E8 INX 2F/B0FC: E0 06 CPX #$06 2F/B0FE: D0 EA BNE $B0EA 2F/B100: 4C EB B2 JMP $B2EB ; [ ] 2F/B103: 20 80 9E JSR $9E80 ; update status buffer 2F/B106: A2 00 LDX #$00 2F/B108: A9 00 LDA #$00 2F/B10A: 9D 97 7D STA $7D97,X 2F/B10D: 20 C3 B5 JSR $B5C3 2F/B110: E8 INX 2F/B111: E0 04 CPX #$04 2F/B113: D0 F3 BNE $B108 2F/B115: 60 RTS ; [ ] 2F/B116: A9 FB LDA #$FB 2F/B118: 20 28 9E JSR $9E28 ; load battle palette 2F/B11B: A0 1C LDY #$1C 2F/B11D: 20 1A 9E JSR $9E1A ; copy palette from buffer 2F/B120: 20 BC F8 JSR $F8BC ; wait for vblank (no oam update) 2F/B123: A2 00 LDX #$00 2F/B125: A0 00 LDY #$00 2F/B127: BD 9B 7D LDA $7D9B,X 2F/B12A: 29 C0 AND #$C0 2F/B12C: C9 40 CMP #$40 2F/B12E: D0 1E BNE $B14E ; branch if not stone 2F/B130: BD 9B 7D LDA $7D9B,X 2F/B133: 29 BF AND #$BF ; clear stone status 2F/B135: 09 20 ORA #$20 ; set bit 5 2F/B137: 9D 9B 7D STA $7D9B,X 2F/B13A: A9 03 LDA #$03 ; use palette 3 2F/B13C: 99 97 7D STA $7D97,Y 2F/B13F: BD 9B 7D LDA $7D9B,X 2F/B142: 29 08 AND #$08 2F/B144: F0 08 BEQ $B14E ; branch if not confused 2F/B146: BD 9C 7D LDA $7D9C,X 2F/B149: 09 01 ORA #$01 2F/B14B: 9D 9C 7D STA $7D9C,X 2F/B14E: C8 INY 2F/B14F: E8 INX 2F/B150: E8 INX 2F/B151: E0 08 CPX #$08 2F/B153: D0 D2 BNE $B127 2F/B155: 4C B8 B5 JMP $B5B8 ; update character sprites ; summon attack / ??? (3 * 2 bytes) 2F/B158: 30 34 2F/B15A: 50 0C 2F/B15C: 70 13 ; [ battle graphics $1D: magic ] 2F/B15E: AD 9A 7E LDA $7E9A 2F/B161: 10 06 BPL $B169 ; branch if attacker is a character 2F/B163: 20 14 AF JSR $AF14 ; magic animation 2F/B166: 4C 75 B1 JMP $B175 2F/B169: 20 8E B3 JSR $B38E ; step forward 2F/B16C: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B16F: 20 14 AF JSR $AF14 ; magic animation 2F/B172: 20 5B B2 JSR $B25B ; move back after attack 2F/B175: A9 06 LDA #$06 ; damage numerals 2F/B177: 20 B3 A1 JSR $A1B3 ; load battle graphics 2F/B17A: A9 00 LDA #$00 2F/B17C: 85 CC STA $CC 2F/B17E: 60 RTS ; [ ] 2F/B17F: A9 A0 LDA #$A0 2F/B181: 85 7E STA $7E 2F/B183: A9 24 LDA #$24 2F/B185: 85 7F STA $7F 2F/B187: A9 07 LDA #$07 2F/B189: 85 80 STA $80 2F/B18B: 20 80 FB JSR $FB80 ; wait for nmi 2F/B18E: A5 7F LDA $7F 2F/B190: A6 7E LDX $7E 2F/B192: 20 E0 F8 JSR $F8E0 ; set ppu address 2F/B195: A2 40 LDX #$40 2F/B197: A9 00 LDA #$00 2F/B199: 8D 07 20 STA $2007 2F/B19C: CA DEX 2F/B19D: D0 FA BNE $B199 2F/B19F: 20 CB F8 JSR $F8CB ; update ppu registers 2F/B1A2: A9 40 LDA #$40 2F/B1A4: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/B1A7: C6 80 DEC $80 2F/B1A9: D0 E0 BNE $B18B 2F/B1AB: 60 RTS ; [ battle graphics $1C: damage numerals ] 2F/B1AC: 4C 10 AF JMP $AF10 ; [ battle graphics $1B: cheer ] 2F/B1AF: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B1B2: 4C 0C AF JMP $AF0C ; [ battle graphics $1A: scare ] 2F/B1B5: 20 8E B3 JSR $B38E ; step forward 2F/B1B8: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B1BB: 20 08 AF JSR $AF08 2F/B1BE: 4C 5B B2 JMP $B25B ; move back after attack ; [ battle graphics $19: jump 2 ] 2F/B1C1: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B1C4: A9 0A LDA #$0A ; dragoon graphics ??? 2F/B1C6: 20 B3 A1 JSR $A1B3 ; load battle graphics 2F/B1C9: 20 04 AF JSR $AF04 2F/B1CC: 4C 5B B2 JMP $B25B ; move back after attack ; [ battle graphics $18: jump 1 ] 2F/B1CF: 20 8E B3 JSR $B38E ; step forward 2F/B1D2: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B1D5: 4C 00 AF JMP $AF00 ; [ battle graphics $16: buildup (normal) ] 2F/B1D8: A9 00 LDA #$00 ; not overloaded 2F/B1DA: 8D 19 7E STA $7E19 2F/B1DD: 4C E5 B1 JMP $B1E5 ; [ battle graphics $17: buildup (overload) ] 2F/B1E0: A9 01 LDA #$01 ; overloaded 2F/B1E2: 8D 19 7E STA $7E19 2F/B1E5: 20 8E B3 JSR $B38E ; step forward 2F/B1E8: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B1EB: 20 B1 A9 JSR $A9B1 ; load character hit graphics 2F/B1EE: 20 FC AE JSR $AEFC 2F/B1F1: 4C 5B B2 JMP $B25B ; move back after attack ; [ get character index from target mask ] 2F/B1F4: A2 00 LDX #$00 2F/B1F6: 0A ASL 2F/B1F7: B0 07 BCS $B200 2F/B1F9: E8 INX 2F/B1FA: E0 04 CPX #$04 2F/B1FC: D0 F8 BNE $B1F6 2F/B1FE: A2 00 LDX #$00 2F/B200: 60 RTS ; [ battle graphics $14: character hit ] 2F/B201: 20 B1 A9 JSR $A9B1 ; load character hit graphics 2F/B204: AD DF 7E LDA $7EDF 2F/B207: F0 33 BEQ $B23C ; branch if no "cover" target 2F/B209: 20 F4 B1 JSR $B1F4 ; get character index from target mask 2F/B20C: 8A TXA 2F/B20D: A8 TAY 2F/B20E: B5 C0 LDA $C0,X ; save xy position 2F/B210: 48 PHA 2F/B211: B5 C4 LDA $C4,X 2F/B213: 48 PHA 2F/B214: AD E0 7E LDA $7EE0 ; target being covered 2F/B217: 20 F4 B1 JSR $B1F4 ; get character index from target mask 2F/B21A: B5 C0 LDA $C0,X 2F/B21C: 38 SEC 2F/B21D: E9 18 SBC #$18 2F/B21F: 99 C0 00 STA $00C0,Y ; move in front of target being covered 2F/B222: B5 C4 LDA $C4,X 2F/B224: 99 C4 00 STA $00C4,Y 2F/B227: 20 B8 B5 JSR $B5B8 ; update character sprites 2F/B22A: 20 3C B2 JSR $B23C ; do hit animation 2F/B22D: AD DF 7E LDA $7EDF 2F/B230: 20 F4 B1 JSR $B1F4 ; get character index from target mask 2F/B233: 68 PLA 2F/B234: 95 C4 STA $C4,X ; restore "cover" target's xy position 2F/B236: 68 PLA 2F/B237: 95 C0 STA $C0,X 2F/B239: 4C B8 B5 JMP $B5B8 ; update character sprites 2F/B23C: A5 BB LDA $BB 2F/B23E: 05 BC ORA $BC 2F/B240: F0 03 BEQ $B245 ; return if no hits 2F/B242: 20 F4 AE JSR $AEF4 ; character hit 2F/B245: 60 RTS ; [ battle graphics $15: defend ] 2F/B246: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B249: 4C F8 AE JMP $AEF8 ; [ battle graphics $13: ] 2F/B24C: 4C EC AE JMP $AEEC ; [ battle graphics $12: character fight ] 2F/B24F: 20 8E B3 JSR $B38E ; step forward 2F/B252: 20 CF A9 JSR $A9CF ; load character animation graphics 2F/B255: 20 EA A8 JSR $A8EA ; load weapon animation properties 2F/B258: 20 F0 AE JSR $AEF0 ; weapon animation ; fallthrough ; [ move back after attack ] 2F/B25B: A6 95 LDX $95 2F/B25D: 4C 8B B3 JMP $B38B ; [ battle graphics $11: battle end animation ] 2F/B260: AD D3 78 LDA $78D3 2F/B263: 10 1F BPL $B284 ; branch if not defeat 2F/B265: A9 13 LDA #$13 ; "The Requiem" 2F/B267: 20 E9 FA JSR $FAE9 ; play song 2F/B26A: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 2F/B26D: AD EE 7C LDA $7CEE 2F/B270: F0 07 BEQ $B279 2F/B272: AD ED 7C LDA $7CED ; battle index 2F/B275: C9 79 CMP #$79 2F/B277: F0 0A BEQ $B283 2F/B279: 20 AA FB JSR $FBAA ; update joypad input 2F/B27C: AD 12 00 LDA $0012 2F/B27F: 29 01 AND #$01 2F/B281: F0 E7 BEQ $B26A ; branch if A button is not pressed 2F/B283: 60 RTS 2F/B284: A9 07 LDA #$07 ; "Fanfare" 2F/B286: 20 E9 FA JSR $FAE9 ; play song 2F/B289: A9 00 LDA #$00 2F/B28B: 85 B6 STA $B6 2F/B28D: 20 63 A9 JSR $A963 2F/B290: 20 B8 B5 JSR $B5B8 ; update character sprites 2F/B293: A2 00 LDX #$00 2F/B295: AD 8B 7D LDA $7D8B 2F/B298: C9 FF CMP #$FF 2F/B29A: F0 33 BEQ $B2CF 2F/B29C: 8A TXA 2F/B29D: 0A ASL 2F/B29E: A8 TAY 2F/B29F: B9 9B 7D LDA $7D9B,Y 2F/B2A2: 29 C0 AND #$C0 2F/B2A4: D0 29 BNE $B2CF ; branch if dead or stone 2F/B2A6: B9 9B 7D LDA $7D9B,Y 2F/B2A9: 29 05 AND #$05 2F/B2AB: F0 10 BEQ $B2BD ; branch if not toad or mini 2F/B2AD: A5 B6 LDA $B6 2F/B2AF: 29 20 AND #$20 2F/B2B1: F0 05 BEQ $B2B8 2F/B2B3: A9 0B LDA #$0B 2F/B2B5: 4C CC B2 JMP $B2CC 2F/B2B8: A9 0E LDA #$0E 2F/B2BA: 4C CC B2 JMP $B2CC 2F/B2BD: A5 B6 LDA $B6 2F/B2BF: 29 20 AND #$20 2F/B2C1: F0 05 BEQ $B2C8 2F/B2C3: A9 02 LDA #$02 2F/B2C5: 4C CC B2 JMP $B2CC 2F/B2C8: 8A TXA 2F/B2C9: 18 CLC 2F/B2CA: 69 11 ADC #$11 2F/B2CC: 9D 83 7D STA $7D83,X ; victory cheer frame for this character 2F/B2CF: E8 INX 2F/B2D0: E0 04 CPX #$04 2F/B2D2: D0 C1 BNE $B295 2F/B2D4: 20 E8 AE JSR $AEE8 ; draw all character sprites 2F/B2D7: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 2F/B2DA: E6 B6 INC $B6 2F/B2DC: A5 B6 LDA $B6 2F/B2DE: 29 80 AND #$80 2F/B2E0: F0 B1 BEQ $B293 2F/B2E2: A2 15 LDX #$15 2F/B2E4: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 2F/B2E7: CA DEX 2F/B2E8: D0 FA BNE $B2E4 2F/B2EA: 60 RTS ; [ battle graphics $0F: ] ; after character commands are chosen 2F/B2EB: A9 00 LDA #$00 ; hide status and target numeral sprites 2F/B2ED: 85 AC STA $AC 2F/B2EF: 20 8D 9F JSR $9F8D ; clear oam data 2F/B2F2: 20 B8 B5 JSR $B5B8 ; update character sprites 2F/B2F5: A9 06 LDA #$06 ; damage numerals 2F/B2F7: 4C B3 A1 JMP $A1B3 ; load battle graphics ; [ battle graphics $10: choose targets ] ; X: character id 2F/B2FA: 86 A5 STX $A5 2F/B2FC: A9 00 LDA #$00 2F/B2FE: 9D 0F 7E STA $7E0F,X ; clear selected targets for this character 2F/B301: 4C E4 AE JMP $AEE4 ; choose targets ; [ battle graphics $0E: ] ; before character commands are chosen 2F/B304: A2 00 LDX #$00 2F/B306: BD C4 78 LDA $78C4,X ; copy status buffer 2F/B309: 9D B7 7D STA $7DB7,X 2F/B30C: E8 INX 2F/B30D: E0 04 CPX #$04 2F/B30F: D0 F5 BNE $B306 2F/B311: 20 2A B5 JSR $B52A ; load status and system graphics 2F/B314: A9 00 LDA #$00 2F/B316: 85 AD STA $AD ; clear target selection data 2F/B318: 85 AE STA $AE 2F/B31A: 85 B4 STA $B4 2F/B31C: 8D 0F 7E STA $7E0F 2F/B31F: 8D 10 7E STA $7E10 2F/B322: 8D 11 7E STA $7E11 2F/B325: 8D 12 7E STA $7E12 2F/B328: 20 31 B3 JSR $B331 ; load cursor palette 2F/B32B: 20 BA BD JSR $BDBA ; init monster positions 2F/B32E: E6 AC INC $AC ; show status and target numeral sprites 2F/B330: 60 RTS ; [ load cursor palette ] 2F/B331: A9 FF LDA #$FF 2F/B333: 20 28 9E JSR $9E28 ; load battle palette 2F/B336: A0 1C LDY #$1C 2F/B338: 20 1A 9E JSR $9E1A ; copy palette from buffer 2F/B33B: 4C BC F8 JMP $F8BC ; wait for vblank (no oam update) ; [ battle graphics $0A: monster death animations ] 2F/B33E: A5 7E LDA $7E 2F/B340: 4C 0A BB JMP $BB0A ; [ battle graphics $0B: monster summon animation ] 2F/B343: A5 7E LDA $7E 2F/B345: 4C 59 B9 JMP $B959 ; [ battle graphics $0C: split animation ] 2F/B348: A6 7E LDX $7E 2F/B34A: 4C 3A B9 JMP $B93A ; [ battle graphics $0D: monsters run away ] 2F/B34D: A5 7E LDA $7E 2F/B34F: 4C 5E BB JMP $BB5E ; [ step back ] 2F/B352: A9 01 LDA #$01 ; move backward 2F/B354: 8D 7D 7D STA $7D7D 2F/B357: 8A TXA 2F/B358: 0A ASL 2F/B359: A8 TAY 2F/B35A: B9 9B 7D LDA $7D9B,Y 2F/B35D: 29 08 AND #$08 2F/B35F: F0 0C BEQ $B36D ; branch if not confused 2F/B361: A9 F0 LDA #$F0 2F/B363: 85 7E STA $7E 2F/B365: A9 00 LDA #$00 ; move forward 2F/B367: 8D 7D 7D STA $7D7D 2F/B36A: 4C 7F B3 JMP $B37F 2F/B36D: BD 8F 7D LDA $7D8F,X 2F/B370: 29 01 AND #$01 2F/B372: F0 07 BEQ $B37B ; branch if in front row 2F/B374: A9 20 LDA #$20 2F/B376: 85 7E STA $7E 2F/B378: 4C 7F B3 JMP $B37F 2F/B37B: A9 10 LDA #$10 2F/B37D: 85 7E STA $7E 2F/B37F: BD 7F 7D LDA $7D7F,X 2F/B382: 18 CLC 2F/B383: 65 7E ADC $7E 2F/B385: 9D 7F 7D STA $7D7F,X 2F/B388: 4C 5C B4 JMP $B45C ; move characters ; [ battle graphics $08: step back ] 2F/B38B: 4C C7 B3 JMP $B3C7 ; [ battle graphics $09: step forward ] 2F/B38E: A9 00 LDA #$00 ; move forward 2F/B390: 8D 7D 7D STA $7D7D 2F/B393: 8A TXA 2F/B394: 0A ASL 2F/B395: A8 TAY 2F/B396: B9 9B 7D LDA $7D9B,Y 2F/B399: 29 08 AND #$08 2F/B39B: F0 0C BEQ $B3A9 ; branch if not confused 2F/B39D: A9 F0 LDA #$F0 2F/B39F: 85 7E STA $7E 2F/B3A1: A9 01 LDA #$01 ; move backward 2F/B3A3: 8D 7D 7D STA $7D7D 2F/B3A6: 4C BB B3 JMP $B3BB 2F/B3A9: BD 8F 7D LDA $7D8F,X 2F/B3AC: 29 01 AND #$01 2F/B3AE: F0 07 BEQ $B3B7 ; branch if in front row 2F/B3B0: A9 20 LDA #$20 2F/B3B2: 85 7E STA $7E 2F/B3B4: 4C BB B3 JMP $B3BB 2F/B3B7: A9 10 LDA #$10 2F/B3B9: 85 7E STA $7E 2F/B3BB: BD 7F 7D LDA $7D7F,X 2F/B3BE: 38 SEC 2F/B3BF: E5 7E SBC $7E 2F/B3C1: 9D 7F 7D STA $7D7F,X ; set destination x position 2F/B3C4: 4C 5C B4 JMP $B45C ; move characters ; [ battle graphics $01: step back ] 2F/B3C7: 20 52 B3 JSR $B352 ; step back 2F/B3CA: 4C 8F B5 JMP $B58F ; update character sprites ; [ battle graphics $02: step forward (command select) ] 2F/B3CD: 20 8E B3 JSR $B38E ; step forward 2F/B3D0: 4C 8F B5 JMP $B58F ; update character sprites ; [ battle graphics $07: update character sprites ] 2F/B3D3: 20 80 9E JSR $9E80 ; update status buffer 2F/B3D6: 4C B8 B5 JMP $B5B8 ; update character sprites ; [ battle graphics $06: move forward to confused position ] 2F/B3D9: FE C1 7D INC $7DC1,X 2F/B3DC: 8A TXA 2F/B3DD: 48 PHA 2F/B3DE: A9 00 LDA #$00 ; move forward 2F/B3E0: 8D 7D 7D STA $7D7D 2F/B3E3: A9 B0 LDA #$B0 2F/B3E5: 9D 7F 7D STA $7D7F,X ; character x position 2F/B3E8: 20 5C B4 JSR $B45C ; move characters 2F/B3EB: 20 8F B5 JSR $B58F ; update character sprites 2F/B3EE: 68 PLA 2F/B3EF: AA TAX 2F/B3F0: A9 00 LDA #$00 2F/B3F2: 9D C1 7D STA $7DC1,X 2F/B3F5: 60 RTS ; [ battle graphics $05: move back from confused position ] 2F/B3F6: 8A TXA 2F/B3F7: 48 PHA 2F/B3F8: 0A ASL 2F/B3F9: A8 TAY 2F/B3FA: B9 9B 7D LDA $7D9B,Y ; set confused (for sprite flip ???) 2F/B3FD: 09 08 ORA #$08 2F/B3FF: 99 9B 7D STA $7D9B,Y 2F/B402: A9 01 LDA #$01 ; move backward 2F/B404: 8D 7D 7D STA $7D7D 2F/B407: BD 8F 7D LDA $7D8F,X 2F/B40A: 29 01 AND #$01 ; front/back row 2F/B40C: A8 TAY 2F/B40D: B9 16 B5 LDA $B516,Y ; x offset 2F/B410: 9D 7F 7D STA $7D7F,X 2F/B413: 20 5C B4 JSR $B45C ; move characters 2F/B416: 68 PLA 2F/B417: AA TAX 2F/B418: 0A ASL 2F/B419: A8 TAY 2F/B41A: B9 9B 7D LDA $7D9B,Y ; clear confused 2F/B41D: 29 F7 AND #$F7 2F/B41F: 99 9B 7D STA $7D9B,Y 2F/B422: A9 00 LDA #$00 2F/B424: 9D C1 7D STA $7DC1,X 2F/B427: 4C 8F B5 JMP $B58F ; update character sprites ; [ battle graphics $03: move character to back row ??? ] 2F/B42A: A9 01 LDA #$01 ; move backward 2F/B42C: 8D 7D 7D STA $7D7D 2F/B42F: BD 7F 7D LDA $7D7F,X 2F/B432: 18 CLC 2F/B433: 69 10 ADC #$10 2F/B435: 9D 7F 7D STA $7D7F,X 2F/B438: A9 01 LDA #$01 2F/B43A: 9D 8F 7D STA $7D8F,X 2F/B43D: 20 5C B4 JSR $B45C ; move characters 2F/B440: 4C 8F B5 JMP $B58F ; update character sprites ; [ battle graphics $04: move character to front row ??? ] 2F/B443: A9 00 LDA #$00 ; move forward 2F/B445: 8D 7D 7D STA $7D7D 2F/B448: BD 7F 7D LDA $7D7F,X 2F/B44B: 38 SEC 2F/B44C: E9 10 SBC #$10 2F/B44E: 9D 7F 7D STA $7D7F,X 2F/B451: A9 00 LDA #$00 2F/B453: 9D 8F 7D STA $7D8F,X 2F/B456: 20 5C B4 JSR $B45C ; move characters 2F/B459: 4C 8F B5 JMP $B58F ; update character sprites ; [ move characters ] 2F/B45C: 8A TXA 2F/B45D: 48 PHA 2F/B45E: A9 00 LDA #$00 2F/B460: 8D F4 7C STA $7CF4 ; clear frame counter 2F/B463: 20 30 AF JSR $AF30 ; move characters 2F/B466: 68 PLA 2F/B467: AA TAX 2F/B468: 60 RTS ; [ battle graphics $00: battle start animation ] 2F/B469: 20 AC B4 JSR $B4AC 2F/B46C: A9 00 LDA #$00 2F/B46E: 85 98 STA $98 ; no h-flip for back attack 2F/B470: 8D 7D 7D STA $7D7D ; move forward 2F/B473: 20 53 AD JSR $AD53 ; load battle bg graphics 2F/B476: 20 30 AF JSR $AF30 ; move characters 2F/B479: AD 7B 7D LDA $7D7B 2F/B47C: C9 09 CMP #$09 2F/B47E: D0 09 BNE $B489 2F/B480: AD 68 7D LDA $7D68 2F/B483: 0A ASL 2F/B484: 10 03 BPL $B489 ; branch if not a boss 2F/B486: 20 97 BE JSR $BE97 ; boss entry 2F/B489: E6 98 INC $98 ; allow h-flip for back attack 2F/B48B: A2 00 LDX #$00 2F/B48D: BD 8F 7D LDA $7D8F,X ; battle row 2F/B490: 29 01 AND #$01 2F/B492: A8 TAY 2F/B493: B9 16 B5 LDA $B516,Y 2F/B496: 95 C0 STA $C0,X ; character x position 2F/B498: 9D 7F 7D STA $7D7F,X 2F/B49B: E8 INX 2F/B49C: E0 04 CPX #$04 2F/B49E: D0 ED BNE $B48D 2F/B4A0: 20 E8 AE JSR $AEE8 ; draw all character sprites 2F/B4A3: 20 BC F8 JSR $F8BC ; wait for vblank (no oam update) 2F/B4A6: 20 B8 B5 JSR $B5B8 ; update character sprites 2F/B4A9: 4C 09 B9 JMP $B909 ; update number of monsters remaining ; [ ] 2F/B4AC: A9 00 LDA #$00 2F/B4AE: 8D F4 7C STA $7CF4 2F/B4B1: 20 48 AF JSR $AF48 ; check back attack 2F/B4B4: D0 05 BNE $B4BB 2F/B4B6: A0 08 LDY #$08 2F/B4B8: 4C BD B4 JMP $B4BD 2F/B4BB: A0 00 LDY #$00 2F/B4BD: A2 00 LDX #$00 2F/B4BF: B9 1A B5 LDA $B51A,Y 2F/B4C2: 95 C0 STA $C0,X 2F/B4C4: C8 INY 2F/B4C5: E8 INX 2F/B4C6: E0 08 CPX #$08 2F/B4C8: D0 F5 BNE $B4BF 2F/B4CA: A2 00 LDX #$00 2F/B4CC: 20 48 AF JSR $AF48 ; check back attack 2F/B4CF: D0 07 BNE $B4D8 2F/B4D1: A9 02 LDA #$02 2F/B4D3: 85 18 STA $18 2F/B4D5: 4C DC B4 JMP $B4DC 2F/B4D8: A9 00 LDA #$00 2F/B4DA: 85 18 STA $18 2F/B4DC: BD 8F 7D LDA $7D8F,X 2F/B4DF: 29 01 AND #$01 2F/B4E1: 18 CLC 2F/B4E2: 65 18 ADC $18 ; add 2 for back attack 2F/B4E4: A8 TAY 2F/B4E5: B9 16 B5 LDA $B516,Y 2F/B4E8: 9D 7F 7D STA $7D7F,X 2F/B4EB: 8A TXA 2F/B4EC: 0A ASL 2F/B4ED: A8 TAY 2F/B4EE: B9 9B 7D LDA $7D9B,Y 2F/B4F1: 29 C0 AND #$C0 2F/B4F3: F0 0A BEQ $B4FF 2F/B4F5: BD 7F 7D LDA $7D7F,X 2F/B4F8: 95 C0 STA $C0,X 2F/B4FA: A9 00 LDA #$00 2F/B4FC: 4C 0D B5 JMP $B50D 2F/B4FF: B9 9B 7D LDA $7D9B,Y 2F/B502: 29 05 AND #$05 2F/B504: F0 05 BEQ $B50B 2F/B506: A9 0B LDA #$0B ; toad/mini animation frame 2F/B508: 4C 0D B5 JMP $B50D 2F/B50B: A9 02 LDA #$02 ; normal animation frame 2F/B50D: 9D 83 7D STA $7D83,X 2F/B510: E8 INX 2F/B511: E0 04 CPX #$04 2F/B513: D0 B7 BNE $B4CC 2F/B515: 60 RTS ; character x position (front/back row, normal/back attack) 2F/B516: D0 E0 20 10 ; initial character x positions (normal attack) 2F/B51A: F0 F0 F0 F0 ; initial character y positions (normal attack) 2F/B51E: 2C 48 64 80 ; initial character x positions (back attack) 2F/B522: 30 30 30 30 ; initial character y positions (back attack) 2F/B526: 2C 48 64 80 ; [ load status and system graphics ] 2F/B52A: A9 07 LDA #$07 ; target numerals 2F/B52C: 20 B3 A1 JSR $A1B3 ; load battle graphics 2F/B52F: A2 00 LDX #$00 2F/B531: 8A TXA 2F/B532: 48 PHA 2F/B533: BD 22 7E LDA $7E22,X 2F/B536: F0 05 BEQ $B53D 2F/B538: A9 FF LDA #$FF 2F/B53A: 9D B7 7D STA $7DB7,X 2F/B53D: BD B7 7D LDA $7DB7,X 2F/B540: C9 FF CMP #$FF 2F/B542: F0 2D BEQ $B571 ; branch if no status 2F/B544: 29 07 AND #$07 2F/B546: 0A ASL 2F/B547: 0A ASL 2F/B548: A2 10 LDX #$10 2F/B54A: 20 EA F8 JSR $F8EA ; multiply 2F/B54D: 18 CLC 2F/B54E: 69 40 ADC #$40 ; 0D/B240 (animated status graphics) 2F/B550: 85 7E STA $7E 2F/B552: 8A TXA 2F/B553: 69 B2 ADC #$B2 2F/B555: 85 7F STA $7F 2F/B557: 68 PLA 2F/B558: 48 PHA 2F/B559: AA TAX 2F/B55A: 0A ASL 2F/B55B: A8 TAY 2F/B55C: B9 87 B5 LDA $B587,Y 2F/B55F: 85 80 STA $80 2F/B561: B9 88 B5 LDA $B588,Y 2F/B564: 85 81 STA $81 2F/B566: A9 04 LDA #$04 2F/B568: 85 82 STA $82 2F/B56A: A9 06 LDA #$06 2F/B56C: 85 84 STA $84 2F/B56E: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 2F/B571: 68 PLA 2F/B572: AA TAX 2F/B573: E8 INX 2F/B574: E0 04 CPX #$04 2F/B576: D0 B9 BNE $B531 2F/B578: A9 0D LDA #$0D ; right arrow 2F/B57A: 20 B3 A1 JSR $A1B3 ; load battle graphics 2F/B57D: A9 08 LDA #$08 ; hand cursor 2F/B57F: 20 B3 A1 JSR $A1B3 ; load battle graphics 2F/B582: A9 09 LDA #$09 ; item icons 2F/B584: 4C B3 A1 JMP $A1B3 ; load battle graphics ; ??? ppu addresses 2F/B587: 1490 14D0 1510 1550 ; [ update character sprites (no graphics load) ] 2F/B58F: 8A TXA 2F/B590: 48 PHA 2F/B591: 0A ASL 2F/B592: A8 TAY 2F/B593: B9 9B 7D LDA $7D9B,Y 2F/B596: 85 99 STA $99 2F/B598: B9 9C 7D LDA $7D9C,Y 2F/B59B: 85 9A STA $9A 2F/B59D: 20 07 B6 JSR $B607 ; update character sprite frame 2F/B5A0: 20 F2 B5 JSR $B5F2 ; update sprite flip for confuse 2F/B5A3: 20 2B B7 JSR $B72B ; update stone character data 2F/B5A6: 20 E8 AE JSR $AEE8 ; draw all character sprites 2F/B5A9: 20 80 FB JSR $FB80 ; wait for nmi 2F/B5AC: 20 AA F8 JSR $F8AA ; copy oam data to ppu 2F/B5AF: 20 C8 B6 JSR $B6C8 ; copy character stone data to ppu 2F/B5B2: 20 CB F8 JSR $F8CB ; update ppu registers 2F/B5B5: 68 PLA 2F/B5B6: AA TAX 2F/B5B7: 60 RTS ; [ update character sprites ] ; all characters 2F/B5B8: A2 00 LDX #$00 2F/B5BA: 20 C3 B5 JSR $B5C3 2F/B5BD: E8 INX 2F/B5BE: E0 04 CPX #$04 2F/B5C0: D0 F8 BNE $B5BA 2F/B5C2: 60 RTS ; [ update character sprites ] ; single character 2F/B5C3: 8A TXA 2F/B5C4: 48 PHA 2F/B5C5: 0A ASL 2F/B5C6: A8 TAY 2F/B5C7: B9 9B 7D LDA $7D9B,Y 2F/B5CA: 85 99 STA $99 2F/B5CC: B9 9C 7D LDA $7D9C,Y 2F/B5CF: 85 9A STA $9A 2F/B5D1: 20 51 B6 JSR $B651 ; load character graphics 2F/B5D4: 20 AB B6 JSR $B6AB ; update confused character position 2F/B5D7: 20 07 B6 JSR $B607 ; update character sprite frame 2F/B5DA: 20 F2 B5 JSR $B5F2 ; update sprite flip for confuse 2F/B5DD: 20 2B B7 JSR $B72B ; update stone character data 2F/B5E0: 20 E8 AE JSR $AEE8 ; draw all character sprites 2F/B5E3: 20 80 FB JSR $FB80 ; wait for nmi 2F/B5E6: 20 AA F8 JSR $F8AA ; copy oam data to ppu 2F/B5E9: 20 C8 B6 JSR $B6C8 ; copy character stone bg data to ppu 2F/B5EC: 20 CB F8 JSR $F8CB ; update ppu registers 2F/B5EF: 68 PLA 2F/B5F0: AA TAX 2F/B5F1: 60 RTS ; [ update sprite flip for confuse ] 2F/B5F2: A5 9A LDA $9A 2F/B5F4: 29 01 AND #$01 2F/B5F6: D0 0E BNE $B606 ; return if facing backwards (confuse) 2F/B5F8: A5 99 LDA $99 2F/B5FA: 29 08 AND #$08 2F/B5FC: F0 08 BEQ $B606 ; branch if not confused 2F/B5FE: BD 83 7D LDA $7D83,X 2F/B601: 09 80 ORA #$80 ; flip horizontally 2F/B603: 9D 83 7D STA $7D83,X 2F/B606: 60 RTS ; [ update character sprite frame ] 2F/B607: A5 99 LDA $99 2F/B609: 29 80 AND #$80 2F/B60B: F0 10 BEQ $B61D ; branch if not dead 2F/B60D: A5 99 LDA $99 2F/B60F: 29 05 AND #$05 2F/B611: F0 05 BEQ $B618 ; branch if not toad or mini 2F/B613: A9 10 LDA #$10 2F/B615: 4C 4D B6 JMP $B64D 2F/B618: A9 09 LDA #$09 2F/B61A: 4C 4D B6 JMP $B64D 2F/B61D: A5 99 LDA $99 2F/B61F: 29 40 AND #$40 2F/B621: F0 05 BEQ $B628 ; branch if not stone 2F/B623: A9 00 LDA #$00 2F/B625: 4C 4D B6 JMP $B64D 2F/B628: A5 99 LDA $99 2F/B62A: 29 32 AND #$32 ; paralyzed, asleep, confused 2F/B62C: 05 9A ORA $9A ; blind, poison, near fatal 2F/B62E: F0 10 BEQ $B640 2F/B630: A5 99 LDA $99 2F/B632: 29 05 AND #$05 2F/B634: F0 05 BEQ $B63B ; branch if not toad or mini 2F/B636: A9 0C LDA #$0C 2F/B638: 4C 4D B6 JMP $B64D 2F/B63B: A9 03 LDA #$03 ; kneeling 2F/B63D: 4C 4D B6 JMP $B64D 2F/B640: A5 99 LDA $99 2F/B642: 29 05 AND #$05 2F/B644: F0 05 BEQ $B64B 2F/B646: A9 0B LDA #$0B ; toad/mini animation frame 2F/B648: 4C 4D B6 JMP $B64D 2F/B64B: A9 02 LDA #$02 ; normal animation frame 2F/B64D: 9D 83 7D STA $7D83,X 2F/B650: 60 RTS ; [ load character graphics ] 2F/B651: A5 99 LDA $99 2F/B653: 29 80 AND #$80 2F/B655: F0 2B BEQ $B682 ; branch if not dead 2F/B657: A5 99 LDA $99 2F/B659: 29 05 AND #$05 2F/B65B: F0 1A BEQ $B677 ; branch if not toad or mini 2F/B65D: 29 04 AND #$04 2F/B65F: F0 0B BEQ $B66C ; toad + dead 2F/B661: BD A3 7D LDA $7DA3,X 2F/B664: C9 02 CMP #$02 2F/B666: F0 03 BEQ $B66B 2F/B668: 20 AB AA JSR $AAAB 2F/B66B: 60 RTS ; mini + dead 2F/B66C: BD A3 7D LDA $7DA3,X 2F/B66F: C9 03 CMP #$03 2F/B671: F0 03 BEQ $B676 2F/B673: 20 95 AA JSR $AA95 2F/B676: 60 RTS ; dead 2F/B677: BD A3 7D LDA $7DA3,X 2F/B67A: C9 01 CMP #$01 2F/B67C: F0 03 BEQ $B681 2F/B67E: 20 D6 AA JSR $AAD6 2F/B681: 60 RTS 2F/B682: A5 99 LDA $99 2F/B684: 29 05 AND #$05 2F/B686: F0 1A BEQ $B6A2 2F/B688: 29 04 AND #$04 2F/B68A: F0 0B BEQ $B697 ; toad 2F/B68C: BD A3 7D LDA $7DA3,X 2F/B68F: C9 02 CMP #$02 2F/B691: F0 03 BEQ $B696 2F/B693: 20 AB AA JSR $AAAB 2F/B696: 60 RTS ; mini 2F/B697: BD A3 7D LDA $7DA3,X 2F/B69A: C9 03 CMP #$03 2F/B69C: F0 03 BEQ $B6A1 2F/B69E: 20 95 AA JSR $AA95 2F/B6A1: 60 RTS ; normal 2F/B6A2: BD A3 7D LDA $7DA3,X 2F/B6A5: F0 03 BEQ $B6AA 2F/B6A7: 20 C1 AA JSR $AAC1 2F/B6AA: 60 RTS ; [ update confused character position ] ; move forward if confused ; move back if not confused 2F/B6AB: A5 99 LDA $99 2F/B6AD: 29 08 AND #$08 2F/B6AF: F0 0B BEQ $B6BC ; branch if not confused 2F/B6B1: B5 C0 LDA $C0,X 2F/B6B3: C9 B0 CMP #$B0 2F/B6B5: F0 10 BEQ $B6C7 2F/B6B7: A9 06 LDA #$06 2F/B6B9: 4C 4E AF JMP $AF4E ; execute battle graphics 2F/B6BC: B5 C0 LDA $C0,X 2F/B6BE: C9 B0 CMP #$B0 2F/B6C0: D0 05 BNE $B6C7 2F/B6C2: A9 05 LDA #$05 2F/B6C4: 4C 4E AF JMP $AF4E ; execute battle graphics 2F/B6C7: 60 RTS ; [ copy character stone bg data to ppu ] ; characters with stone status are drawn on the bg, not with sprites 2F/B6C8: A2 00 LDX #$00 2F/B6CA: A0 00 LDY #$00 2F/B6CC: AD C7 7D LDA $7DC7 2F/B6CF: 85 7E STA $7E 2F/B6D1: AD C8 7D LDA $7DC8 2F/B6D4: 85 7F STA $7F 2F/B6D6: 2C 02 20 BIT $2002 2F/B6D9: AD C6 7D LDA $7DC6 2F/B6DC: 8D 06 20 STA $2006 2F/B6DF: AD C5 7D LDA $7DC5 2F/B6E2: 8D 06 20 STA $2006 2F/B6E5: 20 48 AF JSR $AF48 ; check back attack 2F/B6E8: F0 10 BEQ $B6FA 2F/B6EA: A0 00 LDY #$00 2F/B6EC: B1 7E LDA ($7E),Y 2F/B6EE: 8D 07 20 STA $2007 2F/B6F1: C8 INY 2F/B6F2: B1 7E LDA ($7E),Y 2F/B6F4: 8D 07 20 STA $2007 2F/B6F7: 4C 07 B7 JMP $B707 2F/B6FA: A0 01 LDY #$01 2F/B6FC: B1 7E LDA ($7E),Y 2F/B6FE: 8D 07 20 STA $2007 2F/B701: 88 DEY 2F/B702: B1 7E LDA ($7E),Y 2F/B704: 8D 07 20 STA $2007 2F/B707: A5 7E LDA $7E 2F/B709: 18 CLC 2F/B70A: 69 02 ADC #$02 2F/B70C: 85 7E STA $7E 2F/B70E: A5 7F LDA $7F 2F/B710: 69 00 ADC #$00 2F/B712: 85 7F STA $7F 2F/B714: AD C5 7D LDA $7DC5 2F/B717: 18 CLC 2F/B718: 69 20 ADC #$20 2F/B71A: 8D C5 7D STA $7DC5 2F/B71D: AD C6 7D LDA $7DC6 2F/B720: 69 00 ADC #$00 2F/B722: 8D C6 7D STA $7DC6 2F/B725: CE C9 7D DEC $7DC9 2F/B728: D0 AC BNE $B6D6 2F/B72A: 60 RTS ; [ update stone character data ] ; X: character id 2F/B72B: 8A TXA 2F/B72C: 48 PHA 2F/B72D: A5 99 LDA $99 2F/B72F: 29 C0 AND #$C0 2F/B731: C9 40 CMP #$40 2F/B733: D0 33 BNE $B768 ; branch if not stone 2F/B735: 8A TXA 2F/B736: 0A ASL 2F/B737: 0A ASL 2F/B738: 0A ASL 2F/B739: A8 TAY 2F/B73A: A5 99 LDA $99 2F/B73C: 29 05 AND #$05 2F/B73E: F0 1C BEQ $B75C ; branch if not toad or mini 2F/B740: 29 04 AND #$04 2F/B742: F0 0C BEQ $B750 ; toad + stone 2F/B744: 98 TYA 2F/B745: 18 CLC 2F/B746: 69 ED ADC #$ED ; 2F/B7ED 2F/B748: A8 TAY 2F/B749: A9 B7 LDA #$B7 2F/B74B: 69 00 ADC #$00 2F/B74D: 4C 6C B7 JMP $B76C ; mini + stone 2F/B750: 98 TYA 2F/B751: 18 CLC 2F/B752: 69 0D ADC #$0D ; 2F/B80D 2F/B754: A8 TAY 2F/B755: A9 B8 LDA #$B8 2F/B757: 69 00 ADC #$00 2F/B759: 4C 6C B7 JMP $B76C ; stone 2F/B75C: 98 TYA 2F/B75D: 18 CLC 2F/B75E: 69 CD ADC #$CD ; 2F/B7CD 2F/B760: A8 TAY 2F/B761: A9 B7 LDA #$B7 2F/B763: 69 00 ADC #$00 2F/B765: 4C 6C B7 JMP $B76C ; normal 2F/B768: A0 2D LDY #$2D ; 2F/B82D 2F/B76A: A9 B8 LDA #$B8 2F/B76C: 8C C7 7D STY $7DC7 2F/B76F: 8D C8 7D STA $7DC8 2F/B772: 8A TXA 2F/B773: BD BB B7 LDA $B7BB,X 2F/B776: 8D C9 7D STA $7DC9 2F/B779: 8A TXA 2F/B77A: 0A ASL 2F/B77B: A8 TAY 2F/B77C: B9 BF B7 LDA $B7BF,Y 2F/B77F: 85 7E STA $7E 2F/B781: B9 C0 B7 LDA $B7C0,Y 2F/B784: 85 7F STA $7F 2F/B786: A5 99 LDA $99 2F/B788: 29 08 AND #$08 2F/B78A: F0 07 BEQ $B793 ; branch if not confused 2F/B78C: A9 02 LDA #$02 2F/B78E: 85 80 STA $80 2F/B790: 4C 9A B7 JMP $B79A 2F/B793: BD 8F 7D LDA $7D8F,X ; battle row 2F/B796: 29 01 AND #$01 2F/B798: 85 80 STA $80 2F/B79A: 20 48 AF JSR $AF48 ; check back attack 2F/B79D: D0 07 BNE $B7A6 2F/B79F: A5 80 LDA $80 2F/B7A1: 18 CLC 2F/B7A2: 69 03 ADC #$03 2F/B7A4: 85 80 STA $80 2F/B7A6: A4 80 LDY $80 2F/B7A8: B9 C7 B7 LDA $B7C7,Y 2F/B7AB: 18 CLC 2F/B7AC: 65 7E ADC $7E 2F/B7AE: 8D C5 7D STA $7DC5 2F/B7B1: A5 7F LDA $7F 2F/B7B3: 69 00 ADC #$00 2F/B7B5: 8D C6 7D STA $7DC6 2F/B7B8: 68 PLA 2F/B7B9: AA TAX 2F/B7BA: 60 RTS ; number of bg rows to load for each character 2F/B7BB: 04 03 04 03 ; ppu address for each character 2F/B7BF: 20A0 2120 2180 2200 ; front row, back row, confused 2F/B7C7: 1A 1C 16 ; x offset for normal attack 2F/B7CA: 04 02 08 ; x offset for back attack ; stone 2F/B7CD: 44 45 46 47 48 49 4A 4B 2F/B7D5: 4C 4D 4E 4F 50 51 00 00 2F/B7DD: 52 53 54 55 56 57 58 59 2F/B7E5: 5A 5B 5C 5D 5E 5F 00 00 ; toad + stone 2F/B7ED: 00 00 00 00 3A 38 3B 39 2F/B7F5: 00 00 00 00 3D 3C 00 00 2F/B7FD: 00 00 00 00 3A 38 3B 39 2F/B805: 00 00 00 00 3D 3C 00 00 ; mini + stone 2F/B80D: 00 00 00 00 40 3E 41 3F 2F/B815: 00 00 00 00 43 42 00 00 2F/B81D: 00 00 00 00 40 3E 41 3F 2F/B825: 00 00 00 00 43 42 00 00 ; normal 2F/B82D: 00 00 00 00 00 00 00 00 ; -------------------------------------------------------------------------- ; [ fade in monster ] ; for summon/split/toad ; uses the mmc3 irq to swap between ppu tilemap 0 and 1 every scanline ; using a buffer at $7300 similar to an snes hdma table 2F/B835: 20 48 AF JSR $AF48 ; check back attack 2F/B838: D0 11 BNE $B84B 2F/B83A: A9 A2 LDA #$A2 ; ppu $20A2 (tilemap 0, row 5, column 2) 2F/B83C: A2 20 LDX #$20 2F/B83E: 20 BB B9 JSR $B9BB 2F/B841: A9 A2 LDA #$A2 ; ppu $24A2 (tilemap 1, row 5, column 2) 2F/B843: A2 24 LDX #$24 2F/B845: 20 04 BA JSR $BA04 2F/B848: 4C 59 B8 JMP $B859 2F/B84B: A9 B6 LDA #$B6 ; ppu $20B6 (tilemap 0, row 5, column 22) 2F/B84D: A2 20 LDX #$20 2F/B84F: 20 BB B9 JSR $B9BB 2F/B852: A9 B6 LDA #$B6 ; ppu $24B6 (tilemap 1, row 5, column 22) 2F/B854: A2 24 LDX #$24 2F/B856: 20 04 BA JSR $BA04 2F/B859: A2 00 LDX #$00 2F/B85B: A5 06 LDA $06 2F/B85D: 29 FE AND #$FE 2F/B85F: 9D 00 73 STA $7300,X ; use tilemap 0 2F/B862: E8 INX 2F/B863: D0 FA BNE $B85F 2F/B865: 09 01 ORA #$01 ; use tilemap 1 2F/B867: A0 00 LDY #$00 2F/B869: BE 01 B9 LDX $B901,Y 2F/B86C: 9D A0 73 STA $73A0,X ; 2F/B86F: C8 INY 2F/B870: C0 08 CPY #$08 2F/B872: D0 F5 BNE $B869 2F/B874: A2 00 LDX #$00 2F/B876: 9D C0 73 STA $73C0,X 2F/B879: E8 INX 2F/B87A: E0 32 CPX #$32 2F/B87C: D0 F8 BNE $B876 2F/B87E: A9 87 LDA #$87 ; play sound effect 7 2F/B880: 8D 49 7F STA $7F49 2F/B883: A9 00 LDA #$00 ; clear frame counter 2F/B885: 85 90 STA $90 2F/B887: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) ; start of frame loop 2F/B88A: A9 26 LDA #$26 ; irq at scanline 38 (battle bg ends at 40) 2F/B88C: 85 03 STA $03 2F/B88E: 20 80 FB JSR $FB80 ; wait for nmi 2F/B891: 2C 02 20 BIT $2002 2F/B894: A9 00 LDA #$00 2F/B896: 8D 06 20 STA $2006 2F/B899: 8D 06 20 STA $2006 2F/B89C: 20 CB F8 JSR $F8CB ; update ppu registers 2F/B89F: A5 06 LDA $06 2F/B8A1: 85 08 STA $08 2F/B8A3: A0 00 LDY #$00 2F/B8A5: A2 00 LDX #$00 ; X counts scanlines 2F/B8A7: E6 AA INC $AA ; disable ppu update at irq 2F/B8A9: 20 79 FB JSR $FB79 ; wait for irq ; start of scanline loop (2 scanlines per loop ???) 2F/B8AC: A9 01 LDA #$01 2F/B8AE: 8D 00 C0 STA $C000 2F/B8B1: 8D 01 E0 STA $E001 2F/B8B4: B9 00 73 LDA $7300,Y ; set ppu control 2F/B8B7: 85 08 STA $08 2F/B8B9: 48 PHA 2F/B8BA: 20 79 FB JSR $FB79 ; wait for irq 2F/B8BD: 68 PLA 2F/B8BE: 8D 00 20 STA $2000 2F/B8C1: C8 INY 2F/B8C2: B9 00 73 LDA $7300,Y 2F/B8C5: 85 08 STA $08 2F/B8C7: A9 05 LDA #$05 ; wait a few cycles 2F/B8C9: 85 7E STA $7E 2F/B8CB: C6 7E DEC $7E 2F/B8CD: D0 FC BNE $B8CB 2F/B8CF: A5 08 LDA $08 2F/B8D1: 8D 00 20 STA $2000 2F/B8D4: C8 INY 2F/B8D5: E8 INX 2F/B8D6: E0 36 CPX #$36 ; 108 scanlines, 13.5 rows of 8x8 tiles 2F/B8D8: D0 D2 BNE $B8AC ; end of scanline loop 2F/B8DA: A9 00 LDA #$00 2F/B8DC: 85 AA STA $AA ; enable ppu update at irq 2F/B8DE: A9 01 LDA #$01 2F/B8E0: 8D 00 C0 STA $C000 ; 1 scanline 2F/B8E3: 8D 01 E0 STA $E001 ; enable irq 2F/B8E6: A9 98 LDA #$98 ; use tilemap 0 2F/B8E8: 85 08 STA $08 2F/B8EA: 20 79 FB JSR $FB79 ; wait for irq 2F/B8ED: 20 A7 B9 JSR $B9A7 ; shift scanline data for monster fade in 2F/B8F0: E6 90 INC $90 2F/B8F2: A5 90 LDA $90 2F/B8F4: C9 4D CMP #$4D ; 77 frames 2F/B8F6: D0 92 BNE $B88A ; end of frame loop 2F/B8F8: A9 98 LDA #$98 ; use tilemap 0 2F/B8FA: 85 08 STA $08 2F/B8FC: A9 97 LDA #$97 ; irq at scanline 151 (menu) 2F/B8FE: 85 03 STA $03 2F/B900: 60 RTS ; scanlines to switch to tilemap 1 2F/B901: 00 08 0E 13 17 1A 1D 1F ; [ update number of monsters remaining ] 2F/B909: A0 00 LDY #$00 2F/B90B: 84 80 STY $80 2F/B90D: 84 7E STY $7E 2F/B90F: 20 27 B9 JSR $B927 ; count monsters 2F/B912: A5 7F LDA $7F 2F/B914: 99 CE 7D STA $7DCE,Y ; number of monsters of each type 2F/B917: 18 CLC 2F/B918: 65 80 ADC $80 2F/B91A: 85 80 STA $80 2F/B91C: C8 INY 2F/B91D: C0 04 CPY #$04 2F/B91F: D0 EC BNE $B90D 2F/B921: A5 80 LDA $80 2F/B923: 8D D2 7D STA $7DD2 ; total number of monsters remaining 2F/B926: 60 RTS ; [ count monsters of one type ] ; $7E: monster type ; $7F: count (out) 2F/B927: A2 00 LDX #$00 2F/B929: 86 7F STX $7F 2F/B92B: BD A7 7D LDA $7DA7,X 2F/B92E: C5 7E CMP $7E 2F/B930: D0 02 BNE $B934 2F/B932: E6 7F INC $7F 2F/B934: E8 INX 2F/B935: E0 08 CPX #$08 2F/B937: D0 F2 BNE $B92B 2F/B939: 60 RTS ; [ split animation ] 2F/B93A: 86 7E STX $7E 2F/B93C: A2 00 LDX #$00 2F/B93E: BD A7 7D LDA $7DA7,X ; monster type 2F/B941: C9 FF CMP #$FF 2F/B943: F0 06 BEQ $B94B ; branch if not valid 2F/B945: E8 INX 2F/B946: E0 06 CPX #$06 2F/B948: D0 F4 BNE $B93E 2F/B94A: 60 RTS 2F/B94B: A5 7E LDA $7E 2F/B94D: 9D A7 7D STA $7DA7,X 2F/B950: 9D CD 7E STA $7ECD,X 2F/B953: 20 6F B9 JSR $B96F 2F/B956: 4C 09 B9 JMP $B909 ; update number of monsters remaining ; [ monster summon animation ] 2F/B959: 8D CA 7D STA $7DCA 2F/B95C: 85 7E STA $7E 2F/B95E: A2 00 LDX #$00 2F/B960: 06 7E ASL $7E 2F/B962: 90 06 BCC $B96A 2F/B964: BD AF 7D LDA $7DAF,X ; set monster type for living monsters 2F/B967: 9D A7 7D STA $7DA7,X 2F/B96A: E8 INX 2F/B96B: E0 08 CPX #$08 2F/B96D: D0 F1 BNE $B960 ; fallthrough ; [ monster summon/split ] ; 1. load the new monster tilemap into ppu tilemap 1 ; 2. fade in the new monster by swapping tilemaps with irq ; 3. load the new tilemap into tilemap 0 and swap back over 2F/B96F: 20 62 A3 JSR $A362 ; clear monster tilemap 2F/B972: 20 47 A2 JSR $A247 ; update monster positions 2F/B975: 20 09 B9 JSR $B909 ; update number of monsters remaining 2F/B978: 20 B1 A6 JSR $A6B1 ; update monster attribute table 2F/B97B: 20 34 AF JSR $AF34 ; copy attribute table to ppu 2F/B97E: A9 A0 LDA #$A0 ; ppu $24A0 2F/B980: A2 24 LDX #$24 2F/B982: 20 4A BA JSR $BA4A ; copy monster tilemap to ppu 2F/B985: 20 35 B8 JSR $B835 ; fade in monster 2F/B988: A5 06 LDA $06 2F/B98A: 09 01 ORA #$01 ; swap to tilemap 1 2F/B98C: 85 06 STA $06 2F/B98E: 20 80 FB JSR $FB80 ; wait for nmi 2F/B991: 20 CB F8 JSR $F8CB ; update ppu registers 2F/B994: A9 A0 LDA #$A0 ; ppu $20A0 2F/B996: A2 20 LDX #$20 2F/B998: 20 4A BA JSR $BA4A ; copy monster tilemap to ppu 2F/B99B: A5 06 LDA $06 2F/B99D: 29 FE AND #$FE ; swap back to tilemap 0 2F/B99F: 85 06 STA $06 2F/B9A1: 20 80 FB JSR $FB80 ; wait for nmi 2F/B9A4: 4C CB F8 JMP $F8CB ; update ppu registers ; [ shift scanline data for monster fade in ] 2F/B9A7: A2 00 LDX #$00 2F/B9A9: A4 90 LDY $90 2F/B9AB: B9 70 73 LDA $7370,Y 2F/B9AE: 9D 00 73 STA $7300,X 2F/B9B1: 9D 37 73 STA $7337,X 2F/B9B4: C8 INY 2F/B9B5: E8 INX 2F/B9B6: E0 37 CPX #$37 2F/B9B8: D0 F1 BNE $B9AB 2F/B9BA: 60 RTS ; [ ] 2F/B9BB: 85 7E STA $7E 2F/B9BD: 86 7F STX $7F 2F/B9BF: 2C 02 20 BIT $2002 2F/B9C2: A2 00 LDX #$00 2F/B9C4: A9 02 LDA #$02 ; 2 frames 2F/B9C6: 85 83 STA $83 2F/B9C8: A9 07 LDA #$07 ; 7 16x16 rows ??? 2F/B9CA: 85 82 STA $82 2F/B9CC: 20 80 FB JSR $FB80 ; wait for nmi 2F/B9CF: 2C 02 20 BIT $2002 2F/B9D2: A5 7F LDA $7F 2F/B9D4: 8D 06 20 STA $2006 2F/B9D7: A5 7E LDA $7E 2F/B9D9: 8D 06 20 STA $2006 2F/B9DC: A0 08 LDY #$08 2F/B9DE: AD 07 20 LDA $2007 2F/B9E1: AD 07 20 LDA $2007 2F/B9E4: 9D 00 73 STA $7300,X 2F/B9E7: E8 INX 2F/B9E8: 88 DEY 2F/B9E9: D0 F6 BNE $B9E1 2F/B9EB: A5 7E LDA $7E 2F/B9ED: 18 CLC 2F/B9EE: 69 20 ADC #$20 2F/B9F0: 85 7E STA $7E 2F/B9F2: A5 7F LDA $7F 2F/B9F4: 69 00 ADC #$00 2F/B9F6: 85 7F STA $7F 2F/B9F8: C6 82 DEC $82 2F/B9FA: D0 D3 BNE $B9CF 2F/B9FC: 20 CB F8 JSR $F8CB ; update ppu registers 2F/B9FF: C6 83 DEC $83 2F/BA01: D0 C5 BNE $B9C8 2F/BA03: 60 RTS ; [ ] 2F/BA04: 85 7E STA $7E 2F/BA06: 86 7F STX $7F 2F/BA08: 2C 02 20 BIT $2002 2F/BA0B: A2 00 LDX #$00 2F/BA0D: A9 02 LDA #$02 2F/BA0F: 85 83 STA $83 2F/BA11: A9 07 LDA #$07 2F/BA13: 85 82 STA $82 2F/BA15: 20 80 FB JSR $FB80 ; wait for nmi 2F/BA18: 2C 02 20 BIT $2002 2F/BA1B: A5 7F LDA $7F 2F/BA1D: 8D 06 20 STA $2006 2F/BA20: A5 7E LDA $7E 2F/BA22: 8D 06 20 STA $2006 2F/BA25: A0 08 LDY #$08 2F/BA27: BD 00 73 LDA $7300,X 2F/BA2A: 8D 07 20 STA $2007 2F/BA2D: E8 INX 2F/BA2E: 88 DEY 2F/BA2F: D0 F6 BNE $BA27 2F/BA31: A5 7E LDA $7E 2F/BA33: 18 CLC 2F/BA34: 69 20 ADC #$20 2F/BA36: 85 7E STA $7E 2F/BA38: A5 7F LDA $7F 2F/BA3A: 69 00 ADC #$00 2F/BA3C: 85 7F STA $7F 2F/BA3E: C6 82 DEC $82 2F/BA40: D0 D6 BNE $BA18 2F/BA42: 20 CB F8 JSR $F8CB ; update ppu registers 2F/BA45: C6 83 DEC $83 2F/BA47: D0 C8 BNE $BA11 2F/BA49: 60 RTS ; [ copy monster tilemap to ppu ] ; XA: ppu address ($20A0 for tilemap 0, $24A0 for tilemap 1) 2F/BA4A: 85 80 STA $80 2F/BA4C: 86 81 STX $81 2F/BA4E: A9 00 LDA #$00 2F/BA50: 85 7E STA $7E 2F/BA52: A9 79 LDA #$79 2F/BA54: 85 7F STA $7F 2F/BA56: A9 07 LDA #$07 ; 7 rows of 16x16 tiles 2F/BA58: 85 86 STA $86 2F/BA5A: 20 48 AF JSR $AF48 ; check back attack 2F/BA5D: D0 0A BNE $BA69 2F/BA5F: A9 08 LDA #$08 2F/BA61: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/BA64: A9 08 LDA #$08 2F/BA66: 20 FE F8 JSR $F8FE ; add to +$80 2F/BA69: 20 80 FB JSR $FB80 ; wait for nmi 2F/BA6C: 20 8E BA JSR $BA8E 2F/BA6F: A9 20 LDA #$20 2F/BA71: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/BA74: A9 20 LDA #$20 2F/BA76: 20 FE F8 JSR $F8FE ; add to +$80 2F/BA79: 20 8E BA JSR $BA8E 2F/BA7C: A9 20 LDA #$20 2F/BA7E: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/BA81: A9 20 LDA #$20 2F/BA83: 20 FE F8 JSR $F8FE ; add to +$80 2F/BA86: 20 CB F8 JSR $F8CB ; update ppu registers 2F/BA89: C6 86 DEC $86 2F/BA8B: D0 DC BNE $BA69 2F/BA8D: 60 RTS ; [ ] ; +$80: ppu address 2F/BA8E: A5 81 LDA $81 2F/BA90: A6 80 LDX $80 2F/BA92: 20 E0 F8 JSR $F8E0 ; set ppu address 2F/BA95: A0 00 LDY #$00 2F/BA97: B1 7E LDA ($7E),Y 2F/BA99: 8D 07 20 STA $2007 2F/BA9C: C8 INY 2F/BA9D: C0 16 CPY #$16 ; copy 22 bytes 2F/BA9F: D0 F6 BNE $BA97 2F/BAA1: 60 RTS ; [ clear target monster slots ] 2F/BAA2: AD CA 7D LDA $7DCA ; slots to hide 2F/BAA5: 85 7E STA $7E 2F/BAA7: A2 00 LDX #$00 2F/BAA9: 06 7E ASL $7E 2F/BAAB: 90 05 BCC $BAB2 2F/BAAD: A9 FF LDA #$FF 2F/BAAF: 9D A7 7D STA $7DA7,X ; clear monster slot 2F/BAB2: E8 INX 2F/BAB3: E0 08 CPX #$08 2F/BAB5: D0 F2 BNE $BAA9 2F/BAB7: 4C 62 A3 JMP $A362 ; clear monster tilemap ; [ update monster tilemap for toad/mini ] ; A: monsters affected ; this looks similar to the summon/split code, so it seems like the devs ; had originally planned to have monsters stay in the battle as toad/mini 2F/BABA: 48 PHA 2F/BABB: 20 B1 A6 JSR $A6B1 ; update monster attribute table 2F/BABE: 20 34 AF JSR $AF34 ; copy attribute table to ppu 2F/BAC1: 68 PLA 2F/BAC2: 20 EE BA JSR $BAEE ; add dead monsters granting experience 2F/BAC5: 20 A2 BA JSR $BAA2 ; clear target monster slots 2F/BAC8: 20 47 A2 JSR $A247 ; update monster positions 2F/BACB: 20 09 B9 JSR $B909 ; update number of monsters remaining 2F/BACE: A9 A0 LDA #$A0 ; ppu $24A0 2F/BAD0: A2 24 LDX #$24 2F/BAD2: 20 4A BA JSR $BA4A ; copy monster tilemap to ppu 2F/BAD5: A5 06 LDA $06 2F/BAD7: 09 01 ORA #$01 ; swap to tilemap 1 2F/BAD9: 85 06 STA $06 2F/BADB: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 2F/BADE: A9 A0 LDA #$A0 ; ppu $20A0 2F/BAE0: A2 20 LDX #$20 2F/BAE2: 20 4A BA JSR $BA4A ; copy monster tilemap to ppu 2F/BAE5: A5 06 LDA $06 2F/BAE7: 29 FE AND #$FE ; swap back to tilemap 0 2F/BAE9: 85 06 STA $06 2F/BAEB: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; [ add dead monsters granting experience ] ; A: targets 2F/BAEE: 8D CA 7D STA $7DCA 2F/BAF1: 85 7E STA $7E 2F/BAF3: A0 00 LDY #$00 2F/BAF5: 06 7E ASL $7E 2F/BAF7: 90 0B BCC $BB04 2F/BAF9: B9 A7 7D LDA $7DA7,Y 2F/BAFC: C9 FF CMP #$FF 2F/BAFE: F0 04 BEQ $BB04 ; monster slot is already cleared 2F/BB00: AA TAX 2F/BB01: FE D3 7D INC $7DD3,X ; dead monster grants experience 2F/BB04: C8 INY 2F/BB05: C0 08 CPY #$08 2F/BB07: D0 EC BNE $BAF5 2F/BB09: 60 RTS ; [ monster death animations ] 2F/BB0A: 20 EE BA JSR $BAEE ; add dead monsters granting experience 2F/BB0D: AD CA 7D LDA $7DCA 2F/BB10: 4C 5E BB JMP $BB5E ; [ ] 2F/BB13: A9 16 LDA #$16 ; $7916 2F/BB15: 85 7E STA $7E 2F/BB17: A9 79 LDA #$79 2F/BB19: 85 7F STA $7F 2F/BB1B: A2 0E LDX #$0E 2F/BB1D: A0 00 LDY #$00 2F/BB1F: A9 01 LDA #$01 2F/BB21: 91 7E STA ($7E),Y 2F/BB23: C8 INY 2F/BB24: C0 0A CPY #$0A 2F/BB26: D0 F7 BNE $BB1F 2F/BB28: A9 20 LDA #$20 2F/BB2A: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/BB2D: CA DEX 2F/BB2E: D0 ED BNE $BB1D 2F/BB30: 60 RTS ; [ save character sprite data ] 2F/BB31: A2 00 LDX #$00 2F/BB33: BD A0 02 LDA $02A0,X 2F/BB36: 9D 00 02 STA $0200,X 2F/BB39: A9 F0 LDA #$F0 2F/BB3B: 9D A0 02 STA $02A0,X 2F/BB3E: E8 INX 2F/BB3F: E0 60 CPX #$60 2F/BB41: D0 F0 BNE $BB33 2F/BB43: 60 RTS ; [ restore character sprite data ] 2F/BB44: A2 00 LDX #$00 2F/BB46: BD 00 02 LDA $0200,X 2F/BB49: 9D A0 02 STA $02A0,X 2F/BB4C: E8 INX 2F/BB4D: E0 60 CPX #$60 2F/BB4F: D0 F5 BNE $BB46 2F/BB51: A9 F0 LDA #$F0 2F/BB53: A2 00 LDX #$00 2F/BB55: 9D 00 02 STA $0200,X 2F/BB58: E8 INX 2F/BB59: E0 A0 CPX #$A0 2F/BB5B: D0 F8 BNE $BB55 2F/BB5D: 60 RTS ; [ monster death/run away animations ] 2F/BB5E: 85 7E STA $7E 2F/BB60: 8D CA 7D STA $7DCA 2F/BB63: 20 31 BB JSR $BB31 ; save character sprite data 2F/BB66: A9 0F LDA #$0F 2F/BB68: A2 00 LDX #$00 2F/BB6A: 9D 13 7D STA $7D13,X ; set animation color palette to black 2F/BB6D: E8 INX 2F/BB6E: E0 04 CPX #$04 2F/BB70: D0 F8 BNE $BB6A 2F/BB72: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 2F/BB75: 20 A2 BA JSR $BAA2 ; clear target monster slots 2F/BB78: 20 13 BB JSR $BB13 2F/BB7B: 20 47 A2 JSR $A247 ; update monster positions 2F/BB7E: 20 09 B9 JSR $B909 ; update number of monsters remaining 2F/BB81: AD 7B 7D LDA $7D7B 2F/BB84: C9 09 CMP #$09 2F/BB86: D0 0C BNE $BB94 2F/BB88: AD 68 7D LDA $7D68 2F/BB8B: 0A ASL 2F/BB8C: 10 06 BPL $BB94 ; branch if not a boss 2F/BB8E: 20 A4 BE JSR $BEA4 ; boss death 2F/BB91: 4C 44 BB JMP $BB44 ; restore character sprite data ; normal monster death 2F/BB94: A9 FF LDA #$FF ; create gradient graphics ??? 2F/BB96: 85 7E STA $7E 2F/BB98: 85 7F STA $7F 2F/BB9A: 85 80 STA $80 2F/BB9C: 29 80 AND #$80 2F/BB9E: 85 81 STA $81 2F/BBA0: A9 00 LDA #$00 2F/BBA2: 85 82 STA $82 2F/BBA4: A0 00 LDY #$00 2F/BBA6: A2 00 LDX #$00 2F/BBA8: B5 7E LDA $7E,X 2F/BBAA: 99 00 73 STA $7300,Y 2F/BBAD: E8 INX 2F/BBAE: C8 INY 2F/BBAF: E0 05 CPX #$05 2F/BBB1: D0 F5 BNE $BBA8 2F/BBB3: 46 7E LSR $7E 2F/BBB5: 66 7F ROR $7F 2F/BBB7: 66 80 ROR $80 2F/BBB9: 66 81 ROR $81 2F/BBBB: 66 82 ROR $82 2F/BBBD: C0 41 CPY #$41 2F/BBBF: D0 E5 BNE $BBA6 2F/BBC1: 20 48 AF JSR $AF48 ; check back attack 2F/BBC4: D0 2D BNE $BBF3 2F/BBC6: A9 01 LDA #$01 2F/BBC8: 8D CB 7D STA $7DCB 2F/BBCB: A9 00 LDA #$00 2F/BBCD: 8D CC 7D STA $7DCC 2F/BBD0: A9 09 LDA #$09 2F/BBD2: 85 82 STA $82 2F/BBD4: A9 08 LDA #$08 2F/BBD6: 85 83 STA $83 2F/BBD8: A9 07 LDA #$07 2F/BBDA: 85 84 STA $84 2F/BBDC: A9 01 LDA #$01 2F/BBDE: 85 85 STA $85 2F/BBE0: A9 C6 LDA #$C6 ; x scroll 2F/BBE2: 85 7E STA $7E 2F/BBE4: A9 20 LDA #$20 ; y scroll 2F/BBE6: 85 7F STA $7F 2F/BBE8: A9 26 LDA #$26 ; $7926 2F/BBEA: 85 80 STA $80 2F/BBEC: A9 79 LDA #$79 2F/BBEE: 85 81 STA $81 2F/BBF0: 4C 1D BC JMP $BC1D 2F/BBF3: A9 FF LDA #$FF 2F/BBF5: 8D CB 7D STA $7DCB 2F/BBF8: A9 FF LDA #$FF 2F/BBFA: 8D CC 7D STA $7DCC 2F/BBFD: A9 16 LDA #$16 2F/BBFF: 85 82 STA $82 2F/BC01: A9 17 LDA #$17 2F/BC03: 85 83 STA $83 2F/BC05: A9 18 LDA #$18 2F/BC07: 85 84 STA $84 2F/BC09: A9 01 LDA #$01 2F/BC0B: 85 85 STA $85 2F/BC0D: A9 D9 LDA #$D9 ; x scroll 2F/BC0F: 85 7E STA $7E 2F/BC11: A9 20 LDA #$20 ; y scroll 2F/BC13: 85 7F STA $7F 2F/BC15: A9 39 LDA #$39 ; $7939 2F/BC17: 85 80 STA $80 2F/BC19: A9 79 LDA #$79 2F/BC1B: 85 81 STA $81 2F/BC1D: A2 00 LDX #$00 2F/BC1F: A5 7E LDA $7E 2F/BC21: 9D 42 73 STA $7342,X 2F/BC24: A5 7F LDA $7F 2F/BC26: 9D 43 73 STA $7343,X 2F/BC29: A5 80 LDA $80 2F/BC2B: 9D 5C 73 STA $735C,X 2F/BC2E: A5 81 LDA $81 2F/BC30: 9D 5D 73 STA $735D,X 2F/BC33: A5 82 LDA $82 2F/BC35: 9D 80 73 STA $7380,X 2F/BC38: A5 85 LDA $85 2F/BC3A: 9D 81 73 STA $7381,X 2F/BC3D: 9D 9B 73 STA $739B,X 2F/BC40: 9D B5 73 STA $73B5,X 2F/BC43: A5 83 LDA $83 2F/BC45: 9D 9A 73 STA $739A,X 2F/BC48: A5 84 LDA $84 2F/BC4A: 9D B4 73 STA $73B4,X 2F/BC4D: A9 20 LDA #$20 2F/BC4F: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/BC52: A9 20 LDA #$20 2F/BC54: 20 FE F8 JSR $F8FE ; add to +$80 2F/BC57: E6 85 INC $85 2F/BC59: E8 INX 2F/BC5A: E8 INX 2F/BC5B: E0 1A CPX #$1A 2F/BC5D: D0 C0 BNE $BC1F 2F/BC5F: A9 25 LDA #$25 2F/BC61: 85 90 STA $90 2F/BC63: A9 B1 LDA #$B1 2F/BC65: 8D 49 7F STA $7F49 2F/BC68: 20 2A BD JSR $BD2A 2F/BC6B: A2 00 LDX #$00 2F/BC6D: BD 5C 73 LDA $735C,X 2F/BC70: 85 8C STA $8C 2F/BC72: BD 5D 73 LDA $735D,X 2F/BC75: 85 8D STA $8D 2F/BC77: A0 00 LDY #$00 2F/BC79: B1 8C LDA ($8C),Y 2F/BC7B: 9D 9E 7E STA $7E9E,X 2F/BC7E: E8 INX 2F/BC7F: E8 INX 2F/BC80: E0 1A CPX #$1A 2F/BC82: D0 E9 BNE $BC6D 2F/BC84: 20 80 FB JSR $FB80 ; wait for nmi 2F/BC87: 20 80 FB JSR $FB80 ; wait for nmi 2F/BC8A: 20 AA F8 JSR $F8AA ; copy oam data to ppu 2F/BC8D: 2C 02 20 BIT $2002 2F/BC90: A2 00 LDX #$00 2F/BC92: BD 9E 7E LDA $7E9E,X 2F/BC95: C9 01 CMP #$01 2F/BC97: F0 0F BEQ $BCA8 2F/BC99: BC 43 73 LDY $7343,X 2F/BC9C: 8C 06 20 STY $2006 2F/BC9F: BC 42 73 LDY $7342,X 2F/BCA2: 8C 06 20 STY $2006 2F/BCA5: 8D 07 20 STA $2007 2F/BCA8: E8 INX 2F/BCA9: E8 INX 2F/BCAA: E0 1A CPX #$1A 2F/BCAC: D0 E4 BNE $BC92 2F/BCAE: 20 CB F8 JSR $F8CB ; update ppu registers 2F/BCB1: A2 00 LDX #$00 2F/BCB3: A0 00 LDY #$00 2F/BCB5: 20 CF BC JSR $BCCF 2F/BCB8: 90 03 BCC $BCBD 2F/BCBA: 20 DF BC JSR $BCDF 2F/BCBD: C8 INY 2F/BCBE: C8 INY 2F/BCBF: E8 INX 2F/BCC0: E8 INX 2F/BCC1: E8 INX 2F/BCC2: E8 INX 2F/BCC3: E8 INX 2F/BCC4: C0 1A CPY #$1A 2F/BCC6: D0 ED BNE $BCB5 2F/BCC8: C6 90 DEC $90 2F/BCCA: D0 9C BNE $BC68 2F/BCCC: 4C 44 BB JMP $BB44 ; restore character sprite data ; [ ] ; monster death 2F/BCCF: 1E 04 73 ASL $7304,X 2F/BCD2: 3E 03 73 ROL $7303,X 2F/BCD5: 3E 02 73 ROL $7302,X 2F/BCD8: 3E 01 73 ROL $7301,X 2F/BCDB: 3E 00 73 ROL $7300,X 2F/BCDE: 60 RTS ; [ ] ; monster death 2F/BCDF: B9 42 73 LDA $7342,Y 2F/BCE2: 18 CLC 2F/BCE3: 6D CB 7D ADC $7DCB 2F/BCE6: 99 42 73 STA $7342,Y 2F/BCE9: B9 43 73 LDA $7343,Y 2F/BCEC: 6D CC 7D ADC $7DCC 2F/BCEF: 99 43 73 STA $7343,Y 2F/BCF2: B9 5C 73 LDA $735C,Y 2F/BCF5: 18 CLC 2F/BCF6: 6D CB 7D ADC $7DCB 2F/BCF9: 99 5C 73 STA $735C,Y 2F/BCFC: B9 5D 73 LDA $735D,Y 2F/BCFF: 6D CC 7D ADC $7DCC 2F/BD02: 99 5D 73 STA $735D,Y 2F/BD05: B9 80 73 LDA $7380,Y 2F/BD08: F0 07 BEQ $BD11 2F/BD0A: 18 CLC 2F/BD0B: 6D CB 7D ADC $7DCB 2F/BD0E: 99 80 73 STA $7380,Y 2F/BD11: B9 9A 73 LDA $739A,Y 2F/BD14: F0 07 BEQ $BD1D 2F/BD16: 18 CLC 2F/BD17: 6D CB 7D ADC $7DCB 2F/BD1A: 99 9A 73 STA $739A,Y 2F/BD1D: B9 B4 73 LDA $73B4,Y 2F/BD20: F0 07 BEQ $BD29 2F/BD22: 18 CLC 2F/BD23: 6D CB 7D ADC $7DCB 2F/BD26: 99 B4 73 STA $73B4,Y 2F/BD29: 60 RTS ; [ ] ; monster death 2F/BD2A: A9 F0 LDA #$F0 2F/BD2C: A2 00 LDX #$00 2F/BD2E: 9D 64 02 STA $0264,X 2F/BD31: E8 INX 2F/BD32: E0 9C CPX #$9C 2F/BD34: D0 F8 BNE $BD2E 2F/BD36: A9 00 LDA #$00 2F/BD38: 85 84 STA $84 2F/BD3A: A9 61 LDA #$61 2F/BD3C: 85 86 STA $86 2F/BD3E: A9 0D LDA #$0D 2F/BD40: 85 87 STA $87 2F/BD42: A2 00 LDX #$00 2F/BD44: BD 80 73 LDA $7380,X 2F/BD47: 85 7E STA $7E 2F/BD49: BD 81 73 LDA $7381,X 2F/BD4C: 85 7F STA $7F 2F/BD4E: 8A TXA 2F/BD4F: 48 PHA 2F/BD50: A5 7F LDA $7F 2F/BD52: A2 20 LDX #$20 2F/BD54: 20 EA F8 JSR $F8EA ; multiply 2F/BD57: 18 CLC 2F/BD58: 69 00 ADC #$00 2F/BD5A: 85 82 STA $82 2F/BD5C: 8A TXA 2F/BD5D: 69 79 ADC #$79 2F/BD5F: 85 83 STA $83 2F/BD61: 68 PLA 2F/BD62: AA TAX 2F/BD63: A5 82 LDA $82 2F/BD65: 18 CLC 2F/BD66: 65 7E ADC $7E 2F/BD68: 85 82 STA $82 2F/BD6A: A5 83 LDA $83 2F/BD6C: 69 00 ADC #$00 2F/BD6E: 85 83 STA $83 2F/BD70: A0 00 LDY #$00 2F/BD72: B1 82 LDA ($82),Y 2F/BD74: D0 33 BNE $BDA9 2F/BD76: A4 84 LDY $84 2F/BD78: A5 7F LDA $7F 2F/BD7A: 18 CLC 2F/BD7B: 69 05 ADC #$05 2F/BD7D: 0A ASL 2F/BD7E: 0A ASL 2F/BD7F: 0A ASL 2F/BD80: 38 SEC 2F/BD81: E9 01 SBC #$01 2F/BD83: 99 64 02 STA $0264,Y 2F/BD86: A5 86 LDA $86 2F/BD88: 99 65 02 STA $0265,Y 2F/BD8B: 20 48 AF JSR $AF48 ; check back attack 2F/BD8E: D0 05 BNE $BD95 2F/BD90: A9 43 LDA #$43 2F/BD92: 4C 97 BD JMP $BD97 2F/BD95: A9 03 LDA #$03 2F/BD97: 99 66 02 STA $0266,Y 2F/BD9A: A5 7E LDA $7E 2F/BD9C: 0A ASL 2F/BD9D: 0A ASL 2F/BD9E: 0A ASL 2F/BD9F: 99 67 02 STA $0267,Y 2F/BDA2: A5 84 LDA $84 2F/BDA4: 18 CLC 2F/BDA5: 69 04 ADC #$04 2F/BDA7: 85 84 STA $84 2F/BDA9: C6 87 DEC $87 2F/BDAB: D0 06 BNE $BDB3 2F/BDAD: E6 86 INC $86 2F/BDAF: A9 0D LDA #$0D 2F/BDB1: 85 87 STA $87 2F/BDB3: E8 INX 2F/BDB4: E8 INX 2F/BDB5: E0 4E CPX #$4E 2F/BDB7: D0 8B BNE $BD44 2F/BDB9: 60 RTS ; [ init monster positions ] 2F/BDBA: A9 FF LDA #$FF 2F/BDBC: A2 10 LDX #$10 2F/BDBE: 9D E6 7D STA $7DE6,X ; reset monster position data 2F/BDC1: 9D D6 7D STA $7DD6,X 2F/BDC4: 9D F6 7D STA $7DF6,X 2F/BDC7: CA DEX 2F/BDC8: D0 F4 BNE $BDBE 2F/BDCA: A2 04 LDX #$04 2F/BDCC: 9D 07 7E STA $7E07,X 2F/BDCF: CA DEX 2F/BDD0: D0 FA BNE $BDCC 2F/BDD2: AD 7B 7D LDA $7D7B ; monster tilemap id 2F/BDD5: 0A ASL 2F/BDD6: A8 TAY 2F/BDD7: B9 E6 A5 LDA $A5E6,Y ; pointer to monster position data 2F/BDDA: 85 7E STA $7E 2F/BDDC: B9 E7 A5 LDA $A5E7,Y 2F/BDDF: 85 7F STA $7F 2F/BDE1: A2 00 LDX #$00 ; start of monster loop 2F/BDE3: A0 02 LDY #$02 2F/BDE5: B1 7E LDA ($7E),Y ; monster size id 2F/BDE7: 0A ASL 2F/BDE8: A8 TAY 2F/BDE9: B9 CD A4 LDA $A4CD,Y ; monster height 2F/BDEC: 85 84 STA $84 2F/BDEE: 29 FE AND #$FE 2F/BDF0: 0A ASL 2F/BDF1: 0A ASL 2F/BDF2: 85 80 STA $80 2F/BDF4: 06 84 ASL $84 2F/BDF6: 06 84 ASL $84 2F/BDF8: 06 84 ASL $84 2F/BDFA: B9 CC A4 LDA $A4CC,Y ; monster width 2F/BDFD: 29 FE AND #$FE 2F/BDFF: 0A ASL 2F/BE00: 0A ASL 2F/BE01: 85 82 STA $82 2F/BE03: A0 00 LDY #$00 2F/BE05: B1 7E LDA ($7E),Y ; x position 2F/BE07: 38 SEC 2F/BE08: E9 01 SBC #$01 2F/BE0A: 85 81 STA $81 2F/BE0C: A5 81 LDA $81 2F/BE0E: 0A ASL 2F/BE0F: 0A ASL 2F/BE10: 0A ASL 2F/BE11: 9D F7 7D STA $7DF7,X ; front x position 2F/BE14: 9D E7 7D STA $7DE7,X 2F/BE17: 18 CLC 2F/BE18: 65 82 ADC $82 2F/BE1A: 69 08 ADC #$08 2F/BE1C: 9D D7 7D STA $7DD7,X ; center x position 2F/BE1F: C8 INY 2F/BE20: B1 7E LDA ($7E),Y ; y position 2F/BE22: 38 SEC 2F/BE23: E9 01 SBC #$01 2F/BE25: 0A ASL 2F/BE26: 0A ASL 2F/BE27: 0A ASL 2F/BE28: 38 SEC 2F/BE29: E9 01 SBC #$01 2F/BE2B: 9D F8 7D STA $7DF8,X ; top y position 2F/BE2E: 85 85 STA $85 2F/BE30: 18 CLC 2F/BE31: 65 80 ADC $80 2F/BE33: 9D E8 7D STA $7DE8,X ; center y position 2F/BE36: 9D D8 7D STA $7DD8,X 2F/BE39: 8A TXA 2F/BE3A: 4A LSR 2F/BE3B: A8 TAY 2F/BE3C: A5 84 LDA $84 2F/BE3E: 18 CLC 2F/BE3F: 65 85 ADC $85 2F/BE41: 99 07 7E STA $7E07,Y ; bottom y position 2F/BE44: E8 INX 2F/BE45: E8 INX 2F/BE46: A9 03 LDA #$03 2F/BE48: 20 F2 F8 JSR $F8F2 ; add to +$7E 2F/BE4B: A0 00 LDY #$00 2F/BE4D: B1 7E LDA ($7E),Y ; x position 2F/BE4F: C9 FF CMP #$FF 2F/BE51: D0 90 BNE $BDE3 ; branch if not terminator 2F/BE53: AD 7B 7D LDA $7D7B 2F/BE56: C9 09 CMP #$09 2F/BE58: D0 0A BNE $BE64 ; branch if not 18x12 monster tilemap 2F/BE5A: A9 58 LDA #$58 ; hard-coded position for monster 0 2F/BE5C: 8D D7 7D STA $7DD7 2F/BE5F: A9 50 LDA #$50 2F/BE61: 8D D8 7D STA $7DD8 2F/BE64: 60 RTS ; [ add to +$8C ] 2F/BE65: A2 00 LDX #$00 2F/BE67: 18 CLC 2F/BE68: 65 8C ADC $8C 2F/BE6A: 85 8C STA $8C 2F/BE6C: 8A TXA 2F/BE6D: 65 8D ADC $8D 2F/BE6F: 85 8D STA $8D 2F/BE71: 60 RTS ; [ add to +$8E ] 2F/BE72: A2 00 LDX #$00 2F/BE74: 18 CLC 2F/BE75: 65 8E ADC $8E 2F/BE77: 85 8E STA $8E 2F/BE79: 8A TXA 2F/BE7A: 65 8F ADC $8F 2F/BE7C: 85 8F STA $8F 2F/BE7E: 60 RTS ; number of 4-tile blocks for each boss 2F/BE7F: 10 14 14 12 0D 14 14 1C 24 0B 16 0E 06 06 06 06 2F/BE8F: 09 09 14 09 09 09 0E 0D ; [ boss entry ] 2F/BE97: A9 07 LDA #$07 2F/BE99: 85 88 STA $88 2F/BE9B: A9 FF LDA #$FF 2F/BE9D: 85 8A STA $8A 2F/BE9F: A9 00 LDA #$00 2F/BEA1: 4C AC BE JMP $BEAC ; [ boss death ] 2F/BEA4: A9 01 LDA #$01 2F/BEA6: 85 88 STA $88 2F/BEA8: 85 8A STA $8A 2F/BEAA: A9 BC LDA #$BC 2F/BEAC: 85 8B STA $8B 2F/BEAE: A5 8B LDA $8B 2F/BEB0: F0 0F BEQ $BEC1 2F/BEB2: AD EE 7C LDA $7CEE ; hi byte of battle index 2F/BEB5: F0 0A BEQ $BEC1 2F/BEB7: AD ED 7C LDA $7CED ; battle index 2F/BEBA: C9 78 CMP #$78 2F/BEBC: D0 03 BNE $BEC1 ; branch if not 2nd dark cloud battle 2F/BEBE: 4C 93 BF JMP $BF93 ; final boss death animation 2F/BEC1: A9 00 LDA #$00 2F/BEC3: 85 B7 STA $B7 2F/BEC5: 85 86 STA $86 2F/BEC7: 85 90 STA $90 ; start of loop 1 (one tile chunk per loop) 2F/BEC9: A5 8B LDA $8B 2F/BECB: F0 0B BEQ $BED8 2F/BECD: A5 86 LDA $86 2F/BECF: 29 03 AND #$03 2F/BED1: D0 05 BNE $BED8 2F/BED3: A5 8B LDA $8B 2F/BED5: 8D 49 7F STA $7F49 2F/BED8: A5 88 LDA $88 2F/BEDA: 85 91 STA $91 2F/BEDC: A9 08 LDA #$08 ; pixel shift counter 2F/BEDE: 85 89 STA $89 ; start of loop 2 (one pixel shift per loop) 2F/BEE0: A2 00 LDX #$00 2F/BEE2: 86 B6 STX $B6 2F/BEE4: 20 B8 A3 JSR $A3B8 ; get boss graphics pointer 2F/BEE7: A5 7E LDA $7E 2F/BEE9: 85 8C STA $8C 2F/BEEB: A5 7F LDA $7F 2F/BEED: 85 8D STA $8D 2F/BEEF: A5 80 LDA $80 2F/BEF1: 85 8E STA $8E 2F/BEF3: A5 81 LDA $81 2F/BEF5: 85 8F STA $8F 2F/BEF7: A5 90 LDA $90 2F/BEF9: A2 40 LDX #$40 2F/BEFB: 20 EA F8 JSR $F8EA ; multiply 2F/BEFE: 20 67 BE JSR $BE67 2F/BF01: A5 90 LDA $90 2F/BF03: A2 40 LDX #$40 2F/BF05: 20 EA F8 JSR $F8EA ; multiply 2F/BF08: 20 74 BE JSR $BE74 2F/BF0B: A5 8C LDA $8C 2F/BF0D: 85 7E STA $7E 2F/BF0F: A5 8D LDA $8D 2F/BF11: 85 7F STA $7F 2F/BF13: A9 00 LDA #$00 ; destination = $7900 2F/BF15: 85 80 STA $80 2F/BF17: A9 79 LDA #$79 2F/BF19: 85 81 STA $81 2F/BF1B: A9 40 LDA #$40 ; size = 64 bytes (4 tiles) 2F/BF1D: 85 82 STA $82 2F/BF1F: 20 2F F9 JSR $F92F ; load rom data 2F/BF22: A2 00 LDX #$00 2F/BF24: BD 00 79 LDA $7900,X 2F/BF27: 20 78 BF JSR $BF78 ; shift pixels 2F/BF2A: 9D 00 79 STA $7900,X 2F/BF2D: E8 INX 2F/BF2E: E0 40 CPX #$40 2F/BF30: D0 F2 BNE $BF24 2F/BF32: A5 91 LDA $91 2F/BF34: 18 CLC 2F/BF35: 65 8A ADC $8A 2F/BF37: 85 91 STA $91 2F/BF39: A9 00 LDA #$00 2F/BF3B: 85 7E STA $7E 2F/BF3D: A9 79 LDA #$79 2F/BF3F: 85 7F STA $7F 2F/BF41: A5 8E LDA $8E 2F/BF43: 85 80 STA $80 2F/BF45: A5 8F LDA $8F 2F/BF47: 85 81 STA $81 2F/BF49: A9 04 LDA #$04 2F/BF4B: 85 82 STA $82 2F/BF4D: AD 73 7D LDA $7D73 2F/BF50: 29 1F AND #$1F 2F/BF52: 48 PHA 2F/BF53: 0A ASL 2F/BF54: A8 TAY 2F/BF55: 20 0B A4 JSR $A40B ; copy monster graphics to ppu 2F/BF58: A9 40 LDA #$40 2F/BF5A: 20 65 BE JSR $BE65 2F/BF5D: A9 40 LDA #$40 2F/BF5F: 20 72 BE JSR $BE72 2F/BF62: 68 PLA 2F/BF63: AA TAX 2F/BF64: C6 89 DEC $89 2F/BF66: F0 03 BEQ $BF6B 2F/BF68: 4C E0 BE JMP $BEE0 2F/BF6B: E6 90 INC $90 2F/BF6D: A5 90 LDA $90 2F/BF6F: DD 7F BE CMP $BE7F,X 2F/BF72: F0 03 BEQ $BF77 2F/BF74: 4C C9 BE JMP $BEC9 2F/BF77: 60 RTS ; [ shift pixels ] ; $91: pixel shift ; $B6: even/odd row counter 2F/BF78: 48 PHA 2F/BF79: E6 B6 INC $B6 2F/BF7B: A4 91 LDY $91 2F/BF7D: F0 12 BEQ $BF91 ; adjacent rows go opposite directions 2F/BF7F: A5 B6 LDA $B6 2F/BF81: 29 01 AND #$01 2F/BF83: F0 06 BEQ $BF8B 2F/BF85: 68 PLA 2F/BF86: 4A LSR 2F/BF87: 88 DEY 2F/BF88: D0 FC BNE $BF86 2F/BF8A: 60 RTS 2F/BF8B: 68 PLA 2F/BF8C: 0A ASL 2F/BF8D: 88 DEY 2F/BF8E: D0 FC BNE $BF8C 2F/BF90: 60 RTS 2F/BF91: 68 PLA 2F/BF92: 60 RTS ; [ final boss death animation ] 2F/BF93: 20 7F B1 JSR $B17F 2F/BF96: A9 0C LDA #$0C ; fade out music 2F/BF98: 8D 42 7F STA $7F42 2F/BF9B: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 2F/BF9E: AD 42 7F LDA $7F42 2F/BFA1: D0 F8 BNE $BF9B ; wait for music to fade out 2F/BFA3: 20 16 B1 JSR $B116 2F/BFA6: A9 01 LDA #$01 ; final boss death animation 2F/BFA8: 85 7E STA $7E 2F/BFAA: 20 F5 7E JSR $7EF5 2F/BFAD: A9 00 LDA #$00 2F/BFAF: 20 B8 BF JSR $BFB8 2F/BFB2: A9 08 LDA #$08 ; set message speed to 8 2F/BFB4: 8D 10 60 STA $6010 2F/BFB7: 60 RTS ; [ ] 2F/BFB8: 85 90 STA $90 2F/BFBA: A9 00 LDA #$00 2F/BFBC: 85 B6 STA $B6 2F/BFBE: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 2F/BFC1: A5 B6 LDA $B6 2F/BFC3: 29 07 AND #$07 2F/BFC5: D0 05 BNE $BFCC 2F/BFC7: A5 90 LDA $90 2F/BFC9: 20 87 FA JSR $FA87 2F/BFCC: E6 B6 INC $B6 2F/BFCE: A5 B6 LDA $B6 2F/BFD0: C9 50 CMP #$50 2F/BFD2: D0 EA BNE $BFBE 2F/BFD4: 60 RTS 2F/BFD5: 00 00 00 00 00 00 00 00 00 00 00 2F/BFE0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 2F/BFF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; -------------------------------------------------------------------------- ; [ do battle algorithm ] 30/9E58: A5 4C LDA $4C 30/9E5A: 0A ASL 30/9E5B: 18 CLC 30/9E5C: 69 76 ADC #$76 ; 30/9E76 30/9E5E: 85 4C STA $4C 30/9E60: A9 00 LDA #$00 30/9E62: 69 9E ADC #$9E 30/9E64: 85 4D STA $4D 30/9E66: A0 00 LDY #$00 30/9E68: B1 4C LDA ($4C),Y 30/9E6A: 48 PHA 30/9E6B: C8 INY 30/9E6C: B1 4C LDA ($4C),Y 30/9E6E: 85 4D STA $4D 30/9E70: 68 PLA 30/9E71: 85 4C STA $4C 30/9E73: 6C 4C 00 JMP ($004C) ; battle algorithm jump table 30/9E76: AF77 A400 A732 9E8A A65E AA16 A2E9 BE9D 30/9E86: BEBF BF17 ; -------------------------------------------------------------------------- ; [ battle algorithm $03: do fight effect ] 30/9E8A: 20 BA A2 JSR $A2BA ; init attacker and target 30/9E8D: A6 64 LDX $64 30/9E8F: B5 E0 LDA $E0,X ; target status 30/9E91: 29 C0 AND #$C0 30/9E93: D0 0A BNE $9E9F ; branch if dead or stone 30/9E95: E8 INX 30/9E96: B5 E0 LDA $E0,X 30/9E98: 29 01 AND #$01 30/9E9A: D0 03 BNE $9E9F ; branch if jumping 30/9E9C: 4C D5 9E JMP $9ED5 ; retarget randomly 30/9E9F: A0 30 LDY #$30 30/9EA1: B1 6E LDA ($6E),Y 30/9EA3: 10 10 BPL $9EB5 ; branch if a character 30/9EA5: A9 75 LDA #$75 ; $7675 30/9EA7: 85 22 STA $22 30/9EA9: A9 76 LDA #$76 30/9EAB: 85 23 STA $23 30/9EAD: A9 07 LDA #$07 30/9EAF: 20 00 A3 JSR $A300 30/9EB2: 18 CLC 30/9EB3: 90 1D BCC $9ED2 30/9EB5: A9 75 LDA #$75 ; $7575 30/9EB7: 85 22 STA $22 30/9EB9: A9 75 LDA #$75 30/9EBB: 85 23 STA $23 30/9EBD: A9 03 LDA #$03 30/9EBF: 20 00 A3 JSR $A300 30/9EC2: A5 69 LDA $69 30/9EC4: F0 0C BEQ $9ED2 30/9EC6: A2 00 LDX #$00 30/9EC8: 8E C2 7E STX $7EC2 30/9ECB: CA DEX 30/9ECC: 8E D8 78 STX $78D8 30/9ECF: 4C 64 A2 JMP $A264 30/9ED2: 20 BA A2 JSR $A2BA ; init attacker and target 30/9ED5: A2 FF LDX #$FF 30/9ED7: 8E E1 7E STX $7EE1 30/9EDA: E8 INX 30/9EDB: 8E E9 7C STX $7CE9 30/9EDE: 86 7C STX $7C 30/9EE0: 86 7D STX $7D 30/9EE2: 8E 1E 74 STX $741E 30/9EE5: 86 6A STX $6A ; clear net damage 30/9EE7: 86 6B STX $6B 30/9EE9: 86 42 STX $42 30/9EEB: E8 INX 30/9EEC: 8E 1F 74 STX $741F ; 1 hand 30/9EEF: A0 03 LDY #$03 30/9EF1: B1 6E LDA ($6E),Y ; attacker hp 30/9EF3: 85 40 STA $40 30/9EF5: B1 70 LDA ($70),Y ; target hp 30/9EF7: 85 3C STA $3C 30/9EF9: C8 INY 30/9EFA: B1 6E LDA ($6E),Y 30/9EFC: 85 41 STA $41 30/9EFE: B1 70 LDA ($70),Y 30/9F00: 85 3D STA $3D 30/9F02: 20 B5 A2 JSR $A2B5 ; get attacker flags 30/9F05: 10 14 BPL $9F1B ; branch if a character 30/9F07: A5 74 LDA $74 30/9F09: F0 35 BEQ $9F40 ; branch if not trying to run 30/9F0B: 20 25 BC JSR $BC25 ; get target flags 30/9F0E: 30 30 BMI $9F40 ; branch if a monster 30/9F10: A0 27 LDY #$27 30/9F12: 18 CLC 30/9F13: B1 70 LDA ($70),Y ; running characters get jump/buildup penalty 30/9F15: 69 01 ADC #$01 30/9F17: 91 70 STA ($70),Y 30/9F19: D0 25 BNE $9F40 30/9F1B: A0 31 LDY #$31 30/9F1D: B1 6E LDA ($6E),Y ; right hand item type 30/9F1F: 30 16 BMI $9F37 ; branch if shield 30/9F21: 29 01 AND #$01 30/9F23: F0 12 BEQ $9F37 ; branch if harp, arrow, or bow 30/9F25: C8 INY 30/9F26: B1 6E LDA ($6E),Y ; left hand item type 30/9F28: 30 0D BMI $9F37 ; branch if shield 30/9F2A: 29 01 AND #$01 30/9F2C: F0 09 BEQ $9F37 ; branch if harp, arrow, or bow 30/9F2E: EE 1F 74 INC $741F ; 2 hands 30/9F31: EE 1E 74 INC $741E 30/9F34: 4C 40 9F JMP $9F40 30/9F37: A0 31 LDY #$31 30/9F39: B1 6E LDA ($6E),Y 30/9F3B: C8 INY 30/9F3C: 11 6E ORA ($6E),Y 30/9F3E: F0 EE BEQ $9F2E ; branch if unarmed in both hands 30/9F40: A0 16 LDY #$16 30/9F42: A2 00 LDX #$00 30/9F44: B1 6E LDA ($6E),Y ; copy attacker's attack stats 30/9F46: 9D 20 74 STA $7420,X 30/9F49: 9D 40 74 STA $7440,X 30/9F4C: C8 INY 30/9F4D: E8 INX 30/9F4E: E0 0A CPX #$0A 30/9F50: D0 F2 BNE $9F44 30/9F52: B1 70 LDA ($70),Y ; copy target's defense stats 30/9F54: 9D 20 74 STA $7420,X 30/9F57: C8 INY 30/9F58: E8 INX 30/9F59: E0 0F CPX #$0F 30/9F5B: D0 F5 BNE $9F52 30/9F5D: A0 27 LDY #$27 30/9F5F: B1 6E LDA ($6E),Y ; copy attacker's job modifiers 30/9F61: 9D 20 74 STA $7420,X 30/9F64: C8 INY 30/9F65: E8 INX 30/9F66: E0 12 CPX #$12 30/9F68: D0 F5 BNE $9F5F ; start of loop for 2 hands 30/9F6A: AD 41 74 LDA $7441 ; attack multiplier 30/9F6D: 85 24 STA $24 30/9F6F: AD 42 74 LDA $7442 ; hit % 30/9F72: 85 25 STA $25 30/9F74: A6 62 LDX $62 30/9F76: B5 F0 LDA $F0,X 30/9F78: 29 04 AND #$04 30/9F7A: F0 02 BEQ $9F7E ; branch if attacker is not blind 30/9F7C: 46 25 LSR $25 ; halve hit % 30/9F7E: A0 33 LDY #$33 30/9F80: B1 6E LDA ($6E),Y 30/9F82: 29 04 AND #$04 30/9F84: D0 20 BNE $9FA6 ; branch if harp or bow + arrow 30/9F86: A0 2C LDY #$2C 30/9F88: B1 6E LDA ($6E),Y ; attacker flags 30/9F8A: 30 05 BMI $9F91 ; branch if a monster 30/9F8C: 20 97 A3 JSR $A397 ; check for back row penalty 30/9F8F: B0 15 BCS $9FA6 ; branch if no penalty 30/9F91: A0 33 LDY #$33 30/9F93: B1 6E LDA ($6E),Y 30/9F95: 29 01 AND #$01 30/9F97: F0 02 BEQ $9F9B ; branch if attacker not in back row 30/9F99: 46 25 LSR $25 ; halve hit % 30/9F9B: B1 70 LDA ($70),Y 30/9F9D: 29 01 AND #$01 30/9F9F: F0 05 BEQ $9FA6 ; branch if target is not in back row 30/9FA1: EE E9 7C INC $7CE9 30/9FA4: 46 25 LSR $25 ; halve hit % 30/9FA6: 20 28 BB JSR $BB28 ; get number of hits 30/9FA9: 85 7C STA $7C 30/9FAB: AD 2B 74 LDA $742B ; evade multiplier 30/9FAE: 85 24 STA $24 30/9FB0: AD 2C 74 LDA $742C ; evade % 30/9FB3: 85 25 STA $25 30/9FB5: A6 64 LDX $64 30/9FB7: B5 E0 LDA $E0,X 30/9FB9: 29 04 AND #$04 30/9FBB: F0 02 BEQ $9FBF ; branch if target is not blind 30/9FBD: 46 25 LSR $25 ; halve evade % 30/9FBF: B5 E0 LDA $E0,X 30/9FC1: 29 28 AND #$28 30/9FC3: D0 06 BNE $9FCB ; branch if target is toad or mini 30/9FC5: A0 27 LDY #$27 30/9FC7: B1 70 LDA ($70),Y 30/9FC9: F0 04 BEQ $9FCF ; branch if target not using jump/buildup 30/9FCB: A9 00 LDA #$00 ; zero evade 30/9FCD: 85 24 STA $24 30/9FCF: 20 28 BB JSR $BB28 ; get number of hits 30/9FD2: AD E9 7C LDA $7CE9 30/9FD5: F0 02 BEQ $9FD9 ; branch if target not in back row 30/9FD7: E6 30 INC $30 ; subtract one hit 30/9FD9: 38 SEC 30/9FDA: A5 7C LDA $7C ; subtract from total number of hits 30/9FDC: E5 30 SBC $30 30/9FDE: B0 02 BCS $9FE2 30/9FE0: A9 00 LDA #$00 ; min 0 30/9FE2: 85 24 STA $24 30/9FE4: 85 7C STA $7C 30/9FE6: D0 09 BNE $9FF1 ; branch if nonzero net hits 30/9FE8: A0 27 LDY #$27 30/9FEA: A9 00 LDA #$00 ; remove attacker's jump/buildup multiplier 30/9FEC: 91 6E STA ($6E),Y 30/9FEE: 4C 39 A1 JMP $A139 30/9FF1: A0 12 LDY #$12 30/9FF3: B1 70 LDA ($70),Y ; target's weak elements 30/9FF5: 2D 40 74 AND $7440 30/9FF8: F0 04 BEQ $9FFE ; branch if not weak 30/9FFA: A9 04 LDA #$04 ; 4x multiplier 30/9FFC: D0 12 BNE $A010 30/9FFE: AD 2A 74 LDA $742A ; absorbed elements 31/A001: C9 02 CMP #$02 31/A003: F0 05 BEQ $A00A 31/A005: 2D 40 74 AND $7440 31/A008: F0 04 BEQ $A00E 31/A00A: A9 01 LDA #$01 ; 1x multiplier 31/A00C: D0 02 BNE $A010 31/A00E: A9 02 LDA #$02 ; 2x multiplier 31/A010: 85 27 STA $27 31/A012: A2 00 LDX #$00 31/A014: 86 2B STX $2B ; clear attack msb 31/A016: E8 INX 31/A017: 86 2A STX $2A ; 1 target hit (no damage division) 31/A019: AD 31 74 LDA $7431 ; crit bonus 31/A01C: 85 28 STA $28 31/A01E: A9 00 LDA #$00 ; reset crit flag 31/A020: 85 29 STA $29 31/A022: AD 43 74 LDA $7443 ; attack 31/A025: 85 25 STA $25 31/A027: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A02A: 30 09 BMI $A035 ; branch if a monster 31/A02C: A0 38 LDY #$38 ; right hand 31/A02E: 20 89 A3 JSR $A389 ; add weapon bonus to attack 31/A031: C8 INY ; left hand 31/A032: 20 89 A3 JSR $A389 ; add weapon bonus to attack 31/A035: AD 2D 74 LDA $742D ; defense 31/A038: 85 26 STA $26 31/A03A: 20 25 BC JSR $BC25 ; get target flags 31/A03D: 30 16 BMI $A055 ; branch if a monster 31/A03F: 29 07 AND #$07 31/A041: AA TAX 31/A042: BD E4 7C LDA $7CE4,X ; target's defense 31/A045: F0 0E BEQ $A055 ; branch if zero 31/A047: A5 26 LDA $26 31/A049: C9 80 CMP #$80 31/A04B: 90 06 BCC $A053 31/A04D: A9 FF LDA #$FF ; max defense is 255 31/A04F: 85 26 STA $26 31/A051: D0 02 BNE $A055 31/A053: 06 26 ASL $26 31/A055: A6 62 LDX $62 31/A057: B5 F0 LDA $F0,X 31/A059: 29 28 AND #$28 31/A05B: F0 04 BEQ $A061 ; branch if attacker is not toad or mini 31/A05D: A9 01 LDA #$01 ; set attack to 1 31/A05F: 85 25 STA $25 31/A061: A6 64 LDX $64 31/A063: B5 E0 LDA $E0,X 31/A065: 29 28 AND #$28 31/A067: D0 06 BNE $A06F ; branch if target is toad or mini 31/A069: A0 27 LDY #$27 31/A06B: B1 70 LDA ($70),Y 31/A06D: F0 08 BEQ $A077 ; branch if target not using jump/buildup 31/A06F: 06 25 ASL $25 ; double attack 31/A071: 26 2B ROL $2B 31/A073: A9 00 LDA #$00 ; set defense to 0 31/A075: 85 26 STA $26 31/A077: A9 63 LDA #$63 31/A079: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A07C: CD 30 74 CMP $7430 ; crit probability 31/A07F: B0 04 BCS $A085 31/A081: E6 29 INC $29 ; crit flag 31/A083: E6 CB INC $CB 31/A085: A6 62 LDX $62 31/A087: B5 F0 LDA $F0,X 31/A089: 29 28 AND #$28 31/A08B: F0 06 BEQ $A093 ; branch if attacker is not toad or mini 31/A08D: A9 00 LDA #$00 31/A08F: 85 29 STA $29 ; no crit 31/A091: 85 CB STA $CB 31/A093: 20 44 BB JSR $BB44 ; calculate damage 31/A096: A5 29 LDA $29 31/A098: F0 0B BEQ $A0A5 ; branch if not a crit 31/A09A: AE EE 78 LDX $78EE 31/A09D: A9 34 LDA #$34 ; $0654: "クリティカルヒット!" / "Critical hit!" 31/A09F: 9D DA 78 STA $78DA,X 31/A0A2: EE EE 78 INC $78EE 31/A0A5: A0 27 LDY #$27 31/A0A7: B1 6E LDA ($6E),Y 31/A0A9: F0 15 BEQ $A0C0 ; branch if attacker not using jump/buildup 31/A0AB: AA TAX 31/A0AC: E8 INX 31/A0AD: 86 18 STX $18 31/A0AF: A9 00 LDA #$00 31/A0B1: 91 6E STA ($6E),Y 31/A0B3: 85 19 STA $19 31/A0B5: A5 1C LDA $1C 31/A0B7: 85 1A STA $1A 31/A0B9: A5 1D LDA $1D 31/A0BB: 85 1B STA $1B 31/A0BD: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 31/A0C0: A5 1C LDA $1C 31/A0C2: 05 1D ORA $1D 31/A0C4: D0 02 BNE $A0C8 31/A0C6: E6 1C INC $1C ; minimum damage is 1 31/A0C8: A5 1C LDA $1C 31/A0CA: 85 78 STA $78 ; net damage 31/A0CC: A5 1D LDA $1D 31/A0CE: 85 79 STA $79 31/A0D0: A5 70 LDA $70 31/A0D2: 85 24 STA $24 31/A0D4: A5 71 LDA $71 31/A0D6: 85 25 STA $25 31/A0D8: A0 12 LDY #$12 31/A0DA: AD 40 74 LDA $7440 ; attack elements 31/A0DD: 29 01 AND #$01 31/A0DF: F0 1E BEQ $A0FF ; branch if not recovery attack (drain) 31/A0E1: 20 E2 BB JSR $BBE2 ; check if target is undead 31/A0E4: B0 03 BCS $A0E9 ; branch if undead 31/A0E6: 20 68 A3 JSR $A368 ; add to net damage 31/A0E9: 20 25 BC JSR $BC25 ; get target flags 31/A0EC: 29 87 AND #$87 31/A0EE: 85 18 STA $18 31/A0F0: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A0F3: 29 87 AND #$87 31/A0F5: C5 18 CMP $18 31/A0F7: F0 0D BEQ $A106 ; branch if self-target (can't drain) 31/A0F9: 20 67 BD JSR $BD67 ; drain hp to attacker 31/A0FC: 4C 0D A1 JMP $A10D 31/A0FF: A9 00 LDA #$00 31/A101: 85 26 STA $26 31/A103: 20 68 A3 JSR $A368 ; add to net damage 31/A106: 20 D2 BC JSR $BCD2 ; subtract damage from hp 31/A109: 90 08 BCC $A113 ; branch if hp reached zero 31/A10B: B0 1C BCS $A129 31/A10D: A5 26 LDA $26 31/A10F: F0 18 BEQ $A129 ; branch if neither died 31/A111: 30 0B BMI $A11E ; branch if attacker died ; target died 31/A113: A6 64 LDX $64 ; set dead status on target 31/A115: B5 E0 LDA $E0,X 31/A117: 09 80 ORA #$80 31/A119: 95 E0 STA $E0,X 31/A11B: 4C 39 A1 JMP $A139 ; attacker died 31/A11E: A6 62 LDX $62 ; set dead status on attacker 31/A120: B5 F0 LDA $F0,X 31/A122: 09 80 ORA #$80 31/A124: 95 F0 STA $F0,X 31/A126: 4C 39 A1 JMP $A139 31/A129: AD D8 7E LDA $7ED8 31/A12C: 30 0B BMI $A139 ; branch if boss battle 31/A12E: A0 01 LDY #$01 31/A130: B1 6E LDA ($6E),Y 31/A132: 29 28 AND #$28 31/A134: D0 03 BNE $A139 ; branch if toad or mini 31/A136: 20 14 BE JSR $BE14 ; apply attack status 31/A139: CE 1F 74 DEC $741F ; next hand 31/A13C: AD 1F 74 LDA $741F 31/A13F: F0 1C BEQ $A15D 31/A141: A2 00 LDX #$00 31/A143: BD 25 74 LDA $7425,X 31/A146: 9D 40 74 STA $7440,X 31/A149: E8 INX 31/A14A: E0 05 CPX #$05 31/A14C: D0 F5 BNE $A143 31/A14E: A5 7C LDA $7C ; save previous number of hits 31/A150: 85 7D STA $7D 31/A152: A9 00 LDA #$00 31/A154: 85 7C STA $7C ; clear number of hits 31/A156: 85 78 STA $78 ; clear current damage 31/A158: 85 79 STA $79 31/A15A: 4C 6A 9F JMP $9F6A 31/A15D: AD 1E 74 LDA $741E 31/A160: F0 0A BEQ $A16C 31/A162: A5 7C LDA $7C ; swap number of hits for each hand 31/A164: 48 PHA 31/A165: A5 7D LDA $7D 31/A167: 85 7C STA $7C 31/A169: 68 PLA 31/A16A: 85 7D STA $7D 31/A16C: A4 64 LDY $64 31/A16E: A5 7C LDA $7C 31/A170: 85 BB STA $BB 31/A172: 05 7D ORA $7D 31/A174: D0 0E BNE $A184 ; branch if nonzero hits 31/A176: 85 BC STA $BC 31/A178: 99 4F 7E STA $7E4F,Y ; clear numeral value 31/A17B: C8 INY 31/A17C: A9 40 LDA #$40 ; set miss flag 31/A17E: 99 4F 7E STA $7E4F,Y 31/A181: 4C 64 A2 JMP $A264 31/A184: A5 7D LDA $7D 31/A186: 85 BC STA $BC 31/A188: A0 03 LDY #$03 31/A18A: B1 6E LDA ($6E),Y ; attacker current hp 31/A18C: 85 78 STA $78 31/A18E: C8 INY 31/A18F: B1 6E LDA ($6E),Y 31/A191: 85 79 STA $79 31/A193: A6 62 LDX $62 31/A195: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A198: 29 87 AND #$87 31/A19A: 85 18 STA $18 31/A19C: B1 70 LDA ($70),Y 31/A19E: 29 87 AND #$87 31/A1A0: C5 18 CMP $18 31/A1A2: F0 5F BEQ $A203 ; branch if self-target 31/A1A4: 38 SEC 31/A1A5: A5 40 LDA $40 ; attacker's previous hp 31/A1A7: E5 78 SBC $78 31/A1A9: A5 41 LDA $41 31/A1AB: E5 79 SBC $79 31/A1AD: 90 2B BCC $A1DA ; branch if attacker didn't gain hp 31/A1AF: 38 SEC 31/A1B0: A5 40 LDA $40 31/A1B2: E5 78 SBC $78 31/A1B4: 9D 5F 7E STA $7E5F,X 31/A1B7: E8 INX 31/A1B8: A5 41 LDA $41 31/A1BA: E5 79 SBC $79 31/A1BC: 9D 5F 7E STA $7E5F,X 31/A1BF: A0 16 LDY #$16 31/A1C1: B1 6E LDA ($6E),Y 31/A1C3: 85 18 STA $18 31/A1C5: A0 1B LDY #$1B 31/A1C7: B1 6E LDA ($6E),Y 31/A1C9: 05 18 ORA $18 31/A1CB: 29 01 AND #$01 31/A1CD: F0 08 BEQ $A1D7 31/A1CF: AE EE 78 LDX $78EE 31/A1D2: A9 27 LDA #$27 ; $0647: "HPをぎゃくにすいとられた!!" / "HP drained!" 31/A1D4: 9D DA 78 STA $78DA,X 31/A1D7: 4C 03 A2 JMP $A203 31/A1DA: 38 SEC 31/A1DB: A5 78 LDA $78 31/A1DD: E5 40 SBC $40 31/A1DF: 9D 5F 7E STA $7E5F,X ; set damage numeral value for attacker 31/A1E2: E8 INX 31/A1E3: A5 79 LDA $79 31/A1E5: E5 41 SBC $41 31/A1E7: 09 80 ORA #$80 31/A1E9: 9D 5F 7E STA $7E5F,X 31/A1EC: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A1EF: 30 0A BMI $A1FB ; branch if a monster 31/A1F1: AE EE 78 LDX $78EE 31/A1F4: A9 25 LDA #$25 ; $0645: "HPをきゅうしゅうした!" / "Absorbed HP!" 31/A1F6: 9D DA 78 STA $78DA,X 31/A1F9: D0 08 BNE $A203 31/A1FB: AE EE 78 LDX $78EE 31/A1FE: A9 26 LDA #$26 ; $0646: "HPをすいとられた!" / "HP drained!" 31/A200: 9D DA 78 STA $78DA,X 31/A203: A9 00 LDA #$00 31/A205: 85 43 STA $43 31/A207: AE EE 78 LDX $78EE 31/A20A: BD DA 78 LDA $78DA,X 31/A20D: C9 FF CMP #$FF 31/A20F: F0 05 BEQ $A216 ; branch if no drained/absorbed message 31/A211: E6 43 INC $43 31/A213: EE EE 78 INC $78EE 31/A216: A6 62 LDX $62 31/A218: E8 INX 31/A219: BD 5F 7E LDA $7E5F,X 31/A21C: 29 7F AND #$7F 31/A21E: CA DEX 31/A21F: 1D 5F 7E ORA $7E5F,X 31/A222: D0 18 BNE $A23C ; branch if attacker hp changed 31/A224: A9 FF LDA #$FF 31/A226: 9D 5F 7E STA $7E5F,X ; set attacker damage to null 31/A229: E8 INX 31/A22A: 9D 5F 7E STA $7E5F,X 31/A22D: A5 43 LDA $43 31/A22F: F0 0B BEQ $A23C ; remove drained/absorbed message from queue 31/A231: CE EE 78 DEC $78EE 31/A234: AE EE 78 LDX $78EE 31/A237: A9 FF LDA #$FF 31/A239: 9D DA 78 STA $78DA,X 31/A23C: A6 64 LDX $64 31/A23E: A5 42 LDA $42 31/A240: F0 17 BEQ $A259 ; branch if hp restored 31/A242: A0 03 LDY #$03 31/A244: 38 SEC 31/A245: B1 70 LDA ($70),Y 31/A247: E5 3C SBC $3C 31/A249: 9D 4F 7E STA $7E4F,X ; set damage numeral value 31/A24C: C8 INY 31/A24D: E8 INX 31/A24E: B1 70 LDA ($70),Y 31/A250: E5 3D SBC $3D 31/A252: 09 80 ORA #$80 ; green numerals 31/A254: 9D 4F 7E STA $7E4F,X 31/A257: D0 0B BNE $A264 31/A259: A5 6A LDA $6A 31/A25B: 9D 4F 7E STA $7E4F,X ; set damage numeral value 31/A25E: E8 INX 31/A25F: A5 6B LDA $6B 31/A261: 9D 4F 7E STA $7E4F,X 31/A264: A5 74 LDA $74 31/A266: F0 20 BEQ $A288 ; branch if not trying to run away 31/A268: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A26B: 10 1B BPL $A288 ; branch if a character 31/A26D: B1 70 LDA ($70),Y 31/A26F: 30 17 BMI $A288 ; branch if target is a monster 31/A271: A0 27 LDY #$27 31/A273: B1 70 LDA ($70),Y ; undo effect from 30/9F15 31/A275: E9 01 SBC #$01 31/A277: 91 70 STA ($70),Y 31/A279: A5 7C LDA $7C 31/A27B: F0 0B BEQ $A288 ; branch if no hits 31/A27D: AE EE 78 LDX $78EE 31/A280: A9 55 LDA #$55 ; $0675: "にげごしで ぼうぎょできなかった" / "Defenceless" 31/A282: 9D DA 78 STA $78DA,X 31/A285: EE EE 78 INC $78EE 31/A288: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A28B: 30 28 BMI $A2B5 ; return if a monster 31/A28D: 20 53 BF JSR $BF53 ; split monster 31/A290: A0 31 LDY #$31 31/A292: B1 6E LDA ($6E),Y ; right hand item 31/A294: 30 04 BMI $A29A ; branch if a shield 31/A296: 29 01 AND #$01 31/A298: D0 0C BNE $A2A6 ; branch if a normal weapon 31/A29A: A5 7D LDA $7D 31/A29C: D0 08 BNE $A2A6 ; branch if nonzero number of hits 31/A29E: A5 7C LDA $7C 31/A2A0: 85 BC STA $BC ; set number of hits 31/A2A2: A9 00 LDA #$00 31/A2A4: 85 BB STA $BB 31/A2A6: A0 33 LDY #$33 31/A2A8: B1 6E LDA ($6E),Y 31/A2AA: 29 04 AND #$04 31/A2AC: F0 07 BEQ $A2B5 ; branch if not harp or bow + arrow 31/A2AE: 18 CLC 31/A2AF: A5 7C LDA $7C 31/A2B1: 65 7D ADC $7D 31/A2B3: 85 BB STA $BB ; total number of hits ; fallthrough ; [ get attacker flags ] 31/A2B5: A0 2C LDY #$2C 31/A2B7: B1 6E LDA ($6E),Y 31/A2B9: 60 RTS ; [ init attacker and target ] 31/A2BA: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/A2BD: 29 07 AND #$07 31/A2BF: 85 66 STA $66 ; set attacker slot 31/A2C1: 0A ASL 31/A2C2: 85 62 STA $62 31/A2C4: B1 70 LDA ($70),Y ; target flags 31/A2C6: 29 07 AND #$07 31/A2C8: 85 68 STA $68 ; set target slot 31/A2CA: 0A ASL 31/A2CB: 85 64 STA $64 31/A2CD: A6 62 LDX $62 31/A2CF: A0 01 LDY #$01 31/A2D1: B1 6E LDA ($6E),Y ; set attacker status buffer 31/A2D3: 95 F0 STA $F0,X 31/A2D5: E8 INX 31/A2D6: C8 INY 31/A2D7: B1 6E LDA ($6E),Y 31/A2D9: 95 F0 STA $F0,X 31/A2DB: A6 64 LDX $64 31/A2DD: 88 DEY 31/A2DE: B1 70 LDA ($70),Y ; set target status buffer 31/A2E0: 95 E0 STA $E0,X 31/A2E2: E8 INX 31/A2E3: C8 INY 31/A2E4: B1 70 LDA ($70),Y 31/A2E6: 95 E0 STA $E0,X 31/A2E8: 60 RTS ; [ battle algorithm $06: choose random monster target ] 31/A2E9: A9 75 LDA #$75 ; $7675 31/A2EB: 85 22 STA $22 31/A2ED: A9 76 LDA #$76 31/A2EF: 85 23 STA $23 31/A2F1: 18 CLC 31/A2F2: A5 5F LDA $5F 31/A2F4: 65 5B ADC $5B 31/A2F6: 85 6E STA $6E 31/A2F8: A9 00 LDA #$00 31/A2FA: 65 5C ADC $5C 31/A2FC: 85 6F STA $6F 31/A2FE: A9 07 LDA #$07 ; fallthrough ; [ choose random target ] 31/A300: 85 4A STA $4A 31/A302: A5 1A LDA $1A 31/A304: 48 PHA 31/A305: A9 00 LDA #$00 31/A307: A2 04 LDX #$04 31/A309: 95 65 STA $65,X 31/A30B: CA DEX 31/A30C: 10 FB BPL $A309 31/A30E: A5 4A LDA $4A 31/A310: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A313: 85 30 STA $30 31/A315: A2 40 LDX #$40 31/A317: 20 D6 FC JSR $FCD6 ; multiply 31/A31A: 18 CLC 31/A31B: A5 1A LDA $1A 31/A31D: 65 22 ADC $22 31/A31F: 85 70 STA $70 31/A321: A5 1B LDA $1B 31/A323: 65 23 ADC $23 31/A325: 85 71 STA $71 31/A327: A0 01 LDY #$01 31/A329: B1 70 LDA ($70),Y 31/A32B: 29 C0 AND #$C0 31/A32D: D0 07 BNE $A336 ; branch if dead or stone 31/A32F: C8 INY 31/A330: B1 70 LDA ($70),Y 31/A332: 29 01 AND #$01 31/A334: F0 18 BEQ $A34E ; branch if not jumping 31/A336: A6 30 LDX $30 31/A338: A9 01 LDA #$01 31/A33A: 95 65 STA $65,X 31/A33C: 18 CLC 31/A33D: A5 65 LDA $65 31/A33F: 65 66 ADC $66 31/A341: 65 67 ADC $67 31/A343: 65 68 ADC $68 31/A345: C9 04 CMP #$04 31/A347: D0 C5 BNE $A30E 31/A349: E6 69 INC $69 31/A34B: 4C 64 A3 JMP $A364 31/A34E: 20 25 BC JSR $BC25 ; get target flags 31/A351: 29 87 AND #$87 31/A353: 8D D8 78 STA $78D8 31/A356: A9 00 LDA #$00 31/A358: A6 30 LDX $30 31/A35A: 20 20 FD JSR $FD20 ; set bit 31/A35D: A0 2F LDY #$2F 31/A35F: 91 6E STA ($6E),Y ; set target 31/A361: 8D 99 7E STA $7E99 31/A364: 68 PLA 31/A365: 85 1A STA $1A 31/A367: 60 RTS ; [ add to net damage ] 31/A368: 18 CLC 31/A369: A5 6A LDA $6A ; add to net damage 31/A36B: 65 78 ADC $78 31/A36D: 85 6A STA $6A 31/A36F: A5 6B LDA $6B 31/A371: 65 79 ADC $79 31/A373: 85 6B STA $6B 31/A375: 38 SEC 31/A376: A5 6A LDA $6A 31/A378: E9 0F SBC #$0F 31/A37A: A5 6B LDA $6B 31/A37C: E9 27 SBC #$27 31/A37E: 90 08 BCC $A388 31/A380: A9 0F LDA #$0F ; max 9999 31/A382: 85 6A STA $6A 31/A384: A9 27 LDA #$27 31/A386: 85 6B STA $6B 31/A388: 60 RTS ; [ add weapon bonus to attack ] ; 127 for shuriken and onion sword, 0 otherwise 31/A389: 18 CLC 31/A38A: B1 6E LDA ($6E),Y 31/A38C: 65 25 ADC $25 ; add to attack 31/A38E: 85 25 STA $25 31/A390: A5 2B LDA $2B 31/A392: 69 00 ADC #$00 31/A394: 85 2B STA $2B 31/A396: 60 RTS ; [ check for back row penalty ] ; A: slot ; return carry set if no back row penalty 31/A397: 29 07 AND #$07 31/A399: 85 52 STA $52 31/A39B: A0 31 LDY #$31 31/A39D: B1 6E LDA ($6E),Y 31/A39F: C8 INY 31/A3A0: 11 6E ORA ($6E),Y 31/A3A2: 29 08 AND #$08 31/A3A4: D0 58 BNE $A3FE ; return if arrow equipped (carry set) 31/A3A6: 20 90 BE JSR $BE90 ; get character offset 31/A3A9: A8 TAY 31/A3AA: C8 INY 31/A3AB: C8 INY 31/A3AC: C8 INY 31/A3AD: B1 59 LDA ($59),Y ; right hand item 31/A3AF: 85 18 STA $18 31/A3B1: C8 INY 31/A3B2: C8 INY 31/A3B3: B1 59 LDA ($59),Y ; left hand item 31/A3B5: 85 19 STA $19 31/A3B7: 05 18 ORA $18 31/A3B9: F0 40 BEQ $A3FB ; return if unarmed (carry clear) 31/A3BB: AD 1E 74 LDA $741E 31/A3BE: D0 1E BNE $A3DE 31/A3C0: A5 18 LDA $18 31/A3C2: F0 0E BEQ $A3D2 31/A3C4: C9 57 CMP #$57 31/A3C6: B0 0A BCS $A3D2 31/A3C8: C9 42 CMP #$42 31/A3CA: B0 2F BCS $A3FB 31/A3CC: C9 3F CMP #$3F 31/A3CE: 90 2B BCC $A3FB 31/A3D0: B0 2C BCS $A3FE 31/A3D2: A5 19 LDA $19 31/A3D4: C9 42 CMP #$42 31/A3D6: B0 23 BCS $A3FB 31/A3D8: C9 3F CMP #$3F 31/A3DA: 90 1F BCC $A3FB 31/A3DC: B0 20 BCS $A3FE 31/A3DE: AD 1F 74 LDA $741F 31/A3E1: C9 02 CMP #$02 31/A3E3: D0 0C BNE $A3F1 31/A3E5: A5 18 LDA $18 31/A3E7: C9 42 CMP #$42 31/A3E9: B0 10 BCS $A3FB 31/A3EB: C9 3F CMP #$3F 31/A3ED: 90 0C BCC $A3FB 31/A3EF: B0 0D BCS $A3FE 31/A3F1: A5 19 LDA $19 31/A3F3: C9 42 CMP #$42 31/A3F5: B0 04 BCS $A3FB 31/A3F7: C9 3F CMP #$3F 31/A3F9: B0 03 BCS $A3FE 31/A3FB: 18 CLC 31/A3FC: 90 01 BCC $A3FF 31/A3FE: 38 SEC 31/A3FF: 60 RTS ; -------------------------------------------------------------------------- ; [ battle algorithm $01: init character/monster properties ] 31/A400: A0 00 LDY #$00 31/A402: A2 03 LDX #$03 31/A404: A9 00 LDA #$00 31/A406: 91 5B STA ($5B),Y ; clear character/monster properties 31/A408: C8 INY 31/A409: D0 FB BNE $A406 31/A40B: E6 5C INC $5C 31/A40D: CA DEX 31/A40E: D0 F4 BNE $A404 31/A410: A9 75 LDA #$75 ; reset character properties pointer 31/A412: 85 5C STA $5C 31/A414: A9 00 LDA #$00 31/A416: 85 52 STA $52 31/A418: A2 33 LDX #$33 31/A41A: A9 00 LDA #$00 31/A41C: 95 18 STA $18,X ; clear $18-$4B 31/A41E: CA DEX 31/A41F: 10 FB BPL $A41C 31/A421: 20 82 A4 JSR $A482 ; load character properties 31/A424: 48 PHA 31/A425: A2 00 LDX #$00 31/A427: A4 5F LDY $5F 31/A429: B5 18 LDA $18,X ; copy $18-$4B to character properties 31/A42B: 91 5B STA ($5B),Y 31/A42D: C8 INY 31/A42E: E8 INX 31/A42F: E0 34 CPX #$34 31/A431: D0 F6 BNE $A429 31/A433: C8 INY 31/A434: 68 PLA 31/A435: 91 5B STA ($5B),Y ; set job experience modifiers 31/A437: E6 52 INC $52 ; next character 31/A439: A5 52 LDA $52 31/A43B: C9 04 CMP #$04 31/A43D: D0 D9 BNE $A418 31/A43F: A0 00 LDY #$00 31/A441: 84 4B STY $4B 31/A443: A4 4B LDY $4B 31/A445: B9 A7 7D LDA $7DA7,Y ; monster type 31/A448: C9 FF CMP #$FF 31/A44A: D0 15 BNE $A461 ; branch if slot is not empty 31/A44C: A0 01 LDY #$01 31/A44E: A9 80 LDA #$80 ; set dead status 31/A450: 91 5D STA ($5D),Y 31/A452: A0 2C LDY #$2C 31/A454: A5 4B LDA $4B 31/A456: 09 80 ORA #$80 31/A458: 91 5D STA ($5D),Y ; monster slot 31/A45A: A6 4B LDX $4B 31/A45C: 9D C4 7E STA $7EC4,X 31/A45F: D0 03 BNE $A464 31/A461: 20 F6 A4 JSR $A4F6 ; load monster properties 31/A464: 18 CLC 31/A465: A5 5D LDA $5D 31/A467: 69 40 ADC #$40 31/A469: 85 5D STA $5D 31/A46B: A5 5E LDA $5E 31/A46D: 69 00 ADC #$00 31/A46F: 85 5E STA $5E 31/A471: E6 4B INC $4B ; next monster 31/A473: A5 4B LDA $4B 31/A475: C9 08 CMP #$08 31/A477: D0 CA BNE $A443 31/A479: A9 75 LDA #$75 ; reset monster properties pointer 31/A47B: 85 5D STA $5D 31/A47D: A9 76 LDA #$76 31/A47F: 85 5E STA $5E 31/A481: 60 RTS ; [ load character properties ] ; job modifiers format (39/BB1A) ; $00: crit probability ; $01: crit bonus ; $02: run probability ; $03: sleep probability ; $04: aabbccdd job experience multipliers ; a: command 0 ; b: command 1 ; c: command 2 ; d: command 3 31/A482: 20 90 BE JSR $BE90 ; get character offset 31/A485: A8 TAY 31/A486: C8 INY 31/A487: B1 57 LDA ($57),Y ; level 31/A489: 85 18 STA $18 31/A48B: C8 INY 31/A48C: B1 57 LDA ($57),Y ; status 31/A48E: 85 19 STA $19 31/A490: A9 0C LDA #$0C 31/A492: 20 98 BE JSR $BE98 ; add character offset 31/A495: A2 00 LDX #$00 31/A497: B1 57 LDA ($57),Y ; current/max hp 31/A499: 95 1B STA $1B,X 31/A49B: C8 INY 31/A49C: E8 INX 31/A49D: E0 04 CPX #$04 31/A49F: D0 F6 BNE $A497 31/A4A1: B1 57 LDA ($57),Y ; job level 31/A4A3: 85 27 STA $27 31/A4A5: A9 30 LDA #$30 31/A4A7: 20 98 BE JSR $BE98 ; add character offset 31/A4AA: A2 00 LDX #$00 31/A4AC: B1 57 LDA ($57),Y ; mp 31/A4AE: 95 1F STA $1F,X 31/A4B0: C8 INY 31/A4B1: C8 INY 31/A4B2: E8 INX 31/A4B3: E0 08 CPX #$08 31/A4B5: D0 F5 BNE $A4AC 31/A4B7: A4 5F LDY $5F 31/A4B9: B1 57 LDA ($57),Y ; job id 31/A4BB: 85 46 STA $46 31/A4BD: 20 40 FD JSR $FD40 ; asl2 31/A4C0: 18 CLC 31/A4C1: 65 46 ADC $46 31/A4C3: 69 1A ADC #$1A ; 39/BB1A (job modifiers) 31/A4C5: 85 46 STA $46 31/A4C7: A9 00 LDA #$00 31/A4C9: 69 BB ADC #$BB 31/A4CB: 85 47 STA $47 31/A4CD: A9 05 LDA #$05 ; size: 5 bytes 31/A4CF: 85 4B STA $4B 31/A4D1: A9 18 LDA #$18 ; return bank 31/A4D3: 85 4A STA $4A 31/A4D5: A9 1C LDA #$1C ; source bank 31/A4D7: 20 DC FD JSR $FDDC ; load rom data to buffer 31/A4DA: A2 00 LDX #$00 31/A4DC: BD 00 74 LDA $7400,X 31/A4DF: 95 40 STA $40,X ; copy 5 bytes 31/A4E1: E8 INX 31/A4E2: E0 05 CPX #$05 31/A4E4: D0 F6 BNE $A4DC 31/A4E6: A5 44 LDA $44 31/A4E8: 48 PHA 31/A4E9: AD 52 00 LDA $0052 ; character slot 31/A4EC: 85 44 STA $44 ; set attacker flags 31/A4EE: A9 00 LDA #$00 31/A4F0: 85 46 STA $46 ; clear command id and target mask 31/A4F2: 85 47 STA $47 31/A4F4: 68 PLA ; return job experience modifiers 31/A4F5: 60 RTS ; [ load monster properties ] ; A: monster type ; Y: monster slot 31/A4F6: AA TAX 31/A4F7: BD 6B 7D LDA $7D6B,X ; monster id 31/A4FA: 85 26 STA $26 31/A4FC: 84 27 STY $27 31/A4FE: A5 26 LDA $26 31/A500: 48 PHA 31/A501: 85 1A STA $1A 31/A503: A9 10 LDA #$10 ; size: 16 bytes 31/A505: 85 18 STA $18 31/A507: A9 00 LDA #$00 ; offset: 30/8000 (monster properties) 31/A509: 85 20 STA $20 31/A50B: A9 80 LDA #$80 31/A50D: 85 21 STA $21 31/A50F: 20 9D BE JSR $BE9D ; calculate pointer 31/A512: A5 1C LDA $1C 31/A514: 85 24 STA $24 31/A516: A5 1D LDA $1D 31/A518: 85 25 STA $25 31/A51A: A5 27 LDA $27 31/A51C: 85 1A STA $1A ; slot 31/A51E: A9 40 LDA #$40 ; size: $40 31/A520: 85 18 STA $18 31/A522: A9 75 LDA #$75 ; offset: $7675 31/A524: 85 20 STA $20 31/A526: A9 76 LDA #$76 31/A528: 85 21 STA $21 31/A52A: 20 9D BE JSR $BE9D ; calculate pointer 31/A52D: A5 1C LDA $1C 31/A52F: 85 5D STA $5D 31/A531: A5 1D LDA $1D 31/A533: 85 5E STA $5E 31/A535: A0 2C LDY #$2C 31/A537: A5 27 LDA $27 31/A539: 09 80 ORA #$80 31/A53B: 29 E7 AND #$E7 31/A53D: 91 5D STA ($5D),Y ; monster slot 31/A53F: A0 00 LDY #$00 31/A541: B1 24 LDA ($24),Y ; level 31/A543: 91 5D STA ($5D),Y 31/A545: C8 INY 31/A546: B1 24 LDA ($24),Y ; hp 31/A548: 85 18 STA $18 31/A54A: C8 INY 31/A54B: B1 24 LDA ($24),Y 31/A54D: 85 19 STA $19 31/A54F: A5 18 LDA $18 31/A551: A0 03 LDY #$03 31/A553: 91 5D STA ($5D),Y 31/A555: C8 INY 31/A556: C8 INY 31/A557: 91 5D STA ($5D),Y 31/A559: A5 19 LDA $19 31/A55B: 88 DEY 31/A55C: 91 5D STA ($5D),Y 31/A55E: C8 INY 31/A55F: C8 INY 31/A560: 91 5D STA ($5D),Y 31/A562: A0 03 LDY #$03 31/A564: B1 24 LDA ($24),Y ; special attack rate 31/A566: A0 37 LDY #$37 31/A568: 91 5D STA ($5D),Y 31/A56A: A0 04 LDY #$04 31/A56C: B1 24 LDA ($24),Y ; job level ??? 31/A56E: A0 0F LDY #$0F 31/A570: 91 5D STA ($5D),Y 31/A572: A9 05 LDA #$05 31/A574: 85 4A STA $4A 31/A576: A9 12 LDA #$12 ; magic def. stats 31/A578: 85 49 STA $49 31/A57A: 20 14 A6 JSR $A614 31/A57D: A9 16 LDA #$16 ; attack stats 31/A57F: 85 49 STA $49 31/A581: 20 14 A6 JSR $A614 31/A584: A9 20 LDA #$20 ; defense stats 31/A586: 85 49 STA $49 31/A588: 20 14 A6 JSR $A614 31/A58B: A0 19 LDY #$19 31/A58D: B1 5D LDA ($5D),Y ; strength = attack power / 2 ??? 31/A58F: 4A LSR 31/A590: A0 29 LDY #$29 31/A592: 91 5D STA ($5D),Y 31/A594: 88 DEY 31/A595: A9 05 LDA #$05 31/A597: 91 5D STA ($5D),Y 31/A599: A0 07 LDY #$07 31/A59B: B1 24 LDA ($24),Y 31/A59D: 48 PHA 31/A59E: 29 0F AND #$0F ; intellect 31/A5A0: 0A ASL 31/A5A1: 85 18 STA $18 31/A5A3: 0A ASL 31/A5A4: 18 CLC 31/A5A5: 65 18 ADC $18 31/A5A7: A0 10 LDY #$10 31/A5A9: 91 5D STA ($5D),Y 31/A5AB: 68 PLA 31/A5AC: 29 F0 AND #$F0 ; spirit 31/A5AE: 20 47 FD JSR $FD47 ; lsr2 31/A5B1: 85 18 STA $18 31/A5B3: 4A LSR 31/A5B4: 18 CLC 31/A5B5: 65 18 ADC $18 31/A5B7: C8 INY 31/A5B8: 91 5D STA ($5D),Y 31/A5BA: A0 0E LDY #$0E 31/A5BC: B1 24 LDA ($24),Y ; special attack 31/A5BE: 85 1A STA $1A 31/A5C0: A9 08 LDA #$08 ; size = 8 bytes 31/A5C2: 85 18 STA $18 31/A5C4: A9 00 LDA #$00 ; offset = 30/9200 31/A5C6: 85 20 STA $20 31/A5C8: A9 92 LDA #$92 31/A5CA: 85 21 STA $21 31/A5CC: 20 9D BE JSR $BE9D ; calculate pointer 31/A5CF: A0 00 LDY #$00 31/A5D1: A2 00 LDX #$00 31/A5D3: B1 1C LDA ($1C),Y 31/A5D5: 9D 26 00 STA $0026,X 31/A5D8: C8 INY 31/A5D9: E8 INX 31/A5DA: E0 08 CPX #$08 31/A5DC: D0 F5 BNE $A5D3 31/A5DE: A0 38 LDY #$38 31/A5E0: A2 00 LDX #$00 31/A5E2: B5 26 LDA $26,X 31/A5E4: 91 5D STA ($5D),Y ; copy special attack script 31/A5E6: C8 INY 31/A5E7: E8 INX 31/A5E8: E0 08 CPX #$08 31/A5EA: D0 F6 BNE $A5E2 31/A5EC: A0 0F LDY #$0F 31/A5EE: B1 24 LDA ($24),Y ; item set 31/A5F0: A0 36 LDY #$36 31/A5F2: 91 5D STA ($5D),Y 31/A5F4: 88 DEY 31/A5F5: A5 26 LDA $26 31/A5F7: 91 5D STA ($5D),Y 31/A5F9: 68 PLA 31/A5FA: C9 D2 CMP #$D2 31/A5FC: F0 04 BEQ $A602 31/A5FE: C9 B4 CMP #$B4 31/A600: D0 0B BNE $A60D 31/A602: A5 5D LDA $5D 31/A604: 85 6E STA $6E 31/A606: A5 5E LDA $5E 31/A608: 85 6F STA $6F 31/A60A: 20 7A B5 JSR $B57A 31/A60D: A0 01 LDY #$01 31/A60F: A9 00 LDA #$00 31/A611: 91 5D STA ($5D),Y 31/A613: 60 RTS ; [ load monster stat values ] ; called 3 times ; element: weakness, attack, resistance ; stat set: magic defense, attack, defense ; status: n/a, attack, resistance 31/A614: A4 4A LDY $4A 31/A616: B1 24 LDA ($24),Y ; element 31/A618: E6 4A INC $4A 31/A61A: A4 49 LDY $49 31/A61C: 91 5D STA ($5D),Y 31/A61E: E6 49 INC $49 31/A620: A4 4A LDY $4A 31/A622: B1 24 LDA ($24),Y ; stat set index 31/A624: E6 4A INC $4A 31/A626: 85 1A STA $1A ; index 31/A628: A9 03 LDA #$03 ; size: 3 bytes 31/A62A: 85 18 STA $18 31/A62C: A9 00 LDA #$00 ; offset: 30/9000 (monster stat values) 31/A62E: 85 20 STA $20 31/A630: A9 90 LDA #$90 31/A632: 85 21 STA $21 31/A634: 20 9D BE JSR $BE9D ; calculate pointer 31/A637: A0 00 LDY #$00 31/A639: B1 1C LDA ($1C),Y 31/A63B: 99 18 00 STA $0018,Y 31/A63E: C8 INY 31/A63F: C0 03 CPY #$03 31/A641: D0 F6 BNE $A639 31/A643: A2 00 LDX #$00 31/A645: A4 49 LDY $49 31/A647: B5 18 LDA $18,X 31/A649: 91 5D STA ($5D),Y 31/A64B: C8 INY 31/A64C: E8 INX 31/A64D: E0 03 CPX #$03 31/A64F: D0 F6 BNE $A647 31/A651: 84 49 STY $49 31/A653: A4 4A LDY $4A 31/A655: B1 24 LDA ($24),Y ; status 31/A657: E6 4A INC $4A 31/A659: A4 49 LDY $49 31/A65B: 91 5D STA ($5D),Y 31/A65D: 60 RTS ; -------------------------------------------------------------------------- ; [ battle algorithm $04: do item effect ] ; this subroutine is where the item actually gets removed from the inventory. ; during item selection, items are only removed from inventory temporarily ; so that other characters can't use the same item (see 34/8374 and 34/9AE7). ; $1A: item id 31/A65E: A9 01 LDA #$01 ; action script $01: magic/command 31/A660: 8D D5 78 STA $78D5 31/A663: A9 14 LDA #$14 ; action id 31/A665: 8D C2 7E STA $7EC2 31/A668: A9 01 LDA #$01 ; show item name 31/A66A: 85 72 STA $72 31/A66C: A5 1A LDA $1A 31/A66E: 8D D7 78 STA $78D7 ; set item id for message display 31/A671: C9 98 CMP #$98 31/A673: B0 28 BCS $A69D ; branch if not a weapon/armor 31/A675: A2 08 LDX #$08 31/A677: 20 D6 FC JSR $FCD6 ; multiply 31/A67A: 18 CLC 31/A67B: A5 1A LDA $1A 31/A67D: 69 00 ADC #$00 ; 30/9400 (weapon/armor properties) 31/A67F: 85 1A STA $1A 31/A681: A5 1B LDA $1B 31/A683: 69 94 ADC #$94 31/A685: 85 1B STA $1B 31/A687: A0 04 LDY #$04 31/A689: B1 1A LDA ($1A),Y 31/A68B: 29 7F AND #$7F 31/A68D: C9 7F CMP #$7F 31/A68F: D0 03 BNE $A694 31/A691: 4C 22 A7 JMP $A722 31/A694: 29 7F AND #$7F 31/A696: 85 1A STA $1A 31/A698: A9 01 LDA #$01 31/A69A: 4C 1B A7 JMP $A71B 31/A69D: C9 C8 CMP #$C8 31/A69F: B0 F0 BCS $A691 ; branch if not a usable item (no effect) 31/A6A1: 38 SEC 31/A6A2: E9 98 SBC #$98 31/A6A4: 18 CLC 31/A6A5: 69 A0 ADC #$A0 ; 2E/91A0 (item spell cast) 31/A6A7: 85 46 STA $46 31/A6A9: A9 00 LDA #$00 31/A6AB: 69 91 ADC #$91 31/A6AD: 85 47 STA $47 31/A6AF: A9 01 LDA #$01 ; 1 byte 31/A6B1: 85 4B STA $4B 31/A6B3: A9 18 LDA #$18 31/A6B5: 85 4A STA $4A 31/A6B7: A9 17 LDA #$17 31/A6B9: 20 DC FD JSR $FDDC ; load rom data to buffer 31/A6BC: AD 00 74 LDA $7400 31/A6BF: 85 1B STA $1B 31/A6C1: C9 7F CMP #$7F 31/A6C3: F0 5D BEQ $A722 31/A6C5: AD D8 7E LDA $7ED8 31/A6C8: 29 10 AND #$10 31/A6CA: F0 06 BEQ $A6D2 ; branch if can use mini 31/A6CC: A5 1A LDA $1A 31/A6CE: C9 AD CMP #$AD 31/A6D0: F0 50 BEQ $A722 ; branch if not luck mallet 31/A6D2: A2 00 LDX #$00 31/A6D4: BD C0 60 LDA $60C0,X ; item id 31/A6D7: C5 1A CMP $1A 31/A6D9: F0 04 BEQ $A6DF 31/A6DB: E8 INX 31/A6DC: E8 INX 31/A6DD: D0 F5 BNE $A6D4 31/A6DF: E8 INX 31/A6E0: DE C0 60 DEC $60C0,X ; decrement quantity 31/A6E3: BD C0 60 LDA $60C0,X 31/A6E6: D0 06 BNE $A6EE 31/A6E8: CA DEX 31/A6E9: A9 00 LDA #$00 31/A6EB: 9D C0 60 STA $60C0,X 31/A6EE: A5 1B LDA $1B 31/A6F0: 85 1A STA $1A 31/A6F2: AD D7 78 LDA $78D7 31/A6F5: C9 A6 CMP #$A6 31/A6F7: B0 04 BCS $A6FD ; branch if not a key item 31/A6F9: A9 00 LDA #$00 31/A6FB: F0 1E BEQ $A71B 31/A6FD: 38 SEC 31/A6FE: E9 A6 SBC #$A6 31/A700: 18 CLC 31/A701: 69 5E ADC #$5E ; 01/A35E (item multipliers) 31/A703: 85 46 STA $46 31/A705: A9 A3 LDA #$A3 31/A707: 69 00 ADC #$00 31/A709: 85 47 STA $47 31/A70B: A9 18 LDA #$18 31/A70D: 85 4A STA $4A 31/A70F: A2 00 LDX #$00 31/A711: 8A TXA 31/A712: E8 INX 31/A713: 86 4B STX $4B 31/A715: 20 DC FD JSR $FDDC ; load rom data to buffer 31/A718: AD 00 74 LDA $7400 31/A71B: 85 30 STA $30 31/A71D: 85 7C STA $7C 31/A71F: 4C 77 AF JMP $AF77 ; do attack effect 31/A722: A9 01 LDA #$01 ; action script $01: magic/command 31/A724: 8D D5 78 STA $78D5 31/A727: A9 18 LDA #$18 ; ineffective 31/A729: 8D C2 7E STA $7EC2 31/A72C: A9 51 LDA #$51 ; $0671: "なにも おこらなかった" / "Nothing happens" 31/A72E: 8D DA 78 STA $78DA 31/A731: 60 RTS ; -------------------------------------------------------------------------- ; [ battle algorithm $02: choose monster actions ] 31/A732: A9 00 LDA #$00 31/A734: 85 4A STA $4A 31/A736: 85 69 STA $69 31/A738: A9 00 LDA #$00 ; clear confused flag 31/A73A: 85 53 STA $53 31/A73C: A5 4A LDA $4A 31/A73E: 85 18 STA $18 ; index 31/A740: A9 40 LDA #$40 ; size = 64 bytes 31/A742: 85 1A STA $1A 31/A744: A9 75 LDA #$75 ; offset = $7675 31/A746: 85 20 STA $20 31/A748: A9 76 LDA #$76 31/A74A: 85 21 STA $21 31/A74C: 20 9D BE JSR $BE9D ; calculate pointer 31/A74F: A5 1C LDA $1C 31/A751: 85 24 STA $24 31/A753: A5 1D LDA $1D 31/A755: 85 25 STA $25 31/A757: 20 C8 A8 JSR $A8C8 ; get flags 31/A75A: 29 EF AND #$EF 31/A75C: 91 24 STA ($24),Y 31/A75E: A0 2F LDY #$2F 31/A760: A9 00 LDA #$00 31/A762: 91 24 STA ($24),Y ; clear target 31/A764: C8 INY 31/A765: 91 24 STA ($24),Y 31/A767: A0 01 LDY #$01 31/A769: B1 24 LDA ($24),Y ; status 1 31/A76B: 29 E8 AND #$E8 31/A76D: F0 05 BEQ $A774 ; branch if not dead, stone, toad, mini 31/A76F: A9 00 LDA #$00 ; do nothing 31/A771: 4C B9 A8 JMP $A8B9 31/A774: C8 INY 31/A775: B1 24 LDA ($24),Y ; status 2 31/A777: 29 E0 AND #$E0 31/A779: F0 0E BEQ $A789 ; branch if not asleep, paralyzed, or confused 31/A77B: 29 20 AND #$20 31/A77D: F0 05 BEQ $A784 ; branch if not confused 31/A77F: E6 53 INC $53 ; set confused flag 31/A781: 4C C5 A7 JMP $A7C5 31/A784: A9 01 LDA #$01 ; asleep/paralyzed 31/A786: 4C B9 A8 JMP $A8B9 31/A789: AD D8 7E LDA $7ED8 31/A78C: 30 37 BMI $A7C5 ; branch if boss battle 31/A78E: A0 00 LDY #$00 31/A790: A2 00 LDX #$00 31/A792: B1 5B LDA ($5B),Y ; character level 31/A794: 95 28 STA $28,X 31/A796: 98 TYA 31/A797: 18 CLC 31/A798: 69 40 ADC #$40 31/A79A: A8 TAY 31/A79B: E8 INX 31/A79C: E0 04 CPX #$04 31/A79E: D0 F2 BNE $A792 31/A7A0: 20 EC A8 JSR $A8EC ; sort characters by level 31/A7A3: A0 00 LDY #$00 31/A7A5: 18 CLC 31/A7A6: B1 24 LDA ($24),Y ; level + 15 31/A7A8: 69 0F ADC #$0F 31/A7AA: C5 28 CMP $28 ; compare to lowest character level 31/A7AC: B0 17 BCS $A7C5 31/A7AE: AD D8 7E LDA $7ED8 31/A7B1: 29 01 AND #$01 31/A7B3: D0 10 BNE $A7C5 ; branch if can't run 31/A7B5: A9 64 LDA #$64 31/A7B7: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A7BA: A0 22 LDY #$22 31/A7BC: D1 24 CMP ($24),Y ; evade % 31/A7BE: 90 05 BCC $A7C5 31/A7C0: A9 06 LDA #$06 ; use run command 31/A7C2: 4C B9 A8 JMP $A8B9 31/A7C5: A6 4A LDX $4A 31/A7C7: BD A7 7D LDA $7DA7,X ; monster type 31/A7CA: AA TAX 31/A7CB: BD 6B 7D LDA $7D6B,X ; monster id 31/A7CE: C9 D2 CMP #$D2 31/A7D0: F0 04 BEQ $A7D6 ; branch if hein 31/A7D2: C9 B4 CMP #$B4 31/A7D4: D0 13 BNE $A7E9 ; branch if not amon 31/A7D6: AD E2 7B LDA $7BE2 31/A7D9: C9 02 CMP #$02 ; change weakness every 3 turns 31/A7DB: D0 0C BNE $A7E9 31/A7DD: 20 C8 A8 JSR $A8C8 ; get flags 31/A7E0: 09 10 ORA #$10 31/A7E2: 91 24 STA ($24),Y 31/A7E4: A9 4D LDA #$4D ; use barrier shift 31/A7E6: 4C B9 A8 JMP $A8B9 31/A7E9: A0 37 LDY #$37 31/A7EB: B1 24 LDA ($24),Y ; special attack rate 31/A7ED: F0 0E BEQ $A7FD ; branch if no special attack 31/A7EF: A9 64 LDA #$64 31/A7F1: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A7F4: A0 37 LDY #$37 31/A7F6: D1 24 CMP ($24),Y ; special attack rate 31/A7F8: B0 03 BCS $A7FD 31/A7FA: 4C 5F A8 JMP $A85F ; use special attack 31/A7FD: A5 53 LDA $53 31/A7FF: F0 08 BEQ $A809 ; branch if not confused 31/A801: 20 CD A8 JSR $A8CD ; target a random monster 31/A804: A9 04 LDA #$04 ; use fight command 31/A806: 4C B9 A8 JMP $A8B9 31/A809: A9 00 LDA #$00 31/A80B: A2 04 LDX #$04 31/A80D: 95 65 STA $65,X 31/A80F: CA DEX 31/A810: 10 FB BPL $A80D 31/A812: A9 00 LDA #$00 ; rng 0 31/A814: 85 21 STA $21 31/A816: A2 00 LDX #$00 31/A818: A9 03 LDA #$03 31/A81A: 20 EF FB JSR $FBEF ; random (X..A) 31/A81D: 85 22 STA $22 31/A81F: A9 03 LDA #$03 31/A821: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A824: C5 22 CMP $22 31/A826: F0 F7 BEQ $A81F 31/A828: 85 22 STA $22 31/A82A: 85 52 STA $52 31/A82C: 20 90 BE JSR $BE90 ; get character offset 31/A82F: A8 TAY 31/A830: C8 INY 31/A831: B1 5B LDA ($5B),Y 31/A833: 29 C0 AND #$C0 31/A835: D0 07 BNE $A83E ; branch if character is dead or stone 31/A837: C8 INY 31/A838: B1 5B LDA ($5B),Y 31/A83A: 29 01 AND #$01 31/A83C: F0 17 BEQ $A855 ; branch if not jumping 31/A83E: A6 22 LDX $22 31/A840: A9 01 LDA #$01 31/A842: 95 65 STA $65,X 31/A844: 18 CLC 31/A845: A5 65 LDA $65 31/A847: 65 66 ADC $66 31/A849: 65 67 ADC $67 31/A84B: 65 68 ADC $68 31/A84D: C9 04 CMP #$04 31/A84F: D0 C1 BNE $A812 31/A851: A9 00 LDA #$00 31/A853: F0 07 BEQ $A85C 31/A855: A5 52 LDA $52 31/A857: 20 E1 A8 JSR $A8E1 ; set target 31/A85A: A9 04 LDA #$04 ; use fight command 31/A85C: 4C B9 A8 JMP $A8B9 31/A85F: 20 C8 A8 JSR $A8C8 ; get flags 31/A862: 09 10 ORA #$10 31/A864: 91 24 STA ($24),Y ; using magic 31/A866: AD D8 7E LDA $7ED8 31/A869: 10 2B BPL $A896 ; branch if not a boss battle ; boss scripts go sequentially 31/A86B: 38 SEC 31/A86C: AD B7 78 LDA $78B7 ; special attack script pointer 31/A86F: E9 01 SBC #$01 31/A871: 18 CLC 31/A872: 69 38 ADC #$38 31/A874: A8 TAY 31/A875: B1 24 LDA ($24),Y 31/A877: 29 7F AND #$7F 31/A879: 48 PHA 31/A87A: B1 24 LDA ($24),Y 31/A87C: 20 1B A9 JSR $A91B ; choose target (monster special attack) 31/A87F: A5 69 LDA $69 31/A881: D0 2A BNE $A8AD ; if ???, do nothing 31/A883: EE B7 78 INC $78B7 ; increment special attack script pointer 31/A886: AD B7 78 LDA $78B7 31/A889: C9 09 CMP #$09 31/A88B: D0 05 BNE $A892 31/A88D: A9 01 LDA #$01 31/A88F: 8D B7 78 STA $78B7 31/A892: 68 PLA 31/A893: 4C B9 A8 JMP $A8B9 ; normal monster scripts are random 31/A896: A9 07 LDA #$07 31/A898: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A89B: 18 CLC 31/A89C: 69 38 ADC #$38 31/A89E: A8 TAY 31/A89F: B1 24 LDA ($24),Y ; special attack script (magic id) 31/A8A1: 29 7F AND #$7F 31/A8A3: 48 PHA 31/A8A4: B1 24 LDA ($24),Y ; choose a random special attack 31/A8A6: 20 1B A9 JSR $A91B ; choose target (monster special attack) 31/A8A9: A5 69 LDA $69 31/A8AB: F0 0B BEQ $A8B8 ; if ???, do nothing 31/A8AD: 20 C8 A8 JSR $A8C8 ; get flags 31/A8B0: 29 EF AND #$EF 31/A8B2: 91 24 STA ($24),Y 31/A8B4: 68 PLA 31/A8B5: A9 00 LDA #$00 ; do nothing 31/A8B7: 48 PHA 31/A8B8: 68 PLA 31/A8B9: A0 2E LDY #$2E 31/A8BB: 91 24 STA ($24),Y ; set command for monster 31/A8BD: E6 4A INC $4A 31/A8BF: A5 4A LDA $4A 31/A8C1: C9 08 CMP #$08 31/A8C3: F0 03 BEQ $A8C8 31/A8C5: 4C 38 A7 JMP $A738 ; [ get flags ] 31/A8C8: A0 2C LDY #$2C 31/A8CA: B1 24 LDA ($24),Y ; attacker flags 31/A8CC: 60 RTS ; [ target a random monster ] 31/A8CD: A0 30 LDY #$30 31/A8CF: A9 80 LDA #$80 31/A8D1: 91 24 STA ($24),Y ; set target flags 31/A8D3: A9 07 LDA #$07 31/A8D5: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A8D8: AA TAX 31/A8D9: BD A7 7D LDA $7DA7,X ; monster type 31/A8DC: C9 FF CMP #$FF 31/A8DE: F0 F3 BEQ $A8D3 31/A8E0: 8A TXA ; fallthrough ; [ set target ] 31/A8E1: AA TAX 31/A8E2: A9 00 LDA #$00 31/A8E4: 20 20 FD JSR $FD20 ; set bit 31/A8E7: A0 2F LDY #$2F 31/A8E9: 91 24 STA ($24),Y ; set target 31/A8EB: 60 RTS ; [ sort characters by level ] 31/A8EC: A0 00 LDY #$00 31/A8EE: A2 00 LDX #$00 31/A8F0: E8 INX 31/A8F1: B9 28 00 LDA $0028,Y 31/A8F4: D5 28 CMP $28,X 31/A8F6: 90 15 BCC $A90D 31/A8F8: 48 PHA 31/A8F9: B5 28 LDA $28,X 31/A8FB: 99 28 00 STA $0028,Y 31/A8FE: 68 PLA 31/A8FF: 95 28 STA $28,X 31/A901: B9 2C 00 LDA $002C,Y 31/A904: 48 PHA 31/A905: B5 2C LDA $2C,X 31/A907: 99 2C 00 STA $002C,Y 31/A90A: 68 PLA 31/A90B: 95 2C STA $2C,X 31/A90D: E8 INX 31/A90E: E0 04 CPX #$04 31/A910: D0 DF BNE $A8F1 31/A912: 98 TYA 31/A913: AA TAX 31/A914: E8 INX 31/A915: C8 INY 31/A916: C0 03 CPY #$03 31/A918: D0 D6 BNE $A8F0 31/A91A: 60 RTS ; [ choose target (monster special attack) ] 31/A91B: 85 46 STA $46 31/A91D: 29 7F AND #$7F 31/A91F: 85 18 STA $18 31/A921: A9 08 LDA #$08 ; size: 8 bytes 31/A923: 85 1A STA $1A 31/A925: A9 C0 LDA #$C0 ; 30/98C0 (attack properties) 31/A927: 85 20 STA $20 31/A929: A9 98 LDA #$98 31/A92B: 85 21 STA $21 31/A92D: A2 00 LDX #$00 ; destination $7400 31/A92F: A9 18 LDA #$18 31/A931: A8 TAY 31/A932: 20 A6 FD JSR $FDA6 ; load array item 31/A935: A9 00 LDA #$00 31/A937: A2 07 LDX #$07 31/A939: 95 62 STA $62,X 31/A93B: CA DEX 31/A93C: 10 FB BPL $A939 31/A93E: AD 05 74 LDA $7405 31/A941: 30 75 BMI $A9B8 ; branch if targets ally by default 31/A943: A5 53 LDA $53 31/A945: D0 71 BNE $A9B8 ; branch if confused ; character target 31/A947: AD 05 74 LDA $7405 31/A94A: 29 40 AND #$40 31/A94C: F0 27 BEQ $A975 ; branch if not multi-target ; multi-target 31/A94E: 85 63 STA $63 31/A950: A5 64 LDA $64 31/A952: 20 F7 A9 JSR $A9F7 ; validate target (monster special attack) 31/A955: D0 09 BNE $A960 31/A957: A6 64 LDX $64 31/A959: A5 62 LDA $62 31/A95B: 20 20 FD JSR $FD20 ; set bit 31/A95E: 85 62 STA $62 31/A960: E6 64 INC $64 31/A962: A5 64 LDA $64 31/A964: C9 04 CMP #$04 31/A966: D0 E8 BNE $A950 31/A968: A5 62 LDA $62 31/A96A: D0 02 BNE $A96E 31/A96C: E6 69 INC $69 31/A96E: A9 F0 LDA #$F0 31/A970: 85 62 STA $62 31/A972: 4C EB A9 JMP $A9EB ; single target 31/A975: A5 46 LDA $46 31/A977: 10 04 BPL $A97D 31/A979: A9 40 LDA #$40 31/A97B: D0 D1 BNE $A94E 31/A97D: A9 03 LDA #$03 31/A97F: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A982: 85 22 STA $22 31/A984: A9 03 LDA #$03 31/A986: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A989: C5 22 CMP $22 31/A98B: F0 F7 BEQ $A984 31/A98D: AA TAX 31/A98E: A9 01 LDA #$01 31/A990: 95 65 STA $65,X 31/A992: 8A TXA 31/A993: 48 PHA 31/A994: 20 F7 A9 JSR $A9F7 ; validate target (monster special attack) 31/A997: F0 13 BEQ $A9AC 31/A999: 68 PLA 31/A99A: 18 CLC 31/A99B: A5 65 LDA $65 31/A99D: 65 66 ADC $66 31/A99F: 65 67 ADC $67 31/A9A1: 65 68 ADC $68 31/A9A3: C9 04 CMP #$04 31/A9A5: D0 CE BNE $A975 31/A9A7: E6 69 INC $69 31/A9A9: 4C B5 A9 JMP $A9B5 31/A9AC: 68 PLA 31/A9AD: AA TAX 31/A9AE: A5 62 LDA $62 31/A9B0: 20 20 FD JSR $FD20 ; set bit 31/A9B3: 85 62 STA $62 31/A9B5: 4C EB A9 JMP $A9EB ; monster target (if cure spell or confused) 31/A9B8: A9 80 LDA #$80 31/A9BA: 85 63 STA $63 31/A9BC: AD 05 74 LDA $7405 31/A9BF: 29 40 AND #$40 31/A9C1: F0 0B BEQ $A9CE ; branch if not multi-target ; multi-target 31/A9C3: 05 63 ORA $63 31/A9C5: 85 63 STA $63 31/A9C7: A9 FF LDA #$FF 31/A9C9: 85 62 STA $62 31/A9CB: 4C EB A9 JMP $A9EB ; single target 31/A9CE: A9 0C LDA #$0C 31/A9D0: 20 B4 BE JSR $BEB4 ; random (0..A) 31/A9D3: C9 04 CMP #$04 31/A9D5: 90 F7 BCC $A9CE 31/A9D7: 85 22 STA $22 31/A9D9: 20 F7 A9 JSR $A9F7 ; validate target (monster special attack) 31/A9DC: D0 F0 BNE $A9CE 31/A9DE: 38 SEC 31/A9DF: A5 22 LDA $22 31/A9E1: E9 04 SBC #$04 31/A9E3: AA TAX 31/A9E4: A5 62 LDA $62 31/A9E6: 20 20 FD JSR $FD20 ; set bit 31/A9E9: 85 62 STA $62 31/A9EB: A0 2F LDY #$2F 31/A9ED: A5 62 LDA $62 31/A9EF: 91 24 STA ($24),Y ; set target 31/A9F1: C8 INY 31/A9F2: A5 63 LDA $63 31/A9F4: 91 24 STA ($24),Y 31/A9F6: 60 RTS ; [ validate target (monster special attack) ] ; A: character id ; return nonzero if target invalid 31/A9F7: 85 18 STA $18 31/A9F9: A9 40 LDA #$40 ; size = 64 bytes 31/A9FB: 85 1A STA $1A 31/A9FD: A9 75 LDA #$75 ; offset = $7575 31/A9FF: 85 20 STA $20 31/AA01: A9 75 LDA #$75 31/AA03: 85 21 STA $21 31/AA05: 20 9D BE JSR $BE9D ; calculate pointer 31/AA08: A0 01 LDY #$01 31/AA0A: B1 1C LDA ($1C),Y 31/AA0C: 29 C0 AND #$C0 31/AA0E: D0 05 BNE $AA15 ; branch if dead or stone 31/AA10: C8 INY 31/AA11: B1 1C LDA ($1C),Y 31/AA13: 29 01 AND #$01 ; check if jumping 31/AA15: 60 RTS ; -------------------------------------------------------------------------- ; [ battle algorithm $05: update character equipment ] ; weapon properties format (30/9400-30/96BF) ; $00: attack element ; $01: hit % ; $02: attack ; $03: attack status ; $04: spell cast ; $05: cbbbbbbb ; c: consumable ; b: attack bonus (onion sword and shuriken) ; $06: abcdefgh ; a: +5 strength ; b: +5 agility ; c: +5 vitality ; d: +5 intellect ; e: +5 spirit ; f: fire boost ; g: ice boost ; h: lightning boost ; $07: equipability ; there seems to be a bug with the element boosts in byte 6 that causes all ; three flags to get cleared at 31/AF16, so they never do anything. if it ; were working, it would cause boosted spells to do 20% more hits (31/B0AD) ; and have a 4x damage multiplier (31/B8BA). ; A: character id 31/AA16: 20 90 BE JSR $BE90 ; get character offset 31/AA19: A8 TAY 31/AA1A: A2 00 LDX #$00 31/AA1C: B1 59 LDA ($59),Y ; copy equipment 31/AA1E: 9D 2F 74 STA $742F,X 31/AA21: 95 24 STA $24,X 31/AA23: E8 INX 31/AA24: C8 INY 31/AA25: E0 06 CPX #$06 31/AA27: D0 F3 BNE $AA1C 31/AA29: A2 02 LDX #$02 ; loop through gloves, armor, helmet 31/AA2B: B5 24 LDA $24,X 31/AA2D: D0 04 BNE $AA33 31/AA2F: A9 57 LDA #$57 ; no armor 31/AA31: 95 24 STA $24,X 31/AA33: CA DEX 31/AA34: 10 F5 BPL $AA2B 31/AA36: A5 29 LDA $29 ; arrow qty 31/AA38: 8D 33 74 STA $7433 31/AA3B: 85 28 STA $28 31/AA3D: A9 00 LDA #$00 31/AA3F: 85 48 STA $48 31/AA41: 85 49 STA $49 31/AA43: A5 27 LDA $27 ; right hand 31/AA45: 05 28 ORA $28 ; left hand 31/AA47: D0 05 BNE $AA4E ; branch if not unarmed 31/AA49: A9 00 LDA #$00 31/AA4B: 4C 0A AB JMP $AB0A 31/AA4E: A5 27 LDA $27 31/AA50: D0 3E BNE $AA90 31/AA52: A5 28 LDA $28 31/AA54: C9 46 CMP #$46 ; first harp 31/AA56: B0 09 BCS $AA61 31/AA58: A9 01 LDA #$01 ; left hand: normal weapon 31/AA5A: 85 49 STA $49 31/AA5C: A9 02 LDA #$02 ; attack with normal weapon 31/AA5E: 4C 0A AB JMP $AB0A 31/AA61: C9 4A CMP #$4A ; first bow 31/AA63: B0 09 BCS $AA6E 31/AA65: A9 08 LDA #$08 ; left hand: harp 31/AA67: 85 49 STA $49 31/AA69: A9 04 LDA #$04 ; attack with harp 31/AA6B: 4C 0A AB JMP $AB0A 31/AA6E: C9 4F CMP #$4F ; first arrow 31/AA70: B0 09 BCS $AA7B 31/AA72: A9 00 LDA #$00 ; left hand: unarmed (bow with no arrow) 31/AA74: 85 28 STA $28 31/AA76: A9 02 LDA #$02 ; attack with normal weapon 31/AA78: 4C 0A AB JMP $AB0A 31/AA7B: C9 58 CMP #$58 ; first shield 31/AA7D: B0 09 BCS $AA88 31/AA7F: A9 00 LDA #$00 ; left hand: unarmed (arrow with no bow) 31/AA81: 85 28 STA $28 31/AA83: A9 02 LDA #$02 ; attack with normal weapon 31/AA85: 4C 0A AB JMP $AB0A 31/AA88: A9 80 LDA #$80 ; left hand: shield 31/AA8A: 85 49 STA $49 31/AA8C: A9 02 LDA #$02 31/AA8E: D0 7A BNE $AB0A 31/AA90: C9 46 CMP #$46 ; first harp 31/AA92: B0 1A BCS $AAAE 31/AA94: A9 01 LDA #$01 ; right hand: normal weapon 31/AA96: 85 48 STA $48 31/AA98: A5 28 LDA $28 ; left hand 31/AA9A: F0 0E BEQ $AAAA 31/AA9C: C9 58 CMP #$58 ; first shield 31/AA9E: B0 06 BCS $AAA6 31/AAA0: A9 01 LDA #$01 ; left hand: normal weapon 31/AAA2: 85 49 STA $49 31/AAA4: D0 04 BNE $AAAA 31/AAA6: A9 80 LDA #$80 ; left hand: shield 31/AAA8: 85 49 STA $49 31/AAAA: A9 02 LDA #$02 ; attack with normal weapon 31/AAAC: D0 5C BNE $AB0A 31/AAAE: C9 4A CMP #$4A ; first bow 31/AAB0: B0 08 BCS $AABA 31/AAB2: A9 08 LDA #$08 ; right hand: harp 31/AAB4: 85 48 STA $48 31/AAB6: A9 04 LDA #$04 ; attack with harp 31/AAB8: D0 50 BNE $AB0A 31/AABA: C9 4F CMP #$4F ; first arrow 31/AABC: B0 18 BCS $AAD6 31/AABE: A5 28 LDA $28 31/AAC0: F0 0C BEQ $AACE 31/AAC2: A9 02 LDA #$02 ; right hand: bow 31/AAC4: 85 48 STA $48 31/AAC6: A9 04 LDA #$04 ; left hand: arrow 31/AAC8: 85 49 STA $49 31/AACA: A9 06 LDA #$06 ; attack with bow and arrow 31/AACC: D0 3C BNE $AB0A 31/AACE: A9 00 LDA #$00 ; right hand: unarmed (bow with no arrow) 31/AAD0: 85 27 STA $27 31/AAD2: A9 02 LDA #$02 31/AAD4: D0 34 BNE $AB0A 31/AAD6: C9 58 CMP #$58 ; first shield 31/AAD8: B0 18 BCS $AAF2 31/AADA: A5 28 LDA $28 31/AADC: F0 0C BEQ $AAEA 31/AADE: A9 04 LDA #$04 ; right hand: arrow 31/AAE0: 85 48 STA $48 31/AAE2: A9 02 LDA #$02 ; left hand: bow 31/AAE4: 85 49 STA $49 31/AAE6: A9 06 LDA #$06 ; attack with bow and arrow 31/AAE8: D0 20 BNE $AB0A 31/AAEA: A9 00 LDA #$00 ; right hand: unarmed (arrow with no bow) 31/AAEC: 85 27 STA $27 31/AAEE: A9 02 LDA #$02 31/AAF0: D0 18 BNE $AB0A 31/AAF2: A9 80 LDA #$80 ; right hand: shield 31/AAF4: 85 48 STA $48 31/AAF6: A5 28 LDA $28 31/AAF8: F0 0E BEQ $AB08 31/AAFA: C9 58 CMP #$58 ; first shield 31/AAFC: B0 06 BCS $AB04 31/AAFE: A9 01 LDA #$01 ; left hand: weapon 31/AB00: 85 49 STA $49 31/AB02: D0 04 BNE $AB08 31/AB04: A9 80 LDA #$80 ; left hand: shield 31/AB06: 85 49 STA $49 31/AB08: A9 02 LDA #$02 ; attack with normal weapon 31/AB0A: 48 PHA 31/AB0B: A2 00 LDX #$00 31/AB0D: 8E 70 75 STX $7570 31/AB10: 8E 71 75 STX $7571 31/AB13: A9 00 LDA #$00 ; 30/9400 (weapon/armor properties) 31/AB15: 85 20 STA $20 31/AB17: A9 94 LDA #$94 31/AB19: 85 21 STA $21 31/AB1B: AE 70 75 LDX $7570 31/AB1E: B5 24 LDA $24,X ; item id 31/AB20: 85 18 STA $18 31/AB22: A2 08 LDX #$08 ; size: 8 bytes 31/AB24: 86 1A STX $1A 31/AB26: AE 71 75 LDX $7571 31/AB29: A9 18 LDA #$18 31/AB2B: A8 TAY 31/AB2C: 20 A6 FD JSR $FDA6 ; load array item 31/AB2F: 8E 71 75 STX $7571 31/AB32: EE 70 75 INC $7570 ; next item 31/AB35: AD 70 75 LDA $7570 31/AB38: C9 05 CMP #$05 31/AB3A: D0 D7 BNE $AB13 31/AB3C: A2 13 LDX #$13 ; clear $34-$47 31/AB3E: A9 00 LDA #$00 31/AB40: 95 34 STA $34,X 31/AB42: CA DEX 31/AB43: 10 FB BPL $AB40 31/AB45: AD 06 74 LDA $7406 ; element bonus 31/AB48: 0D 0E 74 ORA $740E 31/AB4B: 0D 16 74 ORA $7416 31/AB4E: 0D 1E 74 ORA $741E 31/AB51: 0D 26 74 ORA $7426 31/AB54: 29 07 AND #$07 31/AB56: 20 3D FD JSR $FD3D ; asl5 31/AB59: 85 24 STA $24 ; element boost 31/AB5B: A9 0F LDA #$0F 31/AB5D: 20 98 BE JSR $BE98 ; add character offset 31/AB60: B1 59 LDA ($59),Y 31/AB62: 29 F9 AND #$F9 ; mask weapon type bits 31/AB64: 05 24 ORA $24 31/AB66: 91 59 STA ($59),Y 31/AB68: A9 12 LDA #$12 31/AB6A: 20 98 BE JSR $BE98 ; add character offset 31/AB6D: A2 00 LDX #$00 31/AB6F: B1 57 LDA ($57),Y ; base stat 31/AB71: 95 2C STA $2C,X 31/AB73: C8 INY 31/AB74: E8 INX 31/AB75: E0 05 CPX #$05 31/AB77: D0 F6 BNE $AB6F 31/AB79: AD 06 74 LDA $7406 ; stat bonus (helmet) 31/AB7C: 20 63 AF JSR $AF63 ; apply equipment stat bonus 31/AB7F: AD 0E 74 LDA $740E ; stat bonus (armor) 31/AB82: 20 63 AF JSR $AF63 ; apply equipment stat bonus 31/AB85: AD 16 74 LDA $7416 ; etc. 31/AB88: 20 63 AF JSR $AF63 31/AB8B: AD 1E 74 LDA $741E 31/AB8E: 20 63 AF JSR $AF63 31/AB91: AD 26 74 LDA $7426 31/AB94: 20 63 AF JSR $AF63 31/AB97: A2 00 LDX #$00 31/AB99: B5 2C LDA $2C,X 31/AB9B: C9 63 CMP #$63 ; cap stats at 99 31/AB9D: 90 02 BCC $ABA1 31/AB9F: A9 63 LDA #$63 31/ABA1: 91 57 STA ($57),Y ; set mod. stats 31/ABA3: 9D 28 74 STA $7428,X 31/ABA6: C8 INY 31/ABA7: E8 INX 31/ABA8: E0 05 CPX #$05 31/ABAA: D0 ED BNE $AB99 31/ABAC: 68 PLA ; weapon type (2: normal, 4: harp, 6: bow and arrow) 31/ABAD: 85 32 STA $32 31/ABAF: AD 1F 74 LDA $741F ; right hand attack elements 31/ABB2: 10 04 BPL $ABB8 31/ABB4: A9 00 LDA #$00 31/ABB6: F0 03 BEQ $ABBB 31/ABB8: AD 18 74 LDA $7418 31/ABBB: 85 38 STA $38 31/ABBD: AD 27 74 LDA $7427 ; left hand attack elements 31/ABC0: 10 04 BPL $ABC6 31/ABC2: A9 00 LDA #$00 31/ABC4: F0 03 BEQ $ABC9 31/ABC6: AD 20 74 LDA $7420 31/ABC9: 85 3D STA $3D 31/ABCB: A4 5F LDY $5F 31/ABCD: C8 INY 31/ABCE: B1 57 LDA ($57),Y ; level 31/ABD0: 8D 2E 74 STA $742E 31/ABD3: 20 45 FD JSR $FD45 ; lsr4 31/ABD6: 85 26 STA $26 31/ABD8: AD 29 74 LDA $7429 ; agility 31/ABDB: 20 45 FD JSR $FD45 ; lsr4 31/ABDE: 38 SEC 31/ABDF: 65 26 ADC $26 31/ABE1: 85 39 STA $39 31/ABE3: 85 3E STA $3E 31/ABE5: A9 10 LDA #$10 31/ABE7: 20 98 BE JSR $BE98 ; add character offset 31/ABEA: B1 57 LDA ($57),Y ; job level 31/ABEC: 8D 2D 74 STA $742D 31/ABEF: 20 47 FD JSR $FD47 ; lsr2 31/ABF2: 85 25 STA $25 31/ABF4: AD 29 74 LDA $7429 ; agility 31/ABF7: 20 47 FD JSR $FD47 ; lsr2 31/ABFA: 85 24 STA $24 31/ABFC: A5 32 LDA $32 ; weapon type 31/ABFE: 29 06 AND #$06 31/AC00: C9 06 CMP #$06 31/AC02: D0 21 BNE $AC25 ; branch if not bow and arrow 31/AC04: A5 48 LDA $48 31/AC06: 29 02 AND #$02 31/AC08: F0 05 BEQ $AC0F 31/AC0A: AD 19 74 LDA $7419 31/AC0D: D0 03 BNE $AC12 31/AC0F: AD 21 74 LDA $7421 31/AC12: 18 CLC 31/AC13: 65 24 ADC $24 31/AC15: 65 25 ADC $25 31/AC17: C9 63 CMP #$63 31/AC19: 90 02 BCC $AC1D 31/AC1B: A9 63 LDA #$63 31/AC1D: 85 3A STA $3A ; attack power 31/AC1F: A9 00 LDA #$00 31/AC21: 85 3F STA $3F 31/AC23: F0 30 BEQ $AC55 31/AC25: A5 48 LDA $48 31/AC27: 10 04 BPL $AC2D 31/AC29: A9 00 LDA #$00 31/AC2B: F0 0E BEQ $AC3B 31/AC2D: 18 CLC 31/AC2E: AD 19 74 LDA $7419 31/AC31: 65 24 ADC $24 31/AC33: 65 25 ADC $25 31/AC35: C9 63 CMP #$63 31/AC37: 90 02 BCC $AC3B 31/AC39: A9 63 LDA #$63 31/AC3B: 85 3A STA $3A 31/AC3D: A5 49 LDA $49 31/AC3F: 10 04 BPL $AC45 31/AC41: A9 00 LDA #$00 31/AC43: F0 0E BEQ $AC53 31/AC45: 18 CLC 31/AC46: AD 21 74 LDA $7421 31/AC49: 65 24 ADC $24 31/AC4B: 65 25 ADC $25 31/AC4D: C9 63 CMP #$63 31/AC4F: 90 02 BCC $AC53 31/AC51: A9 63 LDA #$63 31/AC53: 85 3F STA $3F 31/AC55: A9 38 LDA #$38 31/AC57: 20 98 BE JSR $BE98 ; add character offset 31/AC5A: AD 1D 74 LDA $741D 31/AC5D: 29 7F AND #$7F 31/AC5F: 91 5B STA ($5B),Y ; right hand bonus attack 31/AC61: C8 INY 31/AC62: AD 25 74 LDA $7425 31/AC65: 29 7F AND #$7F 31/AC67: 91 5B STA ($5B),Y ; left hand bonus attack 31/AC69: 18 CLC 31/AC6A: A4 5F LDY $5F 31/AC6C: B1 57 LDA ($57),Y 31/AC6E: C9 02 CMP #$02 31/AC70: F0 04 BEQ $AC76 31/AC72: C9 0D CMP #$0D 31/AC74: D0 2C BNE $ACA2 31/AC76: A5 32 LDA $32 ; weapon type 31/AC78: 29 06 AND #$06 31/AC7A: D0 26 BNE $ACA2 31/AC7C: AD 28 74 LDA $7428 ; strength 31/AC7F: 20 47 FD JSR $FD47 ; lsr2 31/AC82: 85 24 STA $24 31/AC84: AD 2E 74 LDA $742E 31/AC87: 4A LSR 31/AC88: 18 CLC 31/AC89: 6D 2E 74 ADC $742E 31/AC8C: 85 25 STA $25 31/AC8E: AD 2D 74 LDA $742D 31/AC91: 20 47 FD JSR $FD47 ; lsr2 31/AC94: 18 CLC 31/AC95: 65 24 ADC $24 31/AC97: 65 25 ADC $25 31/AC99: 69 02 ADC #$02 31/AC9B: 85 3B STA $3B 31/AC9D: 85 40 STA $40 31/AC9F: 4C 3D AD JMP $AD3D 31/ACA2: A5 32 LDA $32 ; weapon type 31/ACA4: 29 06 AND #$06 31/ACA6: C9 06 CMP #$06 31/ACA8: D0 32 BNE $ACDC ; branch if not bow and arrow 31/ACAA: A5 48 LDA $48 31/ACAC: 29 04 AND #$04 31/ACAE: F0 0E BEQ $ACBE 31/ACB0: AD 1A 74 LDA $741A 31/ACB3: 85 24 STA $24 31/ACB5: AD 22 74 LDA $7422 31/ACB8: 4A LSR 31/ACB9: 85 25 STA $25 31/ACBB: 18 CLC 31/ACBC: 90 0B BCC $ACC9 31/ACBE: AD 22 74 LDA $7422 31/ACC1: 85 24 STA $24 31/ACC3: AD 1A 74 LDA $741A 31/ACC6: 4A LSR 31/ACC7: 85 25 STA $25 31/ACC9: AD 28 74 LDA $7428 ; strength 31/ACCC: 20 47 FD JSR $FD47 ; lsr2 31/ACCF: 18 CLC 31/ACD0: 65 24 ADC $24 31/ACD2: 65 25 ADC $25 31/ACD4: 85 3B STA $3B 31/ACD6: A9 00 LDA #$00 31/ACD8: 85 40 STA $40 31/ACDA: F0 61 BEQ $AD3D 31/ACDC: A5 48 LDA $48 31/ACDE: 05 49 ORA $49 31/ACE0: D0 13 BNE $ACF5 31/ACE2: AD 28 74 LDA $7428 ; strength 31/ACE5: 20 47 FD JSR $FD47 ; lsr2 31/ACE8: 18 CLC 31/ACE9: 6D 1A 74 ADC $741A 31/ACEC: 65 25 ADC $25 31/ACEE: 85 3B STA $3B 31/ACF0: 85 40 STA $40 31/ACF2: 4C 3D AD JMP $AD3D 31/ACF5: A5 48 LDA $48 31/ACF7: 10 0A BPL $AD03 31/ACF9: A9 00 LDA #$00 31/ACFB: 85 39 STA $39 31/ACFD: 85 3A STA $3A 31/ACFF: 85 3B STA $3B 31/AD01: F0 16 BEQ $AD19 31/AD03: A5 49 LDA $49 31/AD05: 30 04 BMI $AD0B 31/AD07: A5 48 LDA $48 31/AD09: F0 EE BEQ $ACF9 31/AD0B: AD 28 74 LDA $7428 ; strength 31/AD0E: 20 47 FD JSR $FD47 ; lsr2 31/AD11: 18 CLC 31/AD12: 65 25 ADC $25 31/AD14: 6D 1A 74 ADC $741A 31/AD17: 85 3B STA $3B 31/AD19: A5 49 LDA $49 31/AD1B: 10 0A BPL $AD27 31/AD1D: A9 00 LDA #$00 31/AD1F: 85 3E STA $3E 31/AD21: 85 3F STA $3F 31/AD23: 85 40 STA $40 31/AD25: F0 16 BEQ $AD3D 31/AD27: A5 48 LDA $48 31/AD29: 30 04 BMI $AD2F 31/AD2B: A5 49 LDA $49 31/AD2D: F0 EE BEQ $AD1D 31/AD2F: AD 28 74 LDA $7428 ; strength 31/AD32: 20 47 FD JSR $FD47 ; lsr2 31/AD35: 18 CLC 31/AD36: 65 25 ADC $25 31/AD38: 6D 22 74 ADC $7422 31/AD3B: 85 40 STA $40 31/AD3D: A5 39 LDA $39 31/AD3F: 05 3A ORA $3A 31/AD41: 05 3B ORA $3B 31/AD43: D0 14 BNE $AD59 31/AD45: A5 3E LDA $3E 31/AD47: 85 39 STA $39 31/AD49: A5 3F LDA $3F 31/AD4B: 85 3A STA $3A 31/AD4D: A5 40 LDA $40 31/AD4F: 85 3B STA $3B 31/AD51: A9 00 LDA #$00 31/AD53: 85 3E STA $3E 31/AD55: 85 3F STA $3F 31/AD57: 85 40 STA $40 31/AD59: A5 48 LDA $48 31/AD5B: 30 05 BMI $AD62 ; branch if right hand shield 31/AD5D: AD 1B 74 LDA $741B 31/AD60: 85 3C STA $3C ; right hand weapon status 31/AD62: A5 49 LDA $49 31/AD64: 30 0F BMI $AD75 ; branch if left hand shield 31/AD66: AD 23 74 LDA $7423 31/AD69: 85 41 STA $41 ; left hand weapon status 31/AD6B: A5 49 LDA $49 31/AD6D: 29 08 AND #$08 31/AD6F: F0 04 BEQ $AD75 ; branch if no harp 31/AD71: A5 41 LDA $41 31/AD73: 85 3C STA $3C ; use harp attack status 31/AD75: A5 32 LDA $32 ; weapon type 31/AD77: 29 06 AND #$06 31/AD79: C9 06 CMP #$06 31/AD7B: D0 0C BNE $AD89 ; branch if not bow and arrow 31/AD7D: A5 38 LDA $38 31/AD7F: 05 3D ORA $3D ; combine bow and arrow elements 31/AD81: 85 38 STA $38 31/AD83: A5 3C LDA $3C 31/AD85: 05 41 ORA $41 ; combine bow and arrow status 31/AD87: 85 3C STA $3C 31/AD89: 20 98 BE JSR $BE98 ; add character offset 31/AD8C: A2 00 LDX #$00 31/AD8E: B1 5B LDA ($5B),Y ; level 31/AD90: 95 24 STA $24,X 31/AD92: C8 INY 31/AD93: E8 INX 31/AD94: E0 02 CPX #$02 31/AD96: D0 F6 BNE $AD8E 31/AD98: A5 48 LDA $48 31/AD9A: 05 49 ORA $49 31/AD9C: F0 14 BEQ $ADB2 31/AD9E: A5 32 LDA $32 ; weapon type 31/ADA0: 29 06 AND #$06 31/ADA2: C9 06 CMP #$06 31/ADA4: F0 24 BEQ $ADCA ; branch if bow and arrow 31/ADA6: A5 48 LDA $48 31/ADA8: 30 0B BMI $ADB5 31/ADAA: F0 09 BEQ $ADB5 31/ADAC: A5 49 LDA $49 31/ADAE: 30 05 BMI $ADB5 31/ADB0: F0 03 BEQ $ADB5 31/ADB2: 18 CLC 31/ADB3: 90 35 BCC $ADEA 31/ADB5: 06 24 ASL $24 31/ADB7: A5 48 LDA $48 31/ADB9: 30 06 BMI $ADC1 31/ADBB: AD 1A 74 LDA $741A 31/ADBE: 18 CLC 31/ADBF: 90 03 BCC $ADC4 31/ADC1: AD 22 74 LDA $7422 31/ADC4: 4A LSR 31/ADC5: 18 CLC 31/ADC6: 65 25 ADC $25 31/ADC8: 85 25 STA $25 31/ADCA: A9 00 LDA #$00 31/ADCC: 85 3E STA $3E 31/ADCE: A5 24 LDA $24 31/ADD0: 0A ASL 31/ADD1: 18 CLC 31/ADD2: 65 24 ADC $24 31/ADD4: 85 24 STA $24 31/ADD6: A5 48 LDA $48 31/ADD8: 29 04 AND #$04 31/ADDA: F0 06 BEQ $ADE2 31/ADDC: AD 1A 74 LDA $741A 31/ADDF: 18 CLC 31/ADE0: 90 03 BCC $ADE5 31/ADE2: AD 22 74 LDA $7422 31/ADE5: 18 CLC 31/ADE6: 65 25 ADC $25 31/ADE8: 85 25 STA $25 31/ADEA: A9 00 LDA #$00 31/ADEC: 85 24 STA $24 31/ADEE: 85 25 STA $25 31/ADF0: 85 26 STA $26 31/ADF2: A5 48 LDA $48 31/ADF4: 10 07 BPL $ADFD 31/ADF6: AD 18 74 LDA $7418 31/ADF9: 85 24 STA $24 31/ADFB: E6 26 INC $26 31/ADFD: A5 49 LDA $49 31/ADFF: 10 07 BPL $AE08 31/AE01: AD 20 74 LDA $7420 31/AE04: 85 25 STA $25 31/AE06: E6 26 INC $26 31/AE08: A5 24 LDA $24 31/AE0A: 05 25 ORA $25 31/AE0C: 0D 00 74 ORA $7400 31/AE0F: 0D 08 74 ORA $7408 31/AE12: 0D 10 74 ORA $7410 31/AE15: 85 42 STA $42 ; absorbed elements 31/AE17: AD 2E 74 LDA $742E 31/AE1A: 20 45 FD JSR $FD45 ; lsr4 31/AE1D: 18 CLC 31/AE1E: 69 01 ADC #$01 31/AE20: A6 26 LDX $26 31/AE22: 20 D6 FC JSR $FCD6 ; multiply 31/AE25: AD 29 74 LDA $7429 ; agility 31/AE28: 20 45 FD JSR $FD45 ; lsr4 31/AE2B: 18 CLC 31/AE2C: 65 1A ADC $1A 31/AE2E: 85 43 STA $43 ; evade multiplier 31/AE30: A9 00 LDA #$00 31/AE32: 85 24 STA $24 31/AE34: 85 25 STA $25 31/AE36: A5 48 LDA $48 31/AE38: 10 05 BPL $AE3F 31/AE3A: AD 19 74 LDA $7419 ; shield evade % 31/AE3D: 85 24 STA $24 31/AE3F: A5 49 LDA $49 31/AE41: 10 05 BPL $AE48 31/AE43: AD 21 74 LDA $7421 ; shield evade % 31/AE46: 85 25 STA $25 31/AE48: AD 29 74 LDA $7429 ; agility 31/AE4B: 20 47 FD JSR $FD47 ; lsr2 31/AE4E: 18 CLC 31/AE4F: 65 24 ADC $24 31/AE51: 65 25 ADC $25 31/AE53: 6D 01 74 ADC $7401 31/AE56: 6D 09 74 ADC $7409 31/AE59: 6D 11 74 ADC $7411 31/AE5C: C9 63 CMP #$63 31/AE5E: 90 02 BCC $AE62 31/AE60: A9 63 LDA #$63 31/AE62: 85 44 STA $44 ; evade % 31/AE64: A9 00 LDA #$00 31/AE66: 85 24 STA $24 31/AE68: 85 25 STA $25 31/AE6A: A5 48 LDA $48 31/AE6C: 10 05 BPL $AE73 31/AE6E: AD 1A 74 LDA $741A 31/AE71: 85 24 STA $24 31/AE73: A5 49 LDA $49 31/AE75: 10 05 BPL $AE7C 31/AE77: AD 22 74 LDA $7422 31/AE7A: 85 25 STA $25 31/AE7C: AD 2A 74 LDA $742A ; vitality 31/AE7F: 4A LSR 31/AE80: 18 CLC 31/AE81: 65 24 ADC $24 31/AE83: 65 25 ADC $25 31/AE85: 6D 02 74 ADC $7402 31/AE88: 6D 0A 74 ADC $740A 31/AE8B: 6D 12 74 ADC $7412 31/AE8E: 85 45 STA $45 ; defense 31/AE90: A9 00 LDA #$00 31/AE92: 85 24 STA $24 31/AE94: 85 25 STA $25 31/AE96: A5 48 LDA $48 31/AE98: 10 05 BPL $AE9F 31/AE9A: AD 1B 74 LDA $741B ; shield status resistance 31/AE9D: 85 24 STA $24 31/AE9F: A5 49 LDA $49 31/AEA1: 10 05 BPL $AEA8 31/AEA3: AD 23 74 LDA $7423 ; shield status resistance 31/AEA6: 85 25 STA $25 31/AEA8: A5 24 LDA $24 31/AEAA: 05 25 ORA $25 31/AEAC: 0D 03 74 ORA $7403 ; helmet status resistance 31/AEAF: 0D 0B 74 ORA $740B 31/AEB2: 0D 13 74 ORA $7413 31/AEB5: 85 46 STA $46 ; status resistance 31/AEB7: A5 42 LDA $42 31/AEB9: 4A LSR 31/AEBA: 29 28 AND #$28 31/AEBC: 85 24 STA $24 31/AEBE: A5 42 LDA $42 31/AEC0: 0A ASL 31/AEC1: 29 50 AND #$50 31/AEC3: 05 24 ORA $24 31/AEC5: 85 34 STA $34 31/AEC7: A5 42 LDA $42 31/AEC9: 49 FF EOR #$FF 31/AECB: 25 34 AND $34 31/AECD: 85 34 STA $34 31/AECF: AD 29 74 LDA $7429 ; agility 31/AED2: 20 44 FD JSR $FD44 ; lsr5 31/AED5: 85 25 STA $25 31/AED7: 18 CLC 31/AED8: AD 2B 74 LDA $742B ; intelligence 31/AEDB: 6D 2C 74 ADC $742C ; spirit 31/AEDE: 85 26 STA $26 31/AEE0: 20 44 FD JSR $FD44 ; lsr5 31/AEE3: 18 CLC 31/AEE4: 65 25 ADC $25 31/AEE6: 85 35 STA $35 ; m.evade mult = agl / 32 + (int + spr) / 32 31/AEE8: A5 26 LDA $26 31/AEEA: 4A LSR 31/AEEB: 85 36 STA $36 ; m.evade % = (int + spr) / 2 31/AEED: 18 CLC 31/AEEE: AD 04 74 LDA $7404 ; helmet m.defense 31/AEF1: 6D 0C 74 ADC $740C ; armor m.defense 31/AEF4: 6D 14 74 ADC $7414 ; gloves m.defense 31/AEF7: 85 37 STA $37 31/AEF9: A5 48 LDA $48 31/AEFB: 10 08 BPL $AF05 ; branch if no right hand shield 31/AEFD: 18 CLC 31/AEFE: A5 37 LDA $37 31/AF00: 6D 1C 74 ADC $741C ; shield m.defense 31/AF03: 85 37 STA $37 31/AF05: A5 49 LDA $49 31/AF07: 10 08 BPL $AF11 ; branch if no left hand shield 31/AF09: 18 CLC 31/AF0A: A5 37 LDA $37 31/AF0C: 6D 24 74 ADC $7424 ; shield m.defense 31/AF0F: 85 37 STA $37 31/AF11: A9 0F LDA #$0F 31/AF13: 20 98 BE JSR $BE98 ; add character offset 31/AF16: B1 59 LDA ($59),Y ; get battle row 31/AF18: 29 01 AND #$01 ; *** bug? should be #$E1 to get elements *** 31/AF1A: 05 32 ORA $32 ; weapon type 31/AF1C: 48 PHA 31/AF1D: 91 59 STA ($59),Y 31/AF1F: A9 33 LDA #$33 31/AF21: 20 98 BE JSR $BE98 ; add character offset 31/AF24: 68 PLA 31/AF25: 91 5B STA ($5B),Y 31/AF27: A9 12 LDA #$12 31/AF29: 20 98 BE JSR $BE98 ; add character offset 31/AF2C: A2 00 LDX #$00 31/AF2E: B5 34 LDA $34,X ; copy 20 bytes from $34-$47 31/AF30: 91 5B STA ($5B),Y ; to $12-$25 in character properties 31/AF32: 98 TYA 31/AF33: 48 PHA 31/AF34: 18 CLC 31/AF35: 69 0A ADC #$0A 31/AF37: A8 TAY 31/AF38: B5 34 LDA $34,X 31/AF3A: 91 57 STA ($57),Y ; and $1C-$2F in sram properties 1 31/AF3C: 68 PLA 31/AF3D: A8 TAY 31/AF3E: C8 INY 31/AF3F: E8 INX 31/AF40: E0 14 CPX #$14 31/AF42: D0 EA BNE $AF2E 31/AF44: A9 10 LDA #$10 31/AF46: 20 98 BE JSR $BE98 ; add character offset 31/AF49: AD 2B 74 LDA $742B 31/AF4C: 91 5B STA ($5B),Y ; intelligence 31/AF4E: C8 INY 31/AF4F: AD 2C 74 LDA $742C 31/AF52: 91 5B STA ($5B),Y ; spirit 31/AF54: A9 31 LDA #$31 31/AF56: 20 98 BE JSR $BE98 ; add character offset 31/AF59: A5 48 LDA $48 31/AF5B: 91 5B STA ($5B),Y ; right hand item type 31/AF5D: C8 INY 31/AF5E: A5 49 LDA $49 31/AF60: 91 5B STA ($5B),Y ; left hand item type 31/AF62: 60 RTS ; [ apply equipment stat bonus ] 31/AF63: A2 00 LDX #$00 31/AF65: 0A ASL 31/AF66: 90 09 BCC $AF71 31/AF68: 48 PHA 31/AF69: 18 CLC 31/AF6A: B5 2C LDA $2C,X 31/AF6C: 69 05 ADC #$05 31/AF6E: 95 2C STA $2C,X 31/AF70: 68 PLA 31/AF71: E8 INX 31/AF72: E0 05 CPX #$05 31/AF74: D0 EF BNE $AF65 31/AF76: 60 RTS ; -------------------------------------------------------------------------- ; [ battle algorithm $00: do magic effect ] ; $1A: magic id ; attack properties format (30/98C0 -> $7400) ; $00: element ; $01: hit % ; $02: spell power ; $03: status (status 2 if lsb set) ; $04: attack effect (see 31/B15F) ; $05: admwklll ; a: target allies by default ; d: no damage split (auto-target all) ; m: don't allow multi-target ; w: white magic (use spirit) ; k: black magic (use intellect) ; l: spell level (only used by cure spells) ; $06: animation id -> $7E9D ; $07: job equipability 31/AF77: A9 00 LDA #$00 ; show normal magic message 31/AF79: 85 54 STA $54 31/AF7B: A2 09 LDX #$09 31/AF7D: 9D B8 7E STA $7EB8,X ; clear reflect targets 31/AF80: CA DEX 31/AF81: 10 FA BPL $AF7D 31/AF83: A5 CC LDA $CC 31/AF85: F0 04 BEQ $AF8B ; branch if not ineffective 31/AF87: A0 2C LDY #$2C 31/AF89: D0 4B BNE $AFD6 31/AF8B: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/AF8E: 30 0A BMI $AF9A ; branch if a monster 31/AF90: 29 10 AND #$10 31/AF92: F0 06 BEQ $AF9A ; branch if not magic 31/AF94: A5 1A LDA $1A 31/AF96: C9 50 CMP #$50 31/AF98: B0 ED BCS $AF87 ; branch if a terrain attack 31/AF9A: A0 01 LDY #$01 31/AF9C: B1 6E LDA ($6E),Y 31/AF9E: 29 30 AND #$30 31/AFA0: F0 26 BEQ $AFC8 ; branch if attacker is not toad or silenced 31/AFA2: 29 20 AND #$20 31/AFA4: F0 15 BEQ $AFBB ; branch if not toad 31/AFA6: A5 1A LDA $1A 31/AFA8: C9 F6 CMP #$F6 ; toad can only cast toad 31/AFAA: F0 1C BEQ $AFC8 31/AFAC: A9 53 LDA #$53 ; $0673: "かえるは まほうがつかえない!" / "Can't use magic" 31/AFAE: D0 0D BNE $AFBD 31/AFB0: 20 B5 A2 JSR $A2B5 ; i don't think this code is ever used 31/AFB3: 10 06 BPL $AFBB 31/AFB5: A5 1A LDA $1A 31/AFB7: C9 38 CMP #$38 31/AFB9: B0 0D BCS $AFC8 ; branch if not a character spell 31/AFBB: A9 50 LDA #$50 ; $0670: "ちんもくしていて こうかがでない!" / "Silenced" 31/AFBD: 8D DA 78 STA $78DA 31/AFC0: A9 18 LDA #$18 ; ineffective 31/AFC2: 8D C2 7E STA $7EC2 ; action id 31/AFC5: 4C 5E B1 JMP $B15E ; return 31/AFC8: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/AFCB: 29 18 AND #$18 31/AFCD: D0 07 BNE $AFD6 ; branch if not a spell or item 31/AFCF: 38 SEC 31/AFD0: A5 1A LDA $1A 31/AFD2: E9 C8 SBC #$C8 ; subtract $C8 to get spell id 31/AFD4: 85 1A STA $1A 31/AFD6: B1 6E LDA ($6E),Y ; attacker flags 31/AFD8: 29 E7 AND #$E7 ; clear item and magic flags 31/AFDA: 91 6E STA ($6E),Y 31/AFDC: A2 00 LDX #$00 31/AFDE: A5 1A LDA $1A 31/AFE0: 8D 88 7E STA $7E88 ; set spell id 31/AFE3: C9 5B CMP #$5B 31/AFE5: 90 01 BCC $AFE8 31/AFE7: E8 INX ; increment if a summon attack 31/AFE8: 8E C3 7E STX $7EC3 31/AFEB: A5 1A LDA $1A 31/AFED: 85 18 STA $18 31/AFEF: A9 08 LDA #$08 ; size: 8 bytes 31/AFF1: 85 1A STA $1A 31/AFF3: A9 C0 LDA #$C0 ; 30/98C0 (attack properties) 31/AFF5: 85 20 STA $20 31/AFF7: A9 98 LDA #$98 31/AFF9: 85 21 STA $21 31/AFFB: A2 00 LDX #$00 ; destination: $7400 31/AFFD: A0 18 LDY #$18 ; return bank 31/AFFF: 98 TYA 31/B000: 20 A6 FD JSR $FDA6 ; load array item 31/B003: AD 06 74 LDA $7406 ; magic animation id 31/B006: 8D 9D 7E STA $7E9D 31/B009: A2 08 LDX #$08 31/B00B: A0 00 LDY #$00 31/B00D: AD 99 7E LDA $7E99 ; targets 31/B010: 0A ASL 31/B011: 90 01 BCC $B014 31/B013: C8 INY 31/B014: CA DEX 31/B015: D0 F9 BNE $B010 31/B017: 84 2A STY $2A ; number of targets (for dividing damage) 31/B019: A0 30 LDY #$30 31/B01B: B1 6E LDA ($6E),Y 31/B01D: 30 0A BMI $B029 ; branch if a monster 31/B01F: A9 75 LDA #$75 ; $7575 31/B021: 85 70 STA $70 31/B023: A9 75 LDA #$75 31/B025: 85 71 STA $71 31/B027: D0 08 BNE $B031 31/B029: A9 75 LDA #$75 ; $7675 31/B02B: 85 70 STA $70 31/B02D: A9 76 LDA #$76 31/B02F: 85 71 STA $71 31/B031: 20 BA A2 JSR $A2BA ; init attacker and target 31/B034: A2 FF LDX #$FF 31/B036: 86 78 STX $78 ; reset damage 31/B038: 86 79 STX $79 31/B03A: 86 7A STX $7A 31/B03C: 86 7B STX $7B 31/B03E: E8 INX 31/B03F: 8E 74 75 STX $7574 ; clear reflected flag 31/B042: 8E 73 75 STX $7573 ; clear dead flag 31/B045: AD 9D 7E LDA $7E9D 31/B048: C9 06 CMP #$06 31/B04A: F0 19 BEQ $B065 ; branch if monster summon or split 31/B04C: A6 62 LDX $62 31/B04E: B5 F0 LDA $F0,X 31/B050: 29 C0 AND #$C0 31/B052: F0 03 BEQ $B057 ; branch if attacker is not dead or stone 31/B054: 4C 5E B1 JMP $B15E ; return 31/B057: AE C1 7E LDX $7EC1 31/B05A: AD 99 7E LDA $7E99 31/B05D: 20 38 FD JSR $FD38 ; check bit 31/B060: D0 03 BNE $B065 31/B062: 4C 39 B1 JMP $B139 31/B065: A5 CC LDA $CC 31/B067: D0 6A BNE $B0D3 ; branch if ineffective 31/B069: AD 05 74 LDA $7405 31/B06C: A0 10 LDY #$10 31/B06E: 29 10 AND #$10 31/B070: F0 01 BEQ $B073 ; use spirit if bit set 31/B072: C8 INY 31/B073: B1 6E LDA ($6E),Y ; intelligence or spirit 31/B075: 85 18 STA $18 31/B077: 4A LSR 31/B078: 18 CLC 31/B079: 6D 01 74 ADC $7401 ; spell hit % 31/B07C: 85 25 STA $25 31/B07E: A6 62 LDX $62 31/B080: B5 F0 LDA $F0,X ; attacker status 31/B082: 29 04 AND #$04 31/B084: F0 02 BEQ $B088 ; branch if attacker is not blind 31/B086: 46 25 LSR $25 ; halve hit % 31/B088: A0 0F LDY #$0F 31/B08A: B1 6E LDA ($6E),Y ; job level 31/B08C: 20 44 FD JSR $FD44 ; lsr5 31/B08F: 85 19 STA $19 31/B091: A0 00 LDY #$00 31/B093: B1 6E LDA ($6E),Y ; level 31/B095: 20 45 FD JSR $FD45 ; lsr4 31/B098: 85 1A STA $1A 31/B09A: A5 18 LDA $18 ; intelligence or spirit 31/B09C: 20 45 FD JSR $FD45 ; lsr4 31/B09F: 38 SEC 31/B0A0: 65 19 ADC $19 31/B0A2: 65 1A ADC $1A 31/B0A4: 85 24 STA $24 ; set attack multiplier 31/B0A6: 85 38 STA $38 ; see 31/BE43 31/B0A8: 20 28 BB JSR $BB28 ; get number of hits 31/B0AB: 85 7C STA $7C 31/B0AD: A0 33 LDY #$33 31/B0AF: B1 6E LDA ($6E),Y ; equipment element boost 31/B0B1: 29 E0 AND #$E0 31/B0B3: 20 46 FD JSR $FD46 ; lsr3 31/B0B6: 2D 00 74 AND $7400 ; check if spell's element is boosted 31/B0B9: F0 18 BEQ $B0D3 31/B0BB: A5 30 LDA $30 31/B0BD: 85 18 STA $18 31/B0BF: A9 05 LDA #$05 ; no. of hits +20% (add 1/5) 31/B0C1: 85 1A STA $1A 31/B0C3: A9 00 LDA #$00 31/B0C5: 85 19 STA $19 31/B0C7: 85 1B STA $1B 31/B0C9: 20 92 FC JSR $FC92 ; divide (16-bit) 31/B0CC: A5 1C LDA $1C 31/B0CE: 18 CLC 31/B0CF: 65 30 ADC $30 31/B0D1: 85 7C STA $7C ; number of hits 31/B0D3: 20 5F B1 JSR $B15F ; do attack effect 31/B0D6: A6 64 LDX $64 31/B0D8: A5 79 LDA $79 31/B0DA: C9 FF CMP #$FF 31/B0DC: F0 4B BEQ $B129 ; branch if null damage 31/B0DE: A6 64 LDX $64 31/B0E0: AD 74 75 LDA $7574 31/B0E3: D0 0E BNE $B0F3 ; branch if reflected 31/B0E5: A5 78 LDA $78 31/B0E7: 9D 4F 7E STA $7E4F,X ; set target damage numeral buffer 31/B0EA: E8 INX 31/B0EB: A5 79 LDA $79 31/B0ED: 9D 4F 7E STA $7E4F,X 31/B0F0: 4C 29 B1 JMP $B129 ; reflected 31/B0F3: 20 25 BC JSR $BC25 ; get target flags 31/B0F6: 29 07 AND #$07 31/B0F8: 0A ASL 31/B0F9: AA TAX 31/B0FA: E8 INX 31/B0FB: BD 5F 7E LDA $7E5F,X 31/B0FE: C9 FF CMP #$FF 31/B100: F0 16 BEQ $B118 ; branch if no damage numeral yet 31/B102: CA DEX 31/B103: 18 CLC 31/B104: BD 5F 7E LDA $7E5F,X ; add to attacker damage numeral 31/B107: 65 78 ADC $78 31/B109: 9D 5F 7E STA $7E5F,X 31/B10C: E8 INX 31/B10D: BD 5F 7E LDA $7E5F,X 31/B110: 65 79 ADC $79 31/B112: 9D 5F 7E STA $7E5F,X 31/B115: 4C 1C B1 JMP $B11C 31/B118: CA DEX 31/B119: 20 1C BB JSR $BB1C ; set attacker damage numeral buffer 31/B11C: AD B5 78 LDA $78B5 ; set reflected target pointer 31/B11F: 85 70 STA $70 31/B121: AD B6 78 LDA $78B6 31/B124: 85 71 STA $71 31/B126: 4C 31 B1 JMP $B131 31/B129: 20 BC BD JSR $BDBC ; get target pointer 31/B12C: A9 00 LDA #$00 31/B12E: 20 C5 BD JSR $BDC5 ; check if target is dead 31/B131: 20 B3 BD JSR $BDB3 ; get attacker pointer 31/B134: A9 01 LDA #$01 31/B136: 20 C5 BD JSR $BDC5 ; check if attacker is dead 31/B139: EE C1 7E INC $7EC1 ; next target 31/B13C: AD C1 7E LDA $7EC1 31/B13F: C9 08 CMP #$08 ; 8 monster targets 31/B141: F0 1B BEQ $B15E 31/B143: C9 04 CMP #$04 ; 4 character targets 31/B145: D0 07 BNE $B14E 31/B147: AD 9A 7E LDA $7E9A 31/B14A: 29 40 AND #$40 31/B14C: F0 10 BEQ $B15E 31/B14E: 18 CLC 31/B14F: A5 70 LDA $70 31/B151: 69 40 ADC #$40 31/B153: 85 70 STA $70 31/B155: A5 71 LDA $71 31/B157: 69 00 ADC #$00 31/B159: 85 71 STA $71 31/B15B: 4C 31 B0 JMP $B031 31/B15E: 60 RTS ; [ do attack effect ] 31/B15F: AD 04 74 LDA $7404 31/B162: 0A ASL 31/B163: 18 CLC 31/B164: 69 9C ADC #$9C ; 31/BA9C (attack effect jump table) 31/B166: 85 18 STA $18 31/B168: A9 00 LDA #$00 31/B16A: 69 BA ADC #$BA 31/B16C: 85 19 STA $19 31/B16E: A0 00 LDY #$00 31/B170: B1 18 LDA ($18),Y 31/B172: 85 1A STA $1A 31/B174: C8 INY 31/B175: B1 18 LDA ($18),Y 31/B177: 85 1B STA $1B 31/B179: 6C 1A 00 JMP ($001A) ; [ attack effect $00: normal magic damage ] 31/B17C: A0 26 LDY #$26 31/B17E: B1 70 LDA ($70),Y 31/B180: F0 03 BEQ $B185 ; branch if target doesn't have reflect 31/B182: 20 FA B9 JSR $B9FA ; do reflect effect 31/B185: 20 8F B8 JSR $B88F ; apply elemental modifiers 31/B188: 20 E7 B8 JSR $B8E7 ; apply m.evade 31/B18B: F0 24 BEQ $B1B1 ; branch if no hit 31/B18D: AD 03 74 LDA $7403 31/B190: 29 01 AND #$01 31/B192: F0 05 BEQ $B199 ; branch if status 1 31/B194: AD D8 7E LDA $7ED8 31/B197: 30 15 BMI $B1AE ; no status 2 during boss battles ??? 31/B199: AD 03 74 LDA $7403 31/B19C: 29 02 AND #$02 31/B19E: F0 14 BEQ $B1B4 ; branch if not poison 31/B1A0: AD D8 7E LDA $7ED8 31/B1A3: 30 09 BMI $B1AE ; no poison during boss battles 31/B1A5: A0 01 LDY #$01 31/B1A7: B1 70 LDA ($70),Y ; target status 1 31/B1A9: CD 03 74 CMP $7403 31/B1AC: 90 06 BCC $B1B4 ; no poison if target has a worse status ??? 31/B1AE: 20 26 B9 JSR $B926 ; attack ineffective 31/B1B1: 4C 1C B2 JMP $B21C 31/B1B4: A0 15 LDY #$15 31/B1B6: B1 70 LDA ($70),Y ; m.defense 31/B1B8: 85 26 STA $26 31/B1BA: A0 10 LDY #$10 31/B1BC: AD 05 74 LDA $7405 31/B1BF: 29 10 AND #$10 31/B1C1: F0 01 BEQ $B1C4 ; branch if intelligence-based magic 31/B1C3: C8 INY 31/B1C4: B1 6E LDA ($6E),Y ; (intelligence or spirit) / 2 31/B1C6: 4A LSR 31/B1C7: 18 CLC 31/B1C8: 6D 02 74 ADC $7402 ; add spell power 31/B1CB: 85 25 STA $25 31/B1CD: A9 00 LDA #$00 31/B1CF: 69 00 ADC #$00 31/B1D1: 85 2B STA $2B ; hi byte 31/B1D3: A6 64 LDX $64 31/B1D5: B5 E0 LDA $E0,X 31/B1D7: 29 28 AND #$28 31/B1D9: D0 06 BNE $B1E1 ; branch if target is toad or mini 31/B1DB: A0 27 LDY #$27 31/B1DD: B1 70 LDA ($70),Y ; check if target is using jump or buildup 31/B1DF: F0 08 BEQ $B1E9 31/B1E1: 06 25 ASL $25 ; double attack 31/B1E3: 26 2B ROL $2B 31/B1E5: A9 00 LDA #$00 ; zero defense 31/B1E7: 85 26 STA $26 31/B1E9: AD 05 74 LDA $7405 31/B1EC: 29 40 AND #$40 31/B1EE: F0 04 BEQ $B1F4 ; branch if multi-target damage divided 31/B1F0: A9 01 LDA #$01 ; don't divide damage 31/B1F2: 85 2A STA $2A 31/B1F4: A9 00 LDA #$00 ; no crit 31/B1F6: 85 28 STA $28 31/B1F8: 85 29 STA $29 31/B1FA: A5 7C LDA $7C ; set no. of hits 31/B1FC: 85 24 STA $24 31/B1FE: 20 44 BB JSR $BB44 ; calculate damage 31/B201: A5 1C LDA $1C 31/B203: 05 1D ORA $1D 31/B205: D0 02 BNE $B209 31/B207: E6 1C INC $1C ; minimum 1 damage 31/B209: A5 1C LDA $1C 31/B20B: 85 78 STA $78 31/B20D: A5 1D LDA $1D 31/B20F: 85 79 STA $79 31/B211: 20 BC BD JSR $BDBC ; get target pointer 31/B214: 20 D2 BC JSR $BCD2 ; subtract damage from hp 31/B217: 90 03 BCC $B21C ; branch if zero hp 31/B219: 20 43 BE JSR $BE43 ; apply magic status 31/B21C: AD 74 75 LDA $7574 31/B21F: F0 11 BEQ $B232 ; return if spell not reflected 31/B221: A0 03 LDY #$03 31/B223: B1 70 LDA ($70),Y 31/B225: C8 INY 31/B226: 11 70 ORA ($70),Y 31/B228: D0 08 BNE $B232 ; branch if target's hp is nonzero 31/B22A: A0 01 LDY #$01 31/B22C: B1 70 LDA ($70),Y ; set dead status 31/B22E: 09 80 ORA #$80 31/B230: 91 70 STA ($70),Y 31/B232: 60 RTS ; [ attack effect $01/$18: healing ] 31/B233: 20 E2 BB JSR $BBE2 ; check if target is undead ; undead 31/B236: 90 07 BCC $B23F 31/B238: A9 01 LDA #$01 ; show "damages undead" message 31/B23A: 85 54 STA $54 31/B23C: 4C 7C B1 JMP $B17C ; normal magic damage effect ; not undead 31/B23F: 20 21 B9 JSR $B921 ; check if attack was effective 31/B242: F0 31 BEQ $B275 31/B244: AD 05 74 LDA $7405 ; spell level 31/B247: 29 07 AND #$07 31/B249: C9 06 CMP #$06 31/B24B: D0 19 BNE $B266 ; branch if not level 7 (cure 4) 31/B24D: A5 2A LDA $2A 31/B24F: C9 01 CMP #$01 ; don't divide damage 31/B251: D0 13 BNE $B266 31/B253: A0 05 LDY #$05 31/B255: B1 70 LDA ($70),Y ; set hp to max 31/B257: A0 03 LDY #$03 31/B259: 91 70 STA ($70),Y 31/B25B: A0 06 LDY #$06 31/B25D: B1 70 LDA ($70),Y 31/B25F: A0 04 LDY #$04 31/B261: 91 70 STA ($70),Y 31/B263: 18 CLC 31/B264: 90 0F BCC $B275 31/B266: 20 DD B6 JSR $B6DD ; calculate restorative damage 31/B269: 20 BC BD JSR $BDBC ; get target pointer 31/B26C: 20 24 BD JSR $BD24 ; restore hp 31/B26F: A5 79 LDA $79 31/B271: 09 80 ORA #$80 31/B273: 85 79 STA $79 31/B275: 60 RTS ; [ attack effect $02: tornado ] ; "トルネド" / "WWind" 31/B276: 20 E7 B8 JSR $B8E7 ; apply m.evade 31/B279: F0 39 BEQ $B2B4 ; return if no hit 31/B27B: 20 25 BC JSR $BC25 ; get target flags 31/B27E: 10 0B BPL $B28B 31/B280: AD D8 7E LDA $7ED8 31/B283: 10 06 BPL $B28B ; branch if not a boss battle 31/B285: 20 26 B9 JSR $B926 ; attack ineffective 31/B288: 4C B4 B2 JMP $B2B4 31/B28B: AD 02 74 LDA $7402 ; for wwind this value is 4 31/B28E: 20 B4 BE JSR $BEB4 ; random (0..A) 31/B291: 18 CLC 31/B292: 6D 02 74 ADC $7402 31/B295: 85 18 STA $18 ; set hp to (4..8) 31/B297: A0 03 LDY #$03 31/B299: B1 70 LDA ($70),Y 31/B29B: E5 18 SBC $18 31/B29D: C8 INY 31/B29E: B1 70 LDA ($70),Y 31/B2A0: E9 00 SBC #$00 31/B2A2: B0 06 BCS $B2AA ; branch if hp is above this value 31/B2A4: 20 26 B9 JSR $B926 ; attack ineffective 31/B2A7: 4C B4 B2 JMP $B2B4 31/B2AA: 88 DEY 31/B2AB: A5 18 LDA $18 31/B2AD: 91 70 STA ($70),Y ; set hp to this value 31/B2AF: C8 INY 31/B2B0: A9 00 LDA #$00 31/B2B2: 91 70 STA ($70),Y 31/B2B4: 60 RTS ; [ attack effect $03: drain ] ; "ドレイン" / "Drain" 31/B2B5: 20 E7 B8 JSR $B8E7 ; apply m.evade 31/B2B8: F0 0A BEQ $B2C4 ; branch if no hit 31/B2BA: 20 25 BC JSR $BC25 ; get target flags 31/B2BD: 10 08 BPL $B2C7 31/B2BF: AD D8 7E LDA $7ED8 31/B2C2: 10 03 BPL $B2C7 ; branch if not a boss battle 31/B2C4: 4C 26 B9 JMP $B926 ; attack ineffective 31/B2C7: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/B2CA: 29 87 AND #$87 31/B2CC: 85 28 STA $28 31/B2CE: B1 70 LDA ($70),Y 31/B2D0: 29 87 AND #$87 31/B2D2: C5 28 CMP $28 31/B2D4: F0 EE BEQ $B2C4 ; ineffective if self-target 31/B2D6: 20 DD B6 JSR $B6DD ; calculate restorative damage 31/B2D9: A5 78 LDA $78 31/B2DB: 48 PHA 31/B2DC: A5 79 LDA $79 31/B2DE: 48 PHA 31/B2DF: 20 BC BD JSR $BDBC ; get target pointer 31/B2E2: 20 67 BD JSR $BD67 ; drain hp to attacker 31/B2E5: 68 PLA 31/B2E6: 85 79 STA $79 ; restore damage (don't use effective damage) 31/B2E8: 68 PLA 31/B2E9: 85 78 STA $78 31/B2EB: A5 42 LDA $42 31/B2ED: F0 0D BEQ $B2FC ; branch if damage not inverted 31/B2EF: A6 62 LDX $62 31/B2F1: 20 1C BB JSR $BB1C ; set attacker damage numeral buffer 31/B2F4: A5 79 LDA $79 31/B2F6: 09 80 ORA #$80 ; set msb here but numerals will be red 31/B2F8: 85 79 STA $79 31/B2FA: D0 0F BNE $B30B 31/B2FC: A6 62 LDX $62 31/B2FE: A5 78 LDA $78 31/B300: 9D 5F 7E STA $7E5F,X ; set attacker damage numeral value 31/B303: E8 INX 31/B304: A5 79 LDA $79 31/B306: 09 80 ORA #$80 ; green numerals 31/B308: 9D 5F 7E STA $7E5F,X 31/B30B: 60 RTS ; [ attack effect $04: apply status ] 31/B30C: 20 E2 BB JSR $BBE2 ; check if target is undead 31/B30F: 90 0E BCC $B31F 31/B311: AD 88 7E LDA $7E88 31/B314: C9 01 CMP #$01 31/B316: D0 07 BNE $B31F ; branch if not death spell 31/B318: A9 05 LDA #$05 ; show message for life spell 31/B31A: 85 54 STA $54 31/B31C: 4C 3F B2 JMP $B23F ; healing effect 31/B31F: 20 E7 B8 JSR $B8E7 ; apply m.evade 31/B322: F0 55 BEQ $B379 ; return if no hit 31/B324: 20 25 BC JSR $BC25 ; get target flags 31/B327: 10 0B BPL $B334 31/B329: AD D8 7E LDA $7ED8 31/B32C: 10 06 BPL $B334 ; branch if not a boss battle 31/B32E: 20 26 B9 JSR $B926 ; attack ineffective 31/B331: 4C 79 B3 JMP $B379 31/B334: AD 03 74 LDA $7403 31/B337: 85 24 STA $24 31/B339: 29 20 AND #$20 31/B33B: F0 0F BEQ $B34C ; branch if not toad (or confuse ???) 31/B33D: A6 64 LDX $64 31/B33F: BD E0 00 LDA $00E0,X 31/B342: 29 40 AND #$40 31/B344: F0 06 BEQ $B34C ; branch if target is already stone 31/B346: 20 26 B9 JSR $B926 ; attack ineffective 31/B349: 4C 79 B3 JMP $B379 31/B34C: 20 75 B8 JSR $B875 31/B34F: B0 06 BCS $B357 31/B351: 20 26 B9 JSR $B926 ; attack ineffective 31/B354: 4C 79 B3 JMP $B379 31/B357: AD 88 7E LDA $7E88 31/B35A: C9 16 CMP #$16 31/B35C: D0 15 BNE $B373 ; branch if not kill spell 31/B35E: A0 00 LDY #$00 31/B360: B1 6E LDA ($6E),Y ; attacker level * 3/4 31/B362: 4A LSR 31/B363: 85 18 STA $18 31/B365: 4A LSR 31/B366: 18 CLC 31/B367: 65 18 ADC $18 31/B369: 85 18 STA $18 31/B36B: A0 00 LDY #$00 31/B36D: B1 70 LDA ($70),Y ; target level 31/B36F: C5 18 CMP $18 31/B371: B0 D3 BCS $B346 31/B373: 20 F3 BB JSR $BBF3 ; apply status 31/B376: 4C 79 B3 JMP $B379 31/B379: 60 RTS ; [ attack effect $05: raise/arise ] ; "レイズ" / "Life" ; "アレイズ" / "Life2" 31/B37A: 20 E2 BB JSR $BBE2 ; check if target is undead 31/B37D: 90 0F BCC $B38E 31/B37F: A6 64 LDX $64 31/B381: B5 E0 LDA $E0,X 31/B383: 29 80 AND #$80 31/B385: D0 07 BNE $B38E 31/B387: A9 04 LDA #$04 ; show message for death spell 31/B389: 85 54 STA $54 31/B38B: 4C 0C B3 JMP $B30C 31/B38E: 20 21 B9 JSR $B921 ; check if attack was effective 31/B391: F0 36 BEQ $B3C9 31/B393: A6 64 LDX $64 31/B395: B5 E0 LDA $E0,X 31/B397: 29 80 AND #$80 31/B399: D0 05 BNE $B3A0 31/B39B: 8D 7C 00 STA $007C 31/B39E: F0 EE BEQ $B38E 31/B3A0: AD 03 74 LDA $7403 31/B3A3: 85 24 STA $24 31/B3A5: 20 F1 B7 JSR $B7F1 ; remove status 31/B3A8: 20 25 BC JSR $BC25 ; get target flags 31/B3AB: 10 08 BPL $B3B5 31/B3AD: 29 07 AND #$07 31/B3AF: AA TAX 31/B3B0: A9 00 LDA #$00 31/B3B2: 9D C4 7E STA $7EC4,X 31/B3B5: A9 00 LDA #$00 ; $010C: "そせい" / "Revived" 31/B3B7: 8D D9 78 STA $78D9 31/B3BA: 20 03 BD JSR $BD03 ; restore hp 31/B3BD: 20 BC BD JSR $BDBC ; get target pointer 31/B3C0: 20 24 BD JSR $BD24 ; restore hp 31/B3C3: A5 79 LDA $79 31/B3C5: 09 80 ORA #$80 31/B3C7: 85 79 STA $79 31/B3C9: 60 RTS ; [ attack effect $06: remove status ] 31/B3CA: 20 21 B9 JSR $B921 ; check if attack was effective 31/B3CD: F0 21 BEQ $B3F0 31/B3CF: AD 03 74 LDA $7403 ; status effect 31/B3D2: 85 24 STA $24 31/B3D4: C9 FF CMP #$FF 31/B3D6: D0 15 BNE $B3ED ; branch if removing all ??? 31/B3D8: A6 64 LDX $64 31/B3DA: B5 E0 LDA $E0,X 31/B3DC: 29 40 AND #$40 31/B3DE: F0 0D BEQ $B3ED ; branch if target not stone 31/B3E0: E8 INX 31/B3E1: B5 E0 LDA $E0,X 31/B3E3: 29 20 AND #$20 31/B3E5: F0 06 BEQ $B3ED ; branch if target not confused 31/B3E7: 20 26 B9 JSR $B926 ; attack ineffective 31/B3EA: 4C F0 B3 JMP $B3F0 31/B3ED: 20 F1 B7 JSR $B7F1 ; remove status 31/B3F0: 60 RTS ; [ attack effect $07: toad/mini ] 31/B3F1: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/B3F4: 30 04 BMI $B3FA ; branch if attacker is a monster 31/B3F6: B1 70 LDA ($70),Y 31/B3F8: 10 05 BPL $B3FF ; branch if target is a character 31/B3FA: 20 E7 B8 JSR $B8E7 ; apply m.evade 31/B3FD: F0 74 BEQ $B473 ; return if no hit 31/B3FF: 20 25 BC JSR $BC25 ; get target flags 31/B402: 10 0B BPL $B40F ; branch if target is a character 31/B404: AD D8 7E LDA $7ED8 31/B407: 10 06 BPL $B40F ; branch if not a boss battle 31/B409: 20 26 B9 JSR $B926 ; attack ineffective 31/B40C: 4C 73 B4 JMP $B473 31/B40F: A0 01 LDY #$01 31/B411: B1 70 LDA ($70),Y ; target status 31/B413: 85 18 STA $18 31/B415: 4D 03 74 EOR $7403 ; toggle status from spell properties 31/B418: 91 70 STA ($70),Y 31/B41A: 85 19 STA $19 31/B41C: A6 64 LDX $64 31/B41E: 29 28 AND #$28 31/B420: F0 05 BEQ $B427 ; branch if no toad or mini afterwards 31/B422: B1 70 LDA ($70),Y 31/B424: 0D 03 74 ORA $7403 31/B427: 95 E0 STA $E0,X ; set status in buffer 31/B429: A5 19 LDA $19 31/B42B: 29 20 AND #$20 31/B42D: F0 0D BEQ $B43C ; branch if not toad after 31/B42F: A5 18 LDA $18 31/B431: 29 20 AND #$20 31/B433: D0 3E BNE $B473 ; return if was toad before 31/B435: A9 0F LDA #$0F ; "かえる" / "Frog" 31/B437: 8D D9 78 STA $78D9 31/B43A: D0 37 BNE $B473 31/B43C: A5 19 LDA $19 31/B43E: 29 08 AND #$08 31/B440: F0 0D BEQ $B44F 31/B442: A5 18 LDA $18 31/B444: 29 08 AND #$08 31/B446: D0 2B BNE $B473 31/B448: A9 11 LDA #$11 ; "こびと " / "Mini" 31/B44A: 8D D9 78 STA $78D9 31/B44D: D0 24 BNE $B473 31/B44F: A5 18 LDA $18 31/B451: 29 20 AND #$20 31/B453: F0 0D BEQ $B462 31/B455: A5 19 LDA $19 31/B457: 29 20 AND #$20 31/B459: D0 18 BNE $B473 31/B45B: A9 05 LDA #$05 ; "もとにもどった" / "Cured" 31/B45D: 8D D9 78 STA $78D9 31/B460: D0 11 BNE $B473 31/B462: A5 18 LDA $18 31/B464: 29 08 AND #$08 31/B466: F0 0B BEQ $B473 31/B468: A5 19 LDA $19 31/B46A: 29 08 AND #$08 31/B46C: D0 05 BNE $B473 31/B46E: A9 07 LDA #$07 ; "おおきくなった" / "Enlarged" 31/B470: 8D D9 78 STA $78D9 31/B473: 60 RTS ; [ attack effect $08: protect ] ; "プロテス" / "Safe" 31/B474: 20 21 B9 JSR $B921 ; check if attack was effective 31/B477: F0 06 BEQ $B47F 31/B479: 20 DD B6 JSR $B6DD ; calculate restorative damage 31/B47C: 20 04 B7 JSR $B704 ; protect effect 31/B47F: 60 RTS ; [ attack effect $09: haste ] ; "デジョン" / "Haste" 31/B480: 20 21 B9 JSR $B921 ; check if attack was effective 31/B483: F0 06 BEQ $B48B 31/B485: 20 DD B6 JSR $B6DD ; calculate restorative damage 31/B488: 20 52 B7 JSR $B752 ; haste effect 31/B48B: 60 RTS ; [ attack effect $0A: reflect ] ; "リフレク" / "Wall" 31/B48C: 20 21 B9 JSR $B921 ; check if attack was effective 31/B48F: F0 09 BEQ $B49A 31/B491: A0 26 LDY #$26 31/B493: B1 70 LDA ($70),Y 31/B495: 18 CLC 31/B496: 69 01 ADC #$01 ; increment reflect counter 31/B498: 91 70 STA ($70),Y 31/B49A: 60 RTS ; [ attack effect $0B: erase ] ; "イレース" / "Erase" ; i think this is bugged 31/B49B: 20 E7 B8 JSR $B8E7 ; apply m.evade 31/B49E: F0 18 BEQ $B4B8 ; return if no hit 31/B4A0: 20 25 BC JSR $BC25 ; get target flags 31/B4A3: 10 0B BPL $B4B0 ; branch if target is a character 31/B4A5: AD D8 7E LDA $7ED8 31/B4A8: 10 06 BPL $B4B0 ; branch if not a boss battle 31/B4AA: 20 26 B9 JSR $B926 ; attack ineffective 31/B4AD: 4C B8 B4 JMP $B4B8 31/B4B0: A0 20 LDY #$20 31/B4B2: B1 70 LDA ($70),Y ; remove absorbed elements ??? 31/B4B4: 29 03 AND #$03 31/B4B6: 91 70 STA ($70),Y 31/B4B8: 60 RTS ; [ attack effect $0D: libra ] ; "ライブラ" / "Libra" 31/B4B9: A2 00 LDX #$00 31/B4BB: A0 03 LDY #$03 31/B4BD: B1 70 LDA ($70),Y ; copy current/max hp to buffer 31/B4BF: 9D E4 78 STA $78E4,X 31/B4C2: C8 INY 31/B4C3: E8 INX 31/B4C4: E0 04 CPX #$04 31/B4C6: D0 F5 BNE $B4BD ; fallthrough ; [ attack effect $0C: sight ] ; "サイトロ" / "Sight" 31/B4C8: 60 RTS ; [ attack effect $0E: divide ] ; "ぞうしょく" / "Split" 31/B4C9: 20 36 B9 JSR $B936 31/B4CC: 20 A0 B9 JSR $B9A0 31/B4CF: 68 PLA 31/B4D0: 68 PLA 31/B4D1: 4C 5E B1 JMP $B15E ; [ attack effect $0F/$11: divide ] ; "ぶんれつ1" / "Split" 31/B4D4: A0 03 LDY #$03 31/B4D6: B1 6E LDA ($6E),Y 31/B4D8: A0 05 LDY #$05 31/B4DA: D1 6E CMP ($6E),Y 31/B4DC: D0 0D BNE $B4EB 31/B4DE: A0 04 LDY #$04 31/B4E0: B1 6E LDA ($6E),Y 31/B4E2: A0 06 LDY #$06 31/B4E4: D1 6E CMP ($6E),Y 31/B4E6: D0 03 BNE $B4EB 31/B4E8: 20 8B B9 JSR $B98B 31/B4EB: 20 36 B9 JSR $B936 31/B4EE: 20 A0 B9 JSR $B9A0 31/B4F1: 4C CF B4 JMP $B4CF ; [ attack effect $10: monster summon ] ; "しょうかんまほう" / "Summon" 31/B4F4: 20 36 B9 JSR $B936 31/B4F7: A6 1C LDX $1C 31/B4F9: 86 27 STX $27 31/B4FB: 20 ED B9 JSR $B9ED ; clear target status 31/B4FE: A9 03 LDA #$03 31/B500: 20 B4 BE JSR $BEB4 ; random (0..A) 31/B503: F0 F9 BEQ $B4FE 31/B505: AA TAX 31/B506: BD 6B 7D LDA $7D6B,X ; monster id 31/B509: 8E 99 7E STX $7E99 31/B50C: 85 26 STA $26 31/B50E: A9 01 LDA #$01 31/B510: 8D 9B 7E STA $7E9B 31/B513: 20 FE A4 JSR $A4FE 31/B516: A0 2E LDY #$2E 31/B518: A9 00 LDA #$00 31/B51A: 91 5D STA ($5D),Y 31/B51C: 4C CF B4 JMP $B4CF ; [ attack effect $12: self-destruct ] ; "じばく" / "Explode" ; damage = attacker's current hp * 4 31/B51F: 38 SEC 31/B520: A0 03 LDY #$03 31/B522: B1 6E LDA ($6E),Y ; attacker current hp 31/B524: 85 18 STA $18 31/B526: A0 05 LDY #$05 31/B528: F1 6E SBC ($6E),Y ; attacker max hp 31/B52A: A0 04 LDY #$04 31/B52C: B1 6E LDA ($6E),Y 31/B52E: 85 19 STA $19 31/B530: A0 06 LDY #$06 31/B532: F1 6E SBC ($6E),Y 31/B534: F0 24 BEQ $B55A ; branch if at full hp 31/B536: A5 18 LDA $18 31/B538: 0A ASL 31/B539: 85 78 STA $78 ; set damage 31/B53B: A5 19 LDA $19 31/B53D: 2A ROL 31/B53E: 85 79 STA $79 31/B540: 06 78 ASL $78 31/B542: 26 79 ROL $79 31/B544: 20 BC BD JSR $BDBC ; get target pointer 31/B547: 20 D2 BC JSR $BCD2 ; subtract damage from hp 31/B54A: A0 03 LDY #$03 ; set attacker hp to zero 31/B54C: A9 00 LDA #$00 31/B54E: 91 6E STA ($6E),Y 31/B550: C8 INY 31/B551: 91 6E STA ($6E),Y 31/B553: A0 01 LDY #$01 31/B555: A9 80 LDA #$80 31/B557: 91 6E STA ($6E),Y ; set dead status 31/B559: 60 RTS 31/B55A: A2 FF LDX #$FF ; no top right or middle left message 31/B55C: 8E D7 78 STX $78D7 31/B55F: 8E D8 78 STX $78D8 31/B562: E8 INX 31/B563: 8E 99 7E STX $7E99 ; no targets 31/B566: A9 44 LDA #$44 ; $0664: "ようすをみている" / "Searching…" 31/B568: 8D DA 78 STA $78DA 31/B56B: 60 RTS ; [ attack effect $13: barrier shift ] ; "バリアチェンジ" / "WallChange" 31/B56C: 20 7A B5 JSR $B57A 31/B56F: A9 FF LDA #$FF 31/B571: 8D E2 7B STA $7BE2 31/B574: 8D D8 78 STA $78D8 31/B577: 4C CF B4 JMP $B4CF ; [ barrier shift effect ] 31/B57A: A9 01 LDA #$01 ; rng 1 31/B57C: 85 21 STA $21 31/B57E: A2 03 LDX #$03 31/B580: A9 05 LDA #$05 31/B582: 20 EF FB JSR $FBEF ; random (X..A) 31/B585: 85 24 STA $24 31/B587: A9 01 LDA #$01 ; rng 1 31/B589: 85 21 STA $21 31/B58B: A2 03 LDX #$03 31/B58D: A9 05 LDA #$05 31/B58F: 20 EF FB JSR $FBEF ; random (X..A) 31/B592: C5 24 CMP $24 31/B594: F0 F1 BEQ $B587 31/B596: AA TAX 31/B597: A9 00 LDA #$00 31/B599: 20 20 FD JSR $FD20 ; set bit 31/B59C: A0 12 LDY #$12 31/B59E: 91 6E STA ($6E),Y 31/B5A0: A9 FF LDA #$FF 31/B5A2: 20 2C FD JSR $FD2C ; clear bit 31/B5A5: A0 20 LDY #$20 31/B5A7: 91 6E STA ($6E),Y 31/B5A9: 60 RTS ; [ attack effect $14: elixir ] ; "エリクサー" / "Elixir" 31/B5AA: A0 05 LDY #$05 31/B5AC: B1 70 LDA ($70),Y ; set hp to max 31/B5AE: A0 03 LDY #$03 31/B5B0: 91 70 STA ($70),Y 31/B5B2: A0 06 LDY #$06 31/B5B4: B1 70 LDA ($70),Y 31/B5B6: A0 04 LDY #$04 31/B5B8: 91 70 STA ($70),Y 31/B5BA: 20 25 BC JSR $BC25 ; get target flags 31/B5BD: 29 07 AND #$07 31/B5BF: 85 52 STA $52 ; character slot 31/B5C1: 20 90 BE JSR $BE90 ; get character offset 31/B5C4: 18 CLC 31/B5C5: 69 31 ADC #$31 ; max mp 31/B5C7: 85 18 STA $18 31/B5C9: A5 5F LDA $5F 31/B5CB: 69 07 ADC #$07 31/B5CD: 85 19 STA $19 31/B5CF: A2 07 LDX #$07 31/B5D1: A4 18 LDY $18 31/B5D3: B1 57 LDA ($57),Y ; set mp to max 31/B5D5: A4 19 LDY $19 31/B5D7: 91 5B STA ($5B),Y 31/B5D9: E6 18 INC $18 31/B5DB: E6 18 INC $18 31/B5DD: E6 19 INC $19 31/B5DF: CA DEX 31/B5E0: 10 EF BPL $B5D1 31/B5E2: A9 00 LDA #$00 31/B5E4: 85 52 STA $52 31/B5E6: 60 RTS ; [ attack effect $15: defense ] ; "ぼうぎょ" / "Defense" ; in adamantoise attack script ($0D), but its special attack rate is zero 31/B5E7: AD C9 78 LDA $78C9 31/B5EA: D0 3A BNE $B626 ; branch if already saved 31/B5EC: A0 13 LDY #$13 31/B5EE: A2 00 LDX #$00 31/B5F0: B1 6E LDA ($6E),Y 31/B5F2: 9D C9 78 STA $78C9,X ; save m.def stats 31/B5F5: C8 INY 31/B5F6: E8 INX 31/B5F7: E0 03 CPX #$03 31/B5F9: D0 F5 BNE $B5F0 31/B5FB: A0 21 LDY #$21 31/B5FD: B1 6E LDA ($6E),Y 31/B5FF: 9D C9 78 STA $78C9,X ; save def stats 31/B602: C8 INY 31/B603: E8 INX 31/B604: E0 06 CPX #$06 31/B606: D0 F5 BNE $B5FD 31/B608: A0 13 LDY #$13 ; m.evade multiplier: 16 31/B60A: A9 10 LDA #$10 31/B60C: 91 6E STA ($6E),Y 31/B60E: A0 21 LDY #$21 ; evade multiplier: 16 31/B610: 91 6E STA ($6E),Y 31/B612: A0 14 LDY #$14 ; m.evade %: 99 31/B614: A9 63 LDA #$63 31/B616: 91 6E STA ($6E),Y 31/B618: A0 22 LDY #$22 ; evade %: 99 31/B61A: 91 6E STA ($6E),Y 31/B61C: A0 15 LDY #$15 ; m.defense: 255 31/B61E: A9 FF LDA #$FF 31/B620: 91 6E STA ($6E),Y 31/B622: A0 23 LDY #$23 ; defense: 255 31/B624: 91 6E STA ($6E),Y 31/B626: A2 FF LDX #$FF 31/B628: 8E D8 78 STX $78D8 31/B62B: 60 RTS ; [ attack effect $16: bite ] ; "かみつき" / "Bite" ; in adamantoise attack script ($0D), but its special attack rate is zero 31/B62C: A2 00 LDX #$00 31/B62E: A0 13 LDY #$13 31/B630: BD C9 78 LDA $78C9,X 31/B633: 91 6E STA ($6E),Y ; restore attacker's m.evade stats 31/B635: C8 INY 31/B636: E8 INX 31/B637: E0 03 CPX #$03 31/B639: D0 F5 BNE $B630 31/B63B: A0 21 LDY #$21 31/B63D: BD C9 78 LDA $78C9,X 31/B640: 91 6E STA ($6E),Y ; restore attacker's defense/evade 31/B642: C8 INY 31/B643: E8 INX 31/B644: E0 06 CPX #$06 31/B646: D0 F5 BNE $B63D 31/B648: CA DEX 31/B649: A9 00 LDA #$00 31/B64B: 9D C9 78 STA $78C9,X 31/B64E: CA DEX 31/B64F: 10 FA BPL $B64B 31/B651: 4C 7C B1 JMP $B17C ; normal attack effect ; [ attack effect $17: particle beam ] ; "はどうほう" / "FlareWave" 31/B654: 4C 7C B1 JMP $B17C ; normal attack effect ; [ attack effect $1A: chocobo kick ? ] 31/B657: 60 RTS ; [ attack effect $19: chocobo dash ] 31/B658: AD D8 7E LDA $7ED8 31/B65B: 30 09 BMI $B666 ; branch a boss battle 31/B65D: A9 63 LDA #$63 31/B65F: 20 B4 BE JSR $BEB4 ; random (0..A) 31/B662: C9 50 CMP #$50 31/B664: 90 0B BCC $B671 ; 80% chance to run 31/B666: EE 93 7E INC $7E93 31/B669: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 31/B66B: 8D DA 78 STA $78DA 31/B66E: 4C CF B4 JMP $B4CF 31/B671: A9 02 LDA #$02 ; ran away 31/B673: 8D D3 78 STA $78D3 31/B676: 4C CF B4 JMP $B4CF ; [ normal attack effect for summons ] ; $1B, $1D, $1E ; $20, $21, $23-$27, $29, $2C, $2D ; $30, $31, $33, $36-$38 31/B679: 4C 7C B1 JMP $B17C ; normal attack effect ; [ attack effect $22: healing light (ifrit) ] 31/B67C: 4C 33 B2 JMP $B233 ; healing attack effect ; [ apply status attack effect for summons ] ; $1C, $1F, $23, $32, $34, $35 31/B67F: 4C 0C B3 JMP $B30C ; apply status attack effect ; [ attack effect $2E: aura (bahamut) ] 31/B682: 4C 80 B4 JMP $B480 ; haste attack effect ; [ attack effect $28: protective light (odin) ] 31/B685: 4C 8C B4 JMP $B48C ; reflect attack effect ; [ attack effect $2A: zantetsuken (odin) ] 31/B688: AD D8 7E LDA $7ED8 31/B68B: 10 0B BPL $B698 ; branch if not a boss battle 31/B68D: EE 93 7E INC $7E93 31/B690: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 31/B692: 8D DA 78 STA $78DA 31/B695: 4C CF B4 JMP $B4CF 31/B698: A9 63 LDA #$63 31/B69A: 20 B4 BE JSR $BEB4 ; random (0..A) 31/B69D: C9 3C CMP #$3C 31/B69F: B0 EC BCS $B68D ; 60% success rate 31/B6A1: A2 0E LDX #$0E 31/B6A3: B5 E0 LDA $E0,X ; make all enemies dead 31/B6A5: 09 80 ORA #$80 31/B6A7: 95 E0 STA $E0,X 31/B6A9: CA DEX 31/B6AA: CA DEX 31/B6AB: 10 F6 BPL $B6A3 31/B6AD: 4C CF B4 JMP $B4CF ; [ attack effect $2F: rend (bahamut) ] 31/B6B0: AD D8 7E LDA $7ED8 31/B6B3: 10 0B BPL $B6C0 ; branch if not a boss battle 31/B6B5: EE 93 7E INC $7E93 31/B6B8: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 31/B6BA: 8D DA 78 STA $78DA 31/B6BD: 4C CF B4 JMP $B4CF 31/B6C0: A9 63 LDA #$63 31/B6C2: 20 B4 BE JSR $BEB4 ; random (0..A) 31/B6C5: C9 3C CMP #$3C 31/B6C7: B0 EC BCS $B6B5 ; 60% success rate 31/B6C9: A0 03 LDY #$03 31/B6CB: A9 00 LDA #$00 31/B6CD: 91 70 STA ($70),Y ; set hp to zero 31/B6CF: C8 INY 31/B6D0: 91 70 STA ($70),Y 31/B6D2: A6 64 LDX $64 31/B6D4: B5 E0 LDA $E0,X ; set dead status 31/B6D6: 09 80 ORA #$80 31/B6D8: 95 E0 STA $E0,X 31/B6DA: 4C CF B4 JMP $B4CF ; [ calculate restorative damage ] 31/B6DD: A9 00 LDA #$00 31/B6DF: 85 28 STA $28 ; no crit bonus 31/B6E1: 85 29 STA $29 ; no crit flag 31/B6E3: 85 2B STA $2B ; clear attack msb 31/B6E5: A9 02 LDA #$02 31/B6E7: 85 27 STA $27 ; set damage multiplier 31/B6E9: A5 7C LDA $7C 31/B6EB: 85 24 STA $24 ; no. of hits 31/B6ED: AD 02 74 LDA $7402 31/B6F0: 85 25 STA $25 ; attack 31/B6F2: A0 15 LDY #$15 31/B6F4: B1 70 LDA ($70),Y ; target's m.defense 31/B6F6: 85 26 STA $26 ; defense 31/B6F8: 20 44 BB JSR $BB44 ; calculate damage 31/B6FB: A5 1C LDA $1C 31/B6FD: 85 78 STA $78 31/B6FF: A5 1D LDA $1D 31/B701: 85 79 STA $79 31/B703: 60 RTS ; [ protect effect ] ; +$78: bonus to defense and m.defense 31/B704: A0 23 LDY #$23 31/B706: B1 70 LDA ($70),Y ; target defense 31/B708: C9 FF CMP #$FF 31/B70A: D0 08 BNE $B714 31/B70C: A0 15 LDY #$15 31/B70E: B1 70 LDA ($70),Y ; target m.defense 31/B710: C9 FF CMP #$FF 31/B712: F0 31 BEQ $B745 ; ineffective if *both* are maxed out 31/B714: A0 23 LDY #$23 31/B716: 18 CLC 31/B717: B1 70 LDA ($70),Y ; add to defense 31/B719: 65 78 ADC $78 31/B71B: 91 70 STA ($70),Y 31/B71D: A9 00 LDA #$00 31/B71F: 65 79 ADC $79 31/B721: 85 79 STA $79 31/B723: A5 79 LDA $79 31/B725: F0 04 BEQ $B72B 31/B727: A9 FF LDA #$FF ; max 255 31/B729: 91 70 STA ($70),Y 31/B72B: A0 15 LDY #$15 31/B72D: 18 CLC 31/B72E: B1 70 LDA ($70),Y ; add to m.defense 31/B730: 65 78 ADC $78 31/B732: 91 70 STA ($70),Y 31/B734: A9 00 LDA #$00 31/B736: 65 79 ADC $79 31/B738: 85 79 STA $79 31/B73A: A5 79 LDA $79 31/B73C: F0 04 BEQ $B742 31/B73E: A9 FF LDA #$FF ; max 255 31/B740: 91 70 STA ($70),Y 31/B742: 4C 4B B7 JMP $B74B ; set damage to null 31/B745: 20 4B B7 JSR $B74B ; set damage to null 31/B748: 4C 26 B9 JMP $B926 ; attack ineffective ; [ set damage to null ] 31/B74B: A2 FF LDX #$FF 31/B74D: 86 79 STX $79 31/B74F: 86 78 STX $78 31/B751: 60 RTS ; [ haste effect ] ; +$78: increase in attack power ; $7C: increase in attack multiplier 31/B752: A0 19 LDY #$19 31/B754: B1 70 LDA ($70),Y ; attack power 31/B756: C9 FF CMP #$FF 31/B758: F0 67 BEQ $B7C1 31/B75A: A0 1E LDY #$1E 31/B75C: B1 70 LDA ($70),Y ; attack power (left hand) 31/B75E: C9 FF CMP #$FF 31/B760: F0 5F BEQ $B7C1 31/B762: A0 17 LDY #$17 31/B764: B1 70 LDA ($70),Y ; attack multiplier 31/B766: C9 10 CMP #$10 31/B768: B0 57 BCS $B7C1 31/B76A: A0 1C LDY #$1C 31/B76C: B1 70 LDA ($70),Y ; attack multiplier (left hand) 31/B76E: C9 10 CMP #$10 31/B770: B0 4F BCS $B7C1 ; ineffective if *any* are already maxed out 31/B772: A0 19 LDY #$19 31/B774: 18 CLC 31/B775: B1 70 LDA ($70),Y ; add +$78 to attack power 31/B777: 65 78 ADC $78 31/B779: 91 70 STA ($70),Y 31/B77B: A5 79 LDA $79 31/B77D: 69 00 ADC #$00 31/B77F: 85 79 STA $79 31/B781: A5 79 LDA $79 31/B783: F0 04 BEQ $B789 31/B785: A9 FF LDA #$FF ; max 255 31/B787: 91 70 STA ($70),Y 31/B789: A0 1E LDY #$1E 31/B78B: 18 CLC 31/B78C: B1 70 LDA ($70),Y ; add to left hand attack power 31/B78E: 65 78 ADC $78 31/B790: 91 70 STA ($70),Y 31/B792: A5 79 LDA $79 31/B794: 69 00 ADC #$00 31/B796: 85 79 STA $79 31/B798: A5 79 LDA $79 31/B79A: F0 04 BEQ $B7A0 31/B79C: A9 FF LDA #$FF 31/B79E: 91 70 STA ($70),Y 31/B7A0: A0 17 LDY #$17 31/B7A2: 18 CLC 31/B7A3: B1 70 LDA ($70),Y ; add $7C attack multiplier 31/B7A5: 65 7C ADC $7C 31/B7A7: C9 10 CMP #$10 31/B7A9: 90 02 BCC $B7AD 31/B7AB: A9 10 LDA #$10 ; max 16 31/B7AD: 91 70 STA ($70),Y 31/B7AF: A0 1C LDY #$1C 31/B7B1: 18 CLC 31/B7B2: B1 70 LDA ($70),Y ; left hand 31/B7B4: 65 7C ADC $7C 31/B7B6: C9 10 CMP #$10 31/B7B8: 90 02 BCC $B7BC 31/B7BA: A9 10 LDA #$10 ; max 16 31/B7BC: 91 70 STA ($70),Y 31/B7BE: 4C 4B B7 JMP $B74B ; set damage to null 31/B7C1: 20 4B B7 JSR $B74B ; set damage to null 31/B7C4: 4C 26 B9 JMP $B926 ; attack ineffective ; [ ] ; unused ??? 31/B7C7: A0 01 LDY #$01 31/B7C9: B1 70 LDA ($70),Y ; toggle near fatal status 31/B7CB: 45 24 EOR $24 31/B7CD: 91 70 STA ($70),Y 31/B7CF: B1 70 LDA ($70),Y 31/B7D1: 29 20 AND #$20 31/B7D3: F0 00 BEQ $B7D5 ; branch if not toad (does nothing...) 31/B7D5: B1 70 LDA ($70),Y 31/B7D7: 29 08 AND #$08 31/B7D9: F0 00 BEQ $B7DB ; branch if not mini (does nothing...) 31/B7DB: B1 70 LDA ($70),Y 31/B7DD: 29 28 AND #$28 31/B7DF: F0 0F BEQ $B7F0 ; return if not toad or mini 31/B7E1: A0 37 LDY #$37 31/B7E3: B1 70 LDA ($70),Y 31/B7E5: C8 INY 31/B7E6: 11 70 ORA ($70),Y 31/B7E8: F0 06 BEQ $B7F0 31/B7EA: A0 01 LDY #$01 31/B7EC: A9 80 LDA #$80 31/B7EE: 91 70 STA ($70),Y ; set dead status 31/B7F0: 60 RTS ; [ remove status ] ; $24: status to remove 31/B7F1: A5 24 LDA $24 31/B7F3: 29 01 AND #$01 31/B7F5: D0 30 BNE $B827 ; branch if status 2 ; status 1 31/B7F7: A0 01 LDY #$01 31/B7F9: B1 70 LDA ($70),Y 31/B7FB: 25 24 AND $24 31/B7FD: D0 03 BNE $B802 31/B7FF: 4C 26 B9 JMP $B926 ; attack ineffective 31/B802: A5 24 LDA $24 31/B804: 49 FF EOR #$FF ; remove status 31/B806: 31 70 AND ($70),Y 31/B808: 91 70 STA ($70),Y 31/B80A: A6 64 LDX $64 31/B80C: 95 E0 STA $E0,X 31/B80E: 20 65 B8 JSR $B865 31/B811: A5 24 LDA $24 31/B813: A2 00 LDX #$00 31/B815: 0A ASL 31/B816: B0 03 BCS $B81B 31/B818: E8 INX 31/B819: D0 FA BNE $B815 31/B81B: 8A TXA 31/B81C: C9 02 CMP #$02 31/B81E: 90 03 BCC $B823 31/B820: 18 CLC 31/B821: 69 03 ADC #$03 ; status removed message 31/B823: 8D D9 78 STA $78D9 31/B826: 60 RTS ; status 2 31/B827: A0 01 LDY #$01 31/B829: B1 70 LDA ($70),Y 31/B82B: C8 INY 31/B82C: 11 70 ORA ($70),Y 31/B82E: F0 CF BEQ $B7FF 31/B830: A5 24 LDA $24 31/B832: C9 FF CMP #$FF 31/B834: D0 04 BNE $B83A 31/B836: A9 80 LDA #$80 31/B838: D0 02 BNE $B83C 31/B83A: A9 BF LDA #$BF 31/B83C: A0 01 LDY #$01 31/B83E: 31 70 AND ($70),Y 31/B840: 91 70 STA ($70),Y 31/B842: C8 INY 31/B843: A5 24 LDA $24 31/B845: C9 FF CMP #$FF 31/B847: D0 04 BNE $B84D 31/B849: A9 00 LDA #$00 31/B84B: F0 04 BEQ $B851 31/B84D: B1 70 LDA ($70),Y 31/B84F: 29 F9 AND #$F9 31/B851: 91 70 STA ($70),Y 31/B853: A6 64 LDX $64 31/B855: A9 00 LDA #$00 31/B857: 95 E0 STA $E0,X 31/B859: E8 INX 31/B85A: 95 E0 STA $E0,X 31/B85C: 20 65 B8 JSR $B865 31/B85F: D0 03 BNE $B864 31/B861: CA DEX 31/B862: 95 F0 STA $F0,X 31/B864: 60 RTS ; [ ] 31/B865: 20 25 BC JSR $BC25 ; get target flags 31/B868: 85 18 STA $18 31/B86A: B1 6E LDA ($6E),Y ; attacker flags 31/B86C: C5 18 CMP $18 31/B86E: D0 04 BNE $B874 ; branch if not self-target 31/B870: B5 E0 LDA $E0,X 31/B872: 95 F0 STA $F0,X 31/B874: 60 RTS ; [ ] ; return carry clear if attack was effective 31/B875: 20 21 B9 JSR $B921 ; check if attack was effective 31/B878: A0 24 LDY #$24 31/B87A: B1 70 LDA ($70),Y ; resistant status 31/B87C: 25 24 AND $24 31/B87E: D0 03 BNE $B883 31/B880: 38 SEC 31/B881: B0 01 BCS $B884 31/B883: 18 CLC 31/B884: 60 RTS ; [ ] ; unused ??? ; return carry clear if attack was effective 31/B885: 20 21 B9 JSR $B921 ; check if attack was effective 31/B888: F0 03 BEQ $B88D 31/B88A: 38 SEC 31/B88B: B0 01 BCS $B88E 31/B88D: 18 CLC 31/B88E: 60 RTS ; [ apply elemental modifiers ] 31/B88F: A9 00 LDA #$00 ; clear damage multiplier 31/B891: 85 27 STA $27 31/B893: A0 24 LDY #$24 31/B895: B1 70 LDA ($70),Y ; resistant status 31/B897: 29 01 AND #$01 31/B899: F0 16 BEQ $B8B1 ; branch if no absorb ; absorb 31/B89B: A0 20 LDY #$20 31/B89D: B1 70 LDA ($70),Y ; absorbed elements 31/B89F: 2D 00 74 AND $7400 31/B8A2: F0 0D BEQ $B8B1 ; branch if doesn't absorb spell element 31/B8A4: A9 04 LDA #$04 ; 4x damage multiplier 31/B8A6: 85 27 STA $27 31/B8A8: 68 PLA ; pop return address 31/B8A9: 68 PLA 31/B8AA: A9 02 LDA #$02 ; show "absorbed" message 31/B8AC: 85 54 STA $54 31/B8AE: 4C 3F B2 JMP $B23F ; healing effect ; no absorb 31/B8B1: A0 12 LDY #$12 31/B8B3: B1 70 LDA ($70),Y ; weak elements 31/B8B5: 2D 00 74 AND $7400 31/B8B8: D0 0E BNE $B8C8 ; branch if weak against spell element 31/B8BA: A0 33 LDY #$33 31/B8BC: B1 6E LDA ($6E),Y ; boosted elements 31/B8BE: 29 E0 AND #$E0 31/B8C0: 20 3F FD JSR $FD3F ; asl3 *** bug, should be $FD46 (lsr3) *** 31/B8C3: 2D 00 74 AND $7400 31/B8C6: F0 05 BEQ $B8CD ; this will always branch 31/B8C8: A9 04 LDA #$04 ; 4x damage multiplier 31/B8CA: 85 27 STA $27 31/B8CC: 60 RTS 31/B8CD: A0 20 LDY #$20 31/B8CF: B1 70 LDA ($70),Y ; strong elements 31/B8D1: 2D 00 74 AND $7400 31/B8D4: D0 0C BNE $B8E2 ; branch if strong against spell element 31/B8D6: A0 20 LDY #$20 31/B8D8: B1 70 LDA ($70),Y 31/B8DA: C9 02 CMP #$02 31/B8DC: F0 04 BEQ $B8E2 31/B8DE: A9 02 LDA #$02 ; 2x damage multiplier 31/B8E0: D0 02 BNE $B8E4 31/B8E2: A9 01 LDA #$01 ; 1x damage multiplier 31/B8E4: 85 27 STA $27 31/B8E6: 60 RTS ; [ apply m.evade ] 31/B8E7: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/B8EA: 30 08 BMI $B8F4 ; branch if a monster 31/B8EC: B1 70 LDA ($70),Y 31/B8EE: 30 04 BMI $B8F4 ; branch if target is a monster 31/B8F0: A5 7C LDA $7C 31/B8F2: D0 2B BNE $B91F ; branch if nonzero hits already 31/B8F4: A0 13 LDY #$13 31/B8F6: B1 70 LDA ($70),Y ; m.evade multiplier 31/B8F8: 85 24 STA $24 31/B8FA: C8 INY 31/B8FB: B1 70 LDA ($70),Y ; m.evade % 31/B8FD: 85 25 STA $25 31/B8FF: A0 01 LDY #$01 31/B901: B1 70 LDA ($70),Y 31/B903: 29 04 AND #$04 31/B905: F0 02 BEQ $B909 ; halve m.evade % if blind 31/B907: 46 25 LSR $25 31/B909: B1 70 LDA ($70),Y 31/B90B: 29 28 AND #$28 31/B90D: F0 04 BEQ $B913 ; branch if not toad or mini 31/B90F: A9 00 LDA #$00 ; set m.evade multiplier to zero 31/B911: 85 24 STA $24 31/B913: 20 28 BB JSR $BB28 ; get number of hits 31/B916: 38 SEC 31/B917: A5 7C LDA $7C 31/B919: E5 30 SBC $30 31/B91B: B0 02 BCS $B91F 31/B91D: A9 00 LDA #$00 ; min 0 hits 31/B91F: 85 7C STA $7C ; fallthrough ; [ check if attack was effective ] 31/B921: AD 7C 00 LDA $007C 31/B924: D0 0C BNE $B932 ; branch if nonzero hits ; fallthrough ; [ attack ineffective ] 31/B926: AE C1 7E LDX $7EC1 ; current target slot 31/B929: AD 9B 7E LDA $7E9B 31/B92C: 20 2C FD JSR $FD2C ; clear bit 31/B92F: 8D 9B 7E STA $7E9B ; remove from target mask 31/B932: AD 7C 00 LDA $007C 31/B935: 60 RTS ; [ ] 31/B936: A9 75 LDA #$75 ; $7675 31/B938: 85 18 STA $18 31/B93A: A9 76 LDA #$76 31/B93C: 85 19 STA $19 31/B93E: A0 01 LDY #$01 31/B940: A2 00 LDX #$00 31/B942: B1 18 LDA ($18),Y 31/B944: 95 E0 STA $E0,X 31/B946: 95 F0 STA $F0,X 31/B948: E8 INX 31/B949: E8 INX 31/B94A: 18 CLC 31/B94B: A5 18 LDA $18 31/B94D: 69 40 ADC #$40 31/B94F: 85 18 STA $18 31/B951: A5 19 LDA $19 31/B953: 69 00 ADC #$00 31/B955: 85 19 STA $19 31/B957: E0 08 CPX #$08 31/B959: D0 E7 BNE $B942 31/B95B: A2 00 LDX #$00 31/B95D: BD A7 7D LDA $7DA7,X 31/B960: C9 FF CMP #$FF 31/B962: F0 07 BEQ $B96B 31/B964: E8 INX 31/B965: E0 06 CPX #$06 31/B967: D0 F4 BNE $B95D 31/B969: F0 20 BEQ $B98B 31/B96B: 86 1C STX $1C 31/B96D: A9 00 LDA #$00 31/B96F: 9D C4 7E STA $7EC4,X 31/B972: A9 FF LDA #$FF 31/B974: 8D D8 78 STA $78D8 31/B977: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/B97A: 29 07 AND #$07 31/B97C: 85 18 STA $18 31/B97E: AA TAX 31/B97F: BD A7 7D LDA $7DA7,X 31/B982: 8D 99 7E STA $7E99 31/B985: A9 01 LDA #$01 31/B987: 8D 9B 7E STA $7E9B 31/B98A: 60 RTS 31/B98B: A2 FF LDX #$FF 31/B98D: 8E D7 78 STX $78D7 31/B990: 8E D8 78 STX $78D8 31/B993: 8E 99 7E STX $7E99 31/B996: A9 44 LDA #$44 ; $0664: "ようすをみている" / "Searching…" 31/B998: 8D DA 78 STA $78DA 31/B99B: 68 PLA ; pull return address 31/B99C: 68 PLA 31/B99D: 4C CF B4 JMP $B4CF ; [ ] 31/B9A0: A2 FF LDX #$FF 31/B9A2: 8E D8 78 STX $78D8 31/B9A5: 20 AB B9 JSR $B9AB ; copy monster properties 31/B9A8: 4C ED B9 JMP $B9ED ; clear target status ; [ copy monster properties ] ; $18: old slot ; $1C: new slot 31/B9AB: A5 18 LDA $18 31/B9AD: A2 40 LDX #$40 31/B9AF: 20 D6 FC JSR $FCD6 ; multiply 31/B9B2: 18 CLC 31/B9B3: A5 1A LDA $1A 31/B9B5: 69 75 ADC #$75 ; $7675 31/B9B7: 85 1E STA $1E 31/B9B9: A5 1B LDA $1B 31/B9BB: 69 76 ADC #$76 31/B9BD: 85 1F STA $1F 31/B9BF: A5 1C LDA $1C 31/B9C1: A2 40 LDX #$40 31/B9C3: 20 D6 FC JSR $FCD6 ; multiply 31/B9C6: 18 CLC 31/B9C7: A5 1A LDA $1A 31/B9C9: 69 75 ADC #$75 31/B9CB: 85 20 STA $20 31/B9CD: A5 1B LDA $1B 31/B9CF: 69 76 ADC #$76 31/B9D1: 85 21 STA $21 31/B9D3: A0 3F LDY #$3F ; copy 64 bytes 31/B9D5: B1 1E LDA ($1E),Y 31/B9D7: 91 20 STA ($20),Y 31/B9D9: 88 DEY 31/B9DA: 10 F9 BPL $B9D5 31/B9DC: A5 1C LDA $1C ; new monster slot 31/B9DE: 09 80 ORA #$80 ; set monster flag 31/B9E0: A0 2C LDY #$2C 31/B9E2: 29 E7 AND #$E7 ; clear item and magic flags 31/B9E4: 91 20 STA ($20),Y 31/B9E6: C8 INY 31/B9E7: C8 INY 31/B9E8: A9 00 LDA #$00 31/B9EA: 91 20 STA ($20),Y 31/B9EC: 60 RTS ; [ clear target status ] ; $1C: target id 31/B9ED: A5 1C LDA $1C 31/B9EF: 0A ASL 31/B9F0: AA TAX 31/B9F1: A9 00 LDA #$00 31/B9F3: 9D E0 00 STA $00E0,X 31/B9F6: 9D F0 00 STA $00F0,X 31/B9F9: 60 RTS ; [ do reflect effect ] 31/B9FA: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/B9FD: 30 05 BMI $BA04 ; branch if a monster 31/B9FF: B1 70 LDA ($70),Y 31/BA01: 30 05 BMI $BA08 ; branch if target is a monster 31/BA03: 60 RTS ; no reflect if attacking same side 31/BA04: B1 70 LDA ($70),Y 31/BA06: 30 FB BMI $BA03 ; branch if target is a monster 31/BA08: AD 88 7E LDA $7E88 ; spell id 31/BA0B: 85 18 STA $18 31/BA0D: 20 46 FD JSR $FD46 ; lsr3 31/BA10: AA TAX 31/BA11: A5 18 LDA $18 31/BA13: 29 07 AND #$07 31/BA15: A8 TAY 31/BA16: C8 INY 31/BA17: BD 0E BB LDA $BB0E,X ; spell reflectability 31/BA1A: 0A ASL 31/BA1B: 88 DEY 31/BA1C: D0 FC BNE $BA1A 31/BA1E: 90 7B BCC $BA9B ; return if not reflectable 31/BA20: A5 70 LDA $70 31/BA22: 8D B5 78 STA $78B5 ; set reflected target pointer 31/BA25: A5 71 LDA $71 31/BA27: 8D B6 78 STA $78B6 31/BA2A: 20 25 BC JSR $BC25 ; get target flags 31/BA2D: 48 PHA 31/BA2E: 29 07 AND #$07 31/BA30: AA TAX 31/BA31: AD B8 7E LDA $7EB8 ; set reflected target 31/BA34: 20 20 FD JSR $FD20 ; set bit 31/BA37: 8D B8 7E STA $7EB8 31/BA3A: A0 26 LDY #$26 31/BA3C: A9 00 LDA #$00 31/BA3E: 91 70 STA ($70),Y ; clear reflect counter 31/BA40: 85 24 STA $24 31/BA42: 85 27 STA $27 31/BA44: A9 03 LDA #$03 31/BA46: 85 25 STA $25 31/BA48: 68 PLA 31/BA49: 30 0C BMI $BA57 31/BA4B: A9 04 LDA #$04 31/BA4D: 85 24 STA $24 31/BA4F: A9 0B LDA #$0B 31/BA51: 85 25 STA $25 31/BA53: A9 FC LDA #$FC 31/BA55: 85 27 STA $27 31/BA57: A9 01 LDA #$01 ; rng 1 31/BA59: 85 21 STA $21 31/BA5B: A6 24 LDX $24 31/BA5D: A5 25 LDA $25 31/BA5F: 20 EF FB JSR $FBEF ; random (X..A) 31/BA62: 48 PHA 31/BA63: 18 CLC 31/BA64: 65 27 ADC $27 31/BA66: 85 26 STA $26 31/BA68: 68 PLA 31/BA69: A2 40 LDX #$40 31/BA6B: 20 D6 FC JSR $FCD6 ; multiply 31/BA6E: 18 CLC 31/BA6F: A5 1A LDA $1A 31/BA71: 69 75 ADC #$75 ; $7575 31/BA73: 85 70 STA $70 31/BA75: A5 1B LDA $1B 31/BA77: 69 75 ADC #$75 31/BA79: 85 71 STA $71 31/BA7B: A0 01 LDY #$01 31/BA7D: B1 70 LDA ($70),Y 31/BA7F: 29 C0 AND #$C0 31/BA81: D0 D4 BNE $BA57 ; branch if dead or stone 31/BA83: C8 INY 31/BA84: B1 70 LDA ($70),Y 31/BA86: 29 01 AND #$01 31/BA88: D0 CD BNE $BA57 ; branch if jumping 31/BA8A: A6 26 LDX $26 31/BA8C: A9 00 LDA #$00 31/BA8E: 20 20 FD JSR $FD20 ; set bit 31/BA91: AE C1 7E LDX $7EC1 31/BA94: E8 INX 31/BA95: 9D B8 7E STA $7EB8,X ; set target reflected onto 31/BA98: EE 74 75 INC $7574 31/BA9B: 60 RTS ; attack effect jump table 31/BA9C: B17C B233 B276 B2B5 B30C B37A B3CA B3F1 31/BAAC: B474 B480 B48C B49B B4C8 B4B9 B4C9 B4D4 31/BABC: B4F4 B4D4 B51F B56C B5AA B5E7 B62C B654 31/BACC: B233 B658 B657 B679 B67F B679 B679 B67F 31/BADC: B679 B679 B67C B679 B679 B679 B679 B679 31/BAEC: B685 B679 B688 B67F B679 B679 B682 B6B0 31/BAFC: B679 B679 B67F B679 B67F B67F B679 B679 31/BB0C: B679 ; spell reflectability (1 bit per magic attack) 31/BB0E: 84 03 44 0C 1C 34 60 78 00 20 00 00 00 00 ; -------------------------------------------------------------------------- ; [ set attacker damage numeral buffer ] ; +$78: damage ; X: attacker index * 2 31/BB1C: A5 78 LDA $78 31/BB1E: 9D 5F 7E STA $7E5F,X 31/BB21: E8 INX 31/BB22: A5 79 LDA $79 31/BB24: 9D 5F 7E STA $7E5F,X 31/BB27: 60 RTS ; [ get number of hits ] ; $24: attack/defense multiplier (no. of hits) ; $25: hit/def % ; $30: number of hits 31/BB28: A9 00 LDA #$00 31/BB2A: 85 30 STA $30 31/BB2C: A5 24 LDA $24 ; no. of hits 31/BB2E: F0 11 BEQ $BB41 31/BB30: A9 63 LDA #$63 31/BB32: 20 B4 BE JSR $BEB4 ; random (0..A) 31/BB35: C5 25 CMP $25 ; hit % 31/BB37: B0 02 BCS $BB3B 31/BB39: E6 30 INC $30 31/BB3B: C6 24 DEC $24 31/BB3D: A5 24 LDA $24 31/BB3F: D0 EF BNE $BB30 31/BB41: A5 30 LDA $30 31/BB43: 60 RTS ; [ calculate damage ] ; $24: no. of hits (before hit % check) ; $25: attack ; $26: defense ; $27: damage multiplier (gets divided by 2) ; $28: crit bonus ; $29: crit flag ; $2A: number of targets hit (divide damage) ; $2B: attack msb 31/BB44: A5 2B LDA $2B 31/BB46: 4A LSR 31/BB47: A5 25 LDA $25 31/BB49: 6A ROR 31/BB4A: 20 B4 BE JSR $BEB4 ; random (0..A) 31/BB4D: 18 CLC 31/BB4E: 65 25 ADC $25 31/BB50: 85 18 STA $18 ; +$18 = attack * (1..3/2) 31/BB52: A5 2B LDA $2B 31/BB54: 69 00 ADC #$00 31/BB56: 85 19 STA $19 31/BB58: A9 00 LDA #$00 ; clear hi byte of attack multiplier 31/BB5A: 85 1B STA $1B 31/BB5C: A5 27 LDA $27 ; attack multiplier 31/BB5E: 4A LSR 31/BB5F: D0 0F BNE $BB70 31/BB61: 46 19 LSR $19 ; divide by 2 31/BB63: 66 18 ROR $18 31/BB65: A5 18 LDA $18 31/BB67: 85 1C STA $1C ; +$1C <- +$18 31/BB69: A5 19 LDA $19 31/BB6B: 85 1D STA $1D 31/BB6D: 18 CLC 31/BB6E: 90 05 BCC $BB75 31/BB70: 85 1A STA $1A ; apply multiplier 31/BB72: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 31/BB75: A5 1C LDA $1C 31/BB77: 85 30 STA $30 31/BB79: A5 1D LDA $1D 31/BB7B: 85 31 STA $31 31/BB7D: A6 28 LDX $28 ; crit bonus 31/BB7F: A5 29 LDA $29 ; crit flag 31/BB81: 20 D6 FC JSR $FCD6 ; multiply 31/BB84: 18 CLC 31/BB85: A5 1A LDA $1A 31/BB87: 65 30 ADC $30 31/BB89: 85 18 STA $18 ; +$18 = attack + crit bonus 31/BB8B: A5 1B LDA $1B 31/BB8D: 65 31 ADC $31 31/BB8F: 85 19 STA $19 31/BB91: 20 B5 A2 JSR $A2B5 ; get attacker flags 31/BB94: 30 04 BMI $BB9A ; branch if attacker is a monster 31/BB96: B1 70 LDA ($70),Y 31/BB98: 10 15 BPL $BBAF ; branch if target is a character 31/BB9A: 38 SEC 31/BB9B: A5 18 LDA $18 31/BB9D: E5 26 SBC $26 ; subtract defense 31/BB9F: 85 18 STA $18 31/BBA1: A5 19 LDA $19 31/BBA3: E9 00 SBC #$00 31/BBA5: 85 19 STA $19 31/BBA7: B0 06 BCS $BBAF 31/BBA9: A9 00 LDA #$00 ; min 0 31/BBAB: 85 18 STA $18 31/BBAD: 85 19 STA $19 31/BBAF: A9 00 LDA #$00 31/BBB1: 85 1B STA $1B 31/BBB3: AD 7C 00 LDA $007C ; total no. of hits 31/BBB6: 85 1A STA $1A 31/BBB8: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 31/BBBB: A5 1C LDA $1C 31/BBBD: 85 18 STA $18 ; +$18 = net damage 31/BBBF: A5 1D LDA $1D 31/BBC1: 85 19 STA $19 31/BBC3: A9 00 LDA #$00 31/BBC5: 85 1B STA $1B 31/BBC7: A5 2A LDA $2A 31/BBC9: 85 1A STA $1A 31/BBCB: 20 92 FC JSR $FC92 ; divide (16-bit) 31/BBCE: 38 SEC 31/BBCF: A5 1C LDA $1C 31/BBD1: E9 0F SBC #$0F 31/BBD3: A5 1D LDA $1D 31/BBD5: E9 27 SBC #$27 31/BBD7: 90 08 BCC $BBE1 31/BBD9: A9 0F LDA #$0F 31/BBDB: 85 1C STA $1C 31/BBDD: A9 27 LDA #$27 ; max damage is 9999 31/BBDF: 85 1D STA $1D 31/BBE1: 60 RTS ; [ check if target is undead ] ; return carry set if undead 31/BBE2: A0 12 LDY #$12 31/BBE4: B1 70 LDA ($70),Y 31/BBE6: 10 07 BPL $BBEF ; branch if not weak to holy 31/BBE8: 38 SEC 31/BBE9: A9 02 LDA #$02 31/BBEB: 85 27 STA $27 31/BBED: D0 03 BNE $BBF2 31/BBEF: 18 CLC 31/BBF0: A9 00 LDA #$00 31/BBF2: 60 RTS ; [ apply status ] 31/BBF3: 20 25 BC JSR $BC25 ; get target flags 31/BBF6: 29 07 AND #$07 31/BBF8: 0A ASL 31/BBF9: AA TAX 31/BBFA: A5 24 LDA $24 31/BBFC: 29 01 AND #$01 31/BBFE: D0 2A BNE $BC2A ; branch if status 2 ; status 1 31/BC00: B5 E0 LDA $E0,X 31/BC02: C5 24 CMP $24 31/BC04: 90 03 BCC $BC09 31/BC06: 4C 26 B9 JMP $B926 ; attack ineffective 31/BC09: 05 24 ORA $24 31/BC0B: 95 E0 STA $E0,X ; apply status 31/BC0D: A2 00 LDX #$00 31/BC0F: A5 24 LDA $24 31/BC11: 0A ASL 31/BC12: B0 03 BCS $BC17 ; find index of status 31/BC14: E8 INX 31/BC15: D0 FA BNE $BC11 31/BC17: 8A TXA 31/BC18: C9 02 CMP #$02 31/BC1A: 90 03 BCC $BC1F ; branch if not dead or stone 31/BC1C: 18 CLC 31/BC1D: 69 03 ADC #$03 ; skip over paralyzed, asleep, confused 31/BC1F: 18 CLC 31/BC20: 69 0A ADC #$0A 31/BC22: 8D D9 78 STA $78D9 ; middle right message ; get target flags 31/BC25: A0 2C LDY #$2C 31/BC27: B1 70 LDA ($70),Y 31/BC29: 60 RTS ; status 2 31/BC2A: A5 24 LDA $24 31/BC2C: 29 20 AND #$20 31/BC2E: F0 05 BEQ $BC35 ; branch if not confuse 31/BC30: AD D8 7E LDA $7ED8 31/BC33: 30 1B BMI $BC50 ; branch if a boss battle 31/BC35: E8 INX 31/BC36: A5 24 LDA $24 31/BC38: 29 06 AND #$06 31/BC3A: D0 49 BNE $BC85 ; branch if partial petrify ; paralyzed, asleep, confused 31/BC3C: B5 E0 LDA $E0,X 31/BC3E: 85 25 STA $25 31/BC40: 29 E0 AND #$E0 31/BC42: 85 18 STA $18 31/BC44: A5 24 LDA $24 31/BC46: 29 E0 AND #$E0 31/BC48: 85 19 STA $19 31/BC4A: A5 18 LDA $18 31/BC4C: C5 19 CMP $19 31/BC4E: 90 03 BCC $BC53 31/BC50: 4C 26 B9 JMP $B926 ; attack ineffective 31/BC53: A5 25 LDA $25 31/BC55: 29 07 AND #$07 31/BC57: 85 18 STA $18 31/BC59: AD 24 00 LDA $0024 31/BC5C: 29 FE AND #$FE 31/BC5E: 05 18 ORA $18 31/BC60: 95 E0 STA $E0,X 31/BC62: 29 20 AND #$20 31/BC64: F0 0D BEQ $BC73 31/BC66: A0 2E LDY #$2E 31/BC68: A9 00 LDA #$00 31/BC6A: 91 70 STA ($70),Y 31/BC6C: 20 25 BC JSR $BC25 ; get target flags 31/BC6F: 29 E7 AND #$E7 31/BC71: 91 70 STA ($70),Y 31/BC73: A2 00 LDX #$00 31/BC75: A5 24 LDA $24 31/BC77: 0A ASL 31/BC78: B0 03 BCS $BC7D 31/BC7A: E8 INX 31/BC7B: D0 FA BNE $BC77 31/BC7D: 8A TXA 31/BC7E: 18 CLC 31/BC7F: 69 0C ADC #$0C 31/BC81: 8D D9 78 STA $78D9 31/BC84: 60 RTS ; partial petrify 31/BC85: A5 24 LDA $24 31/BC87: 29 7E AND #$7E 31/BC89: 85 18 STA $18 31/BC8B: B5 E0 LDA $E0,X 31/BC8D: 85 25 STA $25 31/BC8F: 29 06 AND #$06 31/BC91: 85 19 STA $19 31/BC93: 18 CLC 31/BC94: A5 18 LDA $18 31/BC96: 65 19 ADC $19 31/BC98: C9 08 CMP #$08 31/BC9A: B0 1B BCS $BCB7 31/BC9C: 18 CLC 31/BC9D: A5 25 LDA $25 31/BC9F: 65 18 ADC $18 31/BCA1: 95 E0 STA $E0,X 31/BCA3: A0 2E LDY #$2E 31/BCA5: B1 6E LDA ($6E),Y 31/BCA7: C9 04 CMP #$04 31/BCA9: D0 0B BNE $BCB6 31/BCAB: AE EE 78 LDX $78EE 31/BCAE: A9 3C LDA #$3C ; $065C: "からだがじょじょにせきかする" / "Petrifying…" 31/BCB0: 9D DA 78 STA $78DA,X 31/BCB3: EE EE 78 INC $78EE 31/BCB6: 60 RTS 31/BCB7: A5 25 LDA $25 31/BCB9: 29 F9 AND #$F9 31/BCBB: 95 E0 STA $E0,X 31/BCBD: CA DEX 31/BCBE: B5 E0 LDA $E0,X 31/BCC0: 09 40 ORA #$40 31/BCC2: 95 E0 STA $E0,X 31/BCC4: A9 0B LDA #$0B 31/BCC6: 8D D9 78 STA $78D9 31/BCC9: A9 28 LDA #$28 ; $0648: "いしになりくだけちった!" / "Shattered" 31/BCCB: AE EE 78 LDX $78EE 31/BCCE: 9D DA 78 STA $78DA,X 31/BCD1: 60 RTS ; [ subtract damage from hp ] ; +$24: pointer to target properties ; return carry clear if hp reaches zero 31/BCD2: A5 78 LDA $78 31/BCD4: 05 79 ORA $79 31/BCD6: D0 03 BNE $BCDB ; set carry and return if zero damage 31/BCD8: 38 SEC 31/BCD9: B0 27 BCS $BD02 31/BCDB: 38 SEC 31/BCDC: A0 03 LDY #$03 31/BCDE: B1 24 LDA ($24),Y ; hp 31/BCE0: E5 78 SBC $78 31/BCE2: 91 24 STA ($24),Y 31/BCE4: C8 INY 31/BCE5: B1 24 LDA ($24),Y 31/BCE7: E5 79 SBC $79 31/BCE9: 91 24 STA ($24),Y 31/BCEB: B0 0D BCS $BCFA ; branch if not dead 31/BCED: EE 73 75 INC $7573 31/BCF0: A9 00 LDA #$00 ; set hp to zero 31/BCF2: 91 24 STA ($24),Y 31/BCF4: 88 DEY 31/BCF5: 91 24 STA ($24),Y 31/BCF7: 18 CLC 31/BCF8: 90 08 BCC $BD02 31/BCFA: B1 24 LDA ($24),Y 31/BCFC: 88 DEY 31/BCFD: 11 24 ORA ($24),Y 31/BCFF: F0 EC BEQ $BCED 31/BD01: 38 SEC 31/BD02: 60 RTS ; [ restore hp (life spells) ] ; for life 1, restore single digit hp ; for life 2, restore hp to max 31/BD03: AD 02 74 LDA $7402 31/BD06: C9 FF CMP #$FF 31/BD08: D0 0C BNE $BD16 31/BD0A: A0 05 LDY #$05 31/BD0C: B1 70 LDA ($70),Y ; max hp 31/BD0E: 85 78 STA $78 31/BD10: C8 INY 31/BD11: B1 70 LDA ($70),Y 31/BD13: 85 79 STA $79 31/BD15: 60 RTS 31/BD16: A9 09 LDA #$09 31/BD18: 20 B4 BE JSR $BEB4 ; random (0..A) 31/BD1B: F0 F9 BEQ $BD16 31/BD1D: 85 78 STA $78 31/BD1F: A9 00 LDA #$00 31/BD21: 85 79 STA $79 31/BD23: 60 RTS ; [ restore hp ] ; +$24: pointer to target properties 31/BD24: 18 CLC 31/BD25: A0 03 LDY #$03 31/BD27: B1 24 LDA ($24),Y ; add to current hp 31/BD29: 85 1A STA $1A ; +$1A: previous hp 31/BD2B: 65 78 ADC $78 31/BD2D: 91 24 STA ($24),Y 31/BD2F: C8 INY 31/BD30: B1 24 LDA ($24),Y 31/BD32: 85 1B STA $1B 31/BD34: 65 79 ADC $79 31/BD36: 91 24 STA ($24),Y 31/BD38: 38 SEC 31/BD39: A0 05 LDY #$05 31/BD3B: B1 24 LDA ($24),Y ; +$18: max hp 31/BD3D: 85 18 STA $18 31/BD3F: A0 03 LDY #$03 31/BD41: F1 24 SBC ($24),Y ; subtract current hp 31/BD43: A0 06 LDY #$06 31/BD45: B1 24 LDA ($24),Y 31/BD47: 85 19 STA $19 31/BD49: A0 04 LDY #$04 31/BD4B: F1 24 SBC ($24),Y 31/BD4D: B0 17 BCS $BD66 ; return if current hp <= max hp 31/BD4F: A5 19 LDA $19 31/BD51: 91 24 STA ($24),Y ; set hp to max 31/BD53: 88 DEY 31/BD54: A5 18 LDA $18 31/BD56: 91 24 STA ($24),Y 31/BD58: 38 SEC 31/BD59: B1 24 LDA ($24),Y 31/BD5B: E5 1A SBC $1A 31/BD5D: 85 78 STA $78 ; +$78: effective hp restored 31/BD5F: C8 INY 31/BD60: B1 24 LDA ($24),Y 31/BD62: E5 1B SBC $1B 31/BD64: 85 79 STA $79 31/BD66: 60 RTS ; [ drain hp to attacker ] ; drain spell - drain all damage dealt ; fight command: drain 1/4 of damage dealt ; $26: result ; $00: neither died ; $01: target died ; $81: attacker died ; $42: nonzero if damage inverted 31/BD67: A9 00 LDA #$00 31/BD69: 85 26 STA $26 31/BD6B: 20 E2 BB JSR $BBE2 ; check if target is undead 31/BD6E: 90 1F BCC $BD8F ; branch if not undead ; undead target - invert damage 31/BD70: E6 42 INC $42 31/BD72: 20 B3 BD JSR $BDB3 ; get attacker pointer 31/BD75: 20 D2 BC JSR $BCD2 ; subtract damage from hp 31/BD78: B0 04 BCS $BD7E ; branch if not dead 31/BD7A: A9 81 LDA #$81 31/BD7C: 85 26 STA $26 31/BD7E: A0 2E LDY #$2E 31/BD80: B1 6E LDA ($6E),Y 31/BD82: C9 04 CMP #$04 31/BD84: D0 03 BNE $BD89 ; branch if not fight command 31/BD86: 20 AA BD JSR $BDAA ; divide damage by 4 31/BD89: 20 24 BD JSR $BD24 ; restore hp 31/BD8C: 4C A9 BD JMP $BDA9 ; not undead 31/BD8F: 20 D2 BC JSR $BCD2 ; subtract damage from hp 31/BD92: B0 04 BCS $BD98 31/BD94: A9 01 LDA #$01 31/BD96: 85 26 STA $26 31/BD98: 20 B3 BD JSR $BDB3 ; get attacker pointer 31/BD9B: A0 2E LDY #$2E 31/BD9D: B1 6E LDA ($6E),Y 31/BD9F: C9 04 CMP #$04 31/BDA1: D0 03 BNE $BDA6 ; branch if not fight command 31/BDA3: 20 AA BD JSR $BDAA ; divide damage by 4 31/BDA6: 20 24 BD JSR $BD24 ; restore hp 31/BDA9: 60 RTS ; [ divide damage by 4 ] 31/BDAA: 46 79 LSR $79 31/BDAC: 66 78 ROR $78 31/BDAE: 46 79 LSR $79 31/BDB0: 66 78 ROR $78 31/BDB2: 60 RTS ; [ get attacker pointer ] 31/BDB3: A5 6E LDA $6E 31/BDB5: 85 24 STA $24 31/BDB7: A5 6F LDA $6F 31/BDB9: 85 25 STA $25 31/BDBB: 60 RTS ; [ get target pointer ] 31/BDBC: A5 70 LDA $70 31/BDBE: 85 24 STA $24 31/BDC0: A5 71 LDA $71 31/BDC2: 85 25 STA $25 31/BDC4: 60 RTS ; [ check if target/attacker is dead ] ; characters die if their hp reaches zero or they are inflicted with dead status ; monsters also die if they get stone or toad status (what about mini ???) ; A: 0 = target, 1 = attacker 31/BDC5: 48 PHA 31/BDC6: 48 PHA 31/BDC7: A9 80 LDA #$80 ; characters die only with dead status 31/BDC9: 85 18 STA $18 31/BDCB: 20 C8 A8 JSR $A8C8 ; get flags 31/BDCE: 10 06 BPL $BDD6 ; branch if a character 31/BDD0: 48 PHA 31/BDD1: A9 E0 LDA #$E0 ; monsters die with dead, stone, or toad 31/BDD3: 85 18 STA $18 31/BDD5: 68 PLA 31/BDD6: 29 07 AND #$07 31/BDD8: 0A ASL 31/BDD9: AA TAX 31/BDDA: 68 PLA 31/BDDB: D0 08 BNE $BDE5 31/BDDD: B5 E0 LDA $E0,X ; target status 31/BDDF: 25 18 AND $18 31/BDE1: F0 13 BEQ $BDF6 31/BDE3: D0 06 BNE $BDEB 31/BDE5: B5 F0 LDA $F0,X ; attacker status 31/BDE7: 25 18 AND $18 31/BDE9: F0 0B BEQ $BDF6 ; branch if not dead from status 31/BDEB: A0 03 LDY #$03 31/BDED: A9 00 LDA #$00 31/BDEF: 91 24 STA ($24),Y ; set hp to zero 31/BDF1: C8 INY 31/BDF2: 91 24 STA ($24),Y 31/BDF4: F0 1C BEQ $BE12 ; return 31/BDF6: A0 03 LDY #$03 31/BDF8: B1 24 LDA ($24),Y 31/BDFA: C8 INY 31/BDFB: 11 24 ORA ($24),Y 31/BDFD: D0 13 BNE $BE12 ; return if nonzero hp 31/BDFF: 68 PLA 31/BE00: D0 08 BNE $BE0A 31/BE02: B5 E0 LDA $E0,X ; make target dead 31/BE04: 09 80 ORA #$80 31/BE06: 95 E0 STA $E0,X 31/BE08: D0 09 BNE $BE13 31/BE0A: B5 F0 LDA $F0,X ; make attacker dead 31/BE0C: 09 80 ORA #$80 31/BE0E: 95 F0 STA $F0,X 31/BE10: D0 01 BNE $BE13 31/BE12: 68 PLA 31/BE13: 60 RTS ; [ apply attack status (fight effect) ] 31/BE14: AD 44 74 LDA $7444 ; attack status (from $7575 + #$1A) 31/BE17: 85 25 STA $25 31/BE19: F0 27 BEQ $BE42 ; return if no attack status 31/BE1B: A5 7C LDA $7C ; total number of hits 31/BE1D: 85 24 STA $24 31/BE1F: F0 21 BEQ $BE42 ; return if no hits 31/BE21: AD 2E 74 LDA $742E ; status immunity 31/BE24: 25 25 AND $25 31/BE26: D0 1A BNE $BE42 ; branch if immune 31/BE28: 38 SEC 31/BE29: AD 42 74 LDA $7442 ; hit % 31/BE2C: ED 2C 74 SBC $742C ; evade % 31/BE2F: B0 02 BCS $BE33 31/BE31: A9 00 LDA #$00 ; zero probability 31/BE33: 85 25 STA $25 31/BE35: 20 28 BB JSR $BB28 ; get number of hits 31/BE38: F0 08 BEQ $BE42 ; branch if no hits 31/BE3A: AD 44 74 LDA $7444 31/BE3D: 85 24 STA $24 31/BE3F: 20 F3 BB JSR $BBF3 ; apply status 31/BE42: 60 RTS ; [ apply magic status (normal magic damage) ] ; hit % = actual no. of hits / attack multiplier ; attack multiplier = actual no. of hits 31/BE43: A5 7C LDA $7C 31/BE45: F0 48 BEQ $BE8F ; return if zero hits 31/BE47: AD 03 74 LDA $7403 31/BE4A: F0 43 BEQ $BE8F ; return if no status effects 31/BE4C: A0 24 LDY #$24 31/BE4E: B1 70 LDA ($70),Y ; status immunity 31/BE50: 2D 03 74 AND $7403 31/BE53: D0 3A BNE $BE8F ; return if immune to status 31/BE55: AD 7C 00 LDA $007C 31/BE58: 85 18 STA $18 31/BE5A: A9 64 LDA #$64 ; no. of hits * 100 31/BE5C: 85 1A STA $1A 31/BE5E: A9 00 LDA #$00 31/BE60: 85 19 STA $19 31/BE62: 85 1B STA $1B 31/BE64: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 31/BE67: A5 38 LDA $38 ; divide by attack multiplier 31/BE69: 85 1A STA $1A 31/BE6B: A5 1C LDA $1C 31/BE6D: 85 18 STA $18 31/BE6F: A5 1D LDA $1D 31/BE71: 85 19 STA $19 31/BE73: A9 00 LDA #$00 31/BE75: 85 1B STA $1B 31/BE77: 20 92 FC JSR $FC92 ; divide (16-bit) 31/BE7A: A5 1C LDA $1C 31/BE7C: 85 25 STA $25 31/BE7E: A5 7C LDA $7C 31/BE80: 85 24 STA $24 31/BE82: 20 28 BB JSR $BB28 ; get number of hits 31/BE85: F0 08 BEQ $BE8F ; branch if no hits 31/BE87: AD 03 74 LDA $7403 31/BE8A: 85 24 STA $24 31/BE8C: 4C F3 BB JMP $BBF3 ; apply status 31/BE8F: 60 RTS ; [ get character offset ] 31/BE90: A5 52 LDA $52 31/BE92: 20 3C FD JSR $FD3C ; asl6 31/BE95: 85 5F STA $5F 31/BE97: 60 RTS ; [ add character offset ] 31/BE98: 18 CLC 31/BE99: 65 5F ADC $5F 31/BE9B: A8 TAY 31/BE9C: 60 RTS ; [ battle algorithm $07: calculate pointer ] ; $18: size ; $1A: index ; +$20: offset 31/BE9D: A9 00 LDA #$00 31/BE9F: 85 19 STA $19 31/BEA1: 85 1B STA $1B 31/BEA3: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 31/BEA6: 18 CLC 31/BEA7: A5 1C LDA $1C 31/BEA9: 65 20 ADC $20 31/BEAB: 85 1C STA $1C 31/BEAD: A5 1D LDA $1D 31/BEAF: 65 21 ADC $21 31/BEB1: 85 1D STA $1D 31/BEB3: 60 RTS ; [ random (0..A) ] 31/BEB4: 48 PHA 31/BEB5: A9 01 LDA #$01 ; rng 1 31/BEB7: 85 21 STA $21 31/BEB9: A2 00 LDX #$00 31/BEBB: 68 PLA 31/BEBC: 4C EF FB JMP $FBEF ; random (X..A) ; -------------------------------------------------------------------------- ; [ battle algorithm $08: consolidate inventory ] 31/BEBF: A2 00 LDX #$00 31/BEC1: A9 00 LDA #$00 31/BEC3: 9D 80 72 STA $7280,X ; clear buffer 31/BEC6: 9D 80 73 STA $7380,X 31/BEC9: E8 INX 31/BECA: D0 F7 BNE $BEC3 31/BECC: A0 00 LDY #$00 31/BECE: B9 C0 60 LDA $60C0,Y ; item id 31/BED1: AA TAX 31/BED2: 9D 80 72 STA $7280,X 31/BED5: C8 INY 31/BED6: B9 C0 60 LDA $60C0,Y ; item quantity 31/BED9: 18 CLC 31/BEDA: 7D 80 73 ADC $7380,X ; consolidate items 31/BEDD: C9 64 CMP #$64 31/BEDF: 90 02 BCC $BEE3 31/BEE1: A9 63 LDA #$63 ; max 99 31/BEE3: 9D 80 73 STA $7380,X 31/BEE6: C8 INY 31/BEE7: C0 40 CPY #$40 31/BEE9: D0 E3 BNE $BECE 31/BEEB: A2 3F LDX #$3F 31/BEED: A9 00 LDA #$00 31/BEEF: 9D C0 60 STA $60C0,X ; clear inventory 31/BEF2: CA DEX 31/BEF3: 10 FA BPL $BEEF 31/BEF5: A0 FF LDY #$FF 31/BEF7: A2 00 LDX #$00 31/BEF9: B9 80 72 LDA $7280,Y ; sort by item id (reverse order) 31/BEFC: F0 15 BEQ $BF13 31/BEFE: 9D C0 60 STA $60C0,X 31/BF01: E8 INX 31/BF02: B9 80 73 LDA $7380,Y 31/BF05: D0 08 BNE $BF0F 31/BF07: CA DEX 31/BF08: A9 00 LDA #$00 31/BF0A: 9D C0 60 STA $60C0,X 31/BF0D: F0 04 BEQ $BF13 31/BF0F: 9D C0 60 STA $60C0,X 31/BF12: E8 INX 31/BF13: 88 DEY 31/BF14: D0 E3 BNE $BEF9 31/BF16: 60 RTS ; [ battle algorithm $09: get confused attack ] 31/BF17: A5 52 LDA $52 ; character slot 31/BF19: 48 PHA 31/BF1A: A9 03 LDA #$03 31/BF1C: 20 B4 BE JSR $BEB4 ; random (0..A) 31/BF1F: 85 26 STA $26 31/BF21: 85 52 STA $52 31/BF23: 20 90 BE JSR $BE90 ; get character offset 31/BF26: A8 TAY 31/BF27: C8 INY 31/BF28: B1 5B LDA ($5B),Y 31/BF2A: 29 C0 AND #$C0 31/BF2C: D0 EC BNE $BF1A ; branch if dead or stone 31/BF2E: C8 INY 31/BF2F: B1 5B LDA ($5B),Y 31/BF31: 29 01 AND #$01 31/BF33: D0 E5 BNE $BF1A ; branch if jumping 31/BF35: 68 PLA 31/BF36: 85 52 STA $52 31/BF38: 20 90 BE JSR $BE90 ; get character offset 31/BF3B: 18 CLC 31/BF3C: 69 2E ADC #$2E 31/BF3E: A8 TAY 31/BF3F: A9 04 LDA #$04 ; use fight command 31/BF41: 91 5B STA ($5B),Y 31/BF43: A9 00 LDA #$00 31/BF45: A6 26 LDX $26 ; random character target 31/BF47: 20 20 FD JSR $FD20 ; set bit 31/BF4A: C8 INY 31/BF4B: 91 5B STA ($5B),Y 31/BF4D: C8 INY 31/BF4E: A9 00 LDA #$00 31/BF50: 91 5B STA ($5B),Y ; clear target flags 31/BF52: 60 RTS ; [ split monster ] 31/BF53: A9 00 LDA #$00 31/BF55: 85 18 STA $18 31/BF57: 20 25 BC JSR $BC25 ; get target flags 31/BF5A: 10 60 BPL $BFBC ; return if a character 31/BF5C: A6 64 LDX $64 31/BF5E: BD E0 00 LDA $00E0,X 31/BF61: 29 E8 AND #$E8 31/BF63: D0 57 BNE $BFBC 31/BF65: E8 INX 31/BF66: BD E0 00 LDA $00E0,X 31/BF69: 29 E0 AND #$E0 31/BF6B: D0 4F BNE $BFBC 31/BF6D: A0 38 LDY #$38 31/BF6F: B1 70 LDA ($70),Y 31/BF71: C9 4F CMP #$4F ; check for "split" attack 31/BF73: D0 47 BNE $BFBC 31/BF75: A5 BB LDA $BB 31/BF77: 05 BC ORA $BC 31/BF79: F0 41 BEQ $BFBC 31/BF7B: A0 31 LDY #$31 31/BF7D: B1 6E LDA ($6E),Y 31/BF7F: F0 1C BEQ $BF9D 31/BF81: 30 1A BMI $BF9D 31/BF83: A0 16 LDY #$16 31/BF85: B1 6E LDA ($6E),Y 31/BF87: 29 02 AND #$02 31/BF89: F0 23 BEQ $BFAE 31/BF8B: A0 32 LDY #$32 31/BF8D: B1 6E LDA ($6E),Y 31/BF8F: F0 2B BEQ $BFBC 31/BF91: 30 29 BMI $BFBC 31/BF93: A0 1B LDY #$1B 31/BF95: B1 6E LDA ($6E),Y 31/BF97: 29 02 AND #$02 31/BF99: F0 13 BEQ $BFAE 31/BF9B: D0 1F BNE $BFBC 31/BF9D: C8 INY 31/BF9E: B1 6E LDA ($6E),Y 31/BFA0: F0 0C BEQ $BFAE 31/BFA2: 30 0A BMI $BFAE 31/BFA4: A0 1B LDY #$1B 31/BFA6: B1 6E LDA ($6E),Y 31/BFA8: 29 02 AND #$02 31/BFAA: F0 02 BEQ $BFAE 31/BFAC: D0 0E BNE $BFBC 31/BFAE: A2 00 LDX #$00 31/BFB0: BD A7 7D LDA $7DA7,X 31/BFB3: C9 FF CMP #$FF 31/BFB5: F0 06 BEQ $BFBD 31/BFB7: E8 INX 31/BFB8: E0 06 CPX #$06 31/BFBA: D0 F4 BNE $BFB0 31/BFBC: 60 RTS 31/BFBD: 86 1C STX $1C ; new slot 31/BFBF: A9 00 LDA #$00 31/BFC1: 9D C4 7E STA $7EC4,X 31/BFC4: 8A TXA 31/BFC5: 0A ASL 31/BFC6: AA TAX 31/BFC7: A9 00 LDA #$00 31/BFC9: 9D E0 00 STA $00E0,X 31/BFCC: A6 68 LDX $68 31/BFCE: AD E1 7B LDA $7BE1 31/BFD1: 20 2C FD JSR $FD2C ; clear bit 31/BFD4: 8D E1 7B STA $7BE1 31/BFD7: 20 25 BC JSR $BC25 ; get target flags 31/BFDA: 29 07 AND #$07 31/BFDC: 85 18 STA $18 31/BFDE: AA TAX 31/BFDF: BD A7 7D LDA $7DA7,X 31/BFE2: 8D E1 7E STA $7EE1 31/BFE5: 20 AB B9 JSR $B9AB ; copy monster properties 31/BFE8: A0 00 LDY #$00 31/BFEA: 98 TYA 31/BFEB: C8 INY 31/BFEC: 91 20 STA ($20),Y 31/BFEE: C8 INY 31/BFEF: 91 20 STA ($20),Y 31/BFF1: AE EE 78 LDX $78EE 31/BFF4: A9 6F LDA #$6F ; $068F: "ぶんれつした!" / "Divided" 31/BFF6: 9D DA 78 STA $78DA,X 31/BFF9: 60 RTS 31/BFFA: 00 00 00 00 00 00 ; -------------------------------------------------------------------------- ; [ execute animation function ] 32/8000: 0A ASL 32/8001: A8 TAY 32/8002: B9 0F 80 LDA $800F,Y 32/8005: 85 96 STA $96 32/8007: B9 10 80 LDA $8010,Y 32/800A: 85 97 STA $97 32/800C: 6C 96 00 JMP ($0096) ; animation function jump table 32/800F: 9111 9A1C 90D8 9F11 A0C0 A8B8 ABF7 AB27 32/801F: AAB8 AA15 A988 A92B AD2B BAFD 8CEF 8CA4 32/802F: AFB0 BC89 BE89 BE74 BE9A 8EFB A899 89B7 32/803F: BE01 84C9 ; -------------------------------------------------------------------------- ; animation palette for each summon 32/8043: E7 E8 EA EC EF F4 F5 F8 ; screen flash color for each monster attack (starting with atom edge) 32/804B: 1C 16 22 2A 24 18 10 31 27 12 16 16 2B 2B 18 23 32/805B: 2C 24 30 19 21 26 ; [ summon animation $03: mesmerize (shiva) ] ; "さいみんこうせん!" / "HypnoBeam" ; this animation uses irq to find the end of the battle bg area, and ; then it changes the ppu x-scroll register every scanline using cpu ; timing to time scanlines - requires good cpu-ppu sync to emulate 32/8061: A2 00 LDX #$00 32/8063: 86 B6 STX $B6 32/8065: 86 91 STX $91 ; $91 seems to be unused 32/8067: 8A TXA 32/8068: 9D 10 73 STA $7310,X ; last 16 bytes count up from 0 32/806B: A9 00 LDA #$00 32/806D: 9D 00 73 STA $7300,X ; clear first 16 bytes 32/8070: A5 06 LDA $06 32/8072: 9D 00 79 STA $7900,X ; ppu control (never changes) 32/8075: E8 INX 32/8076: E0 10 CPX #$10 32/8078: D0 ED BNE $8067 32/807A: E6 C9 INC $C9 ; queue sound effect ; start of frame loop 32/807C: A9 28 LDA #$28 ; scanline 40 (end of battle bg) 32/807E: 85 03 STA $03 32/8080: 20 D7 89 JSR $89D7 ; wait for vblank 32/8083: EE AA 00 INC $00AA ; disable ppu update at irq 32/8086: 20 79 FB JSR $FB79 ; wait for irq 32/8089: A9 6E LDA #$6E ; set irq counter to 110 32/808B: 8D 00 C0 STA $C000 32/808E: 8D 01 E0 STA $E001 32/8091: A9 00 LDA #$00 32/8093: 8D AA 00 STA $00AA ; enable ppu update at irq 32/8096: A9 6D LDA #$6D ; 109 scanlines (8 rows + 5 pixels) 32/8098: 85 90 STA $90 32/809A: A2 0B LDX #$0B ; wait a few cycles 32/809C: CA DEX 32/809D: D0 FD BNE $809C 32/809F: A6 B6 LDX $B6 ; seems like this should get masked to 4 bits ; start of scanline loop 32/80A1: 2C 02 20 BIT $2002 ; latch ppu 32/80A4: BD 00 79 LDA $7900,X 32/80A7: 48 PHA 32/80A8: BD 00 73 LDA $7300,X 32/80AB: 48 PHA 32/80AC: A0 0A LDY #$0A ; wait a few cycles (tuned to 1 scanline) 32/80AE: 88 DEY 32/80AF: D0 FD BNE $80AE 32/80B1: 68 PLA 32/80B2: 8D 05 20 STA $2005 ; set ppu x scroll 32/80B5: 68 PLA 32/80B6: 8D 00 20 STA $2000 32/80B9: E8 INX 32/80BA: 8A TXA 32/80BB: 29 0F AND #$0F ; mask to 4 bits 32/80BD: AA TAX 32/80BE: A5 91 LDA $91 32/80C0: 18 CLC 32/80C1: 69 A8 ADC #$A8 32/80C3: B0 00 BCS $80C5 ; this does nothing 32/80C5: 85 91 STA $91 32/80C7: C6 90 DEC $90 32/80C9: D0 D6 BNE $80A1 32/80CB: 20 44 8A JSR $8A44 ; update ppu scroll table 32/80CE: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/80D1: C9 80 CMP #$80 ; 128 frames (8 cycles) 32/80D3: D0 A7 BNE $807C 32/80D5: A9 97 LDA #$97 ; irq at scanline 151 32/80D7: 85 03 STA $03 32/80D9: 60 RTS ; summon animation jump table (3 pointers per summon) 32/80DA: 8AB5 8AC6 8AEB 8061 8A05 813B 89D2 8977 32/80EA: 8977 8972 88B7 87EC 82FE 82F2 8C8D 877D 32/80FA: 89FE 874C 89E8 8272 8635 861B 8376 841A ; [ update ppu scroll registers ] ; for tidal wave and earthquake 32/810A: A5 0C LDA $0C 32/810C: 8D 05 20 STA $2005 32/810F: A5 0D LDA $0D 32/8111: 8D 05 20 STA $2005 32/8114: 60 RTS ; [ do summon animation ] 32/8115: AD 91 7E LDA $7E91 ; summon id 32/8118: A2 03 LDX #$03 32/811A: 20 EA F8 JSR $F8EA ; multiply 32/811D: 18 CLC 32/811E: 6D 92 7E ADC $7E92 ; add summon attack id (0, 1, or 2) 32/8121: 0A ASL 32/8122: A8 TAY 32/8123: B9 DA 80 LDA $80DA,Y 32/8126: 85 7E STA $7E 32/8128: B9 DB 80 LDA $80DB,Y 32/812B: 85 7F STA $7F 32/812D: 6C 7E 00 JMP ($007E) ; [ clear snowflake oam ] ; clears sprites $18-$3F (48 sprites) 32/8130: A2 60 LDX #$60 32/8132: A9 F0 LDA #$F0 32/8134: 9D 00 02 STA $0200,X 32/8137: E8 INX 32/8138: D0 FA BNE $8134 32/813A: 60 RTS ; [ summon animation $05: diamond dust (shiva) ] ; "ダイヤモンドダスト!" / "Diamond Dust" ; animation buffer within this subroutine ; $7900-$793F: x oscillation table ; $7940-$796F: oscillation counter ; $7970-$799F: delay counter ; $79A0-$79CF: snowflake shown if nonzero ; $79D0-$79FF: y position ; $7A00-$792F: x position 32/813B: E6 C9 INC $C9 ; sound effect pending 32/813D: A9 0E LDA #$0E 32/813F: 20 1E BF JSR $BF1E ; load animation graphics 32/8142: A9 FF LDA #$FF 32/8144: 20 40 A4 JSR $A440 ; load animation palette 32/8147: A9 00 LDA #$00 32/8149: 85 8C STA $8C 32/814B: 8D 3A 7E STA $7E3A ; oscillation phase 32/814E: A9 20 LDA #$20 32/8150: 8D 26 7E STA $7E26 ; oscillation amplitude 32/8153: A0 00 LDY #$00 32/8155: 20 7B BF JSR $BF7B ; get vector y-component 32/8158: A6 8C LDX $8C 32/815A: 9D 00 79 STA $7900,X 32/815D: AD 3A 7E LDA $7E3A ; increment phase 32/8160: 18 CLC 32/8161: 69 04 ADC #$04 32/8163: 8D 3A 7E STA $7E3A 32/8166: E8 INX 32/8167: 86 8C STX $8C 32/8169: E0 40 CPX #$40 32/816B: D0 E6 BNE $8153 32/816D: A2 00 LDX #$00 32/816F: BD E3 7B LDA $7BE3,X ; rng table 32/8172: 9D 40 79 STA $7940,X ; init oscillation counter (0..255) 32/8175: 29 1F AND #$1F 32/8177: 9D 70 79 STA $7970,X ; init delay counter (1..32) 32/817A: FE 70 79 INC $7970,X 32/817D: A9 00 LDA #$00 32/817F: 9D A0 79 STA $79A0,X ; hide snowflake 32/8182: E8 INX 32/8183: E0 30 CPX #$30 32/8185: D0 E8 BNE $816F 32/8187: A9 80 LDA #$80 ; set frame counter (128 frames) 32/8189: 85 B6 STA $B6 ; start of frame loop 32/818B: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/818E: 20 30 81 JSR $8130 ; clear snowflake oam 32/8191: A9 60 LDA #$60 32/8193: 85 C8 STA $C8 ; oam pointer (start at sprite $18) 32/8195: A9 00 LDA #$00 32/8197: 85 90 STA $90 ; start of snow sprite loop 32/8199: A6 90 LDX $90 ; snowflake id 32/819B: FE 40 79 INC $7940,X 32/819E: DE 70 79 DEC $7970,X ; decrement delay counter 32/81A1: D0 19 BNE $81BC 32/81A3: A9 26 LDA #$26 ; total y displacement is 38 * 4 = 152 32/81A5: 9D 70 79 STA $7970,X 32/81A8: 9D A0 79 STA $79A0,X ; show snowflake 32/81AB: A9 00 LDA #$00 ; set y position to 0 32/81AD: 9D D0 79 STA $79D0,X 32/81B0: E6 91 INC $91 32/81B2: A4 91 LDY $91 32/81B4: B9 E3 7B LDA $7BE3,Y ; rng table 32/81B7: 29 F8 AND #$F8 32/81B9: 9D 00 7A STA $7A00,X ; set x position 32/81BC: BD A0 79 LDA $79A0,X 32/81BF: F0 4F BEQ $8210 ; skip if snowflake is hidden 32/81C1: BD 00 7A LDA $7A00,X 32/81C4: 48 PHA 32/81C5: 38 SEC 32/81C6: E9 04 SBC #$04 ; x velocity 32/81C8: 9D 00 7A STA $7A00,X 32/81CB: BD 40 79 LDA $7940,X 32/81CE: 29 3F AND #$3F 32/81D0: A8 TAY 32/81D1: 68 PLA 32/81D2: 18 CLC 32/81D3: 79 00 79 ADC $7900,Y ; x offset (oscillation) 32/81D6: 85 8C STA $8C ; x position 32/81D8: BD D0 79 LDA $79D0,X 32/81DB: 85 8D STA $8D ; y position 32/81DD: 18 CLC 32/81DE: 69 04 ADC #$04 ; y velocity 32/81E0: 9D D0 79 STA $79D0,X 32/81E3: C9 98 CMP #$98 ; max y position is 152 32/81E5: 90 05 BCC $81EC 32/81E7: A9 00 LDA #$00 ; hide snowflake 32/81E9: 9D A0 79 STA $79A0,X 32/81EC: A6 C8 LDX $C8 32/81EE: A5 8D LDA $8D 32/81F0: 9D 00 02 STA $0200,X ; y position 32/81F3: E8 INX 32/81F4: A5 90 LDA $90 32/81F6: 29 01 AND #$01 32/81F8: 18 CLC 32/81F9: 69 4B ADC #$4B 32/81FB: 9D 00 02 STA $0200,X ; tile id 32/81FE: E8 INX 32/81FF: A9 03 LDA #$03 32/8201: 9D 00 02 STA $0200,X ; sprite palette 3 32/8204: E8 INX 32/8205: A5 8C LDA $8C 32/8207: 9D 00 02 STA $0200,X ; x position 32/820A: 20 9B B1 JSR $B19B ; flip sprite if back attack 32/820D: E8 INX ; increment oam data pointer 32/820E: 86 C8 STX $C8 32/8210: E6 90 INC $90 ; next snowflake (40 total) 32/8212: A5 90 LDA $90 32/8214: C9 28 CMP #$28 32/8216: F0 03 BEQ $821B 32/8218: 4C 99 81 JMP $8199 32/821B: C6 B6 DEC $B6 32/821D: F0 03 BEQ $8222 32/821F: 4C 8B 81 JMP $818B 32/8222: 20 30 81 JSR $8130 ; clear snowflake oam 32/8225: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; [ init cyclone sprites ] 32/8228: A9 A0 LDA #$A0 ; init vector angle 32/822A: 8D 3A 7E STA $7E3A 32/822D: A9 10 LDA #$10 ; init vector distance 32/822F: 8D 26 7E STA $7E26 32/8232: A9 00 LDA #$00 ; sprite counter 32/8234: 85 8C STA $8C 32/8236: A0 00 LDY #$00 32/8238: 20 7B BF JSR $BF7B ; get vector y-component 32/823B: A6 8C LDX $8C 32/823D: 9D 00 79 STA $7900,X ; x position 32/8240: BD E3 7B LDA $7BE3,X ; rng table 32/8243: 9D 80 79 STA $7980,X ; oscillation angle 32/8246: A9 04 LDA #$04 32/8248: 20 B1 BF JSR $BFB1 ; add to vector angle 32/824B: E6 8C INC $8C ; next sprite 32/824D: A5 8C LDA $8C 32/824F: C9 40 CMP #$40 32/8251: D0 E3 BNE $8236 32/8253: A2 00 LDX #$00 32/8255: A9 02 LDA #$02 ; amplitude 2 for last 16 sprites 32/8257: 9D 70 79 STA $7970,X 32/825A: E8 INX 32/825B: E0 10 CPX #$10 32/825D: D0 F8 BNE $8257 32/825F: A9 32 LDA #$32 ; amplitude 50 for all other sprites 32/8261: 85 7E STA $7E 32/8263: A2 00 LDX #$00 32/8265: A5 7E LDA $7E 32/8267: 9D 40 79 STA $7940,X 32/826A: C6 7E DEC $7E 32/826C: E8 INX 32/826D: E0 30 CPX #$30 32/826F: D0 F4 BNE $8265 32/8271: 60 RTS ; [ summon animation $13: cyclone (leviathan) ] ; "きょだいなたつまきをおこした" / "Tempest" 32/8272: 20 AC 8A JSR $8AAC ; wait 60 frames 32/8275: 20 36 8E JSR $8E36 ; summon exit animation 32/8278: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/827B: A9 FF LDA #$FF 32/827D: 20 40 A4 JSR $A440 ; load animation palette 32/8280: A9 0E LDA #$0E 32/8282: 20 1E BF JSR $BF1E ; load animation graphics 32/8285: 20 28 82 JSR $8228 ; init cyclone sprites 32/8288: A9 FC LDA #$FC ; frame counter / x offset 32/828A: 85 B6 STA $B6 32/828C: A9 00 LDA #$00 ; cycle through starting point in tables 32/828E: 85 88 STA $88 32/8290: E6 C9 INC $C9 ; queue sound effect ; start of frame loop 32/8292: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/8295: 20 E4 8C JSR $8CE4 ; clear oam data 32/8298: A9 00 LDA #$00 32/829A: 85 C8 STA $C8 ; clear sprite data pointer 32/829C: A5 88 LDA $88 32/829E: 85 91 STA $91 32/82A0: A0 00 LDY #$00 32/82A2: A9 20 LDA #$20 ; y position 32/82A4: 85 90 STA $90 ; start of sprite loop 32/82A6: A5 B6 LDA $B6 32/82A8: 85 8D STA $8D ; set x position 32/82AA: A5 90 LDA $90 32/82AC: 85 8F STA $8F ; set y position 32/82AE: E6 90 INC $90 ; increment y position by 2 32/82B0: E6 90 INC $90 32/82B2: A9 00 LDA #$00 32/82B4: 85 8E STA $8E 32/82B6: B9 40 79 LDA $7940,Y ; oscillation amplitude 32/82B9: 8D 4E 7E STA $7E4E 32/82BC: A5 91 LDA $91 32/82BE: 29 3F AND #$3F 32/82C0: AA TAX 32/82C1: BD 00 79 LDA $7900,X ; x position 32/82C4: 85 8C STA $8C 32/82C6: BD 80 79 LDA $7980,X ; angle for sine function 32/82C9: 48 PHA 32/82CA: 18 CLC 32/82CB: 69 10 ADC #$10 ; 16 frames to do a full cycle 32/82CD: 9D 80 79 STA $7980,X 32/82D0: 68 PLA 32/82D1: AA TAX 32/82D2: 20 C6 BF JSR $BFC6 ; $7E4E * sin(X) 32/82D5: 18 CLC 32/82D6: 65 8C ADC $8C ; add x-offset 32/82D8: 85 8C STA $8C 32/82DA: E6 91 INC $91 32/82DC: 20 19 B5 JSR $B519 ; draw single animation sprite 32/82DF: C8 INY 32/82E0: C0 40 CPY #$40 ; use all 64 sprites 32/82E2: D0 C2 BNE $82A6 32/82E4: E6 88 INC $88 32/82E6: A5 B6 LDA $B6 32/82E8: 38 SEC 32/82E9: E9 04 SBC #$04 ; 63 frames (move 4 pixels/frame) 32/82EB: 85 B6 STA $B6 32/82ED: D0 A3 BNE $8292 32/82EF: 4C 88 88 JMP $8888 ; clear oam data and wait for vblank ; [ summon animation $0D: stomp (titan) ] ; "ガンガンにけりをいれた" / "Kick" 32/82F2: A9 EC LDA #$EC 32/82F4: 20 40 A4 JSR $A440 ; load animation palette 32/82F7: A9 90 LDA #$90 32/82F9: A2 B3 LDX #$B3 32/82FB: 4C 07 83 JMP $8307 ; [ summon animation $0C: clobber (titan) ] ; "ボコボコになぐった" / "Punch" 32/82FE: A9 EC LDA #$EC 32/8300: 20 40 A4 JSR $A440 ; load animation palette 32/8303: A9 00 LDA #$00 32/8305: A2 B3 LDX #$B3 32/8307: 20 A4 87 JSR $87A4 32/830A: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/830D: A5 B8 LDA $B8 32/830F: 0A ASL 32/8310: AA TAX 32/8311: BD D7 7D LDA $7DD7,X ; center x position - 24 32/8314: 38 SEC 32/8315: E9 18 SBC #$18 32/8317: 85 8C STA $8C 32/8319: BD D8 7D LDA $7DD8,X ; center y position - 24 32/831C: 38 SEC 32/831D: E9 18 SBC #$18 32/831F: 85 8D STA $8D 32/8321: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8324: E6 C9 INC $C9 32/8326: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8329: A5 B6 LDA $B6 32/832B: 29 03 AND #$03 32/832D: D0 12 BNE $8341 32/832F: A2 00 LDX #$00 32/8331: A9 18 LDA #$18 32/8333: 20 46 A4 JSR $A446 32/8336: 85 8E STA $8E 32/8338: A2 00 LDX #$00 32/833A: A9 18 LDA #$18 32/833C: 20 46 A4 JSR $A446 32/833F: 85 8F STA $8F 32/8341: A9 DC LDA #$DC 32/8343: 85 C8 STA $C8 32/8345: A5 8D LDA $8D 32/8347: 18 CLC 32/8348: 65 8F ADC $8F 32/834A: 85 81 STA $81 32/834C: A5 8C LDA $8C 32/834E: 18 CLC 32/834F: 65 8E ADC $8E 32/8351: 85 80 STA $80 32/8353: A9 00 LDA #$00 32/8355: 85 82 STA $82 32/8357: A9 AD LDA #$AD ; 32/90AD 32/8359: 85 7E STA $7E 32/835B: A9 90 LDA #$90 32/835D: 85 7F STA $7F 32/835F: 20 B7 85 JSR $85B7 ; draw summon animation sprites 32/8362: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8365: C9 40 CMP #$40 32/8367: D0 BD BNE $8326 32/8369: A2 DC LDX #$DC 32/836B: A9 F0 LDA #$F0 32/836D: 9D 00 02 STA $0200,X 32/8370: E8 INX 32/8371: D0 FA BNE $836D 32/8373: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ summon animation $16: rend (bahamut) ] ; "まっぷたつにきりさいた!" / "Rend" 32/8376: A9 16 LDA #$16 ; red 32/8378: 20 7F 87 JSR $877F ; flash screen 32/837B: A9 A0 LDA #$A0 32/837D: A2 B1 LDX #$B1 32/837F: 20 A4 87 JSR $87A4 32/8382: A9 7A LDA #$7A 32/8384: 20 40 A4 JSR $A440 ; load animation palette 32/8387: 20 59 A0 JSR $A059 ; reset animation frame counter 32/838A: E6 C9 INC $C9 ; queue sound effect ; start of frame loop 32/838C: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/838F: A5 B8 LDA $B8 ; target id 32/8391: AA TAX 32/8392: 0A ASL 32/8393: A8 TAY 32/8394: B9 D7 7D LDA $7DD7,Y ; center x position 32/8397: 38 SEC 32/8398: E9 04 SBC #$04 32/839A: 85 8C STA $8C 32/839C: B9 F8 7D LDA $7DF8,Y ; top y position 32/839F: 18 CLC 32/83A0: 69 07 ADC #$07 32/83A2: 85 8D STA $8D 32/83A4: BD A7 7D LDA $7DA7,X ; monster type 32/83A7: 29 03 AND #$03 32/83A9: 0A ASL 32/83AA: A8 TAY 32/83AB: B9 73 7D LDA $7D73,Y ; get monster graphics size 32/83AE: 29 E0 AND #$E0 32/83B0: C9 80 CMP #$80 32/83B2: F0 09 BEQ $83BD 32/83B4: C9 C0 CMP #$C0 32/83B6: F0 05 BEQ $83BD 32/83B8: A9 06 LDA #$06 ; 6 sprites (for short monsters) 32/83BA: 4C BF 83 JMP $83BF 32/83BD: A9 0C LDA #$0C ; 12 sprites (for tall monsters) 32/83BF: 85 90 STA $90 32/83C1: A5 B6 LDA $B6 32/83C3: 4A LSR 32/83C4: 29 01 AND #$01 ; change tile index every 2 frames 32/83C6: 85 7E STA $7E 32/83C8: A9 00 LDA #$00 ; y-offset 32/83CA: 85 7F STA $7F 32/83CC: A2 D0 LDX #$D0 ; start at sprite 52 ; start of sprite loop 32/83CE: A5 8D LDA $8D 32/83D0: 18 CLC 32/83D1: 65 7F ADC $7F 32/83D3: 9D 00 02 STA $0200,X 32/83D6: A5 7F LDA $7F 32/83D8: 18 CLC 32/83D9: 69 08 ADC #$08 ; move down 8 for next sprite 32/83DB: 85 7F STA $7F 32/83DD: E8 INX 32/83DE: A5 7E LDA $7E 32/83E0: 29 01 AND #$01 32/83E2: 18 CLC 32/83E3: 69 01 ADC #$01 32/83E5: 9D 00 02 STA $0200,X 32/83E8: E6 7E INC $7E 32/83EA: E8 INX 32/83EB: A9 03 LDA #$03 32/83ED: 9D 00 02 STA $0200,X 32/83F0: E8 INX 32/83F1: A5 8C LDA $8C 32/83F3: 9D 00 02 STA $0200,X 32/83F6: 20 9B B1 JSR $B19B ; flip sprite if back attack 32/83F9: E8 INX 32/83FA: C6 90 DEC $90 32/83FC: D0 D0 BNE $83CE 32/83FE: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8401: C9 40 CMP #$40 32/8403: D0 87 BNE $838C 32/8405: A9 F0 LDA #$F0 32/8407: A2 D0 LDX #$D0 32/8409: 9D 00 02 STA $0200,X 32/840C: E8 INX 32/840D: D0 FA BNE $8409 32/840F: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) 32/8412: 3E 3E 7F 7F 7E 7E FE FE ; [ summon animation $17: mega flare (bahamut) ] ; "メガフレア!" / "Megaflare" 32/841A: 20 AC 8A JSR $8AAC ; wait 60 frames 32/841D: A9 00 LDA #$00 32/841F: 8D D5 7E STA $7ED5 32/8422: 20 81 8B JSR $8B81 ; save color palettes 32/8425: A9 30 LDA #$30 32/8427: 8D 07 7D STA $7D07 ; backdrop color 32/842A: 20 59 A0 JSR $A059 ; reset animation frame counter 32/842D: E6 C9 INC $C9 32/842F: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8432: A5 B6 LDA $B6 32/8434: 29 0E AND #$0E 32/8436: 4A LSR 32/8437: A8 TAY 32/8438: B9 12 84 LDA $8412,Y 32/843B: 85 09 STA $09 32/843D: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8440: 29 10 AND #$10 32/8442: F0 EB BEQ $842F 32/8444: A9 0F LDA #$0F 32/8446: 8D 07 7D STA $7D07 ; backdrop color 32/8449: A9 1E LDA #$1E 32/844B: 85 09 STA $09 32/844D: A9 C0 LDA #$C0 32/844F: A2 B1 LDX #$B1 32/8451: 20 A4 87 JSR $87A4 32/8454: A9 BD LDA #$BD 32/8456: 20 40 A4 JSR $A440 ; load animation palette 32/8459: 20 F8 85 JSR $85F8 32/845C: 20 00 86 JSR $8600 32/845F: A9 02 LDA #$02 32/8461: 85 90 STA $90 32/8463: A9 00 LDA #$00 32/8465: 85 91 STA $91 32/8467: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/846A: 20 4D 85 JSR $854D 32/846D: A5 8F LDA $8F 32/846F: 48 PHA 32/8470: A9 16 LDA #$16 32/8472: 85 8F STA $8F 32/8474: A2 00 LDX #$00 32/8476: 20 AD 87 JSR $87AD 32/8479: A2 04 LDX #$04 32/847B: 20 AD 87 JSR $87AD 32/847E: 68 PLA 32/847F: 85 8F STA $8F 32/8481: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8484: C9 40 CMP #$40 32/8486: D0 DF BNE $8467 32/8488: 20 E4 8C JSR $8CE4 ; clear oam data 32/848B: 4C 47 85 JMP $8547 ; restore color palettes ; [ ] 32/848E: A9 4D LDA #$4D 32/8490: 85 7E STA $7E 32/8492: A2 00 LDX #$00 32/8494: BD D7 91 LDA $91D7,X 32/8497: 18 CLC 32/8498: 69 60 ADC #$60 32/849A: 65 8D ADC $8D 32/849C: 9D 00 02 STA $0200,X 32/849F: E8 INX 32/84A0: BD D7 91 LDA $91D7,X 32/84A3: 18 CLC 32/84A4: 65 7E ADC $7E 32/84A6: 9D 00 02 STA $0200,X 32/84A9: E8 INX 32/84AA: E6 7E INC $7E 32/84AC: BD D7 91 LDA $91D7,X 32/84AF: 09 03 ORA #$03 32/84B1: 9D 00 02 STA $0200,X 32/84B4: E8 INX 32/84B5: BD D7 91 LDA $91D7,X 32/84B8: 18 CLC 32/84B9: 69 B0 ADC #$B0 32/84BB: 65 8C ADC $8C 32/84BD: 9D 00 02 STA $0200,X 32/84C0: 20 9B B1 JSR $B19B ; flip sprite if back attack 32/84C3: E8 INX 32/84C4: E0 10 CPX #$10 32/84C6: D0 CC BNE $8494 32/84C8: 60 RTS ; [ animation function $19: cannon blast ] 32/84C9: 20 81 8B JSR $8B81 ; save color palettes 32/84CC: A9 D9 LDA #$D9 32/84CE: 20 40 A4 JSR $A440 ; load animation palette 32/84D1: A9 0F LDA #$0F 32/84D3: 20 1E BF JSR $BF1E ; load animation graphics 32/84D6: 20 5F BF JSR $BF5F ; reset vector angles 32/84D9: A9 60 LDA #$60 32/84DB: 20 5C B3 JSR $B35C ; set all vector distances 32/84DE: A0 00 LDY #$00 32/84E0: 84 8C STY $8C 32/84E2: A9 C0 LDA #$C0 32/84E4: 20 B1 BF JSR $BFB1 ; add to vector angle 32/84E7: 20 59 A0 JSR $A059 ; reset animation frame counter 32/84EA: A9 80 LDA #$80 32/84EC: 8D 49 7F STA $7F49 ; start of projectile frame loop 32/84EF: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/84F2: 20 5E A0 JSR $A05E ; reset animation sprites 32/84F5: A0 00 LDY #$00 32/84F7: C6 8C DEC $8C 32/84F9: C6 8C DEC $8C 32/84FB: C6 8C DEC $8C 32/84FD: 20 7B BF JSR $BF7B ; get vector y-component 32/8500: 85 8D STA $8D 32/8502: A9 FE LDA #$FE 32/8504: 20 B1 BF JSR $BFB1 ; add to vector angle 32/8507: 20 8E 84 JSR $848E 32/850A: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/850D: C9 20 CMP #$20 32/850F: D0 DE BNE $84EF 32/8511: 20 5E A0 JSR $A05E ; reset animation sprites 32/8514: A9 BD LDA #$BD 32/8516: 20 40 A4 JSR $A440 ; load animation palette 32/8519: 20 F8 85 JSR $85F8 32/851C: A9 02 LDA #$02 32/851E: 8D D5 7E STA $7ED5 32/8521: 85 90 STA $90 ; start of explosion frame loop 32/8523: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8526: 20 4D 85 JSR $854D 32/8529: A5 8F LDA $8F 32/852B: 48 PHA 32/852C: A9 16 LDA #$16 32/852E: 85 8F STA $8F 32/8530: A2 00 LDX #$00 32/8532: 20 AD 87 JSR $87AD 32/8535: A2 04 LDX #$04 32/8537: 20 AD 87 JSR $87AD 32/853A: 68 PLA 32/853B: 85 8F STA $8F 32/853D: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8540: C9 60 CMP #$60 32/8542: D0 DF BNE $8523 32/8544: 20 5E A0 JSR $A05E ; reset animation sprites ; fallthrough ; [ restore color palettes ] 32/8547: 20 8D 8B JSR $8B8D ; restore color palettes 32/854A: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ ] 32/854D: AD D5 7E LDA $7ED5 32/8550: D0 0A BNE $855C 32/8552: 20 E4 8C JSR $8CE4 ; clear oam data 32/8555: A9 00 LDA #$00 32/8557: 85 C8 STA $C8 32/8559: 4C 5F 85 JMP $855F 32/855C: 20 5E A0 JSR $A05E ; reset animation sprites 32/855F: A5 B6 LDA $B6 32/8561: 29 01 AND #$01 32/8563: D0 1A BNE $857F 32/8565: E6 90 INC $90 32/8567: E6 91 INC $91 32/8569: A5 90 LDA $90 32/856B: 29 03 AND #$03 32/856D: 85 90 STA $90 32/856F: D0 03 BNE $8574 32/8571: 20 F8 85 JSR $85F8 32/8574: A5 91 LDA $91 32/8576: 29 03 AND #$03 32/8578: 85 91 STA $91 32/857A: D0 03 BNE $857F 32/857C: 20 00 86 JSR $8600 32/857F: A5 90 LDA $90 32/8581: 0A ASL 32/8582: A8 TAY 32/8583: B9 8F 8F LDA $8F8F,Y 32/8586: 85 7E STA $7E 32/8588: B9 90 8F LDA $8F90,Y 32/858B: 85 7F STA $7F 32/858D: A5 8C LDA $8C 32/858F: 85 80 STA $80 32/8591: A5 8D LDA $8D 32/8593: 85 81 STA $81 32/8595: 20 EC 85 JSR $85EC ; draw explosion sprites 32/8598: AD D5 7E LDA $7ED5 32/859B: D0 19 BNE $85B6 32/859D: A5 91 LDA $91 32/859F: 0A ASL 32/85A0: A8 TAY 32/85A1: B9 8F 8F LDA $8F8F,Y 32/85A4: 85 7E STA $7E 32/85A6: B9 90 8F LDA $8F90,Y 32/85A9: 85 7F STA $7F 32/85AB: A5 8E LDA $8E 32/85AD: 85 80 STA $80 32/85AF: A5 8F LDA $8F 32/85B1: 85 81 STA $81 32/85B3: 20 EC 85 JSR $85EC ; draw explosion sprites 32/85B6: 60 RTS ; [ draw summon animation sprites ] ; +$7E: pointer to sprite data ; $80: x-offset ; $81: y-offset ; $82: tile offset 32/85B7: A6 C8 LDX $C8 32/85B9: A0 00 LDY #$00 32/85BB: B1 7E LDA ($7E),Y 32/85BD: C9 FF CMP #$FF 32/85BF: F0 28 BEQ $85E9 ; branch if end of sprites 32/85C1: 18 CLC 32/85C2: 65 81 ADC $81 32/85C4: 9D 00 02 STA $0200,X ; y position 32/85C7: E8 INX 32/85C8: C8 INY 32/85C9: B1 7E LDA ($7E),Y 32/85CB: 18 CLC 32/85CC: 65 82 ADC $82 32/85CE: 9D 00 02 STA $0200,X ; tile index 32/85D1: E8 INX 32/85D2: C8 INY 32/85D3: B1 7E LDA ($7E),Y 32/85D5: 9D 00 02 STA $0200,X ; flags 32/85D8: E8 INX 32/85D9: C8 INY 32/85DA: B1 7E LDA ($7E),Y 32/85DC: 18 CLC 32/85DD: 65 80 ADC $80 32/85DF: 9D 00 02 STA $0200,X ; x position 32/85E2: 20 9B B1 JSR $B19B ; flip sprite if back attack 32/85E5: C8 INY 32/85E6: E8 INX 32/85E7: D0 D2 BNE $85BB ; don't go past sprite 63 32/85E9: 86 C8 STX $C8 32/85EB: 60 RTS ; [ draw explosion sprites ] ; used for cannon blast and mega flare 32/85EC: AD D5 7E LDA $7ED5 ; 0 for mega flare, 2 for cannon blast 32/85EF: F0 02 BEQ $85F3 32/85F1: A9 38 LDA #$38 32/85F3: 85 82 STA $82 ; tile offset 32/85F5: 4C B7 85 JMP $85B7 ; draw summon animation sprites ; [ ] 32/85F8: 20 08 86 JSR $8608 32/85FB: 86 8C STX $8C 32/85FD: 85 8D STA $8D 32/85FF: 60 RTS 32/8600: 20 08 86 JSR $8608 32/8603: 86 8E STX $8E 32/8605: 85 8F STA $8F 32/8607: 60 RTS 32/8608: A2 10 LDX #$10 32/860A: A9 80 LDA #$80 32/860C: 20 46 A4 JSR $A446 32/860F: 85 7E STA $7E 32/8611: A2 2F LDX #$2F 32/8613: A9 6F LDA #$6F 32/8615: 20 46 A4 JSR $A446 32/8618: A6 7E LDX $7E 32/861A: 60 RTS ; [ summon animation $15: aura (bahamut) ] ; "オーラ!こうげきりょくがアップ" / "Aura" 32/861B: A9 31 LDA #$31 ; light blue 32/861D: 4C 7F 87 JMP $877F ; flash screen ; [ update shake screen ] ; for tidal wave and earthquake 32/8620: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8623: 20 4F A4 JSR $A44F 32/8626: 29 03 AND #$03 ; ppu x scroll: (0..3) 32/8628: 85 0C STA $0C 32/862A: A2 0A LDX #$0A ; wait a few cycles 32/862C: CA DEX 32/862D: D0 FD BNE $862C 32/862F: 20 09 F8 JSR $F809 ; wait for last battle bg scanline 32/8632: 4C 0A 81 JMP $810A ; update ppu scroll registers ; [ summon animation $14: tidal wave (leviathan) ] ; "つなみをおこした" / "Tsunami" 32/8635: A9 60 LDA #$60 32/8637: A2 B1 LDX #$B1 32/8639: 20 A4 87 JSR $87A4 32/863C: 20 AC 8A JSR $8AAC ; wait 60 frames 32/863F: 20 36 8E JSR $8E36 ; summon exit animation 32/8642: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/8645: 20 E4 8C JSR $8CE4 ; clear oam data 32/8648: A9 BC LDA #$BC 32/864A: 20 40 A4 JSR $A440 ; load animation palette 32/864D: 20 6A 86 JSR $866A 32/8650: A9 FC LDA #$FC 32/8652: 85 B6 STA $B6 32/8654: E6 C9 INC $C9 32/8656: 20 20 86 JSR $8620 32/8659: 20 01 87 JSR $8701 32/865C: A5 B6 LDA $B6 32/865E: 38 SEC 32/865F: E9 04 SBC #$04 32/8661: 85 B6 STA $B6 32/8663: D0 F1 BNE $8656 32/8665: A9 00 LDA #$00 32/8667: 85 0C STA $0C 32/8669: 60 RTS ; [ ] 32/866A: A9 34 LDA #$34 32/866C: 85 80 STA $80 32/866E: A2 00 LDX #$00 32/8670: BD E3 7B LDA $7BE3,X ; rng table 32/8673: 29 0F AND #$0F 32/8675: E9 0C SBC #$0C 32/8677: 9D 00 79 STA $7900,X 32/867A: E8 INX 32/867B: A5 80 LDA $80 32/867D: 9D 00 79 STA $7900,X 32/8680: 18 CLC 32/8681: 69 0C ADC #$0C 32/8683: 85 80 STA $80 32/8685: E8 INX 32/8686: E0 0E CPX #$0E 32/8688: D0 E6 BNE $8670 32/868A: A9 28 LDA #$28 32/868C: 85 80 STA $80 32/868E: BD E3 7B LDA $7BE3,X ; rng table 32/8691: 29 0F AND #$0F 32/8693: E9 18 SBC #$18 32/8695: 9D 00 79 STA $7900,X 32/8698: E8 INX 32/8699: A5 80 LDA $80 32/869B: 9D 00 79 STA $7900,X 32/869E: 18 CLC 32/869F: 69 08 ADC #$08 32/86A1: 85 80 STA $80 32/86A3: E8 INX 32/86A4: E0 2A CPX #$2A 32/86A6: D0 E6 BNE $868E 32/86A8: A2 00 LDX #$00 32/86AA: BD E3 7B LDA $7BE3,X ; rng table 32/86AD: 9D 80 79 STA $7980,X 32/86B0: A9 00 LDA #$00 32/86B2: 9D 95 79 STA $7995,X 32/86B5: E8 INX 32/86B6: E0 15 CPX #$15 32/86B8: D0 F0 BNE $86AA 32/86BA: 60 RTS 32/86BB: 8A TXA 32/86BC: 48 PHA 32/86BD: A9 00 LDA #$00 32/86BF: 85 82 STA $82 32/86C1: A6 C8 LDX $C8 32/86C3: A5 80 LDA $80 32/86C5: 9D 00 02 STA $0200,X 32/86C8: E8 INX 32/86C9: A5 82 LDA $82 32/86CB: 18 CLC 32/86CC: 69 01 ADC #$01 32/86CE: 9D 00 02 STA $0200,X 32/86D1: E8 INX 32/86D2: A9 03 LDA #$03 32/86D4: 9D 00 02 STA $0200,X 32/86D7: E8 INX 32/86D8: A5 7E LDA $7E 32/86DA: 48 PHA 32/86DB: 9D 00 02 STA $0200,X 32/86DE: 38 SEC 32/86DF: E9 08 SBC #$08 32/86E1: C5 B6 CMP $B6 32/86E3: 90 05 BCC $86EA 32/86E5: A9 FF LDA #$FF 32/86E7: 9D FD 01 STA $01FD,X 32/86EA: 20 9B B1 JSR $B19B ; flip sprite if back attack 32/86ED: 68 PLA 32/86EE: 18 CLC 32/86EF: 69 08 ADC #$08 32/86F1: 85 7E STA $7E 32/86F3: E8 INX 32/86F4: E6 82 INC $82 32/86F6: A5 82 LDA $82 32/86F8: C9 03 CMP #$03 32/86FA: D0 C7 BNE $86C3 32/86FC: 86 C8 STX $C8 32/86FE: 68 PLA 32/86FF: AA TAX 32/8700: 60 RTS 32/8701: 20 E4 8C JSR $8CE4 ; clear oam data 32/8704: A9 00 LDA #$00 32/8706: 85 C8 STA $C8 32/8708: A2 00 LDX #$00 32/870A: A0 00 LDY #$00 32/870C: DE 80 79 DEC $7980,X 32/870F: BD 80 79 LDA $7980,X 32/8712: 29 07 AND #$07 32/8714: D0 09 BNE $871F 32/8716: B9 00 79 LDA $7900,Y 32/8719: 38 SEC 32/871A: E9 08 SBC #$08 32/871C: 99 00 79 STA $7900,Y 32/871F: B9 00 79 LDA $7900,Y 32/8722: 38 SEC 32/8723: E9 04 SBC #$04 32/8725: 99 00 79 STA $7900,Y 32/8728: 85 7E STA $7E 32/872A: C9 80 CMP #$80 32/872C: 90 09 BCC $8737 32/872E: C9 E8 CMP #$E8 32/8730: B0 05 BCS $8737 32/8732: A9 01 LDA #$01 32/8734: 9D 95 79 STA $7995,X 32/8737: C8 INY 32/8738: B9 00 79 LDA $7900,Y 32/873B: 85 80 STA $80 32/873D: C8 INY 32/873E: BD 95 79 LDA $7995,X 32/8741: F0 03 BEQ $8746 32/8743: 20 BB 86 JSR $86BB 32/8746: E8 INX 32/8747: E0 15 CPX #$15 32/8749: D0 C1 BNE $870C 32/874B: 60 RTS ; [ summon animation $11: zantetsuken (odin) ] ; "ざんてつけん!てきはぜんめつした!" / "Atom Edge" ; this animation bypasses the monster death animation so it has ; to update monsters granting experience manually 32/874C: AD 93 7E LDA $7E93 32/874F: D0 2B BNE $877C 32/8751: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/8754: 20 BC 8B JSR $8BBC ; zantetsuken animation 32/8757: AD 99 7E LDA $7E99 ; targets 32/875A: 85 7E STA $7E 32/875C: A0 00 LDY #$00 32/875E: 06 7E ASL $7E 32/8760: 90 0B BCC $876D 32/8762: B9 A7 7D LDA $7DA7,Y 32/8765: C9 FF CMP #$FF 32/8767: F0 04 BEQ $876D ; branch if monster is present 32/8769: AA TAX 32/876A: FE D3 7D INC $7DD3,X ; dead monster grants experience 32/876D: C8 INY 32/876E: C0 08 CPY #$08 32/8770: D0 EC BNE $875E 32/8772: A2 08 LDX #$08 32/8774: A9 FF LDA #$FF 32/8776: 9D A6 7D STA $7DA6,X ; clear all monster types 32/8779: CA DEX 32/877A: D0 F8 BNE $8774 32/877C: 60 RTS ; [ summon animation $0F: protective light (odin) ] ; "ぜんいんにバリア!" / "Barrier" 32/877D: A9 2B LDA #$2B ; blue-green ; fallthrough ; [ flash screen ] ; A: flash color 32/877F: A2 20 LDX #$20 ; lasts 32 frames (8 flashes) 32/8781: 85 7E STA $7E 32/8783: 86 B6 STX $B6 32/8785: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8788: A5 B6 LDA $B6 32/878A: 29 03 AND #$03 ; flash once every 4 frames 32/878C: D0 08 BNE $8796 32/878E: A5 7E LDA $7E 32/8790: 8D 07 7D STA $7D07 ; backdrop color 32/8793: 4C 9B 87 JMP $879B 32/8796: A9 0F LDA #$0F 32/8798: 8D 07 7D STA $7D07 ; backdrop color 32/879B: C6 B6 DEC $B6 32/879D: D0 E6 BNE $8785 32/879F: 60 RTS ; [ ] 32/87A0: A9 40 LDA #$40 32/87A2: A2 B0 LDX #$B0 ; fallthrough ; [ ] 32/87A4: 85 7E STA $7E 32/87A6: 86 7F STX $7F 32/87A8: A9 11 LDA #$11 32/87AA: 4C 24 BF JMP $BF24 ; load animation graphics (w/ offset) ; [ ] 32/87AD: A5 7E LDA $7E 32/87AF: 48 PHA 32/87B0: A5 80 LDA $80 32/87B2: 48 PHA 32/87B3: A5 8F LDA $8F 32/87B5: 29 0F AND #$0F 32/87B7: 85 7E STA $7E 32/87B9: A5 B6 LDA $B6 32/87BB: 29 03 AND #$03 32/87BD: 0A ASL 32/87BE: 0A ASL 32/87BF: 0A ASL 32/87C0: 0A ASL 32/87C1: 85 80 STA $80 32/87C3: A5 7E LDA $7E 32/87C5: 05 80 ORA $80 32/87C7: 9D F8 7C STA $7CF8,X 32/87CA: A5 80 LDA $80 32/87CC: 18 CLC 32/87CD: 69 10 ADC #$10 32/87CF: 29 30 AND #$30 32/87D1: 05 7E ORA $7E 32/87D3: 9D F9 7C STA $7CF9,X 32/87D6: A5 80 LDA $80 32/87D8: 18 CLC 32/87D9: 69 20 ADC #$20 32/87DB: 29 30 AND #$30 32/87DD: 05 7E ORA $7E 32/87DF: 9D FA 7C STA $7CFA,X 32/87E2: 68 PLA 32/87E3: 85 80 STA $80 32/87E5: 68 PLA 32/87E6: 85 7E STA $7E 32/87E8: 60 RTS 32/87E9: 16 27 30 ; [ summon animation $0B: inferno (ifrit) ] ; "じごくのかえん" / "Hellfire" 32/87EC: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/87EF: 20 A0 87 JSR $87A0 32/87F2: A9 00 LDA #$00 32/87F4: 85 7E STA $7E 32/87F6: 85 7F STA $7F 32/87F8: A9 01 LDA #$01 32/87FA: 8D 95 7E STA $7E95 32/87FD: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8800: E6 7E INC $7E 32/8802: 20 76 8E JSR $8E76 ; draw summon sprites 32/8805: A2 10 LDX #$10 32/8807: 20 AD 87 JSR $87AD 32/880A: A2 14 LDX #$14 32/880C: 20 AD 87 JSR $87AD 32/880F: A2 18 LDX #$18 32/8811: 20 AD 87 JSR $87AD 32/8814: A5 7E LDA $7E 32/8816: 4A LSR 32/8817: 4A LSR 32/8818: 4A LSR 32/8819: A8 TAY 32/881A: B9 E9 87 LDA $87E9,Y 32/881D: 85 8F STA $8F 32/881F: A5 7E LDA $7E 32/8821: C9 18 CMP #$18 32/8823: D0 D8 BNE $87FD 32/8825: A9 1A LDA #$1A 32/8827: 85 B6 STA $B6 32/8829: 20 76 8E JSR $8E76 ; draw summon sprites 32/882C: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/882F: A5 7E LDA $7E 32/8831: 38 SEC 32/8832: E9 08 SBC #$08 32/8834: 85 7E STA $7E 32/8836: 20 76 8E JSR $8E76 ; draw summon sprites 32/8839: A5 B6 LDA $B6 32/883B: 29 03 AND #$03 32/883D: D0 05 BNE $8844 32/883F: A9 16 LDA #$16 32/8841: 4C 46 88 JMP $8846 32/8844: A9 0F LDA #$0F 32/8846: 8D 07 7D STA $7D07 ; backdrop color 32/8849: C6 B6 DEC $B6 32/884B: D0 DF BNE $882C 32/884D: 20 E4 8C JSR $8CE4 ; clear oam data 32/8850: A9 BD LDA #$BD 32/8852: 20 40 A4 JSR $A440 ; load animation palette 32/8855: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8858: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/885B: 20 E4 8C JSR $8CE4 ; clear oam data 32/885E: A9 00 LDA #$00 32/8860: 85 C8 STA $C8 32/8862: A5 B6 LDA $B6 32/8864: 4A LSR 32/8865: 4A LSR 32/8866: 4A LSR 32/8867: 4A LSR 32/8868: 49 FF EOR #$FF 32/886A: 29 03 AND #$03 32/886C: 20 9B 88 JSR $889B ; get monsters in row 32/886F: A5 8C LDA $8C 32/8871: C9 FF CMP #$FF 32/8873: F0 03 BEQ $8878 32/8875: 20 8E 88 JSR $888E 32/8878: A5 8D LDA $8D 32/887A: C9 FF CMP #$FF 32/887C: F0 03 BEQ $8881 32/887E: 20 8E 88 JSR $888E 32/8881: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8884: C9 40 CMP #$40 32/8886: D0 D0 BNE $8858 ; fallthrough ; [ clear oam data and wait for vblank ] 32/8888: 20 E4 8C JSR $8CE4 ; clear oam data 32/888B: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ ] 32/888E: 48 PHA 32/888F: A5 B6 LDA $B6 32/8891: 29 0F AND #$0F 32/8893: D0 02 BNE $8897 32/8895: E6 C9 INC $C9 ; queue sound effect every 16 frames 32/8897: 68 PLA 32/8898: 4C 49 89 JMP $8949 ; [ get monsters in row ] ; A: row (0 to 3) ; see 34/86D2 32/889B: 85 80 STA $80 32/889D: A9 FF LDA #$FF 32/889F: 85 8C STA $8C 32/88A1: 85 8D STA $8D 32/88A3: A0 00 LDY #$00 32/88A5: A2 00 LDX #$00 32/88A7: BD 26 7E LDA $7E26,X ; monster row 32/88AA: C5 80 CMP $80 32/88AC: D0 03 BNE $88B1 32/88AE: 96 8C STX $8C,Y 32/88B0: C8 INY 32/88B1: E8 INX 32/88B2: E0 08 CPX #$08 32/88B4: D0 F1 BNE $88A7 32/88B6: 60 RTS ; [ summon animation $0A: hellfire (ifrit) ] ; "いかりのほのお" / "Flames of Fury" 32/88B7: 20 A0 87 JSR $87A0 32/88BA: A9 00 LDA #$00 32/88BC: 85 7E STA $7E 32/88BE: 85 7F STA $7F 32/88C0: A9 01 LDA #$01 32/88C2: 8D 95 7E STA $7E95 32/88C5: A9 0F LDA #$0F 32/88C7: 85 B6 STA $B6 32/88C9: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/88CC: A5 7E LDA $7E 32/88CE: 38 SEC 32/88CF: E9 01 SBC #$01 32/88D1: 85 7E STA $7E 32/88D3: A5 7F LDA $7F 32/88D5: 38 SEC 32/88D6: E9 08 SBC #$08 32/88D8: 85 7F STA $7F 32/88DA: 20 76 8E JSR $8E76 ; draw summon sprites 32/88DD: C6 B6 DEC $B6 32/88DF: D0 E8 BNE $88C9 32/88E1: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/88E4: A9 BD LDA #$BD 32/88E6: 20 40 A4 JSR $A440 ; load animation palette 32/88E9: 20 E4 8C JSR $8CE4 ; clear oam data 32/88EC: A5 B8 LDA $B8 32/88EE: 0A ASL 32/88EF: A8 TAY 32/88F0: B9 D7 7D LDA $7DD7,Y ; center x position 32/88F3: 85 84 STA $84 32/88F5: B9 D8 7D LDA $7DD8,Y ; center y position 32/88F8: 85 85 STA $85 32/88FA: 4A LSR 32/88FB: 4A LSR 32/88FC: 18 CLC 32/88FD: 65 84 ADC $84 32/88FF: 85 80 STA $80 32/8901: A9 00 LDA #$00 32/8903: 85 81 STA $81 32/8905: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/8908: A9 00 LDA #$00 32/890A: 85 C8 STA $C8 32/890C: 85 82 STA $82 32/890E: A9 97 LDA #$97 ; 32/8F97 32/8910: 85 7E STA $7E 32/8912: A9 8F LDA #$8F 32/8914: 85 7F STA $7F 32/8916: 20 B7 85 JSR $85B7 ; draw summon animation sprites 32/8919: C6 80 DEC $80 32/891B: C6 80 DEC $80 32/891D: A5 81 LDA $81 32/891F: 18 CLC 32/8920: 69 08 ADC #$08 32/8922: 85 81 STA $81 32/8924: C5 85 CMP $85 32/8926: 90 DD BCC $8905 32/8928: 20 59 A0 JSR $A059 ; reset animation frame counter 32/892B: E6 C9 INC $C9 32/892D: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/8930: 20 E4 8C JSR $8CE4 ; clear oam data 32/8933: A9 00 LDA #$00 32/8935: 85 C8 STA $C8 32/8937: A5 B8 LDA $B8 32/8939: 20 49 89 JSR $8949 32/893C: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/893F: C9 20 CMP #$20 32/8941: D0 EA BNE $892D 32/8943: 20 E4 8C JSR $8CE4 ; clear oam data 32/8946: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; [ ] 32/8949: A8 TAY 32/894A: 0A ASL 32/894B: AA TAX 32/894C: BD D7 7D LDA $7DD7,X ; center x position 32/894F: 38 SEC 32/8950: E9 10 SBC #$10 32/8952: 85 80 STA $80 32/8954: B9 07 7E LDA $7E07,Y ; bottom y position 32/8957: 38 SEC 32/8958: E9 27 SBC #$27 32/895A: 85 81 STA $81 32/895C: A5 B6 LDA $B6 32/895E: 29 02 AND #$02 32/8960: AA TAX 32/8961: BD 8B 8F LDA $8F8B,X 32/8964: 85 7E STA $7E 32/8966: BD 8C 8F LDA $8F8C,X 32/8969: 85 7F STA $7F 32/896B: A9 00 LDA #$00 32/896D: 85 82 STA $82 32/896F: 4C B7 85 JMP $85B7 ; draw summon animation sprites ; [ summon animation $09: healing light (ifrit) ] ; "かいふくまほう" / "Recovery" 32/8972: A9 31 LDA #$31 ; light blue 32/8974: 4C 7F 87 JMP $877F ; flash screen ; [ summon animation $07/$08: thunderstorm/judgment bolt (ramuh) ] ; "かみのいかづち" / "God's Thunder" ; "てんのいかり" / "Heaven's Rage" 32/8977: 20 81 8B JSR $8B81 ; save color palettes 32/897A: A9 29 LDA #$29 32/897C: A2 10 LDX #$10 32/897E: 20 81 87 JSR $8781 32/8981: 20 FB 8E JSR $8EFB ; copy attribute table to ppu 32/8984: A9 27 LDA #$27 32/8986: 85 8F STA $8F 32/8988: A9 00 LDA #$00 32/898A: 85 8E STA $8E 32/898C: 85 B6 STA $B6 32/898E: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8991: A2 08 LDX #$08 32/8993: 20 AD 87 JSR $87AD 32/8996: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8999: C9 08 CMP #$08 32/899B: D0 F1 BNE $898E 32/899D: A2 00 LDX #$00 32/899F: BD 00 02 LDA $0200,X 32/89A2: 9D A0 02 STA $02A0,X 32/89A5: E8 INX 32/89A6: E0 40 CPX #$40 32/89A8: D0 F5 BNE $899F 32/89AA: 20 5E A0 JSR $A05E ; reset animation sprites 32/89AD: 20 47 85 JSR $8547 ; restore color palettes 32/89B0: 20 34 8A JSR $8A34 ; restore attribute table 32/89B3: A9 2A LDA #$2A 32/89B5: D0 02 BNE $89B9 ; [ animation function $17: ] 32/89B7: A5 8C LDA $8C 32/89B9: 8D 88 7E STA $7E88 32/89BC: A9 07 LDA #$07 ; brak2 animation 32/89BE: 8D 9D 7E STA $7E9D 32/89C1: A9 00 LDA #$00 32/89C3: 8D B8 7E STA $7EB8 32/89C6: AD 99 7E LDA $7E99 32/89C9: 8D 9B 7E STA $7E9B 32/89CC: 8D 89 7E STA $7E89 32/89CF: 4C 43 B9 JMP $B943 ; [ summon animation $06: mind blast (ramuh) ] ; "マインドブラスト!" / "MindBlast" 32/89D2: E6 C9 INC $C9 32/89D4: 4C 6D 8B JMP $8B6D ; [ wait for vblank (hypnobeam) ] 32/89D7: 20 80 FB JSR $FB80 ; wait for nmi 32/89DA: 20 97 F8 JSR $F897 ; copy color palettes to ppu 32/89DD: A9 00 LDA #$00 32/89DF: 8D 06 20 STA $2006 ; clear ppu address 32/89E2: 8D 06 20 STA $2006 32/89E5: 4C CB F8 JMP $F8CB ; update ppu registers ; [ summon animation $12: demon eye (leviathan) ] ; "せきかにらみ!" / "Stony Glare" 32/89E8: AD 9B 7E LDA $7E9B 32/89EB: D0 01 BNE $89EE 32/89ED: 60 RTS 32/89EE: E6 C9 INC $C9 32/89F0: A9 31 LDA #$31 ; light blue 32/89F2: 20 7F 87 JSR $877F ; flash screen 32/89F5: 20 59 A0 JSR $A059 ; reset animation frame counter 32/89F8: 20 FB 8E JSR $8EFB ; copy attribute table to ppu 32/89FB: 4C B0 8A JMP $8AB0 ; wait 16 frames ; [ summon animation $10: slash (odin) ] ; "つるぎが てきをきりさいた!" / "Sword Cut" 32/89FE: E6 C9 INC $C9 32/8A00: A9 FF LDA #$FF 32/8A02: 4C 09 8A JMP $8A09 ; [ summon animation $04: icy stare (shiva) ] ; "つめたいしせんでこおりついた" / "Icy Glare" 32/8A05: E6 C9 INC $C9 32/8A07: A9 E8 LDA #$E8 32/8A09: 85 90 STA $90 32/8A0B: 20 81 8B JSR $8B81 ; save color palettes 32/8A0E: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8A11: 20 FB 8E JSR $8EFB ; copy attribute table to ppu 32/8A14: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8A17: 20 24 8A JSR $8A24 32/8A1A: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8A1D: C9 30 CMP #$30 32/8A1F: D0 F3 BNE $8A14 32/8A21: 4C 34 8A JMP $8A34 ; restore attribute table ; [ ] 32/8A24: A5 B6 LDA $B6 32/8A26: 29 04 AND #$04 32/8A28: D0 07 BNE $8A31 32/8A2A: A9 E8 LDA #$E8 32/8A2C: A2 08 LDX #$08 32/8A2E: 4C 0A AB JMP $AB0A ; load palette 32/8A31: 4C 8D 8B JMP $8B8D ; restore color palettes ; [ restore attribute table ] 32/8A34: A2 00 LDX #$00 32/8A36: BD 40 74 LDA $7440,X ; restore attribute table 32/8A39: 9D 27 7D STA $7D27,X 32/8A3C: E8 INX 32/8A3D: E0 40 CPX #$40 32/8A3F: D0 F5 BNE $8A36 32/8A41: 4C FE 8E JMP $8EFE ; copy attribute table to ppu (no h-flip) ; [ update ppu scroll table (hypnobeam) ] 32/8A44: A5 B6 LDA $B6 32/8A46: C9 10 CMP #$10 32/8A48: 90 14 BCC $8A5E 32/8A4A: C9 70 CMP #$70 32/8A4C: 90 0F BCC $8A5D ; do nothing for frames 16-111 ; last 16 frames 32/8A4E: A2 00 LDX #$00 32/8A50: BD 00 73 LDA $7300,X 32/8A53: F0 03 BEQ $8A58 ; skip values that are already zero 32/8A55: DE 00 73 DEC $7300,X ; decrement values each frame 32/8A58: E8 INX 32/8A59: E0 10 CPX #$10 32/8A5B: D0 F3 BNE $8A50 32/8A5D: 60 RTS ; first 16 frames 32/8A5E: A2 00 LDX #$00 ; shift values by 1 32/8A60: BD 01 73 LDA $7301,X 32/8A63: 9D 00 73 STA $7300,X 32/8A66: E8 INX 32/8A67: E0 0F CPX #$0F 32/8A69: D0 F5 BNE $8A60 32/8A6B: A6 B6 LDX $B6 32/8A6D: BD 10 73 LDA $7310,X 32/8A70: 8D 0F 73 STA $730F 32/8A73: 60 RTS ; [ ] ; unused ??? 32/8A74: A0 00 LDY #$00 32/8A76: A6 B6 LDX $B6 32/8A78: 20 E3 7E JSR $7EE3 ; sine 32/8A7B: 4A LSR 32/8A7C: 4A LSR 32/8A7D: 4A LSR 32/8A7E: 4A LSR 32/8A7F: 8D 4E 7E STA $7E4E ; amplitude 32/8A82: 98 TYA 32/8A83: 0A ASL 32/8A84: 0A ASL 32/8A85: 0A ASL 32/8A86: 0A ASL 32/8A87: AA TAX 32/8A88: 20 E3 7E JSR $7EE3 ; sine 32/8A8B: AA TAX 32/8A8C: 20 C6 BF JSR $BFC6 ; $7E4E * sin(X) 32/8A8F: 48 PHA 32/8A90: 99 00 73 STA $7300,Y 32/8A93: 68 PLA 32/8A94: 30 08 BMI $8A9E 32/8A96: B9 00 79 LDA $7900,Y 32/8A99: 29 FE AND #$FE 32/8A9B: 4C A3 8A JMP $8AA3 32/8A9E: B9 00 79 LDA $7900,Y 32/8AA1: 09 01 ORA #$01 32/8AA3: 99 00 79 STA $7900,Y 32/8AA6: C8 INY 32/8AA7: C0 10 CPY #$10 32/8AA9: D0 CB BNE $8A76 32/8AAB: 60 RTS ; [ wait 60 frames ] 32/8AAC: A2 3C LDX #$3C 32/8AAE: D0 02 BNE $8AB2 ; [ wait 16 frames ] 32/8AB0: A2 10 LDX #$10 32/8AB2: 4C C6 98 JMP $98C6 ; wait ; [ summon animation $00: chocobo dash ] ; "スタコラにげた" / "Escape" 32/8AB5: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/8AB8: AD 93 7E LDA $7E93 32/8ABB: D0 08 BNE $8AC5 32/8ABD: E6 C9 INC $C9 ; queue sound effect 32/8ABF: 20 36 8E JSR $8E36 ; summon exit animation 32/8AC2: EE E2 7E INC $7EE2 ; no character fade in after summon 32/8AC5: 60 RTS ; [ summon animation $01: chocobo kick? ] ; "なぐられた!" / "Stumbled…" 32/8AC6: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8AC9: E6 C9 INC $C9 ; queue sound effect 32/8ACB: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8ACE: A9 00 LDA #$00 ; y-offset: 0 32/8AD0: 85 7E STA $7E 32/8AD2: A6 B6 LDX $B6 32/8AD4: BD E3 7B LDA $7BE3,X ; rng table 32/8AD7: 29 03 AND #$03 ; x-offset: (0..3) 32/8AD9: 85 7F STA $7F 32/8ADB: 20 76 8E JSR $8E76 ; draw summon sprites 32/8ADE: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8AE1: C9 20 CMP #$20 32/8AE3: D0 E6 BNE $8ACB 32/8AE5: 60 RTS ; [ increment animation frame counter ] 32/8AE6: E6 B6 INC $B6 32/8AE8: A5 B6 LDA $B6 32/8AEA: 60 RTS ; [ summon animation $02: chocobo kick ] ; "キック" / "Chocobo " 32/8AEB: A9 09 LDA #$09 32/8AED: 20 1E BF JSR $BF1E ; load animation graphics 32/8AF0: A9 BD LDA #$BD 32/8AF2: 20 40 A4 JSR $A440 ; load animation palette 32/8AF5: A9 00 LDA #$00 ; right hand 32/8AF7: 85 CD STA $CD 32/8AF9: A9 10 LDA #$10 ; 16 hits 32/8AFB: 85 BB STA $BB 32/8AFD: 85 BC STA $BC 32/8AFF: 20 45 A2 JSR $A245 ; init animation hits counter 32/8B02: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8B05: E6 C9 INC $C9 ; queue sound effect ; start of frame loop 32/8B07: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/8B0A: A5 B6 LDA $B6 32/8B0C: 29 04 AND #$04 32/8B0E: D0 05 BNE $8B15 ; change animation every 4 frames 32/8B10: A0 09 LDY #$09 32/8B12: 4C 17 8B JMP $8B17 32/8B15: A0 00 LDY #$00 32/8B17: A2 00 LDX #$00 32/8B19: B9 37 8B LDA $8B37,Y 32/8B1C: 9D 01 02 STA $0201,X ; chocobo is sprites 0-8 32/8B1F: E8 INX 32/8B20: E8 INX 32/8B21: E8 INX 32/8B22: E8 INX 32/8B23: C8 INY 32/8B24: E0 24 CPX #$24 32/8B26: D0 F1 BNE $8B19 32/8B28: 86 C8 STX $C8 ; hit starts at sprite 9 32/8B2A: A9 01 LDA #$01 32/8B2C: 20 B2 97 JSR $97B2 ; do hit animation 32/8B2F: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8B32: C9 40 CMP #$40 32/8B34: D0 D1 BNE $8B07 32/8B36: 60 RTS ; chocobo kick sprite tiles (2 frames, 9 tiles each) 32/8B37: 39 3A 3B 3C 3D 3E 3F 40 41 32/8B40: 51 52 53 54 55 56 57 58 59 ; [ update ppu scroll at irq (zantetsuken) ] ; A: horizontal scroll ; X: ppu control 32/8B49: 85 10 STA $10 ; ppu scroll 32/8B4B: 86 08 STX $08 32/8B4D: 20 79 FB JSR $FB79 ; wait for irq 32/8B50: A9 18 LDA #$18 32/8B52: 8D 00 C0 STA $C000 ; set irq latch (24 scanlines) 32/8B55: 8D 01 E0 STA $E001 ; enable irq 32/8B58: A2 16 LDX #$16 32/8B5A: CA DEX 32/8B5B: D0 FD BNE $8B5A ; wait a little while 32/8B5D: A5 08 LDA $08 ; ppu control 32/8B5F: 8D 00 20 STA $2000 32/8B62: A5 10 LDA $10 ; horizontal scroll 32/8B64: 8D 05 20 STA $2005 32/8B67: A9 00 LDA #$00 ; vertical scroll 32/8B69: 8D 05 20 STA $2005 32/8B6C: 60 RTS ; [ ] 32/8B6D: A9 30 LDA #$30 ; white 32/8B6F: 4C 99 8B JMP $8B99 32/8B72: A9 12 LDA #$12 ; blue 32/8B74: 4C 99 8B JMP $8B99 32/8B77: A9 16 LDA #$16 ; red 32/8B79: 4C 99 8B JMP $8B99 32/8B7C: A9 27 LDA #$27 ; orange 32/8B7E: 4C 99 8B JMP $8B99 ; [ save color palettes ] 32/8B81: A2 10 LDX #$10 32/8B83: BD F6 7C LDA $7CF6,X 32/8B86: 9D 77 7E STA $7E77,X 32/8B89: CA DEX 32/8B8A: D0 F7 BNE $8B83 32/8B8C: 60 RTS ; [ restore color palettes ] 32/8B8D: A2 10 LDX #$10 32/8B8F: BD 77 7E LDA $7E77,X 32/8B92: 9D F6 7C STA $7CF6,X 32/8B95: CA DEX 32/8B96: D0 F7 BNE $8B8F 32/8B98: 60 RTS ; [ ] 32/8B99: 85 8F STA $8F 32/8B9B: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8B9E: 20 81 8B JSR $8B81 ; save color palettes 32/8BA1: A9 00 LDA #$00 32/8BA3: 85 8E STA $8E 32/8BA5: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8BA8: A2 00 LDX #$00 32/8BAA: 20 AD 87 JSR $87AD 32/8BAD: A2 04 LDX #$04 32/8BAF: 20 AD 87 JSR $87AD 32/8BB2: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8BB5: C9 30 CMP #$30 32/8BB7: D0 EC BNE $8BA5 32/8BB9: 4C 47 85 JMP $8547 ; restore color palettes ; [ zantetsuken animation ] 32/8BBC: A9 01 LDA #$01 32/8BBE: 8D 95 7E STA $7E95 32/8BC1: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8BC4: A9 17 LDA #$17 32/8BC6: 85 B6 STA $B6 32/8BC8: A9 00 LDA #$00 32/8BCA: 85 7E STA $7E 32/8BCC: 85 7F STA $7F 32/8BCE: E6 C9 INC $C9 ; start of frame loop 1 32/8BD0: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8BD3: A5 7E LDA $7E 32/8BD5: 38 SEC 32/8BD6: E9 08 SBC #$08 32/8BD8: 85 7E STA $7E 32/8BDA: 20 76 8E JSR $8E76 ; draw summon sprites 32/8BDD: C6 B6 DEC $B6 32/8BDF: D0 EF BNE $8BD0 32/8BE1: 20 88 88 JSR $8888 ; clear oam data and wait for vblank ; start of frame loop 2 32/8BE4: A9 2D LDA #$2D 32/8BE6: 85 03 STA $03 32/8BE8: 20 80 FB JSR $FB80 ; wait for nmi 32/8BEB: 20 97 F8 JSR $F897 ; copy color palettes to ppu 32/8BEE: 2C 02 20 BIT $2002 32/8BF1: A9 00 LDA #$00 32/8BF3: 8D 06 20 STA $2006 32/8BF6: 8D 06 20 STA $2006 32/8BF9: 20 CB F8 JSR $F8CB ; update ppu registers 32/8BFC: A5 B6 LDA $B6 32/8BFE: C9 40 CMP #$40 32/8C00: 90 02 BCC $8C04 32/8C02: A9 40 LDA #$40 32/8C04: AA TAX 32/8C05: 20 E3 7E JSR $7EE3 ; sine 32/8C08: 0A ASL 32/8C09: A2 18 LDX #$18 32/8C0B: 20 EA F8 JSR $F8EA ; multiply 32/8C0E: 86 8C STX $8C 32/8C10: 8A TXA 32/8C11: 49 FF EOR #$FF 32/8C13: 85 8D STA $8D 32/8C15: F0 07 BEQ $8C1E 32/8C17: A5 06 LDA $06 32/8C19: 09 01 ORA #$01 ; use name table 1 32/8C1B: 4C 20 8C JMP $8C20 32/8C1E: A5 06 LDA $06 ; ppu control 32/8C20: 85 8F STA $8F 32/8C22: A5 06 LDA $06 32/8C24: 85 8E STA $8E 32/8C26: EE AA 00 INC $00AA ; disable ppu update at irq 32/8C29: A5 8C LDA $8C 32/8C2B: A6 8E LDX $8E 32/8C2D: 20 49 8B JSR $8B49 ; update ppu scroll at irq 32/8C30: A5 8D LDA $8D 32/8C32: A6 8F LDX $8F 32/8C34: 20 49 8B JSR $8B49 ; update ppu scroll at irq 32/8C37: A5 8C LDA $8C 32/8C39: A6 8E LDX $8E 32/8C3B: 20 49 8B JSR $8B49 ; update ppu scroll at irq 32/8C3E: A5 8D LDA $8D 32/8C40: A6 8F LDX $8F 32/8C42: 20 49 8B JSR $8B49 ; update ppu scroll at irq 32/8C45: A9 98 LDA #$98 ; set ppu control at normal irq 32/8C47: 85 08 STA $08 32/8C49: A9 00 LDA #$00 ; set scroll to zero 32/8C4B: 85 10 STA $10 32/8C4D: 8D AA 00 STA $00AA ; ppu update at irq is enabled 32/8C50: A5 B6 LDA $B6 32/8C52: 29 C0 AND #$C0 32/8C54: F0 09 BEQ $8C5F ; branch if not last 32 frames 32/8C56: A5 B6 LDA $B6 32/8C58: 29 07 AND #$07 32/8C5A: D0 03 BNE $8C5F ; once every 8 frames 32/8C5C: 20 70 8C JSR $8C70 ; fade out monster palettes 32/8C5F: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8C62: C9 60 CMP #$60 32/8C64: F0 03 BEQ $8C69 32/8C66: 4C E4 8B JMP $8BE4 32/8C69: A9 98 LDA #$98 32/8C6B: 85 08 STA $08 32/8C6D: 4C D5 80 JMP $80D5 ; [ fade out monster palettes (zantetsuken) ] 32/8C70: A2 00 LDX #$00 32/8C72: BD F7 7C LDA $7CF7,X ; color palettes 32/8C75: 29 F0 AND #$F0 32/8C77: F0 09 BEQ $8C82 32/8C79: BD F7 7C LDA $7CF7,X 32/8C7C: 38 SEC 32/8C7D: E9 10 SBC #$10 32/8C7F: 4C 84 8C JMP $8C84 32/8C82: A9 0F LDA #$0F ; black 32/8C84: 9D F7 7C STA $7CF7,X 32/8C87: E8 INX 32/8C88: E0 08 CPX #$08 32/8C8A: D0 E6 BNE $8C72 32/8C8C: 60 RTS ; [ summon animation $0E: earthen fury (titan) ] ; "だいちをゆるがす!" / "Earthquake" 32/8C8D: 20 B0 8A JSR $8AB0 ; wait 16 frames 32/8C90: A9 40 LDA #$40 32/8C92: 85 B6 STA $B6 32/8C94: E6 C9 INC $C9 32/8C96: 20 20 86 JSR $8620 32/8C99: C6 B6 DEC $B6 32/8C9B: D0 F9 BNE $8C96 32/8C9D: A9 00 LDA #$00 32/8C9F: 85 0C STA $0C 32/8CA1: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ animation function $0F: cycle sprite palettes ] 32/8CA4: 4C BA 8C JMP $8CBA ; [ fade out sprite palettes ] 32/8CA7: 20 59 A0 JSR $A059 ; reset animation frame counter 32/8CAA: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8CAD: A9 02 LDA #$02 32/8CAF: 20 87 FA JSR $FA87 ; fade out color palettes 32/8CB2: 20 E6 8A JSR $8AE6 ; increment animation frame counter 32/8CB5: C9 10 CMP #$10 32/8CB7: D0 F1 BNE $8CAA 32/8CB9: 60 RTS ; [ cycle sprite palettes ] 32/8CBA: A9 10 LDA #$10 32/8CBC: 85 B6 STA $B6 32/8CBE: 20 C6 8C JSR $8CC6 ; shift sprite palettes 32/8CC1: C6 B6 DEC $B6 32/8CC3: D0 F9 BNE $8CBE 32/8CC5: 60 RTS ; [ shift sprite palettes ] 32/8CC6: A2 10 LDX #$10 32/8CC8: 20 DA 8C JSR $8CDA ; shift palette 32/8CCB: E8 INX 32/8CCC: 20 DA 8C JSR $8CDA ; shift palette 32/8CCF: E8 INX 32/8CD0: 20 DA 8C JSR $8CDA ; shift palette 32/8CD3: E8 INX 32/8CD4: 20 DA 8C JSR $8CDA ; shift palette 32/8CD7: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ shift palette ] 32/8CDA: A0 03 LDY #$03 32/8CDC: E8 INX 32/8CDD: 20 6A A4 JSR $A46A ; shift color 32/8CE0: 88 DEY 32/8CE1: D0 F9 BNE $8CDC 32/8CE3: 60 RTS ; [ clear oam data ] 32/8CE4: A0 00 LDY #$00 32/8CE6: A9 F0 LDA #$F0 32/8CE8: 99 00 02 STA $0200,Y 32/8CEB: C8 INY 32/8CEC: D0 FA BNE $8CE8 32/8CEE: 60 RTS ; [ animation function $0E: summon animation ] 32/8CEF: 20 BA 8C JSR $8CBA ; cycle sprite palettes 32/8CF2: 20 A7 8C JSR $8CA7 ; fade out sprite palettes 32/8CF5: 20 E4 8C JSR $8CE4 ; clear oam data 32/8CF8: AD 91 7E LDA $7E91 ; summon id 32/8CFB: 29 07 AND #$07 32/8CFD: 0A ASL 32/8CFE: 0A ASL 32/8CFF: 0A ASL 32/8D00: 18 CLC 32/8D01: 69 40 ADC #$40 32/8D03: 85 7E STA $7E ; source: 2A/9440 (summon graphics properties) 32/8D05: A9 00 LDA #$00 32/8D07: 69 94 ADC #$94 32/8D09: 85 7F STA $7F 32/8D0B: A9 00 LDA #$00 32/8D0D: 85 80 STA $80 32/8D0F: A9 79 LDA #$79 ; destination: $7900 32/8D11: 85 81 STA $81 32/8D13: A9 08 LDA #$08 ; size: 8 bytes 32/8D15: 85 82 STA $82 32/8D17: A9 15 LDA #$15 32/8D19: 85 84 STA $84 32/8D1B: 20 2F F9 JSR $F92F ; load rom data 32/8D1E: AD 00 79 LDA $7900 ; summon graphics index 32/8D21: A2 10 LDX #$10 32/8D23: 20 EA F8 JSR $F8EA ; multiply 32/8D26: 85 7E STA $7E 32/8D28: 86 7F STX $7F 32/8D2A: A9 0A LDA #$0A ; summon graphics 32/8D2C: 20 24 BF JSR $BF24 ; load animation graphics (w/ offset) 32/8D2F: AE 92 7E LDX $7E92 ; summon attack id 32/8D32: BD 01 79 LDA $7901,X 32/8D35: 8D 01 79 STA $7901 32/8D38: A2 10 LDX #$10 32/8D3A: 20 0A AB JSR $AB0A ; load 3 consecutive sprite palettes 32/8D3D: EE 01 79 INC $7901 32/8D40: AD 01 79 LDA $7901 32/8D43: A2 14 LDX #$14 32/8D45: 20 0A AB JSR $AB0A 32/8D48: EE 01 79 INC $7901 32/8D4B: AD 01 79 LDA $7901 32/8D4E: A2 18 LDX #$18 32/8D50: 20 0A AB JSR $AB0A 32/8D53: AD 04 79 LDA $7904 ; size 32/8D56: 48 PHA 32/8D57: 29 0F AND #$0F 32/8D59: 85 8F STA $8F ; height 32/8D5B: 85 8B STA $8B 32/8D5D: AA TAX 32/8D5E: 68 PLA 32/8D5F: 20 F6 8E JSR $8EF6 ; lsr4 32/8D62: 85 8E STA $8E ; width 32/8D64: 85 8A STA $8A 32/8D66: 20 EA F8 JSR $F8EA ; multiply 32/8D69: 85 88 STA $88 32/8D6B: AD 05 79 LDA $7905 ; initial position 32/8D6E: 48 PHA 32/8D6F: 29 0F AND #$0F 32/8D71: 85 7F STA $7F 32/8D73: 68 PLA 32/8D74: 20 F6 8E JSR $8EF6 ; lsr4 32/8D77: 85 7E STA $7E 32/8D79: A5 7E LDA $7E 32/8D7B: 0A ASL 32/8D7C: 0A ASL 32/8D7D: 0A ASL 32/8D7E: 18 CLC 32/8D7F: 69 B0 ADC #$B0 ; y-offset 32/8D81: 85 90 STA $90 32/8D83: A5 7F LDA $7F 32/8D85: 0A ASL 32/8D86: 0A ASL 32/8D87: 0A ASL 32/8D88: 18 CLC 32/8D89: 69 28 ADC #$28 ; x-offset 32/8D8B: 85 91 STA $91 32/8D8D: AD 06 79 LDA $7906 ; source address 32/8D90: 85 7E STA $7E 32/8D92: AD 07 79 LDA $7907 32/8D95: 85 7F STA $7F 32/8D97: A9 00 LDA #$00 32/8D99: 85 80 STA $80 32/8D9B: 85 8C STA $8C 32/8D9D: A9 73 LDA #$73 32/8D9F: 85 81 STA $81 32/8DA1: 85 8D STA $8D 32/8DA3: A5 88 LDA $88 32/8DA5: 85 82 STA $82 32/8DA7: A9 15 LDA #$15 32/8DA9: 85 84 STA $84 32/8DAB: 20 2F F9 JSR $F92F ; load rom data 32/8DAE: A9 00 LDA #$00 32/8DB0: 85 18 STA $18 32/8DB2: A9 79 LDA #$79 32/8DB4: 85 19 STA $19 32/8DB6: A9 00 LDA #$00 32/8DB8: 85 7F STA $7F 32/8DBA: 85 1A STA $1A 32/8DBC: A9 00 LDA #$00 32/8DBE: 85 7E STA $7E 32/8DC0: A5 8E LDA $8E 32/8DC2: 85 80 STA $80 ; column counter 32/8DC4: A5 7F LDA $7F 32/8DC6: 18 CLC 32/8DC7: 65 91 ADC $91 32/8DC9: A0 00 LDY #$00 32/8DCB: 91 18 STA ($18),Y 32/8DCD: A4 1A LDY $1A 32/8DCF: B1 8C LDA ($8C),Y 32/8DD1: C9 FF CMP #$FF 32/8DD3: D0 05 BNE $8DDA 32/8DD5: A9 00 LDA #$00 32/8DD7: 4C DF 8D JMP $8DDF 32/8DDA: 29 3F AND #$3F 32/8DDC: 18 CLC 32/8DDD: 69 39 ADC #$39 32/8DDF: A0 01 LDY #$01 32/8DE1: 91 18 STA ($18),Y 32/8DE3: A4 1A LDY $1A 32/8DE5: B1 8C LDA ($8C),Y 32/8DE7: 20 F4 8E JSR $8EF4 ; lsr6 32/8DEA: A0 02 LDY #$02 32/8DEC: 91 18 STA ($18),Y 32/8DEE: C8 INY 32/8DEF: A5 7E LDA $7E 32/8DF1: 18 CLC 32/8DF2: 65 90 ADC $90 32/8DF4: 91 18 STA ($18),Y 32/8DF6: A5 7E LDA $7E 32/8DF8: 18 CLC 32/8DF9: 69 08 ADC #$08 32/8DFB: 85 7E STA $7E 32/8DFD: E6 1A INC $1A 32/8DFF: A5 18 LDA $18 32/8E01: 18 CLC 32/8E02: 69 04 ADC #$04 32/8E04: 85 18 STA $18 32/8E06: A5 19 LDA $19 32/8E08: 69 00 ADC #$00 32/8E0A: 85 19 STA $19 32/8E0C: C6 80 DEC $80 32/8E0E: D0 B4 BNE $8DC4 32/8E10: A5 7F LDA $7F 32/8E12: 18 CLC 32/8E13: 69 08 ADC #$08 32/8E15: 85 7F STA $7F 32/8E17: C6 8F DEC $8F 32/8E19: D0 A1 BNE $8DBC 32/8E1B: 20 56 8E JSR $8E56 ; summon entry animation 32/8E1E: 20 15 81 JSR $8115 ; do summon animation 32/8E21: 20 A7 8C JSR $8CA7 ; fade out sprite palettes 32/8E24: 20 E4 8C JSR $8CE4 ; clear oam data 32/8E27: A2 00 LDX #$00 32/8E29: A9 0F LDA #$0F 32/8E2B: 9D 07 7D STA $7D07,X ; set sprite palettes to black 32/8E2E: E8 INX 32/8E2F: E0 10 CPX #$10 32/8E31: D0 F8 BNE $8E2B 32/8E33: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ summon exit animation ] 32/8E36: A9 00 LDA #$00 32/8E38: 85 7E STA $7E 32/8E3A: 85 7F STA $7F 32/8E3C: 8D 95 7E STA $7E95 32/8E3F: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8E42: 20 76 8E JSR $8E76 ; draw summon sprites 32/8E45: A5 7E LDA $7E 32/8E47: 18 CLC 32/8E48: 69 08 ADC #$08 32/8E4A: 85 7E STA $7E 32/8E4C: C9 50 CMP #$50 32/8E4E: D0 EF BNE $8E3F 32/8E50: 20 76 8E JSR $8E76 ; draw summon sprites 32/8E53: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ summon entry animation ] 32/8E56: A9 50 LDA #$50 ; x offset: $50 32/8E58: 85 7E STA $7E 32/8E5A: A9 00 LDA #$00 32/8E5C: 85 7F STA $7F 32/8E5E: 8D 95 7E STA $7E95 32/8E61: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 32/8E64: 20 76 8E JSR $8E76 ; draw summon sprites 32/8E67: A5 7E LDA $7E 32/8E69: 38 SEC 32/8E6A: E9 08 SBC #$08 32/8E6C: 85 7E STA $7E 32/8E6E: D0 F1 BNE $8E61 32/8E70: 20 76 8E JSR $8E76 ; draw summon sprites 32/8E73: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ draw summon sprites ] ; $7E: x-offset ; $7F: y-offset ; $7900: sprite data buffer 32/8E76: 20 E4 8C JSR $8CE4 ; clear oam data 32/8E79: A9 00 LDA #$00 32/8E7B: 85 80 STA $80 32/8E7D: A9 79 LDA #$79 32/8E7F: 85 81 STA $81 32/8E81: A2 00 LDX #$00 32/8E83: 86 18 STX $18 32/8E85: A0 01 LDY #$01 32/8E87: B1 80 LDA ($80),Y 32/8E89: F0 5B BEQ $8EE6 32/8E8B: A0 03 LDY #$03 32/8E8D: AD 95 7E LDA $7E95 32/8E90: F0 08 BEQ $8E9A ; branch sprites don't wrap in x direction 32/8E92: B1 80 LDA ($80),Y 32/8E94: 18 CLC 32/8E95: 65 7E ADC $7E 32/8E97: 4C A1 8E JMP $8EA1 32/8E9A: B1 80 LDA ($80),Y 32/8E9C: 18 CLC 32/8E9D: 65 7E ADC $7E 32/8E9F: B0 41 BCS $8EE2 32/8EA1: 9D 03 02 STA $0203,X 32/8EA4: A0 00 LDY #$00 32/8EA6: B1 80 LDA ($80),Y 32/8EA8: 18 CLC 32/8EA9: 65 7F ADC $7F 32/8EAB: 38 SEC 32/8EAC: E9 01 SBC #$01 32/8EAE: C9 98 CMP #$98 32/8EB0: 90 08 BCC $8EBA 32/8EB2: A9 F0 LDA #$F0 32/8EB4: 9D 03 02 STA $0203,X 32/8EB7: 4C E2 8E JMP $8EE2 32/8EBA: 9D 00 02 STA $0200,X 32/8EBD: A0 01 LDY #$01 32/8EBF: B1 80 LDA ($80),Y 32/8EC1: 9D 01 02 STA $0201,X 32/8EC4: C8 INY 32/8EC5: B1 80 LDA ($80),Y 32/8EC7: 9D 02 02 STA $0202,X 32/8ECA: 20 D2 90 JSR $90D2 ; check back attack 32/8ECD: D0 13 BNE $8EE2 32/8ECF: BD 03 02 LDA $0203,X 32/8ED2: 49 FF EOR #$FF 32/8ED4: 38 SEC 32/8ED5: E9 08 SBC #$08 32/8ED7: 9D 03 02 STA $0203,X 32/8EDA: BD 02 02 LDA $0202,X 32/8EDD: 09 40 ORA #$40 32/8EDF: 9D 02 02 STA $0202,X 32/8EE2: E8 INX ; next sprite 32/8EE3: E8 INX 32/8EE4: E8 INX 32/8EE5: E8 INX 32/8EE6: A9 04 LDA #$04 32/8EE8: 20 FE F8 JSR $F8FE ; add to +$80 32/8EEB: E6 18 INC $18 32/8EED: A5 18 LDA $18 32/8EEF: C5 88 CMP $88 32/8EF1: D0 92 BNE $8E85 32/8EF3: 60 RTS ; [ lsr ] 32/8EF4: 4A LSR 32/8EF5: 4A LSR 32/8EF6: 4A LSR 32/8EF7: 4A LSR 32/8EF8: 4A LSR 32/8EF9: 4A LSR 32/8EFA: 60 RTS ; [ animation function $15: copy attribute table to ppu ] 32/8EFB: 20 08 8F JSR $8F08 ; h-flip attribute table 32/8EFE: A9 0B LDA #$0B 32/8F00: 20 1E BF JSR $BF1E ; load animation graphics 32/8F03: A9 0C LDA #$0C 32/8F05: 4C 1E BF JMP $BF1E ; load animation graphics ; [ h-flip attribute table ] 32/8F08: 20 D2 90 JSR $90D2 ; check back attack 32/8F0B: D0 4A BNE $8F57 32/8F0D: A9 00 LDA #$00 32/8F0F: 85 82 STA $82 32/8F11: 20 20 8F JSR $8F20 ; h-flip attribute table row 32/8F14: A5 82 LDA $82 ; next row 32/8F16: 18 CLC 32/8F17: 69 08 ADC #$08 32/8F19: 85 82 STA $82 32/8F1B: C9 40 CMP #$40 32/8F1D: D0 F2 BNE $8F11 32/8F1F: 60 RTS ; [ h-flip attribute table row ] 32/8F20: A2 00 LDX #$00 32/8F22: A0 07 LDY #$07 32/8F24: 20 39 8F JSR $8F39 32/8F27: A2 01 LDX #$01 32/8F29: A0 06 LDY #$06 32/8F2B: 20 39 8F JSR $8F39 32/8F2E: A2 02 LDX #$02 32/8F30: A0 05 LDY #$05 32/8F32: 20 39 8F JSR $8F39 32/8F35: A2 03 LDX #$03 32/8F37: A0 04 LDY #$04 32/8F39: 8A TXA 32/8F3A: 18 CLC 32/8F3B: 65 82 ADC $82 32/8F3D: AA TAX 32/8F3E: 98 TYA 32/8F3F: 18 CLC 32/8F40: 65 82 ADC $82 32/8F42: A8 TAY 32/8F43: BD 27 7D LDA $7D27,X 32/8F46: 48 PHA 32/8F47: B9 27 7D LDA $7D27,Y 32/8F4A: 20 58 8F JSR $8F58 32/8F4D: 9D 27 7D STA $7D27,X 32/8F50: 68 PLA 32/8F51: 20 58 8F JSR $8F58 32/8F54: 99 27 7D STA $7D27,Y 32/8F57: 60 RTS ; [ h-flip attribute byte ] 32/8F58: 85 7E STA $7E 32/8F5A: 29 C0 AND #$C0 32/8F5C: 4A LSR 32/8F5D: 4A LSR 32/8F5E: 85 7F STA $7F 32/8F60: A5 7E LDA $7E 32/8F62: 29 30 AND #$30 32/8F64: 0A ASL 32/8F65: 0A ASL 32/8F66: 05 7F ORA $7F 32/8F68: 85 7F STA $7F 32/8F6A: A5 7E LDA $7E 32/8F6C: 29 0C AND #$0C 32/8F6E: 4A LSR 32/8F6F: 4A LSR 32/8F70: 05 7F ORA $7F 32/8F72: 85 7F STA $7F 32/8F74: A5 7E LDA $7E 32/8F76: 29 03 AND #$03 32/8F78: 0A ASL 32/8F79: 0A ASL 32/8F7A: 05 7F ORA $7F 32/8F7C: 60 RTS ; [ get attacker index ] ; unused ??? 32/8F7D: A0 00 LDY #$00 32/8F7F: BD 98 7E LDA $7E98,X ; attacker (mask) 32/8F82: D9 24 FD CMP $FD24,Y ; bit mask 32/8F85: F0 03 BEQ $8F8A 32/8F87: C8 INY 32/8F88: D0 F5 BNE $8F7F 32/8F8A: 60 RTS ; pointers to ifrit sprite data ??? 32/8F8B: 8FA8 8FE1 901A 902B 902B 906C ; ifrit ??? 32/8F97: 00 01 03 00 32/8F9B: 00 02 03 08 32/8F9F: 08 03 03 00 32/8FA3: 08 04 03 08 32/8FA7: FF ; 0 32/8FA8: 00 05 03 08 32/8FAC: 00 06 03 10 32/8FB0: 08 07 03 08 32/8FB4: 08 08 03 10 32/8FB8: 10 09 03 08 32/8FBC: 10 0A 03 10 32/8FC0: 18 0B 03 08 32/8FC4: 18 0C 03 10 32/8FC8: 20 0D 03 08 32/8FCC: 20 0E 03 10 32/8FD0: 28 0F 03 00 32/8FD4: 28 10 03 08 32/8FD8: 28 11 03 10 32/8FDC: 28 12 03 18 32/8FE0: FF ; 1 32/8FE1: 00 06 43 08 32/8FE5: 00 05 43 10 32/8FE9: 08 08 43 08 32/8FED: 08 07 43 10 32/8FF1: 10 0A 43 08 32/8FF5: 10 09 43 10 32/8FF9: 18 0C 43 08 32/8FFD: 18 0B 43 10 32/9001: 20 0E 43 08 32/9005: 20 0D 43 10 32/9009: 28 12 43 00 32/900D: 28 11 43 08 32/9011: 28 10 43 10 32/9015: 28 0F 43 18 32/9019: FF ; 2 32/901A: 08 01 03 08 32/901E: 08 02 03 10 32/9022: 10 03 03 08 32/9026: 10 04 03 10 32/902A: FF ; 3 32/902B: 00 05 03 00 32/902F: 00 06 03 08 32/9033: 00 07 03 10 32/9037: 00 08 03 18 32/903B: 08 09 03 00 32/903F: 08 0A 03 08 32/9043: 08 0B 03 10 32/9047: 08 0C 03 18 32/904B: 10 09 83 00 32/904F: 10 0A 83 08 32/9053: 10 0B 83 10 32/9057: 10 0C 83 18 32/905B: 18 05 83 00 32/905F: 18 06 83 08 32/9063: 18 07 83 10 32/9067: 18 08 83 18 32/906B: FF ; 4 32/906C: 00 0D 03 00 32/9070: 00 0E 03 08 32/9074: 00 0F 03 10 32/9078: 00 10 03 18 32/907C: 08 11 03 00 32/9080: 08 12 03 08 32/9084: 08 13 03 10 32/9088: 08 14 03 18 32/908C: 10 11 83 00 32/9090: 10 12 83 08 32/9094: 10 13 83 10 32/9098: 10 14 83 18 32/909C: 18 0D 83 00 32/90A0: 18 0E 83 08 32/90A4: 18 0F 83 10 32/90A8: 18 10 83 18 32/90AC: FF ; titan ??? 32/90AD: 00 01 03 00 32/90B1: 00 02 03 08 32/90B5: 00 03 03 10 32/90B9: 08 04 03 00 32/90BD: 08 05 03 08 32/90C1: 08 06 03 10 32/90C5: 10 07 03 00 32/90C9: 10 08 03 08 32/90CD: 10 09 03 10 32/90D1: FF ; -------------------------------------------------------------------------- ; [ check back attack ] 32/90D2: AD C3 78 LDA $78C3 32/90D5: C9 88 CMP #$88 32/90D7: 60 RTS ; -------------------------------------------------------------------------- ; [ animation function $02: draw all character sprites ] 32/90D8: 20 2B A4 JSR $A42B ; clear animation oam data 32/90DB: A9 A0 LDA #$A0 ; use sprites 40 through 63 32/90DD: 85 C8 STA $C8 32/90DF: A2 00 LDX #$00 32/90E1: 20 EA 90 JSR $90EA ; draw character sprite 32/90E4: E8 INX 32/90E5: E0 04 CPX #$04 32/90E7: D0 F8 BNE $90E1 32/90E9: 60 RTS ; [ draw character sprite ] 32/90EA: A9 00 LDA #$00 32/90EC: 85 91 STA $91 32/90EE: B5 C0 LDA $C0,X ; x position 32/90F0: 85 8C STA $8C 32/90F2: B5 C4 LDA $C4,X ; y position 32/90F4: 85 8E STA $8E 32/90F6: BD 83 7D LDA $7D83,X 32/90F9: 29 80 AND #$80 32/90FB: F0 04 BEQ $9101 ; branch if not flipped 32/90FD: A9 01 LDA #$01 32/90FF: 85 91 STA $91 32/9101: BD 83 7D LDA $7D83,X ; frame id 32/9104: 29 7F AND #$7F 32/9106: 85 90 STA $90 32/9108: BD 22 7E LDA $7E22,X 32/910B: F0 04 BEQ $9111 32/910D: A9 00 LDA #$00 32/910F: 85 90 STA $90 ; fallthrough ; [ animation function $00: draw character sprite ] ; $8C: x position ; $8E: y position ; $90: frame id ; $91: flip horizontally 32/9111: 8A TXA 32/9112: 48 PHA 32/9113: A4 90 LDY $90 32/9115: A5 91 LDA $91 32/9117: D0 06 BNE $911F 32/9119: B9 6B 92 LDA $926B,Y ; position and flip data id 32/911C: 4C 22 91 JMP $9122 32/911F: B9 80 92 LDA $9280,Y 32/9122: 0A ASL 32/9123: A8 TAY 32/9124: B9 CB 91 LDA $91CB,Y ; position and flip data pointer 32/9127: 85 7E STA $7E 32/9129: B9 CC 91 LDA $91CC,Y 32/912C: 85 7F STA $7F 32/912E: A0 00 LDY #$00 32/9130: B1 7E LDA ($7E),Y ; load position and flip data 32/9132: 99 00 73 STA $7300,Y 32/9135: C8 INY 32/9136: C0 18 CPY #$18 32/9138: D0 F6 BNE $9130 32/913A: BD 95 92 LDA $9295,X ; tile offset 32/913D: 85 82 STA $82 32/913F: BD 93 7D LDA $7D93,X ; palette 32/9142: 1D 97 7D ORA $7D97,X ; palette override 32/9145: 85 83 STA $83 32/9147: A5 90 LDA $90 32/9149: A2 06 LDX #$06 32/914B: 20 EA F8 JSR $F8EA ; multiply 32/914E: 18 CLC 32/914F: 69 2E ADC #$2E ; 32/972E 32/9151: 85 7E STA $7E 32/9153: 8A TXA 32/9154: 69 97 ADC #$97 32/9156: 85 7F STA $7F 32/9158: A2 00 LDX #$00 32/915A: A0 00 LDY #$00 32/915C: BD 00 73 LDA $7300,X ; add y offset 32/915F: 18 CLC 32/9160: 65 8E ADC $8E 32/9162: 9D 00 73 STA $7300,X 32/9165: B1 7E LDA ($7E),Y 32/9167: 29 80 AND #$80 32/9169: F0 07 BEQ $9172 32/916B: B1 7E LDA ($7E),Y ; tile index 32/916D: 29 7F AND #$7F 32/916F: 4C 77 91 JMP $9177 32/9172: B1 7E LDA ($7E),Y 32/9174: 18 CLC 32/9175: 65 82 ADC $82 ; add tile offset 32/9177: 9D 01 73 STA $7301,X 32/917A: BD 02 73 LDA $7302,X 32/917D: 05 83 ORA $83 32/917F: 9D 02 73 STA $7302,X 32/9182: A5 98 LDA $98 ; check if back attack gets h-flip 32/9184: F0 1E BEQ $91A4 32/9186: 20 D2 90 JSR $90D2 ; check back attack 32/9189: D0 19 BNE $91A4 32/918B: BD 03 73 LDA $7303,X 32/918E: 18 CLC 32/918F: 65 8C ADC $8C 32/9191: 49 FF EOR #$FF 32/9193: 18 CLC 32/9194: 69 F9 ADC #$F9 ; x = 248 - x 32/9196: 9D 03 73 STA $7303,X 32/9199: BD 02 73 LDA $7302,X ; flip horizontally 32/919C: 49 40 EOR #$40 32/919E: 9D 02 73 STA $7302,X 32/91A1: 4C AD 91 JMP $91AD 32/91A4: BD 03 73 LDA $7303,X 32/91A7: 18 CLC 32/91A8: 65 8C ADC $8C 32/91AA: 9D 03 73 STA $7303,X 32/91AD: E8 INX ; next sprite (6 total) 32/91AE: E8 INX 32/91AF: E8 INX 32/91B0: E8 INX 32/91B1: C8 INY 32/91B2: C0 06 CPY #$06 32/91B4: D0 A6 BNE $915C 32/91B6: A6 C8 LDX $C8 32/91B8: A0 00 LDY #$00 32/91BA: B9 00 73 LDA $7300,Y ; copy buffer to oam data 32/91BD: 9D 00 02 STA $0200,X 32/91C0: E8 INX 32/91C1: C8 INY 32/91C2: C0 18 CPY #$18 32/91C4: D0 F4 BNE $91BA 32/91C6: 86 C8 STX $C8 32/91C8: 68 PLA 32/91C9: AA TAX 32/91CA: 60 RTS ; pointers to position and flip data for character sprite frames 32/91CB: 91D7 91EF 9207 921F 9237 924F ; 2x3 32/91D7: FF 00 00 00 32/91DB: FF 00 00 08 32/91DF: 07 00 00 00 32/91E3: 07 00 00 08 32/91E7: 0F 00 00 00 32/91EB: 0F 00 00 08 ; 2x3, h-flip 32/91EF: FF 00 40 08 32/91F3: FF 00 40 00 32/91F7: 07 00 40 08 32/91FB: 07 00 40 00 32/91FF: 0F 00 40 08 32/9203: 0F 00 40 00 ; 2x3 (toad/mini) 32/9207: FF 00 00 FC 32/920B: FF 00 00 04 32/920F: 07 00 00 FC 32/9213: 07 00 00 04 32/9217: 0F 00 00 FC 32/921B: 0F 00 00 04 ; 2x3 (toad/mini) 32/921F: FF 00 40 0C 32/9223: FF 00 40 04 32/9227: 07 00 40 0C 32/922B: 07 00 40 04 32/922F: 0F 00 40 0C 32/9233: 0F 00 40 04 ; 3x2 32/9237: 07 00 00 F8 32/923B: 07 00 00 00 32/923F: 07 00 00 08 32/9243: 0F 00 00 F8 32/9247: 0F 00 00 00 32/924B: 0F 00 00 08 ; 3x2 h-flip 32/924F: 07 00 40 10 32/9253: 07 00 40 08 32/9257: 07 00 40 00 32/925B: 0F 00 40 10 32/925F: 0F 00 40 08 32/9263: 0F 00 40 00 32/9267: 59 5A 5B 5C ; position and flip data id for each character sprite frame 32/926B: 00 00 00 00 00 00 00 00 32/9273: 00 04 02 02 02 02 02 02 32/927B: 02 00 00 00 00 32/9280: 01 01 01 01 01 01 01 01 32/9288: 01 05 03 03 03 03 03 03 32/9290: 03 01 01 01 01 ; tile offset for each character 32/9295: 01 0F 1D 2B ; [ update animation sprite (no offset) ] ; A: animation frame id 32/9299: 48 PHA 32/929A: A9 00 LDA #$00 32/929C: 85 7E STA $7E 32/929E: 85 7F STA $7F 32/92A0: 68 PLA ; fallthrough ; [ update animation sprite ] ; $7E: x offset ; $7F: y offset ; A: animation frame id 32/92A1: A6 95 LDX $95 ; attacker 32/92A3: 85 8E STA $8E ; frame id 32/92A5: 8A TXA 32/92A6: 0A ASL 32/92A7: A8 TAY 32/92A8: B9 9B 7D LDA $7D9B,Y 32/92AB: 29 08 AND #$08 32/92AD: F0 07 BEQ $92B6 ; branch if facing left 32/92AF: A9 01 LDA #$01 ; h-flip 32/92B1: 85 8F STA $8F 32/92B3: 4C BA 92 JMP $92BA 32/92B6: A9 00 LDA #$00 ; no h-flip 32/92B8: 85 8F STA $8F 32/92BA: B5 C0 LDA $C0,X ; character x position 32/92BC: 18 CLC 32/92BD: 65 7E ADC $7E 32/92BF: 85 8C STA $8C 32/92C1: B5 C4 LDA $C4,X ; character y position 32/92C3: 18 CLC 32/92C4: 65 7F ADC $7F 32/92C6: 85 8D STA $8D 32/92C8: 4C 57 93 JMP $9357 ; update animation sprite ; [ ] 32/92CB: 8A TXA 32/92CC: 48 PHA 32/92CD: 20 D2 90 JSR $90D2 ; check back attack 32/92D0: D0 11 BNE $92E3 32/92D2: A5 8C LDA $8C 32/92D4: 49 FF EOR #$FF 32/92D6: 18 CLC 32/92D7: 69 F1 ADC #$F1 32/92D9: 85 8C STA $8C 32/92DB: A5 8F LDA $8F 32/92DD: 49 FF EOR #$FF 32/92DF: 29 01 AND #$01 32/92E1: 85 8F STA $8F 32/92E3: A5 8F LDA $8F 32/92E5: 0A ASL 32/92E6: AA TAX 32/92E7: BD CB 91 LDA $91CB,X 32/92EA: 85 7E STA $7E 32/92EC: BD CC 91 LDA $91CC,X 32/92EF: 85 7F STA $7F 32/92F1: A0 00 LDY #$00 32/92F3: B1 7E LDA ($7E),Y 32/92F5: 99 80 73 STA $7380,Y 32/92F8: C8 INY 32/92F9: C0 10 CPY #$10 32/92FB: D0 F6 BNE $92F3 32/92FD: A5 8E LDA $8E 32/92FF: A2 04 LDX #$04 32/9301: 20 EA F8 JSR $F8EA ; multiply 32/9304: 18 CLC 32/9305: 69 67 ADC #$67 ; 32/9267 32/9307: 85 7E STA $7E 32/9309: 8A TXA 32/930A: 69 92 ADC #$92 32/930C: 85 7F STA $7F 32/930E: A2 00 LDX #$00 32/9310: A0 00 LDY #$00 32/9312: BD 80 73 LDA $7380,X 32/9315: 18 CLC 32/9316: 65 8D ADC $8D 32/9318: 38 SEC 32/9319: E9 01 SBC #$01 32/931B: 9D 80 73 STA $7380,X 32/931E: B1 7E LDA ($7E),Y 32/9320: D0 03 BNE $9325 32/9322: 9D 80 73 STA $7380,X 32/9325: 9D 81 73 STA $7381,X 32/9328: C8 INY 32/9329: BD 83 73 LDA $7383,X 32/932C: 18 CLC 32/932D: 65 8C ADC $8C 32/932F: 9D 83 73 STA $7383,X 32/9332: BD 82 73 LDA $7382,X 32/9335: 09 03 ORA #$03 32/9337: 9D 82 73 STA $7382,X 32/933A: E8 INX 32/933B: E8 INX 32/933C: E8 INX 32/933D: E8 INX 32/933E: E0 10 CPX #$10 32/9340: D0 D0 BNE $9312 32/9342: A6 C8 LDX $C8 32/9344: A0 00 LDY #$00 32/9346: B9 80 73 LDA $7380,Y 32/9349: 9D 00 02 STA $0200,X 32/934C: E8 INX 32/934D: C8 INY 32/934E: C0 10 CPY #$10 32/9350: D0 F4 BNE $9346 32/9352: 86 C8 STX $C8 32/9354: 68 PLA 32/9355: AA TAX 32/9356: 60 RTS ; [ update animation sprite ] ; $8C: x position ; $8D: y position ; $8E: frame id ; $8F: horizontal flip 32/9357: 8A TXA 32/9358: 48 PHA 32/9359: A5 8E LDA $8E ; frame id 32/935B: A2 04 LDX #$04 32/935D: 20 EA F8 JSR $F8EA ; multiply 32/9360: 18 CLC 32/9361: 69 0E ADC #$0E ; 32/950E 32/9363: 85 84 STA $84 32/9365: 8A TXA 32/9366: 69 95 ADC #$95 32/9368: 85 85 STA $85 32/936A: A5 8E LDA $8E 32/936C: C9 04 CMP #$04 32/936E: F0 04 BEQ $9374 32/9370: C9 0D CMP #$0D 32/9372: D0 0D BNE $9381 32/9374: A6 95 LDX $95 32/9376: BD 93 7D LDA $7D93,X 32/9379: 1D 97 7D ORA $7D97,X 32/937C: 85 8E STA $8E 32/937E: 4C 85 93 JMP $9385 32/9381: A9 03 LDA #$03 32/9383: 85 8E STA $8E 32/9385: A5 8F LDA $8F 32/9387: F0 0B BEQ $9394 32/9389: A0 01 LDY #$01 32/938B: B1 84 LDA ($84),Y 32/938D: AA TAX 32/938E: BD 03 95 LDA $9503,X ; 32/9391: 4C 98 93 JMP $9398 32/9394: A0 01 LDY #$01 32/9396: B1 84 LDA ($84),Y 32/9398: 0A ASL 32/9399: AA TAX 32/939A: BD 3D 94 LDA $943D,X 32/939D: 85 7E STA $7E 32/939F: BD 3E 94 LDA $943E,X 32/93A2: 85 7F STA $7F 32/93A4: A0 00 LDY #$00 32/93A6: B1 84 LDA ($84),Y 32/93A8: 0A ASL 32/93A9: 0A ASL 32/93AA: AA TAX 32/93AB: A5 8F LDA $8F 32/93AD: F0 0F BEQ $93BE 32/93AF: A0 02 LDY #$02 32/93B1: A9 00 LDA #$00 32/93B3: 38 SEC 32/93B4: F1 84 SBC ($84),Y ; x offset 32/93B6: 18 CLC 32/93B7: 65 8C ADC $8C 32/93B9: 85 90 STA $90 32/93BB: 4C C7 93 JMP $93C7 32/93BE: A0 02 LDY #$02 32/93C0: B1 84 LDA ($84),Y ; x offset 32/93C2: 18 CLC 32/93C3: 65 8C ADC $8C 32/93C5: 85 90 STA $90 32/93C7: A0 03 LDY #$03 32/93C9: B1 84 LDA ($84),Y ; y offset 32/93CB: 18 CLC 32/93CC: 65 8D ADC $8D 32/93CE: 85 91 STA $91 32/93D0: A0 00 LDY #$00 32/93D2: B1 7E LDA ($7E),Y 32/93D4: 18 CLC 32/93D5: 65 91 ADC $91 32/93D7: 99 80 73 STA $7380,Y ; y position 32/93DA: C8 INY 32/93DB: BD 8A 96 LDA $968A,X 32/93DE: 99 80 73 STA $7380,Y ; tile id 32/93E1: E8 INX 32/93E2: C8 INY 32/93E3: B1 7E LDA ($7E),Y 32/93E5: 05 8E ORA $8E 32/93E7: 99 80 73 STA $7380,Y ; flags 32/93EA: C8 INY 32/93EB: B1 7E LDA ($7E),Y 32/93ED: 18 CLC 32/93EE: 65 90 ADC $90 32/93F0: 99 80 73 STA $7380,Y ; x position 32/93F3: C8 INY 32/93F4: C0 10 CPY #$10 32/93F6: D0 DA BNE $93D2 32/93F8: A6 C8 LDX $C8 ; pointer to next available animation sprite 32/93FA: A0 00 LDY #$00 32/93FC: B9 80 73 LDA $7380,Y 32/93FF: 9D 00 02 STA $0200,X ; y position 32/9402: E8 INX 32/9403: C8 INY 32/9404: B9 80 73 LDA $7380,Y 32/9407: 9D 00 02 STA $0200,X ; tile id 32/940A: E8 INX 32/940B: C8 INY 32/940C: B9 80 73 LDA $7380,Y 32/940F: 9D 00 02 STA $0200,X ; flags 32/9412: E8 INX 32/9413: C8 INY 32/9414: 20 D2 90 JSR $90D2 ; check back attack 32/9417: D0 13 BNE $942C 32/9419: BD FF 01 LDA $01FF,X ; flip horizontally 32/941C: 49 40 EOR #$40 32/941E: 9D FF 01 STA $01FF,X 32/9421: B9 80 73 LDA $7380,Y 32/9424: 49 FF EOR #$FF 32/9426: 18 CLC 32/9427: 69 F9 ADC #$F9 32/9429: 4C 2F 94 JMP $942F 32/942C: B9 80 73 LDA $7380,Y 32/942F: 9D 00 02 STA $0200,X ; x position 32/9432: E8 INX 32/9433: C8 INY 32/9434: C0 10 CPY #$10 32/9436: D0 C4 BNE $93FC 32/9438: 86 C8 STX $C8 32/943A: 68 PLA 32/943B: AA TAX 32/943C: 60 RTS ; pointers to animation sprite data 32/943D: 9453 9473 9463 9483 9493 94A3 94B3 94C3 32/944D: 94D3 94E3 94F3 ; animation sprite data ; 0: y position ; 1: tile id (unused ???, see 32/968A) ; 2: flags ; 3: x position ; 0: normal 32/9453: 00 61 00 00 32/9457: 00 62 00 08 32/945B: 08 63 00 00 32/945F: 08 64 00 08 ; 1: vertical flip 32/9463: 00 63 80 00 32/9467: 00 64 80 08 32/946B: 08 61 80 00 32/946F: 08 62 80 08 ; 2: horizontal flip 32/9473: 00 61 40 08 32/9477: 00 62 40 00 32/947B: 08 63 40 08 32/947F: 08 64 40 00 ; 3: horizontal and vertical flip 32/9483: 00 63 C0 08 32/9487: 00 64 C0 00 32/948B: 08 61 C0 08 32/948F: 08 62 C0 00 ; 4: 32/9493: 00 00 00 00 32/9497: 00 00 00 08 32/949B: 08 00 C0 00 32/949F: 08 00 C0 08 ; 5: 32/94A3: 00 00 00 F8 32/94A7: 00 00 40 10 32/94AB: 20 00 80 F8 32/94AF: 20 00 C0 10 ; 6: same as 5 but horizontally flipped 32/94B3: 00 00 40 10 32/94B7: 00 00 00 F8 32/94BB: 20 00 C0 10 32/94BF: 20 00 80 F8 ; 7: 32/94C3: 00 00 00 00 32/94C7: 00 00 00 08 32/94CB: 08 00 C0 00 32/94CF: 08 00 C0 08 ; 8: 32/94D3: 00 00 40 08 32/94D7: 00 00 40 00 32/94DB: 08 00 80 08 32/94DF: 08 00 80 00 ; 9: 32/94E3: 00 00 00 00 32/94E7: 00 00 40 08 32/94EB: 08 00 80 00 32/94EF: 08 00 C0 08 ; A: 32/94F3: 00 00 40 08 32/94F7: 00 00 00 00 32/94FB: 08 00 C0 08 32/94FF: 08 00 80 00 ; id for data at 32/943D (vertical flip) 32/9503: 01 00 03 02 04 06 05 08 07 0A 09 ; animation sprite data ??? ; $00: frame data id ; $01: id for data at 32/943D ; $02: x offset ; $03: y offset 32/950E: 00 01 08 F8 32/9512: 00 00 F0 00 32/9516: 01 01 10 F8 32/951A: 01 00 F0 00 32/951E: 02 00 F4 01 32/9522: 00 00 FC 04 32/9526: 03 00 FC 04 32/952A: 01 00 FC 04 32/952E: 04 00 FC 04 32/9532: 05 00 F8 00 32/9536: 05 02 F0 00 32/953A: 06 00 F8 00 32/953E: 06 02 F0 00 32/9542: 0F 00 F4 02 32/9546: 00 00 FC 04 32/954A: 01 00 FC 04 32/954E: 07 00 E8 F0 32/9552: 08 00 E8 F0 32/9556: 09 00 E8 F0 32/955A: 0A 00 E8 F0 32/955E: 05 00 F0 00 32/9562: 05 02 F0 00 32/9566: 06 00 F0 00 32/956A: 06 02 F0 00 32/956E: 02 01 10 F8 32/9572: 02 00 F0 00 32/9576: 0B 00 F0 00 32/957A: 0C 00 F0 00 32/957E: 0D 00 F0 00 32/9582: 0E 00 F0 00 32/9586: 0F 01 10 F8 32/958A: 0F 00 F0 00 32/958E: 00 00 08 F8 32/9592: 10 03 F0 08 32/9596: 01 00 08 F8 32/959A: 11 03 F0 08 32/959E: 00 01 F0 08 32/95A2: 00 00 F0 08 32/95A6: 10 02 F0 08 32/95AA: 10 03 F0 08 32/95AE: 12 04 F0 08 32/95B2: 13 04 F0 08 32/95B6: 12 04 F0 08 32/95BA: 13 04 F0 08 32/95BE: 01 01 F0 08 32/95C2: 01 00 F0 08 32/95C6: 11 02 F0 08 32/95CA: 11 03 F0 08 32/95CE: 14 04 F0 08 32/95D2: 15 04 F0 08 32/95D6: 14 04 F0 08 32/95DA: 15 04 F0 08 32/95DE: 12 04 08 F8 32/95E2: 13 04 F0 08 32/95E6: 14 04 08 F8 32/95EA: 15 04 F0 08 32/95EE: 16 05 00 F8 32/95F2: 17 05 00 F8 32/95F6: 18 05 00 F8 32/95FA: 19 05 00 F8 32/95FE: 1A 00 FC FC 32/9602: 1B 00 FC 0C 32/9606: 1C 00 0C FC 32/960A: 1D 00 0C 0C 32/960E: 1C 01 F4 FC 32/9612: 1D 01 F4 0C 32/9616: 1A 01 04 FC 32/961A: 1B 01 04 0C 32/961E: 08 00 F8 F8 32/9622: 08 01 08 F8 32/9626: 1E 02 F8 10 32/962A: 1E 03 08 10 32/962E: 1F 07 F0 04 32/9632: 1F 08 F0 04 32/9636: 20 09 F0 04 32/963A: 21 09 F0 04 32/963E: 22 09 F0 04 32/9642: 23 09 F0 04 32/9646: 24 09 F0 04 32/964A: 17 09 F0 04 32/964E: 25 00 F0 04 32/9652: 25 01 F0 04 32/9656: 26 00 F0 04 32/965A: 27 00 F0 04 32/965E: 27 01 F0 04 32/9662: 24 09 F0 04 32/9666: 00 00 F0 04 32/966A: 07 00 F0 04 32/966E: 10 03 F0 04 32/9672: 28 03 F0 04 32/9676: 01 00 F0 04 32/967A: 22 09 F0 04 32/967E: 00 00 E0 18 32/9682: 07 00 F0 18 32/9686: 01 00 00 18 ; animation frame data (tile indices) 32/968A: 49 4A 4B 4C 32/968E: 51 52 53 54 32/9692: 00 00 00 49 32/9696: 4D 00 4E 00 32/969A: 55 00 56 00 32/969E: 00 00 51 52 32/96A2: 00 00 49 4A 32/96A6: 4D 4E 4F 50 32/96AA: 55 56 57 58 32/96AE: 4A 4B 4C 4D 32/96B2: 52 53 54 55 32/96B6: 00 00 49 00 32/96BA: 00 00 4A 00 32/96BE: 00 00 51 00 32/96C2: 00 00 52 00 32/96C6: 00 00 00 51 32/96CA: 4B 4C 49 4A 32/96CE: 53 54 51 52 32/96D2: 49 4A 4A 49 32/96D6: 4B 4C 4C 4B 32/96DA: 51 52 52 51 32/96DE: 53 54 54 53 32/96E2: 49 49 49 49 32/96E6: 4A 4A 4A 4A 32/96EA: 4B 4B 4B 4B 32/96EE: 4C 4C 4C 4C 32/96F2: 49 4A 4C 4D 32/96F6: 4F 50 52 53 32/96FA: 4B 00 4E 00 32/96FE: 51 00 54 00 32/9702: 57 58 55 56 32/9706: 51 52 52 51 32/970A: 53 53 53 53 32/970E: 54 54 54 54 32/9712: 55 55 55 55 32/9716: 56 56 56 56 32/971A: 57 57 57 57 32/971E: 4B 4C 4D 4E 32/9722: 4F 50 51 52 32/9726: 53 54 55 56 32/972A: 4F 50 4D 4E ; character sprite frame tiles ; if msb set, don't add character tile offset 32/972E: 80 80 80 80 80 80 ; 00: none 32/9734: 00 01 02 03 06 07 ; 01: walking forward 32/973A: 00 01 02 03 04 05 ; 02: normal 32/9740: 08 09 0A 0B 0C 0D ; 03: kneeling 32/9746: B9 BA BB BC BD BE ; 04: animated 32/974C: 00 01 B9 03 BA 07 ; 05: cheer command 32/9752: 00 01 BB BC BD BE ; 06: left arm forward 32/9758: 00 BF 02 C0 C1 C2 ; 07: 32/975E: C3 C4 C5 C6 C7 C8 ; 08: scare, defend 32/9764: 00 01 02 03 04 05 ; 09: dead 32/976A: 80 80 80 80 80 01 ; 0A: walking (toad/mini) 32/9770: 80 80 80 80 80 00 ; 0B: normal (toad/mini) 32/9776: 80 80 80 80 80 02 ; 0C: kneeling (toad/mini) 32/977C: 80 80 80 80 80 03 ; 0D: 32/9782: 80 80 80 80 80 04 ; 0E: scare, defend, cheer (toad/mini) 32/9788: 80 80 80 80 80 05 ; 0F: hit (toad/mini) 32/978E: 80 80 80 80 06 07 ; 10: 32/9794: B9 BA BB BC BD BE ; 11: character 0 victory cheer 32/979A: BF C0 C1 C2 C3 C4 ; 12: character 1 victory cheer 32/97A0: C5 C6 C7 C8 C9 CA ; 13: character 2 victory cheer 32/97A6: CB CC CD CE CF D0 ; 14: character 3 victory cheer ; [ set backdrop color (crit flash) ] 32/97AC: 8D 07 7D STA $7D07 ; backdrop color 32/97AF: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ do hit animation ] ; A: hit animation id 32/97B2: 48 PHA 32/97B3: A6 CD LDX $CD 32/97B5: B5 BB LDA $BB,X 32/97B7: D0 02 BNE $97BB ; return if there are no hits 32/97B9: 68 PLA 32/97BA: 60 RTS 32/97BB: A5 CB LDA $CB 32/97BD: F0 10 BEQ $97CF ; branch if not a crit 32/97BF: A5 B7 LDA $B7 32/97C1: D0 0C BNE $97CF 32/97C3: A9 27 LDA #$27 ; orange 32/97C5: 20 AC 97 JSR $97AC ; set backdrop color 32/97C8: A9 0F LDA #$0F ; black 32/97CA: 85 B7 STA $B7 32/97CC: 20 AC 97 JSR $97AC ; set backdrop color 32/97CF: 68 PLA 32/97D0: 0A ASL 32/97D1: A8 TAY 32/97D2: B9 DF 97 LDA $97DF,Y 32/97D5: 85 7E STA $7E 32/97D7: B9 E0 97 LDA $97E0,Y 32/97DA: 85 7F STA $7F 32/97DC: 6C 7E 00 JMP ($007E) ; hit animation jump table 32/97DF: 991F 98E0 98D1 981C 9815 97EB ; hit 5: boomerang 32/97EB: A5 B8 LDA $B8 ; target id 32/97ED: 29 07 AND #$07 32/97EF: 0A ASL 32/97F0: A8 TAY 32/97F1: B9 D7 7D LDA $7DD7,Y ; center x position + 16 32/97F4: 18 CLC 32/97F5: 69 10 ADC #$10 32/97F7: 85 8C STA $8C ; x 32/97F9: B9 D8 7D LDA $7DD8,Y ; center y position + 16 32/97FC: 18 CLC 32/97FD: 69 10 ADC #$10 32/97FF: 85 8D STA $8D ; y 32/9801: A9 00 LDA #$00 32/9803: 85 8F STA $8F ; no flip 32/9805: A5 CD LDA $CD 32/9807: F0 05 BEQ $980E ; branch if right hand 32/9809: A9 11 LDA #$11 32/980B: 4C 10 98 JMP $9810 32/980E: A9 10 LDA #$10 32/9810: 85 8E STA $8E ; frame id 32/9812: 4C 57 93 JMP $9357 ; update animation sprite ; hit 4: shuriken 32/9815: A9 01 LDA #$01 32/9817: 85 90 STA $90 32/9819: 4C 23 98 JMP $9823 ; hit 3: arrow 32/981C: A9 00 LDA #$00 32/981E: 85 90 STA $90 32/9820: 4C 23 98 JMP $9823 ; this does nothing... 32/9823: A5 B8 LDA $B8 ; target 32/9825: 29 07 AND #$07 32/9827: 0A ASL 32/9828: A8 TAY 32/9829: B9 D7 7D LDA $7DD7,Y ; center x position 32/982C: 85 8C STA $8C 32/982E: B9 D8 7D LDA $7DD8,Y ; center y position 32/9831: 85 8D STA $8D 32/9833: A9 00 LDA #$00 ; rng 0 32/9835: 85 21 STA $21 32/9837: AA TAX 32/9838: A9 18 LDA #$18 32/983A: 20 EF FB JSR $FBEF ; random (X..A) 32/983D: 18 CLC 32/983E: 65 8C ADC $8C ; add to x 32/9840: 38 SEC 32/9841: E9 10 SBC #$10 32/9843: 85 8C STA $8C 32/9845: 20 4F A4 JSR $A44F 32/9848: A9 00 LDA #$00 ; rng 0 32/984A: 85 21 STA $21 32/984C: AA TAX 32/984D: A9 26 LDA #$26 32/984F: 20 EF FB JSR $FBEF ; random (X..A) 32/9852: 18 CLC 32/9853: 65 8D ADC $8D ; add to y 32/9855: 38 SEC 32/9856: E9 10 SBC #$10 32/9858: 85 8D STA $8D 32/985A: A5 90 LDA $90 32/985C: F0 06 BEQ $9864 ; branch if arrow 32/985E: 20 6C 98 JSR $986C 32/9861: 4C 67 98 JMP $9867 32/9864: 20 7C 98 JSR $987C 32/9867: C6 BD DEC $BD ; next hit 32/9869: D0 B8 BNE $9823 32/986B: 60 RTS ; [ ??? shuriken ] 32/986C: A5 CD LDA $CD 32/986E: F0 05 BEQ $9875 32/9870: A9 53 LDA #$53 32/9872: 4C 77 98 JMP $9877 32/9875: A9 4B LDA #$4B 32/9877: 85 8E STA $8E 32/9879: 4C 8C 98 JMP $988C ; [ ??? arrow ] 32/987C: A5 CD LDA $CD 32/987E: F0 05 BEQ $9885 32/9880: A9 4A LDA #$4A 32/9882: 4C 87 98 JMP $9887 32/9885: A9 52 LDA #$52 32/9887: 85 8E STA $8E 32/9889: 4C 8C 98 JMP $988C ; [ ] 32/988C: A9 DA LDA #$DA ; sound effect $5A 32/988E: 8D 49 7F STA $7F49 32/9891: 20 D2 90 JSR $90D2 ; check back attack 32/9894: D0 0E BNE $98A4 32/9896: A5 8C LDA $8C 32/9898: 49 FF EOR #$FF 32/989A: 18 CLC 32/989B: 69 F9 ADC #$F9 32/989D: 85 8C STA $8C 32/989F: A9 43 LDA #$43 32/98A1: 4C A6 98 JMP $98A6 32/98A4: A9 03 LDA #$03 32/98A6: 85 8F STA $8F 32/98A8: A6 C8 LDX $C8 32/98AA: A5 8D LDA $8D 32/98AC: 9D 00 02 STA $0200,X 32/98AF: E8 INX 32/98B0: A5 8E LDA $8E 32/98B2: 9D 00 02 STA $0200,X 32/98B5: E8 INX 32/98B6: A5 8F LDA $8F 32/98B8: 9D 00 02 STA $0200,X 32/98BB: E8 INX 32/98BC: A5 8C LDA $8C 32/98BE: 9D 00 02 STA $0200,X 32/98C1: E8 INX 32/98C2: 86 C8 STX $C8 32/98C4: A2 06 LDX #$06 ; fallthrough ; [ wait ] ; X: number of frames to wait 32/98C6: 8A TXA 32/98C7: 48 PHA 32/98C8: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/98CB: 68 PLA 32/98CC: AA TAX 32/98CD: CA DEX 32/98CE: D0 F6 BNE $98C6 32/98D0: 60 RTS ; hit 2: claw 32/98D1: 20 E8 98 JSR $98E8 32/98D4: A0 12 LDY #$12 32/98D6: A5 CD LDA $CD 32/98D8: F0 01 BEQ $98DB 32/98DA: C8 INY 32/98DB: 84 8E STY $8E 32/98DD: 4C 57 93 JMP $9357 ; update animation sprite ; hit 1: 32/98E0: 20 E8 98 JSR $98E8 32/98E3: A0 10 LDY #$10 32/98E5: 4C D6 98 JMP $98D6 ; [ ] 32/98E8: A5 B6 LDA $B6 ; animation frame counter 32/98EA: 29 01 AND #$01 32/98EC: D0 24 BNE $9912 32/98EE: A5 B8 LDA $B8 ; target id 32/98F0: 29 07 AND #$07 32/98F2: 0A ASL 32/98F3: A8 TAY 32/98F4: B9 D7 7D LDA $7DD7,Y ; center x position 32/98F7: 85 8C STA $8C 32/98F9: B9 D8 7D LDA $7DD8,Y ; center y position 32/98FC: 85 8D STA $8D 32/98FE: 20 4F A4 JSR $A44F 32/9901: 29 1F AND #$1F 32/9903: 18 CLC 32/9904: 65 8C ADC $8C 32/9906: 85 BE STA $BE 32/9908: 20 4F A4 JSR $A44F 32/990B: 29 1F AND #$1F 32/990D: 18 CLC 32/990E: 65 8D ADC $8D 32/9910: 85 BF STA $BF 32/9912: A5 BE LDA $BE 32/9914: 85 8C STA $8C 32/9916: A5 BF LDA $BF 32/9918: 85 8D STA $8D 32/991A: A9 00 LDA #$00 32/991C: 85 8F STA $8F 32/991E: 60 RTS ; hit 0: slice 32/991F: A5 B8 LDA $B8 ; target 32/9921: 29 07 AND #$07 32/9923: 0A ASL 32/9924: A8 TAY 32/9925: B9 D7 7D LDA $7DD7,Y ; center x position 32/9928: 85 7E STA $7E 32/992A: B9 D8 7D LDA $7DD8,Y ; center y position + 8 32/992D: 18 CLC 32/992E: 69 08 ADC #$08 32/9930: 85 7F STA $7F 32/9932: 20 6C 99 JSR $996C 32/9935: A4 B9 LDY $B9 32/9937: B9 68 99 LDA $9968,Y 32/993A: 85 7E STA $7E 32/993C: A2 00 LDX #$00 32/993E: 06 7E ASL $7E 32/9940: 90 08 BCC $994A 32/9942: A9 00 LDA #$00 32/9944: 9D 81 73 STA $7381,X ; hide masked sprites 32/9947: 9D 85 73 STA $7385,X 32/994A: 8A TXA 32/994B: 18 CLC 32/994C: 69 08 ADC #$08 32/994E: AA TAX 32/994F: E0 30 CPX #$30 32/9951: D0 EB BNE $993E 32/9953: E6 B9 INC $B9 32/9955: A0 00 LDY #$00 32/9957: A6 C8 LDX $C8 32/9959: B9 80 73 LDA $7380,Y ; copy 12 sprites 32/995C: 9D 00 02 STA $0200,X 32/995F: E8 INX 32/9960: C8 INY 32/9961: C0 30 CPY #$30 32/9963: D0 F4 BNE $9959 32/9965: 86 C8 STX $C8 32/9967: 60 RTS ; mask for slice hit 32/9968: 3F CF F3 FC ; [ update slice hit sprite data ] 32/996C: A2 00 LDX #$00 32/996E: A0 00 LDY #$00 32/9970: BD D2 99 LDA $99D2,X 32/9973: 18 CLC 32/9974: 65 7F ADC $7F 32/9976: 99 80 73 STA $7380,Y 32/9979: C8 INY 32/997A: A9 00 LDA #$00 32/997C: 99 80 73 STA $7380,Y 32/997F: C8 INY 32/9980: A9 03 LDA #$03 32/9982: 99 80 73 STA $7380,Y 32/9985: C8 INY 32/9986: BD D1 99 LDA $99D1,X 32/9989: 18 CLC 32/998A: 65 7E ADC $7E 32/998C: 99 80 73 STA $7380,Y 32/998F: E8 INX 32/9990: E8 INX 32/9991: C8 INY 32/9992: C0 30 CPY #$30 32/9994: D0 DA BNE $9970 32/9996: A2 00 LDX #$00 32/9998: A0 00 LDY #$00 32/999A: A5 CD LDA $CD 32/999C: F0 0B BEQ $99A9 32/999E: BD E9 99 LDA $99E9,X 32/99A1: F0 09 BEQ $99AC 32/99A3: 18 CLC 32/99A4: 69 08 ADC #$08 32/99A6: 4C AC 99 JMP $99AC 32/99A9: BD E9 99 LDA $99E9,X 32/99AC: 99 81 73 STA $7381,Y 32/99AF: 20 D2 90 JSR $90D2 ; check back attack 32/99B2: D0 13 BNE $99C7 32/99B4: B9 83 73 LDA $7383,Y 32/99B7: 49 FF EOR #$FF 32/99B9: 18 CLC 32/99BA: 69 F9 ADC #$F9 32/99BC: 99 83 73 STA $7383,Y 32/99BF: B9 82 73 LDA $7382,Y 32/99C2: 49 40 EOR #$40 32/99C4: 99 82 73 STA $7382,Y 32/99C7: C8 INY 32/99C8: C8 INY 32/99C9: C8 INY 32/99CA: C8 INY 32/99CB: E8 INX 32/99CC: C0 30 CPY #$30 32/99CE: D0 CA BNE $999A 32/99D0: 60 RTS ; xy positions for slice hit sprites 32/99D1: 08 E8 10 E8 00 F0 08 F0 32/99D9: F8 F8 00 F8 F0 00 F8 00 32/99E1: E8 08 F0 08 E0 10 E8 10 ; tile index for slice hit sprites 32/99E9: 4D 4E 4D 4F 4D 4F 4D 4F 4D 4F 00 50 ; -------------------------------------------------------------------------- ; [ add to +$8E ] 32/99F5: A2 00 LDX #$00 32/99F7: 18 CLC 32/99F8: 65 8E ADC $8E 32/99FA: 85 8E STA $8E 32/99FC: 8A TXA 32/99FD: 65 8F ADC $8F 32/99FF: 85 8F STA $8F 32/9A01: 60 RTS ; [ init monster select layout pointer ] ; +$8C: top row pointer ; +$8D: bottom row pointer 32/9A02: AD 7B 7D LDA $7D7B 32/9A05: 0A ASL 32/9A06: 0A ASL 32/9A07: 0A ASL 32/9A08: 18 CLC 32/9A09: 69 AD ADC #$AD ; 32/9EAD (monster select layout) 32/9A0B: 85 8C STA $8C 32/9A0D: 85 8E STA $8E 32/9A0F: A9 00 LDA #$00 32/9A11: 69 9E ADC #$9E 32/9A13: 85 8D STA $8D 32/9A15: 85 8F STA $8F 32/9A17: A9 04 LDA #$04 32/9A19: 4C F5 99 JMP $99F5 ; add to +$8E ; [ animation function $01: choose targets ] 32/9A1C: A9 01 LDA #$01 32/9A1E: 85 12 STA $12 32/9A20: 85 13 STA $13 32/9A22: A9 10 LDA #$10 32/9A24: 85 14 STA $14 32/9A26: 20 02 9A JSR $9A02 ; init monster select layout pointer 32/9A29: A9 00 LDA #$00 32/9A2B: 85 AF STA $AF 32/9A2D: 85 B0 STA $B0 32/9A2F: 85 B2 STA $B2 32/9A31: A5 B3 LDA $B3 32/9A33: 48 PHA 32/9A34: 29 01 AND #$01 32/9A36: 85 B3 STA $B3 32/9A38: 68 PLA 32/9A39: 29 02 AND #$02 32/9A3B: F0 0A BEQ $9A47 32/9A3D: A9 05 LDA #$05 ; all characters 32/9A3F: 85 B1 STA $B1 32/9A41: 20 80 9C JSR $9C80 32/9A44: 4C 4E 9A JMP $9A4E 32/9A47: A9 04 LDA #$04 ; single character 32/9A49: 85 B1 STA $B1 32/9A4B: 20 80 9C JSR $9C80 32/9A4E: 20 11 9F JSR $9F11 ; update status and target numeral sprites 32/9A51: 20 AA FB JSR $FBAA ; update joypad input 32/9A54: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 32/9A57: 20 69 9A JSR $9A69 32/9A5A: A5 AD LDA $AD 32/9A5C: 05 AE ORA $AE 32/9A5E: D0 EE BNE $9A4E 32/9A60: 60 RTS 32/9A61: 80 40 20 10 08 04 02 01 ; [ ] 32/9A69: 20 8C 9B JSR $9B8C 32/9A6C: E6 B6 INC $B6 32/9A6E: A9 00 LDA #$00 32/9A70: 85 87 STA $87 32/9A72: 85 88 STA $88 32/9A74: A9 20 LDA #$20 32/9A76: 85 C8 STA $C8 32/9A78: A5 AD LDA $AD 32/9A7A: F0 62 BEQ $9ADE 32/9A7C: 85 86 STA $86 32/9A7E: A2 00 LDX #$00 32/9A80: DD 61 9A CMP $9A61,X 32/9A83: F0 07 BEQ $9A8C 32/9A85: E8 INX 32/9A86: E0 08 CPX #$08 32/9A88: D0 F6 BNE $9A80 32/9A8A: F0 07 BEQ $9A93 32/9A8C: 8A TXA 32/9A8D: C9 04 CMP #$04 32/9A8F: 90 0F BCC $9AA0 32/9A91: B0 06 BCS $9A99 32/9A93: A5 B6 LDA $B6 32/9A95: 29 01 AND #$01 32/9A97: F0 07 BEQ $9AA0 32/9A99: 20 2E 9B JSR $9B2E 32/9A9C: A9 08 LDA #$08 32/9A9E: 85 87 STA $87 32/9AA0: 06 86 ASL $86 32/9AA2: 90 07 BCC $9AAB 32/9AA4: A9 00 LDA #$00 32/9AA6: 85 8E STA $8E 32/9AA8: 4C AF 9A JMP $9AAF 32/9AAB: A9 01 LDA #$01 32/9AAD: 85 8E STA $8E 32/9AAF: A9 00 LDA #$00 32/9AB1: 85 8F STA $8F 32/9AB3: A5 87 LDA $87 32/9AB5: 4A LSR 32/9AB6: AA TAX 32/9AB7: BD A7 7D LDA $7DA7,X 32/9ABA: C9 FF CMP #$FF 32/9ABC: D0 04 BNE $9AC2 32/9ABE: A9 01 LDA #$01 32/9AC0: 85 8E STA $8E 32/9AC2: A6 87 LDX $87 32/9AC4: BD E7 7D LDA $7DE7,X ; monster cursor position 32/9AC7: 85 8C STA $8C 32/9AC9: BD E8 7D LDA $7DE8,X 32/9ACC: 85 8D STA $8D 32/9ACE: 20 CB 92 JSR $92CB 32/9AD1: E6 87 INC $87 32/9AD3: E6 87 INC $87 32/9AD5: E6 88 INC $88 32/9AD7: A5 88 LDA $88 32/9AD9: C9 04 CMP #$04 32/9ADB: D0 C3 BNE $9AA0 32/9ADD: 60 RTS 32/9ADE: 20 37 9B JSR $9B37 32/9AE1: A5 AE LDA $AE 32/9AE3: 85 86 STA $86 32/9AE5: A5 B6 LDA $B6 32/9AE7: 29 01 AND #$01 32/9AE9: F0 07 BEQ $9AF2 32/9AEB: 20 2E 9B JSR $9B2E 32/9AEE: A9 00 LDA #$00 32/9AF0: 85 87 STA $87 32/9AF2: 06 86 ASL $86 32/9AF4: 90 07 BCC $9AFD 32/9AF6: A9 00 LDA #$00 32/9AF8: 85 8E STA $8E 32/9AFA: 4C 01 9B JMP $9B01 32/9AFD: A9 01 LDA #$01 32/9AFF: 85 8E STA $8E 32/9B01: A4 87 LDY $87 32/9B03: B9 9B 7D LDA $7D9B,Y 32/9B06: 29 08 AND #$08 32/9B08: F0 05 BEQ $9B0F 32/9B0A: A9 01 LDA #$01 32/9B0C: 4C 11 9B JMP $9B11 32/9B0F: A9 00 LDA #$00 32/9B11: 85 8F STA $8F 32/9B13: B9 00 73 LDA $7300,Y 32/9B16: 85 8C STA $8C 32/9B18: B9 01 73 LDA $7301,Y 32/9B1B: 18 CLC 32/9B1C: 69 08 ADC #$08 32/9B1E: 85 8D STA $8D 32/9B20: 20 CB 92 JSR $92CB 32/9B23: E6 87 INC $87 32/9B25: E6 87 INC $87 32/9B27: A5 87 LDA $87 32/9B29: C9 08 CMP #$08 32/9B2B: D0 C5 BNE $9AF2 32/9B2D: 60 RTS ; [ ] 32/9B2E: 06 86 ASL $86 32/9B30: 06 86 ASL $86 32/9B32: 06 86 ASL $86 32/9B34: 06 86 ASL $86 32/9B36: 60 RTS ; [ ] 32/9B37: A2 00 LDX #$00 32/9B39: 8A TXA 32/9B3A: 0A ASL 32/9B3B: A8 TAY 32/9B3C: BD 8B 7D LDA $7D8B,X 32/9B3F: C9 FF CMP #$FF 32/9B41: D0 0B BNE $9B4E 32/9B43: A9 FF LDA #$FF 32/9B45: 99 00 73 STA $7300,Y 32/9B48: 99 01 73 STA $7301,Y 32/9B4B: 4C 86 9B JMP $9B86 32/9B4E: A9 F0 LDA #$F0 32/9B50: 85 82 STA $82 32/9B52: B9 9B 7D LDA $7D9B,Y 32/9B55: 85 7E STA $7E 32/9B57: 29 80 AND #$80 32/9B59: F0 14 BEQ $9B6F 32/9B5B: A5 7E LDA $7E 32/9B5D: 29 08 AND #$08 32/9B5F: F0 07 BEQ $9B68 32/9B61: A9 18 LDA #$18 32/9B63: 85 82 STA $82 32/9B65: 4C 79 9B JMP $9B79 32/9B68: A9 E8 LDA #$E8 32/9B6A: 85 82 STA $82 32/9B6C: 4C 79 9B JMP $9B79 32/9B6F: A5 7E LDA $7E 32/9B71: 29 08 AND #$08 32/9B73: F0 04 BEQ $9B79 32/9B75: A9 10 LDA #$10 32/9B77: 85 82 STA $82 32/9B79: B5 C0 LDA $C0,X 32/9B7B: 18 CLC 32/9B7C: 65 82 ADC $82 32/9B7E: 99 00 73 STA $7300,Y 32/9B81: B5 C4 LDA $C4,X 32/9B83: 99 01 73 STA $7301,Y 32/9B86: E8 INX 32/9B87: E0 04 CPX #$04 32/9B89: D0 AE BNE $9B39 32/9B8B: 60 RTS ; [ ] 32/9B8C: A5 AD LDA $AD ; save target cursor variables 32/9B8E: 48 PHA 32/9B8F: A5 AE LDA $AE 32/9B91: 48 PHA 32/9B92: A5 AF LDA $AF 32/9B94: 48 PHA 32/9B95: A5 B0 LDA $B0 32/9B97: 48 PHA 32/9B98: A5 B1 LDA $B1 32/9B9A: 48 PHA 32/9B9B: 20 CD 9B JSR $9BCD ; get user input for target select 32/9B9E: A5 B3 LDA $B3 32/9BA0: D0 25 BNE $9BC7 ; branch if 32/9BA2: A5 B1 LDA $B1 32/9BA4: C9 01 CMP #$01 32/9BA6: F0 0F BEQ $9BB7 32/9BA8: C9 02 CMP #$02 32/9BAA: F0 0B BEQ $9BB7 32/9BAC: C9 03 CMP #$03 32/9BAE: F0 07 BEQ $9BB7 32/9BB0: C9 05 CMP #$05 32/9BB2: F0 03 BEQ $9BB7 32/9BB4: 4C C7 9B JMP $9BC7 32/9BB7: 68 PLA 32/9BB8: 85 B1 STA $B1 32/9BBA: 68 PLA 32/9BBB: 85 B0 STA $B0 32/9BBD: 68 PLA 32/9BBE: 85 AF STA $AF 32/9BC0: 68 PLA 32/9BC1: 85 AE STA $AE 32/9BC3: 68 PLA 32/9BC4: 85 AD STA $AD 32/9BC6: 60 RTS 32/9BC7: 68 PLA 32/9BC8: 68 PLA 32/9BC9: 68 PLA 32/9BCA: 68 PLA 32/9BCB: 68 PLA 32/9BCC: 60 RTS ; [ get user input for target select ] 32/9BCD: 20 02 9A JSR $9A02 ; init monster select layout pointer 32/9BD0: AD 12 00 LDA $0012 ; button pressed 32/9BD3: 48 PHA 32/9BD4: 29 F0 AND #$F0 32/9BD6: F0 05 BEQ $9BDD ; branch if no direction buttons pressed 32/9BD8: A9 98 LDA #$98 ; sound effect $18 32/9BDA: 8D 49 7F STA $7F49 32/9BDD: 68 PLA 32/9BDE: C9 80 CMP #$80 32/9BE0: F0 52 BEQ $9C34 32/9BE2: C9 40 CMP #$40 32/9BE4: F0 59 BEQ $9C3F 32/9BE6: C9 20 CMP #$20 32/9BE8: F0 60 BEQ $9C4A 32/9BEA: C9 10 CMP #$10 32/9BEC: F0 5F BEQ $9C4D 32/9BEE: C9 01 CMP #$01 32/9BF0: F0 05 BEQ $9BF7 32/9BF2: C9 02 CMP #$02 32/9BF4: F0 2E BEQ $9C24 32/9BF6: 60 RTS ; A button 32/9BF7: A9 85 LDA #$85 ; sound effect $05 32/9BF9: 8D 49 7F STA $7F49 32/9BFC: A5 AD LDA $AD 32/9BFE: F0 09 BEQ $9C09 ; branch if no monster targets 32/9C00: 85 B4 STA $B4 32/9C02: A9 C0 LDA #$C0 ; monster target 32/9C04: 85 B5 STA $B5 32/9C06: 4C 13 9C JMP $9C13 32/9C09: A5 AE LDA $AE 32/9C0B: 29 F0 AND #$F0 32/9C0D: 85 B4 STA $B4 32/9C0F: A9 40 LDA #$40 ; character target 32/9C11: 85 B5 STA $B5 32/9C13: 20 50 9C JSR $9C50 32/9C16: A6 A5 LDX $A5 32/9C18: A5 AD LDA $AD 32/9C1A: 9D 0F 7E STA $7E0F,X ; set selected targets for numeral display 32/9C1D: A9 00 LDA #$00 32/9C1F: 85 AD STA $AD 32/9C21: 85 AE STA $AE 32/9C23: 60 RTS ; B button 32/9C24: A9 00 LDA #$00 32/9C26: 85 AD STA $AD 32/9C28: 85 AE STA $AE 32/9C2A: 85 B4 STA $B4 ; clear targets 32/9C2C: 85 B5 STA $B5 32/9C2E: A6 A5 LDX $A5 32/9C30: 9D 0F 7E STA $7E0F,X 32/9C33: 60 RTS ; right button 32/9C34: 20 D2 90 JSR $90D2 ; check back attack 32/9C37: D0 03 BNE $9C3C 32/9C39: 4C 80 9C JMP $9C80 32/9C3C: 4C DC 9C JMP $9CDC ; left button 32/9C3F: 20 D2 90 JSR $90D2 ; check back attack 32/9C42: D0 03 BNE $9C47 32/9C44: 4C DC 9C JMP $9CDC 32/9C47: 4C 80 9C JMP $9C80 ; down button 32/9C4A: 4C 8E 9D JMP $9D8E ; up button 32/9C4D: 4C 4F 9D JMP $9D4F ; [ ] 32/9C50: A2 00 LDX #$00 32/9C52: BD 61 9A LDA $9A61,X 32/9C55: C5 B4 CMP $B4 32/9C57: D0 07 BNE $9C60 32/9C59: A5 B5 LDA $B5 32/9C5B: 29 BF AND #$BF 32/9C5D: 85 B5 STA $B5 32/9C5F: 60 RTS 32/9C60: E8 INX 32/9C61: E0 08 CPX #$08 32/9C63: D0 ED BNE $9C52 32/9C65: 60 RTS ; [ ] 32/9C66: E6 B0 INC $B0 32/9C68: A5 B0 LDA $B0 32/9C6A: 29 01 AND #$01 32/9C6C: 85 B0 STA $B0 32/9C6E: D0 02 BNE $9C72 32/9C70: E6 AF INC $AF 32/9C72: 60 RTS ; [ ] 32/9C73: C6 B0 DEC $B0 32/9C75: A5 B0 LDA $B0 32/9C77: 29 01 AND #$01 32/9C79: 85 B0 STA $B0 32/9C7B: F0 02 BEQ $9C7F 32/9C7D: C6 AF DEC $AF 32/9C7F: 60 RTS ; [ ] 32/9C80: A5 B1 LDA $B1 32/9C82: F0 2A BEQ $9CAE 32/9C84: C9 05 CMP #$05 32/9C86: F0 0D BEQ $9C95 32/9C88: C9 04 CMP #$04 32/9C8A: F0 0C BEQ $9C98 32/9C8C: C9 02 CMP #$02 32/9C8E: F0 1E BEQ $9CAE 32/9C90: C9 03 CMP #$03 32/9C92: F0 1A BEQ $9CAE 32/9C94: 60 RTS ; 5: all characters 32/9C95: 4C D0 9D JMP $9DD0 ; 4: single character 32/9C98: A9 03 LDA #$03 32/9C9A: 85 AF STA $AF 32/9C9C: A9 01 LDA #$01 32/9C9E: 85 B0 STA $B0 32/9CA0: 20 33 9D JSR $9D33 32/9CA3: 90 03 BCC $9CA8 32/9CA5: 4C 03 9E JMP $9E03 32/9CA8: 20 73 9C JSR $9C73 32/9CAB: 4C A0 9C JMP $9CA0 ; 0,2,3: single monster 32/9CAE: A5 AF LDA $AF 32/9CB0: D0 09 BNE $9CBB 32/9CB2: A9 00 LDA #$00 32/9CB4: 85 B0 STA $B0 32/9CB6: 85 AF STA $AF 32/9CB8: 4C 49 9E JMP $9E49 32/9CBB: C6 AF DEC $AF 32/9CBD: 20 33 9D JSR $9D33 32/9CC0: 90 03 BCC $9CC5 32/9CC2: 4C 03 9E JMP $9E03 32/9CC5: A9 01 LDA #$01 32/9CC7: 85 B0 STA $B0 32/9CC9: 20 33 9D JSR $9D33 32/9CCC: 90 03 BCC $9CD1 32/9CCE: 4C 03 9E JMP $9E03 32/9CD1: 20 73 9C JSR $9C73 32/9CD4: A5 AF LDA $AF 32/9CD6: C9 FF CMP #$FF 32/9CD8: F0 D8 BEQ $9CB2 32/9CDA: D0 ED BNE $9CC9 ; [ ] 32/9CDC: A5 B1 LDA $B1 32/9CDE: F0 28 BEQ $9D08 32/9CE0: C9 01 CMP #$01 32/9CE2: F0 0D BEQ $9CF1 32/9CE4: C9 04 CMP #$04 32/9CE6: F0 1D BEQ $9D05 32/9CE8: C9 02 CMP #$02 32/9CEA: F0 1C BEQ $9D08 32/9CEC: C9 03 CMP #$03 32/9CEE: F0 18 BEQ $9D08 32/9CF0: 60 RTS ; 1: all monsters 32/9CF1: A9 00 LDA #$00 32/9CF3: 85 AF STA $AF 32/9CF5: 85 B0 STA $B0 32/9CF7: 20 33 9D JSR $9D33 32/9CFA: 90 03 BCC $9CFF 32/9CFC: 4C 03 9E JMP $9E03 32/9CFF: 20 66 9C JSR $9C66 32/9D02: 4C F7 9C JMP $9CF7 ; 4: single character 32/9D05: 4C 1A 9E JMP $9E1A ; 0,2,3: single monster 32/9D08: A5 AF LDA $AF 32/9D0A: C9 03 CMP #$03 32/9D0C: D0 03 BNE $9D11 32/9D0E: 4C D0 9D JMP $9DD0 32/9D11: E6 AF INC $AF 32/9D13: 20 33 9D JSR $9D33 32/9D16: 90 03 BCC $9D1B 32/9D18: 4C 03 9E JMP $9E03 32/9D1B: A9 00 LDA #$00 32/9D1D: 85 B0 STA $B0 32/9D1F: 20 33 9D JSR $9D33 32/9D22: 90 03 BCC $9D27 32/9D24: 4C 03 9E JMP $9E03 32/9D27: 20 66 9C JSR $9C66 32/9D2A: A5 AF LDA $AF 32/9D2C: C9 04 CMP #$04 32/9D2E: D0 EF BNE $9D1F 32/9D30: 4C D0 9D JMP $9DD0 ; [ ] 32/9D33: A5 B0 LDA $B0 32/9D35: 29 01 AND #$01 32/9D37: 0A ASL 32/9D38: 0A ASL 32/9D39: 18 CLC 32/9D3A: 65 AF ADC $AF 32/9D3C: A8 TAY 32/9D3D: B1 8C LDA ($8C),Y 32/9D3F: C9 FF CMP #$FF 32/9D41: F0 0A BEQ $9D4D 32/9D43: A8 TAY 32/9D44: B9 A7 7D LDA $7DA7,Y 32/9D47: C9 FF CMP #$FF 32/9D49: F0 02 BEQ $9D4D 32/9D4B: 38 SEC 32/9D4C: 60 RTS 32/9D4D: 18 CLC 32/9D4E: 60 RTS ; [ ] 32/9D4F: A5 B1 LDA $B1 32/9D51: F0 25 BEQ $9D78 32/9D53: C9 04 CMP #$04 32/9D55: F0 09 BEQ $9D60 32/9D57: C9 03 CMP #$03 32/9D59: F0 01 BEQ $9D5C 32/9D5B: 60 RTS 32/9D5C: 20 03 9E JSR $9E03 32/9D5F: 60 RTS 32/9D60: C6 B2 DEC $B2 32/9D62: A5 B2 LDA $B2 32/9D64: 29 03 AND #$03 32/9D66: 85 B2 STA $B2 32/9D68: AA TAX 32/9D69: BD 8B 7D LDA $7D8B,X 32/9D6C: C9 FF CMP #$FF 32/9D6E: F0 F0 BEQ $9D60 32/9D70: BD 22 7E LDA $7E22,X 32/9D73: D0 EB BNE $9D60 32/9D75: 4C D0 9D JMP $9DD0 32/9D78: A5 B0 LDA $B0 32/9D7A: D0 03 BNE $9D7F 32/9D7C: 4C 71 9E JMP $9E71 32/9D7F: C6 B0 DEC $B0 32/9D81: 20 33 9D JSR $9D33 32/9D84: 90 03 BCC $9D89 32/9D86: 4C 03 9E JMP $9E03 32/9D89: E6 B0 INC $B0 32/9D8B: 4C 7C 9D JMP $9D7C 32/9D8E: A5 B1 LDA $B1 32/9D90: F0 24 BEQ $9DB6 32/9D92: C9 04 CMP #$04 32/9D94: F0 08 BEQ $9D9E 32/9D96: C9 02 CMP #$02 32/9D98: F0 01 BEQ $9D9B 32/9D9A: 60 RTS 32/9D9B: 4C 03 9E JMP $9E03 32/9D9E: E6 B2 INC $B2 32/9DA0: A5 B2 LDA $B2 32/9DA2: 29 03 AND #$03 32/9DA4: 85 B2 STA $B2 32/9DA6: AA TAX 32/9DA7: BD 8B 7D LDA $7D8B,X 32/9DAA: C9 FF CMP #$FF 32/9DAC: F0 F0 BEQ $9D9E 32/9DAE: BD 22 7E LDA $7E22,X 32/9DB1: D0 EB BNE $9D9E 32/9DB3: 4C D0 9D JMP $9DD0 32/9DB6: A5 B0 LDA $B0 32/9DB8: F0 03 BEQ $9DBD 32/9DBA: 4C 78 9E JMP $9E78 32/9DBD: E6 B0 INC $B0 32/9DBF: 20 33 9D JSR $9D33 32/9DC2: 90 03 BCC $9DC7 32/9DC4: 4C 03 9E JMP $9E03 32/9DC7: C6 B0 DEC $B0 32/9DC9: 4C BA 9D JMP $9DBA 32/9DCC: 88 32/9DCD: 44 32/9DCE: 22 32/9DCF: 11 ; [ ] 32/9DD0: A5 B2 LDA $B2 32/9DD2: 29 03 AND #$03 32/9DD4: 85 B2 STA $B2 32/9DD6: AA TAX 32/9DD7: BD 8B 7D LDA $7D8B,X ; character job 32/9DDA: C9 FF CMP #$FF 32/9DDC: F0 08 BEQ $9DE6 32/9DDE: BD 22 7E LDA $7E22,X 32/9DE1: D0 03 BNE $9DE6 32/9DE3: 4C EB 9D JMP $9DEB 32/9DE6: E6 B2 INC $B2 32/9DE8: 4C D0 9D JMP $9DD0 32/9DEB: A9 03 LDA #$03 32/9DED: 85 AF STA $AF 32/9DEF: A9 01 LDA #$01 32/9DF1: 85 B0 STA $B0 32/9DF3: A4 B2 LDY $B2 32/9DF5: B9 CC 9D LDA $9DCC,Y 32/9DF8: 85 AE STA $AE 32/9DFA: A9 00 LDA #$00 32/9DFC: 85 AD STA $AD 32/9DFE: A9 04 LDA #$04 ; select single character 32/9E00: 85 B1 STA $B1 32/9E02: 60 RTS ; [ ] 32/9E03: A5 B0 LDA $B0 32/9E05: 0A ASL 32/9E06: 0A ASL 32/9E07: 18 CLC 32/9E08: 65 AF ADC $AF 32/9E0A: A8 TAY 32/9E0B: B1 8C LDA ($8C),Y 32/9E0D: A8 TAY 32/9E0E: B9 61 9A LDA $9A61,Y 32/9E11: 85 AD STA $AD 32/9E13: A9 00 LDA #$00 ; select single monster 32/9E15: 85 AE STA $AE 32/9E17: 85 B1 STA $B1 32/9E19: 60 RTS ; [ ] 32/9E1A: A9 00 LDA #$00 32/9E1C: 85 AD STA $AD 32/9E1E: 85 AE STA $AE 32/9E20: A9 05 LDA #$05 ; select all characters 32/9E22: 85 B1 STA $B1 32/9E24: A2 00 LDX #$00 32/9E26: BD 8B 7D LDA $7D8B,X 32/9E29: C9 FF CMP #$FF 32/9E2B: F0 0B BEQ $9E38 32/9E2D: BD 22 7E LDA $7E22,X 32/9E30: D0 06 BNE $9E38 32/9E32: 38 SEC 32/9E33: 26 AE ROL $AE 32/9E35: 4C 3B 9E JMP $9E3B 32/9E38: 18 CLC 32/9E39: 26 AE ROL $AE 32/9E3B: E8 INX 32/9E3C: E0 04 CPX #$04 32/9E3E: D0 E6 BNE $9E26 32/9E40: 06 AE ASL $AE 32/9E42: 06 AE ASL $AE 32/9E44: 06 AE ASL $AE 32/9E46: 06 AE ASL $AE 32/9E48: 60 RTS ; [ ] 32/9E49: A9 00 LDA #$00 32/9E4B: 85 AD STA $AD 32/9E4D: 85 AE STA $AE 32/9E4F: 85 AF STA $AF 32/9E51: 85 B0 STA $B0 32/9E53: 85 B2 STA $B2 32/9E55: A9 01 LDA #$01 ; select all monsters 32/9E57: 85 B1 STA $B1 32/9E59: A2 00 LDX #$00 32/9E5B: BD A7 7D LDA $7DA7,X 32/9E5E: C9 FF CMP #$FF 32/9E60: F0 06 BEQ $9E68 32/9E62: 38 SEC 32/9E63: 26 AD ROL $AD 32/9E65: 4C 6B 9E JMP $9E6B 32/9E68: 18 CLC 32/9E69: 26 AD ROL $AD 32/9E6B: E8 INX 32/9E6C: E0 08 CPX #$08 32/9E6E: D0 EB BNE $9E5B 32/9E70: 60 RTS ; [ ] 32/9E71: A9 02 LDA #$02 32/9E73: 85 B1 STA $B1 32/9E75: 4C 7F 9E JMP $9E7F ; [ ] 32/9E78: A9 03 LDA #$03 ; 32/9E7A: 85 B1 STA $B1 32/9E7C: 4C 7F 9E JMP $9E7F ; [ ] 32/9E7F: A9 00 LDA #$00 32/9E81: 85 AD STA $AD 32/9E83: 85 AE STA $AE 32/9E85: A5 B0 LDA $B0 32/9E87: 0A ASL 32/9E88: 0A ASL 32/9E89: 18 CLC 32/9E8A: 65 AF ADC $AF 32/9E8C: A8 TAY 32/9E8D: B1 8C LDA ($8C),Y 32/9E8F: A8 TAY 32/9E90: B9 A7 7D LDA $7DA7,Y 32/9E93: 85 7E STA $7E 32/9E95: A2 00 LDX #$00 32/9E97: BD A7 7D LDA $7DA7,X 32/9E9A: C5 7E CMP $7E 32/9E9C: D0 06 BNE $9EA4 32/9E9E: 38 SEC 32/9E9F: 26 AD ROL $AD 32/9EA1: 4C A7 9E JMP $9EA7 32/9EA4: 18 CLC 32/9EA5: 26 AD ROL $AD 32/9EA7: E8 INX 32/9EA8: E0 08 CPX #$08 32/9EAA: D0 EB BNE $9E97 32/9EAC: 60 RTS ; monster select layout for each monster tilemap ; 10 * 8 bytes, 4 bytes per row, top then bottom 32/9EAD: 00 02 04 06 01 03 05 07 32/9EB5: 00 02 04 06 01 03 05 07 32/9EBD: 00 01 03 05 FF 02 04 06 32/9EC5: 00 02 04 FF 01 03 05 FF 32/9ECD: 00 01 03 FF FF 02 04 FF 32/9ED5: 00 01 02 FF FF FF 03 FF 32/9EDD: 00 01 02 FF FF FF FF FF 32/9EE5: 00 02 FF FF 01 03 FF FF 32/9EED: 00 01 FF FF FF 02 FF FF 32/9EF5: 00 FF FF FF FF FF FF FF ; -------------------------------------------------------------------------- ; sprite data for status animations 32/9EFD: 00 00 03 00 32/9F01: 00 00 03 08 ; sprite data for status animations (back attack) 32/9F05: 00 00 43 08 32/9F09: 00 00 43 00 32/9F0D: 49 4D 51 55 ; [ animation function $03: update status and target numeral sprites ] 32/9F11: A5 AC LDA $AC 32/9F13: D0 01 BNE $9F16 32/9F15: 60 RTS 32/9F16: A2 00 LDX #$00 32/9F18: 86 A3 STX $A3 32/9F1A: B5 C0 LDA $C0,X ; character x position 32/9F1C: 85 9D STA $9D 32/9F1E: B5 C4 LDA $C4,X ; character y position 32/9F20: 85 9E STA $9E 32/9F22: 20 D2 90 JSR $90D2 ; check back attack 32/9F25: D0 0E BNE $9F35 32/9F27: A5 9D LDA $9D 32/9F29: 49 FF EOR #$FF 32/9F2B: 18 CLC 32/9F2C: 69 F1 ADC #$F1 32/9F2E: 85 9D STA $9D 32/9F30: A9 08 LDA #$08 32/9F32: 4C 37 9F JMP $9F37 32/9F35: A9 00 LDA #$00 32/9F37: 18 CLC 32/9F38: 69 FD ADC #$FD ; 32/9EFD 32/9F3A: 85 A1 STA $A1 32/9F3C: A9 00 LDA #$00 32/9F3E: 69 9E ADC #$9E 32/9F40: 85 A2 STA $A2 32/9F42: BD 0D 9F LDA $9F0D,X 32/9F45: 85 9F STA $9F 32/9F47: 8A TXA 32/9F48: 0A ASL 32/9F49: 0A ASL 32/9F4A: 0A ASL 32/9F4B: 85 A0 STA $A0 ; pointer to first sprite 32/9F4D: A5 B7 LDA $B7 32/9F4F: 29 08 AND #$08 32/9F51: 4A LSR 32/9F52: 4A LSR 32/9F53: 18 CLC 32/9F54: 65 9F ADC $9F 32/9F56: 85 9F STA $9F 32/9F58: BD B7 7D LDA $7DB7,X 32/9F5B: C9 FF CMP #$FF 32/9F5D: D0 02 BNE $9F61 ; branch if no status to show 32/9F5F: 85 9F STA $9F 32/9F61: 20 E4 9F JSR $9FE4 ; update status animation sprites 32/9F64: A6 A3 LDX $A3 ; next character 32/9F66: E8 INX 32/9F67: E0 04 CPX #$04 32/9F69: D0 AD BNE $9F18 32/9F6B: 20 71 9F JSR $9F71 ; update character target numerals 32/9F6E: E6 B7 INC $B7 32/9F70: 60 RTS ; [ update character target numerals ] 32/9F71: A9 F0 LDA #$F0 32/9F73: A2 00 LDX #$00 32/9F75: 9D 60 02 STA $0260,X 32/9F78: E8 INX 32/9F79: E0 20 CPX #$20 32/9F7B: D0 F8 BNE $9F75 32/9F7D: A5 B7 LDA $B7 ; persistent frame counter 32/9F7F: 29 18 AND #$18 ; change character every 8 frames 32/9F81: 4A LSR 32/9F82: 4A LSR 32/9F83: 4A LSR 32/9F84: 85 A3 STA $A3 ; character id 32/9F86: AA TAX 32/9F87: BD 0F 7E LDA $7E0F,X ; character's selected targets 32/9F8A: 85 A4 STA $A4 32/9F8C: A0 00 LDY #$00 32/9F8E: 06 A4 ASL $A4 32/9F90: 90 4C BCC $9FDE ; branch if target not included 32/9F92: 98 TYA 32/9F93: 0A ASL 32/9F94: AA TAX 32/9F95: BD F7 7D LDA $7DF7,X ; front x position 32/9F98: 85 9D STA $9D 32/9F9A: A5 A3 LDA $A3 32/9F9C: 0A ASL 32/9F9D: 0A ASL 32/9F9E: 0A ASL 32/9F9F: 18 CLC 32/9FA0: 65 9D ADC $9D 32/9FA2: 85 9D STA $9D 32/9FA4: 20 D2 90 JSR $90D2 ; check back attack 32/9FA7: D0 0C BNE $9FB5 32/9FA9: A5 9D LDA $9D 32/9FAB: 49 FF EOR #$FF 32/9FAD: 18 CLC 32/9FAE: 69 F1 ADC #$F1 32/9FB0: 85 9D STA $9D 32/9FB2: 4C BC 9F JMP $9FBC 32/9FB5: A5 9D LDA $9D 32/9FB7: 18 CLC 32/9FB8: 69 08 ADC #$08 32/9FBA: 85 9D STA $9D 32/9FBC: BD F8 7D LDA $7DF8,X ; top y position 32/9FBF: 85 9E STA $9E 32/9FC1: 8A TXA 32/9FC2: 0A ASL 32/9FC3: 18 CLC 32/9FC4: 69 60 ADC #$60 32/9FC6: AA TAX 32/9FC7: A5 9E LDA $9E 32/9FC9: 9D 00 02 STA $0200,X 32/9FCC: A5 A3 LDA $A3 32/9FCE: 18 CLC 32/9FCF: 69 3A ADC #$3A ; "1" 32/9FD1: 9D 01 02 STA $0201,X 32/9FD4: A9 03 LDA #$03 32/9FD6: 9D 02 02 STA $0202,X 32/9FD9: A5 9D LDA $9D 32/9FDB: 9D 03 02 STA $0203,X 32/9FDE: C8 INY ; next target 32/9FDF: C0 08 CPY #$08 32/9FE1: D0 AB BNE $9F8E 32/9FE3: 60 RTS ; [ update status animation sprites ] 32/9FE4: A0 00 LDY #$00 32/9FE6: A6 A0 LDX $A0 32/9FE8: B1 A1 LDA ($A1),Y 32/9FEA: 18 CLC 32/9FEB: 65 9E ADC $9E 32/9FED: 9D 00 02 STA $0200,X 32/9FF0: C8 INY 32/9FF1: A5 9F LDA $9F 32/9FF3: C9 FF CMP #$FF 32/9FF5: D0 08 BNE $9FFF ; branch if status sprite 32/9FF7: A9 00 LDA #$00 32/9FF9: 9D 01 02 STA $0201,X 32/9FFC: 4C 04 A0 JMP $A004 32/9FFF: 9D 01 02 STA $0201,X ; tile id 33/A002: E6 9F INC $9F 33/A004: 8A TXA 33/A005: 48 PHA 33/A006: C8 INY 33/A007: B1 A1 LDA ($A1),Y 33/A009: 85 A7 STA $A7 33/A00B: A6 A3 LDX $A3 33/A00D: BD B7 7D LDA $7DB7,X 33/A010: C9 FF CMP #$FF 33/A012: F0 1B BEQ $A02F 33/A014: AA TAX 33/A015: A5 A7 LDA $A7 33/A017: 29 FC AND #$FC 33/A019: 1D 51 A0 ORA $A051,X ; palette 33/A01C: 85 A7 STA $A7 33/A01E: BD 49 A0 LDA $A049,X ; y offset 33/A021: 85 A8 STA $A8 33/A023: 68 PLA 33/A024: AA TAX 33/A025: 48 PHA 33/A026: A5 A8 LDA $A8 33/A028: 18 CLC 33/A029: 7D 00 02 ADC $0200,X 33/A02C: 9D 00 02 STA $0200,X 33/A02F: 68 PLA 33/A030: AA TAX 33/A031: A5 A7 LDA $A7 33/A033: 9D 02 02 STA $0202,X 33/A036: C8 INY 33/A037: B1 A1 LDA ($A1),Y 33/A039: 18 CLC 33/A03A: 65 9D ADC $9D 33/A03C: 9D 03 02 STA $0203,X 33/A03F: C8 INY ; next sprite (2 total) 33/A040: E8 INX 33/A041: E8 INX 33/A042: E8 INX 33/A043: E8 INX 33/A044: C0 08 CPY #$08 33/A046: D0 A0 BNE $9FE8 33/A048: 60 RTS ; y offset for status sprites 33/A049: FC FC FC FC 09 FC FC FC ; palette for status sprites 33/A051: 00 01 02 00 03 00 00 03 ; -------------------------------------------------------------------------- ; [ reset animation frame counter ] 33/A059: A9 00 LDA #$00 33/A05B: 85 B6 STA $B6 33/A05D: 60 RTS ; [ reset animation sprites ] 33/A05E: A9 00 LDA #$00 ; reset sprite pointer 33/A060: 85 C8 STA $C8 33/A062: 4C 2B A4 JMP $A42B ; clear animation oam data ; [ update animation then attacker sprite ] ; X: animation sprite frame ; A: attacker sprite frame 33/A065: 48 PHA 33/A066: 8A TXA 33/A067: 20 EB A3 JSR $A3EB ; update animation sprite 33/A06A: 68 PLA 33/A06B: 4C DD A3 JMP $A3DD ; update attacking character sprite ; [ update attacker then animation sprite ] 33/A06E: 48 PHA 33/A06F: 8A TXA 33/A070: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A073: 68 PLA 33/A074: 4C EB A3 JMP $A3EB ; update animation sprite ; max number of hits for each weapon animation 33/A077: 07 05 05 07 05 07 07 07 07 ; weapon animation jump table 33/A080: A2F2 A365 A36F A251 A1A5 A12C A125 A1EF 33/A090: A2F2 A2FB ; [ do weapon animation (one hand) ] ; A: weapon animation id ; 0: unarmed ; 1: axe, spear, knife, sword ; 2: nunchuck, rod, staff, hammer ; 3: bow ; 4: harp ; 5: boomerang ; 6: fullmoon ; 7: shuriken ; 8: arrow ; 9: claw 33/A094: 85 7E STA $7E 33/A096: A9 00 LDA #$00 33/A098: 85 B7 STA $B7 33/A09A: A6 CD LDX $CD 33/A09C: B5 BB LDA $BB,X 33/A09E: A4 7E LDY $7E 33/A0A0: D9 77 A0 CMP $A077,Y ; limit max number of hits 33/A0A3: 90 0A BCC $A0AF 33/A0A5: B9 77 A0 LDA $A077,Y 33/A0A8: 38 SEC 33/A0A9: E9 01 SBC #$01 33/A0AB: A6 CD LDX $CD 33/A0AD: 95 BB STA $BB,X 33/A0AF: A5 7E LDA $7E 33/A0B1: 0A ASL 33/A0B2: A8 TAY 33/A0B3: B9 80 A0 LDA $A080,Y 33/A0B6: 85 7E STA $7E 33/A0B8: B9 81 A0 LDA $A081,Y 33/A0BB: 85 7F STA $7F 33/A0BD: 6C 7E 00 JMP ($007E) ; [ animation function $04: weapon animation ] 33/A0C0: 20 C3 A6 JSR $A6C3 ; check if attacker confused 33/A0C3: 90 06 BCC $A0CB ; branch if not confused 33/A0C5: A9 00 LDA #$00 33/A0C7: 85 BB STA $BB 33/A0C9: 85 BC STA $BC 33/A0CB: A9 00 LDA #$00 ; right hand first 33/A0CD: 85 CD STA $CD 33/A0CF: AD 1F 7E LDA $7E1F 33/A0D2: C9 03 CMP #$03 33/A0D4: D0 0B BNE $A0E1 ; branch if not bow (right hand) 33/A0D6: AD 20 7E LDA $7E20 33/A0D9: C9 08 CMP #$08 33/A0DB: D0 1B BNE $A0F8 ; branch if not arrow (left hand) 33/A0DD: A9 00 LDA #$00 33/A0DF: F0 0D BEQ $A0EE 33/A0E1: C9 08 CMP #$08 33/A0E3: D0 13 BNE $A0F8 ; branch if not arrow (right hand) 33/A0E5: AD 20 7E LDA $7E20 33/A0E8: C9 03 CMP #$03 33/A0EA: D0 0C BNE $A0F8 ; branch if not bow (left hand) ; bow + arrow 33/A0EC: A9 01 LDA #$01 ; left hand only 33/A0EE: 85 CD STA $CD 33/A0F0: 20 4C A2 JSR $A24C 33/A0F3: A9 03 LDA #$03 33/A0F5: 4C 94 A0 JMP $A094 ; do weapon animation 33/A0F8: AD 1F 7E LDA $7E1F 33/A0FB: C9 04 CMP #$04 33/A0FD: D0 06 BNE $A105 ; branch if not harp (right hand) ; harp 33/A0FF: 20 4C A2 JSR $A24C 33/A102: 4C 0C A1 JMP $A10C ; all others 33/A105: AD 20 7E LDA $7E20 33/A108: C9 04 CMP #$04 33/A10A: F0 F3 BEQ $A0FF ; branch if harp (left hand) 33/A10C: AD 1F 7E LDA $7E1F 33/A10F: 20 94 A0 JSR $A094 ; do weapon animation 33/A112: A9 01 LDA #$01 ; left hand second 33/A114: 85 CD STA $CD 33/A116: AD 20 7E LDA $7E20 33/A119: 4C 94 A0 JMP $A094 ; do weapon animation ; [ ] 33/A11C: 20 45 A2 JSR $A245 ; init animation hits counter 33/A11F: 20 38 A4 JSR $A438 ; load current hand hit palette 33/A122: 4C 0F A4 JMP $A40F ; save character animations frames ; 6: fullmoon 33/A125: A9 04 LDA #$04 33/A127: 85 89 STA $89 33/A129: 4C 30 A1 JMP $A130 ; 5: boomerang 33/A12C: A9 00 LDA #$00 33/A12E: 85 89 STA $89 33/A130: 20 1C A1 JSR $A11C 33/A133: A6 95 LDX $95 33/A135: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A138: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A13B: A9 BB LDA #$BB 33/A13D: 8D 49 7F STA $7F49 33/A140: 20 5E A0 JSR $A05E ; reset animation sprites 33/A143: A5 89 LDA $89 33/A145: C9 04 CMP #$04 33/A147: D0 07 BNE $A150 33/A149: A9 14 LDA #$14 33/A14B: 85 88 STA $88 33/A14D: 4C 54 A1 JMP $A154 33/A150: A9 00 LDA #$00 33/A152: 85 88 STA $88 33/A154: A5 B6 LDA $B6 33/A156: 29 08 AND #$08 33/A158: D0 1F BNE $A179 33/A15A: A5 CD LDA $CD 33/A15C: F0 0E BEQ $A16C 33/A15E: A9 22 LDA #$22 33/A160: 18 CLC 33/A161: 65 88 ADC $88 33/A163: AA TAX 33/A164: A9 07 LDA #$07 33/A166: 20 65 A0 JSR $A065 33/A169: 4C 95 A1 JMP $A195 33/A16C: A2 05 LDX #$05 33/A16E: A9 20 LDA #$20 33/A170: 18 CLC 33/A171: 65 88 ADC $88 33/A173: 20 6E A0 JSR $A06E 33/A176: 4C 95 A1 JMP $A195 33/A179: A5 CD LDA $CD 33/A17B: F0 0E BEQ $A18B 33/A17D: A9 23 LDA #$23 33/A17F: 18 CLC 33/A180: 65 88 ADC $88 33/A182: AA TAX 33/A183: A9 06 LDA #$06 33/A185: 20 65 A0 JSR $A065 33/A188: 4C 95 A1 JMP $A195 33/A18B: A2 01 LDX #$01 33/A18D: A9 21 LDA #$21 33/A18F: 18 CLC 33/A190: 65 88 ADC $88 33/A192: 20 6E A0 JSR $A06E 33/A195: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/A198: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A19B: 29 10 AND #$10 33/A19D: F0 A1 BEQ $A140 33/A19F: 20 D4 A4 JSR $A4D4 ; boomerang hit animation 33/A1A2: 4C 35 AC JMP $AC35 ; clean up after animation ; 4: harp 33/A1A5: 20 1C A1 JSR $A11C 33/A1A8: A6 95 LDX $95 33/A1AA: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A1AD: A9 8B LDA #$8B 33/A1AF: 8D 49 7F STA $7F49 33/A1B2: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A1B5: 85 B9 STA $B9 33/A1B7: 20 5E A0 JSR $A05E ; reset animation sprites 33/A1BA: A5 CD LDA $CD 33/A1BC: F0 0A BEQ $A1C8 33/A1BE: A2 06 LDX #$06 33/A1C0: A9 0F LDA #$0F 33/A1C2: 20 6E A0 JSR $A06E 33/A1C5: 4C CF A1 JMP $A1CF 33/A1C8: A2 0E LDX #$0E 33/A1CA: A9 07 LDA #$07 33/A1CC: 20 65 A0 JSR $A065 33/A1CF: A5 B6 LDA $B6 33/A1D1: 29 08 AND #$08 33/A1D3: F0 05 BEQ $A1DA 33/A1D5: A9 01 LDA #$01 33/A1D7: 20 B2 97 JSR $97B2 ; do hit animation 33/A1DA: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/A1DD: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A1E0: 29 10 AND #$10 33/A1E2: F0 D3 BEQ $A1B7 33/A1E4: A5 BD LDA $BD 33/A1E6: F0 04 BEQ $A1EC 33/A1E8: C6 BD DEC $BD 33/A1EA: D0 C6 BNE $A1B2 33/A1EC: 4C 3A AC JMP $AC3A ; clean up after animation ; 7: shuriken 33/A1EF: 20 1C A1 JSR $A11C 33/A1F2: A6 95 LDX $95 33/A1F4: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A1F7: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A1FA: A9 AF LDA #$AF 33/A1FC: 8D 49 7F STA $7F49 33/A1FF: 20 5E A0 JSR $A05E ; reset animation sprites 33/A202: A5 B6 LDA $B6 33/A204: 29 08 AND #$08 33/A206: D0 18 BNE $A220 33/A208: A5 CD LDA $CD 33/A20A: F0 0A BEQ $A216 33/A20C: A2 07 LDX #$07 33/A20E: A9 1E LDA #$1E 33/A210: 20 6E A0 JSR $A06E 33/A213: 4C 35 A2 JMP $A235 33/A216: A2 05 LDX #$05 33/A218: A9 18 LDA #$18 33/A21A: 20 6E A0 JSR $A06E 33/A21D: 4C 35 A2 JMP $A235 33/A220: A5 CD LDA $CD 33/A222: F0 0A BEQ $A22E 33/A224: A2 06 LDX #$06 33/A226: A9 1F LDA #$1F 33/A228: 20 6E A0 JSR $A06E 33/A22B: 4C 35 A2 JMP $A235 33/A22E: A2 01 LDX #$01 33/A230: A9 19 LDA #$19 33/A232: 20 6E A0 JSR $A06E 33/A235: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/A238: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A23B: 29 10 AND #$10 33/A23D: F0 C0 BEQ $A1FF 33/A23F: 20 FE A5 JSR $A5FE ; shuriken hit animation 33/A242: 4C 35 AC JMP $AC35 ; clean up after animation ; [ init animation hits counter ] 33/A245: A6 CD LDX $CD 33/A247: B5 BB LDA $BB,X 33/A249: 85 BD STA $BD 33/A24B: 60 RTS ; [ ] 33/A24C: A5 BB LDA $BB 33/A24E: 85 BC STA $BC 33/A250: 60 RTS ; 3: bow 33/A251: 20 45 A2 JSR $A245 ; init animation hits counter 33/A254: AD 17 7E LDA $7E17 ; swap left and right hand hit palette 33/A257: 48 PHA 33/A258: AD 18 7E LDA $7E18 33/A25B: 8D 17 7E STA $7E17 33/A25E: 68 PLA 33/A25F: 8D 18 7E STA $7E18 33/A262: 20 38 A4 JSR $A438 ; load current hand hit palette 33/A265: 20 0F A4 JSR $A40F ; save character animations frames 33/A268: A6 95 LDX $95 33/A26A: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A26D: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A270: A9 AF LDA #$AF ; sound effect $2F 33/A272: 8D 49 7F STA $7F49 33/A275: 20 5E A0 JSR $A05E ; reset animation sprites 33/A278: A5 B6 LDA $B6 33/A27A: 29 08 AND #$08 33/A27C: D0 22 BNE $A2A0 ; branch after first 7 frames ; frame 0-7 33/A27E: A5 CD LDA $CD 33/A280: F0 0F BEQ $A291 ; branch if right hand 33/A282: A2 06 LDX #$06 33/A284: A9 0B LDA #$0B 33/A286: 20 6E A0 JSR $A06E 33/A289: A9 07 LDA #$07 33/A28B: 20 EB A3 JSR $A3EB ; update animation sprite 33/A28E: 4C BF A2 JMP $A2BF 33/A291: A9 05 LDA #$05 33/A293: 20 EB A3 JSR $A3EB ; update animation sprite 33/A296: A2 09 LDX #$09 33/A298: A9 01 LDA #$01 33/A29A: 20 65 A0 JSR $A065 33/A29D: 4C BF A2 JMP $A2BF ; frame 8-15 33/A2A0: A5 CD LDA $CD 33/A2A2: F0 0F BEQ $A2B3 ; branch if right hand 33/A2A4: A2 06 LDX #$06 33/A2A6: A9 0C LDA #$0C 33/A2A8: 20 6E A0 JSR $A06E 33/A2AB: A9 08 LDA #$08 33/A2AD: 20 EB A3 JSR $A3EB ; update animation sprite 33/A2B0: 4C BF A2 JMP $A2BF 33/A2B3: A9 06 LDA #$06 33/A2B5: 20 EB A3 JSR $A3EB ; update animation sprite 33/A2B8: A2 0A LDX #$0A 33/A2BA: A9 01 LDA #$01 33/A2BC: 20 65 A0 JSR $A065 33/A2BF: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/A2C2: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A2C5: 29 10 AND #$10 33/A2C7: F0 AC BEQ $A275 33/A2C9: 20 D2 A6 JSR $A6D2 ; arrow hit animation 33/A2CC: 4C 35 AC JMP $AC35 ; clean up after animation ; [ check if toad or mini ] 33/A2CF: A5 95 LDA $95 33/A2D1: 0A ASL 33/A2D2: A8 TAY 33/A2D3: B9 9B 7D LDA $7D9B,Y 33/A2D6: 29 05 AND #$05 33/A2D8: 60 RTS ; [ ] 33/A2D9: 48 PHA 33/A2DA: 20 CF A2 JSR $A2CF ; check if toad or mini 33/A2DD: F0 0F BEQ $A2EE 33/A2DF: 68 PLA 33/A2E0: A5 B6 LDA $B6 33/A2E2: 29 02 AND #$02 33/A2E4: F0 04 BEQ $A2EA 33/A2E6: A9 0A LDA #$0A 33/A2E8: D0 05 BNE $A2EF 33/A2EA: A9 0D LDA #$0D 33/A2EC: D0 01 BNE $A2EF 33/A2EE: 68 PLA 33/A2EF: 4C DD A3 JMP $A3DD ; update attacking character sprite ; 0: unarmed 33/A2F2: AD 1F 7E LDA $7E1F 33/A2F5: 0D 20 7E ORA $7E20 33/A2F8: F0 01 BEQ $A2FB ; no animation if other hand has a weapon 33/A2FA: 60 RTS ; 9: claw 33/A2FB: 20 1C A1 JSR $A11C 33/A2FE: A6 95 LDX $95 33/A300: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A303: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A306: A9 8A LDA #$8A 33/A308: 8D 49 7F STA $7F49 33/A30B: 20 5E A0 JSR $A05E ; reset animation sprites 33/A30E: A5 CD LDA $CD 33/A310: F0 18 BEQ $A32A 33/A312: A9 06 LDA #$06 33/A314: 20 D9 A2 JSR $A2D9 33/A317: 20 4F A4 JSR $A44F 33/A31A: 29 01 AND #$01 33/A31C: 85 7E STA $7E 33/A31E: 20 4F A4 JSR $A44F 33/A321: 29 01 AND #$01 33/A323: 85 7F STA $7F 33/A325: A9 0D LDA #$0D 33/A327: 4C 3F A3 JMP $A33F 33/A32A: A9 05 LDA #$05 33/A32C: 20 D9 A2 JSR $A2D9 33/A32F: 20 4F A4 JSR $A44F 33/A332: 29 01 AND #$01 33/A334: 85 7E STA $7E 33/A336: 20 4F A4 JSR $A44F 33/A339: 29 01 AND #$01 33/A33B: 85 7F STA $7F 33/A33D: A9 04 LDA #$04 33/A33F: 48 PHA 33/A340: 20 CF A2 JSR $A2CF ; check if toad or mini 33/A343: D0 05 BNE $A34A 33/A345: 68 PLA 33/A346: 48 PHA 33/A347: 20 A1 92 JSR $92A1 ; update animation sprite 33/A34A: 68 PLA 33/A34B: A9 02 LDA #$02 ; hit animation 2 33/A34D: 20 B2 97 JSR $97B2 ; do hit animation 33/A350: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/A353: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A356: 29 08 AND #$08 33/A358: F0 B1 BEQ $A30B 33/A35A: A5 BD LDA $BD 33/A35C: F0 04 BEQ $A362 33/A35E: C6 BD DEC $BD 33/A360: D0 A1 BNE $A303 33/A362: 4C 35 AC JMP $AC35 ; clean up after animation ; 1: axe, spear, knife, sword 33/A365: 20 45 A2 JSR $A245 ; init animation hits counter 33/A368: A9 00 LDA #$00 ; hit animation 0 (slice) 33/A36A: 85 BA STA $BA 33/A36C: 4C 79 A3 JMP $A379 ; 2: nunchuck, rod, staff, hammer 33/A36F: 20 45 A2 JSR $A245 ; init animation hits counter 33/A372: A9 01 LDA #$01 ; hit animation 1 33/A374: 85 BA STA $BA 33/A376: 4C 79 A3 JMP $A379 ; [ ] 33/A379: 20 38 A4 JSR $A438 ; load current hand hit palette 33/A37C: 20 0F A4 JSR $A40F ; save character animations frames 33/A37F: A6 95 LDX $95 ; attacker id 33/A381: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A384: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A387: 85 B9 STA $B9 33/A389: A9 B6 LDA #$B6 33/A38B: 8D 49 7F STA $7F49 33/A38E: 20 5E A0 JSR $A05E ; reset animation sprites 33/A391: A5 B6 LDA $B6 33/A393: 29 04 AND #$04 33/A395: D0 18 BNE $A3AF ; branch on frames 4-7 33/A397: A5 CD LDA $CD 33/A399: F0 0A BEQ $A3A5 ; left hand back 33/A39B: A2 02 LDX #$02 33/A39D: A9 07 LDA #$07 33/A39F: 20 65 A0 JSR $A065 33/A3A2: 4C C8 A3 JMP $A3C8 ; right hand back 33/A3A5: A2 05 LDX #$05 33/A3A7: A9 00 LDA #$00 33/A3A9: 20 6E A0 JSR $A06E 33/A3AC: 4C C8 A3 JMP $A3C8 ; left hand forward + hit 33/A3AF: A5 CD LDA $CD 33/A3B1: F0 0A BEQ $A3BD 33/A3B3: A2 03 LDX #$03 33/A3B5: A9 06 LDA #$06 33/A3B7: 20 65 A0 JSR $A065 33/A3BA: 4C C3 A3 JMP $A3C3 ; right hand forward + hit 33/A3BD: A2 01 LDX #$01 33/A3BF: 8A TXA 33/A3C0: 20 6E A0 JSR $A06E 33/A3C3: A5 BA LDA $BA 33/A3C5: 20 B2 97 JSR $97B2 ; do hit animation 33/A3C8: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/A3CB: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A3CE: 29 08 AND #$08 33/A3D0: F0 BC BEQ $A38E ; 8 frames per hit 33/A3D2: A5 BD LDA $BD ; next hit 33/A3D4: F0 04 BEQ $A3DA 33/A3D6: C6 BD DEC $BD 33/A3D8: D0 AA BNE $A384 33/A3DA: 4C 35 AC JMP $AC35 ; clean up after animation ; [ update attacking character sprite ] ; A: attacker frame 33/A3DD: A6 95 LDX $95 ; attacker 33/A3DF: 9D 83 7D STA $7D83,X 33/A3E2: 4C E5 A3 JMP $A3E5 ; this does nothing... 33/A3E5: 20 56 A4 JSR $A456 33/A3E8: 4C EA 90 JMP $90EA ; [ update animation sprite ] ; A: animation frame id 33/A3EB: A6 95 LDX $95 ; attacker id 33/A3ED: 4C 99 92 JMP $9299 ; update animation sprite (no offset) ; [ update animation sprite ] ; $7E: x offset ; $7F: y offset ; A: animation frame id 33/A3F0: A6 95 LDX $95 ; attacker id 33/A3F2: 4C A1 92 JMP $92A1 ; update animation sprite ; pointer to animation sprites for each character 33/A3F5: A0 B8 D0 E8 ; [ reset character animation sprites ] 33/A3F9: 8A TXA 33/A3FA: 48 PHA 33/A3FB: BD F5 A3 LDA $A3F5,X 33/A3FE: A8 TAY 33/A3FF: A2 00 LDX #$00 33/A401: A9 F0 LDA #$F0 33/A403: 99 00 02 STA $0200,Y 33/A406: C8 INY 33/A407: E8 INX 33/A408: E0 18 CPX #$18 33/A40A: D0 F7 BNE $A403 33/A40C: 68 PLA 33/A40D: AA TAX 33/A40E: 60 RTS ; [ save character animation frames ] 33/A40F: A2 00 LDX #$00 33/A411: BD 83 7D LDA $7D83,X 33/A414: 9D 87 7D STA $7D87,X 33/A417: E8 INX 33/A418: E0 04 CPX #$04 33/A41A: D0 F5 BNE $A411 33/A41C: 60 RTS ; [ restore character animation frames ] 33/A41D: A2 00 LDX #$00 33/A41F: BD 87 7D LDA $7D87,X 33/A422: 9D 83 7D STA $7D83,X 33/A425: E8 INX 33/A426: E0 04 CPX #$04 33/A428: D0 F5 BNE $A41F 33/A42A: 60 RTS ; [ clear animation oam data ] 33/A42B: A2 00 LDX #$00 33/A42D: A9 F0 LDA #$F0 33/A42F: 9D 00 02 STA $0200,X 33/A432: E8 INX 33/A433: E0 A0 CPX #$A0 33/A435: D0 F8 BNE $A42F 33/A437: 60 RTS ; [ load current hand hit palette ] 33/A438: A5 CD LDA $CD 33/A43A: 29 01 AND #$01 33/A43C: AA TAX 33/A43D: BD 17 7E LDA $7E17,X ; fallthrough ; [ load animation palette ] 33/A440: 20 08 AB JSR $AB08 ; load sprite palette 3 33/A443: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ random (X..A) ] 33/A446: 48 PHA 33/A447: A9 00 LDA #$00 ; rng 0 33/A449: 85 21 STA $21 33/A44B: 68 PLA 33/A44C: 4C EF FB JMP $FBEF ; random (X..A) ; [ random (0..255) ] 33/A44F: A2 00 LDX #$00 33/A451: A9 FF LDA #$FF 33/A453: 4C 46 A4 JMP $A446 ; [ flip character frame if facing right ] 33/A456: 8A TXA 33/A457: 48 PHA 33/A458: 20 C3 A6 JSR $A6C3 ; check if attacker confused 33/A45B: 90 0A BCC $A467 ; branch if not confused 33/A45D: A6 95 LDX $95 33/A45F: BD 83 7D LDA $7D83,X 33/A462: 49 80 EOR #$80 33/A464: 9D 83 7D STA $7D83,X 33/A467: 68 PLA 33/A468: AA TAX 33/A469: 60 RTS ; [ shift color ] 33/A46A: BD F7 7C LDA $7CF7,X ; color palettes 33/A46D: 29 F0 AND #$F0 33/A46F: 85 7E STA $7E 33/A471: BD F7 7C LDA $7CF7,X 33/A474: 18 CLC 33/A475: 69 02 ADC #$02 33/A477: 29 0F AND #$0F 33/A479: 05 7E ORA $7E 33/A47B: 9D F7 7C STA $7CF7,X 33/A47E: BD F7 7C LDA $7CF7,X 33/A481: 29 CF AND #$CF 33/A483: 85 7E STA $7E 33/A485: BD F7 7C LDA $7CF7,X 33/A488: 18 CLC 33/A489: 69 10 ADC #$10 33/A48B: 29 30 AND #$30 33/A48D: 05 7E ORA $7E 33/A48F: 9D F7 7C STA $7CF7,X 33/A492: 60 RTS ; [ update projectile sprite ] 33/A493: 48 PHA 33/A494: A0 00 LDY #$00 33/A496: 20 7B BF JSR $BF7B ; get vector y-component 33/A499: 85 7F STA $7F 33/A49B: A0 00 LDY #$00 33/A49D: 20 6F BF JSR $BF6F ; get vector x-component 33/A4A0: 85 7E STA $7E 33/A4A2: 68 PLA 33/A4A3: 85 82 STA $82 33/A4A5: A5 B6 LDA $B6 33/A4A7: 4A LSR 33/A4A8: 4A LSR 33/A4A9: 29 01 AND #$01 33/A4AB: 18 CLC 33/A4AC: 65 82 ADC $82 33/A4AE: 4C F0 A3 JMP $A3F0 ; update animation sprite ; [ ] 33/A4B1: 48 PHA 33/A4B2: A0 00 LDY #$00 33/A4B4: 20 7B BF JSR $BF7B ; get vector y-component 33/A4B7: 18 CLC 33/A4B8: 65 88 ADC $88 33/A4BA: 85 7F STA $7F 33/A4BC: A0 00 LDY #$00 33/A4BE: 20 6F BF JSR $BF6F ; get vector x-component 33/A4C1: 85 7E STA $7E 33/A4C3: 68 PLA 33/A4C4: 85 82 STA $82 33/A4C6: A5 B6 LDA $B6 33/A4C8: 4A LSR 33/A4C9: 29 03 AND #$03 33/A4CB: 18 CLC 33/A4CC: 65 82 ADC $82 33/A4CE: 18 CLC 33/A4CF: 65 89 ADC $89 33/A4D1: 4C F0 A3 JMP $A3F0 ; update animation sprite ; [ boomerang hit animation ] 33/A4D4: AD 96 7E LDA $7E96 33/A4D7: D0 05 BNE $A4DE ; return if character vs. character 33/A4D9: 20 C3 A6 JSR $A6C3 ; check if attacker confused 33/A4DC: 90 01 BCC $A4DF ; branch if not confused 33/A4DE: 60 RTS 33/A4DF: 06 BD ASL $BD 33/A4E1: 06 BD ASL $BD 33/A4E3: 06 BD ASL $BD 33/A4E5: A9 00 LDA #$00 33/A4E7: 85 88 STA $88 33/A4E9: A6 95 LDX $95 33/A4EB: B5 C0 LDA $C0,X 33/A4ED: 18 CLC 33/A4EE: 69 16 ADC #$16 33/A4F0: 85 7E STA $7E 33/A4F2: A5 B8 LDA $B8 33/A4F4: 29 07 AND #$07 33/A4F6: 0A ASL 33/A4F7: A8 TAY 33/A4F8: A5 7E LDA $7E 33/A4FA: 38 SEC 33/A4FB: F9 D7 7D SBC $7DD7,Y ; center x position 33/A4FE: 4A LSR 33/A4FF: 85 8A STA $8A 33/A501: A9 10 LDA #$10 33/A503: 85 8B STA $8B 33/A505: 20 5F BF JSR $BF5F ; reset vector angles 33/A508: A5 B8 LDA $B8 33/A50A: 29 07 AND #$07 33/A50C: AA TAX 33/A50D: 20 A5 A7 JSR $A7A5 ; get angle from attacker to target 33/A510: A0 00 LDY #$00 33/A512: 20 B1 BF JSR $BFB1 ; add to vector angle 33/A515: A9 10 LDA #$10 33/A517: 8D 26 7E STA $7E26 33/A51A: 8D 30 7E STA $7E30 33/A51D: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A520: 20 5E A0 JSR $A05E ; reset animation sprites 33/A523: A5 CD LDA $CD 33/A525: F0 0D BEQ $A534 33/A527: A9 06 LDA #$06 33/A529: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A52C: A9 2C LDA #$2C 33/A52E: 20 B1 A4 JSR $A4B1 33/A531: 4C 3E A5 JMP $A53E 33/A534: A9 01 LDA #$01 33/A536: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A539: A9 24 LDA #$24 33/A53B: 20 B1 A4 JSR $A4B1 33/A53E: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A541: E6 B6 INC $B6 33/A543: A0 00 LDY #$00 33/A545: 20 6F BF JSR $BF6F ; get vector x-component 33/A548: 85 90 STA $90 33/A54A: A6 95 LDX $95 33/A54C: B5 C0 LDA $C0,X 33/A54E: 38 SEC 33/A54F: E9 10 SBC #$10 33/A551: 85 7E STA $7E 33/A553: 18 CLC 33/A554: 65 90 ADC $90 33/A556: 85 90 STA $90 33/A558: A5 B8 LDA $B8 33/A55A: 29 07 AND #$07 33/A55C: 0A ASL 33/A55D: A8 TAY 33/A55E: B9 D7 7D LDA $7DD7,Y ; center x position 33/A561: 85 91 STA $91 33/A563: C5 90 CMP $90 33/A565: B0 2C BCS $A593 33/A567: AD 26 7E LDA $7E26 33/A56A: C5 8A CMP $8A 33/A56C: 90 09 BCC $A577 33/A56E: C6 8B DEC $8B 33/A570: E6 88 INC $88 33/A572: E6 88 INC $88 33/A574: 4C 7D A5 JMP $A57D 33/A577: C6 88 DEC $88 33/A579: C6 88 DEC $88 33/A57B: E6 8B INC $8B 33/A57D: A0 00 LDY #$00 33/A57F: A5 8B LDA $8B 33/A581: 4A LSR 33/A582: 4A LSR 33/A583: 20 87 BF JSR $BF87 ; add to vector distance 33/A586: A5 89 LDA $89 33/A588: C9 04 CMP #$04 33/A58A: D0 04 BNE $A590 33/A58C: A9 00 LDA #$00 33/A58E: 85 88 STA $88 33/A590: 4C 20 A5 JMP $A520 33/A593: A9 DB LDA #$DB 33/A595: 8D 49 7F STA $7F49 33/A598: A9 00 LDA #$00 33/A59A: 85 88 STA $88 33/A59C: 20 5E A0 JSR $A05E ; reset animation sprites 33/A59F: A5 CD LDA $CD 33/A5A1: F0 0D BEQ $A5B0 33/A5A3: A9 06 LDA #$06 33/A5A5: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A5A8: A9 2C LDA #$2C 33/A5AA: 20 B1 A4 JSR $A4B1 33/A5AD: 4C BA A5 JMP $A5BA 33/A5B0: A9 01 LDA #$01 33/A5B2: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A5B5: A9 24 LDA #$24 33/A5B7: 20 B1 A4 JSR $A4B1 33/A5BA: A5 BD LDA $BD 33/A5BC: F0 07 BEQ $A5C5 33/A5BE: A9 05 LDA #$05 33/A5C0: 20 B2 97 JSR $97B2 ; do hit animation 33/A5C3: C6 BD DEC $BD 33/A5C5: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A5C8: E6 B6 INC $B6 33/A5CA: AD 26 7E LDA $7E26 33/A5CD: C9 08 CMP #$08 33/A5CF: 90 2C BCC $A5FD 33/A5D1: AD 26 7E LDA $7E26 33/A5D4: C5 8A CMP $8A 33/A5D6: 90 09 BCC $A5E1 33/A5D8: E6 8B INC $8B 33/A5DA: E6 88 INC $88 33/A5DC: E6 88 INC $88 33/A5DE: 4C E7 A5 JMP $A5E7 33/A5E1: C6 88 DEC $88 33/A5E3: C6 88 DEC $88 33/A5E5: C6 8B DEC $8B 33/A5E7: A5 8B LDA $8B 33/A5E9: A0 00 LDY #$00 33/A5EB: 4A LSR 33/A5EC: 4A LSR 33/A5ED: 20 9C BF JSR $BF9C ; subtract from vector distance 33/A5F0: A5 89 LDA $89 33/A5F2: C9 04 CMP #$04 33/A5F4: D0 04 BNE $A5FA 33/A5F6: A9 00 LDA #$00 33/A5F8: 85 88 STA $88 33/A5FA: 4C 9C A5 JMP $A59C 33/A5FD: 60 RTS ; [ shuriken hit animation ] 33/A5FE: AD 96 7E LDA $7E96 33/A601: D0 05 BNE $A608 ; return if character vs. character 33/A603: 20 C3 A6 JSR $A6C3 ; check if attacker confused 33/A606: 90 01 BCC $A609 ; branch if not confused 33/A608: 60 RTS 33/A609: 20 5F BF JSR $BF5F ; reset vector angles 33/A60C: A5 B8 LDA $B8 33/A60E: 29 07 AND #$07 33/A610: AA TAX 33/A611: 20 A5 A7 JSR $A7A5 ; get angle from attacker to target 33/A614: A0 00 LDY #$00 33/A616: 20 B1 BF JSR $BFB1 ; add to vector angle 33/A619: A9 08 LDA #$08 33/A61B: 8D 26 7E STA $7E26 33/A61E: 8D 30 7E STA $7E30 33/A621: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A624: 20 5E A0 JSR $A05E ; reset animation sprites 33/A627: A5 CD LDA $CD 33/A629: F0 0D BEQ $A638 ; branch if right hand 33/A62B: A9 06 LDA #$06 33/A62D: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A630: A9 1C LDA #$1C 33/A632: 20 93 A4 JSR $A493 ; update projectile sprite 33/A635: 4C 42 A6 JMP $A642 33/A638: A9 01 LDA #$01 33/A63A: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A63D: A9 1A LDA #$1A 33/A63F: 20 93 A4 JSR $A493 ; update projectile sprite 33/A642: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A645: E6 B6 INC $B6 33/A647: A0 00 LDY #$00 33/A649: 20 6F BF JSR $BF6F ; get vector x-component 33/A64C: 85 90 STA $90 33/A64E: A6 95 LDX $95 33/A650: B5 C0 LDA $C0,X 33/A652: 38 SEC 33/A653: E9 10 SBC #$10 33/A655: 18 CLC 33/A656: 65 90 ADC $90 33/A658: 85 90 STA $90 33/A65A: A5 B8 LDA $B8 33/A65C: 29 07 AND #$07 33/A65E: 0A ASL 33/A65F: A8 TAY 33/A660: B9 D7 7D LDA $7DD7,Y ; center x position 33/A663: C5 90 CMP $90 33/A665: B0 0A BCS $A671 ; branch when shuriken hits target 33/A667: A0 00 LDY #$00 33/A669: A9 10 LDA #$10 33/A66B: 20 87 BF JSR $BF87 ; add to vector distance 33/A66E: 4C 24 A6 JMP $A624 33/A671: 20 5E A0 JSR $A05E ; reset animation sprites 33/A674: A5 CD LDA $CD 33/A676: F0 08 BEQ $A680 33/A678: A9 06 LDA #$06 33/A67A: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A67D: 4C 85 A6 JMP $A685 33/A680: A9 01 LDA #$01 33/A682: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A685: A6 CD LDX $CD 33/A687: B5 BB LDA $BB,X 33/A689: F0 2B BEQ $A6B6 33/A68B: A0 00 LDY #$00 33/A68D: 20 7B BF JSR $BF7B ; get vector y-component 33/A690: 85 8D STA $8D 33/A692: A6 95 LDX $95 33/A694: B5 C4 LDA $C4,X 33/A696: 38 SEC 33/A697: E9 F8 SBC #$F8 33/A699: 18 CLC 33/A69A: 65 8D ADC $8D 33/A69C: 85 8D STA $8D 33/A69E: A0 00 LDY #$00 33/A6A0: 20 6F BF JSR $BF6F ; get vector x-component 33/A6A3: 85 8C STA $8C 33/A6A5: A6 95 LDX $95 33/A6A7: B5 C0 LDA $C0,X 33/A6A9: 38 SEC 33/A6AA: E9 10 SBC #$10 33/A6AC: 18 CLC 33/A6AD: 65 8C ADC $8C 33/A6AF: 85 8C STA $8C 33/A6B1: 20 6C 98 JSR $986C 33/A6B4: C6 BD DEC $BD 33/A6B6: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A6B9: A5 BD LDA $BD 33/A6BB: F0 05 BEQ $A6C2 33/A6BD: A9 04 LDA #$04 33/A6BF: 20 B2 97 JSR $97B2 ; do hit animation 33/A6C2: 60 RTS ; [ check if attacker confused ] ; return carry set if attacker is confused 33/A6C3: A5 95 LDA $95 ; attacker id 33/A6C5: 0A ASL 33/A6C6: A8 TAY 33/A6C7: B9 9B 7D LDA $7D9B,Y 33/A6CA: 29 08 AND #$08 33/A6CC: F0 02 BEQ $A6D0 33/A6CE: 38 SEC 33/A6CF: 60 RTS 33/A6D0: 18 CLC 33/A6D1: 60 RTS ; [ arrow hit animation ] 33/A6D2: AD 96 7E LDA $7E96 33/A6D5: D0 05 BNE $A6DC ; return if character vs. character 33/A6D7: 20 C3 A6 JSR $A6C3 ; check if attacker confused 33/A6DA: 90 01 BCC $A6DD ; return if confused 33/A6DC: 60 RTS 33/A6DD: 20 5F BF JSR $BF5F ; reset vector angles 33/A6E0: A5 B8 LDA $B8 ; target 33/A6E2: 29 07 AND #$07 33/A6E4: AA TAX 33/A6E5: 20 A5 A7 JSR $A7A5 ; get angle from attacker to target 33/A6E8: A0 00 LDY #$00 33/A6EA: 20 B1 BF JSR $BFB1 ; add to vector angle 33/A6ED: A9 10 LDA #$10 33/A6EF: 8D 26 7E STA $7E26 33/A6F2: 8D 30 7E STA $7E30 33/A6F5: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A6F8: 20 5E A0 JSR $A05E ; reset animation sprites 33/A6FB: A5 CD LDA $CD 33/A6FD: F0 12 BEQ $A711 33/A6FF: A9 06 LDA #$06 33/A701: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A704: A9 16 LDA #$16 33/A706: 20 93 A4 JSR $A493 ; update projectile sprite 33/A709: A9 08 LDA #$08 33/A70B: 20 EB A3 JSR $A3EB ; update animation sprite 33/A70E: 4C 20 A7 JMP $A720 33/A711: A9 06 LDA #$06 33/A713: 20 EB A3 JSR $A3EB ; update animation sprite 33/A716: A9 14 LDA #$14 33/A718: 20 93 A4 JSR $A493 ; update projectile sprite 33/A71B: A9 01 LDA #$01 33/A71D: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/A720: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A723: E6 B6 INC $B6 33/A725: A0 00 LDY #$00 33/A727: 20 6F BF JSR $BF6F ; get vector x-component 33/A72A: 85 90 STA $90 33/A72C: A6 95 LDX $95 33/A72E: B5 C0 LDA $C0,X 33/A730: 38 SEC 33/A731: E9 10 SBC #$10 33/A733: 18 CLC 33/A734: 65 90 ADC $90 33/A736: 85 90 STA $90 33/A738: A5 B8 LDA $B8 ; target 33/A73A: 29 07 AND #$07 33/A73C: 0A ASL 33/A73D: A8 TAY 33/A73E: B9 D7 7D LDA $7DD7,Y ; center x position 33/A741: C5 90 CMP $90 33/A743: B0 0A BCS $A74F ; branch when arrow reaches target 33/A745: A0 00 LDY #$00 33/A747: A9 10 LDA #$10 33/A749: 20 87 BF JSR $BF87 ; add to vector distance 33/A74C: 4C F8 A6 JMP $A6F8 33/A74F: 20 5E A0 JSR $A05E ; reset animation sprites 33/A752: A5 CD LDA $CD 33/A754: F0 0A BEQ $A760 33/A756: A2 06 LDX #$06 33/A758: A9 08 LDA #$08 33/A75A: 20 6E A0 JSR $A06E 33/A75D: 4C 67 A7 JMP $A767 33/A760: A2 06 LDX #$06 33/A762: A9 01 LDA #$01 33/A764: 20 65 A0 JSR $A065 33/A767: A6 CD LDX $CD 33/A769: B5 BB LDA $BB,X 33/A76B: F0 2B BEQ $A798 33/A76D: A0 00 LDY #$00 33/A76F: 20 7B BF JSR $BF7B ; get vector y-component 33/A772: 85 8D STA $8D 33/A774: A6 95 LDX $95 33/A776: B5 C4 LDA $C4,X 33/A778: 38 SEC 33/A779: E9 F8 SBC #$F8 33/A77B: 18 CLC 33/A77C: 65 8D ADC $8D 33/A77E: 85 8D STA $8D 33/A780: A0 00 LDY #$00 33/A782: 20 6F BF JSR $BF6F ; get vector x-component 33/A785: 85 8C STA $8C 33/A787: A6 95 LDX $95 33/A789: B5 C0 LDA $C0,X 33/A78B: 38 SEC 33/A78C: E9 10 SBC #$10 33/A78E: 18 CLC 33/A78F: 65 8C ADC $8C 33/A791: 85 8C STA $8C 33/A793: 20 7C 98 JSR $987C 33/A796: C6 BD DEC $BD 33/A798: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A79B: A5 BD LDA $BD 33/A79D: F0 05 BEQ $A7A4 ; return if only 1 hit 33/A79F: A9 03 LDA #$03 33/A7A1: 20 B2 97 JSR $97B2 ; do hit animation 33/A7A4: 60 RTS ; [ get angle from attacker to target ] 33/A7A5: 8C D6 7E STY $7ED6 33/A7A8: 8E D7 7E STX $7ED7 33/A7AB: 86 81 STX $81 33/A7AD: AC 7B 7D LDY $7D7B ; monster tilemap id 33/A7B0: B9 D7 A7 LDA $A7D7,Y ; block size 33/A7B3: A6 95 LDX $95 ; attacker id 33/A7B5: 20 EA F8 JSR $F8EA ; multiply 33/A7B8: 18 CLC 33/A7B9: 65 81 ADC $81 33/A7BB: 85 81 STA $81 33/A7BD: AD 7B 7D LDA $7D7B ; monster tilemap id 33/A7C0: 0A ASL 33/A7C1: AA TAX 33/A7C2: BD E1 A7 LDA $A7E1,X 33/A7C5: 85 7E STA $7E 33/A7C7: BD E2 A7 LDA $A7E2,X 33/A7CA: 85 7F STA $7F 33/A7CC: A4 81 LDY $81 33/A7CE: B1 7E LDA ($7E),Y 33/A7D0: AC D6 7E LDY $7ED6 33/A7D3: AE D7 7E LDX $7ED7 33/A7D6: 60 RTS ; block size of attacker-target angle data 33/A7D7: 08 08 07 06 05 04 03 04 03 01 ; pointers to attacker-target angles 33/A7E1: A7F5 A7F5 A815 A831 A849 A85D A86D A879 33/A7F1: A889 A895 ; attacker-target angles ; 1: (4 * 8 bytes) 33/A7F5: 7A 6C 77 66 73 5F 69 52 33/A7FD: 82 73 83 70 85 69 8A 5B 33/A805: 8B 7C 8E 7A 95 78 A2 71 33/A80D: 92 85 97 86 A0 8A AD 92 ; 2: (4 * 7 bytes) 33/A815: 73 77 66 73 5F 69 52 33/A81C: 7B 83 70 85 69 8A 5B 33/A823: 84 8E 7A 95 78 A2 71 33/A82A: 8B 97 86 A0 8A AD 92 ; 3: (4 * 6 bytes) 33/A831: 7A 6D 77 65 6D 55 33/A837: 82 74 84 6E 88 5F 33/A83D: 8A 7C 90 7A 9D 74 33/A843: 92 84 9A 87 A9 8F ; 4: (4 * 5 bytes) 33/A849: 73 77 65 6D 55 33/A84E: 7B 84 6E 88 5F 33/A853: 84 90 7A 9D 74 33/A858: 8B 9A 87 A9 8F ; 5: (4 * 4 bytes) 33/A85D: 73 6D 6D 55 33/A861: 7B 78 88 5F 33/A865: 84 85 9D 74 33/A869: 8B 91 A9 8F ; 6: (4 * 3 bytes) 33/A86D: 73 6D 5E 33/A870: 7B 78 70 33/A873: 84 85 8B 33/A876: 8B 91 A0 ; 7: (4 * 4 bytes) 33/A879: 78 69 6D 55 33/A87E: 83 72 88 5F 33/A881: 8C 7B 9D 74 33/A885: 95 86 A9 8F ; 8: (4 * 3 bytes) 33/A889: 73 73 5F 33/A88C: 7B 85 69 33/A88F: 84 95 78 33/A892: 8B A0 8A ; 9: (4 * 1 byte) 33/A895: 71 7C 88 92 ; [ animation function $16: unarmed/monster attack ] 33/A899: 20 38 A4 JSR $A438 ; load current hand hit palette 33/A89C: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A89F: E6 C9 INC $C9 33/A8A1: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A8A4: 20 5E A0 JSR $A05E ; reset animation sprites 33/A8A7: A9 02 LDA #$02 33/A8A9: 20 B2 97 JSR $97B2 ; do hit animation 33/A8AC: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A8AF: 29 08 AND #$08 33/A8B1: F0 EE BEQ $A8A1 33/A8B3: C6 BD DEC $BD 33/A8B5: D0 E5 BNE $A89C 33/A8B7: 60 RTS ; [ animation function $05: character hit ] 33/A8B8: A2 B0 LDX #$B0 33/A8BA: A5 CB LDA $CB 33/A8BC: D0 04 BNE $A8C2 33/A8BE: A9 08 LDA #$08 33/A8C0: D0 04 BNE $A8C6 33/A8C2: A2 C6 LDX #$C6 ; sound effect $46 33/A8C4: A9 10 LDA #$10 33/A8C6: 48 PHA 33/A8C7: 8E 49 7F STX $7F49 33/A8CA: 20 0F A4 JSR $A40F ; save character animations frames 33/A8CD: A6 95 LDX $95 33/A8CF: 20 CF A2 JSR $A2CF ; check if toad or mini 33/A8D2: F0 05 BEQ $A8D9 33/A8D4: A9 0F LDA #$0F ; hit toad/mini 33/A8D6: 4C DB A8 JMP $A8DB 33/A8D9: A9 04 LDA #$04 ; hit 33/A8DB: 9D 83 7D STA $7D83,X 33/A8DE: 68 PLA 33/A8DF: 85 7E STA $7E 33/A8E1: 48 PHA 33/A8E2: B5 C0 LDA $C0,X 33/A8E4: 18 CLC 33/A8E5: 65 7E ADC $7E 33/A8E7: 95 C0 STA $C0,X 33/A8E9: 20 1C A9 JSR $A91C 33/A8EC: 20 0A A9 JSR $A90A ; shake character sprite 33/A8EF: 20 0A A9 JSR $A90A ; shake character sprite 33/A8F2: 20 0A A9 JSR $A90A ; shake character sprite 33/A8F5: 20 0A A9 JSR $A90A ; shake character sprite 33/A8F8: A6 95 LDX $95 33/A8FA: 68 PLA 33/A8FB: 85 7E STA $7E 33/A8FD: B5 C0 LDA $C0,X 33/A8FF: 38 SEC 33/A900: E5 7E SBC $7E 33/A902: 95 C0 STA $C0,X 33/A904: 20 1D A4 JSR $A41D ; restore character animation frames 33/A907: 4C 1C A9 JMP $A91C ; [ shake character sprite ] 33/A90A: A6 95 LDX $95 33/A90C: F6 C0 INC $C0,X ; move character back 1 33/A90E: 20 1C A9 JSR $A91C 33/A911: A6 95 LDX $95 33/A913: D6 C0 DEC $C0,X ; move character forward 1 33/A915: 4C 1C A9 JMP $A91C ; [ ] 33/A918: A9 10 LDA #$10 ; wait 16 frames 33/A91A: D0 02 BNE $A91E ; fallthrough ; [ ] 33/A91C: A9 02 LDA #$02 ; wait 2 frames 33/A91E: 85 B6 STA $B6 33/A920: 20 D8 90 JSR $90D8 ; update character sprites 33/A923: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A926: C6 B6 DEC $B6 33/A928: D0 F6 BNE $A920 33/A92A: 60 RTS ; [ animation function $0B: cheer ] 33/A92B: A9 E5 LDA #$E5 33/A92D: 20 40 A4 JSR $A440 ; load animation palette 33/A930: A9 00 LDA #$00 33/A932: 20 1E BF JSR $BF1E ; load animation graphics 33/A935: 20 0F A4 JSR $A40F ; save character animations frames 33/A938: A6 95 LDX $95 33/A93A: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A93D: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A940: A9 CB LDA #$CB 33/A942: 8D 49 7F STA $7F49 33/A945: 20 5E A0 JSR $A05E ; reset animation sprites 33/A948: A5 B6 LDA $B6 33/A94A: 29 08 AND #$08 33/A94C: D0 0B BNE $A959 33/A94E: A9 05 LDA #$05 33/A950: A2 0E LDX #$0E 33/A952: 20 72 A9 JSR $A972 33/A955: A9 00 LDA #$00 33/A957: F0 09 BEQ $A962 33/A959: A9 01 LDA #$01 33/A95B: A2 0A LDX #$0A 33/A95D: 20 72 A9 JSR $A972 33/A960: A9 01 LDA #$01 33/A962: 20 EB A3 JSR $A3EB ; update animation sprite 33/A965: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A968: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A96B: 29 20 AND #$20 33/A96D: F0 D6 BEQ $A945 33/A96F: 4C 3A AC JMP $AC3A ; clean up after animation ; [ change animation frame ] ; A: animation frame ; X: animation frame if toad/mini 33/A972: 85 18 STA $18 33/A974: A5 95 LDA $95 33/A976: 0A ASL 33/A977: A8 TAY 33/A978: B9 9B 7D LDA $7D9B,Y 33/A97B: 29 05 AND #$05 33/A97D: F0 04 BEQ $A983 ; branch if toad or mini 33/A97F: 8A TXA 33/A980: 4C DD A3 JMP $A3DD ; update attacking character sprite 33/A983: A5 18 LDA $18 33/A985: 4C DD A3 JMP $A3DD ; update attacking character sprite ; [ animation function $0A: scare ] 33/A988: A9 F1 LDA #$F1 33/A98A: 20 40 A4 JSR $A440 ; load animation palette 33/A98D: A9 01 LDA #$01 33/A98F: 20 1E BF JSR $BF1E ; load animation graphics 33/A992: 20 0F A4 JSR $A40F ; save character animations frames 33/A995: A6 95 LDX $95 33/A997: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/A99A: 20 59 A0 JSR $A059 ; reset animation frame counter 33/A99D: A9 8F LDA #$8F 33/A99F: 8D 49 7F STA $7F49 33/A9A2: 20 5E A0 JSR $A05E ; reset animation sprites 33/A9A5: A9 08 LDA #$08 33/A9A7: A2 0E LDX #$0E 33/A9A9: 20 72 A9 JSR $A972 33/A9AC: A5 B6 LDA $B6 33/A9AE: 29 02 AND #$02 33/A9B0: F0 05 BEQ $A9B7 33/A9B2: A9 FF LDA #$FF 33/A9B4: 4C B9 A9 JMP $A9B9 33/A9B7: A9 01 LDA #$01 33/A9B9: 85 7F STA $7F 33/A9BB: A9 00 LDA #$00 33/A9BD: 85 7E STA $7E 33/A9BF: A9 01 LDA #$01 33/A9C1: 20 F0 A3 JSR $A3F0 ; update animation sprite 33/A9C4: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/A9C7: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/A9CA: 29 20 AND #$20 33/A9CC: F0 D4 BEQ $A9A2 33/A9CE: 4C 3A AC JMP $AC3A ; clean up after animation 33/A9D1: 20 5E A0 JSR $A05E ; reset animation sprites 33/A9D4: A2 00 LDX #$00 33/A9D6: BD D7 91 LDA $91D7,X 33/A9D9: 18 CLC 33/A9DA: 65 8D ADC $8D 33/A9DC: 9D 00 02 STA $0200,X 33/A9DF: E8 INX 33/A9E0: 8A TXA 33/A9E1: 4A LSR 33/A9E2: 4A LSR 33/A9E3: 18 CLC 33/A9E4: 69 49 ADC #$49 33/A9E6: 9D 00 02 STA $0200,X 33/A9E9: E8 INX 33/A9EA: A9 03 LDA #$03 33/A9EC: 9D 00 02 STA $0200,X 33/A9EF: E8 INX 33/A9F0: BD D7 91 LDA $91D7,X 33/A9F3: 18 CLC 33/A9F4: 65 8C ADC $8C 33/A9F6: 9D 00 02 STA $0200,X 33/A9F9: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/A9FC: E8 INX 33/A9FD: E0 18 CPX #$18 33/A9FF: D0 D5 BNE $A9D6 33/AA01: 60 RTS 33/AA02: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AA05: A5 8E LDA $8E 33/AA07: 85 8C STA $8C 33/AA09: A5 7E LDA $7E 33/AA0B: 85 8D STA $8D 33/AA0D: 20 D1 A9 JSR $A9D1 33/AA10: C6 8E DEC $8E 33/AA12: C6 8E DEC $8E 33/AA14: 60 RTS ; [ animation function $09: jump 2 ] 33/AA15: A9 FD LDA #$FD 33/AA17: 20 40 A4 JSR $A440 ; load animation palette 33/AA1A: 20 0F A4 JSR $A40F ; save character animations frames 33/AA1D: A6 95 LDX $95 33/AA1F: BD 22 7E LDA $7E22,X 33/AA22: 95 C0 STA $C0,X 33/AA24: A9 00 LDA #$00 33/AA26: 9D 22 7E STA $7E22,X 33/AA29: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/AA2C: A5 B8 LDA $B8 33/AA2E: A8 TAY 33/AA2F: 0A ASL 33/AA30: AA TAX 33/AA31: BD D7 7D LDA $7DD7,X ; center x position 33/AA34: 38 SEC 33/AA35: E9 08 SBC #$08 33/AA37: 85 8E STA $8E 33/AA39: B9 07 7E LDA $7E07,Y ; bottom y position 33/AA3C: 38 SEC 33/AA3D: E9 08 SBC #$08 33/AA3F: 85 8F STA $8F 33/AA41: 4A LSR 33/AA42: 4A LSR 33/AA43: 85 90 STA $90 33/AA45: 18 CLC 33/AA46: 65 8E ADC $8E 33/AA48: 85 8E STA $8E 33/AA4A: 46 90 LSR $90 33/AA4C: A5 90 LDA $90 33/AA4E: 85 91 STA $91 33/AA50: A9 00 LDA #$00 33/AA52: 85 7E STA $7E 33/AA54: 20 02 AA JSR $AA02 33/AA57: A5 7E LDA $7E 33/AA59: 18 CLC 33/AA5A: 69 08 ADC #$08 33/AA5C: 85 7E STA $7E 33/AA5E: C6 91 DEC $91 33/AA60: D0 F2 BNE $AA54 33/AA62: A5 90 LDA $90 33/AA64: 85 91 STA $91 33/AA66: A9 B6 LDA #$B6 33/AA68: 8D 49 7F STA $7F49 33/AA6B: 20 02 AA JSR $AA02 33/AA6E: A5 7E LDA $7E 33/AA70: 38 SEC 33/AA71: E9 08 SBC #$08 33/AA73: 85 7E STA $7E 33/AA75: C6 91 DEC $91 33/AA77: D0 F2 BNE $AA6B 33/AA79: 20 5E A0 JSR $A05E ; reset animation sprites 33/AA7C: 20 B0 8A JSR $8AB0 ; wait 16 frames 33/AA7F: 20 B0 8A JSR $8AB0 ; wait 16 frames 33/AA82: 20 5E A0 JSR $A05E ; reset animation sprites 33/AA85: A6 95 LDX $95 33/AA87: B5 C4 LDA $C4,X 33/AA89: 18 CLC 33/AA8A: 69 08 ADC #$08 33/AA8C: 95 C4 STA $C4,X 33/AA8E: F6 C0 INC $C0,X 33/AA90: F6 C0 INC $C0,X 33/AA92: A9 08 LDA #$08 33/AA94: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/AA97: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AA9A: A6 95 LDX $95 33/AA9C: B5 C4 LDA $C4,X 33/AA9E: DD A6 AA CMP $AAA6,X 33/AAA1: D0 DF BNE $AA82 33/AAA3: 4C 3A AC JMP $AC3A ; clean up after animation 33/AAA6: 2C 48 64 80 33/AAAA: C6 95 DEC $95 33/AAAC: 4C B1 AA JMP $AAB1 33/AAAF: E6 95 INC $95 33/AAB1: A5 95 LDA $95 33/AAB3: 29 03 AND #$03 33/AAB5: 85 95 STA $95 33/AAB7: 60 RTS ; [ animation function $08: jump 1 ] 33/AAB8: 20 0F A4 JSR $A40F ; save character animations frames 33/AABB: A6 95 LDX $95 33/AABD: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/AAC0: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AAC3: B5 C0 LDA $C0,X 33/AAC5: 48 PHA 33/AAC6: A9 C4 LDA #$C4 33/AAC8: 8D 49 7F STA $7F49 33/AACB: 20 5E A0 JSR $A05E ; reset animation sprites 33/AACE: A9 03 LDA #$03 33/AAD0: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/AAD3: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AAD6: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AAD9: 29 10 AND #$10 33/AADB: F0 EE BEQ $AACB 33/AADD: 20 5E A0 JSR $A05E ; reset animation sprites 33/AAE0: A6 95 LDX $95 33/AAE2: B5 C4 LDA $C4,X 33/AAE4: 38 SEC 33/AAE5: E9 08 SBC #$08 33/AAE7: 95 C4 STA $C4,X 33/AAE9: D6 C0 DEC $C0,X 33/AAEB: D6 C0 DEC $C0,X 33/AAED: A9 07 LDA #$07 33/AAEF: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/AAF2: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AAF5: A6 95 LDX $95 33/AAF7: B5 C4 LDA $C4,X 33/AAF9: C9 0A CMP #$0A 33/AAFB: B0 E0 BCS $AADD 33/AAFD: B5 C0 LDA $C0,X 33/AAFF: 9D 22 7E STA $7E22,X 33/AB02: 68 PLA 33/AB03: 95 C0 STA $C0,X 33/AB05: 4C 3A AC JMP $AC3A ; clean up after animation ; [ load sprite palette 3 ] 33/AB08: A2 1C LDX #$1C ; sprite palette 3 ; fallthrough ; [ load palette ] ; A: general use palette offset (00/9100) ; X: ppu palette offset 33/AB0A: 8D EF 7C STA $7CEF 33/AB0D: 8A TXA 33/AB0E: 48 PHA 33/AB0F: 20 77 F8 JSR $F877 ; load general use palette 33/AB12: 68 PLA 33/AB13: AA TAX 33/AB14: AD F0 7C LDA $7CF0 33/AB17: 9D F8 7C STA $7CF8,X 33/AB1A: AD F1 7C LDA $7CF1 33/AB1D: 9D F9 7C STA $7CF9,X 33/AB20: AD F2 7C LDA $7CF2 33/AB23: 9D FA 7C STA $7CFA,X 33/AB26: 60 RTS ; [ animation function $07: buildup ] 33/AB27: A9 BB LDA #$BB 33/AB29: 20 40 A4 JSR $A440 ; load animation palette 33/AB2C: A9 02 LDA #$02 33/AB2E: 20 1E BF JSR $BF1E ; load animation graphics 33/AB31: 20 0F A4 JSR $A40F ; save character animations frames 33/AB34: A6 95 LDX $95 33/AB36: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/AB39: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AB3C: A9 A1 LDA #$A1 33/AB3E: 8D 49 7F STA $7F49 33/AB41: 20 5E A0 JSR $A05E ; reset animation sprites 33/AB44: A2 0E LDX #$0E 33/AB46: A9 08 LDA #$08 33/AB48: 20 72 A9 JSR $A972 33/AB4B: A5 B6 LDA $B6 33/AB4D: 29 04 AND #$04 33/AB4F: 18 CLC 33/AB50: 69 3C ADC #$3C 33/AB52: 85 88 STA $88 33/AB54: 20 EB A3 JSR $A3EB ; update animation sprite 33/AB57: 20 DE AB JSR $ABDE 33/AB5A: 20 DE AB JSR $ABDE 33/AB5D: 20 DE AB JSR $ABDE 33/AB60: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AB63: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AB66: 29 20 AND #$20 33/AB68: F0 D7 BEQ $AB41 33/AB6A: AD 19 7E LDA $7E19 33/AB6D: F0 6C BEQ $ABDB ; branch if not overloaded 33/AB6F: A9 B0 LDA #$B0 33/AB71: 8D 49 7F STA $7F49 33/AB74: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AB77: 20 5E A0 JSR $A05E ; reset animation sprites 33/AB7A: 20 AF AA JSR $AAAF 33/AB7D: A6 95 LDX $95 33/AB7F: 20 EA 90 JSR $90EA 33/AB82: 20 AA AA JSR $AAAA 33/AB85: A2 0F LDX #$0F 33/AB87: A9 04 LDA #$04 33/AB89: 20 72 A9 JSR $A972 33/AB8C: A9 00 LDA #$00 33/AB8E: 38 SEC 33/AB8F: E5 B6 SBC $B6 33/AB91: 85 7E STA $7E 33/AB93: 85 7F STA $7F 33/AB95: 20 E5 AB JSR $ABE5 33/AB98: A9 44 LDA #$44 33/AB9A: 20 F0 A3 JSR $A3F0 ; update animation sprite 33/AB9D: A9 00 LDA #$00 33/AB9F: 38 SEC 33/ABA0: E5 B6 SBC $B6 33/ABA2: 85 7F STA $7F 33/ABA4: A5 B6 LDA $B6 33/ABA6: 85 7E STA $7E 33/ABA8: 20 E5 AB JSR $ABE5 33/ABAB: A9 45 LDA #$45 33/ABAD: 20 F0 A3 JSR $A3F0 ; update animation sprite 33/ABB0: A9 00 LDA #$00 33/ABB2: 38 SEC 33/ABB3: E5 B6 SBC $B6 33/ABB5: 85 7E STA $7E 33/ABB7: A5 B6 LDA $B6 33/ABB9: 85 7F STA $7F 33/ABBB: 20 E5 AB JSR $ABE5 33/ABBE: A9 46 LDA #$46 33/ABC0: 20 F0 A3 JSR $A3F0 ; update animation sprite 33/ABC3: A5 B6 LDA $B6 33/ABC5: 85 7E STA $7E 33/ABC7: 85 7F STA $7F 33/ABC9: 20 E5 AB JSR $ABE5 33/ABCC: A9 47 LDA #$47 33/ABCE: 20 F0 A3 JSR $A3F0 ; update animation sprite 33/ABD1: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/ABD4: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/ABD7: 29 08 AND #$08 33/ABD9: F0 9C BEQ $AB77 33/ABDB: 4C 3A AC JMP $AC3A ; clean up after animation ; [ ] 33/ABDE: E6 88 INC $88 33/ABE0: A5 88 LDA $88 33/ABE2: 4C EB A3 JMP $A3EB ; update animation sprite ; [ ] 33/ABE5: A5 95 LDA $95 33/ABE7: 0A ASL 33/ABE8: A8 TAY 33/ABE9: B9 9B 7D LDA $7D9B,Y 33/ABEC: 29 08 AND #$08 33/ABEE: F0 06 BEQ $ABF6 ; branch if not confused 33/ABF0: A5 7E LDA $7E 33/ABF2: 49 FF EOR #$FF 33/ABF4: 85 7E STA $7E 33/ABF6: 60 RTS ; [ animation function $06: defend ] 33/ABF7: A9 C1 LDA #$C1 33/ABF9: 20 40 A4 JSR $A440 ; load animation palette 33/ABFC: A9 03 LDA #$03 33/ABFE: 20 1E BF JSR $BF1E ; load animation graphics 33/AC01: 20 0F A4 JSR $A40F ; save character animations frames 33/AC04: A6 95 LDX $95 33/AC06: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/AC09: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AC0C: A9 A0 LDA #$A0 33/AC0E: 8D 49 7F STA $7F49 33/AC11: 20 5E A0 JSR $A05E ; reset animation sprites 33/AC14: A2 0E LDX #$0E 33/AC16: A9 08 LDA #$08 33/AC18: 20 72 A9 JSR $A972 33/AC1B: A5 B6 LDA $B6 33/AC1D: 29 18 AND #$18 33/AC1F: 4A LSR 33/AC20: 4A LSR 33/AC21: 4A LSR 33/AC22: 18 CLC 33/AC23: 69 38 ADC #$38 ; frame ($38..$3B) 33/AC25: 20 EB A3 JSR $A3EB ; update animation sprite 33/AC28: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AC2B: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AC2E: 29 20 AND #$20 33/AC30: F0 DF BEQ $AC11 33/AC32: 4C 3A AC JMP $AC3A ; clean up after animation ; [ clean up after animation ] 33/AC35: A9 FF LDA #$FF ; stop sound effect 33/AC37: 8D 49 7F STA $7F49 33/AC3A: 20 1D A4 JSR $A41D ; restore character animation frames 33/AC3D: 20 D8 90 JSR $90D8 ; update character sprites 33/AC40: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; -------------------------------------------------------------------------- 33/AC43: 10 08 00 00 18 10 08 18 ; [ update damage numeral sprites ] 33/AC4B: 8A TXA 33/AC4C: 48 PHA 33/AC4D: AD 6F 7E LDA $7E6F 33/AC50: D0 1A BNE $AC6C ; branch if target is a monster 33/AC52: AD 72 7E LDA $7E72 33/AC55: 29 03 AND #$03 33/AC57: AA TAX 33/AC58: B5 C0 LDA $C0,X ; character position 33/AC5A: 38 SEC 33/AC5B: E9 10 SBC #$10 33/AC5D: 85 8C STA $8C 33/AC5F: B5 C4 LDA $C4,X 33/AC61: 38 SEC 33/AC62: E5 8A SBC $8A 33/AC64: 18 CLC 33/AC65: 69 10 ADC #$10 33/AC67: 85 8E STA $8E 33/AC69: 4C 93 AC JMP $AC93 33/AC6C: BD A7 7D LDA $7DA7,X 33/AC6F: C9 FF CMP #$FF 33/AC71: F0 34 BEQ $ACA7 33/AC73: AD 72 7E LDA $7E72 33/AC76: 29 07 AND #$07 33/AC78: A8 TAY 33/AC79: 0A ASL 33/AC7A: AA TAX 33/AC7B: BD D7 7D LDA $7DD7,X ; center x position 33/AC7E: 38 SEC 33/AC7F: E9 10 SBC #$10 33/AC81: 85 8C STA $8C 33/AC83: B9 43 AC LDA $AC43,Y 33/AC86: 18 CLC 33/AC87: 65 8A ADC $8A 33/AC89: 85 7E STA $7E 33/AC8B: B9 07 7E LDA $7E07,Y ; bottom y position 33/AC8E: 38 SEC 33/AC8F: E5 7E SBC $7E 33/AC91: 85 8E STA $8E 33/AC93: 20 D2 90 JSR $90D2 ; check back attack 33/AC96: D0 09 BNE $ACA1 33/AC98: A5 8C LDA $8C 33/AC9A: 49 FF EOR #$FF 33/AC9C: 18 CLC 33/AC9D: 69 DF ADC #$DF 33/AC9F: 85 8C STA $8C 33/ACA1: 20 D1 AD JSR $ADD1 ; copy damage numeral data from buffer 33/ACA4: 20 AA AC JSR $ACAA ; set damage numeral oam data 33/ACA7: 68 PLA 33/ACA8: AA TAX 33/ACA9: 60 RTS ; [ set damage numeral oam data ] 33/ACAA: A6 C8 LDX $C8 ; next available sprite 33/ACAC: A5 8E LDA $8E ; y position 33/ACAE: 20 FD AC JSR $ACFD 33/ACB1: E8 INX 33/ACB2: A5 7E LDA $7E ; tile id 33/ACB4: 9D 00 02 STA $0200,X 33/ACB7: A5 7F LDA $7F 33/ACB9: 9D 04 02 STA $0204,X 33/ACBC: A5 80 LDA $80 33/ACBE: 9D 08 02 STA $0208,X 33/ACC1: A5 81 LDA $81 33/ACC3: 9D 0C 02 STA $020C,X 33/ACC6: E8 INX 33/ACC7: A5 82 LDA $82 ; attributes 33/ACC9: 20 FD AC JSR $ACFD 33/ACCC: E8 INX 33/ACCD: A5 8C LDA $8C ; x position 33/ACCF: 9D 00 02 STA $0200,X 33/ACD2: 18 CLC 33/ACD3: 69 08 ADC #$08 33/ACD5: 9D 04 02 STA $0204,X 33/ACD8: 18 CLC 33/ACD9: 69 08 ADC #$08 33/ACDB: 9D 08 02 STA $0208,X 33/ACDE: 18 CLC 33/ACDF: 69 08 ADC #$08 33/ACE1: 9D 0C 02 STA $020C,X 33/ACE4: A5 7E LDA $7E ; hide sprite if damage is zero 33/ACE6: 05 7F ORA $7F 33/ACE8: 05 80 ORA $80 33/ACEA: 05 81 ORA $81 33/ACEC: D0 07 BNE $ACF5 33/ACEE: A9 F0 LDA #$F0 33/ACF0: A6 C8 LDX $C8 33/ACF2: 20 FD AC JSR $ACFD 33/ACF5: A5 C8 LDA $C8 ; use 4 sprites 33/ACF7: 18 CLC 33/ACF8: 69 10 ADC #$10 33/ACFA: 85 C8 STA $C8 33/ACFC: 60 RTS ; [ set oam byte for damage digits ] 33/ACFD: 9D 00 02 STA $0200,X 33/AD00: 9D 04 02 STA $0204,X 33/AD03: 9D 08 02 STA $0208,X 33/AD06: 9D 0C 02 STA $020C,X 33/AD09: 60 RTS ; [ get damage numeral value ] ; X: slot id 33/AD0A: 8A TXA 33/AD0B: 85 7E STA $7E 33/AD0D: 0A ASL 33/AD0E: A8 TAY 33/AD0F: B9 4F 7E LDA $7E4F,Y ; damage value 33/AD12: 8D 70 7E STA $7E70 33/AD15: B9 50 7E LDA $7E50,Y 33/AD18: 85 7F STA $7F 33/AD1A: 29 3F AND #$3F 33/AD1C: 8D 71 7E STA $7E71 33/AD1F: A5 7F LDA $7F 33/AD21: 29 C0 AND #$C0 33/AD23: 05 7E ORA $7E 33/AD25: 8D 72 7E STA $7E72 33/AD28: A6 7E LDX $7E 33/AD2A: 60 RTS ; [ animation function $0C: damage numerals ] 33/AD2B: A9 00 LDA #$00 33/AD2D: 85 CB STA $CB 33/AD2F: A9 BE LDA #$BE 33/AD31: 20 40 A4 JSR $A440 ; load animation palette 33/AD34: A2 00 LDX #$00 33/AD36: BD 4F 7E LDA $7E4F,X ; return if no valid damage values 33/AD39: C9 FF CMP #$FF 33/AD3B: D0 06 BNE $AD43 33/AD3D: E8 INX 33/AD3E: E0 10 CPX #$10 33/AD40: D0 F4 BNE $AD36 33/AD42: 60 RTS 33/AD43: A9 0D LDA #$0D 33/AD45: 20 1E BF JSR $BF1E ; load animation graphics 33/AD48: 20 A6 AD JSR $ADA6 ; init damage numeral buffer 33/AD4B: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AD4E: 8D 73 7E STA $7E73 33/AD51: A9 08 LDA #$08 33/AD53: 85 90 STA $90 33/AD55: A9 40 LDA #$40 33/AD57: 85 91 STA $91 33/AD59: 20 2B A4 JSR $A42B ; clear animation oam data 33/AD5C: A9 00 LDA #$00 ; start at sprite 0 33/AD5E: 85 C8 STA $C8 33/AD60: AD 73 7E LDA $7E73 33/AD63: 18 CLC 33/AD64: 65 90 ADC $90 33/AD66: 8D 73 7E STA $7E73 33/AD69: AD 73 7E LDA $7E73 33/AD6C: 29 7F AND #$7F 33/AD6E: AA TAX 33/AD6F: 20 E3 7E JSR $7EE3 ; sine 33/AD72: A6 91 LDX $91 33/AD74: 20 EA F8 JSR $F8EA ; multiply 33/AD77: 86 8A STX $8A 33/AD79: A2 00 LDX #$00 33/AD7B: 20 0A AD JSR $AD0A ; get damage numeral value 33/AD7E: 20 4B AC JSR $AC4B ; update damage numeral sprites 33/AD81: AD 6F 7E LDA $7E6F 33/AD84: D0 06 BNE $AD8C 33/AD86: E8 INX ; next character 33/AD87: E0 04 CPX #$04 33/AD89: 4C 8F AD JMP $AD8F 33/AD8C: E8 INX ; next monster 33/AD8D: E0 08 CPX #$08 33/AD8F: D0 EA BNE $AD7B 33/AD91: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AD94: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AD97: 29 10 AND #$10 33/AD99: F0 04 BEQ $AD9F 33/AD9B: A9 10 LDA #$10 33/AD9D: 85 91 STA $91 33/AD9F: A5 B6 LDA $B6 33/ADA1: 29 20 AND #$20 ; animation is 32 frames 33/ADA3: F0 B7 BEQ $AD5C 33/ADA5: 60 RTS ; [ init damage numeral buffer ] 33/ADA6: A2 00 LDX #$00 33/ADA8: 20 0A AD JSR $AD0A ; get damage numeral value 33/ADAB: 20 F4 AD JSR $ADF4 ; convert damage numeral value to decimal 33/ADAE: 8A TXA 33/ADAF: 0A ASL 33/ADB0: 0A ASL 33/ADB1: A8 TAY 33/ADB2: A5 7E LDA $7E 33/ADB4: 99 00 73 STA $7300,Y 33/ADB7: A5 7F LDA $7F 33/ADB9: 99 01 73 STA $7301,Y 33/ADBC: A5 80 LDA $80 33/ADBE: 99 02 73 STA $7302,Y 33/ADC1: A5 81 LDA $81 33/ADC3: 99 03 73 STA $7303,Y 33/ADC6: A5 82 LDA $82 33/ADC8: 9D 80 73 STA $7380,X 33/ADCB: E8 INX 33/ADCC: E0 08 CPX #$08 33/ADCE: D0 D8 BNE $ADA8 33/ADD0: 60 RTS ; [ copy damage numeral data from buffer ] 33/ADD1: AD 72 7E LDA $7E72 33/ADD4: 29 3F AND #$3F 33/ADD6: AA TAX 33/ADD7: 0A ASL 33/ADD8: 0A ASL 33/ADD9: A8 TAY 33/ADDA: BD 80 73 LDA $7380,X 33/ADDD: 85 82 STA $82 33/ADDF: B9 00 73 LDA $7300,Y 33/ADE2: 85 7E STA $7E 33/ADE4: B9 01 73 LDA $7301,Y 33/ADE7: 85 7F STA $7F 33/ADE9: B9 02 73 LDA $7302,Y 33/ADEC: 85 80 STA $80 33/ADEE: B9 03 73 LDA $7303,Y 33/ADF1: 85 81 STA $81 33/ADF3: 60 RTS ; [ convert damage numeral value to decimal ] 33/ADF4: 8A TXA 33/ADF5: 48 PHA 33/ADF6: AD 70 7E LDA $7E70 33/ADF9: C9 FF CMP #$FF 33/ADFB: D0 16 BNE $AE13 33/ADFD: AD 71 7E LDA $7E71 33/AE00: C9 3F CMP #$3F 33/AE02: D0 0F BNE $AE13 33/AE04: A9 00 LDA #$00 33/AE06: 85 7E STA $7E 33/AE08: 85 7F STA $7F 33/AE0A: 85 80 STA $80 33/AE0C: 85 81 STA $81 33/AE0E: 85 82 STA $82 33/AE10: 4C AB AE JMP $AEAB 33/AE13: AD 72 7E LDA $7E72 33/AE16: 29 40 AND #$40 33/AE18: F0 15 BEQ $AE2F ; branch if not "miss" 33/AE1A: A9 03 LDA #$03 33/AE1C: 85 82 STA $82 33/AE1E: A9 00 LDA #$00 33/AE20: 85 7E STA $7E 33/AE22: 85 81 STA $81 33/AE24: A9 64 LDA #$64 33/AE26: 85 7F STA $7F 33/AE28: 85 80 STA $80 33/AE2A: E6 80 INC $80 33/AE2C: 4C AB AE JMP $AEAB 33/AE2F: AD 70 7E LDA $7E70 33/AE32: 85 18 STA $18 33/AE34: AD 71 7E LDA $7E71 33/AE37: 85 19 STA $19 33/AE39: A9 E8 LDA #$E8 ; 1000 33/AE3B: 85 1A STA $1A 33/AE3D: A9 03 LDA #$03 33/AE3F: 85 1B STA $1B 33/AE41: 20 92 FC JSR $FC92 ; divide (16-bit) 33/AE44: A5 1C LDA $1C 33/AE46: 85 7E STA $7E 33/AE48: A5 1E LDA $1E 33/AE4A: 85 18 STA $18 33/AE4C: A5 1F LDA $1F 33/AE4E: 85 19 STA $19 33/AE50: A9 64 LDA #$64 ; 100 33/AE52: 85 1A STA $1A 33/AE54: A9 00 LDA #$00 33/AE56: 85 1B STA $1B 33/AE58: 20 92 FC JSR $FC92 ; divide (16-bit) 33/AE5B: A5 1C LDA $1C 33/AE5D: 85 7F STA $7F 33/AE5F: A5 1E LDA $1E 33/AE61: 85 18 STA $18 33/AE63: A5 1F LDA $1F 33/AE65: 85 19 STA $19 33/AE67: A9 0A LDA #$0A ; 10 33/AE69: 85 1A STA $1A 33/AE6B: A9 00 LDA #$00 33/AE6D: 85 1B STA $1B 33/AE6F: 20 92 FC JSR $FC92 ; divide (16-bit) 33/AE72: A5 1C LDA $1C 33/AE74: 85 80 STA $80 33/AE76: A5 1E LDA $1E 33/AE78: 85 81 STA $81 33/AE7A: AD 72 7E LDA $7E72 33/AE7D: 29 80 AND #$80 33/AE7F: F0 0B BEQ $AE8C ; branch if not green numerals 33/AE81: A9 66 LDA #$66 ; tile offset (green numerals) 33/AE83: 85 18 STA $18 33/AE85: A9 03 LDA #$03 ; use sprite palette 3 33/AE87: 85 82 STA $82 33/AE89: 4C 94 AE JMP $AE94 33/AE8C: A9 56 LDA #$56 ; tile offset (red numerals) 33/AE8E: 85 18 STA $18 33/AE90: A9 03 LDA #$03 ; use sprite palette 3 33/AE92: 85 82 STA $82 33/AE94: A2 00 LDX #$00 33/AE96: B5 7E LDA $7E,X 33/AE98: D0 05 BNE $AE9F 33/AE9A: E8 INX 33/AE9B: E0 03 CPX #$03 33/AE9D: D0 F7 BNE $AE96 33/AE9F: B5 7E LDA $7E,X 33/AEA1: 18 CLC 33/AEA2: 65 18 ADC $18 33/AEA4: 95 7E STA $7E,X 33/AEA6: E8 INX 33/AEA7: E0 04 CPX #$04 33/AEA9: D0 F4 BNE $AE9F 33/AEAB: 68 PLA 33/AEAC: AA TAX 33/AEAD: 60 RTS ; -------------------------------------------------------------------------- ; pointers to swap between black magic bubble frames 33/AEAE: 7900 7940 ; tile index and vh flip for black magic bubble sprites 33/AEB2: 00 01 C7 C6 02 03 C5 C4 04 05 C3 C2 06 07 C1 C0 33/AEC2: 86 87 41 40 84 85 43 42 82 83 45 44 80 81 47 46 ; [ magic animation $0A: tsunami ] 33/AED2: AD 9B 7E LDA $7E9B 33/AED5: D0 01 BNE $AED8 33/AED7: 60 RTS 33/AED8: A2 00 LDX #$00 33/AEDA: BD E3 7B LDA $7BE3,X ; rng table 33/AEDD: 29 07 AND #$07 33/AEDF: 18 CLC 33/AEE0: 69 B0 ADC #$B0 33/AEE2: 9D 00 79 STA $7900,X 33/AEE5: E8 INX 33/AEE6: E0 0D CPX #$0D 33/AEE8: D0 F0 BNE $AEDA 33/AEEA: A9 10 LDA #$10 33/AEEC: 20 1E BF JSR $BF1E ; load animation graphics 33/AEEF: A9 BC LDA #$BC 33/AEF1: 20 40 A4 JSR $A440 ; load animation palette 33/AEF4: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AEF7: E6 C9 INC $C9 33/AEF9: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AEFC: 20 5E A0 JSR $A05E ; reset animation sprites 33/AEFF: A5 B6 LDA $B6 33/AF01: 29 01 AND #$01 33/AF03: 69 2C ADC #$2C 33/AF05: 85 8D STA $8D 33/AF07: A2 00 LDX #$00 33/AF09: A5 B6 LDA $B6 33/AF0B: 29 03 AND #$03 33/AF0D: 18 CLC 33/AF0E: 7D 00 79 ADC $7900,X 33/AF11: 85 8C STA $8C 33/AF13: FE 00 79 INC $7900,X 33/AF16: 20 2D AF JSR $AF2D 33/AF19: A5 8D LDA $8D 33/AF1B: 18 CLC 33/AF1C: 69 08 ADC #$08 33/AF1E: 85 8D STA $8D 33/AF20: E8 INX 33/AF21: E0 0D CPX #$0D 33/AF23: D0 E4 BNE $AF09 33/AF25: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AF28: C9 58 CMP #$58 33/AF2A: D0 CD BNE $AEF9 33/AF2C: 60 RTS ; [ ] 33/AF2D: 8A TXA 33/AF2E: 48 PHA 33/AF2F: A6 C8 LDX $C8 33/AF31: A9 4B LDA #$4B 33/AF33: 85 7E STA $7E 33/AF35: A9 03 LDA #$03 33/AF37: 85 7F STA $7F 33/AF39: A5 8D LDA $8D 33/AF3B: 9D 00 02 STA $0200,X 33/AF3E: E8 INX 33/AF3F: A5 7E LDA $7E 33/AF41: 9D 00 02 STA $0200,X 33/AF44: C6 7E DEC $7E 33/AF46: E8 INX 33/AF47: A9 43 LDA #$43 33/AF49: 9D 00 02 STA $0200,X 33/AF4C: E8 INX 33/AF4D: A5 8C LDA $8C 33/AF4F: 9D 00 02 STA $0200,X 33/AF52: C9 50 CMP #$50 33/AF54: B0 07 BCS $AF5D 33/AF56: 48 PHA 33/AF57: A9 F0 LDA #$F0 33/AF59: 9D FD 01 STA $01FD,X 33/AF5C: 68 PLA 33/AF5D: 18 CLC 33/AF5E: 69 08 ADC #$08 33/AF60: 85 8C STA $8C 33/AF62: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/AF65: E8 INX 33/AF66: C6 7F DEC $7F 33/AF68: D0 CF BNE $AF39 33/AF6A: 86 C8 STX $C8 33/AF6C: 68 PLA 33/AF6D: AA TAX 33/AF6E: 60 RTS ; [ load magic graphics properties ] 33/AF6F: AD 88 7E LDA $7E88 ; spell id 33/AF72: A2 03 LDX #$03 33/AF74: 20 EA F8 JSR $F8EA ; multiply 33/AF77: 18 CLC 33/AF78: 69 D0 ADC #$D0 33/AF7A: 85 7E STA $7E 33/AF7C: 8A TXA 33/AF7D: 69 91 ADC #$91 ; source: 2E/91D0 (magic graphics properties) 33/AF7F: 85 7F STA $7F 33/AF81: A9 8B LDA #$8B 33/AF83: 85 80 STA $80 33/AF85: A9 7E LDA #$7E ; destination: $7E8B 33/AF87: 85 81 STA $81 33/AF89: A9 03 LDA #$03 ; size: 3 bytes 33/AF8B: 85 82 STA $82 33/AF8D: A9 17 LDA #$17 33/AF8F: 85 84 STA $84 33/AF91: 4C 2F F9 JMP $F92F ; load rom data ; [ init pre-animation ] ; A: animation palette 33/AF94: 20 40 A4 JSR $A440 ; load animation palette 33/AF97: 20 0F A4 JSR $A40F ; save character animations frames 33/AF9A: A6 95 LDX $95 ; attacker id 33/AF9C: 4C F9 A3 JMP $A3F9 ; reset character animation sprites ; [ init character casting sprite ] 33/AF9F: 20 5E A0 JSR $A05E ; reset animation sprites 33/AFA2: 20 CF A2 JSR $A2CF ; check if toad or mini 33/AFA5: F0 04 BEQ $AFAB 33/AFA7: A9 0E LDA #$0E 33/AFA9: D0 02 BNE $AFAD 33/AFAB: A9 08 LDA #$08 33/AFAD: 4C DD A3 JMP $A3DD ; update attacking character sprite ; [ animation function $10: summon pre-animation ] 33/AFB0: A9 04 LDA #$04 ; summon pre-animation 33/AFB2: 20 1E BF JSR $BF1E ; load animation graphics 33/AFB5: AC 91 7E LDY $7E91 ; summon id 33/AFB8: B9 43 80 LDA $8043,Y ; summon palette 33/AFBB: 20 94 AF JSR $AF94 ; init pre-animation 33/AFBE: 20 59 A0 JSR $A059 ; reset animation frame counter ; start of 1st frame loop (spinning thing) 33/AFC1: 20 9F AF JSR $AF9F ; init character casting sprite 33/AFC4: 20 B9 B1 JSR $B1B9 ; update summon pre-animation sprite 33/AFC7: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AFCA: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AFCD: C9 28 CMP #$28 ; 40 frames 33/AFCF: D0 F0 BNE $AFC1 33/AFD1: 20 59 A0 JSR $A059 ; reset animation frame counter 33/AFD4: 20 5E A0 JSR $A05E ; reset animation sprites 33/AFD7: A9 5B LDA #$5B 33/AFD9: 20 EB A3 JSR $A3EB ; update animation sprite 33/AFDC: 20 A2 AF JSR $AFA2 ; init character casting sprite 33/AFDF: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) ; start of 2nd frame loop (sprites fly away) 33/AFE2: 20 2A B0 JSR $B02A ; draw summon sprites 33/AFE5: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/AFE8: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/AFEB: C9 28 CMP #$28 ; 40 frames 33/AFED: D0 F3 BNE $AFE2 33/AFEF: 4C 3A AC JMP $AC3A ; clean up after animation ; data for summon sprites flying away diagonally ; normal attack 33/AFF2: 00 FE 04 FE 08 02 0C 02 ; y increments 33/AFFA: 03 FE 07 02 0B FE 0F 02 ; x increments ; back attack 33/B002: 00 FE 04 FE 08 02 0C 02 ; y increments 33/B00A: 03 02 07 FE 0B 02 0F FE ; x increments ; [ check if sprite is onscreen (y) ] 33/B012: C9 08 CMP #$08 33/B014: B0 02 BCS $B018 33/B016: 38 SEC 33/B017: 60 RTS 33/B018: C9 F8 CMP #$F8 33/B01A: B0 FA BCS $B016 33/B01C: 18 CLC 33/B01D: 60 RTS ; [ check if sprite is onscreen (x) ] 33/B01E: C9 08 CMP #$08 33/B020: B0 02 BCS $B024 33/B022: 38 SEC 33/B023: 60 RTS 33/B024: C9 90 CMP #$90 33/B026: B0 FA BCS $B022 33/B028: 18 CLC 33/B029: 60 RTS ; [ draw summon sprites ] 33/B02A: 20 66 B0 JSR $B066 ; update summon sprite positions 33/B02D: A2 00 LDX #$00 33/B02F: BD 00 02 LDA $0200,X 33/B032: 20 1E B0 JSR $B01E ; check if sprite is onscreen (x) 33/B035: 90 08 BCC $B03F 33/B037: A9 00 LDA #$00 33/B039: 9D 01 02 STA $0201,X 33/B03C: 4C 47 B0 JMP $B047 33/B03F: BD 03 02 LDA $0203,X 33/B042: 20 12 B0 JSR $B012 ; check if sprite is onscreen (y) 33/B045: B0 F0 BCS $B037 33/B047: BD 01 02 LDA $0201,X 33/B04A: F0 11 BEQ $B05D 33/B04C: C9 58 CMP #$58 ; don't go past tile $58 33/B04E: F0 0D BEQ $B05D 33/B050: A5 B6 LDA $B6 33/B052: 29 18 AND #$18 ; increment tile id every 8 frames 33/B054: 4A LSR 33/B055: 4A LSR 33/B056: 4A LSR 33/B057: 18 CLC 33/B058: 69 55 ADC #$55 33/B05A: 9D 01 02 STA $0201,X 33/B05D: E8 INX 33/B05E: E8 INX 33/B05F: E8 INX 33/B060: E8 INX 33/B061: E0 10 CPX #$10 33/B063: D0 CA BNE $B02F 33/B065: 60 RTS ; [ update summon sprite positions ] 33/B066: A0 00 LDY #$00 33/B068: 20 D2 90 JSR $90D2 ; check back attack 33/B06B: D0 10 BNE $B07D ; back attack 33/B06D: B9 03 B0 LDA $B003,Y 33/B070: BE 02 B0 LDX $B002,Y 33/B073: 20 8F B0 JSR $B08F ; increment summon sprite position 33/B076: C8 INY 33/B077: C8 INY 33/B078: C0 10 CPY #$10 33/B07A: D0 F1 BNE $B06D 33/B07C: 60 RTS ; normal attack 33/B07D: A0 00 LDY #$00 33/B07F: B9 F3 AF LDA $AFF3,Y 33/B082: BE F2 AF LDX $AFF2,Y 33/B085: 20 8F B0 JSR $B08F ; increment summon sprite position 33/B088: C8 INY 33/B089: C8 INY 33/B08A: C0 10 CPY #$10 33/B08C: D0 F1 BNE $B07F 33/B08E: 60 RTS ; [ increment summon sprite position ] 33/B08F: 85 7E STA $7E 33/B091: BD 00 02 LDA $0200,X 33/B094: 18 CLC 33/B095: 65 7E ADC $7E 33/B097: 9D 00 02 STA $0200,X 33/B09A: 60 RTS ; [ pre-magic animation ] 33/B09B: 20 6F AF JSR $AF6F ; load magic graphics properties 33/B09E: AD 8B 7E LDA $7E8B 33/B0A1: 29 80 AND #$80 33/B0A3: 48 PHA 33/B0A4: D0 04 BNE $B0AA 33/B0A6: A9 05 LDA #$05 ; black magic pre-animation 33/B0A8: D0 02 BNE $B0AC 33/B0AA: A9 06 LDA #$06 ; white magic pre-animation 33/B0AC: 20 1E BF JSR $BF1E ; load animation graphics 33/B0AF: AD 8D 7E LDA $7E8D 33/B0B2: 20 94 AF JSR $AF94 ; init pre-animation 33/B0B5: AD 9A 7E LDA $7E9A 33/B0B8: 10 02 BPL $B0BC ; branch if attacker is a character 33/B0BA: 68 PLA 33/B0BB: 60 RTS ; ineffective 33/B0BC: A5 CC LDA $CC 33/B0BE: F0 12 BEQ $B0D2 ; branch if not ineffective 33/B0C0: 68 PLA 33/B0C1: 20 59 A0 JSR $A059 ; reset animation frame counter 33/B0C4: 20 9F AF JSR $AF9F ; init character casting sprite 33/B0C7: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B0CA: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/B0CD: C9 20 CMP #$20 33/B0CF: D0 F3 BNE $B0C4 33/B0D1: 60 RTS ; black magic 33/B0D2: 68 PLA 33/B0D3: D0 1C BNE $B0F1 33/B0D5: 20 59 A0 JSR $A059 ; reset animation frame counter 33/B0D8: A9 A1 LDA #$A1 ; play sound effect $21 33/B0DA: 8D 49 7F STA $7F49 33/B0DD: 20 9F AF JSR $AF9F ; init character casting sprite 33/B0E0: 20 CD B1 JSR $B1CD ; update black magic pre-animation sprite 33/B0E3: 20 F8 B1 JSR $B1F8 ; update black magic bubble sprites 33/B0E6: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B0E9: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/B0EC: C9 2C CMP #$2C ; 44 frames 33/B0EE: D0 ED BNE $B0DD 33/B0F0: 60 RTS ; white magic 33/B0F1: 20 5F BF JSR $BF5F ; reset vector angles 33/B0F4: A9 10 LDA #$10 33/B0F6: 20 5C B3 JSR $B35C ; set all vector distances 33/B0F9: 20 62 B3 JSR $B362 ; init vector angles around a circle 33/B0FC: 20 59 A0 JSR $A059 ; reset animation frame counter 33/B0FF: A9 A1 LDA #$A1 ; play sound effect $21 33/B101: 8D 49 7F STA $7F49 33/B104: 20 9F AF JSR $AF9F ; init character casting sprite 33/B107: 20 C3 B1 JSR $B1C3 ; update white magic pre-animation sprite 33/B10A: 20 34 B1 JSR $B134 ; update white magic star sprites 33/B10D: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B110: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/B113: C9 30 CMP #$30 ; 48 frames 33/B115: D0 ED BNE $B104 33/B117: 20 9F AF JSR $AF9F ; init character casting sprite 33/B11A: 20 34 B1 JSR $B134 ; update white magic star sprites 33/B11D: A0 00 LDY #$00 33/B11F: A9 01 LDA #$01 33/B121: 20 9C BF JSR $BF9C ; subtract from vector distance 33/B124: C8 INY 33/B125: C0 08 CPY #$08 33/B127: D0 F6 BNE $B11F 33/B129: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B12C: E6 B6 INC $B6 33/B12E: AD 26 7E LDA $7E26 33/B131: D0 E4 BNE $B117 33/B133: 60 RTS ; [ update white magic star sprites ] 33/B134: A9 00 LDA #$00 33/B136: 85 8E STA $8E 33/B138: A6 95 LDX $95 33/B13A: B5 C0 LDA $C0,X 33/B13C: 18 CLC 33/B13D: 69 04 ADC #$04 33/B13F: 85 8C STA $8C 33/B141: B5 C4 LDA $C4,X 33/B143: 18 CLC 33/B144: 69 06 ADC #$06 33/B146: 85 8D STA $8D ; start of star loop 33/B148: A4 8E LDY $8E 33/B14A: 20 6F BF JSR $BF6F ; get vector x-component 33/B14D: 48 PHA 33/B14E: 20 7B BF JSR $BF7B ; get vector y-component 33/B151: 18 CLC 33/B152: 65 8D ADC $8D 33/B154: A6 C8 LDX $C8 33/B156: 9D 00 02 STA $0200,X 33/B159: E8 INX 33/B15A: A9 49 LDA #$49 33/B15C: 9D 00 02 STA $0200,X 33/B15F: E8 INX 33/B160: A9 06 LDA #$06 33/B162: 85 7E STA $7E 33/B164: 20 B4 B1 JSR $B1B4 ; get frame counter / 4 33/B167: 66 7E ROR $7E 33/B169: A5 8E LDA $8E 33/B16B: 4A LSR 33/B16C: 6A ROR 33/B16D: 29 80 AND #$80 33/B16F: 85 7F STA $7F 33/B171: A5 7E LDA $7E 33/B173: 45 7F EOR $7F 33/B175: 9D 00 02 STA $0200,X 33/B178: E8 INX 33/B179: 68 PLA 33/B17A: 18 CLC 33/B17B: 65 8C ADC $8C 33/B17D: 9D 00 02 STA $0200,X 33/B180: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/B183: E8 INX 33/B184: 86 C8 STX $C8 33/B186: E6 8E INC $8E 33/B188: A5 8E LDA $8E 33/B18A: C9 08 CMP #$08 33/B18C: D0 BA BNE $B148 33/B18E: A0 00 LDY #$00 33/B190: A9 04 LDA #$04 33/B192: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B195: C8 INY 33/B196: C0 08 CPY #$08 33/B198: D0 F6 BNE $B190 33/B19A: 60 RTS ; [ flip sprite if back attack ] ; X: pointer to sprite x position (last byte of sprite data) 33/B19B: 20 D2 90 JSR $90D2 ; check back attack 33/B19E: D0 13 BNE $B1B3 33/B1A0: BD 00 02 LDA $0200,X 33/B1A3: 49 FF EOR #$FF 33/B1A5: 38 SEC 33/B1A6: E9 08 SBC #$08 33/B1A8: 9D 00 02 STA $0200,X 33/B1AB: BD FF 01 LDA $01FF,X 33/B1AE: 49 40 EOR #$40 33/B1B0: 9D FF 01 STA $01FF,X 33/B1B3: 60 RTS ; [ get frame counter / 4 ] 33/B1B4: A5 B6 LDA $B6 ; animation frame counter 33/B1B6: 4A LSR 33/B1B7: 4A LSR 33/B1B8: 60 RTS ; [ update summon pre-animation sprite ] 33/B1B9: 20 B4 B1 JSR $B1B4 ; get frame counter / 4 33/B1BC: A8 TAY 33/B1BD: B9 EE B1 LDA $B1EE,Y 33/B1C0: 4C EB A3 JMP $A3EB ; update animation sprite ; [ update white magic pre-animation sprite ] 33/B1C3: 20 B4 B1 JSR $B1B4 ; get frame counter / 4 33/B1C6: A8 TAY 33/B1C7: B9 E2 B1 LDA $B1E2,Y 33/B1CA: 4C EB A3 JMP $A3EB ; update animation sprite ; [ update black magic pre-animation sprite ] 33/B1CD: 20 B4 B1 JSR $B1B4 ; get frame counter / 4 33/B1D0: A8 TAY 33/B1D1: B9 D7 B1 LDA $B1D7,Y 33/B1D4: 4C EB A3 JMP $A3EB ; update animation sprite ; black magic 33/B1D7: 48 49 48 49 4A 4B 4C 4D 4E 4E 4E ; white magic 33/B1E2: 4F 50 51 52 53 54 52 53 54 55 55 55 ; summon 33/B1EE: 56 57 58 59 56 57 58 59 5A 5A ; [ update black magic bubble sprites ] 33/B1F8: A2 00 LDX #$00 33/B1FA: A0 00 LDY #$00 33/B1FC: 8A TXA 33/B1FD: 29 30 AND #$30 33/B1FF: 4A LSR 33/B200: 38 SEC 33/B201: E9 04 SBC #$04 33/B203: 9D 00 79 STA $7900,X ; y position 33/B206: 8A TXA 33/B207: 29 0C AND #$0C 33/B209: 0A ASL 33/B20A: 38 SEC 33/B20B: E9 08 SBC #$08 33/B20D: 9D 03 79 STA $7903,X ; x position 33/B210: B9 B2 AE LDA $AEB2,Y 33/B213: 48 PHA 33/B214: 29 C0 AND #$C0 33/B216: 09 03 ORA #$03 ; use sprite palette 3 33/B218: 9D 02 79 STA $7902,X ; flags 33/B21B: 68 PLA 33/B21C: 29 0F AND #$0F 33/B21E: 18 CLC 33/B21F: 69 49 ADC #$49 33/B221: 9D 01 79 STA $7901,X ; tile index 33/B224: C8 INY 33/B225: E8 INX 33/B226: E8 INX 33/B227: E8 INX 33/B228: E8 INX 33/B229: E0 80 CPX #$80 33/B22B: D0 CF BNE $B1FC 33/B22D: A5 B6 LDA $B6 33/B22F: 29 02 AND #$02 33/B231: A8 TAY 33/B232: B9 AE AE LDA $AEAE,Y 33/B235: 85 7E STA $7E 33/B237: B9 AF AE LDA $AEAF,Y 33/B23A: 85 7F STA $7F 33/B23C: A0 00 LDY #$00 33/B23E: A6 95 LDX $95 33/B240: B5 C0 LDA $C0,X 33/B242: 85 80 STA $80 33/B244: B5 C4 LDA $C4,X 33/B246: 85 81 STA $81 33/B248: A6 C8 LDX $C8 33/B24A: B1 7E LDA ($7E),Y 33/B24C: 18 CLC 33/B24D: 65 81 ADC $81 33/B24F: 9D 00 02 STA $0200,X 33/B252: E8 INX 33/B253: C8 INY 33/B254: B1 7E LDA ($7E),Y 33/B256: 9D 00 02 STA $0200,X 33/B259: E8 INX 33/B25A: C8 INY 33/B25B: B1 7E LDA ($7E),Y 33/B25D: 9D 00 02 STA $0200,X 33/B260: E8 INX 33/B261: C8 INY 33/B262: B1 7E LDA ($7E),Y 33/B264: 18 CLC 33/B265: 65 80 ADC $80 33/B267: 9D 00 02 STA $0200,X 33/B26A: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/B26D: E8 INX 33/B26E: C8 INY 33/B26F: C0 40 CPY #$40 33/B271: D0 D7 BNE $B24A 33/B273: 86 C8 STX $C8 33/B275: 60 RTS ; [ magic projectile animation ] 33/B276: AD 9A 7E LDA $7E9A 33/B279: 29 C0 AND #$C0 33/B27B: C9 40 CMP #$40 33/B27D: F0 01 BEQ $B280 ; return if not character vs. monster 33/B27F: 60 RTS 33/B280: A5 CC LDA $CC 33/B282: F0 01 BEQ $B285 ; return if ineffective 33/B284: 60 RTS 33/B285: 20 9F AF JSR $AF9F ; init character casting sprite 33/B288: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B28B: 20 5F BF JSR $BF5F ; reset vector angles 33/B28E: AD 89 7E LDA $7E89 33/B291: 85 8E STA $8E 33/B293: A0 00 LDY #$00 33/B295: 98 TYA 33/B296: AA TAX 33/B297: 20 A5 A7 JSR $A7A5 ; get angle from attacker to target 33/B29A: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B29D: A9 00 LDA #$00 33/B29F: 99 26 7E STA $7E26,Y 33/B2A2: 99 30 7E STA $7E30,Y 33/B2A5: 06 8E ASL $8E 33/B2A7: B0 04 BCS $B2AD 33/B2A9: A9 FF LDA #$FF 33/B2AB: D0 02 BNE $B2AF 33/B2AD: A9 00 LDA #$00 33/B2AF: 99 00 73 STA $7300,Y 33/B2B2: C8 INY 33/B2B3: C0 08 CPY #$08 33/B2B5: D0 DE BNE $B295 33/B2B7: 20 59 A0 JSR $A059 ; reset animation frame counter ; start of frame loop 33/B2BA: A9 00 LDA #$00 33/B2BC: 85 8A STA $8A 33/B2BE: A6 8A LDX $8A 33/B2C0: BD 00 73 LDA $7300,X 33/B2C3: C9 FF CMP #$FF 33/B2C5: F0 37 BEQ $B2FE 33/B2C7: A4 8A LDY $8A 33/B2C9: 20 7B BF JSR $BF7B ; get vector y-component 33/B2CC: 48 PHA 33/B2CD: 20 6F BF JSR $BF6F ; get vector x-component 33/B2D0: 48 PHA 33/B2D1: A9 10 LDA #$10 33/B2D3: 20 87 BF JSR $BF87 ; add to vector distance 33/B2D6: 68 PLA 33/B2D7: A6 95 LDX $95 33/B2D9: 18 CLC 33/B2DA: 75 C0 ADC $C0,X 33/B2DC: 38 SEC 33/B2DD: E9 10 SBC #$10 33/B2DF: 85 8C STA $8C 33/B2E1: 68 PLA 33/B2E2: 18 CLC 33/B2E3: 75 C4 ADC $C4,X 33/B2E5: 69 08 ADC #$08 33/B2E7: 85 8E STA $8E 33/B2E9: 20 22 B3 JSR $B322 ; update magic projectile sprite 33/B2EC: A5 8A LDA $8A 33/B2EE: 0A ASL 33/B2EF: A8 TAY 33/B2F0: B9 D7 7D LDA $7DD7,Y ; center x position 33/B2F3: C5 8C CMP $8C 33/B2F5: 90 07 BCC $B2FE 33/B2F7: A9 FF LDA #$FF 33/B2F9: A6 8A LDX $8A 33/B2FB: 9D 00 73 STA $7300,X 33/B2FE: E6 8A INC $8A 33/B300: A5 8A LDA $8A 33/B302: C9 08 CMP #$08 33/B304: D0 B8 BNE $B2BE 33/B306: E6 B6 INC $B6 33/B308: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B30B: A2 00 LDX #$00 33/B30D: BD 00 73 LDA $7300,X 33/B310: C9 FF CMP #$FF 33/B312: D0 A6 BNE $B2BA 33/B314: E8 INX 33/B315: E0 08 CPX #$08 33/B317: D0 F4 BNE $B30D 33/B319: A2 0A LDX #$0A ; wait 10 frames 33/B31B: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B31E: CA DEX 33/B31F: D0 FA BNE $B31B 33/B321: 60 RTS ; [ update magic projectile sprite ] 33/B322: A5 8A LDA $8A 33/B324: 0A ASL 33/B325: 0A ASL 33/B326: 18 CLC 33/B327: 69 18 ADC #$18 33/B329: AA TAX 33/B32A: A5 8E LDA $8E 33/B32C: 9D 00 02 STA $0200,X 33/B32F: E8 INX 33/B330: A9 58 LDA #$58 33/B332: 9D 00 02 STA $0200,X 33/B335: E8 INX 33/B336: A5 B6 LDA $B6 33/B338: 6A ROR 33/B339: 6A ROR 33/B33A: 29 80 AND #$80 33/B33C: 09 03 ORA #$03 33/B33E: 9D 00 02 STA $0200,X 33/B341: E8 INX 33/B342: A5 8C LDA $8C 33/B344: 9D 00 02 STA $0200,X 33/B347: 4C 9B B1 JMP $B19B ; flip sprite if back attack ; [ set all vector x distances ] 33/B34A: A2 08 LDX #$08 33/B34C: 9D 25 7E STA $7E25,X 33/B34F: CA DEX 33/B350: D0 FA BNE $B34C 33/B352: 60 RTS ; [ set all vector y distances ] 33/B353: A2 08 LDX #$08 33/B355: 9D 2F 7E STA $7E2F,X 33/B358: CA DEX 33/B359: D0 FA BNE $B355 33/B35B: 60 RTS ; [ set all vector distances ] 33/B35C: 20 4A B3 JSR $B34A 33/B35F: 4C 53 B3 JMP $B353 ; [ init vector angles around a circle ] 33/B362: A9 00 LDA #$00 33/B364: 85 88 STA $88 33/B366: A0 00 LDY #$00 33/B368: A5 88 LDA $88 33/B36A: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B36D: A5 88 LDA $88 33/B36F: 18 CLC 33/B370: 69 20 ADC #$20 33/B372: 85 88 STA $88 33/B374: C8 INY 33/B375: C0 08 CPY #$08 33/B377: D0 EF BNE $B368 33/B379: 60 RTS ; [ ] 33/B37A: 20 6F BF JSR $BF6F ; get vector x-component 33/B37D: 85 8C STA $8C 33/B37F: 20 7B BF JSR $BF7B ; get vector y-component 33/B382: 85 8E STA $8E 33/B384: 60 RTS ; [ magic animation $01: kill ] 33/B385: 20 9B B0 JSR $B09B ; pre-magic animation 33/B388: AD 9B 7E LDA $7E9B 33/B38B: D0 03 BNE $B390 33/B38D: 4C 10 B4 JMP $B410 33/B390: E6 C9 INC $C9 33/B392: 20 9F AF JSR $AF9F ; init character casting sprite 33/B395: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B398: 20 89 B5 JSR $B589 ; load magic animation graphics 33/B39B: A2 00 LDX #$00 33/B39D: 20 9F AF JSR $AF9F ; init character casting sprite 33/B3A0: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B3A3: 20 5F BF JSR $BF5F ; reset vector angles 33/B3A6: A9 00 LDA #$00 33/B3A8: 20 5C B3 JSR $B35C ; set all vector distances 33/B3AB: 20 62 B3 JSR $B362 ; init vector angles around a circle 33/B3AE: A9 80 LDA #$80 33/B3B0: 85 B6 STA $B6 33/B3B2: 20 7C B4 JSR $B47C 33/B3B5: A0 00 LDY #$00 33/B3B7: 20 7A B3 JSR $B37A 33/B3BA: A6 95 LDX $95 33/B3BC: B5 C0 LDA $C0,X 33/B3BE: 38 SEC 33/B3BF: E9 08 SBC #$08 33/B3C1: 85 8D STA $8D 33/B3C3: B5 C4 LDA $C4,X 33/B3C5: 18 CLC 33/B3C6: 69 08 ADC #$08 33/B3C8: 85 8F STA $8F 33/B3CA: 20 19 B5 JSR $B519 ; draw single animation sprite 33/B3CD: A9 FC LDA #$FC 33/B3CF: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B3D2: A5 B6 LDA $B6 33/B3D4: 0A ASL 33/B3D5: 29 7F AND #$7F 33/B3D7: AA TAX 33/B3D8: 20 E3 7E JSR $7EE3 ; sine 33/B3DB: AA TAX 33/B3DC: A5 B6 LDA $B6 33/B3DE: 4A LSR 33/B3DF: 20 EA F8 JSR $F8EA ; multiply 33/B3E2: 8A TXA 33/B3E3: 99 30 7E STA $7E30,Y 33/B3E6: A5 B6 LDA $B6 33/B3E8: 4A LSR 33/B3E9: 18 CLC 33/B3EA: 69 40 ADC #$40 33/B3EC: 29 7F AND #$7F 33/B3EE: AA TAX 33/B3EF: 20 E3 7E JSR $7EE3 ; sine 33/B3F2: AA TAX 33/B3F3: A5 B6 LDA $B6 33/B3F5: 4A LSR 33/B3F6: 20 EA F8 JSR $F8EA ; multiply 33/B3F9: 8A TXA 33/B3FA: 99 26 7E STA $7E26,Y 33/B3FD: C8 INY 33/B3FE: C0 08 CPY #$08 33/B400: D0 B5 BNE $B3B7 33/B402: E6 B6 INC $B6 33/B404: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B407: A5 B6 LDA $B6 33/B409: C9 BC CMP #$BC 33/B40B: D0 A5 BNE $B3B2 33/B40D: 20 17 B4 JSR $B417 33/B410: 4C 35 AC JMP $AC35 ; clean up after animation 33/B413: 73 7B 84 8B ; [ kill animation ] 33/B417: 20 59 A0 JSR $A059 ; reset animation frame counter 33/B41A: 8D 2E 7E STA $7E2E 33/B41D: 8D 38 7E STA $7E38 33/B420: A6 95 LDX $95 33/B422: BD 13 B4 LDA $B413,X 33/B425: A0 08 LDY #$08 33/B427: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B42A: 20 7C B4 JSR $B47C 33/B42D: A0 00 LDY #$00 33/B42F: 20 7A B3 JSR $B37A 33/B432: A6 95 LDX $95 33/B434: B5 C0 LDA $C0,X 33/B436: 38 SEC 33/B437: E9 08 SBC #$08 33/B439: 85 8D STA $8D 33/B43B: B5 C4 LDA $C4,X 33/B43D: 18 CLC 33/B43E: 69 08 ADC #$08 33/B440: 85 8F STA $8F 33/B442: 98 TYA 33/B443: 48 PHA 33/B444: A0 08 LDY #$08 33/B446: 20 6F BF JSR $BF6F ; get vector x-component 33/B449: 18 CLC 33/B44A: 65 8D ADC $8D 33/B44C: 85 8D STA $8D 33/B44E: 20 7B BF JSR $BF7B ; get vector y-component 33/B451: 18 CLC 33/B452: 65 8F ADC $8F 33/B454: 85 8F STA $8F 33/B456: 68 PLA 33/B457: A8 TAY 33/B458: 20 19 B5 JSR $B519 ; draw single animation sprite 33/B45B: A9 FC LDA #$FC 33/B45D: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B460: C8 INY 33/B461: C0 08 CPY #$08 33/B463: D0 CA BNE $B42F 33/B465: AD 38 7E LDA $7E38 33/B468: 18 CLC 33/B469: 69 04 ADC #$04 33/B46B: 8D 38 7E STA $7E38 33/B46E: 8D 2E 7E STA $7E2E 33/B471: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B474: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/B477: C9 30 CMP #$30 33/B479: D0 AF BNE $B42A 33/B47B: 60 RTS 33/B47C: A2 00 LDX #$00 33/B47E: A9 F0 LDA #$F0 33/B480: 9D 18 02 STA $0218,X 33/B483: E8 INX 33/B484: E0 20 CPX #$20 33/B486: D0 F8 BNE $B480 33/B488: A9 18 LDA #$18 33/B48A: 85 C8 STA $C8 33/B48C: 60 RTS ; [ magic animation $04: drain ] 33/B48D: 20 11 B9 JSR $B911 33/B490: AD 9B 7E LDA $7E9B 33/B493: F0 1E BEQ $B4B3 33/B495: 20 89 B5 JSR $B589 ; load magic animation graphics 33/B498: AD 89 7E LDA $7E89 33/B49B: 8D 8A 7E STA $7E8A 33/B49E: A2 00 LDX #$00 33/B4A0: 86 8A STX $8A 33/B4A2: 0E 8A 7E ASL $7E8A 33/B4A5: 90 07 BCC $B4AE 33/B4A7: 8A TXA 33/B4A8: 48 PHA 33/B4A9: 20 B4 B4 JSR $B4B4 33/B4AC: 68 PLA 33/B4AD: AA TAX 33/B4AE: E8 INX 33/B4AF: E0 08 CPX #$08 33/B4B1: D0 ED BNE $B4A0 33/B4B3: 60 RTS ; [ drain animation ] 33/B4B4: E6 C9 INC $C9 33/B4B6: 20 5E A0 JSR $A05E ; reset animation sprites 33/B4B9: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B4BC: 20 5F BF JSR $BF5F ; reset vector angles 33/B4BF: A9 80 LDA #$80 33/B4C1: 20 5C B3 JSR $B35C ; set all vector distances 33/B4C4: 20 62 B3 JSR $B362 ; init vector angles around a circle 33/B4C7: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B4CA: 20 7C B4 JSR $B47C 33/B4CD: A0 00 LDY #$00 33/B4CF: 20 7A B3 JSR $B37A 33/B4D2: AD 9A 7E LDA $7E9A 33/B4D5: 29 40 AND #$40 33/B4D7: D0 13 BNE $B4EC 33/B4D9: A6 8A LDX $8A 33/B4DB: B5 C0 LDA $C0,X 33/B4DD: 18 CLC 33/B4DE: 69 04 ADC #$04 33/B4E0: 85 8D STA $8D 33/B4E2: B5 C4 LDA $C4,X 33/B4E4: 18 CLC 33/B4E5: 69 08 ADC #$08 33/B4E7: 85 8F STA $8F 33/B4E9: 4C FA B4 JMP $B4FA 33/B4EC: A5 8A LDA $8A 33/B4EE: 0A ASL 33/B4EF: AA TAX 33/B4F0: BD D7 7D LDA $7DD7,X ; center x position 33/B4F3: 85 8D STA $8D 33/B4F5: BD D8 7D LDA $7DD8,X ; center y position 33/B4F8: 85 8F STA $8F 33/B4FA: 20 19 B5 JSR $B519 ; draw single animation sprite 33/B4FD: A9 FC LDA #$FC 33/B4FF: 20 B1 BF JSR $BFB1 ; add to vector angle 33/B502: A9 04 LDA #$04 33/B504: 20 9C BF JSR $BF9C ; subtract from vector distance 33/B507: C8 INY 33/B508: C0 08 CPY #$08 33/B50A: D0 C3 BNE $B4CF 33/B50C: E6 B6 INC $B6 33/B50E: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B511: AD 26 7E LDA $7E26 33/B514: C9 08 CMP #$08 33/B516: B0 B2 BCS $B4CA 33/B518: 60 RTS ; [ draw single animation sprite ] ; used by kill, cyclone, and drain ; $8C: x offset ; $8D: x position ; $8E: y offset ; $8F: y position 33/B519: A5 8C LDA $8C ; return if sprite is out of frame 33/B51B: 30 0A BMI $B527 33/B51D: A5 8D LDA $8D 33/B51F: 18 CLC 33/B520: 65 8C ADC $8C 33/B522: 90 14 BCC $B538 33/B524: 4C 88 B5 JMP $B588 33/B527: 49 FF EOR #$FF 33/B529: 18 CLC 33/B52A: 69 01 ADC #$01 33/B52C: 85 7E STA $7E 33/B52E: A5 8D LDA $8D 33/B530: 38 SEC 33/B531: E5 7E SBC $7E 33/B533: B0 03 BCS $B538 33/B535: 4C 88 B5 JMP $B588 33/B538: A5 8E LDA $8E 33/B53A: 30 0F BMI $B54B 33/B53C: 18 CLC 33/B53D: 65 8F ADC $8F 33/B53F: 90 03 BCC $B544 33/B541: 4C 88 B5 JMP $B588 33/B544: C9 90 CMP #$90 33/B546: 90 14 BCC $B55C 33/B548: 4C 88 B5 JMP $B588 33/B54B: 49 FF EOR #$FF 33/B54D: 18 CLC 33/B54E: 69 01 ADC #$01 33/B550: 85 7E STA $7E 33/B552: A5 8F LDA $8F 33/B554: 38 SEC 33/B555: E5 7E SBC $7E 33/B557: B0 03 BCS $B55C 33/B559: 4C 88 B5 JMP $B588 33/B55C: A6 C8 LDX $C8 ; pointer to sprite data 33/B55E: A5 8F LDA $8F 33/B560: 18 CLC 33/B561: 65 8E ADC $8E 33/B563: 9D 00 02 STA $0200,X ; set y position 33/B566: E8 INX 33/B567: A5 B6 LDA $B6 33/B569: 29 02 AND #$02 ; change tile every 2 frames 33/B56B: 4A LSR 33/B56C: 18 CLC 33/B56D: 69 49 ADC #$49 33/B56F: 9D 00 02 STA $0200,X ; tile index ($49 or $4A) 33/B572: E8 INX 33/B573: A9 03 LDA #$03 33/B575: 9D 00 02 STA $0200,X ; always use sprite palette 3 33/B578: E8 INX 33/B579: A5 8D LDA $8D 33/B57B: 18 CLC 33/B57C: 65 8C ADC $8C 33/B57E: 9D 00 02 STA $0200,X ; x position 33/B581: 86 C8 STX $C8 33/B583: E6 C8 INC $C8 33/B585: 4C 9B B1 JMP $B19B ; flip sprite if back attack 33/B588: 60 RTS ; [ load magic animation graphics ] 33/B589: AD 8B 7E LDA $7E8B 33/B58C: 29 40 AND #$40 33/B58E: D0 07 BNE $B597 33/B590: A9 00 LDA #$00 ; 9600 33/B592: A2 96 LDX #$96 33/B594: 4C 9B B5 JMP $B59B 33/B597: A9 00 LDA #$00 33/B599: A2 A6 LDX #$A6 33/B59B: 85 7E STA $7E 33/B59D: 86 7F STX $7F 33/B59F: AD 8C 7E LDA $7E8C 33/B5A2: A2 10 LDX #$10 33/B5A4: 20 EA F8 JSR $F8EA ; multiply 33/B5A7: 18 CLC 33/B5A8: 65 7E ADC $7E 33/B5AA: 85 7E STA $7E 33/B5AC: 8A TXA 33/B5AD: 65 7F ADC $7F 33/B5AF: 85 7F STA $7F 33/B5B1: A9 07 LDA #$07 ; magic graphics 33/B5B3: 20 24 BF JSR $BF24 ; load animation graphics (w/ offset) 33/B5B6: A9 08 LDA #$08 33/B5B8: 4C 1E BF JMP $BF1E ; load animation graphics ; [ reflect animation ??? ] 33/B5BB: A9 04 LDA #$04 33/B5BD: 85 B6 STA $B6 33/B5BF: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B5C2: 20 5E A0 JSR $A05E ; reset animation sprites 33/B5C5: A0 00 LDY #$00 33/B5C7: 84 C8 STY $C8 33/B5C9: AD 9A 7E LDA $7E9A 33/B5CC: 29 40 AND #$40 33/B5CE: D0 17 BNE $B5E7 33/B5D0: A6 90 LDX $90 33/B5D2: B5 C0 LDA $C0,X 33/B5D4: 38 SEC 33/B5D5: E9 10 SBC #$10 33/B5D7: 85 80 STA $80 33/B5D9: B5 C4 LDA $C4,X 33/B5DB: 38 SEC 33/B5DC: E9 04 SBC #$04 33/B5DE: 85 81 STA $81 33/B5E0: A9 73 LDA #$73 33/B5E2: A2 94 LDX #$94 33/B5E4: 4C F9 B5 JMP $B5F9 33/B5E7: A5 90 LDA $90 33/B5E9: 0A ASL 33/B5EA: AA TAX 33/B5EB: BD D7 7D LDA $7DD7,X ; center x position 33/B5EE: 85 80 STA $80 33/B5F0: BD D8 7D LDA $7DD8,X ; center y position 33/B5F3: 85 81 STA $81 33/B5F5: A9 53 LDA #$53 33/B5F7: A2 94 LDX #$94 33/B5F9: 85 7E STA $7E 33/B5FB: 86 7F STX $7F 33/B5FD: A9 00 LDA #$00 33/B5FF: 85 82 STA $82 33/B601: 20 1A B6 JSR $B61A 33/B604: A5 81 LDA $81 33/B606: 18 CLC 33/B607: 69 10 ADC #$10 33/B609: 85 81 STA $81 33/B60B: A9 10 LDA #$10 33/B60D: 20 F2 F8 JSR $F8F2 ; add to +$7E 33/B610: 20 1A B6 JSR $B61A 33/B613: C6 B6 DEC $B6 33/B615: D0 A8 BNE $B5BF 33/B617: 4C 5E A0 JMP $A05E ; reset animation sprites 33/B61A: A6 C8 LDX $C8 33/B61C: A0 00 LDY #$00 33/B61E: B1 7E LDA ($7E),Y 33/B620: 18 CLC 33/B621: 65 81 ADC $81 33/B623: 9D 00 02 STA $0200,X 33/B626: C8 INY 33/B627: E8 INX 33/B628: B1 7E LDA ($7E),Y 33/B62A: 18 CLC 33/B62B: 65 82 ADC $82 33/B62D: 9D 00 02 STA $0200,X 33/B630: C8 INY 33/B631: E8 INX 33/B632: B1 7E LDA ($7E),Y 33/B634: 09 03 ORA #$03 33/B636: 9D 00 02 STA $0200,X 33/B639: C8 INY 33/B63A: E8 INX 33/B63B: B1 7E LDA ($7E),Y 33/B63D: 18 CLC 33/B63E: 65 80 ADC $80 33/B640: 9D 00 02 STA $0200,X 33/B643: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/B646: C8 INY 33/B647: E8 INX 33/B648: C0 10 CPY #$10 33/B64A: D0 D2 BNE $B61E 33/B64C: 86 C8 STX $C8 33/B64E: 60 RTS ; [ magic hit animation ] ; once per target 33/B64F: 0E B8 7E ASL $7EB8 33/B652: B0 03 BCS $B657 ; branch if reflected 33/B654: 4C F3 B6 JMP $B6F3 ; do magic hit animation 33/B657: A9 B1 LDA #$B1 33/B659: 20 40 A4 JSR $A440 ; load animation palette 33/B65C: 20 BB B5 JSR $B5BB 33/B65F: AD 8D 7E LDA $7E8D 33/B662: 20 40 A4 JSR $A440 ; load animation palette 33/B665: A5 90 LDA $90 33/B667: 48 PHA 33/B668: AD 9A 7E LDA $7E9A 33/B66B: 48 PHA 33/B66C: 49 40 EOR #$40 33/B66E: 8D 9A 7E STA $7E9A 33/B671: A0 00 LDY #$00 33/B673: A6 90 LDX $90 33/B675: BD B9 7E LDA $7EB9,X ; target reflected onto 33/B678: D9 24 FD CMP $FD24,Y ; bit mask 33/B67B: F0 03 BEQ $B680 33/B67D: C8 INY 33/B67E: D0 F8 BNE $B678 33/B680: 84 90 STY $90 33/B682: 20 F3 B6 JSR $B6F3 ; do magic hit animation 33/B685: 68 PLA 33/B686: 8D 9A 7E STA $7E9A 33/B689: 68 PLA 33/B68A: 85 90 STA $90 33/B68C: 60 RTS ; [ magic hit animation ] ; once per spell 33/B68D: AD 9B 7E LDA $7E9B ; targets hit 33/B690: 8D 89 7E STA $7E89 33/B693: 20 89 B5 JSR $B589 ; load magic animation graphics 33/B696: AD 88 7E LDA $7E88 ; magic id 33/B699: A2 02 LDX #$02 33/B69B: 20 EA F8 JSR $F8EA ; multiply 33/B69E: 18 CLC 33/B69F: 69 00 ADC #$00 ; source: 06/8C00 33/B6A1: 85 7E STA $7E 33/B6A3: 8A TXA 33/B6A4: 69 8C ADC #$8C 33/B6A6: 85 7F STA $7F 33/B6A8: A9 00 LDA #$00 ; destination: $7300 33/B6AA: 85 80 STA $80 33/B6AC: A9 73 LDA #$73 33/B6AE: 85 81 STA $81 33/B6B0: A9 02 LDA #$02 ; size: 2 bytes 33/B6B2: 85 82 STA $82 33/B6B4: A9 03 LDA #$03 33/B6B6: 85 84 STA $84 33/B6B8: 20 2F F9 JSR $F92F ; load rom data 33/B6BB: AD 00 73 LDA $7300 33/B6BE: 85 7E STA $7E 33/B6C0: AD 01 73 LDA $7301 33/B6C3: 85 7F STA $7F 33/B6C5: A9 20 LDA #$20 ; unused, size will be 256 ; should be STA $82 here ??? 33/B6C7: 20 2F F9 JSR $F92F ; load rom data 33/B6CA: AD 00 73 LDA $7300 ; data length 33/B6CD: 38 SEC 33/B6CE: ED CC 7E SBC $7ECC ; skip last 16 frames if life/life2 hits 33/B6D1: 8D 00 73 STA $7300 33/B6D4: A9 00 LDA #$00 33/B6D6: 85 90 STA $90 33/B6D8: AD 89 7E LDA $7E89 33/B6DB: 85 91 STA $91 ; start of target loop 33/B6DD: 06 91 ASL $91 33/B6DF: 90 06 BCC $B6E7 ; branch if target not hit 33/B6E1: 20 4F B6 JSR $B64F 33/B6E4: 4C EA B6 JMP $B6EA 33/B6E7: 0E B8 7E ASL $7EB8 33/B6EA: E6 90 INC $90 ; next target 33/B6EC: A5 90 LDA $90 33/B6EE: C9 08 CMP #$08 33/B6F0: D0 EB BNE $B6DD 33/B6F2: 60 RTS ; [ do magic hit animation ] ; once per target, no reflect 33/B6F3: E6 C9 INC $C9 ; sound effect pending 33/B6F5: A9 01 LDA #$01 33/B6F7: 8D 9C 7E STA $7E9C 33/B6FA: 20 11 B7 JSR $B711 ; update magic hit animation 33/B6FD: EE 9C 7E INC $7E9C 33/B700: AD 9C 7E LDA $7E9C 33/B703: 38 SEC 33/B704: E9 01 SBC #$01 33/B706: CD 00 73 CMP $7300 33/B709: D0 EF BNE $B6FA 33/B70B: 20 5E A0 JSR $A05E ; reset animation sprites 33/B70E: 4C B0 F8 JMP $F8B0 ; wait for vblank (update oam and color) ; [ update magic hit animation ] 33/B711: 20 5E A0 JSR $A05E ; reset animation sprites 33/B714: 20 CF B7 JSR $B7CF 33/B717: AD 9A 7E LDA $7E9A 33/B71A: 29 40 AND #$40 33/B71C: D0 2F BNE $B74D ; character target 33/B71E: A6 90 LDX $90 33/B720: B5 C0 LDA $C0,X 33/B722: 38 SEC 33/B723: E9 10 SBC #$10 33/B725: 85 8C STA $8C 33/B727: B5 C4 LDA $C4,X 33/B729: 38 SEC 33/B72A: E9 0C SBC #$0C 33/B72C: 85 8D STA $8D 33/B72E: AD 8B 7E LDA $7E8B 33/B731: 29 20 AND #$20 33/B733: F0 07 BEQ $B73C 33/B735: A5 8D LDA $8D 33/B737: 38 SEC 33/B738: E9 0C SBC #$0C 33/B73A: 85 8D STA $8D 33/B73C: AD 9D 7E LDA $7E9D 33/B73F: C9 05 CMP #$05 33/B741: D0 1E BNE $B761 ; branch if not life or life 2 33/B743: A5 8C LDA $8C 33/B745: 38 SEC 33/B746: E9 08 SBC #$08 33/B748: 85 8C STA $8C 33/B74A: 4C 61 B7 JMP $B761 ; monster target 33/B74D: A5 90 LDA $90 33/B74F: 0A ASL 33/B750: AA TAX 33/B751: BD D7 7D LDA $7DD7,X ; center x position - 24 33/B754: 38 SEC 33/B755: E9 18 SBC #$18 33/B757: 85 8C STA $8C 33/B759: BD D8 7D LDA $7DD8,X ; center y position - 16 33/B75C: 38 SEC 33/B75D: E9 10 SBC #$10 33/B75F: 85 8D STA $8D 33/B761: A6 C8 LDX $C8 33/B763: A0 00 LDY #$00 33/B765: B9 24 79 LDA $7924,Y ; copy to sprite data 33/B768: 18 CLC 33/B769: 65 8D ADC $8D ; add y offset 33/B76B: 9D 00 02 STA $0200,X ; y position 33/B76E: C8 INY 33/B76F: E8 INX 33/B770: B9 24 79 LDA $7924,Y 33/B773: 9D 00 02 STA $0200,X ; tile index 33/B776: D0 05 BNE $B77D 33/B778: A9 F0 LDA #$F0 33/B77A: 9D FF 01 STA $01FF,X 33/B77D: C8 INY 33/B77E: E8 INX 33/B77F: B9 24 79 LDA $7924,Y 33/B782: 9D 00 02 STA $0200,X ; flags 33/B785: C8 INY 33/B786: E8 INX 33/B787: B9 24 79 LDA $7924,Y 33/B78A: 18 CLC 33/B78B: 65 8C ADC $8C ; add x offset 33/B78D: 9D 00 02 STA $0200,X ; x position 33/B790: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/B793: E8 INX 33/B794: C8 INY 33/B795: C0 90 CPY #$90 33/B797: D0 CC BNE $B765 33/B799: AD 9A 7E LDA $7E9A 33/B79C: 29 40 AND #$40 33/B79E: F0 09 BEQ $B7A9 ; branch if target is a character 33/B7A0: 20 B5 B7 JSR $B7B5 33/B7A3: 20 A9 B7 JSR $B7A9 33/B7A6: 4C B5 B7 JMP $B7B5 ; [ wait 4 frames ] 33/B7A9: A9 04 LDA #$04 33/B7AB: 85 B6 STA $B6 33/B7AD: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B7B0: C6 B6 DEC $B6 33/B7B2: D0 F9 BNE $B7AD 33/B7B4: 60 RTS ; [ toggle character sprite priority ] ; this causes magic sprites to be shown in front of character sprites 33/B7B5: A2 00 LDX #$00 33/B7B7: BD A0 02 LDA $02A0,X ; swap sprites 0-23 with sprites 40-63 33/B7BA: 48 PHA 33/B7BB: BD 00 02 LDA $0200,X 33/B7BE: 9D A0 02 STA $02A0,X 33/B7C1: 68 PLA 33/B7C2: 9D 00 02 STA $0200,X 33/B7C5: E8 INX 33/B7C6: E0 60 CPX #$60 33/B7C8: D0 ED BNE $B7B7 33/B7CA: 60 RTS ; h-flip if character target 33/B7CB: 01 00 03 02 ; [ load magic animation frame data ] 33/B7CF: A9 00 LDA #$00 33/B7D1: 85 87 STA $87 33/B7D3: AE 9C 7E LDX $7E9C 33/B7D6: BD 00 73 LDA $7300,X 33/B7D9: C9 FF CMP #$FF 33/B7DB: D0 0A BNE $B7E7 33/B7DD: A9 02 LDA #$02 ; v-flip previous frame 33/B7DF: 85 87 STA $87 33/B7E1: EE 9C 7E INC $7E9C 33/B7E4: BD 01 73 LDA $7301,X ; frame index 33/B7E7: 85 7E STA $7E 33/B7E9: 29 7F AND #$7F 33/B7EB: 85 86 STA $86 33/B7ED: 26 7E ROL $7E 33/B7EF: 26 7E ROL $7E 33/B7F1: A5 7E LDA $7E 33/B7F3: 29 01 AND #$01 ; h-flip if set (msb of frame index) 33/B7F5: 05 87 ORA $87 33/B7F7: 85 87 STA $87 33/B7F9: A5 86 LDA $86 33/B7FB: A2 02 LDX #$02 33/B7FD: 20 EA F8 JSR $F8EA ; multiply 33/B800: 18 CLC 33/B801: 69 08 ADC #$08 ; source = 00/9708 (pointers to frame data) 33/B803: 85 7E STA $7E 33/B805: 8A TXA 33/B806: 69 97 ADC #$97 33/B808: 85 7F STA $7F 33/B80A: A9 00 LDA #$00 ; destination = $7900 33/B80C: 85 80 STA $80 33/B80E: A9 79 LDA #$79 33/B810: 85 81 STA $81 33/B812: A9 02 LDA #$02 ; size = 2 bytes 33/B814: 85 82 STA $82 33/B816: A9 00 LDA #$00 33/B818: 85 84 STA $84 33/B81A: 20 2F F9 JSR $F92F ; load rom data 33/B81D: AD 00 79 LDA $7900 33/B820: 85 7E STA $7E 33/B822: AD 01 79 LDA $7901 33/B825: 85 7F STA $7F 33/B827: A9 24 LDA #$24 ; size = 36 bytes 33/B829: 85 82 STA $82 33/B82B: 20 2F F9 JSR $F92F ; load rom data 33/B82E: AD 9A 7E LDA $7E9A 33/B831: 29 40 AND #$40 33/B833: D0 07 BNE $B83C ; branch if monster target 33/B835: A4 87 LDY $87 33/B837: B9 CB B7 LDA $B7CB,Y ; h-flip again 33/B83A: 85 87 STA $87 33/B83C: A5 87 LDA $87 33/B83E: 20 AF B8 JSR $B8AF ; draw magic animation sprites 33/B841: A2 00 LDX #$00 33/B843: A0 00 LDY #$00 33/B845: BD 00 79 LDA $7900,X 33/B848: 85 7E STA $7E 33/B84A: 30 07 BMI $B853 ; single tile 33/B84C: 20 66 B8 JSR $B866 ; set animation sprite tile 33/B84F: E8 INX 33/B850: 4C 61 B8 JMP $B861 ; repeated tile 33/B853: E8 INX 33/B854: BD 00 79 LDA $7900,X ; repeat count 33/B857: 85 80 STA $80 33/B859: 20 66 B8 JSR $B866 ; set animation sprite tile 33/B85C: C6 80 DEC $80 33/B85E: D0 F9 BNE $B859 33/B860: E8 INX 33/B861: C0 90 CPY #$90 ; 36 sprites total (6x6) 33/B863: D0 E0 BNE $B845 33/B865: 60 RTS ; [ set animation sprite tile ] ; $7E: rvhttttt ; r: repeated tile (next byte is repeat count) ; v: tile v-flip ; h: tile h-flip ; t: tile index (add $49) 33/B866: A5 7E LDA $7E 33/B868: 0A ASL 33/B869: 29 C0 AND #$C0 ; vh flip for this tile 33/B86B: 09 03 ORA #$03 ; use sprite palette 3 33/B86D: 85 7F STA $7F 33/B86F: A5 7E LDA $7E 33/B871: 29 7F AND #$7F 33/B873: C9 7F CMP #$7F 33/B875: D0 05 BNE $B87C 33/B877: A9 00 LDA #$00 33/B879: 4C 81 B8 JMP $B881 33/B87C: 29 1F AND #$1F 33/B87E: 18 CLC 33/B87F: 69 49 ADC #$49 33/B881: 99 25 79 STA $7925,Y ; tile index 33/B884: A5 7F LDA $7F 33/B886: 29 03 AND #$03 33/B888: 19 26 79 ORA $7926,Y 33/B88B: 85 18 STA $18 33/B88D: A5 7F LDA $7F 33/B88F: 29 C0 AND #$C0 33/B891: 45 18 EOR $18 ; combine tile flip with frame flip 33/B893: 99 26 79 STA $7926,Y 33/B896: C8 INY 33/B897: C8 INY 33/B898: C8 INY 33/B899: C8 INY 33/B89A: 60 RTS ; animation frame xy increment data (4 bytes per flip combination) ; 0: initial x ; 1: increment x ; 2: initial y ; 3: increment y 33/B89B: 00 08 00 08 33/B89F: 28 F8 00 08 33/B8A3: 00 08 28 F8 33/B8A7: 28 F8 28 F8 ; vh flip flags for magic animation sprites 33/B8AB: 00 40 80 C0 ; [ draw magic animation sprites ] 33/B8AF: 48 PHA 33/B8B0: 0A ASL 33/B8B1: 0A ASL 33/B8B2: A8 TAY 33/B8B3: A2 00 LDX #$00 33/B8B5: B9 9B B8 LDA $B89B,Y ; load xy increment data 33/B8B8: 95 7E STA $7E,X 33/B8BA: C8 INY 33/B8BB: E8 INX 33/B8BC: E0 04 CPX #$04 33/B8BE: D0 F5 BNE $B8B5 33/B8C0: A0 06 LDY #$06 33/B8C2: A2 00 LDX #$00 33/B8C4: A5 80 LDA $80 33/B8C6: 9D 24 79 STA $7924,X ; y position 33/B8C9: 88 DEY 33/B8CA: D0 07 BNE $B8D3 33/B8CC: A0 06 LDY #$06 33/B8CE: 18 CLC 33/B8CF: 65 81 ADC $81 33/B8D1: 85 80 STA $80 33/B8D3: E8 INX 33/B8D4: E8 INX 33/B8D5: E8 INX 33/B8D6: E8 INX 33/B8D7: E0 90 CPX #$90 33/B8D9: D0 E9 BNE $B8C4 33/B8DB: A5 7E LDA $7E 33/B8DD: 85 82 STA $82 33/B8DF: A0 06 LDY #$06 33/B8E1: A2 00 LDX #$00 33/B8E3: A5 82 LDA $82 33/B8E5: 9D 27 79 STA $7927,X ; x position 33/B8E8: 18 CLC 33/B8E9: 65 7F ADC $7F 33/B8EB: 85 82 STA $82 33/B8ED: 88 DEY 33/B8EE: D0 06 BNE $B8F6 33/B8F0: A0 06 LDY #$06 33/B8F2: A5 7E LDA $7E 33/B8F4: 85 82 STA $82 33/B8F6: E8 INX 33/B8F7: E8 INX 33/B8F8: E8 INX 33/B8F9: E8 INX 33/B8FA: E0 90 CPX #$90 33/B8FC: D0 E5 BNE $B8E3 33/B8FE: 68 PLA 33/B8FF: A8 TAY 33/B900: B9 AB B8 LDA $B8AB,Y ; vh flip 33/B903: A2 00 LDX #$00 33/B905: 9D 26 79 STA $7926,X 33/B908: E8 INX 33/B909: E8 INX 33/B90A: E8 INX 33/B90B: E8 INX 33/B90C: E0 90 CPX #$90 33/B90E: D0 F5 BNE $B905 33/B910: 60 RTS ; [ ] 33/B911: 20 9B B0 JSR $B09B ; pre-magic animation 33/B914: 20 35 AC JSR $AC35 ; clean up after animation 33/B917: 4C 89 B5 JMP $B589 ; load magic animation graphics ; [ magic animation $00: normal ] ; also see 34/8577 for $07 (brak2), $08 (toad), $0D (mini) 33/B91A: A9 00 LDA #$00 33/B91C: 8D CC 7E STA $7ECC 33/B91F: 4C 37 B9 JMP $B937 ; [ magic animation $05: life, life 2 ] 33/B922: AD 9B 7E LDA $7E9B 33/B925: F0 05 BEQ $B92C ; branch if no targets hit 33/B927: A9 10 LDA #$10 33/B929: 4C 34 B9 JMP $B934 33/B92C: AD 99 7E LDA $7E99 ; show animation for missed targets ??? 33/B92F: 8D 9B 7E STA $7E9B 33/B932: A9 00 LDA #$00 33/B934: 8D CC 7E STA $7ECC ; fallthrough ; [ normal magic animation ] 33/B937: 20 9B B0 JSR $B09B ; pre-magic animation 33/B93A: 20 76 B2 JSR $B276 ; magic projectile animation 33/B93D: 20 35 AC JSR $AC35 ; clean up after animation 33/B940: 4C 8D B6 JMP $B68D ; magic hit animation ; [ ] 33/B943: A9 00 LDA #$00 33/B945: 8D CC 7E STA $7ECC 33/B948: 20 6F AF JSR $AF6F ; load magic graphics properties 33/B94B: AD 8D 7E LDA $7E8D 33/B94E: 20 40 A4 JSR $A440 ; load animation palette 33/B951: 4C 8D B6 JMP $B68D ; magic hit animation ; [ magic animation $02: quake ] 33/B954: 20 11 B9 JSR $B911 33/B957: AD 9B 7E LDA $7E9B 33/B95A: F0 37 BEQ $B993 ; return if no targets hit 33/B95C: E6 C9 INC $C9 33/B95E: AD 9A 7E LDA $7E9A 33/B961: 29 40 AND #$40 33/B963: D0 2F BNE $B994 ; branch if target is a monster ; character target 33/B965: A9 10 LDA #$10 33/B967: 85 B6 STA $B6 33/B969: A2 00 LDX #$00 33/B96B: FE C0 00 INC $00C0,X 33/B96E: E8 INX 33/B96F: E0 04 CPX #$04 33/B971: D0 F8 BNE $B96B 33/B973: 20 D8 90 JSR $90D8 ; update character sprites 33/B976: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B979: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B97C: A2 00 LDX #$00 33/B97E: DE C0 00 DEC $00C0,X 33/B981: E8 INX 33/B982: E0 04 CPX #$04 33/B984: D0 F8 BNE $B97E 33/B986: 20 D8 90 JSR $90D8 ; update character sprites 33/B989: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B98C: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/B98F: C6 B6 DEC $B6 33/B991: D0 D6 BNE $B969 33/B993: 60 RTS ; monster target 33/B994: 20 0F A4 JSR $A40F ; save character animations frames 33/B997: A6 95 LDX $95 33/B999: 20 F9 A3 JSR $A3F9 ; reset character animation sprites 33/B99C: 20 5E A0 JSR $A05E ; reset animation sprites 33/B99F: 20 CF A2 JSR $A2CF ; check if toad or mini 33/B9A2: F0 04 BEQ $B9A8 33/B9A4: A9 0C LDA #$0C 33/B9A6: D0 02 BNE $B9AA 33/B9A8: A9 03 LDA #$03 33/B9AA: 20 DD A3 JSR $A3DD ; update attacking character sprite 33/B9AD: A9 5C LDA #$5C 33/B9AF: 20 EB A3 JSR $A3EB ; update animation sprite 33/B9B2: A9 5D LDA #$5D 33/B9B4: 20 EB A3 JSR $A3EB ; update animation sprite 33/B9B7: A9 5E LDA #$5E 33/B9B9: 20 EB A3 JSR $A3EB ; update animation sprite 33/B9BC: 20 8D 8C JSR $8C8D 33/B9BF: 4C 35 AC JMP $AC35 ; clean up after animation ; [ magic animation $0E: earthquake ] 33/B9C2: 20 11 B9 JSR $B911 33/B9C5: AD 9B 7E LDA $7E9B 33/B9C8: F0 03 BEQ $B9CD 33/B9CA: 20 8D 8C JSR $8C8D 33/B9CD: 60 RTS ; tiles for big fireballs 33/B9CE: 49 4A 4B 4C 4D 4E ; tiles for small fireballs 33/B9D4: 00 4F 50 51 52 00 ; initial x offsets for each fireball 33/B9DA: 30 70 B0 30 70 B0 ; initial frame counter value for each fireball 33/B9E0: 03 01 05 06 09 07 ; [ magic animation $03: meteo, cave-in ] ; fireball data (6 bytes each) ; $7900: x offset ; $7906: y offset ; $790C: frame counter ; $7912: fireball shown 33/B9E6: 20 11 B9 JSR $B911 33/B9E9: AD 9B 7E LDA $7E9B 33/B9EC: D0 01 BNE $B9EF ; return if no targets hit 33/B9EE: 60 RTS 33/B9EF: A2 00 LDX #$00 33/B9F1: A9 00 LDA #$00 33/B9F3: 9D 12 79 STA $7912,X 33/B9F6: BD E0 B9 LDA $B9E0,X 33/B9F9: 9D 0C 79 STA $790C,X 33/B9FC: E8 INX 33/B9FD: E0 06 CPX #$06 33/B9FF: D0 F0 BNE $B9F1 33/BA01: E6 C9 INC $C9 33/BA03: A9 40 LDA #$40 ; 64 frames 33/BA05: 85 B6 STA $B6 ; start of frame loop 33/BA07: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/BA0A: 20 2B A4 JSR $A42B ; clear animation oam data 33/BA0D: A2 00 LDX #$00 33/BA0F: 86 C8 STX $C8 33/BA11: DE 0C 79 DEC $790C,X 33/BA14: D0 1F BNE $BA35 33/BA16: A9 0A LDA #$0A 33/BA18: 9D 0C 79 STA $790C,X 33/BA1B: A9 08 LDA #$08 33/BA1D: 9D 06 79 STA $7906,X 33/BA20: E6 90 INC $90 33/BA22: A4 90 LDY $90 33/BA24: B9 E3 7B LDA $7BE3,Y ; rng table 33/BA27: 29 38 AND #$38 33/BA29: 18 CLC 33/BA2A: 7D DA B9 ADC $B9DA,X 33/BA2D: 9D 00 79 STA $7900,X 33/BA30: A9 01 LDA #$01 33/BA32: 9D 12 79 STA $7912,X 33/BA35: BD 12 79 LDA $7912,X 33/BA38: F0 4E BEQ $BA88 33/BA3A: BD 00 79 LDA $7900,X 33/BA3D: F0 44 BEQ $BA83 33/BA3F: C9 F8 CMP #$F8 33/BA41: F0 40 BEQ $BA83 33/BA43: BD 06 79 LDA $7906,X 33/BA46: C9 88 CMP #$88 33/BA48: B0 39 BCS $BA83 33/BA4A: BD 00 79 LDA $7900,X 33/BA4D: 85 8C STA $8C 33/BA4F: BD 06 79 LDA $7906,X 33/BA52: 85 8D STA $8D 33/BA54: BD 0C 79 LDA $790C,X ; toggle small/large fireball every frame 33/BA57: 29 01 AND #$01 33/BA59: 85 8E STA $8E 33/BA5B: 20 95 BA JSR $BA95 ; draw sprite 33/BA5E: BD 00 79 LDA $7900,X 33/BA61: 48 PHA 33/BA62: AD 9A 7E LDA $7E9A 33/BA65: 29 40 AND #$40 33/BA67: D0 07 BNE $BA70 33/BA69: 68 PLA 33/BA6A: 18 CLC 33/BA6B: 69 08 ADC #$08 33/BA6D: 4C 74 BA JMP $BA74 33/BA70: 68 PLA 33/BA71: 38 SEC 33/BA72: E9 08 SBC #$08 33/BA74: 9D 00 79 STA $7900,X 33/BA77: BD 06 79 LDA $7906,X 33/BA7A: 18 CLC 33/BA7B: 69 0C ADC #$0C 33/BA7D: 9D 06 79 STA $7906,X 33/BA80: 4C 88 BA JMP $BA88 33/BA83: A9 00 LDA #$00 33/BA85: 9D 12 79 STA $7912,X 33/BA88: E8 INX 33/BA89: E0 06 CPX #$06 33/BA8B: D0 84 BNE $BA11 33/BA8D: C6 B6 DEC $B6 33/BA8F: F0 03 BEQ $BA94 33/BA91: 4C 07 BA JMP $BA07 ; magic animation $0F (no effect) 33/BA94: 60 RTS ; [ draw sprite (meteo, cave-in) ] 33/BA95: 8A TXA 33/BA96: 48 PHA 33/BA97: AD 9A 7E LDA $7E9A 33/BA9A: 29 40 AND #$40 33/BA9C: 49 40 EOR #$40 33/BA9E: 4A LSR 33/BA9F: 4A LSR 33/BAA0: 4A LSR 33/BAA1: 4A LSR 33/BAA2: 4A LSR 33/BAA3: A8 TAY 33/BAA4: B9 CB 91 LDA $91CB,Y ; use 2x3 character sprite frame data 33/BAA7: 85 7E STA $7E 33/BAA9: B9 CC 91 LDA $91CC,Y 33/BAAC: 85 7F STA $7F 33/BAAE: A0 00 LDY #$00 33/BAB0: A6 C8 LDX $C8 ; start of sprite loop 33/BAB2: B1 7E LDA ($7E),Y 33/BAB4: 18 CLC 33/BAB5: 65 8D ADC $8D 33/BAB7: 9D 00 02 STA $0200,X 33/BABA: C8 INY 33/BABB: E8 INX 33/BABC: B1 7E LDA ($7E),Y 33/BABE: 9D 00 02 STA $0200,X 33/BAC1: C8 INY 33/BAC2: E8 INX 33/BAC3: B1 7E LDA ($7E),Y 33/BAC5: 09 03 ORA #$03 ; use sprite palette 3 33/BAC7: 9D 00 02 STA $0200,X 33/BACA: C8 INY 33/BACB: E8 INX 33/BACC: B1 7E LDA ($7E),Y 33/BACE: 18 CLC 33/BACF: 65 8C ADC $8C 33/BAD1: 9D 00 02 STA $0200,X 33/BAD4: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/BAD7: E8 INX 33/BAD8: C8 INY 33/BAD9: C0 18 CPY #$18 ; 6 sprites per fireball 33/BADB: D0 D5 BNE $BAB2 33/BADD: A9 06 LDA #$06 33/BADF: 85 7E STA $7E 33/BAE1: A4 8E LDY $8E 33/BAE3: F0 02 BEQ $BAE7 33/BAE5: A0 06 LDY #$06 ; use small fireball 33/BAE7: A6 C8 LDX $C8 33/BAE9: B9 CE B9 LDA $B9CE,Y ; tile index 33/BAEC: 9D 01 02 STA $0201,X 33/BAEF: E8 INX 33/BAF0: E8 INX 33/BAF1: E8 INX 33/BAF2: E8 INX 33/BAF3: C8 INY 33/BAF4: C6 7E DEC $7E 33/BAF6: D0 F1 BNE $BAE9 33/BAF8: 86 C8 STX $C8 33/BAFA: 68 PLA 33/BAFB: AA TAX 33/BAFC: 60 RTS ; [ animation function $0D: magic animation ] 33/BAFD: AD 9D 7E LDA $7E9D ; magic animation id 33/BB00: 0A ASL 33/BB01: A8 TAY 33/BB02: B9 2B BC LDA $BC2B,Y ; magic animation jump table 33/BB05: 85 7E STA $7E 33/BB07: B9 2C BC LDA $BC2C,Y 33/BB0A: 85 7F STA $7F 33/BB0C: 20 15 BB JSR $BB15 33/BB0F: 20 2B A4 JSR $A42B ; clear animation oam data 33/BB12: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) 33/BB15: 6C 7E 00 JMP ($007E) ; [ magic animation $06: summon, split ] 33/BB18: AD 99 7E LDA $7E99 33/BB1B: C9 FF CMP #$FF 33/BB1D: D0 01 BNE $BB20 33/BB1F: 60 RTS 33/BB20: E6 C9 INC $C9 33/BB22: 60 RTS ; [ magic animation $0B: glare, mind blast, mega flare ] 33/BB23: AD 9B 7E LDA $7E9B 33/BB26: D0 01 BNE $BB29 ; branch if any targets were hit 33/BB28: 60 RTS 33/BB29: E6 C9 INC $C9 ; sound effect pending 33/BB2B: AD 88 7E LDA $7E88 33/BB2E: 38 SEC 33/BB2F: E9 38 SBC #$38 33/BB31: A8 TAY 33/BB32: B9 4B 80 LDA $804B,Y 33/BB35: 4C 3F BB JMP $BB3F ; [ magic animation $0C: explode ] 33/BB38: AD 99 7E LDA $7E99 33/BB3B: F0 07 BEQ $BB44 ; return if no targets 33/BB3D: A9 16 LDA #$16 ; red 33/BB3F: E6 C9 INC $C9 33/BB41: 20 7F 87 JSR $877F ; flash screen 33/BB44: 60 RTS ; [ magic animation $09: flare wave ] 33/BB45: AD 9B 7E LDA $7E9B 33/BB48: D0 01 BNE $BB4B ; return if no targets were hit 33/BB4A: 60 RTS 33/BB4B: 20 11 B9 JSR $B911 33/BB4E: E6 C9 INC $C9 33/BB50: A9 00 LDA #$00 ; flare wave 33/BB52: 85 7E STA $7E 33/BB54: 20 F5 7E JSR $7EF5 ; final boss animation 33/BB57: A9 16 LDA #$16 ; red 33/BB59: 4C 41 BB JMP $BB41 ; [ magic animation $10: flame ] 33/BB5C: A9 00 LDA #$00 33/BB5E: 4C 68 BB JMP $BB68 ; [ magic animation $11: blizzard ] 33/BB61: A9 02 LDA #$02 33/BB63: 4C 68 BB JMP $BB68 ; [ magic animation $12: thunder ] 33/BB66: A9 04 LDA #$04 ; fallthrough ; [ enemy magic animation ] 33/BB68: 48 PHA 33/BB69: A9 FF LDA #$FF 33/BB6B: A2 00 LDX #$00 33/BB6D: 9D 60 73 STA $7360,X 33/BB70: E8 INX 33/BB71: E0 60 CPX #$60 33/BB73: D0 F8 BNE $BB6D 33/BB75: 20 11 B9 JSR $B911 33/BB78: 68 PLA 33/BB79: 85 90 STA $90 33/BB7B: AD 9B 7E LDA $7E9B 33/BB7E: F0 1B BEQ $BB9B 33/BB80: E6 C9 INC $C9 33/BB82: 20 59 A0 JSR $A059 ; reset animation frame counter ; start of frame loop 33/BB85: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/BB88: A5 B6 LDA $B6 33/BB8A: 29 04 AND #$04 ; toggle every 4 frames 33/BB8C: 4A LSR 33/BB8D: 4A LSR 33/BB8E: 18 CLC 33/BB8F: 65 90 ADC $90 33/BB91: 20 A8 BB JSR $BBA8 33/BB94: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/BB97: 29 20 AND #$20 33/BB99: F0 EA BEQ $BB85 33/BB9B: 60 RTS ; pointers to enemy magic animation data (bank 06) 33/BB9C: 8E20 8E80 8EE0 8F40 8FA0 7360 ; [ ] 33/BBA8: 0A ASL 33/BBA9: A8 TAY 33/BBAA: B9 9C BB LDA $BB9C,Y 33/BBAD: 85 7E STA $7E 33/BBAF: B9 9D BB LDA $BB9D,Y 33/BBB2: 85 7F STA $7F 33/BBB4: A9 00 LDA #$00 ; destination: $7300 33/BBB6: 85 80 STA $80 33/BBB8: A9 73 LDA #$73 33/BBBA: 85 81 STA $81 33/BBBC: A9 60 LDA #$60 ; size: $60 33/BBBE: 85 82 STA $82 33/BBC0: A9 03 LDA #$03 ; bank 06 33/BBC2: 85 84 STA $84 33/BBC4: 20 2F F9 JSR $F92F ; load rom data 33/BBC7: 20 51 BC JSR $BC51 33/BBCA: 20 5E A0 JSR $A05E ; reset animation sprites 33/BBCD: A2 00 LDX #$00 33/BBCF: A0 00 LDY #$00 33/BBD1: A9 00 LDA #$00 ; $7900 33/BBD3: 85 80 STA $80 33/BBD5: A9 79 LDA #$79 33/BBD7: 85 81 STA $81 ; start of tile loop 33/BBD9: B9 00 73 LDA $7300,Y 33/BBDC: 85 82 STA $82 33/BBDE: C9 FF CMP #$FF 33/BBE0: F0 2B BEQ $BC0D 33/BBE2: 20 18 BC JSR $BC18 33/BBE5: 18 CLC 33/BBE6: 69 18 ADC #$18 33/BBE8: 9D 00 02 STA $0200,X 33/BBEB: E8 INX 33/BBEC: A5 82 LDA $82 33/BBEE: 29 3F AND #$3F 33/BBF0: 18 CLC 33/BBF1: 69 49 ADC #$49 33/BBF3: 9D 00 02 STA $0200,X 33/BBF6: E8 INX 33/BBF7: A5 82 LDA $82 33/BBF9: 29 C0 AND #$C0 33/BBFB: 09 03 ORA #$03 33/BBFD: 9D 00 02 STA $0200,X 33/BC00: E8 INX 33/BC01: A5 7E LDA $7E 33/BC03: 18 CLC 33/BC04: 69 C8 ADC #$C8 33/BC06: 9D 00 02 STA $0200,X 33/BC09: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/BC0C: E8 INX 33/BC0D: A9 04 LDA #$04 33/BC0F: 20 FE F8 JSR $F8FE ; add to +$80 33/BC12: C8 INY 33/BC13: C0 60 CPY #$60 33/BC15: D0 C2 BNE $BBD9 33/BC17: 60 RTS ; [ add sprite offset for enemy magic animation ] 33/BC18: 98 TYA 33/BC19: 48 PHA 33/BC1A: A0 00 LDY #$00 33/BC1C: B1 80 LDA ($80),Y 33/BC1E: 85 7F STA $7F 33/BC20: A0 03 LDY #$03 33/BC22: B1 80 LDA ($80),Y 33/BC24: 85 7E STA $7E 33/BC26: 68 PLA 33/BC27: A8 TAY 33/BC28: A5 7F LDA $7F 33/BC2A: 60 RTS ; magic animation jump table 33/BC2B: B91A B385 B954 B9E6 B48D B922 BB18 B91A 33/BC3B: B91A BB45 AED2 BB23 BB38 B91A B9C2 BA94 33/BC4B: BB5C BB61 BB66 ; [ init sprite offsets for enemy magic animation ] 33/BC51: A9 00 LDA #$00 33/BC53: 85 7E STA $7E 33/BC55: A9 79 LDA #$79 33/BC57: 85 7F STA $7F 33/BC59: A9 00 LDA #$00 33/BC5B: 85 80 STA $80 33/BC5D: A9 00 LDA #$00 33/BC5F: 85 81 STA $81 33/BC61: A5 80 LDA $80 33/BC63: A0 00 LDY #$00 33/BC65: 91 7E STA ($7E),Y 33/BC67: A0 03 LDY #$03 33/BC69: A5 81 LDA $81 33/BC6B: 91 7E STA ($7E),Y 33/BC6D: A9 04 LDA #$04 33/BC6F: 20 F2 F8 JSR $F8F2 ; add to +$7E 33/BC72: A5 81 LDA $81 33/BC74: 18 CLC 33/BC75: 69 08 ADC #$08 33/BC77: 85 81 STA $81 33/BC79: C9 30 CMP #$30 ; width: 6 sprites 33/BC7B: D0 E4 BNE $BC61 33/BC7D: A5 80 LDA $80 33/BC7F: 18 CLC 33/BC80: 69 08 ADC #$08 33/BC82: 85 80 STA $80 33/BC84: C9 80 CMP #$80 ; height: 16 sprites 33/BC86: D0 D5 BNE $BC5D 33/BC88: 60 RTS ; -------------------------------------------------------------------------- ; [ animation function $11: characters run away ] 33/BC89: 20 59 A0 JSR $A059 ; reset animation frame counter 33/BC8C: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 33/BC8F: A5 B6 LDA $B6 33/BC91: 29 18 AND #$18 ; flip a different character every 8 frames 33/BC93: 4A LSR 33/BC94: 4A LSR 33/BC95: AA TAX 33/BC96: BD 9B 7D LDA $7D9B,X 33/BC99: 29 C0 AND #$C0 33/BC9B: D0 10 BNE $BCAD ; branch if dead or stone 33/BC9D: A5 B6 LDA $B6 33/BC9F: 29 18 AND #$18 33/BCA1: 4A LSR 33/BCA2: 4A LSR 33/BCA3: 4A LSR 33/BCA4: AA TAX 33/BCA5: BD 83 7D LDA $7D83,X ; flip horizontally 33/BCA8: 09 80 ORA #$80 33/BCAA: 9D 83 7D STA $7D83,X 33/BCAD: 20 D8 90 JSR $90D8 ; update character sprites 33/BCB0: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/BCB3: 29 20 AND #$20 33/BCB5: F0 D5 BEQ $BC8C ; repeat for 32 frames 33/BCB7: A9 B3 LDA #$B3 ; play sound effect $33 33/BCB9: 8D 49 7F STA $7F49 33/BCBC: A9 F0 LDA #$F0 ; destination position is offscreen 33/BCBE: 85 7E STA $7E 33/BCC0: A2 00 LDX #$00 33/BCC2: 20 D2 90 JSR $90D2 ; check back attack 33/BCC5: D0 10 BNE $BCD7 ; branch if not a back attack 33/BCC7: B5 C0 LDA $C0,X 33/BCC9: 49 FF EOR #$FF 33/BCCB: 18 CLC 33/BCCC: 69 F1 ADC #$F1 33/BCCE: 95 C0 STA $C0,X 33/BCD0: A9 00 LDA #$00 33/BCD2: 85 7E STA $7E 33/BCD4: FE C1 7D INC $7DC1,X 33/BCD7: 8A TXA 33/BCD8: 0A ASL 33/BCD9: A8 TAY 33/BCDA: B9 9B 7D LDA $7D9B,Y 33/BCDD: 29 C0 AND #$C0 33/BCDF: D0 18 BNE $BCF9 ; branch if not dead or stone 33/BCE1: A5 7E LDA $7E 33/BCE3: 9D 7F 7D STA $7D7F,X 33/BCE6: BD 83 7D LDA $7D83,X ; don't flip horizontally 33/BCE9: 29 7F AND #$7F 33/BCEB: 9D 83 7D STA $7D83,X 33/BCEE: B9 9B 7D LDA $7D9B,Y ; set confused 33/BCF1: 09 08 ORA #$08 33/BCF3: 99 9B 7D STA $7D9B,Y 33/BCF6: 4C 0B BD JMP $BD0B 33/BCF9: 20 D2 90 JSR $90D2 ; check back attack 33/BCFC: D0 08 BNE $BD06 33/BCFE: BD 83 7D LDA $7D83,X ; toggle horizontal flip 33/BD01: 49 80 EOR #$80 33/BD03: 9D 83 7D STA $7D83,X 33/BD06: B5 C0 LDA $C0,X 33/BD08: 9D 7F 7D STA $7D7F,X 33/BD0B: E8 INX 33/BD0C: E0 04 CPX #$04 33/BD0E: D0 B2 BNE $BCC2 33/BD10: 20 D2 90 JSR $90D2 ; check back attack 33/BD13: D0 05 BNE $BD1A ; branch if not a back attack 33/BD15: A9 00 LDA #$00 ; move forward (always left) 33/BD17: 4C 1C BD JMP $BD1C 33/BD1A: A9 01 LDA #$01 ; move backward (always right) 33/BD1C: 8D 7D 7D STA $7D7D 33/BD1F: 20 59 A0 JSR $A059 ; reset animation frame counter 33/BD22: 85 98 STA $98 ; no h-flip for back attack 33/BD24: 4C 74 BE JMP $BE74 ; move characters offscreen ; [ update characters running away ] 33/BD27: A2 00 LDX #$00 33/BD29: 20 45 BD JSR $BD45 ; move character 33/BD2C: B5 C0 LDA $C0,X 33/BD2E: F0 04 BEQ $BD34 33/BD30: C9 F0 CMP #$F0 33/BD32: D0 05 BNE $BD39 33/BD34: A9 00 LDA #$00 ; character sprite hidden 33/BD36: 9D 83 7D STA $7D83,X 33/BD39: E8 INX 33/BD3A: E0 04 CPX #$04 33/BD3C: D0 EB BNE $BD29 33/BD3E: 20 D8 90 JSR $90D8 ; update character sprites 33/BD41: EE F4 7C INC $7CF4 33/BD44: 60 RTS ; [ move character ] ; X: character id 33/BD45: AD 7D 7D LDA $7D7D 33/BD48: D0 0B BNE $BD55 ; branch if moving backward 33/BD4A: A9 FF LDA #$FF ; movement speed: -1 33/BD4C: 85 7E STA $7E 33/BD4E: A9 00 LDA #$00 33/BD50: 85 7F STA $7F 33/BD52: 4C 5D BD JMP $BD5D 33/BD55: A9 01 LDA #$01 ; movement speed: +1 33/BD57: 85 7E STA $7E 33/BD59: A9 80 LDA #$80 33/BD5B: 85 7F STA $7F 33/BD5D: BD 7F 7D LDA $7D7F,X ; character x positions 33/BD60: D5 C0 CMP $C0,X ; return if at destination x position 33/BD62: D0 01 BNE $BD65 33/BD64: 60 RTS 33/BD65: 8A TXA 33/BD66: 0A ASL 33/BD67: A8 TAY 33/BD68: B9 9B 7D LDA $7D9B,Y 33/BD6B: 29 05 AND #$05 33/BD6D: F0 4E BEQ $BDBD ; branch if not toad or mini 33/BD6F: 29 04 AND #$04 33/BD71: F0 21 BEQ $BD94 ; toad 33/BD73: AD F4 7C LDA $7CF4 33/BD76: 29 07 AND #$07 33/BD78: A8 TAY 33/BD79: B9 E9 BD LDA $BDE9,Y 33/BD7C: 18 CLC 33/BD7D: 75 C4 ADC $C4,X 33/BD7F: 95 C4 STA $C4,X 33/BD81: B9 F1 BD LDA $BDF1,Y 33/BD84: 05 7F ORA $7F 33/BD86: 9D 83 7D STA $7D83,X 33/BD89: B5 C0 LDA $C0,X ; add or subtract movement speed (2x) 33/BD8B: 18 CLC 33/BD8C: 65 7E ADC $7E 33/BD8E: 18 CLC 33/BD8F: 65 7E ADC $7E 33/BD91: 95 C0 STA $C0,X 33/BD93: 60 RTS ; mini 33/BD94: AD F4 7C LDA $7CF4 33/BD97: 29 04 AND #$04 33/BD99: 4A LSR 33/BD9A: 4A LSR 33/BD9B: 18 CLC 33/BD9C: 69 0A ADC #$0A 33/BD9E: 9D 83 7D STA $7D83,X 33/BDA1: BD C1 7D LDA $7DC1,X 33/BDA4: D0 0F BNE $BDB5 33/BDA6: B9 9B 7D LDA $7D9B,Y 33/BDA9: 29 08 AND #$08 33/BDAB: F0 08 BEQ $BDB5 ; branch if not confused 33/BDAD: BD 83 7D LDA $7D83,X 33/BDB0: 49 80 EOR #$80 33/BDB2: 9D 83 7D STA $7D83,X 33/BDB5: B5 C0 LDA $C0,X ; add or subtract movement speed (1x) 33/BDB7: 18 CLC 33/BDB8: 65 7E ADC $7E 33/BDBA: 95 C0 STA $C0,X 33/BDBC: 60 RTS ; normal 33/BDBD: AD F4 7C LDA $7CF4 ; change every 4 frames 33/BDC0: 29 04 AND #$04 33/BDC2: 4A LSR 33/BDC3: 4A LSR 33/BDC4: 18 CLC 33/BDC5: 69 01 ADC #$01 33/BDC7: 9D 83 7D STA $7D83,X ; set animation frame (1 or 2) 33/BDCA: BD C1 7D LDA $7DC1,X 33/BDCD: D0 0F BNE $BDDE 33/BDCF: B9 9B 7D LDA $7D9B,Y 33/BDD2: 29 08 AND #$08 33/BDD4: F0 08 BEQ $BDDE ; branch if not confused 33/BDD6: BD 83 7D LDA $7D83,X 33/BDD9: 49 80 EOR #$80 ; flip horizontally 33/BDDB: 9D 83 7D STA $7D83,X 33/BDDE: B5 C0 LDA $C0,X ; add or subtract movement speed (2x) 33/BDE0: 18 CLC 33/BDE1: 65 7E ADC $7E 33/BDE3: 18 CLC 33/BDE4: 65 7E ADC $7E 33/BDE6: 95 C0 STA $C0,X 33/BDE8: 60 RTS 33/BDE9: FF FD FD FF 00 02 02 04 ; character animation frame (toad/mini) 33/BDF1: 0A 0A 0A 0A 0A 0A 0B 0B 33/BDF9: 4A 4A 4A 4A 4A 4A 49 49 ; [ animation function $18: toad/mini ] 33/BE01: A9 BB LDA #$BB 33/BE03: 20 40 A4 JSR $A440 ; load animation palette 33/BE06: 20 59 A0 JSR $A059 ; reset animation frame counter 33/BE09: A5 B8 LDA $B8 33/BE0B: 0A ASL 33/BE0C: AA TAX 33/BE0D: BD D7 7D LDA $7DD7,X ; center x position 33/BE10: 85 8C STA $8C 33/BE12: BD D8 7D LDA $7DD8,X ; center y position 33/BE15: 85 8D STA $8D 33/BE17: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/BE1A: 20 5E A0 JSR $A05E ; reset animation sprites 33/BE1D: AD 9D 7E LDA $7E9D 33/BE20: C9 08 CMP #$08 33/BE22: D0 1D BNE $BE41 ; branch if not toad 33/BE24: A5 B6 LDA $B6 33/BE26: 29 08 AND #$08 33/BE28: D0 24 BNE $BE4E 33/BE2A: A5 B6 LDA $B6 33/BE2C: 29 07 AND #$07 33/BE2E: A8 TAY 33/BE2F: B9 E9 BD LDA $BDE9,Y 33/BE32: 18 CLC 33/BE33: 65 8D ADC $8D 33/BE35: 85 8D STA $8D 33/BE37: B9 F9 BD LDA $BDF9,Y 33/BE3A: 85 8E STA $8E 33/BE3C: C6 8C DEC $8C 33/BE3E: 4C 4E BE JMP $BE4E 33/BE41: A5 B6 LDA $B6 33/BE43: 29 04 AND #$04 33/BE45: 4A LSR 33/BE46: 4A LSR 33/BE47: 18 CLC 33/BE48: 69 49 ADC #$49 33/BE4A: 85 8E STA $8E 33/BE4C: C6 8C DEC $8C 33/BE4E: A5 8D LDA $8D 33/BE50: 8D 00 02 STA $0200 33/BE53: A5 8E LDA $8E 33/BE55: 8D 01 02 STA $0201 33/BE58: A9 03 LDA #$03 33/BE5A: 8D 02 02 STA $0202 33/BE5D: A5 8C LDA $8C 33/BE5F: 8D 03 02 STA $0203 33/BE62: A2 03 LDX #$03 33/BE64: 20 9B B1 JSR $B19B ; flip sprite if back attack 33/BE67: 20 E6 8A JSR $8AE6 ; increment animation frame counter 33/BE6A: C9 10 CMP #$10 33/BE6C: D0 A9 BNE $BE17 33/BE6E: 20 5E A0 JSR $A05E ; reset animation sprites 33/BE71: 4C C5 F8 JMP $F8C5 ; wait for vblank (no color update) ; [ animation function $13: move characters offscreen ] 33/BE74: 20 27 BD JSR $BD27 ; update characters running away 33/BE77: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/BE7A: A2 00 LDX #$00 33/BE7C: B5 C0 LDA $C0,X 33/BE7E: DD 7F 7D CMP $7D7F,X 33/BE81: D0 F1 BNE $BE74 ; branch if not at destination x position 33/BE83: E8 INX 33/BE84: E0 04 CPX #$04 33/BE86: D0 F4 BNE $BE7C 33/BE88: 60 RTS ; [ animation function $12: update character movement ] 33/BE89: A2 00 LDX #$00 33/BE8B: 20 45 BD JSR $BD45 ; move character 33/BE8E: E8 INX 33/BE8F: E0 04 CPX #$04 33/BE91: D0 F8 BNE $BE8B 33/BE93: 20 D8 90 JSR $90D8 ; update character sprites 33/BE96: EE F4 7C INC $7CF4 33/BE99: 60 RTS ; [ animation function $14: move characters ] 33/BE9A: 20 89 BE JSR $BE89 ; update character movement 33/BE9D: 20 11 9F JSR $9F11 ; update status and target numeral sprites 33/BEA0: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 33/BEA3: A2 00 LDX #$00 33/BEA5: B5 C0 LDA $C0,X 33/BEA7: DD 7F 7D CMP $7D7F,X 33/BEAA: D0 EE BNE $BE9A ; branch if not at destination x position 33/BEAC: E8 INX 33/BEAD: E0 04 CPX #$04 33/BEAF: D0 F4 BNE $BEA5 33/BEB1: 60 RTS ; -------------------------------------------------------------------------- ; animation graphics properties (18 * 6 bytes) ; +$00: source address ; +$02: ppu address ; $04: tile count ; $05: source bank 33/BEB2: A0 AF 90 14 10 06 ; $00: 0D/AFA0 33/BEB8: E0 AF 90 14 10 06 ; $01: 0D/AFE0 33/BEBE: 20 B0 90 14 10 06 ; $02: 0D/B020 33/BEC4: 20 B1 90 14 10 06 ; $03: 0D/B120 33/BECA: 00 98 90 14 10 15 ; $04: 2A/9800 (summon pre-animation) 33/BED0: 00 96 90 14 10 15 ; $05: 2A/9600 (black magic pre-animation) 33/BED6: 00 97 90 14 10 15 ; $06: 2A/9700 (white magic pre-animation) 33/BEDC: 00 00 90 14 18 15 ; $07: 2A/9600 or 2B/A600 (magic) 33/BEE2: 40 A7 10 16 08 15 ; $08: 2B/A740 33/BEE8: 60 B4 D0 14 0D 15 ; $09: 2B/B460 (weapons) 33/BEEE: 00 98 90 13 37 06 ; $0A: 0D/9800 (summon) 33/BEF4: 27 7D C0 23 04 00 ; $0B: $7D27 (attribute table) 33/BEFA: 27 7D C0 27 04 00 ; $0C: $7D27 (attribute table) 33/BF00: 60 B1 60 15 0A 06 ; $0D: 0D/B160 (damage numerals) 33/BF06: 20 B4 90 14 04 15 ; $0E: 2B/B420 33/BF0C: C0 AE 90 13 18 15 ; $0F: 2B/AEC0 33/BF12: 60 B1 90 14 04 15 ; $10: 2B/B160 33/BF18: 00 00 10 10 16 15 ; $11: ??? ; [ load animation graphics ] ; A: animation graphics id 33/BF1E: A2 00 LDX #$00 33/BF20: 86 7E STX $7E 33/BF22: 86 7F STX $7F ; fallthrough ; [ load animation graphics (w/ offset) ] ; +$7E: offset 33/BF24: A2 06 LDX #$06 33/BF26: 20 EA F8 JSR $F8EA ; multiply 33/BF29: 18 CLC 33/BF2A: 69 B2 ADC #$B2 33/BF2C: 85 18 STA $18 33/BF2E: 8A TXA 33/BF2F: 69 BE ADC #$BE ; 33/BEB2 33/BF31: 85 19 STA $19 33/BF33: 98 TYA 33/BF34: 48 PHA 33/BF35: A0 00 LDY #$00 33/BF37: B1 18 LDA ($18),Y ; source address 33/BF39: 18 CLC 33/BF3A: 65 7E ADC $7E 33/BF3C: 85 7E STA $7E 33/BF3E: C8 INY 33/BF3F: B1 18 LDA ($18),Y 33/BF41: 65 7F ADC $7F 33/BF43: 85 7F STA $7F 33/BF45: C8 INY 33/BF46: B1 18 LDA ($18),Y ; ppu address 33/BF48: 85 80 STA $80 33/BF4A: C8 INY 33/BF4B: B1 18 LDA ($18),Y 33/BF4D: 85 81 STA $81 33/BF4F: C8 INY 33/BF50: B1 18 LDA ($18),Y ; tile count 33/BF52: 85 82 STA $82 33/BF54: C8 INY 33/BF55: B1 18 LDA ($18),Y ; source bank 33/BF57: 85 84 STA $84 33/BF59: 20 69 F9 JSR $F969 ; copy graphics to ppu (no flip) 33/BF5C: 68 PLA 33/BF5D: A8 TAY 33/BF5E: 60 RTS ; -------------------------------------------------------------------------- ; [ reset vector angles ] 33/BF5F: A2 0A LDX #$0A 33/BF61: A9 00 LDA #$00 33/BF63: 9D 39 7E STA $7E39,X 33/BF66: A9 40 LDA #$40 33/BF68: 9D 43 7E STA $7E43,X 33/BF6B: CA DEX 33/BF6C: D0 F3 BNE $BF61 33/BF6E: 60 RTS ; [ get vector x-component ] 33/BF6F: BE 44 7E LDX $7E44,Y 33/BF72: B9 30 7E LDA $7E30,Y 33/BF75: 8D 4E 7E STA $7E4E 33/BF78: 4C C6 BF JMP $BFC6 ; $7E4E * sin(X) ; [ get vector y-component ] 33/BF7B: BE 3A 7E LDX $7E3A,Y ; angle 33/BF7E: B9 26 7E LDA $7E26,Y ; amplitude 33/BF81: 8D 4E 7E STA $7E4E 33/BF84: 4C C6 BF JMP $BFC6 ; $7E4E * sin(X) ; [ add to vector distance ] 33/BF87: 85 7E STA $7E 33/BF89: B9 26 7E LDA $7E26,Y 33/BF8C: 18 CLC 33/BF8D: 65 7E ADC $7E 33/BF8F: 99 26 7E STA $7E26,Y 33/BF92: B9 30 7E LDA $7E30,Y 33/BF95: 18 CLC 33/BF96: 65 7E ADC $7E 33/BF98: 99 30 7E STA $7E30,Y 33/BF9B: 60 RTS ; [ subtract from vector distance ] 33/BF9C: 85 7E STA $7E 33/BF9E: B9 26 7E LDA $7E26,Y 33/BFA1: 38 SEC 33/BFA2: E5 7E SBC $7E 33/BFA4: 99 26 7E STA $7E26,Y 33/BFA7: B9 30 7E LDA $7E30,Y 33/BFAA: 38 SEC 33/BFAB: E5 7E SBC $7E 33/BFAD: 99 30 7E STA $7E30,Y 33/BFB0: 60 RTS ; [ add to vector angle ] 33/BFB1: 85 7E STA $7E 33/BFB3: B9 3A 7E LDA $7E3A,Y 33/BFB6: 18 CLC 33/BFB7: 65 7E ADC $7E 33/BFB9: 99 3A 7E STA $7E3A,Y 33/BFBC: B9 44 7E LDA $7E44,Y 33/BFBF: 18 CLC 33/BFC0: 65 7E ADC $7E 33/BFC2: 99 44 7E STA $7E44,Y 33/BFC5: 60 RTS ; [ $7E4E * sin(X) ] ; $7E4E: amplitude multiplier 33/BFC6: 20 E3 7E JSR $7EE3 ; sine 33/BFC9: 10 11 BPL $BFDC 33/BFCB: 49 FF EOR #$FF 33/BFCD: AE 4E 7E LDX $7E4E 33/BFD0: 20 E4 BF JSR $BFE4 33/BFD3: 49 FF EOR #$FF 33/BFD5: 18 CLC 33/BFD6: 69 01 ADC #$01 33/BFD8: F0 08 BEQ $BFE2 33/BFDA: 38 SEC 33/BFDB: 60 RTS 33/BFDC: AE 4E 7E LDX $7E4E 33/BFDF: 20 E4 BF JSR $BFE4 33/BFE2: 18 CLC 33/BFE3: 60 RTS ; [ fixed-point multiply ] ; A: hi byte (out) ; $82: lo byte (out) 33/BFE4: 0A ASL 33/BFE5: 85 7E STA $7E 33/BFE7: 86 80 STX $80 33/BFE9: A2 08 LDX #$08 33/BFEB: A9 00 LDA #$00 33/BFED: 85 82 STA $82 33/BFEF: 46 7E LSR $7E 33/BFF1: 90 03 BCC $BFF6 33/BFF3: 18 CLC 33/BFF4: 65 80 ADC $80 33/BFF6: 6A ROR 33/BFF7: 66 82 ROR $82 33/BFF9: CA DEX 33/BFFA: D0 F3 BNE $BFEF 33/BFFC: 60 RTS 33/BFFD: 00 00 00 ; -------------------------------------------------------------------------- 34/8000: 4C 74 80 JMP $8074 ; battle main 34/8003: 4C E3 9C JMP $9CE3 ; init characters/monsters 34/8006: 4C 3D 80 JMP $803D ; update character equipment 34/8009: 4C 43 80 JMP $8043 ; check if character can equip item/spell 34/800C: 4C 6A 96 JMP $966A ; draw text 34/800F: 4C 09 A6 JMP $A609 ; load text string ; [ do battle algorithm ] 34/8012: A9 00 LDA #$00 ; do magic effect (31/AF77) 34/8014: F0 22 BEQ $8038 34/8016: A9 01 LDA #$01 ; init character/monster properties (31/A400) 34/8018: D0 1E BNE $8038 34/801A: A9 02 LDA #$02 ; choose monster actions (31/A732) 34/801C: D0 1A BNE $8038 34/801E: A9 03 LDA #$03 ; do fight effect (30/9E8A) 34/8020: D0 16 BNE $8038 34/8022: A9 04 LDA #$04 ; do item effect (31/A65E) 34/8024: D0 12 BNE $8038 34/8026: A9 05 LDA #$05 ; update character equipment (31/AA16) 34/8028: D0 0E BNE $8038 34/802A: A9 06 LDA #$06 ; choose random monster target (31/A2E9) 34/802C: D0 0A BNE $8038 34/802E: A9 07 LDA #$07 ; calculate pointer (31/BE9D) 34/8030: D0 06 BNE $8038 34/8032: A9 08 LDA #$08 ; consolidate inventory (31/BEBF) 34/8034: D0 02 BNE $8038 34/8036: A9 09 LDA #$09 ; get confused attack (31/BF17) 34/8038: 85 4C STA $4C 34/803A: 4C F3 FD JMP $FDF3 ; do battle algorithm ; [ update character equipment ] ; A: character id * $40 34/803D: 20 6C 80 JSR $806C ; init character pointer (external) 34/8040: 4C 26 80 JMP $8026 ; update character equipment ; [ check if character can equip item/spell ] ; A: item id ; X: character id * $40 34/8043: 85 18 STA $18 34/8045: C9 C8 CMP #$C8 34/8047: B0 0A BCS $8053 ; branch if a spell 34/8049: C9 98 CMP #$98 34/804B: 90 0B BCC $8058 ; branch if weapon or armor 34/804D: A9 00 LDA #$00 34/804F: 85 1C STA $1C 34/8051: F0 14 BEQ $8067 34/8053: 38 SEC 34/8054: E9 30 SBC #$30 34/8056: 85 18 STA $18 34/8058: 8A TXA 34/8059: 20 6C 80 JSR $806C ; init character pointer (external) 34/805C: A9 00 LDA #$00 ; 30/9400 (weapon properties) 34/805E: 85 20 STA $20 34/8060: A9 94 LDA #$94 34/8062: 85 21 STA $21 34/8064: 20 FD B8 JSR $B8FD ; check if character can equip item/spell 34/8067: C6 1C DEC $1C 34/8069: A5 1C LDA $1C 34/806B: 60 RTS ; [ init character pointer (external) ] 34/806C: 20 43 FD JSR $FD43 ; lsr6 34/806F: 85 52 STA $52 ; character id 34/8071: 4C E1 88 JMP $88E1 ; init character/monster pointers ; -------------------------------------------------------------------------- ; [ battle main ] 34/8074: 20 C3 81 JSR $81C3 34/8077: AD D8 7E LDA $7ED8 34/807A: 29 20 AND #$20 34/807C: F0 03 BEQ $8081 ; branch if no cannon blast 34/807E: 20 87 A4 JSR $A487 ; init cannon blast 34/8081: AD BA 78 LDA $78BA 34/8084: 29 01 AND #$01 34/8086: D0 03 BNE $808B 34/8088: 20 1A 80 JSR $801A ; choose monster actions 34/808B: A9 0E LDA #$0E 34/808D: 20 0E FA JSR $FA0E ; execute battle graphics 34/8090: 20 A0 81 JSR $81A0 34/8093: 20 6C 98 JSR $986C ; get character actions 34/8096: A9 00 LDA #$00 34/8098: 8D E1 7B STA $7BE1 34/809B: 20 74 83 JSR $8374 ; update inventory and run flag 34/809E: A9 0F LDA #$0F 34/80A0: 20 0E FA JSR $FA0E ; execute battle graphics 34/80A3: AD BA 78 LDA $78BA 34/80A6: 30 03 BMI $80AB ; branch if surprise attack round ??? 34/80A8: 20 71 82 JSR $8271 ; update number of times commands were used 34/80AB: 20 77 97 JSR $9777 ; determine attack order 34/80AE: A9 00 LDA #$00 34/80B0: 85 18 STA $18 34/80B2: 20 DF 8A JSR $8ADF ; hide cursor 34/80B5: 20 0B 8F JSR $8F0B ; clear menu area tilemap 34/80B8: 20 CE 82 JSR $82CE ; display battle type message 34/80BB: A2 FF LDX #$FF 34/80BD: 8E CF 78 STX $78CF 34/80C0: 8E D0 78 STX $78D0 34/80C3: 8E D1 78 STX $78D1 34/80C6: 8E D2 78 STX $78D2 ; start of action loop 34/80C9: 20 13 82 JSR $8213 34/80CC: 20 A2 9B JSR $9BA2 ; draw character hp window 34/80CF: 20 58 A4 JSR $A458 ; check if battle is over 34/80D2: AD D3 78 LDA $78D3 34/80D5: D0 45 BNE $811C ; branch if battle is over 34/80D7: 20 95 82 JSR $8295 ; update monster rows 34/80DA: 20 E4 9D JSR $9DE4 ; execute action 34/80DD: 20 6F A5 JSR $A56F ; show magic message 34/80E0: AD D8 7E LDA $7ED8 ; disable cannon blast 34/80E3: 29 DF AND #$DF 34/80E5: 8D D8 7E STA $7ED8 34/80E8: 20 F7 8F JSR $8FF7 ; execute action script 34/80EB: EE C2 7A INC $7AC2 ; next action 34/80EE: AE C2 7A LDX $7AC2 34/80F1: BD CB 7A LDA $7ACB,X 34/80F4: C9 FF CMP #$FF 34/80F6: F0 07 BEQ $80FF ; branch if no more actions 34/80F8: AD C2 7A LDA $7AC2 34/80FB: C9 0C CMP #$0C 34/80FD: D0 CA BNE $80C9 ; end of action loop 34/80FF: AD D3 78 LDA $78D3 34/8102: 29 02 AND #$02 34/8104: D0 03 BNE $8109 34/8106: 20 41 BA JSR $BA41 ; do poison damage 34/8109: 20 58 A4 JSR $A458 ; check if battle is over 34/810C: AD D3 78 LDA $78D3 34/810F: D0 0B BNE $811C ; branch if battle is over 34/8111: AD BA 78 LDA $78BA ; clear ambush and strike first bits 34/8114: 29 08 AND #$08 34/8116: 8D BA 78 STA $78BA 34/8119: 4C 74 80 JMP $8074 ; next turn ; battle is over 34/811C: 20 A2 9B JSR $9BA2 ; draw character hp window 34/811F: AD D3 78 LDA $78D3 34/8122: 29 02 AND #$02 34/8124: D0 3D BNE $8163 34/8126: A9 02 LDA #$02 ; action script $02: display message 34/8128: 8D C2 7E STA $7EC2 34/812B: 8D D5 78 STA $78D5 34/812E: AD D3 78 LDA $78D3 34/8131: 30 04 BMI $8137 ; branch if defeated 34/8133: A9 1D LDA #$1D ; $063D: "てきは ぜんめつした!" / "Victory!" 34/8135: D0 02 BNE $8139 34/8137: A9 1C LDA #$1C ; $063C: "ぜんめつした……" / "Annihilated…" 34/8139: 8D DA 78 STA $78DA 34/813C: C9 1C CMP #$1C 34/813E: F0 10 BEQ $8150 34/8140: AD ED 7C LDA $7CED ; battle index 34/8143: C9 78 CMP #$78 34/8145: F0 04 BEQ $814B 34/8147: C9 73 CMP #$73 34/8149: D0 05 BNE $8150 34/814B: AD EE 7C LDA $7CEE 34/814E: D0 13 BNE $8163 34/8150: 20 F7 8F JSR $8FF7 ; execute action script 34/8153: A9 11 LDA #$11 ; battle end animation 34/8155: 20 0E FA JSR $FA0E ; execute battle graphics 34/8158: AD D3 78 LDA $78D3 34/815B: 10 03 BPL $8160 ; branch if not defeated 34/815D: 4C 70 81 JMP $8170 34/8160: 20 49 BB JSR $BB49 ; battle victory 34/8163: 20 06 83 JSR $8306 34/8166: AD BA 78 LDA $78BA 34/8169: 29 08 AND #$08 34/816B: F0 03 BEQ $8170 34/816D: 20 A4 88 JSR $88A4 ; toggle front/back row for all characters 34/8170: 20 32 80 JSR $8032 ; consolidate inventory 34/8173: AD ED 7C LDA $7CED ; battle index 34/8176: C9 79 CMP #$79 34/8178: D0 0A BNE $8184 34/817A: AD EE 7C LDA $7CEE 34/817D: F0 05 BEQ $8184 34/817F: A9 00 LDA #$00 34/8181: 8D D3 78 STA $78D3 34/8184: 60 RTS ; [ wait one frame ] 34/8185: 48 PHA 34/8186: 98 TYA 34/8187: 48 PHA 34/8188: 8A TXA 34/8189: 48 PHA 34/818A: AD F3 7C LDA $7CF3 34/818D: F0 08 BEQ $8197 ; branch if screen on 34/818F: A9 13 LDA #$13 34/8191: 20 0E FA JSR $FA0E ; execute battle graphics 34/8194: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 34/8197: 68 PLA 34/8198: AA TAX 34/8199: 68 PLA 34/819A: A8 TAY 34/819B: 68 PLA 34/819C: 60 RTS ; [ wait for irq ] 34/819D: 4C 79 FB JMP $FB79 ; wait for irq ; [ ] 34/81A0: 20 41 A5 JSR $A541 ; get character offset 34/81A3: A9 23 LDA #$23 34/81A5: 20 88 9B JSR $9B88 ; add character offset 34/81A8: A6 52 LDX $52 34/81AA: BD E4 7C LDA $7CE4,X 34/81AD: F0 07 BEQ $81B6 34/81AF: 91 5B STA ($5B),Y 34/81B1: A9 00 LDA #$00 34/81B3: 9D E4 7C STA $7CE4,X 34/81B6: E6 52 INC $52 34/81B8: A5 52 LDA $52 34/81BA: C9 04 CMP #$04 34/81BC: D0 E2 BNE $81A0 34/81BE: A9 00 LDA #$00 34/81C0: 85 52 STA $52 34/81C2: 60 RTS ; [ ] 34/81C3: A2 FF LDX #$FF 34/81C5: 20 E1 88 JSR $88E1 ; init character/monster pointers 34/81C8: A9 FF LDA #$FF 34/81CA: A2 03 LDX #$03 34/81CC: 9D C3 7A STA $7AC3,X 34/81CF: CA DEX 34/81D0: 10 FA BPL $81CC 34/81D2: 20 AA 87 JSR $87AA 34/81D5: 8E C2 7A STX $7AC2 ; action queue pointer 34/81D8: 86 74 STX $74 34/81DA: EE E2 7B INC $7BE2 34/81DD: A2 0C LDX #$0C 34/81DF: A9 75 LDA #$75 ; $7575 34/81E1: 85 18 STA $18 34/81E3: A9 75 LDA #$75 34/81E5: 85 19 STA $19 34/81E7: A0 2C LDY #$2C 34/81E9: B1 18 LDA ($18),Y 34/81EB: 29 E7 AND #$E7 ; clear item and magic flags 34/81ED: 91 18 STA ($18),Y 34/81EF: A0 02 LDY #$02 34/81F1: B1 18 LDA ($18),Y 34/81F3: 29 01 AND #$01 34/81F5: D0 0B BNE $8202 34/81F7: A0 2E LDY #$2E 34/81F9: A9 00 LDA #$00 34/81FB: 91 18 STA ($18),Y 34/81FD: C8 INY 34/81FE: C0 31 CPY #$31 34/8200: D0 F9 BNE $81FB 34/8202: 18 CLC 34/8203: A5 18 LDA $18 34/8205: 69 40 ADC #$40 34/8207: 85 18 STA $18 34/8209: A5 19 LDA $19 34/820B: 69 00 ADC #$00 34/820D: 85 19 STA $19 34/820F: CA DEX 34/8210: D0 D5 BNE $81E7 34/8212: 60 RTS ; [ ] 34/8213: A9 FF LDA #$FF 34/8215: A2 1F LDX #$1F 34/8217: 9D 4F 7E STA $7E4F,X ; reset damage numeral buffer 34/821A: CA DEX 34/821B: 10 FA BPL $8217 34/821D: 8D D6 78 STA $78D6 34/8220: 8D D7 78 STA $78D7 34/8223: 8D D8 78 STA $78D8 34/8226: 8D D9 78 STA $78D9 34/8229: 8D 88 7E STA $7E88 34/822C: A2 09 LDX #$09 ; $0629: "ミス!" / "Miss!" 34/822E: 9D DA 78 STA $78DA,X 34/8231: CA DEX 34/8232: 10 FA BPL $822E 34/8234: 8E E1 7E STX $7EE1 34/8237: E8 INX 34/8238: 8E EE 78 STX $78EE 34/823B: 8E 98 7E STX $7E98 34/823E: 8E 99 7E STX $7E99 34/8241: 8E 9A 7E STX $7E9A 34/8244: 8E 1F 7E STX $7E1F 34/8247: 8E 20 7E STX $7E20 34/824A: 86 BB STX $BB 34/824C: 86 BC STX $BC 34/824E: 8E 93 7E STX $7E93 34/8251: 8E D4 78 STX $78D4 34/8254: 8E C2 7E STX $7EC2 34/8257: 8E 0F 7E STX $7E0F 34/825A: 8E 10 7E STX $7E10 34/825D: 8E 11 7E STX $7E11 34/8260: 8E 12 7E STX $7E12 34/8263: 86 72 STX $72 34/8265: 8E DF 7E STX $7EDF 34/8268: 8A TXA 34/8269: A2 1F LDX #$1F 34/826B: 95 E0 STA $E0,X 34/826D: CA DEX 34/826E: 10 FB BPL $826B 34/8270: 60 RTS ; [ update number of times commands were used ] 34/8271: A2 00 LDX #$00 34/8273: 86 52 STX $52 34/8275: A6 52 LDX $52 34/8277: BD C3 7A LDA $7AC3,X ; selected command slot 34/827A: 85 18 STA $18 34/827C: C9 FF CMP #$FF 34/827E: F0 0C BEQ $828C ; skip if invalid 34/8280: 18 CLC 34/8281: A5 52 LDA $52 34/8283: 20 40 FD JSR $FD40 ; asl2 34/8286: 65 18 ADC $18 34/8288: AA TAX 34/8289: FE F0 78 INC $78F0,X ; increment # of times command was used 34/828C: E6 52 INC $52 ; next character 34/828E: A5 52 LDA $52 34/8290: C9 04 CMP #$04 34/8292: D0 E1 BNE $8275 34/8294: 60 RTS ; [ update monster rows ] 34/8295: 20 B9 86 JSR $86B9 ; determine monster rows 34/8298: A9 75 LDA #$75 ; $7675 34/829A: 85 1A STA $1A 34/829C: A9 76 LDA #$76 34/829E: 85 1B STA $1B 34/82A0: A2 08 LDX #$08 34/82A2: A0 33 LDY #$33 34/82A4: A5 18 LDA $18 34/82A6: 0A ASL 34/82A7: 90 0A BCC $82B3 ; branch if back row 34/82A9: 48 PHA 34/82AA: B1 1A LDA ($1A),Y ; front row 34/82AC: 29 FE AND #$FE 34/82AE: 91 1A STA ($1A),Y 34/82B0: 4C BC 82 JMP $82BC 34/82B3: 48 PHA 34/82B4: B1 1A LDA ($1A),Y ; back row 34/82B6: 29 FE AND #$FE ; this instruction is unnecessary 34/82B8: 09 01 ORA #$01 34/82BA: 91 1A STA ($1A),Y 34/82BC: 18 CLC 34/82BD: A5 1A LDA $1A ; next monster 34/82BF: 69 40 ADC #$40 34/82C1: 85 1A STA $1A 34/82C3: A5 1B LDA $1B 34/82C5: 69 00 ADC #$00 34/82C7: 85 1B STA $1B 34/82C9: 68 PLA 34/82CA: CA DEX 34/82CB: D0 D9 BNE $82A6 34/82CD: 60 RTS ; [ display battle type message ] 34/82CE: AD BA 78 LDA $78BA 34/82D1: F0 2A BEQ $82FD 34/82D3: 30 0C BMI $82E1 34/82D5: 29 08 AND #$08 34/82D7: D0 24 BNE $82FD 34/82D9: A9 17 LDA #$17 ; $0637: "せんせいこうげき!" / "Strike first!" 34/82DB: 8D DA 78 STA $78DA 34/82DE: 4C F2 82 JMP $82F2 34/82E1: 29 08 AND #$08 34/82E3: D0 08 BNE $82ED 34/82E5: A9 18 LDA #$18 ; $0638: "モンスターのせんせいこうげき!" / "Ambushed!" 34/82E7: 8D DA 78 STA $78DA 34/82EA: 4C F2 82 JMP $82F2 34/82ED: A9 19 LDA #$19 ; $0639: "バックアタックだ!" / "Back attack!" 34/82EF: 8D DA 78 STA $78DA 34/82F2: A9 02 LDA #$02 ; action script $02: display message 34/82F4: 8D D5 78 STA $78D5 34/82F7: 8D C2 7E STA $7EC2 34/82FA: 20 F7 8F JSR $8FF7 ; execute action script 34/82FD: AD BA 78 LDA $78BA 34/8300: 29 09 AND #$09 34/8302: 8D BA 78 STA $78BA 34/8305: 60 RTS ; [ ] 34/8306: A9 00 LDA #$00 34/8308: 85 52 STA $52 34/830A: 20 26 80 JSR $8026 ; update character equipment 34/830D: E6 52 INC $52 34/830F: A5 52 LDA $52 34/8311: C9 04 CMP #$04 34/8313: D0 F5 BNE $830A 34/8315: A9 00 LDA #$00 34/8317: 8D 52 00 STA $0052 34/831A: 20 41 A5 JSR $A541 ; get character offset 34/831D: A8 TAY 34/831E: C8 INY 34/831F: B1 5B LDA ($5B),Y 34/8321: 29 FE AND #$FE 34/8323: 85 18 STA $18 34/8325: 20 8D 9B JSR $9B8D 34/8328: B1 5B LDA ($5B),Y 34/832A: 85 19 STA $19 34/832C: C8 INY 34/832D: B1 5B LDA ($5B),Y 34/832F: 85 1A STA $1A 34/8331: A2 00 LDX #$00 34/8333: A9 07 LDA #$07 34/8335: 20 88 9B JSR $9B88 ; add character offset 34/8338: B1 5B LDA ($5B),Y 34/833A: 95 1B STA $1B,X 34/833C: C8 INY 34/833D: E8 INX 34/833E: E0 08 CPX #$08 34/8340: D0 F6 BNE $8338 34/8342: A9 02 LDA #$02 34/8344: 20 88 9B JSR $9B88 ; add character offset 34/8347: A5 18 LDA $18 34/8349: 91 57 STA ($57),Y 34/834B: A9 0C LDA #$0C 34/834D: 20 88 9B JSR $9B88 ; add character offset 34/8350: A5 19 LDA $19 34/8352: 91 57 STA ($57),Y 34/8354: C8 INY 34/8355: A5 1A LDA $1A 34/8357: 91 57 STA ($57),Y 34/8359: A2 00 LDX #$00 34/835B: A9 30 LDA #$30 34/835D: 20 88 9B JSR $9B88 ; add character offset 34/8360: B5 1B LDA $1B,X 34/8362: 91 57 STA ($57),Y 34/8364: C8 INY 34/8365: C8 INY 34/8366: E8 INX 34/8367: E0 08 CPX #$08 34/8369: D0 F5 BNE $8360 34/836B: E6 52 INC $52 34/836D: A5 52 LDA $52 34/836F: C9 04 CMP #$04 34/8371: D0 A7 BNE $831A 34/8373: 60 RTS ; [ update inventory and run flag ] ; after actions are confirmed for all characters, any used items are ; returned to the inventory and the "trying to run" flag is set if ; the run or escape command was chosen. used items are removed from ; the inventory at 31/A65E. 34/8374: A9 00 LDA #$00 34/8376: 85 52 STA $52 34/8378: 85 74 STA $74 34/837A: 20 41 A5 JSR $A541 ; get character offset 34/837D: 18 CLC 34/837E: 69 3F ADC #$3F 34/8380: A8 TAY 34/8381: B1 5B LDA ($5B),Y 34/8383: F0 03 BEQ $8388 ; branch if no used item pending 34/8385: 20 E7 9A JSR $9AE7 ; return used item to inventory 34/8388: 20 9B 9B JSR $9B9B ; get action pointer 34/838B: B1 5B LDA ($5B),Y 34/838D: C9 06 CMP #$06 34/838F: F0 04 BEQ $8395 ; branch if action $06 (run) 34/8391: C9 07 CMP #$07 34/8393: D0 02 BNE $8397 ; branch if not action $07 (escape) 34/8395: E6 74 INC $74 ; set "trying to run" flag 34/8397: E6 52 INC $52 ; next character 34/8399: A5 52 LDA $52 34/839B: C9 04 CMP #$04 34/839D: D0 DB BNE $837A 34/839F: 60 RTS ; -------------------------------------------------------------------------- ; sound effect for each magic attack 34/83A0: 3C 11 02 41 51 3C 1F 42 1A 08 09 09 19 1F 41 01 34/83B0: 47 45 09 09 1F 43 0D 49 09 51 20 1F 1B 1C 49 39 34/83C0: 34 34 1F 41 1C 43 09 47 09 1F 43 49 49 45 38 38 34/83D0: 1F 41 1C 54 09 09 39 1F 35 41 02 43 08 42 48 09 34/83E0: 09 32 4A 00 48 48 48 48 07 07 3C 20 22 1E 07 07 34/83F0: 42 03 46 54 32 32 41 4F ; attack animation for each action id 34/83F8: 03 03 04 05 00 06 0D 0D 07 08 03 03 03 03 03 09 34/8408: 00 0A 0B 01 01 0C 0E 0F 10 ; [ show animation ] 34/8411: AD 9A 7E LDA $7E9A 34/8414: 2A ROL 34/8415: 2A ROL 34/8416: 2A ROL 34/8417: 29 01 AND #$01 34/8419: 8D 6F 7E STA $7E6F ; set if target is a monster 34/841C: AC C2 7E LDY $7EC2 34/841F: B9 F8 83 LDA $83F8,Y ; attack animation id 34/8422: C9 01 CMP #$01 34/8424: D0 04 BNE $842A ; branch if not a magic attack 34/8426: 18 CLC 34/8427: 6D C3 7E ADC $7EC3 ; adds 1 for summon attack, 0 otherwise 34/842A: 8D 97 7E STA $7E97 34/842D: 0A ASL 34/842E: A8 TAY 34/842F: B9 3E 84 LDA $843E,Y 34/8432: 8D 18 00 STA $0018 34/8435: B9 3F 84 LDA $843F,Y 34/8438: 8D 19 00 STA $0019 34/843B: 6C 18 00 JMP ($0018) ; attack animation jump table 34/843E: 8613 8577 85ED 8576 853B 8540 8528 852D 34/844E: 8516 850A 8505 84FB 84F6 84D7 8470 8460 34/845E: 8555 ; [ attack animation $0F: damage numerals ] 34/8460: 20 8A 86 JSR $868A 34/8463: AD E1 7E LDA $7EE1 34/8466: 30 07 BMI $846F 34/8468: 85 7E STA $7E 34/846A: A9 0C LDA #$0C ; split animation 34/846C: 20 0E FA JSR $FA0E ; execute battle graphics 34/846F: 60 RTS ; [ attack animation $0E: death animation ] 34/8470: AD 9A 7E LDA $7E9A 34/8473: 30 06 BMI $847B ; branch if attacker is a monster ; character attacker 34/8475: 20 96 84 JSR $8496 ; monster death animations 34/8478: 4C 81 84 JMP $8481 ; character death animations ; monster attacker 34/847B: 20 81 84 JSR $8481 ; character death animations 34/847E: 4C 96 84 JMP $8496 ; monster death animations ; [ character death animations ] 34/8481: A2 00 LDX #$00 34/8483: BD BB 78 LDA $78BB,X 34/8486: DD 9B 7D CMP $7D9B,X 34/8489: D0 06 BNE $8491 ; branch if status changed 34/848B: E8 INX 34/848C: E0 08 CPX #$08 34/848E: D0 F3 BNE $8483 34/8490: 60 RTS 34/8491: A9 07 LDA #$07 ; character death animations ??? 34/8493: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ monster death animations ] 34/8496: A2 00 LDX #$00 34/8498: BD C4 7E LDA $7EC4,X 34/849B: 30 15 BMI $84B2 ; branch if dead 34/849D: BD A7 7D LDA $7DA7,X ; monster type 34/84A0: C9 FF CMP #$FF 34/84A2: D0 15 BNE $84B9 ; branch if valid 34/84A4: 20 C7 84 JSR $84C7 ; get dead monsters 34/84A7: A5 7E LDA $7E 34/84A9: 49 FF EOR #$FF ; invert to get living monsters 34/84AB: 85 7E STA $7E 34/84AD: A9 0B LDA #$0B ; monster summon animation 34/84AF: 4C 0E FA JMP $FA0E ; execute battle graphics 34/84B2: BD A7 7D LDA $7DA7,X ; monster type 34/84B5: C9 FF CMP #$FF 34/84B7: D0 06 BNE $84BF ; branch if valid 34/84B9: E8 INX ; next monster 34/84BA: E0 08 CPX #$08 34/84BC: D0 DA BNE $8498 34/84BE: 60 RTS 34/84BF: 20 C7 84 JSR $84C7 ; get dead monsters 34/84C2: A9 0A LDA #$0A ; monster death animations 34/84C4: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ get dead monsters ] ; $7E: bitmask of dead monsters (msb is monster slot 0) 34/84C7: A2 00 LDX #$00 34/84C9: 86 7E STX $7E 34/84CB: BD C4 7E LDA $7EC4,X 34/84CE: 0A ASL 34/84CF: 26 7E ROL $7E 34/84D1: E8 INX 34/84D2: E0 08 CPX #$08 34/84D4: D0 F5 BNE $84CB 34/84D6: 60 RTS ; [ attack animation $0D: run/escape ] 34/84D7: AD 9A 7E LDA $7E9A 34/84DA: 30 0A BMI $84E6 ; branch if attacker is a monster 34/84DC: AD D4 78 LDA $78D4 34/84DF: F0 14 BEQ $84F5 34/84E1: A9 21 LDA #$21 ; characters run away 34/84E3: 4C 0E FA JMP $FA0E ; execute battle graphics 34/84E6: 20 45 85 JSR $8545 ; flash monster (pre-attack) 34/84E9: AD D4 78 LDA $78D4 34/84EC: F0 07 BEQ $84F5 34/84EE: 85 7E STA $7E 34/84F0: A9 0D LDA #$0D ; monsters run away 34/84F2: 4C 0E FA JMP $FA0E ; execute battle graphics 34/84F5: 60 RTS ; [ attack animation $0C: cannon blast ] 34/84F6: A9 24 LDA #$24 34/84F8: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ attack animation $0B: cheer ] 34/84FB: A9 1B LDA #$1B 34/84FD: 48 PHA 34/84FE: 20 32 85 JSR $8532 ; set animation attacker 34/8501: 68 PLA 34/8502: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ attack animation $0A: scare ] 34/8505: A9 1A LDA #$1A 34/8507: 4C FD 84 JMP $84FD ; [ attack animation $09: ] 34/850A: 20 32 85 JSR $8532 ; set animation attacker 34/850D: A9 16 LDA #$16 34/850F: 18 CLC 34/8510: 6D 93 7E ADC $7E93 34/8513: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ attack animation $08: jump 2 ] 34/8516: 20 32 85 JSR $8532 ; set animation attacker 34/8519: A2 01 LDX #$01 34/851B: 20 AB 86 JSR $86AB ; get target id 34/851E: 84 B8 STY $B8 34/8520: A9 19 LDA #$19 34/8522: 20 0E FA JSR $FA0E ; execute battle graphics 34/8525: 4C 89 86 JMP $8689 ; [ attack animation $06: defend ] 34/8528: A9 15 LDA #$15 34/852A: 4C FD 84 JMP $84FD ; [ attack animation $07: jump 1 ] 34/852D: A9 18 LDA #$18 34/852F: 4C FD 84 JMP $84FD ; [ set animation attacker ] 34/8532: A2 00 LDX #$00 34/8534: 20 AB 86 JSR $86AB ; get attacker id 34/8537: 8C 52 00 STY $0052 ; attacker id -> $95 34/853A: 60 RTS ; [ attack animation $04: display message ] 34/853B: A9 04 LDA #$04 34/853D: 4C FD 84 JMP $84FD ; [ attack animation $05: ] 34/8540: A9 03 LDA #$03 34/8542: 4C FD 84 JMP $84FD ; [ flash monster (pre-attack) ] 34/8545: AD 98 7E LDA $7E98 ; attacker mask 34/8548: 8D 8F 7E STA $7E8F 34/854B: A9 03 LDA #$03 ; palette 3 (menu window palette) 34/854D: 8D 90 7E STA $7E90 34/8550: A9 1F LDA #$1F ; flash monsters 34/8552: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ attack animation $10: ineffective ] 34/8555: E6 CC INC $CC 34/8557: AD 9A 7E LDA $7E9A 34/855A: 29 80 AND #$80 34/855C: F0 06 BEQ $8564 ; branch if attacker is a character 34/855E: 20 45 85 JSR $8545 ; flash monster (pre-attack) 34/8561: 4C 72 85 JMP $8572 34/8564: A9 00 LDA #$00 34/8566: 8D 9B 7E STA $7E9B ; clear targets 34/8569: 8D 88 7E STA $7E88 34/856C: 8D 9D 7E STA $7E9D 34/856F: 20 77 85 JSR $8577 ; do magic attack animation 34/8572: A9 00 LDA #$00 34/8574: 85 CC STA $CC 34/8576: 60 RTS ; [ attack animation $01: magic ] 34/8577: AC 88 7E LDY $7E88 34/857A: B9 A0 83 LDA $83A0,Y ; magic sound effect 34/857D: 8D CA 00 STA $00CA 34/8580: A9 00 LDA #$00 34/8582: 8D C9 00 STA $00C9 34/8585: AD 9A 7E LDA $7E9A 34/8588: 10 03 BPL $858D ; branch if attacker is a character 34/858A: 20 45 85 JSR $8545 ; flash monster (pre-attack) 34/858D: 20 32 85 JSR $8532 ; set animation attacker 34/8590: AD 99 7E LDA $7E99 34/8593: 8D 89 7E STA $7E89 34/8596: A9 1D LDA #$1D ; magic 34/8598: 20 0E FA JSR $FA0E ; execute battle graphics 34/859B: 20 89 86 JSR $8689 34/859E: AD 9A 7E LDA $7E9A 34/85A1: 29 40 AND #$40 34/85A3: F0 47 BEQ $85EC ; return if target is a character ; summon, split 34/85A5: AD 9D 7E LDA $7E9D 34/85A8: C9 06 CMP #$06 34/85AA: D0 0E BNE $85BA ; branch if not summon or split 34/85AC: AD 99 7E LDA $7E99 34/85AF: C9 FF CMP #$FF 34/85B1: F0 39 BEQ $85EC 34/85B3: 85 7E STA $7E 34/85B5: A9 0C LDA #$0C 34/85B7: 4C 0E FA JMP $FA0E ; execute battle graphics ; brak2 34/85BA: C9 07 CMP #$07 34/85BC: D0 10 BNE $85CE ; branch if not brak2 34/85BE: AD 9B 7E LDA $7E9B ; targets hit 34/85C1: 8D 8F 7E STA $7E8F 34/85C4: A9 03 LDA #$03 ; palette 3 (menu window palette) 34/85C6: 8D 90 7E STA $7E90 34/85C9: A9 22 LDA #$22 ; brak2 34/85CB: 4C 0E FA JMP $FA0E ; execute battle graphics ; toad, mini 34/85CE: C9 08 CMP #$08 34/85D0: D0 16 BNE $85E8 ; branch if not toad 34/85D2: AD 9B 7E LDA $7E9B 34/85D5: F0 15 BEQ $85EC 34/85D7: A2 03 LDX #$03 34/85D9: 20 AB 86 JSR $86AB ; get ??? id 34/85DC: 84 B8 STY $B8 34/85DE: AD 9B 7E LDA $7E9B 34/85E1: 85 7E STA $7E 34/85E3: A9 23 LDA #$23 34/85E5: 4C 0E FA JMP $FA0E ; execute battle graphics 34/85E8: C9 0D CMP #$0D 34/85EA: F0 E6 BEQ $85D2 ; branch if mini 34/85EC: 60 RTS ; [ attack animation $02: summon ] 34/85ED: 20 D2 86 JSR $86D2 ; get monster rows for summon animation 34/85F0: 20 32 85 JSR $8532 ; set animation attacker 34/85F3: A2 01 LDX #$01 34/85F5: 20 AB 86 JSR $86AB ; get target id 34/85F8: 84 B8 STY $B8 34/85FA: AD 94 7E LDA $7E94 34/85FD: 48 PHA 34/85FE: 29 0F AND #$0F 34/8600: 8D 92 7E STA $7E92 ; summon attack id 34/8603: 68 PLA 34/8604: 4A LSR 34/8605: 4A LSR 34/8606: 4A LSR 34/8607: 4A LSR 34/8608: 8D 91 7E STA $7E91 ; summon id 34/860B: A9 1E LDA #$1E ; summon 34/860D: 20 0E FA JSR $FA0E ; execute battle graphics 34/8610: 4C 89 86 JMP $8689 ; [ attack animation $00: fight ] 34/8613: A2 00 LDX #$00 34/8615: 8E 96 7E STX $7E96 34/8618: 20 AB 86 JSR $86AB ; get attacker id 34/861B: AD 9A 7E LDA $7E9A 34/861E: 10 27 BPL $8647 ; branch if attacker is a character 34/8620: 20 45 85 JSR $8545 ; flash monster (pre-attack) 34/8623: AD 6F 7E LDA $7E6F 34/8626: F0 0F BEQ $8637 ; branch if target is a character ; monster attacking monster 34/8628: A2 01 LDX #$01 34/862A: 20 AB 86 JSR $86AB ; get target id 34/862D: 84 B8 STY $B8 34/862F: A9 20 LDA #$20 34/8631: 20 0E FA JSR $FA0E ; execute battle graphics 34/8634: 4C 89 86 JMP $8689 ; monster attacking character 34/8637: A2 01 LDX #$01 34/8639: 20 AB 86 JSR $86AB ; get target id 34/863C: 8C 52 00 STY $0052 34/863F: A9 14 LDA #$14 ; character hit animation 34/8641: 20 0E FA JSR $FA0E ; execute battle graphics 34/8644: 4C 89 86 JMP $8689 34/8647: 8C 52 00 STY $0052 34/864A: AD 6F 7E LDA $7E6F 34/864D: F0 0F BEQ $865E ; branch if target is a character ; character attacking monster 34/864F: A2 01 LDX #$01 34/8651: 20 AB 86 JSR $86AB ; get target id 34/8654: 84 B8 STY $B8 34/8656: A9 12 LDA #$12 ; weapon animation 34/8658: 20 0E FA JSR $FA0E ; execute battle graphics 34/865B: 4C 89 86 JMP $8689 ; character attacking character 34/865E: EE 96 7E INC $7E96 ; set character vs. character flag 34/8661: A5 BB LDA $BB 34/8663: 48 PHA 34/8664: A5 BC LDA $BC 34/8666: 48 PHA 34/8667: A9 00 LDA #$00 34/8669: 85 BB STA $BB 34/866B: 85 BC STA $BC 34/866D: A9 12 LDA #$12 ; weapon animation 34/866F: 20 0E FA JSR $FA0E ; execute battle graphics 34/8672: A2 01 LDX #$01 34/8674: 20 AB 86 JSR $86AB ; get target id 34/8677: 8C 52 00 STY $0052 34/867A: 68 PLA 34/867B: 85 BC STA $BC 34/867D: 68 PLA 34/867E: 85 BB STA $BB 34/8680: 05 BC ORA $BC 34/8682: F0 05 BEQ $8689 34/8684: A9 14 LDA #$14 ; character hit animation 34/8686: 20 0E FA JSR $FA0E ; execute battle graphics 34/8689: 60 RTS ; [ show damage numerals ] 34/868A: A9 1C LDA #$1C 34/868C: 20 0E FA JSR $FA0E ; execute battle graphics 34/868F: AD 9A 7E LDA $7E9A 34/8692: 2A ROL 34/8693: 2A ROL 34/8694: 29 01 AND #$01 34/8696: 8D 6F 7E STA $7E6F ; target is a character/monster 34/8699: A2 00 LDX #$00 34/869B: BD 5F 7E LDA $7E5F,X ; copy attacker damage numerals 34/869E: 9D 4F 7E STA $7E4F,X 34/86A1: E8 INX 34/86A2: E0 10 CPX #$10 34/86A4: D0 F5 BNE $869B 34/86A6: A9 1C LDA #$1C 34/86A8: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ get attacker/target id ] ; X: 0 = attacker, 1 = target 34/86AB: A0 00 LDY #$00 34/86AD: BD 98 7E LDA $7E98,X ; 34/86B0: D9 24 FD CMP $FD24,Y ; bit mask 34/86B3: F0 03 BEQ $86B8 34/86B5: C8 INY 34/86B6: D0 F5 BNE $86AD 34/86B8: 60 RTS ; [ determine monster rows ] ; $18: bit mask for monsters in front row 34/86B9: A9 00 LDA #$00 ; start with all monsters in back row 34/86BB: 85 18 STA $18 34/86BD: 20 EA 86 JSR $86EA ; find back row 34/86C0: A2 07 LDX #$07 ; start with frontmost monster 34/86C2: 20 05 87 JSR $8705 ; get monster row 34/86C5: 90 07 BCC $86CE ; skip if slot is empty 34/86C7: C5 1B CMP $1B 34/86C9: F0 06 BEQ $86D1 ; return if in back row 34/86CB: 20 FD 86 JSR $86FD ; set front row flag for monster 34/86CE: CA DEX 34/86CF: 10 F1 BPL $86C2 34/86D1: 60 RTS ; [ get monster rows for summon animation ] 34/86D2: A2 08 LDX #$08 34/86D4: A9 FF LDA #$FF 34/86D6: 9D 25 7E STA $7E25,X 34/86D9: CA DEX 34/86DA: D0 FA BNE $86D6 34/86DC: A2 07 LDX #$07 34/86DE: 20 05 87 JSR $8705 ; get monster row 34/86E1: 90 03 BCC $86E6 34/86E3: 9D 26 7E STA $7E26,X 34/86E6: CA DEX 34/86E7: 10 F5 BPL $86DE 34/86E9: 60 RTS ; [ find back row ] ; X: monster slot ; $1A: front monster's row ; $1B: back row value 34/86EA: A2 07 LDX #$07 ; find the monster in front 34/86EC: 20 05 87 JSR $8705 ; get monster row 34/86EF: 90 08 BCC $86F9 ; skip if slot is empty 34/86F1: 85 1A STA $1A 34/86F3: 38 SEC 34/86F4: E9 02 SBC #$02 ; first 2 rows count as front row 34/86F6: 85 1B STA $1B 34/86F8: 60 RTS 34/86F9: CA DEX 34/86FA: 10 F0 BPL $86EC 34/86FC: 60 RTS ; [ set front row flag for monster ] ; X: monster slot 34/86FD: BD 24 FD LDA $FD24,X ; bit mask 34/8700: 05 18 ORA $18 34/8702: 85 18 STA $18 34/8704: 60 RTS ; [ get monster row ] ; X: monster slot ; return carry clear if slot is empty 34/8705: 86 7F STX $7F 34/8707: BD A7 7D LDA $7DA7,X ; monster type 34/870A: C9 FF CMP #$FF 34/870C: F0 27 BEQ $8735 ; branch if slot empty 34/870E: AD 7B 7D LDA $7D7B ; monster tilemap id 34/8711: 0A ASL 34/8712: A8 TAY 34/8713: B9 39 87 LDA $8739,Y 34/8716: 85 80 STA $80 34/8718: B9 3A 87 LDA $873A,Y 34/871B: 85 81 STA $81 34/871D: E8 INX 34/871E: 06 81 ASL $81 34/8720: 26 80 ROL $80 34/8722: 26 7E ROL $7E 34/8724: 06 81 ASL $81 34/8726: 26 80 ROL $80 34/8728: 26 7E ROL $7E 34/872A: CA DEX 34/872B: D0 F1 BNE $871E 34/872D: A5 7E LDA $7E 34/872F: 29 03 AND #$03 34/8731: A6 7F LDX $7F 34/8733: 38 SEC 34/8734: 60 RTS 34/8735: A6 7F LDX $7F 34/8737: 18 CLC 34/8738: 60 RTS ; monster rows (10 items, 2 bits per monster) ; smaller numbers are towards the back 34/8739: 05 AF ; 0 0 1 1 2 2 3 3 34/873B: 05 AF ; 0 0 1 1 2 2 3 3 34/873D: 16 BC ; 0 1 1 2 2 3 3 0 34/873F: 05 A0 ; 0 0 1 1 2 2 0 0 34/8741: 16 80 ; 0 1 1 2 2 0 0 0 34/8743: 1A 00 ; 0 1 2 2 0 0 0 0 34/8745: 18 00 ; 0 1 2 0 0 0 0 0 34/8747: 05 00 ; 0 0 1 1 0 0 0 0 34/8749: 14 00 ; 0 1 1 0 0 0 0 0 34/874B: 00 00 ; 0 0 0 0 0 0 0 0 ; -------------------------------------------------------------------------- ; [ ] 34/874D: AD EF 7C LDA $7CEF 34/8750: 8D E3 7C STA $7CE3 34/8753: 20 E1 88 JSR $88E1 ; init character/monster pointers 34/8756: A9 75 LDA #$75 34/8758: 85 5D STA $5D 34/875A: 85 6E STA $6E 34/875C: A9 76 LDA #$76 34/875E: 85 5E STA $5E 34/8760: 85 6F STA $6F 34/8762: A9 00 LDA #$00 34/8764: A2 0F LDX #$0F 34/8766: 9D F0 78 STA $78F0,X ; clear # of times each command used 34/8769: CA DEX 34/876A: 10 FA BPL $8766 34/876C: A2 07 LDX #$07 34/876E: 9D C3 7A STA $7AC3,X 34/8771: CA DEX 34/8772: 10 FA BPL $876E 34/8774: A2 05 LDX #$05 34/8776: 9D C9 78 STA $78C9,X 34/8779: CA DEX 34/877A: 10 FA BPL $8776 34/877C: A2 07 LDX #$07 34/877E: 9D C4 7E STA $7EC4,X 34/8781: CA DEX 34/8782: 10 FA BPL $877E 34/8784: A2 03 LDX #$03 34/8786: 9D E4 7C STA $7CE4,X 34/8789: CA DEX 34/878A: 10 FA BPL $8786 34/878C: 8E E1 7E STX $7EE1 34/878F: 8E E2 7B STX $7BE2 34/8792: 20 AA 87 JSR $87AA 34/8795: 8E E1 7B STX $7BE1 34/8798: 8E E8 7C STX $7CE8 34/879B: 8E EC 7C STX $7CEC 34/879E: 8E D3 78 STX $78D3 34/87A1: 8E B7 78 STX $78B7 34/87A4: 86 72 STX $72 34/87A6: 8E EB 7C STX $7CEB 34/87A9: 60 RTS ; [ ] 34/87AA: 8E CF 78 STX $78CF ; reset character battle commands 34/87AD: 8E D0 78 STX $78D0 34/87B0: 8E D1 78 STX $78D1 34/87B3: 8E D2 78 STX $78D2 34/87B6: E8 INX 34/87B7: 86 52 STX $52 34/87B9: 86 53 STX $53 34/87BB: 86 54 STX $54 34/87BD: 60 RTS ; [ ] 34/87BE: AD D8 7E LDA $7ED8 ; disable cannon blast 34/87C1: 29 BF AND #$BF 34/87C3: 8D D8 7E STA $7ED8 34/87C6: AD EE 7C LDA $7CEE ; hi byte of battle id 34/87C9: F0 08 BEQ $87D3 34/87CB: AD D8 7E LDA $7ED8 34/87CE: 09 10 ORA #$10 ; surface world battle (for terrain) 34/87D0: 8D D8 7E STA $7ED8 34/87D3: AD C6 74 LDA $74C6 ; vehicle id ($46 from field zp) 34/87D6: C9 07 CMP #$07 34/87D8: D0 08 BNE $87E2 ; branch if not invincible 34/87DA: AD D8 7E LDA $7ED8 34/87DD: 09 40 ORA #$40 ; enable cannon blast 34/87DF: 8D D8 7E STA $7ED8 34/87E2: AD D8 7E LDA $7ED8 34/87E5: 29 02 AND #$02 34/87E7: F0 03 BEQ $87EC 34/87E9: EE B7 78 INC $78B7 ; increment monster special attack script pointer 34/87EC: AD D8 7E LDA $7ED8 34/87EF: 4A LSR 34/87F0: 6E D8 7E ROR $7ED8 ; rotate flags by 1 34/87F3: A5 5B LDA $5B 34/87F5: 85 24 STA $24 34/87F7: A5 5C LDA $5C 34/87F9: 85 25 STA $25 34/87FB: A9 00 LDA #$00 34/87FD: 85 2A STA $2A 34/87FF: 85 2B STA $2B 34/8801: 8D C3 78 STA $78C3 34/8804: 8D BA 78 STA $78BA 34/8807: AD D8 7E LDA $7ED8 34/880A: 30 62 BMI $886E ; return if a boss battle 34/880C: 29 20 AND #$20 34/880E: D0 5E BNE $886E ; return if in invincible 34/8810: A9 04 LDA #$04 34/8812: 85 26 STA $26 34/8814: 20 6F 88 JSR $886F ; get average character level 34/8817: 85 28 STA $28 34/8819: A9 64 LDA #$64 34/881B: 20 64 A5 JSR $A564 ; random (0..A) 34/881E: C5 28 CMP $28 34/8820: B0 02 BCS $8824 ; branch if (0..100) >= avg char level 34/8822: E6 2A INC $2A ; increment character score 34/8824: A9 75 LDA #$75 34/8826: 85 24 STA $24 34/8828: A9 76 LDA #$76 34/882A: 85 25 STA $25 34/882C: A9 08 LDA #$08 34/882E: 85 26 STA $26 34/8830: 20 6F 88 JSR $886F ; get average monster level 34/8833: 85 29 STA $29 34/8835: A9 64 LDA #$64 34/8837: 20 64 A5 JSR $A564 ; random (0..A) 34/883A: C5 29 CMP $29 34/883C: B0 02 BCS $8840 ; branch if (0..100) >= avg monster level 34/883E: E6 2B INC $2B ; increment monster score 34/8840: E6 2A INC $2A 34/8842: E6 2B INC $2B 34/8844: A5 2B LDA $2B 34/8846: C5 2A CMP $2A 34/8848: F0 24 BEQ $886E ; return if scores are the same 34/884A: B0 06 BCS $8852 ; branch if monster score is higher 34/884C: EE BA 78 INC $78BA ; characters strike first 34/884F: 4C 6E 88 JMP $886E 34/8852: 46 29 LSR $29 ; avg char level / 4 34/8854: 46 29 LSR $29 34/8856: A5 28 LDA $28 34/8858: 20 64 A5 JSR $A564 ; random (0..A) 34/885B: C5 29 CMP $29 34/885D: 90 04 BCC $8863 ; branch if (0..avg monster level) < (avg char level / 4) 34/885F: A9 80 LDA #$80 ; ambush 34/8861: 30 05 BMI $8868 34/8863: 20 A4 88 JSR $88A4 ; toggle front/back row for all characters 34/8866: A9 88 LDA #$88 ; back attack 34/8868: 8D C3 78 STA $78C3 34/886B: 8D BA 78 STA $78BA 34/886E: 60 RTS ; [ get average character/monster level ] ; +$24: pointer to character/monster properties ; $26: number of characters/monsters 34/886F: A2 00 LDX #$00 34/8871: 86 18 STX $18 34/8873: 86 19 STX $19 34/8875: 86 1A STX $1A 34/8877: 86 1B STX $1B 34/8879: A0 00 LDY #$00 34/887B: B1 24 LDA ($24),Y 34/887D: F0 0D BEQ $888C 34/887F: 18 CLC 34/8880: 65 18 ADC $18 34/8882: 85 18 STA $18 34/8884: A9 00 LDA #$00 34/8886: 65 19 ADC $19 34/8888: 85 19 STA $19 34/888A: E6 1A INC $1A 34/888C: 18 CLC 34/888D: A5 24 LDA $24 34/888F: 69 40 ADC #$40 34/8891: 85 24 STA $24 34/8893: A5 25 LDA $25 34/8895: 69 00 ADC #$00 34/8897: 85 25 STA $25 34/8899: E8 INX 34/889A: E4 26 CPX $26 34/889C: D0 DD BNE $887B 34/889E: 20 92 FC JSR $FC92 ; divide (16-bit) 34/88A1: A5 1C LDA $1C 34/88A3: 60 RTS ; [ toggle front/back row for all characters ] 34/88A4: A9 00 LDA #$00 34/88A6: 85 52 STA $52 34/88A8: 20 41 A5 JSR $A541 ; get character offset 34/88AB: 18 CLC 34/88AC: 69 0F ADC #$0F 34/88AE: A8 TAY 34/88AF: B1 59 LDA ($59),Y 34/88B1: 48 PHA 34/88B2: 29 01 AND #$01 34/88B4: 49 01 EOR #$01 ; toggle row 34/88B6: 85 21 STA $21 34/88B8: 68 PLA 34/88B9: 29 FE AND #$FE 34/88BB: 05 21 ORA $21 34/88BD: 91 59 STA ($59),Y 34/88BF: A9 33 LDA #$33 34/88C1: 20 88 9B JSR $9B88 ; add character offset 34/88C4: B1 5B LDA ($5B),Y 34/88C6: 48 PHA 34/88C7: 29 01 AND #$01 34/88C9: 49 01 EOR #$01 ; toggle row 34/88CB: 85 21 STA $21 34/88CD: 68 PLA 34/88CE: 29 FE AND #$FE 34/88D0: 05 21 ORA $21 34/88D2: 91 5B STA ($5B),Y 34/88D4: E6 52 INC $52 ; next character 34/88D6: A5 52 LDA $52 34/88D8: C9 04 CMP #$04 34/88DA: D0 CC BNE $88A8 34/88DC: A9 00 LDA #$00 34/88DE: 85 52 STA $52 34/88E0: 60 RTS ; [ init character/monster pointers ] 34/88E1: A9 00 LDA #$00 ; +$57 = $6100 (character sram 1) 34/88E3: 85 57 STA $57 34/88E5: A9 61 LDA #$61 34/88E7: 85 58 STA $58 34/88E9: A9 00 LDA #$00 ; +$59 = $6200 (character sram 2) 34/88EB: 85 59 STA $59 34/88ED: A9 62 LDA #$62 34/88EF: 85 5A STA $5A 34/88F1: A9 75 LDA #$75 ; +$5B = $7575 (character properties) 34/88F3: 85 5B STA $5B 34/88F5: A9 75 LDA #$75 34/88F7: 85 5C STA $5C 34/88F9: A9 75 LDA #$75 ; +$5D = $7675 (monster properties) 34/88FB: 85 5D STA $5D 34/88FD: A9 76 LDA #$76 34/88FF: 85 5E STA $5E 34/8901: 60 RTS ; -------------------------------------------------------------------------- ; [ init cursor sprite data ] 34/8902: A9 20 LDA #$20 ; $0220 or $0230 34/8904: 85 4A STA $4A 34/8906: A9 02 LDA #$02 34/8908: 85 4B STA $4B 34/890A: A5 1A LDA $1A 34/890C: 20 3E FD JSR $FD3E ; asl4 34/890F: A8 TAY 34/8910: A2 00 LDX #$00 34/8912: BD 1E 89 LDA $891E,X 34/8915: 91 4A STA ($4A),Y 34/8917: C8 INY 34/8918: E8 INX 34/8919: E0 10 CPX #$10 34/891B: D0 F5 BNE $8912 34/891D: 60 RTS ; cursor sprite data 34/891E: F0 5A 03 F0 34/8922: F0 59 03 F0 34/8926: F0 5C 03 F0 34/892A: F0 5B 03 F0 ; [ set cursor sprite position ] ; $1A: cursor id ; $1C: y position ; $1D: x position 34/892E: A5 1A LDA $1A 34/8930: 20 3E FD JSR $FD3E ; asl4 34/8933: AA TAX 34/8934: A5 1C LDA $1C 34/8936: 9D 20 02 STA $0220,X 34/8939: A5 1D LDA $1D 34/893B: 9D 23 02 STA $0223,X 34/893E: 4C 41 89 JMP $8941 ; this does nothing 34/8941: A5 1A LDA $1A 34/8943: 20 3E FD JSR $FD3E ; asl4 34/8946: AA TAX 34/8947: 18 CLC 34/8948: BD 20 02 LDA $0220,X 34/894B: 9D 24 02 STA $0224,X ; y position 34/894E: 69 08 ADC #$08 34/8950: 9D 28 02 STA $0228,X 34/8953: 9D 2C 02 STA $022C,X 34/8956: 38 SEC 34/8957: BD 23 02 LDA $0223,X 34/895A: 9D 2B 02 STA $022B,X ; x position 34/895D: E9 08 SBC #$08 34/895F: 9D 27 02 STA $0227,X 34/8962: 9D 2F 02 STA $022F,X 34/8965: 60 RTS ; [ init list cursor ] ; $1A: cursor id ; $55: cursor position id ; 0: command list ; 1: spell list ; 2: item list 34/8966: A5 55 LDA $55 34/8968: 0A ASL 34/8969: 18 CLC 34/896A: 69 FA ADC #$FA ; 34/8AFA (cursor position pointers) 34/896C: 85 55 STA $55 34/896E: A9 00 LDA #$00 34/8970: 69 8A ADC #$8A 34/8972: 85 56 STA $56 34/8974: A0 00 LDY #$00 34/8976: B1 55 LDA ($55),Y 34/8978: 48 PHA 34/8979: C8 INY 34/897A: B1 55 LDA ($55),Y 34/897C: 85 56 STA $56 34/897E: 68 PLA 34/897F: 85 55 STA $55 34/8981: A9 00 LDA #$00 34/8983: 85 22 STA $22 34/8985: 85 23 STA $23 34/8987: 8D 50 00 STA $0050 34/898A: 8D 51 00 STA $0051 34/898D: 20 02 89 JSR $8902 ; init cursor sprite data 34/8990: A0 00 LDY #$00 34/8992: B1 55 LDA ($55),Y 34/8994: 85 1C STA $1C 34/8996: C8 INY 34/8997: B1 55 LDA ($55),Y 34/8999: 85 1D STA $1D 34/899B: 4C 2E 89 JMP $892E ; set cursor sprite position ; [ get player input ] ; used for command select and magic select ; all other cursor input is handled separately ; 32/9A1C for target select ; 35/ADAF for item select 34/899E: A9 CF LDA #$CF ; 34/8ACF (joypad button jump table) 34/89A0: 85 1E STA $1E 34/89A2: A9 8A LDA #$8A 34/89A4: 85 1F STA $1F 34/89A6: A9 00 LDA #$00 34/89A8: 85 21 STA $21 34/89AA: 20 85 81 JSR $8185 ; wait one frame 34/89AD: 20 AA FB JSR $FBAA ; update joypad input 34/89B0: A5 12 LDA $12 34/89B2: F0 F6 BEQ $89AA ; wait for any button 34/89B4: 48 PHA 34/89B5: 20 79 9B JSR $9B79 ; play cursor sound effect 34/89B8: 68 PLA 34/89B9: 4A LSR 34/89BA: B0 04 BCS $89C0 34/89BC: E6 21 INC $21 34/89BE: 90 F9 BCC $89B9 34/89C0: A5 21 LDA $21 ; button index 34/89C2: 0A ASL 34/89C3: 18 CLC 34/89C4: 65 1E ADC $1E 34/89C6: 85 1E STA $1E 34/89C8: A9 00 LDA #$00 34/89CA: 65 1F ADC $1F 34/89CC: 85 1F STA $1F 34/89CE: A0 00 LDY #$00 34/89D0: B1 1E LDA ($1E),Y 34/89D2: 48 PHA 34/89D3: C8 INY 34/89D4: B1 1E LDA ($1E),Y 34/89D6: 85 1F STA $1F 34/89D8: 68 PLA 34/89D9: 85 1E STA $1E 34/89DB: 6C 1E 00 JMP ($001E) ; [ B button ] 34/89DE: A6 1A LDX $1A 34/89E0: A9 02 LDA #$02 ; B 34/89E2: 9D 50 00 STA $0050,X 34/89E5: 60 RTS ; [ A button ] 34/89E6: A6 1A LDX $1A 34/89E8: A9 01 LDA #$01 ; A 34/89EA: 9D 50 00 STA $0050,X 34/89ED: 60 RTS ; [ up button ] 34/89EE: A5 23 LDA $23 34/89F0: D0 18 BNE $8A0A 34/89F2: A5 1B LDA $1B 34/89F4: D0 3C BNE $8A32 34/89F6: A9 03 LDA #$03 34/89F8: 85 23 STA $23 34/89FA: 18 CLC 34/89FB: A5 55 LDA $55 34/89FD: 69 06 ADC #$06 34/89FF: 85 55 STA $55 34/8A01: A5 56 LDA $56 34/8A03: 69 00 ADC #$00 34/8A05: 85 56 STA $56 34/8A07: 4C C1 8A JMP $8AC1 34/8A0A: C6 23 DEC $23 34/8A0C: A5 23 LDA $23 34/8A0E: C9 02 CMP #$02 34/8A10: D0 13 BNE $8A25 34/8A12: A5 38 LDA $38 34/8A14: F0 0F BEQ $8A25 34/8A16: 38 SEC 34/8A17: A5 55 LDA $55 34/8A19: E9 02 SBC #$02 34/8A1B: 85 55 STA $55 34/8A1D: A5 56 LDA $56 34/8A1F: E9 00 SBC #$00 34/8A21: 85 56 STA $56 34/8A23: C6 23 DEC $23 34/8A25: 38 SEC 34/8A26: A5 55 LDA $55 34/8A28: E9 02 SBC #$02 34/8A2A: 85 55 STA $55 34/8A2C: A5 56 LDA $56 34/8A2E: E9 00 SBC #$00 34/8A30: 85 56 STA $56 34/8A32: 4C C1 8A JMP $8AC1 ; [ down button ] 34/8A35: A5 23 LDA $23 34/8A37: C9 03 CMP #$03 34/8A39: D0 18 BNE $8A53 34/8A3B: A5 1B LDA $1B 34/8A3D: D0 40 BNE $8A7F 34/8A3F: A9 00 LDA #$00 34/8A41: 85 23 STA $23 34/8A43: 38 SEC 34/8A44: A5 55 LDA $55 34/8A46: E9 06 SBC #$06 34/8A48: 85 55 STA $55 34/8A4A: A5 56 LDA $56 34/8A4C: E9 00 SBC #$00 34/8A4E: 85 56 STA $56 34/8A50: 4C C1 8A JMP $8AC1 34/8A53: C5 46 CMP $46 34/8A55: B0 28 BCS $8A7F 34/8A57: E6 23 INC $23 34/8A59: A5 23 LDA $23 34/8A5B: C9 02 CMP #$02 34/8A5D: D0 13 BNE $8A72 34/8A5F: A5 38 LDA $38 34/8A61: F0 0F BEQ $8A72 34/8A63: 18 CLC 34/8A64: A5 55 LDA $55 34/8A66: 69 02 ADC #$02 34/8A68: 85 55 STA $55 34/8A6A: A5 56 LDA $56 34/8A6C: 69 00 ADC #$00 34/8A6E: 85 56 STA $56 34/8A70: E6 23 INC $23 34/8A72: 18 CLC 34/8A73: A5 55 LDA $55 34/8A75: 69 02 ADC #$02 34/8A77: 85 55 STA $55 34/8A79: A5 56 LDA $56 34/8A7B: 69 00 ADC #$00 34/8A7D: 85 56 STA $56 34/8A7F: 4C C1 8A JMP $8AC1 ; [ left button ] 34/8A82: A5 22 LDA $22 34/8A84: F0 0F BEQ $8A95 34/8A86: C6 22 DEC $22 34/8A88: 38 SEC 34/8A89: A5 55 LDA $55 34/8A8B: E9 08 SBC #$08 34/8A8D: 85 55 STA $55 34/8A8F: A5 56 LDA $56 34/8A91: E9 00 SBC #$00 34/8A93: 85 56 STA $56 34/8A95: A6 1A LDX $1A 34/8A97: A9 40 LDA #$40 ; left 34/8A99: 9D 50 00 STA $0050,X 34/8A9C: 4C C1 8A JMP $8AC1 ; [ right button ] 34/8A9F: A5 22 LDA $22 34/8AA1: C5 1B CMP $1B 34/8AA3: F0 0F BEQ $8AB4 34/8AA5: E6 22 INC $22 34/8AA7: 18 CLC 34/8AA8: A5 55 LDA $55 34/8AAA: 69 08 ADC #$08 34/8AAC: 85 55 STA $55 34/8AAE: A5 56 LDA $56 34/8AB0: 69 00 ADC #$00 34/8AB2: 85 56 STA $56 34/8AB4: A6 1A LDX $1A 34/8AB6: A9 80 LDA #$80 ; right 34/8AB8: 9D 50 00 STA $0050,X 34/8ABB: 4C C1 8A JMP $8AC1 ; [ start/select ] 34/8ABE: 4C 90 89 JMP $8990 ; [ set list cursor sprite position ] 34/8AC1: A0 00 LDY #$00 34/8AC3: B1 55 LDA ($55),Y 34/8AC5: 85 1C STA $1C 34/8AC7: C8 INY 34/8AC8: B1 55 LDA ($55),Y 34/8ACA: 85 1D STA $1D 34/8ACC: 4C 2E 89 JMP $892E ; set cursor sprite position ; jump table for joypad buttons (battle menu) 34/8ACF: 89E6 89DE 8ABE 8ABE 89EE 8A35 8A82 8A9F ; [ hide cursor ] ; $18: cursor id 34/8ADF: A9 20 LDA #$20 ; $0220 (oam data) 34/8AE1: 85 4A STA $4A 34/8AE3: A9 02 LDA #$02 34/8AE5: 85 4B STA $4B 34/8AE7: A5 18 LDA $18 34/8AE9: 20 3E FD JSR $FD3E ; asl4 34/8AEC: A8 TAY 34/8AED: A2 00 LDX #$00 34/8AEF: A9 F0 LDA #$F0 34/8AF1: 91 4A STA ($4A),Y 34/8AF3: C8 INY 34/8AF4: E8 INX 34/8AF5: E0 10 CPX #$10 34/8AF7: D0 F8 BNE $8AF1 34/8AF9: 60 RTS ; list cursor position pointers 34/8AFA: 8B00 8B08 8B28 ; list cursor positions (2 bytes each, y then x) ; 0: command list (1 column, 4 rows) 34/8B00: A8 28 B8 28 C8 28 D8 28 ; 1: spell list (3 columns, 4 rows) 34/8B08: A8 50 B8 50 C8 50 D8 50 34/8B10: A8 88 B8 88 C8 88 D8 88 34/8B18: A8 C0 B8 C0 C8 C0 D8 C0 ; unused cursor for equipped items ??? 34/8B20: B8 10 B8 10 D8 10 D8 10 ; 2: item list (2 columns, 4 rows) 34/8B28: A8 08 B8 08 C8 08 D8 08 34/8B30: A8 80 B8 80 C8 80 D8 80 ; -------------------------------------------------------------------------- ; [ open menu window ] ; $18: left position, msb is tilemap (0 or 1) ; $19: right position ; $1A: ------rl ; r: right side border ; l: left side border 34/8B38: A5 19 LDA $19 34/8B3A: 48 PHA 34/8B3B: 29 7F AND #$7F 34/8B3D: 85 1D STA $1D 34/8B3F: A5 18 LDA $18 34/8B41: 48 PHA 34/8B42: 29 7F AND #$7F 34/8B44: 85 1C STA $1C 34/8B46: 68 PLA 34/8B47: 29 80 AND #$80 34/8B49: 85 1E STA $1E 34/8B4B: 68 PLA 34/8B4C: 29 80 AND #$80 34/8B4E: 45 1E EOR $1E 34/8B50: D0 12 BNE $8B64 ; branch if window straddles tilemaps 0 and 1 34/8B52: 38 SEC 34/8B53: A5 1D LDA $1D 34/8B55: E5 1C SBC $1C 34/8B57: E9 01 SBC #$01 34/8B59: 8D B8 78 STA $78B8 ; menu window width 34/8B5C: A9 00 LDA #$00 34/8B5E: 8D B9 78 STA $78B9 34/8B61: 4C 7C 8B JMP $8B7C 34/8B64: 38 SEC 34/8B65: A9 1F LDA #$1F 34/8B67: E5 1C SBC $1C 34/8B69: 8D B8 78 STA $78B8 34/8B6C: 18 CLC 34/8B6D: A5 1D LDA $1D 34/8B6F: 69 20 ADC #$20 34/8B71: 38 SEC 34/8B72: E5 1C SBC $1C 34/8B74: E9 01 SBC #$01 34/8B76: ED B8 78 SBC $78B8 34/8B79: 8D B9 78 STA $78B9 ; menu window width in tilemap 1 34/8B7C: AD C0 7A LDA $7AC0 ; pointer to menu window text buffer 34/8B7F: 85 2E STA $2E 34/8B81: AD C1 7A LDA $7AC1 34/8B84: 85 2F STA $2F 34/8B86: A5 18 LDA $18 34/8B88: 48 PHA 34/8B89: 29 80 AND #$80 34/8B8B: D0 0F BNE $8B9C 34/8B8D: 68 PLA 34/8B8E: 18 CLC 34/8B8F: 69 60 ADC #$60 ; ppu offset: $2260 (tilemap 0) 34/8B91: 85 2A STA $2A 34/8B93: A9 00 LDA #$00 34/8B95: 69 22 ADC #$22 34/8B97: 85 2B STA $2B 34/8B99: 18 CLC 34/8B9A: 90 0E BCC $8BAA 34/8B9C: 68 PLA 34/8B9D: 29 7F AND #$7F 34/8B9F: 18 CLC 34/8BA0: 69 60 ADC #$60 ; ppu offset: $2660 (tilemap 1) 34/8BA2: 85 2A STA $2A 34/8BA4: A9 00 LDA #$00 34/8BA6: 69 26 ADC #$26 34/8BA8: 85 2B STA $2B 34/8BAA: A5 19 LDA $19 34/8BAC: 29 80 AND #$80 34/8BAE: D0 0B BNE $8BBB 34/8BB0: A9 60 LDA #$60 34/8BB2: 85 2C STA $2C 34/8BB4: A9 22 LDA #$22 34/8BB6: 85 2D STA $2D 34/8BB8: 4C C3 8B JMP $8BC3 34/8BBB: A9 60 LDA #$60 34/8BBD: 85 2C STA $2C 34/8BBF: A9 26 LDA #$26 34/8BC1: 85 2D STA $2D 34/8BC3: A9 08 LDA #$08 34/8BC5: 85 30 STA $30 34/8BC7: A9 01 LDA #$01 34/8BC9: 85 1B STA $1B 34/8BCB: 85 1E STA $1E 34/8BCD: 20 84 8C JSR $8C84 ; draw top/bottom menu window border ; start row loop 34/8BD0: 20 85 81 JSR $8185 ; wait one frame 34/8BD3: A5 2B LDA $2B 34/8BD5: A6 2A LDX $2A 34/8BD7: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8BDA: 20 56 8C JSR $8C56 ; draw left/right menu window border 34/8BDD: A0 00 LDY #$00 34/8BDF: AE B8 78 LDX $78B8 34/8BE2: F0 09 BEQ $8BED 34/8BE4: B1 2E LDA ($2E),Y ; window area tiles 34/8BE6: 8D 07 20 STA $2007 34/8BE9: C8 INY 34/8BEA: CA DEX 34/8BEB: D0 F7 BNE $8BE4 34/8BED: AE B9 78 LDX $78B9 34/8BF0: D0 06 BNE $8BF8 34/8BF2: 20 56 8C JSR $8C56 ; draw left/right menu window border 34/8BF5: 18 CLC 34/8BF6: 90 19 BCC $8C11 ; branch always 34/8BF8: A5 2D LDA $2D 34/8BFA: 8D 06 20 STA $2006 34/8BFD: A5 2C LDA $2C 34/8BFF: 8D 06 20 STA $2006 34/8C02: 20 03 8D JSR $8D03 34/8C05: B1 2E LDA ($2E),Y ; window area tiles (overflow) 34/8C07: 8D 07 20 STA $2007 34/8C0A: C8 INY 34/8C0B: CA DEX 34/8C0C: D0 F7 BNE $8C05 34/8C0E: 20 56 8C JSR $8C56 ; draw left/right menu window border 34/8C11: 18 CLC 34/8C12: A5 2A LDA $2A ; increment ppu offset 34/8C14: 69 20 ADC #$20 34/8C16: 85 2A STA $2A 34/8C18: A5 2B LDA $2B 34/8C1A: 69 00 ADC #$00 34/8C1C: 85 2B STA $2B 34/8C1E: 18 CLC 34/8C1F: A5 2C LDA $2C 34/8C21: 69 20 ADC #$20 34/8C23: 85 2C STA $2C 34/8C25: A5 2D LDA $2D 34/8C27: 69 00 ADC #$00 34/8C29: 85 2D STA $2D 34/8C2B: 18 CLC 34/8C2C: A5 2E LDA $2E ; increment text buffer offset 34/8C2E: 6D B8 78 ADC $78B8 34/8C31: 85 2E STA $2E 34/8C33: A5 2F LDA $2F 34/8C35: 69 00 ADC #$00 34/8C37: 85 2F STA $2F 34/8C39: 18 CLC 34/8C3A: A5 2E LDA $2E 34/8C3C: 6D B9 78 ADC $78B9 34/8C3F: 85 2E STA $2E 34/8C41: A5 2F LDA $2F 34/8C43: 69 00 ADC #$00 34/8C45: 85 2F STA $2F 34/8C47: 20 03 8D JSR $8D03 34/8C4A: C6 30 DEC $30 ; next row 34/8C4C: A5 30 LDA $30 34/8C4E: F0 03 BEQ $8C53 ; branch if last row 34/8C50: 4C D0 8B JMP $8BD0 34/8C53: 4C 84 8C JMP $8C84 ; draw top/bottom menu window border ; [ draw left/right menu window border ] 34/8C56: A9 FA LDA #$FA ; left side border tile 34/8C58: 85 1C STA $1C 34/8C5A: A5 1B LDA $1B 34/8C5C: 49 01 EOR #$01 34/8C5E: 85 1B STA $1B 34/8C60: 18 CLC 34/8C61: 65 1C ADC $1C 34/8C63: 85 1C STA $1C 34/8C65: A5 1B LDA $1B 34/8C67: D0 07 BNE $8C70 ; branch if not left side 34/8C69: A5 1A LDA $1A 34/8C6B: 4A LSR 34/8C6C: 90 09 BCC $8C77 ; branch if no left side border 34/8C6E: B0 0E BCS $8C7E 34/8C70: A5 1A LDA $1A 34/8C72: 20 47 FD JSR $FD47 ; lsr2 34/8C75: B0 07 BCS $8C7E ; branch if right side border shown 34/8C77: A9 FF LDA #$FF ; blank tile 34/8C79: 8D 07 20 STA $2007 34/8C7C: D0 05 BNE $8C83 34/8C7E: A5 1C LDA $1C 34/8C80: 8D 07 20 STA $2007 34/8C83: 60 RTS ; [ draw top/bottom menu window border ] 34/8C84: A9 F7 LDA #$F7 ; top left border tile 34/8C86: 85 1D STA $1D 34/8C88: A5 1E LDA $1E ; bottom or top 34/8C8A: 49 01 EOR #$01 34/8C8C: 85 1E STA $1E ; multiply by 5 34/8C8E: 20 40 FD JSR $FD40 ; asl2 34/8C91: 18 CLC 34/8C92: 65 1E ADC $1E 34/8C94: 65 1D ADC $1D 34/8C96: 85 1D STA $1D 34/8C98: 20 85 81 JSR $8185 ; wait one frame 34/8C9B: A5 2B LDA $2B 34/8C9D: A6 2A LDX $2A 34/8C9F: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8CA2: 20 03 8D JSR $8D03 34/8CA5: A6 1D LDX $1D 34/8CA7: A5 1A LDA $1A 34/8CA9: 4A LSR 34/8CAA: B0 01 BCS $8CAD 34/8CAC: E8 INX 34/8CAD: 8E 07 20 STX $2007 ; first tile 34/8CB0: E6 1D INC $1D 34/8CB2: AE B8 78 LDX $78B8 34/8CB5: F0 08 BEQ $8CBF 34/8CB7: A5 1D LDA $1D 34/8CB9: 8D 07 20 STA $2007 ; middle tiles 34/8CBC: CA DEX 34/8CBD: D0 FA BNE $8CB9 34/8CBF: AE B9 78 LDX $78B9 34/8CC2: F0 15 BEQ $8CD9 ; branch if no overflow into other tilemap 34/8CC4: A5 2D LDA $2D 34/8CC6: 8D 06 20 STA $2006 34/8CC9: A5 2C LDA $2C 34/8CCB: 8D 06 20 STA $2006 34/8CCE: 20 03 8D JSR $8D03 34/8CD1: A5 1D LDA $1D 34/8CD3: 8D 07 20 STA $2007 ; middle tiles (overflow) 34/8CD6: CA DEX 34/8CD7: D0 FA BNE $8CD3 34/8CD9: A5 1A LDA $1A 34/8CDB: 4A LSR 34/8CDC: 4A LSR 34/8CDD: 90 02 BCC $8CE1 34/8CDF: E6 1D INC $1D 34/8CE1: A5 1D LDA $1D 34/8CE3: 8D 07 20 STA $2007 ; last tile 34/8CE6: 18 CLC 34/8CE7: A5 2A LDA $2A ; increment tilemap pointers 34/8CE9: 69 20 ADC #$20 34/8CEB: 85 2A STA $2A 34/8CED: A5 2B LDA $2B 34/8CEF: 69 00 ADC #$00 34/8CF1: 85 2B STA $2B 34/8CF3: 18 CLC 34/8CF4: A5 2C LDA $2C 34/8CF6: 69 20 ADC #$20 34/8CF8: 85 2C STA $2C 34/8CFA: A5 2D LDA $2D 34/8CFC: 69 00 ADC #$00 34/8CFE: 85 2D STA $2D 34/8D00: 4C 03 8D JMP $8D03 ; [ update ppu registers ] 34/8D03: 2C 02 20 BIT $2002 ; ppu latch 34/8D06: A5 06 LDA $06 34/8D08: 8D 00 20 STA $2000 ; set ppu control 34/8D0B: A5 09 LDA $09 34/8D0D: 8D 01 20 STA $2001 ; set ppu mask 34/8D10: A5 0C LDA $0C 34/8D12: 8D 05 20 STA $2005 ; set ppu scroll 34/8D15: A5 0D LDA $0D 34/8D17: 8D 05 20 STA $2005 34/8D1A: 60 RTS ; [ open message window ] ; A: message window id 34/8D1B: 85 18 STA $18 34/8D1D: 20 3F FD JSR $FD3F ; asl3 34/8D20: 18 CLC 34/8D21: 65 18 ADC $18 34/8D23: AA TAX 34/8D24: BD 83 8E LDA $8E83,X ; ppu address 34/8D27: 85 60 STA $60 34/8D29: 85 18 STA $18 34/8D2B: E8 INX 34/8D2C: BD 83 8E LDA $8E83,X 34/8D2F: 85 61 STA $61 34/8D31: 85 19 STA $19 34/8D33: E8 INX 34/8D34: BD 83 8E LDA $8E83,X ; width 34/8D37: 8D B8 78 STA $78B8 34/8D3A: 18 CLC 34/8D3B: 69 02 ADC #$02 34/8D3D: 8D B9 78 STA $78B9 34/8D40: E8 INX 34/8D41: BD 83 8E LDA $8E83,X ; ram address 34/8D44: 85 1A STA $1A 34/8D46: E8 INX 34/8D47: BD 83 8E LDA $8E83,X 34/8D4A: 85 1B STA $1B 34/8D4C: A0 00 LDY #$00 34/8D4E: A9 04 LDA #$04 34/8D50: 85 1C STA $1C 34/8D52: 20 85 81 JSR $8185 ; wait one frame 34/8D55: A5 19 LDA $19 34/8D57: A6 18 LDX $18 34/8D59: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8D5C: AD 07 20 LDA $2007 34/8D5F: AE B9 78 LDX $78B9 34/8D62: AD 07 20 LDA $2007 34/8D65: 91 1A STA ($1A),Y 34/8D67: C8 INY 34/8D68: CA DEX 34/8D69: D0 F7 BNE $8D62 34/8D6B: 18 CLC 34/8D6C: A5 18 LDA $18 34/8D6E: 69 20 ADC #$20 34/8D70: 85 18 STA $18 34/8D72: A5 19 LDA $19 34/8D74: 69 00 ADC #$00 34/8D76: 85 19 STA $19 34/8D78: 20 03 8D JSR $8D03 34/8D7B: C6 1C DEC $1C 34/8D7D: A5 1C LDA $1C 34/8D7F: D0 D1 BNE $8D52 34/8D81: A9 F7 LDA #$F7 34/8D83: 85 1A STA $1A 34/8D85: A9 F8 LDA #$F8 34/8D87: 85 1B STA $1B 34/8D89: A9 F9 LDA #$F9 34/8D8B: 85 1D STA $1D 34/8D8D: 20 E5 8D JSR $8DE5 ; draw top/bottom message window border 34/8D90: AD C0 7A LDA $7AC0 34/8D93: 85 18 STA $18 34/8D95: AD C1 7A LDA $7AC1 34/8D98: 85 19 STA $19 34/8D9A: A9 02 LDA #$02 34/8D9C: 85 1C STA $1C 34/8D9E: A0 00 LDY #$00 34/8DA0: 20 85 81 JSR $8185 ; wait one frame 34/8DA3: A5 61 LDA $61 34/8DA5: A6 60 LDX $60 34/8DA7: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8DAA: A9 FA LDA #$FA ; left border 34/8DAC: 8D 07 20 STA $2007 34/8DAF: AE B8 78 LDX $78B8 34/8DB2: B1 18 LDA ($18),Y 34/8DB4: 8D 07 20 STA $2007 34/8DB7: C8 INY 34/8DB8: CA DEX 34/8DB9: D0 F7 BNE $8DB2 34/8DBB: A9 FB LDA #$FB ; right border 34/8DBD: 8D 07 20 STA $2007 34/8DC0: 18 CLC 34/8DC1: A5 60 LDA $60 34/8DC3: 69 20 ADC #$20 34/8DC5: 85 60 STA $60 34/8DC7: A5 61 LDA $61 34/8DC9: 69 00 ADC #$00 34/8DCB: 85 61 STA $61 34/8DCD: 20 03 8D JSR $8D03 34/8DD0: C6 1C DEC $1C 34/8DD2: A5 1C LDA $1C 34/8DD4: D0 CA BNE $8DA0 34/8DD6: A9 FC LDA #$FC ; bottom left border 34/8DD8: 85 1A STA $1A 34/8DDA: A9 FD LDA #$FD ; bottom border 34/8DDC: 85 1B STA $1B 34/8DDE: A9 FE LDA #$FE ; bottom right border 34/8DE0: 85 1D STA $1D 34/8DE2: 4C E5 8D JMP $8DE5 ; draw top/bottom message window border ; [ draw top/bottom message window border ] 34/8DE5: 20 85 81 JSR $8185 ; wait one frame 34/8DE8: A5 61 LDA $61 34/8DEA: A6 60 LDX $60 34/8DEC: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8DEF: A5 1A LDA $1A 34/8DF1: 8D 07 20 STA $2007 34/8DF4: AE B8 78 LDX $78B8 34/8DF7: A5 1B LDA $1B 34/8DF9: 8D 07 20 STA $2007 34/8DFC: CA DEX 34/8DFD: D0 FA BNE $8DF9 34/8DFF: A5 1D LDA $1D 34/8E01: 8D 07 20 STA $2007 34/8E04: 18 CLC 34/8E05: A5 60 LDA $60 34/8E07: 69 20 ADC #$20 34/8E09: 85 60 STA $60 34/8E0B: A5 61 LDA $61 34/8E0D: 69 00 ADC #$00 34/8E0F: A5 61 LDA $61 34/8E11: 4C 03 8D JMP $8D03 ; [ close message window ] ; A: message window id 34/8E14: 85 18 STA $18 34/8E16: 20 3F FD JSR $FD3F ; asl3 34/8E19: 18 CLC 34/8E1A: 65 18 ADC $18 34/8E1C: AA TAX 34/8E1D: E8 INX 34/8E1E: E8 INX 34/8E1F: 18 CLC 34/8E20: BD 83 8E LDA $8E83,X ; width 34/8E23: 69 02 ADC #$02 34/8E25: 8D B9 78 STA $78B9 34/8E28: E8 INX 34/8E29: E8 INX 34/8E2A: E8 INX 34/8E2B: BD 83 8E LDA $8E83,X ; ppu address 34/8E2E: 85 18 STA $18 34/8E30: E8 INX 34/8E31: BD 83 8E LDA $8E83,X 34/8E34: 85 19 STA $19 34/8E36: E8 INX 34/8E37: BD 83 8E LDA $8E83,X ; ram address 34/8E3A: 85 1A STA $1A 34/8E3C: E8 INX 34/8E3D: BD 83 8E LDA $8E83,X 34/8E40: 85 1B STA $1B 34/8E42: A9 04 LDA #$04 ; 4 lines 34/8E44: 85 1C STA $1C 34/8E46: 20 85 81 JSR $8185 ; wait one frame 34/8E49: A5 19 LDA $19 34/8E4B: A6 18 LDX $18 34/8E4D: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8E50: AE B9 78 LDX $78B9 34/8E53: A0 00 LDY #$00 34/8E55: B1 1A LDA ($1A),Y 34/8E57: 8D 07 20 STA $2007 34/8E5A: C8 INY 34/8E5B: CA DEX 34/8E5C: D0 F7 BNE $8E55 34/8E5E: 38 SEC 34/8E5F: A5 18 LDA $18 34/8E61: E9 20 SBC #$20 34/8E63: 85 18 STA $18 34/8E65: A5 19 LDA $19 34/8E67: E9 00 SBC #$00 34/8E69: 85 19 STA $19 34/8E6B: 38 SEC 34/8E6C: A5 1A LDA $1A 34/8E6E: ED B9 78 SBC $78B9 34/8E71: 85 1A STA $1A 34/8E73: A5 1B LDA $1B 34/8E75: E9 00 SBC #$00 34/8E77: 85 1B STA $1B 34/8E79: 20 03 8D JSR $8D03 34/8E7C: C6 1C DEC $1C 34/8E7E: A5 1C LDA $1C 34/8E80: D0 C4 BNE $8E46 34/8E82: 60 RTS ; message window data (5 * 9 bytes) ; +$00: ppu address (new) ; $02: width ; +$03: ram address (new) ; +$05: ppu address (old) ; +$07: ram address (old) ; ff3j-nes 34/8E83: $2261,$08,$7AF5,$22C1,$7B13 ; (top left) 34/8E8C: $226A,$08,$7B1D,$22CA,$7B3B ; (top right) 34/8E95: $22C1,$08,$7B45,$2321,$7B63 ; (middle left) 34/8E9E: $22CA,$08,$7B6D,$232A,$7B8B ; (middle right) 34/8EA7: $2321,$11,$7B95,$2381,$7BCE ; (bottom) ; ff3u-nes 34/8E83: $2261,$09,$7AF5,$22C1,$7B16 34/8E8C: $226C,$09,$7B21,$22CC,$7B42 34/8E95: $22C1,$09,$7B79,$2321,$7B16 34/8E9E: $22CC,$09,$7B4D,$232C,$7B6E 34/8EA7: $2321,$15,$7B79,$2381,$7BBE ; [ close menu window ] 34/8EB0: A9 80 LDA #$80 ; ppu address: $2380 34/8EB2: 85 18 STA $18 34/8EB4: A9 23 LDA #$23 34/8EB6: 85 19 STA $19 34/8EB8: A9 80 LDA #$80 ; ppu address: $2780 34/8EBA: 85 1A STA $1A 34/8EBC: A9 27 LDA #$27 34/8EBE: 85 1B STA $1B 34/8EC0: A0 0A LDY #$0A ; 10 rows ; start of row loop 34/8EC2: 20 85 81 JSR $8185 ; wait one frame 34/8EC5: A5 19 LDA $19 34/8EC7: A6 18 LDX $18 34/8EC9: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8ECC: 20 03 8D JSR $8D03 34/8ECF: A9 00 LDA #$00 34/8ED1: A2 20 LDX #$20 34/8ED3: 8D 07 20 STA $2007 34/8ED6: CA DEX 34/8ED7: D0 FA BNE $8ED3 34/8ED9: A5 1B LDA $1B 34/8EDB: A6 1A LDX $1A 34/8EDD: 20 E0 F8 JSR $F8E0 ; set ppu address 34/8EE0: 20 03 8D JSR $8D03 34/8EE3: A9 00 LDA #$00 34/8EE5: A2 20 LDX #$20 34/8EE7: 8D 07 20 STA $2007 34/8EEA: CA DEX 34/8EEB: D0 FA BNE $8EE7 34/8EED: 38 SEC 34/8EEE: A5 18 LDA $18 ; previous row 34/8EF0: E9 20 SBC #$20 34/8EF2: 85 18 STA $18 34/8EF4: A5 19 LDA $19 34/8EF6: E9 00 SBC #$00 34/8EF8: 85 19 STA $19 34/8EFA: 38 SEC 34/8EFB: A5 1A LDA $1A 34/8EFD: E9 20 SBC #$20 34/8EFF: 85 1A STA $1A 34/8F01: A5 1B LDA $1B 34/8F03: E9 00 SBC #$00 34/8F05: 85 1B STA $1B 34/8F07: 88 DEY 34/8F08: D0 B8 BNE $8EC2 34/8F0A: 60 RTS ; [ clear menu area tilemap ] 34/8F0B: A9 80 LDA #$80 ; ppu address: $2380 34/8F0D: 85 18 STA $18 34/8F0F: A9 23 LDA #$23 34/8F11: 85 19 STA $19 34/8F13: A2 0A LDX #$0A 34/8F15: 20 85 81 JSR $8185 ; wait one frame 34/8F18: 2C 02 20 BIT $2002 34/8F1B: A5 19 LDA $19 34/8F1D: 8D 06 20 STA $2006 34/8F20: A5 18 LDA $18 34/8F22: 8D 06 20 STA $2006 34/8F25: 20 03 8D JSR $8D03 34/8F28: A0 0B LDY #$0B 34/8F2A: A9 00 LDA #$00 34/8F2C: 8D 07 20 STA $2007 34/8F2F: 88 DEY 34/8F30: D0 FA BNE $8F2C 34/8F32: 38 SEC 34/8F33: A5 18 LDA $18 ; next row 34/8F35: E9 20 SBC #$20 34/8F37: 85 18 STA $18 34/8F39: A5 19 LDA $19 34/8F3B: E9 00 SBC #$00 34/8F3D: 85 19 STA $19 34/8F3F: CA DEX 34/8F40: D0 D3 BNE $8F15 34/8F42: 60 RTS ; unused ??? ; looks like the left side of a menu window in reverse order 34/8F43: FC FD 34/8F45: FA 00 34/8F47: FA 00 34/8F49: FA 00 34/8F4B: FA 00 34/8F4D: FA 00 34/8F4F: FA 00 34/8F51: FA 00 34/8F53: FA 00 34/8F55: F7 F8 ; -------------------------------------------------------------------------- ; [ sort attack order list ??? ] ; recursive subroutine 34/8F57: A5 22 LDA $22 34/8F59: 48 PHA 34/8F5A: 38 SEC 34/8F5B: E5 1A SBC $1A 34/8F5D: AA TAX 34/8F5E: E8 INX 34/8F5F: 86 18 STX $18 34/8F61: A0 01 LDY #$01 34/8F63: A2 00 LDX #$00 34/8F65: 8A TXA 34/8F66: 91 1E STA ($1E),Y 34/8F68: C8 INY 34/8F69: E8 INX 34/8F6A: E4 18 CPX $18 34/8F6C: D0 F7 BNE $8F65 34/8F6E: 68 PLA ; start of recursive part 34/8F6F: 85 1B STA $1B 34/8F71: A5 18 LDA $18 34/8F73: 48 PHA 34/8F74: A5 19 LDA $19 34/8F76: 48 PHA 34/8F77: 8A TXA 34/8F78: 48 PHA 34/8F79: A6 1A LDX $1A 34/8F7B: 86 18 STX $18 34/8F7D: A4 1B LDY $1B 34/8F7F: 84 19 STY $19 34/8F81: A4 1A LDY $1A 34/8F83: B1 1C LDA ($1C),Y 34/8F85: 85 20 STA $20 34/8F87: A4 1B LDY $1B 34/8F89: C4 1A CPY $1A 34/8F8B: 90 46 BCC $8FD3 34/8F8D: B1 1C LDA ($1C),Y 34/8F8F: C5 20 CMP $20 34/8F91: B0 03 BCS $8F96 34/8F93: 88 DEY 34/8F94: 90 F7 BCC $8F8D 34/8F96: 84 1B STY $1B 34/8F98: A4 1A LDY $1A 34/8F9A: B1 1C LDA ($1C),Y 34/8F9C: C5 20 CMP $20 34/8F9E: F0 05 BEQ $8FA5 34/8FA0: 90 03 BCC $8FA5 34/8FA2: C8 INY 34/8FA3: B0 F5 BCS $8F9A 34/8FA5: 84 1A STY $1A 34/8FA7: A4 1B LDY $1B 34/8FA9: C4 1A CPY $1A 34/8FAB: 90 26 BCC $8FD3 34/8FAD: B1 1C LDA ($1C),Y 34/8FAF: AA TAX 34/8FB0: B1 1E LDA ($1E),Y 34/8FB2: 85 21 STA $21 34/8FB4: A4 1A LDY $1A 34/8FB6: B1 1C LDA ($1C),Y 34/8FB8: A4 1B LDY $1B 34/8FBA: 91 1C STA ($1C),Y 34/8FBC: A4 1A LDY $1A 34/8FBE: B1 1E LDA ($1E),Y 34/8FC0: A4 1B LDY $1B 34/8FC2: 91 1E STA ($1E),Y 34/8FC4: A4 1A LDY $1A 34/8FC6: A5 21 LDA $21 34/8FC8: 91 1E STA ($1E),Y 34/8FCA: 8A TXA 34/8FCB: 91 1C STA ($1C),Y 34/8FCD: C6 1B DEC $1B 34/8FCF: E6 1A INC $1A 34/8FD1: B0 B4 BCS $8F87 34/8FD3: A6 1A LDX $1A 34/8FD5: C4 18 CPY $18 34/8FD7: F0 0A BEQ $8FE3 34/8FD9: 90 08 BCC $8FE3 34/8FDB: A5 18 LDA $18 34/8FDD: 85 1A STA $1A 34/8FDF: 98 TYA 34/8FE0: 20 6F 8F JSR $8F6F 34/8FE3: E4 19 CPX $19 34/8FE5: B0 07 BCS $8FEE 34/8FE7: 86 1A STX $1A 34/8FE9: A5 19 LDA $19 34/8FEB: 20 6F 8F JSR $8F6F 34/8FEE: 68 PLA 34/8FEF: AA TAX 34/8FF0: 68 PLA 34/8FF1: 85 19 STA $19 34/8FF3: 68 PLA 34/8FF4: 85 18 STA $18 34/8FF6: 60 RTS ; [ execute action script ] 34/8FF7: AD C2 7E LDA $7EC2 34/8FFA: F0 5A BEQ $9056 34/8FFC: AD D5 78 LDA $78D5 34/8FFF: 0A ASL 34/9000: 18 CLC 34/9001: 69 0D ADC #$0D ; 34/950D (pointers to action scripts) 34/9003: 85 18 STA $18 34/9005: A9 00 LDA #$00 34/9007: 69 95 ADC #$95 34/9009: 85 19 STA $19 34/900B: A0 00 LDY #$00 34/900D: B1 18 LDA ($18),Y 34/900F: 85 62 STA $62 34/9011: C8 INY 34/9012: B1 18 LDA ($18),Y 34/9014: 85 63 STA $63 34/9016: A2 00 LDX #$00 34/9018: 86 64 STX $64 34/901A: 8E EE 78 STX $78EE 34/901D: 8E EF 78 STX $78EF ; execute action script command 34/9020: 20 54 97 JSR $9754 ; init text buffer 34/9023: A9 00 LDA #$00 34/9025: A2 13 LDX #$13 34/9027: 9D D7 7A STA $7AD7,X ; text string 34/902A: CA DEX 34/902B: 10 FA BPL $9027 34/902D: A4 64 LDY $64 34/902F: B1 62 LDA ($62),Y ; action script command 34/9031: 85 4B STA $4B 34/9033: C9 FF CMP #$FF 34/9035: F0 1F BEQ $9056 34/9037: 0A ASL 34/9038: 18 CLC 34/9039: 69 4D ADC #$4D ; 34/954D (action script command jump table) 34/903B: 85 18 STA $18 34/903D: A9 00 LDA #$00 34/903F: 69 95 ADC #$95 34/9041: 85 19 STA $19 34/9043: A0 00 LDY #$00 34/9045: B1 18 LDA ($18),Y 34/9047: 85 1A STA $1A 34/9049: C8 INY 34/904A: B1 18 LDA ($18),Y 34/904C: 85 1B STA $1B 34/904E: 6C 1A 00 JMP ($001A) ; next action script command 34/9051: E6 64 INC $64 34/9053: 4C 20 90 JMP $9020 ; end of script 34/9056: A9 25 LDA #$25 34/9058: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ action script command $05: show attacker name ] 34/905B: AD D6 78 LDA $78D6 ; attacker id 34/905E: 10 1D BPL $907D ; branch if a character 34/9060: C9 FF CMP #$FF 34/9062: F0 39 BEQ $909D ; branch if no attacker ??? 34/9064: 29 7F AND #$7F 34/9066: AA TAX 34/9067: BD CD 7E LDA $7ECD,X 34/906A: AA TAX 34/906B: BD 6B 7D LDA $7D6B,X ; monster id 34/906E: 85 1A STA $1A 34/9070: 20 BD 95 JSR $95BD ; get monster names string offset 34/9073: A5 1A LDA $1A 34/9075: A2 00 LDX #$00 34/9077: 20 09 A6 JSR $A609 ; load text string 34/907A: 18 CLC 34/907B: 90 14 BCC $9091 34/907D: 20 3C FD JSR $FD3C ; asl6 34/9080: 18 CLC 34/9081: 69 06 ADC #$06 34/9083: A8 TAY 34/9084: A2 00 LDX #$00 34/9086: B1 57 LDA ($57),Y ; character name 34/9088: 9D D7 7A STA $7AD7,X 34/908B: C8 INY 34/908C: E8 INX 34/908D: E0 06 CPX #$06 34/908F: D0 F5 BNE $9086 34/9091: A9 08 LDA #$08 34/9093: 85 18 STA $18 34/9095: 20 6A 96 JSR $966A ; draw text 34/9098: A9 00 LDA #$00 ; top left message window 34/909A: 20 1B 8D JSR $8D1B ; open message window 34/909D: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $06: show top right message ] ; attack/item name, # of hits, miss 34/90A0: A5 72 LDA $72 34/90A2: F0 2C BEQ $90D0 ; branch if not item name ; item name 34/90A4: A9 00 LDA #$00 ; string offset: $0400 (item names) 34/90A6: 85 18 STA $18 34/90A8: A9 88 LDA #$88 34/90AA: 85 19 STA $19 34/90AC: AD D7 78 LDA $78D7 34/90AF: A2 00 LDX #$00 34/90B1: 20 09 A6 JSR $A609 ; load text string 34/90B4: A2 00 LDX #$00 34/90B6: BD D8 7A LDA $7AD8,X ; shift by 1 to get rid of icon 34/90B9: 9D D7 7A STA $7AD7,X 34/90BC: E8 INX 34/90BD: E0 09 CPX #$09 34/90BF: D0 F5 BNE $90B6 34/90C1: A9 08 LDA #$08 34/90C3: 85 18 STA $18 34/90C5: 20 6A 96 JSR $966A ; draw text 34/90C8: A9 01 LDA #$01 ; top right message window 34/90CA: 20 1B 8D JSR $8D1B ; open message window 34/90CD: 4C 51 90 JMP $9051 ; next action script command 34/90D0: AD D7 78 LDA $78D7 ; top right message id 34/90D3: 10 03 BPL $90D8 ; branch if not spell name 34/90D5: 4C 50 91 JMP $9150 34/90D8: F0 69 BEQ $9143 ; branch if miss 34/90DA: C9 21 CMP #$21 34/90DC: 90 43 BCC $9121 ; branch if number of hits 34/90DE: C9 39 CMP #$39 34/90E0: 90 2D BCC $910F ; branch if summon name 34/90E2: C9 52 CMP #$52 34/90E4: 90 17 BCC $90FD ; branch if battle message ; $52-$7F: status messages 34/90E6: 38 SEC 34/90E7: E9 46 SBC #$46 34/90E9: 85 1A STA $1A 34/90EB: A9 00 LDA #$00 ; string offset: $010C 34/90ED: 85 18 STA $18 34/90EF: A9 82 LDA #$82 34/90F1: 85 19 STA $19 34/90F3: A5 1A LDA $1A 34/90F5: A2 00 LDX #$00 34/90F7: 20 09 A6 JSR $A609 ; load text string 34/90FA: 4C 68 91 JMP $9168 ; $39-$51: battle message 34/90FD: 38 SEC 34/90FE: E9 39 SBC #$39 34/9100: 85 1A STA $1A 34/9102: 20 C6 95 JSR $95C6 ; get battle message string offset 34/9105: A5 1A LDA $1A 34/9107: A2 00 LDX #$00 34/9109: 20 09 A6 JSR $A609 ; load text string 34/910C: 4C 68 91 JMP $9168 ; $21-$38: summon name 34/910F: 18 CLC 34/9110: 69 C6 ADC #$C6 ; string offset: $0607 34/9112: 85 1A STA $1A 34/9114: 20 BD 95 JSR $95BD ; get monster names string offset 34/9117: A5 1A LDA $1A 34/9119: A2 00 LDX #$00 34/911B: 20 09 A6 JSR $A609 ; load text string 34/911E: 4C 68 91 JMP $9168 ; $01-$20: number of hits 34/9121: 85 18 STA $18 34/9123: A9 00 LDA #$00 34/9125: 85 19 STA $19 34/9127: 20 E1 95 JSR $95E1 ; convert hex to decimal 34/912A: A2 00 LDX #$00 34/912C: B5 1D LDA $1D,X 34/912E: 9D D7 7A STA $7AD7,X 34/9131: E8 INX 34/9132: E0 03 CPX #$03 34/9134: D0 F6 BNE $912C 34/9136: 20 C6 95 JSR $95C6 ; get battle message string offset 34/9139: A9 13 LDA #$13 34/913B: A2 02 LDX #$02 ; destination offset: 2 34/913D: 20 09 A6 JSR $A609 ; load text string 34/9140: 4C 68 91 JMP $9168 ; $00: miss 34/9143: 20 C6 95 JSR $95C6 ; get battle message string offset 34/9146: A9 09 LDA #$09 ; $0629: "ジャンプ" / "Miss!" 34/9148: A2 00 LDX #$00 34/914A: 20 09 A6 JSR $A609 ; load text string 34/914D: 4C 68 91 JMP $9168 ; $80-$FE: spell name 34/9150: C9 FF CMP #$FF 34/9152: F0 20 BEQ $9174 34/9154: 38 SEC 34/9155: E9 80 SBC #$80 34/9157: 85 1A STA $1A 34/9159: A9 90 LDA #$90 ; string offset: $04C8 (spell names) 34/915B: 85 18 STA $18 34/915D: A9 89 LDA #$89 34/915F: 85 19 STA $19 34/9161: A5 1A LDA $1A 34/9163: A2 00 LDX #$00 34/9165: 20 09 A6 JSR $A609 ; load text string 34/9168: A9 08 LDA #$08 34/916A: 85 18 STA $18 34/916C: 20 6A 96 JSR $966A ; draw text 34/916F: A9 01 LDA #$01 ; top right message window 34/9171: 20 1B 8D JSR $8D1B ; open message window 34/9174: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $07: show target name ] 34/9177: AD D8 78 LDA $78D8 ; target id 34/917A: 10 2F BPL $91AB ; branch if a character 34/917C: C9 FF CMP #$FF 34/917E: F0 4B BEQ $91CB ; branch if no target 34/9180: 29 7F AND #$7F 34/9182: C9 08 CMP #$08 34/9184: D0 0A BNE $9190 34/9186: A9 16 LDA #$16 34/9188: 85 1A STA $1A 34/918A: 20 C6 95 JSR $95C6 ; get battle message string offset 34/918D: 18 CLC 34/918E: 90 11 BCC $91A1 34/9190: AA TAX 34/9191: BD CD 7E LDA $7ECD,X 34/9194: AA TAX 34/9195: BD 6B 7D LDA $7D6B,X ; monster id 34/9198: C9 FF CMP #$FF 34/919A: F0 2F BEQ $91CB 34/919C: 85 1A STA $1A 34/919E: 20 BD 95 JSR $95BD ; get monster names string offset 34/91A1: A5 1A LDA $1A 34/91A3: A2 00 LDX #$00 34/91A5: 20 09 A6 JSR $A609 ; load text string 34/91A8: 18 CLC 34/91A9: 90 14 BCC $91BF 34/91AB: 20 3C FD JSR $FD3C ; asl6 34/91AE: 18 CLC 34/91AF: 69 06 ADC #$06 34/91B1: A8 TAY 34/91B2: A2 00 LDX #$00 34/91B4: B1 57 LDA ($57),Y ; character name 34/91B6: 9D D7 7A STA $7AD7,X 34/91B9: C8 INY 34/91BA: E8 INX 34/91BB: E0 06 CPX #$06 34/91BD: D0 F5 BNE $91B4 34/91BF: A9 08 LDA #$08 34/91C1: 85 18 STA $18 34/91C3: 20 6A 96 JSR $966A ; draw text 34/91C6: A9 02 LDA #$02 ; middle left message window 34/91C8: 20 1B 8D JSR $8D1B ; open message window 34/91CB: 4C 51 90 JMP $9051 ; next action script command ; [ clear target message ] 34/91CE: A9 FF LDA #$FF 34/91D0: 8D D8 78 STA $78D8 ; middle left message (target) 34/91D3: 60 RTS ; [ action script command $08: show status message ] 34/91D4: AD D9 78 LDA $78D9 ; status message 34/91D7: C9 FF CMP #$FF 34/91D9: F0 20 BEQ $91FB ; branch if no status message 34/91DB: 18 CLC 34/91DC: 69 0C ADC #$0C 34/91DE: 85 1A STA $1A 34/91E0: A9 00 LDA #$00 ; string offset: $010C 34/91E2: 85 18 STA $18 34/91E4: A9 82 LDA #$82 34/91E6: 85 19 STA $19 34/91E8: A5 1A LDA $1A 34/91EA: A2 00 LDX #$00 34/91EC: 20 09 A6 JSR $A609 ; load text string 34/91EF: A9 08 LDA #$08 34/91F1: 85 18 STA $18 34/91F3: 20 6A 96 JSR $966A ; draw text 34/91F6: A9 03 LDA #$03 ; middle right message window 34/91F8: 20 1B 8D JSR $8D1B ; open message window 34/91FB: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $09: show battle message ] 34/91FE: A9 00 LDA #$00 34/9200: 85 18 STA $18 34/9202: AE EE 78 LDX $78EE 34/9205: BD DA 78 LDA $78DA,X ; battle message queue 34/9208: C9 FF CMP #$FF 34/920A: F0 EF BEQ $91FB 34/920C: 4A LSR 34/920D: 66 18 ROR $18 34/920F: AA TAX 34/9210: BD 75 95 LDA $9575,X ; variable type 34/9213: 06 18 ASL $18 34/9215: B0 03 BCS $921A 34/9217: 20 45 FD JSR $FD45 ; lsr4 34/921A: 29 0F AND #$0F 34/921C: 0A ASL 34/921D: 18 CLC 34/921E: 69 6B ADC #$6B ; 34/956B 34/9220: 85 18 STA $18 34/9222: A9 00 LDA #$00 34/9224: 69 95 ADC #$95 34/9226: 85 19 STA $19 34/9228: A0 00 LDY #$00 34/922A: B1 18 LDA ($18),Y 34/922C: 85 1A STA $1A 34/922E: C8 INY 34/922F: B1 18 LDA ($18),Y 34/9231: 85 1B STA $1B 34/9233: 6C 1A 00 JMP ($001A) ; [ ] 34/9236: EE EE 78 INC $78EE 34/9239: 4C 51 90 JMP $9051 ; next action script command ; [ variable type 0: no variable ] 34/923C: 20 45 92 JSR $9245 34/923F: 20 53 92 JSR $9253 34/9242: 4C 36 92 JMP $9236 ; [ load next battle message ] 34/9245: 20 C6 95 JSR $95C6 ; get battle message string offset 34/9248: AE EE 78 LDX $78EE 34/924B: BD DA 78 LDA $78DA,X 34/924E: A2 00 LDX #$00 34/9250: 4C 09 A6 JMP $A609 ; load text string ; [ ] 34/9253: A9 11 LDA #$11 34/9255: 85 18 STA $18 34/9257: 20 6A 96 JSR $966A ; draw text 34/925A: A9 04 LDA #$04 ; bottom message window 34/925C: 4C 1B 8D JMP $8D1B ; open message window ; [ variable type 1: text string ] 34/925F: 20 45 92 JSR $9245 34/9262: 20 53 92 JSR $9253 34/9265: 20 6B 92 JSR $926B ; wait for keypress 34/9268: 4C 36 92 JMP $9236 ; [ wait for keypress ] 34/926B: 20 AA FB JSR $FBAA ; update joypad input 34/926E: A5 12 LDA $12 34/9270: 29 01 AND #$01 34/9272: F0 F7 BEQ $926B ; wait for A button 34/9274: 60 RTS ; [ variable type 2: hp (peep) ] 34/9275: A2 0D LDX #$0D 34/9277: A9 C5 LDA #$C5 ; "?" 34/9279: 9D D7 7A STA $7AD7,X 34/927C: CA DEX 34/927D: 10 FA BPL $9279 34/927F: A9 77 LDA #$77 ; "H" 34/9281: 8D D7 7A STA $7AD7 34/9284: A9 79 LDA #$79 ; "P" 34/9286: 8D D8 7A STA $7AD8 34/9289: A9 FF LDA #$FF 34/928B: 8D D9 7A STA $7AD9 34/928E: A9 C7 LDA #$C7 ; "/" 34/9290: 8D DF 7A STA $7ADF 34/9293: A0 30 LDY #$30 34/9295: B1 6E LDA ($6E),Y 34/9297: 10 05 BPL $929E ; branch if a character 34/9299: AD D8 7E LDA $7ED8 34/929C: 30 0E BMI $92AC ; branch if a boss battle 34/929E: A9 03 LDA #$03 34/92A0: 85 24 STA $24 34/92A2: 20 B5 92 JSR $92B5 ; write hp to text buffer 34/92A5: A9 09 LDA #$09 34/92A7: 85 24 STA $24 34/92A9: 20 B5 92 JSR $92B5 ; write hp to text buffer 34/92AC: 20 53 92 JSR $9253 34/92AF: 20 6B 92 JSR $926B ; wait for keypress 34/92B2: 4C 36 92 JMP $9236 ; [ write hp to text buffer ] 34/92B5: AE EF 78 LDX $78EF 34/92B8: BD E4 78 LDA $78E4,X ; variable queue 34/92BB: 85 18 STA $18 34/92BD: E8 INX 34/92BE: BD E4 78 LDA $78E4,X 34/92C1: 85 19 STA $19 34/92C3: E8 INX 34/92C4: 8E EF 78 STX $78EF 34/92C7: 20 E1 95 JSR $95E1 ; convert hex to decimal 34/92CA: A0 00 LDY #$00 34/92CC: A6 24 LDX $24 34/92CE: B9 1A 00 LDA $001A,Y 34/92D1: 9D D7 7A STA $7AD7,X 34/92D4: C8 INY 34/92D5: E8 INX 34/92D6: C0 05 CPY #$05 ; write 5 digits 34/92D8: D0 F4 BNE $92CE 34/92DA: 60 RTS ; [ variable type 3: number ] 34/92DB: AE EF 78 LDX $78EF 34/92DE: BD E4 78 LDA $78E4,X 34/92E1: 85 18 STA $18 34/92E3: E8 INX 34/92E4: BD E4 78 LDA $78E4,X 34/92E7: 85 19 STA $19 34/92E9: E8 INX 34/92EA: 8E EF 78 STX $78EF 34/92ED: 20 E1 95 JSR $95E1 ; convert hex to decimal 34/92F0: A2 00 LDX #$00 34/92F2: A0 00 LDY #$00 34/92F4: B5 1A LDA $1A,X 34/92F6: C9 FF CMP #$FF 34/92F8: F0 04 BEQ $92FE 34/92FA: 99 D7 7A STA $7AD7,Y 34/92FD: C8 INY 34/92FE: E8 INX 34/92FF: E0 05 CPX #$05 34/9301: D0 F1 BNE $92F4 34/9303: 84 2A STY $2A 34/9305: 20 C6 95 JSR $95C6 ; get battle message string offset 34/9308: AE EE 78 LDX $78EE 34/930B: BD DA 78 LDA $78DA,X 34/930E: A6 2A LDX $2A ; destination offset 34/9310: 20 09 A6 JSR $A609 ; load text string 34/9313: A9 11 LDA #$11 34/9315: 85 18 STA $18 34/9317: 20 6A 96 JSR $966A ; draw text 34/931A: A9 04 LDA #$04 ; bottom message window 34/931C: 20 1B 8D JSR $8D1B ; open message window 34/931F: 20 AA FB JSR $FBAA ; update joypad input 34/9322: A5 12 LDA $12 34/9324: 29 01 AND #$01 34/9326: F0 F7 BEQ $931F ; wait for A button 34/9328: 4C 36 92 JMP $9236 ; [ variable type 4: item name ] 34/932B: 20 45 92 JSR $9245 34/932E: 86 2A STX $2A 34/9330: A9 00 LDA #$00 ; string offset: $0400 (item names) 34/9332: 85 18 STA $18 34/9334: A9 88 LDA #$88 34/9336: 85 19 STA $19 34/9338: AD E4 78 LDA $78E4 ; item id 34/933B: A6 2A LDX $2A ; destination offset 34/933D: 20 09 A6 JSR $A609 ; load text string 34/9340: A9 FF LDA #$FF 34/9342: 8D DC 7A STA $7ADC 34/9345: 20 53 92 JSR $9253 34/9348: 20 6B 92 JSR $926B ; wait for keypress 34/934B: 4C 36 92 JMP $9236 ; [ action script command $0B: show animation ] 34/934E: 20 11 84 JSR $8411 ; show animation 34/9351: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $0C: show damage numerals ] 34/9354: A9 17 LDA #$17 ; damage numerals 34/9356: 8D C2 7E STA $7EC2 34/9359: 20 11 84 JSR $8411 ; show animation 34/935C: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $0D: death animation ] 34/935F: AD D3 78 LDA $78D3 34/9362: 29 02 AND #$02 34/9364: F0 03 BEQ $9369 ; return if player ran away 34/9366: 4C C1 93 JMP $93C1 34/9369: 20 2E A4 JSR $A42E ; get attacker flags 34/936C: 30 24 BMI $9392 ; branch if a monster 34/936E: A0 30 LDY #$30 34/9370: B1 6E LDA ($6E),Y 34/9372: 30 0F BMI $9383 ; branch if target is a monster ; character attacker, character target 34/9374: 20 CF 95 JSR $95CF 34/9377: 20 CD 93 JSR $93CD 34/937A: 20 D8 95 JSR $95D8 34/937D: 20 CD 93 JSR $93CD 34/9380: 4C B3 93 JMP $93B3 ; character attacker, monster target 34/9383: 20 D8 95 JSR $95D8 34/9386: 20 CD 93 JSR $93CD 34/9389: 20 CF 95 JSR $95CF 34/938C: 20 08 94 JSR $9408 34/938F: 4C B3 93 JMP $93B3 34/9392: A0 30 LDY #$30 34/9394: B1 6E LDA ($6E),Y 34/9396: 30 0F BMI $93A7 ; monster attacker, character target 34/9398: 20 CF 95 JSR $95CF 34/939B: 20 CD 93 JSR $93CD 34/939E: 20 D8 95 JSR $95D8 34/93A1: 20 08 94 JSR $9408 34/93A4: 4C B3 93 JMP $93B3 ; monster attacker, monster target 34/93A7: 20 D8 95 JSR $95D8 34/93AA: 20 08 94 JSR $9408 34/93AD: 20 CF 95 JSR $95CF 34/93B0: 20 08 94 JSR $9408 34/93B3: 20 74 94 JSR $9474 34/93B6: 20 06 9D JSR $9D06 ; update character status for display 34/93B9: A9 16 LDA #$16 ; death animation 34/93BB: 8D C2 7E STA $7EC2 34/93BE: 20 11 84 JSR $8411 ; show animation 34/93C1: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $0E: invincible cannon blast ] 34/93C4: 20 CF 95 JSR $95CF 34/93C7: 20 08 94 JSR $9408 34/93CA: 4C B9 93 JMP $93B9 ; [ ] 34/93CD: A9 00 LDA #$00 34/93CF: 85 52 STA $52 34/93D1: 20 41 A5 JSR $A541 ; get character offset 34/93D4: A8 TAY 34/93D5: C8 INY 34/93D6: 84 1A STY $1A 34/93D8: A5 52 LDA $52 34/93DA: 0A ASL 34/93DB: 48 PHA 34/93DC: A8 TAY 34/93DD: B1 18 LDA ($18),Y 34/93DF: A4 1A LDY $1A 34/93E1: 11 5B ORA ($5B),Y 34/93E3: 91 5B STA ($5B),Y 34/93E5: 29 80 AND #$80 34/93E7: F0 0A BEQ $93F3 34/93E9: B1 5B LDA ($5B),Y 34/93EB: 29 FE AND #$FE 34/93ED: 91 5B STA ($5B),Y 34/93EF: 68 PLA 34/93F0: 4C FF 93 JMP $93FF 34/93F3: 68 PLA 34/93F4: A8 TAY 34/93F5: C8 INY 34/93F6: B1 18 LDA ($18),Y 34/93F8: A4 1A LDY $1A 34/93FA: C8 INY 34/93FB: 11 5B ORA ($5B),Y 34/93FD: 91 5B STA ($5B),Y 34/93FF: E6 52 INC $52 34/9401: A5 52 LDA $52 34/9403: C9 04 CMP #$04 34/9405: D0 CA BNE $93D1 34/9407: 60 RTS ; [ ] 34/9408: A9 00 LDA #$00 34/940A: 85 1C STA $1C 34/940C: A9 75 LDA #$75 34/940E: 85 1E STA $1E 34/9410: A9 76 LDA #$76 34/9412: 85 1F STA $1F 34/9414: A5 1C LDA $1C 34/9416: 0A ASL 34/9417: 85 1A STA $1A 34/9419: A8 TAY 34/941A: B1 18 LDA ($18),Y 34/941C: A0 01 LDY #$01 34/941E: 11 1E ORA ($1E),Y 34/9420: 91 1E STA ($1E),Y 34/9422: 29 E8 AND #$E8 34/9424: F0 09 BEQ $942F 34/9426: A6 1C LDX $1C 34/9428: 09 80 ORA #$80 34/942A: 91 1E STA ($1E),Y 34/942C: 9D C4 7E STA $7EC4,X 34/942F: A4 1A LDY $1A 34/9431: C8 INY 34/9432: B1 18 LDA ($18),Y 34/9434: A0 02 LDY #$02 34/9436: 11 1E ORA ($1E),Y 34/9438: 91 1E STA ($1E),Y 34/943A: 18 CLC 34/943B: A5 1E LDA $1E 34/943D: 69 40 ADC #$40 34/943F: 85 1E STA $1E 34/9441: A5 1F LDA $1F 34/9443: 69 00 ADC #$00 34/9445: 85 1F STA $1F 34/9447: E6 1C INC $1C 34/9449: A5 1C LDA $1C 34/944B: C9 08 CMP #$08 34/944D: D0 C5 BNE $9414 34/944F: 60 RTS ; [ action script command $0A: wait for message ] 34/9450: 38 SEC 34/9451: A9 08 LDA #$08 34/9453: ED 10 60 SBC $6010 ; message speed 34/9456: 20 3F FD JSR $FD3F ; asl3 34/9459: 85 24 STA $24 34/945B: A5 24 LDA $24 34/945D: F0 12 BEQ $9471 34/945F: 20 85 81 JSR $8185 ; wait one frame 34/9462: 20 AA FB JSR $FBAA ; update joypad input 34/9465: A5 12 LDA $12 34/9467: 29 01 AND #$01 34/9469: D0 06 BNE $9471 ; branch if A button is pressed 34/946B: C6 24 DEC $24 34/946D: A5 24 LDA $24 34/946F: D0 EE BNE $945F 34/9471: 4C 51 90 JMP $9051 ; next action script command ; [ update near fatal ] 34/9474: A9 00 LDA #$00 34/9476: 85 52 STA $52 34/9478: 20 41 A5 JSR $A541 ; get character offset 34/947B: A8 TAY 34/947C: C8 INY 34/947D: B1 5B LDA ($5B),Y 34/947F: 30 4C BMI $94CD ; branch if dead 34/9481: C8 INY 34/9482: C8 INY 34/9483: A2 00 LDX #$00 34/9485: B1 5B LDA ($5B),Y ; copy current and max hp 34/9487: 95 18 STA $18,X 34/9489: C8 INY 34/948A: E8 INX 34/948B: E0 04 CPX #$04 34/948D: D0 F6 BNE $9485 34/948F: 46 1B LSR $1B ; divide max hp by 4 34/9491: 66 1A ROR $1A 34/9493: 46 1B LSR $1B 34/9495: 66 1A ROR $1A 34/9497: 38 SEC 34/9498: A5 1A LDA $1A ; subtract current hp 34/949A: E5 18 SBC $18 34/949C: A5 1B LDA $1B 34/949E: E5 19 SBC $19 34/94A0: 90 17 BCC $94B9 34/94A2: A4 5F LDY $5F 34/94A4: C8 INY 34/94A5: B1 5B LDA ($5B),Y ; set near fatal status 34/94A7: 09 01 ORA #$01 34/94A9: 91 5B STA ($5B),Y 34/94AB: A6 52 LDX $52 34/94AD: AD EC 7C LDA $7CEC 34/94B0: 20 20 FD JSR $FD20 ; set bit 34/94B3: 8D EC 7C STA $7CEC 34/94B6: 4C CD 94 JMP $94CD 34/94B9: A4 5F LDY $5F 34/94BB: C8 INY 34/94BC: B1 5B LDA ($5B),Y ; clear near fatal status 34/94BE: 29 FE AND #$FE 34/94C0: 91 5B STA ($5B),Y 34/94C2: A6 52 LDX $52 34/94C4: AD EC 7C LDA $7CEC 34/94C7: 20 2C FD JSR $FD2C ; clear bit 34/94CA: 8D EC 7C STA $7CEC 34/94CD: E6 52 INC $52 ; next character 34/94CF: A5 52 LDA $52 34/94D1: C9 04 CMP #$04 34/94D3: D0 A3 BNE $9478 34/94D5: 60 RTS ; [ action script command $00, $01, $02, $04: close message window ] ; $00: top left ; $01: top right ; $02: middle left ; $04: bottom 34/94D6: A6 4B LDX $4B 34/94D8: BD D6 78 LDA $78D6,X 34/94DB: C9 FF CMP #$FF 34/94DD: F0 05 BEQ $94E4 34/94DF: A5 4B LDA $4B 34/94E1: 20 14 8E JSR $8E14 ; close message window 34/94E4: 4C 51 90 JMP $9051 ; next action script command ; [ action script command $03: close middle right message window ] 34/94E7: AE EE 78 LDX $78EE 34/94EA: BD DA 78 LDA $78DA,X 34/94ED: C9 FF CMP #$FF 34/94EF: D0 03 BNE $94F4 34/94F1: 4C D6 94 JMP $94D6 34/94F4: AD D5 78 LDA $78D5 34/94F7: D0 0A BNE $9503 34/94F9: 38 SEC 34/94FA: A5 64 LDA $64 34/94FC: E9 04 SBC #$04 34/94FE: 85 64 STA $64 34/9500: 4C 51 90 JMP $9051 ; next action script command 34/9503: 38 SEC 34/9504: A5 64 LDA $64 34/9506: E9 05 SBC #$05 34/9508: 85 64 STA $64 34/950A: 4C 51 90 JMP $9051 ; next action script command ; pointers to action scripts 34/950D: 9519 9528 9537 953B 9542 9548 ; action scripts ; 0: fight ; 1: magic/command ; 2: display message ; 3: invincible cannon attack ; 4: skill/level up message ; 5: poison damage 34/9519: 05 07 0B 06 0C 08 0D 09 0A 04 03 01 02 00 FF 34/9528: 05 06 07 0B 0C 08 09 0D 0A 04 03 02 01 00 FF 34/9537: 09 0A 04 FF 34/953B: 09 0B 0C 0E 0A 04 FF 34/9542: 05 09 0A 04 00 FF 34/9548: 09 0C 0A 04 FF ; action script command jump table ; 00: close top left message window ; 01: close top right message window ; 02: close middle left message window ; 03: close middle right message window ; 04: close bottom message window ; 05: show attacker name (top left) ; 06: show attack name / # of hits / miss (top right) ; 07: show target name (middle left) ; 08: show status message (middle right) ; 09: show battle message (bottom) ; 0A: wait for message ; 0B: show animation ; 0C: show damage numerals ; 0D: death animation ; 0E: invincible cannon animation 34/954D: 94D6 94D6 94D6 94E7 94D6 905B 90A0 9177 34/955D: 91D4 91FE 9450 934E 9354 935F 93C4 ; variable type jump table 34/956B: 923C 925F 9275 92DB 932B ; variables for each battle message (144 items, 4 nybbles each) ; 0: none ; 1: text string ; 2: hp (peep) ; 3: number ; 4: item name 34/9575: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34/9585: 10 10 00 00 04 00 03 30 00 00 00 00 00 00 00 02 34/9595: 30 01 00 00 11 11 11 10 00 00 00 00 00 00 00 00 34/95A5: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 34/95B5: 00 00 00 00 00 00 00 00 ; [ get monster names string offset ] 34/95BD: A9 40 LDA #$40 ; string offset: $0520 (monster names) 34/95BF: 85 18 STA $18 34/95C1: A9 8A LDA #$8A 34/95C3: 85 19 STA $19 34/95C5: 60 RTS ; [ get battle message string offset ] 34/95C6: A9 40 LDA #$40 ; string offset: $0620 (battle messages) 34/95C8: 85 18 STA $18 34/95CA: A9 8C LDA #$8C 34/95CC: 85 19 STA $19 34/95CE: 60 RTS ; [ ] 34/95CF: A9 E0 LDA #$E0 34/95D1: 85 18 STA $18 34/95D3: A9 00 LDA #$00 34/95D5: 85 19 STA $19 34/95D7: 60 RTS ; [ ] 34/95D8: A9 F0 LDA #$F0 34/95DA: 85 18 STA $18 34/95DC: A9 00 LDA #$00 34/95DE: 85 19 STA $19 34/95E0: 60 RTS ; [ convert hex to decimal ] ; +$18: hex value ; $1A-$1D: decimal text (out) 34/95E1: A2 03 LDX #$03 34/95E3: A9 80 LDA #$80 34/95E5: 95 1A STA $1A,X 34/95E7: CA DEX 34/95E8: 10 FB BPL $95E5 34/95EA: 86 1F STX $1F 34/95EC: A9 10 LDA #$10 ; 10,000 34/95EE: 85 20 STA $20 34/95F0: A9 27 LDA #$27 34/95F2: 85 21 STA $21 34/95F4: 20 48 96 JSR $9648 ; divide 34/95F7: A9 E8 LDA #$E8 ; 1000 34/95F9: 85 20 STA $20 34/95FB: A9 03 LDA #$03 34/95FD: 85 21 STA $21 34/95FF: 20 48 96 JSR $9648 ; divide 34/9602: A9 64 LDA #$64 ; 100 34/9604: 85 20 STA $20 34/9606: A9 00 LDA #$00 34/9608: 85 21 STA $21 34/960A: 20 48 96 JSR $9648 ; divide 34/960D: A9 0A LDA #$0A ; 10 34/960F: 85 20 STA $20 34/9611: A9 00 LDA #$00 34/9613: 85 21 STA $21 34/9615: 20 48 96 JSR $9648 ; divide 34/9618: 18 CLC 34/9619: A5 18 LDA $18 34/961B: 69 80 ADC #$80 34/961D: 85 1E STA $1E 34/961F: A5 1A LDA $1A 34/9621: C9 80 CMP #$80 34/9623: D0 22 BNE $9647 34/9625: A9 FF LDA #$FF 34/9627: 85 1A STA $1A 34/9629: A5 1B LDA $1B 34/962B: C9 80 CMP #$80 34/962D: D0 18 BNE $9647 34/962F: A9 FF LDA #$FF 34/9631: 85 1B STA $1B 34/9633: A5 1C LDA $1C 34/9635: C9 80 CMP #$80 34/9637: D0 0E BNE $9647 34/9639: A9 FF LDA #$FF 34/963B: 85 1C STA $1C 34/963D: A5 1D LDA $1D 34/963F: C9 80 CMP #$80 34/9641: D0 04 BNE $9647 34/9643: A9 FF LDA #$FF 34/9645: 85 1D STA $1D 34/9647: 60 RTS ; [ divide ] 34/9648: E8 INX 34/9649: 38 SEC 34/964A: A5 18 LDA $18 34/964C: E5 20 SBC $20 34/964E: 85 18 STA $18 34/9650: A5 19 LDA $19 34/9652: E5 21 SBC $21 34/9654: 85 19 STA $19 34/9656: F6 1A INC $1A,X 34/9658: B0 EF BCS $9649 34/965A: 18 CLC 34/965B: A5 18 LDA $18 34/965D: 65 20 ADC $20 34/965F: 85 18 STA $18 34/9661: A5 19 LDA $19 34/9663: 65 21 ADC $21 34/9665: 85 19 STA $19 34/9667: D6 1A DEC $1A,X 34/9669: 60 RTS ; [ draw text ] ; $18: 34/966A: A5 18 LDA $18 34/966C: 20 58 A5 JSR $A558 ; add to text buffer offset 34/966F: A0 00 LDY #$00 34/9671: A2 00 LDX #$00 34/9673: BD D7 7A LDA $7AD7,X 34/9676: 85 1C STA $1C 34/9678: D0 01 BNE $967B 34/967A: 60 RTS 34/967B: C9 FF CMP #$FF 34/967D: F0 70 BEQ $96EF 34/967F: C9 01 CMP #$01 34/9681: D0 03 BNE $9686 34/9683: 4C 35 97 JMP $9735 34/9686: C9 02 CMP #$02 34/9688: D0 03 BNE $968D 34/968A: 4C 45 97 JMP $9745 34/968D: C9 42 CMP #$42 34/968F: F0 21 BEQ $96B2 34/9691: C9 60 CMP #$60 34/9693: B0 5C BCS $96F1 34/9695: C9 57 CMP #$57 34/9697: B0 46 BCS $96DF 34/9699: C9 52 CMP #$52 34/969B: B0 32 BCS $96CF 34/969D: C9 43 CMP #$43 34/969F: B0 29 BCS $96CA 34/96A1: C9 3D CMP #$3D 34/96A3: B0 1D BCS $96C2 34/96A5: C9 38 CMP #$38 34/96A7: B0 11 BCS $96BA 34/96A9: C9 29 CMP #$29 34/96AB: 90 44 BCC $96F1 34/96AD: 20 F9 96 JSR $96F9 34/96B0: D0 13 BNE $96C5 34/96B2: 20 F9 96 JSR $96F9 34/96B5: 18 CLC 34/96B6: 69 8A ADC #$8A 34/96B8: D0 37 BNE $96F1 34/96BA: 20 F9 96 JSR $96F9 34/96BD: 18 CLC 34/96BE: 69 6B ADC #$6B 34/96C0: D0 2F BNE $96F1 34/96C2: 20 07 97 JSR $9707 34/96C5: 18 CLC 34/96C6: 69 66 ADC #$66 34/96C8: D0 27 BNE $96F1 34/96CA: 20 F9 96 JSR $96F9 34/96CD: D0 13 BNE $96E2 34/96CF: 20 F9 96 JSR $96F9 34/96D2: C9 55 CMP #$55 34/96D4: D0 04 BNE $96DA 34/96D6: A9 A6 LDA #$A6 34/96D8: D0 17 BNE $96F1 34/96DA: 18 CLC 34/96DB: 69 91 ADC #$91 34/96DD: D0 12 BNE $96F1 34/96DF: 20 07 97 JSR $9707 34/96E2: C9 5A CMP #$5A 34/96E4: D0 04 BNE $96EA 34/96E6: A9 A6 LDA #$A6 34/96E8: D0 07 BNE $96F1 34/96EA: 18 CLC 34/96EB: 69 8C ADC #$8C 34/96ED: D0 02 BNE $96F1 34/96EF: A9 FF LDA #$FF 34/96F1: 91 4E STA ($4E),Y 34/96F3: E8 INX 34/96F4: C8 INY 34/96F5: 4C 73 96 JMP $9673 34/96F8: 60 RTS 34/96F9: 98 TYA 34/96FA: 48 PHA 34/96FB: 20 15 97 JSR $9715 34/96FE: A9 C0 LDA #$C0 34/9700: 91 1E STA ($1E),Y 34/9702: 68 PLA 34/9703: A8 TAY 34/9704: A5 1C LDA $1C 34/9706: 60 RTS 34/9707: 98 TYA 34/9708: 48 PHA 34/9709: 20 15 97 JSR $9715 34/970C: A9 C1 LDA #$C1 34/970E: 91 1E STA ($1E),Y 34/9710: 68 PLA 34/9711: A8 TAY 34/9712: A5 1C LDA $1C 34/9714: 60 RTS 34/9715: 98 TYA 34/9716: 85 1D STA $1D 34/9718: 38 SEC 34/9719: A5 4E LDA $4E 34/971B: E5 18 SBC $18 34/971D: 85 1E STA $1E 34/971F: A5 4F LDA $4F 34/9721: E9 00 SBC #$00 34/9723: 85 1F STA $1F 34/9725: 18 CLC 34/9726: A5 1E LDA $1E 34/9728: 65 1D ADC $1D 34/972A: 85 1E STA $1E 34/972C: A5 1F LDA $1F 34/972E: 69 00 ADC #$00 34/9730: 85 1F STA $1F 34/9732: A0 00 LDY #$00 34/9734: 60 RTS 34/9735: A5 18 LDA $18 34/9737: 20 58 A5 JSR $A558 ; add to text buffer offset 34/973A: A5 18 LDA $18 34/973C: 20 58 A5 JSR $A558 ; add to text buffer offset 34/973F: E8 INX 34/9740: A0 00 LDY #$00 34/9742: 4C 73 96 JMP $9673 34/9745: E8 INX 34/9746: BD D7 7A LDA $7AD7,X 34/9749: E8 INX 34/974A: 85 1E STA $1E 34/974C: 98 TYA 34/974D: 18 CLC 34/974E: 65 1E ADC $1E 34/9750: A8 TAY 34/9751: 4C 73 96 JMP $9673 ; [ init text buffer ] 34/9754: A9 00 LDA #$00 ; clear $7200-$73FF 34/9756: 8D C0 7A STA $7AC0 34/9759: 85 4E STA $4E ; clear text buffer offset 34/975B: 85 18 STA $18 34/975D: A9 72 LDA #$72 34/975F: 8D C1 7A STA $7AC1 34/9762: 85 4F STA $4F 34/9764: 85 19 STA $19 34/9766: A0 00 LDY #$00 34/9768: A9 FF LDA #$FF 34/976A: 91 18 STA ($18),Y 34/976C: C8 INY 34/976D: D0 FB BNE $976A 34/976F: E6 19 INC $19 34/9771: 91 18 STA ($18),Y 34/9773: C8 INY 34/9774: D0 FB BNE $9771 34/9776: 60 RTS ; [ determine attack order ] 34/9777: A0 00 LDY #$00 34/9779: A9 FF LDA #$FF 34/977B: 20 64 A5 JSR $A564 ; random (0..A) 34/977E: 99 00 74 STA $7400,Y 34/9781: 98 TYA 34/9782: 99 0C 74 STA $740C,Y 34/9785: C8 INY 34/9786: C0 0C CPY #$0C 34/9788: D0 EF BNE $9779 34/978A: A9 01 LDA #$01 34/978C: 85 1A STA $1A 34/978E: A9 FF LDA #$FF 34/9790: 85 1C STA $1C 34/9792: A9 73 LDA #$73 34/9794: 85 1D STA $1D 34/9796: A9 0B LDA #$0B 34/9798: 85 1E STA $1E 34/979A: A9 74 LDA #$74 34/979C: 85 1F STA $1F 34/979E: A9 0C LDA #$0C 34/97A0: 85 22 STA $22 34/97A2: 20 57 8F JSR $8F57 34/97A5: A0 00 LDY #$00 34/97A7: B9 0C 74 LDA $740C,Y 34/97AA: 09 80 ORA #$80 34/97AC: 99 CB 7A STA $7ACB,Y 34/97AF: C8 INY 34/97B0: C0 0C CPY #$0C 34/97B2: D0 F3 BNE $97A7 34/97B4: A9 00 LDA #$00 34/97B6: 85 52 STA $52 34/97B8: 20 41 A5 JSR $A541 ; get character offset 34/97BB: 18 CLC 34/97BC: 69 18 ADC #$18 34/97BE: A8 TAY 34/97BF: B1 57 LDA ($57),Y ; agility 34/97C1: 85 3C STA $3C 34/97C3: 0A ASL 34/97C4: 20 64 A5 JSR $A564 ; random (0..A) 34/97C7: 18 CLC 34/97C8: 65 3C ADC $3C 34/97CA: A6 52 LDX $52 34/97CC: 9D 00 74 STA $7400,X 34/97CF: 8A TXA 34/97D0: 9D 04 74 STA $7404,X 34/97D3: E6 52 INC $52 34/97D5: A5 52 LDA $52 34/97D7: C9 04 CMP #$04 34/97D9: D0 DD BNE $97B8 34/97DB: A9 01 LDA #$01 34/97DD: 85 1A STA $1A 34/97DF: A9 FF LDA #$FF 34/97E1: 85 1C STA $1C 34/97E3: A9 73 LDA #$73 34/97E5: 85 1D STA $1D 34/97E7: A9 03 LDA #$03 34/97E9: 85 1E STA $1E 34/97EB: A9 74 LDA #$74 34/97ED: 85 1F STA $1F 34/97EF: A9 04 LDA #$04 34/97F1: 85 22 STA $22 34/97F3: 20 57 8F JSR $8F57 34/97F6: A0 00 LDY #$00 34/97F8: A2 FF LDX #$FF 34/97FA: E8 INX 34/97FB: BD CB 7A LDA $7ACB,X 34/97FE: C9 88 CMP #$88 34/9800: 90 F8 BCC $97FA 34/9802: B9 04 74 LDA $7404,Y 34/9805: 9D CB 7A STA $7ACB,X 34/9808: C8 INY 34/9809: C0 04 CPY #$04 34/980B: D0 EB BNE $97F8 34/980D: A2 0B LDX #$0B 34/980F: BD CB 7A LDA $7ACB,X 34/9812: 9D 00 74 STA $7400,X 34/9815: CA DEX 34/9816: 10 F7 BPL $980F 34/9818: E8 INX 34/9819: 86 24 STX $24 34/981B: 86 25 STX $25 34/981D: A6 25 LDX $25 34/981F: BD 00 74 LDA $7400,X 34/9822: 30 0F BMI $9833 34/9824: 85 52 STA $52 34/9826: 20 41 A5 JSR $A541 ; get character offset 34/9829: A8 TAY 34/982A: C8 INY 34/982B: B1 5B LDA ($5B),Y 34/982D: 29 C0 AND #$C0 34/982F: D0 2B BNE $985C 34/9831: F0 1C BEQ $984F 34/9833: 29 7F AND #$7F 34/9835: A2 40 LDX #$40 34/9837: 20 D6 FC JSR $FCD6 ; multiply 34/983A: 18 CLC 34/983B: A5 1A LDA $1A 34/983D: 69 75 ADC #$75 34/983F: 85 1A STA $1A 34/9841: A5 1B LDA $1B 34/9843: 69 76 ADC #$76 34/9845: 85 1B STA $1B 34/9847: A0 01 LDY #$01 34/9849: B1 1A LDA ($1A),Y 34/984B: 29 E8 AND #$E8 34/984D: D0 0D BNE $985C 34/984F: A4 24 LDY $24 34/9851: A6 25 LDX $25 34/9853: BD 00 74 LDA $7400,X 34/9856: 99 CB 7A STA $7ACB,Y 34/9859: C8 INY 34/985A: 84 24 STY $24 34/985C: E6 25 INC $25 34/985E: A6 25 LDX $25 34/9860: E0 0C CPX #$0C 34/9862: D0 B9 BNE $981D 34/9864: A9 FF LDA #$FF 34/9866: A4 24 LDY $24 34/9868: 99 CB 7A STA $7ACB,Y 34/986B: 60 RTS ; [ get character actions ] ; 34/A433 pulls its return address and returns from this subroutine 34/986C: 20 9E 9D JSR $9D9E ; update monster names 34/986F: A6 52 LDX $52 ; character id 34/9871: E0 04 CPX #$04 34/9873: F0 29 BEQ $989E 34/9875: AD E1 7B LDA $7BE1 34/9878: 20 2C FD JSR $FD2C ; clear bit 34/987B: 8D E1 7B STA $7BE1 34/987E: 20 41 A5 JSR $A541 ; get character offset 34/9881: A8 TAY 34/9882: C8 INY 34/9883: C8 INY 34/9884: B1 5B LDA ($5B),Y 34/9886: 29 01 AND #$01 34/9888: F0 0A BEQ $9894 ; branch if not jumping 34/988A: 20 94 9B JSR $9B94 ; get pointer to target mask 34/988D: B1 5B LDA ($5B),Y ; target mask 34/988F: 9D 0F 7E STA $7E0F,X 34/9892: D0 0A BNE $989E 34/9894: A9 FF LDA #$FF 34/9896: 9D CF 78 STA $78CF,X ; reset battle command 34/9899: A9 00 LDA #$00 34/989B: 9D 0F 7E STA $7E0F,X ; clear target mask 34/989E: 20 A2 9B JSR $9BA2 ; draw character hp window 34/98A1: 20 33 A4 JSR $A433 ; check if done getting character actions 34/98A4: 20 41 A5 JSR $A541 ; get character offset 34/98A7: A6 52 LDX $52 34/98A9: BD E4 7C LDA $7CE4,X 34/98AC: F0 0F BEQ $98BD ; branch if there is no saved defense value 34/98AE: A9 23 LDA #$23 34/98B0: 20 88 9B JSR $9B88 ; add character offset 34/98B3: BD E4 7C LDA $7CE4,X ; restore saved defense value 34/98B6: 91 5B STA ($5B),Y 34/98B8: A9 00 LDA #$00 ; clear saved defense value 34/98BA: 9D E4 7C STA $7CE4,X 34/98BD: A4 5F LDY $5F 34/98BF: C8 INY 34/98C0: B1 5B LDA ($5B),Y 34/98C2: 29 C0 AND #$C0 34/98C4: F0 08 BEQ $98CE ; branch if not dead or stone 34/98C6: E6 52 INC $52 34/98C8: EE EB 7C INC $7CEB 34/98CB: 4C 6F 98 JMP $986F ; next character 34/98CE: C8 INY 34/98CF: B1 5B LDA ($5B),Y 34/98D1: 29 E0 AND #$E0 34/98D3: F0 03 BEQ $98D8 ; branch if not paralyzed, asleep, or confused 34/98D5: 4C 6C A6 JMP $A66C ; get confused/asleep/paralyzed action 34/98D8: B1 5B LDA ($5B),Y 34/98DA: 29 01 AND #$01 34/98DC: F0 05 BEQ $98E3 ; branch if not jumping 34/98DE: E6 52 INC $52 34/98E0: 4C 6F 98 JMP $986F ; next character 34/98E3: 20 69 9A JSR $9A69 ; draw battle command list 34/98E6: 20 9B 9B JSR $9B9B ; get action pointer 34/98E9: A9 00 LDA #$00 34/98EB: A2 02 LDX #$02 34/98ED: 91 5B STA ($5B),Y ; clear command/attack and targets 34/98EF: C8 INY 34/98F0: CA DEX 34/98F1: 10 FA BPL $98ED 34/98F3: A9 2C LDA #$2C 34/98F5: 20 88 9B JSR $9B88 ; add character offset 34/98F8: B1 5B LDA ($5B),Y 34/98FA: 29 F7 AND #$F7 ; clear item flag 34/98FC: 91 5B STA ($5B),Y 34/98FE: 18 CLC 34/98FF: 98 TYA 34/9900: 69 13 ADC #$13 ; (#$3F) 34/9902: A8 TAY 34/9903: B1 5B LDA ($5B),Y ; used item id 34/9905: F0 03 BEQ $990A 34/9907: 20 E7 9A JSR $9AE7 ; return used item to inventory 34/990A: AD F3 7C LDA $7CF3 34/990D: D0 31 BNE $9940 ; branch if not first turn 34/990F: 20 9E 9D JSR $9D9E 34/9912: A9 00 LDA #$00 ; battle start animation 34/9914: 20 0E FA JSR $FA0E ; execute battle graphics 34/9917: AD D8 7E LDA $7ED8 34/991A: 29 20 AND #$20 34/991C: D0 0F BNE $992D ; branch if cannon blast 34/991E: AD BA 78 LDA $78BA 34/9921: 30 0A BMI $992D 34/9923: 20 AA FB JSR $FBAA ; update joypad input 34/9926: A5 12 LDA $12 34/9928: F0 F9 BEQ $9923 ; wait for any button 34/992A: 20 69 9A JSR $9A69 ; draw battle command list 34/992D: AD D8 7E LDA $7ED8 34/9930: 29 20 AND #$20 34/9932: F0 06 BEQ $993A ; branch if no cannon blast 34/9934: 20 0B A5 JSR $A50B ; do cannon blast 34/9937: 4C 6C 98 JMP $986C 34/993A: AD BA 78 LDA $78BA 34/993D: 10 01 BPL $9940 34/993F: 60 RTS 34/9940: A9 02 LDA #$02 ; step forward (command select) 34/9942: 20 0E FA JSR $FA0E ; execute battle graphics 34/9945: A5 52 LDA $52 34/9947: 85 53 STA $53 34/9949: A9 00 LDA #$00 ; command list cursor 34/994B: 85 55 STA $55 34/994D: A9 00 LDA #$00 ; cursor 0 34/994F: 85 1A STA $1A 34/9951: 85 24 STA $24 34/9953: 85 25 STA $25 34/9955: 20 66 89 JSR $8966 ; init list cursor 34/9958: 8A TXA 34/9959: 48 PHA 34/995A: A2 03 LDX #$03 34/995C: 20 80 FB JSR $FB80 ; wait for nmi 34/995F: CA DEX 34/9960: D0 FA BNE $995C 34/9962: 68 PLA 34/9963: AA TAX 34/9964: A9 00 LDA #$00 34/9966: 85 1B STA $1B 34/9968: A9 03 LDA #$03 34/996A: 85 46 STA $46 34/996C: 20 9E 89 JSR $899E ; get player input 34/996F: A5 50 LDA $50 34/9971: C9 01 CMP #$01 34/9973: F0 51 BEQ $99C6 ; branch if A button pressed ; left 34/9975: C9 40 CMP #$40 34/9977: D0 1D BNE $9996 ; branch if left button not pressed 34/9979: A5 24 LDA $24 34/997B: D0 08 BNE $9985 34/997D: E6 24 INC $24 34/997F: A9 00 LDA #$00 34/9981: 85 25 STA $25 34/9983: F0 D3 BEQ $9958 34/9985: AD BA 78 LDA $78BA 34/9988: 29 08 AND #$08 34/998A: F0 04 BEQ $9990 ; branch if not a back attack 34/998C: A9 05 LDA #$05 ; battle command slot 4 (change row right) 34/998E: D0 02 BNE $9992 34/9990: A9 04 LDA #$04 ; battle command slot 4 (change row left) 34/9992: 85 23 STA $23 34/9994: D0 30 BNE $99C6 ; right 34/9996: C9 80 CMP #$80 34/9998: D0 1D BNE $99B7 ; branch if right button not pressed 34/999A: A5 25 LDA $25 34/999C: D0 08 BNE $99A6 34/999E: E6 25 INC $25 34/99A0: A9 00 LDA #$00 34/99A2: 85 24 STA $24 34/99A4: F0 B2 BEQ $9958 34/99A6: AD BA 78 LDA $78BA 34/99A9: 29 08 AND #$08 34/99AB: F0 04 BEQ $99B1 ; branch if not a back attack 34/99AD: A9 04 LDA #$04 ; battle command slot 4 (change row left) 34/99AF: D0 02 BNE $99B3 34/99B1: A9 05 LDA #$05 ; battle command slot 5 (change row right) 34/99B3: 85 23 STA $23 34/99B5: D0 0F BNE $99C6 ; B button 34/99B7: C9 02 CMP #$02 34/99B9: D0 9D BNE $9958 ; branch if B button not pressed 34/99BB: A5 52 LDA $52 34/99BD: F0 03 BEQ $99C2 ; branch if first character slot 34/99BF: 20 42 9A JSR $9A42 ; go back to previous character 34/99C2: A9 01 LDA #$01 34/99C4: D0 37 BNE $99FD ; command confirmed ; A button 34/99C6: 20 7D 9B JSR $9B7D ; play confirm sound effect 34/99C9: A9 00 LDA #$00 ; cursor 0 34/99CB: 85 18 STA $18 34/99CD: 20 DF 8A JSR $8ADF ; hide cursor 34/99D0: A5 23 LDA $23 34/99D2: A6 52 LDX $52 34/99D4: 9D C3 7A STA $7AC3,X ; set selected command slot 34/99D7: A6 23 LDX $23 34/99D9: BD 00 74 LDA $7400,X ; selected command 34/99DC: A6 52 LDX $52 34/99DE: 9D CF 78 STA $78CF,X ; set selected command id 34/99E1: 0A ASL 34/99E2: 18 CLC 34/99E3: 69 16 ADC #$16 ; 34/9A16 (battle command jump table) 34/99E5: 85 18 STA $18 34/99E7: A9 00 LDA #$00 34/99E9: 69 9A ADC #$9A 34/99EB: 85 19 STA $19 34/99ED: A0 00 LDY #$00 34/99EF: B1 18 LDA ($18),Y 34/99F1: 48 PHA 34/99F2: C8 INY 34/99F3: B1 18 LDA ($18),Y 34/99F5: 85 19 STA $19 34/99F7: 68 PLA 34/99F8: 85 18 STA $18 34/99FA: 6C 18 00 JMP ($0018) ; execute battle command ; A: 0 = command cancelled, 1 = command confirmed 34/99FD: 48 PHA 34/99FE: A5 52 LDA $52 34/9A00: 48 PHA 34/9A01: A5 53 LDA $53 34/9A03: 85 52 STA $52 34/9A05: A9 01 LDA #$01 ; step back 34/9A07: 20 0E FA JSR $FA0E ; execute battle graphics 34/9A0A: 68 PLA 34/9A0B: 85 52 STA $52 34/9A0D: 68 PLA 34/9A0E: D0 03 BNE $9A13 ; branch if command accepted 34/9A10: 4C 6C 98 JMP $986C 34/9A13: 4C 6F 98 JMP $986F ; next character ; battle command jump table 34/9A16: 9A68 9A68 A71C A750 A843 A877 A8AB A8B5 34/9A26: A9AB 9A68 9A68 AA22 AB6E AB07 AB9F AC65 34/9A36: ACD0 AD0C AD6B 9A68 ADAF B646 ; [ go back to previous character ] ; A: character id 34/9A42: 85 18 STA $18 34/9A44: C6 52 DEC $52 ; previous character 34/9A46: A5 52 LDA $52 34/9A48: 20 41 A5 JSR $A541 ; get character offset 34/9A4B: 18 CLC 34/9A4C: 69 02 ADC #$02 34/9A4E: A8 TAY 34/9A4F: B1 5B LDA ($5B),Y 34/9A51: 29 01 AND #$01 34/9A53: D0 0B BNE $9A60 ; branch if jumping 34/9A55: A5 52 LDA $52 34/9A57: 0A ASL 34/9A58: AA TAX 34/9A59: BD BB 78 LDA $78BB,X 34/9A5C: 29 F8 AND #$F8 34/9A5E: F0 08 BEQ $9A68 ; return if not dead, stone, paralyzed, ... 34/9A60: A5 52 LDA $52 34/9A62: D0 E0 BNE $9A44 ; try previous character 34/9A64: A5 18 LDA $18 ; same character 34/9A66: 85 52 STA $52 34/9A68: 60 RTS ; [ draw battle command list ] 34/9A69: AD BA 78 LDA $78BA 34/9A6C: 29 08 AND #$08 34/9A6E: F0 09 BEQ $9A79 ; branch if facing left 34/9A70: A2 03 LDX #$03 ; this does nothing ... 34/9A72: 8E 04 74 STX $7404 34/9A75: CA DEX 34/9A76: 8E 05 74 STX $7405 34/9A79: A2 02 LDX #$02 34/9A7B: 8E 04 74 STX $7404 ; change to front row 34/9A7E: E8 INX 34/9A7F: 8E 05 74 STX $7405 ; change to back row 34/9A82: A4 5F LDY $5F 34/9A84: B1 57 LDA ($57),Y ; job id 34/9A86: 20 40 FD JSR $FD40 ; asl2 34/9A89: A8 TAY 34/9A8A: A2 00 LDX #$00 34/9A8C: B9 21 9B LDA $9B21,Y ; battle command list 34/9A8F: 9D 00 74 STA $7400,X ; copy 4 battle commands 34/9A92: C8 INY 34/9A93: E8 INX 34/9A94: E0 04 CPX #$04 34/9A96: D0 F4 BNE $9A8C 34/9A98: 20 54 97 JSR $9754 ; init text buffer 34/9A9B: A9 00 LDA #$00 34/9A9D: 85 2D STA $2D 34/9A9F: 85 38 STA $38 34/9AA1: A2 05 LDX #$05 34/9AA3: 20 49 A5 JSR $A549 ; write spaces to text buffer 34/9AA6: A6 2D LDX $2D 34/9AA8: BD 00 74 LDA $7400,X 34/9AAB: C9 FF CMP #$FF 34/9AAD: D0 04 BNE $9AB3 34/9AAF: E6 38 INC $38 34/9AB1: A9 00 LDA #$00 34/9AB3: 85 1A STA $1A 34/9AB5: A9 40 LDA #$40 ; string offset: $0620 (battle command names) 34/9AB7: 85 18 STA $18 34/9AB9: A9 8C LDA #$8C 34/9ABB: 85 19 STA $19 34/9ABD: A5 1A LDA $1A 34/9ABF: A2 01 LDX #$01 ; destination offset: 1 34/9AC1: 20 09 A6 JSR $A609 ; load text string 34/9AC4: A9 05 LDA #$05 34/9AC6: 85 18 STA $18 34/9AC8: 20 6A 96 JSR $966A ; draw text 34/9ACB: A9 05 LDA #$05 34/9ACD: 20 58 A5 JSR $A558 ; add to text buffer offset 34/9AD0: E6 2D INC $2D 34/9AD2: A5 2D LDA $2D 34/9AD4: C9 04 CMP #$04 34/9AD6: D0 C9 BNE $9AA1 34/9AD8: A9 04 LDA #$04 34/9ADA: 85 18 STA $18 34/9ADC: A9 0A LDA #$0A 34/9ADE: 85 19 STA $19 34/9AE0: A9 03 LDA #$03 34/9AE2: 85 1A STA $1A 34/9AE4: 4C 38 8B JMP $8B38 ; open menu window ; [ return used item to inventory ] ; A: item id 34/9AE7: 85 18 STA $18 34/9AE9: A9 00 LDA #$00 34/9AEB: 91 5B STA ($5B),Y ; clear used item id 34/9AED: 88 DEY 34/9AEE: B1 5B LDA ($5B),Y 34/9AF0: D0 2A BNE $9B1C ; return if item was equipped 34/9AF2: A2 00 LDX #$00 34/9AF4: BD C0 60 LDA $60C0,X ; inventory item id 34/9AF7: C5 18 CMP $18 34/9AF9: D0 07 BNE $9B02 ; find the item in inventory 34/9AFB: E8 INX 34/9AFC: FE C0 60 INC $60C0,X ; inventory item quantity 34/9AFF: 4C 1C 9B JMP $9B1C 34/9B02: E8 INX 34/9B03: E8 INX 34/9B04: E0 40 CPX #$40 34/9B06: D0 EC BNE $9AF4 34/9B08: A2 00 LDX #$00 34/9B0A: BD C0 60 LDA $60C0,X ; inventory item id 34/9B0D: F0 04 BEQ $9B13 34/9B0F: E8 INX 34/9B10: E8 INX 34/9B11: D0 F7 BNE $9B0A 34/9B13: A5 18 LDA $18 34/9B15: 9D C0 60 STA $60C0,X 34/9B18: E8 INX 34/9B19: FE C0 60 INC $60C0,X ; inventory item quantity 34/9B1C: A9 00 LDA #$00 34/9B1E: 91 5B STA ($5B),Y 34/9B20: 60 RTS ; battle commands for each class 34/9B21: 04 05 06 14 34/9B25: 04 05 06 14 34/9B29: 04 05 06 14 34/9B2D: 04 15 06 14 34/9B31: 04 15 06 14 34/9B35: 04 15 06 14 34/9B39: 04 05 15 14 34/9B3D: 04 05 06 14 34/9B41: 04 0E 07 14 34/9B45: 04 0C 0D 14 34/9B49: 04 0B 05 14 34/9B4D: 04 08 05 14 34/9B51: 04 05 06 14 34/9B55: 04 0F 05 14 34/9B59: 04 05 15 14 34/9B5D: 04 15 06 14 34/9B61: 10 11 12 14 34/9B65: 04 15 06 14 34/9B69: 04 15 06 14 34/9B6D: 04 15 06 14 34/9B71: 04 15 06 14 34/9B75: 04 05 06 14 ; [ play cursor sound effect ] 34/9B79: A9 18 LDA #$18 34/9B7B: D0 06 BNE $9B83 ; [ play confirm sound effect ] 34/9B7D: A9 05 LDA #$05 34/9B7F: D0 02 BNE $9B83 ; [ play error sound effect ] 34/9B81: A9 06 LDA #$06 ; fallthrough ; [ play sound effect ] 34/9B83: 85 CA STA $CA 34/9B85: E6 C9 INC $C9 34/9B87: 60 RTS ; [ add character offset ] 34/9B88: 18 CLC 34/9B89: 65 5F ADC $5F 34/9B8B: A8 TAY 34/9B8C: 60 RTS ; [ get equipped weapon pointer ] ; also used for current hp pointer at 34/9BDF ; also used for experience pointer at 35/BE39 34/9B8D: 18 CLC 34/9B8E: A9 03 LDA #$03 34/9B90: 65 5F ADC $5F 34/9B92: A8 TAY 34/9B93: 60 RTS ; [ get target mask ] 34/9B94: 18 CLC 34/9B95: A9 2F LDA #$2F 34/9B97: 65 5F ADC $5F 34/9B99: A8 TAY 34/9B9A: 60 RTS ; [ get action pointer ] 34/9B9B: 18 CLC 34/9B9C: A9 2E LDA #$2E 34/9B9E: 65 5F ADC $5F 34/9BA0: A8 TAY 34/9BA1: 60 RTS ; [ draw character hp window ] ; a lot of this is disabled in the english translation 34/9BA2: AD EB 7C LDA $7CEB 34/9BA5: F0 06 BEQ $9BAD ; branch if hp window needs update 34/9BA7: A9 00 LDA #$00 34/9BA9: 8D EB 7C STA $7CEB 34/9BAC: 60 RTS 34/9BAD: 20 54 97 JSR $9754 ; init text buffer 34/9BB0: A9 77 LDA #$77 34/9BB2: 8D 0A 72 STA $720A 34/9BB5: A9 79 LDA #$79 34/9BB7: 8D 0B 72 STA $720B 34/9BBA: A5 52 LDA $52 ; save current character id 34/9BBC: 48 PHA 34/9BBD: A9 00 LDA #$00 34/9BBF: 85 52 STA $52 ; start of character loop 34/9BC1: A2 12 LDX #$12 34/9BC3: 20 49 A5 JSR $A549 ; write spaces to text buffer 34/9BC6: A9 C7 LDA #$C7 ; "/" 34/9BC8: 8D E3 7A STA $7AE3 34/9BCB: 20 41 A5 JSR $A541 ; get character offset 34/9BCE: 18 CLC 34/9BCF: 69 06 ADC #$06 34/9BD1: A8 TAY 34/9BD2: A2 01 LDX #$01 34/9BD4: B1 57 LDA ($57),Y ; character name 34/9BD6: 9D D7 7A STA $7AD7,X ; copy to text buffer (6 bytes) 34/9BD9: C8 INY 34/9BDA: E8 INX 34/9BDB: E0 07 CPX #$07 34/9BDD: D0 F5 BNE $9BD4 34/9BDF: 20 8D 9B JSR $9B8D ; get current hp pointer 34/9BE2: B1 5B LDA ($5B),Y ; +$18: current hp 34/9BE4: 85 18 STA $18 34/9BE6: C8 INY 34/9BE7: B1 5B LDA ($5B),Y 34/9BE9: 85 19 STA $19 34/9BEB: 20 E1 95 JSR $95E1 ; convert hex to decimal 34/9BEE: A5 1B LDA $1B 34/9BF0: 8D DF 7A STA $7ADF ; copy 4 digits to text buffer 34/9BF3: A5 1C LDA $1C 34/9BF5: 8D E0 7A STA $7AE0 34/9BF8: A5 1D LDA $1D 34/9BFA: 8D E1 7A STA $7AE1 34/9BFD: A5 1E LDA $1E 34/9BFF: 8D E2 7A STA $7AE2 34/9C02: A9 00 LDA #$00 34/9C04: 85 24 STA $24 34/9C06: 20 1D 9D JSR $9D1D ; update character status for display 34/9C09: AD E8 7C LDA $7CE8 34/9C0C: C9 FF CMP #$FF 34/9C0E: F0 6F BEQ $9C7F ; 34/9C10: A6 52 LDX $52 34/9C12: BD CF 78 LDA $78CF,X ; battle command used 34/9C15: C9 FF CMP #$FF 34/9C17: F0 34 BEQ $9C4D ; branch if no command chosen 34/9C19: C9 C8 CMP #$C8 34/9C1B: 90 1C BCC $9C39 ; branch if not a spell ; spell name 34/9C1D: 38 SEC 34/9C1E: E9 C8 SBC #$C8 34/9C20: 85 1A STA $1A 34/9C22: A9 90 LDA #$90 ; string offset: $04C8 (spell names) 34/9C24: 85 18 STA $18 34/9C26: A9 89 LDA #$89 34/9C28: 85 19 STA $19 34/9C2A: A5 1A LDA $1A 34/9C2C: A2 0C LDX #$0C ; destination offset: 12 34/9C2E: 20 09 A6 JSR $A609 ; load text string 34/9C31: A9 C7 LDA #$C7 ; "/" 34/9C33: 8D E3 7A STA $7AE3 34/9C36: 4C BA 9C JMP $9CBA ; command name 34/9C39: 85 1A STA $1A 34/9C3B: A9 40 LDA #$40 ; string offset: $0620 (command name) 34/9C3D: 85 18 STA $18 34/9C3F: A9 8C LDA #$8C 34/9C41: 85 19 STA $19 34/9C43: A5 1A LDA $1A 34/9C45: A2 0D LDX #$0D ; destination offset: 13 34/9C47: 20 09 A6 JSR $A609 ; load text string 34/9C4A: 4C BA 9C JMP $9CBA ; status name 34/9C4D: A5 1A LDA $1A ; +$1A same as +$78BB 34/9C4F: 05 1B ORA $1B 34/9C51: F0 2C BEQ $9C7F 34/9C53: A5 1B LDA $1B 34/9C55: 29 20 AND #$20 34/9C57: F0 0A BEQ $9C63 ; branch if not near fatal 34/9C59: A5 1B LDA $1B 34/9C5B: 29 DF AND #$DF 34/9C5D: 85 1B STA $1B 34/9C5F: 05 1A ORA $1A 34/9C61: F0 1C BEQ $9C7F ; no display if only status is near fatal 34/9C63: 06 1B ASL $1B ; find the first bit that is set 34/9C65: 26 1A ROL $1A 34/9C67: B0 04 BCS $9C6D 34/9C69: E6 24 INC $24 34/9C6B: 90 F6 BCC $9C63 34/9C6D: A9 2C LDA #$2C ; string offset: $0116 (status names) 34/9C6F: 85 18 STA $18 34/9C71: A9 82 LDA #$82 34/9C73: 85 19 STA $19 34/9C75: A5 24 LDA $24 34/9C77: A2 0D LDX #$0D ; destination offset: 13 34/9C79: 20 09 A6 JSR $A609 ; load text string 34/9C7C: 4C BA 9C JMP $9CBA ; max hp 34/9C7F: AD E8 7C LDA $7CE8 34/9C82: C9 FF CMP #$FF 34/9C84: F0 0F BEQ $9C95 ; branch if using potion, hi-potion, or elixir ??? 34/9C86: A6 52 LDX $52 34/9C88: AD E1 7B LDA $7BE1 34/9C8B: 20 38 FD JSR $FD38 ; check bit 34/9C8E: F0 05 BEQ $9C95 ; branch if not using a spell 34/9C90: BD CF 78 LDA $78CF,X 34/9C93: D0 88 BNE $9C1D ; show spell name instead 34/9C95: A9 05 LDA #$05 34/9C97: 20 88 9B JSR $9B88 ; add character offset 34/9C9A: B1 5B LDA ($5B),Y ; max hp 34/9C9C: 85 18 STA $18 34/9C9E: C8 INY 34/9C9F: B1 5B LDA ($5B),Y 34/9CA1: 85 19 STA $19 34/9CA3: 20 E1 95 JSR $95E1 ; convert hex to decimal 34/9CA6: A5 1B LDA $1B 34/9CA8: 8D E4 7A STA $7AE4 ; copy max hp to text buffer 34/9CAB: A5 1C LDA $1C 34/9CAD: 8D E5 7A STA $7AE5 34/9CB0: A5 1D LDA $1D 34/9CB2: 8D E6 7A STA $7AE6 34/9CB5: A5 1E LDA $1E 34/9CB7: 8D E7 7A STA $7AE7 34/9CBA: A9 12 LDA #$12 34/9CBC: 85 18 STA $18 34/9CBE: 20 6A 96 JSR $966A ; draw text 34/9CC1: A9 12 LDA #$12 34/9CC3: 20 58 A5 JSR $A558 ; add to text buffer offset 34/9CC6: E6 52 INC $52 ; next character 34/9CC8: A5 52 LDA $52 34/9CCA: C9 04 CMP #$04 34/9CCC: F0 03 BEQ $9CD1 34/9CCE: 4C C1 9B JMP $9BC1 34/9CD1: 68 PLA 34/9CD2: 85 52 STA $52 ; restore current character id 34/9CD4: A9 0B LDA #$0B 34/9CD6: 85 18 STA $18 34/9CD8: A9 1E LDA #$1E 34/9CDA: 85 19 STA $19 34/9CDC: A9 03 LDA #$03 34/9CDE: 85 1A STA $1A 34/9CE0: 4C 38 8B JMP $8B38 ; open menu window ; [ init characters/monsters ] 34/9CE3: 20 4D 87 JSR $874D 34/9CE6: 20 16 80 JSR $8016 ; init character/monster properties 34/9CE9: 20 BE 87 JSR $87BE 34/9CEC: 20 74 94 JSR $9474 34/9CEF: 20 06 9D JSR $9D06 ; update character status for display 34/9CF2: A9 00 LDA #$00 34/9CF4: 85 52 STA $52 34/9CF6: 20 26 80 JSR $8026 ; update character equipment 34/9CF9: E6 52 INC $52 34/9CFB: A5 52 LDA $52 34/9CFD: C9 04 CMP #$04 34/9CFF: D0 F5 BNE $9CF6 34/9D01: A9 00 LDA #$00 34/9D03: 85 52 STA $52 34/9D05: 60 RTS ; [ update character status for display ] ; all characters 34/9D06: A9 00 LDA #$00 34/9D08: 85 52 STA $52 34/9D0A: 20 41 A5 JSR $A541 ; get character offset 34/9D0D: 20 1D 9D JSR $9D1D ; update character status for display 34/9D10: E6 52 INC $52 34/9D12: A5 52 LDA $52 34/9D14: C9 04 CMP #$04 34/9D16: D0 F2 BNE $9D0A 34/9D18: A9 00 LDA #$00 34/9D1A: 85 52 STA $52 34/9D1C: 60 RTS ; [ update character status for display ] ; single character 34/9D1D: A4 5F LDY $5F 34/9D1F: C8 INY 34/9D20: B1 5B LDA ($5B),Y ; status 1 34/9D22: 85 1C STA $1C 34/9D24: 48 PHA 34/9D25: 29 C0 AND #$C0 ; dead/stone 34/9D27: 85 1A STA $1A 34/9D29: C8 INY 34/9D2A: B1 5B LDA ($5B),Y ; status 2 34/9D2C: 85 1D STA $1D 34/9D2E: 29 E0 AND #$E0 34/9D30: 20 47 FD JSR $FD47 ; lsr2 34/9D33: 05 1A ORA $1A 34/9D35: 85 1A STA $1A 34/9D37: A9 00 LDA #$00 34/9D39: 85 1B STA $1B 34/9D3B: 68 PLA 34/9D3C: 29 3F AND #$3F ; the rest of status 1 34/9D3E: 4A LSR 34/9D3F: 66 1B ROR $1B ; rotate 3 lowest bits into $1B 34/9D41: 4A LSR 34/9D42: 66 1B ROR $1B 34/9D44: 4A LSR 34/9D45: 66 1B ROR $1B 34/9D47: 05 1A ORA $1A ; toad/silence 34/9D49: 85 1A STA $1A 34/9D4B: A5 52 LDA $52 34/9D4D: 0A ASL 34/9D4E: AA TAX 34/9D4F: A5 1A LDA $1A 34/9D51: 9D BB 78 STA $78BB,X ; character status for graphics 34/9D54: A5 1B LDA $1B 34/9D56: 9D BC 78 STA $78BC,X 34/9D59: A5 1C LDA $1C 34/9D5B: 29 C0 AND #$C0 34/9D5D: D0 2A BNE $9D89 ; branch if dead or stone 34/9D5F: A5 1C LDA $1C 34/9D61: 48 PHA 34/9D62: 29 07 AND #$07 ; ignore toad and mini 34/9D64: 85 1C STA $1C 34/9D66: 68 PLA 34/9D67: 29 10 AND #$10 ; shift silence bit right 1 34/9D69: 4A LSR 34/9D6A: 05 1C ORA $1C 34/9D6C: 0A ASL 34/9D6D: 85 1C STA $1C 34/9D6F: A5 1D LDA $1D 34/9D71: 48 PHA 34/9D72: 29 E0 AND #$E0 ; top 3 bits are paralyzed, asleep, confused 34/9D74: 05 1C ORA $1C 34/9D76: 85 1C STA $1C 34/9D78: 68 PLA 34/9D79: 29 06 AND #$06 34/9D7B: F0 06 BEQ $9D83 34/9D7D: A5 1C LDA $1C 34/9D7F: 09 01 ORA #$01 ; lowest bit is something else... 34/9D81: 85 1C STA $1C 34/9D83: A0 00 LDY #$00 34/9D85: A5 1C LDA $1C 34/9D87: D0 04 BNE $9D8D 34/9D89: A0 FF LDY #$FF ; no status name display 34/9D8B: D0 0A BNE $9D97 34/9D8D: 0A ASL ; find the first status to display 34/9D8E: B0 07 BCS $9D97 34/9D90: C8 INY 34/9D91: C0 08 CPY #$08 34/9D93: D0 F8 BNE $9D8D 34/9D95: F0 06 BEQ $9D9D 34/9D97: 98 TYA 34/9D98: A6 52 LDX $52 34/9D9A: 9D C4 78 STA $78C4,X 34/9D9D: 60 RTS ; [ update monster names ] 34/9D9E: 20 54 97 JSR $9754 ; init text buffer 34/9DA1: A9 00 LDA #$00 34/9DA3: 85 24 STA $24 34/9DA5: A2 08 LDX #$08 34/9DA7: 20 49 A5 JSR $A549 ; write spaces to text buffer 34/9DAA: A6 24 LDX $24 34/9DAC: BD CE 7D LDA $7DCE,X ; number of monsters of each type remaining 34/9DAF: F0 1C BEQ $9DCD 34/9DB1: A9 40 LDA #$40 ; string offset: $0520 (monster names) 34/9DB3: 85 18 STA $18 34/9DB5: A9 8A LDA #$8A 34/9DB7: 85 19 STA $19 34/9DB9: BD 6B 7D LDA $7D6B,X ; monster id 34/9DBC: A2 00 LDX #$00 34/9DBE: 20 09 A6 JSR $A609 ; load text string 34/9DC1: A9 08 LDA #$08 34/9DC3: 85 18 STA $18 34/9DC5: 20 6A 96 JSR $966A ; draw text 34/9DC8: A9 08 LDA #$08 34/9DCA: 20 58 A5 JSR $A558 ; add to text buffer offset 34/9DCD: E6 24 INC $24 ; next monster type 34/9DCF: A5 24 LDA $24 34/9DD1: C9 04 CMP #$04 34/9DD3: D0 D0 BNE $9DA5 34/9DD5: A9 01 LDA #$01 34/9DD7: 85 18 STA $18 34/9DD9: A9 0A LDA #$0A 34/9DDB: 85 19 STA $19 34/9DDD: A9 03 LDA #$03 34/9DDF: 85 1A STA $1A 34/9DE1: 4C 38 8B JMP $8B38 ; open menu window ; [ execute action ] 34/9DE4: AE C2 7A LDX $7AC2 ; action queue pointer 34/9DE7: BD CB 7A LDA $7ACB,X ; attacker id 34/9DEA: 48 PHA 34/9DEB: 48 PHA 34/9DEC: 10 05 BPL $9DF3 ; branch if a character 34/9DEE: 29 7F AND #$7F 34/9DF0: 18 CLC 34/9DF1: 69 04 ADC #$04 34/9DF3: 85 18 STA $18 ; index 34/9DF5: 85 26 STA $26 34/9DF7: A9 40 LDA #$40 ; size: 64 bytes 34/9DF9: 85 1A STA $1A 34/9DFB: A9 75 LDA #$75 ; offset: $7575 34/9DFD: 85 20 STA $20 34/9DFF: A9 75 LDA #$75 34/9E01: 85 21 STA $21 34/9E03: 20 2E 80 JSR $802E ; calculate pointer 34/9E06: A5 1C LDA $1C 34/9E08: 85 6E STA $6E 34/9E0A: A5 1D LDA $1D 34/9E0C: 85 6F STA $6F 34/9E0E: A5 26 LDA $26 34/9E10: C9 0C CMP #$0C 34/9E12: 90 05 BCC $9E19 ; branch if not a summon ??? 34/9E14: 68 PLA 34/9E15: 68 PLA 34/9E16: 4C 5F 9E JMP $9E5F 34/9E19: C9 04 CMP #$04 34/9E1B: 90 05 BCC $9E22 ; branch if not monster 4-7 34/9E1D: 38 SEC 34/9E1E: E9 04 SBC #$04 34/9E20: 09 80 ORA #$80 34/9E22: 8D D6 78 STA $78D6 34/9E25: 68 PLA 34/9E26: 29 7F AND #$7F 34/9E28: AA TAX 34/9E29: A9 00 LDA #$00 34/9E2B: 20 20 FD JSR $FD20 ; set bit 34/9E2E: 8D 98 7E STA $7E98 ; attacker mask 34/9E31: 68 PLA 34/9E32: 10 2B BPL $9E5F ; branch if a character 34/9E34: AD 9A 7E LDA $7E9A 34/9E37: 09 80 ORA #$80 34/9E39: 8D 9A 7E STA $7E9A 34/9E3C: AD ED 7C LDA $7CED ; battle id 34/9E3F: C9 55 CMP #$55 34/9E41: D0 07 BNE $9E4A 34/9E43: AD EE 7C LDA $7CEE 34/9E46: F0 0F BEQ $9E57 34/9E48: D0 15 BNE $9E5F 34/9E4A: C9 79 CMP #$79 34/9E4C: F0 04 BEQ $9E52 34/9E4E: C9 90 CMP #$90 34/9E50: D0 0D BNE $9E5F 34/9E52: AD EE 7C LDA $7CEE 34/9E55: F0 08 BEQ $9E5F 34/9E57: A0 06 LDY #$06 34/9E59: B1 6E LDA ($6E),Y 34/9E5B: A0 04 LDY #$04 34/9E5D: 91 6E STA ($6E),Y 34/9E5F: A0 01 LDY #$01 34/9E61: B1 6E LDA ($6E),Y 34/9E63: 29 C0 AND #$C0 34/9E65: F0 1A BEQ $9E81 ; branch if not dead or stone 34/9E67: A2 00 LDX #$00 34/9E69: 8E 98 7E STX $7E98 34/9E6C: 8E C2 7E STX $7EC2 34/9E6F: CA DEX 34/9E70: 8E D6 78 STX $78D6 34/9E73: 8E D8 78 STX $78D8 34/9E76: 8E EB 7C STX $7CEB 34/9E79: A9 00 LDA #$00 ; do nothing 34/9E7B: 20 7B 9F JSR $9F7B ; set command id 34/9E7E: 4C EC 9E JMP $9EEC 34/9E81: C8 INY 34/9E82: B1 6E LDA ($6E),Y ; status 2 34/9E84: 29 C0 AND #$C0 34/9E86: F0 0B BEQ $9E93 ; branch if not paralyzed or asleep 34/9E88: A9 01 LDA #$01 ; asleep/ paralyzed command 34/9E8A: 20 7B 9F JSR $9F7B ; set command id 34/9E8D: 20 CE 91 JSR $91CE ; clear target message 34/9E90: 20 87 9F JSR $9F87 ; set self-target 34/9E93: A0 2F LDY #$2F 34/9E95: B1 6E LDA ($6E),Y ; target mask 34/9E97: 8D 99 7E STA $7E99 ; set targets for graphics 34/9E9A: 8D 9B 7E STA $7E9B 34/9E9D: D0 03 BNE $9EA2 ; branch if there are any valid targets 34/9E9F: 20 87 9F JSR $9F87 ; set self-target 34/9EA2: A2 00 LDX #$00 34/9EA4: 0A ASL 34/9EA5: B0 03 BCS $9EAA 34/9EA7: E8 INX 34/9EA8: D0 FA BNE $9EA4 34/9EAA: C8 INY 34/9EAB: B1 6E LDA ($6E),Y ; target 34/9EAD: 10 16 BPL $9EC5 ; branch if a character 34/9EAF: AD 9A 7E LDA $7E9A 34/9EB2: 09 40 ORA #$40 34/9EB4: 8D 9A 7E STA $7E9A 34/9EB7: 8A TXA 34/9EB8: 09 80 ORA #$80 34/9EBA: 8D D8 78 STA $78D8 34/9EBD: 18 CLC 34/9EBE: 8A TXA 34/9EBF: 69 04 ADC #$04 34/9EC1: AA TAX 34/9EC2: 4C C8 9E JMP $9EC8 34/9EC5: 8E D8 78 STX $78D8 34/9EC8: B1 6E LDA ($6E),Y 34/9ECA: 29 40 AND #$40 34/9ECC: F0 05 BEQ $9ED3 34/9ECE: A9 88 LDA #$88 34/9ED0: 8D D8 78 STA $78D8 34/9ED3: 86 18 STX $18 34/9ED5: A9 40 LDA #$40 ; size: 64 bytes 34/9ED7: 85 1A STA $1A 34/9ED9: A9 75 LDA #$75 ; offset: $7575 34/9EDB: 85 20 STA $20 34/9EDD: A9 75 LDA #$75 34/9EDF: 85 21 STA $21 34/9EE1: 20 2E 80 JSR $802E ; calculate pointer 34/9EE4: A5 1C LDA $1C 34/9EE6: 85 70 STA $70 34/9EE8: A5 1D LDA $1D 34/9EEA: 85 71 STA $71 34/9EEC: 20 2E A4 JSR $A42E ; get attacker flags 34/9EEF: 29 10 AND #$10 34/9EF1: F0 09 BEQ $9EFC ; branch if not using magic 34/9EF3: A0 2E LDY #$2E 34/9EF5: B1 6E LDA ($6E),Y ; action id 34/9EF7: 85 1A STA $1A 34/9EF9: 4C 5A 9F JMP $9F5A 34/9EFC: B1 6E LDA ($6E),Y 34/9EFE: 29 08 AND #$08 34/9F00: F0 09 BEQ $9F0B ; branch if not using sing ??? 34/9F02: A0 2E LDY #$2E 34/9F04: B1 6E LDA ($6E),Y ; action id 34/9F06: 85 1A STA $1A 34/9F08: 4C 19 9F JMP $9F19 34/9F0B: A0 2E LDY #$2E 34/9F0D: B1 6E LDA ($6E),Y ; battle command id 34/9F0F: 85 1A STA $1A 34/9F11: C9 13 CMP #$13 34/9F13: 90 47 BCC $9F5C 34/9F15: C9 46 CMP #$46 ; first harp 34/9F17: B0 04 BCS $9F1D 34/9F19: A9 13 LDA #$13 ; item action id 34/9F1B: D0 3F BNE $9F5C 34/9F1D: 20 2E A4 JSR $A42E ; get attacker flags 34/9F20: 30 38 BMI $9F5A ; branch if a monster 34/9F22: 29 07 AND #$07 34/9F24: 85 52 STA $52 34/9F26: AA TAX 34/9F27: BD C7 7A LDA $7AC7,X ; spell level or summon id 34/9F2A: 18 CLC 34/9F2B: 69 07 ADC #$07 34/9F2D: A8 TAY 34/9F2E: 38 SEC 34/9F2F: B1 6E LDA ($6E),Y ; subtract 1 mp 34/9F31: E9 01 SBC #$01 34/9F33: 91 6E STA ($6E),Y 34/9F35: A5 1A LDA $1A 34/9F37: C9 CE CMP #$CE ; bahamut 34/9F39: F0 1C BEQ $9F57 34/9F3B: C9 D5 CMP #$D5 ; leviathan 34/9F3D: F0 18 BEQ $9F57 34/9F3F: C9 DC CMP #$DC ; odin 34/9F41: F0 14 BEQ $9F57 34/9F43: C9 E3 CMP #$E3 ; titan 34/9F45: F0 10 BEQ $9F57 34/9F47: C9 EA CMP #$EA ; ifrit 34/9F49: F0 0C BEQ $9F57 34/9F4B: C9 F1 CMP #$F1 ; ramuh 34/9F4D: F0 08 BEQ $9F57 34/9F4F: C9 F8 CMP #$F8 ; shiva 34/9F51: F0 04 BEQ $9F57 34/9F53: C9 FF CMP #$FF ; chocobo 34/9F55: D0 03 BNE $9F5A 34/9F57: 4C D6 9F JMP $9FD6 ; calculate summon properties 34/9F5A: A9 14 LDA #$14 ; magic action id 34/9F5C: 8D C2 7E STA $7EC2 ; action id 34/9F5F: 0A ASL 34/9F60: 18 CLC 34/9F61: 69 AC ADC #$AC ; 34/9FAC (action jump table) 34/9F63: 85 18 STA $18 34/9F65: A9 00 LDA #$00 34/9F67: 69 9F ADC #$9F 34/9F69: 85 19 STA $19 34/9F6B: A0 00 LDY #$00 34/9F6D: B1 18 LDA ($18),Y 34/9F6F: 48 PHA 34/9F70: C8 INY 34/9F71: B1 18 LDA ($18),Y 34/9F73: 85 19 STA $19 34/9F75: 68 PLA 34/9F76: 85 18 STA $18 34/9F78: 6C 18 00 JMP ($0018) ; [ set command id ] ; A: command id 34/9F7B: A0 2E LDY #$2E 34/9F7D: 91 6E STA ($6E),Y 34/9F7F: 20 2E A4 JSR $A42E ; get attacker flags 34/9F82: 29 E7 AND #$E7 34/9F84: 91 6E STA ($6E),Y ; clear flags for using magic or item 34/9F86: 60 RTS ; [ set self-target ] 34/9F87: 20 2E A4 JSR $A42E ; get attacker flags 34/9F8A: 48 PHA 34/9F8B: 29 07 AND #$07 ; slot 34/9F8D: AA TAX 34/9F8E: A9 00 LDA #$00 34/9F90: 20 20 FD JSR $FD20 ; set bit 34/9F93: A0 2F LDY #$2F 34/9F95: 91 6E STA ($6E),Y ; set target mask 34/9F97: 8D 99 7E STA $7E99 ; targets (graphics) 34/9F9A: 8D 9B 7E STA $7E9B ; targets hit (graphics) 34/9F9D: 68 PLA 34/9F9E: 29 80 AND #$80 34/9FA0: C8 INY 34/9FA1: 91 6E STA ($6E),Y ; set monster/character target 34/9FA3: A0 2F LDY #$2F 34/9FA5: B1 6E LDA ($6E),Y ; return target mask 34/9FA7: 60 RTS ; [ action: no effect ] 34/9FA8: EE EB 7C INC $7CEB 34/9FAB: 60 RTS ; action jump table 34/9FAC: 9FA8 A68A A7DF A7EA A104 A881 A8BF A93B 34/9FBC: A9D8 AA11 9FA8 AA5D AB73 AB0C ABA4 AC6F 34/9FCC: ACD5 AD16 AD75 A3BB A367 ; [ calculate summon properties ] ; called by 34/9DE4 after decrementing a character's mp. loads summon ; properties to $7875, chooses one of the 3 summon attacks, chooses targets, ; sets up the attack name and message, then jumps back to the beginning of ; 34/9DE4 to execute the attack with the summon as the attacker. the way this ; is set up makes me wonder of they originally planned to have the summon ; stay in play for multiple rounds like in ff10. otherwise, why not just use ; the summoner's properties instead of creating a whole new set for the summon? 34/9FD6: A2 3F LDX #$3F 34/9FD8: A9 00 LDA #$00 34/9FDA: 8D 93 7E STA $7E93 34/9FDD: 9D 75 78 STA $7875,X ; clear summon properties 34/9FE0: CA DEX 34/9FE1: 10 FA BPL $9FDD 34/9FE3: A9 02 LDA #$02 34/9FE5: 85 30 STA $30 34/9FE7: 20 2E A4 JSR $A42E ; get attacker flags 34/9FEA: 29 07 AND #$07 34/9FEC: 85 52 STA $52 34/9FEE: 20 41 A5 JSR $A541 ; get character offset 34/9FF1: A8 TAY 34/9FF2: B1 57 LDA ($57),Y ; job id 34/9FF4: C9 13 CMP #$13 34/9FF6: F0 11 BEQ $A009 ; branch if summoner (use 3rd spell) 34/9FF8: C9 14 CMP #$14 34/9FFA: F0 0D BEQ $A009 ; branch if sage (use 3rd spell) 34/9FFC: A9 63 LDA #$63 34/9FFE: 20 64 A5 JSR $A564 ; random (0..A) 35/A001: C9 32 CMP #$32 35/A003: B0 02 BCS $A007 ; conjurer has 50% chance to use 1st or 2nd 35/A005: C6 30 DEC $30 35/A007: C6 30 DEC $30 35/A009: A6 52 LDX $52 35/A00B: BD C7 7A LDA $7AC7,X ; summon id / spell level 35/A00E: 29 07 AND #$07 35/A010: 85 1A STA $1A 35/A012: 20 3E FD JSR $FD3E ; asl4 35/A015: 05 30 ORA $30 35/A017: 8D 94 7E STA $7E94 35/A01A: A9 75 LDA #$75 ; $7875 (summon properties) 35/A01C: 85 6E STA $6E 35/A01E: A9 78 LDA #$78 35/A020: 85 6F STA $6F 35/A022: A9 0F LDA #$0F 35/A024: 20 88 9B JSR $9B88 ; add character offset 35/A027: A2 02 LDX #$02 35/A029: B1 5B LDA ($5B),Y ; job level, intelligect, spirit 35/A02B: 0A ASL ; multiply by 2 35/A02C: 95 18 STA $18,X 35/A02E: C8 INY 35/A02F: CA DEX 35/A030: 10 F7 BPL $A029 35/A032: A9 01 LDA #$01 35/A034: 20 88 9B JSR $9B88 ; add character offset 35/A037: B1 5B LDA ($5B),Y 35/A039: 29 30 AND #$30 ; copy toad and silence status 35/A03B: A0 01 LDY #$01 35/A03D: 91 6E STA ($6E),Y 35/A03F: A0 0F LDY #$0F 35/A041: A2 02 LDX #$02 35/A043: B5 18 LDA $18,X 35/A045: 91 6E STA ($6E),Y ; copy job level, intellect, spirit 35/A047: C8 INY 35/A048: CA DEX 35/A049: 10 F8 BPL $A043 35/A04B: A0 00 LDY #$00 35/A04D: A5 1A LDA $1A 35/A04F: 91 6E STA ($6E),Y ; set summon level (0..7) 35/A051: A0 03 LDY #$03 35/A053: 98 TYA 35/A054: 91 6E STA ($6E),Y ; current hp = 3 (needs to be nonzero) 35/A056: AE C2 7A LDX $7AC2 ; action queue pointer 35/A059: A9 88 LDA #$88 35/A05B: 9D CB 7A STA $7ACB,X 35/A05E: 20 2E A4 JSR $A42E ; get attacker flags 35/A061: 09 90 ORA #$90 ; is a monster, using magic 35/A063: 91 6E STA ($6E),Y 35/A065: A6 52 LDX $52 35/A067: BD C7 7A LDA $7AC7,X ; summon id 35/A06A: 29 07 AND #$07 35/A06C: 85 18 STA $18 35/A06E: 0A ASL 35/A06F: 18 CLC 35/A070: 65 18 ADC $18 35/A072: 65 30 ADC $30 35/A074: 48 PHA ; push summon id for message display 35/A075: 69 5B ADC #$5B ; add $5B to get first summon attack 35/A077: 85 18 STA $18 ; attack properties index 35/A079: 85 26 STA $26 35/A07B: A9 08 LDA #$08 35/A07D: 85 1A STA $1A 35/A07F: A9 C0 LDA #$C0 ; 30/98C0 (attack properties) 35/A081: 85 20 STA $20 35/A083: A9 98 LDA #$98 35/A085: 85 21 STA $21 35/A087: A2 00 LDX #$00 35/A089: 20 3A BA JSR $BA3A ; load array item (bank 30) 35/A08C: AD 05 74 LDA $7405 35/A08F: 10 0A BPL $A09B ; branch if targets enemy by default ; target allies 35/A091: A9 40 LDA #$40 ; character target 35/A093: 85 28 STA $28 35/A095: A9 F0 LDA #$F0 ; target all characters 35/A097: 85 27 STA $27 35/A099: D0 3F BNE $A0DA ; target enemies 35/A09B: AD 05 74 LDA $7405 35/A09E: 29 40 AND #$40 35/A0A0: F0 0A BEQ $A0AC ; branch if not multi-target 35/A0A2: A9 C0 LDA #$C0 35/A0A4: 85 28 STA $28 35/A0A6: A9 FF LDA #$FF ; target all monsters 35/A0A8: 85 27 STA $27 35/A0AA: D0 2E BNE $A0DA ; target a random monster 35/A0AC: A9 07 LDA #$07 35/A0AE: 20 64 A5 JSR $A564 ; random (0..A) 35/A0B1: 85 27 STA $27 35/A0B3: A2 40 LDX #$40 35/A0B5: 20 D6 FC JSR $FCD6 ; multiply 35/A0B8: 18 CLC 35/A0B9: A5 1A LDA $1A 35/A0BB: 69 75 ADC #$75 35/A0BD: 85 1A STA $1A 35/A0BF: A5 1B LDA $1B 35/A0C1: 69 76 ADC #$76 35/A0C3: 85 1B STA $1B 35/A0C5: A0 01 LDY #$01 35/A0C7: B1 1A LDA ($1A),Y ; target status 35/A0C9: 29 E0 AND #$E0 35/A0CB: D0 DF BNE $A0AC ; branch if dead, stone, or toad 35/A0CD: A6 27 LDX $27 35/A0CF: A9 00 LDA #$00 35/A0D1: 20 20 FD JSR $FD20 ; set bit 35/A0D4: 85 27 STA $27 35/A0D6: A9 80 LDA #$80 ; monster target 35/A0D8: 85 28 STA $28 35/A0DA: A5 26 LDA $26 ; attack id 35/A0DC: A0 2E LDY #$2E 35/A0DE: 91 6E STA ($6E),Y ; set command id 35/A0E0: C8 INY 35/A0E1: A5 27 LDA $27 35/A0E3: 91 6E STA ($6E),Y ; set targets 35/A0E5: C8 INY 35/A0E6: A5 28 LDA $28 35/A0E8: 91 6E STA ($6E),Y ; set target flags 35/A0EA: A9 75 LDA #$75 35/A0EC: 85 5D STA $5D 35/A0EE: A9 76 LDA #$76 35/A0F0: 85 5E STA $5E 35/A0F2: 68 PLA ; pull summon id 35/A0F3: 48 PHA 35/A0F4: 18 CLC 35/A0F5: 69 78 ADC #$78 ; $0698: summon messages 35/A0F7: 8D DA 78 STA $78DA ; add to battle message queue 35/A0FA: 68 PLA 35/A0FB: 18 CLC 35/A0FC: 69 21 ADC #$21 ; summon name (see 34/910F) 35/A0FE: 8D D9 78 STA $78D9 ; middle right message (see 35/A3A9) 35/A101: 4C E4 9D JMP $9DE4 ; execute action ; [ action $04: fight ] 35/A104: 20 2E A4 JSR $A42E ; get attacker flags 35/A107: 30 03 BMI $A10C ; branch if a monster 35/A109: 4C AC A1 JMP $A1AC 35/A10C: B1 70 LDA ($70),Y 35/A10E: 29 07 AND #$07 ; target slot 35/A110: 85 18 STA $18 35/A112: AA TAX 35/A113: AD EC 7C LDA $7CEC 35/A116: 20 38 FD JSR $FD38 ; check bit 35/A119: D0 03 BNE $A11E ; branch if near fatal 35/A11B: 4C A9 A1 JMP $A1A9 35/A11E: A0 01 LDY #$01 35/A120: B1 70 LDA ($70),Y 35/A122: 29 C0 AND #$C0 35/A124: D0 05 BNE $A12B ; branch if dead or stone 35/A126: C8 INY 35/A127: B1 70 LDA ($70),Y 35/A129: 29 21 AND #$21 35/A12B: D0 7C BNE $A1A9 ; branch if jumping or confused 35/A12D: A9 00 LDA #$00 35/A12F: 85 52 STA $52 35/A131: 85 22 STA $22 35/A133: A5 52 LDA $52 35/A135: 0A ASL 35/A136: 85 19 STA $19 35/A138: AA TAX 35/A139: 95 24 STA $24,X 35/A13B: 20 41 A5 JSR $A541 ; get character offset 35/A13E: A8 TAY 35/A13F: B1 57 LDA ($57),Y 35/A141: C9 07 CMP #$07 35/A143: D0 20 BNE $A165 ; branch if not knight 35/A145: C8 INY 35/A146: B1 5B LDA ($5B),Y 35/A148: 29 C1 AND #$C1 35/A14A: D0 19 BNE $A165 ; branch if dead, stone, or near fatal 35/A14C: C8 INY 35/A14D: B1 5B LDA ($5B),Y 35/A14F: 29 E0 AND #$E0 35/A151: D0 12 BNE $A165 ; branch if paralyzed, asleep, or confused 35/A153: A6 19 LDX $19 35/A155: 20 8D 9B JSR $9B8D ; get current hp pointer 35/A158: B1 5B LDA ($5B),Y ; copy current hp 35/A15A: 95 1A STA $1A,X 35/A15C: C8 INY 35/A15D: B1 5B LDA ($5B),Y 35/A15F: 95 1B STA $1B,X 35/A161: E6 22 INC $22 35/A163: D0 08 BNE $A16D ; branch always 35/A165: A6 19 LDX $19 ; skip this character 35/A167: A9 00 LDA #$00 35/A169: 95 1A STA $1A,X 35/A16B: 95 1B STA $1B,X 35/A16D: E6 52 INC $52 ; next character 35/A16F: A5 52 LDA $52 35/A171: C9 04 CMP #$04 35/A173: D0 BE BNE $A133 35/A175: A5 22 LDA $22 35/A177: F0 30 BEQ $A1A9 ; branch if no knights available 35/A179: 20 0F A3 JSR $A30F ; find highest hp value 35/A17C: A9 00 LDA #$00 35/A17E: 20 20 FD JSR $FD20 ; set bit 35/A181: 8D 99 7E STA $7E99 ; set target 35/A184: 8D DF 7E STA $7EDF ; set "cover" target 35/A187: A6 18 LDX $18 35/A189: A9 00 LDA #$00 35/A18B: 20 20 FD JSR $FD20 ; set bit 35/A18E: 8D E0 7E STA $7EE0 ; target being covered 35/A191: 18 CLC 35/A192: A5 5F LDA $5F 35/A194: 69 75 ADC #$75 35/A196: 85 70 STA $70 35/A198: A9 00 LDA #$00 35/A19A: 69 75 ADC #$75 35/A19C: 85 71 STA $71 35/A19E: A0 33 LDY #$33 35/A1A0: B1 70 LDA ($70),Y ; save front/back row flag 35/A1A2: 8D EA 7C STA $7CEA 35/A1A5: 29 FE AND #$FE ; temporarily front row 35/A1A7: 91 70 STA ($70),Y 35/A1A9: 4C 12 A2 JMP $A212 35/A1AC: 48 PHA 35/A1AD: A0 01 LDY #$01 35/A1AF: B1 6E LDA ($6E),Y 35/A1B1: 29 28 AND #$28 35/A1B3: F0 0B BEQ $A1C0 35/A1B5: 68 PLA 35/A1B6: A9 00 LDA #$00 35/A1B8: 8D 1F 7E STA $7E1F 35/A1BB: 8D 20 7E STA $7E20 35/A1BE: F0 52 BEQ $A212 35/A1C0: 68 PLA 35/A1C1: 29 07 AND #$07 35/A1C3: 85 52 STA $52 35/A1C5: 20 41 A5 JSR $A541 ; get character offset 35/A1C8: 18 CLC 35/A1C9: 69 03 ADC #$03 35/A1CB: A8 TAY 35/A1CC: B1 59 LDA ($59),Y ; right hand weapon id 35/A1CE: 8D 1F 7E STA $7E1F 35/A1D1: C8 INY 35/A1D2: C8 INY 35/A1D3: B1 59 LDA ($59),Y ; left hand weapon id 35/A1D5: 8D 20 7E STA $7E20 35/A1D8: AD 1F 7E LDA $7E1F 35/A1DB: F0 0B BEQ $A1E8 ; branch no right hand weapon 35/A1DD: C9 58 CMP #$58 35/A1DF: 90 15 BCC $A1F6 ; branch if not a shield 35/A1E1: A9 00 LDA #$00 35/A1E3: 8D 1F 7E STA $7E1F 35/A1E6: F0 0E BEQ $A1F6 35/A1E8: AD 20 7E LDA $7E20 35/A1EB: C9 4A CMP #$4A 35/A1ED: 90 23 BCC $A212 ; branch if not a shield, bow, or arrow 35/A1EF: A9 00 LDA #$00 35/A1F1: 8D 20 7E STA $7E20 35/A1F4: F0 1C BEQ $A212 35/A1F6: AD 20 7E LDA $7E20 35/A1F9: F0 0B BEQ $A206 35/A1FB: C9 58 CMP #$58 35/A1FD: 90 13 BCC $A212 35/A1FF: A9 00 LDA #$00 35/A201: 8D 20 7E STA $7E20 35/A204: F0 0C BEQ $A212 35/A206: AD 1F 7E LDA $7E1F 35/A209: C9 4A CMP #$4A 35/A20B: 90 05 BCC $A212 35/A20D: A9 00 LDA #$00 35/A20F: 8D 1F 7E STA $7E1F 35/A212: 20 1E 80 JSR $801E ; do fight effect 35/A215: AD DF 7E LDA $7EDF 35/A218: F0 0F BEQ $A229 ; branch if no "cover" target 35/A21A: AE EE 78 LDX $78EE 35/A21D: A9 52 LDA #$52 ; $0672: "ナイトが みをていして かばった!" / "Knight guards ally" 35/A21F: 9D DA 78 STA $78DA,X 35/A222: A0 33 LDY #$33 35/A224: AD EA 7C LDA $7CEA ; restore front/back row flag 35/A227: 91 70 STA ($70),Y 35/A229: 18 CLC 35/A22A: A5 7C LDA $7C 35/A22C: 65 7D ADC $7D 35/A22E: C9 21 CMP #$21 ; max 32 hits shown 35/A230: 90 02 BCC $A234 35/A232: A9 20 LDA #$20 35/A234: 8D D7 78 STA $78D7 ; top right message 35/A237: AD D7 78 LDA $78D7 35/A23A: F0 62 BEQ $A29E 35/A23C: A0 02 LDY #$02 ; status 2 35/A23E: A6 64 LDX $64 35/A240: B5 E0 LDA $E0,X 35/A242: 29 80 AND #$80 35/A244: D0 58 BNE $A29E ; branch if dead 35/A246: E8 INX 35/A247: B5 E0 LDA $E0,X 35/A249: 29 18 AND #$18 35/A24B: F0 51 BEQ $A29E 35/A24D: 38 SEC 35/A24E: E9 08 SBC #$08 35/A250: 29 18 AND #$18 35/A252: D0 41 BNE $A295 35/A254: B5 E0 LDA $E0,X 35/A256: 48 PHA 35/A257: 29 07 AND #$07 35/A259: 95 E0 STA $E0,X 35/A25B: 91 70 STA ($70),Y 35/A25D: A0 2C LDY #$2C 35/A25F: B1 6E LDA ($6E),Y 35/A261: 29 87 AND #$87 35/A263: 85 18 STA $18 35/A265: B1 70 LDA ($70),Y 35/A267: 29 87 AND #$87 35/A269: C5 18 CMP $18 35/A26B: D0 08 BNE $A275 35/A26D: B5 E0 LDA $E0,X 35/A26F: 95 F0 STA $F0,X 35/A271: A0 02 LDY #$02 35/A273: 91 6E STA ($6E),Y 35/A275: 68 PLA 35/A276: A2 00 LDX #$00 35/A278: 0A ASL 35/A279: B0 03 BCS $A27E 35/A27B: E8 INX 35/A27C: D0 FA BNE $A278 35/A27E: 8A TXA 35/A27F: 18 CLC 35/A280: 69 02 ADC #$02 35/A282: 8D D9 78 STA $78D9 35/A285: A0 2C LDY #$2C 35/A287: B1 70 LDA ($70),Y 35/A289: 29 E7 AND #$E7 35/A28B: 91 70 STA ($70),Y 35/A28D: A0 2E LDY #$2E 35/A28F: A9 00 LDA #$00 35/A291: 91 70 STA ($70),Y ; set attack id 35/A293: F0 09 BEQ $A29E 35/A295: B5 E0 LDA $E0,X 35/A297: 38 SEC 35/A298: E9 08 SBC #$08 35/A29A: 95 E0 STA $E0,X 35/A29C: 91 70 STA ($70),Y 35/A29E: A6 64 LDX $64 35/A2A0: B5 E0 LDA $E0,X 35/A2A2: 29 80 AND #$80 35/A2A4: F0 11 BEQ $A2B7 ; branch if not dead 35/A2A6: AE EE 78 LDX $78EE 35/A2A9: A9 1A LDA #$1A ; $063A: "しんでしまった!" / "Slain" 35/A2AB: 9D DA 78 STA $78DA,X 35/A2AE: A0 2C LDY #$2C 35/A2B0: B1 70 LDA ($70),Y 35/A2B2: 10 03 BPL $A2B7 35/A2B4: FE DA 78 INC $78DA,X ; $063B: "てきをたおした!" / "Defeated" 35/A2B7: A9 00 LDA #$00 ; action script $00: fight 35/A2B9: 8D D5 78 STA $78D5 35/A2BC: 85 24 STA $24 35/A2BE: 20 2E A4 JSR $A42E ; get attacker flags 35/A2C1: 30 4B BMI $A30E 35/A2C3: 29 07 AND #$07 35/A2C5: 85 52 STA $52 35/A2C7: 20 41 A5 JSR $A541 ; get character offset 35/A2CA: 18 CLC 35/A2CB: 69 31 ADC #$31 35/A2CD: A8 TAY 35/A2CE: B1 5B LDA ($5B),Y ; right hand weapon type 35/A2D0: 29 04 AND #$04 35/A2D2: F0 09 BEQ $A2DD ; branch if not arrow 35/A2D4: 98 TYA 35/A2D5: 48 PHA 35/A2D6: A9 04 LDA #$04 ; right hand 35/A2D8: 20 53 A3 JSR $A353 ; decrement arrow/shuriken quantity 35/A2DB: 68 PLA 35/A2DC: A8 TAY 35/A2DD: C8 INY 35/A2DE: B1 5B LDA ($5B),Y ; left hand weapon type 35/A2E0: 29 04 AND #$04 35/A2E2: F0 05 BEQ $A2E9 ; branch if not arrow 35/A2E4: A9 06 LDA #$06 ; left hand 35/A2E6: 20 53 A3 JSR $A353 ; decrement arrow/shuriken quantity 35/A2E9: 20 8D 9B JSR $9B8D ; get equipped weapon pointer 35/A2EC: B1 59 LDA ($59),Y 35/A2EE: C9 41 CMP #$41 ; shuriken 35/A2F0: D0 05 BNE $A2F7 35/A2F2: A9 04 LDA #$04 ; right hand 35/A2F4: 20 53 A3 JSR $A353 ; decrement arrow/shuriken quantity 35/A2F7: A9 05 LDA #$05 35/A2F9: 20 88 9B JSR $9B88 ; add character offset 35/A2FC: B1 59 LDA ($59),Y 35/A2FE: C9 41 CMP #$41 ; shuriken 35/A300: D0 05 BNE $A307 35/A302: A9 06 LDA #$06 ; left hand 35/A304: 20 53 A3 JSR $A353 ; decrement arrow/shuriken quantity 35/A307: A5 24 LDA $24 35/A309: F0 03 BEQ $A30E ; branch if arrow/shuriken didn't run out 35/A30B: 20 26 80 JSR $8026 ; update character equipment 35/A30E: 60 RTS ; [ find highest hp value ] 35/A30F: A0 00 LDY #$00 35/A311: A2 02 LDX #$02 35/A313: 38 SEC 35/A314: B9 1A 00 LDA $001A,Y 35/A317: F5 1A SBC $1A,X 35/A319: B9 1B 00 LDA $001B,Y 35/A31C: F5 1B SBC $1B,X 35/A31E: B0 24 BCS $A344 35/A320: B5 1A LDA $1A,X 35/A322: 48 PHA 35/A323: B9 1A 00 LDA $001A,Y 35/A326: 95 1A STA $1A,X 35/A328: 68 PLA 35/A329: 99 1A 00 STA $001A,Y 35/A32C: B5 1B LDA $1B,X 35/A32E: 48 PHA 35/A32F: B9 1B 00 LDA $001B,Y 35/A332: 95 1B STA $1B,X 35/A334: 68 PLA 35/A335: 99 1B 00 STA $001B,Y 35/A338: B9 24 00 LDA $0024,Y 35/A33B: 48 PHA 35/A33C: B5 24 LDA $24,X 35/A33E: 99 24 00 STA $0024,Y 35/A341: 68 PLA 35/A342: 95 24 STA $24,X 35/A344: E8 INX 35/A345: E8 INX 35/A346: E0 08 CPX #$08 35/A348: D0 C9 BNE $A313 35/A34A: A5 24 LDA $24 35/A34C: 4A LSR 35/A34D: 85 52 STA $52 35/A34F: AA TAX 35/A350: 4C 41 A5 JMP $A541 ; get character offset ; [ decrement arrow/shuriken quantity ] ; A: 4 = right hand, 6 = left hand 35/A353: 20 88 9B JSR $9B88 ; add character offset 35/A356: 38 SEC 35/A357: B1 59 LDA ($59),Y 35/A359: E9 01 SBC #$01 35/A35B: 91 59 STA ($59),Y 35/A35D: D0 07 BNE $A366 35/A35F: 88 DEY 35/A360: A9 00 LDA #$00 ; remove arrow item if none left 35/A362: 91 59 STA ($59),Y 35/A364: E6 24 INC $24 ; need to update character equipment 35/A366: 60 RTS ; [ action $14: magic ] 35/A367: A5 1A LDA $1A ; spell/attack id 35/A369: 48 PHA 35/A36A: 48 PHA 35/A36B: 20 2E A4 JSR $A42E ; get attacker flags 35/A36E: 29 10 AND #$10 35/A370: F0 09 BEQ $A37B 35/A372: A5 1A LDA $1A 35/A374: 09 80 ORA #$80 35/A376: 8D D7 78 STA $78D7 ; spell name id for message 35/A379: D0 0C BNE $A387 35/A37B: 68 PLA 35/A37C: 38 SEC 35/A37D: A5 1A LDA $1A 35/A37F: E9 C8 SBC #$C8 35/A381: 48 PHA 35/A382: 09 80 ORA #$80 35/A384: 8D D7 78 STA $78D7 35/A387: 68 PLA 35/A388: C9 04 CMP #$04 35/A38A: F0 15 BEQ $A3A1 35/A38C: C9 19 CMP #$19 35/A38E: F0 11 BEQ $A3A1 35/A390: C9 12 CMP #$12 35/A392: F0 04 BEQ $A398 35/A394: C9 0B CMP #$0B 35/A396: D0 06 BNE $A39E 35/A398: A0 01 LDY #$01 35/A39A: B1 70 LDA ($70),Y 35/A39C: 10 03 BPL $A3A1 35/A39E: 20 D7 A3 JSR $A3D7 ; validate targets 35/A3A1: 68 PLA 35/A3A2: 85 1A STA $1A 35/A3A4: A9 01 LDA #$01 ; action script $01: magic/command 35/A3A6: 8D D5 78 STA $78D5 35/A3A9: AD D9 78 LDA $78D9 ; summon name id (see 35/A0FE) 35/A3AC: C9 FF CMP #$FF 35/A3AE: F0 08 BEQ $A3B8 ; branch if no summon name 35/A3B0: 8D D7 78 STA $78D7 35/A3B3: A9 FF LDA #$FF ; clear middle right message 35/A3B5: 8D D9 78 STA $78D9 35/A3B8: 4C 12 80 JMP $8012 ; do magic effect ; [ action $13: item ] 35/A3BB: A5 1A LDA $1A ; item id 35/A3BD: 48 PHA 35/A3BE: C9 A9 CMP #$A9 35/A3C0: F0 0D BEQ $A3CF ; branch if phoenix down 35/A3C2: C9 AA CMP #$AA 35/A3C4: D0 06 BNE $A3CC ; branch if not soft 35/A3C6: A0 01 LDY #$01 35/A3C8: B1 70 LDA ($70),Y 35/A3CA: 10 03 BPL $A3CF ; branch if target is dead/stone 35/A3CC: 20 D7 A3 JSR $A3D7 ; validate targets 35/A3CF: 68 PLA 35/A3D0: 85 1A STA $1A 35/A3D2: E6 CC INC $CC 35/A3D4: 4C 22 80 JMP $8022 ; do item effect ; [ validate targets ] ; removes dead/stone/jumping targets 35/A3D7: A9 00 LDA #$00 35/A3D9: 85 24 STA $24 35/A3DB: AD 9A 7E LDA $7E9A 35/A3DE: 29 40 AND #$40 35/A3E0: F0 08 BEQ $A3EA ; branch if target is a character 35/A3E2: 18 CLC 35/A3E3: A5 24 LDA $24 35/A3E5: 69 04 ADC #$04 35/A3E7: 4C EC A3 JMP $A3EC 35/A3EA: A5 24 LDA $24 35/A3EC: A2 40 LDX #$40 35/A3EE: 20 D6 FC JSR $FCD6 ; multiply 35/A3F1: 18 CLC 35/A3F2: A5 1A LDA $1A 35/A3F4: 69 75 ADC #$75 ; $7575 (target properties) 35/A3F6: 85 1A STA $1A 35/A3F8: A5 1B LDA $1B 35/A3FA: 69 75 ADC #$75 35/A3FC: 85 1B STA $1B 35/A3FE: A6 24 LDX $24 35/A400: AD 99 7E LDA $7E99 ; target mask 35/A403: 20 38 FD JSR $FD38 ; check bit 35/A406: F0 18 BEQ $A420 ; branch if not targeted 35/A408: A0 01 LDY #$01 35/A40A: B1 1A LDA ($1A),Y 35/A40C: 29 C0 AND #$C0 35/A40E: D0 07 BNE $A417 ; branch if dead/stone 35/A410: C8 INY 35/A411: B1 1A LDA ($1A),Y 35/A413: 29 01 AND #$01 35/A415: F0 09 BEQ $A420 ; branch if not jumping 35/A417: AD 99 7E LDA $7E99 ; remove target 35/A41A: 20 2C FD JSR $FD2C ; clear bit 35/A41D: 8D 99 7E STA $7E99 35/A420: E6 24 INC $24 35/A422: A5 24 LDA $24 35/A424: C9 08 CMP #$08 35/A426: D0 B3 BNE $A3DB 35/A428: AD 99 7E LDA $7E99 35/A42B: 8D 9B 7E STA $7E9B ; fallthrough ; [ get attacker flags ] 35/A42E: A0 2C LDY #$2C 35/A430: B1 6E LDA ($6E),Y 35/A432: 60 RTS ; [ check if done getting character actions ] ; if there are no more player-controlled characters or all characters have ; chosen an action, pull return address and return from subroutine 34/986C 35/A433: A5 52 LDA $52 ; save current character 35/A435: 48 PHA 35/A436: A5 52 LDA $52 35/A438: C9 04 CMP #$04 35/A43A: F0 0E BEQ $A44A ; branch if done choosing actions 35/A43C: 20 4E A4 JSR $A44E ; check if player controls character 35/A43F: F0 05 BEQ $A446 35/A441: E6 52 INC $52 35/A443: 18 CLC 35/A444: 90 F0 BCC $A436 35/A446: 68 PLA 35/A447: 85 52 STA $52 ; restore current character 35/A449: 60 RTS 35/A44A: 68 PLA 35/A44B: 68 PLA ; pull return address 35/A44C: 68 PLA 35/A44D: 60 RTS ; [ check if player controls character ] 35/A44E: A5 52 LDA $52 35/A450: 0A ASL 35/A451: AA TAX 35/A452: BD BB 78 LDA $78BB,X 35/A455: 29 F8 AND #$F8 ; check for dead, stone, paralyze, sleep, confuse ??? 35/A457: 60 RTS ; -------------------------------------------------------------------------- ; [ check if battle is over ] 35/A458: AD D3 78 LDA $78D3 35/A45B: 29 02 AND #$02 35/A45D: D0 27 BNE $A486 35/A45F: A9 00 LDA #$00 35/A461: 85 52 STA $52 35/A463: 20 41 A5 JSR $A541 ; get character offset 35/A466: 18 CLC 35/A467: 69 01 ADC #$01 35/A469: A8 TAY 35/A46A: B1 5B LDA ($5B),Y 35/A46C: 29 C0 AND #$C0 35/A46E: F0 0C BEQ $A47C ; branch if character is dead 35/A470: E6 52 INC $52 35/A472: A5 52 LDA $52 35/A474: C9 04 CMP #$04 35/A476: D0 EB BNE $A463 35/A478: A9 80 LDA #$80 ; defeat 35/A47A: D0 07 BNE $A483 35/A47C: AD D2 7D LDA $7DD2 ; total number of monsters remaining 35/A47F: D0 05 BNE $A486 35/A481: A9 40 LDA #$40 ; victory 35/A483: 8D D3 78 STA $78D3 35/A486: 60 RTS ; [ init cannon blast ] 35/A487: A9 FF LDA #$FF 35/A489: A2 1F LDX #$1F 35/A48B: 9D 4F 7E STA $7E4F,X ; reset damage numeral buffer 35/A48E: CA DEX 35/A48F: 10 FA BPL $A48B 35/A491: A9 15 LDA #$15 35/A493: 8D C2 7E STA $7EC2 35/A496: A9 00 LDA #$00 35/A498: 85 47 STA $47 35/A49A: A2 1F LDX #$1F 35/A49C: 95 E0 STA $E0,X 35/A49E: CA DEX 35/A49F: 10 FB BPL $A49C 35/A4A1: A9 75 LDA #$75 ; +$2C: $7675 (monster properties) 35/A4A3: 85 2C STA $2C 35/A4A5: A9 76 LDA #$76 35/A4A7: 85 2D STA $2D 35/A4A9: A0 01 LDY #$01 35/A4AB: B1 2C LDA ($2C),Y 35/A4AD: 29 80 AND #$80 35/A4AF: D0 3F BNE $A4F0 ; branch if dead 35/A4B1: A9 3E LDA #$3E 35/A4B3: 20 64 A5 JSR $A564 ; random (0..A) 35/A4B6: 18 CLC 35/A4B7: 69 FA ADC #$FA ; damage: (250..312) 35/A4B9: 85 24 STA $24 35/A4BB: A9 00 LDA #$00 35/A4BD: 69 00 ADC #$00 35/A4BF: 85 25 STA $25 35/A4C1: A5 47 LDA $47 35/A4C3: 0A ASL 35/A4C4: AA TAX 35/A4C5: A5 24 LDA $24 35/A4C7: 9D 4F 7E STA $7E4F,X ; copy to damage numeral buffer 35/A4CA: E8 INX 35/A4CB: A5 25 LDA $25 35/A4CD: 9D 4F 7E STA $7E4F,X 35/A4D0: 38 SEC 35/A4D1: A0 03 LDY #$03 35/A4D3: B1 2C LDA ($2C),Y ; subtract hp 35/A4D5: E5 24 SBC $24 35/A4D7: 91 2C STA ($2C),Y 35/A4D9: C8 INY 35/A4DA: B1 2C LDA ($2C),Y 35/A4DC: E5 25 SBC $25 35/A4DE: 91 2C STA ($2C),Y 35/A4E0: B0 0E BCS $A4F0 ; branch if not dead 35/A4E2: A0 01 LDY #$01 35/A4E4: A9 80 LDA #$80 35/A4E6: 91 2C STA ($2C),Y ; set dead status 35/A4E8: A5 47 LDA $47 35/A4EA: 0A ASL 35/A4EB: AA TAX 35/A4EC: A9 80 LDA #$80 35/A4EE: 95 E0 STA $E0,X 35/A4F0: 18 CLC ; next monster 35/A4F1: A5 2C LDA $2C 35/A4F3: 69 40 ADC #$40 35/A4F5: 85 2C STA $2C 35/A4F7: A5 2D LDA $2D 35/A4F9: 69 00 ADC #$00 35/A4FB: 85 2D STA $2D 35/A4FD: E6 47 INC $47 35/A4FF: A5 47 LDA $47 35/A501: C9 08 CMP #$08 35/A503: D0 A4 BNE $A4A9 35/A505: A9 40 LDA #$40 ; character attacker, monster target 35/A507: 8D 9A 7E STA $7E9A 35/A50A: 60 RTS ; [ do cannon blast ] 35/A50B: A9 0F LDA #$0F 35/A50D: 20 0E FA JSR $FA0E ; execute battle graphics 35/A510: A9 3D LDA #$3D ; $065D: "たいほうの えんごしゃげき!" / "Cannon blast!" 35/A512: 8D DA 78 STA $78DA 35/A515: AD D8 7E LDA $7ED8 ; disable cannon blast 35/A518: 29 DF AND #$DF 35/A51A: 8D D8 7E STA $7ED8 35/A51D: 20 0B 8F JSR $8F0B 35/A520: A9 03 LDA #$03 ; action script $03: invincible cannon attack 35/A522: 8D D5 78 STA $78D5 35/A525: 20 F7 8F JSR $8FF7 ; execute action script 35/A528: 20 58 A4 JSR $A458 ; check if battle is over 35/A52B: AD D3 78 LDA $78D3 35/A52E: C9 40 CMP #$40 35/A530: D0 0A BNE $A53C ; branch if no monsters remaining 35/A532: 68 PLA 35/A533: 68 PLA 35/A534: 68 PLA 35/A535: 68 PLA 35/A536: AD D3 78 LDA $78D3 35/A539: 4C 1C 81 JMP $811C 35/A53C: A9 0E LDA #$0E 35/A53E: 4C 0E FA JMP $FA0E ; execute battle graphics ; [ get character offset ] ; $52: character index ; +$5F: pointer (out) 35/A541: A5 52 LDA $52 35/A543: 20 3C FD JSR $FD3C ; asl6 35/A546: 85 5F STA $5F 35/A548: 60 RTS ; [ write spaces to text buffer ] ; X: number of spaces to write 35/A549: A9 00 LDA #$00 35/A54B: 9D D7 7A STA $7AD7,X ; clear text buffer 35/A54E: CA DEX 35/A54F: A9 FF LDA #$FF 35/A551: 9D D7 7A STA $7AD7,X 35/A554: CA DEX 35/A555: 10 FA BPL $A551 35/A557: 60 RTS ; [ add to text buffer offset ] 35/A558: 18 CLC 35/A559: 65 4E ADC $4E 35/A55B: 85 4E STA $4E 35/A55D: A9 00 LDA #$00 35/A55F: 65 4F ADC $4F 35/A561: 85 4F STA $4F 35/A563: 60 RTS ; [ random (0..A) ] 35/A564: 48 PHA 35/A565: A9 01 LDA #$01 ; rng 1 35/A567: 85 21 STA $21 35/A569: A2 00 LDX #$00 35/A56B: 68 PLA 35/A56C: 4C EF FB JMP $FBEF ; random (X..A) ; [ show magic message ] 35/A56F: AD 88 7E LDA $7E88 ; magic id 35/A572: 85 24 STA $24 35/A574: C9 FF CMP #$FF 35/A576: F0 64 BEQ $A5DC ; branch if no spell 35/A578: C9 5B CMP #$5B 35/A57A: B0 60 BCS $A5DC ; branch if not a valid spell id 35/A57C: AD DA 78 LDA $78DA ; first battle message in queue 35/A57F: C9 44 CMP #$44 35/A581: F0 79 BEQ $A5FC ; return if $0664: "ようすをみている" / "Searching…" 35/A583: AD 9B 7E LDA $7E9B 35/A586: D0 10 BNE $A598 ; branch if there are valid targets 35/A588: A5 54 LDA $54 35/A58A: C9 03 CMP #$03 35/A58C: F0 4E BEQ $A5DC ; branch if terrain misfire 35/A58E: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 35/A590: AE EE 78 LDX $78EE 35/A593: 9D DA 78 STA $78DA,X 35/A596: F0 44 BEQ $A5DC ; this should be BNE ??? 35/A598: A5 54 LDA $54 35/A59A: C9 05 CMP #$05 35/A59C: F0 08 BEQ $A5A6 35/A59E: C9 04 CMP #$04 35/A5A0: D0 0C BNE $A5AE ; 4: cast life on undead monster 35/A5A2: A9 01 LDA #$01 ; death spell 35/A5A4: D0 02 BNE $A5A8 ; 5: cast death on undead monster 35/A5A6: A9 34 LDA #$34 ; life spell 35/A5A8: 85 24 STA $24 35/A5AA: A9 00 LDA #$00 ; normal message 35/A5AC: 85 54 STA $54 ; 0,1,2,3: other spells 35/A5AE: AE EE 78 LDX $78EE 35/A5B1: BD DA 78 LDA $78DA,X 35/A5B4: D0 04 BNE $A5BA 35/A5B6: A9 FF LDA #$FF 35/A5B8: D0 D9 BNE $A593 35/A5BA: A5 24 LDA $24 35/A5BC: 48 PHA 35/A5BD: 29 F8 AND #$F8 35/A5BF: 20 46 FD JSR $FD46 ; lsr3 35/A5C2: AA TAX 35/A5C3: 68 PLA 35/A5C4: 29 07 AND #$07 35/A5C6: A8 TAY 35/A5C7: C8 INY 35/A5C8: BD FD A5 LDA $A5FD,X ; get bit 35/A5CB: 0A ASL 35/A5CC: 88 DEY 35/A5CD: D0 FC BNE $A5CB 35/A5CF: 90 0B BCC $A5DC ; branch if no message for this spell 35/A5D1: AE EE 78 LDX $78EE ; battle message queue size 35/A5D4: 18 CLC 35/A5D5: A5 24 LDA $24 35/A5D7: 69 20 ADC #$20 ; text strings $0640-$06AF (magic messages) 35/A5D9: 9D DA 78 STA $78DA,X 35/A5DC: AE EE 78 LDX $78EE 35/A5DF: A5 54 LDA $54 35/A5E1: F0 15 BEQ $A5F8 ; return if no message 35/A5E3: C9 02 CMP #$02 35/A5E5: F0 0C BEQ $A5F3 35/A5E7: C9 01 CMP #$01 35/A5E9: F0 04 BEQ $A5EF 35/A5EB: A9 4F LDA #$4F ; $066F: "しっぱい!ダメージがもどってきた!" / "Backfired!" 35/A5ED: D0 06 BNE $A5F5 35/A5EF: A9 45 LDA #$45 ; $0665: "アンデッドにダメージ!" / "Damages undead" 35/A5F1: D0 02 BNE $A5F5 35/A5F3: A9 01 LDA #$01 ; $0621: "まほうをきゅうしゅうした!" / "Absorbed!" 35/A5F5: 9D DA 78 STA $78DA,X 35/A5F8: A9 00 LDA #$00 35/A5FA: 85 54 STA $54 35/A5FC: 60 RTS ; spells with a magic message $0640-$069F (1 bit each) 35/A5FD: 58 B8 93 EB 03 00 0A 01 90 DF FF 00 ; [ load text string ] ; A: string id ; X: destination offset 35/A609: 85 1A STA $1A 35/A60B: 8A TXA 35/A60C: 48 PHA 35/A60D: 20 60 FD JSR $FD60 ; get pointer to text string 35/A610: A5 18 LDA $18 35/A612: 48 PHA 35/A613: A5 19 LDA $19 35/A615: 48 PHA 35/A616: A9 00 LDA #$00 35/A618: 85 1A STA $1A 35/A61A: A9 40 LDA #$40 35/A61C: 85 1B STA $1B 35/A61E: 20 92 FC JSR $FC92 ; divide (16-bit) 35/A621: A5 1C LDA $1C 35/A623: 18 CLC 35/A624: 69 0C ADC #$0C ; bank offset (18/8000) 35/A626: A8 TAY 35/A627: 68 PLA 35/A628: 85 19 STA $19 35/A62A: 68 PLA 35/A62B: 85 18 STA $18 35/A62D: C0 0F CPY #$0F 35/A62F: F0 28 BEQ $A659 35/A631: C0 0E CPY #$0E 35/A633: F0 31 BEQ $A666 35/A635: C0 0D CPY #$0D 35/A637: D0 10 BNE $A649 ; bank 0D 35/A639: 18 CLC 35/A63A: A5 18 LDA $18 35/A63C: 69 00 ADC #$00 35/A63E: 85 18 STA $18 35/A640: A5 19 LDA $19 35/A642: 69 40 ADC #$40 35/A644: 85 19 STA $19 35/A646: 4C 66 A6 JMP $A666 ; bank 0C 35/A649: 18 CLC 35/A64A: A5 18 LDA $18 35/A64C: 69 00 ADC #$00 35/A64E: 85 18 STA $18 35/A650: A5 19 LDA $19 35/A652: 69 80 ADC #$80 35/A654: 85 19 STA $19 35/A656: 4C 66 A6 JMP $A666 ; bank 0F 35/A659: 38 SEC 35/A65A: A5 18 LDA $18 35/A65C: E9 00 SBC #$00 35/A65E: 85 18 STA $18 35/A660: A5 19 LDA $19 35/A662: E9 40 SBC #$40 35/A664: 85 19 STA $19 ; bank 0E 35/A666: 68 PLA 35/A667: AA TAX 35/A668: 98 TYA 35/A669: 4C 4A FD JMP $FD4A ; get text string ; -------------------------------------------------------------------------- ; [ get confused/asleep/paralyzed action ] 35/A66C: A4 5F LDY $5F 35/A66E: C8 INY 35/A66F: C8 INY 35/A670: B1 5B LDA ($5B),Y 35/A672: 29 20 AND #$20 35/A674: F0 08 BEQ $A67E ; branch if not confused 35/A676: 20 36 80 JSR $8036 ; get confused attack 35/A679: E6 52 INC $52 35/A67B: 4C 6F 98 JMP $986F ; next character 35/A67E: 20 9B 9B JSR $9B9B ; get action pointer 35/A681: A9 01 LDA #$01 35/A683: 91 5B STA ($5B),Y ; action $01 (asleep/paralyzed) 35/A685: E6 52 INC $52 35/A687: 4C 6F 98 JMP $986F ; next character ; [ action $01: asleep/paralyzed ] 35/A68A: 20 CE 91 JSR $91CE ; clear target message 35/A68D: 20 2E A4 JSR $A42E ; get attacker flags 35/A690: 48 PHA 35/A691: 29 07 AND #$07 35/A693: 0A ASL 35/A694: AA TAX 35/A695: E8 INX 35/A696: A0 02 LDY #$02 35/A698: B1 6E LDA ($6E),Y ; copy status to buffer 35/A69A: 9D F0 00 STA $00F0,X 35/A69D: 68 PLA 35/A69E: 30 14 BMI $A6B4 ; branch if a monster 35/A6A0: A0 2B LDY #$2B 35/A6A2: 18 CLC 35/A6A3: B1 6E LDA ($6E),Y ; sleep probability 35/A6A5: 69 32 ADC #$32 35/A6A7: 85 24 STA $24 35/A6A9: A9 64 LDA #$64 35/A6AB: 20 64 A5 JSR $A564 ; random (0..A) 35/A6AE: C5 24 CMP $24 35/A6B0: B0 4E BCS $A700 ; remain asleep/paralyzed 35/A6B2: 90 12 BCC $A6C6 ; remove status 35/A6B4: A0 00 LDY #$00 35/A6B6: 18 CLC 35/A6B7: B1 6E LDA ($6E),Y ; level 35/A6B9: 69 32 ADC #$32 35/A6BB: 85 24 STA $24 35/A6BD: A9 64 LDA #$64 35/A6BF: 20 64 A5 JSR $A564 ; random (0..A) 35/A6C2: C5 24 CMP $24 35/A6C4: B0 3A BCS $A700 35/A6C6: 20 2E A4 JSR $A42E ; get attacker flags 35/A6C9: A0 02 LDY #$02 35/A6CB: 29 07 AND #$07 35/A6CD: 0A ASL 35/A6CE: AA TAX 35/A6CF: E8 INX 35/A6D0: B5 F0 LDA $F0,X 35/A6D2: 29 18 AND #$18 35/A6D4: 38 SEC 35/A6D5: E9 08 SBC #$08 35/A6D7: 29 18 AND #$18 35/A6D9: D0 1C BNE $A6F7 35/A6DB: B5 F0 LDA $F0,X 35/A6DD: 48 PHA 35/A6DE: 29 07 AND #$07 35/A6E0: 95 F0 STA $F0,X ; remove status 35/A6E2: 91 6E STA ($6E),Y 35/A6E4: 68 PLA 35/A6E5: A2 00 LDX #$00 35/A6E7: 0A ASL 35/A6E8: B0 03 BCS $A6ED 35/A6EA: E8 INX 35/A6EB: D0 FA BNE $A6E7 35/A6ED: 8A TXA 35/A6EE: 18 CLC 35/A6EF: 69 54 ADC #$54 ; $010E: status removed messages 35/A6F1: 8D D7 78 STA $78D7 35/A6F4: 18 CLC 35/A6F5: 90 24 BCC $A71B ; return 35/A6F7: B5 F0 LDA $F0,X 35/A6F9: 38 SEC 35/A6FA: E9 08 SBC #$08 35/A6FC: 95 F0 STA $F0,X 35/A6FE: 91 6E STA ($6E),Y 35/A700: 20 2E A4 JSR $A42E ; get attacker flags 35/A703: A0 02 LDY #$02 35/A705: 29 07 AND #$07 35/A707: 0A ASL 35/A708: AA TAX 35/A709: E8 INX 35/A70A: B5 F0 LDA $F0,X ; status not removed 35/A70C: A2 00 LDX #$00 35/A70E: 0A ASL 35/A70F: B0 03 BCS $A714 35/A711: E8 INX 35/A712: D0 FA BNE $A70E 35/A714: 8A TXA 35/A715: 18 CLC 35/A716: 69 5E ADC #$5E ; $0118: status active messages 35/A718: 8D D7 78 STA $78D7 35/A71B: 60 RTS ; [ battle command $02: change to front row ] 35/A71C: A9 0F LDA #$0F 35/A71E: 20 88 9B JSR $9B88 ; add character offset 35/A721: B1 59 LDA ($59),Y 35/A723: 29 01 AND #$01 35/A725: D0 06 BNE $A72D ; branch if back row 35/A727: 20 81 9B JSR $9B81 ; play error sound effect 35/A72A: 4C C8 A7 JMP $A7C8 35/A72D: 20 CD A7 JSR $A7CD ; init front/back row cursor sprite 35/A730: 48 PHA 35/A731: A9 43 LDA #$43 ; arrow pointing left 35/A733: 8D 22 02 STA $0222 35/A736: 68 PLA 35/A737: AA TAX 35/A738: BD 23 A8 LDA $A823,X 35/A73B: 8D 20 02 STA $0220 35/A73E: E8 INX 35/A73F: BD 23 A8 LDA $A823,X 35/A742: 8D 23 02 STA $0223 35/A745: A9 80 LDA #$80 35/A747: 85 18 STA $18 35/A749: A9 02 LDA #$02 35/A74B: 85 19 STA $19 35/A74D: 4C 84 A7 JMP $A784 ; [ battle command $03: change to back row ] 35/A750: A9 0F LDA #$0F 35/A752: 20 88 9B JSR $9B88 ; add character offset 35/A755: B1 59 LDA ($59),Y 35/A757: 29 01 AND #$01 35/A759: F0 06 BEQ $A761 ; branch if front row 35/A75B: 20 81 9B JSR $9B81 ; play error sound effect 35/A75E: 4C C8 A7 JMP $A7C8 35/A761: 20 CD A7 JSR $A7CD ; init front/back row cursor sprite 35/A764: 48 PHA 35/A765: A9 03 LDA #$03 ; arrow pointing right 35/A767: 8D 22 02 STA $0222 35/A76A: 68 PLA 35/A76B: 18 CLC 35/A76C: 69 02 ADC #$02 35/A76E: AA TAX 35/A76F: BD 23 A8 LDA $A823,X 35/A772: 8D 20 02 STA $0220 35/A775: E8 INX 35/A776: BD 23 A8 LDA $A823,X 35/A779: 8D 23 02 STA $0223 35/A77C: A9 40 LDA #$40 35/A77E: 85 18 STA $18 35/A780: A9 03 LDA #$03 ; action $03 35/A782: 85 19 STA $19 ; common code for front/back 35/A784: AD BA 78 LDA $78BA 35/A787: 29 08 AND #$08 35/A789: F0 19 BEQ $A7A4 35/A78B: BD 33 A8 LDA $A833,X 35/A78E: 8D 23 02 STA $0223 35/A791: AD 22 02 LDA $0222 35/A794: 49 40 EOR #$40 35/A796: 8D 22 02 STA $0222 35/A799: A5 18 LDA $18 35/A79B: 30 04 BMI $A7A1 35/A79D: 0A ASL 35/A79E: 18 CLC 35/A79F: 90 01 BCC $A7A2 35/A7A1: 4A LSR 35/A7A2: 85 18 STA $18 35/A7A4: 20 85 81 JSR $8185 ; wait one frame 35/A7A7: 20 AA FB JSR $FBAA ; update joypad input 35/A7AA: A5 12 LDA $12 35/A7AC: F0 F6 BEQ $A7A4 ; wait for any button 35/A7AE: C9 01 CMP #$01 35/A7B0: F0 0A BEQ $A7BC 35/A7B2: C9 02 CMP #$02 35/A7B4: F0 12 BEQ $A7C8 35/A7B6: C5 18 CMP $18 35/A7B8: D0 EA BNE $A7A4 35/A7BA: F0 0C BEQ $A7C8 35/A7BC: 20 7D 9B JSR $9B7D ; play confirm sound effect 35/A7BF: E6 52 INC $52 35/A7C1: 20 9B 9B JSR $9B9B ; get action pointer 35/A7C4: A5 19 LDA $19 35/A7C6: 91 5B STA ($5B),Y ; set action id 35/A7C8: A9 01 LDA #$01 35/A7CA: 4C FD 99 JMP $99FD ; command confirmed ; [ init front/back row cursor sprite ] 35/A7CD: A9 00 LDA #$00 35/A7CF: 85 18 STA $18 35/A7D1: 20 DF 8A JSR $8ADF ; hide cursor 35/A7D4: A9 5D LDA #$5D 35/A7D6: 8D 21 02 STA $0221 35/A7D9: A5 52 LDA $52 35/A7DB: 20 40 FD JSR $FD40 ; asl2 35/A7DE: 60 RTS ; [ action $02: change to front row ] 35/A7DF: A9 3B LDA #$3B ; $0622: "ぜんしん" / "Advance" 35/A7E1: 8D D7 78 STA $78D7 ; attack name 35/A7E4: 20 CE 91 JSR $91CE ; clear target message 35/A7E7: 4C F2 A7 JMP $A7F2 ; [ action $03: change to back row ] 35/A7EA: A9 3C LDA #$3C ; $0623: "こうたい" / "Fall back" 35/A7EC: 8D D7 78 STA $78D7 35/A7EF: 20 CE 91 JSR $91CE ; clear target message 35/A7F2: A9 01 LDA #$01 ; action script $01: magic/command 35/A7F4: 8D D5 78 STA $78D5 35/A7F7: A0 33 LDY #$33 35/A7F9: B1 6E LDA ($6E),Y 35/A7FB: 20 16 A8 JSR $A816 ; toggle row 35/A7FE: 91 6E STA ($6E),Y 35/A800: 20 2E A4 JSR $A42E ; get attacker flags 35/A803: 29 07 AND #$07 35/A805: 85 52 STA $52 35/A807: 20 41 A5 JSR $A541 ; get character offset 35/A80A: 18 CLC 35/A80B: 69 0F ADC #$0F 35/A80D: A8 TAY 35/A80E: B1 59 LDA ($59),Y 35/A810: 20 16 A8 JSR $A816 ; toggle row 35/A813: 91 59 STA ($59),Y 35/A815: 60 RTS ; [ toggle row ] 35/A816: 48 PHA 35/A817: 29 01 AND #$01 35/A819: 49 01 EOR #$01 35/A81B: 85 18 STA $18 35/A81D: 68 PLA 35/A81E: 29 FE AND #$FE 35/A820: 05 18 ORA $18 35/A822: 60 RTS ; sprite positions for front/back row arrow 35/A823: 34 B4 35/A825: 34 D4 35/A827: 50 B4 35/A829: 50 D4 35/A82B: 6C B4 35/A82D: 6C D4 35/A82F: 88 B4 35/A831: 88 D4 35/A833: 34 44 35/A835: 34 24 35/A837: 50 44 35/A839: 50 24 35/A83B: 6C 44 35/A83D: 6C 24 35/A83F: 88 44 35/A841: 88 24 ; [ battle command $04: attack ] 35/A843: A9 04 LDA #$04 35/A845: 20 48 A8 JSR $A848 ; do command ; [ do command ] ; does not return to calling function! ; A: command id 35/A848: 85 54 STA $54 ; $54 is scratchpad in this subroutine 35/A84A: A9 00 LDA #$00 35/A84C: 85 B3 STA $B3 35/A84E: A9 10 LDA #$10 ; choose targets 35/A850: 20 0E FA JSR $FA0E ; execute battle graphics 35/A853: 20 94 9B JSR $9B94 ; get target mask pointer 35/A856: A5 B4 LDA $B4 35/A858: D0 03 BNE $A85D ; branch if targets confirmed 35/A85A: 18 CLC 35/A85B: 90 0F BCC $A86C 35/A85D: 91 5B STA ($5B),Y ; set targets 35/A85F: C8 INY 35/A860: A5 B5 LDA $B5 35/A862: 91 5B STA ($5B),Y ; set target flags 35/A864: 88 DEY 35/A865: 88 DEY 35/A866: A5 54 LDA $54 35/A868: 91 5B STA ($5B),Y ; set command id 35/A86A: E6 52 INC $52 35/A86C: 68 PLA ; pull return address 35/A86D: 68 PLA 35/A86E: A9 00 LDA #$00 ; clear command id 35/A870: 85 54 STA $54 35/A872: A9 01 LDA #$01 35/A874: 4C FD 99 JMP $99FD ; command confirmed ; [ battle command $05: defend ] 35/A877: 20 9B 9B JSR $9B9B ; get action pointer 35/A87A: A9 05 LDA #$05 35/A87C: 91 5B STA ($5B),Y ; action $05 (defend) 35/A87E: 4C 56 AA JMP $AA56 ; [ action $05: defend ] 35/A881: A9 3E LDA #$3E ; $0625: "ぼうぎょ" / "Defend" 35/A883: 8D D7 78 STA $78D7 35/A886: 20 CE 91 JSR $91CE ; clear target message 35/A889: A9 01 LDA #$01 ; action script $01: magic/command 35/A88B: 8D D5 78 STA $78D5 35/A88E: A0 23 LDY #$23 35/A890: B1 6E LDA ($6E),Y ; defense 35/A892: 48 PHA 35/A893: 20 2E A4 JSR $A42E ; get attacker flags 35/A896: 29 07 AND #$07 35/A898: AA TAX 35/A899: 68 PLA 35/A89A: 9D E4 7C STA $7CE4,X ; saved defense value 35/A89D: C9 80 CMP #$80 35/A89F: 90 04 BCC $A8A5 35/A8A1: A9 FF LDA #$FF 35/A8A3: D0 01 BNE $A8A6 35/A8A5: 0A ASL 35/A8A6: A0 23 LDY #$23 35/A8A8: 91 6E STA ($6E),Y 35/A8AA: 60 RTS ; [ battle command $06: run ] 35/A8AB: 20 9B 9B JSR $9B9B ; get action pointer 35/A8AE: A9 06 LDA #$06 35/A8B0: 91 5B STA ($5B),Y ; action $06 (run) 35/A8B2: 4C BC A8 JMP $A8BC ; [ battle command $07: escape ] 35/A8B5: 20 9B 9B JSR $9B9B ; get action pointer 35/A8B8: A9 07 LDA #$07 35/A8BA: 91 5B STA ($5B),Y ; action $07 (escape) 35/A8BC: 4C 56 AA JMP $AA56 ; [ action $06: run ] 35/A8BF: A9 01 LDA #$01 ; action script $01: magic/command 35/A8C1: 8D D5 78 STA $78D5 35/A8C4: A9 3F LDA #$3F ; $0626: "にげる" / "Run" 35/A8C6: 8D D7 78 STA $78D7 35/A8C9: 20 CE 91 JSR $91CE ; clear target message 35/A8CC: 20 2E A4 JSR $A42E ; get attacker flags 35/A8CF: 10 03 BPL $A8D4 35/A8D1: 4C 78 A9 JMP $A978 35/A8D4: A9 00 LDA #$00 35/A8D6: 85 18 STA $18 35/A8D8: 85 19 STA $19 35/A8DA: 85 1A STA $1A 35/A8DC: 85 1B STA $1B 35/A8DE: A9 75 LDA #$75 35/A8E0: 85 24 STA $24 35/A8E2: A9 76 LDA #$76 35/A8E4: 85 25 STA $25 35/A8E6: A0 00 LDY #$00 35/A8E8: A2 00 LDX #$00 35/A8EA: BD A7 7D LDA $7DA7,X 35/A8ED: C9 FF CMP #$FF 35/A8EF: F0 0F BEQ $A900 ; branch if monster slot is empty 35/A8F1: 18 CLC 35/A8F2: B1 24 LDA ($24),Y ; sum of monster levels 35/A8F4: 65 18 ADC $18 35/A8F6: 85 18 STA $18 35/A8F8: A9 00 LDA #$00 35/A8FA: 65 19 ADC $19 35/A8FC: 85 19 STA $19 35/A8FE: E6 1A INC $1A ; divide by no. of monsters 35/A900: 18 CLC 35/A901: A5 24 LDA $24 ; increment pointer to monster data 35/A903: 69 40 ADC #$40 35/A905: 85 24 STA $24 35/A907: A5 25 LDA $25 35/A909: 69 00 ADC #$00 35/A90B: 85 25 STA $25 35/A90D: E8 INX 35/A90E: E0 08 CPX #$08 35/A910: D0 D8 BNE $A8EA 35/A912: 20 92 FC JSR $FC92 ; divide (16-bit) 35/A915: A0 2A LDY #$2A 35/A917: B1 6E LDA ($6E),Y ; run probability 35/A919: 18 CLC 35/A91A: 69 19 ADC #$19 ; add 25 35/A91C: 38 SEC 35/A91D: E5 1C SBC $1C 35/A91F: B0 02 BCS $A923 35/A921: A9 00 LDA #$00 35/A923: 85 24 STA $24 35/A925: A9 64 LDA #$64 35/A927: 20 64 A5 JSR $A564 ; random (0..A) 35/A92A: C5 24 CMP $24 35/A92C: 90 1A BCC $A948 35/A92E: AD BA 78 LDA $78BA 35/A931: 29 01 AND #$01 35/A933: D0 13 BNE $A948 35/A935: A9 1F LDA #$1F ; $063F: "にげられない!" / "Can't run" 35/A937: 8D DA 78 STA $78DA 35/A93A: 60 RTS ; [ action $07: escape ] 35/A93B: A9 01 LDA #$01 ; action script $01: magic/command 35/A93D: 8D D5 78 STA $78D5 35/A940: A9 40 LDA #$40 ; $0627: "とんずら" / "Escape" 35/A942: 8D D7 78 STA $78D7 35/A945: 20 CE 91 JSR $91CE ; clear target message 35/A948: AD D8 7E LDA $7ED8 35/A94B: 29 01 AND #$01 35/A94D: F0 03 BEQ $A952 35/A94F: 4C 35 A9 JMP $A935 35/A952: A2 00 LDX #$00 35/A954: 8E 52 00 STX $0052 35/A957: 20 41 A5 JSR $A541 ; get character offset 35/A95A: A8 TAY 35/A95B: C8 INY 35/A95C: C8 INY 35/A95D: B1 5B LDA ($5B),Y 35/A95F: 29 20 AND #$20 35/A961: D0 D2 BNE $A935 35/A963: E8 INX 35/A964: E0 04 CPX #$04 35/A966: D0 EC BNE $A954 35/A968: A9 1E LDA #$1E ; $063E: "にげだした……" / "Ran away…" 35/A96A: 8D DA 78 STA $78DA 35/A96D: A9 02 LDA #$02 ; ran away 35/A96F: 8D D3 78 STA $78D3 35/A972: A9 F0 LDA #$F0 35/A974: 8D D4 78 STA $78D4 35/A977: 60 RTS ; [ ] 35/A978: A0 22 LDY #$22 35/A97A: B1 6E LDA ($6E),Y 35/A97C: 85 24 STA $24 35/A97E: A9 64 LDA #$64 35/A980: 20 64 A5 JSR $A564 ; random (0..A) 35/A983: C5 24 CMP $24 35/A985: 90 06 BCC $A98D 35/A987: A9 1F LDA #$1F ; $063F: "にげられない!" / "Can't run" 35/A989: 8D DA 78 STA $78DA 35/A98C: 60 RTS 35/A98D: A9 1E LDA #$1E ; $063E: "にげだした……" / "Ran away…" 35/A98F: 8D DA 78 STA $78DA 35/A992: 20 2E A4 JSR $A42E ; get attacker flags 35/A995: 29 07 AND #$07 35/A997: 48 PHA 35/A998: 0A ASL 35/A999: AA TAX 35/A99A: B5 F0 LDA $F0,X 35/A99C: 09 80 ORA #$80 35/A99E: 95 F0 STA $F0,X 35/A9A0: 68 PLA 35/A9A1: AA TAX 35/A9A2: A9 00 LDA #$00 35/A9A4: 20 20 FD JSR $FD20 ; set bit 35/A9A7: 8D D4 78 STA $78D4 35/A9AA: 60 RTS ; [ battle command $08: jump ] 35/A9AB: A9 00 LDA #$00 35/A9AD: 85 B3 STA $B3 35/A9AF: A9 10 LDA #$10 ; choose targets 35/A9B1: 20 0E FA JSR $FA0E ; execute battle graphics 35/A9B4: 20 94 9B JSR $9B94 35/A9B7: A5 B4 LDA $B4 35/A9B9: D0 03 BNE $A9BE 35/A9BB: 18 CLC 35/A9BC: 90 15 BCC $A9D3 35/A9BE: A5 B5 LDA $B5 35/A9C0: 10 E9 BPL $A9AB 35/A9C2: A5 B4 LDA $B4 35/A9C4: 91 5B STA ($5B),Y 35/A9C6: C8 INY 35/A9C7: A5 B5 LDA $B5 35/A9C9: 91 5B STA ($5B),Y 35/A9CB: 88 DEY 35/A9CC: 88 DEY 35/A9CD: A9 08 LDA #$08 35/A9CF: 91 5B STA ($5B),Y 35/A9D1: E6 52 INC $52 35/A9D3: A9 01 LDA #$01 35/A9D5: 4C FD 99 JMP $99FD ; command confirmed ; [ action $08: jump 1 ] 35/A9D8: A9 01 LDA #$01 ; action script $01: magic/command 35/A9DA: 8D D5 78 STA $78D5 35/A9DD: A9 41 LDA #$41 ; $0628: "ジャンプ" / "Jump" 35/A9DF: 8D D7 78 STA $78D7 35/A9E2: A0 01 LDY #$01 35/A9E4: B1 6E LDA ($6E),Y 35/A9E6: 29 28 AND #$28 35/A9E8: F0 0C BEQ $A9F6 ; branch if not toad or mini 35/A9EA: A9 18 LDA #$18 ; ineffective 35/A9EC: 8D C2 7E STA $7EC2 35/A9EF: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 35/A9F1: 8D DA 78 STA $78DA 35/A9F4: D0 1A BNE $AA10 35/A9F6: A0 27 LDY #$27 35/A9F8: A9 02 LDA #$02 ; 3x multiplier 35/A9FA: 91 6E STA ($6E),Y 35/A9FC: 20 2E A4 JSR $A42E ; get attacker flags 35/A9FF: 29 07 AND #$07 ; character/monster slot 35/AA01: 0A ASL 35/AA02: AA TAX 35/AA03: E8 INX 35/AA04: B5 F0 LDA $F0,X ; set jumping status 35/AA06: 09 01 ORA #$01 35/AA08: 95 F0 STA $F0,X 35/AA0A: C8 INY 35/AA0B: C8 INY 35/AA0C: A9 09 LDA #$09 ; next command is jump 2 35/AA0E: 91 6E STA ($6E),Y 35/AA10: 60 RTS ; [ action $09: jump 2 ] 35/AA11: A0 02 LDY #$02 35/AA13: B1 6E LDA ($6E),Y ; clear jumping status 35/AA15: 29 FE AND #$FE 35/AA17: 91 6E STA ($6E),Y 35/AA19: A0 27 LDY #$27 35/AA1B: A9 02 LDA #$02 ; 3x multiplier 35/AA1D: 91 6E STA ($6E),Y 35/AA1F: 4C 1E 80 JMP $801E ; do fight effect ; [ battle command $0B: terrain ] 35/AA22: 20 9B 9B JSR $9B9B ; get action pointer 35/AA25: A9 0B LDA #$0B 35/AA27: 91 5B STA ($5B),Y ; action $0B (terrain) 35/AA29: 20 C3 AA JSR $AAC3 ; get terrain attack 35/AA2C: 38 SEC 35/AA2D: E9 50 SBC #$50 35/AA2F: AA TAX 35/AA30: E8 INX 35/AA31: AD 06 AB LDA $AB06 35/AA34: 0A ASL 35/AA35: CA DEX 35/AA36: D0 FC BNE $AA34 35/AA38: 90 0A BCC $AA44 35/AA3A: 20 2A 80 JSR $802A ; choose random monster target 35/AA3D: AD 99 7E LDA $7E99 35/AA40: A2 80 LDX #$80 35/AA42: D0 04 BNE $AA48 35/AA44: A9 FF LDA #$FF ; target all 35/AA46: A2 C0 LDX #$C0 35/AA48: 48 PHA 35/AA49: 20 94 9B JSR $9B94 35/AA4C: 68 PLA 35/AA4D: 91 5B STA ($5B),Y ; set target mask 35/AA4F: C8 INY 35/AA50: 8A TXA 35/AA51: 91 5B STA ($5B),Y ; set target flags 35/AA53: 4C 56 AA JMP $AA56 ; [ ] 35/AA56: E6 52 INC $52 35/AA58: A9 01 LDA #$01 35/AA5A: 4C FD 99 JMP $99FD ; command confirmed ; [ action $0B: terrain ] 35/AA5D: 20 2E A4 JSR $A42E ; get attacker flags 35/AA60: 09 10 ORA #$10 35/AA62: 91 6E STA ($6E),Y ; use magic attack 35/AA64: 20 C3 AA JSR $AAC3 ; get terrain attack 35/AA67: A0 2E LDY #$2E 35/AA69: 91 6E STA ($6E),Y ; attack id 35/AA6B: 85 1A STA $1A 35/AA6D: 20 67 A3 JSR $A367 ; do magic action 35/AA70: E6 CC INC $CC 35/AA72: A9 14 LDA #$14 35/AA74: 8D C2 7E STA $7EC2 35/AA77: AD 9B 7E LDA $7E9B 35/AA7A: D0 46 BNE $AAC2 ; branch if any targets were hit 35/AA7C: 20 2E A4 JSR $A42E ; get attacker flags 35/AA7F: 29 07 AND #$07 35/AA81: 0A ASL 35/AA82: AA TAX 35/AA83: A0 05 LDY #$05 35/AA85: B1 6E LDA ($6E),Y ; backfire damage = max hp / 4 35/AA87: 85 18 STA $18 35/AA89: C8 INY 35/AA8A: B1 6E LDA ($6E),Y 35/AA8C: 85 19 STA $19 35/AA8E: 46 19 LSR $19 35/AA90: 66 18 ROR $18 35/AA92: 46 19 LSR $19 35/AA94: 66 18 ROR $18 35/AA96: A0 03 LDY #$03 35/AA98: 38 SEC 35/AA99: B1 6E LDA ($6E),Y 35/AA9B: E5 18 SBC $18 35/AA9D: 91 6E STA ($6E),Y 35/AA9F: C8 INY 35/AAA0: B1 6E LDA ($6E),Y 35/AAA2: E5 19 SBC $19 35/AAA4: 91 6E STA ($6E),Y 35/AAA6: B0 0B BCS $AAB3 ; branch if not dead 35/AAA8: A9 00 LDA #$00 35/AAAA: 91 6E STA ($6E),Y 35/AAAC: 88 DEY 35/AAAD: 91 6E STA ($6E),Y 35/AAAF: A9 80 LDA #$80 ; set dead status 35/AAB1: 95 F0 STA $F0,X 35/AAB3: A5 18 LDA $18 35/AAB5: 9D 5F 7E STA $7E5F,X ; set attacker damage numeral value 35/AAB8: E8 INX 35/AAB9: A5 19 LDA $19 35/AABB: 9D 5F 7E STA $7E5F,X 35/AABE: A9 03 LDA #$03 ; backfired 35/AAC0: 85 54 STA $54 35/AAC2: 60 RTS ; [ get terrain attack ] 35/AAC3: AD E3 7C LDA $7CE3 35/AAC6: C9 08 CMP #$08 35/AAC8: 90 38 BCC $AB02 35/AACA: C9 12 CMP #$12 35/AACC: D0 04 BNE $AAD2 35/AACE: A9 55 LDA #$55 35/AAD0: D0 33 BNE $AB05 35/AAD2: 18 CLC 35/AAD3: AD C8 74 LDA $74C8 ; map id (from field dp $48) 35/AAD6: 69 4E ADC #$4E ; offset: 01/A24E (terrain attacks) 35/AAD8: 85 46 STA $46 35/AADA: A9 A2 LDA #$A2 35/AADC: 69 00 ADC #$00 35/AADE: 85 47 STA $47 35/AAE0: A9 01 LDA #$01 ; size: 1 byte 35/AAE2: 85 4B STA $4B 35/AAE4: A9 1A LDA #$1A 35/AAE6: 85 4A STA $4A 35/AAE8: A9 00 LDA #$00 35/AAEA: 20 DC FD JSR $FDDC ; load rom data to buffer 35/AAED: AD D8 7E LDA $7ED8 35/AAF0: 29 08 AND #$08 35/AAF2: D0 08 BNE $AAFC 35/AAF4: AD 00 74 LDA $7400 ; lo nybble for floating continent 35/AAF7: 29 0F AND #$0F 35/AAF9: 4C 02 AB JMP $AB02 35/AAFC: AD 00 74 LDA $7400 ; hi nybble for surface world 35/AAFF: 20 45 FD JSR $FD45 ; lsr4 35/AB02: 18 CLC 35/AB03: 69 50 ADC #$50 35/AB05: 60 RTS ; targeting for each terrain attack (one bit each) ; 0: target all monsters (earthquake, waterspout, landslide/cave in) ; 1: target single random monster (all others) 35/AB06: 7A ; 01111010b ; [ battle command $0D: scan ] 35/AB07: A9 0D LDA #$0D 35/AB09: 20 48 A8 JSR $A848 ; do command ; [ action $0D: scan ] 35/AB0C: 20 66 AB JSR $AB66 35/AB0F: A9 01 LDA #$01 ; action script $01: magic/command 35/AB11: 8D D5 78 STA $78D5 35/AB14: A9 46 LDA #$46 ; $062D: "みやぶる" / "Scan" 35/AB16: 8D D7 78 STA $78D7 35/AB19: A0 01 LDY #$01 35/AB1B: B1 70 LDA ($70),Y 35/AB1D: 10 08 BPL $AB27 35/AB1F: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 35/AB21: 8D DA 78 STA $78DA 35/AB24: 4C 65 AB JMP $AB65 35/AB27: A0 12 LDY #$12 35/AB29: B1 70 LDA ($70),Y 35/AB2B: A0 00 LDY #$00 35/AB2D: A2 00 LDX #$00 35/AB2F: 0A ASL 35/AB30: 90 05 BCC $AB37 35/AB32: 98 TYA 35/AB33: 9D 00 74 STA $7400,X ; store element 35/AB36: E8 INX 35/AB37: C8 INY 35/AB38: C0 07 CPY #$07 ; check 7 elements 35/AB3A: D0 F3 BNE $AB2F 35/AB3C: A9 FF LDA #$FF 35/AB3E: 9D 00 74 STA $7400,X ; store terminator 35/AB41: A0 00 LDY #$00 35/AB43: AE EE 78 LDX $78EE 35/AB46: AD 00 74 LDA $7400 35/AB49: 10 06 BPL $AB51 35/AB4B: 88 DEY 35/AB4C: A9 43 LDA #$43 ; $0663: "じゃくてんは とくにない" / "No weak point found" 35/AB4E: 4C 5B AB JMP $AB5B 35/AB51: B9 00 74 LDA $7400,Y 35/AB54: C9 FF CMP #$FF ; terminator 35/AB56: F0 0D BEQ $AB65 35/AB58: 18 CLC 35/AB59: 69 48 ADC #$48 ; $0668: "せいなるちからによわい!" / "Weak vs.holy power" 35/AB5B: 9D DA 78 STA $78DA,X 35/AB5E: EE EE 78 INC $78EE 35/AB61: C8 INY 35/AB62: 4C 51 AB JMP $AB51 35/AB65: 60 RTS ; [ do ineffective action ] 35/AB66: A9 18 LDA #$18 ; ineffective 35/AB68: 8D C2 7E STA $7EC2 ; action id 35/AB6B: E6 CC INC $CC 35/AB6D: 60 RTS ; [ battle command $0C: peep ] 35/AB6E: A9 0C LDA #$0C 35/AB70: 20 48 A8 JSR $A848 ; do command ; [ action $0C: peep ] 35/AB73: 20 66 AB JSR $AB66 35/AB76: A2 00 LDX #$00 35/AB78: A0 03 LDY #$03 35/AB7A: B1 70 LDA ($70),Y ; copy current/max hp 35/AB7C: 9D E4 78 STA $78E4,X 35/AB7F: C8 INY 35/AB80: E8 INX 35/AB81: E0 04 CPX #$04 35/AB83: D0 F5 BNE $AB7A 35/AB85: A0 01 LDY #$01 35/AB87: B1 70 LDA ($70),Y ; 35/AB89: 10 04 BPL $AB8F 35/AB8B: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 35/AB8D: D0 02 BNE $AB91 35/AB8F: A9 3F LDA #$3F ; $065F: variable type 2 35/AB91: 8D DA 78 STA $78DA 35/AB94: A9 01 LDA #$01 ; action script $01: magic/command 35/AB96: 8D D5 78 STA $78D5 35/AB99: A9 45 LDA #$45 ; $062C: "しらべる" / "Peep" 35/AB9B: 8D D7 78 STA $78D7 35/AB9E: 60 RTS ; [ battle command $0E: steal ] 35/AB9F: A9 0E LDA #$0E 35/ABA1: 20 48 A8 JSR $A848 ; do command ; [ action $0E: steal ] 35/ABA4: 20 66 AB JSR $AB66 35/ABA7: A9 47 LDA #$47 ; $062E: "ぬすむ" / "Steal" 35/ABA9: 8D D7 78 STA $78D7 35/ABAC: A9 01 LDA #$01 ; action script $01: magic/command 35/ABAE: 8D D5 78 STA $78D5 35/ABB1: A0 2C LDY #$2C 35/ABB3: B1 70 LDA ($70),Y 35/ABB5: 30 08 BMI $ABBF ; branch if target is a monster 35/ABB7: A9 35 LDA #$35 ; $0655: "クリティカルヒット!" / "Can't steal" 35/ABB9: 8D DA 78 STA $78DA 35/ABBC: 4C 64 AC JMP $AC64 35/ABBF: 18 CLC 35/ABC0: A0 00 LDY #$00 35/ABC2: B1 6E LDA ($6E),Y ; attacker level 35/ABC4: A0 0F LDY #$0F 35/ABC6: 71 6E ADC ($6E),Y ; attacker job level 35/ABC8: 85 24 STA $24 35/ABCA: A9 FF LDA #$FF 35/ABCC: 20 64 A5 JSR $A564 ; random (0..A) 35/ABCF: C5 24 CMP $24 35/ABD1: 90 03 BCC $ABD6 ; rate = (level + job level) / 255 35/ABD3: 4C B7 AB JMP $ABB7 35/ABD6: A0 01 LDY #$01 35/ABD8: B1 70 LDA ($70),Y ; 35/ABDA: 29 E8 AND #$E8 35/ABDC: D0 F5 BNE $ABD3 35/ABDE: A0 36 LDY #$36 35/ABE0: B1 70 LDA ($70),Y ; target item set 35/ABE2: 29 1F AND #$1F 35/ABE4: 85 18 STA $18 ; index 35/ABE6: A9 80 LDA #$80 ; 10/9B80 (monster items) 35/ABE8: 85 20 STA $20 35/ABEA: A9 9B LDA #$9B 35/ABEC: 85 21 STA $21 35/ABEE: A9 08 LDA #$08 ; 8 bytes 35/ABF0: 85 1A STA $1A 35/ABF2: A9 08 LDA #$08 35/ABF4: A0 1A LDY #$1A 35/ABF6: A2 00 LDX #$00 35/ABF8: 20 A6 FD JSR $FDA6 ; load array item 35/ABFB: A9 FF LDA #$FF 35/ABFD: 20 64 A5 JSR $A564 ; random (0..A) 35/AC00: C9 30 CMP #$30 ; 48/256: item 0 35/AC02: B0 04 BCS $AC08 35/AC04: A2 00 LDX #$00 35/AC06: F0 12 BEQ $AC1A 35/AC08: C9 60 CMP #$60 ; 48/256: item 1 35/AC0A: B0 04 BCS $AC10 35/AC0C: A2 01 LDX #$01 35/AC0E: D0 0A BNE $AC1A 35/AC10: C9 90 CMP #$90 ; 48/256: item 2 35/AC12: B0 04 BCS $AC18 35/AC14: A2 02 LDX #$02 35/AC16: D0 02 BNE $AC1A 35/AC18: A2 03 LDX #$03 ; 112/256: item 3 35/AC1A: BD 00 74 LDA $7400,X 35/AC1D: F0 98 BEQ $ABB7 ; branch if no item 35/AC1F: 85 25 STA $25 35/AC21: A2 00 LDX #$00 35/AC23: BD C0 60 LDA $60C0,X 35/AC26: C5 25 CMP $25 35/AC28: D0 11 BNE $AC3B 35/AC2A: E8 INX 35/AC2B: FE C0 60 INC $60C0,X ; add item 35/AC2E: BD C0 60 LDA $60C0,X 35/AC31: C9 64 CMP #$64 ; max 99 35/AC33: 90 25 BCC $AC5A 35/AC35: DE C0 60 DEC $60C0,X 35/AC38: 4C B7 AB JMP $ABB7 35/AC3B: E8 INX ; check next item slot 35/AC3C: E8 INX 35/AC3D: E0 40 CPX #$40 35/AC3F: D0 E2 BNE $AC23 35/AC41: A2 00 LDX #$00 35/AC43: BD C0 60 LDA $60C0,X 35/AC46: F0 09 BEQ $AC51 35/AC48: E8 INX 35/AC49: E8 INX 35/AC4A: E0 40 CPX #$40 35/AC4C: D0 F5 BNE $AC43 35/AC4E: 4C B7 AB JMP $ABB7 35/AC51: A5 25 LDA $25 35/AC53: 9D C0 60 STA $60C0,X 35/AC56: E8 INX 35/AC57: FE C0 60 INC $60C0,X 35/AC5A: A5 25 LDA $25 35/AC5C: 8D E4 78 STA $78E4 35/AC5F: A9 29 LDA #$29 ; $0649: "おたから:" / "Found " 35/AC61: 8D DA 78 STA $78DA 35/AC64: 60 RTS ; [ battle command $0F: buildup ] 35/AC65: 20 9B 9B JSR $9B9B ; get action pointer 35/AC68: A9 0F LDA #$0F 35/AC6A: 91 5B STA ($5B),Y ; action $0F (buildup) 35/AC6C: 4C 56 AA JMP $AA56 ; [ action $0F: buildup ] 35/AC6F: A9 48 LDA #$48 ; $062F: "ためる" / "BuildUp" 35/AC71: 8D D7 78 STA $78D7 35/AC74: A9 01 LDA #$01 ; action script $01: magic/command 35/AC76: 8D D5 78 STA $78D5 35/AC79: A0 01 LDY #$01 35/AC7B: B1 6E LDA ($6E),Y 35/AC7D: 29 28 AND #$28 35/AC7F: D0 49 BNE $ACCA ; branch if toad or mini 35/AC81: A0 27 LDY #$27 35/AC83: B1 6E LDA ($6E),Y 35/AC85: 18 CLC 35/AC86: 69 01 ADC #$01 ; add 1 to buildup counter 35/AC88: C9 03 CMP #$03 35/AC8A: 90 36 BCC $ACC2 ; overload if >= 3 35/AC8C: A9 00 LDA #$00 35/AC8E: 91 6E STA ($6E),Y ; clear damage multiplier 35/AC90: A0 03 LDY #$03 35/AC92: B1 6E LDA ($6E),Y ; current hp / 2 35/AC94: 85 18 STA $18 35/AC96: C8 INY 35/AC97: B1 6E LDA ($6E),Y 35/AC99: 4A LSR 35/AC9A: 66 18 ROR $18 35/AC9C: 91 6E STA ($6E),Y 35/AC9E: 88 DEY 35/AC9F: A5 18 LDA $18 35/ACA1: 91 6E STA ($6E),Y 35/ACA3: B1 6E LDA ($6E),Y 35/ACA5: C8 INY 35/ACA6: 11 6E ORA ($6E),Y 35/ACA8: D0 0D BNE $ACB7 ; branch if not dead 35/ACAA: 20 2E A4 JSR $A42E ; get attacker flags 35/ACAD: 29 07 AND #$07 35/ACAF: 0A ASL 35/ACB0: AA TAX 35/ACB1: B5 F0 LDA $F0,X ; set dead status 35/ACB3: 09 80 ORA #$80 35/ACB5: 95 F0 STA $F0,X 35/ACB7: A9 01 LDA #$01 35/ACB9: 8D 93 7E STA $7E93 35/ACBC: A9 2F LDA #$2F ; $064F: "ためすぎてじばくした!" / "Overloaded!" 35/ACBE: 8D DA 78 STA $78DA 35/ACC1: 60 RTS ; normal 35/ACC2: 91 6E STA ($6E),Y 35/ACC4: A9 00 LDA #$00 35/ACC6: 8D 93 7E STA $7E93 35/ACC9: 60 RTS ; toad or mini 35/ACCA: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 35/ACCC: 8D DA 78 STA $78DA 35/ACCF: 60 RTS ; [ battle command $10: sing ] 35/ACD0: A9 10 LDA #$10 35/ACD2: 20 48 A8 JSR $A848 ; do command ; [ action $10: sing ] 35/ACD5: 20 2E A4 JSR $A42E ; get attacker flags 35/ACD8: 29 07 AND #$07 35/ACDA: 85 52 STA $52 35/ACDC: 20 41 A5 JSR $A541 ; get character offset 35/ACDF: 18 CLC 35/ACE0: 69 03 ADC #$03 35/ACE2: A8 TAY 35/ACE3: B1 59 LDA ($59),Y 35/ACE5: C9 46 CMP #$46 35/ACE7: 90 04 BCC $ACED 35/ACE9: C9 4A CMP #$4A 35/ACEB: 90 0C BCC $ACF9 35/ACED: C8 INY 35/ACEE: C8 INY 35/ACEF: B1 59 LDA ($59),Y 35/ACF1: C9 46 CMP #$46 35/ACF3: 90 07 BCC $ACFC 35/ACF5: C9 4A CMP #$4A 35/ACF7: B0 03 BCS $ACFC 35/ACF9: 4C 04 A1 JMP $A104 ; do fight action 35/ACFC: A9 01 LDA #$01 ; action script $01: magic/command 35/ACFE: 8D D5 78 STA $78D5 35/AD01: A9 42 LDA #$42 ; $0662: "たてごとがないのでうたえない!" / "Needs a harp!" 35/AD03: 8D DA 78 STA $78DA 35/AD06: A9 18 LDA #$18 ; ineffective 35/AD08: 8D C2 7E STA $7EC2 35/AD0B: 60 RTS ; [ battle command $11: scare ] 35/AD0C: 20 9B 9B JSR $9B9B ; get action pointer 35/AD0F: A9 11 LDA #$11 35/AD11: 91 5B STA ($5B),Y ; action $11 (scare) 35/AD13: 4C 56 AA JMP $AA56 ; [ action $11: scare ] 35/AD16: A9 01 LDA #$01 ; action script $01: magic/command 35/AD18: 8D D5 78 STA $78D5 35/AD1B: A9 4A LDA #$4A ; $0631: "おどかす" / "Scare" 35/AD1D: 8D D7 78 STA $78D7 35/AD20: AD D8 7E LDA $7ED8 35/AD23: 29 01 AND #$01 35/AD25: F0 06 BEQ $AD2D 35/AD27: A9 3B LDA #$3B ; $065B: "こうかがなかった" / "Ineffective" 35/AD29: 8D DA 78 STA $78DA 35/AD2C: 60 RTS 35/AD2D: A9 07 LDA #$07 35/AD2F: 85 25 STA $25 35/AD31: A0 00 LDY #$00 35/AD33: 4A LSR 35/AD34: 85 24 STA $24 35/AD36: A0 00 LDY #$00 35/AD38: 38 SEC 35/AD39: B1 5D LDA ($5D),Y 35/AD3B: E5 24 SBC $24 35/AD3D: B0 02 BCS $AD41 35/AD3F: A9 00 LDA #$00 35/AD41: 85 24 STA $24 35/AD43: A5 24 LDA $24 35/AD45: 91 5D STA ($5D),Y 35/AD47: 18 CLC 35/AD48: A5 5D LDA $5D 35/AD4A: 69 40 ADC #$40 35/AD4C: 85 5D STA $5D 35/AD4E: A5 5E LDA $5E 35/AD50: 69 00 ADC #$00 35/AD52: 85 5E STA $5E 35/AD54: C6 25 DEC $25 35/AD56: A5 25 LDA $25 35/AD58: 10 E9 BPL $AD43 35/AD5A: A9 75 LDA #$75 35/AD5C: 85 5D STA $5D 35/AD5E: A9 76 LDA #$76 35/AD60: 85 5E STA $5E 35/AD62: A9 32 LDA #$32 ; $0652: "モンスターをびびらせた" / "Scared the monsters" 35/AD64: 8D DA 78 STA $78DA 35/AD67: 20 CE 91 JSR $91CE ; clear target message 35/AD6A: 60 RTS ; [ battle command $12: cheer ] 35/AD6B: 20 9B 9B JSR $9B9B ; get action pointer 35/AD6E: A9 12 LDA #$12 35/AD70: 91 5B STA ($5B),Y ; action $12 (cheer) 35/AD72: 4C 56 AA JMP $AA56 ; [ action $12: cheer ] 35/AD75: A9 01 LDA #$01 ; action script $01: magic/command 35/AD77: 8D D5 78 STA $78D5 35/AD7A: A9 4B LDA #$4B ; $0632: "おうえん" / "Cheer" 35/AD7C: 8D D7 78 STA $78D7 35/AD7F: A9 31 LDA #$31 ; $0651: "みんな きあいがはいった!" / "Roused the party!" 35/AD81: 8D DA 78 STA $78DA 35/AD84: A9 75 LDA #$75 ; $7575 35/AD86: 85 18 STA $18 35/AD88: A9 75 LDA #$75 35/AD8A: 85 19 STA $19 35/AD8C: A2 04 LDX #$04 ; loop through 4 characters 35/AD8E: A0 19 LDY #$19 35/AD90: B1 18 LDA ($18),Y ; attack power + 10 (max 255) 35/AD92: 18 CLC 35/AD93: 69 0A ADC #$0A 35/AD95: 90 05 BCC $AD9C 35/AD97: A9 FF LDA #$FF 35/AD99: 8D D8 78 STA $78D8 35/AD9C: 91 18 STA ($18),Y 35/AD9E: 18 CLC 35/AD9F: A5 18 LDA $18 ; next character 35/ADA1: 69 40 ADC #$40 35/ADA3: 85 18 STA $18 35/ADA5: A5 19 LDA $19 35/ADA7: 69 00 ADC #$00 35/ADA9: 85 19 STA $19 35/ADAB: CA DEX 35/ADAC: D0 E0 BNE $AD8E 35/ADAE: 60 RTS ; -------------------------------------------------------------------------- ; [ battle command $14: item ] 35/ADAF: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 35/ADB2: A9 00 LDA #$00 35/ADB4: 85 3D STA $3D 35/ADB6: 20 B0 8E JSR $8EB0 ; close menu window 35/ADB9: A9 78 LDA #$78 35/ADBB: 85 10 STA $10 35/ADBD: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 35/ADC0: A9 00 LDA #$00 35/ADC2: 8D 73 75 STA $7573 35/ADC5: 20 19 B4 JSR $B419 ; draw equipped items 35/ADC8: A2 00 LDX #$00 35/ADCA: BD C0 60 LDA $60C0,X ; copy inventory to buffer 35/ADCD: 9D FD 7A STA $7AFD,X 35/ADD0: E8 INX 35/ADD1: E0 40 CPX #$40 35/ADD3: D0 F5 BNE $ADCA 35/ADD5: A9 01 LDA #$01 35/ADD7: A2 23 LDX #$23 35/ADD9: 9D 3D 7B STA $7B3D,X ; reset item usability 35/ADDC: CA DEX 35/ADDD: 10 FA BPL $ADD9 35/ADDF: 20 8D 9B JSR $9B8D ; get equipped weapon pointer 35/ADE2: B1 59 LDA ($59),Y 35/ADE4: 8D F5 7A STA $7AF5 35/ADE7: 8D F7 7A STA $7AF7 35/ADEA: C8 INY 35/ADEB: B1 59 LDA ($59),Y 35/ADED: 8D F6 7A STA $7AF6 35/ADF0: 8D F8 7A STA $7AF8 35/ADF3: C8 INY 35/ADF4: B1 59 LDA ($59),Y 35/ADF6: 8D F9 7A STA $7AF9 35/ADF9: 8D FB 7A STA $7AFB 35/ADFC: C8 INY 35/ADFD: B1 59 LDA ($59),Y 35/ADFF: 8D FA 7A STA $7AFA 35/AE02: 8D FC 7A STA $7AFC 35/AE05: A9 00 LDA #$00 35/AE07: 85 42 STA $42 35/AE09: 85 43 STA $43 35/AE0B: A9 00 LDA #$00 ; 30/9400 (weapon properties) 35/AE0D: 85 20 STA $20 35/AE0F: A9 94 LDA #$94 35/AE11: 85 21 STA $21 35/AE13: A6 42 LDX $42 35/AE15: BD C0 60 LDA $60C0,X 35/AE18: C9 62 CMP #$62 35/AE1A: 90 0A BCC $AE26 ; branch if a weapon or shield (check) 35/AE1C: C9 98 CMP #$98 35/AE1E: 90 0F BCC $AE2F ; branch if a defensive item (not usable) 35/AE20: C9 C8 CMP #$C8 35/AE22: 90 10 BCC $AE34 ; branch if a usable item (usable) 35/AE24: B0 09 BCS $AE2F ; branch if a spell (not usable) 35/AE26: 85 18 STA $18 35/AE28: 20 FD B8 JSR $B8FD ; check if character can equip item/spell 35/AE2B: A5 1C LDA $1C 35/AE2D: D0 05 BNE $AE34 ; branch if usable 35/AE2F: A6 43 LDX $43 35/AE31: DE 41 7B DEC $7B41,X ; not usable 35/AE34: E6 42 INC $42 ; next item 35/AE36: E6 42 INC $42 35/AE38: E6 43 INC $43 35/AE3A: A5 43 LDA $43 35/AE3C: C9 20 CMP #$20 35/AE3E: D0 CB BNE $AE0B 35/AE40: A9 00 LDA #$00 35/AE42: 85 3D STA $3D 35/AE44: 20 8B B4 JSR $B48B ; draw inventory column 35/AE47: A9 10 LDA #$10 35/AE49: 85 18 STA $18 35/AE4B: A9 1E LDA #$1E 35/AE4D: 85 19 STA $19 35/AE4F: A9 01 LDA #$01 35/AE51: 85 1A STA $1A 35/AE53: 20 38 8B JSR $8B38 ; open menu window 35/AE56: 20 8B B4 JSR $B48B ; draw inventory column 35/AE59: A9 1F LDA #$1F 35/AE5B: 85 18 STA $18 35/AE5D: A9 8D LDA #$8D 35/AE5F: 85 19 STA $19 35/AE61: A9 00 LDA #$00 35/AE63: 85 1A STA $1A 35/AE65: 20 38 8B JSR $8B38 ; open menu window 35/AE68: 20 8B B4 JSR $B48B ; draw inventory column 35/AE6B: A9 8E LDA #$8E 35/AE6D: 85 18 STA $18 35/AE6F: A9 9C LDA #$9C 35/AE71: 85 19 STA $19 35/AE73: A9 00 LDA #$00 35/AE75: 85 1A STA $1A 35/AE77: 20 38 8B JSR $8B38 ; open menu window 35/AE7A: A9 02 LDA #$02 ; item list cursor 35/AE7C: 85 55 STA $55 35/AE7E: A9 01 LDA #$01 ; cursor 1 35/AE80: 85 1A STA $1A 35/AE82: 20 66 89 JSR $8966 ; init list cursor 35/AE85: A9 F0 LDA #$F0 ; hide cursor (240,240) 35/AE87: 85 1C STA $1C 35/AE89: 85 1D STA $1D 35/AE8B: A9 01 LDA #$01 ; cursor 1 35/AE8D: 85 1A STA $1A 35/AE8F: 20 2E 89 JSR $892E ; set cursor sprite position 35/AE92: A9 02 LDA #$02 ; item list cursor 35/AE94: 85 55 STA $55 35/AE96: A9 00 LDA #$00 ; cursor 0 35/AE98: 85 1A STA $1A 35/AE9A: 20 66 89 JSR $8966 ; init list cursor 35/AE9D: A2 00 LDX #$00 35/AE9F: 86 62 STX $62 ; cursor y position 35/AEA1: 86 65 STX $65 35/AEA3: 86 67 STX $67 ; item selected flag 35/AEA5: E8 INX 35/AEA6: 86 66 STX $66 ; list x scroll 35/AEA8: 86 63 STX $63 ; cursor x position ; start of player input loop 35/AEAA: 20 85 81 JSR $8185 ; wait one frame 35/AEAD: 20 AA FB JSR $FBAA ; update joypad input 35/AEB0: A5 12 LDA $12 35/AEB2: F0 F6 BEQ $AEAA ; wait for any button 35/AEB4: 48 PHA 35/AEB5: 20 79 9B JSR $9B79 ; play cursor sound effect 35/AEB8: 68 PLA 35/AEB9: C9 01 CMP #$01 35/AEBB: D0 03 BNE $AEC0 35/AEBD: 4C 4C AF JMP $AF4C ; A button pressed 35/AEC0: C9 02 CMP #$02 35/AEC2: D0 03 BNE $AEC7 35/AEC4: 4C 98 B1 JMP $B198 ; B button pressed 35/AEC7: C9 80 CMP #$80 35/AEC9: D0 03 BNE $AECE 35/AECB: 4C 31 AF JMP $AF31 ; right button pressed 35/AECE: C9 40 CMP #$40 35/AED0: D0 03 BNE $AED5 35/AED2: 4C 0C AF JMP $AF0C ; left button pressed 35/AED5: C9 20 CMP #$20 35/AED7: D0 03 BNE $AEDC 35/AED9: 4C F8 AE JMP $AEF8 ; down button pressed 35/AEDC: C9 10 CMP #$10 35/AEDE: D0 CA BNE $AEAA ; up 35/AEE0: A5 63 LDA $63 35/AEE2: D0 08 BNE $AEEC ; branch if not in column 0 35/AEE4: A5 62 LDA $62 35/AEE6: C9 01 CMP #$01 35/AEE8: F0 0B BEQ $AEF5 ; branch if on right hand weapon 35/AEEA: C6 62 DEC $62 ; move up 2 if on left hand 35/AEEC: A5 62 LDA $62 35/AEEE: F0 05 BEQ $AEF5 ; can't go above column 0 35/AEF0: C6 62 DEC $62 ; move up 1 35/AEF2: 20 D4 B4 JSR $B4D4 ; set item menu cursor position 35/AEF5: 4C AA AE JMP $AEAA ; down 35/AEF8: A5 62 LDA $62 35/AEFA: C9 03 CMP #$03 35/AEFC: F0 0B BEQ $AF09 ; can't go below row 3 35/AEFE: A5 63 LDA $63 35/AF00: D0 02 BNE $AF04 35/AF02: E6 62 INC $62 ; move down 2 if on right hand 35/AF04: E6 62 INC $62 ; move down 1 otherwise 35/AF06: 20 D4 B4 JSR $B4D4 ; set item menu cursor position 35/AF09: 4C AA AE JMP $AEAA ; left 35/AF0C: A5 63 LDA $63 35/AF0E: F0 1E BEQ $AF2E ; min cursor x position is 0 35/AF10: A5 66 LDA $66 35/AF12: C5 63 CMP $63 35/AF14: D0 03 BNE $AF19 35/AF16: 20 62 B3 JSR $B362 ; scroll item list left 35/AF19: C6 63 DEC $63 ; move cursor left 35/AF1B: A5 63 LDA $63 35/AF1D: D0 0C BNE $AF2B ; branch if not in column 0 35/AF1F: A5 62 LDA $62 35/AF21: 29 01 AND #$01 35/AF23: D0 06 BNE $AF2B ; branch if in an odd row 35/AF25: A5 62 LDA $62 35/AF27: 09 01 ORA #$01 ; move down to an odd row 35/AF29: 85 62 STA $62 35/AF2B: 20 D4 B4 JSR $B4D4 ; set item menu cursor position 35/AF2E: 4C AA AE JMP $AEAA ; right 35/AF31: A5 63 LDA $63 35/AF33: C9 08 CMP #$08 ; max cursor x position is 8 35/AF35: F0 12 BEQ $AF49 35/AF37: A5 66 LDA $66 35/AF39: C9 07 CMP #$07 35/AF3B: F0 07 BEQ $AF44 35/AF3D: C5 63 CMP $63 35/AF3F: F0 03 BEQ $AF44 35/AF41: 20 A7 B2 JSR $B2A7 ; scroll item list right 35/AF44: E6 63 INC $63 ; move cursor right 35/AF46: 20 D4 B4 JSR $B4D4 ; set item menu cursor position 35/AF49: 4C AA AE JMP $AEAA ; A button 35/AF4C: A5 67 LDA $67 35/AF4E: D0 29 BNE $AF79 ; branch if an item is already selected 35/AF50: E6 67 INC $67 ; select item 35/AF52: A5 62 LDA $62 ; copy cursor 0 position to cursor 1 35/AF54: 85 68 STA $68 35/AF56: A5 63 LDA $63 35/AF58: 85 69 STA $69 35/AF5A: 20 D4 B4 JSR $B4D4 ; set item menu cursor position 35/AF5D: A5 1D LDA $1D 35/AF5F: 18 CLC 35/AF60: 69 04 ADC #$04 ; move 4 pixels to the right 35/AF62: 85 1D STA $1D 35/AF64: A9 01 LDA #$01 ; cursor 1 35/AF66: 85 1A STA $1A 35/AF68: 20 2E 89 JSR $892E ; set cursor sprite position 35/AF6B: 20 7D 9B JSR $9B7D ; play confirm sound effect 35/AF6E: A2 10 LDX #$10 ; 16 frames 35/AF70: 20 85 81 JSR $8185 ; wait one frame 35/AF73: CA DEX 35/AF74: D0 FA BNE $AF70 35/AF76: 4C AA AE JMP $AEAA ; use/swap item 35/AF79: A5 63 LDA $63 35/AF7B: C5 69 CMP $69 35/AF7D: D0 09 BNE $AF88 ; branch if not same x position 35/AF7F: A5 62 LDA $62 35/AF81: C5 68 CMP $68 35/AF83: D0 03 BNE $AF88 ; branch if not same y position 35/AF85: 4C F7 B4 JMP $B4F7 ; use inventory item ; swap items 35/AF88: A5 63 LDA $63 35/AF8A: 05 69 ORA $69 35/AF8C: F0 08 BEQ $AF96 35/AF8E: A5 63 LDA $63 35/AF90: F0 0A BEQ $AF9C 35/AF92: A5 69 LDA $69 35/AF94: F0 06 BEQ $AF9C 35/AF96: 20 81 9B JSR $9B81 ; play error sound effect 35/AF99: 4C AA AE JMP $AEAA 35/AF9C: A2 00 LDX #$00 35/AF9E: 8E 08 74 STX $7408 35/AFA1: E8 INX 35/AFA2: 8E 09 74 STX $7409 35/AFA5: A5 63 LDA $63 35/AFA7: C5 69 CMP $69 35/AFA9: 90 18 BCC $AFC3 35/AFAB: 48 PHA 35/AFAC: A5 69 LDA $69 35/AFAE: 85 63 STA $63 35/AFB0: 68 PLA 35/AFB1: 85 69 STA $69 35/AFB3: A5 62 LDA $62 35/AFB5: 48 PHA 35/AFB6: A5 68 LDA $68 35/AFB8: 85 62 STA $62 35/AFBA: 68 PLA 35/AFBB: 85 68 STA $68 35/AFBD: EE 08 74 INC $7408 35/AFC0: CE 09 74 DEC $7409 35/AFC3: A5 69 LDA $69 35/AFC5: 20 3F FD JSR $FD3F ; asl3 35/AFC8: 18 CLC 35/AFC9: 65 68 ADC $68 35/AFCB: 65 68 ADC $68 35/AFCD: 85 43 STA $43 35/AFCF: A5 69 LDA $69 35/AFD1: 20 40 FD JSR $FD40 ; asl2 35/AFD4: 18 CLC 35/AFD5: 65 68 ADC $68 35/AFD7: 85 45 STA $45 35/AFD9: AA TAX 35/AFDA: BD 3D 7B LDA $7B3D,X 35/AFDD: D0 1F BNE $AFFE 35/AFDF: 20 81 9B JSR $9B81 ; play error sound effect 35/AFE2: AD 08 74 LDA $7408 35/AFE5: F0 14 BEQ $AFFB 35/AFE7: A5 63 LDA $63 35/AFE9: 48 PHA 35/AFEA: A5 69 LDA $69 35/AFEC: 85 63 STA $63 35/AFEE: 68 PLA 35/AFEF: 85 69 STA $69 35/AFF1: A5 62 LDA $62 35/AFF3: 48 PHA 35/AFF4: A5 68 LDA $68 35/AFF6: 85 62 STA $62 35/AFF8: 68 PLA 35/AFF9: 85 68 STA $68 35/AFFB: 4C AA AE JMP $AEAA 35/AFFE: A6 43 LDX $43 35/B000: BD F5 7A LDA $7AF5,X 35/B003: C9 62 CMP #$62 35/B005: B0 D8 BCS $AFDF 35/B007: 85 40 STA $40 35/B009: E8 INX 35/B00A: BD F5 7A LDA $7AF5,X 35/B00D: 85 41 STA $41 35/B00F: A5 63 LDA $63 35/B011: 20 3F FD JSR $FD3F ; asl3 35/B014: 18 CLC 35/B015: 65 62 ADC $62 35/B017: 65 62 ADC $62 35/B019: AA TAX 35/B01A: 86 42 STX $42 35/B01C: BD F5 7A LDA $7AF5,X 35/B01F: 85 3E STA $3E 35/B021: E8 INX 35/B022: BD F5 7A LDA $7AF5,X 35/B025: 85 3F STA $3F 35/B027: A5 63 LDA $63 35/B029: 20 40 FD JSR $FD40 ; asl2 35/B02C: 18 CLC 35/B02D: 65 62 ADC $62 35/B02F: 85 44 STA $44 35/B031: 20 42 B2 JSR $B242 ; check if item can be equipped ??? 35/B034: B0 A9 BCS $AFDF 35/B036: A5 3E LDA $3E 35/B038: C5 40 CMP $40 35/B03A: D0 2A BNE $B066 35/B03C: 05 40 ORA $40 35/B03E: F0 9F BEQ $AFDF 35/B040: A9 00 LDA #$00 35/B042: A6 42 LDX $42 35/B044: 9D F5 7A STA $7AF5,X 35/B047: E8 INX 35/B048: 9D F5 7A STA $7AF5,X 35/B04B: A6 44 LDX $44 35/B04D: A9 01 LDA #$01 35/B04F: 9D 3D 7B STA $7B3D,X 35/B052: A6 43 LDX $43 35/B054: E8 INX 35/B055: 18 CLC 35/B056: A5 41 LDA $41 35/B058: 65 3F ADC $3F 35/B05A: C9 64 CMP #$64 35/B05C: 90 02 BCC $B060 35/B05E: A9 63 LDA #$63 35/B060: 9D F5 7A STA $7AF5,X 35/B063: 4C 31 B1 JMP $B131 35/B066: A5 41 LDA $41 35/B068: C9 01 CMP #$01 35/B06A: D0 03 BNE $B06F 35/B06C: 4C 01 B1 JMP $B101 35/B06F: A5 40 LDA $40 35/B071: D0 03 BNE $B076 35/B073: 4C 01 B1 JMP $B101 35/B076: A2 00 LDX #$00 35/B078: 86 25 STX $25 35/B07A: BD FD 7A LDA $7AFD,X 35/B07D: 86 24 STX $24 35/B07F: F0 08 BEQ $B089 35/B081: E8 INX 35/B082: E8 INX 35/B083: E0 40 CPX #$40 35/B085: D0 F3 BNE $B07A 35/B087: E6 25 INC $25 35/B089: A5 40 LDA $40 35/B08B: C9 4F CMP #$4F 35/B08D: 90 3E BCC $B0CD 35/B08F: C9 57 CMP #$57 35/B091: B0 3A BCS $B0CD 35/B093: A5 41 LDA $41 35/B095: C9 15 CMP #$15 35/B097: 90 68 BCC $B101 35/B099: A5 3E LDA $3E 35/B09B: F0 14 BEQ $B0B1 35/B09D: A5 25 LDA $25 35/B09F: F0 03 BEQ $B0A4 35/B0A1: 4C DF AF JMP $AFDF 35/B0A4: A6 24 LDX $24 35/B0A6: A5 3E LDA $3E 35/B0A8: 9D FD 7A STA $7AFD,X 35/B0AB: E8 INX 35/B0AC: A5 3F LDA $3F 35/B0AE: 9D FD 7A STA $7AFD,X 35/B0B1: A6 42 LDX $42 35/B0B3: A5 40 LDA $40 35/B0B5: 9D F5 7A STA $7AF5,X 35/B0B8: E8 INX 35/B0B9: A9 14 LDA #$14 35/B0BB: 9D F5 7A STA $7AF5,X 35/B0BE: A6 43 LDX $43 35/B0C0: E8 INX 35/B0C1: BD F5 7A LDA $7AF5,X 35/B0C4: 38 SEC 35/B0C5: E9 14 SBC #$14 35/B0C7: 9D F5 7A STA $7AF5,X 35/B0CA: 4C 31 B1 JMP $B131 35/B0CD: A5 3E LDA $3E 35/B0CF: F0 14 BEQ $B0E5 35/B0D1: A5 25 LDA $25 35/B0D3: F0 03 BEQ $B0D8 35/B0D5: 4C DF AF JMP $AFDF 35/B0D8: A6 24 LDX $24 35/B0DA: A5 3E LDA $3E 35/B0DC: 9D FD 7A STA $7AFD,X 35/B0DF: E8 INX 35/B0E0: A5 3F LDA $3F 35/B0E2: 9D FD 7A STA $7AFD,X 35/B0E5: A6 42 LDX $42 35/B0E7: A5 40 LDA $40 35/B0E9: 9D F5 7A STA $7AF5,X 35/B0EC: E8 INX 35/B0ED: A9 01 LDA #$01 35/B0EF: 9D F5 7A STA $7AF5,X 35/B0F2: A6 43 LDX $43 35/B0F4: E8 INX 35/B0F5: BD F5 7A LDA $7AF5,X 35/B0F8: 38 SEC 35/B0F9: E9 01 SBC #$01 35/B0FB: 9D F5 7A STA $7AF5,X 35/B0FE: 4C 31 B1 JMP $B131 35/B101: A5 3E LDA $3E 35/B103: A6 43 LDX $43 35/B105: 9D F5 7A STA $7AF5,X 35/B108: E8 INX 35/B109: A5 3F LDA $3F 35/B10B: 9D F5 7A STA $7AF5,X 35/B10E: A5 40 LDA $40 35/B110: A6 42 LDX $42 35/B112: 9D F5 7A STA $7AF5,X 35/B115: E8 INX 35/B116: A5 41 LDA $41 35/B118: 9D F5 7A STA $7AF5,X 35/B11B: A6 44 LDX $44 35/B11D: BD 3D 7B LDA $7B3D,X 35/B120: 48 PHA 35/B121: A6 45 LDX $45 35/B123: BD 3D 7B LDA $7B3D,X 35/B126: A6 44 LDX $44 35/B128: 9D 3D 7B STA $7B3D,X 35/B12B: 68 PLA 35/B12C: A6 45 LDX $45 35/B12E: 9D 3D 7B STA $7B3D,X 35/B131: A2 00 LDX #$00 35/B133: BD FD 7A LDA $7AFD,X 35/B136: 9D C0 60 STA $60C0,X 35/B139: E8 INX 35/B13A: E0 40 CPX #$40 35/B13C: D0 F5 BNE $B133 35/B13E: 20 8D 9B JSR $9B8D ; get equipped weapon pointer 35/B141: AD F7 7A LDA $7AF7 35/B144: 91 59 STA ($59),Y 35/B146: C8 INY 35/B147: AD F8 7A LDA $7AF8 35/B14A: 91 59 STA ($59),Y 35/B14C: C8 INY 35/B14D: AD FB 7A LDA $7AFB 35/B150: 91 59 STA ($59),Y 35/B152: C8 INY 35/B153: AD FC 7A LDA $7AFC 35/B156: 91 59 STA ($59),Y 35/B158: 20 7D 9B JSR $9B7D ; play confirm sound effect 35/B15B: AD 08 74 LDA $7408 35/B15E: F0 0A BEQ $B16A 35/B160: A5 63 LDA $63 35/B162: 48 PHA 35/B163: A5 69 LDA $69 35/B165: 85 63 STA $63 35/B167: 68 PLA 35/B168: 85 69 STA $69 35/B16A: A6 63 LDX $63 35/B16C: D0 19 BNE $B187 35/B16E: 20 F9 B5 JSR $B5F9 35/B171: A5 69 LDA $69 35/B173: C9 03 CMP #$03 35/B175: B0 1C BCS $B193 35/B177: A5 63 LDA $63 35/B179: 48 PHA 35/B17A: A6 69 LDX $69 35/B17C: 86 63 STX $63 35/B17E: 20 01 B6 JSR $B601 35/B181: 68 PLA 35/B182: 85 63 STA $63 35/B184: 18 CLC 35/B185: 90 0C BCC $B193 35/B187: 20 01 B6 JSR $B601 35/B18A: A5 63 LDA $63 35/B18C: C9 03 CMP #$03 35/B18E: B0 03 BCS $B193 35/B190: 20 F9 B5 JSR $B5F9 35/B193: C6 52 DEC $52 35/B195: 4C B0 B1 JMP $B1B0 ; B button 35/B198: A5 67 LDA $67 35/B19A: F0 12 BEQ $B1AE ; branch if no item selected 35/B19C: C6 67 DEC $67 ; deselect item 35/B19E: A9 F0 LDA #$F0 ; hide cursor 1 35/B1A0: 85 1C STA $1C 35/B1A2: 85 1D STA $1D 35/B1A4: A9 01 LDA #$01 35/B1A6: 85 1A STA $1A 35/B1A8: 20 2E 89 JSR $892E ; set cursor sprite position 35/B1AB: 4C AA AE JMP $AEAA ; close menu 35/B1AE: C6 52 DEC $52 35/B1B0: 20 B0 8E JSR $8EB0 ; close menu window 35/B1B3: A9 00 LDA #$00 35/B1B5: 85 10 STA $10 35/B1B7: A5 08 LDA $08 35/B1B9: 29 FE AND #$FE 35/B1BB: 85 08 STA $08 35/B1BD: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 35/B1C0: A9 00 LDA #$00 35/B1C2: 85 18 STA $18 35/B1C4: 20 DF 8A JSR $8ADF ; hide cursor 35/B1C7: A9 01 LDA #$01 35/B1C9: 85 18 STA $18 35/B1CB: 20 DF 8A JSR $8ADF ; hide cursor 35/B1CE: E6 52 INC $52 35/B1D0: 20 26 80 JSR $8026 ; update character equipment 35/B1D3: A9 00 LDA #$00 35/B1D5: 4C FD 99 JMP $99FD ; command cancelled ; [ draw item list text ] ; $34-$37: item id/qty for this column (4 * 2 bytes) 35/B1D8: 20 54 97 JSR $9754 ; init text buffer 35/B1DB: A2 00 LDX #$00 35/B1DD: 86 3C STX $3C 35/B1DF: A2 0D LDX #$0D 35/B1E1: 20 49 A5 JSR $A549 ; write spaces to text buffer 35/B1E4: A6 3C LDX $3C 35/B1E6: B5 34 LDA $34,X ; item id 35/B1E8: 85 1A STA $1A 35/B1EA: C9 FF CMP #$FF 35/B1EC: D0 08 BNE $B1F6 ; branch if not a blank row 35/B1EE: A9 0D LDA #$0D 35/B1F0: 20 58 A5 JSR $A558 ; add to text buffer offset 35/B1F3: 18 CLC 35/B1F4: 90 3C BCC $B232 35/B1F6: BD 00 74 LDA $7400,X 35/B1F9: D0 05 BNE $B200 ; branch if item is usable 35/B1FB: A9 73 LDA #$73 ; "X" symbol 35/B1FD: 8D D7 7A STA $7AD7 35/B200: A9 00 LDA #$00 ; string table offset: $0400 (item names) 35/B202: 85 18 STA $18 35/B204: A9 88 LDA #$88 35/B206: 85 19 STA $19 35/B208: A5 1A LDA $1A 35/B20A: A2 01 LDX #$01 ; destination offset: 1 35/B20C: 20 09 A6 JSR $A609 ; load text string 35/B20F: A9 C8 LDA #$C8 ; ":" 35/B211: 8D E1 7A STA $7AE1 35/B214: A9 00 LDA #$00 35/B216: 85 19 STA $19 35/B218: A6 3C LDX $3C 35/B21A: B5 35 LDA $35,X ; quantity 35/B21C: 85 18 STA $18 35/B21E: 20 E1 95 JSR $95E1 ; convert hex to decimal 35/B221: A5 1D LDA $1D 35/B223: 8D E2 7A STA $7AE2 35/B226: A5 1E LDA $1E 35/B228: 8D E3 7A STA $7AE3 35/B22B: A9 0D LDA #$0D 35/B22D: 85 18 STA $18 35/B22F: 20 6A 96 JSR $966A ; draw text 35/B232: A9 0D LDA #$0D 35/B234: 20 58 A5 JSR $A558 ; add to text buffer offset 35/B237: E6 3C INC $3C ; next item 35/B239: E6 3C INC $3C 35/B23B: A5 3C LDA $3C 35/B23D: C9 08 CMP #$08 35/B23F: D0 9E BNE $B1DF 35/B241: 60 RTS ; [ check if item can be equipped ??? ] 35/B242: A5 40 LDA $40 35/B244: 85 1D STA $1D 35/B246: AD F5 7A LDA $7AF5 35/B249: C5 3E CMP $3E 35/B24B: D0 03 BNE $B250 35/B24D: AD F9 7A LDA $7AF9 35/B250: 85 1C STA $1C 35/B252: A5 1D LDA $1D 35/B254: C5 1C CMP $1C 35/B256: 90 08 BCC $B260 35/B258: 48 PHA 35/B259: A5 1C LDA $1C 35/B25B: 85 1D STA $1D 35/B25D: 68 PLA 35/B25E: 85 1C STA $1C 35/B260: A5 1C LDA $1C 35/B262: F0 41 BEQ $B2A5 35/B264: C9 62 CMP #$62 35/B266: 90 02 BCC $B26A ; branch if a weapon or shield 35/B268: B0 3C BCS $B2A6 35/B26A: C9 58 CMP #$58 35/B26C: 90 0E BCC $B27C ; branch if not a shield ; shield 35/B26E: A5 1D LDA $1D 35/B270: F0 33 BEQ $B2A5 35/B272: C9 58 CMP #$58 35/B274: B0 2F BCS $B2A5 35/B276: C9 46 CMP #$46 35/B278: B0 2C BCS $B2A6 35/B27A: 90 29 BCC $B2A5 ; weapon 35/B27C: C9 4F CMP #$4F 35/B27E: 90 0F BCC $B28F 35/B280: A5 1D LDA $1D 35/B282: F0 21 BEQ $B2A5 35/B284: C9 4F CMP #$4F 35/B286: B0 1E BCS $B2A6 35/B288: C9 4A CMP #$4A 35/B28A: B0 19 BCS $B2A5 35/B28C: 38 SEC 35/B28D: B0 17 BCS $B2A6 35/B28F: C9 4A CMP #$4A 35/B291: 90 07 BCC $B29A 35/B293: A5 1D LDA $1D 35/B295: F0 0E BEQ $B2A5 35/B297: 38 SEC 35/B298: B0 0C BCS $B2A6 35/B29A: C9 46 CMP #$46 35/B29C: 90 07 BCC $B2A5 35/B29E: A5 1D LDA $1D 35/B2A0: F0 03 BEQ $B2A5 35/B2A2: 38 SEC 35/B2A3: B0 01 BCS $B2A6 35/B2A5: 18 CLC 35/B2A6: 60 RTS ; [ scroll item list right ] 35/B2A7: A5 66 LDA $66 35/B2A9: C9 06 CMP #$06 35/B2AB: B0 3D BCS $B2EA 35/B2AD: 18 CLC 35/B2AE: 69 02 ADC #$02 35/B2B0: 20 3F FD JSR $FD3F ; asl3 35/B2B3: 85 3D STA $3D 35/B2B5: 20 8B B4 JSR $B48B ; draw inventory column 35/B2B8: 18 CLC 35/B2B9: A5 66 LDA $66 35/B2BB: 69 02 ADC #$02 35/B2BD: 0A ASL 35/B2BE: AA TAX 35/B2BF: BD 36 B6 LDA $B636,X 35/B2C2: 85 18 STA $18 35/B2C4: E8 INX 35/B2C5: BD 36 B6 LDA $B636,X 35/B2C8: 85 19 STA $19 35/B2CA: A5 66 LDA $66 35/B2CC: C9 05 CMP #$05 35/B2CE: B0 04 BCS $B2D4 35/B2D0: A9 00 LDA #$00 35/B2D2: F0 11 BEQ $B2E5 35/B2D4: A5 18 LDA $18 35/B2D6: 48 PHA 35/B2D7: A5 19 LDA $19 35/B2D9: 48 PHA 35/B2DA: 20 0B 8F JSR $8F0B 35/B2DD: 68 PLA 35/B2DE: 85 19 STA $19 35/B2E0: 68 PLA 35/B2E1: 85 18 STA $18 35/B2E3: A9 02 LDA #$02 35/B2E5: 85 1A STA $1A 35/B2E7: 20 38 8B JSR $8B38 ; open menu window 35/B2EA: A5 66 LDA $66 35/B2EC: C9 07 CMP #$07 35/B2EE: F0 2B BEQ $B31B 35/B2F0: E6 66 INC $66 35/B2F2: 18 CLC 35/B2F3: A5 10 LDA $10 35/B2F5: 69 78 ADC #$78 35/B2F7: 85 64 STA $64 35/B2F9: 90 06 BCC $B301 35/B2FB: A5 65 LDA $65 35/B2FD: 49 01 EOR #$01 35/B2FF: 85 65 STA $65 35/B301: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 35/B304: 18 CLC 35/B305: A5 10 LDA $10 35/B307: 69 14 ADC #$14 35/B309: 85 10 STA $10 35/B30B: 90 08 BCC $B315 35/B30D: A5 08 LDA $08 35/B30F: 29 FE AND #$FE 35/B311: 05 65 ORA $65 35/B313: 85 08 STA $08 35/B315: A5 10 LDA $10 35/B317: C5 64 CMP $64 35/B319: D0 E6 BNE $B301 35/B31B: A5 67 LDA $67 35/B31D: F0 31 BEQ $B350 35/B31F: A5 66 LDA $66 35/B321: C5 69 CMP $69 35/B323: F0 07 BEQ $B32C 35/B325: 18 CLC 35/B326: 69 01 ADC #$01 35/B328: C5 69 CMP $69 35/B32A: D0 24 BNE $B350 35/B32C: A9 A8 LDA #$A8 35/B32E: A6 68 LDX $68 35/B330: F0 06 BEQ $B338 35/B332: 18 CLC 35/B333: 69 10 ADC #$10 35/B335: CA DEX 35/B336: D0 FB BNE $B333 35/B338: 85 1C STA $1C 35/B33A: A2 0C LDX #$0C 35/B33C: A5 69 LDA $69 35/B33E: C5 66 CMP $66 35/B340: F0 02 BEQ $B344 35/B342: A2 84 LDX #$84 35/B344: 86 1D STX $1D 35/B346: A9 01 LDA #$01 35/B348: 85 1A STA $1A 35/B34A: 20 2E 89 JSR $892E ; set cursor sprite position 35/B34D: 18 CLC 35/B34E: 90 11 BCC $B361 35/B350: A5 1C LDA $1C 35/B352: 48 PHA 35/B353: A9 F0 LDA #$F0 35/B355: 85 1C STA $1C 35/B357: A9 01 LDA #$01 35/B359: 85 1A STA $1A 35/B35B: 20 2E 89 JSR $892E ; set cursor sprite position 35/B35E: 68 PLA 35/B35F: 85 1C STA $1C 35/B361: 60 RTS ; [ scroll item list left ] 35/B362: A5 66 LDA $66 ; current x scroll position 35/B364: C9 02 CMP #$02 35/B366: 90 3B BCC $B3A3 35/B368: D0 0B BNE $B375 ; 2 (draw equipped items) 35/B36A: A9 00 LDA #$00 35/B36C: 8D 73 75 STA $7573 35/B36F: 20 19 B4 JSR $B419 ; draw equipped items 35/B372: 18 CLC 35/B373: 90 2E BCC $B3A3 ; 3-8 (draw inventory column to the left) 35/B375: 38 SEC 35/B376: E9 03 SBC #$03 35/B378: 20 3F FD JSR $FD3F ; asl3 35/B37B: 85 3D STA $3D 35/B37D: 20 8B B4 JSR $B48B ; draw inventory column 35/B380: 38 SEC 35/B381: A5 66 LDA $66 35/B383: E9 03 SBC #$03 35/B385: 0A ASL 35/B386: AA TAX 35/B387: BD 36 B6 LDA $B636,X 35/B38A: 85 18 STA $18 35/B38C: E8 INX 35/B38D: BD 36 B6 LDA $B636,X 35/B390: 85 19 STA $19 35/B392: A5 66 LDA $66 35/B394: C9 03 CMP #$03 35/B396: F0 04 BEQ $B39C 35/B398: A9 00 LDA #$00 35/B39A: F0 02 BEQ $B39E 35/B39C: A9 01 LDA #$01 35/B39E: 85 1A STA $1A 35/B3A0: 20 38 8B JSR $8B38 ; open menu window ; 0-1 (don't need to draw anything) 35/B3A3: A5 66 LDA $66 35/B3A5: F0 2B BEQ $B3D2 ; branch if can't scroll further left 35/B3A7: C6 66 DEC $66 ; decrement x scroll position 35/B3A9: 38 SEC 35/B3AA: A5 10 LDA $10 ; ppu bg x-scroll position 35/B3AC: E9 78 SBC #$78 ; scroll 120 pixels left (15 tiles) 35/B3AE: 85 64 STA $64 ; target scroll position 35/B3B0: B0 06 BCS $B3B8 35/B3B2: A5 65 LDA $65 35/B3B4: 49 01 EOR #$01 ; toggle tilemap id 35/B3B6: 85 65 STA $65 ; start of scroll loop (takes 6 frames to scroll) 35/B3B8: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 35/B3BB: 38 SEC 35/B3BC: A5 10 LDA $10 35/B3BE: E9 14 SBC #$14 ; subtract 20 from ppu scroll 35/B3C0: 85 10 STA $10 35/B3C2: B0 08 BCS $B3CC 35/B3C4: A5 08 LDA $08 35/B3C6: 29 FE AND #$FE 35/B3C8: 05 65 ORA $65 35/B3CA: 85 08 STA $08 35/B3CC: A5 10 LDA $10 35/B3CE: C5 64 CMP $64 35/B3D0: D0 E6 BNE $B3B8 35/B3D2: A5 67 LDA $67 35/B3D4: F0 31 BEQ $B407 ; branch if no item selected yet 35/B3D6: A5 66 LDA $66 35/B3D8: C5 69 CMP $69 35/B3DA: F0 07 BEQ $B3E3 ; branch if selected item in this column 35/B3DC: 18 CLC 35/B3DD: 69 01 ADC #$01 35/B3DF: C5 69 CMP $69 35/B3E1: D0 24 BNE $B407 ; branch if selected item not in next column ; update cursor 1 position (selected item) 35/B3E3: A9 A8 LDA #$A8 35/B3E5: A6 68 LDX $68 35/B3E7: F0 06 BEQ $B3EF 35/B3E9: 18 CLC 35/B3EA: 69 10 ADC #$10 35/B3EC: CA DEX 35/B3ED: D0 FB BNE $B3EA 35/B3EF: 85 1C STA $1C ; y position 35/B3F1: A2 0C LDX #$0C 35/B3F3: A5 69 LDA $69 35/B3F5: C5 66 CMP $66 35/B3F7: F0 02 BEQ $B3FB 35/B3F9: A2 84 LDX #$84 35/B3FB: 86 1D STX $1D ; x position 35/B3FD: A9 01 LDA #$01 ; cursor 1 35/B3FF: 85 1A STA $1A 35/B401: 20 2E 89 JSR $892E ; set cursor sprite position 35/B404: 18 CLC 35/B405: 90 11 BCC $B418 ; return ; hide cursor 1 35/B407: A5 1C LDA $1C 35/B409: 48 PHA 35/B40A: A9 F0 LDA #$F0 35/B40C: 85 1C STA $1C ; y position 35/B40E: A9 01 LDA #$01 ; cursor 1 35/B410: 85 1A STA $1A 35/B412: 20 2E 89 JSR $892E ; set cursor sprite position 35/B415: 68 PLA 35/B416: 85 1C STA $1C 35/B418: 60 RTS ; [ draw equipped items ] 35/B419: A9 01 LDA #$01 35/B41B: A2 07 LDX #$07 35/B41D: 9D 00 74 STA $7400,X ; clear buffer 35/B420: CA DEX 35/B421: 10 FA BPL $B41D 35/B423: A9 FF LDA #$FF ; don't draw 1st and 3rd rows 35/B425: A2 07 LDX #$07 35/B427: 95 34 STA $34,X 35/B429: CA DEX 35/B42A: 10 FB BPL $B427 35/B42C: 20 41 A5 JSR $A541 ; get character offset 35/B42F: 18 CLC 35/B430: 69 03 ADC #$03 35/B432: A8 TAY 35/B433: B1 59 LDA ($59),Y ; right hand item (2nd row) 35/B435: 85 36 STA $36 35/B437: C8 INY 35/B438: B1 59 LDA ($59),Y ; right hand qty 35/B43A: 85 37 STA $37 35/B43C: C8 INY 35/B43D: B1 59 LDA ($59),Y ; left hand item (4th row) 35/B43F: 85 3A STA $3A 35/B441: C8 INY 35/B442: B1 59 LDA ($59),Y ; left hand qty 35/B444: 85 3B STA $3B 35/B446: 20 D8 B1 JSR $B1D8 ; draw item list text 35/B449: A9 C0 LDA #$C0 ; みぎて and ひだりて (1st and 3rd rows) 35/B44B: 8D 01 72 STA $7201 ; dakuten for "ぎ" and "だ" 35/B44E: 8D 35 72 STA $7235 35/B451: A9 9C LDA #$9C ; "て" 35/B453: 8D 0F 72 STA $720F 35/B456: 8D 44 72 STA $7244 35/B459: A9 A9 LDA #$A9 ; "み" 35/B45B: 8D 0D 72 STA $720D 35/B45E: A9 90 LDA #$90 ; "き" 35/B460: 8D 0E 72 STA $720E 35/B463: A9 A4 LDA #$A4 ; "ひ" 35/B465: 8D 41 72 STA $7241 35/B468: A9 99 LDA #$99 ; "た" 35/B46A: 8D 42 72 STA $7242 35/B46D: A9 B1 LDA #$B1 ; "り" 35/B46F: 8D 43 72 STA $7243 35/B472: AD 73 75 LDA $7573 35/B475: C9 FF CMP #$FF 35/B477: F0 03 BEQ $B47C 35/B479: 20 0B 8F JSR $8F0B 35/B47C: A9 01 LDA #$01 35/B47E: 85 18 STA $18 35/B480: A9 0F LDA #$0F 35/B482: 85 19 STA $19 35/B484: A9 03 LDA #$03 35/B486: 85 1A STA $1A 35/B488: 4C 38 8B JMP $8B38 ; open menu window ; [ draw inventory column ] 35/B48B: A9 01 LDA #$01 35/B48D: A2 07 LDX #$07 35/B48F: 9D 00 74 STA $7400,X 35/B492: CA DEX 35/B493: 10 FA BPL $B48F 35/B495: A4 3D LDY $3D 35/B497: A2 00 LDX #$00 35/B499: B9 C0 60 LDA $60C0,Y ; copy 4 inventory items (id/qty) 35/B49C: 95 34 STA $34,X 35/B49E: C8 INY 35/B49F: E8 INX 35/B4A0: E0 08 CPX #$08 35/B4A2: D0 F5 BNE $B499 35/B4A4: A2 00 LDX #$00 35/B4A6: B5 34 LDA $34,X 35/B4A8: D0 04 BNE $B4AE 35/B4AA: A9 57 LDA #$57 ; replace blanks with $57 (empty item) 35/B4AC: 95 34 STA $34,X 35/B4AE: E8 INX 35/B4AF: E8 INX 35/B4B0: E0 08 CPX #$08 35/B4B2: D0 F2 BNE $B4A6 35/B4B4: A5 3D LDA $3D 35/B4B6: 4A LSR 35/B4B7: A8 TAY 35/B4B8: A2 00 LDX #$00 35/B4BA: B9 41 7B LDA $7B41,Y 35/B4BD: D0 03 BNE $B4C2 35/B4BF: DE 00 74 DEC $7400,X 35/B4C2: C8 INY 35/B4C3: E8 INX 35/B4C4: E8 INX 35/B4C5: E0 08 CPX #$08 35/B4C7: D0 F1 BNE $B4BA 35/B4C9: 18 CLC 35/B4CA: A5 3D LDA $3D 35/B4CC: 69 08 ADC #$08 35/B4CE: 85 3D STA $3D 35/B4D0: A8 TAY 35/B4D1: 4C D8 B1 JMP $B1D8 ; draw item list text ; [ set item menu cursor position ] 35/B4D4: A9 A8 LDA #$A8 ; y position for top row 35/B4D6: A6 62 LDX $62 35/B4D8: F0 06 BEQ $B4E0 35/B4DA: 18 CLC 35/B4DB: 69 10 ADC #$10 ; add 16 for each row 35/B4DD: CA DEX 35/B4DE: D0 FB BNE $B4DB 35/B4E0: 85 1C STA $1C 35/B4E2: A5 63 LDA $63 35/B4E4: C5 66 CMP $66 35/B4E6: D0 04 BNE $B4EC 35/B4E8: A9 08 LDA #$08 ; cursor on left side of screen 35/B4EA: D0 02 BNE $B4EE 35/B4EC: A9 80 LDA #$80 ; cursor on right side of screen 35/B4EE: 85 1D STA $1D 35/B4F0: A9 00 LDA #$00 ; cursor 0 35/B4F2: 85 1A STA $1A 35/B4F4: 4C 2E 89 JMP $892E ; set cursor sprite position ; [ use inventory item ] 35/B4F7: A5 63 LDA $63 ; cursor column 35/B4F9: 20 3F FD JSR $FD3F ; asl3 35/B4FC: 18 CLC 35/B4FD: 65 62 ADC $62 ; cursor row 35/B4FF: 65 62 ADC $62 35/B501: AA TAX 35/B502: 86 26 STX $26 35/B504: BD F5 7A LDA $7AF5,X ; selected item 35/B507: D0 0D BNE $B516 35/B509: 20 9B 9B JSR $9B9B ; get action pointer 35/B50C: A9 00 LDA #$00 35/B50E: 91 5B STA ($5B),Y ; action $00 (do nothing) 35/B510: 20 81 9B JSR $9B81 ; play error sound effect 35/B513: 4C AA AE JMP $AEAA 35/B516: 48 PHA 35/B517: 20 7D 9B JSR $9B7D ; play confirm sound effect 35/B51A: 68 PLA 35/B51B: 48 PHA 35/B51C: 20 9B 9B JSR $9B9B ; get action pointer 35/B51F: 68 PLA 35/B520: 48 PHA 35/B521: 91 5B STA ($5B),Y ; item id 35/B523: C9 A6 CMP #$A6 35/B525: F0 08 BEQ $B52F ; branch if potion 35/B527: C9 A7 CMP #$A7 35/B529: F0 04 BEQ $B52F ; branch if hi-potion 35/B52B: C9 A8 CMP #$A8 35/B52D: D0 05 BNE $B534 ; branch if not elixir 35/B52F: A9 FF LDA #$FF 35/B531: 8D E8 7C STA $7CE8 35/B534: 88 DEY ; Y = #$2C 35/B535: 88 DEY 35/B536: B1 5B LDA ($5B),Y ; set flag for using an item 35/B538: 09 08 ORA #$08 35/B53A: 91 5B STA ($5B),Y 35/B53C: 68 PLA 35/B53D: 85 27 STA $27 35/B53F: C9 C8 CMP #$C8 35/B541: B0 C6 BCS $B509 ; do nothing if a spell item 35/B543: C9 98 CMP #$98 35/B545: B0 1D BCS $B564 ; branch if a usable item 35/B547: C9 57 CMP #$57 35/B549: B0 BE BCS $B509 ; do nothing if armor ; used a weapon as an item 35/B54B: 85 18 STA $18 35/B54D: A9 08 LDA #$08 35/B54F: 85 1A STA $1A 35/B551: A9 00 LDA #$00 ; 30/9400 (weapon properties) 35/B553: 85 20 STA $20 35/B555: A9 94 LDA #$94 35/B557: 85 21 STA $21 35/B559: A2 78 LDX #$78 35/B55B: 20 3A BA JSR $BA3A ; load array item (bank 30) 35/B55E: AC 7C 74 LDY $747C ; byte 4 (spell cast) 35/B561: 18 CLC 35/B562: 90 27 BCC $B58B ; used an item 35/B564: 38 SEC 35/B565: E9 98 SBC #$98 35/B567: 18 CLC 35/B568: 69 A0 ADC #$A0 ; 2E/91A0 (item spell cast) 35/B56A: 85 46 STA $46 35/B56C: A9 00 LDA #$00 35/B56E: 69 91 ADC #$91 35/B570: 85 47 STA $47 35/B572: AD 00 74 LDA $7400 35/B575: 48 PHA 35/B576: A9 01 LDA #$01 35/B578: 85 4B STA $4B 35/B57A: A9 1A LDA #$1A 35/B57C: 85 4A STA $4A 35/B57E: A9 17 LDA #$17 35/B580: 20 DC FD JSR $FDDC ; load rom data to buffer 35/B583: AD 00 74 LDA $7400 35/B586: A8 TAY ; Y = spell cast 35/B587: 68 PLA 35/B588: 8D 00 74 STA $7400 35/B58B: A5 63 LDA $63 35/B58D: 20 40 FD JSR $FD40 ; asl2 35/B590: 18 CLC 35/B591: 65 62 ADC $62 35/B593: AA TAX 35/B594: BD 3D 7B LDA $7B3D,X ; item usability 35/B597: D0 03 BNE $B59C 35/B599: 4C 09 B5 JMP $B509 ; do nothing if item is not usable 35/B59C: C0 7F CPY #$7F 35/B59E: D0 07 BNE $B5A7 35/B5A0: A9 09 LDA #$09 35/B5A2: 8D 7D 74 STA $747D 35/B5A5: D0 13 BNE $B5BA 35/B5A7: 84 18 STY $18 35/B5A9: A9 08 LDA #$08 35/B5AB: 85 1A STA $1A 35/B5AD: A9 C0 LDA #$C0 ; 30/98C0 (attack properties) 35/B5AF: 85 20 STA $20 35/B5B1: A9 98 LDA #$98 35/B5B3: 85 21 STA $21 35/B5B5: A2 78 LDX #$78 35/B5B7: 20 3A BA JSR $BA3A ; load array item (bank 30) 35/B5BA: 20 79 B9 JSR $B979 35/B5BD: C9 02 CMP #$02 35/B5BF: D0 05 BNE $B5C6 35/B5C1: C6 52 DEC $52 35/B5C3: 4C B0 B1 JMP $B1B0 ; close menu 35/B5C6: A9 3F LDA #$3F 35/B5C8: 20 88 9B JSR $9B88 ; add character offset 35/B5CB: A5 27 LDA $27 35/B5CD: 91 5B STA ($5B),Y 35/B5CF: A5 63 LDA $63 35/B5D1: D0 05 BNE $B5D8 ; branch if not column 0 (equipped item) 35/B5D3: 88 DEY 35/B5D4: A9 01 LDA #$01 35/B5D6: 91 5B STA ($5B),Y ; used equipped item (#$3E) 35/B5D8: A6 26 LDX $26 35/B5DA: E8 INX 35/B5DB: DE F5 7A DEC $7AF5,X ; decrement item qty 35/B5DE: BD F5 7A LDA $7AF5,X 35/B5E1: D0 06 BNE $B5E9 ; branch if item qty != 0 35/B5E3: CA DEX 35/B5E4: A9 00 LDA #$00 35/B5E6: 9D F5 7A STA $7AF5,X ; remove item from inventory 35/B5E9: A2 00 LDX #$00 35/B5EB: BD FD 7A LDA $7AFD,X ; copy inventory buffer to inventory 35/B5EE: 9D C0 60 STA $60C0,X 35/B5F1: E8 INX 35/B5F2: E0 40 CPX #$40 35/B5F4: D0 F5 BNE $B5EB 35/B5F6: 4C B0 B1 JMP $B1B0 ; close menu ; [ ] 35/B5F9: A9 FF LDA #$FF 35/B5FB: 8D 73 75 STA $7573 35/B5FE: 4C 19 B4 JMP $B419 ; draw equipped items ; [ ] 35/B601: CA DEX 35/B602: 8A TXA 35/B603: 20 3F FD JSR $FD3F ; asl3 35/B606: 85 3D STA $3D 35/B608: 20 8B B4 JSR $B48B ; draw inventory column 35/B60B: A5 63 LDA $63 35/B60D: 38 SEC 35/B60E: E9 01 SBC #$01 35/B610: 0A ASL 35/B611: AA TAX 35/B612: BD 36 B6 LDA $B636,X 35/B615: 85 18 STA $18 35/B617: E8 INX 35/B618: BD 36 B6 LDA $B636,X 35/B61B: 85 19 STA $19 35/B61D: A5 63 LDA $63 35/B61F: C9 01 CMP #$01 35/B621: D0 04 BNE $B627 35/B623: A9 01 LDA #$01 ; left side border 35/B625: D0 0A BNE $B631 35/B627: C9 08 CMP #$08 35/B629: D0 04 BNE $B62F 35/B62B: A9 02 LDA #$02 ; right side border 35/B62D: D0 02 BNE $B631 35/B62F: A9 00 LDA #$00 ; no side borders 35/B631: 85 1A STA $1A 35/B633: 4C 38 8B JMP $8B38 ; open menu window 35/B636: 10 1E 1F 8D 8E 9C 9D 0B 0C 1A 1B 89 8A 98 99 07 ; -------------------------------------------------------------------------- ; [ battle command $15: magic ] 35/B646: AD D8 7E LDA $7ED8 35/B649: 29 40 AND #$40 35/B64B: F0 08 BEQ $B655 ; branch if can use magic 35/B64D: 20 81 9B JSR $9B81 ; play error sound effect 35/B650: A9 01 LDA #$01 35/B652: 4C FD 99 JMP $99FD ; command confirmed 35/B655: A9 FF LDA #$FF 35/B657: A2 17 LDX #$17 35/B659: 9D 00 74 STA $7400,X ; clear $7400-$7417 35/B65C: CA DEX 35/B65D: 10 FA BPL $B659 35/B65F: A9 3F LDA #$3F 35/B661: 20 88 9B JSR $9B88 ; add character offset 35/B664: A2 07 LDX #$07 35/B666: B1 57 LDA ($57),Y ; mp 35/B668: D0 06 BNE $B670 ; find the highest available spell level 35/B66A: CA DEX 35/B66B: 88 DEY 35/B66C: 88 DEY 35/B66D: 4C 66 B6 JMP $B666 35/B670: 8A TXA 35/B671: 85 46 STA $46 35/B673: 85 27 STA $27 35/B675: 48 PHA 35/B676: 38 SEC 35/B677: A9 07 LDA #$07 35/B679: E5 27 SBC $27 35/B67B: 85 18 STA $18 35/B67D: 0A ASL 35/B67E: 85 19 STA $19 35/B680: 0A ASL 35/B681: 18 CLC 35/B682: 65 18 ADC $18 35/B684: 65 19 ADC $19 35/B686: 85 18 STA $18 35/B688: A9 00 LDA #$00 35/B68A: 85 24 STA $24 35/B68C: A9 03 LDA #$03 35/B68E: 85 25 STA $25 35/B690: A9 07 LDA #$07 35/B692: 20 88 9B JSR $9B88 ; add character offset 35/B695: 65 27 ADC $27 35/B697: A8 TAY 35/B698: B1 59 LDA ($59),Y 35/B69A: A2 07 LDX #$07 35/B69C: 86 1C STX $1C 35/B69E: 4A LSR 35/B69F: 90 16 BCC $B6B7 35/B6A1: 48 PHA 35/B6A2: A5 24 LDA $24 35/B6A4: AA TAX 35/B6A5: A5 18 LDA $18 35/B6A7: 9D 00 74 STA $7400,X 35/B6AA: E6 18 INC $18 35/B6AC: E6 24 INC $24 35/B6AE: 68 PLA 35/B6AF: C6 25 DEC $25 35/B6B1: C6 1C DEC $1C 35/B6B3: A6 1C LDX $1C 35/B6B5: D0 E7 BNE $B69E 35/B6B7: E6 18 INC $18 35/B6B9: C6 1C DEC $1C 35/B6BB: A6 1C LDX $1C 35/B6BD: D0 DF BNE $B69E 35/B6BF: 18 CLC 35/B6C0: A5 25 LDA $25 35/B6C2: 65 24 ADC $24 35/B6C4: 85 24 STA $24 35/B6C6: C6 27 DEC $27 35/B6C8: A5 27 LDA $27 35/B6CA: 10 C0 BPL $B68C 35/B6CC: 20 54 97 JSR $9754 ; init text buffer 35/B6CF: 68 PLA 35/B6D0: AA TAX 35/B6D1: E8 INX 35/B6D2: 86 24 STX $24 35/B6D4: 0A ASL 35/B6D5: A8 TAY 35/B6D6: 84 25 STY $25 35/B6D8: A9 00 LDA #$00 35/B6DA: 85 26 STA $26 35/B6DC: A2 1C LDX #$1C 35/B6DE: 20 49 A5 JSR $A549 ; write spaces to text buffer 35/B6E1: A9 08 LDA #$08 35/B6E3: 85 27 STA $27 35/B6E5: 18 CLC 35/B6E6: A5 24 LDA $24 35/B6E8: 69 80 ADC #$80 35/B6EA: 8D D7 7A STA $7AD7 35/B6ED: A9 C7 LDA #$C7 35/B6EF: 8D DB 7A STA $7ADB 35/B6F2: A9 06 LDA #$06 35/B6F4: 20 88 9B JSR $9B88 ; add character offset 35/B6F7: 65 24 ADC $24 35/B6F9: A8 TAY 35/B6FA: B1 5B LDA ($5B),Y 35/B6FC: 85 18 STA $18 35/B6FE: A9 00 LDA #$00 35/B700: 85 19 STA $19 35/B702: 20 E1 95 JSR $95E1 ; convert hex to decimal 35/B705: A5 1D LDA $1D 35/B707: 8D D9 7A STA $7AD9 35/B70A: A5 1E LDA $1E 35/B70C: 8D DA 7A STA $7ADA 35/B70F: A9 31 LDA #$31 35/B711: 20 88 9B JSR $9B88 ; add character offset 35/B714: 65 25 ADC $25 35/B716: A8 TAY 35/B717: B1 57 LDA ($57),Y 35/B719: 85 18 STA $18 35/B71B: A9 00 LDA #$00 35/B71D: 85 19 STA $19 35/B71F: 20 E1 95 JSR $95E1 ; convert hex to decimal 35/B722: A5 1D LDA $1D 35/B724: 8D DC 7A STA $7ADC 35/B727: A5 1E LDA $1E 35/B729: 8D DD 7A STA $7ADD 35/B72C: C6 25 DEC $25 35/B72E: C6 25 DEC $25 35/B730: A9 03 LDA #$03 35/B732: 85 28 STA $28 35/B734: A6 26 LDX $26 35/B736: BD 00 74 LDA $7400,X 35/B739: C9 FF CMP #$FF 35/B73B: 85 1A STA $1A 35/B73D: F0 30 BEQ $B76F 35/B73F: 85 18 STA $18 35/B741: 48 PHA 35/B742: A9 C0 LDA #$C0 ; 30/98C0 (attack properties) 35/B744: 85 20 STA $20 35/B746: A9 98 LDA #$98 35/B748: 85 21 STA $21 35/B74A: 20 FD B8 JSR $B8FD ; check if character can equip item/spell 35/B74D: A5 1C LDA $1C 35/B74F: D0 0E BNE $B75F 35/B751: A6 27 LDX $27 35/B753: A9 73 LDA #$73 35/B755: 9D D7 7A STA $7AD7,X 35/B758: A6 26 LDX $26 35/B75A: A9 FF LDA #$FF 35/B75C: 9D 00 74 STA $7400,X 35/B75F: E6 27 INC $27 35/B761: A9 90 LDA #$90 35/B763: 85 18 STA $18 35/B765: A9 89 LDA #$89 35/B767: 85 19 STA $19 35/B769: 68 PLA 35/B76A: A6 27 LDX $27 ; destination offset 35/B76C: 20 09 A6 JSR $A609 ; load text string 35/B76F: 18 CLC 35/B770: A5 27 LDA $27 35/B772: 69 06 ADC #$06 35/B774: 85 27 STA $27 35/B776: E6 26 INC $26 35/B778: C6 28 DEC $28 35/B77A: A5 28 LDA $28 35/B77C: D0 B6 BNE $B734 35/B77E: A9 1C LDA #$1C 35/B780: 85 18 STA $18 35/B782: 20 6A 96 JSR $966A ; draw text 35/B785: A9 1C LDA #$1C 35/B787: 20 58 A5 JSR $A558 ; add to text buffer offset 35/B78A: C6 24 DEC $24 35/B78C: A5 24 LDA $24 35/B78E: F0 03 BEQ $B793 35/B790: 4C DC B6 JMP $B6DC 35/B793: 20 B0 8E JSR $8EB0 ; close menu window 35/B796: A9 01 LDA #$01 35/B798: 85 18 STA $18 35/B79A: A9 1E LDA #$1E 35/B79C: 85 19 STA $19 35/B79E: A9 03 LDA #$03 35/B7A0: 85 1A STA $1A 35/B7A2: 20 38 8B JSR $8B38 ; open menu window 35/B7A5: A9 01 LDA #$01 ; spell list cursor 35/B7A7: 85 55 STA $55 35/B7A9: A9 00 LDA #$00 ; cursor 0 35/B7AB: 85 1A STA $1A 35/B7AD: 20 66 89 JSR $8966 ; init list cursor 35/B7B0: A9 00 LDA #$00 35/B7B2: 85 24 STA $24 ; $24: cursor y position 35/B7B4: 85 25 STA $25 ; $25: scroll y position 35/B7B6: 85 26 STA $26 ; $26: cursor x position ; start of player input loop 35/B7B8: E8 INX 35/B7B9: A2 00 LDX #$00 35/B7BB: 86 1A STX $1A 35/B7BD: 86 38 STX $38 35/B7BF: A9 02 LDA #$02 35/B7C1: 85 1B STA $1B 35/B7C3: 20 9E 89 JSR $899E ; get player input 35/B7C6: A9 00 LDA #$00 35/B7C8: 85 29 STA $29 35/B7CA: A9 2A LDA #$2A ; 35/BA2A (magic menu joypad jump table) 35/B7CC: 85 1E STA $1E 35/B7CE: A9 BA LDA #$BA 35/B7D0: 85 1F STA $1F 35/B7D2: A5 12 LDA $12 35/B7D4: 4A LSR 35/B7D5: B0 04 BCS $B7DB 35/B7D7: E6 29 INC $29 35/B7D9: 90 F9 BCC $B7D4 35/B7DB: A5 29 LDA $29 35/B7DD: 0A ASL 35/B7DE: 18 CLC 35/B7DF: 65 1E ADC $1E 35/B7E1: 85 1E STA $1E 35/B7E3: A9 00 LDA #$00 35/B7E5: 65 1F ADC $1F 35/B7E7: 85 1F STA $1F 35/B7E9: A0 00 LDY #$00 35/B7EB: B1 1E LDA ($1E),Y 35/B7ED: 48 PHA 35/B7EE: C8 INY 35/B7EF: B1 1E LDA ($1E),Y 35/B7F1: 85 1F STA $1F 35/B7F3: 68 PLA 35/B7F4: 85 1E STA $1E 35/B7F6: 6C 1E 00 JMP ($001E) ; up button 35/B7F9: A5 24 LDA $24 35/B7FB: F0 77 BEQ $B874 35/B7FD: C6 24 DEC $24 35/B7FF: C6 25 DEC $25 35/B801: A5 25 LDA $25 35/B803: 10 6F BPL $B874 35/B805: E6 25 INC $25 35/B807: 38 SEC 35/B808: AD C0 7A LDA $7AC0 ; decrement text buffer pointer 35/B80B: E9 38 SBC #$38 35/B80D: 8D C0 7A STA $7AC0 35/B810: AD C1 7A LDA $7AC1 35/B813: E9 00 SBC #$00 35/B815: 8D C1 7A STA $7AC1 35/B818: A9 01 LDA #$01 35/B81A: 85 18 STA $18 35/B81C: A9 1E LDA #$1E 35/B81E: 85 19 STA $19 35/B820: A9 03 LDA #$03 35/B822: 85 1A STA $1A 35/B824: 20 38 8B JSR $8B38 ; open menu window 35/B827: 4C 74 B8 JMP $B874 ; down button 35/B82A: A5 24 LDA $24 35/B82C: C9 07 CMP #$07 ; can't go below row 7 35/B82E: F0 44 BEQ $B874 35/B830: C5 46 CMP $46 35/B832: F0 40 BEQ $B874 ; can't go below available spell levels 35/B834: E6 24 INC $24 35/B836: E6 25 INC $25 35/B838: A5 25 LDA $25 35/B83A: C9 04 CMP #$04 35/B83C: 90 36 BCC $B874 ; branch if not in bottom row 35/B83E: C6 25 DEC $25 ; stay in bottom row and scroll the menu 35/B840: 18 CLC 35/B841: AD C0 7A LDA $7AC0 ; increment text buffer pointer 35/B844: 69 38 ADC #$38 35/B846: 8D C0 7A STA $7AC0 35/B849: AD C1 7A LDA $7AC1 35/B84C: 69 00 ADC #$00 35/B84E: 8D C1 7A STA $7AC1 35/B851: A9 01 LDA #$01 ; left side of window: 1 35/B853: 85 18 STA $18 35/B855: A9 1E LDA #$1E ; right side of window: 30 35/B857: 85 19 STA $19 35/B859: A9 03 LDA #$03 ; borders on both sides 35/B85B: 85 1A STA $1A 35/B85D: 20 38 8B JSR $8B38 ; open menu window 35/B860: 4C 74 B8 JMP $B874 ; left button 35/B863: A5 26 LDA $26 35/B865: F0 0D BEQ $B874 35/B867: C6 26 DEC $26 35/B869: 4C 74 B8 JMP $B874 ; right button 35/B86C: A5 26 LDA $26 35/B86E: C9 02 CMP #$02 35/B870: F0 02 BEQ $B874 35/B872: E6 26 INC $26 35/B874: 4C B8 B7 JMP $B7B8 ; A button 35/B877: A5 24 LDA $24 ; calculate selected spell slot 35/B879: 85 18 STA $18 35/B87B: 0A ASL 35/B87C: 18 CLC 35/B87D: 65 18 ADC $18 35/B87F: 65 26 ADC $26 35/B881: AA TAX 35/B882: BD 00 74 LDA $7400,X ; spell id 35/B885: C9 FF CMP #$FF 35/B887: D0 03 BNE $B88C ; branch if valid 35/B889: 4C B5 B8 JMP $B8B5 35/B88C: 48 PHA 35/B88D: AD D8 7E LDA $7ED8 35/B890: 29 10 AND #$10 35/B892: F0 06 BEQ $B89A ; branch if can use mini 35/B894: 68 PLA 35/B895: C9 2F CMP #$2F 35/B897: F0 F0 BEQ $B889 ; don't allow mini 35/B899: 48 PHA 35/B89A: 38 SEC 35/B89B: A5 46 LDA $46 35/B89D: E5 24 SBC $24 35/B89F: 48 PHA 35/B8A0: 85 47 STA $47 35/B8A2: A6 52 LDX $52 35/B8A4: A5 47 LDA $47 35/B8A6: 9D C7 7A STA $7AC7,X ; spell level or summon id 35/B8A9: 68 PLA 35/B8AA: 18 CLC 35/B8AB: 65 5F ADC $5F 35/B8AD: 69 07 ADC #$07 35/B8AF: A8 TAY 35/B8B0: B1 5B LDA ($5B),Y ; mp for this spell level 35/B8B2: D0 07 BNE $B8BB ; branch if nonzero mp 35/B8B4: 68 PLA 35/B8B5: 20 81 9B JSR $9B81 ; play error sound effect 35/B8B8: 4C B8 B7 JMP $B7B8 35/B8BB: 20 7D 9B JSR $9B7D ; play confirm sound effect 35/B8BE: 68 PLA 35/B8BF: 48 PHA 35/B8C0: 20 53 B9 JSR $B953 ; get magic targets 35/B8C3: F0 0C BEQ $B8D1 ; branch if target confirmed 35/B8C5: C9 01 CMP #$01 35/B8C7: D0 04 BNE $B8CD ; 1: can't be used by this character 35/B8C9: 68 PLA 35/B8CA: 4C B5 B8 JMP $B8B5 ; 2: target cancelled 35/B8CD: 68 PLA 35/B8CE: 4C EE B8 JMP $B8EE ; 0: target confirmed 35/B8D1: 20 9B 9B JSR $9B9B ; get action pointer 35/B8D4: A6 52 LDX $52 35/B8D6: 68 PLA 35/B8D7: 18 CLC 35/B8D8: 69 C8 ADC #$C8 35/B8DA: 9D CF 78 STA $78CF,X ; set spell for character window display 35/B8DD: 91 5B STA ($5B),Y ; set action id 35/B8DF: C9 FF CMP #$FF 35/B8E1: D0 09 BNE $B8EC 35/B8E3: AD E1 7B LDA $7BE1 35/B8E6: 20 20 FD JSR $FD20 ; set bit 35/B8E9: 8D E1 7B STA $7BE1 ; using a spell 35/B8EC: E6 52 INC $52 ; go to next character ; B button / close menu 35/B8EE: A9 00 LDA #$00 35/B8F0: 85 18 STA $18 35/B8F2: 20 DF 8A JSR $8ADF ; hide cursor 35/B8F5: 20 B0 8E JSR $8EB0 ; close menu window 35/B8F8: A9 00 LDA #$00 35/B8FA: 4C FD 99 JMP $99FD ; command cancelled ; [ check if character can equip item/spell ] ; $1C: 0 = can't equip, 1 = can equip 35/B8FD: A9 08 LDA #$08 ; size: 8 bytes 35/B8FF: 85 1A STA $1A 35/B901: A2 78 LDX #$78 ; destination: $7478 35/B903: 20 3A BA JSR $BA3A ; load array item (bank 30) 35/B906: AD 7F 74 LDA $747F 35/B909: 29 7F AND #$7F 35/B90B: 85 38 STA $38 35/B90D: 0A ASL 35/B90E: 18 CLC 35/B90F: 65 38 ADC $38 35/B911: AA TAX 35/B912: 20 8B FD JSR $FD8B ; get class equipment types 35/B915: A5 3B LDA $3B 35/B917: 85 38 STA $38 35/B919: A5 3C LDA $3C 35/B91B: 85 39 STA $39 35/B91D: A5 3D LDA $3D 35/B91F: 85 3A STA $3A 35/B921: 20 41 A5 JSR $A541 ; get character offset 35/B924: A8 TAY 35/B925: B1 57 LDA ($57),Y ; job id 35/B927: 20 3E B9 JSR $B93E 35/B92A: A2 00 LDX #$00 35/B92C: 86 1C STX $1C 35/B92E: B5 38 LDA $38,X ; check equipment types 35/B930: 35 3B AND $3B,X 35/B932: D0 07 BNE $B93B 35/B934: E8 INX 35/B935: E0 03 CPX #$03 35/B937: D0 F5 BNE $B92E 35/B939: F0 02 BEQ $B93D 35/B93B: E6 1C INC $1C ; item can be equipped 35/B93D: 60 RTS ; [ set bit for job ] 35/B93E: AA TAX 35/B93F: E8 INX 35/B940: A9 00 LDA #$00 35/B942: 85 3B STA $3B 35/B944: 85 3C STA $3C 35/B946: 85 3D STA $3D 35/B948: 38 SEC 35/B949: 26 3D ROL $3D 35/B94B: 26 3C ROL $3C 35/B94D: 26 3B ROL $3B 35/B94F: CA DEX 35/B950: D0 F7 BNE $B949 35/B952: 60 RTS ; [ get magic targets ] ; A: magic id ; return value ; 0: confirm ; 1: can't be used by this character ; 2: cancelled 35/B953: 38 SEC 35/B954: 85 18 STA $18 35/B956: 8D E8 7C STA $7CE8 35/B959: A9 C0 LDA #$C0 ; 30/98C0 (attack properties) 35/B95B: 85 20 STA $20 35/B95D: A9 98 LDA #$98 35/B95F: 85 21 STA $21 35/B961: 20 FD B8 JSR $B8FD ; check if character can equip item/spell 35/B964: AD 7C 74 LDA $747C 35/B967: C9 01 CMP #$01 35/B969: D0 05 BNE $B970 35/B96B: A9 FF LDA #$FF 35/B96D: 8D E8 7C STA $7CE8 35/B970: A5 1C LDA $1C 35/B972: D0 05 BNE $B979 35/B974: A9 01 LDA #$01 ; return 1 (can't use) 35/B976: 4C 29 BA JMP $BA29 35/B979: AD 7D 74 LDA $747D 35/B97C: 29 18 AND #$18 35/B97E: D0 03 BNE $B983 ; branch if black or white magic 35/B980: 4C 27 BA JMP $BA27 ; no target select for summon 35/B983: AD 7D 74 LDA $747D 35/B986: 29 40 AND #$40 35/B988: D0 66 BNE $B9F0 ; branch if auto-target all (no damage split) 35/B98A: A9 00 LDA #$00 ; multi-target not allowed 35/B98C: 85 B3 STA $B3 35/B98E: AD 7D 74 LDA $747D 35/B991: 29 20 AND #$20 35/B993: D0 04 BNE $B999 ; branch if multi-target not allowed 35/B995: A9 01 LDA #$01 ; multi-target allowed 35/B997: 85 B3 STA $B3 35/B999: AD 7D 74 LDA $747D 35/B99C: 10 06 BPL $B9A4 35/B99E: A5 B3 LDA $B3 35/B9A0: 09 02 ORA #$02 ; target allies by default 35/B9A2: 85 B3 STA $B3 35/B9A4: AD E8 7C LDA $7CE8 35/B9A7: C9 FF CMP #$FF 35/B9A9: D0 24 BNE $B9CF 35/B9AB: A9 00 LDA #$00 35/B9AD: 85 18 STA $18 35/B9AF: 20 DF 8A JSR $8ADF ; hide cursor 35/B9B2: A9 01 LDA #$01 35/B9B4: 85 18 STA $18 35/B9B6: 20 DF 8A JSR $8ADF ; hide cursor 35/B9B9: 20 B0 8E JSR $8EB0 ; close menu window 35/B9BC: A9 00 LDA #$00 35/B9BE: 85 10 STA $10 35/B9C0: A5 08 LDA $08 35/B9C2: 29 FE AND #$FE 35/B9C4: 85 08 STA $08 35/B9C6: 20 C5 F8 JSR $F8C5 ; wait for vblank (no color update) 35/B9C9: 20 A2 9B JSR $9BA2 ; draw character hp window 35/B9CC: 20 41 A5 JSR $A541 ; get character offset 35/B9CF: A9 00 LDA #$00 35/B9D1: 8D E8 7C STA $7CE8 35/B9D4: A9 10 LDA #$10 ; choose targets 35/B9D6: 20 0E FA JSR $FA0E ; execute battle graphics 35/B9D9: A5 B4 LDA $B4 35/B9DB: D0 04 BNE $B9E1 ; branch if there are valid targets 35/B9DD: A9 02 LDA #$02 35/B9DF: D0 48 BNE $BA29 ; return 2 (cancelled) 35/B9E1: 20 94 9B JSR $9B94 35/B9E4: A5 B4 LDA $B4 35/B9E6: 91 5B STA ($5B),Y 35/B9E8: C8 INY 35/B9E9: A5 B5 LDA $B5 35/B9EB: 91 5B STA ($5B),Y 35/B9ED: 4C 27 BA JMP $BA27 35/B9F0: A9 75 LDA #$75 35/B9F2: 85 18 STA $18 35/B9F4: A9 76 LDA #$76 35/B9F6: 85 19 STA $19 35/B9F8: A2 00 LDX #$00 35/B9FA: A9 00 LDA #$00 35/B9FC: 48 PHA 35/B9FD: A0 01 LDY #$01 35/B9FF: B1 18 LDA ($18),Y 35/BA01: 29 C0 AND #$C0 35/BA03: D0 05 BNE $BA0A 35/BA05: 68 PLA 35/BA06: 20 20 FD JSR $FD20 ; set bit 35/BA09: 48 PHA 35/BA0A: 18 CLC 35/BA0B: A5 18 LDA $18 35/BA0D: 69 40 ADC #$40 35/BA0F: 85 18 STA $18 35/BA11: A5 19 LDA $19 35/BA13: 69 00 ADC #$00 35/BA15: 85 19 STA $19 35/BA17: E8 INX 35/BA18: E0 08 CPX #$08 35/BA1A: D0 E1 BNE $B9FD 35/BA1C: 20 94 9B JSR $9B94 35/BA1F: 68 PLA 35/BA20: 91 5B STA ($5B),Y 35/BA22: C8 INY 35/BA23: A9 C0 LDA #$C0 35/BA25: 91 5B STA ($5B),Y 35/BA27: A9 00 LDA #$00 ; return 0 (confirm) 35/BA29: 60 RTS ; magic menu joypad jump table 35/BA2A: B877 B8EE B874 B874 B7F9 B82A B863 B86C ; -------------------------------------------------------------------------- ; [ load array item (bank 30) ] 35/BA3A: A9 18 LDA #$18 ; bank 30 35/BA3C: A0 1A LDY #$1A ; return to this bank 35/BA3E: 4C A6 FD JMP $FDA6 ; load array item ; -------------------------------------------------------------------------- ; [ do poison damage ] 35/BA41: A2 1F LDX #$1F ; reset damage buffer 35/BA43: A9 FF LDA #$FF 35/BA45: 9D 00 74 STA $7400,X 35/BA48: CA DEX 35/BA49: 10 FA BPL $BA45 35/BA4B: A9 00 LDA #$00 35/BA4D: 85 64 STA $64 35/BA4F: A9 08 LDA #$08 35/BA51: 85 24 STA $24 35/BA53: A9 75 LDA #$75 ; $7575 35/BA55: 85 28 STA $28 35/BA57: A9 75 LDA #$75 35/BA59: 85 29 STA $29 ; start of character loop 35/BA5B: 20 DC BA JSR $BADC ; calculate poison damage 35/BA5E: 18 CLC 35/BA5F: A5 28 LDA $28 35/BA61: 69 40 ADC #$40 ; next character 35/BA63: 85 28 STA $28 35/BA65: A5 29 LDA $29 35/BA67: 69 00 ADC #$00 35/BA69: 85 29 STA $29 35/BA6B: E6 24 INC $24 35/BA6D: A5 24 LDA $24 35/BA6F: C9 0C CMP #$0C 35/BA71: D0 E8 BNE $BA5B 35/BA73: 20 06 9D JSR $9D06 ; update character status for display 35/BA76: A9 00 LDA #$00 35/BA78: 85 24 STA $24 35/BA7A: A9 75 LDA #$75 ; $7675 35/BA7C: 85 28 STA $28 35/BA7E: A9 76 LDA #$76 35/BA80: 85 29 STA $29 ; start of monster loop 35/BA82: 20 DC BA JSR $BADC ; calculate poison damage 35/BA85: A6 24 LDX $24 35/BA87: A0 01 LDY #$01 35/BA89: B1 28 LDA ($28),Y ; status 35/BA8B: 9D C4 7E STA $7EC4,X 35/BA8E: 18 CLC 35/BA8F: A5 28 LDA $28 35/BA91: 69 40 ADC #$40 ; next monster 35/BA93: 85 28 STA $28 35/BA95: A5 29 LDA $29 35/BA97: 69 00 ADC #$00 35/BA99: 85 29 STA $29 35/BA9B: E6 24 INC $24 35/BA9D: A5 24 LDA $24 35/BA9F: C9 08 CMP #$08 35/BAA1: D0 DF BNE $BA82 35/BAA3: A5 64 LDA $64 35/BAA5: F0 34 BEQ $BADB 35/BAA7: A2 1F LDX #$1F 35/BAA9: BD 00 74 LDA $7400,X 35/BAAC: 9D 4F 7E STA $7E4F,X ; copy to damage numeral buffer 35/BAAF: CA DEX 35/BAB0: 10 F7 BPL $BAA9 35/BAB2: A9 80 LDA #$80 35/BAB4: 8D 98 7E STA $7E98 35/BAB7: 8D 99 7E STA $7E99 35/BABA: 4A LSR 35/BABB: 8D 9A 7E STA $7E9A ; assume target is a monster 35/BABE: A9 05 LDA #$05 ; action script $05: poison damage 35/BAC0: 8D D5 78 STA $78D5 35/BAC3: A9 41 LDA #$41 ; $0661: "どくのダメージ!" / "Damaged by poison" 35/BAC5: 8D DA 78 STA $78DA 35/BAC8: A9 17 LDA #$17 ; damage numerals 35/BACA: 8D C2 7E STA $7EC2 35/BACD: 20 F7 8F JSR $8FF7 ; execute action script 35/BAD0: A9 16 LDA #$16 ; death animation 35/BAD2: 8D C2 7E STA $7EC2 35/BAD5: 20 11 84 JSR $8411 ; show animation 35/BAD8: 20 58 A4 JSR $A458 ; check if battle is over 35/BADB: 60 RTS ; [ calculate poison damage ] 35/BADC: A0 01 LDY #$01 35/BADE: B1 28 LDA ($28),Y 35/BAE0: AA TAX 35/BAE1: 29 02 AND #$02 35/BAE3: F0 5A BEQ $BB3F ; branch if not poisoned 35/BAE5: 8A TXA 35/BAE6: 29 C0 AND #$C0 35/BAE8: D0 55 BNE $BB3F ; branch if dead 35/BAEA: E6 64 INC $64 ; increment number of targets with poison 35/BAEC: A5 24 LDA $24 35/BAEE: 0A ASL 35/BAEF: 85 62 STA $62 35/BAF1: A0 05 LDY #$05 35/BAF3: B1 28 LDA ($28),Y ; damage = max hp / 16 35/BAF5: 85 26 STA $26 35/BAF7: C8 INY 35/BAF8: B1 28 LDA ($28),Y 35/BAFA: 85 27 STA $27 35/BAFC: 46 27 LSR $27 35/BAFE: 66 26 ROR $26 35/BB00: 46 27 LSR $27 35/BB02: 66 26 ROR $26 35/BB04: 46 27 LSR $27 35/BB06: 66 26 ROR $26 35/BB08: 46 27 LSR $27 35/BB0A: 66 26 ROR $26 35/BB0C: A6 62 LDX $62 35/BB0E: A5 26 LDA $26 35/BB10: 9D 00 74 STA $7400,X 35/BB13: E8 INX 35/BB14: A5 27 LDA $27 35/BB16: 9D 00 74 STA $7400,X 35/BB19: A0 03 LDY #$03 35/BB1B: 38 SEC 35/BB1C: B1 28 LDA ($28),Y ; subtract damage from hp 35/BB1E: E5 26 SBC $26 35/BB20: 91 28 STA ($28),Y 35/BB22: C8 INY 35/BB23: B1 28 LDA ($28),Y 35/BB25: E5 27 SBC $27 35/BB27: 91 28 STA ($28),Y 35/BB29: B0 14 BCS $BB3F ; dead 35/BB2B: A0 03 LDY #$03 35/BB2D: A9 00 LDA #$00 35/BB2F: 91 28 STA ($28),Y ; set hp to zero 35/BB31: C8 INY 35/BB32: 91 28 STA ($28),Y 35/BB34: A0 01 LDY #$01 35/BB36: B1 28 LDA ($28),Y ; set dead status, clear jumping status 35/BB38: 09 80 ORA #$80 35/BB3A: 29 FE AND #$FE 35/BB3C: 91 28 STA ($28),Y 35/BB3E: 60 RTS 35/BB3F: A0 03 LDY #$03 35/BB41: B1 28 LDA ($28),Y ; current hp 35/BB43: C8 INY 35/BB44: 11 28 ORA ($28),Y 35/BB46: F0 E3 BEQ $BB2B ; branch if zero hp 35/BB48: 60 RTS ; -------------------------------------------------------------------------- ; [ battle victory ] 35/BB49: A9 0F LDA #$0F 35/BB4B: 20 0E FA JSR $FA0E ; execute battle graphics 35/BB4E: A9 00 LDA #$00 35/BB50: 8D 70 75 STA $7570 35/BB53: 8D 71 75 STA $7571 35/BB56: 85 52 STA $52 35/BB58: AA TAX 35/BB59: 20 41 A5 JSR $A541 ; get character offset 35/BB5C: A8 TAY 35/BB5D: C8 INY 35/BB5E: B1 5B LDA ($5B),Y 35/BB60: 29 C0 AND #$C0 35/BB62: D0 01 BNE $BB65 ; branch if character is alive 35/BB64: E8 INX 35/BB65: E6 52 INC $52 35/BB67: A5 52 LDA $52 35/BB69: C9 04 CMP #$04 35/BB6B: D0 EC BNE $BB59 35/BB6D: 86 53 STX $53 ; $53 = number of living characters 35/BB6F: A9 00 LDA #$00 35/BB71: 85 52 STA $52 35/BB73: A2 00 LDX #$00 35/BB75: 9D 00 74 STA $7400,X ; clear buffer 35/BB78: E8 INX 35/BB79: E0 34 CPX #$34 35/BB7B: D0 F8 BNE $BB75 35/BB7D: A9 FF LDA #$FF 35/BB7F: 9D 00 74 STA $7400,X 35/BB82: E8 INX 35/BB83: E0 80 CPX #$80 35/BB85: D0 F8 BNE $BB7F 35/BB87: AE 70 75 LDX $7570 35/BB8A: BD D3 7D LDA $7DD3,X 35/BB8D: 85 2C STA $2C ; monster count granting experience 35/BB8F: D0 03 BNE $BB94 35/BB91: 4C F9 BC JMP $BCF9 ; next monster type 35/BB94: BD 6B 7D LDA $7D6B,X 35/BB97: 85 32 STA $32 35/BB99: 85 18 STA $18 35/BB9B: A9 01 LDA #$01 ; 1 byte 35/BB9D: 85 1A STA $1A 35/BB9F: A9 80 LDA #$80 ; 10/9C80 (monster experience id) 35/BBA1: 85 20 STA $20 35/BBA3: A9 9C LDA #$9C 35/BBA5: 85 21 STA $21 35/BBA7: A9 08 LDA #$08 35/BBA9: A0 1A LDY #$1A 35/BBAB: A2 00 LDX #$00 35/BBAD: 20 A6 FD JSR $FDA6 ; load array item 35/BBB0: AD 00 74 LDA $7400 35/BBB3: 85 18 STA $18 35/BBB5: A9 02 LDA #$02 ; 2 bytes 35/BBB7: 85 1A STA $1A 35/BBB9: A9 80 LDA #$80 ; 10/9D80 (monster experience) 35/BBBB: 85 20 STA $20 35/BBBD: A9 9D LDA #$9D 35/BBBF: 85 21 STA $21 35/BBC1: A9 08 LDA #$08 ; 8 bytes 35/BBC3: A0 1A LDY #$1A 35/BBC5: A2 01 LDX #$01 35/BBC7: 20 A6 FD JSR $FDA6 ; load array item 35/BBCA: A5 32 LDA $32 35/BBCC: 85 18 STA $18 35/BBCE: A9 10 LDA #$10 ; 16 bytes 35/BBD0: 85 1A STA $1A 35/BBD2: A9 00 LDA #$00 ; 30/8000 (monster properties) 35/BBD4: 85 20 STA $20 35/BBD6: A9 80 LDA #$80 35/BBD8: 85 21 STA $21 35/BBDA: A2 03 LDX #$03 35/BBDC: 20 3A BA JSR $BA3A ; load array item (bank 30) 35/BBDF: AD 12 74 LDA $7412 ; monster item index 35/BBE2: 29 1F AND #$1F 35/BBE4: 85 18 STA $18 35/BBE6: A9 08 LDA #$08 ; 8 bytes 35/BBE8: 85 1A STA $1A 35/BBEA: A9 80 LDA #$80 ; 10/9B80 (monster items) 35/BBEC: 85 20 STA $20 35/BBEE: A9 9B LDA #$9B 35/BBF0: 85 21 STA $21 35/BBF2: A9 08 LDA #$08 35/BBF4: A0 1A LDY #$1A 35/BBF6: A2 13 LDX #$13 35/BBF8: 20 A6 FD JSR $FDA6 ; load array item 35/BBFB: A5 32 LDA $32 35/BBFD: 85 18 STA $18 35/BBFF: A9 02 LDA #$02 ; 2 bytes 35/BC01: 85 1A STA $1A 35/BC03: A9 58 LDA #$58 ; 30/9C58 (monster gold) 35/BC05: 85 20 STA $20 35/BC07: A9 9C LDA #$9C 35/BC09: 85 21 STA $21 35/BC0B: A2 1B LDX #$1B 35/BC0D: 20 3A BA JSR $BA3A ; load array item (bank 30) 35/BC10: A5 32 LDA $32 35/BC12: 85 18 STA $18 35/BC14: A9 01 LDA #$01 ; 1 byte 35/BC16: 85 1A STA $1A 35/BC18: A9 AE LDA #$AE ; 39/B2AE (monster cp) 35/BC1A: 85 20 STA $20 35/BC1C: A9 B2 LDA #$B2 35/BC1E: 85 21 STA $21 35/BC20: A9 1C LDA #$1C 35/BC22: A0 1A LDY #$1A 35/BC24: A2 1D LDX #$1D 35/BC26: 20 A6 FD JSR $FDA6 ; load array item 35/BC29: AD 01 74 LDA $7401 ; experience 35/BC2C: 85 18 STA $18 35/BC2E: AD 02 74 LDA $7402 35/BC31: 85 19 STA $19 35/BC33: A5 53 LDA $53 ; number of characters 35/BC35: 85 1A STA $1A 35/BC37: A9 00 LDA #$00 35/BC39: 85 1B STA $1B 35/BC3B: 20 92 FC JSR $FC92 ; divide (16-bit) 35/BC3E: A5 1C LDA $1C 35/BC40: 8D 01 74 STA $7401 ; divided experience 35/BC43: A5 1D LDA $1D 35/BC45: 8D 02 74 STA $7402 35/BC48: 18 CLC 35/BC49: AD 24 74 LDA $7424 35/BC4C: 6D 01 74 ADC $7401 35/BC4F: 8D 24 74 STA $7424 35/BC52: AD 25 74 LDA $7425 35/BC55: 6D 02 74 ADC $7402 35/BC58: 8D 25 74 STA $7425 35/BC5B: AD 26 74 LDA $7426 35/BC5E: 69 00 ADC #$00 35/BC60: 8D 26 74 STA $7426 35/BC63: 18 CLC 35/BC64: AD 27 74 LDA $7427 35/BC67: 6D 1B 74 ADC $741B 35/BC6A: 8D 27 74 STA $7427 35/BC6D: AD 28 74 LDA $7428 35/BC70: 6D 1C 74 ADC $741C 35/BC73: 8D 28 74 STA $7428 35/BC76: AD 29 74 LDA $7429 35/BC79: 69 00 ADC #$00 35/BC7B: 8D 29 74 STA $7429 35/BC7E: AD 12 74 LDA $7412 ; monster item index (drop prob.) 35/BC81: 20 44 FD JSR $FD44 ; lsr5 35/BC84: 85 2E STA $2E 35/BC86: A9 06 LDA #$06 35/BC88: 20 64 A5 JSR $A564 ; random (0..A) 35/BC8B: C5 2E CMP $2E 35/BC8D: B0 57 BCS $BCE6 35/BC8F: A9 FF LDA #$FF 35/BC91: 20 64 A5 JSR $A564 ; random (0..A) 35/BC94: C9 30 CMP #$30 35/BC96: B0 04 BCS $BC9C 35/BC98: A9 00 LDA #$00 ; 48/256: item 0 35/BC9A: F0 32 BEQ $BCCE 35/BC9C: C9 60 CMP #$60 35/BC9E: B0 04 BCS $BCA4 35/BCA0: A9 01 LDA #$01 ; 48/256: item 1 35/BCA2: D0 2A BNE $BCCE 35/BCA4: C9 90 CMP #$90 35/BCA6: B0 04 BCS $BCAC 35/BCA8: A9 02 LDA #$02 ; 48/256: item 2 35/BCAA: D0 22 BNE $BCCE 35/BCAC: C9 C0 CMP #$C0 35/BCAE: B0 04 BCS $BCB4 35/BCB0: A9 03 LDA #$03 ; 48/256: item 3 35/BCB2: D0 1A BNE $BCCE 35/BCB4: C9 D8 CMP #$D8 35/BCB6: B0 04 BCS $BCBC 35/BCB8: A9 04 LDA #$04 ; 24/256: item 4 35/BCBA: D0 12 BNE $BCCE 35/BCBC: C9 F0 CMP #$F0 35/BCBE: B0 04 BCS $BCC4 35/BCC0: A9 05 LDA #$05 ; 24/256: item 5 35/BCC2: D0 0A BNE $BCCE 35/BCC4: C9 FC CMP #$FC 35/BCC6: B0 04 BCS $BCCC 35/BCC8: A9 06 LDA #$06 ; 12/256: item 6 35/BCCA: D0 02 BNE $BCCE 35/BCCC: A9 07 LDA #$07 ; 4/256: item 7 35/BCCE: A8 TAY 35/BCCF: B9 13 74 LDA $7413,Y ; item id 35/BCD2: F0 12 BEQ $BCE6 35/BCD4: 20 B3 BF JSR $BFB3 ; give item 35/BCD7: 90 0D BCC $BCE6 ; branch if inventory full 35/BCD9: AE 71 75 LDX $7571 35/BCDC: E0 30 CPX #$30 35/BCDE: B0 06 BCS $BCE6 35/BCE0: 9D 34 74 STA $7434,X 35/BCE3: EE 71 75 INC $7571 35/BCE6: 18 CLC 35/BCE7: AD 2A 74 LDA $742A 35/BCEA: 6D 1D 74 ADC $741D ; add monster cp 35/BCED: 8D 2A 74 STA $742A 35/BCF0: C6 2C DEC $2C 35/BCF2: A5 2C LDA $2C 35/BCF4: F0 03 BEQ $BCF9 35/BCF6: 4C 48 BC JMP $BC48 35/BCF9: EE 70 75 INC $7570 ; next monster type 35/BCFC: AD 70 75 LDA $7570 35/BCFF: C9 04 CMP #$04 35/BD01: F0 03 BEQ $BD06 35/BD03: 4C 87 BB JMP $BB87 35/BD06: 18 CLC 35/BD07: AD 1C 60 LDA $601C ; add gil 35/BD0A: 6D 27 74 ADC $7427 35/BD0D: 8D 1C 60 STA $601C 35/BD10: AD 1D 60 LDA $601D 35/BD13: 6D 28 74 ADC $7428 35/BD16: 8D 1D 60 STA $601D 35/BD19: AD 1E 60 LDA $601E 35/BD1C: 6D 29 74 ADC $7429 35/BD1F: 8D 1E 60 STA $601E 35/BD22: AD 2A 74 LDA $742A ; total cp 35/BD25: F0 14 BEQ $BD3B 35/BD27: 20 47 FD JSR $FD47 ; lsr2 35/BD2A: 18 CLC 35/BD2B: 69 01 ADC #$01 ; minimum of 1 cp 35/BD2D: 8D 2A 74 STA $742A 35/BD30: 18 CLC 35/BD31: 6D 1B 60 ADC $601B ; add cp 35/BD34: 90 02 BCC $BD38 35/BD36: A9 FF LDA #$FF 35/BD38: 8D 1B 60 STA $601B 35/BD3B: A9 02 LDA #$02 ; action script $02: display message 35/BD3D: 8D D5 78 STA $78D5 35/BD40: 8D C2 7E STA $7EC2 35/BD43: A9 2D LDA #$2D ; $064D: "ギルてにいれた!" / " Gil" 35/BD45: 8D DA 78 STA $78DA 35/BD48: AD 27 74 LDA $7427 35/BD4B: 8D E4 78 STA $78E4 35/BD4E: AD 28 74 LDA $7428 35/BD51: 8D E5 78 STA $78E5 35/BD54: 20 F7 8F JSR $8FF7 ; execute action script 35/BD57: A9 2E LDA #$2E ; $064E: "キャパシティかくとく!" / " Capacity" 35/BD59: 8D DA 78 STA $78DA 35/BD5C: AD 2A 74 LDA $742A 35/BD5F: 8D E4 78 STA $78E4 35/BD62: A9 00 LDA #$00 35/BD64: 8D E5 78 STA $78E5 35/BD67: 20 F7 8F JSR $8FF7 ; execute action script 35/BD6A: A9 40 LDA #$40 ; $0660: "ポイントのEXPかくとく" / " EXP" 35/BD6C: 8D DA 78 STA $78DA 35/BD6F: AD 24 74 LDA $7424 35/BD72: 8D E4 78 STA $78E4 35/BD75: AD 25 74 LDA $7425 35/BD78: 8D E5 78 STA $78E5 35/BD7B: 20 F7 8F JSR $8FF7 ; execute action script 35/BD7E: A2 00 LDX #$00 35/BD80: 86 3C STX $3C 35/BD82: A6 3C LDX $3C 35/BD84: BD 34 74 LDA $7434,X 35/BD87: C9 FF CMP #$FF 35/BD89: F0 10 BEQ $BD9B 35/BD8B: 8D E4 78 STA $78E4 35/BD8E: A9 29 LDA #$29 ; $0649: "おたから:" / "Found " 35/BD90: 8D DA 78 STA $78DA 35/BD93: 20 F7 8F JSR $8FF7 ; execute action script 35/BD96: E6 3C INC $3C 35/BD98: 4C 82 BD JMP $BD82 ; start of character loop 35/BD9B: 20 41 A5 JSR $A541 ; get character offset 35/BD9E: 18 CLC 35/BD9F: 69 01 ADC #$01 35/BDA1: A8 TAY 35/BDA2: B1 5B LDA ($5B),Y 35/BDA4: 29 C0 AND #$C0 35/BDA6: F0 03 BEQ $BDAB ; branch if not dead or stone 35/BDA8: 4C 70 BF JMP $BF70 35/BDAB: A9 00 LDA #$00 35/BDAD: 85 1E STA $1E 35/BDAF: 85 1F STA $1F 35/BDB1: 85 20 STA $20 35/BDB3: A5 52 LDA $52 35/BDB5: 20 40 FD JSR $FD40 ; asl2 35/BDB8: 85 1C STA $1C ; $1C: character index * 4 35/BDBA: A9 35 LDA #$35 35/BDBC: 20 88 9B JSR $9B88 ; add character offset 35/BDBF: B1 5B LDA ($5B),Y ; job experience multipliers (4 * 2 bits) 35/BDC1: 85 22 STA $22 35/BDC3: A9 00 LDA #$00 35/BDC5: 85 23 STA $23 ; get next 2 bits 35/BDC7: 06 22 ASL $22 35/BDC9: 26 23 ROL $23 35/BDCB: 06 22 ASL $22 35/BDCD: 26 23 ROL $23 35/BDCF: A6 1C LDX $1C 35/BDD1: BD F0 78 LDA $78F0,X ; number of times this command was used 35/BDD4: A6 23 LDX $23 35/BDD6: 20 D6 FC JSR $FCD6 ; multiply 35/BDD9: 18 CLC 35/BDDA: A5 1A LDA $1A ; add to net job experience 35/BDDC: 65 1E ADC $1E 35/BDDE: 85 1E STA $1E 35/BDE0: A5 1B LDA $1B 35/BDE2: 65 1F ADC $1F 35/BDE4: 85 1F STA $1F 35/BDE6: E6 1C INC $1C ; next command 35/BDE8: E6 20 INC $20 35/BDEA: A5 20 LDA $20 35/BDEC: C9 04 CMP #$04 35/BDEE: D0 D3 BNE $BDC3 35/BDF0: 06 1E ASL $1E ; multiply by 4 35/BDF2: 26 1F ROL $1F 35/BDF4: 06 1E ASL $1E 35/BDF6: 26 1F ROL $1F 35/BDF8: A9 11 LDA #$11 35/BDFA: 20 88 9B JSR $9B88 ; add character offset 35/BDFD: 18 CLC 35/BDFE: B1 57 LDA ($57),Y ; add to job experience 35/BE00: 65 1E ADC $1E 35/BE02: 85 1E STA $1E 35/BE04: 91 57 STA ($57),Y 35/BE06: A9 00 LDA #$00 35/BE08: 65 1F ADC $1F 35/BE0A: 85 1F STA $1F 35/BE0C: 38 SEC 35/BE0D: A5 1E LDA $1E 35/BE0F: E9 64 SBC #$64 35/BE11: A5 1F LDA $1F 35/BE13: E9 00 SBC #$00 35/BE15: 90 22 BCC $BE39 ; branch if < 100 35/BE17: A9 00 LDA #$00 35/BE19: 91 57 STA ($57),Y ; set job experience to zero 35/BE1B: 88 DEY 35/BE1C: 18 CLC 35/BE1D: B1 57 LDA ($57),Y ; increment job level 35/BE1F: 69 01 ADC #$01 35/BE21: C9 63 CMP #$63 ; max 99 35/BE23: B0 14 BCS $BE39 35/BE25: 91 57 STA ($57),Y 35/BE27: A9 04 LDA #$04 ; action script $04: level/skill up message 35/BE29: 8D D5 78 STA $78D5 35/BE2C: A5 52 LDA $52 35/BE2E: 8D D6 78 STA $78D6 35/BE31: A9 22 LDA #$22 ; $0642: "じゅくれんどアップ!" / "Skill up!" 35/BE33: 8D DA 78 STA $78DA 35/BE36: 20 F7 8F JSR $8FF7 ; execute action script 35/BE39: 20 8D 9B JSR $9B8D ; get equipped weapon pointer (experience) 35/BE3C: 18 CLC 35/BE3D: B1 57 LDA ($57),Y ; add experience 35/BE3F: 6D 24 74 ADC $7424 35/BE42: 85 2F STA $2F 35/BE44: 91 57 STA ($57),Y 35/BE46: C8 INY 35/BE47: B1 57 LDA ($57),Y 35/BE49: 6D 25 74 ADC $7425 35/BE4C: 85 30 STA $30 35/BE4E: 91 57 STA ($57),Y 35/BE50: C8 INY 35/BE51: B1 57 LDA ($57),Y 35/BE53: 6D 26 74 ADC $7426 35/BE56: 85 31 STA $31 35/BE58: 91 57 STA ($57),Y 35/BE5A: 88 DEY 35/BE5B: 88 DEY 35/BE5C: B1 57 LDA ($57),Y 35/BE5E: E9 7F SBC #$7F ; max 9,999,999 35/BE60: C8 INY 35/BE61: B1 57 LDA ($57),Y 35/BE63: E9 96 SBC #$96 35/BE65: C8 INY 35/BE66: B1 57 LDA ($57),Y 35/BE68: E9 98 SBC #$98 35/BE6A: 90 14 BCC $BE80 ; branch if no overflow 35/BE6C: A9 98 LDA #$98 35/BE6E: 91 57 STA ($57),Y 35/BE70: 85 31 STA $31 35/BE72: 88 DEY 35/BE73: A9 99 LDA #$99 35/BE75: 91 57 STA ($57),Y 35/BE77: 85 30 STA $30 35/BE79: 88 DEY 35/BE7A: A9 7F LDA #$7F 35/BE7C: 91 57 STA ($57),Y 35/BE7E: 85 2F STA $2F 35/BE80: A4 5F LDY $5F 35/BE82: C8 INY 35/BE83: B1 57 LDA ($57),Y ; level 35/BE85: AA TAX 35/BE86: 86 18 STX $18 35/BE88: A9 03 LDA #$03 35/BE8A: 85 1A STA $1A 35/BE8C: A9 B0 LDA #$B0 ; 39/A0B0 (level up experience) 35/BE8E: 85 20 STA $20 35/BE90: A9 A0 LDA #$A0 35/BE92: 85 21 STA $21 35/BE94: A9 1C LDA #$1C 35/BE96: A0 1A LDY #$1A 35/BE98: A2 1E LDX #$1E 35/BE9A: 20 A6 FD JSR $FDA6 ; load array item 35/BE9D: 38 SEC 35/BE9E: A5 2F LDA $2F 35/BEA0: ED 1E 74 SBC $741E ; subtract current experience 35/BEA3: A5 30 LDA $30 35/BEA5: ED 1F 74 SBC $741F 35/BEA8: A5 31 LDA $31 35/BEAA: ED 20 74 SBC $7420 35/BEAD: B0 03 BCS $BEB2 ; branch if character gained a level 35/BEAF: 4C 70 BF JMP $BF70 ; next character 35/BEB2: A4 5F LDY $5F 35/BEB4: C8 INY 35/BEB5: B1 57 LDA ($57),Y ; level 35/BEB7: 85 32 STA $32 35/BEB9: AA TAX 35/BEBA: E8 INX 35/BEBB: 8A TXA 35/BEBC: C9 63 CMP #$63 35/BEBE: 90 03 BCC $BEC3 ; branch if level less than 99 35/BEC0: 4C 70 BF JMP $BF70 ; next character 35/BEC3: 91 57 STA ($57),Y 35/BEC5: A9 14 LDA #$14 35/BEC7: 20 88 9B JSR $9B88 ; add character offset 35/BECA: B1 57 LDA ($57),Y ; vitality 35/BECC: 85 24 STA $24 35/BECE: 4A LSR 35/BECF: 20 64 A5 JSR $A564 ; random (0..A) 35/BED2: 18 CLC 35/BED3: 65 24 ADC $24 35/BED5: 85 24 STA $24 ; vitality * (1..1.5) 35/BED7: A4 5F LDY $5F 35/BED9: C8 INY 35/BEDA: B1 57 LDA ($57),Y ; level * 2 35/BEDC: 0A ASL 35/BEDD: 18 CLC 35/BEDE: 65 24 ADC $24 35/BEE0: 85 24 STA $24 35/BEE2: A9 0E LDA #$0E 35/BEE4: 20 88 9B JSR $9B88 ; add character offset 35/BEE7: 18 CLC 35/BEE8: B1 57 LDA ($57),Y ; add to max hp 35/BEEA: 65 24 ADC $24 35/BEEC: 91 57 STA ($57),Y 35/BEEE: C8 INY 35/BEEF: B1 57 LDA ($57),Y 35/BEF1: 69 00 ADC #$00 35/BEF3: 91 57 STA ($57),Y 35/BEF5: 88 DEY 35/BEF6: 38 SEC 35/BEF7: B1 57 LDA ($57),Y ; max 9999 35/BEF9: E9 0F SBC #$0F 35/BEFB: C8 INY 35/BEFC: B1 57 LDA ($57),Y 35/BEFE: E9 27 SBC #$27 35/BF00: 90 09 BCC $BF0B 35/BF02: A9 27 LDA #$27 35/BF04: 91 57 STA ($57),Y 35/BF06: 88 DEY 35/BF07: A9 0F LDA #$0F 35/BF09: 91 57 STA ($57),Y 35/BF0B: A4 5F LDY $5F 35/BF0D: B1 57 LDA ($57),Y ; level * 196 (level up data pointer) 35/BF0F: 85 18 STA $18 35/BF11: A9 C4 LDA #$C4 35/BF13: 85 1A STA $1A 35/BF15: A9 00 LDA #$00 35/BF17: 85 19 STA $19 35/BF19: 85 1B STA $1B 35/BF1B: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 35/BF1E: 18 CLC 35/BF1F: A9 D6 LDA #$D6 ; 39/A1D6 (level up stat bonuses) 35/BF21: 65 1C ADC $1C 35/BF23: 85 20 STA $20 35/BF25: A9 A1 LDA #$A1 35/BF27: 65 1D ADC $1D 35/BF29: 85 21 STA $21 35/BF2B: A5 32 LDA $32 35/BF2D: 85 18 STA $18 35/BF2F: A9 02 LDA #$02 ; 2 bytes 35/BF31: 85 1A STA $1A 35/BF33: A2 21 LDX #$21 35/BF35: A9 1C LDA #$1C 35/BF37: A0 1A LDY #$1A 35/BF39: 20 A6 FD JSR $FDA6 ; load array item 35/BF3C: AD 21 74 LDA $7421 35/BF3F: 20 7C BF JSR $BF7C ; add level up stat bonuses 35/BF42: A2 08 LDX #$08 35/BF44: A9 31 LDA #$31 35/BF46: 20 88 9B JSR $9B88 ; add character offset 35/BF49: 4E 22 74 LSR $7422 35/BF4C: 90 0B BCC $BF59 35/BF4E: 18 CLC 35/BF4F: B1 57 LDA ($57),Y ; add mp 35/BF51: 69 01 ADC #$01 35/BF53: C9 64 CMP #$64 35/BF55: B0 02 BCS $BF59 35/BF57: 91 57 STA ($57),Y 35/BF59: C8 INY 35/BF5A: C8 INY 35/BF5B: CA DEX 35/BF5C: D0 EB BNE $BF49 35/BF5E: A9 04 LDA #$04 ; action script $04: level/skill up message 35/BF60: 8D D5 78 STA $78D5 35/BF63: A5 52 LDA $52 35/BF65: 8D D6 78 STA $78D6 35/BF68: A9 20 LDA #$20 ; $0640: "レベルアップ!" / "Level up!" 35/BF6A: 8D DA 78 STA $78DA 35/BF6D: 20 F7 8F JSR $8FF7 ; execute action script 35/BF70: E6 52 INC $52 ; next character 35/BF72: A5 52 LDA $52 35/BF74: C9 04 CMP #$04 35/BF76: F0 03 BEQ $BF7B 35/BF78: 4C 9B BD JMP $BD9B 35/BF7B: 60 RTS ; [ add level up stat bonuses ] 35/BF7C: 85 19 STA $19 35/BF7E: 29 07 AND #$07 ; bonus amount 35/BF80: 85 18 STA $18 35/BF82: A9 12 LDA #$12 35/BF84: 20 88 9B JSR $9B88 ; add character offset 35/BF87: A2 05 LDX #$05 35/BF89: 06 19 ASL $19 35/BF8B: 90 21 BCC $BFAE 35/BF8D: 18 CLC 35/BF8E: B1 57 LDA ($57),Y 35/BF90: 65 18 ADC $18 ; add bonus 35/BF92: C9 64 CMP #$64 35/BF94: 90 02 BCC $BF98 35/BF96: A9 63 LDA #$63 ; max 99 35/BF98: 91 57 STA ($57),Y 35/BF9A: 98 TYA 35/BF9B: 48 PHA 35/BF9C: 18 CLC 35/BF9D: 69 05 ADC #$05 35/BF9F: A8 TAY 35/BFA0: B1 57 LDA ($57),Y 35/BFA2: 65 18 ADC $18 35/BFA4: C9 64 CMP #$64 35/BFA6: 90 02 BCC $BFAA 35/BFA8: A9 63 LDA #$63 35/BFAA: 91 57 STA ($57),Y 35/BFAC: 68 PLA 35/BFAD: A8 TAY 35/BFAE: C8 INY 35/BFAF: CA DEX 35/BFB0: D0 D7 BNE $BF89 35/BFB2: 60 RTS ; [ give item ] ; $18: item id ; clear carry if inventory is full 35/BFB3: 85 18 STA $18 35/BFB5: A2 00 LDX #$00 35/BFB7: BD C0 60 LDA $60C0,X ; item id 35/BFBA: C5 18 CMP $18 35/BFBC: D0 11 BNE $BFCF 35/BFBE: E8 INX 35/BFBF: 18 CLC 35/BFC0: BD C0 60 LDA $60C0,X 35/BFC3: 69 01 ADC #$01 35/BFC5: C9 64 CMP #$64 35/BFC7: B0 0E BCS $BFD7 35/BFC9: 9D C0 60 STA $60C0,X 35/BFCC: 38 SEC 35/BFCD: B0 20 BCS $BFEF 35/BFCF: E8 INX 35/BFD0: E8 INX 35/BFD1: E0 40 CPX #$40 35/BFD3: D0 E2 BNE $BFB7 35/BFD5: A2 00 LDX #$00 35/BFD7: BD C0 60 LDA $60C0,X 35/BFDA: D0 0C BNE $BFE8 35/BFDC: A5 18 LDA $18 35/BFDE: 9D C0 60 STA $60C0,X 35/BFE1: E8 INX 35/BFE2: FE C0 60 INC $60C0,X 35/BFE5: 38 SEC 35/BFE6: B0 07 BCS $BFEF 35/BFE8: E8 INX 35/BFE9: E8 INX 35/BFEA: E0 40 CPX #$40 35/BFEC: D0 E9 BNE $BFD7 35/BFEE: 18 CLC 35/BFEF: A5 18 LDA $18 35/BFF1: 60 RTS 35/BFF2: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; -------------------------------------------------------------------------- 36/8000: 4C C3 81 JMP $81C3 ; init sound ; [ update sound ] 36/8003: AD 43 7F LDA $7F43 ; branch if not song $37 36/8006: C9 37 CMP #$37 36/8008: D0 07 BNE $8011 36/800A: A9 00 LDA #$00 ; no sound effect 36/800C: 8D 49 7F STA $7F49 36/800F: F0 03 BEQ $8014 36/8011: 20 9D 8B JSR $8B9D ; update sound effects 36/8014: 20 25 89 JSR $8925 ; update music 36/8017: AD 15 40 LDA $4015 36/801A: 09 0F ORA #$0F 36/801C: 8D 15 40 STA $4015 ; enable all channels except dmc 36/801F: 20 30 80 JSR $8030 ; update apu (sound effects) 36/8022: 20 AB 80 JSR $80AB ; update apu (music) 36/8025: 0E 40 7F ASL $7F40 36/8028: AD 42 7F LDA $7F42 ; roll "enable music" bit into $7F40 36/802B: 0A ASL 36/802C: 6E 40 7F ROR $7F40 36/802F: 60 RTS ; [ update apu (sound effects) ] 36/8030: AD 49 7F LDA $7F49 36/8033: F0 75 BEQ $80AA ; return if no sound effect 36/8035: AD 4F 7F LDA $7F4F ; pulse 2 (sound effect) 36/8038: 10 3F BPL $8079 36/803A: 29 01 AND #$01 36/803C: F0 26 BEQ $8064 36/803E: AD 4F 7F LDA $7F4F 36/8041: 29 FE AND #$FE 36/8043: 8D 4F 7F STA $7F4F 36/8046: AD 8E 7F LDA $7F8E 36/8049: 0D 80 7F ORA $7F80 36/804C: 8D 04 40 STA $4004 36/804F: AD 87 7F LDA $7F87 36/8052: 8D 05 40 STA $4005 36/8055: AD 72 7F LDA $7F72 36/8058: 8D 06 40 STA $4006 36/805B: AD 79 7F LDA $7F79 36/805E: 8D 07 40 STA $4007 36/8061: 4C 79 80 JMP $8079 36/8064: AD 8E 7F LDA $7F8E 36/8067: 0D 80 7F ORA $7F80 36/806A: 8D 04 40 STA $4004 36/806D: AD 87 7F LDA $7F87 36/8070: 0A ASL 36/8071: B0 06 BCS $8079 36/8073: AD 72 7F LDA $7F72 36/8076: 8D 06 40 STA $4006 36/8079: AD 50 7F LDA $7F50 ; noise (sound effect) 36/807C: 10 2C BPL $80AA 36/807E: 29 01 AND #$01 36/8080: F0 1A BEQ $809C 36/8082: AD 50 7F LDA $7F50 36/8085: 29 FE AND #$FE 36/8087: 8D 50 7F STA $7F50 36/808A: AD 81 7F LDA $7F81 36/808D: 09 30 ORA #$30 36/808F: 8D 0C 40 STA $400C 36/8092: AD 73 7F LDA $7F73 36/8095: 8D 0E 40 STA $400E 36/8098: 8D 0F 40 STA $400F 36/809B: 60 RTS 36/809C: AD 81 7F LDA $7F81 36/809F: 09 30 ORA #$30 36/80A1: 8D 0C 40 STA $400C 36/80A4: AD 73 7F LDA $7F73 36/80A7: 8D 0E 40 STA $400E 36/80AA: 60 RTS ; [ update apu (music) ] 36/80AB: AD 42 7F LDA $7F42 36/80AE: 30 01 BMI $80B1 ; branch if music enabled 36/80B0: 60 RTS 36/80B1: AD 4A 7F LDA $7F4A ; pulse 1 36/80B4: 10 3F BPL $80F5 36/80B6: 29 01 AND #$01 36/80B8: F0 26 BEQ $80E0 ; branch if not key on 36/80BA: AD 4A 7F LDA $7F4A 36/80BD: 29 FE AND #$FE 36/80BF: 8D 4A 7F STA $7F4A 36/80C2: AD 89 7F LDA $7F89 ; duty cycle 36/80C5: 0D 7B 7F ORA $7F7B ; volume 36/80C8: 8D 00 40 STA $4000 36/80CB: AD 82 7F LDA $7F82 ; sweep 36/80CE: 8D 01 40 STA $4001 36/80D1: AD 6D 7F LDA $7F6D ; frequency 36/80D4: 8D 02 40 STA $4002 36/80D7: AD 74 7F LDA $7F74 36/80DA: 8D 03 40 STA $4003 36/80DD: 4C F5 80 JMP $80F5 36/80E0: AD 89 7F LDA $7F89 ; duty cycle 36/80E3: 0D 7B 7F ORA $7F7B ; volume 36/80E6: 8D 00 40 STA $4000 36/80E9: AD 82 7F LDA $7F82 ; sweep 36/80EC: 0A ASL 36/80ED: B0 06 BCS $80F5 36/80EF: AD 6D 7F LDA $7F6D ; frequency (lo only) 36/80F2: 8D 02 40 STA $4002 36/80F5: AD 4F 7F LDA $7F4F 36/80F8: 30 44 BMI $813E ; branch if pulse 2 sound effect active 36/80FA: AD 4B 7F LDA $7F4B 36/80FD: 10 3F BPL $813E 36/80FF: 29 01 AND #$01 36/8101: F0 26 BEQ $8129 36/8103: AD 4B 7F LDA $7F4B 36/8106: 29 FE AND #$FE 36/8108: 8D 4B 7F STA $7F4B 36/810B: AD 8A 7F LDA $7F8A 36/810E: 0D 7C 7F ORA $7F7C 36/8111: 8D 04 40 STA $4004 36/8114: AD 83 7F LDA $7F83 36/8117: 8D 05 40 STA $4005 36/811A: AD 6E 7F LDA $7F6E 36/811D: 8D 06 40 STA $4006 36/8120: AD 75 7F LDA $7F75 36/8123: 8D 07 40 STA $4007 36/8126: 4C 3E 81 JMP $813E 36/8129: AD 8A 7F LDA $7F8A 36/812C: 0D 7C 7F ORA $7F7C 36/812F: 8D 04 40 STA $4004 36/8132: AD 83 7F LDA $7F83 36/8135: 0A ASL 36/8136: B0 06 BCS $813E 36/8138: AD 6E 7F LDA $7F6E 36/813B: 8D 06 40 STA $4006 36/813E: AD 4C 7F LDA $7F4C ; triangle 36/8141: 10 31 BPL $8174 36/8143: 29 01 AND #$01 36/8145: F0 1F BEQ $8166 36/8147: AD 4C 7F LDA $7F4C 36/814A: 29 FE AND #$FE 36/814C: 8D 4C 7F STA $7F4C 36/814F: AD 7D 7F LDA $7F7D 36/8152: 09 80 ORA #$80 36/8154: 8D 08 40 STA $4008 36/8157: AD 6F 7F LDA $7F6F 36/815A: 8D 0A 40 STA $400A 36/815D: AD 76 7F LDA $7F76 36/8160: 8D 0B 40 STA $400B 36/8163: 4C 74 81 JMP $8174 36/8166: AD 7D 7F LDA $7F7D 36/8169: 09 80 ORA #$80 36/816B: 8D 08 40 STA $4008 36/816E: AD 6F 7F LDA $7F6F 36/8171: 8D 0A 40 STA $400A 36/8174: AD 50 7F LDA $7F50 36/8177: 30 33 BMI $81AC ; branch if noise sound effect active 36/8179: AD 4D 7F LDA $7F4D 36/817C: 10 2E BPL $81AC 36/817E: 29 01 AND #$01 36/8180: F0 1C BEQ $819E 36/8182: AD 4D 7F LDA $7F4D 36/8185: 29 FE AND #$FE 36/8187: 8D 4D 7F STA $7F4D 36/818A: AD 7E 7F LDA $7F7E 36/818D: 09 30 ORA #$30 36/818F: 8D 0C 40 STA $400C 36/8192: AD 70 7F LDA $7F70 36/8195: 8D 0E 40 STA $400E 36/8198: 8D 0F 40 STA $400F 36/819B: 4C AC 81 JMP $81AC 36/819E: AD 7E 7F LDA $7F7E 36/81A1: 09 30 ORA #$30 36/81A3: 8D 0C 40 STA $400C 36/81A6: AD 70 7F LDA $7F70 36/81A9: 8D 0E 40 STA $400E 36/81AC: AD 4E 7F LDA $7F4E ; dmc 36/81AF: 10 11 BPL $81C2 36/81B1: 29 01 AND #$01 36/81B3: F0 0D BEQ $81C2 36/81B5: AD 4E 7F LDA $7F4E 36/81B8: 29 FE AND #$FE 36/81BA: 8D 4E 7F STA $7F4E 36/81BD: A9 00 LDA #$00 ; disable dmc 36/81BF: 8D 11 40 STA $4011 36/81C2: 60 RTS ; [ init sound ] 36/81C3: A9 00 LDA #$00 36/81C5: 8D 15 40 STA $4015 36/81C8: 8D 03 40 STA $4003 36/81CB: 8D 07 40 STA $4007 36/81CE: 8D 0B 40 STA $400B 36/81D1: 8D 0F 40 STA $400F 36/81D4: 8D 42 7F STA $7F42 36/81D7: 8D 40 7F STA $7F40 36/81DA: 8D 49 7F STA $7F49 36/81DD: A2 06 LDX #$06 36/81DF: 9D 4A 7F STA $7F4A,X 36/81E2: CA DEX 36/81E3: 10 FA BPL $81DF 36/81E5: 60 RTS ; [ update channel script ] 36/81E6: A6 D0 LDX $D0 36/81E8: BD 4A 7F LDA $7F4A,X 36/81EB: 10 1D BPL $820A ; branch if channel is disabled 36/81ED: BD 5F 7F LDA $7F5F,X 36/81F0: D0 03 BNE $81F5 36/81F2: 20 0B 82 JSR $820B ; execute sound command 36/81F5: A6 D0 LDX $D0 36/81F7: DE 5F 7F DEC $7F5F,X 36/81FA: BD 97 7F LDA $7F97,X 36/81FD: D0 08 BNE $8207 36/81FF: BD 9E 7F LDA $7F9E,X 36/8202: F0 06 BEQ $820A 36/8204: DE 9E 7F DEC $7F9E,X 36/8207: DE 97 7F DEC $7F97,X 36/820A: 60 RTS ; [ execute sound command ] 36/820B: BD 51 7F LDA $7F51,X ; script pointer 36/820E: 85 D3 STA $D3 36/8210: BD 58 7F LDA $7F58,X 36/8213: 85 D4 STA $D4 36/8215: A0 00 LDY #$00 36/8217: B1 D3 LDA ($D3),Y ; get command 36/8219: C8 INY 36/821A: C9 E0 CMP #$E0 36/821C: 90 51 BCC $826F ; branch if a note 36/821E: E9 E0 SBC #$E0 36/8220: 0A ASL 36/8221: AA TAX 36/8222: BD 2F 82 LDA $822F,X 36/8225: 85 D8 STA $D8 36/8227: BD 30 82 LDA $8230,X 36/822A: 85 D9 STA $D9 36/822C: 6C D8 00 JMP ($00D8) ; sound commands $E0-$FF 36/822F: 8353 835C 8366 8370 837A 8384 838E 8398 ; $E0 36/823F: 83A2 83AC 83B6 83C0 83CA 83D4 83DE 83E8 36/824F: 83F2 83FC 8406 8410 841A 8424 843A 8450 ; $F0 36/825F: 8466 8471 8485 8499 84AF 84D0 84F0 84FF ; [ sound command $00-$DF: play note ] 36/826F: 85 D5 STA $D5 36/8271: A6 D0 LDX $D0 36/8273: 98 TYA 36/8274: 18 CLC 36/8275: 65 D3 ADC $D3 36/8277: 85 D3 STA $D3 36/8279: 9D 51 7F STA $7F51,X 36/827C: A5 D4 LDA $D4 36/827E: 69 00 ADC #$00 36/8280: 85 D4 STA $D4 36/8282: 9D 58 7F STA $7F58,X 36/8285: A5 D5 LDA $D5 36/8287: 29 0F AND #$0F 36/8289: A8 TAY 36/828A: B9 05 88 LDA $8805,Y ; note duration 36/828D: 9D 5F 7F STA $7F5F,X 36/8290: A5 D5 LDA $D5 36/8292: C9 D0 CMP #$D0 36/8294: B0 53 BCS $82E9 ; branch if a tie 36/8296: C9 C0 CMP #$C0 36/8298: B0 6D BCS $8307 ; branch if a rest 36/829A: BD 4A 7F LDA $7F4A,X 36/829D: 09 01 ORA #$01 ; key on 36/829F: 29 FD AND #$FD 36/82A1: 9D 4A 7F STA $7F4A,X 36/82A4: A9 00 LDA #$00 36/82A6: 9D BA 7F STA $7FBA,X 36/82A9: 9D C8 7F STA $7FC8,X 36/82AC: 9D DD 7F STA $7FDD,X 36/82AF: 9D F9 7F STA $7FF9,X 36/82B2: 9D F2 7F STA $7FF2,X 36/82B5: A5 D1 LDA $D1 36/82B7: F0 57 BEQ $8310 ; dmc doesn't have any of this stuff 36/82B9: C9 02 CMP #$02 36/82BB: F0 09 BEQ $82C6 ; triangle channel doesn't have decay 36/82BD: 20 1D 83 JSR $831D ; init decay counter 36/82C0: A5 D1 LDA $D1 36/82C2: C9 01 CMP #$01 36/82C4: F0 24 BEQ $82EA ; branch if noise channel 36/82C6: BD 66 7F LDA $7F66,X ; octave 36/82C9: 0A ASL 36/82CA: 0A ASL 36/82CB: 85 D6 STA $D6 36/82CD: 0A ASL 36/82CE: 65 D6 ADC $D6 36/82D0: 85 D6 STA $D6 36/82D2: A5 D5 LDA $D5 ; pitch + octave * 12 36/82D4: 4A LSR 36/82D5: 4A LSR 36/82D6: 4A LSR 36/82D7: 4A LSR 36/82D8: 18 CLC 36/82D9: 65 D6 ADC $D6 36/82DB: 0A ASL 36/82DC: A8 TAY 36/82DD: B9 2D 87 LDA $872D,Y ; frequency table 36/82E0: 9D 6D 7F STA $7F6D,X 36/82E3: B9 2E 87 LDA $872E,Y 36/82E6: 9D 74 7F STA $7F74,X 36/82E9: 60 RTS ; noise 36/82EA: BD 66 7F LDA $7F66,X ; octave 36/82ED: 0A ASL 36/82EE: 0A ASL 36/82EF: 85 D6 STA $D6 36/82F1: 0A ASL 36/82F2: 65 D6 ADC $D6 36/82F4: 85 D6 STA $D6 36/82F6: A5 D5 LDA $D5 36/82F8: 4A LSR 36/82F9: 4A LSR 36/82FA: 4A LSR 36/82FB: 4A LSR 36/82FC: 18 CLC 36/82FD: 65 D6 ADC $D6 36/82FF: A8 TAY 36/8300: B9 BD 87 LDA $87BD,Y ; noise table 36/8303: 9D 6D 7F STA $7F6D,X 36/8306: 60 RTS 36/8307: BD 4A 7F LDA $7F4A,X 36/830A: 09 02 ORA #$02 ; key off 36/830C: 9D 4A 7F STA $7F4A,X 36/830F: 60 RTS ; dmc 36/8310: AD 44 7F LDA $7F44 36/8313: C9 05 CMP #$05 36/8315: 90 05 BCC $831C 36/8317: A9 FF LDA #$FF ; set dmc direct load (causes a pop sound) 36/8319: 8D 11 40 STA $4011 36/831C: 60 RTS ; [ init decay counter ] 36/831D: A5 D5 LDA $D5 36/831F: 29 0F AND #$0F 36/8321: AA TAX 36/8322: BD 15 88 LDA $8815,X ; decay duration 36/8325: 85 D8 STA $D8 36/8327: A0 00 LDY #$00 36/8329: 84 D9 STY $D9 36/832B: B1 D3 LDA ($D3),Y ; add tie duration 36/832D: C8 INY 36/832E: C9 D0 CMP #$D0 36/8330: 90 14 BCC $8346 36/8332: C9 E0 CMP #$E0 36/8334: B0 10 BCS $8346 36/8336: 29 0F AND #$0F 36/8338: AA TAX 36/8339: BD 15 88 LDA $8815,X 36/833C: 65 D8 ADC $D8 36/833E: 85 D8 STA $D8 36/8340: 90 E9 BCC $832B 36/8342: E6 D9 INC $D9 36/8344: B0 E5 BCS $832B 36/8346: A6 D0 LDX $D0 36/8348: A5 D8 LDA $D8 36/834A: 9D 97 7F STA $7F97,X ; decay counter 36/834D: A5 D9 LDA $D9 36/834F: 9D 9E 7F STA $7F9E,X 36/8352: 60 RTS ; [ sound command $E0: set tempo ] 36/8353: B1 D3 LDA ($D3),Y 36/8355: C8 INY 36/8356: 8D 45 7F STA $7F45 36/8359: 4C 17 82 JMP $8217 ; [ sound command $E1: set volume to 2 ] 36/835C: A6 D0 LDX $D0 36/835E: A9 02 LDA #$02 36/8360: 9D 90 7F STA $7F90,X 36/8363: 4C 17 82 JMP $8217 ; [ sound command $E2:set volume to 3 ] 36/8366: A6 D0 LDX $D0 36/8368: A9 03 LDA #$03 36/836A: 9D 90 7F STA $7F90,X 36/836D: 4C 17 82 JMP $8217 ; [ sound command $E3: set volume to 4 ] 36/8370: A6 D0 LDX $D0 36/8372: A9 04 LDA #$04 36/8374: 9D 90 7F STA $7F90,X 36/8377: 4C 17 82 JMP $8217 ; [ sound command $E4: set volume to 5 ] 36/837A: A6 D0 LDX $D0 36/837C: A9 05 LDA #$05 36/837E: 9D 90 7F STA $7F90,X 36/8381: 4C 17 82 JMP $8217 ; [ sound command $E5: set volume to 6 ] 36/8384: A6 D0 LDX $D0 36/8386: A9 06 LDA #$06 36/8388: 9D 90 7F STA $7F90,X 36/838B: 4C 17 82 JMP $8217 ; [ sound command $E6: set volume to 7 ] 36/838E: A6 D0 LDX $D0 36/8390: A9 07 LDA #$07 36/8392: 9D 90 7F STA $7F90,X 36/8395: 4C 17 82 JMP $8217 ; [ sound command $E7: set volume to 8 ] 36/8398: A6 D0 LDX $D0 36/839A: A9 08 LDA #$08 36/839C: 9D 90 7F STA $7F90,X 36/839F: 4C 17 82 JMP $8217 ; [ sound command $E8: set volume to 9 ] 36/83A2: A6 D0 LDX $D0 36/83A4: A9 09 LDA #$09 36/83A6: 9D 90 7F STA $7F90,X 36/83A9: 4C 17 82 JMP $8217 ; [ sound command $E9: set volume to 10 ] 36/83AC: A6 D0 LDX $D0 36/83AE: A9 0A LDA #$0A 36/83B0: 9D 90 7F STA $7F90,X 36/83B3: 4C 17 82 JMP $8217 ; [ sound command $EA: set volume to 11 ] 36/83B6: A6 D0 LDX $D0 36/83B8: A9 0B LDA #$0B 36/83BA: 9D 90 7F STA $7F90,X 36/83BD: 4C 17 82 JMP $8217 ; [ sound command $EB: set volume to 12 ] 36/83C0: A6 D0 LDX $D0 36/83C2: A9 0C LDA #$0C 36/83C4: 9D 90 7F STA $7F90,X 36/83C7: 4C 17 82 JMP $8217 ; [ sound command $EC: set volume to 13 ] 36/83CA: A6 D0 LDX $D0 36/83CC: A9 0D LDA #$0D 36/83CE: 9D 90 7F STA $7F90,X 36/83D1: 4C 17 82 JMP $8217 ; [ sound command $ED: set volume to 14 ] 36/83D4: A6 D0 LDX $D0 36/83D6: A9 0E LDA #$0E 36/83D8: 9D 90 7F STA $7F90,X 36/83DB: 4C 17 82 JMP $8217 ; [ sound command $EE: set volume to 15 ] 36/83DE: A6 D0 LDX $D0 36/83E0: A9 0F LDA #$0F 36/83E2: 9D 90 7F STA $7F90,X 36/83E5: 4C 17 82 JMP $8217 ; [ sound command $EF: set octave to 0 ] 36/83E8: A6 D0 LDX $D0 36/83EA: A9 00 LDA #$00 36/83EC: 9D 66 7F STA $7F66,X 36/83EF: 4C 17 82 JMP $8217 ; [ sound command $F0: set octave to 1 ] 36/83F2: A6 D0 LDX $D0 36/83F4: A9 01 LDA #$01 36/83F6: 9D 66 7F STA $7F66,X 36/83F9: 4C 17 82 JMP $8217 ; [ sound command $F1: set octave to 2 ] 36/83FC: A6 D0 LDX $D0 36/83FE: A9 02 LDA #$02 36/8400: 9D 66 7F STA $7F66,X 36/8403: 4C 17 82 JMP $8217 ; [ sound command $F2: set octave to 3 ] 36/8406: A6 D0 LDX $D0 36/8408: A9 03 LDA #$03 36/840A: 9D 66 7F STA $7F66,X 36/840D: 4C 17 82 JMP $8217 ; [ sound command $F3: set octave to 4 ] 36/8410: A6 D0 LDX $D0 36/8412: A9 04 LDA #$04 36/8414: 9D 66 7F STA $7F66,X 36/8417: 4C 17 82 JMP $8217 ; [ sound command $F4: set octave to 5 ] 36/841A: A6 D0 LDX $D0 36/841C: A9 05 LDA #$05 36/841E: 9D 66 7F STA $7F66,X 36/8421: 4C 17 82 JMP $8217 ; [ sound command $F5: set envelopes (1/8 duty cycle) ] ; b1: volume envelope ; b2: pitch envelope 36/8424: A6 D0 LDX $D0 36/8426: A9 30 LDA #$30 36/8428: 9D 89 7F STA $7F89,X 36/842B: B1 D3 LDA ($D3),Y 36/842D: C8 INY 36/842E: 9D C1 7F STA $7FC1,X 36/8431: B1 D3 LDA ($D3),Y 36/8433: C8 INY 36/8434: 9D EB 7F STA $7FEB,X 36/8437: 4C 17 82 JMP $8217 ; [ sound command $F6: set envelopes (1/4 duty cycle) ] 36/843A: A6 D0 LDX $D0 36/843C: A9 70 LDA #$70 36/843E: 9D 89 7F STA $7F89,X 36/8441: B1 D3 LDA ($D3),Y 36/8443: C8 INY 36/8444: 9D C1 7F STA $7FC1,X 36/8447: B1 D3 LDA ($D3),Y 36/8449: C8 INY 36/844A: 9D EB 7F STA $7FEB,X 36/844D: 4C 17 82 JMP $8217 ; [ sound command $F7: set envelopes (1/2 duty cycle) ] 36/8450: A6 D0 LDX $D0 36/8452: A9 B0 LDA #$B0 36/8454: 9D 89 7F STA $7F89,X 36/8457: B1 D3 LDA ($D3),Y 36/8459: C8 INY 36/845A: 9D C1 7F STA $7FC1,X 36/845D: B1 D3 LDA ($D3),Y 36/845F: C8 INY 36/8460: 9D EB 7F STA $7FEB,X 36/8463: 4C 17 82 JMP $8217 ; [ sound command $F8: set sweep ] 36/8466: A6 D0 LDX $D0 36/8468: B1 D3 LDA ($D3),Y 36/846A: C8 INY 36/846B: 9D 82 7F STA $7F82,X 36/846E: 4C 17 82 JMP $8217 ; [ sound command $F9: hi-hat preset ] 36/8471: A6 D0 LDX $D0 36/8473: A9 04 LDA #$04 ; set octave to 4 36/8475: 9D 66 7F STA $7F66,X 36/8478: A9 00 LDA #$00 ; volume envelope 0 36/847A: 9D C1 7F STA $7FC1,X 36/847D: A9 08 LDA #$08 ; set channel volume to 8 36/847F: 9D 90 7F STA $7F90,X 36/8482: 4C 17 82 JMP $8217 ; [ sound command $FA: snare drum preset ] 36/8485: A6 D0 LDX $D0 36/8487: A9 05 LDA #$05 ; set octave to 5 36/8489: 9D 66 7F STA $7F66,X 36/848C: A9 01 LDA #$01 ; volume envelope 1 36/848E: 9D C1 7F STA $7FC1,X 36/8491: A9 0F LDA #$0F ; set channel volume to 15 36/8493: 9D 90 7F STA $7F90,X 36/8496: 4C 17 82 JMP $8217 ; [ sound command $FB: repeat start ] ; b1: repeat count 36/8499: B1 D3 LDA ($D3),Y 36/849B: C8 INY 36/849C: A6 D0 LDX $D0 36/849E: FE A5 7F INC $7FA5,X ; increment repeat depth 36/84A1: D0 06 BNE $84A9 36/84A3: 9D AC 7F STA $7FAC,X 36/84A6: 4C 17 82 JMP $8217 36/84A9: 9D B3 7F STA $7FB3,X 36/84AC: 4C 17 82 JMP $8217 ; [ sound command $FC: repeat end ] ; +b1: repeat address 36/84AF: A6 D0 LDX $D0 36/84B1: BD A5 7F LDA $7FA5,X 36/84B4: D0 0D BNE $84C3 36/84B6: DE AC 7F DEC $7FAC,X 36/84B9: D0 35 BNE $84F0 ; branch if looping 36/84BB: C8 INY ; skip over repeat address 36/84BC: C8 INY 36/84BD: DE A5 7F DEC $7FA5,X 36/84C0: 4C 17 82 JMP $8217 36/84C3: DE B3 7F DEC $7FB3,X 36/84C6: D0 28 BNE $84F0 36/84C8: C8 INY 36/84C9: C8 INY 36/84CA: DE A5 7F DEC $7FA5,X 36/84CD: 4C 17 82 JMP $8217 ; [ sound command $FD: volta repeat ] ; +b1: repeat address 36/84D0: A6 D0 LDX $D0 36/84D2: BD A5 7F LDA $7FA5,X 36/84D5: D0 0B BNE $84E2 36/84D7: BD AC 7F LDA $7FAC,X 36/84DA: 4A LSR 36/84DB: B0 10 BCS $84ED 36/84DD: C8 INY 36/84DE: C8 INY 36/84DF: 4C 17 82 JMP $8217 36/84E2: BD B3 7F LDA $7FB3,X 36/84E5: 4A LSR 36/84E6: B0 05 BCS $84ED 36/84E8: C8 INY 36/84E9: C8 INY 36/84EA: 4C 17 82 JMP $8217 36/84ED: DE A5 7F DEC $7FA5,X ; fallthrough ; [ sound command $FE: jump ] ; +b1: jump address 36/84F0: B1 D3 LDA ($D3),Y ; get jump address 36/84F2: C8 INY 36/84F3: AA TAX 36/84F4: B1 D3 LDA ($D3),Y 36/84F6: 85 D4 STA $D4 36/84F8: 86 D3 STX $D3 36/84FA: A0 00 LDY #$00 36/84FC: 4C 17 82 JMP $8217 ; [ sound command $FF: end of script ] 36/84FF: A6 D0 LDX $D0 36/8501: BD 4A 7F LDA $7F4A,X ; disable channel 36/8504: 29 7F AND #$7F 36/8506: 9D 4A 7F STA $7F4A,X 36/8509: A5 D1 LDA $D1 36/850B: F0 4C BEQ $8559 ; branch if dmc 36/850D: C9 03 CMP #$03 36/850F: F0 0F BEQ $8520 ; branch if pulse 2 36/8511: C9 02 CMP #$02 36/8513: F0 25 BEQ $853A ; branch if triangle 36/8515: C9 01 CMP #$01 36/8517: F0 28 BEQ $8541 ; branch if noise 36/8519: A9 30 LDA #$30 36/851B: 8D 00 40 STA $4000 36/851E: D0 39 BNE $8559 36/8520: A5 D2 LDA $D2 36/8522: F0 0A BEQ $852E 36/8524: AD 4B 7F LDA $7F4B 36/8527: 09 02 ORA #$02 36/8529: 8D 4B 7F STA $7F4B 36/852C: D0 05 BNE $8533 36/852E: AD 4F 7F LDA $7F4F 36/8531: 30 26 BMI $8559 36/8533: A9 30 LDA #$30 36/8535: 8D 04 40 STA $4004 36/8538: D0 1F BNE $8559 36/853A: A9 80 LDA #$80 36/853C: 8D 08 40 STA $4008 36/853F: D0 18 BNE $8559 36/8541: A5 D2 LDA $D2 36/8543: F0 0A BEQ $854F 36/8545: AD 4D 7F LDA $7F4D 36/8548: 09 02 ORA #$02 36/854A: 8D 4D 7F STA $7F4D 36/854D: D0 05 BNE $8554 36/854F: AD 50 7F LDA $7F50 36/8552: 30 05 BMI $8559 36/8554: A9 30 LDA #$30 36/8556: 8D 0C 40 STA $400C 36/8559: A5 D2 LDA $D2 36/855B: D0 10 BNE $856D ; branch if sound effect 36/855D: A2 04 LDX #$04 36/855F: BD 4A 7F LDA $7F4A,X 36/8562: 30 18 BMI $857C ; return if any music channels active 36/8564: CA DEX 36/8565: 10 F8 BPL $855F 36/8567: A9 00 LDA #$00 36/8569: 8D 42 7F STA $7F42 ; disable music 36/856C: 60 RTS 36/856D: AD 4F 7F LDA $7F4F ; return if any sound effect channels active 36/8570: 30 0A BMI $857C 36/8572: AD 50 7F LDA $7F50 36/8575: 30 05 BMI $857C 36/8577: A9 00 LDA #$00 ; no sound effect 36/8579: 8D 49 7F STA $7F49 36/857C: 60 RTS ; [ update channel envelopes ] 36/857D: A6 D0 LDX $D0 36/857F: BD 4A 7F LDA $7F4A,X 36/8582: 10 10 BPL $8594 ; return if channel is disabled 36/8584: 29 02 AND #$02 36/8586: D0 07 BNE $858F ; branch if key off 36/8588: 20 95 85 JSR $8595 ; update volume envelope 36/858B: 20 D5 86 JSR $86D5 ; update pitch envelope 36/858E: 60 RTS 36/858F: A9 00 LDA #$00 36/8591: 9D 7B 7F STA $7F7B,X ; volume 36/8594: 60 RTS ; [ update volume envelope ] 36/8595: A6 D0 LDX $D0 36/8597: BD BA 7F LDA $7FBA,X ; envelope state 36/859A: C9 03 CMP #$03 36/859C: B0 50 BCS $85EE ; branch if key off 36/859E: C9 01 CMP #$01 36/85A0: D0 12 BNE $85B4 ; branch if not decay 36/85A2: BD 97 7F LDA $7F97,X 36/85A5: D0 0D BNE $85B4 ; branch if still decaying 36/85A7: BD 9E 7F LDA $7F9E,X 36/85AA: D0 08 BNE $85B4 36/85AC: FE BA 7F INC $7FBA,X ; increment envelope state (to release) 36/85AF: A9 00 LDA #$00 36/85B1: 9D C8 7F STA $7FC8,X ; reset envelope data offset 36/85B4: BD C1 7F LDA $7FC1,X 36/85B7: 0A ASL 36/85B8: B0 27 BCS $85E1 36/85BA: A8 TAY 36/85BB: B9 7C 9A LDA $9A7C,Y ; pointers to volume envelope data 36/85BE: 85 D6 STA $D6 36/85C0: B9 7D 9A LDA $9A7D,Y 36/85C3: 85 D7 STA $D7 36/85C5: BD BA 7F LDA $7FBA,X ; envelope state 36/85C8: 0A ASL 36/85C9: AA TAX 36/85CA: A8 TAY 36/85CB: B1 D6 LDA ($D6),Y 36/85CD: C8 INY 36/85CE: 85 D8 STA $D8 36/85D0: B1 D6 LDA ($D6),Y 36/85D2: 85 D9 STA $D9 36/85D4: BD F4 85 LDA $85F4,X ; envelope state jump table 36/85D7: 85 D6 STA $D6 36/85D9: BD F5 85 LDA $85F5,X 36/85DC: 85 D7 STA $D7 36/85DE: 6C D6 00 JMP ($00D6) 36/85E1: AD 44 7F LDA $7F44 36/85E4: C9 05 CMP #$05 36/85E6: 90 06 BCC $85EE 36/85E8: A9 FF LDA #$FF 36/85EA: 9D 7B 7F STA $7F7B,X ; volume 36/85ED: 60 RTS 36/85EE: A9 00 LDA #$00 36/85F0: 9D 7B 7F STA $7F7B,X ; volume 36/85F3: 60 RTS ; envelope state jump table 36/85F4: 85FA 8635 8635 ; [ envelope state 0: attack ] 36/85FA: A6 D0 LDX $D0 36/85FC: BC C8 7F LDY $7FC8,X ; envelope data offset 36/85FF: B1 D8 LDA ($D8),Y 36/8601: 9D E4 7F STA $7FE4,X ; set volume envelope value 36/8604: FE C8 7F INC $7FC8,X 36/8607: C8 INY 36/8608: B1 D8 LDA ($D8),Y 36/860A: 10 08 BPL $8614 ; branch if not attack terminator 36/860C: FE BA 7F INC $7FBA,X ; increment envelope state (to decay) 36/860F: A9 00 LDA #$00 36/8611: 9D C8 7F STA $7FC8,X ; reset envelope data offset 36/8614: BD 90 7F LDA $7F90,X ; channel volume 36/8617: 0A ASL 36/8618: 0A ASL 36/8619: 0A ASL 36/861A: 0A ASL 36/861B: 1D E4 7F ORA $7FE4,X ; envelope value 36/861E: A8 TAY 36/861F: A5 D2 LDA $D2 ; sound effects ignore song volume 36/8621: D0 0B BNE $862E 36/8623: AD 44 7F LDA $7F44 ; song volume 36/8626: 0A ASL 36/8627: 0A ASL 36/8628: 0A ASL 36/8629: 0A ASL 36/862A: 19 25 88 ORA $8825,Y ; volume table 36/862D: A8 TAY 36/862E: B9 25 88 LDA $8825,Y 36/8631: 9D 7B 7F STA $7F7B,X ; volume 36/8634: 60 RTS ; [ envelope state 1/2: decay/release ] 36/8635: A6 D0 LDX $D0 36/8637: BD E4 7F LDA $7FE4,X ; volume envelope value 36/863A: F0 29 BEQ $8665 ; key off if envelope reaches zero 36/863C: BC C8 7F LDY $7FC8,X ; data offset 36/863F: D0 0C BNE $864D 36/8641: B1 D8 LDA ($D8),Y 36/8643: 9D D6 7F STA $7FD6,X ; set volume envelope rate 36/8646: FE C8 7F INC $7FC8,X ; go to the first envelope value 36/8649: 98 TYA 36/864A: 9D CF 7F STA $7FCF,X 36/864D: BD D6 7F LDA $7FD6,X 36/8650: 18 CLC 36/8651: 7D DD 7F ADC $7FDD,X 36/8654: 9D DD 7F STA $7FDD,X 36/8657: C9 64 CMP #$64 36/8659: 90 15 BCC $8670 36/865B: E9 64 SBC #$64 36/865D: 9D DD 7F STA $7FDD,X 36/8660: DE E4 7F DEC $7FE4,X ; decrement envelope value 36/8663: D0 0B BNE $8670 36/8665: A9 03 LDA #$03 ; key off 36/8667: 9D BA 7F STA $7FBA,X 36/866A: A9 00 LDA #$00 36/866C: 9D 7B 7F STA $7F7B,X ; set volume to zero 36/866F: 60 RTS 36/8670: BD E4 7F LDA $7FE4,X ; envelope value 36/8673: 85 D5 STA $D5 36/8675: BC C8 7F LDY $7FC8,X ; envelope data offset 36/8678: BD CF 7F LDA $7FCF,X 36/867B: D0 16 BNE $8693 36/867D: B1 D8 LDA ($D8),Y 36/867F: F0 34 BEQ $86B5 ; envelope is terminated 36/8681: 10 07 BPL $868A 36/8683: 18 CLC 36/8684: 7D C8 7F ADC $7FC8,X ; "subtract" from data offset 36/8687: A8 TAY 36/8688: B1 D8 LDA ($D8),Y 36/868A: 9D CF 7F STA $7FCF,X 36/868D: C8 INY 36/868E: C8 INY 36/868F: 98 TYA 36/8690: 9D C8 7F STA $7FC8,X ; envelope data offset 36/8693: 88 DEY 36/8694: B1 D8 LDA ($D8),Y ; change in volume 36/8696: 30 0F BMI $86A7 36/8698: 18 CLC 36/8699: 65 D5 ADC $D5 36/869B: 85 D5 STA $D5 36/869D: C9 10 CMP #$10 36/869F: 90 11 BCC $86B2 36/86A1: A9 0F LDA #$0F ; max 15 36/86A3: 85 D5 STA $D5 36/86A5: D0 0B BNE $86B2 36/86A7: 18 CLC 36/86A8: 65 D5 ADC $D5 36/86AA: 85 D5 STA $D5 36/86AC: B0 04 BCS $86B2 36/86AE: A9 00 LDA #$00 ; min 0 36/86B0: 85 D5 STA $D5 36/86B2: DE CF 7F DEC $7FCF,X 36/86B5: BD 90 7F LDA $7F90,X ; channel volume 36/86B8: 0A ASL 36/86B9: 0A ASL 36/86BA: 0A ASL 36/86BB: 0A ASL 36/86BC: 05 D5 ORA $D5 36/86BE: A8 TAY 36/86BF: A5 D2 LDA $D2 ; sound effects ignore song volume 36/86C1: D0 0B BNE $86CE 36/86C3: AD 44 7F LDA $7F44 ; song volume 36/86C6: 0A ASL 36/86C7: 0A ASL 36/86C8: 0A ASL 36/86C9: 0A ASL 36/86CA: 19 25 88 ORA $8825,Y ; volume table 36/86CD: A8 TAY 36/86CE: B9 25 88 LDA $8825,Y 36/86D1: 9D 7B 7F STA $7F7B,X ; volume 36/86D4: 60 RTS ; [ update pitch envelope ] 36/86D5: A6 D0 LDX $D0 36/86D7: BD EB 7F LDA $7FEB,X 36/86DA: 0A ASL 36/86DB: B0 4F BCS $872C 36/86DD: A8 TAY 36/86DE: B9 AB 9E LDA $9EAB,Y ; pointers to pitch envelope data 36/86E1: 85 D8 STA $D8 36/86E3: B9 AC 9E LDA $9EAC,Y 36/86E6: 85 D9 STA $D9 36/86E8: BD F9 7F LDA $7FF9,X ; pitch envelope counter 36/86EB: D0 3C BNE $8729 36/86ED: BC F2 7F LDY $7FF2,X ; pitch envelope data offset 36/86F0: B1 D8 LDA ($D8),Y 36/86F2: F0 38 BEQ $872C ; pitch envelope is terminated 36/86F4: 10 07 BPL $86FD 36/86F6: 18 CLC 36/86F7: 7D F2 7F ADC $7FF2,X ; "subtract" from data offset 36/86FA: A8 TAY 36/86FB: B1 D8 LDA ($D8),Y 36/86FD: 9D F9 7F STA $7FF9,X ; reset counter 36/8700: C8 INY 36/8701: C8 INY 36/8702: 98 TYA 36/8703: 9D F2 7F STA $7FF2,X ; set data offset for next frame 36/8706: 88 DEY 36/8707: B1 D8 LDA ($D8),Y ; get pitch envelope frequency offset 36/8709: 30 10 BMI $871B 36/870B: 18 CLC 36/870C: 7D 6D 7F ADC $7F6D,X ; frequency lo 36/870F: 9D 6D 7F STA $7F6D,X 36/8712: 90 15 BCC $8729 36/8714: A9 FF LDA #$FF ; max 255 36/8716: 9D 6D 7F STA $7F6D,X 36/8719: D0 0E BNE $8729 36/871B: 18 CLC 36/871C: 7D 6D 7F ADC $7F6D,X 36/871F: 9D 6D 7F STA $7F6D,X 36/8722: B0 05 BCS $8729 36/8724: A9 00 LDA #$00 ; min 0 36/8726: 9D 6D 7F STA $7F6D,X 36/8729: DE F9 7F DEC $7FF9,X 36/872C: 60 RTS ; frequency values (6*12 items, 2 bytes each) 36/872D: 06AB 064D 05F3 059D 054C 0501 04B8 0474 36/873D: 0434 03F7 03BE 0388 0355 0326 02F9 02CE 36/874D: 02A6 0280 025C 023A 0219 01FB 01DE 01C4 36/875D: 01AA 0193 017C 0167 0152 013F 012D 011C 36/876D: 010C 00FD 00EF 00E1 00D5 00C9 00BE 00B3 36/877D: 00A9 009F 0096 008E 0086 007E 0077 0070 36/878D: 006A 0064 005E 0059 0054 004F 004B 0046 36/879D: 0042 003E 003B 0038 0034 0031 002F 002C 36/87AD: 0029 0027 0025 0023 0021 001F 001D 001B ; noise table 36/87BD: 00 01 02 03 04 05 06 07 08 09 0A 0B 36/87C9: 0C 0E 0F 0F 0F 0F 0F 0F 0F 0F 0F 0F 36/87D5: 80 81 82 83 84 85 86 87 88 89 8A 8B 36/87E1: 8C 8E 8F 8F 8F 8F 8F 8F 8F 8F 8F 8F 36/87ED: 04 04 04 04 04 04 04 04 04 04 04 04 36/87F9: 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B 0B ; note durations 36/8805: 60 ; 00: whole note 36/8806: 48 ; 01: dotted half note 36/8807: 30 ; 02: half note 36/8808: 24 ; 03: dotted quarter note 36/8809: 20 ; 04: quarter note triplet 36/880A: 18 ; 05: quarter note 36/880B: 12 ; 06: dotted eighth note 36/880C: 10 ; 07: eighth note triplet 36/880D: 0C ; 08: eighth note 36/880E: 09 ; 09: dotted 16th note 36/880F: 08 ; 0A: 16th note triplet 36/8810: 06 ; 0B: 16th note 36/8811: 04 ; 0C: 32nd note triplet 36/8812: 03 ; 0D: 32nd note 36/8813: 02 ; 0E: 64th note triplet 36/8814: 01 ; 0F: 128th note triplet ; decay durations 36/8815: 48 36 24 1B 18 12 0D 0C 09 07 06 04 03 02 01 00 ; volume table (16 items, 16 bytes each) 36/8825: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; muted 36/8835: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 36/8845: 00 00 00 00 00 00 00 00 01 01 01 01 01 01 01 02 36/8855: 00 00 00 00 00 01 01 01 01 01 02 02 02 02 02 03 36/8865: 00 00 00 00 01 01 01 01 02 02 02 02 03 03 03 04 36/8875: 00 00 00 01 01 01 02 02 02 03 03 03 04 04 04 05 36/8885: 00 00 00 01 01 02 02 02 03 03 04 04 04 05 05 06 36/8895: 00 00 00 01 01 02 02 03 03 04 04 05 05 06 06 07 36/88A5: 00 00 01 01 02 02 03 03 04 04 05 05 06 06 07 08 36/88B5: 00 00 01 01 02 03 03 04 04 05 06 06 07 07 08 09 36/88C5: 00 00 01 02 02 03 04 04 05 06 06 07 08 08 09 0A 36/88D5: 00 00 01 02 02 03 04 05 05 06 07 08 08 09 0A 0B 36/88E5: 00 00 01 02 03 04 04 05 06 07 08 08 09 0A 0B 0C 36/88F5: 00 00 01 02 03 04 05 06 06 07 08 09 0A 0B 0C 0D 36/8905: 00 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 36/8915: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F ; full volume ; [ update music ] 36/8925: 20 9F 89 JSR $899F ; switch to song bank 36/8928: AD 42 7F LDA $7F42 36/892B: AA TAX 36/892C: 29 01 AND #$01 36/892E: F0 2D BEQ $895D ; branch if not playing a new song 36/8930: AD 40 7F LDA $7F40 36/8933: 10 14 BPL $8949 36/8935: 29 7F AND #$7F 36/8937: CD 43 7F CMP $7F43 36/893A: F0 1A BEQ $8956 36/893C: C9 37 CMP #$37 36/893E: D0 09 BNE $8949 36/8940: 8D 43 7F STA $7F43 36/8943: 20 9F 89 JSR $899F ; switch to song bank 36/8946: 4C 56 89 JMP $8956 36/8949: 8D 41 7F STA $7F41 36/894C: AD 43 7F LDA $7F43 36/894F: 8D 40 7F STA $7F40 36/8952: 20 C3 89 JSR $89C3 ; init song 36/8955: 60 RTS 36/8956: A9 80 LDA #$80 36/8958: 8D 42 7F STA $7F42 36/895B: 30 3E BMI $899B 36/895D: 8A TXA 36/895E: 29 02 AND #$02 36/8960: F0 15 BEQ $8977 ; branch if not resuming music 36/8962: AD 41 7F LDA $7F41 36/8965: 8D 40 7F STA $7F40 36/8968: 8D 43 7F STA $7F43 36/896B: A9 01 LDA #$01 ; play new song 36/896D: 8D 42 7F STA $7F42 36/8970: 20 9F 89 JSR $899F ; switch to song bank 36/8973: 20 C3 89 JSR $89C3 ; init song 36/8976: 60 RTS 36/8977: 8A TXA 36/8978: 29 04 AND #$04 36/897A: F0 03 BEQ $897F ; branch if not stopping music 36/897C: 20 A7 8A JSR $8AA7 ; set volume for stopping music 36/897F: AD 42 7F LDA $7F42 36/8982: 29 20 AND #$20 36/8984: F0 06 BEQ $898C ; branch if not fading in 36/8986: 20 F0 8A JSR $8AF0 ; update fade in 36/8989: 4C 96 89 JMP $8996 36/898C: AD 42 7F LDA $7F42 36/898F: 29 40 AND #$40 36/8991: F0 03 BEQ $8996 ; branch if not fading out 36/8993: 20 11 8B JSR $8B11 ; update fade out 36/8996: AD 42 7F LDA $7F42 36/8999: 10 03 BPL $899E 36/899B: 20 2D 8B JSR $8B2D ; update music channels 36/899E: 60 RTS ; [ switch to song bank ] 36/899F: A9 07 LDA #$07 ; switch prg bank 1 36/89A1: 8D 00 80 STA $8000 36/89A4: A2 00 LDX #$00 36/89A6: AD 43 7F LDA $7F43 ; song id 36/89A9: C9 19 CMP #$19 36/89AB: 90 0B BCC $89B8 36/89AD: E8 INX 36/89AE: C9 2B CMP #$2B 36/89B0: 90 06 BCC $89B8 36/89B2: E8 INX 36/89B3: C9 3B CMP #$3B 36/89B5: 90 01 BCC $89B8 36/89B7: E8 INX 36/89B8: BD BF 89 LDA $89BF,X 36/89BB: 8D 01 80 STA $8001 ; set bank id 36/89BE: 60 RTS ; song banks 36/89BF: 37 ; songs $00-$18 36/89C0: 38 ; songs $19-$2A 36/89C1: 39 ; songs $37-$3A ($2B-$36 use bank $36) 36/89C2: 09 ; songs $3B-$40 ; [ init song ] 36/89C3: 20 C0 8A JSR $8AC0 ; silence music channels 36/89C6: A2 04 LDX #$04 36/89C8: A9 00 LDA #$00 36/89CA: 9D 4A 7F STA $7F4A,X ; channel flags 36/89CD: 9D 5F 7F STA $7F5F,X ; tick counter 36/89D0: 9D 7B 7F STA $7F7B,X ; volume 36/89D3: A9 08 LDA #$08 36/89D5: 9D 82 7F STA $7F82,X ; sweep 36/89D8: A9 30 LDA #$30 36/89DA: 9D 89 7F STA $7F89,X ; duty cycle 36/89DD: A9 0F LDA #$0F 36/89DF: 9D 90 7F STA $7F90,X ; channel volume 36/89E2: A9 FF LDA #$FF 36/89E4: 9D C1 7F STA $7FC1,X 36/89E7: 9D EB 7F STA $7FEB,X 36/89EA: 9D A5 7F STA $7FA5,X 36/89ED: 9D BA 7F STA $7FBA,X 36/89F0: CA DEX ; next channel 36/89F1: 10 D5 BPL $89C8 36/89F3: A9 96 LDA #$96 36/89F5: 8D 45 7F STA $7F45 ; tempo 150 36/89F8: A9 00 LDA #$00 36/89FA: 8D 46 7F STA $7F46 ; reset tempo counter 36/89FD: 8D 47 7F STA $7F47 36/8A00: AD 43 7F LDA $7F43 ; song id 36/8A03: C9 19 CMP #$19 36/8A05: 90 07 BCC $8A0E 36/8A07: C9 2B CMP #$2B 36/8A09: B0 12 BCS $8A1D ; songs $19-$2A 36/8A0B: 38 SEC 36/8A0C: E9 19 SBC #$19 ; songs $00-$18 36/8A0E: 0A ASL 36/8A0F: AA TAX 36/8A10: BD 00 A0 LDA $A000,X 36/8A13: 85 D8 STA $D8 36/8A15: BD 01 A0 LDA $A001,X 36/8A18: 85 D9 STA $D9 36/8A1A: 4C 57 8A JMP $8A57 ; songs $2B-36 36/8A1D: C9 37 CMP #$37 36/8A1F: B0 12 BCS $8A33 36/8A21: 38 SEC 36/8A22: E9 2B SBC #$2B 36/8A24: 0A ASL 36/8A25: AA TAX 36/8A26: BD 77 8C LDA $8C77,X 36/8A29: 85 D8 STA $D8 36/8A2B: BD 78 8C LDA $8C78,X 36/8A2E: 85 D9 STA $D9 36/8A30: 4C 57 8A JMP $8A57 ; songs $37-$3A 36/8A33: C9 3B CMP #$3B 36/8A35: B0 12 BCS $8A49 36/8A37: 38 SEC 36/8A38: E9 37 SBC #$37 36/8A3A: 0A ASL 36/8A3B: AA TAX 36/8A3C: BD AE B3 LDA $B3AE,X 36/8A3F: 85 D8 STA $D8 36/8A41: BD AF B3 LDA $B3AF,X 36/8A44: 85 D9 STA $D9 36/8A46: 4C 57 8A JMP $8A57 ; songs $3B-$40 36/8A49: E9 3B SBC #$3B 36/8A4B: 0A ASL 36/8A4C: AA TAX 36/8A4D: BD 00 B4 LDA $B400,X 36/8A50: 85 D8 STA $D8 36/8A52: BD 01 B4 LDA $B401,X 36/8A55: 85 D9 STA $D9 36/8A57: A2 04 LDX #$04 36/8A59: A0 09 LDY #$09 36/8A5B: B1 D8 LDA ($D8),Y 36/8A5D: 9D 58 7F STA $7F58,X 36/8A60: 88 DEY 36/8A61: B1 D8 LDA ($D8),Y 36/8A63: 9D 51 7F STA $7F51,X 36/8A66: 88 DEY 36/8A67: CA DEX 36/8A68: 10 F1 BPL $8A5B 36/8A6A: A2 04 LDX #$04 36/8A6C: A9 FF LDA #$FF ; channel disabled if pointer = $FFFF 36/8A6E: DD 51 7F CMP $7F51,X 36/8A71: D0 05 BNE $8A78 36/8A73: DD 58 7F CMP $7F58,X 36/8A76: F0 08 BEQ $8A80 36/8A78: BD 4A 7F LDA $7F4A,X 36/8A7B: 09 80 ORA #$80 36/8A7D: 9D 4A 7F STA $7F4A,X ; channel enabled 36/8A80: CA DEX 36/8A81: 10 E9 BPL $8A6C 36/8A83: 20 87 8A JSR $8A87 ; set volume for starting music 36/8A86: 60 RTS ; [ set volume for starting music ] 36/8A87: AD 42 7F LDA $7F42 36/8A8A: 29 08 AND #$08 36/8A8C: D0 0B BNE $8A99 36/8A8E: A9 80 LDA #$80 ; no fade in 36/8A90: 8D 42 7F STA $7F42 36/8A93: A9 0F LDA #$0F ; full volume 36/8A95: 8D 44 7F STA $7F44 36/8A98: 60 RTS 36/8A99: A9 A0 LDA #$A0 ; fade in 36/8A9B: 8D 42 7F STA $7F42 36/8A9E: A9 00 LDA #$00 ; zero volume 36/8AA0: 8D 44 7F STA $7F44 36/8AA3: 8D 48 7F STA $7F48 ; reset fade counter 36/8AA6: 60 RTS ; [ set volume for stopping music ] 36/8AA7: AD 42 7F LDA $7F42 36/8AAA: 29 08 AND #$08 36/8AAC: D0 07 BNE $8AB5 36/8AAE: 8D 42 7F STA $7F42 36/8AB1: 20 C0 8A JSR $8AC0 ; silence music channels 36/8AB4: 60 RTS 36/8AB5: A9 C0 LDA #$C0 ; fade out 36/8AB7: 8D 42 7F STA $7F42 36/8ABA: A9 00 LDA #$00 ; reset fade counter 36/8ABC: 8D 48 7F STA $7F48 36/8ABF: 60 RTS ; [ silence music channels ] 36/8AC0: A2 03 LDX #$03 36/8AC2: BD 4A 7F LDA $7F4A,X 36/8AC5: 10 25 BPL $8AEC ; branch if channel disabled 36/8AC7: E0 01 CPX #$01 36/8AC9: D0 07 BNE $8AD2 ; branch if not pulse 2 36/8ACB: AD 4F 7F LDA $7F4F 36/8ACE: 30 1C BMI $8AEC ; branch if pulse 2 sound effect active 36/8AD0: 10 09 BPL $8ADB 36/8AD2: E0 03 CPX #$03 36/8AD4: D0 05 BNE $8ADB ; branch if not noise 36/8AD6: AD 50 7F LDA $7F50 36/8AD9: 30 11 BMI $8AEC ; branch if noise sound effect active 36/8ADB: 8A TXA 36/8ADC: 0A ASL 36/8ADD: 0A ASL 36/8ADE: A8 TAY 36/8ADF: E0 02 CPX #$02 36/8AE1: D0 04 BNE $8AE7 ; branch if not triangle 36/8AE3: A9 80 LDA #$80 ; halt triangle 36/8AE5: D0 02 BNE $8AE9 36/8AE7: A9 30 LDA #$30 ; halt pulse/noise 36/8AE9: 99 00 40 STA $4000,Y 36/8AEC: CA DEX 36/8AED: 10 D3 BPL $8AC2 36/8AEF: 60 RTS ; [ update fade in ] 36/8AF0: AD 48 7F LDA $7F48 36/8AF3: D0 18 BNE $8B0D 36/8AF5: EE 44 7F INC $7F44 ; increment song volume 36/8AF8: AD 44 7F LDA $7F44 36/8AFB: C9 0F CMP #$0F 36/8AFD: 90 09 BCC $8B08 36/8AFF: AD 42 7F LDA $7F42 ; disable fade in 36/8B02: 29 DF AND #$DF 36/8B04: 8D 42 7F STA $7F42 36/8B07: 60 RTS 36/8B08: A9 10 LDA #$10 ; reset fade in counter 36/8B0A: 8D 48 7F STA $7F48 36/8B0D: CE 48 7F DEC $7F48 36/8B10: 60 RTS ; [ update fade out ] 36/8B11: AD 48 7F LDA $7F48 36/8B14: D0 13 BNE $8B29 36/8B16: CE 44 7F DEC $7F44 ; decrement song volume 36/8B19: D0 09 BNE $8B24 36/8B1B: A9 00 LDA #$00 36/8B1D: 8D 42 7F STA $7F42 36/8B20: 20 C0 8A JSR $8AC0 ; silence music channels 36/8B23: 60 RTS 36/8B24: A9 10 LDA #$10 ; reset fade in counter 36/8B26: 8D 48 7F STA $7F48 36/8B29: CE 48 7F DEC $7F48 36/8B2C: 60 RTS ; [ update music channels ] 36/8B2D: A9 00 LDA #$00 36/8B2F: 85 D2 STA $D2 36/8B31: AD 45 7F LDA $7F45 ; tempo 36/8B34: 18 CLC 36/8B35: 6D 46 7F ADC $7F46 36/8B38: 8D 46 7F STA $7F46 ; tempo counter 36/8B3B: 90 03 BCC $8B40 36/8B3D: EE 47 7F INC $7F47 36/8B40: AD 46 7F LDA $7F46 36/8B43: 38 SEC 36/8B44: E9 96 SBC #$96 36/8B46: A8 TAY 36/8B47: AD 47 7F LDA $7F47 36/8B4A: E9 00 SBC #$00 36/8B4C: 90 38 BCC $8B86 ; branch if no tick 36/8B4E: 8D 47 7F STA $7F47 36/8B51: 8C 46 7F STY $7F46 36/8B54: A9 04 LDA #$04 ; 4/0 (dmc) 36/8B56: 85 D0 STA $D0 36/8B58: A9 00 LDA #$00 36/8B5A: 85 D1 STA $D1 36/8B5C: 20 E6 81 JSR $81E6 ; update channel script 36/8B5F: C6 D0 DEC $D0 ; 3/1 (noise) 36/8B61: A9 01 LDA #$01 36/8B63: 85 D1 STA $D1 36/8B65: 20 E6 81 JSR $81E6 ; update channel script 36/8B68: C6 D0 DEC $D0 ; 2/2 (triangle) 36/8B6A: A9 02 LDA #$02 36/8B6C: 85 D1 STA $D1 36/8B6E: 20 E6 81 JSR $81E6 ; update channel script 36/8B71: C6 D0 DEC $D0 ; 1/3 (pulse 2) 36/8B73: A9 03 LDA #$03 36/8B75: 85 D1 STA $D1 36/8B77: 20 E6 81 JSR $81E6 ; update channel script 36/8B7A: C6 D0 DEC $D0 ; 0/4 (pulse 1) 36/8B7C: A9 04 LDA #$04 36/8B7E: 85 D1 STA $D1 36/8B80: 20 E6 81 JSR $81E6 ; update channel script 36/8B83: 4C 40 8B JMP $8B40 36/8B86: A9 00 LDA #$00 36/8B88: 85 D0 STA $D0 36/8B8A: 20 7D 85 JSR $857D ; update channel envelopes 36/8B8D: E6 D0 INC $D0 36/8B8F: 20 7D 85 JSR $857D ; update channel envelopes 36/8B92: E6 D0 INC $D0 36/8B94: 20 7D 85 JSR $857D ; update channel envelopes 36/8B97: E6 D0 INC $D0 36/8B99: 20 7D 85 JSR $857D ; update channel envelopes 36/8B9C: 60 RTS ; [ update sound effects ] 36/8B9D: AD 49 7F LDA $7F49 36/8BA0: F0 15 BEQ $8BB7 ; return if no sound effect 36/8BA2: C9 FF CMP #$FF 36/8BA4: F0 0B BEQ $8BB1 36/8BA6: 0A ASL 36/8BA7: B0 04 BCS $8BAD 36/8BA9: 20 58 8C JSR $8C58 ; update sound effect channels 36/8BAC: 60 RTS 36/8BAD: 20 B8 8B JSR $8BB8 ; init sound effect 36/8BB0: 60 RTS 36/8BB1: EE 49 7F INC $7F49 36/8BB4: 20 29 8C JSR $8C29 ; mute music channels for sound effect 36/8BB7: 60 RTS ; [ init sound effect ] 36/8BB8: 20 29 8C JSR $8C29 ; mute music channels for sound effect 36/8BBB: A2 01 LDX #$01 36/8BBD: A9 00 LDA #$00 36/8BBF: 9D 4F 7F STA $7F4F,X 36/8BC2: 9D 64 7F STA $7F64,X 36/8BC5: 9D 80 7F STA $7F80,X 36/8BC8: A9 08 LDA #$08 36/8BCA: 9D 87 7F STA $7F87,X 36/8BCD: A9 30 LDA #$30 36/8BCF: 9D 8E 7F STA $7F8E,X 36/8BD2: A9 0F LDA #$0F 36/8BD4: 9D 95 7F STA $7F95,X 36/8BD7: A9 FF LDA #$FF 36/8BD9: 9D C6 7F STA $7FC6,X 36/8BDC: 9D F0 7F STA $7FF0,X 36/8BDF: 9D AA 7F STA $7FAA,X 36/8BE2: 9D BF 7F STA $7FBF,X 36/8BE5: CA DEX 36/8BE6: 10 D5 BPL $8BBD 36/8BE8: AD 49 7F LDA $7F49 36/8BEB: 0A ASL 36/8BEC: AA TAX 36/8BED: BD C5 92 LDA $92C5,X ; pointers to sound effects 36/8BF0: 85 D8 STA $D8 36/8BF2: BD C6 92 LDA $92C6,X 36/8BF5: 85 D9 STA $D9 36/8BF7: A2 01 LDX #$01 36/8BF9: A0 03 LDY #$03 36/8BFB: B1 D8 LDA ($D8),Y ; set script pointers 36/8BFD: 9D 5D 7F STA $7F5D,X 36/8C00: 88 DEY 36/8C01: B1 D8 LDA ($D8),Y 36/8C03: 9D 56 7F STA $7F56,X 36/8C06: 88 DEY 36/8C07: CA DEX 36/8C08: 10 F1 BPL $8BFB 36/8C0A: A2 01 LDX #$01 36/8C0C: A9 FF LDA #$FF ; channel disabled if pointer is $FFFF 36/8C0E: DD 56 7F CMP $7F56,X 36/8C11: D0 05 BNE $8C18 36/8C13: DD 5D 7F CMP $7F5D,X 36/8C16: F0 08 BEQ $8C20 36/8C18: BD 4F 7F LDA $7F4F,X ; enable channel 36/8C1B: 09 80 ORA #$80 36/8C1D: 9D 4F 7F STA $7F4F,X 36/8C20: CA DEX 36/8C21: 10 E9 BPL $8C0C 36/8C23: A9 40 LDA #$40 36/8C25: 8D 49 7F STA $7F49 ; sound effect is playing 36/8C28: 60 RTS ; [ mute music channels for sound effect ] 36/8C29: AD 4F 7F LDA $7F4F 36/8C2C: 10 12 BPL $8C40 ; branch if pulse 2 is disabled 36/8C2E: 29 7F AND #$7F 36/8C30: 8D 4F 7F STA $7F4F 36/8C33: A9 30 LDA #$30 36/8C35: 8D 04 40 STA $4004 36/8C38: AD 4B 7F LDA $7F4B ; mute pulse 2 for sound effect 36/8C3B: 09 02 ORA #$02 36/8C3D: 8D 4B 7F STA $7F4B 36/8C40: AD 50 7F LDA $7F50 36/8C43: 10 12 BPL $8C57 ; branch if noise is disabled 36/8C45: 29 7F AND #$7F 36/8C47: 8D 50 7F STA $7F50 36/8C4A: A9 30 LDA #$30 36/8C4C: 8D 0C 40 STA $400C 36/8C4F: AD 4D 7F LDA $7F4D ; mute noise channel for sound effect 36/8C52: 09 02 ORA #$02 36/8C54: 8D 4D 7F STA $7F4D 36/8C57: 60 RTS ; [ update sound effect channels ] 36/8C58: A9 FF LDA #$FF 36/8C5A: 85 D2 STA $D2 36/8C5C: A9 05 LDA #$05 ; sound effect 1 36/8C5E: 85 D0 STA $D0 36/8C60: A9 03 LDA #$03 ; pulse 2 36/8C62: 85 D1 STA $D1 36/8C64: 20 E6 81 JSR $81E6 ; update channel script 36/8C67: 20 7D 85 JSR $857D ; update channel envelopes 36/8C6A: E6 D0 INC $D0 ; sound effect 2 36/8C6C: A9 01 LDA #$01 ; noise 36/8C6E: 85 D1 STA $D1 36/8C70: 20 E6 81 JSR $81E6 ; update channel script 36/8C73: 20 7D 85 JSR $857D ; update channel envelopes 36/8C76: 60 RTS ; -------------------------------------------------------------------------- ; pointers to songs $2B-36 36/8C77: 8C8F 8CD2 8D1A 8DA2 8F76 9128 9148 919C 36/8C87: 91C3 9201 9220 924A ; song $2B 36/8C8F: 8C99 8CB5 8CC9 FFFF FFFF ; pulse 1 36/8C99: F6 02 FF ; volume envelope 2, no pitch envelope, 1/4 duty cycle 36/8C9C: EB ; volume 12 36/8C9D: E0 5A ; tempo 90 36/8C9F: F1 ; octave 2 36/8CA0: 48 ; E eighth note 36/8CA1: 78 ; G eighth note 36/8CA2: F2 ; octave 3 36/8CA3: 08 ; C eighth note 36/8CA4: 48 ; E eighth note 36/8CA5: 78 ; G eighth note 36/8CA6: 28 ; D eighth note 36/8CA7: 98 ; A eighth note 36/8CA8: 58 ; F eighth note 36/8CA9: E0 55 ; tempo 85 36/8CAB: 78 ; G eighth note 36/8CAC: 38 ; Eb eighth note 36/8CAD: E0 50 ; tempo 80 36/8CAF: 08 ; C eighth note 36/8CB0: 38 ; Eb eighth note 36/8CB1: E0 4B ; tempo 75 36/8CB3: 72 ; G half note 36/8CB4: FF ; end of script ; pulse 2 36/8CB5: F6 02 FF ; volume envelope 2, no pitch envelope, 1/4 duty cycle 36/8CB8: E8 ; volume 9 36/8CB9: F0 ; octave 1 36/8CBA: 78 ; G eighth note 36/8CBB: F1 ; octave 2 36/8CBC: 08 ; C eighth note 36/8CBD: 48 ; E eighth note 36/8CBE: 98 ; A eighth note 36/8CBF: A8 ; Bb eighth note 36/8CC0: 78 ; G eighth note 36/8CC1: 58 ; F eighth note 36/8CC2: 28 ; D eighth note 36/8CC3: 05 ; C quarter note 36/8CC4: 38 ; Eb eighth note 36/8CC5: 08 ; C eighth note 36/8CC6: F0 ; octave 1 36/8CC7: B2 ; B half note 36/8CC8: FF ; end of script ; triangle 36/8CC9: F1 ; octave 2 36/8CCA: 05 ; C quarter note 36/8CCB: 55 ; F quarter note 36/8CCC: 35 ; Eb quarter note 36/8CCD: A5 ; Bb quarter note 36/8CCE: 85 ; Ab quarter note 36/8CCF: 55 ; F quarter note 36/8CD0: 72 ; G half note 36/8CD1: FF ; end of script ; song $2C 36/8CD2: 8CDC 8CF6 8D13 FFFF FFFF ... ; pointers to sound effects 36/92C5: 9387 939A 93A8 93C2 93CC 93DF 93EC 93FF 36/92D5: 9411 9420 942C 9440 944F 9463 947F 94B3 36/92E5: 94C6 94DD 94E7 94F2 94FE 950A 9520 952C 36/92F5: 953A 9546 9550 9560 956B 957F 958E 9599 36/9305: 95B4 95C3 95D7 95E6 95F8 9604 9612 9620 36/9315: 962F 963E 9653 966C 967D 969C 9387 96A8 36/9325: 96C5 96D4 96FC 970E 971E 972E 974A 975E 36/9335: 9779 9795 9387 97A1 97BF 97DE 9806 981D 36/9345: 9829 9836 9845 985D 986E 9881 988F 989A 36/9355: 98AB 98BD 98D1 98E9 98F6 9903 990F 9922 36/9365: 9938 9951 9975 9989 99A3 99B2 99C3 99CD 36/9375: 99E4 99F2 96BA 97AD 99FF 9A3B 9A4E 9A5B 36/9385: 9A66 ; sound effect 0 36/9387: 938B 9393 36/938B: F7 1F FF 36/938E: F8 BD 36/9390: F2 36/9391: 84 36/9392: FF 36/9393: F5 1B FF 36/9396: C4 36/9397: F0 36/9398: 10 36/9399: FF ; sound effect 1 36/939A: 939E FFFF 36/939E: F6 23 0A 36/93A1: F3 36/93A2: 0B 36/93A3: 4B 36/93A4: 2B 36/93A5: 6B 36/93A6: B3 36/93A7: FF ; sound effect 2 36/93A8: 93AC 93B8 36/93AC: F7 1C FF 36/93AF: F8 B5 36/93B1: F4 36/93B2: 83 36/93B3: DB 36/93B4: 63 36/93B5: DB 36/93B6: 42 36/93B7: FF 36/93B8: F5 17 FF 36/93BB: EF 36/93BC: 43 36/93BD: DB 36/93BE: 63 36/93BF: DB 36/93C0: 72 36/93C1: FF ; sound effect 3 36/93C2: FFFF 93C6 36/93C6: F5 15 FF 36/93C9: F0 36/93CA: 12 36/93CB: FF ... 36/9A66: 9A6A FFFF 36/9A6A: F7 15 FF 36/9A6D: F8 8C 36/9A6F: F1 36/9A70: 05 36/9A71: EB 36/9A72: 05 36/9A73: E9 36/9A74: 05 36/9A75: E7 36/9A76: 05 36/9A77: E5 36/9A78: 05 36/9A79: E3 36/9A7A: 04 36/9A7B: FF ; pointers to volume envelope data 36/9A7C: 9ACE 9ADB 9AED 9B0E 9B55 9B83 9BA0 9BAA ; $00 36/9A8C: 9BC9 9BE8 9C0A 9B18 9B73 9B22 9B7B 9C24 36/9A9C: 9C40 9C00 9C56 9C72 9C82 9C91 9C9B 9CA5 ; $10 36/9AAC: 9D3A 9DC5 9E23 9E40 9CD7 9C4A 9E51 9D80 36/9ABC: 9CF3 9D16 9CBF 9CEB 9DF4 9E6F 9E31 9B28 ; $20 36/9ACC: 9E7D ; volume envelope data ; each envelope starts with pointers to its attack, decay, and release data ; attack data is a list of envelope values terminated by FF ; the envelope changes to the next value every frame ; decay and release data start with a decay rate "r" ; the envelope value decrements every 100/r frames ; the remaining data is pairs of bytes, the first byte is a frame count and ; the second byte is a delta mod value that affects the current envelope ; if the first byte is zero, the envelope terminates (key off) ; if the msb of the first byte is set, the number is added to the offset ; to jump back a few bytes 36/9ACE: 9AD4 9AD9 9AD9 36/9AD4: 0F 09 03 00 FF 36/9AD9: 00 00 36/9ADB: 9AE1 9AEB 9AEB 36/9AE1: 0F 0C 09 07 05 03 02 01 00 FF 36/9AEB: 00 00 36/9AED: 9AF3 9B0A 9B0C 36/9AF3: 0F 0F 0E 0E 0D 0D 0C 0C 0B 0B 0A 0A 09 09 08 08 36/9B03: 08 07 07 07 07 06 FF 36/9B0A: 14 00 36/9B0C: 1E 00 36/9B0E: 9AF3 9B14 9B16 36/9B14: 0A 00 36/9B16: 14 00 36/9B18: 9AF3 9B1E 9B20 36/9B1E: 05 00 36/9B20: 0A 00 36/9B22: 9AF3 9B14 9B20 36/9B28: 9B2E 9B53 9B53 36/9B2E: 0F 0F 0E 0E 0D 0D 0C 0C 0B 0B 0A 0A 09 09 08 08 36/9B3E: 08 07 07 07 06 06 06 06 05 05 05 05 05 04 04 04 36/9B4E: 04 04 04 03 FF 36/9B53: 05 00 36/9B55: 9B5B 9B6B 9B71 36/9B5B: 05 06 07 08 09 09 0A 0A 0B 0B 0C 0C 0D 0D 0F FF 36/9B6B: 05 02 00 02 FF FC 36/9B71: 32 00 36/9B73: 9B5B 9B79 9B71 36/9B79: 05 00 36/9B7B: 9B5B 9B79 9B81 36/9B81: 19 00 36/9B83: 9B89 9B9C 9B9E 36/9B89: 0B 0C 0D 0E 0F 0E 0D 0C 0B 0A 09 08 07 07 06 06 36/9B99: 06 05 FF 36/9B9C: 0A 00 36/9B9E: 05 00 36/9BA0: 9B89 9BA6 9BA8 36/9BA6: 05 00 36/9BA8: 02 00 36/9BAA: 9BB0 9BBB 9BC7 36/9BB0: 0F 06 08 09 0A 0B 0C 0D 0E 0F FF 36/9BBB: 05 01 00 02 FF 02 FE 02 FF 01 00 F6 36/9BC7: 43 00 36/9BC9: 9BCF 9BDE 9BE6 36/9BCF: 05 06 07 08 09 09 0A 0A 0B 0B 0D 0D 0F 0F FF 36/9BDE: 05 01 00 02 FF 01 00 FA 36/9BE6: 32 00 36/9BE8: 9BEE 9BFC 9BFE 36/9BEE: 0F 0E 0D 0C 0B 0A 09 08 08 07 07 07 06 FF 36/9BFC: 19 00 36/9BFE: 1E 00 36/9C00: 9BEE 9C06 9C08 36/9C06: 05 00 36/9C08: 0A 00 36/9C0A: 9C10 9C16 9C1C 36/9C10: 07 09 0B 0D 0F FF 36/9C16: 05 02 00 02 FF FC 36/9C1C: 32 02 00 02 FE 02 01 FA 36/9C24: 9C2A 9C38 9C3E 36/9C2A: 03 03 05 05 07 07 09 09 0B 0B 0D 0D 0F FF 36/9C38: 05 02 00 02 FF FC 36/9C3E: 1E 00 36/9C40: 9C46 9C48 9C48 36/9C46: 0F FF 36/9C48: 64 00 36/9C4A: 9C46 9C50 9C50 36/9C50: 64 01 FA 01 00 FC 36/9C56: 9C5C 9C64 9C70 36/9C5C: 0F 0F 0E 0E 0D 0D 0C FF 36/9C64: 00 01 00 02 FF 02 FE 02 FF 01 00 F6 36/9C70: 32 00 36/9C72: 9C78 9C80 9C80 36/9C78: 0F 0D 0B 09 07 05 04 FF 36/9C80: 00 00 36/9C82: 9C88 9C8F 9C8F 36/9C88: 0F 0C 09 06 03 00 36/9C8E: FF 00 00 36/9C91: 9C97 9C99 9C99 36/9C97: 0F FF 36/9C99: 21 00 36/9C9B: 9CA1 9CA3 9CA3 36/9CA1: 0F FF 36/9CA3: 00 00 ... 36/9E23: 9E29 9E2F 9E2F 36/9E29: 03 06 09 0C 0F FF 36/9E2F: 00 00 36/9E31: 9E37 9E3E 9E3E 36/9E37: 03 06 09 0C 0F 00 FF 36/9E3E: 00 00 36/9E40: 9E46 9E4F 9E4F 36/9E46: 0F 0F 03 03 06 09 0C 0F FF 36/9E4F: 21 00 36/9E51: 9E57 9E5D 9E6B 36/9E57: 03 06 09 0C 0F FF 36/9E5D: 00 01 FE 01 FC 01 FA 01 FC 01 FE 01 00 F4 36/9E6B: 64 01 FF FE 36/9E6F: 9E75 9E77 9E77 36/9E75: 0F FF 36/9E77: 00 01 F1 01 00 FC 36/9E7D: 9E83 9EA9 9EA9 36/9E83: 07 07 09 0B 0D 0F 0F 0F 0F 0A 05 0A 0F 0A 05 00 36/9E93: 05 0A 0F 0A 05 00 00 05 0A 0F 0A 05 00 00 00 05 36/9EA3: 0A 0F 0A 05 00 FF 36/9EA9: 00 00 ; pointers to pitch envelope data 36/9EAB: 9ECB 9ED0 9ED7 9EDE 9EE3 9EE6 9EED 9EF4 36/9EBB: 9EFB 9EFE 9F05 9F24 9F2F 9F7A 9F8D 9FA2 ; pitch envelope data (2 bytes per frequency mod value + terminator) ; even: frame count for frequency mod value ; odd: frequency mod value ; if last byte is zero, pitch envelope terminates ; if msb of last byte is set, add to pointer to jump backwards in the data ; *|____----|____----|... 36/9ECB: 04 FF ; -1 for 4 frames 36/9ECD: 04 01 ; 0 for 4 frames 36/9ECF: FC ; repeat ; *-----...-----|______------|______------|... 36/9ED0: 32 00 ; 0 for 50 frames 36/9ED2: 06 FF ; -1 for 6 frames 36/9ED4: 06 01 ; 0 for 6 frames 36/9ED6: FC ; repeat back to 36/9ED2 36/9ED7: 32 FF 36/9ED9: 06 01 36/9EDB: 06 FF 36/9EDD: FC 36/9EDE: 06 FF 36/9EE0: 06 01 36/9EE2: FC 36/9EE3: 01 FF 36/9EE5: 00 36/9EE6: 10 00 36/9EE8: 06 FF 36/9EEA: 06 01 36/9EEC: FC 36/9EED: 06 00 36/9EEF: 06 FF 36/9EF1: 06 01 36/9EF3: FC 36/9EF4: 18 00 36/9EF6: 06 FF 36/9EF8: 06 01 36/9EFA: FC 36/9EFB: 04 FF 36/9EFD: FE 36/9EFE: 18 FF 36/9F00: 06 FF 36/9F02: 06 01 36/9F04: FC ; _ _ ; | _ _ | _ _ ; | _ _ | _ _ ; | _ _ | _ _ ; *_| _ _| _ _ ; |_ _ |_ _ ; | _ _ | _ _ ; | _ | _ 36/9F05: 01 FF 36/9F07: 01 FE 36/9F09: 01 FE 36/9F0B: 01 FE 36/9F0D: 01 02 36/9F0F: 01 02 36/9F11: 01 02 36/9F13: 01 02 36/9F15: 01 02 36/9F17: 01 02 36/9F19: 01 02 36/9F1B: 01 FE 36/9F1D: 01 FE 36/9F1F: 01 FE 36/9F21: 01 FE 36/9F23: E4 ; | _ | _ ; *-|_- -|_- - ; | | 36/9F24: 01 00 36/9F26: 01 FF 36/9F28: 01 01 36/9F2A: 01 01 36/9F2C: 01 FF 36/9F2E: F8 ; ; _ _ ; _ _ ; _ _ ; _ _ ; * _ _ ; _ _ ; _ _ ; _ _-_ _-_ _-_ _ ; _- -_- -_- -_ 36/9F2F: 01 07 36/9F31: 01 FE 36/9F33: 01 FE 36/9F35: 01 FE 36/9F37: 01 FE 36/9F39: 01 FE 36/9F3B: 01 FE 36/9F3D: 01 FE 36/9F3F: 01 FE 36/9F41: 01 01 36/9F43: 01 01 36/9F45: 01 01 36/9F47: 01 FF 36/9F49: 01 FF 36/9F4B: 01 FF 36/9F4D: 01 01 36/9F4F: 01 01 36/9F51: 01 01 36/9F53: 01 FF 36/9F55: 01 FF 36/9F57: 01 FF 36/9F59: 01 01 36/9F5B: 01 01 36/9F5D: 01 01 36/9F5F: 01 FF 36/9F61: 01 FF 36/9F63: 01 FF 36/9F65: 01 02 36/9F67: 01 02 36/9F69: 01 02 36/9F6B: 01 02 36/9F6D: 01 02 36/9F6F: 01 02 36/9F71: 01 02 36/9F73: 01 FE 36/9F75: 01 FE 36/9F77: 01 FE 36/9F79: 00 36/9F7A: 01 01 36/9F7C: 01 02 36/9F7E: 01 02 36/9F80: 01 02 36/9F82: 02 02 36/9F84: 01 FE 36/9F86: 01 FE 36/9F88: 01 FE 36/9F8A: 01 FF 36/9F8C: EE ; _ ; | | ; - | | ; _ | | ; * | | ; - | | ; _ | __ | ; __|-- --__| 36/9F8D: 01 07 36/9F8F: 01 FD 36/9F91: 01 FD 36/9F93: 01 FD 36/9F95: 01 FD 36/9F97: 02 FE 36/9F99: 02 01 36/9F9B: 02 01 36/9F9D: 02 FF 36/9F9F: 02 FF 36/9FA1: F8 ; - ; __ - ; _ - ; - ; - - - - - ; * - _ - - - - - - - ; - - - - - - - ; - - - - ; _ ; ; 36/9FA2: 01 F9 36/9FA4: 01 07 36/9FA6: 02 07 36/9FA8: 01 FE 36/9FAA: 01 FD 36/9FAC: 01 FD 36/9FAE: 01 FD 36/9FB0: 01 FD 36/9FB2: 01 02 36/9FB4: 01 02 36/9FB6: 01 02 36/9FB8: 01 FE 36/9FBA: 01 FE 36/9FBC: 01 FE 36/9FBE: 01 02 36/9FC0: 01 02 36/9FC2: 01 02 36/9FC4: 01 FE 36/9FC6: 01 FE 36/9FC8: 01 FE 36/9FCA: 01 02 36/9FCC: 01 02 36/9FCE: 01 02 36/9FD0: 01 FE 36/9FD2: 01 FE 36/9FD4: 01 FE 36/9FD6: 01 02 36/9FD8: 01 02 36/9FDA: 01 02 36/9FDC: 01 02 36/9FDE: 01 02 36/9FE0: 01 02 36/9FE2: 01 02 36/9FE4: 00 36/9FE5: 00 00 00 00 00 00 00 00 00 00 00 36/9FF0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ; -------------------------------------------------------------------------- 3A/8500: 4C A3 88 JMP $88A3 ; show minimap 3A/8503: 4C 5E 91 JMP $915E ; init map 3A/8506: 4C 43 8F JMP $8F43 ; init world map 3A/8509: 4C 91 90 JMP $9091 ; load map palette 3A/850C: 4C 76 8E JMP $8E76 ; init sram 3A/850F: 4C 42 94 JMP $9442 ; update underwater bubbles 3A/8512: 4C 41 94 JMP $9441 ; no effect 3A/8515: 4C 8F 85 JMP $858F ; update water animation 3A/8518: 4C 6E 86 JMP $866E ; init water animation graphics buffer 3A/851B: 4C 0F 98 JMP $980F ; show developer message 3A/851E: 4C B8 9A JMP $9AB8 ; airship/boulder explosion 3A/8521: 4C 48 9B JMP $9B48 ; airship explosion 3A/8524: 4C 9C 99 JMP $999C ; update explosion animation 3A/8527: 4C 7B 9A JMP $9A7B ; airship shot down in saronia 3A/852A: 4C A4 9D JMP $9DA4 ; calculate projectile sprite position 3A/852D: 4C 26 87 JMP $8726 ; prophecy 3A/8530: 4C 50 90 JMP $9050 ; load map character palette ; [ get default battle bg ] ; this probably got moved here to make more room in bank 3F 3A/8533: A9 39 LDA #$39 3A/8535: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/8538: A6 48 LDX $48 ; map id 3A/853A: A5 78 LDA $78 ; world id 3A/853C: F0 08 BEQ $8546 3A/853E: BD 00 BD LDA $BD00,X ; 39/BD00 (world 1 battle bg and flags) 3A/8541: 85 53 STA $53 3A/8543: 85 6B STA $6B 3A/8545: 60 RTS 3A/8546: BD 00 BC LDA $BC00,X ; 39/BC00 (world 0 battle bg and flags) 3A/8549: 85 53 STA $53 3A/854B: 85 6B STA $6B 3A/854D: 60 RTS ; -------------------------------------------------------------------------- ; [ update water animation ] ; subroutine starts at 3A/858F 3A/854E: A5 F0 LDA $F0 3A/8550: 29 03 AND #$03 3A/8552: D0 3A BNE $858E 3A/8554: A5 6D LDA $6D 3A/8556: 18 CLC 3A/8557: 69 03 ADC #$03 3A/8559: 29 0F AND #$0F 3A/855B: D0 02 BNE $855F 3A/855D: A9 10 LDA #$10 3A/855F: 85 6D STA $6D 3A/8561: 29 0F AND #$0F 3A/8563: 0A ASL 3A/8564: AA TAX 3A/8565: A0 08 LDY #$08 3A/8567: C9 10 CMP #$10 3A/8569: 90 01 BCC $856C 3A/856B: C8 INY 3A/856C: 2C 02 20 BIT $2002 ; latch ppu 3A/856F: 8C 06 20 STY $2006 3A/8572: BD 4E 86 LDA $864E,X 3A/8575: 8D 06 20 STA $2006 ; ppu address 3A/8578: BD 00 7F LDA $7F00,X 3A/857B: 8D 07 20 STA $2007 3A/857E: E8 INX 3A/857F: 8C 06 20 STY $2006 3A/8582: BD 4E 86 LDA $864E,X 3A/8585: 8D 06 20 STA $2006 3A/8588: BD 00 7F LDA $7F00,X 3A/858B: 8D 07 20 STA $2007 3A/858E: 60 RTS ; start of subroutine 3A/858F: A5 2D LDA $2D 3A/8591: 4A LSR 3A/8592: B0 06 BCS $859A ; branch if not a world map 3A/8594: A5 78 LDA $78 ; world id 3A/8596: C9 04 CMP #$04 3A/8598: B0 B4 BCS $854E 3A/859A: A5 F0 LDA $F0 3A/859C: 4A LSR 3A/859D: B0 40 BCS $85DF 3A/859F: A5 6D LDA $6D 3A/85A1: 10 3C BPL $85DF 3A/85A3: 18 CLC 3A/85A4: 69 03 ADC #$03 3A/85A6: 29 8F AND #$8F 3A/85A8: 85 6D STA $6D 3A/85AA: 29 0F AND #$0F 3A/85AC: D0 04 BNE $85B2 3A/85AE: A9 90 LDA #$90 3A/85B0: 85 6D STA $6D 3A/85B2: A5 6D LDA $6D 3A/85B4: 29 0F AND #$0F 3A/85B6: 0A ASL 3A/85B7: AA TAX 3A/85B8: 2C 02 20 BIT $2002 ; latch ppu 3A/85BB: A9 02 LDA #$02 3A/85BD: 8D 06 20 STA $2006 ; ppu address 3A/85C0: BD 1E 86 LDA $861E,X 3A/85C3: 8D 06 20 STA $2006 3A/85C6: BD 00 7F LDA $7F00,X 3A/85C9: 8D 07 20 STA $2007 3A/85CC: E8 INX 3A/85CD: A9 02 LDA #$02 3A/85CF: 8D 06 20 STA $2006 3A/85D2: BD 1E 86 LDA $861E,X 3A/85D5: 8D 06 20 STA $2006 3A/85D8: BD 00 7F LDA $7F00,X 3A/85DB: 8D 07 20 STA $2007 3A/85DE: 60 RTS 3A/85DF: A5 6E LDA $6E 3A/85E1: 10 3A BPL $861D 3A/85E3: 18 CLC 3A/85E4: 69 02 ADC #$02 3A/85E6: 29 8F AND #$8F 3A/85E8: 85 6E STA $6E 3A/85EA: 29 0F AND #$0F 3A/85EC: D0 04 BNE $85F2 3A/85EE: A9 90 LDA #$90 3A/85F0: 85 6E STA $6E 3A/85F2: A5 6E LDA $6E 3A/85F4: 29 0F AND #$0F 3A/85F6: AA TAX 3A/85F7: 2C 02 20 BIT $2002 3A/85FA: A9 02 LDA #$02 3A/85FC: 8D 06 20 STA $2006 3A/85FF: BD 3E 86 LDA $863E,X 3A/8602: 8D 06 20 STA $2006 3A/8605: BD 20 7F LDA $7F20,X 3A/8608: 8D 07 20 STA $2007 3A/860B: E8 INX 3A/860C: A9 02 LDA #$02 3A/860E: 8D 06 20 STA $2006 3A/8611: BD 3E 86 LDA $863E,X 3A/8614: 8D 06 20 STA $2006 3A/8617: BD 20 7F LDA $7F20,X 3A/861A: 8D 07 20 STA $2007 3A/861D: 60 RTS ; ppu addresses for water animation (horizontal) 3A/861E: 20 30 21 31 22 32 23 33 24 34 25 35 26 36 27 37 3A/862E: 40 50 41 51 42 52 43 53 44 54 45 55 46 56 47 57 ; ppu addresses for water animation (vertical) 3A/863E: 60 70 61 71 62 72 63 73 64 74 65 75 66 76 67 77 3A/864E: 08 18 09 19 0A 1A 0B 1B 0C 1C 0D 1D 0E 1E 0F 1F 3A/865E: 08 18 09 19 0A 1A 0B 1B 0C 1C 0D 1D 0E 1E 0F 1F ; [ init water animation graphics buffer ] 3A/866E: B0 06 BCS $8676 3A/8670: A5 78 LDA $78 3A/8672: C9 04 CMP #$04 3A/8674: B0 4B BCS $86C1 ; branch if underwater ; not underwater 3A/8676: 2C 02 20 BIT $2002 ; latch ppu 3A/8679: A9 02 LDA #$02 3A/867B: 8D 06 20 STA $2006 ; ppu $0220 (world map ocean tiles) 3A/867E: A9 20 LDA #$20 3A/8680: 8D 06 20 STA $2006 3A/8683: AD 07 20 LDA $2007 ; skip one byte to prime ppu buffer 3A/8686: A2 00 LDX #$00 3A/8688: AD 07 20 LDA $2007 3A/868B: 9D 80 73 STA $7380,X ; copy 16 tiles from ppu to buffer 3A/868E: E8 INX 3A/868F: 10 F7 BPL $8688 3A/8691: A2 00 LDX #$00 3A/8693: A0 00 LDY #$00 3A/8695: BD 80 73 LDA $7380,X ; interlace and copy to water animation buffer 3A/8698: 99 00 7F STA $7F00,Y 3A/869B: BD 90 73 LDA $7390,X 3A/869E: 99 01 7F STA $7F01,Y 3A/86A1: BD A0 73 LDA $73A0,X 3A/86A4: 99 10 7F STA $7F10,Y 3A/86A7: BD B0 73 LDA $73B0,X 3A/86AA: 99 11 7F STA $7F11,Y 3A/86AD: BD C0 73 LDA $73C0,X 3A/86B0: 99 20 7F STA $7F20,Y 3A/86B3: BD D0 73 LDA $73D0,X 3A/86B6: 99 21 7F STA $7F21,Y 3A/86B9: E8 INX 3A/86BA: C8 INY 3A/86BB: C8 INY 3A/86BC: E0 08 CPX #$08 3A/86BE: 90 D5 BCC $8695 3A/86C0: 60 RTS ; underwater 3A/86C1: 2C 02 20 BIT $2002 ; latch ppu 3A/86C4: A9 08 LDA #$08 3A/86C6: 8D 06 20 STA $2006 ; ppu $0800 3A/86C9: A9 00 LDA #$00 3A/86CB: 8D 06 20 STA $2006 3A/86CE: AD 07 20 LDA $2007 3A/86D1: A2 00 LDX #$00 3A/86D3: AD 07 20 LDA $2007 3A/86D6: 9D 80 73 STA $7380,X ; copy 2 tiles from ppu to buffer 3A/86D9: E8 INX 3A/86DA: E0 20 CPX #$20 3A/86DC: 90 F5 BCC $86D3 3A/86DE: A9 09 LDA #$09 ; ppu $0900 3A/86E0: 8D 06 20 STA $2006 3A/86E3: A9 00 LDA #$00 3A/86E5: 8D 06 20 STA $2006 3A/86E8: AD 07 20 LDA $2007 3A/86EB: AD 07 20 LDA $2007 3A/86EE: 9D 80 73 STA $7380,X ; copy 4 tiles from ppu to buffer 3A/86F1: E8 INX 3A/86F2: E0 40 CPX #$40 3A/86F4: 90 F5 BCC $86EB 3A/86F6: A2 00 LDX #$00 3A/86F8: A0 00 LDY #$00 3A/86FA: BD 88 73 LDA $7388,X ; interlace and copy to water animation buffer 3A/86FD: 99 00 7F STA $7F00,Y 3A/8700: BD 98 73 LDA $7398,X 3A/8703: 99 01 7F STA $7F01,Y 3A/8706: BD A8 73 LDA $73A8,X 3A/8709: 99 10 7F STA $7F10,Y 3A/870C: BD B8 73 LDA $73B8,X 3A/870F: 99 11 7F STA $7F11,Y 3A/8712: BD C8 73 LDA $73C8,X 3A/8715: 99 20 7F STA $7F20,Y 3A/8718: BD D8 73 LDA $73D8,X 3A/871B: 99 21 7F STA $7F21,Y 3A/871E: E8 INX 3A/871F: C8 INY 3A/8720: C8 INY 3A/8721: E0 08 CPX #$08 3A/8723: 90 D5 BCC $86FA 3A/8725: 60 RTS ; -------------------------------------------------------------------------- ; [ prophecy ] 3A/8726: A9 00 LDA #$00 3A/8728: 85 08 STA $08 ; start of page loop 3A/872A: 20 00 FF JSR $FF00 ; wait for vblank 3A/872D: A9 00 LDA #$00 3A/872F: 8D 01 20 STA $2001 3A/8732: A2 1F LDX #$1F 3A/8734: BD 83 88 LDA $8883,X ; prophecy color palette 3A/8737: 9D C0 03 STA $03C0,X 3A/873A: CA DEX 3A/873B: 10 F7 BPL $8734 3A/873D: 20 98 87 JSR $8798 ; init ppu 3A/8740: AD 02 20 LDA $2002 3A/8743: A9 20 LDA #$20 ; ppu $2000 3A/8745: 8D 06 20 STA $2006 3A/8748: A9 00 LDA #$00 3A/874A: 8D 06 20 STA $2006 3A/874D: A2 F0 LDX #$F0 3A/874F: A9 FF LDA #$FF 3A/8751: 8D 07 20 STA $2007 ; reset ppu $2000-$23BF 3A/8754: 8D 07 20 STA $2007 3A/8757: 8D 07 20 STA $2007 3A/875A: 8D 07 20 STA $2007 3A/875D: CA DEX 3A/875E: D0 F1 BNE $8751 3A/8760: A2 40 LDX #$40 3A/8762: A9 55 LDA #$55 ; set attribute table (bg palette 1) 3A/8764: 8D 07 20 STA $2007 3A/8767: CA DEX 3A/8768: D0 FA BNE $8764 3A/876A: 20 00 FF JSR $FF00 ; wait for vblank 3A/876D: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3A/8770: A5 FF LDA $FF 3A/8772: 8D 00 20 STA $2000 3A/8775: A9 00 LDA #$00 3A/8777: 8D 05 20 STA $2005 3A/877A: 8D 05 20 STA $2005 3A/877D: A9 0A LDA #$0A 3A/877F: 8D 01 20 STA $2001 3A/8782: A5 08 LDA $08 3A/8784: 20 24 C0 JSR $C024 ; load prophecy text 3A/8787: 20 D3 87 JSR $87D3 ; show prophecy page 3A/878A: E6 08 INC $08 ; next page 3A/878C: A5 08 LDA $08 3A/878E: C9 02 CMP #$02 3A/8790: 90 98 BCC $872A 3A/8792: A9 00 LDA #$00 3A/8794: 8D 01 20 STA $2001 3A/8797: 60 RTS ; [ init ppu (prophecy) ] 3A/8798: A9 01 LDA #$01 ; song 1 3A/879A: 8D 43 7F STA $7F43 3A/879D: A9 01 LDA #$01 ; play new song 3A/879F: 8D 42 7F STA $7F42 3A/87A2: 20 06 C0 JSR $C006 ; init ppu name table 3A/87A5: A9 88 LDA #$88 3A/87A7: 85 FF STA $FF 3A/87A9: 8D 00 20 STA $2000 3A/87AC: A9 01 LDA #$01 3A/87AE: 85 37 STA $37 3A/87B0: A9 00 LDA #$00 3A/87B2: 85 24 STA $24 3A/87B4: 85 25 STA $25 3A/87B6: A9 00 LDA #$00 3A/87B8: 85 A2 STA $A2 3A/87BA: 85 A3 STA $A3 3A/87BC: 85 A4 STA $A4 3A/87BE: AA TAX 3A/87BF: A9 F8 LDA #$F8 3A/87C1: 9D 00 02 STA $0200,X ; hide all sprites 3A/87C4: E8 INX 3A/87C5: D0 FA BNE $87C1 3A/87C7: 20 00 FF JSR $FF00 ; wait for vblank 3A/87CA: 20 00 FF JSR $FF00 ; wait for vblank 3A/87CD: A9 02 LDA #$02 3A/87CF: 8D 14 40 STA $4014 ; dma oam data to ppu 3A/87D2: 60 RTS ; [ show prophecy page ] 3A/87D3: A9 C0 LDA #$C0 ; ppu $23C0 3A/87D5: 85 62 STA $62 3A/87D7: 20 E6 87 JSR $87E6 ; show prophecy line 3A/87DA: A5 62 LDA $62 3A/87DC: 18 CLC 3A/87DD: 69 08 ADC #$08 3A/87DF: 85 62 STA $62 3A/87E1: C9 F8 CMP #$F8 3A/87E3: 90 F2 BCC $87D7 3A/87E5: 60 RTS ; [ show prophecy line ] 3A/87E6: A9 5A LDA #$5A 3A/87E8: 85 63 STA $63 3A/87EA: 20 01 88 JSR $8801 ; fade in text 3A/87ED: A5 62 LDA $62 3A/87EF: C9 E8 CMP #$E8 3A/87F1: F0 07 BEQ $87FA 3A/87F3: A9 AF LDA #$AF 3A/87F5: 85 63 STA $63 3A/87F7: 20 01 88 JSR $8801 ; fade in text 3A/87FA: A9 FF LDA #$FF 3A/87FC: 85 63 STA $63 3A/87FE: 4C 4C 88 JMP $884C ; get user input ; [ fade in text (prophecy) ] 3A/8801: A9 00 LDA #$00 3A/8803: 85 64 STA $64 3A/8805: A5 64 LDA $64 3A/8807: 8D CB 03 STA $03CB 3A/880A: 20 4C 88 JSR $884C ; get user input 3A/880D: E6 F0 INC $F0 3A/880F: A5 F0 LDA $F0 3A/8811: 29 0F AND #$0F 3A/8813: D0 0C BNE $8821 3A/8815: A5 64 LDA $64 3A/8817: 18 CLC 3A/8818: 69 10 ADC #$10 3A/881A: 85 64 STA $64 3A/881C: C9 40 CMP #$40 3A/881E: 90 E5 BCC $8805 3A/8820: 60 RTS 3A/8821: 4A LSR 3A/8822: 90 E1 BCC $8805 3A/8824: AD CB 03 LDA $03CB 3A/8827: 38 SEC 3A/8828: E9 10 SBC #$10 3A/882A: 10 02 BPL $882E 3A/882C: A9 01 LDA #$01 3A/882E: 8D CB 03 STA $03CB 3A/8831: 4C 0A 88 JMP $880A ; [ copy attributes to ppu (prophecy) ] 3A/8834: AD 02 20 LDA $2002 3A/8837: A9 23 LDA #$23 3A/8839: 8D 06 20 STA $2006 3A/883C: A5 62 LDA $62 ; ppu address $23XX 3A/883E: 8D 06 20 STA $2006 3A/8841: A2 08 LDX #$08 3A/8843: A5 63 LDA $63 ; attribute value 3A/8845: 8D 07 20 STA $2007 3A/8848: CA DEX 3A/8849: D0 FA BNE $8845 3A/884B: 60 RTS ; [ get user input (prophecy) ] 3A/884C: 20 00 FF JSR $FF00 ; wait for vblank 3A/884F: 20 34 88 JSR $8834 ; copy attributes to ppu 3A/8852: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3A/8855: A5 FF LDA $FF 3A/8857: 8D 00 20 STA $2000 3A/885A: A9 00 LDA #$00 3A/885C: 8D 05 20 STA $2005 3A/885F: 8D 05 20 STA $2005 3A/8862: 85 24 STA $24 3A/8864: 85 25 STA $25 3A/8866: A9 3A LDA #$3A 3A/8868: 85 57 STA $57 3A/886A: 20 09 C0 JSR $C009 ; update sound 3A/886D: 20 0C C0 JSR $C00C ; update joypad input 3A/8870: A5 24 LDA $24 3A/8872: 05 25 ORA $25 3A/8874: D0 0A BNE $8880 ; branch if A or B button pressed 3A/8876: A5 20 LDA $20 3A/8878: 29 10 AND #$10 3A/887A: F0 03 BEQ $887F ; branch if start button not pressed 3A/887C: 4C 00 C0 JMP $C000 ; program start 3A/887F: 60 RTS 3A/8880: 68 PLA 3A/8881: 68 PLA 3A/8882: 60 RTS ; prophecy color palette 3A/8883: 0F 0F 0F 0F 3A/8887: 0F 0F 02 02 3A/888B: 0F 0F 02 02 3A/888F: 0F 00 02 10 3A/8890: 02 0F 0F 0F 3A/8897: 0F 0F 0F 0F 3A/889B: 0F 0F 0F 0F 3A/889F: 0F 0F 0F 0F ; -------------------------------------------------------------------------- ; [ show minimap ] 3A/88A3: A9 88 LDA #$88 3A/88A5: 85 FF STA $FF 3A/88A7: A9 3A LDA #$3A 3A/88A9: 85 57 STA $57 3A/88AB: A9 00 LDA #$00 3A/88AD: 8D 01 20 STA $2001 3A/88B0: A9 04 LDA #$04 ; stop music 3A/88B2: 8D 42 7F STA $7F42 3A/88B5: 20 09 C0 JSR $C009 ; update sound 3A/88B8: A9 38 LDA #$38 3A/88BA: 8D 0C 40 STA $400C 3A/88BD: A9 00 LDA #$00 3A/88BF: 8D 0E 40 STA $400E 3A/88C2: 8D 0F 40 STA $400F 3A/88C5: A9 01 LDA #$01 ; play new song 3A/88C7: 8D 42 7F STA $7F42 3A/88CA: 20 11 8B JSR $8B11 3A/88CD: 20 25 8C JSR $8C25 3A/88D0: A9 00 LDA #$00 3A/88D2: 85 39 STA $39 3A/88D4: A5 28 LDA $28 3A/88D6: 38 SEC 3A/88D7: E9 31 SBC #$31 3A/88D9: 85 3B STA $3B 3A/88DB: A5 27 LDA $27 3A/88DD: 38 SEC 3A/88DE: E9 39 SBC #$39 3A/88E0: 85 38 STA $38 3A/88E2: 20 13 89 JSR $8913 3A/88E5: 20 4E 8A JSR $8A4E 3A/88E8: A5 39 LDA $39 3A/88EA: 29 04 AND #$04 3A/88EC: 8D 0E 40 STA $400E 3A/88EF: E6 39 INC $39 3A/88F1: A5 39 LDA $39 3A/88F3: 29 07 AND #$07 3A/88F5: D0 EE BNE $88E5 3A/88F7: 20 A1 89 JSR $89A1 3A/88FA: A5 39 LDA $39 3A/88FC: C9 70 CMP #$70 3A/88FE: 90 E2 BCC $88E2 3A/8900: A9 30 LDA #$30 3A/8902: 8D 0C 40 STA $400C 3A/8905: 20 3F 8C JSR $8C3F ; init ppu registers 3A/8908: 20 47 89 JSR $8947 ; update frame 3A/890B: 20 1D 89 JSR $891D ; update minimap sprite palettes 3A/890E: A5 25 LDA $25 ; wait for B button 3A/8910: F0 F6 BEQ $8908 3A/8912: 60 RTS ; [ clear minimap graphics buffer ] 3A/8913: A9 00 LDA #$00 3A/8915: AA TAX 3A/8916: 9D 00 05 STA $0500,X 3A/8919: E8 INX 3A/891A: D0 FA BNE $8916 3A/891C: 60 RTS ; [ update minimap sprite palettes ] 3A/891D: A2 00 LDX #$00 3A/891F: A5 20 LDA $20 3A/8921: 29 8F AND #$8F 3A/8923: D0 11 BNE $8936 ; branch if A or direction button pressed 3A/8925: BD 02 02 LDA $0202,X 3A/8928: 29 DF AND #$DF 3A/892A: 9D 02 02 STA $0202,X 3A/892D: E8 INX 3A/892E: E8 INX 3A/892F: E8 INX 3A/8930: E8 INX 3A/8931: E0 10 CPX #$10 3A/8933: D0 F0 BNE $8925 3A/8935: 60 RTS 3A/8936: BD 02 02 LDA $0202,X 3A/8939: 09 20 ORA #$20 3A/893B: 9D 02 02 STA $0202,X 3A/893E: E8 INX 3A/893F: E8 INX 3A/8940: E8 INX 3A/8941: E8 INX 3A/8942: E0 10 CPX #$10 3A/8944: D0 F0 BNE $8936 3A/8946: 60 RTS ; [ update frame ] 3A/8947: 20 00 FF JSR $FF00 ; wait for vblank 3A/894A: A9 02 LDA #$02 3A/894C: 8D 14 40 STA $4014 ; dma oam data to ppu 3A/894F: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3A/8952: A9 1E LDA #$1E 3A/8954: 8D 01 20 STA $2001 3A/8957: A9 98 LDA #$98 3A/8959: 8D 00 20 STA $2000 3A/895C: A9 00 LDA #$00 3A/895E: 8D 05 20 STA $2005 3A/8961: 8D 05 20 STA $2005 3A/8964: A2 39 LDX #$39 ; wait ~6500 cycles (~0.3ms) 3A/8966: A0 16 LDY #$16 3A/8968: 88 DEY 3A/8969: D0 FD BNE $8968 3A/896B: CA DEX 3A/896C: D0 F8 BNE $8966 3A/896E: A2 10 LDX #$10 3A/8970: CA DEX 3A/8971: D0 FD BNE $8970 3A/8973: A5 FF LDA $FF 3A/8975: 8D 00 20 STA $2000 3A/8978: A9 00 LDA #$00 3A/897A: 85 24 STA $24 3A/897C: 85 25 STA $25 3A/897E: 20 09 C0 JSR $C009 ; update sound 3A/8981: 20 0C C0 JSR $C00C ; update joypad input 3A/8984: E6 F0 INC $F0 3A/8986: A5 F0 LDA $F0 3A/8988: 29 08 AND #$08 ; color $0F (black) 3A/898A: D0 02 BNE $898E 3A/898C: A9 30 LDA #$30 ; color $37 (light orange) 3A/898E: 49 07 EOR #$07 3A/8990: 8D D1 03 STA $03D1 ; flash sprite palette 0 color 1 3A/8993: A5 F0 LDA $F0 3A/8995: 29 30 AND #$30 3A/8997: C9 30 CMP #$30 ; color $30 (white) 3A/8999: D0 02 BNE $899D 3A/899B: A9 0F LDA #$0F ; color $0F (black) 3A/899D: 8D D2 03 STA $03D2 ; flash sprite palette 0 color 2 3A/89A0: 60 RTS ; [ ] ; minimap 3A/89A1: A5 39 LDA $39 3A/89A3: 4A LSR 3A/89A4: 4A LSR 3A/89A5: 4A LSR 3A/89A6: 18 CLC 3A/89A7: 69 01 ADC #$01 3A/89A9: 85 66 STA $66 3A/89AB: 20 00 FF JSR $FF00 ; wait for vblank 3A/89AE: 2C 02 20 BIT $2002 3A/89B1: A5 66 LDA $66 3A/89B3: 8D 06 20 STA $2006 3A/89B6: A9 00 LDA #$00 3A/89B8: 8D 06 20 STA $2006 3A/89BB: A2 00 LDX #$00 3A/89BD: 20 D2 89 JSR $89D2 3A/89C0: 20 00 FF JSR $FF00 ; wait for vblank 3A/89C3: 2C 02 20 BIT $2002 3A/89C6: A5 66 LDA $66 3A/89C8: 8D 06 20 STA $2006 3A/89CB: A9 80 LDA #$80 3A/89CD: 8D 06 20 STA $2006 3A/89D0: A2 80 LDX #$80 3A/89D2: BD 00 05 LDA $0500,X 3A/89D5: 8D 07 20 STA $2007 3A/89D8: BD 01 05 LDA $0501,X 3A/89DB: 8D 07 20 STA $2007 3A/89DE: BD 02 05 LDA $0502,X 3A/89E1: 8D 07 20 STA $2007 3A/89E4: BD 03 05 LDA $0503,X 3A/89E7: 8D 07 20 STA $2007 3A/89EA: BD 04 05 LDA $0504,X 3A/89ED: 8D 07 20 STA $2007 3A/89F0: BD 05 05 LDA $0505,X 3A/89F3: 8D 07 20 STA $2007 3A/89F6: BD 06 05 LDA $0506,X 3A/89F9: 8D 07 20 STA $2007 3A/89FC: BD 07 05 LDA $0507,X 3A/89FF: 8D 07 20 STA $2007 3A/8A02: BD 08 05 LDA $0508,X 3A/8A05: 8D 07 20 STA $2007 3A/8A08: BD 09 05 LDA $0509,X 3A/8A0B: 8D 07 20 STA $2007 3A/8A0E: BD 0A 05 LDA $050A,X 3A/8A11: 8D 07 20 STA $2007 3A/8A14: BD 0B 05 LDA $050B,X 3A/8A17: 8D 07 20 STA $2007 3A/8A1A: BD 0C 05 LDA $050C,X 3A/8A1D: 8D 07 20 STA $2007 3A/8A20: BD 0D 05 LDA $050D,X 3A/8A23: 8D 07 20 STA $2007 3A/8A26: BD 0E 05 LDA $050E,X 3A/8A29: 8D 07 20 STA $2007 3A/8A2C: BD 0F 05 LDA $050F,X 3A/8A2F: 8D 07 20 STA $2007 3A/8A32: 8A TXA 3A/8A33: 18 CLC 3A/8A34: 69 10 ADC #$10 3A/8A36: F0 08 BEQ $8A40 3A/8A38: C9 80 CMP #$80 3A/8A3A: F0 04 BEQ $8A40 3A/8A3C: AA TAX 3A/8A3D: 4C D2 89 JMP $89D2 3A/8A40: A5 FF LDA $FF 3A/8A42: 8D 00 20 STA $2000 3A/8A45: A9 00 LDA #$00 3A/8A47: 8D 05 20 STA $2005 3A/8A4A: 8D 05 20 STA $2005 3A/8A4D: 60 RTS ; [ ] ; minimap 3A/8A4E: A5 39 LDA $39 3A/8A50: 18 CLC 3A/8A51: 65 3B ADC $3B 3A/8A53: 85 2C STA $2C ; row 3A/8A55: 20 18 C0 JSR $C018 ; decompress world tilemap (minimap) 3A/8A58: A5 38 LDA $38 3A/8A5A: 85 3A STA $3A 3A/8A5C: E6 3A INC $3A 3A/8A5E: A5 39 LDA $39 3A/8A60: 18 CLC 3A/8A61: 69 4B ADC #$4B ; top left corner is at (60,75) 3A/8A63: 85 41 STA $41 3A/8A65: A9 3C LDA #$3C 3A/8A67: 85 40 STA $40 3A/8A69: A5 39 LDA $39 3A/8A6B: 29 07 AND #$07 3A/8A6D: 85 66 STA $66 3A/8A6F: A0 08 LDY #$08 3A/8A71: A5 39 LDA $39 3A/8A73: 4A LSR 3A/8A74: 90 22 BCC $8A98 3A/8A76: A6 3A LDX $3A 3A/8A78: BD 00 06 LDA $0600,X ; tile index from decompression buffer 3A/8A7B: AA TAX 3A/8A7C: BD 00 7E LDA $7E00,X ; bottom left tile determines pixel color 3A/8A7F: A6 66 LDX $66 3A/8A81: 4A LSR 3A/8A82: 3E 00 05 ROL $0500,X ; rotate into tile graphics 3A/8A85: 4A LSR 3A/8A86: 3E 08 05 ROL $0508,X 3A/8A89: 4A LSR 3A/8A8A: 4A LSR 3A/8A8B: 4A LSR 3A/8A8C: 90 03 BCC $8A91 3A/8A8E: 20 D2 8A JSR $8AD2 ; draw minimap town sprite 3A/8A91: E6 40 INC $40 3A/8A93: E6 3A INC $3A 3A/8A95: 88 DEY 3A/8A96: F0 2E BEQ $8AC6 3A/8A98: A6 3A LDX $3A 3A/8A9A: BD 00 06 LDA $0600,X 3A/8A9D: AA TAX 3A/8A9E: BD 00 7E LDA $7E00,X 3A/8AA1: A6 66 LDX $66 3A/8AA3: 4A LSR 3A/8AA4: 4A LSR 3A/8AA5: 4A LSR 3A/8AA6: 3E 00 05 ROL $0500,X 3A/8AA9: 4A LSR 3A/8AAA: 3E 08 05 ROL $0508,X 3A/8AAD: 4A LSR 3A/8AAE: 90 03 BCC $8AB3 3A/8AB0: 20 D2 8A JSR $8AD2 ; draw minimap town sprite 3A/8AB3: E6 40 INC $40 3A/8AB5: E6 3A INC $3A 3A/8AB7: 88 DEY 3A/8AB8: D0 BC BNE $8A76 3A/8ABA: A0 08 LDY #$08 3A/8ABC: A5 66 LDA $66 3A/8ABE: 18 CLC 3A/8ABF: 69 10 ADC #$10 3A/8AC1: 85 66 STA $66 3A/8AC3: 90 B1 BCC $8A76 3A/8AC5: 60 RTS 3A/8AC6: A0 08 LDY #$08 3A/8AC8: A5 66 LDA $66 3A/8ACA: 18 CLC 3A/8ACB: 69 10 ADC #$10 3A/8ACD: 85 66 STA $66 3A/8ACF: 90 C7 BCC $8A98 3A/8AD1: 60 RTS ; [ draw minimap town sprite ] 3A/8AD2: A5 26 LDA $26 3A/8AD4: 18 CLC 3A/8AD5: 69 04 ADC #$04 3A/8AD7: 85 26 STA $26 3A/8AD9: B0 16 BCS $8AF1 3A/8ADB: AA TAX 3A/8ADC: A5 41 LDA $41 3A/8ADE: 9D 00 02 STA $0200,X 3A/8AE1: A9 01 LDA #$01 3A/8AE3: 9D 01 02 STA $0201,X 3A/8AE6: A9 00 LDA #$00 3A/8AE8: 9D 02 02 STA $0202,X 3A/8AEB: A5 40 LDA $40 3A/8AED: 9D 03 02 STA $0203,X 3A/8AF0: 60 RTS 3A/8AF1: A9 FC LDA #$FC 3A/8AF3: 85 26 STA $26 3A/8AF5: 60 RTS ; [ ] ; minimap 3A/8AF6: 2C 02 20 BIT $2002 3A/8AF9: 8D 06 20 STA $2006 3A/8AFC: A9 00 LDA #$00 3A/8AFE: 8D 06 20 STA $2006 3A/8B01: A0 00 LDY #$00 3A/8B03: B1 80 LDA ($80),Y 3A/8B05: 8D 07 20 STA $2007 3A/8B08: C8 INY 3A/8B09: D0 F8 BNE $8B03 3A/8B0B: E6 81 INC $81 3A/8B0D: CA DEX 3A/8B0E: D0 F3 BNE $8B03 3A/8B10: 60 RTS ; [ ] ; minimap 3A/8B11: 2C 02 20 BIT $2002 ; latch ppu 3A/8B14: A9 02 LDA #$02 3A/8B16: 8D 06 20 STA $2006 ; ppu $0200 3A/8B19: A9 00 LDA #$00 3A/8B1B: 8D 06 20 STA $2006 3A/8B1E: A2 0E LDX #$0E 3A/8B20: A8 TAY 3A/8B21: 8D 07 20 STA $2007 3A/8B24: C8 INY 3A/8B25: D0 FA BNE $8B21 3A/8B27: CA DEX 3A/8B28: D0 F7 BNE $8B21 3A/8B2A: A9 00 LDA #$00 3A/8B2C: 85 80 STA $80 3A/8B2E: A9 82 LDA #$82 3A/8B30: 85 81 STA $81 3A/8B32: A9 00 LDA #$00 3A/8B34: A2 02 LDX #$02 3A/8B36: 20 F6 8A JSR $8AF6 3A/8B39: A9 81 LDA #$81 ; 3A/8180 (minimap graphics) 3A/8B3B: 85 81 STA $81 3A/8B3D: A9 80 LDA #$80 3A/8B3F: 85 80 STA $80 3A/8B41: A2 05 LDX #$05 3A/8B43: A9 10 LDA #$10 3A/8B45: 20 F6 8A JSR $8AF6 3A/8B48: A2 00 LDX #$00 3A/8B4A: 2C 02 20 BIT $2002 3A/8B4D: A9 20 LDA #$20 ; ppu $2000 3A/8B4F: 8D 06 20 STA $2006 3A/8B52: A9 00 LDA #$00 3A/8B54: 8D 06 20 STA $2006 3A/8B57: A2 00 LDX #$00 3A/8B59: A0 03 LDY #$03 3A/8B5B: A9 01 LDA #$01 3A/8B5D: 8D 07 20 STA $2007 ; set $2000-$22FF to 1 3A/8B60: E8 INX 3A/8B61: D0 FA BNE $8B5D 3A/8B63: 88 DEY 3A/8B64: D0 F7 BNE $8B5D 3A/8B66: A2 C0 LDX #$C0 3A/8B68: 8D 07 20 STA $2007 ; set $2300-$23BF to 1 3A/8B6B: CA DEX 3A/8B6C: D0 FA BNE $8B68 3A/8B6E: BD 00 80 LDA $8000,X ; 3A/8000 (minimap attribute table) 3A/8B71: 8D 07 20 STA $2007 3A/8B74: E8 INX 3A/8B75: E0 40 CPX #$40 3A/8B77: 90 F5 BCC $8B6E 3A/8B79: A9 21 LDA #$21 ; ppu $2148 3A/8B7B: 85 81 STA $81 3A/8B7D: A9 48 LDA #$48 3A/8B7F: 85 80 STA $80 3A/8B81: A0 20 LDY #$20 3A/8B83: A5 81 LDA $81 3A/8B85: 8D 06 20 STA $2006 3A/8B88: A5 80 LDA $80 3A/8B8A: 8D 06 20 STA $2006 3A/8B8D: A2 10 LDX #$10 3A/8B8F: 20 A1 8C JSR $8CA1 3A/8B92: A5 80 LDA $80 3A/8B94: 18 CLC 3A/8B95: 69 20 ADC #$20 3A/8B97: 85 80 STA $80 3A/8B99: A5 81 LDA $81 3A/8B9B: 69 00 ADC #$00 3A/8B9D: 85 81 STA $81 3A/8B9F: C0 00 CPY #$00 3A/8BA1: D0 E0 BNE $8B83 3A/8BA3: 20 A9 8C JSR $8CA9 3A/8BA6: A2 0F LDX #$0F 3A/8BA8: BD 50 80 LDA $8050,X ; 3A/8050 3A/8BAB: 9D C0 03 STA $03C0,X 3A/8BAE: A9 0F LDA #$0F 3A/8BB0: 9D D0 03 STA $03D0,X 3A/8BB3: CA DEX 3A/8BB4: 10 F2 BPL $8BA8 3A/8BB6: A5 78 LDA $78 3A/8BB8: 4A LSR 3A/8BB9: F0 12 BEQ $8BCD 3A/8BBB: 0A ASL 3A/8BBC: 29 04 AND #$04 3A/8BBE: AA TAX 3A/8BBF: A0 00 LDY #$00 3A/8BC1: BD 60 80 LDA $8060,X 3A/8BC4: 99 C0 03 STA $03C0,Y 3A/8BC7: C8 INY 3A/8BC8: E8 INX 3A/8BC9: C0 04 CPY #$04 3A/8BCB: 90 F4 BCC $8BC1 3A/8BCD: AD C0 03 LDA $03C0 3A/8BD0: 8D D0 03 STA $03D0 3A/8BD3: AD CB 03 LDA $03CB 3A/8BD6: 8D DB 03 STA $03DB 3A/8BD9: A9 0F LDA #$0F 3A/8BDB: 8D D1 03 STA $03D1 3A/8BDE: 8D D2 03 STA $03D2 3A/8BE1: A2 00 LDX #$00 3A/8BE3: BD 80 80 LDA $8080,X 3A/8BE6: 9D 00 7E STA $7E00,X 3A/8BE9: E8 INX 3A/8BEA: 10 F7 BPL $8BE3 3A/8BEC: A5 78 LDA $78 3A/8BEE: 4A LSR 3A/8BEF: F0 16 BEQ $8C07 3A/8BF1: A2 00 LDX #$00 3A/8BF3: C9 02 CMP #$02 3A/8BF5: D0 02 BNE $8BF9 3A/8BF7: A2 40 LDX #$40 3A/8BF9: A0 00 LDY #$00 3A/8BFB: BD 00 81 LDA $8100,X 3A/8BFE: 99 40 7E STA $7E40,Y 3A/8C01: E8 INX 3A/8C02: C8 INY 3A/8C03: C0 40 CPY #$40 3A/8C05: 90 F4 BCC $8BFB 3A/8C07: 20 00 FF JSR $FF00 ; wait for vblank 3A/8C0A: A9 02 LDA #$02 3A/8C0C: 8D 14 40 STA $4014 ; dma oam data to ppu 3A/8C0F: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3A/8C12: A5 FF LDA $FF 3A/8C14: 8D 00 20 STA $2000 3A/8C17: A9 0A LDA #$0A 3A/8C19: 8D 01 20 STA $2001 3A/8C1C: A9 00 LDA #$00 3A/8C1E: 8D 05 20 STA $2005 3A/8C21: 8D 05 20 STA $2005 3A/8C24: 60 RTS ; [ ] ; minimap 3A/8C25: A2 00 LDX #$00 3A/8C27: A9 0C LDA #$0C 3A/8C29: 85 26 STA $26 3A/8C2B: A9 F8 LDA #$F8 3A/8C2D: 9D 00 02 STA $0200,X 3A/8C30: E8 INX 3A/8C31: D0 FA BNE $8C2D 3A/8C33: A2 0F LDX #$0F 3A/8C35: BD 40 80 LDA $8040,X ; 3A/8040 (minimap sprite data) 3A/8C38: 9D 00 02 STA $0200,X 3A/8C3B: CA DEX 3A/8C3C: 10 F7 BPL $8C35 3A/8C3E: 60 RTS ; [ init ppu registers (minimap) ] 3A/8C3F: 20 00 FF JSR $FF00 ; wait for vblank 3A/8C42: A9 00 LDA #$00 3A/8C44: 8D 01 20 STA $2001 3A/8C47: A9 20 LDA #$20 3A/8C49: 8D 06 20 STA $2006 3A/8C4C: A9 00 LDA #$00 3A/8C4E: 8D 06 20 STA $2006 3A/8C51: A2 C0 LDX #$C0 3A/8C53: A9 09 LDA #$09 3A/8C55: 8D 07 20 STA $2007 3A/8C58: CA DEX 3A/8C59: D0 FA BNE $8C55 3A/8C5B: A9 20 LDA #$20 3A/8C5D: 8D 06 20 STA $2006 3A/8C60: A9 66 LDA #$66 3A/8C62: 8D 06 20 STA $2006 3A/8C65: A0 00 LDY #$00 3A/8C67: 20 94 8C JSR $8C94 3A/8C6A: A9 20 LDA #$20 3A/8C6C: 8D 06 20 STA $2006 3A/8C6F: A9 86 LDA #$86 3A/8C71: 8D 06 20 STA $2006 3A/8C74: 20 94 8C JSR $8C94 3A/8C77: A9 20 LDA #$20 3A/8C79: 8D 06 20 STA $2006 3A/8C7C: A9 B4 LDA #$B4 3A/8C7E: 8D 06 20 STA $2006 3A/8C81: A9 22 LDA #$22 3A/8C83: 8D 07 20 STA $2007 3A/8C86: A9 23 LDA #$23 3A/8C88: 8D 07 20 STA $2007 3A/8C8B: A9 00 LDA #$00 3A/8C8D: 8D 06 20 STA $2006 3A/8C90: 8D 06 20 STA $2006 3A/8C93: 60 RTS ; [ ] ; minimap 3A/8C94: A2 14 LDX #$14 3A/8C96: B9 4E 8E LDA $8E4E,Y 3A/8C99: 8D 07 20 STA $2007 3A/8C9C: C8 INY 3A/8C9D: CA DEX 3A/8C9E: D0 F6 BNE $8C96 3A/8CA0: 60 RTS ; [ ] ; minimap 3A/8CA1: 8C 07 20 STY $2007 3A/8CA4: C8 INY 3A/8CA5: CA DEX 3A/8CA6: D0 F9 BNE $8CA1 3A/8CA8: 60 RTS ; [ ] ; minimap 3A/8CA9: 2C 02 20 BIT $2002 3A/8CAC: A9 20 LDA #$20 3A/8CAE: 8D 06 20 STA $2006 3A/8CB1: A9 C0 LDA #$C0 3A/8CB3: 8D 06 20 STA $2006 3A/8CB6: 20 DC 8D JSR $8DDC 3A/8CB9: A9 23 LDA #$23 3A/8CBB: 8D 06 20 STA $2006 3A/8CBE: A9 40 LDA #$40 3A/8CC0: 8D 06 20 STA $2006 3A/8CC3: 20 DC 8D JSR $8DDC 3A/8CC6: A9 21 LDA #$21 3A/8CC8: 85 81 STA $81 3A/8CCA: A9 02 LDA #$02 3A/8CCC: 85 80 STA $80 3A/8CCE: 20 B0 8D JSR $8DB0 3A/8CD1: A9 21 LDA #$21 3A/8CD3: 85 81 STA $81 3A/8CD5: A9 1C LDA #$1C 3A/8CD7: 85 80 STA $80 3A/8CD9: 20 B0 8D JSR $8DB0 3A/8CDC: A9 21 LDA #$21 3A/8CDE: 8D 06 20 STA $2006 3A/8CE1: A9 04 LDA #$04 3A/8CE3: 8D 06 20 STA $2006 3A/8CE6: A2 18 LDX #$18 3A/8CE8: A9 00 LDA #$00 3A/8CEA: 20 A9 8D JSR $8DA9 3A/8CED: A9 21 LDA #$21 3A/8CEF: 8D 06 20 STA $2006 3A/8CF2: A9 24 LDA #$24 3A/8CF4: 8D 06 20 STA $2006 3A/8CF7: A9 00 LDA #$00 3A/8CF9: A2 04 LDX #$04 3A/8CFB: 20 A9 8D JSR $8DA9 3A/8CFE: A9 13 LDA #$13 3A/8D00: A2 10 LDX #$10 3A/8D02: 20 A9 8D JSR $8DA9 3A/8D05: A9 00 LDA #$00 3A/8D07: A2 04 LDX #$04 3A/8D09: 20 A9 8D JSR $8DA9 3A/8D0C: A9 23 LDA #$23 3A/8D0E: 8D 06 20 STA $2006 3A/8D11: A9 24 LDA #$24 3A/8D13: 8D 06 20 STA $2006 3A/8D16: A2 18 LDX #$18 3A/8D18: A9 00 LDA #$00 3A/8D1A: 20 A9 8D JSR $8DA9 3A/8D1D: A9 23 LDA #$23 3A/8D1F: 8D 06 20 STA $2006 3A/8D22: A9 04 LDA #$04 3A/8D24: 8D 06 20 STA $2006 3A/8D27: A9 00 LDA #$00 3A/8D29: A2 04 LDX #$04 3A/8D2B: 20 A9 8D JSR $8DA9 3A/8D2E: A9 14 LDA #$14 3A/8D30: A2 10 LDX #$10 3A/8D32: 20 A9 8D JSR $8DA9 3A/8D35: A9 00 LDA #$00 3A/8D37: A2 04 LDX #$04 3A/8D39: 20 A9 8D JSR $8DA9 3A/8D3C: A9 21 LDA #$21 3A/8D3E: 85 81 STA $81 3A/8D40: A9 44 LDA #$44 3A/8D42: 85 80 STA $80 3A/8D44: 20 7C 8D JSR $8D7C 3A/8D47: A9 21 LDA #$21 3A/8D49: 85 81 STA $81 3A/8D4B: A9 58 LDA #$58 3A/8D4D: 85 80 STA $80 3A/8D4F: A2 0E LDX #$0E 3A/8D51: A5 81 LDA $81 3A/8D53: 8D 06 20 STA $2006 3A/8D56: A5 80 LDA $80 3A/8D58: 8D 06 20 STA $2006 3A/8D5B: A9 0F LDA #$0F 3A/8D5D: 8D 07 20 STA $2007 3A/8D60: A9 00 LDA #$00 3A/8D62: 8D 07 20 STA $2007 3A/8D65: 8D 07 20 STA $2007 3A/8D68: 8D 07 20 STA $2007 3A/8D6B: A5 80 LDA $80 3A/8D6D: 18 CLC 3A/8D6E: 69 20 ADC #$20 3A/8D70: 85 80 STA $80 3A/8D72: A5 81 LDA $81 3A/8D74: 69 00 ADC #$00 3A/8D76: 85 81 STA $81 3A/8D78: CA DEX 3A/8D79: D0 D6 BNE $8D51 3A/8D7B: 60 RTS ; [ ] ; minimap 3A/8D7C: A2 0E LDX #$0E 3A/8D7E: A5 81 LDA $81 3A/8D80: 8D 06 20 STA $2006 3A/8D83: A5 80 LDA $80 3A/8D85: 8D 06 20 STA $2006 3A/8D88: A9 00 LDA #$00 3A/8D8A: 8D 07 20 STA $2007 3A/8D8D: 8D 07 20 STA $2007 3A/8D90: 8D 07 20 STA $2007 3A/8D93: A9 0E LDA #$0E 3A/8D95: 8D 07 20 STA $2007 3A/8D98: A5 80 LDA $80 3A/8D9A: 18 CLC 3A/8D9B: 69 20 ADC #$20 3A/8D9D: 85 80 STA $80 3A/8D9F: A5 81 LDA $81 3A/8DA1: 69 00 ADC #$00 3A/8DA3: 85 81 STA $81 3A/8DA5: CA DEX 3A/8DA6: D0 D6 BNE $8D7E 3A/8DA8: 60 RTS ; [ ] ; minimap 3A/8DA9: 8D 07 20 STA $2007 3A/8DAC: CA DEX 3A/8DAD: D0 FA BNE $8DA9 3A/8DAF: 60 RTS ; [ ] ; minimap 3A/8DB0: A2 00 LDX #$00 3A/8DB2: A5 81 LDA $81 3A/8DB4: 8D 06 20 STA $2006 3A/8DB7: A5 80 LDA $80 3A/8DB9: 8D 06 20 STA $2006 3A/8DBC: BD 2A 8E LDA $8E2A,X 3A/8DBF: 8D 07 20 STA $2007 3A/8DC2: BD 2B 8E LDA $8E2B,X 3A/8DC5: 8D 07 20 STA $2007 3A/8DC8: E8 INX 3A/8DC9: E8 INX 3A/8DCA: A5 80 LDA $80 3A/8DCC: 18 CLC 3A/8DCD: 69 20 ADC #$20 3A/8DCF: 85 80 STA $80 3A/8DD1: A5 81 LDA $81 3A/8DD3: 69 00 ADC #$00 3A/8DD5: 85 81 STA $81 3A/8DD7: E0 24 CPX #$24 3A/8DD9: 90 D7 BCC $8DB2 3A/8DDB: 60 RTS ; [ ] ; minimap 3A/8DDC: A2 00 LDX #$00 3A/8DDE: BD EA 8D LDA $8DEA,X 3A/8DE1: 8D 07 20 STA $2007 3A/8DE4: E8 INX 3A/8DE5: E0 40 CPX #$40 3A/8DE7: 90 F5 BCC $8DDE 3A/8DE9: 60 RTS 3A/8DEA: 01 01 0A 0B 02 03 02 03 02 03 02 03 02 03 02 0A 3A/8DFA: 0B 03 02 03 02 03 02 03 02 03 02 03 0A 0B 01 01 3A/8E0A: 01 01 0C 0D 04 05 04 05 04 05 04 05 04 05 04 0C 3A/8E1A: 0D 05 04 05 04 05 04 05 04 05 04 05 0C 0D 01 01 3A/8E2A: 06 07 08 09 06 07 08 09 06 07 08 09 06 07 08 09 3A/8E3A: 0A 0B 0C 0D 06 07 08 09 06 07 08 09 06 07 08 09 3A/8E4A: 06 07 08 09 3A/8E4E: 18 19 1A 09 09 1D 1E 18 19 09 09 21 09 09 09 09 09 25 26 27 3A/8E62: 28 29 2A 2B 2C 2D 09 28 1F 20 2F 30 31 32 33 34 09 35 36 37 ; -------------------------------------------------------------------------- ; [ init sram ] 3A/8E76: A2 00 LDX #$00 3A/8E78: 8A TXA 3A/8E79: 9D 00 60 STA $6000,X ; clear save slot ram 3A/8E7C: 9D 00 61 STA $6100,X 3A/8E7F: 9D 00 62 STA $6200,X 3A/8E82: 9D 00 63 STA $6300,X 3A/8E85: E8 INX 3A/8E86: D0 F1 BNE $8E79 3A/8E88: A9 29 LDA #$29 ; initial world map position (41,47) 3A/8E8A: 8D 09 60 STA $6009 3A/8E8D: A9 2F LDA #$2F 3A/8E8F: 8D 0A 60 STA $600A 3A/8E92: A9 00 LDA #$00 ; airship position 3A/8E94: 8D 01 60 STA $6001 3A/8E97: A9 00 LDA #$00 3A/8E99: 8D 02 60 STA $6002 3A/8E9C: A9 00 LDA #$00 ; invincible position 3A/8E9E: 8D 05 60 STA $6005 3A/8EA1: A9 00 LDA #$00 3A/8EA3: 8D 06 60 STA $6006 3A/8EA6: A2 3F LDX #$3F 3A/8EA8: A9 FF LDA #$FF 3A/8EAA: 9D 40 60 STA $6040,X ; clear treasure switches 3A/8EAD: CA DEX 3A/8EAE: 10 FA BPL $8EAA 3A/8EB0: A9 00 LDA #$00 3A/8EB2: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/8EB5: A2 3F LDX #$3F 3A/8EB7: BD 00 B6 LDA $B600,X ; init npc switches 3A/8EBA: 9D 80 60 STA $6080,X 3A/8EBD: CA DEX 3A/8EBE: 10 F7 BPL $8EB7 3A/8EC0: A9 39 LDA #$39 3A/8EC2: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/8EC5: A2 02 LDX #$02 3A/8EC7: BD 00 A0 LDA $A000,X ; 39/A000 (job base stats) 3A/8ECA: 9D 10 61 STA $6110,X ; base stats 3A/8ECD: 9D 15 61 STA $6115,X ; modified stats 3A/8ED0: E8 INX 3A/8ED1: E0 07 CPX #$07 3A/8ED3: 90 F2 BCC $8EC7 3A/8ED5: AD 1D 61 LDA $611D ; this will be zero 3A/8ED8: 0A ASL 3A/8ED9: 0A ASL 3A/8EDA: 0A ASL 3A/8EDB: AA TAX 3A/8EDC: A0 00 LDY #$00 3A/8EDE: BD 88 BB LDA $BB88,X ; 39/BB88 (character initial mp) 3A/8EE1: 99 30 61 STA $6130,Y 3A/8EE4: 99 31 61 STA $6131,Y 3A/8EE7: C8 INY 3A/8EE8: C8 INY 3A/8EE9: E8 INX 3A/8EEA: C0 10 CPY #$10 3A/8EEC: 90 F0 BCC $8EDE 3A/8EEE: AD D8 BB LDA $BBD8 ; 39/BBD8 (character initial hp) 3A/8EF1: 8D 0E 61 STA $610E 3A/8EF4: 8D 0C 61 STA $610C 3A/8EF7: AD D9 BB LDA $BBD9 3A/8EFA: 8D 0F 61 STA $610F 3A/8EFD: 8D 0D 61 STA $610D 3A/8F00: A2 13 LDX #$13 3A/8F02: BD DA BB LDA $BBDA,X ; 39/BBDA (character initial stats) 3A/8F05: 9D 1C 61 STA $611C,X 3A/8F08: CA DEX 3A/8F09: 10 F7 BPL $8F02 3A/8F0B: A2 0F LDX #$0F 3A/8F0D: BD F0 BB LDA $BBF0,X ; 39/BBF0 (character initial equipment) 3A/8F10: 9D 00 62 STA $6200,X 3A/8F13: CA DEX 3A/8F14: 10 F7 BPL $8F0D 3A/8F16: A2 05 LDX #$05 3A/8F18: A9 FF LDA #$FF 3A/8F1A: 9D 06 61 STA $6106,X ; clear character name 3A/8F1D: CA DEX 3A/8F1E: 10 FA BPL $8F1A 3A/8F20: A2 3F LDX #$3F 3A/8F22: BD 00 61 LDA $6100,X ; copy to the other 3 characters 3A/8F25: 9D 40 61 STA $6140,X 3A/8F28: 9D 80 61 STA $6180,X 3A/8F2B: 9D C0 61 STA $61C0,X 3A/8F2E: BD 00 62 LDA $6200,X 3A/8F31: 9D 40 62 STA $6240,X 3A/8F34: 9D 80 62 STA $6280,X 3A/8F37: 9D C0 62 STA $62C0,X 3A/8F3A: CA DEX 3A/8F3B: 10 E5 BPL $8F22 3A/8F3D: A9 3C LDA #$3C 3A/8F3F: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) 3A/8F42: 60 RTS ; [ init world map ] 3A/8F43: A9 00 LDA #$00 3A/8F45: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/8F48: A2 3F LDX #$3F 3A/8F4A: BD 00 A0 LDA $A000,X ; common tileset (00/8000) 3A/8F4D: 9D 00 05 STA $0500,X 3A/8F50: BD 40 A0 LDA $A040,X 3A/8F53: 9D 80 05 STA $0580,X 3A/8F56: BD 80 A0 LDA $A080,X 3A/8F59: 9D 00 06 STA $0600,X 3A/8F5C: BD C0 A0 LDA $A0C0,X 3A/8F5F: 9D 80 06 STA $0680,X 3A/8F62: BD 00 A4 LDA $A400,X ; common attribute table (00/8400) 3A/8F65: 9D 00 07 STA $0700,X 3A/8F68: CA DEX 3A/8F69: 10 DF BPL $8F4A 3A/8F6B: A5 78 LDA $78 3A/8F6D: 4A LSR 3A/8F6E: 18 CLC 3A/8F6F: 69 A1 ADC #$A1 ; world tileset (00/8100) 3A/8F71: 85 81 STA $81 3A/8F73: A9 00 LDA #$00 3A/8F75: 85 80 STA $80 3A/8F77: A0 00 LDY #$00 3A/8F79: B1 80 LDA ($80),Y 3A/8F7B: 99 40 05 STA $0540,Y 3A/8F7E: C8 INY 3A/8F7F: C0 40 CPY #$40 3A/8F81: 90 F6 BCC $8F79 3A/8F83: B1 80 LDA ($80),Y 3A/8F85: 99 80 05 STA $0580,Y 3A/8F88: C8 INY 3A/8F89: C0 80 CPY #$80 3A/8F8B: 90 F6 BCC $8F83 3A/8F8D: B1 80 LDA ($80),Y 3A/8F8F: 99 C0 05 STA $05C0,Y 3A/8F92: C8 INY 3A/8F93: C0 C0 CPY #$C0 3A/8F95: 90 F6 BCC $8F8D 3A/8F97: B1 80 LDA ($80),Y 3A/8F99: 99 00 06 STA $0600,Y 3A/8F9C: C8 INY 3A/8F9D: D0 F8 BNE $8F97 3A/8F9F: A9 A4 LDA #$A4 3A/8FA1: 85 81 STA $81 3A/8FA3: A5 78 LDA $78 3A/8FA5: 29 06 AND #$06 3A/8FA7: 0A ASL 3A/8FA8: 0A ASL 3A/8FA9: 0A ASL 3A/8FAA: 0A ASL 3A/8FAB: 0A ASL 3A/8FAC: 18 CLC 3A/8FAD: 69 40 ADC #$40 ; world attribute table (00/8440) 3A/8FAF: 85 80 STA $80 3A/8FB1: A0 3F LDY #$3F 3A/8FB3: B1 80 LDA ($80),Y 3A/8FB5: 99 40 07 STA $0740,Y 3A/8FB8: 88 DEY 3A/8FB9: 10 F8 BPL $8FB3 3A/8FBB: A5 78 LDA $78 3A/8FBD: 4A LSR 3A/8FBE: 18 CLC 3A/8FBF: 69 A5 ADC #$A5 ; world tile properties (00/8500) 3A/8FC1: 85 81 STA $81 3A/8FC3: A9 00 LDA #$00 3A/8FC5: 85 80 STA $80 3A/8FC7: A0 00 LDY #$00 3A/8FC9: B1 80 LDA ($80),Y 3A/8FCB: 99 00 04 STA $0400,Y 3A/8FCE: C8 INY 3A/8FCF: D0 F8 BNE $8FC9 3A/8FD1: A5 78 LDA $78 3A/8FD3: C9 03 CMP #$03 3A/8FD5: F0 01 BEQ $8FD8 ; return if not world 3 3A/8FD7: 60 RTS 3A/8FD8: AD 2E 60 LDA $602E 3A/8FDB: 29 02 AND #$02 3A/8FDD: F0 07 BEQ $8FE6 3A/8FDF: A2 40 LDX #$40 ; copy tile 0 to tile 64 (statue 1) 3A/8FE1: A0 00 LDY #$00 3A/8FE3: 20 1F 90 JSR $901F 3A/8FE6: AD 2E 60 LDA $602E 3A/8FE9: 29 04 AND #$04 3A/8FEB: F0 07 BEQ $8FF4 3A/8FED: A2 41 LDX #$41 ; copy tile 0 to tile 65 (statue 2) 3A/8FEF: A0 00 LDY #$00 3A/8FF1: 20 1F 90 JSR $901F 3A/8FF4: AD 2E 60 LDA $602E 3A/8FF7: 29 08 AND #$08 3A/8FF9: F0 07 BEQ $9002 3A/8FFB: A2 42 LDX #$42 ; copy tile 0 to tile 66 (statue 3) 3A/8FFD: A0 00 LDY #$00 3A/8FFF: 20 1F 90 JSR $901F 3A/9002: AD 2E 60 LDA $602E 3A/9005: 29 10 AND #$10 3A/9007: F0 07 BEQ $9010 3A/9009: A2 43 LDX #$43 ; copy tile 0 to tile 67 (statue 4) 3A/900B: A0 00 LDY #$00 3A/900D: 20 1F 90 JSR $901F 3A/9010: AD 2E 60 LDA $602E 3A/9013: 29 20 AND #$20 3A/9015: F0 07 BEQ $901E 3A/9017: A2 4A LDX #$4A ; copy tile 0 to tile 74 (saronia gate) 3A/9019: A0 03 LDY #$03 3A/901B: 20 1F 90 JSR $901F 3A/901E: 60 RTS ; [ copy tile properties from tile Y to tile X ] 3A/901F: B9 00 05 LDA $0500,Y 3A/9022: 9D 00 05 STA $0500,X 3A/9025: B9 80 05 LDA $0580,Y 3A/9028: 9D 80 05 STA $0580,X 3A/902B: B9 00 06 LDA $0600,Y 3A/902E: 9D 00 06 STA $0600,X 3A/9031: B9 80 06 LDA $0680,Y 3A/9034: 9D 80 06 STA $0680,X 3A/9037: B9 00 07 LDA $0700,Y 3A/903A: 9D 00 07 STA $0700,X 3A/903D: 98 TYA 3A/903E: 0A ASL 3A/903F: A8 TAY 3A/9040: 8A TXA 3A/9041: 0A ASL 3A/9042: AA TAX 3A/9043: B9 00 04 LDA $0400,Y 3A/9046: 9D 00 04 STA $0400,X 3A/9049: B9 01 04 LDA $0401,Y 3A/904C: 9D 01 04 STA $0401,X 3A/904F: 60 RTS ; [ load map character palette ] ; palette $00 is character 1 (onion knight) ; palette $01-$15 are for each job ; palette $16 is toad ; palette $17-$19 are characters 2-4 (onion knight) 3A/9050: A9 00 LDA #$00 3A/9052: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/9055: AE 0E 60 LDX $600E ; showing character properties offset 3A/9058: BD 02 61 LDA $6102,X 3A/905B: 29 20 AND #$20 3A/905D: F0 04 BEQ $9063 ; branch if not toad 3A/905F: A9 16 LDA #$16 3A/9061: D0 10 BNE $9073 3A/9063: BD 00 61 LDA $6100,X ; job 3A/9066: D0 0B BNE $9073 ; branch not an onion knight 3A/9068: AD 0E 60 LDA $600E 3A/906B: 0A ASL 3A/906C: 2A ROL 3A/906D: 2A ROL 3A/906E: F0 03 BEQ $9073 3A/9070: 18 CLC 3A/9071: 69 16 ADC #$16 3A/9073: 29 3F AND #$3F 3A/9075: 0A ASL 3A/9076: 0A ASL 3A/9077: AA TAX 3A/9078: BD 90 B6 LDA $B690,X ; map character palette 3A/907B: 8D D2 03 STA $03D2 3A/907E: BD 91 B6 LDA $B691,X 3A/9081: 8D D3 03 STA $03D3 3A/9084: BD 92 B6 LDA $B692,X 3A/9087: 8D D6 03 STA $03D6 3A/908A: BD 93 B6 LDA $B693,X 3A/908D: 8D D7 03 STA $03D7 3A/9090: 60 RTS ; [ load map palette ] ; normal maps and world maps use the same subroutine 3A/9091: A9 00 LDA #$00 3A/9093: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/9096: A5 78 LDA $78 3A/9098: 29 06 AND #$06 3A/909A: 0A ASL 3A/909B: 0A ASL 3A/909C: 0A ASL 3A/909D: A8 TAY 3A/909E: A2 00 LDX #$00 3A/90A0: B9 40 B6 LDA $B640,Y ; 00/9640 (map base palette) 3A/90A3: 9D C0 03 STA $03C0,X ; bg palettes 3A/90A6: C8 INY 3A/90A7: E8 INX 3A/90A8: E0 10 CPX #$10 3A/90AA: 90 F4 BCC $90A0 3A/90AC: A2 00 LDX #$00 3A/90AE: A5 78 LDA $78 3A/90B0: 29 04 AND #$04 3A/90B2: 0A ASL 3A/90B3: 0A ASL 3A/90B4: A8 TAY 3A/90B5: B9 70 B6 LDA $B670,Y ; 00/9670 (map sprite palettes) 3A/90B8: 9D D0 03 STA $03D0,X 3A/90BB: C8 INY 3A/90BC: E8 INX 3A/90BD: E0 10 CPX #$10 3A/90BF: 90 F4 BCC $90B5 3A/90C1: 20 50 90 JSR $9050 ; load map character palette 3A/90C4: A5 7C LDA $7C 3A/90C6: D0 1D BNE $90E5 3A/90C8: AD 0B 60 LDA $600B ; guest npc 3A/90CB: F0 18 BEQ $90E5 3A/90CD: 38 SEC 3A/90CE: E9 01 SBC #$01 3A/90D0: 29 0F AND #$0F 3A/90D2: 0A ASL 3A/90D3: AA TAX 3A/90D4: BD F8 B6 LDA $B6F8,X ; 00/96F8 (guest npc palettes) 3A/90D7: 8D DA 03 STA $03DA 3A/90DA: BD F9 B6 LDA $B6F9,X 3A/90DD: 8D DB 03 STA $03DB 3A/90E0: A9 0F LDA #$0F 3A/90E2: 8D D9 03 STA $03D9 3A/90E5: A5 2D LDA $2D 3A/90E7: 4A LSR 3A/90E8: B0 21 BCS $910B ; branch if not a world map 3A/90EA: AD 11 60 LDA $6011 3A/90ED: 10 17 BPL $9106 ; branch if not surface world emerging 3A/90EF: A5 78 LDA $78 3A/90F1: C9 03 CMP #$03 3A/90F3: D0 11 BNE $9106 ; branch if not world 3 3A/90F5: A2 03 LDX #$03 3A/90F7: BD C8 03 LDA $03C8,X ; all blue when surface world emerges 3A/90FA: 9D C0 03 STA $03C0,X 3A/90FD: 9D C4 03 STA $03C4,X 3A/9100: 9D CC 03 STA $03CC,X 3A/9103: CA DEX 3A/9104: D0 F1 BNE $90F7 3A/9106: A9 3B LDA #$3B 3A/9108: 4C 09 FF JMP $FF09 ; switch prg bank 1 3A/910B: AC 85 07 LDY $0785 ; palette 0 (map properties byte 5) 3A/910E: A2 01 LDX #$01 3A/9110: 20 4B 91 JSR $914B 3A/9113: AC 86 07 LDY $0786 ; palette 1 (map properties byte 6) 3A/9116: A2 05 LDX #$05 3A/9118: 20 4B 91 JSR $914B 3A/911B: AC 87 07 LDY $0787 ; palette 2 (map properties byte 7) 3A/911E: A2 09 LDX #$09 3A/9120: 20 4B 91 JSR $914B 3A/9123: AC 88 07 LDY $0788 ; palette 6 (map properties byte 8) 3A/9126: A2 19 LDX #$19 3A/9128: 20 4B 91 JSR $914B 3A/912B: AC 89 07 LDY $0789 ; palette 7 (map properties byte 9) 3A/912E: A2 1D LDX #$1D 3A/9130: 20 4B 91 JSR $914B 3A/9133: A9 00 LDA #$00 ; gray 3A/9135: 8D CD 03 STA $03CD 3A/9138: A9 02 LDA #$02 ; blue 3A/913A: 8D CE 03 STA $03CE 3A/913D: A9 30 LDA #$30 ; white 3A/913F: 8D CF 03 STA $03CF 3A/9142: A9 0F LDA #$0F ; black 3A/9144: 8D D0 03 STA $03D0 ; palette 3 (menu window) 3A/9147: 8D C0 03 STA $03C0 ; back area color 3A/914A: 60 RTS ; [ load map background palette ] ; loads a 3-color palette 3A/914B: B9 00 B1 LDA $B100,Y ; 00/9100 (general use palettes) 3A/914E: 9D C0 03 STA $03C0,X 3A/9151: B9 00 B2 LDA $B200,Y 3A/9154: 9D C1 03 STA $03C1,X 3A/9157: B9 00 B3 LDA $B300,Y 3A/915A: 9D C2 03 STA $03C2,X 3A/915D: 60 RTS ; [ init map ] 3A/915E: A9 02 LDA #$02 3A/9160: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/9163: A5 48 LDA $48 ; map id 3A/9165: 4A LSR 3A/9166: 4A LSR 3A/9167: 4A LSR 3A/9168: 4A LSR 3A/9169: 09 A0 ORA #$A0 ; maps $0000-$00FF (02/A000) 3A/916B: 85 81 STA $81 3A/916D: A5 48 LDA $48 3A/916F: 0A ASL 3A/9170: 0A ASL 3A/9171: 0A ASL 3A/9172: 0A ASL 3A/9173: 85 80 STA $80 3A/9175: A0 0F LDY #$0F 3A/9177: A5 78 LDA $78 3A/9179: F0 07 BEQ $9182 3A/917B: A5 81 LDA $81 ; maps $0100-$01FF (02/B000) 3A/917D: 18 CLC 3A/917E: 69 10 ADC #$10 3A/9180: 85 81 STA $81 3A/9182: B1 80 LDA ($80),Y ; copy tile properties to buffer 3A/9184: 99 80 07 STA $0780,Y 3A/9187: 88 DEY 3A/9188: 10 F8 BPL $9182 3A/918A: 20 67 92 JSR $9267 ; load map properties 3A/918D: A2 3F LDX #$3F 3A/918F: A9 00 LDA #$00 3A/9191: 9D 40 07 STA $0740,X ; clear trigger count buffer 3A/9194: CA DEX 3A/9195: 10 FA BPL $9191 3A/9197: A9 00 LDA #$00 3A/9199: 85 80 STA $80 3A/919B: A8 TAY 3A/919C: A9 74 LDA #$74 ; tilemap ($7400) 3A/919E: 85 81 STA $81 3A/91A0: A0 00 LDY #$00 3A/91A2: B1 80 LDA ($80),Y 3A/91A4: C9 60 CMP #$60 3A/91A6: 90 13 BCC $91BB ; branch if not a trigger 3A/91A8: C9 64 CMP #$64 3A/91AA: 90 08 BCC $91B4 ; tiles $60-$63 3A/91AC: C9 70 CMP #$70 3A/91AE: 90 0B BCC $91BB 3A/91B0: C9 7D CMP #$7D 3A/91B2: B0 07 BCS $91BB ; tiles $70-$7C ($7C is treasure chest) 3A/91B4: 20 C8 91 JSR $91C8 ; init trigger 3A/91B7: A0 00 LDY #$00 3A/91B9: 91 80 STA ($80),Y ; trigger tile id 3A/91BB: E6 80 INC $80 ; next tile 3A/91BD: D0 E1 BNE $91A0 3A/91BF: E6 81 INC $81 3A/91C1: A5 81 LDA $81 3A/91C3: C9 78 CMP #$78 ; end at $77FF 3A/91C5: 90 D9 BCC $91A0 3A/91C7: 60 RTS ; [ init trigger ] ; return tile index to update bg tilemap 3A/91C8: 38 SEC 3A/91C9: E9 60 SBC #$60 3A/91CB: AA TAX 3A/91CC: BD 40 07 LDA $0740,X ; tile trigger count 3A/91CF: 85 88 STA $88 3A/91D1: FE 40 07 INC $0740,X 3A/91D4: BC 1F 92 LDY $921F,X ; trigger type 3A/91D7: B9 60 07 LDA $0760,Y ; trigger type count (trigger id) 3A/91DA: 85 89 STA $89 3A/91DC: 18 CLC 3A/91DD: 69 01 ADC #$01 3A/91DF: 99 60 07 STA $0760,Y ; increment trigger count 3A/91E2: BD 3F 92 LDA $923F,X 3A/91E5: 18 CLC 3A/91E6: 65 88 ADC $88 3A/91E8: A8 TAY 3A/91E9: E0 1C CPX #$1C 3A/91EB: F0 0A BEQ $91F7 ; trigger 3A/91ED: B9 00 05 LDA $0500,Y ; tile properties 3A/91F0: 05 89 ORA $89 3A/91F2: 99 00 05 STA $0500,Y ; store trigger id 3A/91F5: 98 TYA 3A/91F6: 60 RTS ; treasure chest 3A/91F7: 98 TYA 3A/91F8: 48 PHA 3A/91F9: A6 89 LDX $89 3A/91FB: BD 10 07 LDA $0710,X ; map treasure id 3A/91FE: 48 PHA 3A/91FF: 29 07 AND #$07 3A/9201: AA TAX 3A/9202: 68 PLA 3A/9203: 4A LSR 3A/9204: 4A LSR 3A/9205: 4A LSR 3A/9206: A8 TAY 3A/9207: A5 78 LDA $78 3A/9209: F0 05 BEQ $9210 3A/920B: 98 TYA 3A/920C: 18 CLC 3A/920D: 69 20 ADC #$20 ; add 32 if not on floating continent 3A/920F: A8 TAY 3A/9210: BD 5F 92 LDA $925F,X 3A/9213: 39 40 60 AND $6040,Y ; treasure switches 3A/9216: C9 01 CMP #$01 3A/9218: 68 PLA 3A/9219: A8 TAY 3A/921A: B0 D1 BCS $91ED 3A/921C: A9 7D LDA #$7D ; open treasure chest tile 3A/921E: 60 RTS ; trigger type for tiles $60-7F ; 00: trigger ; 01: entrance ; 02: treasure ($7C is treasure chest) ; 03: ??? ; 04: exit (to previous map) 3A/921F: 00 00 00 00 04 04 04 04 04 04 04 04 04 04 04 04 3A/922F: 01 01 01 01 01 01 01 01 02 02 02 02 02 04 04 04 ; tile id for trigger tiles ; $80-$8F: entrance 1 (door) ; $90-$9F: entrance 2 (locked door) ; $A0-$AF: entrance 3 ; $B0-$BF: entrance 4 ; $C0-$CF: other entrances ; $D0-$DF: treasure chests ; $E0-$EF: other treasures ; $F0-$FF: triggers 3A/923F: F0 F4 F8 FC 00 00 00 00 00 00 00 00 00 00 00 00 3A/924F: 80 90 A0 B0 C0 C4 C8 CC E0 E4 E8 EC D0 00 00 00 ; bit masks 3A/925F: 01 02 04 08 10 20 40 80 ; [ load map properties ] 3A/9267: A9 01 LDA #$01 3A/9269: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/926C: AD 80 07 LDA $0780 ; top 3 bits are tileset 3A/926F: 0A ASL 3A/9270: 2A ROL 3A/9271: 2A ROL 3A/9272: 2A ROL 3A/9273: 29 07 AND #$07 3A/9275: AA TAX 3A/9276: 0A ASL 3A/9277: 69 A3 ADC #$A3 ; tileset (01/A380) 3A/9279: 85 81 STA $81 3A/927B: A9 80 LDA #$80 3A/927D: 85 80 STA $80 3A/927F: 8A TXA 3A/9280: 18 CLC 3A/9281: 69 01 ADC #$01 3A/9283: 4A LSR 3A/9284: 08 PHP 3A/9285: 18 CLC 3A/9286: 69 B1 ADC #$B1 ; name table (01/B180) 3A/9288: 85 83 STA $83 3A/928A: A9 00 LDA #$00 3A/928C: 28 PLP 3A/928D: 6A ROR 3A/928E: 85 82 STA $82 3A/9290: 8A TXA 3A/9291: 18 CLC 3A/9292: 69 B5 ADC #$B5 ; tile properties (01/B500) 3A/9294: 85 85 STA $85 3A/9296: A9 00 LDA #$00 3A/9298: 85 84 STA $84 3A/929A: A0 00 LDY #$00 3A/929C: A2 00 LDX #$00 3A/929E: B1 84 LDA ($84),Y 3A/92A0: 9D 00 04 STA $0400,X ; tile properties byte 1 3A/92A3: C8 INY 3A/92A4: B1 84 LDA ($84),Y 3A/92A6: 9D 00 05 STA $0500,X ; tile properties byte 2 3A/92A9: E8 INX 3A/92AA: C8 INY 3A/92AB: D0 F1 BNE $929E 3A/92AD: B1 82 LDA ($82),Y 3A/92AF: 99 00 06 STA $0600,Y ; attribute table 3A/92B2: C8 INY 3A/92B3: 10 F8 BPL $92AD 3A/92B5: A0 00 LDY #$00 3A/92B7: B1 80 LDA ($80),Y 3A/92B9: 99 00 7C STA $7C00,Y 3A/92BC: C8 INY 3A/92BD: 10 F8 BPL $92B7 3A/92BF: B1 80 LDA ($80),Y 3A/92C1: 99 80 7C STA $7C80,Y ; -> $7D00 (y starts at $80) 3A/92C4: C8 INY 3A/92C5: D0 F8 BNE $92BF 3A/92C7: E6 81 INC $81 3A/92C9: B1 80 LDA ($80),Y 3A/92CB: 99 00 7E STA $7E00,Y 3A/92CE: C8 INY 3A/92CF: 10 F8 BPL $92C9 3A/92D1: B1 80 LDA ($80),Y 3A/92D3: 99 80 71 STA $7180,Y 3A/92D6: C8 INY 3A/92D7: D0 F8 BNE $92D1 3A/92D9: A0 00 LDY #$00 3A/92DB: BE C1 93 LDX $93C1,Y ; copy tile info for tiles $80-$FF 3A/92DE: BD 00 04 LDA $0400,X 3A/92E1: 99 80 04 STA $0480,Y 3A/92E4: BD 00 05 LDA $0500,X 3A/92E7: 99 80 05 STA $0580,Y 3A/92EA: BD 00 06 LDA $0600,X 3A/92ED: 99 80 06 STA $0680,Y 3A/92F0: BD 00 7C LDA $7C00,X 3A/92F3: 99 80 7C STA $7C80,Y 3A/92F6: BD 00 7D LDA $7D00,X 3A/92F9: 99 80 7D STA $7D80,Y 3A/92FC: BD 00 7E LDA $7E00,X 3A/92FF: 99 80 7E STA $7E80,Y 3A/9302: BD 00 72 LDA $7200,X 3A/9305: 99 80 72 STA $7280,Y 3A/9308: C8 INY 3A/9309: 10 D0 BPL $92DB 3A/930B: AD 81 07 LDA $0781 3A/930E: 29 20 AND #$20 3A/9310: 85 49 STA $49 ; chests 16-31 contain gil 3A/9312: AD 81 07 LDA $0781 3A/9315: 29 80 AND #$80 3A/9317: 09 0D ORA #$0D 3A/9319: 85 6D STA $6D ; something with water animation ??? 3A/931B: AD 81 07 LDA $0781 3A/931E: 29 40 AND #$40 3A/9320: 0A ASL 3A/9321: 09 0E ORA #$0E 3A/9323: 85 6E STA $6E ; something else with water animation ??? 3A/9325: A5 AA LDA $AA 3A/9327: D0 18 BNE $9341 ; branch if not coming from world map 3A/9329: AD 80 07 LDA $0780 ; x position (map properties byte 1) 3A/932C: 29 1F AND #$1F 3A/932E: 38 SEC 3A/932F: E9 07 SBC #$07 3A/9331: 29 3F AND #$3F 3A/9333: 85 29 STA $29 3A/9335: AD 81 07 LDA $0781 ; y position (map properties byte 1) 3A/9338: 29 1F AND #$1F 3A/933A: 38 SEC 3A/933B: E9 07 SBC #$07 3A/933D: 29 3F AND #$3F 3A/933F: 85 2A STA $2A 3A/9341: AD 82 07 LDA $0782 ; map title (map properties byte 2) 3A/9344: 85 4B STA $4B 3A/9346: AD 83 07 LDA $0783 ; fill tile (map properties byte 3) 3A/9349: 85 4C STA $4C 3A/934B: AD 8A 07 LDA $078A ; song (map properties byte 10) 3A/934E: 85 4D STA $4D 3A/9350: AD 8B 07 LDA $078B ; map exit (map properties byte 11) 3A/9353: 8D 30 07 STA $0730 3A/9356: AD 8C 07 LDA $078C ; pointer to entrances (map properties byte 12/13) 3A/9359: 85 80 STA $80 3A/935B: AD 8D 07 LDA $078D 3A/935E: 09 20 ORA #$20 3A/9360: 85 81 STA $81 3A/9362: 18 CLC 3A/9363: A9 10 LDA #$10 3A/9365: 20 09 FF JSR $FF09 ; switch prg bank 1 3A/9368: AD 8E 07 LDA $078E ; treasures id (map properties byte 14) 3A/936B: 0A ASL 3A/936C: AA TAX 3A/936D: B0 0F BCS $937E 3A/936F: BD 00 A0 LDA $A000,X ; map treasures (10/8000) 3A/9372: 85 82 STA $82 3A/9374: BD 01 A0 LDA $A001,X 3A/9377: 09 20 ORA #$20 3A/9379: 85 83 STA $83 3A/937B: 4C 8A 93 JMP $938A 3A/937E: BD 00 A1 LDA $A100,X ; map treasures (10/8100) 3A/9381: 85 82 STA $82 3A/9383: BD 01 A1 LDA $A101,X 3A/9386: 09 20 ORA #$20 3A/9388: 85 83 STA $83 3A/938A: AD 8F 07 LDA $078F ; triggers id (map properties byte 15) 3A/938D: 0A ASL 3A/938E: AA TAX 3A/938F: B0 0F BCS $93A0 3A/9391: BD 00 A2 LDA $A200,X ; map triggers (10/8200) 3A/9394: 85 84 STA $84 3A/9396: BD 01 A2 LDA $A201,X 3A/9399: 09 20 ORA #$20 3A/939B: 85 85 STA $85 3A/939D: 4C AC 93 JMP $93AC 3A/93A0: BD 00 A3 LDA $A300,X ; map triggers (10/8300) 3A/93A3: 85 84 STA $84 3A/93A5: BD 01 A3 LDA $A301,X 3A/93A8: 09 20 ORA #$20 3A/93AA: 85 85 STA $85 3A/93AC: A0 0F LDY #$0F 3A/93AE: B1 80 LDA ($80),Y 3A/93B0: 99 00 07 STA $0700,Y ; entrances 3A/93B3: B1 82 LDA ($82),Y 3A/93B5: 99 10 07 STA $0710,Y ; treasures 3A/93B8: B1 84 LDA ($84),Y 3A/93BA: 99 20 07 STA $0720,Y ; triggers 3A/93BD: 88 DEY 3A/93BE: 10 EE BPL $93AE 3A/93C0: 60 RTS ; tile to get tile properties for tiles $80-$FF 3A/93C1: 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 70 ; door 3A/93D1: 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 71 ; locked door 3A/93E1: 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 72 ; entrance 3 3A/93F1: 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 73 ; entrance 4 3A/9401: 74 74 74 74 75 75 75 75 76 76 76 76 77 77 77 77 ; other entrances 3A/9411: 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C 7C ; treasure chests 3A/9421: 78 78 78 78 79 79 79 79 7A 7A 7A 7A 7B 7B 7B 7B ; other treasures 3A/9431: 60 60 60 60 61 61 61 61 62 62 62 62 63 63 63 63 ; triggers ; [ no effect ] ; unused 3A/9441: 60 RTS ; -------------------------------------------------------------------------- ; [ update underwater bubbles ] 3A/9442: A5 F0 LDA $F0 3A/9444: 4A LSR 3A/9445: B0 09 BCS $9450 3A/9447: 20 36 97 JSR $9736 3A/944A: 20 8D 96 JSR $968D 3A/944D: 4C 5A 94 JMP $945A 3A/9450: 20 5A 94 JSR $945A 3A/9453: 20 8D 96 JSR $968D 3A/9456: 4C 36 97 JMP $9736 ; [ ] ; starts at 3A/945A 3A/9459: 60 RTS ; subroutine starts here 3A/945A: AD 20 01 LDA $0120 3A/945D: F0 1F BEQ $947E 3A/945F: A2 00 LDX #$00 3A/9461: 86 86 STX $86 3A/9463: 20 FE 94 JSR $94FE 3A/9466: 8A TXA 3A/9467: 18 CLC 3A/9468: 69 06 ADC #$06 3A/946A: AA TAX 3A/946B: C9 30 CMP #$30 3A/946D: 90 F4 BCC $9463 3A/946F: A5 86 LDA $86 3A/9471: D0 E6 BNE $9459 3A/9473: AD 23 01 LDA $0123 3A/9476: F0 E1 BEQ $9459 3A/9478: A9 00 LDA #$00 3A/947A: 8D 20 01 STA $0120 3A/947D: 60 RTS 3A/947E: A5 F0 LDA $F0 3A/9480: D0 D7 BNE $9459 3A/9482: A5 F1 LDA $F1 3A/9484: 29 07 AND #$07 3A/9486: D0 D1 BNE $9459 ; once per 2048 frames (~34 seconds) 3A/9488: E6 EE INC $EE 3A/948A: A6 EE LDX $EE 3A/948C: BD 00 FE LDA $FE00,X ; random number table 3A/948F: 48 PHA 3A/9490: 29 3C AND #$3C 3A/9492: 85 80 STA $80 3A/9494: 68 PLA 3A/9495: 48 PHA 3A/9496: 29 01 AND #$01 3A/9498: 09 80 ORA #$80 3A/949A: 8D 20 01 STA $0120 3A/949D: 68 PLA 3A/949E: 29 03 AND #$03 3A/94A0: 85 81 STA $81 3A/94A2: A0 00 LDY #$00 3A/94A4: A2 00 LDX #$00 3A/94A6: BD 85 96 LDA $9685,X 3A/94A9: 99 22 01 STA $0122,Y 3A/94AC: A9 00 LDA #$00 3A/94AE: 99 23 01 STA $0123,Y 3A/94B1: BD 75 96 LDA $9675,X 3A/94B4: 18 CLC 3A/94B5: 65 80 ADC $80 3A/94B7: 05 81 ORA $81 3A/94B9: 99 26 01 STA $0126,Y 3A/94BC: A9 00 LDA #$00 3A/94BE: 99 27 01 STA $0127,Y 3A/94C1: AD 20 01 LDA $0120 3A/94C4: 4A LSR 3A/94C5: B0 13 BCS $94DA 3A/94C7: BD 6D 96 LDA $966D,X 3A/94CA: 18 CLC 3A/94CB: 65 80 ADC $80 3A/94CD: 05 81 ORA $81 3A/94CF: 99 24 01 STA $0124,Y 3A/94D2: A9 FF LDA #$FF 3A/94D4: 99 25 01 STA $0125,Y 3A/94D7: 4C EA 94 JMP $94EA 3A/94DA: BD 7D 96 LDA $967D,X 3A/94DD: 18 CLC 3A/94DE: 65 80 ADC $80 3A/94E0: 05 81 ORA $81 3A/94E2: 99 24 01 STA $0124,Y 3A/94E5: A9 01 LDA #$01 3A/94E7: 99 25 01 STA $0125,Y 3A/94EA: 98 TYA 3A/94EB: 18 CLC 3A/94EC: 69 06 ADC #$06 3A/94EE: A8 TAY 3A/94EF: A5 81 LDA $81 3A/94F1: 18 CLC 3A/94F2: 69 01 ADC #$01 3A/94F4: 29 03 AND #$03 3A/94F6: 85 81 STA $81 3A/94F8: E8 INX 3A/94F9: E0 08 CPX #$08 3A/94FB: 90 A9 BCC $94A6 3A/94FD: 60 RTS ; [ ] 3A/94FE: FE 22 01 INC $0122,X 3A/9501: D0 03 BNE $9506 3A/9503: FE 23 01 INC $0123,X 3A/9506: 20 CE 97 JSR $97CE 3A/9509: A5 81 LDA $81 3A/950B: D0 1A BNE $9527 3A/950D: A5 F0 LDA $F0 3A/950F: 29 07 AND #$07 3A/9511: D0 14 BNE $9527 3A/9513: A5 F0 LDA $F0 3A/9515: C9 50 CMP #$50 3A/9517: 90 0E BCC $9527 3A/9519: C9 80 CMP #$80 3A/951B: 90 08 BCC $9525 3A/951D: C9 D0 CMP #$D0 3A/951F: 90 06 BCC $9527 3A/9521: E6 81 INC $81 3A/9523: D0 02 BNE $9527 3A/9525: C6 81 DEC $81 3A/9527: BD 22 01 LDA $0122,X 3A/952A: 29 3F AND #$3F 3A/952C: A8 TAY 3A/952D: B9 2D 96 LDA $962D,Y 3A/9530: F0 23 BEQ $9555 3A/9532: BD 23 01 LDA $0123,X 3A/9535: D0 08 BNE $953F 3A/9537: AD 20 01 LDA $0120 3A/953A: 4A LSR 3A/953B: 90 11 BCC $954E 3A/953D: B0 14 BCS $9553 3A/953F: C9 01 CMP #$01 3A/9541: D0 F4 BNE $9537 3A/9543: BD 22 01 LDA $0122,X 3A/9546: 30 EF BMI $9537 3A/9548: AD 20 01 LDA $0120 3A/954B: 4A LSR 3A/954C: 90 05 BCC $9553 3A/954E: E6 80 INC $80 3A/9550: 4C 55 95 JMP $9555 3A/9553: C6 80 DEC $80 3A/9555: A5 80 LDA $80 3A/9557: 10 15 BPL $956E 3A/9559: 49 FF EOR #$FF 3A/955B: 85 80 STA $80 3A/955D: BD 24 01 LDA $0124,X 3A/9560: 18 CLC 3A/9561: E5 80 SBC $80 3A/9563: 9D 24 01 STA $0124,X 3A/9566: B0 16 BCS $957E 3A/9568: DE 25 01 DEC $0125,X 3A/956B: 4C 7E 95 JMP $957E 3A/956E: F0 0E BEQ $957E 3A/9570: BD 24 01 LDA $0124,X 3A/9573: 18 CLC 3A/9574: 65 80 ADC $80 3A/9576: 9D 24 01 STA $0124,X 3A/9579: 90 03 BCC $957E 3A/957B: FE 25 01 INC $0125,X 3A/957E: A5 81 LDA $81 3A/9580: 10 11 BPL $9593 3A/9582: BD 26 01 LDA $0126,X 3A/9585: 38 SEC 3A/9586: E9 01 SBC #$01 3A/9588: 9D 26 01 STA $0126,X 3A/958B: B0 16 BCS $95A3 3A/958D: DE 27 01 DEC $0127,X 3A/9590: 4C A3 95 JMP $95A3 3A/9593: F0 0E BEQ $95A3 3A/9595: BD 26 01 LDA $0126,X 3A/9598: 18 CLC 3A/9599: 69 01 ADC #$01 3A/959B: 9D 26 01 STA $0126,X 3A/959E: 90 03 BCC $95A3 3A/95A0: FE 27 01 INC $0127,X 3A/95A3: BD 25 01 LDA $0125,X 3A/95A6: 1D 27 01 ORA $0127,X 3A/95A9: F0 01 BEQ $95AC 3A/95AB: 60 RTS 3A/95AC: A4 26 LDY $26 3A/95AE: BD 24 01 LDA $0124,X 3A/95B1: 99 03 02 STA $0203,Y 3A/95B4: BD 26 01 LDA $0126,X 3A/95B7: 99 00 02 STA $0200,Y 3A/95BA: 98 TYA 3A/95BB: 18 CLC 3A/95BC: 69 04 ADC #$04 3A/95BE: 85 26 STA $26 3A/95C0: E6 86 INC $86 3A/95C2: BD 23 01 LDA $0123,X 3A/95C5: F0 19 BEQ $95E0 3A/95C7: C9 01 CMP #$01 3A/95C9: D0 2F BNE $95FA 3A/95CB: BD 22 01 LDA $0122,X 3A/95CE: C9 8A CMP #$8A 3A/95D0: B0 28 BCS $95FA 3A/95D2: C9 80 CMP #$80 3A/95D4: B0 46 BCS $961C 3A/95D6: C9 76 CMP #$76 3A/95D8: B0 31 BCS $960B 3A/95DA: C9 0A CMP #$0A 3A/95DC: B0 0B BCS $95E9 3A/95DE: 90 2B BCC $960B 3A/95E0: BD 22 01 LDA $0122,X 3A/95E3: C9 F6 CMP #$F6 3A/95E5: 90 13 BCC $95FA 3A/95E7: B0 33 BCS $961C 3A/95E9: AD 20 01 LDA $0120 3A/95EC: 4A LSR 3A/95ED: B0 11 BCS $9600 3A/95EF: A9 B1 LDA #$B1 3A/95F1: 99 01 02 STA $0201,Y 3A/95F4: A9 23 LDA #$23 3A/95F6: 99 02 02 STA $0202,Y 3A/95F9: 60 RTS 3A/95FA: AD 20 01 LDA $0120 3A/95FD: 4A LSR 3A/95FE: B0 EF BCS $95EF 3A/9600: A9 B1 LDA #$B1 3A/9602: 99 01 02 STA $0201,Y 3A/9605: A9 63 LDA #$63 3A/9607: 99 02 02 STA $0202,Y 3A/960A: 60 RTS 3A/960B: AD 20 01 LDA $0120 3A/960E: 4A LSR 3A/960F: B0 11 BCS $9622 3A/9611: A9 B2 LDA #$B2 3A/9613: 99 01 02 STA $0201,Y 3A/9616: A9 23 LDA #$23 3A/9618: 99 02 02 STA $0202,Y 3A/961B: 60 RTS 3A/961C: AD 20 01 LDA $0120 3A/961F: 4A LSR 3A/9620: B0 EF BCS $9611 3A/9622: A9 B2 LDA #$B2 3A/9624: 99 01 02 STA $0201,Y 3A/9627: A9 63 LDA #$63 3A/9629: 99 02 02 STA $0202,Y 3A/962C: 60 RTS 3A/962D: 00 01 00 00 01 00 01 00 01 01 00 01 01 01 01 01 3A/963D: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 3A/964D: 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 01 3A/965D: 01 01 01 01 01 00 01 01 00 01 00 01 00 00 01 00 3A/966D: C0 B0 A0 B8 A8 C0 B0 A0 3A/9675: 58 58 58 60 60 68 68 68 3A/967D: 00 10 20 08 18 00 10 20 3A/9685: 20 10 00 18 08 20 10 00 ; [ ] 3A/968D: AD 1C 01 LDA $011C 3A/9690: F0 04 BEQ $9696 3A/9692: 20 B6 96 JSR $96B6 3A/9695: 60 RTS 3A/9696: A5 F0 LDA $F0 3A/9698: D0 FB BNE $9695 3A/969A: A5 F1 LDA $F1 3A/969C: 4A LSR 3A/969D: B0 F6 BCS $9695 3A/969F: AE 10 01 LDX $0110 3A/96A2: EE 10 01 INC $0110 3A/96A5: BD 00 FE LDA $FE00,X ; random number table 3A/96A8: 8D 1D 01 STA $011D 3A/96AB: 29 1F AND #$1F 3A/96AD: 18 CLC 3A/96AE: 69 D8 ADC #$D8 3A/96B0: 8D 1C 01 STA $011C 3A/96B3: 4C 95 96 JMP $9695 3A/96B6: 20 CE 97 JSR $97CE 3A/96B9: AD 1C 01 LDA $011C 3A/96BC: 38 SEC 3A/96BD: E9 01 SBC #$01 3A/96BF: B0 06 BCS $96C7 3A/96C1: A9 00 LDA #$00 3A/96C3: 8D 1C 01 STA $011C 3A/96C6: 60 RTS 3A/96C7: 24 81 BIT $81 3A/96C9: 10 05 BPL $96D0 3A/96CB: 38 SEC 3A/96CC: E9 01 SBC #$01 3A/96CE: 90 F1 BCC $96C1 3A/96D0: 8D 1C 01 STA $011C 3A/96D3: 85 81 STA $81 3A/96D5: AD 1D 01 LDA $011D 3A/96D8: 18 CLC 3A/96D9: 69 01 ADC #$01 3A/96DB: 8D 1D 01 STA $011D 3A/96DE: B0 E1 BCS $96C1 3A/96E0: AD 1D 01 LDA $011D 3A/96E3: 18 CLC 3A/96E4: 65 80 ADC $80 3A/96E6: C9 FC CMP #$FC 3A/96E8: B0 D7 BCS $96C1 3A/96EA: 8D 1D 01 STA $011D 3A/96ED: A5 81 LDA $81 3A/96EF: 29 3F AND #$3F 3A/96F1: C9 20 CMP #$20 3A/96F3: B0 0C BCS $9701 3A/96F5: AA TAX 3A/96F6: BD EF 97 LDA $97EF,X 3A/96F9: 18 CLC 3A/96FA: 6D 1D 01 ADC $011D 3A/96FD: B0 C2 BCS $96C1 3A/96FF: 90 0E BCC $970F 3A/9701: 29 1F AND #$1F 3A/9703: AA TAX 3A/9704: AD 1D 01 LDA $011D 3A/9707: 38 SEC 3A/9708: FD EF 97 SBC $97EF,X 3A/970B: B0 02 BCS $970F 3A/970D: 90 B2 BCC $96C1 3A/970F: A6 26 LDX $26 3A/9711: 9D 03 02 STA $0203,X 3A/9714: A5 81 LDA $81 3A/9716: 9D 00 02 STA $0200,X 3A/9719: A9 B3 LDA #$B3 3A/971B: 9D 01 02 STA $0201,X 3A/971E: A9 23 LDA #$23 3A/9720: 9D 02 02 STA $0202,X 3A/9723: A5 F0 LDA $F0 3A/9725: 29 10 AND #$10 3A/9727: D0 05 BNE $972E 3A/9729: A9 B4 LDA #$B4 3A/972B: 9D 01 02 STA $0201,X 3A/972E: A5 26 LDA $26 3A/9730: 18 CLC 3A/9731: 69 04 ADC #$04 3A/9733: 85 26 STA $26 3A/9735: 60 RTS ; [ ] 3A/9736: A0 01 LDY #$01 3A/9738: B9 10 01 LDA $0110,Y 3A/973B: F0 0A BEQ $9747 3A/973D: 20 64 97 JSR $9764 3A/9740: C8 INY 3A/9741: C8 INY 3A/9742: C0 0B CPY #$0B 3A/9744: 90 F2 BCC $9738 3A/9746: 60 RTS 3A/9747: A5 F0 LDA $F0 3A/9749: 29 3F AND #$3F 3A/974B: D0 F3 BNE $9740 3A/974D: AE 10 01 LDX $0110 3A/9750: EE 10 01 INC $0110 3A/9753: BD 00 FE LDA $FE00,X ; random number table 3A/9756: 99 11 01 STA $0111,Y 3A/9759: 29 3F AND #$3F 3A/975B: 18 CLC 3A/975C: 69 B8 ADC #$B8 3A/975E: 99 10 01 STA $0110,Y 3A/9761: 4C 40 97 JMP $9740 ; [ ] 3A/9764: 20 CE 97 JSR $97CE 3A/9767: B9 10 01 LDA $0110,Y 3A/976A: 38 SEC 3A/976B: E9 01 SBC #$01 3A/976D: B0 06 BCS $9775 3A/976F: A9 00 LDA #$00 3A/9771: 99 10 01 STA $0110,Y 3A/9774: 60 RTS 3A/9775: 24 81 BIT $81 3A/9777: 10 05 BPL $977E 3A/9779: 38 SEC 3A/977A: E9 01 SBC #$01 3A/977C: 90 F1 BCC $976F 3A/977E: 99 10 01 STA $0110,Y 3A/9781: 85 81 STA $81 3A/9783: B9 11 01 LDA $0111,Y 3A/9786: 18 CLC 3A/9787: 65 80 ADC $80 3A/9789: C9 FC CMP #$FC 3A/978B: B0 E2 BCS $976F 3A/978D: 99 11 01 STA $0111,Y 3A/9790: A5 81 LDA $81 3A/9792: 29 3F AND #$3F 3A/9794: C9 20 CMP #$20 3A/9796: B0 0C BCS $97A4 3A/9798: AA TAX 3A/9799: BD EF 97 LDA $97EF,X 3A/979C: 18 CLC 3A/979D: 79 11 01 ADC $0111,Y 3A/97A0: B0 CD BCS $976F 3A/97A2: 90 0E BCC $97B2 3A/97A4: 29 1F AND #$1F 3A/97A6: AA TAX 3A/97A7: B9 11 01 LDA $0111,Y 3A/97AA: 38 SEC 3A/97AB: FD EF 97 SBC $97EF,X 3A/97AE: B0 02 BCS $97B2 3A/97B0: 90 BD BCC $976F 3A/97B2: A6 26 LDX $26 3A/97B4: 9D 03 02 STA $0203,X 3A/97B7: A5 81 LDA $81 3A/97B9: 9D 00 02 STA $0200,X 3A/97BC: A9 B0 LDA #$B0 3A/97BE: 9D 01 02 STA $0201,X 3A/97C1: A9 03 LDA #$03 3A/97C3: 9D 02 02 STA $0202,X 3A/97C6: A5 26 LDA $26 3A/97C8: 18 CLC 3A/97C9: 69 04 ADC #$04 3A/97CB: 85 26 STA $26 3A/97CD: 60 RTS ; [ ] 3A/97CE: A9 00 LDA #$00 3A/97D0: 85 80 STA $80 3A/97D2: 85 81 STA $81 3A/97D4: A5 34 LDA $34 3A/97D6: F0 16 BEQ $97EE 3A/97D8: A5 33 LDA $33 3A/97DA: 4A LSR 3A/97DB: 90 03 BCC $97E0 3A/97DD: C6 80 DEC $80 3A/97DF: 60 RTS 3A/97E0: 4A LSR 3A/97E1: 90 03 BCC $97E6 3A/97E3: E6 80 INC $80 3A/97E5: 60 RTS 3A/97E6: 4A LSR 3A/97E7: 90 03 BCC $97EC 3A/97E9: C6 81 DEC $81 3A/97EB: 60 RTS 3A/97EC: E6 81 INC $81 3A/97EE: 60 RTS 3A/97EF: 00 00 01 01 02 02 03 03 03 04 04 04 05 05 05 05 3A/97FF: 05 05 05 05 04 04 04 03 03 03 02 02 01 01 00 00 ; -------------------------------------------------------------------------- ; [ show developer message ] ; "BY : NASIR" 3A/980F: 20 0C C0 JSR $C00C ; update joypad input 3A/9812: A5 20 LDA $20 3A/9814: C9 3A CMP #$3A ; up, left, start, select 3A/9816: F0 01 BEQ $9819 3A/9818: 60 RTS 3A/9819: 20 0C C0 JSR $C00C ; update joypad input 3A/981C: A5 20 LDA $20 3A/981E: C9 3A CMP #$3A ; wait for select button to be released 3A/9820: F0 F7 BEQ $9819 3A/9822: C9 1A CMP #$1A ; return unless select button is released 3A/9824: D0 F2 BNE $9818 3A/9826: A9 88 LDA #$88 3A/9828: 85 FF STA $FF 3A/982A: A9 3A LDA #$3A 3A/982C: 85 57 STA $57 3A/982E: A9 00 LDA #$00 3A/9830: 8D 01 20 STA $2001 3A/9833: A9 00 LDA #$00 3A/9835: 8D 15 40 STA $4015 3A/9838: 20 6B 98 JSR $986B ; draw developer message 3A/983B: A9 88 LDA #$88 3A/983D: 8D 00 20 STA $2000 3A/9840: 20 00 FF JSR $FF00 ; wait for vblank 3A/9843: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3A/9846: 20 00 FF JSR $FF00 ; wait for vblank 3A/9849: A9 00 LDA #$00 3A/984B: 8D 05 20 STA $2005 3A/984E: 8D 05 20 STA $2005 3A/9851: A9 0A LDA #$0A 3A/9853: 8D 01 20 STA $2001 ; show background 3A/9856: A9 00 LDA #$00 3A/9858: 85 24 STA $24 3A/985A: 85 25 STA $25 3A/985C: 20 0C C0 JSR $C00C ; update joypad input 3A/985F: A5 24 LDA $24 3A/9861: 05 25 ORA $25 3A/9863: F0 E1 BEQ $9846 ; wait for A button or B button 3A/9865: A9 00 LDA #$00 3A/9867: 8D 01 20 STA $2001 3A/986A: 60 RTS ; [ draw developer message ] 3A/986B: 2C 02 20 BIT $2002 3A/986E: A9 00 LDA #$00 3A/9870: 8D 06 20 STA $2006 3A/9873: A9 00 LDA #$00 3A/9875: 8D 06 20 STA $2006 3A/9878: A2 28 LDX #$28 3A/987A: A9 00 LDA #$00 3A/987C: A8 TAY 3A/987D: 8D 07 20 STA $2007 3A/9880: C8 INY 3A/9881: D0 FA BNE $987D 3A/9883: CA DEX 3A/9884: D0 F7 BNE $987D 3A/9886: A9 21 LDA #$21 3A/9888: 85 81 STA $81 3A/988A: A9 08 LDA #$08 3A/988C: 85 80 STA $80 3A/988E: A0 80 LDY #$80 3A/9890: A5 81 LDA $81 3A/9892: 8D 06 20 STA $2006 3A/9895: A5 80 LDA $80 3A/9897: 8D 06 20 STA $2006 3A/989A: A2 10 LDX #$10 3A/989C: 8C 07 20 STY $2007 3A/989F: C8 INY 3A/98A0: CA DEX 3A/98A1: D0 F9 BNE $989C 3A/98A3: A5 80 LDA $80 3A/98A5: 18 CLC 3A/98A6: 69 20 ADC #$20 3A/98A8: 85 80 STA $80 3A/98AA: A5 81 LDA $81 3A/98AC: 69 00 ADC #$00 3A/98AE: 85 81 STA $81 3A/98B0: C0 00 CPY #$00 3A/98B2: D0 DC BNE $9890 3A/98B4: A2 0F LDX #$0F 3A/98B6: BD 4C 99 LDA $994C,X 3A/98B9: 9D C0 03 STA $03C0,X 3A/98BC: 9D D0 03 STA $03D0,X 3A/98BF: CA DEX 3A/98C0: 10 F4 BPL $98B6 3A/98C2: A9 00 LDA #$00 3A/98C4: 85 61 STA $61 3A/98C6: 85 62 STA $62 3A/98C8: 20 D8 98 JSR $98D8 3A/98CB: E6 61 INC $61 3A/98CD: D0 F9 BNE $98C8 3A/98CF: E6 62 INC $62 3A/98D1: A5 62 LDA $62 3A/98D3: C9 02 CMP #$02 3A/98D5: 90 F1 BCC $98C8 3A/98D7: 60 RTS ; [ ] 3A/98D8: A5 62 LDA $62 3A/98DA: 4A LSR 3A/98DB: A5 61 LDA $61 3A/98DD: 6A ROR 3A/98DE: 4A LSR 3A/98DF: 4A LSR 3A/98E0: A8 TAY 3A/98E1: A5 61 LDA $61 3A/98E3: 29 07 AND #$07 3A/98E5: AA TAX 3A/98E6: BD 44 99 LDA $9944,X 3A/98E9: 39 5C 99 AND $995C,Y 3A/98EC: D0 01 BNE $98EF 3A/98EE: 60 RTS 3A/98EF: 98 TYA 3A/98F0: 0A ASL 3A/98F1: A8 TAY 3A/98F2: 8A TXA 3A/98F3: C9 04 CMP #$04 3A/98F5: 90 04 BCC $98FB 3A/98F7: 29 03 AND #$03 3A/98F9: AA TAX 3A/98FA: C8 INY 3A/98FB: BD 40 99 LDA $9940,X 3A/98FE: 85 80 STA $80 3A/9900: A9 00 LDA #$00 3A/9902: 85 86 STA $86 3A/9904: 98 TYA 3A/9905: 09 80 ORA #$80 3A/9907: 0A ASL 3A/9908: 26 86 ROL $86 3A/990A: 0A ASL 3A/990B: 26 86 ROL $86 3A/990D: 0A ASL 3A/990E: 26 86 ROL $86 3A/9910: 0A ASL 3A/9911: 26 86 ROL $86 3A/9913: A8 TAY 3A/9914: A6 86 LDX $86 3A/9916: 8E 06 20 STX $2006 3A/9919: 8C 06 20 STY $2006 3A/991C: AD 07 20 LDA $2007 3A/991F: AD 07 20 LDA $2007 3A/9922: 8E 06 20 STX $2006 3A/9925: 8C 06 20 STY $2006 3A/9928: 05 80 ORA $80 3A/992A: 8D 07 20 STA $2007 3A/992D: 8D 07 20 STA $2007 3A/9930: 8D 07 20 STA $2007 3A/9933: 8D 07 20 STA $2007 3A/9936: 8D 07 20 STA $2007 3A/9939: 8D 07 20 STA $2007 3A/993C: 8D 07 20 STA $2007 3A/993F: 60 RTS 3A/9940: C0 30 0C 03 ; bit masks 3A/9944: 80 40 20 10 08 04 02 01 ; color palette 3A/994C: 0F 02 02 02 3A/9950: 0F 02 02 02 3A/9954: 0F 02 02 02 3A/9958: 0F 02 02 02 ; "BY:NASIR" 3A/995C: F8 84 00 C4 78 FC 30 F8 3A/9964: CC 84 00 E4 CC C0 30 CC 3A/996C: CC 48 20 E4 CC C0 30 CC 3A/9974: F8 78 00 D4 FC FC 30 F8 3A/997C: CC 30 20 D4 CC 0C 30 D0 3A/9984: CC 30 00 CC CC 0C 30 C8 3A/998C: F8 30 00 CC CC FC 30 C4 3A/9994: 00 00 00 00 00 00 00 00 ; -------------------------------------------------------------------------- ; [ update explosion animation ] ; A: frame (clamped to mod 5) ; X: x position ; Y: y position 3A/999C: 86 40 STX $40 3A/999E: 84 41 STY $41 3A/99A0: C9 05 CMP #$05 ; clamp frame to mod 5 3A/99A2: 90 04 BCC $99A8 3A/99A4: E9 05 SBC #$05 3A/99A6: D0 F8 BNE $99A0 3A/99A8: 0A ASL 3A/99A9: AA TAX 3A/99AA: BD DA 99 LDA $99DA,X ; pointers to statue explosion frame data 3A/99AD: 85 66 STA $66 3A/99AF: BD DB 99 LDA $99DB,X 3A/99B2: 85 67 STA $67 3A/99B4: A9 00 LDA #$00 3A/99B6: 85 65 STA $65 3A/99B8: A4 65 LDY $65 3A/99BA: B1 66 LDA ($66),Y 3A/99BC: C9 FF CMP #$FF ; terminator 3A/99BE: D0 01 BNE $99C1 3A/99C0: 60 RTS 3A/99C1: 18 CLC 3A/99C2: 65 40 ADC $40 3A/99C4: 85 40 STA $40 ; x position 3A/99C6: C8 INY 3A/99C7: B1 66 LDA ($66),Y 3A/99C9: 18 CLC 3A/99CA: 65 41 ADC $41 3A/99CC: 85 41 STA $41 ; y position 3A/99CE: C8 INY 3A/99CF: B1 66 LDA ($66),Y ; frame 3A/99D1: C8 INY 3A/99D2: 84 65 STY $65 3A/99D4: 20 34 9A JSR $9A34 ; draw statue explosion sprites 3A/99D7: 4C B8 99 JMP $99B8 ; next explosion ; pointers to statue explosion frame data 3A/99DA: 99E4 99F4 9A04 9A14 9A24 ; x, y, frame 3A/99E4: 18 00 00 3A/99E7: F0 0E 03 3A/99EA: 10 12 04 3A/99ED: EC 10 02 3A/99F0: 1C 0C 01 3A/99F3: FF 3A/99F4: 18 00 01 3A/99F7: F0 0E 04 3A/99FA: 10 12 00 3A/99FD: EC 10 03 3A/9A00: 1C 0C 02 3A/9A03: FF 3A/9A04: 18 00 02 3A/9A07: F0 0E 00 3A/9A0A: 10 12 01 3A/9A0D: EC 10 04 3A/9A10: 1C 0C 03 3A/9A13: FF 3A/9A14: 18 00 03 3A/9A17: F0 0E 01 3A/9A1A: 10 12 02 3A/9A1D: EC 10 00 3A/9A20: 1C 0C 04 3A/9A23: FF 3A/9A24: 18 00 04 3A/9A27: F0 0E 02 3A/9A2A: 10 12 03 3A/9A2D: EC 10 01 3A/9A30: 1C 0C 00 3A/9A33: FF ; [ draw statue explosion sprites ] ; A: frame 3A/9A34: 0A ASL 3A/9A35: 0A ASL 3A/9A36: 0A ASL 3A/9A37: 69 48 ADC #$48 ; 3A/9A48 3A/9A39: 85 80 STA $80 3A/9A3B: A9 9A LDA #$9A 3A/9A3D: 69 00 ADC #$00 3A/9A3F: 85 81 STA $81 3A/9A41: A9 00 LDA #$00 3A/9A43: 85 82 STA $82 3A/9A45: 4C 1E C0 JMP $C01E ; draw object sprite ; statue explosion sprite data (5 frames, 4 sprites each) ; 0: tile id ; 1: palette / flip 3A/9A48: 84 02 84 82 85 02 85 82 3A/9A50: 86 02 86 82 87 02 87 82 3A/9A58: 88 02 88 82 89 02 89 82 3A/9A60: 8A 02 8A 82 8B 02 8B 82 3A/9A68: 8C 02 8C 82 8D 02 8D 82 ; [ ] 3A/9A70: A2 10 LDX #$10 3A/9A72: A9 F8 LDA #$F8 3A/9A74: 9D 00 02 STA $0200,X ; hide sprites 16-63 3A/9A77: E8 INX 3A/9A78: D0 FA BNE $9A74 3A/9A7A: 60 RTS ; [ special animation 4: airship shot down in saronia ] 3A/9A7B: A9 00 LDA #$00 3A/9A7D: 85 BC STA $BC 3A/9A7F: 20 5D 9B JSR $9B5D ; wait 1 frame 3A/9A82: 20 70 9A JSR $9A70 3A/9A85: A5 BC LDA $BC 3A/9A87: 4A LSR 3A/9A88: 4A LSR 3A/9A89: A2 60 LDX #$60 3A/9A8B: 86 26 STX $26 3A/9A8D: A2 60 LDX #$60 ; (96,72) 3A/9A8F: A0 48 LDY #$48 3A/9A91: 20 9C 99 JSR $999C ; update explosion animation 3A/9A94: A9 11 LDA #$11 3A/9A96: 85 84 STA $84 3A/9A98: 20 73 9B JSR $9B73 ; update exploding airship sprites 3A/9A9B: 10 E2 BPL $9A7F 3A/9A9D: A9 00 LDA #$00 ; no vehicle 3A/9A9F: 85 42 STA $42 3A/9AA1: 85 46 STA $46 3A/9AA3: A9 00 LDA #$00 ; hide vehicle 3A/9AA5: 8D 00 60 STA $6000 3A/9AA8: A9 53 LDA #$53 ; vehicle at (83,71) 3A/9AAA: 8D 01 60 STA $6001 3A/9AAD: A9 47 LDA #$47 3A/9AAF: 8D 02 60 STA $6002 3A/9AB2: A9 03 LDA #$03 ; vehicle on world 3 3A/9AB4: 8D 03 60 STA $6003 3A/9AB7: 60 RTS ; [ special animation 1: airship/boulder explosion ] 3A/9AB8: 20 F2 9A JSR $9AF2 ; init airship/boulder sprite data 3A/9ABB: 20 5D 9B JSR $9B5D ; wait 1 frame 3A/9ABE: A9 00 LDA #$00 3A/9AC0: 85 84 STA $84 3A/9AC2: 20 73 9B JSR $9B73 ; update exploding airship sprites 3A/9AC5: 20 14 9B JSR $9B14 ; update boulder explosion sprites 3A/9AC8: A5 BC LDA $BC 3A/9ACA: 10 EF BPL $9ABB 3A/9ACC: A9 00 LDA #$00 ; no vehicle 3A/9ACE: 85 42 STA $42 3A/9AD0: 85 46 STA $46 3A/9AD2: AD 20 60 LDA $6020 3A/9AD5: 29 FE AND #$FE 3A/9AD7: 8D 20 60 STA $6020 3A/9ADA: AD 2F 60 LDA $602F 3A/9ADD: 09 40 ORA #$40 3A/9ADF: 8D 2F 60 STA $602F 3A/9AE2: A9 50 LDA #$50 ; vehicle at (80,80) 3A/9AE4: 8D 01 60 STA $6001 3A/9AE7: A9 50 LDA #$50 3A/9AE9: 8D 02 60 STA $6002 3A/9AEC: A9 01 LDA #$01 ; vehicle shown 3A/9AEE: 8D 00 60 STA $6000 3A/9AF1: 60 RTS ; [ init airship/boulder sprite data ] 3A/9AF2: A2 0F LDX #$0F 3A/9AF4: BD 00 02 LDA $0200,X 3A/9AF7: 9D 80 02 STA $0280,X 3A/9AFA: BD 04 9B LDA $9B04,X 3A/9AFD: 9D 90 02 STA $0290,X 3A/9B00: CA DEX 3A/9B01: 10 F1 BPL $9AF4 3A/9B03: 60 RTS ; boulder sprite data ??? 3A/9B04: 5F 90 03 60 3A/9B08: 5F 91 03 68 3A/9B0C: 67 92 03 60 3A/9B10: 67 93 03 68 ; [ update boulder explosion sprites ] 3A/9B14: A5 BC LDA $BC 3A/9B16: 4A LSR 3A/9B17: 4A LSR 3A/9B18: A2 00 LDX #$00 3A/9B1A: 86 26 STX $26 3A/9B1C: A2 50 LDX #$50 ; (80,80) 3A/9B1E: A0 50 LDY #$50 3A/9B20: 4C 9C 99 JMP $999C ; update explosion animation ; [ ] 3A/9B23: A2 7F LDX #$7F 3A/9B25: A9 F8 LDA #$F8 3A/9B27: 9D 00 02 STA $0200,X 3A/9B2A: CA DEX 3A/9B2B: 10 FA BPL $9B27 3A/9B2D: 60 RTS 3A/9B2E: 20 02 3A/9B30: 21 06 3A/9B32: 22 09 3A/9B34: 23 0D 3A/9B36: 24 00 3A/9B38: 25 03 3A/9B3A: 26 07 3A/9B3C: 27 0A 3A/9B3E: FF 3A/9B3F: 00 02 3A/9B41: 01 07 3A/9B43: 02 09 3A/9B45: 03 0C 3A/9B47: FF ; [ airship explosion ] ; unused 3A/9B48: A2 00 LDX #$00 3A/9B4A: 86 BC STX $BC 3A/9B4C: 85 85 STA $85 3A/9B4E: 20 5D 9B JSR $9B5D ; wait 1 frame 3A/9B51: A5 85 LDA $85 3A/9B53: 85 84 STA $84 3A/9B55: 20 73 9B JSR $9B73 ; update exploding airship sprites 3A/9B58: A5 BC LDA $BC 3A/9B5A: 10 F2 BPL $9B4E 3A/9B5C: 60 RTS ; [ wait 1 frame (world map animations) ] 3A/9B5D: A9 3A LDA #$3A ; return bank 3A/9B5F: 85 57 STA $57 3A/9B61: 20 00 FF JSR $FF00 ; wait for vblank 3A/9B64: A9 02 LDA #$02 3A/9B66: 8D 14 40 STA $4014 ; dma oam data to ppu 3A/9B69: A2 C8 LDX #$C8 3A/9B6B: CA DEX 3A/9B6C: D0 FD BNE $9B6B 3A/9B6E: E6 F0 INC $F0 3A/9B70: 4C 09 C0 JMP $C009 ; update sound ; [ update exploding airship sprites ] 3A/9B73: A6 84 LDX $84 3A/9B75: BD 2E 9B LDA $9B2E,X 3A/9B78: C9 FF CMP #$FF 3A/9B7A: F0 16 BEQ $9B92 3A/9B7C: 0A ASL 3A/9B7D: 0A ASL 3A/9B7E: 85 81 STA $81 3A/9B80: BD 2F 9B LDA $9B2F,X 3A/9B83: 85 80 STA $80 3A/9B85: 20 96 9B JSR $9B96 3A/9B88: A5 84 LDA $84 3A/9B8A: 18 CLC 3A/9B8B: 69 02 ADC #$02 3A/9B8D: 85 84 STA $84 3A/9B8F: 4C 73 9B JMP $9B73 3A/9B92: E6 BC INC $BC 3A/9B94: 60 RTS ; unused 3A/9B95: 60 RTS ; [ ] ; $81: pointer to sprite data 3A/9B96: A5 BC LDA $BC ; frame counter 3A/9B98: 29 07 AND #$07 3A/9B9A: A8 TAY 3A/9B9B: A5 BC LDA $BC 3A/9B9D: 4A LSR 3A/9B9E: 4A LSR 3A/9B9F: 4A LSR 3A/9BA0: AA TAX 3A/9BA1: B9 1C 9C LDA $9C1C,Y ; bit mask 3A/9BA4: 3D 24 9C AND $9C24,X ; get the bit for this frame 3A/9BA7: D0 03 BNE $9BAC 3A/9BA9: 4C F4 9B JMP $9BF4 3A/9BAC: A5 80 LDA $80 3A/9BAE: 0A ASL 3A/9BAF: 0A ASL 3A/9BB0: 0A ASL 3A/9BB1: 0A ASL 3A/9BB2: 85 82 STA $82 3A/9BB4: A5 BC LDA $BC 3A/9BB6: 0A ASL 3A/9BB7: 29 0F AND #$0F 3A/9BB9: 05 82 ORA $82 3A/9BBB: A8 TAY 3A/9BBC: A6 81 LDX $81 3A/9BBE: B9 B4 9C LDA $9CB4,Y ; x offset 3A/9BC1: F0 1D BEQ $9BE0 3A/9BC3: 30 10 BMI $9BD5 3A/9BC5: 18 CLC 3A/9BC6: 7D 03 02 ADC $0203,X ; add to x position if positive 3A/9BC9: 9D 03 02 STA $0203,X 3A/9BCC: 90 12 BCC $9BE0 3A/9BCE: A9 F8 LDA #$F8 3A/9BD0: 9D 00 02 STA $0200,X 3A/9BD3: D0 0B BNE $9BE0 3A/9BD5: BD 03 02 LDA $0203,X 3A/9BD8: 38 SEC 3A/9BD9: E9 01 SBC #$01 3A/9BDB: 9D 03 02 STA $0203,X ; subtract from x position if positive 3A/9BDE: 90 EE BCC $9BCE 3A/9BE0: B9 B5 9C LDA $9CB5,Y 3A/9BE3: F0 0F BEQ $9BF4 3A/9BE5: BD 00 02 LDA $0200,X 3A/9BE8: 38 SEC 3A/9BE9: E9 01 SBC #$01 3A/9BEB: C9 F0 CMP #$F0 3A/9BED: 90 02 BCC $9BF1 3A/9BEF: A9 F8 LDA #$F8 3A/9BF1: 9D 00 02 STA $0200,X 3A/9BF4: A6 81 LDX $81 3A/9BF6: BD 02 02 LDA $0202,X 3A/9BF9: 29 3F AND #$3F 3A/9BFB: 85 82 STA $82 3A/9BFD: A5 BC LDA $BC ; frame counter 3A/9BFF: A8 TAY 3A/9C00: 29 60 AND #$60 ; change vh flip every 32 frames 3A/9C02: 0A ASL 3A/9C03: 05 82 ORA $82 3A/9C05: 9D 02 02 STA $0202,X 3A/9C08: BD 00 02 LDA $0200,X 3A/9C0B: C9 F0 CMP #$F0 3A/9C0D: B0 0C BCS $9C1B 3A/9C0F: 79 34 9C ADC $9C34,Y ; add y offset 3A/9C12: C9 F0 CMP #$F0 3A/9C14: 90 02 BCC $9C18 3A/9C16: A9 F8 LDA #$F8 3A/9C18: 9D 00 02 STA $0200,X 3A/9C1B: 60 RTS ; bit masks 3A/9C1C: 01 02 04 08 10 20 40 80 ; ??? (1 bit per frame) 3A/9C24: FF FF FF FF EE EE EE EE DB DB DB DB B5 55 44 05 ; y offsets for each sprite (8 * 16 bytes) 3A/9C34: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A/9C44: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 3A/9C54: 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 3A/9C64: 01 00 00 00 01 00 00 00 01 00 00 00 01 00 00 00 3A/9C74: 00 00 01 00 00 01 00 00 00 00 01 00 00 01 00 00 3A/9C84: 00 00 01 00 00 01 00 01 00 01 00 01 00 01 00 01 3A/9C94: 00 01 00 01 01 01 00 01 01 01 01 01 01 01 01 01 3A/9CA4: 02 01 02 01 02 01 02 02 01 02 02 03 02 02 02 03 ; x offsets for each sprite (15 * 16 bytes) 3A/9CB4: 01 00 01 00 01 00 01 FF 01 00 01 00 01 00 01 FF 3A/9CC4: 01 00 01 FF 01 00 01 00 01 FF 01 00 01 00 01 FF 3A/9CD4: 01 00 01 FF 01 00 01 FF 01 FF 01 00 01 FF 01 FF 3A/9CE4: 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 01 FF 3A/9CF4: 00 FF 01 FF 00 FF 01 FF 01 FF 00 FF 01 FF 01 FF 3A/9D04: 00 FF 01 FF 00 FF 00 FF 01 FF 00 FF 00 FF 01 FF 3A/9D14: 00 FF 00 FF 00 FF 01 FF 00 FF 00 FF 00 FF 01 FF 3A/9D24: 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 00 FF 3A/9D34: 00 FF 00 FF 00 FF FF FF 00 FF 00 FF 00 FF FF FF 3A/9D44: 00 FF FF FF 00 FF 00 FF FF FF 00 FF 00 FF FF FF 3A/9D54: 00 FF FF FF 00 FF FF FF FF FF 00 FF FF FF FF FF 3A/9D64: FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 3A/9D74: FF 00 FF FF FF 00 FF FF FF FF FF 00 FF FF FF FF 3A/9D84: FF 00 FF FF FF 00 FF 00 FF FF FF 00 FF 00 FF FF 3A/9D94: FF 00 FF 00 FF 00 FF FF FF 00 FF 00 FF 00 FF FF ; [ calculate projectile sprite position ] ; $65: radius ; +$66: angle (down = $0000, right = $0100, up = $0200, left = $0300) ; $40: x position (out) ; $41: y position (out) 3A/9DA4: A6 66 LDX $66 3A/9DA6: BD 3E 9E LDA $9E3E,X ; sine table 3A/9DA9: 85 80 STA $80 3A/9DAB: A5 65 LDA $65 3A/9DAD: 85 81 STA $81 3A/9DAF: 20 1A 9E JSR $9E1A ; +$82 = $80 * $81 3A/9DB2: 85 88 STA $88 3A/9DB4: A5 66 LDA $66 3A/9DB6: 49 FF EOR #$FF ; negate to get cosine 3A/9DB8: AA TAX 3A/9DB9: BD 3E 9E LDA $9E3E,X ; sine table 3A/9DBC: 85 80 STA $80 3A/9DBE: A5 65 LDA $65 3A/9DC0: 85 81 STA $81 3A/9DC2: 20 1A 9E JSR $9E1A ; +$82 = $80 * $81 3A/9DC5: 85 89 STA $89 3A/9DC7: A5 67 LDA $67 3A/9DC9: 29 03 AND #$03 3A/9DCB: F0 3E BEQ $9E0B 3A/9DCD: C9 01 CMP #$01 3A/9DCF: D0 12 BNE $9DE3 ; 1: 3A/9DD1: A5 88 LDA $88 3A/9DD3: 48 PHA 3A/9DD4: A5 89 LDA $89 3A/9DD6: 85 88 STA $88 3A/9DD8: 68 PLA 3A/9DD9: 49 FF EOR #$FF 3A/9DDB: 18 CLC 3A/9DDC: 69 01 ADC #$01 3A/9DDE: 85 89 STA $89 3A/9DE0: 4C 0B 9E JMP $9E0B ; 2: 3A/9DE3: C9 02 CMP #$02 3A/9DE5: D0 15 BNE $9DFC 3A/9DE7: A5 88 LDA $88 3A/9DE9: 49 FF EOR #$FF 3A/9DEB: 18 CLC 3A/9DEC: 69 01 ADC #$01 3A/9DEE: 85 88 STA $88 3A/9DF0: A5 89 LDA $89 3A/9DF2: 49 FF EOR #$FF 3A/9DF4: 18 CLC 3A/9DF5: 69 01 ADC #$01 3A/9DF7: 85 89 STA $89 3A/9DF9: 4C 0B 9E JMP $9E0B ; 3: 3A/9DFC: A5 89 LDA $89 3A/9DFE: 48 PHA 3A/9DFF: A5 88 LDA $88 3A/9E01: 85 89 STA $89 3A/9E03: 68 PLA 3A/9E04: 49 FF EOR #$FF 3A/9E06: 18 CLC 3A/9E07: 69 01 ADC #$01 3A/9E09: 85 88 STA $88 3A/9E0B: A5 88 LDA $88 3A/9E0D: 18 CLC 3A/9E0E: 69 74 ADC #$74 3A/9E10: 85 40 STA $40 3A/9E12: A5 89 LDA $89 3A/9E14: 18 CLC 3A/9E15: 69 74 ADC #$74 3A/9E17: 85 41 STA $41 3A/9E19: 60 RTS ; [ +$82 = $80 * $81 ] 3A/9E1A: A9 00 LDA #$00 3A/9E1C: 85 82 STA $82 3A/9E1E: 85 83 STA $83 3A/9E20: 85 84 STA $84 3A/9E22: 46 80 LSR $80 3A/9E24: 90 0D BCC $9E33 3A/9E26: A5 82 LDA $82 3A/9E28: 18 CLC 3A/9E29: 65 81 ADC $81 3A/9E2B: 85 82 STA $82 3A/9E2D: A5 83 LDA $83 3A/9E2F: 65 84 ADC $84 3A/9E31: 85 83 STA $83 3A/9E33: 06 81 ASL $81 3A/9E35: 26 84 ROL $84 3A/9E37: A5 80 LDA $80 3A/9E39: D0 E7 BNE $9E22 3A/9E3B: A5 83 LDA $83 3A/9E3D: 60 RTS ; sine table ; can be reproduced (+/- 1) with round(sin(pi * x / 128) * 128) 3A/9E3E: 00 01 02 02 03 04 05 05 06 07 08 09 09 0A 0B 0C 3A/9E4E: 0D 0D 0E 0F 10 10 11 12 13 14 14 15 16 17 17 18 3A/9E5E: 19 1A 1A 1B 1C 1D 1E 1E 1F 20 21 21 22 23 24 24 3A/9E6E: 25 26 27 27 28 29 2A 2A 2B 2C 2D 2D 2E 2F 30 30 3A/9E7E: 31 32 32 33 34 35 35 36 37 37 38 39 3A 3A 3B 3C 3A/9E8E: 3C 3D 3E 3E 3F 40 40 41 42 42 43 44 44 45 46 46 3A/9E9E: 47 48 48 49 4A 4A 4B 4C 4C 4D 4D 4E 4F 4F 50 51 3A/9EAE: 51 52 52 53 54 54 55 55 56 57 57 58 58 59 59 5A 3A/9EBE: 5A 5B 5C 5C 5D 5D 5E 5E 5F 60 60 61 61 62 62 63 3A/9ECE: 63 64 64 65 65 66 66 67 67 68 68 69 69 6A 6A 6A 3A/9EDE: 6B 6B 6C 6C 6D 6D 6D 6E 6E 6F 6F 6F 70 70 70 71 3A/9EEE: 71 72 72 72 73 73 73 74 74 74 75 75 75 76 76 76 3A/9EFE: 77 77 77 77 78 78 78 78 79 79 79 7A 7A 7A 7A 7A 3A/9F0E: 7B 7B 7B 7B 7C 7C 7C 7C 7C 7D 7D 7D 7D 7D 7E 7E 3A/9F1E: 7E 7E 7E 7E 7E 7E 7E 7F 7F 7F 7F 7F 7F 7F 7F 7F 3A/9F2E: 7F 80 80 80 80 80 80 80 80 80 80 80 80 80 80 80 ; uninitialized padding 3A/9F3E: FF DF 3A/9F40: FF F7 FF F7 EF 77 FF DF FF FF FF 57 FF D7 FF F7 3A/9F50: FF 7F FF FF FF 5D FF DF FF 57 FF F5 FF 7F FF F7 3A/9F60: FF F5 FF 7F FF FF FF 7D FF 75 FF FF FF DF FF 5F 3A/9F70: FF F7 FF DD FF 7F FF 7D FF F7 FF 7D FF F7 FF FF 3A/9F80: FF FF FF FF FF DF FF 7F FF 7F FF 5D FF DF FF FD ; unused ??? 3A/9F90: 00 8F 90 91 92 93 94 95 96 97 98 99 9A 9B 9C 9D 3A/9FA0: A3 A4 A5 A6 A7 A3 A4 A5 A6 A7 CC CF D0 D1 D2 D3 3A/9FB0: D4 D5 D6 D7 D8 D9 DA DB DC DD E3 E4 E5 A6 E7 E3 3A/9FC0: E4 E5 A6 E7 00 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 3A/9FD0: C0 C0 C0 C0 C0 C0 C0 C0 C0 C1 C1 C1 C1 C1 C0 C0 3A/9FE0: C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 3A/9FF0: C0 C0 C0 C1 C1 C1 C1 C1 FF FD FF FF FF FF FF FD ; -------------------------------------------------------------------------- 3B/A000: 4C 67 A0 JMP $A067 ; execute event command 3B/A003: 4C 77 A0 JMP $A077 ; execute object command ; [ play world map song ] 3B/A006: A5 78 LDA $78 ; world id 3B/A008: F0 03 BEQ $A00D 3B/A00A: 38 SEC 3B/A00B: E9 01 SBC #$01 3B/A00D: 0A ASL 3B/A00E: 0A ASL 3B/A00F: 0A ASL 3B/A010: 05 46 ORA $46 ; vehicle id 3B/A012: AA TAX 3B/A013: BD 27 A0 LDA $A027,X ; song id 3B/A016: 8D 43 7F STA $7F43 3B/A019: A9 01 LDA #$01 ; play new song 3B/A01B: 8D 42 7F STA $7F42 3B/A01E: BD 47 A0 LDA $A047,X ; sound effect id 3B/A021: 09 80 ORA #$80 3B/A023: 8D 49 7F STA $7F49 3B/A026: 60 RTS ; world map songs (8 bytes per world, 1 byte per vehicle) 3B/A027: 1E 08 1E 22 0A 0A 0A 23 3B/A02F: 2F 08 2F 2F 2F 0A 0A 23 3B/A037: 1E 08 1E 22 0A 0A 0A 23 3B/A03F: 1E 08 1E 22 09 09 15 23 ; world map sound effects (8 bytes per world, 1 byte per vehicle) 3B/A047: FF FF FF 04 26 25 27 28 3B/A04F: FF FF FF 04 26 25 27 28 3B/A057: FF FF FF 04 26 25 27 28 3B/A05F: FF FF FF 04 26 25 2B 28 ; [ execute event command ] 3B/A067: A9 00 LDA #$00 ; clear buttons pressed 3B/A069: 85 24 STA $24 3B/A06B: 85 25 STA $25 3B/A06D: 85 23 STA $23 3B/A06F: 85 22 STA $22 3B/A071: 85 20 STA $20 3B/A073: 4C 2B A1 JMP $A12B ; [ unused object command ] ; 5 and 9 3B/A076: 60 RTS ; [ execute object command ] 3B/A077: 8A TXA 3B/A078: 0A ASL 3B/A079: AA TAX 3B/A07A: BD 87 A0 LDA $A087,X 3B/A07D: 85 80 STA $80 3B/A07F: BD 88 A0 LDA $A088,X 3B/A082: 85 81 STA $81 3B/A084: 6C 80 00 JMP ($0080) ; object command jump table 3B/A087: A4AF A1CE A4A4 A09B A0B1 A076 AEEB B2FD 3B/A097: AF7F A076 ; [ object command 3: do floor damage ] 3B/A09B: A5 F0 LDA $F0 3B/A09D: 29 01 AND #$01 ; toggle grayscale every frame 3B/A09F: 09 1E ORA #$1E 3B/A0A1: 8D 01 20 STA $2001 3B/A0A4: A5 34 LDA $34 3B/A0A6: D0 08 BNE $A0B0 3B/A0A8: A9 C0 LDA #$C0 ; play sound effect $40 3B/A0AA: 8D 49 7F STA $7F49 3B/A0AD: 4C 00 A1 JMP $A100 ; decrement party hp 3B/A0B0: 60 RTS ; [ object command 4: poison step damage ] 3B/A0B1: AD 02 61 LDA $6102 3B/A0B4: C9 40 CMP #$40 3B/A0B6: B0 04 BCS $A0BC ; branch if char 1 is dead or stone 3B/A0B8: 29 02 AND #$02 3B/A0BA: D0 22 BNE $A0DE ; branch if char 1 is poisoned 3B/A0BC: AD 42 61 LDA $6142 3B/A0BF: C9 40 CMP #$40 3B/A0C1: B0 04 BCS $A0C7 ; same for char 2-4 3B/A0C3: 29 02 AND #$02 3B/A0C5: D0 17 BNE $A0DE 3B/A0C7: AD 82 61 LDA $6182 3B/A0CA: C9 40 CMP #$40 3B/A0CC: B0 04 BCS $A0D2 3B/A0CE: 29 02 AND #$02 3B/A0D0: D0 0C BNE $A0DE 3B/A0D2: AD C2 61 LDA $61C2 3B/A0D5: C9 40 CMP #$40 3B/A0D7: B0 04 BCS $A0DD 3B/A0D9: 29 02 AND #$02 3B/A0DB: D0 01 BNE $A0DE 3B/A0DD: 60 RTS 3B/A0DE: A5 34 LDA $34 ; 3B/A0E0: F0 01 BEQ $A0E3 3B/A0E2: 60 RTS 3B/A0E3: A9 96 LDA #$96 ; play sound effect $16 3B/A0E5: 8D 49 7F STA $7F49 3B/A0E8: A2 00 LDX #$00 3B/A0EA: BD 02 61 LDA $6102,X 3B/A0ED: C9 40 CMP #$40 3B/A0EF: B0 07 BCS $A0F8 ; branch if dead or stone 3B/A0F1: 29 02 AND #$02 3B/A0F3: F0 03 BEQ $A0F8 ; branch if not poisoned 3B/A0F5: 20 0D A1 JSR $A10D ; decrement character hp 3B/A0F8: 8A TXA 3B/A0F9: 18 CLC 3B/A0FA: 69 40 ADC #$40 3B/A0FC: AA TAX 3B/A0FD: D0 EB BNE $A0EA 3B/A0FF: 60 RTS ; [ decrement party hp ] 3B/A100: A2 00 LDX #$00 3B/A102: 20 0D A1 JSR $A10D ; decrement character hp 3B/A105: 8A TXA 3B/A106: 18 CLC 3B/A107: 69 40 ADC #$40 3B/A109: AA TAX 3B/A10A: D0 F6 BNE $A102 3B/A10C: 60 RTS ; [ decrement character hp ] 3B/A10D: BD 0D 61 LDA $610D,X ; decrement hp 3B/A110: D0 07 BNE $A119 3B/A112: BD 0C 61 LDA $610C,X 3B/A115: C9 02 CMP #$02 ; min hp is 1 3B/A117: 90 11 BCC $A12A 3B/A119: BD 0C 61 LDA $610C,X 3B/A11C: 38 SEC 3B/A11D: E9 01 SBC #$01 3B/A11F: 9D 0C 61 STA $610C,X 3B/A122: BD 0D 61 LDA $610D,X 3B/A125: E9 00 SBC #$00 3B/A127: 9D 0D 61 STA $610D,X 3B/A12A: 60 RTS ; [ execute event command ] 3B/A12B: A5 70 LDA $70 3B/A12D: C9 C0 CMP #$C0 3B/A12F: B0 03 BCS $A134 3B/A131: 4C D1 AC JMP $ACD1 ; jump if $00-$BF (npc command) 3B/A134: C9 D0 CMP #$D0 3B/A136: 90 03 BCC $A13B 3B/A138: 4C 3F B5 JMP $B53F ; jump if $D0-$FF ; event commands $C0-$CF (player commands) 3B/A13B: A5 70 LDA $70 3B/A13D: 29 0F AND #$0F 3B/A13F: C9 04 CMP #$04 ; $C0-$C3: move player 3B/A141: B0 07 BCS $A14A 3B/A143: AA TAX 3B/A144: BD CA A1 LDA $A1CA,X 3B/A147: 85 20 STA $20 3B/A149: 60 RTS ; $C4-$C7: change facing direction 3B/A14A: C9 08 CMP #$08 3B/A14C: B0 09 BCS $A157 3B/A14E: 29 03 AND #$03 3B/A150: AA TAX 3B/A151: BD CA A1 LDA $A1CA,X 3B/A154: 85 33 STA $33 3B/A156: 60 RTS ; $C8: show player 3B/A157: C9 08 CMP #$08 3B/A159: D0 07 BNE $A162 3B/A15B: A5 7E LDA $7E 3B/A15D: 29 7F AND #$7F 3B/A15F: 85 7E STA $7E 3B/A161: 60 RTS ; $C9: hide player 3B/A162: C9 09 CMP #$09 3B/A164: D0 07 BNE $A16D 3B/A166: A5 7E LDA $7E 3B/A168: 09 80 ORA #$80 3B/A16A: 85 7E STA $7E 3B/A16C: 60 RTS ; $CA: set vehicle to nautilus 3B/A16D: C9 0A CMP #$0A 3B/A16F: D0 07 BNE $A178 3B/A171: A9 06 LDA #$06 ; nautilus ??? 3B/A173: 85 42 STA $42 3B/A175: 85 46 STA $46 3B/A177: 60 RTS ; $CB: set vehicle to invincible 3B/A178: C9 0B CMP #$0B 3B/A17A: D0 07 BNE $A183 3B/A17C: A9 07 LDA #$07 ; invincible 3B/A17E: 85 42 STA $42 3B/A180: 85 46 STA $46 3B/A182: 60 RTS ; $CC: show guest npc 3B/A183: C9 0C CMP #$0C 3B/A185: D0 07 BNE $A18E 3B/A187: A5 7E LDA $7E 3B/A189: 29 BF AND #$BF 3B/A18B: 85 7E STA $7E 3B/A18D: 60 RTS ; $CD: hide guest npc 3B/A18E: C9 0D CMP #$0D 3B/A190: D0 07 BNE $A199 3B/A192: A5 7E LDA $7E 3B/A194: 09 40 ORA #$40 3B/A196: 85 7E STA $7E 3B/A198: 60 RTS ; $CE: get off vehicle 3B/A199: C9 0E CMP #$0E 3B/A19B: D0 21 BNE $A1BE 3B/A19D: A9 00 LDA #$00 ; no vehicle 3B/A19F: 85 42 STA $42 3B/A1A1: 85 46 STA $46 3B/A1A3: A5 78 LDA $78 3B/A1A5: 8D 07 60 STA $6007 3B/A1A8: A5 27 LDA $27 3B/A1AA: 18 CLC 3B/A1AB: 69 07 ADC #$07 3B/A1AD: 8D 05 60 STA $6005 3B/A1B0: A5 28 LDA $28 3B/A1B2: 18 CLC 3B/A1B3: 69 07 ADC #$07 3B/A1B5: 8D 06 60 STA $6006 3B/A1B8: A9 01 LDA #$01 3B/A1BA: 8D 04 60 STA $6004 3B/A1BD: 60 RTS ; $CF: set vehicle to chocobo 3B/A1BE: C9 0F CMP #$0F 3B/A1C0: D0 07 BNE $A1C9 3B/A1C2: A9 01 LDA #$01 ; chocobo 3B/A1C4: 85 42 STA $42 3B/A1C6: 85 46 STA $46 3B/A1C8: 60 RTS 3B/A1C9: 60 RTS ; movement flags (right, left, down, up) 3B/A1CA: 01 02 04 08 ; [ object command 1: update chocobo position ??? ] 3B/A1CE: A5 B1 LDA $B1 3B/A1D0: 18 CLC 3B/A1D1: 69 02 ADC #$02 3B/A1D3: 85 B1 STA $B1 3B/A1D5: C9 F8 CMP #$F8 3B/A1D7: 90 01 BCC $A1DA 3B/A1D9: 60 RTS 3B/A1DA: 85 40 STA $40 3B/A1DC: 29 08 AND #$08 3B/A1DE: 85 80 STA $80 3B/A1E0: A9 70 LDA #$70 3B/A1E2: 85 82 STA $82 3B/A1E4: A5 F0 LDA $F0 3B/A1E6: 10 04 BPL $A1EC 3B/A1E8: A9 01 LDA #$01 3B/A1EA: D0 02 BNE $A1EE 3B/A1EC: A9 FF LDA #$FF 3B/A1EE: 18 CLC 3B/A1EF: 65 B2 ADC $B2 3B/A1F1: 85 B2 STA $B2 3B/A1F3: 85 41 STA $41 3B/A1F5: 18 CLC 3B/A1F6: 60 RTS ; -------------------------------------------------------------------------- ; [ special animation D: circling stars ] 3B/A1F7: A9 00 LDA #$00 3B/A1F9: 8D 01 71 STA $7101 3B/A1FC: A9 00 LDA #$00 3B/A1FE: 85 62 STA $62 3B/A200: 85 63 STA $63 3B/A202: A9 EA LDA #$EA 3B/A204: 85 65 STA $65 3B/A206: 20 42 A8 JSR $A842 ; reset sprite data 3B/A209: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A20C: 20 42 A8 JSR $A842 ; reset sprite data 3B/A20F: A0 00 LDY #$00 3B/A211: 20 1B C0 JSR $C01B ; update player sprites 3B/A214: 20 30 A2 JSR $A230 3B/A217: A5 62 LDA $62 3B/A219: 18 CLC 3B/A21A: 69 04 ADC #$04 3B/A21C: 85 62 STA $62 3B/A21E: A5 63 LDA $63 3B/A220: 69 00 ADC #$00 3B/A222: 85 63 STA $63 3B/A224: A5 65 LDA $65 3B/A226: 38 SEC 3B/A227: E9 02 SBC #$02 3B/A229: 85 65 STA $65 3B/A22B: C9 0C CMP #$0C 3B/A22D: B0 DA BCS $A209 3B/A22F: 60 RTS ; [ ] 3B/A230: A9 08 LDA #$08 3B/A232: 85 8E STA $8E 3B/A234: A5 62 LDA $62 3B/A236: 85 66 STA $66 3B/A238: A5 63 LDA $63 3B/A23A: 85 67 STA $67 3B/A23C: 20 69 AB JSR $AB69 ; calculate projectile sprite position 3B/A23F: A5 40 LDA $40 3B/A241: 38 SEC 3B/A242: E9 04 SBC #$04 3B/A244: 85 40 STA $40 3B/A246: A5 41 LDA $41 3B/A248: 38 SEC 3B/A249: E9 04 SBC #$04 3B/A24B: 85 41 STA $41 3B/A24D: A2 00 LDX #$00 3B/A24F: 20 36 B2 JSR $B236 3B/A252: A5 66 LDA $66 3B/A254: 18 CLC 3B/A255: 69 80 ADC #$80 3B/A257: 85 66 STA $66 3B/A259: A5 67 LDA $67 3B/A25B: 69 00 ADC #$00 3B/A25D: 85 67 STA $67 3B/A25F: C6 8E DEC $8E 3B/A261: D0 D9 BNE $A23C 3B/A263: 60 RTS ; [ special animation C: bahamut attacks ] 3B/A264: A9 00 LDA #$00 3B/A266: 85 64 STA $64 3B/A268: 85 65 STA $65 3B/A26A: A5 E6 LDA $E6 3B/A26C: 29 FE AND #$FE 3B/A26E: 38 SEC 3B/A26F: E9 70 SBC #$70 3B/A271: 10 07 BPL $A27A 3B/A273: 49 FF EOR #$FF 3B/A275: 18 CLC 3B/A276: 69 01 ADC #$01 3B/A278: C6 64 DEC $64 3B/A27A: 85 62 STA $62 3B/A27C: A5 E7 LDA $E7 3B/A27E: 29 FE AND #$FE 3B/A280: 38 SEC 3B/A281: E9 70 SBC #$70 3B/A283: 10 07 BPL $A28C 3B/A285: 49 FF EOR #$FF 3B/A287: 18 CLC 3B/A288: 69 01 ADC #$01 3B/A28A: C6 65 DEC $65 3B/A28C: 85 63 STA $63 3B/A28E: A9 00 LDA #$00 3B/A290: 85 61 STA $61 3B/A292: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A295: 20 42 A8 JSR $A842 ; reset sprite data 3B/A298: A4 42 LDY $42 3B/A29A: 20 1B C0 JSR $C01B ; update player sprites 3B/A29D: 20 C0 A2 JSR $A2C0 3B/A2A0: A5 E6 LDA $E6 3B/A2A2: 85 40 STA $40 3B/A2A4: A5 E7 LDA $E7 3B/A2A6: 85 41 STA $41 3B/A2A8: 20 DA A7 JSR $A7DA 3B/A2AB: A5 E6 LDA $E6 3B/A2AD: C9 70 CMP #$70 3B/A2AF: D0 E1 BNE $A292 3B/A2B1: A5 E7 LDA $E7 3B/A2B3: C9 70 CMP #$70 3B/A2B5: D0 DB BNE $A292 3B/A2B7: AD 2F 60 LDA $602F 3B/A2BA: 09 40 ORA #$40 3B/A2BC: 8D 2F 60 STA $602F 3B/A2BF: 60 RTS ; [ ] 3B/A2C0: A5 62 LDA $62 3B/A2C2: C5 63 CMP $63 3B/A2C4: B0 16 BCS $A2DC 3B/A2C6: 20 07 A3 JSR $A307 3B/A2C9: A5 61 LDA $61 3B/A2CB: 18 CLC 3B/A2CC: 65 62 ADC $62 3B/A2CE: C5 63 CMP $63 3B/A2D0: 90 07 BCC $A2D9 3B/A2D2: E5 63 SBC $63 3B/A2D4: 85 61 STA $61 3B/A2D6: 4C EF A2 JMP $A2EF 3B/A2D9: 85 61 STA $61 3B/A2DB: 60 RTS 3B/A2DC: 20 EF A2 JSR $A2EF 3B/A2DF: A5 61 LDA $61 3B/A2E1: 18 CLC 3B/A2E2: 65 63 ADC $63 3B/A2E4: C5 62 CMP $62 3B/A2E6: 90 F1 BCC $A2D9 3B/A2E8: E5 62 SBC $62 3B/A2EA: 85 61 STA $61 3B/A2EC: 4C 07 A3 JMP $A307 ; [ ] 3B/A2EF: A5 E6 LDA $E6 3B/A2F1: 29 FE AND #$FE 3B/A2F3: C9 70 CMP #$70 3B/A2F5: F0 0F BEQ $A306 3B/A2F7: 24 64 BIT $64 3B/A2F9: 10 06 BPL $A301 3B/A2FB: 18 CLC 3B/A2FC: 69 02 ADC #$02 3B/A2FE: 85 E6 STA $E6 3B/A300: 60 RTS 3B/A301: 38 SEC 3B/A302: E9 02 SBC #$02 3B/A304: 85 E6 STA $E6 3B/A306: 60 RTS ; [ ] 3B/A307: A5 E7 LDA $E7 3B/A309: 29 FE AND #$FE 3B/A30B: C9 70 CMP #$70 3B/A30D: F0 F7 BEQ $A306 3B/A30F: 24 65 BIT $65 3B/A311: 10 06 BPL $A319 3B/A313: 18 CLC 3B/A314: 69 02 ADC #$02 3B/A316: 85 E7 STA $E7 3B/A318: 60 RTS 3B/A319: 38 SEC 3B/A31A: E9 02 SBC #$02 3B/A31C: 85 E7 STA $E7 3B/A31E: 60 RTS ; [ special animation A: ] 3B/A31F: A9 B0 LDA #$B0 3B/A321: 85 66 STA $66 3B/A323: A9 01 LDA #$01 3B/A325: 85 67 STA $67 3B/A327: A9 FF LDA #$FF 3B/A329: 85 65 STA $65 3B/A32B: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A32E: 20 42 A8 JSR $A842 ; reset sprite data 3B/A331: A4 42 LDY $42 3B/A333: 20 1B C0 JSR $C01B ; update player sprites 3B/A336: 20 D6 A3 JSR $A3D6 3B/A339: A5 66 LDA $66 3B/A33B: 18 CLC 3B/A33C: 69 02 ADC #$02 3B/A33E: 85 66 STA $66 3B/A340: A5 67 LDA $67 3B/A342: 69 00 ADC #$00 3B/A344: 85 67 STA $67 3B/A346: A5 65 LDA $65 3B/A348: 38 SEC 3B/A349: E9 01 SBC #$01 3B/A34B: 85 65 STA $65 3B/A34D: C9 60 CMP #$60 3B/A34F: B0 DA BCS $A32B 3B/A351: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A354: 20 42 A8 JSR $A842 ; reset sprite data 3B/A357: A4 42 LDY $42 3B/A359: 20 1B C0 JSR $C01B ; update player sprites 3B/A35C: 20 D6 A3 JSR $A3D6 3B/A35F: A5 66 LDA $66 3B/A361: 18 CLC 3B/A362: 69 04 ADC #$04 3B/A364: 85 66 STA $66 3B/A366: A5 67 LDA $67 3B/A368: 69 00 ADC #$00 3B/A36A: 85 67 STA $67 3B/A36C: 29 03 AND #$03 3B/A36E: C9 02 CMP #$02 3B/A370: D0 DF BNE $A351 3B/A372: A5 66 LDA $66 3B/A374: D0 DB BNE $A351 3B/A376: 60 RTS ; [ special animation B: ] 3B/A377: A9 50 LDA #$50 3B/A379: 85 66 STA $66 3B/A37B: A9 01 LDA #$01 3B/A37D: 85 67 STA $67 3B/A37F: A9 FF LDA #$FF 3B/A381: 85 65 STA $65 3B/A383: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A386: 20 42 A8 JSR $A842 ; reset sprite data 3B/A389: A0 00 LDY #$00 3B/A38B: 20 1B C0 JSR $C01B ; update player sprites 3B/A38E: 20 D6 A3 JSR $A3D6 3B/A391: A5 66 LDA $66 3B/A393: 18 CLC 3B/A394: 69 01 ADC #$01 3B/A396: 85 66 STA $66 3B/A398: A5 67 LDA $67 3B/A39A: 69 00 ADC #$00 3B/A39C: 85 67 STA $67 3B/A39E: A5 65 LDA $65 3B/A3A0: 38 SEC 3B/A3A1: E9 03 SBC #$03 3B/A3A3: 85 65 STA $65 3B/A3A5: C9 30 CMP #$30 3B/A3A7: B0 DA BCS $A383 3B/A3A9: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A3AC: 20 42 A8 JSR $A842 ; reset sprite data 3B/A3AF: A9 20 LDA #$20 3B/A3B1: 85 26 STA $26 3B/A3B3: 20 D6 A3 JSR $A3D6 3B/A3B6: A9 00 LDA #$00 3B/A3B8: 85 26 STA $26 3B/A3BA: 20 6A A9 JSR $A96A 3B/A3BD: A5 66 LDA $66 3B/A3BF: 18 CLC 3B/A3C0: 69 02 ADC #$02 3B/A3C2: 85 66 STA $66 3B/A3C4: A5 67 LDA $67 3B/A3C6: 69 00 ADC #$00 3B/A3C8: 85 67 STA $67 3B/A3CA: A5 65 LDA $65 3B/A3CC: 18 CLC 3B/A3CD: 69 02 ADC #$02 3B/A3CF: 85 65 STA $65 3B/A3D1: C9 F8 CMP #$F8 3B/A3D3: 90 D4 BCC $A3A9 3B/A3D5: 60 RTS ; [ ] 3B/A3D6: 20 69 AB JSR $AB69 ; calculate projectile sprite position 3B/A3D9: A5 40 LDA $40 3B/A3DB: 38 SEC 3B/A3DC: E9 0C SBC #$0C 3B/A3DE: 85 40 STA $40 3B/A3E0: A5 41 LDA $41 3B/A3E2: 38 SEC 3B/A3E3: E9 0C SBC #$0C 3B/A3E5: 85 41 STA $41 3B/A3E7: 4C DA A7 JMP $A7DA ; [ show saronia cannon balls ] ; ball 1 3B/A3EA: A9 00 LDA #$00 ; initial angle: $0100 (right) 3B/A3EC: 85 66 STA $66 3B/A3EE: A9 01 LDA #$01 3B/A3F0: 85 67 STA $67 3B/A3F2: A9 FF LDA #$FF ; initial radius: 127 (127 frames) 3B/A3F4: 85 65 STA $65 3B/A3F6: A9 02 LDA #$02 ; speed: 2 (counterclockwise) 3B/A3F8: 85 62 STA $62 3B/A3FA: 20 33 A4 JSR $A433 ; ball 2 3B/A3FD: A9 00 LDA #$00 ; initial angle: $0300 (left) 3B/A3FF: 85 66 STA $66 3B/A401: A9 03 LDA #$03 3B/A403: 85 67 STA $67 3B/A405: A9 E8 LDA #$E8 ; initial radius: 116 (116 frames) 3B/A407: 85 65 STA $65 3B/A409: A9 82 LDA #$82 ; speed: -2 (clockwise) 3B/A40B: 85 62 STA $62 3B/A40D: 20 33 A4 JSR $A433 ; ball 3 3B/A410: A9 80 LDA #$80 ; initial angle: $0180 (up/right) 3B/A412: 85 66 STA $66 3B/A414: A9 01 LDA #$01 3B/A416: 85 67 STA $67 3B/A418: A9 FF LDA #$FF ; initial radius: 127 (63 frames) 3B/A41A: 85 65 STA $65 3B/A41C: A9 04 LDA #$04 ; speed: 4 (counterclockwise) 3B/A41E: 85 62 STA $62 3B/A420: 20 33 A4 JSR $A433 ; ball 4 3B/A423: A9 50 LDA #$50 ; initial angle: $0250 (up/left) 3B/A425: 85 66 STA $66 3B/A427: A9 02 LDA #$02 3B/A429: 85 67 STA $67 3B/A42B: A9 FF LDA #$FF ; initial radius: 127 (63 frames) 3B/A42D: 85 65 STA $65 3B/A42F: A9 84 LDA #$84 ; speed: -4 (clockwise) 3B/A431: 85 62 STA $62 ; fallthrough ; [ saronia cannon ball ] ; cannonballs follow a weird trajectory defined by the parametric equation ; x = R * t * cos(pi / 2 * (1 - t)) ; y = R * t * sin(pi / 2 * (1 - t)) ; where R is the initial radius and t runs from 0 to 1 ; it sort of looks like projectile motion with drag 3B/A433: A9 00 LDA #$00 3B/A435: 85 BC STA $BC 3B/A437: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A43A: 20 42 A8 JSR $A842 ; reset sprite data 3B/A43D: A4 42 LDY $42 3B/A43F: 20 1B C0 JSR $C01B ; update player sprites 3B/A442: 20 84 A4 JSR $A484 ; update saronia cannonball sprite 3B/A445: E6 BC INC $BC 3B/A447: A5 62 LDA $62 3B/A449: 30 0E BMI $A459 3B/A44B: A5 66 LDA $66 3B/A44D: 18 CLC 3B/A44E: 69 02 ADC #$02 ; add to angle 3B/A450: 85 66 STA $66 3B/A452: A5 67 LDA $67 3B/A454: 69 00 ADC #$00 3B/A456: 4C 64 A4 JMP $A464 3B/A459: A5 66 LDA $66 3B/A45B: 38 SEC 3B/A45C: E9 02 SBC #$02 ; subtract from angle 3B/A45E: 85 66 STA $66 3B/A460: A5 67 LDA $67 3B/A462: E9 00 SBC #$00 3B/A464: 85 67 STA $67 3B/A466: A5 62 LDA $62 3B/A468: 29 0F AND #$0F 3B/A46A: 85 80 STA $80 3B/A46C: A5 65 LDA $65 ; decrease radius 3B/A46E: 38 SEC 3B/A46F: E5 80 SBC $80 3B/A471: 85 65 STA $65 3B/A473: C9 20 CMP #$20 3B/A475: B0 C0 BCS $A437 3B/A477: AD 2F 60 LDA $602F ; make player sprite spin 3B/A47A: 09 40 ORA #$40 3B/A47C: 8D 2F 60 STA $602F 3B/A47F: A9 00 LDA #$00 ; reset spinning sprite counter 3B/A481: 85 19 STA $19 3B/A483: 60 RTS ; [ update saronia cannonball sprite ] 3B/A484: 20 69 AB JSR $AB69 ; calculate projectile sprite position 3B/A487: A6 26 LDX $26 3B/A489: A5 41 LDA $41 3B/A48B: 9D 00 02 STA $0200,X 3B/A48E: A5 40 LDA $40 3B/A490: 9D 03 02 STA $0203,X 3B/A493: A9 03 LDA #$03 3B/A495: 9D 02 02 STA $0202,X 3B/A498: A9 B5 LDA #$B5 3B/A49A: 9D 01 02 STA $0201,X 3B/A49D: E8 INX 3B/A49E: E8 INX 3B/A49F: E8 INX 3B/A4A0: E8 INX 3B/A4A1: 86 26 STX $26 3B/A4A3: 60 RTS ; [ object command 2: ] ; hein's castle ??? 3B/A4A4: A9 02 LDA #$02 ; speed: 2 3B/A4A6: 85 80 STA $80 3B/A4A8: A9 30 LDA #$30 ; radius: 24 3B/A4AA: 85 65 STA $65 3B/A4AC: 4C C3 A4 JMP $A4C3 ; update hein's castle sprite position ; [ object command 0: ] ; hein's castle ??? 3B/A4AF: A9 01 LDA #$01 ; speed: 1 3B/A4B1: 85 80 STA $80 3B/A4B3: A9 40 LDA #$40 ; radius: 32 3B/A4B5: 85 65 STA $65 3B/A4B7: 20 C3 A4 JSR $A4C3 ; update hein's castle sprite position 3B/A4BA: A5 81 LDA $81 ; x position 3B/A4BC: 85 DE STA $DE 3B/A4BE: A5 83 LDA $83 ; y position 3B/A4C0: 85 DF STA $DF 3B/A4C2: 60 RTS ; [ update hein's castle sprite position ] 3B/A4C3: A5 BD LDA $BD ; decrement angle 3B/A4C5: 38 SEC 3B/A4C6: E5 80 SBC $80 3B/A4C8: 85 BD STA $BD 3B/A4CA: 85 66 STA $66 3B/A4CC: A5 BE LDA $BE 3B/A4CE: E9 00 SBC #$00 3B/A4D0: 85 BE STA $BE 3B/A4D2: 85 67 STA $67 3B/A4D4: 20 69 AB JSR $AB69 ; calculate projectile sprite position 3B/A4D7: A5 40 LDA $40 3B/A4D9: 38 SEC 3B/A4DA: E9 54 SBC #$54 3B/A4DC: A8 TAY 3B/A4DD: 29 0F AND #$0F 3B/A4DF: 85 80 STA $80 ; subtile x position 3B/A4E1: 98 TYA 3B/A4E2: 4A LSR 3B/A4E3: 4A LSR 3B/A4E4: 4A LSR 3B/A4E5: 4A LSR 3B/A4E6: 85 81 STA $81 ; tile x position 3B/A4E8: A5 41 LDA $41 3B/A4EA: 38 SEC 3B/A4EB: E9 54 SBC #$54 3B/A4ED: A8 TAY 3B/A4EE: 29 0F AND #$0F 3B/A4F0: 85 82 STA $82 ; subtile y position 3B/A4F2: 98 TYA 3B/A4F3: 4A LSR 3B/A4F4: 4A LSR 3B/A4F5: 4A LSR 3B/A4F6: 4A LSR 3B/A4F7: 85 83 STA $83 ; tile y position 3B/A4F9: 60 RTS ; [ special animation ] ; 0: 3B/A4FA: D0 03 BNE $A4FF 3B/A4FC: 4C A9 A8 JMP $A8A9 ; 1: airship/boulder explosion 3B/A4FF: C9 01 CMP #$01 3B/A501: D0 0B BNE $A50E 3B/A503: 20 15 BA JSR $BA15 ; init guest npc 3B/A506: A9 3A LDA #$3A 3B/A508: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/A50B: 4C 1E 85 JMP $851E ; airship/boulder explosion ; 2: 3B/A50E: C9 02 CMP #$02 3B/A510: D0 03 BNE $A515 3B/A512: 4C 09 A6 JMP $A609 ; 3: 3B/A515: C9 03 CMP #$03 3B/A517: D0 03 BNE $A51C 3B/A519: 4C 31 A6 JMP $A631 ; 4: airship shot down in saronia 3B/A51C: C9 04 CMP #$04 3B/A51E: D0 0B BNE $A52B 3B/A520: 20 EA A3 JSR $A3EA ; saronia cannon balls 3B/A523: A9 3A LDA #$3A 3B/A525: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/A528: 4C 27 85 JMP $8527 ; airship shot down in saronia ; 5: destroy statue 1 (fire fang) 3B/A52B: C9 05 CMP #$05 3B/A52D: D0 12 BNE $A541 3B/A52F: 20 06 A8 JSR $A806 ; destroy statue animation 3B/A532: AD 2E 60 LDA $602E ; statue 1 destroyed 3B/A535: 09 02 ORA #$02 3B/A537: 8D 2E 60 STA $602E 3B/A53A: A2 40 LDX #$40 3B/A53C: A0 00 LDY #$00 3B/A53E: 4C BA A9 JMP $A9BA ; 6: destroy statue 2 (water fang) 3B/A541: C9 06 CMP #$06 3B/A543: D0 12 BNE $A557 3B/A545: 20 06 A8 JSR $A806 ; destroy statue animation 3B/A548: AD 2E 60 LDA $602E ; statue 2 destroyed 3B/A54B: 09 04 ORA #$04 3B/A54D: 8D 2E 60 STA $602E 3B/A550: A2 41 LDX #$41 3B/A552: A0 00 LDY #$00 3B/A554: 4C BA A9 JMP $A9BA ; 7: destroy statue 3 (wind fang) 3B/A557: C9 07 CMP #$07 3B/A559: D0 12 BNE $A56D 3B/A55B: 20 06 A8 JSR $A806 ; destroy statue animation 3B/A55E: AD 2E 60 LDA $602E ; statue 3 destroyed 3B/A561: 09 08 ORA #$08 3B/A563: 8D 2E 60 STA $602E 3B/A566: A2 42 LDX #$42 3B/A568: A0 00 LDY #$00 3B/A56A: 4C BA A9 JMP $A9BA ; 8: destroy statue 4 (earth fang) 3B/A56D: C9 08 CMP #$08 3B/A56F: D0 12 BNE $A583 3B/A571: 20 06 A8 JSR $A806 ; destroy statue animation 3B/A574: AD 2E 60 LDA $602E ; statue 4 destroyed 3B/A577: 09 10 ORA #$10 3B/A579: 8D 2E 60 STA $602E 3B/A57C: A2 43 LDX #$43 3B/A57E: A0 00 LDY #$00 3B/A580: 4C BA A9 JMP $A9BA ; 9: invincible rises from the ocean 3B/A583: C9 09 CMP #$09 3B/A585: D0 03 BNE $A58A 3B/A587: 4C 6A A6 JMP $A66A ; A: 3B/A58A: C9 0A CMP #$0A 3B/A58C: D0 03 BNE $A591 3B/A58E: 4C 1F A3 JMP $A31F ; B: 3B/A591: C9 0B CMP #$0B 3B/A593: D0 03 BNE $A598 3B/A595: 4C 77 A3 JMP $A377 ; C: bahamut attacks 3B/A598: C9 0C CMP #$0C 3B/A59A: D0 03 BNE $A59F 3B/A59C: 4C 64 A2 JMP $A264 ; D: circling of stars 3B/A59F: C9 0D CMP #$0D 3B/A5A1: D0 03 BNE $A5A6 3B/A5A3: 4C F7 A1 JMP $A1F7 ; E: open saronia gate 3B/A5A6: C9 0E CMP #$0E 3B/A5A8: D0 0F BNE $A5B9 3B/A5AA: AD 2E 60 LDA $602E ; saronia gate opened 3B/A5AD: 09 20 ORA #$20 3B/A5AF: 8D 2E 60 STA $602E 3B/A5B2: A2 4A LDX #$4A 3B/A5B4: A0 03 LDY #$03 3B/A5B6: 4C BA A9 JMP $A9BA ; F: no effect 3B/A5B9: C9 0F CMP #$0F 3B/A5BB: D0 00 BNE $A5BD 3B/A5BD: 60 RTS ; [ ] 3B/A5BE: A9 00 LDA #$00 3B/A5C0: 85 BC STA $BC 3B/A5C2: 20 42 A8 JSR $A842 ; reset sprite data 3B/A5C5: AD 2F 60 LDA $602F 3B/A5C8: 09 40 ORA #$40 3B/A5CA: 8D 2F 60 STA $602F 3B/A5CD: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A5D0: 20 42 A8 JSR $A842 ; reset sprite data 3B/A5D3: 20 E3 A5 JSR $A5E3 3B/A5D6: A4 42 LDY $42 3B/A5D8: 20 1B C0 JSR $C01B ; update player sprites 3B/A5DB: 20 12 C0 JSR $C012 ; draw inactive invincible 3B/A5DE: E6 BC INC $BC 3B/A5E0: 10 EB BPL $A5CD 3B/A5E2: 60 RTS ; [ ] 3B/A5E3: A5 BC LDA $BC 3B/A5E5: 29 08 AND #$08 3B/A5E7: D0 0F BNE $A5F8 3B/A5E9: A2 0F LDX #$0F 3B/A5EB: BD F9 A5 LDA $A5F9,X 3B/A5EE: 9D 00 02 STA $0200,X 3B/A5F1: CA DEX 3B/A5F2: 10 F7 BPL $A5EB 3B/A5F4: A9 10 LDA #$10 3B/A5F6: 85 26 STA $26 3B/A5F8: 60 RTS 3B/A5F9: 6C 8E 02 70 3B/A5FD: 6C 8F 02 78 3B/A601: 74 8E 82 70 3B/A605: 74 8F 42 78 ; [ special animation 2: ] 3B/A609: A9 FF LDA #$FF 3B/A60B: 85 65 STA $65 3B/A60D: 20 42 A8 JSR $A842 ; reset sprite data 3B/A610: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A613: 20 42 A8 JSR $A842 ; reset sprite data 3B/A616: A4 42 LDY $42 3B/A618: 20 1B C0 JSR $C01B ; update player sprites 3B/A61B: 20 12 C0 JSR $C012 ; draw inactive invincible 3B/A61E: 20 1B AB JSR $AB1B 3B/A621: E6 BC INC $BC 3B/A623: A5 65 LDA $65 3B/A625: 38 SEC 3B/A626: E9 01 SBC #$01 3B/A628: 85 65 STA $65 3B/A62A: C9 0C CMP #$0C 3B/A62C: B0 E2 BCS $A610 3B/A62E: 4C BE A5 JMP $A5BE ; [ special animation 3: ] 3B/A631: A9 00 LDA #$00 3B/A633: 85 62 STA $62 3B/A635: 85 63 STA $63 3B/A637: A9 EA LDA #$EA 3B/A639: 85 65 STA $65 3B/A63B: 20 42 A8 JSR $A842 ; reset sprite data 3B/A63E: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A641: 20 42 A8 JSR $A842 ; reset sprite data 3B/A644: A4 42 LDY $42 3B/A646: 20 1B C0 JSR $C01B ; update player sprites 3B/A649: 20 12 C0 JSR $C012 ; draw inactive invincible 3B/A64C: 20 DE AA JSR $AADE 3B/A64F: A5 62 LDA $62 3B/A651: 18 CLC 3B/A652: 69 04 ADC #$04 3B/A654: 85 62 STA $62 3B/A656: A5 63 LDA $63 3B/A658: 69 00 ADC #$00 3B/A65A: 85 63 STA $63 3B/A65C: A5 65 LDA $65 3B/A65E: 38 SEC 3B/A65F: E9 02 SBC #$02 3B/A661: 85 65 STA $65 3B/A663: C9 0C CMP #$0C 3B/A665: B0 D7 BCS $A63E 3B/A667: 4C BE A5 JMP $A5BE ; [ special animation 9: invincible rises from the ocean ] 3B/A66A: 20 42 A8 JSR $A842 ; reset sprite data 3B/A66D: 20 70 A8 JSR $A870 3B/A670: 20 42 A8 JSR $A842 ; reset sprite data 3B/A673: 20 AF A6 JSR $A6AF 3B/A676: 20 21 C0 JSR $C021 ; update water animation buffers 3B/A679: E6 BC INC $BC 3B/A67B: A5 BC LDA $BC 3B/A67D: C9 40 CMP #$40 3B/A67F: 90 EC BCC $A66D 3B/A681: A9 00 LDA #$00 3B/A683: 85 BC STA $BC 3B/A685: 20 70 A8 JSR $A870 3B/A688: 20 34 A7 JSR $A734 3B/A68B: 20 E2 A7 JSR $A7E2 3B/A68E: 20 21 C0 JSR $C021 ; update water animation buffers 3B/A691: A5 F0 LDA $F0 3B/A693: 29 03 AND #$03 3B/A695: D0 EE BNE $A685 3B/A697: E6 BC INC $BC 3B/A699: A5 BC LDA $BC 3B/A69B: C9 40 CMP #$40 3B/A69D: 90 E6 BCC $A685 3B/A69F: A9 02 LDA #$02 3B/A6A1: 85 33 STA $33 3B/A6A3: A9 07 LDA #$07 ; invincible 3B/A6A5: 85 42 STA $42 3B/A6A7: 85 46 STA $46 3B/A6A9: A9 01 LDA #$01 3B/A6AB: 8D 04 60 STA $6004 3B/A6AE: 60 RTS 3B/A6AF: 20 42 A8 JSR $A842 ; reset sprite data 3B/A6B2: A5 BC LDA $BC 3B/A6B4: 4A LSR 3B/A6B5: 4A LSR 3B/A6B6: 4A LSR 3B/A6B7: 29 07 AND #$07 3B/A6B9: B0 18 BCS $A6D3 3B/A6BB: 0A ASL 3B/A6BC: 0A ASL 3B/A6BD: 29 1C AND #$1C 3B/A6BF: 85 80 STA $80 3B/A6C1: 0A ASL 3B/A6C2: 65 80 ADC $80 3B/A6C4: A8 TAY 3B/A6C5: A2 00 LDX #$00 3B/A6C7: B9 D4 A6 LDA $A6D4,Y 3B/A6CA: 9D 00 02 STA $0200,X 3B/A6CD: C8 INY 3B/A6CE: E8 INX 3B/A6CF: E0 0C CPX #$0C 3B/A6D1: 90 F4 BCC $A6C7 3B/A6D3: 60 RTS 3B/A6D4: 76 BC 03 B0 3B/A6D8: 76 BC 43 B8 3B/A6DC: F8 BF 03 B4 3B/A6E0: 76 BD 03 B0 3B/A6E4: 76 BD 43 B8 3B/A6E8: F8 BF 03 B4 3B/A6EC: 76 BE 03 AF 3B/A6F0: 76 BE 43 B9 3B/A6F4: 76 BF 03 B4 3B/A6F8: 76 BE 03 AE 3B/A6FC: 76 BE 43 BA 3B/A700: 76 BF 03 B4 3B/A704: 76 BE 03 AD 3B/A708: 76 BE 43 BB 3B/A70C: 76 BF 03 B4 3B/A710: 76 BE 03 AC 3B/A714: 76 BE 43 BC 3B/A718: 76 BF 03 B4 3B/A71C: 76 BE 03 AC 3B/A720: 76 BE 43 BC 3B/A724: 76 BF 03 B4 3B/A728: 76 BE 03 AC 3B/A72C: 76 BE 43 BC 3B/A730: 76 BF 03 B4 ; [ ] 3B/A734: A5 BC LDA $BC 3B/A736: 49 3F EOR #$3F 3B/A738: AA TAX 3B/A739: 18 CLC 3B/A73A: 69 68 ADC #$68 3B/A73C: 85 40 STA $40 3B/A73E: A9 70 LDA #$70 3B/A740: 85 41 STA $41 3B/A742: 20 42 A8 JSR $A842 ; reset sprite data 3B/A745: A2 10 LDX #$10 3B/A747: A0 00 LDY #$00 3B/A749: B9 7D A7 LDA $A77D,Y 3B/A74C: 18 CLC 3B/A74D: 65 40 ADC $40 3B/A74F: 85 40 STA $40 3B/A751: 9D 03 02 STA $0203,X 3B/A754: B9 7A A7 LDA $A77A,Y 3B/A757: 18 CLC 3B/A758: 65 41 ADC $41 3B/A75A: 85 41 STA $41 3B/A75C: 9D 00 02 STA $0200,X 3B/A75F: B9 7B A7 LDA $A77B,Y 3B/A762: 9D 01 02 STA $0201,X 3B/A765: B9 7C A7 LDA $A77C,Y 3B/A768: 9D 02 02 STA $0202,X 3B/A76B: E8 INX 3B/A76C: E8 INX 3B/A76D: E8 INX 3B/A76E: E8 INX 3B/A76F: C8 INY 3B/A770: C8 INY 3B/A771: C8 INY 3B/A772: C8 INY 3B/A773: E0 70 CPX #$70 3B/A775: 90 D2 BCC $A749 3B/A777: 86 26 STX $26 3B/A779: 60 RTS 3B/A77A: 00 B7 20 00 3B/A77E: 00 B8 20 08 3B/A782: 00 B9 20 08 3B/A786: 00 BA 20 08 3B/A78A: 08 BB 20 E8 3B/A78E: 00 BB 20 08 3B/A792: 00 BB 20 08 3B/A796: 00 BB 20 08 3B/A79A: 08 BB 20 E8 3B/A79E: 00 BB 20 08 3B/A7A2: 00 BB 20 08 3B/A7A6: 00 BB 20 08 3B/A7AA: 08 BB 20 E8 3B/A7AE: 00 BB 20 08 3B/A7B2: 00 BB 20 08 3B/A7B6: 00 BB 20 08 3B/A7BA: 08 BB 20 E8 3B/A7BE: 00 BB 20 08 3B/A7C2: 00 BB 20 08 3B/A7C6: 00 BB 20 08 3B/A7CA: 08 BB 20 E8 3B/A7CE: 00 BB 20 08 3B/A7D2: 00 BB 20 08 3B/A7D6: 00 BB 20 08 ; [ ] 3B/A7DA: A9 3C LDA #$3C 3B/A7DC: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/A7DF: 4C DB 88 JMP $88DB ; [ ] 3B/A7E2: A5 BC LDA $BC 3B/A7E4: 49 3F EOR #$3F 3B/A7E6: AA TAX 3B/A7E7: 18 CLC 3B/A7E8: 69 70 ADC #$70 3B/A7EA: 85 40 STA $40 3B/A7EC: 8A TXA 3B/A7ED: 4A LSR 3B/A7EE: 18 CLC 3B/A7EF: 69 5F ADC #$5F 3B/A7F1: 85 41 STA $41 3B/A7F3: A5 BC LDA $BC 3B/A7F5: 29 02 AND #$02 3B/A7F7: 0A ASL 3B/A7F8: 0A ASL 3B/A7F9: 0A ASL 3B/A7FA: 0A ASL 3B/A7FB: 09 04 ORA #$04 3B/A7FD: AA TAX 3B/A7FE: A9 3C LDA #$3C 3B/A800: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/A803: 4C 57 88 JMP $8857 ; draw invincible sprite ; [ destroy statue animation ] 3B/A806: 20 42 A8 JSR $A842 ; reset sprite data 3B/A809: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A80C: 20 42 A8 JSR $A842 ; reset sprite data 3B/A80F: 20 19 A8 JSR $A819 ; update statue explosion animation 3B/A812: E6 BC INC $BC 3B/A814: A5 BC LDA $BC 3B/A816: 10 F1 BPL $A809 3B/A818: 60 RTS ; [ update statue explosion animation ] 3B/A819: A9 3A LDA #$3A 3B/A81B: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/A81E: A5 BC LDA $BC 3B/A820: 4A LSR 3B/A821: 4A LSR 3B/A822: A2 60 LDX #$60 ; start at sprite 24 for player/invincible 3B/A824: 86 26 STX $26 3B/A826: 48 PHA 3B/A827: A2 40 LDX #$40 ; left side (64,80) 3B/A829: A0 50 LDY #$50 3B/A82B: 20 24 85 JSR $8524 ; update explosion animation 3B/A82E: 68 PLA 3B/A82F: A2 76 LDX #$76 ; left side (118,84) 3B/A831: A0 54 LDY #$54 3B/A833: 20 24 85 JSR $8524 ; update explosion animation 3B/A836: A9 00 LDA #$00 3B/A838: 85 26 STA $26 3B/A83A: A4 42 LDY $42 3B/A83C: 20 1B C0 JSR $C01B ; update player sprites 3B/A83F: 4C 12 C0 JMP $C012 ; draw inactive invincible ; [ reset sprite data ] 3B/A842: A2 3F LDX #$3F 3B/A844: A9 F0 LDA #$F0 3B/A846: 9D 00 02 STA $0200,X 3B/A849: 9D 40 02 STA $0240,X 3B/A84C: 9D 80 02 STA $0280,X 3B/A84F: 9D C0 02 STA $02C0,X 3B/A852: CA DEX 3B/A853: 10 F1 BPL $A846 3B/A855: A9 00 LDA #$00 3B/A857: 85 26 STA $26 3B/A859: 60 RTS ; [ wait for end of vblank ] 3B/A85A: A9 3A LDA #$3A 3B/A85C: 85 57 STA $57 3B/A85E: 20 00 FF JSR $FF00 ; wait for vblank 3B/A861: A9 02 LDA #$02 3B/A863: 8D 14 40 STA $4014 3B/A866: A2 C8 LDX #$C8 3B/A868: CA DEX 3B/A869: D0 FD BNE $A868 3B/A86B: E6 F0 INC $F0 3B/A86D: 4C 09 C0 JMP $C009 ; update sound ; [ ] 3B/A870: A9 3A LDA #$3A 3B/A872: 85 57 STA $57 3B/A874: 20 00 FF JSR $FF00 ; wait for vblank 3B/A877: A9 02 LDA #$02 3B/A879: 8D 14 40 STA $4014 3B/A87C: A9 3A LDA #$3A 3B/A87E: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/A881: 20 15 85 JSR $8515 ; update water animation 3B/A884: A9 00 LDA #$00 3B/A886: 85 80 STA $80 3B/A888: 20 52 B9 JSR $B952 3B/A88B: E6 F0 INC $F0 3B/A88D: 60 RTS ; [ ] 3B/A88E: A9 3A LDA #$3A 3B/A890: 85 57 STA $57 3B/A892: 20 00 FF JSR $FF00 ; wait for vblank 3B/A895: A9 02 LDA #$02 3B/A897: 8D 14 40 STA $4014 ; dma oam data to ppu 3B/A89A: A9 00 LDA #$00 3B/A89C: 85 80 STA $80 3B/A89E: 20 52 B9 JSR $B952 3B/A8A1: A2 C8 LDX #$C8 3B/A8A3: CA DEX 3B/A8A4: D0 FD BNE $A8A3 3B/A8A6: E6 F0 INC $F0 3B/A8A8: 60 RTS ; [ special animation 0: ] 3B/A8A9: 20 42 A8 JSR $A842 ; reset sprite data 3B/A8AC: A9 6F LDA #$6F 3B/A8AE: 85 62 STA $62 3B/A8B0: 20 5A A8 JSR $A85A ; wait for end of vblank 3B/A8B3: 20 42 A8 JSR $A842 ; reset sprite data 3B/A8B6: 20 EB A8 JSR $A8EB 3B/A8B9: A5 62 LDA $62 3B/A8BB: 85 41 STA $41 3B/A8BD: A9 70 LDA #$70 3B/A8BF: 85 40 STA $40 3B/A8C1: A9 68 LDA #$68 3B/A8C3: 20 56 A9 JSR $A956 3B/A8C6: E6 BC INC $BC 3B/A8C8: A5 F0 LDA $F0 3B/A8CA: 29 03 AND #$03 3B/A8CC: D0 E2 BNE $A8B0 3B/A8CE: C6 62 DEC $62 3B/A8D0: A5 62 LDA $62 3B/A8D2: C9 60 CMP #$60 3B/A8D4: B0 DA BCS $A8B0 3B/A8D6: A9 02 LDA #$02 3B/A8D8: 85 33 STA $33 3B/A8DA: A9 05 LDA #$05 ; enterprise ??? 3B/A8DC: 85 42 STA $42 3B/A8DE: 85 46 STA $46 3B/A8E0: A9 01 LDA #$01 3B/A8E2: 8D 00 60 STA $6000 3B/A8E5: A9 00 LDA #$00 3B/A8E7: 8D 03 60 STA $6003 3B/A8EA: 60 RTS 3B/A8EB: A2 00 LDX #$00 3B/A8ED: A0 00 LDY #$00 3B/A8EF: A5 BC LDA $BC 3B/A8F1: 29 04 AND #$04 3B/A8F3: D0 02 BNE $A8F7 3B/A8F5: A0 28 LDY #$28 3B/A8F7: B9 06 A9 LDA $A906,Y 3B/A8FA: 9D 00 02 STA $0200,X 3B/A8FD: C8 INY 3B/A8FE: E8 INX 3B/A8FF: E0 28 CPX #$28 3B/A901: 90 F4 BCC $A8F7 3B/A903: 86 26 STX $26 3B/A905: 60 RTS ; ??? sprite data 3B/A906: 6F 94 03 70 3B/A90A: 6F 95 03 78 3B/A90E: 77 94 03 68 3B/A912: 77 96 03 70 3B/A916: 77 97 03 78 3B/A91A: 77 95 03 80 3B/A91E: 7F FE 03 68 3B/A922: 7F 97 83 70 3B/A926: 7F 96 83 78 3B/A92A: 7F FF 03 80 3B/A92E: 6F 95 43 70 3B/A932: 6F 94 43 78 3B/A936: 77 95 43 68 3B/A93A: 77 97 43 70 3B/A93E: 77 96 43 78 3B/A942: 77 94 43 80 3B/A946: 7F FF 43 68 3B/A94A: 7F 96 C3 70 3B/A94E: 7F 97 C3 78 3B/A952: 7F FE 43 80 ; [ ] 3B/A956: 85 82 STA $82 3B/A958: A5 F0 LDA $F0 3B/A95A: 29 08 AND #$08 3B/A95C: 18 CLC 3B/A95D: 69 9A ADC #$9A ; 3B/A99A 3B/A95F: 85 80 STA $80 3B/A961: A9 A9 LDA #$A9 3B/A963: 69 00 ADC #$00 3B/A965: 85 81 STA $81 3B/A967: 4C 1E C0 JMP $C01E ; draw object sprite ; [ ] 3B/A96A: A5 40 LDA $40 3B/A96C: 38 SEC 3B/A96D: E9 04 SBC #$04 3B/A96F: 85 40 STA $40 3B/A971: A5 41 LDA $41 3B/A973: 38 SEC 3B/A974: E9 0A SBC #$0A 3B/A976: 85 41 STA $41 3B/A978: A5 F0 LDA $F0 3B/A97A: 4A LSR 3B/A97B: 90 07 BCC $A984 3B/A97D: A5 40 LDA $40 3B/A97F: 38 SEC 3B/A980: E9 10 SBC #$10 3B/A982: 85 40 STA $40 3B/A984: A9 00 LDA #$00 3B/A986: 85 82 STA $82 3B/A988: A5 F0 LDA $F0 3B/A98A: 29 08 AND #$08 3B/A98C: 18 CLC 3B/A98D: 69 AA ADC #$AA ; 3B/A9AA 3B/A98F: 85 80 STA $80 3B/A991: A9 A9 LDA #$A9 3B/A993: 69 00 ADC #$00 3B/A995: 85 81 STA $81 3B/A997: 4C 1E C0 JMP $C01E ; draw object sprite 3B/A99A: 10 03 12 03 11 03 13 03 3B/A9A2: 14 03 16 03 15 03 17 03 3B/A9AA: 00 00 02 01 01 00 03 01 3B/A9B2: 00 00 03 41 01 00 02 41 ; [ ] 3B/A9BA: 86 64 STX $64 3B/A9BC: 84 65 STY $65 3B/A9BE: 20 69 AA JSR $AA69 3B/A9C1: 20 00 FF JSR $FF00 ; wait for vblank 3B/A9C4: 20 07 AA JSR $AA07 3B/A9C7: A9 00 LDA #$00 3B/A9C9: 85 80 STA $80 3B/A9CB: 20 52 B9 JSR $B952 3B/A9CE: 20 D2 A9 JSR $A9D2 3B/A9D1: 60 RTS ; [ ] 3B/A9D2: A6 64 LDX $64 3B/A9D4: A4 65 LDY $65 3B/A9D6: B9 00 05 LDA $0500,Y 3B/A9D9: 9D 00 05 STA $0500,X 3B/A9DC: B9 80 05 LDA $0580,Y 3B/A9DF: 9D 80 05 STA $0580,X 3B/A9E2: B9 00 06 LDA $0600,Y 3B/A9E5: 9D 00 06 STA $0600,X 3B/A9E8: B9 80 06 LDA $0680,Y 3B/A9EB: 9D 80 06 STA $0680,X 3B/A9EE: B9 00 07 LDA $0700,Y 3B/A9F1: 9D 00 07 STA $0700,X 3B/A9F4: 0A ASL 3B/A9F5: 0A ASL 3B/A9F6: A6 64 LDX $64 3B/A9F8: A4 65 LDY $65 3B/A9FA: B9 00 04 LDA $0400,Y 3B/A9FD: 9D 00 04 STA $0400,X 3B/AA00: B9 01 04 LDA $0401,Y 3B/AA03: 9D 01 04 STA $0401,X 3B/AA06: 60 RTS ; [ ] 3B/AA07: 2C 02 20 BIT $2002 3B/AA0A: A5 62 LDA $62 3B/AA0C: 8D 06 20 STA $2006 3B/AA0F: A5 61 LDA $61 3B/AA11: 8D 06 20 STA $2006 3B/AA14: A4 65 LDY $65 3B/AA16: B9 00 05 LDA $0500,Y 3B/AA19: 8D 07 20 STA $2007 3B/AA1C: B9 80 05 LDA $0580,Y 3B/AA1F: 8D 07 20 STA $2007 3B/AA22: A5 67 LDA $67 3B/AA24: 8D 06 20 STA $2006 3B/AA27: A5 66 LDA $66 3B/AA29: 8D 06 20 STA $2006 3B/AA2C: B9 00 05 LDA $0500,Y 3B/AA2F: 8D 07 20 STA $2007 3B/AA32: B9 80 05 LDA $0580,Y 3B/AA35: 8D 07 20 STA $2007 3B/AA38: A5 62 LDA $62 3B/AA3A: 8D 06 20 STA $2006 3B/AA3D: A5 61 LDA $61 3B/AA3F: 09 20 ORA #$20 3B/AA41: 8D 06 20 STA $2006 3B/AA44: B9 00 06 LDA $0600,Y 3B/AA47: 8D 07 20 STA $2007 3B/AA4A: B9 80 06 LDA $0680,Y 3B/AA4D: 8D 07 20 STA $2007 3B/AA50: A5 67 LDA $67 3B/AA52: 8D 06 20 STA $2006 3B/AA55: A5 66 LDA $66 3B/AA57: 09 20 ORA #$20 3B/AA59: 8D 06 20 STA $2006 3B/AA5C: B9 00 06 LDA $0600,Y 3B/AA5F: 8D 07 20 STA $2007 3B/AA62: B9 80 06 LDA $0680,Y 3B/AA65: 8D 07 20 STA $2007 3B/AA68: 60 RTS ; [ ] 3B/AA69: A5 2F LDA $2F 3B/AA6B: 18 CLC 3B/AA6C: 69 07 ADC #$07 3B/AA6E: C9 0F CMP #$0F 3B/AA70: 90 02 BCC $AA74 3B/AA72: E9 0F SBC #$0F 3B/AA74: AA TAX 3B/AA75: BD CF AA LDA $AACF,X 3B/AA78: 85 62 STA $62 3B/AA7A: 85 67 STA $67 3B/AA7C: BD C0 AA LDA $AAC0,X 3B/AA7F: 85 61 STA $61 3B/AA81: 85 66 STA $66 3B/AA83: A5 27 LDA $27 3B/AA85: 18 CLC 3B/AA86: 69 06 ADC #$06 3B/AA88: 29 1F AND #$1F 3B/AA8A: 0A ASL 3B/AA8B: C9 20 CMP #$20 3B/AA8D: B0 07 BCS $AA96 3B/AA8F: 05 61 ORA $61 3B/AA91: 85 61 STA $61 3B/AA93: 4C A2 AA JMP $AAA2 3B/AA96: 29 1F AND #$1F 3B/AA98: 05 61 ORA $61 3B/AA9A: 85 61 STA $61 3B/AA9C: A5 62 LDA $62 3B/AA9E: 09 04 ORA #$04 3B/AAA0: 85 62 STA $62 3B/AAA2: A5 27 LDA $27 3B/AAA4: 18 CLC 3B/AAA5: 69 08 ADC #$08 3B/AAA7: 29 1F AND #$1F 3B/AAA9: 0A ASL 3B/AAAA: C9 20 CMP #$20 3B/AAAC: B0 05 BCS $AAB3 3B/AAAE: 05 66 ORA $66 3B/AAB0: 85 66 STA $66 3B/AAB2: 60 RTS 3B/AAB3: 29 1F AND #$1F 3B/AAB5: 05 66 ORA $66 3B/AAB7: 85 66 STA $66 3B/AAB9: A5 67 LDA $67 3B/AABB: 09 04 ORA #$04 3B/AABD: 85 67 STA $67 3B/AABF: 60 RTS 3B/AAC0: 00 40 80 C0 00 40 80 C0 00 40 80 C0 00 40 80 3B/AACF: 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 ; [ ] 3B/AADE: A9 10 LDA #$10 3B/AAE0: 85 8F STA $8F 3B/AAE2: A5 62 LDA $62 3B/AAE4: 85 66 STA $66 3B/AAE6: A5 63 LDA $63 3B/AAE8: 85 67 STA $67 3B/AAEA: 20 69 AB JSR $AB69 ; calculate projectile sprite position 3B/AAED: A6 26 LDX $26 3B/AAEF: A5 41 LDA $41 3B/AAF1: 9D 00 02 STA $0200,X 3B/AAF4: A5 40 LDA $40 3B/AAF6: 9D 03 02 STA $0203,X 3B/AAF9: A9 02 LDA #$02 3B/AAFB: 9D 02 02 STA $0202,X 3B/AAFE: A9 83 LDA #$83 3B/AB00: 9D 01 02 STA $0201,X 3B/AB03: E8 INX 3B/AB04: E8 INX 3B/AB05: E8 INX 3B/AB06: E8 INX 3B/AB07: 86 26 STX $26 3B/AB09: A5 66 LDA $66 3B/AB0B: 18 CLC 3B/AB0C: 69 40 ADC #$40 3B/AB0E: 85 66 STA $66 3B/AB10: A5 67 LDA $67 3B/AB12: 69 00 ADC #$00 3B/AB14: 85 67 STA $67 3B/AB16: C6 8F DEC $8F 3B/AB18: D0 D0 BNE $AAEA 3B/AB1A: 60 RTS ; [ ] 3B/AB1B: A9 06 LDA #$06 3B/AB1D: 85 8F STA $8F 3B/AB1F: A9 60 LDA #$60 3B/AB21: 85 66 STA $66 3B/AB23: A9 01 LDA #$01 3B/AB25: 85 67 STA $67 3B/AB27: 20 69 AB JSR $AB69 ; calculate projectile sprite position 3B/AB2A: A6 26 LDX $26 3B/AB2C: A5 41 LDA $41 3B/AB2E: 9D 00 02 STA $0200,X 3B/AB31: A5 40 LDA $40 3B/AB33: 9D 03 02 STA $0203,X 3B/AB36: A5 BC LDA $BC 3B/AB38: 4A LSR 3B/AB39: 4A LSR 3B/AB3A: 29 03 AND #$03 3B/AB3C: A8 TAY 3B/AB3D: B9 61 AB LDA $AB61,Y 3B/AB40: 9D 02 02 STA $0202,X 3B/AB43: B9 65 AB LDA $AB65,Y 3B/AB46: 9D 01 02 STA $0201,X 3B/AB49: E8 INX 3B/AB4A: E8 INX 3B/AB4B: E8 INX 3B/AB4C: E8 INX 3B/AB4D: 86 26 STX $26 3B/AB4F: A5 66 LDA $66 3B/AB51: 18 CLC 3B/AB52: 69 40 ADC #$40 3B/AB54: 85 66 STA $66 3B/AB56: A5 67 LDA $67 3B/AB58: 69 00 ADC #$00 3B/AB5A: 85 67 STA $67 3B/AB5C: C6 8F DEC $8F 3B/AB5E: D0 C7 BNE $AB27 3B/AB60: 60 RTS 3B/AB61: 02 02 82 42 81 82 81 82 ; [ calculate projectile sprite position ] 3B/AB69: A9 3A LDA #$3A 3B/AB6B: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/AB6E: 4C 2A 85 JMP $852A ; calculate projectile sprite position ; -------------------------------------------------------------------------- ; [ npc jump ] ; A: 0 = jump left, 1 = jump right 3B/AB71: 85 75 STA $75 3B/AB73: A9 3A LDA #$3A 3B/AB75: 85 57 STA $57 3B/AB77: A9 00 LDA #$00 3B/AB79: 85 74 STA $74 3B/AB7B: 86 67 STX $67 3B/AB7D: BD 05 70 LDA $7005,X ; current y position 3B/AB80: 38 SEC 3B/AB81: E9 01 SBC #$01 3B/AB83: 9D 05 70 STA $7005,X 3B/AB86: A9 0F LDA #$0F 3B/AB88: 9D 07 70 STA $7007,X ; start of frame loop 3B/AB8B: 20 BF AB JSR $ABBF ; update npc jump 3B/AB8E: 20 B1 AB JSR $ABB1 ; wait 1 frame 3B/AB91: A5 74 LDA $74 3B/AB93: C9 30 CMP #$30 3B/AB95: 90 F4 BCC $AB8B ; branch if not done 3B/AB97: A6 67 LDX $67 3B/AB99: A9 00 LDA #$00 3B/AB9B: 9D 06 70 STA $7006,X 3B/AB9E: 9D 07 70 STA $7007,X 3B/ABA1: BD 05 70 LDA $7005,X 3B/ABA4: 18 CLC 3B/ABA5: 69 01 ADC #$01 3B/ABA7: 9D 05 70 STA $7005,X 3B/ABAA: BD 04 70 LDA $7004,X 3B/ABAD: 9D 02 70 STA $7002,X 3B/ABB0: 60 RTS ; [ wait 1 frame (npc jump) ] 3B/ABB1: 20 7F AF JSR $AF7F ; update all npc sprites (no movement) 3B/ABB4: 20 00 FF JSR $FF00 ; wait for vblank 3B/ABB7: A9 02 LDA #$02 3B/ABB9: 8D 14 40 STA $4014 ; dma oam data to ppu 3B/ABBC: 4C 09 C0 JMP $C009 ; update sound ; [ update npc jump ] 3B/ABBF: A6 67 LDX $67 3B/ABC1: A4 74 LDY $74 3B/ABC3: A5 75 LDA $75 3B/ABC5: D0 2C BNE $ABF3 ; branch if jumping left ; jump right 3B/ABC7: BD 06 70 LDA $7006,X ; increment x subtile position 3B/ABCA: 18 CLC 3B/ABCB: 69 01 ADC #$01 3B/ABCD: 29 0F AND #$0F 3B/ABCF: 9D 06 70 STA $7006,X 3B/ABD2: D0 09 BNE $ABDD 3B/ABD4: BD 04 70 LDA $7004,X ; increment x tile position 3B/ABD7: 18 CLC 3B/ABD8: 69 01 ADC #$01 3B/ABDA: 9D 04 70 STA $7004,X 3B/ABDD: 98 TYA 3B/ABDE: C9 18 CMP #$18 3B/ABE0: 90 06 BCC $ABE8 ; branch if less than half done 3B/ABE2: A9 2F LDA #$2F 3B/ABE4: 38 SEC 3B/ABE5: E5 74 SBC $74 3B/ABE7: A8 TAY 3B/ABE8: B9 0C AC LDA $AC0C,Y 3B/ABEB: 49 0F EOR #$0F 3B/ABED: 9D 07 70 STA $7007,X ; set y subtile position 3B/ABF0: E6 74 INC $74 3B/ABF2: 60 RTS ; jump left 3B/ABF3: BD 06 70 LDA $7006,X 3B/ABF6: 38 SEC 3B/ABF7: E9 01 SBC #$01 3B/ABF9: 29 0F AND #$0F 3B/ABFB: 9D 06 70 STA $7006,X 3B/ABFE: B0 09 BCS $AC09 3B/AC00: BD 04 70 LDA $7004,X 3B/AC03: 38 SEC 3B/AC04: E9 01 SBC #$01 3B/AC06: 9D 04 70 STA $7004,X 3B/AC09: 4C DD AB JMP $ABDD ; npc jump height (not quite quadratic, but close) 3B/AC0C: 00 02 04 05 06 07 08 08 09 09 0A 0B 0B 0C 0C 0D 3B/AC1C: 0D 0E 0E 0F 0F 0F 0F 0F 0F ; [ npc spin in a circle ] 3B/AC25: A9 3A LDA #$3A 3B/AC27: 85 57 STA $57 3B/AC29: A9 00 LDA #$00 3B/AC2B: 85 74 STA $74 3B/AC2D: 86 67 STX $67 3B/AC2F: 20 3A AC JSR $AC3A 3B/AC32: 08 PHP 3B/AC33: 20 B1 AB JSR $ABB1 3B/AC36: 28 PLP 3B/AC37: 90 F6 BCC $AC2F 3B/AC39: 60 RTS ; [ ] 3B/AC3A: E6 F0 INC $F0 3B/AC3C: A5 F0 LDA $F0 3B/AC3E: 29 07 AND #$07 3B/AC40: C9 07 CMP #$07 3B/AC42: A9 00 LDA #$00 3B/AC44: 65 74 ADC $74 3B/AC46: 85 74 STA $74 3B/AC48: C9 08 CMP #$08 3B/AC4A: 90 01 BCC $AC4D 3B/AC4C: 60 RTS 3B/AC4D: 29 03 AND #$03 3B/AC4F: AA TAX 3B/AC50: BD 64 AC LDA $AC64,X 3B/AC53: A8 TAY 3B/AC54: B9 55 AD LDA $AD55,Y ; pointers to npc animation data 3B/AC57: A6 67 LDX $67 3B/AC59: 9D 0E 70 STA $700E,X 3B/AC5C: B9 56 AD LDA $AD56,Y 3B/AC5F: 9D 0F 70 STA $700F,X 3B/AC62: 18 CLC 3B/AC63: 60 RTS 3B/AC64: 02 06 00 04 ; [ npc move in a circle ] 3B/AC68: A9 3A LDA #$3A 3B/AC6A: 85 57 STA $57 3B/AC6C: A9 00 LDA #$00 3B/AC6E: 85 74 STA $74 3B/AC70: 86 67 STX $67 3B/AC72: 20 87 AC JSR $AC87 3B/AC75: 08 PHP 3B/AC76: 20 B1 AB JSR $ABB1 3B/AC79: 28 PLP 3B/AC7A: 90 F6 BCC $AC72 3B/AC7C: A6 67 LDX $67 3B/AC7E: A9 00 LDA #$00 3B/AC80: 9D 06 70 STA $7006,X 3B/AC83: 9D 07 70 STA $7007,X 3B/AC86: 60 RTS ; [ ] 3B/AC87: E6 F0 INC $F0 3B/AC89: A5 F0 LDA $F0 3B/AC8B: 4A LSR 3B/AC8C: A9 00 LDA #$00 3B/AC8E: 65 74 ADC $74 3B/AC90: 85 74 STA $74 3B/AC92: C9 32 CMP #$32 3B/AC94: 90 01 BCC $AC97 3B/AC96: 60 RTS 3B/AC97: A8 TAY 3B/AC98: A6 67 LDX $67 3B/AC9A: B9 B1 AD LDA $ADB1,Y 3B/AC9D: 9D 06 70 STA $7006,X 3B/ACA0: B9 05 AE LDA $AE05,Y 3B/ACA3: 9D 07 70 STA $7007,X 3B/ACA6: B9 59 AE LDA $AE59,Y 3B/ACA9: 0A ASL 3B/ACAA: A8 TAY 3B/ACAB: B9 55 AD LDA $AD55,Y ; pointers to npc animation data 3B/ACAE: 9D 0E 70 STA $700E,X 3B/ACB1: B9 56 AD LDA $AD56,Y 3B/ACB4: 9D 0F 70 STA $700F,X 3B/ACB7: 18 CLC 3B/ACB8: 60 RTS ; [ npc dance ] 3B/ACB9: A9 3A LDA #$3A 3B/ACBB: 85 57 STA $57 3B/ACBD: A9 00 LDA #$00 ; clear event wait counter 3B/ACBF: 85 74 STA $74 3B/ACC1: 85 75 STA $75 3B/ACC3: 20 5D AD JSR $AD5D ; npc dance 3B/ACC6: 08 PHP 3B/ACC7: 20 B1 AB JSR $ABB1 3B/ACCA: 28 PLP 3B/ACCB: 90 F6 BCC $ACC3 3B/ACCD: 60 RTS ; [ event commands $00-$BF (npc commands) ] ; starts at 3B/ACD1 3B/ACCE: E6 17 INC $17 3B/ACD0: 60 RTS ; starts here 3B/ACD1: A5 70 LDA $70 3B/ACD3: 29 F0 AND #$F0 ; top 4 bits is object id 3B/ACD5: AA TAX 3B/ACD6: BD 0C 70 LDA $700C,X 3B/ACD9: D0 F3 BNE $ACCE ; return if moving 3B/ACDB: A5 70 LDA $70 3B/ACDD: 29 0F AND #$0F ; 0-3: move 3B/ACDF: C9 04 CMP #$04 3B/ACE1: B0 14 BCS $ACF7 ; branch if not a movement command 3B/ACE3: BD 02 70 LDA $7002,X 3B/ACE6: 85 84 STA $84 3B/ACE8: BD 03 70 LDA $7003,X 3B/ACEB: 85 85 STA $85 3B/ACED: BD 06 71 LDA $7106,X 3B/ACF0: 85 86 STA $86 3B/ACF2: A5 70 LDA $70 3B/ACF4: 4C DD AF JMP $AFDD ; 4-7: face direction 3B/ACF7: C9 08 CMP #$08 3B/ACF9: B0 11 BCS $AD0C 3B/ACFB: 29 03 AND #$03 3B/ACFD: 0A ASL 3B/ACFE: A8 TAY 3B/ACFF: B9 55 AD LDA $AD55,Y ; pointers to npc animation data 3B/AD02: 9D 0E 70 STA $700E,X 3B/AD05: B9 56 AD LDA $AD56,Y 3B/AD08: 9D 0F 70 STA $700F,X 3B/AD0B: 60 RTS ; 8: show object 3B/AD0C: D0 07 BNE $AD15 3B/AD0E: BD 0A 70 LDA $700A,X 3B/AD11: 9D 00 70 STA $7000,X 3B/AD14: 60 RTS ; 9: hide object 3B/AD15: C9 09 CMP #$09 3B/AD17: D0 06 BNE $AD1F 3B/AD19: A9 00 LDA #$00 3B/AD1B: 9D 00 70 STA $7000,X 3B/AD1E: 60 RTS ; A: jump left 3B/AD1F: C9 0A CMP #$0A 3B/AD21: D0 05 BNE $AD28 3B/AD23: A9 01 LDA #$01 3B/AD25: 4C 71 AB JMP $AB71 ; npc jump ; B: jump right 3B/AD28: C9 0B CMP #$0B 3B/AD2A: D0 05 BNE $AD31 3B/AD2C: A9 00 LDA #$00 3B/AD2E: 4C 71 AB JMP $AB71 ; npc jump ; C: enable continuous animation 3B/AD31: C9 0C CMP #$0C 3B/AD33: D0 09 BNE $AD3E 3B/AD35: BD 01 70 LDA $7001,X 3B/AD38: 09 40 ORA #$40 3B/AD3A: 9D 01 70 STA $7001,X 3B/AD3D: 60 RTS ; D: disable continuous animation 3B/AD3E: C9 0D CMP #$0D 3B/AD40: D0 09 BNE $AD4B 3B/AD42: BD 01 70 LDA $7001,X 3B/AD45: 29 B0 AND #$B0 3B/AD47: 9D 01 70 STA $7001,X 3B/AD4A: 60 RTS ; E: move in a circle 3B/AD4B: C9 0E CMP #$0E 3B/AD4D: D0 03 BNE $AD52 3B/AD4F: 4C 68 AC JMP $AC68 ; F: spin in a circle 3B/AD52: 4C 25 AC JMP $AC25 ; pointers to npc animation data 3B/AD55: B41A B42A B43A B44A ; [ npc dance ] 3B/AD5D: E6 F0 INC $F0 3B/AD5F: A5 F0 LDA $F0 3B/AD61: 29 03 AND #$03 3B/AD63: C9 03 CMP #$03 3B/AD65: A9 00 LDA #$00 3B/AD67: 65 74 ADC $74 3B/AD69: 85 74 STA $74 3B/AD6B: C9 54 CMP #$54 3B/AD6D: 90 13 BCC $AD82 3B/AD6F: A9 00 LDA #$00 3B/AD71: 85 74 STA $74 3B/AD73: A5 75 LDA $75 3B/AD75: 18 CLC 3B/AD76: 69 01 ADC #$01 3B/AD78: 85 75 STA $75 3B/AD7A: C9 05 CMP #$05 ; repeat dance 5 times 3B/AD7C: A9 00 LDA #$00 3B/AD7E: 90 02 BCC $AD82 3B/AD80: 38 SEC ; set carry and return when dance is over 3B/AD81: 60 RTS 3B/AD82: A8 TAY 3B/AD83: A2 00 LDX #$00 3B/AD85: B9 B1 AD LDA $ADB1,Y 3B/AD88: 9D 06 70 STA $7006,X 3B/AD8B: B9 05 AE LDA $AE05,Y 3B/AD8E: 9D 07 70 STA $7007,X 3B/AD91: B9 59 AE LDA $AE59,Y 3B/AD94: 0A ASL 3B/AD95: 84 80 STY $80 3B/AD97: A8 TAY 3B/AD98: B9 55 AD LDA $AD55,Y ; pointers to npc animation data 3B/AD9B: 9D 0E 70 STA $700E,X 3B/AD9E: B9 56 AD LDA $AD56,Y 3B/ADA1: 9D 0F 70 STA $700F,X 3B/ADA4: A4 80 LDY $80 3B/ADA6: 8A TXA 3B/ADA7: 18 CLC 3B/ADA8: 69 10 ADC #$10 ; next npc 3B/ADAA: AA TAX 3B/ADAB: C9 A0 CMP #$A0 3B/ADAD: 90 D6 BCC $AD85 3B/ADAF: 18 CLC 3B/ADB0: 60 RTS ; npc dance x-offsets 3B/ADB1: 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0E 3B/ADC1: 0F 0F 0F 0F 0F 0F 0F 0F 0E 0E 0D 0C 0B 0A 09 08 3B/ADD1: 07 06 05 04 03 02 01 01 00 00 00 00 00 00 00 00 3B/ADE1: 01 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 3B/ADF1: 0F 0F 0F 0E 0D 0C 0B 0A 09 08 07 06 05 04 03 02 3B/AE01: 01 00 00 00 ; npc dance y-offsets 3B/AE05: 00 00 00 00 00 00 00 00 00 00 00 00 01 01 02 03 3B/AE15: 04 05 06 07 08 09 0A 0B 0C 0D 0E 0E 0F 0F 0F 0F 3B/AE25: 0F 0F 0F 0F 0E 0E 0D 0C 0B 0A 09 08 07 06 05 04 3B/AE35: 03 02 01 01 00 00 00 00 00 00 00 00 00 00 00 00 3B/AE45: 00 01 02 03 04 05 06 07 07 07 07 07 07 06 05 04 3B/AE55: 03 02 01 00 ; npc dance facing directions 3B/AE59: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 3B/AE69: 02 02 02 02 03 03 03 03 03 03 03 03 03 03 03 03 3B/AE79: 03 03 03 03 03 03 03 03 03 03 03 03 02 02 02 02 3B/AE89: 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 02 3B/AE99: 02 01 03 00 02 01 03 00 02 01 03 00 02 01 03 00 3B/AEA9: 02 01 03 02 ; [ draw npc sprite ] 3B/AEAD: BD 05 71 LDA $7105,X ; palette 3B/AEB0: 18 CLC 3B/AEB1: 65 80 ADC $80 ; add animation data offset 3B/AEB3: 85 80 STA $80 3B/AEB5: A5 81 LDA $81 3B/AEB7: 69 00 ADC #$00 3B/AEB9: 85 81 STA $81 3B/AEBB: 20 1E C0 JSR $C01E ; draw object sprite 3B/AEBE: A5 26 LDA $26 3B/AEC0: 38 SEC 3B/AEC1: E9 10 SBC #$10 3B/AEC3: A8 TAY 3B/AEC4: A6 8F LDX $8F 3B/AEC6: BD 01 71 LDA $7101,X 3B/AEC9: 29 24 AND #$24 3B/AECB: F0 0B BEQ $AED8 3B/AECD: B9 0A 02 LDA $020A,Y ; toggle priority of bottom sprites 3B/AED0: 49 20 EOR #$20 3B/AED2: 99 0A 02 STA $020A,Y 3B/AED5: 99 0E 02 STA $020E,Y 3B/AED8: BD 01 71 LDA $7101,X 3B/AEDB: 29 14 AND #$14 3B/AEDD: F0 0B BEQ $AEEA 3B/AEDF: B9 02 02 LDA $0202,Y ; toggle priority of top sprites 3B/AEE2: 49 20 EOR #$20 3B/AEE4: 99 02 02 STA $0202,Y 3B/AEE7: 99 06 02 STA $0206,Y 3B/AEEA: 60 RTS ; [ object command 6: update npcs ] 3B/AEEB: 20 31 AF JSR $AF31 ; update player sprite priority 3B/AEEE: A5 F0 LDA $F0 3B/AEF0: 4A LSR 3B/AEF1: B0 20 BCS $AF13 ; even frames (normal order) 3B/AEF3: A2 00 LDX #$00 3B/AEF5: BD 00 70 LDA $7000,X 3B/AEF8: F0 0D BEQ $AF07 3B/AEFA: 20 7C B1 JSR $B17C ; update npc sprites 3B/AEFD: A5 26 LDA $26 3B/AEFF: C9 20 CMP #$20 ; don't use sprites 8-15 ??? 3B/AF01: D0 04 BNE $AF07 3B/AF03: A9 40 LDA #$40 3B/AF05: 85 26 STA $26 3B/AF07: 8A TXA 3B/AF08: 18 CLC 3B/AF09: 69 10 ADC #$10 3B/AF0B: AA TAX 3B/AF0C: C9 C0 CMP #$C0 3B/AF0E: 90 E5 BCC $AEF5 3B/AF10: 4C 97 AF JMP $AF97 ; update random npc movement ; odd frames (reverse order) 3B/AF13: A2 B0 LDX #$B0 3B/AF15: BD 00 70 LDA $7000,X 3B/AF18: F0 0D BEQ $AF27 3B/AF1A: 20 7C B1 JSR $B17C ; update npc sprites 3B/AF1D: A5 26 LDA $26 3B/AF1F: C9 20 CMP #$20 3B/AF21: D0 04 BNE $AF27 3B/AF23: A9 40 LDA #$40 3B/AF25: 85 26 STA $26 3B/AF27: 8A TXA 3B/AF28: 38 SEC 3B/AF29: E9 10 SBC #$10 3B/AF2B: AA TAX 3B/AF2C: B0 E7 BCS $AF15 3B/AF2E: 4C 97 AF JMP $AF97 ; update random npc movement ; [ update player sprite priority ] ; maybe this moves the player sprites to the lowest sprite priority ; if they are on the lower z-level so they will be shown beneath npcs ??? 3B/AF31: A5 A5 LDA $A5 3B/AF33: C9 02 CMP #$02 3B/AF35: D0 37 BNE $AF6E ; return if upper z-level 3B/AF37: A5 A8 LDA $A8 3B/AF39: C9 70 CMP #$70 3B/AF3B: D0 16 BNE $AF53 3B/AF3D: A5 43 LDA $43 3B/AF3F: C9 04 CMP #$04 3B/AF41: D0 2C BNE $AF6F ; branch if a on bridge tile 3B/AF43: A0 1F LDY #$1F 3B/AF45: B9 00 02 LDA $0200,Y ; make sprites 0-7 low priority 3B/AF48: 99 E0 02 STA $02E0,Y 3B/AF4B: 88 DEY 3B/AF4C: 10 F7 BPL $AF45 3B/AF4E: A9 00 LDA #$00 3B/AF50: 85 26 STA $26 3B/AF52: 60 RTS 3B/AF53: A5 43 LDA $43 3B/AF55: C9 04 CMP #$04 3B/AF57: D0 15 BNE $AF6E ; return if a on bridge tile 3B/AF59: A0 0F LDY #$0F 3B/AF5B: B9 00 02 LDA $0200,Y ; make sprites 0-3 low priority 3B/AF5E: 99 F0 02 STA $02F0,Y 3B/AF61: B9 10 02 LDA $0210,Y ; make sprites 4-7 high priority 3B/AF64: 99 00 02 STA $0200,Y 3B/AF67: 88 DEY 3B/AF68: 10 F1 BPL $AF5B 3B/AF6A: A9 10 LDA #$10 3B/AF6C: 85 26 STA $26 3B/AF6E: 60 RTS 3B/AF6F: A0 0F LDY #$0F 3B/AF71: B9 10 02 LDA $0210,Y ; make sprites 4-7 low priority 3B/AF74: 99 F0 02 STA $02F0,Y 3B/AF77: 88 DEY 3B/AF78: 10 F7 BPL $AF71 3B/AF7A: A9 10 LDA #$10 3B/AF7C: 85 26 STA $26 3B/AF7E: 60 RTS ; [ object command 8: update all npc sprites (no movement) ] 3B/AF7F: A9 40 LDA #$40 3B/AF81: 85 26 STA $26 ; start at sprite 16 3B/AF83: A2 00 LDX #$00 3B/AF85: BD 00 70 LDA $7000,X 3B/AF88: F0 03 BEQ $AF8D ; branch if not visible 3B/AF8A: 20 CD B1 JSR $B1CD ; update npc sprites (no movement) 3B/AF8D: 8A TXA 3B/AF8E: 18 CLC 3B/AF8F: 69 10 ADC #$10 3B/AF91: AA TAX 3B/AF92: C9 C0 CMP #$C0 3B/AF94: 90 EF BCC $AF85 3B/AF96: 60 RTS ; [ update random npc movement ] ; update one npc every other frame ($4A keeps track of which npc) 3B/AF97: A5 6C LDA $6C ; return if running an event 3B/AF99: D0 1F BNE $AFBA 3B/AF9B: A5 4A LDA $4A ; increment pointer to object properties 3B/AF9D: 18 CLC 3B/AF9E: 69 10 ADC #$10 3B/AFA0: 29 F0 AND #$F0 3B/AFA2: C9 C0 CMP #$C0 3B/AFA4: 90 02 BCC $AFA8 3B/AFA6: A9 00 LDA #$00 3B/AFA8: 85 4A STA $4A 3B/AFAA: AA TAX 3B/AFAB: BD 00 70 LDA $7000,X 3B/AFAE: F0 0A BEQ $AFBA ; return if not visible 3B/AFB0: BD 01 70 LDA $7001,X ; return if npc is stationary 3B/AFB3: 29 80 AND #$80 3B/AFB5: 1D 0C 70 ORA $700C,X 3B/AFB8: F0 01 BEQ $AFBB ; return if already moving 3B/AFBA: 60 RTS 3B/AFBB: BD 0B 70 LDA $700B,X ; decrement random movement counter 3B/AFBE: F0 07 BEQ $AFC7 3B/AFC0: 38 SEC 3B/AFC1: E9 01 SBC #$01 3B/AFC3: 9D 0B 70 STA $700B,X 3B/AFC6: 60 RTS 3B/AFC7: BD 02 70 LDA $7002,X ; get position 3B/AFCA: 85 84 STA $84 3B/AFCC: BD 03 70 LDA $7003,X 3B/AFCF: 85 85 STA $85 3B/AFD1: E6 F4 INC $F4 3B/AFD3: A4 F4 LDY $F4 3B/AFD5: BD 06 71 LDA $7106,X ; z-level 3B/AFD8: 85 86 STA $86 3B/AFDA: B9 00 FE LDA $FE00,Y ; random number table 3B/AFDD: 29 03 AND #$03 ; choose a random direction 3B/AFDF: C9 02 CMP #$02 3B/AFE1: 90 6D BCC $B050 3B/AFE3: D0 32 BNE $B017 ; down 3B/AFE5: A5 85 LDA $85 3B/AFE7: 18 CLC 3B/AFE8: 69 01 ADC #$01 3B/AFEA: 29 3F AND #$3F 3B/AFEC: 85 85 STA $85 3B/AFEE: 20 10 B1 JSR $B110 3B/AFF1: B0 23 BCS $B016 ; return if npc can't move to tile 3B/AFF3: A5 85 LDA $85 3B/AFF5: 9D 03 70 STA $7003,X 3B/AFF8: A9 01 LDA #$01 3B/AFFA: 9D 09 70 STA $7009,X 3B/AFFD: A9 08 LDA #$08 3B/AFFF: 9D 0C 70 STA $700C,X ; set movement direction 3B/B002: BD 01 70 LDA $7001,X 3B/B005: 29 50 AND #$50 3B/B007: F0 03 BEQ $B00C 3B/B009: 4C BE B0 JMP $B0BE 3B/B00C: A9 3A LDA #$3A ; 3B/B43A (down) 3B/B00E: 9D 0E 70 STA $700E,X 3B/B011: A9 B4 LDA #$B4 3B/B013: 4C BB B0 JMP $B0BB 3B/B016: 60 RTS ; up 3B/B017: A5 85 LDA $85 3B/B019: 38 SEC 3B/B01A: E9 01 SBC #$01 3B/B01C: 29 3F AND #$3F 3B/B01E: 85 85 STA $85 3B/B020: 20 10 B1 JSR $B110 3B/B023: B0 F1 BCS $B016 3B/B025: A5 85 LDA $85 3B/B027: 9D 03 70 STA $7003,X 3B/B02A: 9D 05 70 STA $7005,X 3B/B02D: A9 FF LDA #$FF 3B/B02F: 9D 09 70 STA $7009,X 3B/B032: A9 0F LDA #$0F 3B/B034: 9D 07 70 STA $7007,X 3B/B037: A9 04 LDA #$04 3B/B039: 9D 0C 70 STA $700C,X 3B/B03C: BD 01 70 LDA $7001,X 3B/B03F: 29 50 AND #$50 3B/B041: F0 03 BEQ $B046 3B/B043: 4C BE B0 JMP $B0BE 3B/B046: A9 4A LDA #$4A ; 3B/B44A (up) 3B/B048: 9D 0E 70 STA $700E,X 3B/B04B: A9 B4 LDA #$B4 3B/B04D: 4C BB B0 JMP $B0BB ; left 3B/B050: C9 00 CMP #$00 3B/B052: F0 39 BEQ $B08D 3B/B054: A5 84 LDA $84 3B/B056: 38 SEC 3B/B057: E9 01 SBC #$01 3B/B059: 29 3F AND #$3F 3B/B05B: 85 84 STA $84 3B/B05D: 20 10 B1 JSR $B110 3B/B060: B0 B4 BCS $B016 3B/B062: A5 84 LDA $84 3B/B064: 9D 04 70 STA $7004,X 3B/B067: 9D 02 70 STA $7002,X 3B/B06A: A9 FF LDA #$FF 3B/B06C: 9D 08 70 STA $7008,X 3B/B06F: A9 0F LDA #$0F 3B/B071: 9D 06 70 STA $7006,X 3B/B074: A9 02 LDA #$02 3B/B076: 9D 0C 70 STA $700C,X 3B/B079: BD 01 70 LDA $7001,X 3B/B07C: 29 50 AND #$50 3B/B07E: F0 03 BEQ $B083 3B/B080: 4C BE B0 JMP $B0BE 3B/B083: A9 2A LDA #$2A ; 3B/B42A (left) 3B/B085: 9D 0E 70 STA $700E,X 3B/B088: A9 B4 LDA #$B4 3B/B08A: 4C BB B0 JMP $B0BB ; right 3B/B08D: A5 84 LDA $84 3B/B08F: 18 CLC 3B/B090: 69 01 ADC #$01 3B/B092: 29 3F AND #$3F 3B/B094: 85 84 STA $84 3B/B096: 20 10 B1 JSR $B110 3B/B099: B0 29 BCS $B0C4 3B/B09B: A5 84 LDA $84 3B/B09D: 9D 02 70 STA $7002,X ; destination x position 3B/B0A0: A9 01 LDA #$01 3B/B0A2: 9D 08 70 STA $7008,X ; x movement speed 3B/B0A5: A9 01 LDA #$01 3B/B0A7: 9D 0C 70 STA $700C,X ; movement direction 3B/B0AA: BD 01 70 LDA $7001,X 3B/B0AD: 29 50 AND #$50 3B/B0AF: F0 03 BEQ $B0B4 3B/B0B1: 4C BE B0 JMP $B0BE 3B/B0B4: A9 1A LDA #$1A ; 3B/B41A (right) 3B/B0B6: 9D 0E 70 STA $700E,X 3B/B0B9: A9 B4 LDA #$B4 3B/B0BB: 9D 0F 70 STA $700F,X 3B/B0BE: BD 03 71 LDA $7103,X ; reset movement counter 3B/B0C1: 9D 0B 70 STA $700B,X 3B/B0C4: 60 RTS ; [ check npc passability ] ; $84: x position ; $85: y position ; $86: z-level ; $67: tile id (out, also in Y) ; carry clear/set: passable/impassable (out) 3B/B0C5: A4 4C LDY $4C ; fill tile 3B/B0C7: A5 84 LDA $84 3B/B0C9: 05 85 ORA $85 3B/B0CB: 29 20 AND #$20 3B/B0CD: D0 1C BNE $B0EB ; branch if past map limit (use fill tile) 3B/B0CF: A5 85 LDA $85 3B/B0D1: 4A LSR 3B/B0D2: 4A LSR 3B/B0D3: 4A LSR 3B/B0D4: 18 CLC 3B/B0D5: 69 74 ADC #$74 3B/B0D7: 85 81 STA $81 3B/B0D9: A5 85 LDA $85 3B/B0DB: 0A ASL 3B/B0DC: 0A ASL 3B/B0DD: 0A ASL 3B/B0DE: 0A ASL 3B/B0DF: 0A ASL 3B/B0E0: 05 84 ORA $84 3B/B0E2: 85 80 STA $80 3B/B0E4: A0 00 LDY #$00 3B/B0E6: B1 80 LDA ($80),Y ; tile id 3B/B0E8: A8 TAY 3B/B0E9: 84 67 STY $67 3B/B0EB: B9 00 04 LDA $0400,Y ; tile properties 3B/B0EE: 30 16 BMI $B106 ; branch if entrance or impassable 3B/B0F0: 29 07 AND #$07 3B/B0F2: F0 14 BEQ $B108 3B/B0F4: C9 04 CMP #$04 3B/B0F6: B0 0C BCS $B104 ; branch if a bridge tile 3B/B0F8: C9 03 CMP #$03 3B/B0FA: F0 0A BEQ $B106 3B/B0FC: 05 86 ORA $86 3B/B0FE: C9 03 CMP #$03 3B/B100: F0 04 BEQ $B106 3B/B102: 85 86 STA $86 3B/B104: 18 CLC ; passable 3B/B105: 60 RTS 3B/B106: 38 SEC ; impassable 3B/B107: 60 RTS 3B/B108: A9 00 LDA #$00 3B/B10A: 85 86 STA $86 3B/B10C: 18 CLC ; passable 3B/B10D: 60 RTS ; [ move npc ??? ] ; starts at 3B/B110 ; $84: destination x position ; $85: destination y position 3B/B10E: 38 SEC 3B/B10F: 60 RTS ; subroutine starts here 3B/B110: A5 6C LDA $6C 3B/B112: F0 06 BEQ $B11A 3B/B114: 20 C5 B0 JSR $B0C5 ; check npc passability 3B/B117: 4C 6B B1 JMP $B16B 3B/B11A: A5 86 LDA $86 3B/B11C: F0 08 BEQ $B126 3B/B11E: A5 A5 LDA $A5 3B/B120: F0 04 BEQ $B126 3B/B122: C5 86 CMP $86 3B/B124: D0 0C BNE $B132 3B/B126: A5 84 LDA $84 3B/B128: C5 68 CMP $68 3B/B12A: D0 06 BNE $B132 3B/B12C: A5 85 LDA $85 3B/B12E: C5 69 CMP $69 3B/B130: F0 DC BEQ $B10E 3B/B132: 20 C5 B0 JSR $B0C5 ; check npc passability 3B/B135: B0 D7 BCS $B10E ; branch if impassable 3B/B137: A0 00 LDY #$00 3B/B139: 84 80 STY $80 3B/B13B: E4 80 CPX $80 3B/B13D: F0 23 BEQ $B162 3B/B13F: B9 00 70 LDA $7000,Y 3B/B142: F0 1E BEQ $B162 3B/B144: B9 06 71 LDA $7106,Y 3B/B147: F0 09 BEQ $B152 3B/B149: A5 86 LDA $86 3B/B14B: F0 05 BEQ $B152 3B/B14D: D9 06 71 CMP $7106,Y 3B/B150: D0 10 BNE $B162 3B/B152: A5 84 LDA $84 3B/B154: D9 02 70 CMP $7002,Y 3B/B157: D0 09 BNE $B162 3B/B159: A5 85 LDA $85 3B/B15B: D9 03 70 CMP $7003,Y 3B/B15E: D0 02 BNE $B162 3B/B160: 38 SEC 3B/B161: 60 RTS 3B/B162: 98 TYA 3B/B163: 18 CLC 3B/B164: 69 10 ADC #$10 3B/B166: A8 TAY 3B/B167: C9 C0 CMP #$C0 3B/B169: 90 CE BCC $B139 3B/B16B: A4 67 LDY $67 3B/B16D: B9 00 04 LDA $0400,Y 3B/B170: 29 37 AND #$37 3B/B172: 9D 00 71 STA $7100,X ; set current tile properties 3B/B175: A5 86 LDA $86 3B/B177: 9D 06 71 STA $7106,X 3B/B17A: 18 CLC 3B/B17B: 60 RTS ; [ update npc sprites ] ; updates movement and draws one npc (4 sprites) ; return carry set if sprite is offscreen 3B/B17C: BD 0D 70 LDA $700D,X ; ignore frame counter if interacting with player 3B/B17F: D0 07 BNE $B188 3B/B181: A5 F0 LDA $F0 ; frame counter 3B/B183: 3D 02 71 AND $7102,X 3B/B186: D0 45 BNE $B1CD ; branch if not moving this frame 3B/B188: BD 08 70 LDA $7008,X 3B/B18B: F0 1F BEQ $B1AC ; branch if no horizontal movement 3B/B18D: 18 CLC 3B/B18E: 7D 06 70 ADC $7006,X ; add to x subtile position 3B/B191: 29 0F AND #$0F 3B/B193: 9D 06 70 STA $7006,X 3B/B196: D0 35 BNE $B1CD ; branch if not at destination tile 3B/B198: A9 00 LDA #$00 3B/B19A: 9D 08 70 STA $7008,X ; clear x movement speed 3B/B19D: 9D 0C 70 STA $700C,X ; clear movement direction 3B/B1A0: 9D 0D 70 STA $700D,X 3B/B1A3: BD 02 70 LDA $7002,X ; move to destination position 3B/B1A6: 9D 04 70 STA $7004,X 3B/B1A9: 4C CD B1 JMP $B1CD 3B/B1AC: BD 09 70 LDA $7009,X ; branch if no vertical movement 3B/B1AF: F0 1C BEQ $B1CD 3B/B1B1: 18 CLC 3B/B1B2: 7D 07 70 ADC $7007,X 3B/B1B5: 29 0F AND #$0F 3B/B1B7: 9D 07 70 STA $7007,X 3B/B1BA: D0 11 BNE $B1CD 3B/B1BC: A9 00 LDA #$00 3B/B1BE: 9D 09 70 STA $7009,X 3B/B1C1: 9D 0C 70 STA $700C,X 3B/B1C4: 9D 0D 70 STA $700D,X 3B/B1C7: BD 03 70 LDA $7003,X 3B/B1CA: 9D 05 70 STA $7005,X ; fallthrough ; [ update npc sprites (no movement) ] 3B/B1CD: BD 06 70 LDA $7006,X ; subtile position 3B/B1D0: 1D 07 70 ORA $7007,X 3B/B1D3: C9 08 CMP #$08 3B/B1D5: D0 17 BNE $B1EE ; branch if not halfway between tiles 3B/B1D7: BD 00 71 LDA $7100,X 3B/B1DA: 29 04 AND #$04 3B/B1DC: F0 0A BEQ $B1E8 ; branch if not on a bridge tile ??? 3B/B1DE: BD 06 71 LDA $7106,X 3B/B1E1: 4A LSR 3B/B1E2: 90 04 BCC $B1E8 3B/B1E4: A9 00 LDA #$00 3B/B1E6: F0 03 BEQ $B1EB 3B/B1E8: BD 00 71 LDA $7100,X 3B/B1EB: 9D 01 71 STA $7101,X 3B/B1EE: BD 07 70 LDA $7007,X ; y subtile position 3B/B1F1: 18 CLC 3B/B1F2: E5 36 SBC $36 ; subtract player subtile position 3B/B1F4: 29 0F AND #$0F 3B/B1F6: 85 80 STA $80 3B/B1F8: BD 05 70 LDA $7005,X ; current y position 3B/B1FB: E5 2A SBC $2A ; subtract player y position 3B/B1FD: 29 3F AND #$3F 3B/B1FF: C9 10 CMP #$10 3B/B201: B0 2D BCS $B230 ; branch if offscreen top 3B/B203: 0A ASL 3B/B204: 0A ASL 3B/B205: 0A ASL 3B/B206: 0A ASL 3B/B207: 05 80 ORA $80 3B/B209: C9 E8 CMP #$E8 3B/B20B: B0 23 BCS $B230 ; branch if offscreen bottom 3B/B20D: E9 02 SBC #$02 ; shift up 2 pixels 3B/B20F: 85 41 STA $41 ; sprite y position 3B/B211: BD 06 70 LDA $7006,X ; x subtile position 3B/B214: 38 SEC 3B/B215: E5 35 SBC $35 3B/B217: 29 0F AND #$0F 3B/B219: 85 80 STA $80 3B/B21B: BD 04 70 LDA $7004,X 3B/B21E: E5 29 SBC $29 3B/B220: 29 3F AND #$3F 3B/B222: C9 10 CMP #$10 3B/B224: B0 0A BCS $B230 ; branch if offscreen left 3B/B226: 0A ASL 3B/B227: 0A ASL 3B/B228: 0A ASL 3B/B229: 0A ASL 3B/B22A: 05 80 ORA $80 3B/B22C: C9 F8 CMP #$F8 3B/B22E: 90 02 BCC $B232 ; branch if not offscreen right 3B/B230: 38 SEC ; sprite is offscreen 3B/B231: 60 RTS 3B/B232: 85 40 STA $40 ; sprite x position 3B/B234: 86 8F STX $8F 3B/B236: BD 0D 70 LDA $700D,X 3B/B239: 10 03 BPL $B23E ; branch if player didn't interact with npc 3B/B23B: 4C C6 B2 JMP $B2C6 3B/B23E: BD 01 70 LDA $7001,X ; movement type 3B/B241: 29 F0 AND #$F0 3B/B243: F0 30 BEQ $B275 3B/B245: 0A ASL 3B/B246: 90 09 BCC $B251 ; msb set 3B/B248: 0A ASL 3B/B249: 90 09 BCC $B254 3B/B24B: 0A ASL 3B/B24C: 0A ASL 3B/B24D: 90 09 BCC $B258 3B/B24F: B0 1A BCS $B26B ; msb clear 3B/B251: 0A ASL 3B/B252: B0 0E BCS $B262 ; 80, 20: static 3B/B254: A9 00 LDA #$00 3B/B256: F0 26 BEQ $B27E ; C0/E0: stationary w/ walking animation every 2 frames 3B/B258: A5 F0 LDA $F0 3B/B25A: 4A LSR 3B/B25B: 85 00 STA $00 3B/B25D: 29 08 AND #$08 3B/B25F: 4C 7E B2 JMP $B27E ; 40: change every 8 frames 3B/B262: A5 F0 LDA $F0 3B/B264: 85 00 STA $00 3B/B266: 29 08 AND #$08 3B/B268: 4C 7E B2 JMP $B27E ; D0/F0: change every 4 frames 3B/B26B: A5 F0 LDA $F0 3B/B26D: 0A ASL 3B/B26E: 85 00 STA $00 3B/B270: 29 08 AND #$08 3B/B272: 4C 7E B2 JMP $B27E ; 00: move randomly with walking animation 3B/B275: BD 06 70 LDA $7006,X ; subtile position 3B/B278: 1D 07 70 ORA $7007,X 3B/B27B: 0A ASL 3B/B27C: 29 08 AND #$08 ; switch frame halfway across tile 3B/B27E: 48 PHA 3B/B27F: 18 CLC 3B/B280: 7D 0E 70 ADC $700E,X 3B/B283: 85 80 STA $80 3B/B285: BD 0F 70 LDA $700F,X 3B/B288: 69 00 ADC #$00 3B/B28A: 85 81 STA $81 3B/B28C: 8A TXA 3B/B28D: 18 CLC 3B/B28E: 69 20 ADC #$20 3B/B290: 85 82 STA $82 3B/B292: BD 01 70 LDA $7001,X 3B/B295: 29 40 AND #$40 3B/B297: F0 14 BEQ $B2AD ; branch if no continuous animation 3B/B299: BD 01 70 LDA $7001,X 3B/B29C: 29 10 AND #$10 3B/B29E: F0 0D BEQ $B2AD 3B/B2A0: A5 00 LDA $00 3B/B2A2: 29 10 AND #$10 3B/B2A4: F0 07 BEQ $B2AD 3B/B2A6: A5 82 LDA $82 3B/B2A8: 38 SEC 3B/B2A9: E9 08 SBC #$08 3B/B2AB: 85 82 STA $82 3B/B2AD: 68 PLA 3B/B2AE: F0 13 BEQ $B2C3 ; branch if animation frame 0 3B/B2B0: BD 01 70 LDA $7001,X 3B/B2B3: 29 F0 AND #$F0 3B/B2B5: D0 0C BNE $B2C3 3B/B2B7: BD 07 70 LDA $7007,X ; y subtile position 3B/B2BA: F0 05 BEQ $B2C1 3B/B2BC: C6 40 DEC $40 ; shift up one pixel 3B/B2BE: 4C C3 B2 JMP $B2C3 3B/B2C1: C6 41 DEC $41 ; shift left one pixel 3B/B2C3: 4C AD AE JMP $AEAD ; draw npc sprite ; player interacted with this npc 3B/B2C6: 86 8F STX $8F 3B/B2C8: 29 7F AND #$7F 3B/B2CA: 9D 0D 70 STA $700D,X ; clear player interaction flag 3B/B2CD: 8A TXA 3B/B2CE: 18 CLC 3B/B2CF: 69 20 ADC #$20 3B/B2D1: 85 82 STA $82 3B/B2D3: A5 33 LDA $33 ; player facing direction 3B/B2D5: 4A LSR 3B/B2D6: B0 18 BCS $B2F0 3B/B2D8: 4A LSR 3B/B2D9: B0 0F BCS $B2EA 3B/B2DB: 4A LSR 3B/B2DC: B0 06 BCS $B2E4 ; party facing up -> npc faces down 3B/B2DE: A9 3A LDA #$3A 3B/B2E0: A2 B4 LDX #$B4 3B/B2E2: D0 10 BNE $B2F4 ; party facing down -> npc faces up 3B/B2E4: A9 4A LDA #$4A 3B/B2E6: A2 B4 LDX #$B4 3B/B2E8: D0 0A BNE $B2F4 ; party facing left -> npc faces right 3B/B2EA: A9 1A LDA #$1A 3B/B2EC: A2 B4 LDX #$B4 3B/B2EE: D0 04 BNE $B2F4 ; party facing right -> npc faces left 3B/B2F0: A9 2A LDA #$2A 3B/B2F2: A2 B4 LDX #$B4 3B/B2F4: 85 80 STA $80 3B/B2F6: 86 81 STX $81 3B/B2F8: A6 8F LDX $8F 3B/B2FA: 4C AD AE JMP $AEAD ; draw npc sprite ; [ object command 7: load npcs ] 3B/B2FD: A2 00 LDX #$00 3B/B2FF: A9 00 LDA #$00 3B/B301: 9D 00 70 STA $7000,X ; clear object properties 3B/B304: E8 INX 3B/B305: D0 FA BNE $B301 3B/B307: A9 2C LDA #$2C 3B/B309: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/B30C: A9 00 LDA #$00 3B/B30E: 85 80 STA $80 3B/B310: A9 80 LDA #$80 ; pointers to npc properties (2C/8000) 3B/B312: 85 81 STA $81 3B/B314: AD 84 07 LDA $0784 ; map npc index (map properties byte 4) 3B/B317: 0A ASL 3B/B318: 90 02 BCC $B31C 3B/B31A: E6 81 INC $81 ; second bank 3B/B31C: A8 TAY 3B/B31D: B1 80 LDA ($80),Y 3B/B31F: 85 8C STA $8C ; +$8C: pointer to map's npc properties 3B/B321: C8 INY 3B/B322: B1 80 LDA ($80),Y 3B/B324: 09 80 ORA #$80 3B/B326: 85 8D STA $8D 3B/B328: A9 00 LDA #$00 3B/B32A: 85 8E STA $8E ; +$8E: pointer to object data 1 in ram 3B/B32C: 85 8A STA $8A ; +$8A: pointer to object data 2 in ram 3B/B32E: A9 70 LDA #$70 3B/B330: 85 8F STA $8F 3B/B332: A9 71 LDA #$71 3B/B334: 85 8B STA $8B 3B/B336: A0 00 LDY #$00 3B/B338: B1 8C LDA ($8C),Y 3B/B33A: F0 11 BEQ $B34D ; branch if null-terminator 3B/B33C: 20 4E B3 JSR $B34E ; load npc 3B/B33F: A5 8C LDA $8C 3B/B341: 18 CLC 3B/B342: 69 04 ADC #$04 ; increment pointer 3B/B344: 85 8C STA $8C 3B/B346: 90 EE BCC $B336 3B/B348: E6 8D INC $8D 3B/B34A: 4C 36 B3 JMP $B336 3B/B34D: 60 RTS ; [ load npc ] ; npc properties format (4 bytes each) ; 0: npc id ; 1: x position ; 2: y position ; 3: aaaabbcc ; a: movement type -> $7001 ; b: palette -> $7105 (2/2, 2/3, 3/2, 3/3) ; c: direction -> 3B/B34E: A0 0A LDY #$0A 3B/B350: 91 8E STA ($8E),Y ; $700A: npc id 3B/B352: A8 TAY 3B/B353: 20 1A B5 JSR $B51A ; check npc switch 3B/B356: F0 01 BEQ $B359 3B/B358: 98 TYA 3B/B359: A0 00 LDY #$00 3B/B35B: 91 8E STA ($8E),Y ; $7000 3B/B35D: C8 INY 3B/B35E: B1 8C LDA ($8C),Y ; x position 3B/B360: A0 04 LDY #$04 3B/B362: 91 8E STA ($8E),Y ; $7004 3B/B364: A0 02 LDY #$02 3B/B366: 91 8E STA ($8E),Y ; $7002 3B/B368: 85 84 STA $84 3B/B36A: B1 8C LDA ($8C),Y ; y position 3B/B36C: A0 05 LDY #$05 3B/B36E: 91 8E STA ($8E),Y ; $7005 3B/B370: A0 03 LDY #$03 3B/B372: 91 8E STA ($8E),Y ; $7003 3B/B374: 85 85 STA $85 3B/B376: B1 8C LDA ($8C),Y ; byte 3 3B/B378: 85 86 STA $86 3B/B37A: 29 F0 AND #$F0 3B/B37C: A0 01 LDY #$01 3B/B37E: 91 8E STA ($8E),Y ; $7001 3B/B380: A0 06 LDY #$06 3B/B382: A9 00 LDA #$00 3B/B384: 91 8E STA ($8E),Y ; $7006 3B/B386: C8 INY 3B/B387: 91 8E STA ($8E),Y ; $7007 3B/B389: C8 INY 3B/B38A: 91 8E STA ($8E),Y ; $7008 3B/B38C: C8 INY 3B/B38D: 91 8E STA ($8E),Y ; $7009 3B/B38F: A0 0B LDY #$0B 3B/B391: 91 8E STA ($8E),Y ; $700B 3B/B393: C8 INY 3B/B394: 91 8E STA ($8E),Y ; $700C 3B/B396: C8 INY 3B/B397: 91 8E STA ($8E),Y ; $700D 3B/B399: A0 0F LDY #$0F 3B/B39B: 20 F8 B3 JSR $B3F8 ; get npc animation pointer 3B/B39E: 91 8E STA ($8E),Y ; $700F 3B/B3A0: 88 DEY 3B/B3A1: 8A TXA 3B/B3A2: 91 8E STA ($8E),Y ; $700E 3B/B3A4: A5 86 LDA $86 3B/B3A6: 0A ASL 3B/B3A7: 0A ASL 3B/B3A8: 0A ASL 3B/B3A9: 0A ASL 3B/B3AA: 29 C0 AND #$C0 3B/B3AC: A0 05 LDY #$05 3B/B3AE: 91 8A STA ($8A),Y ; $7105: palette 3B/B3B0: 20 C5 B0 JSR $B0C5 ; check npc passability 3B/B3B3: B9 00 04 LDA $0400,Y 3B/B3B6: 29 37 AND #$37 3B/B3B8: A0 00 LDY #$00 3B/B3BA: 91 8A STA ($8A),Y ; $7100 3B/B3BC: C8 INY 3B/B3BD: 91 8A STA ($8A),Y ; $7101 3B/B3BF: 29 03 AND #$03 3B/B3C1: A0 06 LDY #$06 3B/B3C3: 91 8A STA ($8A),Y ; $7106 3B/B3C5: A9 01 LDA #$01 3B/B3C7: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/B3CA: A0 0A LDY #$0A 3B/B3CC: B1 8E LDA ($8E),Y ; $700A: npc id 3B/B3CE: A8 TAY 3B/B3CF: B9 00 9E LDA $9E00,Y ; 01/BE00 (world 0) 3B/B3D2: A6 78 LDX $78 3B/B3D4: F0 03 BEQ $B3D9 3B/B3D6: B9 00 9F LDA $9F00,Y ; 01/BF00 (not world 0) 3B/B3D9: 48 PHA 3B/B3DA: A4 8E LDY $8E 3B/B3DC: 29 0F AND #$0F 3B/B3DE: 99 02 71 STA $7102,Y ; lo nybble: animation speed 3B/B3E1: 68 PLA 3B/B3E2: 4A LSR 3B/B3E3: 4A LSR 3B/B3E4: 4A LSR 3B/B3E5: 4A LSR 3B/B3E6: 99 03 71 STA $7103,Y ; hi nybble: movement speed 3B/B3E9: A9 2C LDA #$2C 3B/B3EB: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/B3EE: A5 8E LDA $8E 3B/B3F0: 18 CLC 3B/B3F1: 69 10 ADC #$10 ; increment ram pointers 3B/B3F3: 85 8E STA $8E 3B/B3F5: 85 8A STA $8A 3B/B3F7: 60 RTS ; [ get npc animation pointer ] 3B/B3F8: A5 86 LDA $86 3B/B3FA: 29 03 AND #$03 3B/B3FC: F0 12 BEQ $B410 3B/B3FE: C9 01 CMP #$01 3B/B400: F0 13 BEQ $B415 3B/B402: C9 02 CMP #$02 3B/B404: F0 05 BEQ $B40B ; right 3B/B406: A9 B4 LDA #$B4 3B/B408: A2 1A LDX #$1A 3B/B40A: 60 RTS ; left 3B/B40B: A9 B4 LDA #$B4 3B/B40D: A2 2A LDX #$2A 3B/B40F: 60 RTS ; down 3B/B410: A9 B4 LDA #$B4 3B/B412: A2 3A LDX #$3A 3B/B414: 60 RTS ; up 3B/B415: A9 B4 LDA #$B4 3B/B417: A2 4A LDX #$4A 3B/B419: 60 RTS ; npc animation data ; palette combinations (4 * 64 bytes) ; directions: right, left, down, up (4 * 16 bytes) ; animation frames (2 * 8 bytes) ; 8x8 sprites: top left, bottom left, top right, bottom right (4 * 2 bytes) ; tile index, palette/flip flags (2 bytes each) 3B/B41A: 09 42 0B 42 08 42 0A 42 0D 42 0F 42 0C 42 0E 42 ; palette 2/2 3B/B42A: 08 02 0A 02 09 02 0B 02 0C 02 0E 02 0D 02 0F 02 3B/B43A: 00 02 02 02 01 02 03 02 00 02 03 42 01 02 02 42 3B/B44A: 04 02 06 02 05 02 07 02 04 02 07 42 05 02 06 42 3B/B45A: 09 42 0B 43 08 42 0A 43 0D 42 0F 43 0C 42 0E 43 ; palette 2/3 3B/B46A: 08 02 0A 03 09 02 0B 03 0C 02 0E 03 0D 02 0F 03 3B/B47A: 00 02 02 03 01 02 03 03 00 02 03 43 01 02 02 43 3B/B48A: 04 02 06 03 05 02 07 03 04 02 07 43 05 02 06 43 3B/B49A: 09 43 0B 42 08 43 0A 42 0D 43 0F 42 0C 43 0E 42 ; palette 3/2 3B/B4AA: 08 03 0A 02 09 03 0B 02 0C 03 0E 02 0D 03 0F 02 3B/B4BA: 00 03 02 02 01 03 03 02 00 03 03 42 01 03 02 42 3B/B4CA: 04 03 06 02 05 03 07 02 04 03 07 42 05 03 06 42 3B/B4DA: 09 43 0B 43 08 43 0A 43 0D 43 0F 43 0C 43 0E 43 ; palette 3/3 3B/B4EA: 08 03 0A 03 09 03 0B 03 0C 03 0E 03 0D 03 0F 03 3B/B4FA: 00 03 02 03 01 03 03 03 00 03 03 43 01 03 02 43 3B/B50A: 04 03 06 03 05 03 07 03 04 03 07 43 05 03 06 43 ; [ check npc switch ] 3B/B51A: 85 80 STA $80 3B/B51C: 29 07 AND #$07 3B/B51E: AA TAX 3B/B51F: BD 37 B5 LDA $B537,X 3B/B522: 85 81 STA $81 3B/B524: A5 80 LDA $80 3B/B526: 4A LSR 3B/B527: 4A LSR 3B/B528: 4A LSR 3B/B529: A6 78 LDX $78 3B/B52B: F0 03 BEQ $B530 3B/B52D: 18 CLC 3B/B52E: 69 20 ADC #$20 3B/B530: AA TAX 3B/B531: BD 80 60 LDA $6080,X ; npc switches 3B/B534: 25 81 AND $81 3B/B536: 60 RTS 3B/B537: 01 02 04 08 10 20 40 80 ; -------------------------------------------------------------------------- ; [ event commands $E4-$FF ] 3B/B53F: C9 E4 CMP #$E4 3B/B541: 90 12 BCC $B555 3B/B543: 38 SEC 3B/B544: E9 E4 SBC #$E4 3B/B546: 0A ASL 3B/B547: AA TAX 3B/B548: BD 17 B6 LDA $B617,X 3B/B54B: 85 80 STA $80 3B/B54D: BD 18 B6 LDA $B618,X 3B/B550: 85 81 STA $81 3B/B552: 6C 80 00 JMP ($0080) ; [ event commands $D0-$E3 ] 3B/B555: 38 SEC 3B/B556: E9 D0 SBC #$D0 3B/B558: 0A ASL 3B/B559: AA TAX 3B/B55A: BD 67 B5 LDA $B567,X 3B/B55D: 85 80 STA $80 3B/B55F: BD 68 B5 LDA $B568,X 3B/B562: 85 81 STA $81 3B/B564: 6C 80 00 JMP ($0080) ; jump table for event commands $D0-$E3 3B/B567: B58F B597 B59F B5A3 B5A7 B5AA B5AD B5B2 3B/B577: B5B7 B5BA B5D7 B5DA B5DF B5E4 B5EF B5FC 3B/B587: B64F B668 B66F B672 ; [ event command $D0: shake screen ] 3B/B58F: A9 D8 LDA #$D8 ; sound effect $38 3B/B591: 8D 49 7F STA $7F49 3B/B594: 4C 38 B9 JMP $B938 ; [ event command $D1: flash screen + sound effect ] 3B/B597: A9 D9 LDA #$D9 ; sound effect $39 3B/B599: 8D 49 7F STA $7F49 3B/B59C: 4C 13 B9 JMP $B913 ; [ event command $D2: darken bg palette to blue ] 3B/B59F: 18 CLC 3B/B5A0: 4C 03 C0 JMP $C003 ; [ event command $D3: restore darkened bg palette ] 3B/B5A3: 38 SEC 3B/B5A4: 4C 03 C0 JMP $C003 ; [ event command $D4: restore all characters to max hp ] 3B/B5A7: 4C 81 B8 JMP $B881 ; [ event command $D5: restore all characters to max mp ] 3B/B5AA: 4C 62 B8 JMP $B862 ; [ event command $D6: open passage tile (floor) ] 3B/B5AD: A9 5B LDA #$5B 3B/B5AF: 4C A6 B8 JMP $B8A6 ; [ event command $D7: open passage tile (wall) ] 3B/B5B2: A9 5C LDA #$5C 3B/B5B4: 4C A6 B8 JMP $B8A6 ; [ event command $D8: reset game ] 3B/B5B7: 4C 00 C0 JMP $C000 ; program start ; [ event command $D9: make ship chained up ] 3B/B5BA: A9 A9 LDA #$A9 ; (169,184) 3B/B5BC: 8D 01 60 STA $6001 3B/B5BF: A9 B8 LDA #$B8 3B/B5C1: 8D 02 60 STA $6002 3B/B5C4: A9 01 LDA #$01 3B/B5C6: 8D 00 60 STA $6000 3B/B5C9: A9 03 LDA #$03 ; world 3 3B/B5CB: 8D 03 60 STA $6003 3B/B5CE: AD 20 60 LDA $6020 3B/B5D1: 09 20 ORA #$20 3B/B5D3: 8D 20 60 STA $6020 3B/B5D6: 60 RTS ; [ event command $DA: npc dance ] 3B/B5D7: 4C B9 AC JMP $ACB9 ; [ event command $DB: prologue ] 3B/B5DA: A9 80 LDA #$80 3B/B5DC: 85 50 STA $50 3B/B5DE: 60 RTS ; [ event command $DC: epilogue ] 3B/B5DF: A9 81 LDA #$81 3B/B5E1: 85 50 STA $50 3B/B5E3: 60 RTS ; [ event command $DD: ending ] 3B/B5E4: A9 BF LDA #$BF ; push return address: 1F/BFFD 3B/B5E6: 48 PHA 3B/B5E7: A9 FC LDA #$FC 3B/B5E9: 48 PHA 3B/B5EA: A9 1E LDA #$1E 3B/B5EC: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ event command $DE: surface world emerges ] 3B/B5EF: AD 11 60 LDA $6011 3B/B5F2: 09 80 ORA #$80 3B/B5F4: 8D 11 60 STA $6011 3B/B5F7: A9 03 LDA #$03 3B/B5F9: 85 78 STA $78 ; world id 3B/B5FB: 60 RTS ; [ event command $DF: set all characters' hp to 1 ] 3B/B5FC: A2 00 LDX #$00 3B/B5FE: 20 09 B6 JSR $B609 3B/B601: 8A TXA 3B/B602: 18 CLC 3B/B603: 69 40 ADC #$40 3B/B605: AA TAX 3B/B606: D0 F6 BNE $B5FE 3B/B608: 60 RTS ; [ set character's hp to 1 ] 3B/B609: BD 0C 61 LDA $610C,X 3B/B60C: 1D 0D 61 ORA $610D,X 3B/B60F: D0 05 BNE $B616 3B/B611: A9 01 LDA #$01 3B/B613: 9D 0C 61 STA $610C,X ; set hp to 1 3B/B616: 60 RTS ; jump table for event commands $E4-$FF 3B/B617: B672 B672 B672 B673 3B/B61F: B68E B694 B69A B69D B6A0 B6A3 B6A6 B6B4 3B/B62F: B6BF B6D5 B6E0 B6E5 B6EA B6EF B6F4 B70F 3B/B63F: B71C B750 B75E B76C B775 B79D B7A2 B7A3 ; [ event command $E0: reload map palette (no guest npc) ] 3B/B64F: A9 01 LDA #$01 ; don't load guest npc palette 3B/B651: 85 7C STA $7C 3B/B653: A9 3A LDA #$3A 3B/B655: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/B658: 20 09 85 JSR $8509 ; load map palette 3B/B65B: 20 00 FF JSR $FF00 ; wait for vblank 3B/B65E: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3B/B661: A9 00 LDA #$00 3B/B663: 85 80 STA $80 3B/B665: 4C 52 B9 JMP $B952 ; [ event command $E1: reload map palette (w/ guest npc) ] 3B/B668: A9 00 LDA #$00 ; load guest npc palette 3B/B66A: 85 7C STA $7C 3B/B66C: 4C 53 B6 JMP $B653 ; [ event command $E2: flash screen ] 3B/B66F: 4C 13 B9 JMP $B913 ; [ event command $E3-$E6: no effect ] 3B/B672: 60 RTS ; [ event command $E7: take item ] 3B/B673: A5 71 LDA $71 3B/B675: 85 80 STA $80 3B/B677: 20 F0 B8 JSR $B8F0 3B/B67A: E0 20 CPX #$20 3B/B67C: B0 0F BCS $B68D 3B/B67E: BD E0 60 LDA $60E0,X 3B/B681: F0 0A BEQ $B68D 3B/B683: DE E0 60 DEC $60E0,X 3B/B686: D0 05 BNE $B68D 3B/B688: A9 00 LDA #$00 3B/B68A: 9D C0 60 STA $60C0,X 3B/B68D: 60 RTS ; [ event command $E8: clear status (all characters) ] 3B/B68E: 20 B0 B7 JSR $B7B0 ; clear status (all characters) 3B/B691: 4C 5D BA JMP $BA5D ; reload map character graphics ; [ event command $E9: set status (all characters) ] 3B/B694: 20 C2 B7 JSR $B7C2 ; set status (all characters) 3B/B697: 4C 5D BA JMP $BA5D ; reload map character graphics ; [ event command $EA: give gil ] 3B/B69A: 4C D4 B7 JMP $B7D4 ; [ event command $EB: take gil ] 3B/B69D: 4C 0D B8 JMP $B80D ; [ event command $EC: give cp ] 3B/B6A0: 4C 40 B8 JMP $B840 ; [ event command $ED: take cp ] 3B/B6A3: 4C 4E B8 JMP $B84E ; [ event command $EE: set guest npc ] 3B/B6A6: A5 71 LDA $71 3B/B6A8: 8D 0B 60 STA $600B 3B/B6AB: D0 01 BNE $B6AE 3B/B6AD: 60 RTS 3B/B6AE: 20 15 BA JSR $BA15 ; init guest npc 3B/B6B1: 4C 5D BA JMP $BA5D ; reload map character graphics ; [ event command $EF: special animation ] 3B/B6B4: A9 00 LDA #$00 3B/B6B6: 85 BC STA $BC 3B/B6B8: 85 F0 STA $F0 ; reset frame counter 3B/B6BA: A5 71 LDA $71 3B/B6BC: 4C FA A4 JMP $A4FA ; special animation ; [ event command $F0: npc dialogue ] 3B/B6BF: A6 71 LDX $71 3B/B6C1: BD 40 07 LDA $0740,X 3B/B6C4: 85 76 STA $76 ; dialogue id 3B/B6C6: A9 84 LDA #$84 ; dialogue bank 1 (18/8400) 3B/B6C8: A6 78 LDX $78 3B/B6CA: F0 02 BEQ $B6CE ; branch if not world 0 3B/B6CC: A9 86 LDA #$86 ; dialogue bank 2 (18/8600) 3B/B6CE: 85 95 STA $95 ; dialogue pointer offset 3B/B6D0: A9 00 LDA #$00 3B/B6D2: 85 94 STA $94 3B/B6D4: 60 RTS ; [ event command $F1: event dialogue ] 3B/B6D5: A5 71 LDA $71 3B/B6D7: 85 76 STA $76 3B/B6D9: A9 80 LDA #$80 3B/B6DB: 85 7D STA $7D 3B/B6DD: 4C CE B6 JMP $B6CE ; [ event command $F2: set event switch ] 3B/B6E0: A4 71 LDY $71 3B/B6E2: 4C 83 B9 JMP $B983 ; [ event command $F3: clear event switch ] 3B/B6E5: A4 71 LDY $71 3B/B6E7: 4C 99 B9 JMP $B999 ; [ event command $F4: set npc switch ] 3B/B6EA: A4 71 LDY $71 3B/B6EC: 4C B1 B9 JMP $B9B1 ; [ event command $F5: clear npc switch ] 3B/B6EF: A4 71 LDY $71 3B/B6F1: 4C E1 B9 JMP $B9E1 ; [ event command $F6: give item ] 3B/B6F4: A5 71 LDA $71 3B/B6F6: 85 80 STA $80 3B/B6F8: 20 F0 B8 JSR $B8F0 ; check if item can be given 3B/B6FB: 90 08 BCC $B705 3B/B6FD: 20 A3 B7 JSR $B7A3 ; end of event 3B/B700: A9 90 LDA #$90 ; "Can't carry anymore." 3B/B702: 4C D7 B6 JMP $B6D7 ; show event dialogue 3B/B705: A5 80 LDA $80 3B/B707: 9D C0 60 STA $60C0,X ; add item to inventory 3B/B70A: FE E0 60 INC $60E0,X 3B/B70D: 18 CLC 3B/B70E: 60 RTS ; [ event command $F7: battle ] 3B/B70F: A5 71 LDA $71 3B/B711: 85 6A STA $6A 3B/B713: A9 20 LDA #$20 3B/B715: 85 AB STA $AB 3B/B717: A9 40 LDA #$40 3B/B719: 85 44 STA $44 3B/B71B: 60 RTS ; [ event command $F8: play song/sound effect ] 3B/B71C: A5 71 LDA $71 3B/B71E: 30 2C BMI $B74C 3B/B720: C9 7D CMP #$7D 3B/B722: 90 1F BCC $B743 3B/B724: C9 7E CMP #$7E 3B/B726: D0 06 BNE $B72E ; $7E: 3B/B728: A9 02 LDA #$02 3B/B72A: 8D 42 7F STA $7F42 3B/B72D: 60 RTS 3B/B72E: C9 7F CMP #$7F 3B/B730: D0 06 BNE $B738 ; $7F: stop music 3B/B732: A9 04 LDA #$04 3B/B734: 8D 42 7F STA $7F42 3B/B737: 60 RTS ; $7D: fade out music 3B/B738: A9 37 LDA #$37 ; song $37 ??? 3B/B73A: 8D 43 7F STA $7F43 3B/B73D: A9 0C LDA #$0C ; fade out music 3B/B73F: 8D 42 7F STA $7F42 3B/B742: 60 RTS ; $00-$7C: play song 3B/B743: 8D 43 7F STA $7F43 3B/B746: A9 01 LDA #$01 ; play new song 3B/B748: 8D 42 7F STA $7F42 3B/B74B: 60 RTS ; $80-$FF: play sound effect 3B/B74C: 8D 49 7F STA $7F49 ; play sound effect 3B/B74F: 60 RTS ; [ event command $F9: exit (explicit) ] 3B/B750: A5 71 LDA $71 3B/B752: 8D 30 07 STA $0730 3B/B755: A9 00 LDA #$00 3B/B757: 85 45 STA $45 3B/B759: A9 C0 LDA #$C0 3B/B75B: 85 AB STA $AB 3B/B75D: 60 RTS ; [ event command $FA: entrance (explicit) ] 3B/B75E: A5 71 LDA $71 3B/B760: 8D 00 07 STA $0700 3B/B763: A9 00 LDA #$00 3B/B765: 85 45 STA $45 3B/B767: A9 80 LDA #$80 3B/B769: 85 AB STA $AB 3B/B76B: 60 RTS ; [ event command $FB: entrance (map) ] 3B/B76C: A5 71 LDA $71 3B/B76E: 85 45 STA $45 3B/B770: A9 80 LDA #$80 3B/B772: 85 44 STA $44 3B/B774: 60 RTS ; [ event command $FC: wait ] 3B/B775: A5 75 LDA $75 3B/B777: 30 08 BMI $B781 ; branch if not first repeat 3B/B779: A9 80 LDA #$80 3B/B77B: 85 75 STA $75 3B/B77D: A5 71 LDA $71 3B/B77F: 85 74 STA $74 3B/B781: A5 74 LDA $74 3B/B783: 38 SEC 3B/B784: E9 01 SBC #$01 3B/B786: 85 74 STA $74 3B/B788: B0 05 BCS $B78F 3B/B78A: A9 00 LDA #$00 3B/B78C: 85 75 STA $75 3B/B78E: 60 RTS 3B/B78F: A5 72 LDA $72 ; subtract 2 from event pointer 3B/B791: 38 SEC 3B/B792: E9 02 SBC #$02 3B/B794: 85 72 STA $72 3B/B796: A5 73 LDA $73 3B/B798: E9 00 SBC #$00 3B/B79A: 85 73 STA $73 3B/B79C: 60 RTS ; [ event command $FD: exit to previous map ] 3B/B79D: A9 40 LDA #$40 3B/B79F: 85 AB STA $AB 3B/B7A1: 60 RTS ; [ event command $FE: repeat ] ; see 3E/D219 3B/B7A2: 60 RTS ; [ event command $FF: end of event ] 3B/B7A3: A9 00 LDA #$00 3B/B7A5: 85 22 STA $22 ; clear buttons pressed 3B/B7A7: 85 23 STA $23 3B/B7A9: 85 24 STA $24 3B/B7AB: 85 25 STA $25 3B/B7AD: 85 6C STA $6C ; clear event id 3B/B7AF: 60 RTS ; -------------------------------------------------------------------------- ; [ clear status (all characters) ] 3B/B7B0: A2 00 LDX #$00 3B/B7B2: BD 02 61 LDA $6102,X 3B/B7B5: 25 71 AND $71 3B/B7B7: 9D 02 61 STA $6102,X 3B/B7BA: 8A TXA 3B/B7BB: 18 CLC 3B/B7BC: 69 40 ADC #$40 3B/B7BE: AA TAX 3B/B7BF: D0 F1 BNE $B7B2 3B/B7C1: 60 RTS ; [ set status (all characters) ] 3B/B7C2: A2 00 LDX #$00 3B/B7C4: BD 02 61 LDA $6102,X 3B/B7C7: 05 71 ORA $71 3B/B7C9: 9D 02 61 STA $6102,X 3B/B7CC: 8A TXA 3B/B7CD: 18 CLC 3B/B7CE: 69 40 ADC #$40 3B/B7D0: AA TAX 3B/B7D1: D0 F1 BNE $B7C4 3B/B7D3: 60 RTS ; [ give gil ] 3B/B7D4: AD 1D 60 LDA $601D 3B/B7D7: 18 CLC 3B/B7D8: 65 71 ADC $71 3B/B7DA: 8D 1D 60 STA $601D 3B/B7DD: AD 1E 60 LDA $601E 3B/B7E0: 69 00 ADC #$00 3B/B7E2: 8D 1E 60 STA $601E 3B/B7E5: C9 98 CMP #$98 3B/B7E7: B0 14 BCS $B7FD 3B/B7E9: 90 21 BCC $B80C 3B/B7EB: AD 1D 60 LDA $601D 3B/B7EE: C9 96 CMP #$96 3B/B7F0: 90 1A BCC $B80C 3B/B7F2: F0 02 BEQ $B7F6 3B/B7F4: B0 07 BCS $B7FD 3B/B7F6: AD 1C 60 LDA $601C 3B/B7F9: C9 80 CMP #$80 3B/B7FB: 90 0F BCC $B80C 3B/B7FD: A9 7F LDA #$7F 3B/B7FF: 8D 1C 60 STA $601C 3B/B802: A9 96 LDA #$96 3B/B804: 8D 1D 60 STA $601D 3B/B807: A9 98 LDA #$98 3B/B809: 8D 1E 60 STA $601E 3B/B80C: 60 RTS ; [ take gil ] 3B/B80D: AD 1E 60 LDA $601E 3B/B810: D0 0F BNE $B821 3B/B812: AD 1D 60 LDA $601D 3B/B815: C5 71 CMP $71 3B/B817: B0 08 BCS $B821 3B/B819: 20 A3 B7 JSR $B7A3 ; end of event 3B/B81C: A9 02 LDA #$02 3B/B81E: 4C D7 B6 JMP $B6D7 ; show event dialogue 3B/B821: AD 1D 60 LDA $601D 3B/B824: 38 SEC 3B/B825: E5 71 SBC $71 3B/B827: 8D 1D 60 STA $601D 3B/B82A: AD 1E 60 LDA $601E 3B/B82D: E9 00 SBC #$00 3B/B82F: 8D 1E 60 STA $601E 3B/B832: 10 0B BPL $B83F 3B/B834: A9 00 LDA #$00 3B/B836: 8D 1C 60 STA $601C 3B/B839: 8D 1D 60 STA $601D 3B/B83C: 8D 1E 60 STA $601E 3B/B83F: 60 RTS ; [ give cp ] 3B/B840: AD 1B 60 LDA $601B 3B/B843: 18 CLC 3B/B844: 65 71 ADC $71 3B/B846: 90 02 BCC $B84A 3B/B848: A9 FF LDA #$FF 3B/B84A: 8D 1B 60 STA $601B 3B/B84D: 60 RTS ; [ take cp ] 3B/B84E: AD 1B 60 LDA $601B 3B/B851: 38 SEC 3B/B852: E5 71 SBC $71 3B/B854: B0 08 BCS $B85E 3B/B856: 20 A3 B7 JSR $B7A3 3B/B859: A9 03 LDA #$03 3B/B85B: 4C D7 B6 JMP $B6D7 3B/B85E: 8D 1B 60 STA $601B 3B/B861: 60 RTS ; [ restore all characters to max mp ] 3B/B862: A2 00 LDX #$00 3B/B864: 20 73 B8 JSR $B873 3B/B867: A2 40 LDX #$40 3B/B869: 20 73 B8 JSR $B873 3B/B86C: A2 80 LDX #$80 3B/B86E: 20 73 B8 JSR $B873 3B/B871: A2 C0 LDX #$C0 3B/B873: BD 31 61 LDA $6131,X 3B/B876: 9D 30 61 STA $6130,X 3B/B879: E8 INX 3B/B87A: E8 INX 3B/B87B: 8A TXA 3B/B87C: 29 0F AND #$0F 3B/B87E: D0 F3 BNE $B873 3B/B880: 60 RTS ; [ restore all characters to max hp ] 3B/B881: A2 00 LDX #$00 3B/B883: 20 92 B8 JSR $B892 3B/B886: A2 40 LDX #$40 3B/B888: 20 92 B8 JSR $B892 3B/B88B: A2 80 LDX #$80 3B/B88D: 20 92 B8 JSR $B892 3B/B890: A2 C0 LDX #$C0 3B/B892: BD 02 61 LDA $6102,X 3B/B895: 29 C0 AND #$C0 3B/B897: D0 0C BNE $B8A5 3B/B899: BD 0E 61 LDA $610E,X 3B/B89C: 9D 0C 61 STA $610C,X 3B/B89F: BD 0F 61 LDA $610F,X 3B/B8A2: 9D 0D 61 STA $610D,X 3B/B8A5: 60 RTS ; [ open passage tile ] ; A: tile id (change to tile id + 2) 3B/B8A6: 85 82 STA $82 3B/B8A8: A9 00 LDA #$00 3B/B8AA: 85 80 STA $80 3B/B8AC: A9 74 LDA #$74 3B/B8AE: 85 81 STA $81 3B/B8B0: A0 00 LDY #$00 3B/B8B2: B1 80 LDA ($80),Y 3B/B8B4: C5 82 CMP $82 3B/B8B6: F0 0C BEQ $B8C4 3B/B8B8: C8 INY 3B/B8B9: D0 F7 BNE $B8B2 3B/B8BB: E6 81 INC $81 3B/B8BD: A5 81 LDA $81 3B/B8BF: C9 78 CMP #$78 3B/B8C1: 90 EF BCC $B8B2 3B/B8C3: 60 RTS 3B/B8C4: 18 CLC 3B/B8C5: 69 02 ADC #$02 3B/B8C7: 91 80 STA ($80),Y 3B/B8C9: 85 0D STA $0D 3B/B8CB: 98 TYA 3B/B8CC: 29 1F AND #$1F 3B/B8CE: 85 0E STA $0E 3B/B8D0: A5 81 LDA $81 3B/B8D2: 84 81 STY $81 3B/B8D4: 06 81 ASL $81 3B/B8D6: 2A ROL 3B/B8D7: 06 81 ASL $81 3B/B8D9: 2A ROL 3B/B8DA: 06 81 ASL $81 3B/B8DC: 2A ROL 3B/B8DD: 29 1F AND #$1F 3B/B8DF: 38 SEC 3B/B8E0: E5 2A SBC $2A 3B/B8E2: 29 3F AND #$3F 3B/B8E4: 18 CLC 3B/B8E5: 65 2F ADC $2F 3B/B8E7: C9 0F CMP #$0F 3B/B8E9: 90 02 BCC $B8ED 3B/B8EB: E9 0F SBC #$0F 3B/B8ED: 85 0F STA $0F 3B/B8EF: 60 RTS ; [ check if item can be given ] 3B/B8F0: A2 00 LDX #$00 3B/B8F2: BD C0 60 LDA $60C0,X 3B/B8F5: C5 80 CMP $80 3B/B8F7: F0 14 BEQ $B90D ; branch if item in an inventory slot 3B/B8F9: E8 INX 3B/B8FA: E0 20 CPX #$20 3B/B8FC: 90 F4 BCC $B8F2 3B/B8FE: A2 00 LDX #$00 3B/B900: BD C0 60 LDA $60C0,X 3B/B903: F0 06 BEQ $B90B ; find the first empty slot 3B/B905: E8 INX 3B/B906: E0 20 CPX #$20 3B/B908: 90 F6 BCC $B900 ; return carry set if no empty slots 3B/B90A: 60 RTS 3B/B90B: 18 CLC ; return carry clear if empty slot found 3B/B90C: 60 RTS 3B/B90D: BD E0 60 LDA $60E0,X 3B/B910: C9 63 CMP #$63 ; return carry set if qty is 99 3B/B912: 60 RTS ; return carry clear if less than 99 ; [ flash screen ] 3B/B913: A9 00 LDA #$00 3B/B915: 48 PHA 3B/B916: 20 22 B9 JSR $B922 3B/B919: 68 PLA 3B/B91A: 18 CLC 3B/B91B: 69 01 ADC #$01 3B/B91D: C9 11 CMP #$11 3B/B91F: 90 F4 BCC $B915 3B/B921: 60 RTS ; [ flash screen (one frame) ] 3B/B922: 4A LSR 3B/B923: 29 01 AND #$01 ; toggle grayscale every 2 frames 3B/B925: 85 80 STA $80 3B/B927: 20 00 FF JSR $FF00 ; wait for vblank 3B/B92A: A5 80 LDA $80 3B/B92C: 09 1E ORA #$1E 3B/B92E: 8D 01 20 STA $2001 3B/B931: A9 00 LDA #$00 3B/B933: 85 80 STA $80 3B/B935: 4C 52 B9 JMP $B952 ; [ shake screen ] 3B/B938: A9 00 LDA #$00 3B/B93A: 48 PHA 3B/B93B: 20 47 B9 JSR $B947 3B/B93E: 68 PLA 3B/B93F: 18 CLC 3B/B940: 69 01 ADC #$01 3B/B942: C9 11 CMP #$11 3B/B944: 90 F4 BCC $B93A 3B/B946: 60 RTS ; [ shake screen (one frame) ] 3B/B947: 29 02 AND #$02 3B/B949: 85 80 STA $80 3B/B94B: 20 00 FF JSR $FF00 ; wait for vblank 3B/B94E: 4C 52 B9 JMP $B952 ; unused 3B/B951: 60 RTS ; [ update ppu registers (flash/shake screen) ] 3B/B952: 2C 02 20 BIT $2002 ; latch ppu 3B/B955: A5 FD LDA $FD 3B/B957: 85 FF STA $FF 3B/B959: 8D 00 20 STA $2000 3B/B95C: A6 27 LDX $27 3B/B95E: A5 2D LDA $2D 3B/B960: 4A LSR 3B/B961: 90 02 BCC $B965 ; branch if on world map 3B/B963: A6 29 LDX $29 3B/B965: 8A TXA 3B/B966: 0A ASL 3B/B967: 0A ASL 3B/B968: 0A ASL 3B/B969: 0A ASL 3B/B96A: 05 35 ORA $35 3B/B96C: 45 80 EOR $80 3B/B96E: 8D 05 20 STA $2005 ; ppu scroll 3B/B971: A5 2F LDA $2F 3B/B973: 0A ASL 3B/B974: 0A ASL 3B/B975: 0A ASL 3B/B976: 0A ASL 3B/B977: 05 36 ORA $36 3B/B979: 8D 05 20 STA $2005 3B/B97C: A9 3A LDA #$3A 3B/B97E: 85 57 STA $57 3B/B980: 4C 09 C0 JMP $C009 ; update sound ; [ set event switch ] 3B/B983: 84 80 STY $80 3B/B985: B9 D2 BB LDA $BBD2,Y 3B/B988: 85 81 STA $81 3B/B98A: B9 D2 BC LDA $BCD2,Y 3B/B98D: A8 TAY 3B/B98E: B9 20 60 LDA $6020,Y 3B/B991: 05 81 ORA $81 3B/B993: 99 20 60 STA $6020,Y 3B/B996: A4 80 LDY $80 3B/B998: 60 RTS ; [ clear event switch ] 3B/B999: 84 80 STY $80 3B/B99B: B9 D2 BB LDA $BBD2,Y 3B/B99E: 85 81 STA $81 3B/B9A0: B9 D2 BC LDA $BCD2,Y 3B/B9A3: A8 TAY 3B/B9A4: A5 81 LDA $81 3B/B9A6: 49 FF EOR #$FF 3B/B9A8: 39 20 60 AND $6020,Y 3B/B9AB: 99 20 60 STA $6020,Y 3B/B9AE: A4 80 LDY $80 3B/B9B0: 60 RTS ; [ set npc switch ] 3B/B9B1: A5 78 LDA $78 3B/B9B3: D0 16 BNE $B9CB 3B/B9B5: 84 80 STY $80 3B/B9B7: B9 D2 BB LDA $BBD2,Y 3B/B9BA: 85 81 STA $81 3B/B9BC: B9 D2 BC LDA $BCD2,Y 3B/B9BF: A8 TAY 3B/B9C0: B9 80 60 LDA $6080,Y 3B/B9C3: 05 81 ORA $81 3B/B9C5: 99 80 60 STA $6080,Y 3B/B9C8: A4 80 LDY $80 3B/B9CA: 60 RTS ; [ clear npc switch ] 3B/B9CB: 84 80 STY $80 3B/B9CD: B9 D2 BB LDA $BBD2,Y 3B/B9D0: 85 81 STA $81 3B/B9D2: B9 D2 BC LDA $BCD2,Y 3B/B9D5: A8 TAY 3B/B9D6: B9 A0 60 LDA $60A0,Y 3B/B9D9: 05 81 ORA $81 3B/B9DB: 99 A0 60 STA $60A0,Y 3B/B9DE: A4 80 LDY $80 3B/B9E0: 60 RTS 3B/B9E1: A5 78 LDA $78 3B/B9E3: D0 18 BNE $B9FD 3B/B9E5: 84 80 STY $80 3B/B9E7: B9 D2 BB LDA $BBD2,Y 3B/B9EA: 85 81 STA $81 3B/B9EC: B9 D2 BC LDA $BCD2,Y 3B/B9EF: A8 TAY 3B/B9F0: A5 81 LDA $81 3B/B9F2: 49 FF EOR #$FF 3B/B9F4: 39 80 60 AND $6080,Y 3B/B9F7: 99 80 60 STA $6080,Y 3B/B9FA: A4 80 LDY $80 3B/B9FC: 60 RTS 3B/B9FD: 84 80 STY $80 3B/B9FF: B9 D2 BB LDA $BBD2,Y 3B/BA02: 85 81 STA $81 3B/BA04: B9 D2 BC LDA $BCD2,Y 3B/BA07: A8 TAY 3B/BA08: A5 81 LDA $81 3B/BA0A: 49 FF EOR #$FF 3B/BA0C: 39 A0 60 AND $60A0,Y 3B/BA0F: 99 A0 60 STA $60A0,Y 3B/BA12: A4 80 LDY $80 3B/BA14: 60 RTS ; [ init guest npc ] ; identical to 3D/B627 3B/BA15: A9 1F LDA #$1F ; normal maps are 32x32 tiles 3B/BA17: 85 80 STA $80 3B/BA19: A5 2D LDA $2D 3B/BA1B: 4A LSR 3B/BA1C: 90 07 BCC $BA25 ; branch if on world map 3B/BA1E: A5 29 LDA $29 3B/BA20: A4 2A LDY $2A 3B/BA22: 4C 33 BA JMP $BA33 3B/BA25: A9 FF LDA #$FF ; surface world is 256x256 tiles 3B/BA27: 85 80 STA $80 3B/BA29: A5 78 LDA $78 3B/BA2B: D0 02 BNE $BA2F ; floating continent is 128x128 tiles 3B/BA2D: 46 80 LSR $80 3B/BA2F: A5 27 LDA $27 ; world map xy position 3B/BA31: A4 28 LDY $28 3B/BA33: 18 CLC 3B/BA34: 69 07 ADC #$07 ; add 7 to get center position 3B/BA36: 25 80 AND $80 3B/BA38: 85 AC STA $AC ; set guest npc x position 3B/BA3A: 98 TYA 3B/BA3B: 18 CLC 3B/BA3C: 69 07 ADC #$07 3B/BA3E: 25 80 AND $80 3B/BA40: 85 AD STA $AD ; set guest npc y position 3B/BA42: A9 00 LDA #$00 3B/BA44: 85 13 STA $13 ; clear guest npc subtile position 3B/BA46: 85 14 STA $14 3B/BA48: 85 AE STA $AE ; clear guest npc movement speed 3B/BA4A: 85 E1 STA $E1 ; clear guest npc movement stack 3B/BA4C: 85 E2 STA $E2 3B/BA4E: 85 E3 STA $E3 3B/BA50: 85 E4 STA $E4 3B/BA52: 85 A9 STA $A9 ; not waiting for guest npc 3B/BA54: A9 04 LDA #$04 ; guest npc facing down 3B/BA56: 85 A7 STA $A7 3B/BA58: A5 43 LDA $43 ; set guest npc z-level 3B/BA5A: 85 A8 STA $A8 3B/BA5C: 60 RTS ; [ reload map character graphics ] ; including guest npc ; similar to 3E/DD2D 3B/BA5D: AE 0E 60 LDX $600E ; showing character 3B/BA60: BD 02 61 LDA $6102,X 3B/BA63: 29 C0 AND #$C0 3B/BA65: F0 0A BEQ $BA71 ; branch if not dead or stone 3B/BA67: 8A TXA 3B/BA68: 18 CLC 3B/BA69: 69 40 ADC #$40 ; next character slot 3B/BA6B: AA TAX 3B/BA6C: EC 0E 60 CPX $600E 3B/BA6F: D0 EF BNE $BA60 3B/BA71: 8E 0E 60 STX $600E ; set showing character 3B/BA74: A9 0E LDA #$0E ; bank 0E 3B/BA76: 85 67 STA $67 ; character graphics bank 3B/BA78: 85 65 STA $65 ; guest npc graphics bank 3B/BA7A: BD 02 61 LDA $6102,X 3B/BA7D: 29 20 AND #$20 3B/BA7F: F0 04 BEQ $BA85 ; branch if not toad 3B/BA81: A9 16 LDA #$16 3B/BA83: D0 0E BNE $BA93 3B/BA85: BD 02 61 LDA $6102,X 3B/BA88: 29 08 AND #$08 3B/BA8A: F0 04 BEQ $BA90 ; branch if not mini 3B/BA8C: A9 17 LDA #$17 3B/BA8E: D0 03 BNE $BA93 3B/BA90: BD 00 61 LDA $6100,X ; job 3B/BA93: 29 3F AND #$3F 3B/BA95: 18 CLC 3B/BA96: 69 80 ADC #$80 3B/BA98: C9 A0 CMP #$A0 3B/BA9A: 90 04 BCC $BAA0 3B/BA9C: E9 20 SBC #$20 3B/BA9E: E6 67 INC $67 ; bank 0F 3B/BAA0: 85 66 STA $66 3B/BAA2: AD 0B 60 LDA $600B ; guest npc 3B/BAA5: C9 04 CMP #$04 3B/BAA7: F0 2F BEQ $BAD8 ; branch if guzco (shadow) 3B/BAA9: AD 02 61 LDA $6102 3B/BAAC: 2D 42 61 AND $6142 3B/BAAF: 2D 82 61 AND $6182 3B/BAB2: 2D C2 61 AND $61C2 3B/BAB5: AA TAX 3B/BAB6: 29 20 AND #$20 3B/BAB8: C9 20 CMP #$20 3B/BABA: A9 16 LDA #$16 ; 0E/9600 (toad graphics) 3B/BABC: B0 24 BCS $BAE2 ; branch if all characters are toad 3B/BABE: 8A TXA 3B/BABF: 29 08 AND #$08 3B/BAC1: C9 08 CMP #$08 3B/BAC3: A9 17 LDA #$17 ; 0E/9700 (mini graphics) 3B/BAC5: B0 1B BCS $BAE2 ; branch if all characters are mini 3B/BAC7: AD 0B 60 LDA $600B 3B/BACA: 38 SEC 3B/BACB: E9 01 SBC #$01 3B/BACD: C9 03 CMP #$03 3B/BACF: 90 0E BCC $BADF ; branch if not guzco 3B/BAD1: 38 SEC 3B/BAD2: E9 01 SBC #$01 3B/BAD4: C9 03 CMP #$03 3B/BAD6: B0 07 BCS $BADF ; branch if not guzco 3B/BAD8: A9 00 LDA #$00 3B/BADA: C6 65 DEC $65 ; bank 0D 3B/BADC: 4C EF BA JMP $BAEF 3B/BADF: 18 CLC 3B/BAE0: 69 18 ADC #$18 ; 0E/9800 (guest npc graphics) 3B/BAE2: 29 3F AND #$3F 3B/BAE4: 18 CLC 3B/BAE5: 69 80 ADC #$80 3B/BAE7: C9 A0 CMP #$A0 3B/BAE9: 90 04 BCC $BAEF 3B/BAEB: E9 20 SBC #$20 3B/BAED: E6 65 INC $65 ; bank 0F 3B/BAEF: 85 64 STA $64 3B/BAF1: A9 00 LDA #$00 3B/BAF3: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/BAF6: AE 0E 60 LDX $600E 3B/BAF9: BD 02 61 LDA $6102,X 3B/BAFC: 29 20 AND #$20 3B/BAFE: F0 04 BEQ $BB04 3B/BB00: A9 16 LDA #$16 3B/BB02: D0 10 BNE $BB14 3B/BB04: BD 00 61 LDA $6100,X ; job 3B/BB07: D0 0B BNE $BB14 3B/BB09: AD 0E 60 LDA $600E 3B/BB0C: 0A ASL 3B/BB0D: 2A ROL 3B/BB0E: 2A ROL 3B/BB0F: F0 03 BEQ $BB14 3B/BB11: 18 CLC 3B/BB12: 69 16 ADC #$16 3B/BB14: 29 3F AND #$3F 3B/BB16: 0A ASL 3B/BB17: 0A ASL 3B/BB18: AA TAX 3B/BB19: BD 90 96 LDA $9690,X ; load map character palette 3B/BB1C: 8D D2 03 STA $03D2 3B/BB1F: BD 91 96 LDA $9691,X 3B/BB22: 8D D3 03 STA $03D3 3B/BB25: BD 92 96 LDA $9692,X 3B/BB28: 8D D6 03 STA $03D6 3B/BB2B: BD 93 96 LDA $9693,X 3B/BB2E: 8D D7 03 STA $03D7 3B/BB31: AD 0B 60 LDA $600B 3B/BB34: 38 SEC 3B/BB35: E9 01 SBC #$01 3B/BB37: 29 0F AND #$0F 3B/BB39: 0A ASL 3B/BB3A: AA TAX 3B/BB3B: A5 2D LDA $2D 3B/BB3D: 4A LSR 3B/BB3E: B0 11 BCS $BB51 ; branch if not on world map 3B/BB40: BD F8 96 LDA $96F8,X ; 00/96F8 (guest npc palettes) 3B/BB43: 8D DA 03 STA $03DA 3B/BB46: BD F9 96 LDA $96F9,X 3B/BB49: 8D DB 03 STA $03DB 3B/BB4C: A9 0F LDA #$0F 3B/BB4E: 8D D9 03 STA $03D9 3B/BB51: A9 00 LDA #$00 ; clear loop counter 3B/BB53: 85 63 STA $63 3B/BB55: 20 00 FF JSR $FF00 ; wait for vblank ; start of frame loop (loop 0-3: character, loop 4-7: guest npc) 3B/BB58: A5 63 LDA $63 3B/BB5A: C9 08 CMP #$08 3B/BB5C: 90 0A BCC $BB68 ; branch if not last loop 3B/BB5E: 20 0F C0 JSR $C00F ; copy color palettes to ppu 3B/BB61: A9 00 LDA #$00 3B/BB63: 85 80 STA $80 3B/BB65: 4C 52 B9 JMP $B952 3B/BB68: 48 PHA 3B/BB69: E6 63 INC $63 3B/BB6B: 4A LSR ; get ppu address (4 tiles per frame) 3B/BB6C: 6A ROR 3B/BB6D: 6A ROR 3B/BB6E: 29 C0 AND #$C0 ; low byte of ppu address 3B/BB70: A8 TAY 3B/BB71: 68 PLA 3B/BB72: C9 04 CMP #$04 3B/BB74: B0 15 BCS $BB8B ; branch if not a character ; character 3B/BB76: A5 67 LDA $67 3B/BB78: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/BB7B: 2C 02 20 BIT $2002 ; latch ppu 3B/BB7E: A9 10 LDA #$10 ; ppu $1000 3B/BB80: 8D 06 20 STA $2006 ; set ppu address 3B/BB83: 8C 06 20 STY $2006 3B/BB86: A5 66 LDA $66 3B/BB88: 4C 9F BB JMP $BB9F ; guest npc 3B/BB8B: A5 65 LDA $65 3B/BB8D: 20 06 FF JSR $FF06 ; switch prg bank 0 3B/BB90: 2C 02 20 BIT $2002 3B/BB93: A9 11 LDA #$11 ; ppu $1100 3B/BB95: 8D 06 20 STA $2006 3B/BB98: 8C 06 20 STY $2006 3B/BB9B: A5 64 LDA $64 3B/BB9D: F0 1A BEQ $BBB9 ; not guzco 3B/BB9F: 85 81 STA $81 3B/BBA1: 84 80 STY $80 3B/BBA3: A0 00 LDY #$00 3B/BBA5: B1 80 LDA ($80),Y 3B/BBA7: 8D 07 20 STA $2007 3B/BBAA: C8 INY 3B/BBAB: C0 40 CPY #$40 ; copy 4 tiles 3B/BBAD: 90 F6 BCC $BBA5 3B/BBAF: A9 00 LDA #$00 3B/BBB1: 85 80 STA $80 3B/BBB3: 20 52 B9 JSR $B952 3B/BBB6: 4C 55 BB JMP $BB55 ; guzco 3B/BBB9: A2 08 LDX #$08 3B/BBBB: 86 63 STX $63 3B/BBBD: A2 20 LDX #$20 3B/BBBF: 8D 07 20 STA $2007 3B/BBC2: CA DEX 3B/BBC3: D0 FA BNE $BBBF 3B/BBC5: BD 80 8F LDA $8F80,X ; 0D/8F80 (guzco shadow graphics) 3B/BBC8: 8D 07 20 STA $2007 3B/BBCB: E8 INX 3B/BBCC: E0 20 CPX #$20 3B/BBCE: 90 F5 BCC $BBC5 3B/BBD0: B0 E1 BCS $BBB3 ; bit masks for event switches 3B/BBD2: 01 02 04 08 10 20 40 80 3B/BBDA: 01 02 04 08 10 20 40 80 3B/BBE2: 01 02 04 08 10 20 40 80 3B/BBEA: 01 02 04 08 10 20 40 80 3B/BBF2: 01 02 04 08 10 20 40 80 3B/BBFA: 01 02 04 08 10 20 40 80 3B/BC02: 01 02 04 08 10 20 40 80 3B/BC0A: 01 02 04 08 10 20 40 80 3B/BC12: 01 02 04 08 10 20 40 80 3B/BC1A: 01 02 04 08 10 20 40 80 3B/BC22: 01 02 04 08 10 20 40 80 3B/BC2A: 01 02 04 08 10 20 40 80 3B/BC32: 01 02 04 08 10 20 40 80 3B/BC3A: 01 02 04 08 10 20 40 80 3B/BC42: 01 02 04 08 10 20 40 80 3B/BC4A: 01 02 04 08 10 20 40 80 3B/BC52: 01 02 04 08 10 20 40 80 3B/BC5A: 01 02 04 08 10 20 40 80 3B/BC62: 01 02 04 08 10 20 40 80 3B/BC6A: 01 02 04 08 10 20 40 80 3B/BC72: 01 02 04 08 10 20 40 80 3B/BC7A: 01 02 04 08 10 20 40 80 3B/BC82: 01 02 04 08 10 20 40 80 3B/BC8A: 01 02 04 08 10 20 40 80 3B/BC92: 01 02 04 08 10 20 40 80 3B/BC9A: 01 02 04 08 10 20 40 80 3B/BCA2: 01 02 04 08 10 20 40 80 3B/BCAA: 01 02 04 08 10 20 40 80 3B/BCB2: 01 02 04 08 10 20 40 80 3B/BCBA: 01 02 04 08 10 20 40 80 3B/BCC2: 01 02 04 08 10 20 40 80 3B/BCCA: 01 02 04 08 10 20 40 80 ; byte offset for event flags 3B/BCD2: 00 00 00 00 00 00 00 00 3B/BCDA: 01 01 01 01 01 01 01 01 3B/BCE2: 02 02 02 02 02 02 02 02 3B/BCEA: 03 03 03 03 03 03 03 03 3B/BCF2: 04 04 04 04 04 04 04 04 3B/BCFA: 05 05 05 05 05 05 05 05 3B/BD02: 06 06 06 06 06 06 06 06 3B/BD0A: 07 07 07 07 07 07 07 07 3B/BD12: 08 08 08 08 08 08 08 08 3B/BD1A: 09 09 09 09 09 09 09 09 3B/BD22: 0A 0A 0A 0A 0A 0A 0A 0A 3B/BD2A: 0B 0B 0B 0B 0B 0B 0B 0B 3B/BD32: 0C 0C 0C 0C 0C 0C 0C 0C 3B/BD3A: 0D 0D 0D 0D 0D 0D 0D 0D 3B/BD42: 0E 0E 0E 0E 0E 0E 0E 0E 3B/BD4A: 0F 0F 0F 0F 0F 0F 0F 0F 3B/BD52: 10 10 10 10 10 10 10 10 3B/BD5A: 11 11 11 11 11 11 11 11 3B/BD62: 12 12 12 12 12 12 12 12 3B/BD6A: 13 13 13 13 13 13 13 13 3B/BD72: 14 14 14 14 14 14 14 14 3B/BD7A: 15 15 15 15 15 15 15 15 3B/BD82: 16 16 16 16 16 16 16 16 3B/BD8A: 17 17 17 17 17 17 17 17 3B/BD92: 18 18 18 18 18 18 18 18 3B/BD9A: 19 19 19 19 19 19 19 19 3B/BDA2: 1A 1A 1A 1A 1A 1A 1A 1A 3B/BDAA: 1B 1B 1B 1B 1B 1B 1B 1B 3B/BDB2: 1C 1C 1C 1C 1C 1C 1C 1C 3B/BDBA: 1D 1D 1D 1D 1D 1D 1D 1D 3B/BDC2: 1E 1E 1E 1E 1E 1E 1E 1E 3B/BDCA: 1F 1F 1F 1F 1F 1F 1F 1F ; uninitialized padding 3B/BDD2: FF D5 FF F7 FF 77 FF DF FF 77 FF FF FF F5 3B/BDE0: FF F7 FF FF FF FD FF DF FF 77 FF 5F FF 55 FF DF 3B/BDF0: FF 55 FF 77 FF 7D FF 7D FF DD FF 4D FF FD FF FF ; -------------------------------------------------------------------------- ; [ update map background tilemap ] 3B/BE00: A6 30 LDX $30 3B/BE02: BD 61 BF LDA $BF61,X ; ppu address 3B/BE05: 85 80 STA $80 3B/BE07: BD 71 BF LDA $BF71,X 3B/BE0A: 85 81 STA $81 3B/BE0C: A5 31 LDA $31 3B/BE0E: C9 10 CMP #$10 3B/BE10: B0 09 BCS $BE1B 3B/BE12: AA TAX 3B/BE13: 0A ASL 3B/BE14: 05 80 ORA $80 3B/BE16: 85 80 STA $80 3B/BE18: 4C 2A BE JMP $BE2A 3B/BE1B: 29 0F AND #$0F 3B/BE1D: AA TAX 3B/BE1E: 0A ASL 3B/BE1F: 05 80 ORA $80 3B/BE21: 85 80 STA $80 3B/BE23: A5 81 LDA $81 3B/BE25: 18 CLC 3B/BE26: 69 04 ADC #$04 3B/BE28: 85 81 STA $81 3B/BE2A: A5 2D LDA $2D 3B/BE2C: 29 02 AND #$02 3B/BE2E: F0 03 BEQ $BE33 ; branch if moving vertically 3B/BE30: 4C C6 BE JMP $BEC6 ; vertical 3B/BE33: 8A TXA 3B/BE34: 49 0F EOR #$0F 3B/BE36: 18 CLC 3B/BE37: 69 01 ADC #$01 3B/BE39: 85 82 STA $82 3B/BE3B: A0 00 LDY #$00 3B/BE3D: AD 02 20 LDA $2002 3B/BE40: A5 81 LDA $81 3B/BE42: 8D 06 20 STA $2006 3B/BE45: A5 80 LDA $80 3B/BE47: 8D 06 20 STA $2006 3B/BE4A: B9 80 07 LDA $0780,Y ; copy tiles from buffer 3B/BE4D: 8D 07 20 STA $2007 3B/BE50: B9 90 07 LDA $0790,Y 3B/BE53: 8D 07 20 STA $2007 3B/BE56: C8 INY 3B/BE57: C4 82 CPY $82 3B/BE59: 90 EF BCC $BE4A 3B/BE5B: C0 10 CPY #$10 3B/BE5D: B0 1F BCS $BE7E 3B/BE5F: A5 81 LDA $81 3B/BE61: 49 04 EOR #$04 3B/BE63: 8D 06 20 STA $2006 3B/BE66: A5 80 LDA $80 3B/BE68: 29 E0 AND #$E0 3B/BE6A: 8D 06 20 STA $2006 3B/BE6D: B9 80 07 LDA $0780,Y 3B/BE70: 8D 07 20 STA $2007 3B/BE73: B9 90 07 LDA $0790,Y 3B/BE76: 8D 07 20 STA $2007 3B/BE79: C8 INY 3B/BE7A: C0 10 CPY #$10 3B/BE7C: 90 EF BCC $BE6D 3B/BE7E: A5 80 LDA $80 3B/BE80: 18 CLC 3B/BE81: 69 20 ADC #$20 3B/BE83: 85 80 STA $80 3B/BE85: A5 81 LDA $81 3B/BE87: 8D 06 20 STA $2006 3B/BE8A: A5 80 LDA $80 3B/BE8C: 8D 06 20 STA $2006 3B/BE8F: A0 00 LDY #$00 3B/BE91: B9 A0 07 LDA $07A0,Y 3B/BE94: 8D 07 20 STA $2007 3B/BE97: B9 B0 07 LDA $07B0,Y 3B/BE9A: 8D 07 20 STA $2007 3B/BE9D: C8 INY 3B/BE9E: C4 82 CPY $82 3B/BEA0: 90 EF BCC $BE91 3B/BEA2: C0 10 CPY #$10 3B/BEA4: B0 1F BCS $BEC5 3B/BEA6: A5 81 LDA $81 3B/BEA8: 49 04 EOR #$04 3B/BEAA: 8D 06 20 STA $2006 3B/BEAD: A5 80 LDA $80 3B/BEAF: 29 E0 AND #$E0 3B/BEB1: 8D 06 20 STA $2006 3B/BEB4: B9 A0 07 LDA $07A0,Y 3B/BEB7: 8D 07 20 STA $2007 3B/BEBA: B9 B0 07 LDA $07B0,Y 3B/BEBD: 8D 07 20 STA $2007 3B/BEC0: C8 INY 3B/BEC1: C0 10 CPY #$10 3B/BEC3: 90 EF BCC $BEB4 3B/BEC5: 60 RTS ; horizontal 3B/BEC6: A9 0F LDA #$0F 3B/BEC8: 38 SEC 3B/BEC9: E5 30 SBC $30 3B/BECB: 85 82 STA $82 3B/BECD: A0 00 LDY #$00 3B/BECF: AD 02 20 LDA $2002 3B/BED2: A5 81 LDA $81 3B/BED4: 8D 06 20 STA $2006 3B/BED7: A5 80 LDA $80 3B/BED9: 8D 06 20 STA $2006 3B/BEDC: A9 04 LDA #$04 3B/BEDE: 8D 00 20 STA $2000 3B/BEE1: B9 80 07 LDA $0780,Y 3B/BEE4: 8D 07 20 STA $2007 3B/BEE7: B9 A0 07 LDA $07A0,Y 3B/BEEA: 8D 07 20 STA $2007 3B/BEED: C8 INY 3B/BEEE: C4 82 CPY $82 3B/BEF0: 90 EF BCC $BEE1 3B/BEF2: C0 0F CPY #$0F 3B/BEF4: B0 1F BCS $BF15 3B/BEF6: A5 81 LDA $81 3B/BEF8: 29 24 AND #$24 3B/BEFA: 8D 06 20 STA $2006 3B/BEFD: A5 80 LDA $80 3B/BEFF: 29 1F AND #$1F 3B/BF01: 8D 06 20 STA $2006 3B/BF04: B9 80 07 LDA $0780,Y 3B/BF07: 8D 07 20 STA $2007 3B/BF0A: B9 A0 07 LDA $07A0,Y 3B/BF0D: 8D 07 20 STA $2007 3B/BF10: C8 INY 3B/BF11: C0 0F CPY #$0F 3B/BF13: 90 EF BCC $BF04 3B/BF15: A0 00 LDY #$00 3B/BF17: A5 81 LDA $81 3B/BF19: 8D 06 20 STA $2006 3B/BF1C: A5 80 LDA $80 3B/BF1E: 18 CLC 3B/BF1F: 69 01 ADC #$01 3B/BF21: 8D 06 20 STA $2006 3B/BF24: B9 90 07 LDA $0790,Y 3B/BF27: 8D 07 20 STA $2007 3B/BF2A: B9 B0 07 LDA $07B0,Y 3B/BF2D: 8D 07 20 STA $2007 3B/BF30: C8 INY 3B/BF31: C4 82 CPY $82 3B/BF33: 90 EF BCC $BF24 3B/BF35: C0 0F CPY #$0F 3B/BF37: B0 22 BCS $BF5B 3B/BF39: A5 81 LDA $81 3B/BF3B: 29 24 AND #$24 3B/BF3D: 8D 06 20 STA $2006 3B/BF40: A5 80 LDA $80 3B/BF42: 18 CLC 3B/BF43: 69 01 ADC #$01 3B/BF45: 29 1F AND #$1F 3B/BF47: 8D 06 20 STA $2006 3B/BF4A: B9 90 07 LDA $0790,Y 3B/BF4D: 8D 07 20 STA $2007 3B/BF50: B9 B0 07 LDA $07B0,Y 3B/BF53: 8D 07 20 STA $2007 3B/BF56: C8 INY 3B/BF57: C0 0F CPY #$0F 3B/BF59: 90 EF BCC $BF4A 3B/BF5B: A9 88 LDA #$88 3B/BF5D: 8D 00 20 STA $2000 3B/BF60: 60 RTS ; ppu address (lo) 3B/BF61: 00 40 80 C0 00 40 80 C0 00 40 80 C0 00 40 80 C0 ; ppu address (hi) 3B/BF71: 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 ; uninitialized padding 3B/BF81: 57 FF 77 FF D5 FF 7F FF DF FF 5F FF 5D FF 5D 3B/BF90: FF 55 FF 5F FF DF FF FF FF FF FF 75 FF FD FF FF 3B/BFA0: FF D5 FF 7F FF DF FF 55 FF 7F FF 75 FF 55 FF D5 3B/BFB0: FF DD FF 5D FF 55 FF 7D FF 77 FF F7 FF 5F FF FF 3B/BFC0: FF 5F FF F7 FF 1F FF DF FF D7 FF 77 FF 75 FF 7F 3B/BFD0: FF DD FF FF FF D7 FF F7 FF FD FF 7F FF 77 FF FF 3B/BFE0: FF F7 FB 7F FF DF FF 55 FB D7 FF 7F FF D7 FF 5F 3B/BFF0: FF FF FF 5F FF FF FF 7F FF DF FF 5F FF F7 8C FF ; -------------------------------------------------------------------------- ; [ draw characters ] ; A: character position ; 0: main menu ; 1: save slot 1 ; 2: save slot 2 ; 3: save slot 3 / character select 3C/8000: D0 1C BNE $801E 3C/8002: A9 28 LDA #$28 3C/8004: A2 00 LDX #$00 3C/8006: 20 46 80 JSR $8046 3C/8009: A2 40 LDX #$40 3C/800B: A9 58 LDA #$58 3C/800D: 20 46 80 JSR $8046 3C/8010: A2 80 LDX #$80 3C/8012: A9 88 LDA #$88 3C/8014: 20 46 80 JSR $8046 3C/8017: A2 C0 LDX #$C0 3C/8019: A9 B8 LDA #$B8 3C/801B: 4C 46 80 JMP $8046 3C/801E: 38 SEC 3C/801F: E9 01 SBC #$01 3C/8021: 0A ASL 3C/8022: 0A ASL 3C/8023: 0A ASL 3C/8024: 0A ASL 3C/8025: 85 61 STA $61 3C/8027: A6 61 LDX $61 3C/8029: BD 5D 80 LDA $805D,X ; x 3C/802C: 85 40 STA $40 3C/802E: BD 5E 80 LDA $805E,X ; y 3C/8031: 85 41 STA $41 3C/8033: BD 5C 80 LDA $805C,X ; character properties pointer 3C/8036: AA TAX 3C/8037: 20 36 81 JSR $8136 ; draw character sprite 3C/803A: A5 61 LDA $61 3C/803C: 18 CLC 3C/803D: 69 04 ADC #$04 3C/803F: 85 61 STA $61 3C/8041: 29 0F AND #$0F 3C/8043: D0 E2 BNE $8027 3C/8045: 60 RTS ; [ draw character (main menu) ] 3C/8046: 85 41 STA $41 3C/8048: BD 0F 62 LDA $620F,X 3C/804B: 4A LSR 3C/804C: 90 07 BCC $8055 ; branch if front row 3C/804E: A9 28 LDA #$28 3C/8050: 85 40 STA $40 3C/8052: 4C 36 81 JMP $8136 ; draw character sprite 3C/8055: A9 18 LDA #$18 3C/8057: 85 40 STA $40 3C/8059: 4C 36 81 JMP $8136 ; draw character sprite ; ??? one per character (offset, x, y, unused) 3C/805C: 00 18 30 00 3C/8060: 40 88 30 00 3C/8064: 80 18 48 00 3C/8068: C0 88 48 00 3C/806C: 00 18 70 00 3C/8070: 40 88 70 00 3C/8074: 80 18 88 00 3C/8078: C0 88 88 00 3C/807C: 00 18 B0 00 3C/8080: 40 88 B0 00 3C/8084: 80 18 C8 00 3C/8088: C0 88 C8 00 ; [ draw sprites for fat chocobo menu ] 3C/808C: A9 10 LDA #$10 3C/808E: 85 40 STA $40 3C/8090: A9 08 LDA #$08 3C/8092: 85 41 STA $41 3C/8094: 20 D9 80 JSR $80D9 ; draw fat chocobo sprite 3C/8097: A9 A0 LDA #$A0 3C/8099: 85 40 STA $40 3C/809B: A9 28 LDA #$28 3C/809D: 85 41 STA $41 3C/809F: A2 00 LDX #$00 ; character 1 3C/80A1: 20 36 81 JSR $8136 ; draw character sprite 3C/80A4: A9 B8 LDA #$B8 3C/80A6: 85 40 STA $40 3C/80A8: A9 28 LDA #$28 3C/80AA: 85 41 STA $41 3C/80AC: A2 40 LDX #$40 ; character 2 3C/80AE: 20 36 81 JSR $8136 ; draw character sprite 3C/80B1: A9 D0 LDA #$D0 3C/80B3: 85 40 STA $40 3C/80B5: A9 28 LDA #$28 3C/80B7: 85 41 STA $41 3C/80B9: A2 80 LDX #$80 ; character 3 3C/80BB: 20 36 81 JSR $8136 ; draw character sprite 3C/80BE: A9 E8 LDA #$E8 3C/80C0: 85 40 STA $40 3C/80C2: A9 28 LDA #$28 3C/80C4: 85 41 STA $41 3C/80C6: A2 C0 LDX #$C0 ; character 4 3C/80C8: 4C 36 81 JMP $8136 ; draw character sprite ; [ draw guest npc sprite (main menu) ] 3C/80CB: D0 0B BNE $80D8 3C/80CD: A9 D0 LDA #$D0 ; x position 3C/80CF: 85 40 STA $40 3C/80D1: A9 A0 LDA #$A0 ; y position 3C/80D3: 85 41 STA $41 3C/80D5: 4C F9 80 JMP $80F9 3C/80D8: 60 RTS ; [ draw fat chocobo sprite ] 3C/80D9: A9 00 LDA #$00 3C/80DB: 85 82 STA $82 3C/80DD: A5 F0 LDA $F0 3C/80DF: 29 08 AND #$08 ; change sprite every 8 frames 3C/80E1: D0 0B BNE $80EE 3C/80E3: A9 83 LDA #$83 ; 3C/835E (fat chocobo frame 1) 3C/80E5: 85 81 STA $81 3C/80E7: A9 5E LDA #$5E 3C/80E9: 85 80 STA $80 3C/80EB: 4C 9B 81 JMP $819B ; draw sprite 3C/80EE: A9 83 LDA #$83 ; 3C/839F (fat chocobo frame 2) 3C/80F0: 85 81 STA $81 3C/80F2: A9 9F LDA #$9F 3C/80F4: 85 80 STA $80 3C/80F6: 4C 9B 81 JMP $819B ; draw sprite ; [ draw guest npc sprite ] 3C/80F9: AD 0B 60 LDA $600B 3C/80FC: D0 01 BNE $80FF ; branch if there is a guest npc 3C/80FE: 60 RTS 3C/80FF: A9 5A LDA #$5A ; tile offset 3C/8101: 85 82 STA $82 3C/8103: AD 02 61 LDA $6102 3C/8106: 2D 42 61 AND $6142 3C/8109: 2D 82 61 AND $6182 3C/810C: 2D C2 61 AND $61C2 3C/810F: 29 20 AND #$20 3C/8111: F0 06 BEQ $8119 ; branch unless all characters are toads 3C/8113: 20 24 82 JSR $8224 3C/8116: 4C 9B 81 JMP $819B ; draw sprite 3C/8119: AD 0B 60 LDA $600B ; guest npc id 3C/811C: 38 SEC 3C/811D: E9 01 SBC #$01 3C/811F: 18 CLC 3C/8120: 69 19 ADC #$19 ; get guest palette offset 3C/8122: A8 TAY 3C/8123: 20 05 82 JSR $8205 ; get pointer to character sprite data 3C/8126: 4C 9B 81 JMP $819B ; draw sprite ; [ draw character sprite (status menu) ] 3C/8129: A6 7F LDX $7F 3C/812B: A9 58 LDA #$58 3C/812D: 85 40 STA $40 3C/812F: A9 10 LDA #$10 3C/8131: 85 41 STA $41 3C/8133: 4C 36 81 JMP $8136 ; draw character sprite ; [ draw character sprite ] ; draws a character's job sprite or a guest npc sprite ; X: pointer to character properties 3C/8136: A9 00 LDA #$00 3C/8138: E0 00 CPX #$00 3C/813A: F0 0E BEQ $814A ; branch if character 0 3C/813C: A9 12 LDA #$12 3C/813E: E0 40 CPX #$40 3C/8140: F0 08 BEQ $814A ; branch if character 1 3C/8142: A9 24 LDA #$24 3C/8144: E0 80 CPX #$80 3C/8146: F0 02 BEQ $814A ; branch if character 2 3C/8148: A9 36 LDA #$36 3C/814A: 85 82 STA $82 3C/814C: 20 E0 81 JSR $81E0 ; get pointer to character sprite data 3C/814F: BD 02 61 LDA $6102,X 3C/8152: 29 E8 AND #$E8 3C/8154: D0 16 BNE $816C ; branch if dead, stone, toad, mini 3C/8156: BD 02 61 LDA $6102,X 3C/8159: 4A LSR 3C/815A: 90 0D BCC $8169 ; branch if can't equip item 3C/815C: A5 F0 LDA $F0 3C/815E: 29 10 AND #$10 ; change sprite every 16 frames 3C/8160: D0 07 BNE $8169 3C/8162: A5 82 LDA $82 3C/8164: 18 CLC 3C/8165: 69 0C ADC #$0C ; use jumping sprite 3C/8167: 85 82 STA $82 3C/8169: 4C 9B 81 JMP $819B ; draw sprite 3C/816C: 0A ASL 3C/816D: B0 11 BCS $8180 3C/816F: 0A ASL 3C/8170: 0A ASL 3C/8171: B0 1E BCS $8191 3C/8173: 0A ASL 3C/8174: 0A ASL 3C/8175: B0 02 BCS $8179 3C/8177: 90 0E BCC $8187 ; mini 3C/8179: A9 54 LDA #$54 3C/817B: 85 82 STA $82 3C/817D: 4C 9B 81 JMP $819B ; draw sprite ; dead 3C/8180: A9 48 LDA #$48 3C/8182: 85 82 STA $82 3C/8184: 4C 9B 81 JMP $819B ; draw sprite ; stone 3C/8187: A5 82 LDA $82 3C/8189: 18 CLC 3C/818A: 69 06 ADC #$06 3C/818C: 85 82 STA $82 3C/818E: 4C 9B 81 JMP $819B ; draw sprite ; toad 3C/8191: A9 4E LDA #$4E 3C/8193: 85 82 STA $82 3C/8195: 4C 9B 81 JMP $819B ; draw sprite ; [ draw sprite ] ; $26: sprite data pointer (+$0200) ; $40: x-offset ; $41: y-offset ; +$80: source pointer ; $82: tile offset 3C/8198: 86 26 STX $26 ; update sprite data pointer 3C/819A: 60 RTS ; subroutine starts here 3C/819B: A6 26 LDX $26 3C/819D: A0 00 LDY #$00 3C/819F: B1 80 LDA ($80),Y 3C/81A1: C9 FF CMP #$FF 3C/81A3: F0 F3 BEQ $8198 ; branch if null-terminator 3C/81A5: 18 CLC 3C/81A6: 65 41 ADC $41 ; add y-offset 3C/81A8: 85 41 STA $41 3C/81AA: A0 03 LDY #$03 3C/81AC: B1 80 LDA ($80),Y 3C/81AE: 18 CLC 3C/81AF: 65 40 ADC $40 ; add x-offset 3C/81B1: 85 40 STA $40 3C/81B3: A5 41 LDA $41 3C/81B5: 9D 00 02 STA $0200,X ; y position 3C/81B8: A5 40 LDA $40 3C/81BA: 9D 03 02 STA $0203,X ; x position 3C/81BD: A0 01 LDY #$01 3C/81BF: B1 80 LDA ($80),Y 3C/81C1: 18 CLC 3C/81C2: 65 82 ADC $82 3C/81C4: 9D 01 02 STA $0201,X ; tile id 3C/81C7: C8 INY 3C/81C8: B1 80 LDA ($80),Y 3C/81CA: 9D 02 02 STA $0202,X ; flags/palette 3C/81CD: 8A TXA 3C/81CE: 18 CLC 3C/81CF: 69 04 ADC #$04 ; next sprite 3C/81D1: AA TAX 3C/81D2: A5 80 LDA $80 3C/81D4: 18 CLC 3C/81D5: 69 04 ADC #$04 3C/81D7: 85 80 STA $80 3C/81D9: 90 C2 BCC $819D 3C/81DB: E6 81 INC $81 3C/81DD: 4C 9D 81 JMP $819D ; [ get pointer to character sprite data ] 3C/81E0: BD 02 61 LDA $6102,X ; status 3C/81E3: BC 00 61 LDY $6100,X ; job id 3C/81E6: 29 E0 AND #$E0 3C/81E8: F0 07 BEQ $81F1 ; branch if not dead, stone, or toad 3C/81EA: C9 20 CMP #$20 3C/81EC: F0 36 BEQ $8224 ; use palette 2 for toad 3C/81EE: 4C 2D 82 JMP $822D ; use palette 3 for dead or stone 3C/81F1: E0 40 CPX #$40 3C/81F3: 90 10 BCC $8205 ; branch if character 0 3C/81F5: C0 00 CPY #$00 3C/81F7: D0 0C BNE $8205 ; branch if not onion knight 3C/81F9: A0 16 LDY #$16 3C/81FB: E0 40 CPX #$40 3C/81FD: F0 06 BEQ $8205 3C/81FF: C8 INY 3C/8200: E0 80 CPX #$80 3C/8202: F0 01 BEQ $8205 3C/8204: C8 INY 3C/8205: B9 D8 82 LDA $82D8,Y ; palette id 3C/8208: D0 09 BNE $8213 3C/820A: A9 82 LDA #$82 ; 3C/82FA (palette 0) 3C/820C: 85 81 STA $81 3C/820E: A9 FA LDA #$FA 3C/8210: 85 80 STA $80 3C/8212: 60 RTS 3C/8213: C9 01 CMP #$01 3C/8215: D0 09 BNE $8220 3C/8217: A9 83 LDA #$83 ; 3C/8313 (palette 1) 3C/8219: 85 81 STA $81 3C/821B: A9 13 LDA #$13 3C/821D: 85 80 STA $80 3C/821F: 60 RTS 3C/8220: C9 02 CMP #$02 3C/8222: D0 09 BNE $822D 3C/8224: A9 83 LDA #$83 ; 3C/832C (palette 2) 3C/8226: 85 81 STA $81 3C/8228: A9 2C LDA #$2C 3C/822A: 85 80 STA $80 3C/822C: 60 RTS 3C/822D: A9 83 LDA #$83 ; 3C/8345 (palette 3) 3C/822F: 85 81 STA $81 3C/8231: A9 45 LDA #$45 3C/8233: 85 80 STA $80 3C/8235: 60 RTS ; [ draw character sprite (name change menu) ] 3C/8236: A9 00 LDA #$00 3C/8238: 85 82 STA $82 3C/823A: 20 E0 81 JSR $81E0 ; get pointer to character sprite data 3C/823D: 4C 9B 81 JMP $819B ; draw sprite ; [ draw character sprites (save/load menu) ] ; starts at 3C/8241 ; A: slot id 3C/8240: 60 RTS ; subroutine starts here 3C/8241: D0 0C BNE $824F ; slot 1 3C/8243: A5 62 LDA $62 3C/8245: 29 04 AND #$04 3C/8247: F0 F7 BEQ $8240 3C/8249: A9 00 LDA #$00 3C/824B: 85 61 STA $61 3C/824D: F0 1A BEQ $8269 ; slot 2 3C/824F: C9 01 CMP #$01 3C/8251: D0 0C BNE $825F 3C/8253: A5 62 LDA $62 3C/8255: 29 02 AND #$02 3C/8257: F0 E7 BEQ $8240 3C/8259: A9 10 LDA #$10 3C/825B: 85 61 STA $61 3C/825D: D0 0A BNE $8269 ; slot 3 3C/825F: A5 62 LDA $62 3C/8261: 29 01 AND #$01 3C/8263: F0 DB BEQ $8240 3C/8265: A9 20 LDA #$20 3C/8267: 85 61 STA $61 3C/8269: A6 61 LDX $61 3C/826B: BD A8 82 LDA $82A8,X 3C/826E: 85 82 STA $82 3C/8270: BD AA 82 LDA $82AA,X 3C/8273: 85 40 STA $40 3C/8275: BD AB 82 LDA $82AB,X 3C/8278: 85 41 STA $41 3C/827A: BD A9 82 LDA $82A9,X 3C/827D: 85 81 STA $81 3C/827F: A5 61 LDA $61 3C/8281: 29 0C AND #$0C 3C/8283: 0A ASL 3C/8284: 0A ASL 3C/8285: 0A ASL 3C/8286: 0A ASL 3C/8287: 85 80 STA $80 3C/8289: AA TAX 3C/828A: A0 00 LDY #$00 3C/828C: B1 80 LDA ($80),Y 3C/828E: 85 83 STA $83 3C/8290: A0 02 LDY #$02 3C/8292: B1 80 LDA ($80),Y 3C/8294: A4 83 LDY $83 3C/8296: 20 E6 81 JSR $81E6 3C/8299: 20 9B 81 JSR $819B ; draw sprite 3C/829C: A5 61 LDA $61 ; next character 3C/829E: 18 CLC 3C/829F: 69 04 ADC #$04 3C/82A1: 85 61 STA $61 3C/82A3: 29 0F AND #$0F 3C/82A5: D0 C2 BNE $8269 3C/82A7: 60 RTS 3C/82A8: 60 65 18 30 3C/82AC: 66 65 88 30 3C/82B0: 6C 65 18 48 3C/82B4: 72 65 88 48 3C/82B8: 78 69 18 70 3C/82BC: 7E 69 88 70 3C/82C0: 84 69 18 88 3C/82C4: 8A 69 88 88 3C/82C8: 90 6D 18 B0 3C/82CC: 96 6D 88 B0 3C/82D0: 9C 6D 18 C8 3C/82D4: A2 6D 88 C8 ; palette id for each job ; $00: fighter and character 1 onion knight ; $01-$15: other classes ; $16-$18: character 2, 3, 4 onion knight ; $19-$21: guest npcs 3C/82D8: 00 00 01 00 01 00 02 00 02 00 01 01 01 01 01 02 3C/82E8: 02 01 00 02 00 00 01 02 00 00 01 02 01 02 00 00 3C/82F8: 00 00 ; character sprite data (determines palette id) ; x,y coordinates are relative to the previous tile ; palette 0 3C/82FA: 00 00 00 00 3C/82FE: 00 01 00 08 3C/8302: 08 02 00 F8 3C/8306: 00 03 00 08 3C/830A: 08 04 00 F8 3C/830E: 00 05 00 08 3C/8312: FF ; palette 1 3C/8313: 00 00 01 00 3C/8317: 00 01 01 08 3C/831B: 08 02 01 F8 3C/831F: 00 03 01 08 3C/8323: 08 04 01 F8 3C/8327: 00 05 01 08 3C/832B: FF ; palette 2 3C/832C: 00 00 02 00 3C/8330: 00 01 02 08 3C/8334: 08 02 02 F8 3C/8338: 00 03 02 08 3C/833C: 08 04 02 F8 3C/8340: 00 05 02 08 3C/8344: FF ; palette 3 (dead/stone) 3C/8345: 00 00 03 00 3C/8349: 00 01 03 08 3C/834D: 08 02 03 F8 3C/8351: 00 03 03 08 3C/8355: 08 04 03 F8 3C/8359: 00 05 03 08 3C/835D: FF ; fat chocobo sprite data (frame 1) 3C/835E: 00 B0 03 00 3C/8362: 00 B1 03 08 3C/8366: 00 C0 03 08 3C/836A: 00 C1 03 08 3C/836E: 08 B2 03 E8 3C/8372: 00 B3 03 08 3C/8376: 00 C2 03 08 3C/837A: 00 C3 03 08 3C/837E: 08 C4 03 E8 3C/8382: 00 C5 03 08 3C/8386: 00 C8 03 08 3C/838A: 00 C9 03 08 3C/838E: 08 C6 03 E8 3C/8392: 00 C7 03 08 3C/8396: 00 CA 03 08 3C/839A: 00 CB 03 08 3C/839E: FF ; fat chocobo sprite data (frame 2) 3C/839F: 00 B4 03 00 3C/83A3: 00 B5 03 08 3C/83A7: 00 C0 03 08 3C/83AB: 00 C1 03 08 3C/83AF: 08 B6 03 E8 3C/83B3: 00 B7 03 08 3C/83B7: 00 C2 03 08 3C/83BB: 00 C3 03 08 3C/83BF: 08 C4 03 E8 3C/83C3: 00 C5 03 08 3C/83C7: 00 C8 03 08 3C/83CB: 00 C9 03 08 3C/83CF: 08 C6 03 E8 3C/83D3: 00 C7 03 08 3C/83D7: 00 CA 03 08 3C/83DB: 00 CB 03 08 3C/83DF: FF ; pointers to invincible sprite data 3C/83E0: 8586 8586 8504 8586 8492 8586 8504 8586 3C/83F0: 8420 8586 8504 8586 8492 8586 8504 8586 3C/8400: 85C7 85C7 8545 85C7 84CB 85C7 8545 85C7 3C/8410: 8459 85C7 8545 85C7 84CB 85C7 8545 85C7 3C/8420: F8 C2 03 F8 3C/8424: 00 C3 03 08 3C/8428: 00 C4 03 08 3C/842C: 00 C5 03 08 3C/8430: 08 C6 03 E8 3C/8434: 00 D6 03 08 3C/8438: 00 D7 03 08 3C/843C: 00 C9 03 08 3C/8440: 08 CA 03 E8 3C/8444: 00 D8 03 08 3C/8448: 00 D9 03 08 3C/844C: 00 CD 03 08 3C/8450: 08 DA 03 F0 3C/8454: 00 DB 03 08 3C/8458: FF 3C/8459: F8 D0 03 F8 3C/845D: 00 D1 03 08 3C/8461: 00 D2 03 08 3C/8465: 00 D3 03 08 3C/8469: 08 C6 03 E8 3C/846D: 00 DC 03 08 3C/8471: 00 DD 03 08 3C/8475: 00 C9 03 08 3C/8479: 08 CA 03 E8 3C/847D: 00 DE 03 08 3C/8481: 00 DF 03 08 3C/8485: 00 CD 03 08 3C/8489: 08 E0 03 F0 3C/848D: 00 E1 03 08 3C/8491: FF 3C/8492: F8 C2 03 F8 3C/8496: 00 C3 03 08 3C/849A: 00 C4 03 08 3C/849E: 00 C5 03 08 3C/84A2: 08 C6 03 E8 3C/84A6: 00 C7 03 08 3C/84AA: 00 C8 03 08 3C/84AE: 00 C9 03 08 3C/84B2: 08 CA 03 E8 3C/84B6: 00 CB 03 08 3C/84BA: 00 CC 03 08 3C/84BE: 00 CD 03 08 3C/84C2: 08 CE 03 F0 3C/84C6: 00 CF 03 08 3C/84CA: FF 3C/84CB: F8 D0 03 F8 3C/84CF: 00 D1 03 08 3C/84D3: 00 D2 03 08 3C/84D7: 00 D3 03 08 3C/84DB: 08 C6 03 E8 3C/84DF: 00 C7 03 08 3C/84E3: 00 C8 03 08 3C/84E7: 00 C9 03 08 3C/84EB: 08 CA 03 E8 3C/84EF: 00 CB 03 08 3C/84F3: 00 CC 03 08 3C/84F7: 00 CD 03 08 3C/84FB: 08 D4 03 F0 3C/84FF: 00 D5 03 08 3C/8503: FF 3C/8504: F8 E2 03 F8 3C/8508: 00 E3 03 08 3C/850C: 00 E4 03 08 3C/8510: 00 E5 03 08 3C/8514: 08 E6 03 E8 3C/8518: 00 E7 03 08 3C/851C: 00 E8 03 08 3C/8520: 00 E9 03 08 3C/8524: 08 EA 03 E8 3C/8528: 00 EB 03 08 3C/852C: 00 EC 03 08 3C/8530: 00 ED 03 08 3C/8534: 08 EE 03 E8 3C/8538: 00 EF 03 08 3C/853C: 00 F0 03 08 3C/8540: 00 F1 03 08 3C/8544: FF 3C/8545: F8 F2 03 F8 3C/8549: 00 F3 03 08 3C/854D: 00 F4 03 08 3C/8551: 00 F5 03 08 3C/8555: 08 E6 03 E8 3C/8559: 00 E7 03 08 3C/855D: 00 E8 03 08 3C/8561: 00 F6 03 08 3C/8565: 08 EA 03 E8 3C/8569: 00 EB 03 08 3C/856D: 00 EC 03 08 3C/8571: 00 F7 03 08 3C/8575: 08 F8 03 E8 3C/8579: 00 F9 03 08 3C/857D: 00 FA 03 08 3C/8581: 00 FB 03 08 3C/8585: FF 3C/8586: F8 E5 43 F8 3C/858A: 00 E4 43 08 3C/858E: 00 E3 43 08 3C/8592: 00 E2 43 08 3C/8596: 08 E9 43 E8 3C/859A: 00 E8 43 08 3C/859E: 00 E7 43 08 3C/85A2: 00 E6 43 08 3C/85A6: 08 ED 43 E8 3C/85AA: 00 EC 43 08 3C/85AE: 00 EB 43 08 3C/85B2: 00 EA 43 08 3C/85B6: 08 F1 43 E8 3C/85BA: 00 F0 43 08 3C/85BE: 00 EF 43 08 3C/85C2: 00 EE 43 08 3C/85C6: FF 3C/85C7: F8 F5 43 F8 3C/85CB: 00 F4 43 08 3C/85CF: 00 F3 43 08 3C/85D3: 00 F2 43 08 3C/85D7: 08 F6 43 E8 3C/85DB: 00 E8 43 08 3C/85DF: 00 E7 43 08 3C/85E3: 00 E6 43 08 3C/85E7: 08 F7 43 E8 3C/85EB: 00 EC 43 08 3C/85EF: 00 EB 43 08 3C/85F3: 00 EA 43 08 3C/85F7: 08 FB 43 E8 3C/85FB: 00 FA 43 08 3C/85FF: 00 F9 43 08 3C/8603: 00 F8 43 08 3C/8607: FF ; invincible shadow 3C/8608: 00 C0 03 F8 3C/860C: 00 C1 03 08 3C/8610: 00 C1 03 08 3C/8614: 00 C0 43 08 3C/8618: FF 3C/8619: F8 B0 03 F8 3C/861D: 00 B1 03 08 3C/8621: 00 B2 03 08 3C/8625: 00 B3 03 08 3C/8629: 08 B4 03 E8 3C/862D: 00 B5 03 08 3C/8631: 00 B6 03 08 3C/8635: 00 B7 03 08 3C/8639: 08 B8 03 E8 3C/863D: 00 B9 03 08 3C/8641: 00 BA 03 08 3C/8645: 00 BB 03 08 3C/8649: 08 BC 03 E8 3C/864D: 00 BD 03 08 3C/8651: 00 BE 03 08 3C/8655: 00 BF 03 08 3C/8659: FF 3C/865A: F8 A0 03 F8 3C/865E: 00 A1 03 08 3C/8662: 00 A2 03 08 3C/8666: 00 A3 03 08 3C/866A: 08 A4 03 E8 3C/866E: 00 A5 03 08 3C/8672: 00 A6 03 08 3C/8676: 00 A7 03 08 3C/867A: 08 A8 03 E8 3C/867E: 00 A9 03 08 3C/8682: 00 AA 03 08 3C/8686: 00 AB 03 08 3C/868A: 08 AC 03 E8 3C/868E: 00 AD 03 08 3C/8692: 00 AE 03 08 3C/8696: 00 AF 03 08 3C/869A: FF 3C/869B: F8 A0 03 F8 3C/869F: 00 A1 03 08 3C/86A3: 00 A2 03 08 3C/86A7: 00 A3 03 08 3C/86AB: 08 A4 03 E8 3C/86AF: 00 A5 03 08 3C/86B3: 00 A6 03 08 3C/86B7: 00 A7 03 08 3C/86BB: 08 A8 03 E8 3C/86BF: 00 A9 03 08 3C/86C3: 00 AA 03 08 3C/86C7: 00 AB 03 08 3C/86CB: 08 AF 43 E8 3C/86CF: 00 AE 43 08 3C/86D3: 00 AD 43 08 3C/86D7: 00 AC 43 08 3C/86DB: FF 3C/86DC: F8 A0 03 F8 3C/86E0: 00 A1 03 08 3C/86E4: 00 A2 03 08 3C/86E8: 00 A3 03 08 3C/86EC: 08 A4 03 E8 3C/86F0: 00 A5 03 08 3C/86F4: 00 A6 03 08 3C/86F8: 00 A7 03 08 3C/86FC: 08 A8 03 E8 3C/8700: 00 A9 03 08 3C/8704: 00 AA 03 08 3C/8708: 00 AB 03 08 3C/870C: 08 AC 03 E8 3C/8710: 00 AD 03 08 3C/8714: 00 AE 03 08 3C/8718: 00 AF 03 08 3C/871C: FF 3C/871D: 00 9F C3 F8 3C/8721: 00 9E C3 08 3C/8725: 00 9D C3 08 3C/8729: 00 9C C3 08 3C/872D: 08 9B C3 E8 3C/8731: 00 9A C3 08 3C/8735: 00 99 C3 08 3C/8739: 00 98 C3 08 3C/873D: FF 3C/873E: 00 9B 43 F8 3C/8742: 00 9A 43 08 3C/8746: 00 99 43 08 3C/874A: 00 98 43 08 3C/874E: 08 9F 43 E8 3C/8752: 00 9E 43 08 3C/8756: 00 9D 43 08 3C/875A: 00 9C 43 08 3C/875E: FF 3C/875F: 00 98 03 F8 3C/8763: 00 99 03 08 3C/8767: 00 9A 03 08 3C/876B: 00 9B 03 08 3C/876F: 08 9C 03 E8 3C/8773: 00 9D 03 08 3C/8777: 00 9E 03 08 3C/877B: 00 9F 03 08 3C/877F: FF 3C/8780: 00 9C 83 F8 3C/8784: 00 9D 83 08 3C/8788: 00 9E 83 08 3C/878C: 00 9F 83 08 3C/8790: 08 98 83 E8 3C/8794: 00 99 83 08 3C/8798: 00 9A 83 08 3C/879C: 00 9B 83 08 3C/87A0: FF ; [ ] 3C/87A1: A5 33 LDA $33 3C/87A3: 29 0F AND #$0F 3C/87A5: 0A ASL 3C/87A6: 85 80 STA $80 3C/87A8: A5 F0 LDA $F0 3C/87AA: 29 04 AND #$04 3C/87AC: 0A ASL 3C/87AD: 0A ASL 3C/87AE: 0A ASL 3C/87AF: 05 80 ORA $80 3C/87B1: AA TAX 3C/87B2: BD E0 83 LDA $83E0,X 3C/87B5: 85 54 STA $54 3C/87B7: BD E1 83 LDA $83E1,X 3C/87BA: 85 55 STA $55 3C/87BC: 20 CD 87 JSR $87CD 3C/87BF: A9 77 LDA #$77 3C/87C1: 85 41 STA $41 3C/87C3: A9 6F LDA #$6F 3C/87C5: 85 40 STA $40 3C/87C7: 4C 76 88 JMP $8876 3C/87CA: 86 26 STX $26 3C/87CC: 60 RTS ; [ ] 3C/87CD: A9 00 LDA #$00 3C/87CF: 85 80 STA $80 3C/87D1: 85 81 STA $81 3C/87D3: A6 26 LDX $26 3C/87D5: A0 00 LDY #$00 3C/87D7: B1 54 LDA ($54),Y 3C/87D9: 10 1A BPL $87F5 3C/87DB: C9 FF CMP #$FF 3C/87DD: F0 EB BEQ $87CA 3C/87DF: 49 FF EOR #$FF 3C/87E1: 85 82 STA $82 3C/87E3: E6 82 INC $82 3C/87E5: A5 41 LDA $41 3C/87E7: 38 SEC 3C/87E8: E5 82 SBC $82 3C/87EA: 85 41 STA $41 3C/87EC: A5 81 LDA $81 3C/87EE: E9 00 SBC #$00 3C/87F0: 85 81 STA $81 3C/87F2: 4C 00 88 JMP $8800 3C/87F5: 18 CLC 3C/87F6: 65 41 ADC $41 3C/87F8: 85 41 STA $41 3C/87FA: A5 81 LDA $81 3C/87FC: 69 00 ADC #$00 3C/87FE: 85 81 STA $81 3C/8800: A0 03 LDY #$03 3C/8802: B1 54 LDA ($54),Y 3C/8804: 10 16 BPL $881C 3C/8806: 49 FF EOR #$FF 3C/8808: 85 82 STA $82 3C/880A: E6 82 INC $82 3C/880C: A5 40 LDA $40 3C/880E: 38 SEC 3C/880F: E5 82 SBC $82 3C/8811: 85 40 STA $40 3C/8813: A5 80 LDA $80 3C/8815: E9 00 SBC #$00 3C/8817: 85 80 STA $80 3C/8819: 4C 27 88 JMP $8827 3C/881C: 18 CLC 3C/881D: 65 40 ADC $40 3C/881F: 85 40 STA $40 3C/8821: A5 80 LDA $80 3C/8823: 69 00 ADC #$00 3C/8825: 85 80 STA $80 3C/8827: A5 80 LDA $80 3C/8829: 05 81 ORA $81 3C/882B: D0 1C BNE $8849 3C/882D: A5 41 LDA $41 3C/882F: 9D 00 02 STA $0200,X 3C/8832: A5 40 LDA $40 3C/8834: 9D 03 02 STA $0203,X 3C/8837: A0 01 LDY #$01 3C/8839: B1 54 LDA ($54),Y 3C/883B: 9D 01 02 STA $0201,X 3C/883E: C8 INY 3C/883F: B1 54 LDA ($54),Y 3C/8841: 9D 02 02 STA $0202,X 3C/8844: 8A TXA 3C/8845: 18 CLC 3C/8846: 69 04 ADC #$04 3C/8848: AA TAX 3C/8849: A5 54 LDA $54 3C/884B: 18 CLC 3C/884C: 69 04 ADC #$04 3C/884E: 85 54 STA $54 3C/8850: 90 83 BCC $87D5 3C/8852: E6 55 INC $55 3C/8854: 4C D5 87 JMP $87D5 ; [ draw invincible sprite ] 3C/8857: BD E0 83 LDA $83E0,X 3C/885A: 85 54 STA $54 3C/885C: BD E1 83 LDA $83E1,X 3C/885F: 85 55 STA $55 3C/8861: A5 40 LDA $40 3C/8863: 48 PHA 3C/8864: A5 41 LDA $41 3C/8866: 48 PHA 3C/8867: 20 CD 87 JSR $87CD 3C/886A: 20 F1 88 JSR $88F1 3C/886D: 68 PLA 3C/886E: 18 CLC 3C/886F: 69 18 ADC #$18 3C/8871: 85 41 STA $41 3C/8873: 68 PLA 3C/8874: 85 40 STA $40 3C/8876: A5 F0 LDA $F0 ; draw shadow every other frame 3C/8878: 4A LSR 3C/8879: 90 0B BCC $8886 3C/887B: A9 86 LDA #$86 ; 3C/8608 (invincible shadow) 3C/887D: 85 55 STA $55 3C/887F: A9 08 LDA #$08 3C/8881: 85 54 STA $54 3C/8883: 4C CD 87 JMP $87CD 3C/8886: 60 RTS ; [ draw floating continent sprite ] 3C/8887: A2 20 LDX #$20 3C/8889: A0 E0 LDY #$E0 3C/888B: 88 DEY 3C/888C: 20 68 89 JSR $8968 ; check if coordinates are onscreen 3C/888F: B0 25 BCS $88B6 3C/8891: 20 B7 88 JSR $88B7 3C/8894: A5 42 LDA $42 3C/8896: C9 07 CMP #$07 3C/8898: F0 1C BEQ $88B6 3C/889A: A0 00 LDY #$00 3C/889C: A6 26 LDX $26 3C/889E: B9 00 02 LDA $0200,Y 3C/88A1: 9D 00 02 STA $0200,X 3C/88A4: E8 INX 3C/88A5: C8 INY 3C/88A6: C0 18 CPY #$18 3C/88A8: 90 F4 BCC $889E 3C/88AA: 86 26 STX $26 3C/88AC: A2 17 LDX #$17 3C/88AE: A9 F8 LDA #$F8 3C/88B0: 9D 00 02 STA $0200,X 3C/88B3: CA DEX 3C/88B4: 10 FA BPL $88B0 3C/88B6: 60 RTS ; [ ] 3C/88B7: A9 DC LDA #$DC 3C/88B9: 85 54 STA $54 3C/88BB: A9 86 LDA #$86 3C/88BD: 85 55 STA $55 3C/88BF: 4C 61 88 JMP $8861 ; [ ] 3C/88C2: A5 F0 LDA $F0 3C/88C4: 29 08 AND #$08 3C/88C6: F0 02 BEQ $88CA 3C/88C8: A9 41 LDA #$41 3C/88CA: 18 CLC 3C/88CB: 69 5A ADC #$5A 3C/88CD: 85 54 STA $54 3C/88CF: A9 86 LDA #$86 3C/88D1: 69 00 ADC #$00 3C/88D3: 85 55 STA $55 3C/88D5: 20 CD 87 JSR $87CD 3C/88D8: 4C F1 88 JMP $88F1 ; [ ] 3C/88DB: A5 F0 LDA $F0 3C/88DD: 29 10 AND #$10 3C/88DF: F0 02 BEQ $88E3 3C/88E1: A9 41 LDA #$41 3C/88E3: 18 CLC 3C/88E4: 69 19 ADC #$19 3C/88E6: 85 54 STA $54 3C/88E8: A9 86 LDA #$86 3C/88EA: 69 00 ADC #$00 3C/88EC: 85 55 STA $55 3C/88EE: 4C 61 88 JMP $8861 ; [ ] 3C/88F1: A2 0F LDX #$0F 3C/88F3: A5 42 LDA $42 3C/88F5: C9 04 CMP #$04 3C/88F7: B0 0E BCS $8907 3C/88F9: BD 00 02 LDA $0200,X 3C/88FC: 9D F0 02 STA $02F0,X 3C/88FF: A9 F8 LDA #$F8 3C/8901: 9D 00 02 STA $0200,X 3C/8904: CA DEX 3C/8905: 10 F2 BPL $88F9 3C/8907: 60 RTS ; [ draw leviathan shadow sprite ] 3C/8908: AD 20 60 LDA $6020 3C/890B: 29 02 AND #$02 3C/890D: F0 58 BEQ $8967 3C/890F: A5 F0 LDA $F0 3C/8911: 4A LSR 3C/8912: A5 B3 LDA $B3 3C/8914: 69 00 ADC #$00 3C/8916: C9 C0 CMP #$C0 3C/8918: 90 02 BCC $891C 3C/891A: A9 00 LDA #$00 3C/891C: 85 B3 STA $B3 3C/891E: C9 60 CMP #$60 3C/8920: 90 08 BCC $892A 3C/8922: E9 60 SBC #$60 3C/8924: 85 87 STA $87 3C/8926: A9 60 LDA #$60 3C/8928: E5 87 SBC $87 3C/892A: 85 87 STA $87 3C/892C: 4A LSR 3C/892D: 4A LSR 3C/892E: 4A LSR 3C/892F: 4A LSR 3C/8930: 18 CLC 3C/8931: 69 20 ADC #$20 3C/8933: AA TAX 3C/8934: A0 35 LDY #$35 3C/8936: 20 68 89 JSR $8968 ; check if coordinates are onscreen 3C/8939: B0 2C BCS $8967 3C/893B: A5 87 LDA $87 3C/893D: 29 0F AND #$0F 3C/893F: 18 CLC 3C/8940: 65 40 ADC $40 3C/8942: B0 23 BCS $8967 3C/8944: 85 40 STA $40 3C/8946: A5 B3 LDA $B3 3C/8948: 4A LSR 3C/8949: 4A LSR 3C/894A: 4A LSR 3C/894B: A9 00 LDA #$00 3C/894D: B0 02 BCS $8951 3C/894F: A9 21 LDA #$21 3C/8951: A6 B3 LDX $B3 3C/8953: E0 60 CPX #$60 3C/8955: 90 03 BCC $895A 3C/8957: 18 CLC 3C/8958: 69 42 ADC #$42 ; 3C/8742 + $001D (3C/875F) 3C/895A: 69 1D ADC #$1D 3C/895C: 85 54 STA $54 3C/895E: A9 87 LDA #$87 3C/8960: 69 00 ADC #$00 3C/8962: 85 55 STA $55 3C/8964: 4C CD 87 JMP $87CD 3C/8967: 60 RTS ; [ check if coordinates are onscreen ] 3C/8968: 98 TYA 3C/8969: 38 SEC 3C/896A: E5 28 SBC $28 ; world map top position 3C/896C: C9 10 CMP #$10 3C/896E: B0 26 BCS $8996 3C/8970: 0A ASL 3C/8971: 0A ASL 3C/8972: 0A ASL 3C/8973: 0A ASL 3C/8974: 38 SEC 3C/8975: E5 36 SBC $36 ; player vertical subtile position 3C/8977: C9 EC CMP #$EC ; 236 pixels 3C/8979: B0 1B BCS $8996 3C/897B: 85 41 STA $41 3C/897D: 8A TXA 3C/897E: 38 SEC 3C/897F: E5 27 SBC $27 ; world map left position 3C/8981: C9 10 CMP #$10 3C/8983: B0 11 BCS $8996 3C/8985: 0A ASL 3C/8986: 0A ASL 3C/8987: 0A ASL 3C/8988: 0A ASL 3C/8989: 38 SEC 3C/898A: E5 35 SBC $35 ; player horizontal subtile position 3C/898C: 90 08 BCC $8996 3C/898E: C9 F8 CMP #$F8 ; 248 pixels 3C/8990: B0 04 BCS $8996 3C/8992: 85 40 STA $40 3C/8994: 18 CLC 3C/8995: 60 RTS 3C/8996: 38 SEC 3C/8997: 60 RTS ; -------------------------------------------------------------------------- ; [ decode character string $30-$FE ] 3C/8998: C9 80 CMP #$80 3C/899A: 90 12 BCC $89AE ; $80-$8F: current/max mp 3C/899C: E9 80 SBC #$80 3C/899E: C9 08 CMP #$08 3C/89A0: 29 07 AND #$07 3C/89A2: 2A ROL 3C/89A3: 05 67 ORA $67 3C/89A5: AA TAX 3C/89A6: BD 30 61 LDA $6130,X ; mp 3C/89A9: 85 80 STA $80 3C/89AB: 4C 29 8B JMP $8B29 ; copy number to text buffer (2 digits) ; $48-$5D: job level 3C/89AE: C9 48 CMP #$48 3C/89B0: 90 14 BCC $89C6 3C/89B2: E9 48 SBC #$48 3C/89B4: 85 84 STA $84 3C/89B6: 0A ASL 3C/89B7: 05 67 ORA $67 3C/89B9: AA TAX 3C/89BA: BD 10 62 LDA $6210,X ; job level 3C/89BD: 18 CLC 3C/89BE: 69 01 ADC #$01 3C/89C0: 85 80 STA $80 3C/89C2: 4C 29 8B JMP $8B29 ; copy number to text buffer (2 digits) 3C/89C5: 60 RTS ; $40: magic evade % 3C/89C6: A6 67 LDX $67 3C/89C8: C9 40 CMP #$40 3C/89CA: 90 62 BCC $8A2E 3C/89CC: D0 06 BNE $89D4 3C/89CE: BD 1E 61 LDA $611E,X ; magic evade % 3C/89D1: 4C F6 8A JMP $8AF6 ; 2-digit number with percent sign ; $41: evade % 3C/89D4: C9 41 CMP #$41 3C/89D6: D0 06 BNE $89DE 3C/89D8: BD 2C 61 LDA $612C,X ; evade % 3C/89DB: 4C F6 8A JMP $8AF6 ; 2-digit number with percent sign ; $42: hit % 3C/89DE: C9 42 CMP #$42 3C/89E0: D0 13 BNE $89F5 3C/89E2: BD 27 61 LDA $6127,X 3C/89E5: F0 08 BEQ $89EF 3C/89E7: 18 CLC 3C/89E8: 7D 22 61 ADC $6122,X ; hit % 3C/89EB: 6A ROR 3C/89EC: 4C F6 8A JMP $8AF6 ; 2-digit number with percent sign 3C/89EF: BD 22 61 LDA $6122,X 3C/89F2: 4C F6 8A JMP $8AF6 ; 2-digit number with percent sign ; $43: right hand arrow qty 3C/89F5: C9 43 CMP #$43 3C/89F7: D0 06 BNE $89FF 3C/89F9: BD 04 62 LDA $6204,X ; right hand arrow qty 3C/89FC: 4C 06 8A JMP $8A06 ; $44: left hand arrow qty 3C/89FF: C9 44 CMP #$44 3C/8A01: D0 0B BNE $8A0E 3C/8A03: BD 06 62 LDA $6206,X ; left hand arrow qty 3C/8A06: F0 05 BEQ $8A0D 3C/8A08: 85 80 STA $80 3C/8A0A: 4C 20 8B JMP $8B20 ; 2-digit number with colon 3C/8A0D: 60 RTS ; $45: m.evade multiplier 3C/8A0E: C9 45 CMP #$45 3C/8A10: D0 08 BNE $8A1A 3C/8A12: BD 1D 61 LDA $611D,X 3C/8A15: 85 80 STA $80 3C/8A17: 4C 29 8B JMP $8B29 ; copy number to text buffer (2 digits) ; $46: attack mult. 3C/8A1A: C9 46 CMP #$46 3C/8A1C: D0 0A BNE $8A28 3C/8A1E: BD 21 61 LDA $6121,X 3C/8A21: 18 CLC 3C/8A22: 7D 26 61 ADC $6126,X 3C/8A25: 4C 15 8A JMP $8A15 ; $47: defense mult. 3C/8A28: BD 2B 61 LDA $612B,X 3C/8A2B: 4C 15 8A JMP $8A15 ; $30: current hp 3C/8A2E: C9 34 CMP #$34 3C/8A30: B0 58 BCS $8A8A 3C/8A32: C9 30 CMP #$30 3C/8A34: D0 0D BNE $8A43 3C/8A36: BD 0C 61 LDA $610C,X ; current hp 3C/8A39: 85 80 STA $80 3C/8A3B: BD 0D 61 LDA $610D,X 3C/8A3E: 85 81 STA $81 3C/8A40: 4C 62 8B JMP $8B62 ; copy number to text buffer (4 digits) ; $31: max hp 3C/8A43: C9 31 CMP #$31 3C/8A45: D0 15 BNE $8A5C 3C/8A47: BD 0E 61 LDA $610E,X ; max hp 3C/8A4A: 85 80 STA $80 3C/8A4C: BD 0F 61 LDA $610F,X 3C/8A4F: 85 81 STA $81 3C/8A51: 20 F5 8C JSR $8CF5 3C/8A54: 20 F5 8B JSR $8BF5 ; align 4-digit number to the left 3C/8A57: A6 90 LDX $90 3C/8A59: 4C 9D 8B JMP $8B9D ; $32: experience 3C/8A5C: C9 32 CMP #$32 3C/8A5E: D0 12 BNE $8A72 3C/8A60: BD 03 61 LDA $6103,X 3C/8A63: 85 80 STA $80 3C/8A65: BD 04 61 LDA $6104,X 3C/8A68: 85 81 STA $81 3C/8A6A: BD 05 61 LDA $6105,X 3C/8A6D: 85 82 STA $82 3C/8A6F: 4C 83 8B JMP $8B83 ; copy number to text buffer (7 digits) ; $33: attack power 3C/8A72: BD 02 61 LDA $6102,X 3C/8A75: 29 28 AND #$28 3C/8A77: D0 20 BNE $8A99 ; branch if toad or mini 3C/8A79: BD 23 61 LDA $6123,X 3C/8A7C: 18 CLC 3C/8A7D: 7D 28 61 ADC $6128,X 3C/8A80: 85 80 STA $80 3C/8A82: A9 00 LDA #$00 3C/8A84: 2A ROL 3C/8A85: 85 81 STA $81 3C/8A87: 4C 57 8B JMP $8B57 ; copy number to text buffer (3 digits) ; $34: defense 3C/8A8A: C9 38 CMP #$38 3C/8A8C: B0 2B BCS $8AB9 3C/8A8E: C9 34 CMP #$34 3C/8A90: D0 11 BNE $8AA3 3C/8A92: BD 02 61 LDA $6102,X 3C/8A95: 29 28 AND #$28 3C/8A97: F0 04 BEQ $8A9D ; branch if not toad or mini 3C/8A99: A9 01 LDA #$01 ; 1 3C/8A9B: D0 13 BNE $8AB0 3C/8A9D: BD 2D 61 LDA $612D,X 3C/8AA0: 4C B0 8A JMP $8AB0 ; $35: 3C/8AA3: C9 35 CMP #$35 3C/8AA5: D0 06 BNE $8AAD 3C/8AA7: BD 2F 61 LDA $612F,X 3C/8AAA: 4C B0 8A JMP $8AB0 ; $36: magic defense 3C/8AAD: BD 1F 61 LDA $611F,X 3C/8AB0: 85 80 STA $80 3C/8AB2: A9 00 LDA #$00 3C/8AB4: 85 81 STA $81 3C/8AB6: 4C 57 8B JMP $8B57 ; copy number to text buffer (3 digits) ; $38-$3C: mod. stats 3C/8AB9: C9 3D CMP #$3D 3C/8ABB: B0 0F BCS $8ACC 3C/8ABD: 38 SEC 3C/8ABE: E9 38 SBC #$38 3C/8AC0: 18 CLC 3C/8AC1: 65 67 ADC $67 3C/8AC3: AA TAX 3C/8AC4: BD 17 61 LDA $6117,X 3C/8AC7: 85 80 STA $80 3C/8AC9: 4C 29 8B JMP $8B29 ; copy number to text buffer (2 digits) ; $3D: job level 3C/8ACC: D0 06 BNE $8AD4 3C/8ACE: BD 10 61 LDA $6110,X 3C/8AD1: 4C D7 8A JMP $8AD7 ; $3E: level 3C/8AD4: BD 01 61 LDA $6101,X 3C/8AD7: 85 80 STA $80 3C/8AD9: E6 80 INC $80 3C/8ADB: 4C 29 8B JMP $8B29 ; copy number to text buffer (2 digits) ; [ ] ; unused 3C/8ADE: A5 81 LDA $81 3C/8AE0: 48 PHA 3C/8AE1: 20 29 8B JSR $8B29 ; copy number to text buffer (2 digits) 3C/8AE4: A9 C6 LDA #$C6 ; "%" 3C/8AE6: 9D A0 07 STA $07A0,X 3C/8AE9: E6 90 INC $90 3C/8AEB: 68 PLA 3C/8AEC: 85 80 STA $80 3C/8AEE: 20 57 8D JSR $8D57 3C/8AF1: A6 90 LDX $90 3C/8AF3: 4C A9 8B JMP $8BA9 ; [ 2-digit number with percent sign ] 3C/8AF6: 85 80 STA $80 3C/8AF8: 20 29 8B JSR $8B29 ; copy number to text buffer (2 digits) 3C/8AFB: A9 C6 LDA #$C6 ; "%" 3C/8AFD: 9D A0 07 STA $07A0,X 3C/8B00: E6 90 INC $90 3C/8B02: 60 RTS ; [ copy current gil to text buffer ] 3C/8B03: AD 1C 60 LDA $601C ; current gil 3C/8B06: 85 80 STA $80 3C/8B08: AD 1D 60 LDA $601D 3C/8B0B: 85 81 STA $81 3C/8B0D: AD 1E 60 LDA $601E 3C/8B10: 85 82 STA $82 3C/8B12: 4C 83 8B JMP $8B83 ; copy number to text buffer (7 digits) ; [ copy number to text buffer (1 digit) ] ; unused 3C/8B15: A5 80 LDA $80 3C/8B17: 09 80 ORA #$80 3C/8B19: 85 5F STA $5F 3C/8B1B: A6 90 LDX $90 3C/8B1D: 4C AF 8B JMP $8BAF ; copy number to text buffer ; [ 2-digit number with colon (arrow qty) ] 3C/8B20: A6 90 LDX $90 3C/8B22: E6 90 INC $90 3C/8B24: A9 C8 LDA #$C8 ; colon 3C/8B26: 9D A0 07 STA $07A0,X ; fallthrough ; [ copy number to text buffer (2 digits) ] 3C/8B29: 20 57 8D JSR $8D57 ; convert hex to decimal 3C/8B2C: 20 EA 8B JSR $8BEA ; change preceding zeros to spaces 3C/8B2F: A6 90 LDX $90 3C/8B31: 4C A9 8B JMP $8BA9 ; copy number to text buffer ; [ copy save count to text buffer ] 3C/8B34: AD 14 60 LDA $6014 ; save count 3C/8B37: 85 80 STA $80 3C/8B39: A9 00 LDA #$00 3C/8B3B: 85 81 STA $81 3C/8B3D: 20 26 8D JSR $8D26 3C/8B40: 20 E0 8B JSR $8BE0 3C/8B43: A2 19 LDX #$19 3C/8B45: A5 5D LDA $5D 3C/8B47: 9D 80 07 STA $0780,X 3C/8B4A: E8 INX 3C/8B4B: A5 5E LDA $5E 3C/8B4D: 9D 80 07 STA $0780,X 3C/8B50: E8 INX 3C/8B51: A5 5F LDA $5F 3C/8B53: 9D 80 07 STA $0780,X 3C/8B56: 60 RTS ; [ copy number to text buffer (3 digits) ] 3C/8B57: 20 26 8D JSR $8D26 ; convert hex to decimal 3C/8B5A: 20 E0 8B JSR $8BE0 ; change preceding zeros to spaces 3C/8B5D: A6 90 LDX $90 3C/8B5F: 4C A3 8B JMP $8BA3 ; copy number to text buffer ; [ copy number to text buffer (4 digits) ] 3C/8B62: 20 F5 8C JSR $8CF5 ; convert hex to decimal 3C/8B65: 20 D6 8B JSR $8BD6 ; change preceding zeros to spaces 3C/8B68: A6 90 LDX $90 3C/8B6A: 4C 9D 8B JMP $8B9D ; copy number to text buffer ; [ copy number to text buffer (5 digits) ] ; unused 3C/8B6D: 20 B2 8C JSR $8CB2 ; convert hex to decimal 3C/8B70: A6 90 LDX $90 3C/8B72: 20 CC 8B JSR $8BCC ; change preceding zeros to spaces 3C/8B75: 4C 97 8B JMP $8B97 ; copy number to text buffer ; [ copy number to text buffer (6 digits) ] 3C/8B78: 20 6F 8C JSR $8C6F ; convert hex to decimal 3C/8B7B: A6 90 LDX $90 3C/8B7D: 20 C2 8B JSR $8BC2 ; change preceding zeros to spaces 3C/8B80: 4C 91 8B JMP $8B91 ; copy number to text buffer ; [ copy number to text buffer (7 digits) ] 3C/8B83: 20 2C 8C JSR $8C2C ; convert hex to decimal 3C/8B86: 20 B8 8B JSR $8BB8 ; change preceding zeros to spaces 3C/8B89: A6 90 LDX $90 3C/8B8B: A5 59 LDA $59 3C/8B8D: 9D A0 07 STA $07A0,X 3C/8B90: E8 INX 3C/8B91: A5 5A LDA $5A 3C/8B93: 9D A0 07 STA $07A0,X 3C/8B96: E8 INX 3C/8B97: A5 5B LDA $5B 3C/8B99: 9D A0 07 STA $07A0,X 3C/8B9C: E8 INX 3C/8B9D: A5 5C LDA $5C 3C/8B9F: 9D A0 07 STA $07A0,X 3C/8BA2: E8 INX 3C/8BA3: A5 5D LDA $5D 3C/8BA5: 9D A0 07 STA $07A0,X 3C/8BA8: E8 INX 3C/8BA9: A5 5E LDA $5E 3C/8BAB: 9D A0 07 STA $07A0,X 3C/8BAE: E8 INX 3C/8BAF: A5 5F LDA $5F 3C/8BB1: 9D A0 07 STA $07A0,X 3C/8BB4: E8 INX 3C/8BB5: 86 90 STX $90 3C/8BB7: 60 RTS ; [ change preceding zeros to spaces ] 3C/8BB8: A5 59 LDA $59 3C/8BBA: C9 80 CMP #$80 3C/8BBC: D0 36 BNE $8BF4 3C/8BBE: A9 FF LDA #$FF 3C/8BC0: 85 59 STA $59 3C/8BC2: A5 5A LDA $5A 3C/8BC4: C9 80 CMP #$80 3C/8BC6: D0 2C BNE $8BF4 3C/8BC8: A9 FF LDA #$FF 3C/8BCA: 85 5A STA $5A 3C/8BCC: A5 5B LDA $5B 3C/8BCE: C9 80 CMP #$80 3C/8BD0: D0 22 BNE $8BF4 3C/8BD2: A9 FF LDA #$FF 3C/8BD4: 85 5B STA $5B 3C/8BD6: A5 5C LDA $5C 3C/8BD8: C9 80 CMP #$80 3C/8BDA: D0 18 BNE $8BF4 3C/8BDC: A9 FF LDA #$FF 3C/8BDE: 85 5C STA $5C 3C/8BE0: A5 5D LDA $5D 3C/8BE2: C9 80 CMP #$80 3C/8BE4: D0 0E BNE $8BF4 3C/8BE6: A9 FF LDA #$FF 3C/8BE8: 85 5D STA $5D 3C/8BEA: A5 5E LDA $5E 3C/8BEC: C9 80 CMP #$80 3C/8BEE: D0 04 BNE $8BF4 3C/8BF0: A9 FF LDA #$FF 3C/8BF2: 85 5E STA $5E 3C/8BF4: 60 RTS ; [ align 4-digit number to the left ] 3C/8BF5: A5 5C LDA $5C 3C/8BF7: C9 80 CMP #$80 3C/8BF9: D0 30 BNE $8C2B 3C/8BFB: A5 5D LDA $5D 3C/8BFD: 85 5C STA $5C 3C/8BFF: A5 5E LDA $5E 3C/8C01: 85 5D STA $5D 3C/8C03: A5 5F LDA $5F 3C/8C05: 85 5E STA $5E 3C/8C07: A9 FF LDA #$FF 3C/8C09: 85 5F STA $5F 3C/8C0B: A5 5C LDA $5C 3C/8C0D: C9 80 CMP #$80 3C/8C0F: D0 1A BNE $8C2B 3C/8C11: A5 5D LDA $5D 3C/8C13: 85 5C STA $5C 3C/8C15: A5 5E LDA $5E 3C/8C17: 85 5D STA $5D 3C/8C19: A9 FF LDA #$FF 3C/8C1B: 85 5E STA $5E 3C/8C1D: A5 5C LDA $5C 3C/8C1F: C9 80 CMP #$80 3C/8C21: D0 08 BNE $8C2B 3C/8C23: A5 5D LDA $5D 3C/8C25: 85 5C STA $5C 3C/8C27: A9 FF LDA #$FF 3C/8C29: 85 5D STA $5D 3C/8C2B: 60 RTS ; [ convert hex to decimal (7 digits) ] ; ++$80: hex value ; $59-$5F: decimal characters (max 9,999,999) 3C/8C2C: A2 08 LDX #$08 3C/8C2E: A5 82 LDA $82 3C/8C30: DD 6E 8D CMP $8D6E,X ; top byte of millions 3C/8C33: F0 0C BEQ $8C41 3C/8C35: B0 1C BCS $8C53 3C/8C37: CA DEX 3C/8C38: 10 F4 BPL $8C2E 3C/8C3A: A2 80 LDX #$80 ; set millions digit to zero 3C/8C3C: 86 59 STX $59 3C/8C3E: 4C 6F 8C JMP $8C6F 3C/8C41: A5 81 LDA $81 3C/8C43: DD 77 8D CMP $8D77,X ; middle byte of millions 3C/8C46: F0 04 BEQ $8C4C 3C/8C48: 90 ED BCC $8C37 3C/8C4A: B0 07 BCS $8C53 3C/8C4C: A5 80 LDA $80 3C/8C4E: DD 80 8D CMP $8D80,X ; low byte of millions 3C/8C51: 90 E4 BCC $8C37 3C/8C53: A5 80 LDA $80 3C/8C55: 38 SEC 3C/8C56: FD 80 8D SBC $8D80,X ; subtract out millions 3C/8C59: 85 80 STA $80 3C/8C5B: A5 81 LDA $81 3C/8C5D: FD 77 8D SBC $8D77,X 3C/8C60: 85 81 STA $81 3C/8C62: A5 82 LDA $82 3C/8C64: FD 6E 8D SBC $8D6E,X 3C/8C67: 85 82 STA $82 3C/8C69: 8A TXA 3C/8C6A: 18 CLC 3C/8C6B: 69 81 ADC #$81 3C/8C6D: 85 59 STA $59 ; set millions digit ; 6 digits 3C/8C6F: A2 08 LDX #$08 3C/8C71: A5 82 LDA $82 3C/8C73: DD 89 8D CMP $8D89,X ; top byte of hundred-thousands 3C/8C76: F0 0C BEQ $8C84 3C/8C78: B0 1C BCS $8C96 3C/8C7A: CA DEX 3C/8C7B: 10 F4 BPL $8C71 3C/8C7D: A2 80 LDX #$80 3C/8C7F: 86 5A STX $5A 3C/8C81: 4C B2 8C JMP $8CB2 3C/8C84: A5 81 LDA $81 3C/8C86: DD 92 8D CMP $8D92,X 3C/8C89: F0 04 BEQ $8C8F 3C/8C8B: 90 ED BCC $8C7A 3C/8C8D: B0 07 BCS $8C96 3C/8C8F: A5 80 LDA $80 3C/8C91: DD 9B 8D CMP $8D9B,X 3C/8C94: 90 E4 BCC $8C7A 3C/8C96: A5 80 LDA $80 3C/8C98: 38 SEC 3C/8C99: FD 9B 8D SBC $8D9B,X 3C/8C9C: 85 80 STA $80 3C/8C9E: A5 81 LDA $81 3C/8CA0: FD 92 8D SBC $8D92,X 3C/8CA3: 85 81 STA $81 3C/8CA5: A5 82 LDA $82 3C/8CA7: FD 89 8D SBC $8D89,X 3C/8CAA: 85 82 STA $82 3C/8CAC: 8A TXA 3C/8CAD: 18 CLC 3C/8CAE: 69 81 ADC #$81 3C/8CB0: 85 5A STA $5A ; 5 digits 3C/8CB2: A2 08 LDX #$08 3C/8CB4: A5 82 LDA $82 3C/8CB6: DD A4 8D CMP $8DA4,X 3C/8CB9: F0 0C BEQ $8CC7 3C/8CBB: B0 1C BCS $8CD9 3C/8CBD: CA DEX 3C/8CBE: 10 F4 BPL $8CB4 3C/8CC0: A2 80 LDX #$80 3C/8CC2: 86 5B STX $5B 3C/8CC4: 4C F5 8C JMP $8CF5 3C/8CC7: A5 81 LDA $81 3C/8CC9: DD AD 8D CMP $8DAD,X 3C/8CCC: F0 04 BEQ $8CD2 3C/8CCE: 90 ED BCC $8CBD 3C/8CD0: B0 07 BCS $8CD9 3C/8CD2: A5 80 LDA $80 3C/8CD4: DD B6 8D CMP $8DB6,X 3C/8CD7: 90 E4 BCC $8CBD 3C/8CD9: A5 80 LDA $80 3C/8CDB: 38 SEC 3C/8CDC: FD B6 8D SBC $8DB6,X 3C/8CDF: 85 80 STA $80 3C/8CE1: A5 81 LDA $81 3C/8CE3: FD AD 8D SBC $8DAD,X 3C/8CE6: 85 81 STA $81 3C/8CE8: A5 82 LDA $82 3C/8CEA: FD A4 8D SBC $8DA4,X 3C/8CED: 85 82 STA $82 3C/8CEF: 8A TXA 3C/8CF0: 18 CLC 3C/8CF1: 69 81 ADC #$81 3C/8CF3: 85 5B STA $5B ; 4 digits 3C/8CF5: A2 08 LDX #$08 3C/8CF7: A5 81 LDA $81 3C/8CF9: DD BF 8D CMP $8DBF,X 3C/8CFC: F0 0C BEQ $8D0A 3C/8CFE: B0 11 BCS $8D11 3C/8D00: CA DEX 3C/8D01: 10 F4 BPL $8CF7 3C/8D03: A2 80 LDX #$80 3C/8D05: 86 5C STX $5C 3C/8D07: 4C 26 8D JMP $8D26 3C/8D0A: A5 80 LDA $80 3C/8D0C: DD C8 8D CMP $8DC8,X 3C/8D0F: 90 EF BCC $8D00 3C/8D11: A5 80 LDA $80 3C/8D13: 38 SEC 3C/8D14: FD C8 8D SBC $8DC8,X 3C/8D17: 85 80 STA $80 3C/8D19: A5 81 LDA $81 3C/8D1B: FD BF 8D SBC $8DBF,X 3C/8D1E: 85 81 STA $81 3C/8D20: 8A TXA 3C/8D21: 18 CLC 3C/8D22: 69 81 ADC #$81 3C/8D24: 85 5C STA $5C ; 3 digits 3C/8D26: A2 08 LDX #$08 3C/8D28: A5 81 LDA $81 3C/8D2A: DD D1 8D CMP $8DD1,X 3C/8D2D: F0 0C BEQ $8D3B 3C/8D2F: B0 11 BCS $8D42 3C/8D31: CA DEX 3C/8D32: 10 F4 BPL $8D28 3C/8D34: A2 80 LDX #$80 3C/8D36: 86 5D STX $5D 3C/8D38: 4C 57 8D JMP $8D57 3C/8D3B: A5 80 LDA $80 3C/8D3D: DD DA 8D CMP $8DDA,X 3C/8D40: 90 EF BCC $8D31 3C/8D42: A5 80 LDA $80 3C/8D44: 38 SEC 3C/8D45: FD DA 8D SBC $8DDA,X 3C/8D48: 85 80 STA $80 3C/8D4A: A5 81 LDA $81 3C/8D4C: FD D1 8D SBC $8DD1,X 3C/8D4F: 85 81 STA $81 3C/8D51: 8A TXA 3C/8D52: 18 CLC 3C/8D53: 69 81 ADC #$81 3C/8D55: 85 5D STA $5D ; 2 digits 3C/8D57: A2 00 LDX #$00 3C/8D59: A5 80 LDA $80 3C/8D5B: C9 0A CMP #$0A 3C/8D5D: 90 05 BCC $8D64 3C/8D5F: E9 0A SBC #$0A 3C/8D61: E8 INX 3C/8D62: D0 F7 BNE $8D5B 3C/8D64: 09 80 ORA #$80 3C/8D66: 85 5F STA $5F 3C/8D68: 8A TXA 3C/8D69: 09 80 ORA #$80 3C/8D6B: 85 5E STA $5E 3C/8D6D: 60 RTS ; 1,000,000-9,000,000 3C/8D6E: 0F 1E 2D 3D 4C 5B 6A 7A 89 3C/8D77: 42 84 C6 09 4B 8D CF 12 54 3C/8D80: 40 80 C0 00 40 80 C0 00 40 ; 100,000-900,000 3C/8D89: 01 03 04 06 07 09 0A 0C 0D 3C/8D92: 86 0D 93 1A A1 27 AE 35 BB 3C/8D9B: A0 40 E0 80 20 C0 60 00 A0 ; 10,000-90,000 3C/8DA4: 00 00 00 00 00 00 01 01 01 3C/8DAD: 27 4E 75 9C C3 EA 11 38 5F 3C/8DB6: 10 20 30 40 50 60 70 80 90 ; 1000-9000 3C/8DBF: 03 07 0B 0F 13 17 1B 1F 23 3C/8DC8: E8 D0 B8 A0 88 70 58 40 28 ; 100-900 3C/8DD1: 00 00 01 01 01 02 02 03 03 3C/8DDA: 64 C8 2C 90 F4 58 BC 20 84 ; -------------------------------------------------------------------------- ; [ npc item select ] 3C/8DE3: A9 3C LDA #$3C 3C/8DE5: 85 57 STA $57 3C/8DE7: A9 00 LDA #$00 ; hide cursor 1 and 2 3C/8DE9: 85 A2 STA $A2 3C/8DEB: 85 A3 STA $A3 3C/8DED: A9 01 LDA #$01 ; show cursor 3 3C/8DEF: 85 A4 STA $A4 3C/8DF1: A9 80 LDA #$80 ; show page down arrow 3C/8DF3: 85 B4 STA $B4 3C/8DF5: 20 AD 90 JSR $90AD ; show item select window 3C/8DF8: 20 3D 90 JSR $903D 3C/8DFB: A9 00 LDA #$00 3C/8DFD: 8D F0 7A STA $7AF0 3C/8E00: 20 D4 90 JSR $90D4 ; wait for vblank (update cursors) 3C/8E03: A9 08 LDA #$08 3C/8E05: 20 0D 92 JSR $920D ; update cursor 3 position 3C/8E08: A5 25 LDA $25 3C/8E0A: D0 17 BNE $8E23 ; branch if B button is pressed 3C/8E0C: A5 24 LDA $24 3C/8E0E: F0 F0 BEQ $8E00 ; branch if A button is not pressed 3C/8E10: 20 74 8F JSR $8F74 ; cursor sound effect 3C/8E13: AE F0 7A LDX $7AF0 3C/8E16: BD 03 7A LDA $7A03,X 3C/8E19: AA TAX 3C/8E1A: BD C0 60 LDA $60C0,X 3C/8E1D: 48 PHA 3C/8E1E: 20 F2 8F JSR $8FF2 ; inn (return) 3C/8E21: 68 PLA 3C/8E22: 60 RTS 3C/8E23: A9 00 LDA #$00 3C/8E25: F0 F6 BEQ $8E1D ; branch always ; [ calculate inn cost ] 3C/8E27: A9 00 LDA #$00 ; clear gil amount 3C/8E29: 85 61 STA $61 3C/8E2B: 85 62 STA $62 3C/8E2D: 85 63 STA $63 3C/8E2F: 85 80 STA $80 ; number of living characters 3C/8E31: A2 00 LDX #$00 3C/8E33: BD 02 61 LDA $6102,X 3C/8E36: 29 C0 AND #$C0 3C/8E38: D0 02 BNE $8E3C ; branch if character is dead/stone 3C/8E3A: E6 80 INC $80 3C/8E3C: 8A TXA 3C/8E3D: 18 CLC 3C/8E3E: 69 40 ADC #$40 3C/8E40: AA TAX 3C/8E41: D0 F0 BNE $8E33 3C/8E43: A5 80 LDA $80 ; multiply by 5 3C/8E45: 0A ASL 3C/8E46: 0A ASL 3C/8E47: 18 CLC 3C/8E48: 65 80 ADC $80 3C/8E4A: 85 80 STA $80 3C/8E4C: AD 00 7B LDA $7B00 ; gil multiplier (from npc script) 3C/8E4F: 85 61 STA $61 3C/8E51: 20 55 8E JSR $8E55 ; multiply gil 3C/8E54: 60 RTS ; [ multiply gil ] ; ++$61 <- $80 * ++$61 3C/8E55: A9 00 LDA #$00 3C/8E57: 85 81 STA $81 3C/8E59: 85 82 STA $82 3C/8E5B: 85 83 STA $83 3C/8E5D: 85 84 STA $84 3C/8E5F: 46 80 LSR $80 3C/8E61: 90 13 BCC $8E76 3C/8E63: A5 81 LDA $81 3C/8E65: 18 CLC 3C/8E66: 65 61 ADC $61 3C/8E68: 85 81 STA $81 3C/8E6A: A5 82 LDA $82 3C/8E6C: 65 62 ADC $62 3C/8E6E: 85 82 STA $82 3C/8E70: A5 63 LDA $63 3C/8E72: 65 83 ADC $83 3C/8E74: 85 83 STA $83 3C/8E76: 06 61 ASL $61 3C/8E78: 26 62 ROL $62 3C/8E7A: 26 63 ROL $63 3C/8E7C: A5 80 LDA $80 3C/8E7E: D0 DF BNE $8E5F 3C/8E80: A5 81 LDA $81 3C/8E82: 85 61 STA $61 3C/8E84: A5 82 LDA $82 3C/8E86: 85 62 STA $62 3C/8E88: A5 83 LDA $83 3C/8E8A: 85 63 STA $63 3C/8E8C: 60 RTS ; [ inn (main) ] 3C/8E8D: 20 27 8E JSR $8E27 ; calculate inn cost 3C/8E90: A9 04 LDA #$04 ; "Welcome! ; "It'll cost \gil Gil ; "to rest for the night. ; "Will you be staying?" 3C/8E92: 20 F5 8E JSR $8EF5 ; load inn text 3C/8E95: 20 58 8F JSR $8F58 3C/8E98: 20 D1 8F JSR $8FD1 ; show gil window 3C/8E9B: 20 04 8F JSR $8F04 ; get yes/no input 3C/8E9E: 90 03 BCC $8EA3 ; branch if yes 3C/8EA0: 4C F2 8F JMP $8FF2 ; inn (return) 3C/8EA3: A5 61 LDA $61 ; get gil amount 3C/8EA5: 85 80 STA $80 3C/8EA7: A5 62 LDA $62 3C/8EA9: 85 81 STA $81 3C/8EAB: A5 63 LDA $63 3C/8EAD: 85 82 STA $82 3C/8EAF: 20 97 8F JSR $8F97 ; take gil 3C/8EB2: 90 0E BCC $8EC2 ; branch if enough 3C/8EB4: 20 C1 C9 JSR $C9C1 3C/8EB7: A9 6C LDA #$6C ; "Not enough money." 3C/8EB9: 20 F5 8E JSR $8EF5 ; load inn text 3C/8EBC: 20 38 8F JSR $8F38 3C/8EBF: 4C F2 8F JMP $8FF2 ; inn (return) 3C/8EC2: 20 C1 C9 JSR $C9C1 3C/8EC5: A9 4F LDA #$4F ; "Thank you. Rest well…" 3C/8EC7: 20 F5 8E JSR $8EF5 ; load inn text 3C/8ECA: 20 D8 8E JSR $8ED8 ; restore party hp 3C/8ECD: 20 38 8F JSR $8F38 3C/8ED0: AD 01 7B LDA $7B01 3C/8ED3: 85 6C STA $6C ; set event id 3C/8ED5: 4C F2 8F JMP $8FF2 ; inn (return) ; [ restore party hp ] 3C/8ED8: A2 00 LDX #$00 3C/8EDA: BD 02 61 LDA $6102,X 3C/8EDD: 29 C0 AND #$C0 3C/8EDF: D0 0C BNE $8EED ; skip dead/stone characters 3C/8EE1: BD 0E 61 LDA $610E,X 3C/8EE4: 9D 0C 61 STA $610C,X 3C/8EE7: BD 0F 61 LDA $610F,X 3C/8EEA: 9D 0D 61 STA $610D,X 3C/8EED: 8A TXA 3C/8EEE: 18 CLC 3C/8EEF: 69 40 ADC #$40 3C/8EF1: AA TAX 3C/8EF2: D0 E6 BNE $8EDA 3C/8EF4: 60 RTS ; [ load inn text ] 3C/8EF5: 48 PHA 3C/8EF6: 20 B6 C9 JSR $C9B6 3C/8EF9: A9 00 LDA #$00 ; dialogue window 3C/8EFB: 85 96 STA $96 3C/8EFD: 20 02 ED JSR $ED02 ; open window 3C/8F00: 68 PLA 3C/8F01: 4C FF 90 JMP $90FF ; load text (multi-line) ; [ get yes/no input (inn) ] ; clear carry if yes, set carry if no/cancel 3C/8F04: A9 00 LDA #$00 3C/8F06: 85 24 STA $24 3C/8F08: 85 25 STA $25 3C/8F0A: A9 01 LDA #$01 ; yes/no window 3C/8F0C: 85 96 STA $96 3C/8F0E: 20 02 ED JSR $ED02 ; open window 3C/8F11: A9 06 LDA #$06 ; "Yes No" 3C/8F13: 20 FF 90 JSR $90FF ; load text (multi-line) 3C/8F16: A9 00 LDA #$00 3C/8F18: 8D F0 78 STA $78F0 3C/8F1B: A9 01 LDA #$01 ; show cursor 1 3C/8F1D: 85 A2 STA $A2 3C/8F1F: 20 D4 90 JSR $90D4 ; wait for vblank (update cursors) 3C/8F22: A9 04 LDA #$04 3C/8F24: 20 A3 91 JSR $91A3 ; update cursor 1 position 3C/8F27: A5 25 LDA $25 3C/8F29: D0 0B BNE $8F36 ; branch if B button is pressed 3C/8F2B: A5 24 LDA $24 3C/8F2D: F0 F0 BEQ $8F1F ; branch if A button is not pressed 3C/8F2F: AD F0 78 LDA $78F0 3C/8F32: D0 02 BNE $8F36 3C/8F34: 18 CLC 3C/8F35: 60 RTS 3C/8F36: 38 SEC 3C/8F37: 60 RTS ; [ ] 3C/8F38: 20 F0 90 JSR $90F0 3C/8F3B: A9 00 LDA #$00 ; hide cursor sprites 3C/8F3D: 85 A2 STA $A2 3C/8F3F: 85 A3 STA $A3 3C/8F41: 85 A4 STA $A4 3C/8F43: 20 D4 90 JSR $90D4 ; wait for vblank (update cursors) 3C/8F46: 20 81 D2 JSR $D281 ; read joypad registers 3C/8F49: A5 20 LDA $20 3C/8F4B: D0 F6 BNE $8F43 3C/8F4D: 20 D4 90 JSR $90D4 ; wait for vblank (update cursors) 3C/8F50: 20 81 D2 JSR $D281 ; read joypad registers 3C/8F53: A5 20 LDA $20 3C/8F55: F0 F6 BEQ $8F4D 3C/8F57: 60 RTS ; [ ] 3C/8F58: A9 00 LDA #$00 3C/8F5A: 85 24 STA $24 ; reset A/B button pressed 3C/8F5C: 85 25 STA $25 3C/8F5E: 85 47 STA $47 3C/8F60: 85 A3 STA $A3 ; hide cursor 2 and 3 3C/8F62: 85 A4 STA $A4 3C/8F64: 20 81 D2 JSR $D281 ; read joypad registers 3C/8F67: A5 20 LDA $20 3C/8F69: 29 0F AND #$0F 3C/8F6B: 85 A1 STA $A1 ; directions pressed 3C/8F6D: A9 3C LDA #$3C 3C/8F6F: 85 57 STA $57 3C/8F71: 85 B4 STA $B4 3C/8F73: 60 RTS ; [ cursor sound effect ] 3C/8F74: A9 00 LDA #$00 3C/8F76: 85 24 STA $24 3C/8F78: 85 25 STA $25 3C/8F7A: 4C 0D D2 JMP $D20D ; cursor sound effect ; [ ] ; unused ??? 3C/8F7D: 0A ASL 3C/8F7E: AA TAX 3C/8F7F: B0 0B BCS $8F8C 3C/8F81: BD 00 80 LDA $8000,X 3C/8F84: 85 80 STA $80 3C/8F86: BD 01 80 LDA $8001,X 3C/8F89: 85 81 STA $81 3C/8F8B: 60 RTS 3C/8F8C: BD 00 81 LDA $8100,X 3C/8F8F: 85 80 STA $80 3C/8F91: BD 01 81 LDA $8101,X 3C/8F94: 85 81 STA $81 3C/8F96: 60 RTS ; [ take gil ] ; ++$82: amount to take, set carry if not enough 3C/8F97: AD 1E 60 LDA $601E ; current gil 3C/8F9A: C5 82 CMP $82 3C/8F9C: 90 16 BCC $8FB4 3C/8F9E: F0 02 BEQ $8FA2 3C/8FA0: B0 14 BCS $8FB6 3C/8FA2: AD 1D 60 LDA $601D 3C/8FA5: C5 81 CMP $81 3C/8FA7: 90 0B BCC $8FB4 3C/8FA9: F0 02 BEQ $8FAD 3C/8FAB: B0 09 BCS $8FB6 3C/8FAD: AD 1C 60 LDA $601C 3C/8FB0: C5 80 CMP $80 3C/8FB2: B0 02 BCS $8FB6 3C/8FB4: 38 SEC 3C/8FB5: 60 RTS 3C/8FB6: AD 1C 60 LDA $601C 3C/8FB9: 38 SEC 3C/8FBA: E5 80 SBC $80 3C/8FBC: 8D 1C 60 STA $601C 3C/8FBF: AD 1D 60 LDA $601D 3C/8FC2: E5 81 SBC $81 3C/8FC4: 8D 1D 60 STA $601D 3C/8FC7: AD 1E 60 LDA $601E 3C/8FCA: E5 82 SBC $82 3C/8FCC: 8D 1E 60 STA $601E 3C/8FCF: 18 CLC 3C/8FD0: 60 RTS ; [ show gil window ] 3C/8FD1: A9 03 LDA #$03 ; gil window 3C/8FD3: 85 96 STA $96 3C/8FD5: 20 02 ED JSR $ED02 ; open window 3C/8FD8: A9 05 LDA #$05 ; "\partygil Gil" 3C/8FDA: 4C FF 90 JMP $90FF ; load text (multi-line) ; [ inn (init) ] 3C/8FDD: A9 00 LDA #$00 3C/8FDF: 8D F0 78 STA $78F0 ; reset cursor positions 3C/8FE2: 8D F0 79 STA $79F0 3C/8FE5: 8D F0 7A STA $7AF0 3C/8FE8: 8D F1 79 STA $79F1 3C/8FEB: A9 3C LDA #$3C 3C/8FED: 85 57 STA $57 3C/8FEF: 4C 8D 8E JMP $8E8D ; [ inn (return) ] 3C/8FF2: 20 0D D2 JSR $D20D ; cursor sound effect 3C/8FF5: 20 F0 90 JSR $90F0 ; reset sprites 8-15 3C/8FF8: 20 00 FF JSR $FF00 ; wait for vblank 3C/8FFB: A9 02 LDA #$02 3C/8FFD: 8D 14 40 STA $4014 ; dma oam data to ppu 3C/9000: 20 58 C7 JSR $C758 ; update sound 3C/9003: 20 B6 C9 JSR $C9B6 ; close text window (top) 3C/9006: 20 C1 C9 JSR $C9C1 ; close text window (bottom) 3C/9009: A9 00 LDA #$00 ; reset buttons pressed 3C/900B: 85 24 STA $24 3C/900D: 85 25 STA $25 3C/900F: 85 22 STA $22 3C/9011: 85 23 STA $23 3C/9013: 85 47 STA $47 3C/9015: 60 RTS ; [ ] ; unused ??? 3C/9016: 20 81 D2 JSR $D281 ; read joypad registers 3C/9019: A5 20 LDA $20 3C/901B: 85 03 STA $03 3C/901D: 20 81 D2 JSR $D281 ; read joypad registers 3C/9020: 20 D4 90 JSR $90D4 ; wait for vblank (update cursors) 3C/9023: A5 20 LDA $20 3C/9025: C5 03 CMP $03 3C/9027: F0 F4 BEQ $901D 3C/9029: 85 03 STA $03 3C/902B: 20 81 D2 JSR $D281 ; read joypad registers 3C/902E: 20 D4 90 JSR $90D4 ; wait for vblank (update cursors) 3C/9031: A5 20 LDA $20 3C/9033: C5 03 CMP $03 3C/9035: F0 F4 BEQ $902B 3C/9037: A6 04 LDX $04 3C/9039: 9A TXS 3C/903A: 4C F2 8F JMP $8FF2 ; inn (return) ; [ save dialogue window variables ] 3C/903D: A5 38 LDA $38 3C/903F: 8D F8 7A STA $7AF8 3C/9042: A5 39 LDA $39 3C/9044: 8D F9 7A STA $7AF9 3C/9047: A5 97 LDA $97 3C/9049: 8D FA 7A STA $7AFA 3C/904C: A5 98 LDA $98 3C/904E: 8D FB 7A STA $7AFB 3C/9051: A5 3C LDA $3C 3C/9053: 8D FC 7A STA $7AFC 3C/9056: A5 3D LDA $3D 3C/9058: 8D FD 7A STA $7AFD 3C/905B: A5 93 LDA $93 3C/905D: 8D F7 7A STA $7AF7 3C/9060: A5 1C LDA $1C 3C/9062: 8D FE 7A STA $7AFE 3C/9065: A5 1D LDA $1D 3C/9067: 8D FF 7A STA $7AFF 3C/906A: A5 3E LDA $3E 3C/906C: 8D F4 7A STA $7AF4 3C/906F: A5 3F LDA $3F 3C/9071: 8D F5 7A STA $7AF5 3C/9074: 60 RTS ; [ restore dialogue window variables ] 3C/9075: AD F8 7A LDA $7AF8 3C/9078: 85 38 STA $38 3C/907A: AD F9 7A LDA $7AF9 3C/907D: 85 39 STA $39 3C/907F: AD FA 7A LDA $7AFA 3C/9082: 85 97 STA $97 3C/9084: AD FB 7A LDA $7AFB 3C/9087: 85 98 STA $98 3C/9089: AD FC 7A LDA $7AFC 3C/908C: 85 3C STA $3C 3C/908E: AD FD 7A LDA $7AFD 3C/9091: 85 3D STA $3D 3C/9093: AD F7 7A LDA $7AF7 3C/9096: 85 93 STA $93 3C/9098: AD FE 7A LDA $7AFE 3C/909B: 85 1C STA $1C 3C/909D: AD FF 7A LDA $7AFF 3C/90A0: 85 1D STA $1D 3C/90A2: AD F4 7A LDA $7AF4 3C/90A5: 85 3E STA $3E 3C/90A7: AD F5 7A LDA $7AF5 3C/90AA: 85 3F STA $3F 3C/90AC: 60 RTS ; [ show item select window ] 3C/90AD: A9 02 LDA #$02 ; item select window 3C/90AF: 85 96 STA $96 3C/90B1: 20 02 ED JSR $ED02 ; open window 3C/90B4: A9 39 LDA #$39 ; item list 3C/90B6: 4C 0C 91 JMP $910C ; load text (single-line) ; [ remove item from inventory ] ; $80: item id ; $81: quantity to remove 3C/90B9: 20 7E 93 JSR $937E ; find item in inventory 3C/90BC: BD C0 60 LDA $60C0,X 3C/90BF: C5 80 CMP $80 3C/90C1: D0 10 BNE $90D3 3C/90C3: BD E0 60 LDA $60E0,X 3C/90C6: 38 SEC 3C/90C7: E5 81 SBC $81 3C/90C9: 9D E0 60 STA $60E0,X 3C/90CC: D0 05 BNE $90D3 3C/90CE: A9 00 LDA #$00 3C/90D0: 9D C0 60 STA $60C0,X 3C/90D3: 60 RTS ; [ wait for vblank (update cursors) ] ; same as 3C/A7CD but doesn't reset sprites 0-7 3C/90D4: 20 00 FF JSR $FF00 ; wait for vblank 3C/90D7: A9 02 LDA #$02 3C/90D9: 8D 14 40 STA $4014 ; dma oam data to ppu 3C/90DC: E6 F0 INC $F0 3C/90DE: 20 58 C7 JSR $C758 ; update sound 3C/90E1: 20 F0 90 JSR $90F0 ; reset sprites 8-15 3C/90E4: 20 19 91 JSR $9119 ; draw cursor sprite 1 3C/90E7: 20 2A 91 JSR $912A ; draw cursor sprite 2 3C/90EA: 20 4C 91 JSR $914C ; draw cursor sprite 3 3C/90ED: 4C E6 A7 JMP $A7E6 ; draw page up/down sprites ; [ reset sprites 8-15 ] 3C/90F0: A2 1F LDX #$1F ; reset sprites 8-15 3C/90F2: A9 F8 LDA #$F8 3C/90F4: 9D 20 02 STA $0220,X 3C/90F7: CA DEX 3C/90F8: 10 FA BPL $90F4 3C/90FA: A9 20 LDA #$20 ; start at sprite 8 3C/90FC: 85 26 STA $26 3C/90FE: 60 RTS ; [ load text (multi-page) ] 3C/90FF: 85 92 STA $92 ; text id 3C/9101: A9 00 LDA #$00 3C/9103: 85 94 STA $94 3C/9105: A9 82 LDA #$82 3C/9107: 85 95 STA $95 3C/9109: 4C 65 EE JMP $EE65 ; load text (multi-page) ; [ load text (single-page) ] 3C/910C: 85 92 STA $92 ; text id 3C/910E: A9 00 LDA #$00 3C/9110: 85 94 STA $94 3C/9112: A9 82 LDA #$82 3C/9114: 85 95 STA $95 3C/9116: 4C 9A EE JMP $EE9A ; load text (single-page) ; [ draw cursor sprite 1 ] 3C/9119: A5 A2 LDA $A2 3C/911B: D0 01 BNE $911E 3C/911D: 60 RTS 3C/911E: AC F0 78 LDY $78F0 3C/9121: BE 00 78 LDX $7800,Y 3C/9124: B9 01 78 LDA $7801,Y 3C/9127: 4C 64 91 JMP $9164 ; [ draw cursor sprite 2 ] 3C/912A: A5 A3 LDA $A3 3C/912C: D0 01 BNE $912F 3C/912E: 60 RTS 3C/912F: C9 01 CMP #$01 3C/9131: F0 0D BEQ $9140 3C/9133: AD F2 79 LDA $79F2 3C/9136: D0 F6 BNE $912E 3C/9138: AD F0 79 LDA $79F0 3C/913B: CD F1 79 CMP $79F1 3C/913E: B0 EE BCS $912E 3C/9140: AC F0 79 LDY $79F0 3C/9143: BE 00 79 LDX $7900,Y 3C/9146: B9 01 79 LDA $7901,Y 3C/9149: 4C 64 91 JMP $9164 ; [ draw cursor sprite 3 ] 3C/914C: A5 A4 LDA $A4 3C/914E: D0 01 BNE $9151 3C/9150: 60 RTS 3C/9151: C9 01 CMP #$01 3C/9153: F0 06 BEQ $915B 3C/9155: A5 F0 LDA $F0 3C/9157: 29 04 AND #$04 ; flash every 4 frames 3C/9159: D0 F5 BNE $9150 3C/915B: AC F0 7A LDY $7AF0 3C/915E: BE 00 7A LDX $7A00,Y ; x position 3C/9161: B9 01 7A LDA $7A01,Y ; y position 3C/9164: 0A ASL 3C/9165: 0A ASL 3C/9166: 0A ASL 3C/9167: 85 41 STA $41 3C/9169: 8A TXA 3C/916A: 0A ASL 3C/916B: 0A ASL 3C/916C: 0A ASL 3C/916D: 85 40 STA $40 3C/916F: 0A ASL 3C/9170: 0A ASL 3C/9171: 0A ASL 3C/9172: 4C EB D5 JMP $D5EB ; draw cursor sprite ; [ get cursor movement direction ] 3C/9175: 20 19 D2 JSR $D219 ; update joypad input 3C/9178: A5 20 LDA $20 3C/917A: 29 0F AND #$0F 3C/917C: F0 0C BEQ $918A ; branch if no direction buttons pressed 3C/917E: C5 A1 CMP $A1 3C/9180: F0 0F BEQ $9191 ; branch if same direction buttons pressed 3C/9182: 85 A1 STA $A1 3C/9184: 20 13 D2 JSR $D213 ; cursor sound effect (move) 3C/9187: A5 A1 LDA $A1 3C/9189: 60 RTS 3C/918A: A9 00 LDA #$00 ; clear cursor delay counter 3C/918C: 85 47 STA $47 3C/918E: 85 A1 STA $A1 3C/9190: 60 RTS 3C/9191: A5 47 LDA $47 ; increment cursor delay counter 3C/9193: 18 CLC 3C/9194: 69 01 ADC #$01 3C/9196: 85 47 STA $47 3C/9198: C9 10 CMP #$10 3C/919A: 90 04 BCC $91A0 3C/919C: A9 00 LDA #$00 3C/919E: 85 A1 STA $A1 3C/91A0: A9 00 LDA #$00 3C/91A2: 60 RTS ; [ update cursor 1 position ] ; A: up/down increment 3C/91A3: 85 06 STA $06 3C/91A5: 20 75 91 JSR $9175 ; get cursor movement direction 3C/91A8: 29 0F AND #$0F 3C/91AA: 85 80 STA $80 3C/91AC: F0 1A BEQ $91C8 ; return if no cursor movement 3C/91AE: C9 04 CMP #$04 3C/91B0: B0 04 BCS $91B6 ; branch if up or down 3C/91B2: A2 04 LDX #$04 ; right/left increment is always 4 3C/91B4: 86 06 STX $06 3C/91B6: 29 05 AND #$05 3C/91B8: D0 0F BNE $91C9 ; branch if down or right 3C/91BA: AD F0 78 LDA $78F0 3C/91BD: 38 SEC 3C/91BE: E5 06 SBC $06 ; decrement cursor position 3C/91C0: B0 03 BCS $91C5 3C/91C2: 6D F1 78 ADC $78F1 ; loop to end of list 3C/91C5: 8D F0 78 STA $78F0 3C/91C8: 60 RTS 3C/91C9: AD F0 78 LDA $78F0 3C/91CC: 18 CLC 3C/91CD: 65 06 ADC $06 ; increment cursor position 3C/91CF: CD F1 78 CMP $78F1 3C/91D2: 90 F1 BCC $91C5 3C/91D4: ED F1 78 SBC $78F1 ; loop to beginning of list 3C/91D7: B0 EC BCS $91C5 ; basically unconditional branch ; [ update cursor 2 position ] ; A: up/down increment 3C/91D9: 85 06 STA $06 3C/91DB: 20 75 91 JSR $9175 ; get cursor movement direction 3C/91DE: 29 0F AND #$0F 3C/91E0: F0 1A BEQ $91FC 3C/91E2: C9 04 CMP #$04 3C/91E4: B0 04 BCS $91EA 3C/91E6: A2 04 LDX #$04 3C/91E8: 86 06 STX $06 3C/91EA: 29 05 AND #$05 3C/91EC: D0 0F BNE $91FD 3C/91EE: AD F0 79 LDA $79F0 3C/91F1: 38 SEC 3C/91F2: E5 06 SBC $06 3C/91F4: B0 03 BCS $91F9 3C/91F6: 6D F1 79 ADC $79F1 3C/91F9: 8D F0 79 STA $79F0 3C/91FC: 60 RTS 3C/91FD: AD F0 79 LDA $79F0 3C/9200: 18 CLC 3C/9201: 65 06 ADC $06 3C/9203: CD F1 79 CMP $79F1 3C/9206: 90 F1 BCC $91F9 3C/9208: ED F1 79 SBC $79F1 3C/920B: B0 EC BCS $91F9 ; [ update cursor 3 position ] ; A: up/down increment 3C/920D: 85 05 STA $05 3C/920F: 85 06 STA $06 3C/9211: 20 75 91 JSR $9175 ; get cursor movement direction 3C/9214: 29 0F AND #$0F 3C/9216: F0 28 BEQ $9240 3C/9218: C9 04 CMP #$04 3C/921A: B0 04 BCS $9220 3C/921C: A2 04 LDX #$04 3C/921E: 86 06 STX $06 3C/9220: 29 05 AND #$05 3C/9222: D0 1D BNE $9241 ; branch if down or right button pressed 3C/9224: AD F0 7A LDA $7AF0 3C/9227: 38 SEC 3C/9228: E5 06 SBC $06 3C/922A: B0 11 BCS $923D 3C/922C: 65 05 ADC $05 3C/922E: 85 05 STA $05 3C/9230: 20 75 90 JSR $9075 3C/9233: 20 69 EB JSR $EB69 ; scroll menu up 3C/9236: B0 22 BCS $925A ; branch if at top 3C/9238: 20 3D 90 JSR $903D 3C/923B: A5 05 LDA $05 3C/923D: 8D F0 7A STA $7AF0 3C/9240: 60 RTS 3C/9241: AD F0 7A LDA $7AF0 3C/9244: 18 CLC 3C/9245: 65 06 ADC $06 3C/9247: B0 05 BCS $924E 3C/9249: CD F1 7A CMP $7AF1 3C/924C: 90 EF BCC $923D 3C/924E: E5 05 SBC $05 3C/9250: 85 05 STA $05 3C/9252: 20 75 90 JSR $9075 3C/9255: 20 2D EB JSR $EB2D ; scroll menu down 3C/9258: 90 07 BCC $9261 ; branch if not at bottom 3C/925A: A9 00 LDA #$00 3C/925C: 85 47 STA $47 ; no cursor movement 3C/925E: 4C 29 D5 JMP $D529 ; error sound effect 3C/9261: 20 3D 90 JSR $903D 3C/9264: A5 05 LDA $05 3C/9266: CD F1 7A CMP $7AF1 3C/9269: 90 D2 BCC $923D 3C/926B: AD F1 7A LDA $7AF1 3C/926E: 38 SEC 3C/926F: E9 04 SBC #$04 3C/9271: 4C 3D 92 JMP $923D ; -------------------------------------------------------------------------- ; [ update vehicle/status event switches ] 3C/9274: AD 02 61 LDA $6102 ; check for toad/mini status 3C/9277: 2D 42 61 AND $6142 3C/927A: 2D 82 61 AND $6182 3C/927D: 2D C2 61 AND $61C2 3C/9280: AA TAX 3C/9281: 29 20 AND #$20 ; toad flag 3C/9283: 0A ASL 3C/9284: 85 80 STA $80 3C/9286: 8A TXA 3C/9287: 29 08 AND #$08 ; mini flag 3C/9289: 0A ASL 3C/928A: 0A ASL 3C/928B: 0A ASL 3C/928C: 0A ASL 3C/928D: 05 80 ORA $80 3C/928F: 85 80 STA $80 3C/9291: AD 2E 60 LDA $602E 3C/9294: 29 3F AND #$3F 3C/9296: 05 80 ORA $80 3C/9298: 8D 2E 60 STA $602E 3C/929B: AD 21 60 LDA $6021 ; clear chocobo flag 3C/929E: 29 7F AND #$7F 3C/92A0: 8D 21 60 STA $6021 3C/92A3: AD 2F 60 LDA $602F 3C/92A6: 29 C3 AND #$C3 3C/92A8: 8D 2F 60 STA $602F 3C/92AB: A5 42 LDA $42 3C/92AD: C9 01 CMP #$01 3C/92AF: D0 09 BNE $92BA ; branch if not on chocobo 3C/92B1: AD 21 60 LDA $6021 ; set chocobo flag 3C/92B4: 09 80 ORA #$80 3C/92B6: 8D 21 60 STA $6021 3C/92B9: 60 RTS 3C/92BA: C9 05 CMP #$05 3C/92BC: D0 09 BNE $92C7 3C/92BE: AD 2F 60 LDA $602F ; set cid's airship flag 3C/92C1: 09 04 ORA #$04 3C/92C3: 8D 2F 60 STA $602F 3C/92C6: 60 RTS 3C/92C7: C9 04 CMP #$04 3C/92C9: D0 09 BNE $92D4 3C/92CB: AD 2F 60 LDA $602F ; set enterprise flag 3C/92CE: 09 08 ORA #$08 3C/92D0: 8D 2F 60 STA $602F 3C/92D3: 60 RTS 3C/92D4: C9 06 CMP #$06 3C/92D6: D0 09 BNE $92E1 3C/92D8: AD 2F 60 LDA $602F ; set nautilus flag 3C/92DB: 09 10 ORA #$10 3C/92DD: 8D 2F 60 STA $602F 3C/92E0: 60 RTS 3C/92E1: C9 07 CMP #$07 3C/92E3: D0 D4 BNE $92B9 3C/92E5: AD 2F 60 LDA $602F ; set invincible flag 3C/92E8: 09 20 ORA #$20 3C/92EA: 8D 2F 60 STA $602F 3C/92ED: 60 RTS ; [ check item select npc script ] 3C/92EE: A2 01 LDX #$01 ; skip the first byte 3C/92F0: 4C 1B 93 JMP $931B ; [ check npc script ] 3C/92F3: A2 00 LDX #$00 3C/92F5: BD 00 7B LDA $7B00,X ; find the end of the conditional script 3C/92F8: C9 FF CMP #$FF 3C/92FA: F0 0D BEQ $9309 3C/92FC: E8 INX 3C/92FD: BD 00 7B LDA $7B00,X 3C/9300: C9 FF CMP #$FF 3C/9302: D0 F8 BNE $92FC 3C/9304: E8 INX 3C/9305: E8 INX 3C/9306: 4C F5 92 JMP $92F5 3C/9309: E8 INX 3C/930A: E8 INX 3C/930B: A0 00 LDY #$00 3C/930D: BD 00 7B LDA $7B00,X ; copy npc dialog to buffer 3C/9310: 99 40 07 STA $0740,Y 3C/9313: E8 INX 3C/9314: C8 INY 3C/9315: C0 20 CPY #$20 3C/9317: 90 F4 BCC $930D ; fallthrough ; [ check trigger script ] ; i think the format is pretty similar to ff4 trigger scripts ; returns event id 3C/9319: A2 00 LDX #$00 3C/931B: BD 00 7B LDA $7B00,X 3C/931E: C9 FF CMP #$FF ; $FF marks end of conditional 3C/9320: D0 06 BNE $9328 ; $FF execute event 3C/9322: BD 01 7B LDA $7B01,X ; event id 3C/9325: 85 6C STA $6C 3C/9327: 60 RTS 3C/9328: 10 08 BPL $9332 ; msb set: continue if switch is on 3C/932A: E8 INX 3C/932B: 20 44 93 JSR $9344 ; check event switch 3C/932E: D0 EB BNE $931B 3C/9330: F0 06 BEQ $9338 ; msb clear: continue if switch is off 3C/9332: E8 INX 3C/9333: 20 44 93 JSR $9344 ; check event switch 3C/9336: F0 E3 BEQ $931B 3C/9338: BD 00 7B LDA $7B00,X ; find end of conditional 3C/933B: E8 INX 3C/933C: C9 FF CMP #$FF 3C/933E: D0 F8 BNE $9338 3C/9340: E8 INX ; check the next conditional 3C/9341: 4C 1B 93 JMP $931B ; [ check event switch ] ; A: event switch id (ignore msb) 3C/9344: 29 7F AND #$7F 3C/9346: 48 PHA 3C/9347: 29 07 AND #$07 3C/9349: A8 TAY 3C/934A: B9 5A 93 LDA $935A,Y ; bit mask 3C/934D: 85 80 STA $80 3C/934F: 68 PLA 3C/9350: 4A LSR 3C/9351: 4A LSR 3C/9352: 4A LSR 3C/9353: A8 TAY 3C/9354: B9 20 60 LDA $6020,Y ; event switches 3C/9357: 25 80 AND $80 3C/9359: 60 RTS 3C/935A: 01 02 04 08 10 20 40 80 ; -------------------------------------------------------------------------- ; [ add item to inventory ] ; set carry if inventory is full 3C/9362: 20 7E 93 JSR $937E ; find item in inventory 3C/9365: 90 01 BCC $9368 3C/9367: 60 RTS 3C/9368: A5 80 LDA $80 3C/936A: 9D C0 60 STA $60C0,X 3C/936D: BD E0 60 LDA $60E0,X 3C/9370: 18 CLC 3C/9371: 65 81 ADC $81 3C/9373: C9 63 CMP #$63 ; max 99 3C/9375: 90 02 BCC $9379 3C/9377: A9 63 LDA #$63 3C/9379: 9D E0 60 STA $60E0,X 3C/937C: 18 CLC 3C/937D: 60 RTS ; [ find item in inventory ] ; set carry if inventory is full 3C/937E: A2 00 LDX #$00 3C/9380: BD C0 60 LDA $60C0,X 3C/9383: C5 80 CMP $80 3C/9385: F0 12 BEQ $9399 3C/9387: E8 INX 3C/9388: E0 20 CPX #$20 3C/938A: 90 F4 BCC $9380 3C/938C: A2 00 LDX #$00 3C/938E: BD C0 60 LDA $60C0,X 3C/9391: F0 06 BEQ $9399 3C/9393: E8 INX 3C/9394: E0 20 CPX #$20 3C/9396: 90 F6 BCC $938E 3C/9398: 60 RTS 3C/9399: 18 CLC 3C/939A: 60 RTS ; -------------------------------------------------------------------------- ; [ surface world emerging cutscene ] 3C/939B: AD 11 60 LDA $6011 ; clear surface world emerging flag 3C/939E: 29 7F AND #$7F 3C/93A0: 8D 11 60 STA $6011 3C/93A3: A9 8E LDA #$8E ; sound effect $0E 3C/93A5: 8D 49 7F STA $7F49 3C/93A8: 20 86 C4 JSR $C486 ; clear oam data 3C/93AB: 20 00 FF JSR $FF00 ; wait for vblank 3C/93AE: A9 02 LDA #$02 3C/93B0: 8D 14 40 STA $4014 ; dma oam data to ppu 3C/93B3: A9 00 LDA #$00 3C/93B5: 85 65 STA $65 3C/93B7: A9 00 LDA #$00 3C/93B9: 85 64 STA $64 3C/93BB: 20 EE 93 JSR $93EE 3C/93BE: E6 64 INC $64 3C/93C0: A5 64 LDA $64 3C/93C2: 29 0F AND #$0F 3C/93C4: D0 F5 BNE $93BB 3C/93C6: E6 65 INC $65 3C/93C8: A5 65 LDA $65 3C/93CA: C9 08 CMP #$08 3C/93CC: D0 E9 BNE $93B7 3C/93CE: A9 00 LDA #$00 3C/93D0: 20 09 FF JSR $FF09 ; switch prg bank 1 3C/93D3: A2 0F LDX #$0F 3C/93D5: BD 50 B6 LDA $B650,X ; load surface world color palette 3C/93D8: 9D C0 03 STA $03C0,X 3C/93DB: CA DEX 3C/93DC: 10 F7 BPL $93D5 3C/93DE: 20 00 FF JSR $FF00 ; wait for vblank 3C/93E1: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3C/93E4: 20 98 C3 JSR $C398 ; update ppu registers 3C/93E7: A9 3C LDA #$3C 3C/93E9: 85 57 STA $57 3C/93EB: 4C 58 C7 JMP $C758 ; update sound ; [ ] 3C/93EE: A5 64 LDA $64 3C/93F0: C9 08 CMP #$08 3C/93F2: 90 03 BCC $93F7 3C/93F4: 18 CLC 3C/93F5: 69 08 ADC #$08 3C/93F7: 85 63 STA $63 3C/93F9: 20 06 94 JSR $9406 3C/93FC: A5 63 LDA $63 3C/93FE: 18 CLC 3C/93FF: 69 40 ADC #$40 3C/9401: 85 63 STA $63 3C/9403: 90 F4 BCC $93F9 3C/9405: 60 RTS ; [ ] 3C/9406: A5 63 LDA $63 3C/9408: 85 61 STA $61 3C/940A: A9 00 LDA #$00 3C/940C: 85 8C STA $8C 3C/940E: 20 7B 94 JSR $947B 3C/9411: A5 63 LDA $63 3C/9413: 18 CLC 3C/9414: 69 08 ADC #$08 3C/9416: 85 61 STA $61 3C/9418: 20 7B 94 JSR $947B 3C/941B: A5 63 LDA $63 3C/941D: 29 C0 AND #$C0 3C/941F: 4A LSR 3C/9420: 4A LSR 3C/9421: 4A LSR 3C/9422: 4A LSR 3C/9423: 85 8F STA $8F 3C/9425: A5 63 LDA $63 3C/9427: 29 17 AND #$17 3C/9429: 85 8E STA $8E 3C/942B: 20 00 FF JSR $FF00 ; wait for vblank 3C/942E: 20 3E 94 JSR $943E 3C/9431: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3C/9434: 20 98 C3 JSR $C398 ; update ppu registers 3C/9437: A9 3C LDA #$3C 3C/9439: 85 57 STA $57 3C/943B: 4C 58 C7 JMP $C758 ; update sound ; [ ] 3C/943E: A9 04 LDA #$04 3C/9440: 8D 00 20 STA $2000 3C/9443: 2C 02 20 BIT $2002 3C/9446: A5 8F LDA $8F 3C/9448: 8D 06 20 STA $2006 3C/944B: A5 8E LDA $8E 3C/944D: 8D 06 20 STA $2006 3C/9450: A2 00 LDX #$00 3C/9452: BD 80 07 LDA $0780,X 3C/9455: 8D 07 20 STA $2007 3C/9458: E8 INX 3C/9459: E0 20 CPX #$20 3C/945B: 90 F5 BCC $9452 3C/945D: A5 8F LDA $8F 3C/945F: 8D 06 20 STA $2006 3C/9462: A5 8E LDA $8E 3C/9464: 18 CLC 3C/9465: 69 08 ADC #$08 3C/9467: 8D 06 20 STA $2006 3C/946A: BD 80 07 LDA $0780,X 3C/946D: 8D 07 20 STA $2007 3C/9470: E8 INX 3C/9471: E0 40 CPX #$40 3C/9473: 90 F5 BCC $946A 3C/9475: A5 FD LDA $FD 3C/9477: 8D 00 20 STA $2000 3C/947A: 60 RTS ; [ ] 3C/947B: A5 65 LDA $65 3C/947D: 0A ASL 3C/947E: 0A ASL 3C/947F: 0A ASL 3C/9480: 85 8A STA $8A 3C/9482: A9 20 LDA #$20 3C/9484: 85 89 STA $89 3C/9486: A5 61 LDA $61 3C/9488: 29 C0 AND #$C0 3C/948A: 85 88 STA $88 3C/948C: 20 9B 94 JSR $949B 3C/948F: A5 88 LDA $88 3C/9491: 18 CLC 3C/9492: 69 02 ADC #$02 3C/9494: 85 88 STA $88 3C/9496: C6 89 DEC $89 3C/9498: D0 F2 BNE $948C 3C/949A: 60 RTS ; [ ] 3C/949B: A9 0A LDA #$0A 3C/949D: 85 82 STA $82 3C/949F: A5 88 LDA $88 3C/94A1: 4A LSR 3C/94A2: 4A LSR 3C/94A3: 4A LSR 3C/94A4: 4A LSR 3C/94A5: C9 08 CMP #$08 3C/94A7: B0 04 BCS $94AD 3C/94A9: 69 AC ADC #$AC 3C/94AB: D0 0E BNE $94BB 3C/94AD: C9 0C CMP #$0C 3C/94AF: B0 04 BCS $94B5 3C/94B1: 69 B4 ADC #$B4 3C/94B3: D0 06 BNE $94BB 3C/94B5: E6 82 INC $82 3C/94B7: 29 03 AND #$03 3C/94B9: 09 A0 ORA #$A0 3C/94BB: 85 81 STA $81 3C/94BD: A5 88 LDA $88 3C/94BF: 0A ASL 3C/94C0: 0A ASL 3C/94C1: 0A ASL 3C/94C2: 0A ASL 3C/94C3: 85 80 STA $80 3C/94C5: A5 61 LDA $61 3C/94C7: 29 1F AND #$1F 3C/94C9: A8 TAY 3C/94CA: 29 07 AND #$07 3C/94CC: 05 8A ORA $8A 3C/94CE: AA TAX 3C/94CF: BD 2F 95 LDA $952F,X 3C/94D2: 85 83 STA $83 3C/94D4: 49 FF EOR #$FF 3C/94D6: 85 84 STA $84 3C/94D8: 98 TYA 3C/94D9: 05 80 ORA $80 3C/94DB: 29 3F AND #$3F 3C/94DD: 49 20 EOR #$20 3C/94DF: AA TAX 3C/94E0: A9 0A LDA #$0A 3C/94E2: 20 09 FF JSR $FF09 ; switch prg bank 1 3C/94E5: BD 20 AE LDA $AE20,X 3C/94E8: 25 84 AND $84 3C/94EA: 85 84 STA $84 3C/94EC: A5 82 LDA $82 3C/94EE: 20 09 FF JSR $FF09 ; switch prg bank 1 3C/94F1: B1 80 LDA ($80),Y 3C/94F3: 25 83 AND $83 3C/94F5: 05 84 ORA $84 3C/94F7: A6 8C LDX $8C 3C/94F9: E6 8C INC $8C 3C/94FB: 9D 80 07 STA $0780,X 3C/94FE: 60 RTS ; [ ] 3C/94FF: A9 0A LDA #$0A 3C/9501: 20 09 FF JSR $FF09 ; switch prg bank 1 3C/9504: 2C 02 20 BIT $2002 3C/9507: A9 00 LDA #$00 3C/9509: 8D 06 20 STA $2006 3C/950C: 8D 06 20 STA $2006 3C/950F: A0 40 LDY #$40 3C/9511: A2 00 LDX #$00 3C/9513: BD 40 AE LDA $AE40,X 3C/9516: 8D 07 20 STA $2007 3C/9519: E8 INX 3C/951A: E0 20 CPX #$20 3C/951C: 90 F5 BCC $9513 3C/951E: A2 00 LDX #$00 3C/9520: BD 20 AE LDA $AE20,X 3C/9523: 8D 07 20 STA $2007 3C/9526: E8 INX 3C/9527: E0 20 CPX #$20 3C/9529: 90 F5 BCC $9520 3C/952B: 88 DEY 3C/952C: D0 E3 BNE $9511 3C/952E: 60 RTS ; bitmasks for fading in emerging world tiles 3C/952F: 40 04 80 10 01 20 04 80 3C/9537: 41 14 82 50 05 A0 05 90 3C/953F: 49 34 8A 51 85 A2 45 92 3C/9547: 69 B4 AA 55 A5 AA 55 D2 3C/954F: 6D BC AB 75 AD BA 57 F2 3C/9557: 7D BD EB 7D AF FA 77 F6 4C/955F: 7F FD EF F0 BF FB 7F F7 3C/9567: FF FF FF FF FF FF FF FF ; -------------------------------------------------------------------------- ; [ reset attribute table ] 3C/956F: 20 00 FF JSR $FF00 ; wait for vblank 3C/9572: 2C 02 20 BIT $2002 ; latch ppu 3C/9575: A9 23 LDA #$23 ; ppu $23C0 3C/9577: 8D 06 20 STA $2006 3C/957A: A9 C0 LDA #$C0 3C/957C: 8D 06 20 STA $2006 3C/957F: A9 FF LDA #$FF ; set all attributes to 3 3C/9581: A2 40 LDX #$40 3C/9583: 8D 07 20 STA $2007 3C/9586: CA DEX 3C/9587: D0 FA BNE $9583 3C/9589: 4C 9F 95 JMP $959F ; update ppu registers ; [ play warp/exit sound effect ] 3C/958C: A9 DD LDA #$DD 3C/958E: 8D 49 7F STA $7F49 3C/9591: 60 RTS ; [ reset A/B button ] 3C/9592: A9 00 LDA #$00 3C/9594: 85 24 STA $24 3C/9596: 85 25 STA $25 3C/9598: 60 RTS ; [ set hp text color in main menu ] 3C/9599: 20 00 FF JSR $FF00 ; wait for vblank 3C/959C: 20 B2 95 JSR $95B2 ; set hp text color in main menu ; fallthrough ; [ update ppu registers (menu) ] 3C/959F: A5 FF LDA $FF 3C/95A1: 8D 00 20 STA $2000 ; ppu control 3C/95A4: A9 1E LDA #$1E 3C/95A6: 8D 01 20 STA $2001 ; show bg and sprites 3C/95A9: A9 00 LDA #$00 ; clear ppu scroll registers 3C/95AB: 8D 05 20 STA $2005 3C/95AE: 8D 05 20 STA $2005 3C/95B1: 60 RTS ; [ set hp text color in main menu ] 3C/95B2: A2 00 LDX #$00 3C/95B4: A0 CA LDY #$CA 3C/95B6: AD 02 61 LDA $6102 ; character 1 status 3C/95B9: 20 D7 95 JSR $95D7 3C/95BC: A2 04 LDX #$04 3C/95BE: A0 D2 LDY #$D2 3C/95C0: AD 42 61 LDA $6142 ; character 2 status 3C/95C3: 20 D7 95 JSR $95D7 3C/95C6: A2 08 LDX #$08 3C/95C8: A0 E2 LDY #$E2 3C/95CA: AD 82 61 LDA $6182 ; character 3 status 3C/95CD: 20 D7 95 JSR $95D7 3C/95D0: A2 0C LDX #$0C 3C/95D2: A0 EA LDY #$EA 3C/95D4: AD C2 61 LDA $61C2 ; character 4 status ; fallthrough ; [ set attributes for character hp in main menu ] ; A: character status 3C/95D7: 48 PHA 3C/95D8: AD 02 20 LDA $2002 3C/95DB: A9 23 LDA #$23 3C/95DD: 8D 06 20 STA $2006 3C/95E0: 8C 06 20 STY $2006 3C/95E3: A0 04 LDY #$04 3C/95E5: 68 PLA 3C/95E6: 29 FE AND #$FE 3C/95E8: F0 0A BEQ $95F4 ; branch if no status (white text) 3C/95EA: 29 C0 AND #$C0 3C/95EC: C9 01 CMP #$01 3C/95EE: A9 AA LDA #$AA ; dead or stone (pink text) 3C/95F0: B0 02 BCS $95F4 ; branch if dead or stone 3C/95F2: A9 55 LDA #$55 ; other status (orange text) 3C/95F4: 85 80 STA $80 3C/95F6: BD 0C 96 LDA $960C,X 3C/95F9: 49 FF EOR #$FF 3C/95FB: 85 81 STA $81 3C/95FD: BD 0C 96 LDA $960C,X 3C/9600: 25 80 AND $80 3C/9602: 05 81 ORA $81 3C/9604: 8D 07 20 STA $2007 3C/9607: E8 INX 3C/9608: 88 DEY 3C/9609: D0 EB BNE $95F6 3C/960B: 60 RTS ; attribute masks for character hp in main menu 3C/960C: 0F 0F 0F 03 3C/9610: F0 F0 F0 30 3C/9614: 0F 0F 0F 03 3C/9618: F0 F0 F0 30 ; -------------------------------------------------------------------------- ; [ job menu ] ; starts at 3C/962F 3C/961C: 20 74 8F JSR $8F74 ; cursor sound effect 3C/961F: A9 14 LDA #$14 3C/9621: 8D F0 78 STA $78F0 3C/9624: A5 7F LDA $7F 3C/9626: 09 0F ORA #$0F 3C/9628: AA TAX 3C/9629: 20 0B D1 JSR $D10B ; update character equipment 3C/962C: 4C 85 A6 JMP $A685 ; close menu ; subroutine starts here 3C/962F: 20 BA 96 JSR $96BA ; save job experience 3C/9632: 20 92 95 JSR $9592 ; reset A/B button 3C/9635: 20 85 A6 JSR $A685 ; close menu 3C/9638: 20 6F 95 JSR $956F ; reset attribute table 3C/963B: 20 85 AD JSR $AD85 ; calculate cp required to change jobs 3C/963E: A9 00 LDA #$00 3C/9640: 8D F0 78 STA $78F0 3C/9643: 85 A3 STA $A3 3C/9645: A2 0C LDX #$0C ; job menu - name/current job 3C/9647: 20 F1 AA JSR $AAF1 ; open menu window 3C/964A: A9 48 LDA #$48 ; $0148: character name and job 3C/964C: 20 7A A8 JSR $A87A ; show character message 3C/964F: A2 0D LDX #$0D ; job menu - cp 3C/9651: 20 F1 AA JSR $AAF1 ; open menu window 3C/9654: A9 49 LDA #$49 ; $0149: "\cpC" 3C/9656: 20 78 A6 JSR $A678 ; load menu text 3C/9659: A2 0E LDX #$0E ; job menu - job list 3C/965B: 20 F1 AA JSR $AAF1 ; open menu window 3C/965E: A2 0E LDX #$0E 3C/9660: 20 A6 AA JSR $AAA6 3C/9663: A9 4A LDA #$4A ; $014A: job list string 3C/9665: 20 7A A8 JSR $A87A ; show character message 3C/9668: A9 01 LDA #$01 ; show cursor 1 3C/966A: 85 A2 STA $A2 3C/966C: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/966F: A9 08 LDA #$08 3C/9671: 20 A3 91 JSR $91A3 ; update cursor 1 position 3C/9674: 20 98 96 JSR $9698 ; draw character sprite 3C/9677: A5 25 LDA $25 3C/9679: D0 A1 BNE $961C ; branch if B button pressed 3C/967B: A5 24 LDA $24 3C/967D: F0 E9 BEQ $9668 ; branch if A button not pressed 3C/967F: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9682: 20 A5 96 JSR $96A5 ; select new job 3C/9685: 90 D7 BCC $965E ; branch if can't change 3C/9687: A9 70 LDA #$70 ; $0170: "Change Job? A~Yes B~No" 3C/9689: 20 DA 96 JSR $96DA ; show message and wait for keypress 3C/968C: A5 20 LDA $20 3C/968E: 29 80 AND #$80 3C/9690: F0 CC BEQ $965E ; branch if A button not pressed 3C/9692: 20 8F AB JSR $AB8F ; change job 3C/9695: 4C 1C 96 JMP $961C ; [ draw character sprite (job menu) ] 3C/9698: A9 B0 LDA #$B0 ; x position 3C/969A: 85 40 STA $40 3C/969C: A9 10 LDA #$10 ; y position 3C/969E: 85 41 STA $41 3C/96A0: A6 7F LDX $7F 3C/96A2: 4C 36 81 JMP $8136 ; draw character sprite ; [ select new job ] ; return carry clear if can't change 3C/96A5: AD F0 78 LDA $78F0 ; cursor position 3C/96A8: 4A LSR 3C/96A9: 4A LSR 3C/96AA: 85 8F STA $8F ; selected job 3C/96AC: A6 7F LDX $7F 3C/96AE: BD 00 61 LDA $6100,X ; current job 3C/96B1: C5 8F CMP $8F 3C/96B3: D0 1B BNE $96D0 ; branch if different from current job 3C/96B5: 20 29 D5 JSR $D529 ; error sound effect 3C/96B8: 18 CLC 3C/96B9: 60 RTS ; [ save job experience ] 3C/96BA: A6 7F LDX $7F 3C/96BC: BD 00 61 LDA $6100,X 3C/96BF: 0A ASL 3C/96C0: 05 7F ORA $7F 3C/96C2: A8 TAY 3C/96C3: BD 11 61 LDA $6111,X ; job experience 3C/96C6: 99 11 62 STA $6211,Y 3C/96C9: BD 10 61 LDA $6110,X 3C/96CC: 99 10 62 STA $6210,Y 3C/96CF: 60 RTS ; try to change jobs 3C/96D0: 20 23 AE JSR $AE23 ; check if character can change jobs 3C/96D3: B0 04 BCS $96D9 ; branch if allowed 3C/96D5: 20 DA 96 JSR $96DA ; show message and wait for keypress 3C/96D8: 18 CLC 3C/96D9: 60 RTS ; [ show message and wait for keypress ] 3C/96DA: 48 PHA 3C/96DB: A9 00 LDA #$00 ; hide cursor 1 3C/96DD: 85 A2 STA $A2 3C/96DF: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/96E2: 20 98 96 JSR $9698 ; draw character sprite 3C/96E5: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/96E8: A2 20 LDX #$20 3C/96EA: 20 F1 AA JSR $AAF1 ; open menu window 3C/96ED: 68 PLA 3C/96EE: 20 6B A6 JSR $A66B ; load menu text 3C/96F1: 20 05 A3 JSR $A305 ; wait for keypress 3C/96F4: 60 RTS ; -------------------------------------------------------------------------- ; [ swap spell lists ] 3C/96F5: 20 15 A7 JSR $A715 ; select character 3C/96F8: 90 01 BCC $96FB ; branch if confirmed 3C/96FA: 60 RTS 3C/96FB: A6 7F LDX $7F 3C/96FD: E4 0A CPX $0A 3C/96FF: D0 03 BNE $9704 ; branch if not same character 3C/9701: 4C 29 D5 JMP $D529 ; error sound effect 3C/9704: BD 02 61 LDA $6102,X 3C/9707: 29 C0 AND #$C0 3C/9709: D0 F6 BNE $9701 ; branch if dead or stone 3C/970B: A5 7F LDA $7F 3C/970D: 48 PHA 3C/970E: 20 56 A3 JSR $A356 ; restore character variables 3C/9711: 20 C9 A1 JSR $A1C9 ; update spell list 3C/9714: 68 PLA 3C/9715: A8 TAY 3C/9716: A6 7F LDX $7F 3C/9718: A9 08 LDA #$08 3C/971A: 85 80 STA $80 3C/971C: BD 07 62 LDA $6207,X ; swap spell lists 3C/971F: 48 PHA 3C/9720: B9 07 62 LDA $6207,Y 3C/9723: 9D 07 62 STA $6207,X 3C/9726: 68 PLA 3C/9727: 99 07 62 STA $6207,Y 3C/972A: E8 INX 3C/972B: C8 INY 3C/972C: C6 80 DEC $80 3C/972E: D0 EC BNE $971C 3C/9730: 20 B4 A2 JSR $A2B4 ; init spell list buffer 3C/9733: 20 98 D1 JSR $D198 ; init spell equipability 3C/9736: 60 RTS ; [ draw magic menu options ] ; A: text string id (offset $0100) ; X: menu window id 3C/9737: 48 PHA 3C/9738: A0 3F LDY #$3F 3C/973A: B9 00 7B LDA $7B00,Y ; save buffer 3C/973D: 99 C0 7B STA $7BC0,Y 3C/9740: 88 DEY 3C/9741: 10 F7 BPL $973A 3C/9743: 68 PLA 3C/9744: 20 75 A8 JSR $A875 ; show character message 3C/9747: A2 3F LDX #$3F 3C/9749: BD C0 7B LDA $7BC0,X ; restore buffer 3C/974C: 9D 00 7B STA $7B00,X 3C/974F: CA DEX 3C/9750: 10 F7 BPL $9749 3C/9752: 60 RTS ; [ magic menu ] ; starts at 3C/9761 ; close menu 3C/9753: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9756: A9 04 LDA #$04 3C/9758: 8D F0 78 STA $78F0 3C/975B: 20 C9 A1 JSR $A1C9 ; update spell list 3C/975E: 4C 85 A6 JMP $A685 ; close menu ; subroutine starts here 3C/9761: 20 92 95 JSR $9592 ; reset A/B button 3C/9764: 20 85 A6 JSR $A685 ; close menu 3C/9767: 20 6F 95 JSR $956F ; reset attribute table 3C/976A: 20 49 A3 JSR $A349 ; save character variables 3C/976D: A9 00 LDA #$00 3C/976F: 8D F0 78 STA $78F0 3C/9772: 20 B4 A2 JSR $A2B4 ; init spell list buffer 3C/9775: 20 98 D1 JSR $D198 ; init spell equipability 3C/9778: 20 28 A3 JSR $A328 ; draw character window 3C/977B: A2 06 LDX #$06 3C/977D: 20 F1 AA JSR $AAF1 ; open menu window 3C/9780: A9 3C LDA #$3C ; $013C: spell list 3C/9782: 20 7A A8 JSR $A87A ; show character message 3C/9785: 20 56 A3 JSR $A356 ; restore character variables 3C/9788: A2 24 LDX #$24 ; magic menu options window 3C/978A: A9 36 LDA #$36 ; $0136: "\char1[0x02] Use Swap Item" 3C/978C: 20 37 97 JSR $9737 ; draw magic menu options 3C/978F: A2 06 LDX #$06 3C/9791: 20 A6 AA JSR $AAA6 3C/9794: A9 3C LDA #$3C ; $013C: spell list 3C/9796: 20 7A A8 JSR $A87A ; show character message 3C/9799: 20 92 95 JSR $9592 ; reset A/B button ; start of use/swap/item frame loop 3C/979C: A9 00 LDA #$00 ; hide cursor 2 3C/979E: 85 A3 STA $A3 3C/97A0: A9 01 LDA #$01 ; show cursor 1 3C/97A2: 85 A2 STA $A2 3C/97A4: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/97A7: A9 04 LDA #$04 3C/97A9: 20 A3 91 JSR $91A3 ; update cursor 1 position 3C/97AC: A9 03 LDA #$03 3C/97AE: 20 00 80 JSR $8000 ; draw characters 3C/97B1: A5 25 LDA $25 3C/97B3: F0 03 BEQ $97B8 ; branch if B button is not pressed 3C/97B5: 4C 53 97 JMP $9753 ; close menu 3C/97B8: A5 24 LDA $24 3C/97BA: F0 E0 BEQ $979C ; branch if A button is not pressed ; A button 3C/97BC: 20 74 8F JSR $8F74 ; cursor sound effect 3C/97BF: A9 01 LDA #$01 3C/97C1: 85 A3 STA $A3 ; show cursor 2 3C/97C3: A9 00 LDA #$00 3C/97C5: 8D F0 79 STA $79F0 ; clear cursor 2 position 3C/97C8: AD F0 78 LDA $78F0 ; cursor 1 determines use/swap/item 3C/97CB: 4A LSR 3C/97CC: 4A LSR 3C/97CD: 85 8E STA $8E 3C/97CF: C9 01 CMP #$01 3C/97D1: D0 06 BNE $97D9 ; branch if not swap ; swap 3C/97D3: 20 F5 96 JSR $96F5 ; swap spell lists 3C/97D6: 4C 85 97 JMP $9785 ; use/item 3C/97D9: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/97DC: A9 0C LDA #$0C 3C/97DE: 20 D9 91 JSR $91D9 ; update cursor 2 position 3C/97E1: A9 03 LDA #$03 3C/97E3: 20 00 80 JSR $8000 ; draw characters 3C/97E6: A5 25 LDA $25 3C/97E8: D0 AF BNE $9799 ; branch if B button is pressed 3C/97EA: A5 24 LDA $24 3C/97EC: F0 EB BEQ $97D9 ; branch if A button is not pressed 3C/97EE: 20 74 8F JSR $8F74 ; cursor sound effect 3C/97F1: AE F0 79 LDX $79F0 3C/97F4: BD 03 79 LDA $7903,X 3C/97F7: 38 SEC 3C/97F8: E9 08 SBC #$08 3C/97FA: 85 8F STA $8F 3C/97FC: A5 8E LDA $8E ; delete spell (unused 4th option) 3C/97FE: C9 03 CMP #$03 3C/9800: 90 06 BCC $9808 3C/9802: 20 8F 98 JSR $988F ; delete spell 3C/9805: 4C 85 97 JMP $9785 ; item 3C/9808: C9 02 CMP #$02 3C/980A: 90 06 BCC $9812 3C/980C: 20 97 98 JSR $9897 ; move spell to inventory 3C/980F: 4C 85 97 JMP $9785 ; use 3C/9812: A6 8F LDX $8F 3C/9814: BD 00 7C LDA $7C00,X 3C/9817: D0 06 BNE $981F ; branch if spell slot not empty 3C/9819: 20 29 D5 JSR $D529 ; error sound effect 3C/981C: 4C D9 97 JMP $97D9 3C/981F: AA TAX 3C/9820: BD 00 72 LDA $7200,X 3C/9823: D0 F4 BNE $9819 ; branch if spell can't be used by this class 3C/9825: 8A TXA 3C/9826: 38 SEC 3C/9827: E9 C8 SBC #$C8 3C/9829: A8 TAY 3C/982A: B9 44 A2 LDA $A244,Y ; spell level 3C/982D: 0A ASL 3C/982E: 05 0A ORA $0A 3C/9830: A8 TAY 3C/9831: B9 30 61 LDA $6130,Y 3C/9834: F0 E3 BEQ $9819 3C/9836: E0 CC CPX #$CC ; life 2 3C/9838: F0 3B BEQ $9875 3C/983A: E0 D2 CPX #$D2 ; cure 4 3C/983C: F0 37 BEQ $9875 3C/983E: E0 D3 CPX #$D3 ; heal 3C/9840: F0 33 BEQ $9875 3C/9842: E0 D8 CPX #$D8 ; warp 3C/9844: F0 2F BEQ $9875 3C/9846: E0 DA CPX #$DA ; soft 3C/9848: F0 2B BEQ $9875 3C/984A: E0 E0 CPX #$E0 ; cure 3 3C/984C: F0 27 BEQ $9875 3C/984E: E0 E1 CPX #$E1 ; life 3C/9850: F0 23 BEQ $9875 3C/9852: E0 EE CPX #$EE ; cure 2 3C/9854: F0 1F BEQ $9875 3C/9856: E0 EF CPX #$EF ; exit 3C/9858: F0 1B BEQ $9875 3C/985A: E0 F6 CPX #$F6 ; toad 3C/985C: F0 26 BEQ $9884 3C/985E: E0 F0 CPX #$F0 ; wash 3C/9860: F0 13 BEQ $9875 3C/9862: E0 F7 CPX #$F7 ; mini 3C/9864: F0 0F BEQ $9875 3C/9866: E0 FC CPX #$FC ; cure 3C/9868: F0 0B BEQ $9875 3C/986A: E0 FD CPX #$FD ; pure 3C/986C: F0 07 BEQ $9875 3C/986E: E0 FE CPX #$FE ; sight 3C/9870: F0 03 BEQ $9875 3C/9872: 4C 19 98 JMP $9819 3C/9875: A6 0A LDX $0A 3C/9877: BD 02 61 LDA $6102,X 3C/987A: 29 F0 AND #$F0 3C/987C: D0 F4 BNE $9872 ; branch if dead, stone, toad, or silence 3C/987E: 20 EC 98 JSR $98EC ; use spell 3C/9881: 4C 85 97 JMP $9785 3C/9884: A6 0A LDX $0A 3C/9886: BD 02 61 LDA $6102,X 3C/9889: 29 D0 AND #$D0 3C/988B: D0 E5 BNE $9872 3C/988D: F0 EF BEQ $987E ; [ delete spell ] ; unused 4th option in the magic menu 3C/988F: A6 8F LDX $8F 3C/9891: A9 00 LDA #$00 3C/9893: 9D 00 7C STA $7C00,X 3C/9896: 60 RTS ; [ move spell to inventory ] 3C/9897: A6 8F LDX $8F 3C/9899: BD 00 7C LDA $7C00,X 3C/989C: D0 01 BNE $989F ; return if slot is empty 3C/989E: 60 RTS 3C/989F: 85 80 STA $80 ; spell index 3C/98A1: A9 01 LDA #$01 ; qty: 1 3C/98A3: 85 81 STA $81 3C/98A5: 20 62 93 JSR $9362 ; add item to inventory 3C/98A8: 90 05 BCC $98AF 3C/98AA: A9 6B LDA #$6B ; $016B: "No room to remove" 3C/98AC: 4C BB 98 JMP $98BB ; show magic menu message 3C/98AF: A6 8F LDX $8F 3C/98B1: A9 00 LDA #$00 3C/98B3: 9D 00 7C STA $7C00,X ; clear spell slot 3C/98B6: A9 6E LDA #$6E ; $016E: "Removed" 3C/98B8: 4C BB 98 JMP $98BB ; show magic menu message ; [ show magic menu message ] 3C/98BB: 48 PHA 3C/98BC: A2 24 LDX #$24 3C/98BE: 20 F1 AA JSR $AAF1 ; open menu window 3C/98C1: 68 PLA 3C/98C2: 20 6B A6 JSR $A66B ; load menu text 3C/98C5: A9 F8 LDA #$F8 ; hide cursor sprite 3C/98C7: A2 0F LDX #$0F 3C/98C9: 9D 00 02 STA $0200,X 3C/98CC: CA DEX 3C/98CD: 10 FA BPL $98C9 3C/98CF: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/98D2: 4C 05 A3 JMP $A305 ; wait for keypress ; [ ] 3C/98D5: 48 PHA 3C/98D6: A2 24 LDX #$24 3C/98D8: 20 F1 AA JSR $AAF1 ; open menu window 3C/98DB: 68 PLA 3C/98DC: 20 6B A6 JSR $A66B ; load menu text 3C/98DF: A9 F8 LDA #$F8 3C/98E1: A2 0F LDX #$0F 3C/98E3: 9D 00 02 STA $0200,X 3C/98E6: CA DEX 3C/98E7: 10 FA BPL $98E3 3C/98E9: 4C CD A7 JMP $A7CD ; wait for vblank (update cursors) ; [ use spell ] 3C/98EC: 24 53 BIT $53 3C/98EE: 10 05 BPL $98F5 3C/98F0: A9 79 LDA #$79 ; $0179: "Can't use magic." 3C/98F2: 4C BB 98 JMP $98BB ; show magic menu message 3C/98F5: A6 8F LDX $8F 3C/98F7: BD 00 7C LDA $7C00,X ; exit spell 3C/98FA: C9 EF CMP #$EF 3C/98FC: D0 30 BNE $992E 3C/98FE: 24 53 BIT $53 3C/9900: 50 05 BVC $9907 3C/9902: A9 78 LDA #$78 ; $0178: "Can't warp." 3C/9904: 4C BB 98 JMP $98BB ; show magic menu message 3C/9907: A9 68 LDA #$68 ; $0168: "Warp to the outside" 3C/9909: 20 BB 98 JSR $98BB ; show magic menu message 3C/990C: A5 20 LDA $20 3C/990E: 29 40 AND #$40 3C/9910: D0 18 BNE $992A 3C/9912: 20 18 99 JSR $9918 3C/9915: 4C ED C0 JMP $C0ED ; world map main ; return to world map after exit or warp spell 3C/9918: 20 8C 95 JSR $958C ; play warp/exit sound effect 3C/991B: 20 57 99 JSR $9957 ; decrement mp 3C/991E: 20 C9 A1 JSR $A1C9 ; update spell list 3C/9921: 20 85 A6 JSR $A685 ; close menu 3C/9924: A9 00 LDA #$00 3C/9926: 8D 01 20 STA $2001 ; screen off 3C/9929: 60 RTS ; error 3C/992A: 20 29 D5 JSR $D529 ; error sound effect 3C/992D: 60 RTS ; warp spell 3C/992E: C9 D8 CMP #$D8 3C/9930: D0 16 BNE $9948 3C/9932: A5 2D LDA $2D 3C/9934: 4A LSR 3C/9935: 90 F3 BCC $992A ; branch if on world map 3C/9937: 24 53 BIT $53 3C/9939: 50 05 BVC $9940 ; branch if warp enabled 3C/993B: A9 78 LDA #$78 ; $0178: "Can't warp." 3C/993D: 4C BB 98 JMP $98BB ; show magic menu message 3C/9940: A9 67 LDA #$67 ; $0167: "Go back how many?" 3C/9942: 20 D5 98 JSR $98D5 3C/9945: 4C D0 9A JMP $9AD0 ; warp spell ; sight spell 3C/9948: C9 FE CMP #$FE 3C/994A: D0 25 BNE $9971 3C/994C: A5 2D LDA $2D 3C/994E: 4A LSR 3C/994F: B0 D9 BCS $992A ; branch if not on world map 3C/9951: 20 57 99 JSR $9957 ; decrement mp 3C/9954: 4C 25 A5 JMP $A525 ; show minimap ; [ decrement mp ] 3C/9957: A6 8F LDX $8F 3C/9959: BD 00 7C LDA $7C00,X 3C/995C: 38 SEC 3C/995D: E9 C8 SBC #$C8 3C/995F: A8 TAY 3C/9960: B9 44 A2 LDA $A244,Y ; spell level 3C/9963: 0A ASL 3C/9964: 05 0A ORA $0A 3C/9966: AA TAX 3C/9967: BD 30 61 LDA $6130,X 3C/996A: 38 SEC 3C/996B: E9 01 SBC #$01 3C/996D: 9D 30 61 STA $6130,X 3C/9970: 60 RTS ; [ do spell effect ] ; life 2 3C/9971: A2 5E LDX #$5E 3C/9973: C9 CC CMP #$CC 3C/9975: F0 4E BEQ $99C5 ; cure 4 3C/9977: A2 5C LDX #$5C 3C/9979: C9 D2 CMP #$D2 3C/997B: F0 57 BEQ $99D4 ; heal 3C/997D: A2 66 LDX #$66 3C/997F: C9 D3 CMP #$D3 3C/9981: F0 42 BEQ $99C5 ; soft 3C/9983: A2 5F LDX #$5F 3C/9985: C9 DA CMP #$DA 3C/9987: F0 4B BEQ $99D4 ; cure 3 3C/9989: A2 5C LDX #$5C 3C/998B: C9 E0 CMP #$E0 3C/998D: F0 45 BEQ $99D4 ; life 3C/998F: A2 5E LDX #$5E 3C/9991: C9 E1 CMP #$E1 3C/9993: F0 3F BEQ $99D4 ; cure 2 3C/9995: A2 5C LDX #$5C 3C/9997: C9 EE CMP #$EE 3C/9999: F0 39 BEQ $99D4 ; toad 3C/999B: A2 69 LDX #$69 3C/999D: C9 F6 CMP #$F6 3C/999F: F0 0C BEQ $99AD ; wash 3C/99A1: A2 63 LDX #$63 3C/99A3: C9 F0 CMP #$F0 3C/99A5: F0 2D BEQ $99D4 ; mini 3C/99A7: A2 6A LDX #$6A 3C/99A9: C9 F7 CMP #$F7 3C/99AB: D0 0B BNE $99B8 3C/99AD: A5 53 LDA $53 3C/99AF: 29 20 AND #$20 3C/99B1: F0 21 BEQ $99D4 3C/99B3: A9 77 LDA #$77 ; $0177: "Can't change size." 3C/99B5: 4C BB 98 JMP $98BB ; show magic menu message ; cure 3C/99B8: A2 5C LDX #$5C 3C/99BA: C9 FC CMP #$FC 3C/99BC: F0 16 BEQ $99D4 ; pure 3C/99BE: A2 64 LDX #$64 3C/99C0: C9 FD CMP #$FD 3C/99C2: F0 10 BEQ $99D4 3C/99C4: 60 RTS 3C/99C5: 8A TXA 3C/99C6: 20 D5 98 JSR $98D5 3C/99C9: A9 00 LDA #$00 ; hide cursor 1 3C/99CB: 85 A2 STA $A2 3C/99CD: 20 15 A7 JSR $A715 ; select character 3C/99D0: B0 0F BCS $99E1 3C/99D2: 90 0E BCC $99E2 3C/99D4: 8A TXA 3C/99D5: 20 D5 98 JSR $98D5 3C/99D8: A9 00 LDA #$00 ; hide cursor 1 3C/99DA: 85 A2 STA $A2 3C/99DC: 20 5F A7 JSR $A75F 3C/99DF: 90 01 BCC $99E2 3C/99E1: 60 RTS 3C/99E2: 20 8C 95 JSR $958C ; play warp/exit sound effect 3C/99E5: 20 EB 99 JSR $99EB 3C/99E8: 4C 32 A3 JMP $A332 ; redraw character window ; [ ] 3C/99EB: AD F0 79 LDA $79F0 3C/99EE: C9 10 CMP #$10 3C/99F0: A9 01 LDA #$01 3C/99F2: 90 02 BCC $99F6 3C/99F4: A9 04 LDA #$04 3C/99F6: 85 8B STA $8B 3C/99F8: A6 8F LDX $8F 3C/99FA: BD 00 7C LDA $7C00,X 3C/99FD: A6 7F LDX $7F ; life 2 3C/99FF: C9 CC CMP #$CC 3C/9A01: D0 03 BNE $9A06 3C/9A03: 4C 56 9A JMP $9A56 ; cure 4 3C/9A06: C9 D2 CMP #$D2 3C/9A08: D0 03 BNE $9A0D 3C/9A0A: 4C 65 9A JMP $9A65 ; heal 3C/9A0D: C9 D3 CMP #$D3 3C/9A0F: D0 03 BNE $9A14 3C/9A11: 4C 7E 9A JMP $9A7E ; soft 3C/9A14: C9 DA CMP #$DA 3C/9A16: D0 03 BNE $9A1B 3C/9A18: 4C 8B 9A JMP $9A8B ; cure 3 3C/9A1B: C9 E0 CMP #$E0 3C/9A1D: D0 03 BNE $9A22 3C/9A1F: 4C 8F 9A JMP $9A8F ; life 3C/9A22: C9 E1 CMP #$E1 3C/9A24: D0 03 BNE $9A29 3C/9A26: 4C 97 9A JMP $9A97 ; cure 2 3C/9A29: C9 EE CMP #$EE 3C/9A2B: D0 03 BNE $9A30 3C/9A2D: 4C 9B 9A JMP $9A9B ; toad 3C/9A30: C9 F6 CMP #$F6 3C/9A32: D0 03 BNE $9A37 3C/9A34: 4C A3 9A JMP $9AA3 ; wash 3C/9A37: C9 F0 CMP #$F0 3C/9A39: D0 03 BNE $9A3E 3C/9A3B: 4C BB 9A JMP $9ABB ; mini 3C/9A3E: C9 F7 CMP #$F7 3C/9A40: D0 03 BNE $9A45 3C/9A42: 4C BF 9A JMP $9ABF ; cure 3C/9A45: C9 FC CMP #$FC 3C/9A47: D0 03 BNE $9A4C 3C/9A49: 4C C4 9A JMP $9AC4 ; pure 3C/9A4C: C9 FD CMP #$FD 3C/9A4E: D0 03 BNE $9A53 3C/9A50: 4C CC 9A JMP $9ACC ; none 3C/9A53: 4C E1 99 JMP $99E1 ; life 2 3C/9A56: A9 80 LDA #$80 ; dead status 3C/9A58: 85 87 STA $87 3C/9A5A: 20 C2 A3 JSR $A3C2 ; remove status 3C/9A5D: B0 2B BCS $9A8A 3C/9A5F: 20 58 A4 JSR $A458 3C/9A62: 4C 57 99 JMP $9957 ; decrement mp ; cure 4 3C/9A65: 20 7A 9B JSR $9B7A ; validate targets for cure spell 3C/9A68: A5 8B LDA $8B 3C/9A6A: C9 01 CMP #$01 3C/9A6C: D0 06 BNE $9A74 3C/9A6E: 20 58 A4 JSR $A458 3C/9A71: 4C 57 99 JMP $9957 ; decrement mp 3C/9A74: A9 DC LDA #$DC ; spell power: 220 3C/9A76: 85 8D STA $8D 3C/9A78: 20 66 A4 JSR $A466 ; healing spell effect 3C/9A7B: 4C 57 99 JMP $9957 ; decrement mp ; heal 3C/9A7E: A9 7F LDA #$7F ; all status effects (except dead) ; remove status 3C/9A80: 85 87 STA $87 3C/9A82: 20 C2 A3 JSR $A3C2 ; remove status 3C/9A85: B0 03 BCS $9A8A 3C/9A87: 20 57 99 JSR $9957 ; decrement mp 3C/9A8A: 60 RTS ; soft 3C/9A8B: A9 40 LDA #$40 ; stone status 3C/9A8D: D0 F1 BNE $9A80 ; cure 3 3C/9A8F: 20 7A 9B JSR $9B7A ; validate targets for cure spell 3C/9A92: A9 B4 LDA #$B4 ; spell power: 180 3C/9A94: 4C 76 9A JMP $9A76 ; life 3C/9A97: A9 80 LDA #$80 ; dead status 3C/9A99: D0 E5 BNE $9A80 ; cure 2 3C/9A9B: 20 7A 9B JSR $9B7A ; validate targets for cure spell 3C/9A9E: A9 7D LDA #$7D ; spell power: 125 3C/9AA0: 4C 76 9A JMP $9A76 ; toad 3C/9AA3: A9 20 LDA #$20 ; toad status ; toggle status 3C/9AA5: 85 80 STA $80 3C/9AA7: BD 02 61 LDA $6102,X 3C/9AAA: 45 80 EOR $80 3C/9AAC: 9D 02 61 STA $6102,X 3C/9AAF: 8A TXA 3C/9AB0: 18 CLC 3C/9AB1: 69 40 ADC #$40 3C/9AB3: AA TAX 3C/9AB4: C6 8B DEC $8B 3C/9AB6: D0 EF BNE $9AA7 3C/9AB8: 4C 57 99 JMP $9957 ; decrement mp ; wash 3C/9ABB: A9 04 LDA #$04 ; blind status 3C/9ABD: D0 C1 BNE $9A80 ; mini 3C/9ABF: A9 08 LDA #$08 ; mini status 3C/9AC1: 4C A5 9A JMP $9AA5 ; cure 3C/9AC4: 20 7A 9B JSR $9B7A ; validate targets for cure spell 3C/9AC7: A9 2A LDA #$2A ; spell power: 42 3C/9AC9: 4C 76 9A JMP $9A76 ; pure 3C/9ACC: A9 02 LDA #$02 ; poison status 3C/9ACE: D0 B0 BNE $9A80 ; [ warp spell ] 3C/9AD0: A9 00 LDA #$00 ; init 0 rooms back 3C/9AD2: 85 61 STA $61 3C/9AD4: 85 20 STA $20 3C/9AD6: 85 62 STA $62 ; start of frame loop 3C/9AD8: A2 00 LDX #$00 3C/9ADA: A5 61 LDA $61 3C/9ADC: C9 0A CMP #$0A 3C/9ADE: 90 07 BCC $9AE7 3C/9AE0: E9 0A SBC #$0A 3C/9AE2: E8 INX 3C/9AE3: E0 07 CPX #$07 3C/9AE5: 90 F5 BCC $9ADC 3C/9AE7: 86 81 STX $81 ; tens digit 3C/9AE9: 85 80 STA $80 ; ones digit 3C/9AEB: 20 00 FF JSR $FF00 ; wait for vblank 3C/9AEE: E6 F0 INC $F0 ; increment frame counter 3C/9AF0: 2C 02 20 BIT $2002 ; latch ppu 3C/9AF3: A9 20 LDA #$20 ; ppu $207A 3C/9AF5: 8D 06 20 STA $2006 3C/9AF8: A9 7A LDA #$7A 3C/9AFA: 8D 06 20 STA $2006 3C/9AFD: A5 81 LDA $81 3C/9AFF: 18 CLC 3C/9B00: 69 80 ADC #$80 ; convert tens digit to numeral 3C/9B02: 8D 07 20 STA $2007 3C/9B05: A5 80 LDA $80 3C/9B07: 18 CLC 3C/9B08: 69 80 ADC #$80 ; convert ones digit to numeral 3C/9B0A: 8D 07 20 STA $2007 3C/9B0D: 20 9F 95 JSR $959F ; update ppu registers 3C/9B10: 20 58 C7 JSR $C758 ; update sound 3C/9B13: 20 81 D2 JSR $D281 ; read joypad registers 3C/9B16: A5 20 LDA $20 3C/9B18: 30 03 BMI $9B1D ; branch if A button is pressed 3C/9B1A: 38 SEC 3C/9B1B: 26 62 ROL $62 ; set msb of $62 when A button is released 3C/9B1D: F0 B9 BEQ $9AD8 3C/9B1F: 29 0F AND #$0F 3C/9B21: D0 12 BNE $9B35 ; branch if a direction button is pressed 3C/9B23: 24 20 BIT $20 3C/9B25: 30 03 BMI $9B2A ; branch if A button pressed 3C/9B27: 50 AF BVC $9AD8 ; branch if B button not pressed 3C/9B29: 60 RTS ; A button 3C/9B2A: A5 62 LDA $62 3C/9B2C: F0 AA BEQ $9AD8 ; branch if A button hasn't been released yet 3C/9B2E: A5 61 LDA $61 3C/9B30: F0 F7 BEQ $9B29 ; return if number of rooms is 0 3C/9B32: 4C 5D 9B JMP $9B5D ; direction button 3C/9B35: A5 F0 LDA $F0 3C/9B37: 29 03 AND #$03 3C/9B39: D0 9D BNE $9AD8 ; only update every 4th frame ; down or right 3C/9B3B: A5 20 LDA $20 3C/9B3D: 29 05 AND #$05 3C/9B3F: F0 10 BEQ $9B51 3C/9B41: A5 61 LDA $61 3C/9B43: 18 CLC 3C/9B44: 69 01 ADC #$01 ; increment number of rooms 3C/9B46: C9 2E CMP #$2E ; max 45 3C/9B48: 90 02 BCC $9B4C 3C/9B4A: A9 00 LDA #$00 3C/9B4C: 85 61 STA $61 3C/9B4E: 4C D8 9A JMP $9AD8 ; up or left 3C/9B51: A5 61 LDA $61 3C/9B53: 38 SEC 3C/9B54: E9 01 SBC #$01 ; decrement number of rooms 3C/9B56: 10 F4 BPL $9B4C 3C/9B58: A9 2D LDA #$2D 3C/9B5A: 4C 4C 9B JMP $9B4C ; confirm 3C/9B5D: A4 61 LDY $61 ; number of maps to go back 3C/9B5F: BA TSX ; increment stack pointer to go to previous map 3C/9B60: 8A TXA 3C/9B61: 18 CLC 3C/9B62: 69 08 ADC #$08 3C/9B64: C9 FB CMP #$FB 3C/9B66: B0 0D BCS $9B75 3C/9B68: 88 DEY 3C/9B69: F0 0A BEQ $9B75 3C/9B6B: 18 CLC 3C/9B6C: 69 05 ADC #$05 3C/9B6E: C9 FB CMP #$FB ; don't let stack pointer go above $01FB 3C/9B70: B0 03 BCS $9B75 3C/9B72: 88 DEY 3C/9B73: D0 F6 BNE $9B6B 3C/9B75: AA TAX 3C/9B76: 9A TXS 3C/9B77: 4C 18 99 JMP $9918 ; [ validate targets for cure spell ] ; X: pointer to target ; $8B: number of targets 3C/9B7A: A5 8B LDA $8B ; number of targets 3C/9B7C: C9 01 CMP #$01 3C/9B7E: D0 0D BNE $9B8D ; single target 3C/9B80: BD 02 61 LDA $6102,X 3C/9B83: 29 C0 AND #$C0 3C/9B85: F0 05 BEQ $9B8C ; return if not dead or stone 3C/9B87: 68 PLA ; pop return address 3C/9B88: 68 PLA 3C/9B89: 4C 29 D5 JMP $D529 ; error sound effect 3C/9B8C: 60 RTS ; multi-target 3C/9B8D: A2 00 LDX #$00 3C/9B8F: BD 02 61 LDA $6102,X 3C/9B92: C9 40 CMP #$40 3C/9B94: 90 0A BCC $9BA0 ; branch if not dead or stone 3C/9B96: C6 8B DEC $8B ; decrement number of targets 3C/9B98: 8A TXA 3C/9B99: 18 CLC 3C/9B9A: 69 40 ADC #$40 3C/9B9C: AA TAX 3C/9B9D: D0 F0 BNE $9B8F 3C/9B9F: 60 RTS 3C/9BA0: 8A TXA 3C/9BA1: 86 7F STX $7F 3C/9BA3: 18 CLC 3C/9BA4: 69 40 ADC #$40 3C/9BA6: AA TAX 3C/9BA7: D0 E6 BNE $9B8F 3C/9BA9: 60 RTS ; -------------------------------------------------------------------------- ; [ equip menu ] ; starts at 3C/9BB5 3C/9BAA: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9BAD: A9 08 LDA #$08 3C/9BAF: 8D F0 78 STA $78F0 3C/9BB2: 4C 85 A6 JMP $A685 ; close menu ; subroutine starts here 3C/9BB5: 20 92 95 JSR $9592 ; reset A/B button 3C/9BB8: A9 00 LDA #$00 3C/9BBA: 85 B4 STA $B4 ; hide page arrows 3C/9BBC: 20 85 A6 JSR $A685 ; close menu 3C/9BBF: 20 6F 95 JSR $956F ; reset attribute table 3C/9BC2: A9 00 LDA #$00 3C/9BC4: 8D F0 7A STA $7AF0 3C/9BC7: 8D F0 78 STA $78F0 3C/9BCA: 20 42 D1 JSR $D142 ; init inventory equipability 3C/9BCD: 20 92 95 JSR $9592 ; reset A/B button 3C/9BD0: A9 12 LDA #$12 3C/9BD2: 20 67 F4 JSR $F467 3C/9BD5: A9 00 LDA #$00 3C/9BD7: 85 A4 STA $A4 3C/9BD9: 85 A3 STA $A3 3C/9BDB: 85 B4 STA $B4 3C/9BDD: 85 24 STA $24 3C/9BDF: 85 25 STA $25 3C/9BE1: A2 0A LDX #$0A ; current equipment menu 3C/9BE3: 20 F1 AA JSR $AAF1 ; open menu window 3C/9BE6: A9 3E LDA #$3E ; $013E: equip menu stats 3C/9BE8: 20 7A A8 JSR $A87A ; show character message 3C/9BEB: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/9BEE: A9 08 LDA #$08 3C/9BF0: 20 A3 91 JSR $91A3 ; update cursor 1 position 3C/9BF3: 20 5B 9D JSR $9D5B ; draw character sprite 3C/9BF6: A5 25 LDA $25 3C/9BF8: D0 B0 BNE $9BAA 3C/9BFA: A5 24 LDA $24 3C/9BFC: F0 ED BEQ $9BEB 3C/9BFE: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9C01: 20 9B 9D JSR $9D9B ; remove equipment 3C/9C04: B0 C7 BCS $9BCD ; branch if slot wasn't empty ; item select 3C/9C06: A9 01 LDA #$01 ; show cursor 3 3C/9C08: 85 A4 STA $A4 3C/9C0A: A2 0B LDX #$0B ; equip menu - item list 3C/9C0C: 20 F1 AA JSR $AAF1 ; open menu window 3C/9C0F: A9 2F LDA #$2F ; item list 3C/9C11: 20 78 A6 JSR $A678 ; load menu text 3C/9C14: 20 3D 90 JSR $903D 3C/9C17: A9 80 LDA #$80 3C/9C19: 85 B4 STA $B4 ; show page down arrow 3C/9C1B: 20 A8 A3 JSR $A3A8 ; save window variables 3C/9C1E: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/9C21: A9 08 LDA #$08 3C/9C23: 20 0D 92 JSR $920D ; update cursor 3 position 3C/9C26: 20 5B 9D JSR $9D5B ; draw character sprite 3C/9C29: A5 25 LDA $25 3C/9C2B: D0 A0 BNE $9BCD ; branch if B button is pressed 3C/9C2D: A5 24 LDA $24 3C/9C2F: F0 ED BEQ $9C1E ; branch if A button is not pressed 3C/9C31: 20 3C 9C JSR $9C3C ; equip item 3C/9C34: B0 97 BCS $9BCD ; branch if success 3C/9C36: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9C39: 4C 1E 9C JMP $9C1E ; [ equip item ] ; carry set = success, carry clear = fail 3C/9C3C: AE F0 78 LDX $78F0 3C/9C3F: BD 03 78 LDA $7803,X ; cursor 1 position (equipment slot) 3C/9C42: 38 SEC 3C/9C43: E9 03 SBC #$03 3C/9C45: C9 04 CMP #$04 3C/9C47: D0 03 BNE $9C4C 3C/9C49: 18 CLC 3C/9C4A: 69 01 ADC #$01 3C/9C4C: 85 8E STA $8E 3C/9C4E: 05 7F ORA $7F 3C/9C50: AA TAX 3C/9C51: 86 8A STX $8A 3C/9C53: AE F0 7A LDX $7AF0 ; cursor 3 position (inventory slot) 3C/9C56: BD 03 7A LDA $7A03,X 3C/9C59: 85 8B STA $8B 3C/9C5B: AA TAX 3C/9C5C: BD C0 60 LDA $60C0,X ; inventory item id 3C/9C5F: D0 02 BNE $9C63 ; branch if not empty 3C/9C61: 18 CLC 3C/9C62: 60 RTS 3C/9C63: AA TAX 3C/9C64: 86 8C STX $8C 3C/9C66: BD 00 72 LDA $7200,X ; check if char can equip this item 3C/9C69: F0 07 BEQ $9C72 3C/9C6B: A9 6F LDA #$6F ; "Can't equip" 3C/9C6D: 20 2A 9E JSR $9E2A ; close item list 3C/9C70: 18 CLC 3C/9C71: 60 RTS 3C/9C72: A5 8E LDA $8E 3C/9C74: C9 03 CMP #$03 3C/9C76: 90 03 BCC $9C7B 3C/9C78: 4C C6 9C JMP $9CC6 ; helmet 3C/9C7B: C9 00 CMP #$00 3C/9C7D: D0 0D BNE $9C8C 3C/9C7F: A5 8C LDA $8C 3C/9C81: C9 62 CMP #$62 ; $62-$71: helmets 3C/9C83: 90 E6 BCC $9C6B 3C/9C85: C9 72 CMP #$72 3C/9C87: B0 E2 BCS $9C6B 3C/9C89: 4C AA 9C JMP $9CAA ; armor 3C/9C8C: C9 01 CMP #$01 3C/9C8E: D0 0D BNE $9C9D 3C/9C90: A5 8C LDA $8C 3C/9C92: C9 72 CMP #$72 ; $72-$8A: armor 3C/9C94: 90 D5 BCC $9C6B 3C/9C96: C9 8B CMP #$8B 3C/9C98: B0 D1 BCS $9C6B 3C/9C9A: 4C AA 9C JMP $9CAA ; gloves 3C/9C9D: A5 8C LDA $8C 3C/9C9F: C9 8B CMP #$8B ; $8B-$97: gloves 3C/9CA1: 90 C8 BCC $9C6B 3C/9CA3: C9 98 CMP #$98 3C/9CA5: B0 C4 BCS $9C6B 3C/9CA7: 4C AA 9C JMP $9CAA ; equip armor 3C/9CAA: A9 01 LDA #$01 ; qty: 1 3C/9CAC: 85 81 STA $81 3C/9CAE: A5 8C LDA $8C 3C/9CB0: 85 80 STA $80 3C/9CB2: A6 8A LDX $8A 3C/9CB4: 9D 00 62 STA $6200,X 3C/9CB7: 20 B9 90 JSR $90B9 ; remove item from inventory 3C/9CBA: A6 8A LDX $8A 3C/9CBC: A5 8A LDA $8A 3C/9CBE: 20 0B D1 JSR $D10B ; update character equipment 3C/9CC1: 20 4B 9E JSR $9E4B 3C/9CC4: 38 SEC 3C/9CC5: 60 RTS ; weapon 3C/9CC6: A5 8A LDA $8A 3C/9CC8: 49 06 EOR #$06 ; 3 <-> 5 (other hand equipped item) 3C/9CCA: 85 89 STA $89 3C/9CCC: A5 8C LDA $8C 3C/9CCE: C9 62 CMP #$62 ; $00-$61: weapons 3C/9CD0: 90 03 BCC $9CD5 3C/9CD2: 4C 6B 9C JMP $9C6B ; can't equip 3C/9CD5: A6 89 LDX $89 3C/9CD7: BD 00 62 LDA $6200,X 3C/9CDA: D0 03 BNE $9CDF ; branch if other hand is not empty 3C/9CDC: 4C F6 9C JMP $9CF6 3C/9CDF: 20 2F 9D JSR $9D2F ; get weapon type 3C/9CE2: 85 80 STA $80 3C/9CE4: A5 8C LDA $8C 3C/9CE6: 20 2F 9D JSR $9D2F ; get weapon type 3C/9CE9: 0A ASL 3C/9CEA: 0A ASL 3C/9CEB: 05 80 ORA $80 3C/9CED: AA TAX 3C/9CEE: BD 4B 9D LDA $9D4B,X 3C/9CF1: F0 03 BEQ $9CF6 ; branch if weapon combination is allowed 3C/9CF3: 4C 6B 9C JMP $9C6B ; can't equip ; equip weapon 3C/9CF6: A6 8B LDX $8B 3C/9CF8: BD E0 60 LDA $60E0,X ; inventory qty 3C/9CFB: C9 15 CMP #$15 3C/9CFD: 90 02 BCC $9D01 3C/9CFF: A9 14 LDA #$14 ; max qty: 20 3C/9D01: 85 81 STA $81 3C/9D03: A5 8C LDA $8C 3C/9D05: C9 4F CMP #$4F ; $4F-$56: arrows 3C/9D07: 90 04 BCC $9D0D 3C/9D09: C9 57 CMP #$57 3C/9D0B: 90 04 BCC $9D11 3C/9D0D: A9 01 LDA #$01 ; qty: 1 3C/9D0F: 85 81 STA $81 3C/9D11: A5 8C LDA $8C 3C/9D13: 85 80 STA $80 3C/9D15: A6 8A LDX $8A 3C/9D17: A5 80 LDA $80 3C/9D19: 9D 00 62 STA $6200,X ; equipped weapon id 3C/9D1C: A5 81 LDA $81 3C/9D1E: 9D 01 62 STA $6201,X ; equipped weapon qty 3C/9D21: 20 B9 90 JSR $90B9 ; remove item from inventory 3C/9D24: A5 8A LDA $8A 3C/9D26: AA TAX 3C/9D27: 20 0B D1 JSR $D10B ; update character equipment 3C/9D2A: 20 4B 9E JSR $9E4B 3C/9D2D: 38 SEC 3C/9D2E: 60 RTS ; [ get weapon type ] 3C/9D2F: C9 46 CMP #$46 3C/9D31: 90 15 BCC $9D48 ; branch if a weapon 3C/9D33: C9 4A CMP #$4A 3C/9D35: B0 03 BCS $9D3A ; branch if not a harp ; 3: harp 3C/9D37: A9 03 LDA #$03 3C/9D39: 60 RTS ; 1: bow 3C/9D3A: C9 4F CMP #$4F 3C/9D3C: B0 03 BCS $9D41 ; branch if not a bow 3C/9D3E: A9 01 LDA #$01 3C/9D40: 60 RTS ; 2: arrows 3C/9D41: C9 57 CMP #$57 3C/9D43: B0 03 BCS $9D48 3C/9D45: A9 02 LDA #$02 3C/9D47: 60 RTS ; 0: other 3C/9D48: A9 00 LDA #$00 3C/9D4A: 60 RTS ; allowed weapon combinations, 0 = allowed, 1 = not allowed (4x4 matrix) 3C/9D4B: 00 01 01 01 ; weapon + weapon 3C/9D4F: 01 01 00 01 ; bow + arrows 3C/9D53: 01 00 01 01 ; arrows + bow 3C/9D57: 01 01 01 01 ; can't pair harp with anything ; [ draw character sprite (equip menu) ] 3C/9D5B: A9 80 LDA #$80 3C/9D5D: 85 40 STA $40 3C/9D5F: A9 28 LDA #$28 3C/9D61: 85 41 STA $41 3C/9D63: A6 7F LDX $7F 3C/9D65: 4C 36 81 JMP $8136 ; draw character sprite ; [ ] ; $61: item slot 3C/9D68: A5 61 LDA $61 3C/9D6A: 85 8E STA $8E 3C/9D6C: 05 7F ORA $7F 3C/9D6E: AA TAX 3C/9D6F: BD 00 62 LDA $6200,X ; equipped item id 3C/9D72: D0 04 BNE $9D78 3C/9D74: A9 00 LDA #$00 3C/9D76: 18 CLC 3C/9D77: 60 RTS 3C/9D78: 86 8A STX $8A 3C/9D7A: 85 8B STA $8B 3C/9D7C: 85 80 STA $80 3C/9D7E: A9 01 LDA #$01 3C/9D80: 85 81 STA $81 3C/9D82: A5 8E LDA $8E 3C/9D84: C9 03 CMP #$03 3C/9D86: 90 05 BCC $9D8D ; branch if not a weapon slot 3C/9D88: BD 01 62 LDA $6201,X 3C/9D8B: 85 81 STA $81 3C/9D8D: 20 62 93 JSR $9362 ; add item to inventory 3C/9D90: 90 04 BCC $9D96 3C/9D92: A9 6B LDA #$6B ; "No room to remove" 3C/9D94: 38 SEC 3C/9D95: 60 RTS 3C/9D96: 20 0F 9E JSR $9E0F ; remove equipped item 3C/9D99: 18 CLC 3C/9D9A: 60 RTS ; [ remove equipment ] ; clear carry if equipment slot empty 3C/9D9B: AD F0 78 LDA $78F0 3C/9D9E: C9 10 CMP #$10 3C/9DA0: D0 2C BNE $9DCE ; remove all equipment 3C/9DA2: A9 00 LDA #$00 3C/9DA4: 85 62 STA $62 3C/9DA6: A9 05 LDA #$05 3C/9DA8: 85 61 STA $61 3C/9DAA: 20 68 9D JSR $9D68 3C/9DAD: 90 05 BCC $9DB4 3C/9DAF: 20 2A 9E JSR $9E2A ; close item list 3C/9DB2: 38 SEC 3C/9DB3: 60 RTS 3C/9DB4: F0 02 BEQ $9DB8 3C/9DB6: E6 62 INC $62 3C/9DB8: C6 61 DEC $61 3C/9DBA: 30 0A BMI $9DC6 3C/9DBC: A5 61 LDA $61 3C/9DBE: C9 04 CMP #$04 3C/9DC0: D0 E8 BNE $9DAA 3C/9DC2: C6 61 DEC $61 3C/9DC4: 10 E4 BPL $9DAA 3C/9DC6: A5 62 LDA $62 3C/9DC8: F0 E8 BEQ $9DB2 3C/9DCA: A9 6E LDA #$6E ; "Removed" 3C/9DCC: D0 E1 BNE $9DAF ; remove selected item 3C/9DCE: AE F0 78 LDX $78F0 3C/9DD1: BD 03 78 LDA $7803,X 3C/9DD4: 38 SEC 3C/9DD5: E9 03 SBC #$03 3C/9DD7: C9 04 CMP #$04 3C/9DD9: D0 03 BNE $9DDE 3C/9DDB: 18 CLC 3C/9DDC: 69 01 ADC #$01 3C/9DDE: 85 8E STA $8E 3C/9DE0: 05 7F ORA $7F 3C/9DE2: AA TAX 3C/9DE3: BD 00 62 LDA $6200,X 3C/9DE6: D0 02 BNE $9DEA ; branch if slot is not empty 3C/9DE8: 18 CLC 3C/9DE9: 60 RTS 3C/9DEA: 86 8A STX $8A 3C/9DEC: 85 8B STA $8B 3C/9DEE: 85 80 STA $80 3C/9DF0: A9 01 LDA #$01 3C/9DF2: 85 81 STA $81 3C/9DF4: A5 8E LDA $8E 3C/9DF6: C9 03 CMP #$03 3C/9DF8: 90 05 BCC $9DFF 3C/9DFA: BD 01 62 LDA $6201,X 3C/9DFD: 85 81 STA $81 3C/9DFF: 20 62 93 JSR $9362 ; add item to inventory 3C/9E02: 90 05 BCC $9E09 3C/9E04: A9 6B LDA #$6B ; "No room to remove" 3C/9E06: 4C 2A 9E JMP $9E2A ; close item list 3C/9E09: 20 0F 9E JSR $9E0F ; remove equipped item 3C/9E0C: 4C 2A 9E JMP $9E2A ; close item list ; [ remove equipped item ] 3C/9E0F: A6 8A LDX $8A 3C/9E11: A9 00 LDA #$00 3C/9E13: 9D 00 62 STA $6200,X 3C/9E16: A5 8E LDA $8E 3C/9E18: C9 03 CMP #$03 3C/9E1A: 90 05 BCC $9E21 ; branch if not a weapon slot 3C/9E1C: A9 00 LDA #$00 3C/9E1E: 9D 01 62 STA $6201,X 3C/9E21: A6 8A LDX $8A 3C/9E23: 8A TXA 3C/9E24: 20 0B D1 JSR $D10B ; update character equipment 3C/9E27: A9 6E LDA #$6E ; "Removed" 3C/9E29: 60 RTS ; [ close item list ] 3C/9E2A: 48 PHA 3C/9E2B: 20 A8 A3 JSR $A3A8 ; save window variables 3C/9E2E: A9 00 LDA #$00 3C/9E30: 85 B4 STA $B4 ; hide page arrows 3C/9E32: A2 1E LDX #$1E ; item message window 3C/9E34: 20 F1 AA JSR $AAF1 ; open menu window 3C/9E37: 68 PLA 3C/9E38: 20 78 A6 JSR $A678 ; load menu text 3C/9E3B: 20 05 A3 JSR $A305 ; wait for keypress 3C/9E3E: A2 1E LDX #$1E ; item message window 3C/9E40: 20 F1 AA JSR $AAF1 ; open menu window 3C/9E43: 20 75 90 JSR $9075 3C/9E46: 20 8E A3 JSR $A38E ; restore window variables 3C/9E49: 38 SEC 3C/9E4A: 60 RTS ; [ show equipped item message ] 3C/9E4B: A2 06 LDX #$06 3C/9E4D: A5 8A LDA $8A 3C/9E4F: 29 0F AND #$0F 3C/9E51: F0 14 BEQ $9E67 3C/9E53: A2 0E LDX #$0E 3C/9E55: C9 01 CMP #$01 3C/9E57: F0 0E BEQ $9E67 3C/9E59: A2 16 LDX #$16 3C/9E5B: C9 02 CMP #$02 3C/9E5D: F0 08 BEQ $9E67 3C/9E5F: A2 1E LDX #$1E 3C/9E61: C9 03 CMP #$03 3C/9E63: F0 02 BEQ $9E67 3C/9E65: A2 26 LDX #$26 3C/9E67: BD 00 74 LDA $7400,X 3C/9E6A: D0 01 BNE $9E6D 3C/9E6C: 60 RTS 3C/9E6D: 0A ASL 3C/9E6E: 48 PHA 3C/9E6F: 90 05 BCC $9E76 3C/9E71: A9 3F LDA #$3F ; "Strength 5 up!" 3C/9E73: 20 2A 9E JSR $9E2A 3C/9E76: 68 PLA 3C/9E77: 0A ASL 3C/9E78: 48 PHA 3C/9E79: 90 05 BCC $9E80 3C/9E7B: A9 40 LDA #$40 3C/9E7D: 20 2A 9E JSR $9E2A 3C/9E80: 68 PLA 3C/9E81: 0A ASL 3C/9E82: 48 PHA 3C/9E83: 90 05 BCC $9E8A 3C/9E85: A9 41 LDA #$41 3C/9E87: 20 2A 9E JSR $9E2A 3C/9E8A: 68 PLA 3C/9E8B: 0A ASL 3C/9E8C: 48 PHA 3C/9E8D: 90 05 BCC $9E94 3C/9E8F: A9 42 LDA #$42 3C/9E91: 20 2A 9E JSR $9E2A 3C/9E94: 68 PLA 3C/9E95: 0A ASL 3C/9E96: 48 PHA 3C/9E97: 90 05 BCC $9E9E 3C/9E99: A9 43 LDA #$43 ; "Spirit 5 up!" 3C/9E9B: 20 2A 9E JSR $9E2A 3C/9E9E: 68 PLA 3C/9E9F: 0A ASL 3C/9EA0: 48 PHA 3C/9EA1: 90 05 BCC $9EA8 3C/9EA3: A9 44 LDA #$44 ; "\blackFire power up!" 3C/9EA5: 20 2A 9E JSR $9E2A 3C/9EA8: 68 PLA 3C/9EA9: 0A ASL 3C/9EAA: 48 PHA 3C/9EAB: 90 05 BCC $9EB2 3C/9EAD: A9 45 LDA #$45 ; "\blackIce power up!" 3C/9EAF: 20 2A 9E JSR $9E2A 3C/9EB2: 68 PLA 3C/9EB3: 0A ASL 3C/9EB4: 90 05 BCC $9EBB 3C/9EB6: A9 46 LDA #$46 ; "\blackBolt power up!" 3C/9EB8: 20 2A 9E JSR $9E2A 3C/9EBB: 60 RTS ; -------------------------------------------------------------------------- ; [ item menu ] ; starts at 3C/9EC2 3C/9EBC: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9EBF: 4C 85 A6 JMP $A685 ; close menu ; subroutine starts here 3C/9EC2: 20 92 95 JSR $9592 ; reset A/B button 3C/9EC5: A9 80 LDA #$80 3C/9EC7: 85 B4 STA $B4 ; show page down arrow 3C/9EC9: 20 85 A6 JSR $A685 ; close menu 3C/9ECC: 20 6F 95 JSR $956F ; reset attribute table 3C/9ECF: 20 28 A3 JSR $A328 ; draw character window 3C/9ED2: A9 00 LDA #$00 ; hide cursor 1 and 2 3C/9ED4: 85 A2 STA $A2 3C/9ED6: 85 A3 STA $A3 3C/9ED8: A9 01 LDA #$01 ; show cursor 3 3C/9EDA: 85 A4 STA $A4 3C/9EDC: A9 00 LDA #$00 3C/9EDE: 8D F0 7A STA $7AF0 3C/9EE1: A2 06 LDX #$06 ; item/magic list window 3C/9EE3: 20 F1 AA JSR $AAF1 ; open menu window 3C/9EE6: A9 3D LDA #$3D ; $013D: inventory list 3C/9EE8: 20 78 A6 JSR $A678 ; load menu text 3C/9EEB: 20 3D 90 JSR $903D 3C/9EEE: 20 A8 A3 JSR $A3A8 ; save window variables 3C/9EF1: A2 05 LDX #$05 ; submenu label window 3C/9EF3: 20 F1 AA JSR $AAF1 ; open menu window 3C/9EF6: A9 35 LDA #$35 ; $0135: "Item" 3C/9EF8: 20 6B A6 JSR $A66B ; load menu text 3C/9EFB: 20 8E A3 JSR $A38E ; restore window variables 3C/9EFE: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/9F01: A9 08 LDA #$08 3C/9F03: 20 0D 92 JSR $920D ; update cursor 3 position 3C/9F06: A9 03 LDA #$03 3C/9F08: 20 00 80 JSR $8000 ; draw characters 3C/9F0B: A5 25 LDA $25 3C/9F0D: D0 AD BNE $9EBC ; branch if B button pressed 3C/9F0F: A5 24 LDA $24 3C/9F11: F0 EB BEQ $9EFE ; branch if A button not pressed ; select item 3C/9F13: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9F16: A9 02 LDA #$02 3C/9F18: 85 A3 STA $A3 ; show cursor 2 3C/9F1A: 85 A4 STA $A4 ; flash cursor 3 3C/9F1C: 20 63 A3 JSR $A363 ; init selected item cursor 3C/9F1F: AD F0 7A LDA $7AF0 3C/9F22: 8D F0 79 STA $79F0 ; set cursor 2 position 3C/9F25: AA TAX 3C/9F26: BD 02 7A LDA $7A02,X 3C/9F29: C9 0F CMP #$0F 3C/9F2B: D0 04 BNE $9F31 ; branch if not trash can 3C/9F2D: A9 FF LDA #$FF 3C/9F2F: D0 03 BNE $9F34 3C/9F31: BD 03 7A LDA $7A03,X ; item id ??? 3C/9F34: 85 8E STA $8E 3C/9F36: A9 00 LDA #$00 3C/9F38: 8D F2 79 STA $79F2 3C/9F3B: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3C/9F3E: A9 08 LDA #$08 3C/9F40: 20 0D 92 JSR $920D ; update cursor 3 position 3C/9F43: A9 03 LDA #$03 3C/9F45: 20 00 80 JSR $8000 ; draw characters 3C/9F48: A5 25 LDA $25 3C/9F4A: F0 0E BEQ $9F5A ; branch if B button not pressed ; deselect item 3C/9F4C: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9F4F: A9 00 LDA #$00 3C/9F51: 85 A3 STA $A3 3C/9F53: A9 01 LDA #$01 3C/9F55: 85 A4 STA $A4 3C/9F57: 4C FE 9E JMP $9EFE 3C/9F5A: A5 24 LDA $24 3C/9F5C: F0 DD BEQ $9F3B ; branch if A button not pressed ; swap/use item 3C/9F5E: 20 A8 A3 JSR $A3A8 ; save window variables 3C/9F61: 20 49 A3 JSR $A349 ; save character variables 3C/9F64: 20 74 8F JSR $8F74 ; cursor sound effect 3C/9F67: A9 00 LDA #$00 3C/9F69: 85 A3 STA $A3 3C/9F6B: 85 B4 STA $B4 ; hide page arrows 3C/9F6D: A9 01 LDA #$01 3C/9F6F: 85 A4 STA $A4 3C/9F71: 20 A5 9F JSR $9FA5 ; swap/use item 3C/9F74: 08 PHP 3C/9F75: 20 8E A3 JSR $A38E ; restore window variables 3C/9F78: 20 56 A3 JSR $A356 ; restore character variables 3C/9F7B: 28 PLP 3C/9F7C: B0 80 BCS $9EFE 3C/9F7E: 20 8E AA JSR $AA8E ; redraw item menu 3C/9F81: 20 56 A3 JSR $A356 ; restore character variables 3C/9F84: 20 75 90 JSR $9075 3C/9F87: 20 8E A3 JSR $A38E ; restore window variables 3C/9F8A: A5 1C LDA $1C 3C/9F8C: 85 3E STA $3E 3C/9F8E: A5 1D LDA $1D 3C/9F90: 85 3F STA $3F 3C/9F92: 20 61 EB JSR $EB61 ; load next line of text 3C/9F95: 20 92 95 JSR $9592 ; reset A/B button 3C/9F98: A9 00 LDA #$00 ; hide cursor 1 and 2 3C/9F9A: 85 A3 STA $A3 3C/9F9C: 85 A2 STA $A2 3C/9F9E: A9 01 LDA #$01 ; hide cursor 3 3C/9FA0: 85 A4 STA $A4 3C/9FA2: 4C FE 9E JMP $9EFE ; [ swap/use item ] ; $8E: selected item 3C/9FA5: AE F0 7A LDX $7AF0 ; pointer to cursor data 3C/9FA8: BD 03 7A LDA $7A03,X 3C/9FAB: 85 8F STA $8F 3C/9FAD: BD 02 7A LDA $7A02,X 3C/9FB0: C9 0F CMP #$0F 3C/9FB2: D0 28 BNE $9FDC ; branch if not trash can 3C/9FB4: A6 8E LDX $8E 3C/9FB6: E0 20 CPX #$20 3C/9FB8: B0 13 BCS $9FCD ; branch if trash can 3C/9FBA: BD C0 60 LDA $60C0,X ; item id 3C/9FBD: C9 F6 CMP #$F6 ; can't throw out toad spell 3C/9FBF: F0 0C BEQ $9FCD 3C/9FC1: C9 F7 CMP #$F7 ; can't throw out mini spell 3C/9FC3: F0 08 BEQ $9FCD 3C/9FC5: C9 9A CMP #$9A ; can't throw out key items ($9A-A3) 3C/9FC7: 90 09 BCC $9FD2 3C/9FC9: C9 A4 CMP #$A4 3C/9FCB: B0 05 BCS $9FD2 3C/9FCD: 20 29 D5 JSR $D529 ; error sound effect 3C/9FD0: 38 SEC 3C/9FD1: 60 RTS ; remove item 3C/9FD2: A9 00 LDA #$00 3C/9FD4: 9D C0 60 STA $60C0,X 3C/9FD7: 9D E0 60 STA $60E0,X 3C/9FDA: 18 CLC 3C/9FDB: 60 RTS ; use or swap 3C/9FDC: A6 8F LDX $8F 3C/9FDE: A4 8E LDY $8E 3C/9FE0: C0 20 CPY #$20 3C/9FE2: B0 D6 BCS $9FBA ; branch if trash can 3C/9FE4: C4 8F CPY $8F 3C/9FE6: F0 4B BEQ $A033 ; branch if same item ; swap items 3C/9FE8: BD C0 60 LDA $60C0,X 3C/9FEB: 48 PHA 3C/9FEC: B9 C0 60 LDA $60C0,Y 3C/9FEF: 9D C0 60 STA $60C0,X 3C/9FF2: 68 PLA 3C/9FF3: 99 C0 60 STA $60C0,Y 3C/9FF6: BD E0 60 LDA $60E0,X 3C/9FF9: 48 PHA 3C/9FFA: B9 E0 60 LDA $60E0,Y 3C/9FFD: 9D E0 60 STA $60E0,X 3D/A000: 68 PLA 3D/A001: 99 E0 60 STA $60E0,Y 3D/A004: 18 CLC 3D/A005: 60 RTS ; midgbread 3D/A006: A5 2D LDA $2D 3D/A008: 4A LSR 3D/A009: B0 31 BCS $A03C ; branch if not on world map 3D/A00B: 20 3C A3 JSR $A33C ; decrement item quantity 3D/A00E: 4C 25 A5 JMP $A525 ; show minimap ; otterhead 3D/A011: 68 PLA 3D/A012: A9 65 LDA #$65 ; $0165: "Warp to the outside" 3D/A014: 20 F6 A2 JSR $A2F6 ; show item menu message 3D/A017: A5 20 LDA $20 3D/A019: 29 40 AND #$40 3D/A01B: D0 14 BNE $A031 3D/A01D: 20 3C A3 JSR $A33C ; decrement item quantity 3D/A020: 20 8C 95 JSR $958C ; play warp/exit sound effect 3D/A023: 20 21 99 JSR $9921 3D/A026: 4C ED C0 JMP $C0ED ; world map main ; weapon or armor 3D/A029: A9 5A LDA #$5A ; "Cannot use" 3D/A02B: 20 F6 A2 JSR $A2F6 ; show item menu message 3D/A02E: 20 92 95 JSR $9592 ; reset A/B button 3D/A031: 18 CLC 3D/A032: 60 RTS ; use item 3D/A033: A6 8E LDX $8E 3D/A035: 86 63 STX $63 3D/A037: BD E0 60 LDA $60E0,X ; check if quantity is zero 3D/A03A: D0 08 BNE $A044 3D/A03C: 20 29 D5 JSR $D529 ; error sound effect 3D/A03F: 38 SEC 3D/A040: 60 RTS 3D/A041: 4C 5F A1 JMP $A15F ; spell 3D/A044: BC C0 60 LDY $60C0,X 3D/A047: C0 A4 CPY #$A4 ; midgbread 3D/A049: F0 BB BEQ $A006 3D/A04B: C0 A6 CPY #$A6 ; potion (first usable item) 3D/A04D: 90 DA BCC $A029 3D/A04F: C0 C8 CPY #$C8 ; first spell 3D/A051: B0 EE BCS $A041 3D/A053: C0 B1 CPY #$B1 ; bombshard (first spell item) 3D/A055: B0 D2 BCS $A029 3D/A057: C0 AB CPY #$AB ; maidkiss 3D/A059: F0 04 BEQ $A05F 3D/A05B: C0 AD CPY #$AD ; luckmallet 3D/A05D: D0 0A BNE $A069 3D/A05F: A5 53 LDA $53 3D/A061: 29 20 AND #$20 3D/A063: F0 0E BEQ $A073 3D/A065: A9 77 LDA #$77 ; "Can't change size." 3D/A067: D0 C2 BNE $A02B 3D/A069: C0 B0 CPY #$B0 ; otterhead 3D/A06B: D0 06 BNE $A073 3D/A06D: 24 53 BIT $53 3D/A06F: A9 78 LDA #$78 ; "Can't Warp." 3D/A071: 70 B8 BVS $A02B 3D/A073: 98 TYA 3D/A074: 48 PHA 3D/A075: 38 SEC 3D/A076: E9 A6 SBC #$A6 ; potion 3D/A078: 18 CLC 3D/A079: 69 5B ADC #$5B ; "Recover Whose HP?", etc. 3D/A07B: 48 PHA 3D/A07C: A2 15 LDX #$15 3D/A07E: 20 F1 AA JSR $AAF1 ; open menu window 3D/A081: 68 PLA 3D/A082: 20 78 A6 JSR $A678 ; load menu text 3D/A085: 68 PLA 3D/A086: 48 PHA 3D/A087: C9 B0 CMP #$B0 3D/A089: F0 86 BEQ $A011 ; branch if otterhead 3D/A08B: 20 15 A7 JSR $A715 ; select character 3D/A08E: 68 PLA 3D/A08F: A8 TAY 3D/A090: B0 9F BCS $A031 3D/A092: 20 8C 95 JSR $958C ; play warp/exit sound effect 3D/A095: A6 7F LDX $7F ; potion 3D/A097: C0 A6 CPY #$A6 ; potion 3D/A099: D0 19 BNE $A0B4 3D/A09B: BD 02 61 LDA $6102,X 3D/A09E: C9 40 CMP #$40 3D/A0A0: B0 0F BCS $A0B1 ; branch if stone or dead 3D/A0A2: A9 1E LDA #$1E ; spell power: 30 3D/A0A4: 85 8D STA $8D 3D/A0A6: A9 01 LDA #$01 3D/A0A8: 85 8B STA $8B 3D/A0AA: A9 03 LDA #$03 3D/A0AC: 85 8C STA $8C 3D/A0AE: 20 8A A4 JSR $A48A ; healing spell/item effect 3D/A0B1: 4C 2B A1 JMP $A12B ; hi-potion 3D/A0B4: C0 A7 CPY #$A7 ; hi-potion 3D/A0B6: D0 0C BNE $A0C4 3D/A0B8: BD 02 61 LDA $6102,X 3D/A0BB: C9 40 CMP #$40 3D/A0BD: B0 F2 BCS $A0B1 ; branch if stone or dead 3D/A0BF: A9 78 LDA #$78 ; spell power: 120 3D/A0C1: 4C A4 A0 JMP $A0A4 ; elixir 3D/A0C4: C0 A8 CPY #$A8 ; elixir 3D/A0C6: D0 10 BNE $A0D8 3D/A0C8: BD 02 61 LDA $6102,X 3D/A0CB: C9 40 CMP #$40 3D/A0CD: B0 E2 BCS $A0B1 ; branch if stone or dead 3D/A0CF: 20 58 A4 JSR $A458 ; restore hp to max 3D/A0D2: 20 18 A4 JSR $A418 ; restore mp to max 3D/A0D5: 4C 2B A1 JMP $A12B ; fenixdown 3D/A0D8: C0 A9 CPY #$A9 ; fenixdown 3D/A0DA: D0 16 BNE $A0F2 3D/A0DC: BD 02 61 LDA $6102,X 3D/A0DF: 10 5B BPL $A13C ; branch if not dead 3D/A0E1: 49 80 EOR #$80 3D/A0E3: 9D 02 61 STA $6102,X 3D/A0E6: A9 00 LDA #$00 3D/A0E8: 85 82 STA $82 3D/A0EA: A9 01 LDA #$01 3D/A0EC: 20 38 A4 JSR $A438 ; add 1 to current hp 3D/A0EF: 4C 2B A1 JMP $A12B ; soft 3D/A0F2: C0 AA CPY #$AA ; soft 3D/A0F4: D0 05 BNE $A0FB 3D/A0F6: A9 40 LDA #$40 3D/A0F8: 4C 44 A1 JMP $A144 ; maidkiss 3D/A0FB: C0 AB CPY #$AB ; maidkiss 3D/A0FD: D0 05 BNE $A104 3D/A0FF: A9 20 LDA #$20 3D/A101: 4C 44 A1 JMP $A144 ; echoherb 3D/A104: C0 AC CPY #$AC ; echoherb 3D/A106: D0 05 BNE $A10D 3D/A108: A9 10 LDA #$10 3D/A10A: 4C 44 A1 JMP $A144 ; luckmallet 3D/A10D: C0 AD CPY #$AD ; luckmallet 3D/A10F: D0 0C BNE $A11D 3D/A111: A9 08 LDA #$08 3D/A113: 5D 02 61 EOR $6102,X ; toggle mini status 3D/A116: 9D 02 61 STA $6102,X 3D/A119: 18 CLC 3D/A11A: 4C 2B A1 JMP $A12B ; eyedrop 3D/A11D: C0 AE CPY #$AE ; eyedrop 3D/A11F: D0 05 BNE $A126 3D/A121: A9 04 LDA #$04 3D/A123: 4C 44 A1 JMP $A144 ; antidote 3D/A126: A9 02 LDA #$02 3D/A128: 4C 44 A1 JMP $A144 3D/A12B: B0 0F BCS $A13C ; branch if item not used 3D/A12D: 20 3C A3 JSR $A33C ; decrement item quantity 3D/A130: 20 32 A3 JSR $A332 ; redraw character window 3D/A133: A9 00 LDA #$00 ; hide cursor 1 3D/A135: 85 A2 STA $A2 3D/A137: 8D F0 78 STA $78F0 3D/A13A: 18 CLC 3D/A13B: 60 RTS 3D/A13C: 98 TYA 3D/A13D: 48 PHA 3D/A13E: 20 29 D5 JSR $D529 ; error sound effect 3D/A141: 4C 8B A0 JMP $A08B ; change status 3D/A144: 85 80 STA $80 3D/A146: 3D 02 61 AND $6102,X 3D/A149: D0 04 BNE $A14F ; branch if character has this status 3D/A14B: 38 SEC 3D/A14C: 4C 2B A1 JMP $A12B 3D/A14F: A5 80 LDA $80 3D/A151: 49 FF EOR #$FF 3D/A153: 3D 02 61 AND $6102,X 3D/A156: 9D 02 61 STA $6102,X 3D/A159: 18 CLC 3D/A15A: 4C 2B A1 JMP $A12B 3D/A15D: 18 CLC 3D/A15E: 60 RTS ; spell 3D/A15F: 84 8C STY $8C 3D/A161: A2 15 LDX #$15 3D/A163: 20 F1 AA JSR $AAF1 ; open menu window 3D/A166: A9 73 LDA #$73 ; "Give to whom?" 3D/A168: 20 78 A6 JSR $A678 ; load menu text 3D/A16B: 20 15 A7 JSR $A715 ; select character 3D/A16E: B0 ED BCS $A15D 3D/A170: 20 B4 A2 JSR $A2B4 ; init spell list buffer 3D/A173: A5 8C LDA $8C 3D/A175: 20 9C A1 JSR $A19C ; check if character has spell 3D/A178: 90 08 BCC $A182 3D/A17A: A9 75 LDA #$75 ; "Already has that!" 3D/A17C: 20 F6 A2 JSR $A2F6 ; show item menu message 3D/A17F: 4C 61 A1 JMP $A161 3D/A182: C9 00 CMP #$00 3D/A184: F0 05 BEQ $A18B 3D/A186: A9 74 LDA #$74 ; "Can't carry anymore." 3D/A188: 4C 7C A1 JMP $A17C 3D/A18B: A5 8C LDA $8C 3D/A18D: 9D 00 7C STA $7C00,X 3D/A190: 20 C9 A1 JSR $A1C9 ; update spell list 3D/A193: 20 3C A3 JSR $A33C ; decrement item quantity 3D/A196: A9 00 LDA #$00 ; hide cursor 1 3D/A198: 85 A2 STA $A2 3D/A19A: 18 CLC 3D/A19B: 60 RTS ; [ check if character has spell ] 3D/A19C: 85 80 STA $80 3D/A19E: 38 SEC 3D/A19F: E9 C8 SBC #$C8 3D/A1A1: A8 TAY 3D/A1A2: BE 7C A2 LDX $A27C,Y 3D/A1A5: A5 80 LDA $80 3D/A1A7: DD 00 7C CMP $7C00,X 3D/A1AA: F0 1B BEQ $A1C7 3D/A1AC: DD 01 7C CMP $7C01,X 3D/A1AF: F0 16 BEQ $A1C7 3D/A1B1: DD 02 7C CMP $7C02,X 3D/A1B4: F0 11 BEQ $A1C7 3D/A1B6: BD 00 7C LDA $7C00,X 3D/A1B9: F0 0A BEQ $A1C5 3D/A1BB: E8 INX 3D/A1BC: BD 00 7C LDA $7C00,X 3D/A1BF: F0 04 BEQ $A1C5 3D/A1C1: E8 INX 3D/A1C2: BD 00 7C LDA $7C00,X 3D/A1C5: 18 CLC 3D/A1C6: 60 RTS 3D/A1C7: 38 SEC 3D/A1C8: 60 RTS ; [ update spell list ] ; copy spell list from buffer to sram (opposite of 3D/A2B4) 3D/A1C9: A6 7F LDX $7F 3D/A1CB: A0 00 LDY #$00 3D/A1CD: 98 TYA 3D/A1CE: 9D 07 62 STA $6207,X 3D/A1D1: 9D 08 62 STA $6208,X 3D/A1D4: 9D 09 62 STA $6209,X 3D/A1D7: 9D 0A 62 STA $620A,X 3D/A1DA: 9D 0B 62 STA $620B,X 3D/A1DD: 9D 0C 62 STA $620C,X 3D/A1E0: 9D 0D 62 STA $620D,X 3D/A1E3: 9D 0E 62 STA $620E,X 3D/A1E6: B9 00 7C LDA $7C00,Y 3D/A1E9: F0 03 BEQ $A1EE 3D/A1EB: 20 F4 A1 JSR $A1F4 ; add spell to spell list 3D/A1EE: C8 INY 3D/A1EF: C0 18 CPY #$18 3D/A1F1: 90 F3 BCC $A1E6 3D/A1F3: 60 RTS ; [ add spell to spell list ] 3D/A1F4: 38 SEC 3D/A1F5: E9 C8 SBC #$C8 3D/A1F7: AA TAX 3D/A1F8: BD 0C A2 LDA $A20C,X ; spell mask 3D/A1FB: 85 80 STA $80 3D/A1FD: BD 44 A2 LDA $A244,X ; spell level 3D/A200: 05 7F ORA $7F 3D/A202: AA TAX 3D/A203: A5 80 LDA $80 3D/A205: 1D 07 62 ORA $6207,X 3D/A208: 9D 07 62 STA $6207,X 3D/A20B: 60 RTS ; spell masks 3D/A20C: 01 02 04 08 10 20 40 3D/A213: 01 02 04 08 10 20 40 3D/A21A: 01 02 04 08 10 20 40 3D/A221: 01 02 04 08 10 20 40 3D/A228: 01 02 04 08 10 20 40 3D/A22F: 01 02 04 08 10 20 40 3D/A236: 01 02 04 08 10 20 40 3D/A23D: 01 02 04 08 10 20 40 ; spell levels 3D/A244: 07 07 07 07 07 07 07 3D/A24B: 06 06 06 06 06 06 06 3D/A252: 05 05 05 05 05 05 05 3D/A259: 04 04 04 04 04 04 04 3D/A260: 03 03 03 03 03 03 03 3D/A267: 02 02 02 02 02 02 02 3D/A26E: 01 01 01 01 01 01 01 3D/A275: 00 00 00 00 00 00 00 ; pointers to spells in buffer 3D/A27C: 15 15 15 15 15 15 15 3D/A283: 12 12 12 12 12 12 12 3D/A28A: 0F 0F 0F 0F 0F 0F 0F 3D/A291: 0C 0C 0C 0C 0C 0C 0C 3D/A298: 09 09 09 09 09 09 09 3D/A29F: 06 06 06 06 06 06 06 3D/A2A6: 03 03 03 03 03 03 03 3D/A2AD: 00 00 00 00 00 00 00 ; [ init spell list buffer ] ; copy spell list from sram to buffer at $7C00 (opposite of 3D/A1C9) 3D/A2B4: A0 17 LDY #$17 3D/A2B6: A9 00 LDA #$00 3D/A2B8: 99 00 7C STA $7C00,Y ; clear spell list buffer 3D/A2BB: 88 DEY 3D/A2BC: 10 FA BPL $A2B8 3D/A2BE: A0 00 LDY #$00 3D/A2C0: B9 0C A2 LDA $A20C,Y 3D/A2C3: 85 80 STA $80 3D/A2C5: B9 44 A2 LDA $A244,Y ; spell level 3D/A2C8: 05 7F ORA $7F 3D/A2CA: AA TAX 3D/A2CB: BD 07 62 LDA $6207,X 3D/A2CE: 25 80 AND $80 3D/A2D0: F0 07 BEQ $A2D9 ; branch if spell is not known 3D/A2D2: 84 80 STY $80 3D/A2D4: 20 DF A2 JSR $A2DF ; add spell to buffer 3D/A2D7: A4 80 LDY $80 3D/A2D9: C8 INY 3D/A2DA: C0 38 CPY #$38 ; 7 * 8 = 56 spells total 3D/A2DC: 90 E2 BCC $A2C0 3D/A2DE: 60 RTS ; [ add spell to buffer ] 3D/A2DF: 98 TYA 3D/A2E0: 18 CLC 3D/A2E1: 69 C8 ADC #$C8 3D/A2E3: BE 7C A2 LDX $A27C,Y ; pointers to spells in buffer 3D/A2E6: BC 00 7C LDY $7C00,X 3D/A2E9: F0 07 BEQ $A2F2 ; branch if 1st slot is empty 3D/A2EB: E8 INX 3D/A2EC: BC 00 7C LDY $7C00,X 3D/A2EF: F0 01 BEQ $A2F2 ; branch if 2nd slot is empty 3D/A2F1: E8 INX 3D/A2F2: 9D 00 7C STA $7C00,X 3D/A2F5: 60 RTS ; [ show item menu message ] 3D/A2F6: 48 PHA 3D/A2F7: A2 15 LDX #$15 3D/A2F9: 20 F1 AA JSR $AAF1 ; open menu window 3D/A2FC: 68 PLA 3D/A2FD: 20 78 A6 JSR $A678 ; load menu text 3D/A300: 20 05 A3 JSR $A305 ; wait for keypress 3D/A303: 18 CLC 3D/A304: 60 RTS ; -------------------------------------------------------------------------- ; [ wait for keypress ] 3D/A305: A9 00 LDA #$00 ; clear A and B button 3D/A307: 85 24 STA $24 3D/A309: 85 25 STA $25 3D/A30B: 20 00 FF JSR $FF00 ; wait for vblank 3D/A30E: 20 81 D2 JSR $D281 ; read joypad registers 3D/A311: 20 58 C7 JSR $C758 ; update sound 3D/A314: A5 20 LDA $20 3D/A316: D0 F3 BNE $A30B 3D/A318: 20 00 FF JSR $FF00 ; wait for vblank 3D/A31B: 20 81 D2 JSR $D281 ; read joypad registers 3D/A31E: 20 58 C7 JSR $C758 ; update sound 3D/A321: A5 20 LDA $20 3D/A323: F0 F3 BEQ $A318 ; wait for keypress 3D/A325: 85 21 STA $21 3D/A327: 60 RTS ; [ draw character window (bottom of screen) ] 3D/A328: A2 07 LDX #$07 3D/A32A: 20 F1 AA JSR $AAF1 ; open menu window 3D/A32D: A9 3B LDA #$3B ; $013B: item/magic menu character stats 3D/A32F: 4C 78 A6 JMP $A678 ; load menu text ; [ redraw character window (bottom of screen) ] 3D/A332: A2 07 LDX #$07 ; character window 3D/A334: 20 A6 AA JSR $AAA6 3D/A337: A9 3B LDA #$3B ; $013B: item/magic menu character stats 3D/A339: 4C 78 A6 JMP $A678 ; load menu text ; [ decrement item quantity ] 3D/A33C: A6 63 LDX $63 3D/A33E: DE E0 60 DEC $60E0,X 3D/A341: D0 05 BNE $A348 3D/A343: A9 00 LDA #$00 3D/A345: 9D C0 60 STA $60C0,X 3D/A348: 60 RTS ; [ save character variables ] 3D/A349: A5 80 LDA $80 3D/A34B: 85 08 STA $08 3D/A34D: A5 9E LDA $9E 3D/A34F: 85 09 STA $09 3D/A351: A5 7F LDA $7F 3D/A353: 85 0A STA $0A 3D/A355: 60 RTS ; [ restore character variables ] 3D/A356: A5 08 LDA $08 3D/A358: 85 80 STA $80 3D/A35A: A5 09 LDA $09 3D/A35C: 85 9E STA $9E 3D/A35E: A5 0A LDA $0A 3D/A360: 85 7F STA $7F 3D/A362: 60 RTS ; [ init selected item cursor ] ; duplicates cursor 3 positions for the selected item in the item menu 3D/A363: A2 80 LDX #$80 3D/A365: BD 00 7A LDA $7A00,X 3D/A368: 18 CLC 3D/A369: 69 01 ADC #$01 ; add 1 to x position 3D/A36B: 9D 00 79 STA $7900,X 3D/A36E: BD 01 7A LDA $7A01,X 3D/A371: 9D 01 79 STA $7901,X 3D/A374: BD 02 7A LDA $7A02,X 3D/A377: 9D 02 79 STA $7902,X 3D/A37A: BD 03 7A LDA $7A03,X 3D/A37D: 9D 03 79 STA $7903,X 3D/A380: 8A TXA 3D/A381: 38 SEC 3D/A382: E9 04 SBC #$04 3D/A384: AA TAX 3D/A385: B0 DE BCS $A365 3D/A387: AD F1 7A LDA $7AF1 3D/A38A: 8D F1 79 STA $79F1 3D/A38D: 60 RTS ; [ restore window variables ] 3D/A38E: AD EB 79 LDA $79EB 3D/A391: 85 B4 STA $B4 3D/A393: AD EC 79 LDA $79EC 3D/A396: 85 B5 STA $B5 3D/A398: AD ED 79 LDA $79ED 3D/A39B: 85 B6 STA $B6 3D/A39D: AD EE 79 LDA $79EE 3D/A3A0: 85 B7 STA $B7 3D/A3A2: AD EF 79 LDA $79EF 3D/A3A5: 85 B8 STA $B8 3D/A3A7: 60 RTS ; [ save window variables ] 3D/A3A8: A5 B4 LDA $B4 3D/A3AA: 8D EB 79 STA $79EB 3D/A3AD: A5 B5 LDA $B5 3D/A3AF: 8D EC 79 STA $79EC 3D/A3B2: A5 B6 LDA $B6 3D/A3B4: 8D ED 79 STA $79ED 3D/A3B7: A5 B7 LDA $B7 3D/A3B9: 8D EE 79 STA $79EE 3D/A3BC: A5 B8 LDA $B8 3D/A3BE: 8D EF 79 STA $79EF 3D/A3C1: 60 RTS ; [ remove status ] ; $87: status mask ; return carry set if targets don't have status to remove 3D/A3C2: A5 8B LDA $8B 3D/A3C4: C9 01 CMP #$01 3D/A3C6: D0 26 BNE $A3EE ; single target 3D/A3C8: A6 7F LDX $7F 3D/A3CA: BD 02 61 LDA $6102,X 3D/A3CD: 25 87 AND $87 3D/A3CF: D0 05 BNE $A3D6 3D/A3D1: 20 29 D5 JSR $D529 ; error sound effect 3D/A3D4: 38 SEC 3D/A3D5: 60 RTS 3D/A3D6: A5 87 LDA $87 3D/A3D8: 3D 02 61 AND $6102,X 3D/A3DB: 10 05 BPL $A3E2 3D/A3DD: A9 01 LDA #$01 3D/A3DF: 9D 0C 61 STA $610C,X 3D/A3E2: A5 87 LDA $87 3D/A3E4: 49 FF EOR #$FF 3D/A3E6: 3D 02 61 AND $6102,X 3D/A3E9: 9D 02 61 STA $6102,X 3D/A3EC: 18 CLC 3D/A3ED: 60 RTS ; multi-target 3D/A3EE: AD 02 61 LDA $6102 3D/A3F1: 0D 42 61 ORA $6142 3D/A3F4: 0D 82 61 ORA $6182 3D/A3F7: 0D C2 61 ORA $61C2 3D/A3FA: 25 87 AND $87 3D/A3FC: F0 D3 BEQ $A3D1 3D/A3FE: A2 00 LDX #$00 3D/A400: 20 0F A4 JSR $A40F 3D/A403: A2 40 LDX #$40 3D/A405: 20 0F A4 JSR $A40F 3D/A408: A2 80 LDX #$80 3D/A40A: 20 0F A4 JSR $A40F 3D/A40D: A2 C0 LDX #$C0 3D/A40F: BD 02 61 LDA $6102,X 3D/A412: 25 87 AND $87 3D/A414: D0 C0 BNE $A3D6 3D/A416: 18 CLC 3D/A417: 60 RTS ; [ restore mp to max ] 3D/A418: A6 7F LDX $7F 3D/A41A: BD 31 61 LDA $6131,X 3D/A41D: 9D 30 61 STA $6130,X 3D/A420: E8 INX 3D/A421: E8 INX 3D/A422: 8A TXA 3D/A423: 29 0F AND #$0F 3D/A425: D0 F3 BNE $A41A 3D/A427: 18 CLC 3D/A428: 60 RTS ; [ restore hp ] ; +$81: amount of hp to restore ; $83: restore to max if set 3D/A429: A6 7F LDX $7F 3D/A42B: BD 02 61 LDA $6102,X 3D/A42E: C9 40 CMP #$40 3D/A430: B0 33 BCS $A465 ; return if dead or stone 3D/A432: A5 83 LDA $83 3D/A434: D0 22 BNE $A458 3D/A436: A5 81 LDA $81 3D/A438: 18 CLC 3D/A439: 7D 0C 61 ADC $610C,X ; add to current hp 3D/A43C: 9D 0C 61 STA $610C,X 3D/A43F: BD 0D 61 LDA $610D,X 3D/A442: 65 82 ADC $82 3D/A444: 9D 0D 61 STA $610D,X 3D/A447: DD 0F 61 CMP $610F,X ; compare to max hp 3D/A44A: 90 19 BCC $A465 3D/A44C: F0 02 BEQ $A450 3D/A44E: B0 08 BCS $A458 3D/A450: BD 0C 61 LDA $610C,X 3D/A453: DD 0E 61 CMP $610E,X 3D/A456: 90 0D BCC $A465 3D/A458: BD 0E 61 LDA $610E,X ; set hp to max 3D/A45B: 9D 0C 61 STA $610C,X 3D/A45E: BD 0F 61 LDA $610F,X 3D/A461: 9D 0D 61 STA $610D,X 3D/A464: 18 CLC 3D/A465: 60 RTS ; [ healing spell effect ] ; (job level / 32) + (level / 16) + (mod. spirit / 16) 3D/A466: A6 0A LDX $0A 3D/A468: BD 10 61 LDA $6110,X ; job level 3D/A46B: 4A LSR 3D/A46C: 4A LSR 3D/A46D: 4A LSR 3D/A46E: 4A LSR 3D/A46F: 4A LSR 3D/A470: 85 8C STA $8C 3D/A472: BD 01 61 LDA $6101,X ; level 3D/A475: 4A LSR 3D/A476: 4A LSR 3D/A477: 4A LSR 3D/A478: 4A LSR 3D/A479: 18 CLC 3D/A47A: 65 8C ADC $8C 3D/A47C: 85 8C STA $8C 3D/A47E: BD 1B 61 LDA $611B,X ; mod. spirit 3D/A481: 4A LSR 3D/A482: 4A LSR 3D/A483: 4A LSR 3D/A484: 4A LSR 3D/A485: 38 SEC 3D/A486: 65 8C ADC $8C 3D/A488: 85 8C STA $8C ; fallthrough ; [ healing spell/item effect ] ; $8D: base spell power 3D/A48A: 20 B5 A4 JSR $A4B5 ; calculate spell power 3D/A48D: A5 8C LDA $8C 3D/A48F: 85 80 STA $80 3D/A491: 20 D4 A4 JSR $A4D4 ; multiply 3D/A494: A5 8B LDA $8B 3D/A496: 85 80 STA $80 3D/A498: 20 00 A5 JSR $A500 ; divide 3D/A49B: A5 8B LDA $8B 3D/A49D: C9 01 CMP #$01 3D/A49F: D0 03 BNE $A4A4 3D/A4A1: 4C 29 A4 JMP $A429 ; restore hp ; multi-target 3D/A4A4: A9 00 LDA #$00 3D/A4A6: 85 7F STA $7F 3D/A4A8: 20 29 A4 JSR $A429 ; restore hp 3D/A4AB: A5 7F LDA $7F 3D/A4AD: 18 CLC 3D/A4AE: 69 40 ADC #$40 3D/A4B0: 85 7F STA $7F 3D/A4B2: D0 F4 BNE $A4A8 3D/A4B4: 60 RTS ; [ calculate spell power ] ; $8D: base spell power ; +$81: result = spell power * (1..1.5) 3D/A4B5: 20 11 C7 JSR $C711 ; get random number 3D/A4B8: 4A LSR 3D/A4B9: 85 81 STA $81 3D/A4BB: A9 00 LDA #$00 3D/A4BD: 85 82 STA $82 3D/A4BF: A5 8D LDA $8D 3D/A4C1: 85 80 STA $80 3D/A4C3: 20 D4 A4 JSR $A4D4 ; multiply 3D/A4C6: A5 85 LDA $85 3D/A4C8: 18 CLC 3D/A4C9: 65 8D ADC $8D 3D/A4CB: 85 81 STA $81 3D/A4CD: A9 00 LDA #$00 3D/A4CF: 69 00 ADC #$00 3D/A4D1: 85 82 STA $82 3D/A4D3: 60 RTS ; [ multiply ] ; ++$84 = +$81 * $80 3D/A4D4: A9 00 LDA #$00 3D/A4D6: 85 83 STA $83 3D/A4D8: 85 84 STA $84 3D/A4DA: 85 85 STA $85 3D/A4DC: 85 86 STA $86 3D/A4DE: 46 80 LSR $80 3D/A4E0: 90 13 BCC $A4F5 3D/A4E2: A5 84 LDA $84 3D/A4E4: 18 CLC 3D/A4E5: 65 81 ADC $81 3D/A4E7: 85 84 STA $84 3D/A4E9: A5 85 LDA $85 3D/A4EB: 65 82 ADC $82 3D/A4ED: 85 85 STA $85 3D/A4EF: A5 86 LDA $86 3D/A4F1: 65 83 ADC $83 3D/A4F3: 85 86 STA $86 3D/A4F5: 06 81 ASL $81 3D/A4F7: 26 82 ROL $82 3D/A4F9: 26 83 ROL $83 3D/A4FB: A5 80 LDA $80 3D/A4FD: D0 DF BNE $A4DE 3D/A4FF: 60 RTS ; [ divide ] ; ++$81 = ++$84 / $80 3D/A500: A9 00 LDA #$00 3D/A502: 85 81 STA $81 3D/A504: 85 82 STA $82 3D/A506: 85 83 STA $83 3D/A508: A9 00 LDA #$00 3D/A50A: A2 18 LDX #$18 3D/A50C: 06 81 ASL $81 3D/A50E: 26 82 ROL $82 3D/A510: 26 83 ROL $83 3D/A512: 06 84 ASL $84 3D/A514: 26 85 ROL $85 3D/A516: 26 86 ROL $86 3D/A518: 2A ROL 3D/A519: C5 80 CMP $80 3D/A51B: 90 04 BCC $A521 3D/A51D: E5 80 SBC $80 3D/A51F: E6 81 INC $81 3D/A521: CA DEX 3D/A522: D0 E8 BNE $A50C 3D/A524: 60 RTS ; [ show minimap ] 3D/A525: 68 PLA 3D/A526: 68 PLA 3D/A527: 68 PLA 3D/A528: 68 PLA 3D/A529: 20 85 A6 JSR $A685 ; close menu 3D/A52C: 20 63 C0 JSR $C063 ; show minimap ; fallthrough ; [ main menu ] 3D/A52F: A9 00 LDA #$00 3D/A531: 8D F0 78 STA $78F0 3D/A534: A9 00 LDA #$00 3D/A536: 85 25 STA $25 3D/A538: 8D 01 20 STA $2001 3D/A53B: 8D F0 79 STA $79F0 3D/A53E: 8D F0 7A STA $7AF0 3D/A541: 20 06 DD JSR $DD06 ; load menu graphics 3D/A544: 20 BB F7 JSR $F7BB ; init ppu name table (menu) 3D/A547: 20 86 C4 JSR $C486 ; clear oam data 3D/A54A: 20 00 FF JSR $FF00 ; wait for vblank 3D/A54D: A9 02 LDA #$02 3D/A54F: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/A552: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3D/A555: A9 88 LDA #$88 3D/A557: 85 FD STA $FD 3D/A559: 85 FF STA $FF 3D/A55B: 20 9F 95 JSR $959F ; update ppu registers 3D/A55E: A9 FF LDA #$FF ; stop sound effect 3D/A560: 8D 49 7F STA $7F49 3D/A563: A9 3C LDA #$3C ; return bank 3D/A565: 85 57 STA $57 3D/A567: 20 99 95 JSR $9599 ; set hp text color in main menu 3D/A56A: A9 01 LDA #$01 3D/A56C: 85 37 STA $37 3D/A56E: A2 00 LDX #$00 3D/A570: 86 A3 STX $A3 3D/A572: 86 A4 STX $A4 3D/A574: 86 B4 STX $B4 ; hide page arrows 3D/A576: A9 30 LDA #$30 ; $0130: main menu character stats 3D/A578: 20 66 A6 JSR $A666 ; open menu window with text 3D/A57B: A2 01 LDX #$01 3D/A57D: A9 31 LDA #$31 ; $0131: main menu options 3D/A57F: 20 66 A6 JSR $A666 ; open menu window with text 3D/A582: A2 02 LDX #$02 3D/A584: A9 32 LDA #$32 ; $0132: guest npc name 3D/A586: 20 66 A6 JSR $A666 ; open menu window with text 3D/A589: A2 03 LDX #$03 3D/A58B: A9 33 LDA #$33 ; $0133: cp 3D/A58D: 20 66 A6 JSR $A666 ; open menu window with text 3D/A590: A2 04 LDX #$04 3D/A592: A9 34 LDA #$34 ; $0134: gil 3D/A594: 20 66 A6 JSR $A666 ; open menu window with text 3D/A597: A9 01 LDA #$01 ; show cursor 1 3D/A599: 85 A2 STA $A2 3D/A59B: A5 2D LDA $2D 3D/A59D: 4A LSR 3D/A59E: 90 09 BCC $A5A9 ; branch if on world map 3D/A5A0: AD F1 78 LDA $78F1 3D/A5A3: 38 SEC 3D/A5A4: E9 04 SBC #$04 ; remove last cursor position 3D/A5A6: 8D F1 78 STA $78F1 3D/A5A9: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/A5AC: A9 00 LDA #$00 3D/A5AE: 20 00 80 JSR $8000 ; draw characters 3D/A5B1: A9 00 LDA #$00 3D/A5B3: 20 CB 80 JSR $80CB ; draw guest npc 3D/A5B6: A9 04 LDA #$04 3D/A5B8: 20 A3 91 JSR $91A3 ; update cursor 1 position 3D/A5BB: A5 25 LDA $25 3D/A5BD: F0 03 BEQ $A5C2 3D/A5BF: 4C 46 A6 JMP $A646 3D/A5C2: A5 24 LDA $24 3D/A5C4: F0 E3 BEQ $A5A9 3D/A5C6: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A5C9: 20 54 A6 JSR $A654 ; 0: item 3D/A5CC: AD F0 78 LDA $78F0 3D/A5CF: D0 06 BNE $A5D7 3D/A5D1: 20 C2 9E JSR $9EC2 ; item menu 3D/A5D4: 4C 67 A5 JMP $A567 ; 1: magic 3D/A5D7: C9 04 CMP #$04 3D/A5D9: D0 14 BNE $A5EF 3D/A5DB: 20 B4 A6 JSR $A6B4 ; character select 3D/A5DE: B0 C9 BCS $A5A9 3D/A5E0: A6 7F LDX $7F 3D/A5E2: BD 02 61 LDA $6102,X 3D/A5E5: 29 C0 AND #$C0 3D/A5E7: D0 39 BNE $A622 3D/A5E9: 20 61 97 JSR $9761 ; magic menu 3D/A5EC: 4C 67 A5 JMP $A567 ; 2: equip 3D/A5EF: C9 08 CMP #$08 3D/A5F1: D0 0B BNE $A5FE 3D/A5F3: 20 B4 A6 JSR $A6B4 ; character select 3D/A5F6: B0 B1 BCS $A5A9 3D/A5F8: 20 B5 9B JSR $9BB5 ; equip menu 3D/A5FB: 4C 67 A5 JMP $A567 ; 3: status 3D/A5FE: C9 0C CMP #$0C 3D/A600: D0 0B BNE $A60D 3D/A602: 20 B4 A6 JSR $A6B4 ; character select 3D/A605: B0 A2 BCS $A5A9 3D/A607: 20 3B A8 JSR $A83B ; status menu 3D/A60A: 4C 67 A5 JMP $A567 ; 4: row 3D/A60D: C9 10 CMP #$10 3D/A60F: D0 06 BNE $A617 3D/A611: 20 96 A6 JSR $A696 ; row select 3D/A614: 4C A9 A5 JMP $A5A9 ; 5: job 3D/A617: C9 14 CMP #$14 3D/A619: D0 25 BNE $A640 3D/A61B: AD 21 60 LDA $6021 ; crystals obtained 3D/A61E: 29 1F AND #$1F 3D/A620: D0 0A BNE $A62C 3D/A622: 20 29 D5 JSR $D529 ; error sound effect 3D/A625: A9 00 LDA #$00 3D/A627: 85 A3 STA $A3 3D/A629: 4C A9 A5 JMP $A5A9 3D/A62C: 20 B4 A6 JSR $A6B4 ; character select 3D/A62F: B0 F8 BCS $A629 3D/A631: A6 7F LDX $7F 3D/A633: BD 02 61 LDA $6102,X 3D/A636: 29 C0 AND #$C0 3D/A638: D0 E8 BNE $A622 ; branch if stone or dead 3D/A63A: 20 2F 96 JSR $962F ; job menu 3D/A63D: 4C 34 A5 JMP $A534 ; 6: save 3D/A640: 20 97 A8 JSR $A897 ; game save menu 3D/A643: 4C 67 A5 JMP $A567 ; B button pressed 3D/A646: 20 85 A6 JSR $A685 ; close menu 3D/A649: A9 00 LDA #$00 3D/A64B: 8D 01 20 STA $2001 3D/A64E: 20 54 A6 JSR $A654 3D/A651: 4C 58 8F JMP $8F58 ; [ ] 3D/A654: A2 00 LDX #$00 3D/A656: BD 02 61 LDA $6102,X 3D/A659: 29 FE AND #$FE 3D/A65B: 9D 02 61 STA $6102,X 3D/A65E: 8A TXA 3D/A65F: 18 CLC 3D/A660: 69 40 ADC #$40 3D/A662: AA TAX 3D/A663: D0 F1 BNE $A656 3D/A665: 60 RTS ; [ open menu window with text (main menu) ] 3D/A666: 48 PHA 3D/A667: 20 F1 AA JSR $AAF1 ; open menu window 3D/A66A: 68 PLA ; fallthrough ; [ load menu text (multi-page) ] 3D/A66B: 85 92 STA $92 ; text id 3D/A66D: A9 82 LDA #$82 3D/A66F: 85 95 STA $95 3D/A671: A9 00 LDA #$00 3D/A673: 85 94 STA $94 3D/A675: 4C 65 EE JMP $EE65 ; load text (multi-page) ; [ load menu text (single-page) ] 3D/A678: 85 92 STA $92 ; text id 3D/A67A: A9 82 LDA #$82 3D/A67C: 85 95 STA $95 3D/A67E: A9 00 LDA #$00 3D/A680: 85 94 STA $94 3D/A682: 4C 9A EE JMP $EE9A ; load text (single-page) ; [ close menu ] 3D/A685: 20 86 C4 JSR $C486 ; clear oam data 3D/A688: 20 00 FF JSR $FF00 ; wait for vblank 3D/A68B: A9 02 LDA #$02 3D/A68D: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/A690: 20 9F 95 JSR $959F ; update ppu registers 3D/A693: 4C 65 F4 JMP $F465 ; [ row select ] 3D/A696: A9 00 LDA #$00 3D/A698: 20 B4 A6 JSR $A6B4 ; character select 3D/A69B: B0 16 BCS $A6B3 3D/A69D: A6 7F LDX $7F 3D/A69F: BD 02 61 LDA $6102,X 3D/A6A2: 29 C0 AND #$C0 3D/A6A4: D0 08 BNE $A6AE ; branch if stone or dead 3D/A6A6: BD 0F 62 LDA $620F,X 3D/A6A9: 49 01 EOR #$01 ; toggle battle row 3D/A6AB: 9D 0F 62 STA $620F,X 3D/A6AE: 20 CD A6 JSR $A6CD ; character select again 3D/A6B1: 90 EA BCC $A69D 3D/A6B3: 60 RTS ; [ character select (main menu) ] ; set carry if canceled 3D/A6B4: A9 00 LDA #$00 3D/A6B6: 8D F0 79 STA $79F0 3D/A6B9: A2 0F LDX #$0F 3D/A6BB: BD 05 A7 LDA $A705,X 3D/A6BE: 9D 00 79 STA $7900,X 3D/A6C1: CA DEX 3D/A6C2: 10 F7 BPL $A6BB 3D/A6C4: A9 10 LDA #$10 3D/A6C6: 8D F1 79 STA $79F1 3D/A6C9: A9 01 LDA #$01 3D/A6CB: 85 A3 STA $A3 3D/A6CD: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/A6D0: A9 00 LDA #$00 3D/A6D2: 20 00 80 JSR $8000 ; draw characters 3D/A6D5: A9 00 LDA #$00 3D/A6D7: 20 CB 80 JSR $80CB ; draw guest npc 3D/A6DA: A9 04 LDA #$04 3D/A6DC: 20 D9 91 JSR $91D9 ; update cursor 2 position 3D/A6DF: A5 25 LDA $25 3D/A6E1: D0 19 BNE $A6FC ; branch if B button pressed 3D/A6E3: A5 24 LDA $24 3D/A6E5: F0 E6 BEQ $A6CD 3D/A6E7: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A6EA: AD F0 79 LDA $79F0 3D/A6ED: 4A LSR 3D/A6EE: 4A LSR 3D/A6EF: 09 10 ORA #$10 3D/A6F1: 85 9E STA $9E 3D/A6F3: 4A LSR 3D/A6F4: 6A ROR 3D/A6F5: 6A ROR 3D/A6F6: 29 C0 AND #$C0 3D/A6F8: 85 7F STA $7F 3D/A6FA: 18 CLC 3D/A6FB: 60 RTS 3D/A6FC: A9 00 LDA #$00 3D/A6FE: 85 A3 STA $A3 3D/A700: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A703: 38 SEC 3D/A704: 60 RTS ; cursor positions for character select (main menu) 3D/A705: 01 05 00 00 3D/A709: 01 0B 00 00 3D/A70D: 01 11 00 00 3D/A711: 01 17 00 00 ; [ select character ] 3D/A715: A9 00 LDA #$00 3D/A717: 8D F0 79 STA $79F0 3D/A71A: A2 0F LDX #$0F 3D/A71C: BD 4F A7 LDA $A74F,X 3D/A71F: 9D 00 79 STA $7900,X 3D/A722: CA DEX 3D/A723: 10 F7 BPL $A71C 3D/A725: A9 10 LDA #$10 3D/A727: 8D F1 79 STA $79F1 3D/A72A: A9 01 LDA #$01 3D/A72C: 85 A3 STA $A3 3D/A72E: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/A731: A9 03 LDA #$03 3D/A733: 20 00 80 JSR $8000 ; draw characters 3D/A736: A9 08 LDA #$08 3D/A738: 20 D9 91 JSR $91D9 ; update cursor 2 position 3D/A73B: A5 25 LDA $25 3D/A73D: D0 07 BNE $A746 ; branch if B button pressed 3D/A73F: A5 24 LDA $24 3D/A741: F0 EB BEQ $A72E ; branch if A button not pressed 3D/A743: 4C E7 A6 JMP $A6E7 3D/A746: A9 00 LDA #$00 3D/A748: 85 A3 STA $A3 3D/A74A: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A74D: 38 SEC 3D/A74E: 60 RTS ; cursor positions for character select 3D/A74F: 01 17 00 00 3D/A753: 0F 17 00 00 3D/A757: 01 1A 00 00 3D/A75B: 0F 1A 00 00 ; [ ] 3D/A75F: A9 00 LDA #$00 3D/A761: 8D F0 79 STA $79F0 3D/A764: A2 0F LDX #$0F 3D/A766: BD 4F A7 LDA $A74F,X 3D/A769: 9D 00 79 STA $7900,X 3D/A76C: CA DEX 3D/A76D: 10 F7 BPL $A766 3D/A76F: A9 14 LDA #$14 3D/A771: 8D F1 79 STA $79F1 3D/A774: A9 01 LDA #$01 3D/A776: 85 A3 STA $A3 3D/A778: 20 99 A7 JSR $A799 3D/A77B: A9 03 LDA #$03 3D/A77D: 20 00 80 JSR $8000 ; draw characters 3D/A780: A9 08 LDA #$08 3D/A782: 20 D9 91 JSR $91D9 ; update cursor 2 position 3D/A785: A5 25 LDA $25 3D/A787: D0 07 BNE $A790 3D/A789: A5 24 LDA $24 3D/A78B: F0 EB BEQ $A778 3D/A78D: 4C E7 A6 JMP $A6E7 3D/A790: A9 00 LDA #$00 3D/A792: 85 A3 STA $A3 3D/A794: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A797: 38 SEC 3D/A798: 60 RTS ; [ ] 3D/A799: AD F0 79 LDA $79F0 3D/A79C: 18 CLC 3D/A79D: 69 04 ADC #$04 3D/A79F: CD F1 79 CMP $79F1 3D/A7A2: D0 29 BNE $A7CD ; wait for vblank (update cursors) 3D/A7A4: 20 00 FF JSR $FF00 ; wait for vblank 3D/A7A7: A9 02 LDA #$02 3D/A7A9: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/A7AC: 20 58 C7 JSR $C758 ; update sound 3D/A7AF: 20 86 C4 JSR $C486 ; clear oam data 3D/A7B2: 20 19 91 JSR $9119 ; draw cursor sprite 1 3D/A7B5: E6 F0 INC $F0 3D/A7B7: A5 F0 LDA $F0 3D/A7B9: 29 03 AND #$03 3D/A7BB: 0A ASL 3D/A7BC: 0A ASL 3D/A7BD: 8D F0 79 STA $79F0 3D/A7C0: 20 2A 91 JSR $912A ; draw cursor sprite 2 3D/A7C3: AD F1 79 LDA $79F1 3D/A7C6: 38 SEC 3D/A7C7: E9 04 SBC #$04 3D/A7C9: 8D F0 79 STA $79F0 3D/A7CC: 60 RTS ; [ wait for vblank (update cursors) ] 3D/A7CD: 20 00 FF JSR $FF00 ; wait for vblank 3D/A7D0: A9 02 LDA #$02 3D/A7D2: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/A7D5: E6 F0 INC $F0 ; increment frame counter 3D/A7D7: 20 58 C7 JSR $C758 ; update sound 3D/A7DA: 20 86 C4 JSR $C486 ; clear oam data 3D/A7DD: 20 19 91 JSR $9119 ; draw cursor sprite 1 3D/A7E0: 20 2A 91 JSR $912A ; draw cursor sprite 2 3D/A7E3: 20 4C 91 JSR $914C ; draw cursor sprite 3 ; fallthrough ; [ draw page up/down sprites ] 3D/A7E6: A6 26 LDX $26 3D/A7E8: 24 B4 BIT $B4 3D/A7EA: 50 24 BVC $A810 ; branch if no page up arrow 3D/A7EC: A5 B5 LDA $B5 3D/A7EE: 0A ASL 3D/A7EF: 0A ASL 3D/A7F0: 0A ASL 3D/A7F1: 9D 00 02 STA $0200,X ; y position 3D/A7F4: A9 E8 LDA #$E8 ; page arrow sprite 3D/A7F6: 9D 01 02 STA $0201,X 3D/A7F9: A9 83 LDA #$83 ; v-flip, use palette 3 3D/A7FB: A4 37 LDY $37 3D/A7FD: D0 02 BNE $A801 ; branch if in menu 3D/A7FF: A9 80 LDA #$80 ; v-flip, use palette 0 3D/A801: 9D 02 02 STA $0202,X 3D/A804: A5 B6 LDA $B6 3D/A806: 0A ASL 3D/A807: 0A ASL 3D/A808: 0A ASL 3D/A809: 9D 03 02 STA $0203,X ; x position 3D/A80C: E8 INX 3D/A80D: E8 INX 3D/A80E: E8 INX 3D/A80F: E8 INX 3D/A810: 24 B4 BIT $B4 3D/A812: 10 24 BPL $A838 ; branch if no page down arrow 3D/A814: A5 B7 LDA $B7 3D/A816: 0A ASL 3D/A817: 0A ASL 3D/A818: 0A ASL 3D/A819: 9D 00 02 STA $0200,X 3D/A81C: A9 E8 LDA #$E8 3D/A81E: 9D 01 02 STA $0201,X 3D/A821: A9 03 LDA #$03 3D/A823: A4 37 LDY $37 3D/A825: D0 02 BNE $A829 ; branch if in menu 3D/A827: A9 00 LDA #$00 3D/A829: 9D 02 02 STA $0202,X 3D/A82C: A5 B8 LDA $B8 3D/A82E: 0A ASL 3D/A82F: 0A ASL 3D/A830: 0A ASL 3D/A831: 9D 03 02 STA $0203,X 3D/A834: E8 INX 3D/A835: E8 INX 3D/A836: E8 INX 3D/A837: E8 INX 3D/A838: 86 26 STX $26 3D/A83A: 60 RTS ; -------------------------------------------------------------------------- ; [ status menu ] 3D/A83B: 20 92 95 JSR $9592 ; reset A/B button 3D/A83E: 20 85 A6 JSR $A685 ; close menu 3D/A841: 20 6F 95 JSR $956F ; reset attribute table 3D/A844: A9 00 LDA #$00 ; hide cursor 1 and 2 3D/A846: 85 A2 STA $A2 3D/A848: 85 A3 STA $A3 3D/A84A: 20 64 A8 JSR $A864 ; draw status window 3D/A84D: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/A850: A6 7F LDX $7F 3D/A852: 20 29 81 JSR $8129 ; draw character sprite 3D/A855: 20 19 D2 JSR $D219 ; update joypad input 3D/A858: A5 24 LDA $24 3D/A85A: 05 25 ORA $25 3D/A85C: F0 EF BEQ $A84D ; branch if A or B button is not pressed 3D/A85E: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A861: 4C 85 A6 JMP $A685 ; close menu ; [ draw status window ] 3D/A864: A2 1D LDX #$1D ; status main window 3D/A866: A9 47 LDA #$47 ; $0147: status text 3D/A868: 20 75 A8 JSR $A875 ; show character message 3D/A86B: A2 1C LDX #$1C ; status submenu label window 3D/A86D: 20 F1 AA JSR $AAF1 ; open menu window 3D/A870: A9 37 LDA #$37 ; $0137: "Status" 3D/A872: 4C 6B A6 JMP $A66B ; load menu text ; [ show character message ] ; A: text string id (offset $0100) ; X: menu window id 3D/A875: 48 PHA 3D/A876: 20 F1 AA JSR $AAF1 ; open menu window 3D/A879: 68 PLA 3D/A87A: 20 B1 D1 JSR $D1B1 ; load character text string 3D/A87D: A9 18 LDA #$18 3D/A87F: 85 93 STA $93 3D/A881: A9 01 LDA #$01 ; $7B01 (text buffer) 3D/A883: 85 3E STA $3E 3D/A885: A9 7B LDA #$7B 3D/A887: 85 3F STA $3F 3D/A889: 4C 61 EB JMP $EB61 ; load next line of text ; -------------------------------------------------------------------------- ; [ game save menu ] ; starts at 3D/A897 ; close save menu 3D/A88C: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A88F: A9 18 LDA #$18 3D/A891: 8D F0 78 STA $78F0 3D/A894: 4C 85 A6 JMP $A685 ; close menu ; subroutine starts here 3D/A897: AD 38 7F LDA $7F38 ; check if save count is valid 3D/A89A: C9 55 CMP #$55 3D/A89C: D0 07 BNE $A8A5 3D/A89E: AD 39 7F LDA $7F39 3D/A8A1: C9 AA CMP #$AA 3D/A8A3: F0 0F BEQ $A8B4 3D/A8A5: A9 55 LDA #$55 ; validate save count 3D/A8A7: 8D 38 7F STA $7F38 3D/A8AA: A9 AA LDA #$AA 3D/A8AC: 8D 39 7F STA $7F39 3D/A8AF: A9 01 LDA #$01 ; set save count to 1 3D/A8B1: 8D 3A 7F STA $7F3A 3D/A8B4: AD 3A 7F LDA $7F3A 3D/A8B7: 8D 14 60 STA $6014 3D/A8BA: 20 5C AE JSR $AE5C ; update sram checksum 3D/A8BD: 20 92 95 JSR $9592 ; reset A/B button 3D/A8C0: 20 85 A6 JSR $A685 ; close menu 3D/A8C3: 20 6F 95 JSR $956F ; reset attribute table 3D/A8C6: A9 00 LDA #$00 3D/A8C8: 8D 01 20 STA $2001 3D/A8CB: 20 06 DD JSR $DD06 ; load menu graphics 3D/A8CE: 20 00 FF JSR $FF00 ; wait for vblank 3D/A8D1: A9 02 LDA #$02 3D/A8D3: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/A8D6: 20 9F 95 JSR $959F ; update ppu registers 3D/A8D9: A9 00 LDA #$00 ; hide cursor 1 and 3 3D/A8DB: 85 A2 STA $A2 3D/A8DD: 85 A4 STA $A4 3D/A8DF: A9 01 LDA #$01 3D/A8E1: 85 A3 STA $A3 3D/A8E3: A9 00 LDA #$00 3D/A8E5: 8D F0 79 STA $79F0 3D/A8E8: 20 84 A9 JSR $A984 3D/A8EB: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/A8EE: AD F0 79 LDA $79F0 3D/A8F1: 4A LSR 3D/A8F2: 4A LSR 3D/A8F3: 29 03 AND #$03 3D/A8F5: 20 41 82 JSR $8241 ; draw character sprites 3D/A8F8: A9 04 LDA #$04 3D/A8FA: 20 D9 91 JSR $91D9 ; update cursor 2 position 3D/A8FD: A5 25 LDA $25 3D/A8FF: D0 8B BNE $A88C ; branch if B button is pressed 3D/A901: A5 24 LDA $24 3D/A903: F0 E6 BEQ $A8EB ; branch if A button is not pressed 3D/A905: 20 74 8F JSR $8F74 ; cursor sound effect 3D/A908: A9 4C LDA #$4C ; "Replace data?\choice[0x0F]Yes\choice[0x13]No" 3D/A90A: 20 96 A9 JSR $A996 ; show save menu message 3D/A90D: A9 01 LDA #$01 ; show cursor 1 3D/A90F: 85 A2 STA $A2 3D/A911: A9 00 LDA #$00 3D/A913: 8D F0 78 STA $78F0 3D/A916: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/A919: AD F0 79 LDA $79F0 3D/A91C: 4A LSR 3D/A91D: 4A LSR 3D/A91E: 29 03 AND #$03 3D/A920: 20 41 82 JSR $8241 ; draw character sprites 3D/A923: A9 04 LDA #$04 3D/A925: 20 A3 91 JSR $91A3 ; update cursor 1 position 3D/A928: A5 25 LDA $25 3D/A92A: D0 09 BNE $A935 ; branch if B button is pressed 3D/A92C: A5 24 LDA $24 3D/A92E: F0 E6 BEQ $A916 ; branch if A button is not pressed 3D/A930: AD F0 78 LDA $78F0 3D/A933: F0 03 BEQ $A938 3D/A935: 4C 8C A8 JMP $A88C 3D/A938: A9 4D LDA #$4D ; "Save complete!" 3D/A93A: 20 96 A9 JSR $A996 ; show save menu message 3D/A93D: AD 3A 7F LDA $7F3A ; increment save count 3D/A940: 18 CLC 3D/A941: 69 01 ADC #$01 3D/A943: C9 64 CMP #$64 ; max 99 3D/A945: 90 02 BCC $A949 3D/A947: A9 01 LDA #$01 ; reset back to 1 3D/A949: 8D 3A 7F STA $7F3A 3D/A94C: AD F0 79 LDA $79F0 3D/A94F: 29 0C AND #$0C 3D/A951: 18 CLC 3D/A952: 69 64 ADC #$64 3D/A954: 85 83 STA $83 3D/A956: A9 00 LDA #$00 3D/A958: 85 80 STA $80 3D/A95A: 85 82 STA $82 3D/A95C: A9 60 LDA #$60 3D/A95E: 85 81 STA $81 3D/A960: A0 00 LDY #$00 3D/A962: B1 80 LDA ($80),Y 3D/A964: 91 82 STA ($82),Y 3D/A966: C8 INY 3D/A967: D0 F9 BNE $A962 3D/A969: E6 81 INC $81 3D/A96B: E6 83 INC $83 3D/A96D: A5 81 LDA $81 3D/A96F: 29 03 AND #$03 3D/A971: D0 EF BNE $A962 3D/A973: 20 67 AA JSR $AA67 3D/A976: 20 4B AA JSR $AA4B 3D/A979: A9 4E LDA #$4E ; "Play again soon!" 3D/A97B: 20 96 A9 JSR $A996 ; show save menu message 3D/A97E: 20 4B AA JSR $AA4B 3D/A981: 4C 8C A8 JMP $A88C ; [ ] 3D/A984: A2 0F LDX #$0F 3D/A986: 20 F1 AA JSR $AAF1 ; open menu window 3D/A989: A9 38 LDA #$38 ; $0138: "Save" 3D/A98B: 20 6B A6 JSR $A66B ; load menu text 3D/A98E: 20 A0 A9 JSR $A9A0 ; init save slot windows 3D/A991: A9 4B LDA #$4B ; $014B: "Save which file?" 3D/A993: 4C 96 A9 JMP $A996 ; show save menu message ; [ show save menu message ] 3D/A996: 48 PHA 3D/A997: A2 10 LDX #$10 3D/A999: 20 F1 AA JSR $AAF1 ; open menu window 3D/A99C: 68 PLA 3D/A99D: 4C 78 A6 JMP $A678 ; load menu text ; [ init save slot windows ] ; $62: -----123 valid save slots 3D/A9A0: 18 CLC 3D/A9A1: 20 18 AA JSR $AA18 3D/A9A4: A9 00 LDA #$00 3D/A9A6: 85 62 STA $62 ; set bits in $62 for valid save slots 3D/A9A8: A2 11 LDX #$11 3D/A9AA: 20 F1 AA JSR $AAF1 ; open menu window 3D/A9AD: A9 64 LDA #$64 ; save slot 1 3D/A9AF: 20 E1 A9 JSR $A9E1 ; draw save slot text 3D/A9B2: 26 62 ROL $62 3D/A9B4: A2 12 LDX #$12 3D/A9B6: 20 F1 AA JSR $AAF1 ; open menu window 3D/A9B9: A9 68 LDA #$68 ; save slot 2 3D/A9BB: 20 E1 A9 JSR $A9E1 ; draw save slot text 3D/A9BE: 26 62 ROL $62 3D/A9C0: A2 13 LDX #$13 3D/A9C2: 20 F1 AA JSR $AAF1 ; open menu window 3D/A9C5: A9 6C LDA #$6C ; save slot 3 3D/A9C7: 20 E1 A9 JSR $A9E1 ; draw save slot text 3D/A9CA: 26 62 ROL $62 3D/A9CC: 38 SEC 3D/A9CD: 20 18 AA JSR $AA18 3D/A9D0: A2 0F LDX #$0F 3D/A9D2: BD 3B AA LDA $AA3B,X ; copy cursor data 3D/A9D5: 9D 00 79 STA $7900,X 3D/A9D8: CA DEX 3D/A9D9: 10 F7 BPL $A9D2 3D/A9DB: A9 0C LDA #$0C ; start at the last cursor position 3D/A9DD: 8D F1 79 STA $79F1 3D/A9E0: 60 RTS ; [ draw save slot text ] ; set carry if save slot is valid 3D/A9E1: 48 PHA 3D/A9E2: 4A LSR 3D/A9E3: 4A LSR 3D/A9E4: 29 03 AND #$03 3D/A9E6: 20 97 AE JSR $AE97 ; check if save slot is valid 3D/A9E9: 90 03 BCC $A9EE ; branch if valid 3D/A9EB: 68 PLA 3D/A9EC: 18 CLC 3D/A9ED: 60 RTS 3D/A9EE: 68 PLA 3D/A9EF: 20 F9 A9 JSR $A9F9 ; load save slot 3D/A9F2: A9 25 LDA #$25 3D/A9F4: 20 6B A6 JSR $A66B ; load menu text 3D/A9F7: 38 SEC 3D/A9F8: 60 RTS ; [ load save slot ] 3D/A9F9: 85 83 STA $83 3D/A9FB: A9 00 LDA #$00 3D/A9FD: A8 TAY 3D/A9FE: 85 80 STA $80 3D/AA00: 85 82 STA $82 3D/AA02: A9 60 LDA #$60 3D/AA04: 85 81 STA $81 3D/AA06: B1 82 LDA ($82),Y ; copy 1024 bytes to $6000 3D/AA08: 91 80 STA ($80),Y 3D/AA0A: C8 INY 3D/AA0B: D0 F9 BNE $AA06 3D/AA0D: E6 83 INC $83 3D/AA0F: E6 81 INC $81 3D/AA11: A5 81 LDA $81 3D/AA13: 29 03 AND #$03 3D/AA15: D0 EF BNE $AA06 3D/AA17: 60 RTS ; [ ] 3D/AA18: A9 00 LDA #$00 3D/AA1A: A8 TAY 3D/AA1B: 85 80 STA $80 3D/AA1D: 85 82 STA $82 3D/AA1F: A9 60 LDA #$60 3D/AA21: 85 81 STA $81 3D/AA23: A9 74 LDA #$74 3D/AA25: 85 83 STA $83 3D/AA27: B0 DD BCS $AA06 3D/AA29: B1 80 LDA ($80),Y 3D/AA2B: 91 82 STA ($82),Y 3D/AA2D: C8 INY 3D/AA2E: D0 F9 BNE $AA29 3D/AA30: E6 81 INC $81 3D/AA32: E6 83 INC $83 3D/AA34: A5 81 LDA $81 3D/AA36: 29 03 AND #$03 3D/AA38: D0 EF BNE $AA29 3D/AA3A: 60 RTS ; cursor data for load menu 3D/AA3B: 01 07 00 00 3D/AA3F: 01 0F 00 00 3D/AA43: 01 17 00 00 3D/AA47: 01 02 00 00 ; [ ] 3D/AA4B: 20 60 AA JSR $AA60 3D/AA4E: 20 81 D2 JSR $D281 ; read joypad registers 3D/AA51: A5 20 LDA $20 3D/AA53: D0 F6 BNE $AA4B 3D/AA55: 20 60 AA JSR $AA60 3D/AA58: 20 81 D2 JSR $D281 ; read joypad registers 3D/AA5B: A5 20 LDA $20 3D/AA5D: F0 F6 BEQ $AA55 3D/AA5F: 60 RTS 3D/AA60: 20 00 FF JSR $FF00 ; wait for vblank 3D/AA63: 20 58 C7 JSR $C758 ; update sound 3D/AA66: 60 RTS ; [ ] 3D/AA67: A9 00 LDA #$00 ; hide cursor 1 and 2 3D/AA69: 85 A3 STA $A3 3D/AA6B: 85 A2 STA $A2 3D/AA6D: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/AA70: AD F0 79 LDA $79F0 3D/AA73: 4A LSR 3D/AA74: 4A LSR 3D/AA75: 29 03 AND #$03 ; save slot 3D/AA77: 48 PHA 3D/AA78: 18 CLC 3D/AA79: 69 11 ADC #$11 3D/AA7B: AA TAX 3D/AA7C: 20 F1 AA JSR $AAF1 ; open menu window 3D/AA7F: A9 25 LDA #$25 ; character stats for save/load menu 3D/AA81: 20 6B A6 JSR $A66B ; load menu text 3D/AA84: 68 PLA 3D/AA85: 18 CLC 3D/AA86: 69 01 ADC #$01 3D/AA88: 20 00 80 JSR $8000 ; draw characters 3D/AA8B: 4C CD A7 JMP $A7CD ; wait for vblank (update cursors) ; -------------------------------------------------------------------------- ; [ redraw item menu ] 3D/AA8E: 20 4B F4 JSR $F44B ; close menu 1 3D/AA91: A2 06 LDX #$06 ; item/magic list 3D/AA93: 20 A0 AA JSR $AAA0 3D/AA96: A2 05 LDX #$05 ; submenu label (item/magic) 3D/AA98: 20 F1 AA JSR $AAF1 ; open menu window 3D/AA9B: A9 35 LDA #$35 ; "Item" 3D/AA9D: 4C 78 A6 JMP $A678 ; load menu text ; [ redraw item menu list ] 3D/AAA0: 20 BC AA JSR $AABC ; load menu window position 3D/AAA3: 4C E5 EC JMP $ECE5 ; redraw window ; [ ] 3D/AAA6: 20 BC AA JSR $AABC ; load menu window position 3D/AAA9: E6 38 INC $38 3D/AAAB: E6 39 INC $39 3D/AAAD: A5 3C LDA $3C 3D/AAAF: 38 SEC 3D/AAB0: E9 02 SBC #$02 3D/AAB2: 85 3C STA $3C 3D/AAB4: A5 3D LDA $3D 3D/AAB6: 38 SEC 3D/AAB7: E9 02 SBC #$02 3D/AAB9: 85 3D STA $3D 3D/AABB: 60 RTS ; [ load menu window position ] 3D/AABC: BD F7 AA LDA $AAF7,X ; x position 3D/AABF: 85 B6 STA $B6 3D/AAC1: 85 38 STA $38 3D/AAC3: 38 SEC 3D/AAC4: E9 01 SBC #$01 3D/AAC6: 85 97 STA $97 3D/AAC8: BD 1D AB LDA $AB1D,X ; y position 3D/AACB: 85 39 STA $39 3D/AACD: 18 CLC 3D/AACE: 69 02 ADC #$02 3D/AAD0: 85 B5 STA $B5 3D/AAD2: C6 B5 DEC $B5 3D/AAD4: 85 98 STA $98 3D/AAD6: BD 43 AB LDA $AB43,X ; width 3D/AAD9: 85 3C STA $3C 3D/AADB: 18 CLC 3D/AADC: 65 B6 ADC $B6 3D/AADE: 38 SEC 3D/AADF: E9 01 SBC #$01 3D/AAE1: 85 B8 STA $B8 3D/AAE3: BD 69 AB LDA $AB69,X ; height 3D/AAE6: 85 3D STA $3D 3D/AAE8: 18 CLC 3D/AAE9: 65 B5 ADC $B5 3D/AAEB: 38 SEC 3D/AAEC: E9 03 SBC #$03 3D/AAEE: 85 B7 STA $B7 3D/AAF0: 60 RTS ; [ open menu window ] ; X: menu window id ; $00: ( 1, 1) 22x27 main menu - main window ; $01: (23, 1) 8x17 main menu - command list ; $02: (23,18) 8x 9 main menu - guest npc ; $03: ( 9,26) 8x 3 main menu - cp ; $04: (17,26) 12x 3 main menu - gil ; $05: ( 1, 1) 8x 4 item menu - submenu label ; $06: ( 1, 4) 30x18 item/magic menu - item/magic list ; $07: ( 1,21) 30x 8 item/magic menu - character window ; $08: ( 9, 1) 10x 4 ; $09: (24, 1) 7x 4 ; $0A: ( 1, 1) 30x11 equip menu - current equipment ; $0B: ( 1,11) 30x18 equip menu - item list ; $0C: ( 1, 1) 18x 4 job menu - name/current job (also "New Game") ; $0D: (25, 1) 6x 4 job menu - cp ; $0E: ( 1, 5) 30x24 job list ; $0F: ( 1, 1) 7x 4 submenu label (save) ; $10: ( 8, 1) 22x 4 save menu - message ; $11: ( 1, 5) 30x 8 save menu - save slot 1 ; $12: ( 1,13) 30x 8 save menu - save slot 2 ; $13: ( 1,21) 30x 8 save menu - save slot 3 ; $14: ( 2, 2) 8x 4 shop menu - shop type ; $15: ( 9, 2) 21x 4 shop/item menu - message ; $16: ( 2, 6) 14x 4 shop menu - options ; $17: (16, 6) 14x 4 shop menu - gil ; $18: ( 2,10) 22x18 shop menu - item list ; $19: ( 1,10) 30x18 sell/fat chocobo menu - item list ; $1A: ( 7, 1) 24x 4 fat chocobo menu - message ; $1B: ( 1, 6) 18x 4 fat chocobo menu - options ; $1C: ( 1, 1) 9x 4 status menu - submenu label ; $1D: ( 1, 1) 30x28 status menu - status main window ; $1E: ( 1, 8) 19x 4 item menu - "Removed" ; $1F: ( 1,18) 18x 4 ; $20: ( 2, 8) 28x 6 job menu - message ; $21: (16, 1) 15x 4 load menu - msg. speed ; $22: ( 7, 3) 18x 6 name change menu - name ; $23: ( 4,11) 24x14 name change menu - alphabet ; $24: ( 1, 1) 30x 4 magic menu - options ; $25: ( 1, 1) 30x28 status menu - main window 3D/AAF1: 20 BC AA JSR $AABC ; load menu window position 3D/AAF4: 4C 02 ED JMP $ED02 ; open window ; menu window x positions 3D/AAF7: 01 17 17 09 11 01 01 01 09 18 01 01 01 19 01 01 3D/AB07: 08 01 01 01 02 09 02 10 02 01 07 01 01 01 01 01 3D/AB17: 02 10 07 04 01 01 ; menu window y positions 3D/AB1D: 01 01 12 1A 1A 01 04 15 01 01 01 0B 01 01 05 01 3D/AB2D: 01 05 0D 15 02 02 06 06 0A 0A 01 06 01 01 08 12 3D/AB3D: 08 01 03 0B 01 01 ; menu window widths 3D/AB43: 16 08 08 08 0C 08 1E 1E 0A 07 1E 1E 12 06 1E 07 3D/AB53: 17 1E 1E 1E 08 15 0E 0E 16 1E 18 12 09 1E 13 12 3D/AB63: 1C 0F 12 18 1E 1E ; menu window heights 3D/AB69: 1B 11 09 03 03 04 12 08 04 04 0B 12 04 04 18 04 3D/AB79: 04 08 08 08 04 04 04 04 12 12 04 04 04 1C 04 04 3D/AB89: 06 04 06 0E 04 1C ; -------------------------------------------------------------------------- ; [ change job ] 3D/AB8F: 20 F2 AD JSR $ADF2 ; load new job stats 3D/AB92: A6 8F LDX $8F 3D/AB94: AD 1B 60 LDA $601B ; subtract cp 3D/AB97: 38 SEC 3D/AB98: FD 00 72 SBC $7200,X 3D/AB9B: 8D 1B 60 STA $601B 3D/AB9E: A6 7F LDX $7F 3D/ABA0: BD 00 61 LDA $6100,X ; old job id 3D/ABA3: 0A ASL 3D/ABA4: 05 7F ORA $7F 3D/ABA6: A8 TAY 3D/ABA7: BD 10 61 LDA $6110,X ; save old job level 3D/ABAA: 99 10 62 STA $6210,Y 3D/ABAD: BD 11 61 LDA $6111,X ; save old job exp 3D/ABB0: 99 11 62 STA $6211,Y 3D/ABB3: A5 8F LDA $8F 3D/ABB5: 9D 00 61 STA $6100,X ; set new job 3D/ABB8: A5 8F LDA $8F 3D/ABBA: 0A ASL 3D/ABBB: 05 7F ORA $7F 3D/ABBD: A8 TAY 3D/ABBE: B9 10 62 LDA $6210,Y ; load new job level 3D/ABC1: 9D 10 61 STA $6110,X 3D/ABC4: B9 11 62 LDA $6211,Y ; load new job exp 3D/ABC7: 9D 11 61 STA $6111,X 3D/ABCA: AD 02 7C LDA $7C02 ; job stats 3D/ABCD: 9D 12 61 STA $6112,X 3D/ABD0: AD 03 7C LDA $7C03 3D/ABD3: 9D 13 61 STA $6113,X 3D/ABD6: AD 04 7C LDA $7C04 3D/ABD9: 9D 14 61 STA $6114,X 3D/ABDC: AD 05 7C LDA $7C05 3D/ABDF: 9D 15 61 STA $6115,X 3D/ABE2: AD 06 7C LDA $7C06 3D/ABE5: 9D 16 61 STA $6116,X 3D/ABE8: BD 02 61 LDA $6102,X 3D/ABEB: 09 01 ORA #$01 3D/ABED: 9D 02 61 STA $6102,X 3D/ABF0: AD 07 7C LDA $7C07 ; mp progression 3D/ABF3: 0A ASL 3D/ABF4: 0A ASL 3D/ABF5: 0A ASL 3D/ABF6: A8 TAY 3D/ABF7: B9 88 9B LDA $9B88,Y ; 39/BB88 (character initial mp) 3D/ABFA: 9D 31 61 STA $6131,X 3D/ABFD: B9 89 9B LDA $9B89,Y 3D/AC00: 9D 33 61 STA $6133,X 3D/AC03: B9 8A 9B LDA $9B8A,Y 3D/AC06: 9D 35 61 STA $6135,X 3D/AC09: B9 8B 9B LDA $9B8B,Y 3D/AC0C: 9D 37 61 STA $6137,X 3D/AC0F: B9 8C 9B LDA $9B8C,Y 3D/AC12: 9D 39 61 STA $6139,X 3D/AC15: B9 8D 9B LDA $9B8D,Y 3D/AC18: 9D 3B 61 STA $613B,X 3D/AC1B: B9 8E 9B LDA $9B8E,Y 3D/AC1E: 9D 3D 61 STA $613D,X 3D/AC21: B9 8F 9B LDA $9B8F,Y 3D/AC24: 9D 3F 61 STA $613F,X 3D/AC27: BD 01 61 LDA $6101,X ; level 3D/AC2A: 85 87 STA $87 3D/AC2C: D0 03 BNE $AC31 ; branch if not level 1 3D/AC2E: 4C 1E AD JMP $AD1E 3D/AC31: BD 00 61 LDA $6100,X 3D/AC34: 0A ASL 3D/AC35: A8 TAY 3D/AC36: B9 59 AD LDA $AD59,Y ; pointers to level progression 3D/AC39: 85 80 STA $80 3D/AC3B: B9 5A AD LDA $AD5A,Y 3D/AC3E: 85 81 STA $81 3D/AC40: A5 87 LDA $87 3D/AC42: 38 SEC 3D/AC43: E9 01 SBC #$01 3D/AC45: 0A ASL 3D/AC46: A8 TAY 3D/AC47: B1 80 LDA ($80),Y 3D/AC49: 85 82 STA $82 3D/AC4B: 29 07 AND #$07 3D/AC4D: 85 84 STA $84 3D/AC4F: C8 INY 3D/AC50: B1 80 LDA ($80),Y 3D/AC52: 85 83 STA $83 3D/AC54: A5 82 LDA $82 3D/AC56: 29 80 AND #$80 3D/AC58: F0 09 BEQ $AC63 3D/AC5A: BD 12 61 LDA $6112,X ; strength 3D/AC5D: 20 45 AD JSR $AD45 3D/AC60: 9D 12 61 STA $6112,X 3D/AC63: A5 82 LDA $82 3D/AC65: 29 40 AND #$40 3D/AC67: F0 09 BEQ $AC72 3D/AC69: BD 13 61 LDA $6113,X 3D/AC6C: 20 45 AD JSR $AD45 3D/AC6F: 9D 13 61 STA $6113,X 3D/AC72: A5 82 LDA $82 3D/AC74: 29 20 AND #$20 3D/AC76: F0 09 BEQ $AC81 3D/AC78: BD 14 61 LDA $6114,X 3D/AC7B: 20 45 AD JSR $AD45 3D/AC7E: 9D 14 61 STA $6114,X 3D/AC81: A5 82 LDA $82 3D/AC83: 29 10 AND #$10 3D/AC85: F0 09 BEQ $AC90 3D/AC87: BD 15 61 LDA $6115,X 3D/AC8A: 20 45 AD JSR $AD45 3D/AC8D: 9D 15 61 STA $6115,X 3D/AC90: A5 82 LDA $82 3D/AC92: 29 08 AND #$08 3D/AC94: F0 09 BEQ $AC9F 3D/AC96: BD 16 61 LDA $6116,X 3D/AC99: 20 45 AD JSR $AD45 3D/AC9C: 9D 16 61 STA $6116,X 3D/AC9F: A5 83 LDA $83 3D/ACA1: 29 80 AND #$80 3D/ACA3: F0 09 BEQ $ACAE 3D/ACA5: BD 3F 61 LDA $613F,X ; mp 3D/ACA8: 20 4F AD JSR $AD4F 3D/ACAB: 9D 3F 61 STA $613F,X 3D/ACAE: A5 83 LDA $83 3D/ACB0: 29 40 AND #$40 3D/ACB2: F0 09 BEQ $ACBD 3D/ACB4: BD 3D 61 LDA $613D,X 3D/ACB7: 20 4F AD JSR $AD4F 3D/ACBA: 9D 3D 61 STA $613D,X 3D/ACBD: A5 83 LDA $83 3D/ACBF: 29 20 AND #$20 3D/ACC1: F0 09 BEQ $ACCC 3D/ACC3: BD 3B 61 LDA $613B,X 3D/ACC6: 20 4F AD JSR $AD4F 3D/ACC9: 9D 3B 61 STA $613B,X 3D/ACCC: A5 83 LDA $83 3D/ACCE: 29 10 AND #$10 3D/ACD0: F0 09 BEQ $ACDB 3D/ACD2: BD 39 61 LDA $6139,X 3D/ACD5: 20 4F AD JSR $AD4F 3D/ACD8: 9D 39 61 STA $6139,X 3D/ACDB: A5 83 LDA $83 3D/ACDD: 29 08 AND #$08 3D/ACDF: F0 09 BEQ $ACEA 3D/ACE1: BD 37 61 LDA $6137,X 3D/ACE4: 20 4F AD JSR $AD4F 3D/ACE7: 9D 37 61 STA $6137,X 3D/ACEA: A5 83 LDA $83 3D/ACEC: 29 04 AND #$04 3D/ACEE: F0 09 BEQ $ACF9 3D/ACF0: BD 35 61 LDA $6135,X 3D/ACF3: 20 4F AD JSR $AD4F 3D/ACF6: 9D 35 61 STA $6135,X 3D/ACF9: A5 83 LDA $83 3D/ACFB: 29 02 AND #$02 3D/ACFD: F0 09 BEQ $AD08 3D/ACFF: BD 33 61 LDA $6133,X 3D/AD02: 20 4F AD JSR $AD4F 3D/AD05: 9D 33 61 STA $6133,X 3D/AD08: A5 83 LDA $83 3D/AD0A: 29 01 AND #$01 3D/AD0C: F0 09 BEQ $AD17 3D/AD0E: BD 31 61 LDA $6131,X 3D/AD11: 20 4F AD JSR $AD4F 3D/AD14: 9D 31 61 STA $6131,X 3D/AD17: C6 87 DEC $87 ; next level 3D/AD19: F0 03 BEQ $AD1E 3D/AD1B: 4C 31 AC JMP $AC31 3D/AD1E: 86 80 STX $80 3D/AD20: A0 05 LDY #$05 3D/AD22: BD 12 61 LDA $6112,X ; copy base stats to mod. stats 3D/AD25: 9D 17 61 STA $6117,X 3D/AD28: E8 INX 3D/AD29: 88 DEY 3D/AD2A: D0 F6 BNE $AD22 3D/AD2C: A6 80 LDX $80 3D/AD2E: A0 08 LDY #$08 3D/AD30: BD 31 61 LDA $6131,X ; check if current mp > max mp 3D/AD33: DD 30 61 CMP $6130,X 3D/AD36: B0 03 BCS $AD3B 3D/AD38: 9D 30 61 STA $6130,X 3D/AD3B: E8 INX 3D/AD3C: E8 INX 3D/AD3D: 88 DEY 3D/AD3E: D0 F0 BNE $AD30 3D/AD40: A9 3C LDA #$3C 3D/AD42: 4C 06 FF JMP $FF06 ; switch prg bank 0 ; [ check max stat ] 3D/AD45: 18 CLC 3D/AD46: 65 84 ADC $84 3D/AD48: C9 63 CMP #$63 3D/AD4A: 90 02 BCC $AD4E 3D/AD4C: A9 63 LDA #$63 3D/AD4E: 60 RTS ; [ check max mp ] 3D/AD4F: 18 CLC 3D/AD50: 69 01 ADC #$01 3D/AD52: C9 63 CMP #$63 3D/AD54: 90 02 BCC $AD58 3D/AD56: A9 63 LDA #$63 3D/AD58: 60 RTS ; pointers to level progression for each job (bank 39) 3D/AD59: 81D6 829A 835E 8422 84E6 85AA 866E 8732 3D/AD69: 87F6 88BA 897E 8A42 8B06 8BCA 8C8E 8D52 3D/AD78: 8E16 8EDA 8F9E 9062 9126 91EA ; [ calculate cp required to change jobs ] ; calculated values for every job -> $7200 3D/AD85: A9 00 LDA #$00 ; loop through all jobs 3D/AD87: 85 8F STA $8F 3D/AD89: 20 F2 AD JSR $ADF2 ; load job stats 3D/AD8C: AD 00 7C LDA $7C00 ; physical/magical index 3D/AD8F: 4A LSR 3D/AD90: 4A LSR 3D/AD91: 4A LSR 3D/AD92: 4A LSR 3D/AD93: 85 80 STA $80 3D/AD95: AD 08 7C LDA $7C08 3D/AD98: 4A LSR 3D/AD99: 4A LSR 3D/AD9A: 4A LSR 3D/AD9B: 4A LSR 3D/AD9C: 38 SEC 3D/AD9D: E5 80 SBC $80 3D/AD9F: 10 05 BPL $ADA6 ; get abs difference 3D/ADA1: 49 FF EOR #$FF 3D/ADA3: 18 CLC 3D/ADA4: 69 01 ADC #$01 3D/ADA6: 85 80 STA $80 3D/ADA8: AD 00 7C LDA $7C00 ; lawful/chaotic index 3D/ADAB: 29 0F AND #$0F 3D/ADAD: 85 81 STA $81 3D/ADAF: AD 08 7C LDA $7C08 3D/ADB2: 29 0F AND #$0F 3D/ADB4: 38 SEC 3D/ADB5: E5 81 SBC $81 3D/ADB7: 10 05 BPL $ADBE ; get abs difference 3D/ADB9: 49 FF EOR #$FF 3D/ADBB: 18 CLC 3D/ADBC: 69 01 ADC #$01 3D/ADBE: 85 81 STA $81 3D/ADC0: A5 80 LDA $80 3D/ADC2: 18 CLC 3D/ADC3: 65 81 ADC $81 3D/ADC5: 85 82 STA $82 ; sum of differences 3D/ADC7: A5 8F LDA $8F 3D/ADC9: 0A ASL 3D/ADCA: 05 7F ORA $7F 3D/ADCC: AA TAX 3D/ADCD: BD 10 62 LDA $6210,X ; new job level 3D/ADD0: 85 83 STA $83 3D/ADD2: A5 82 LDA $82 ; diff * 4 - new job level 3D/ADD4: 0A ASL 3D/ADD5: 0A ASL 3D/ADD6: 38 SEC 3D/ADD7: E5 83 SBC $83 3D/ADD9: B0 02 BCS $ADDD 3D/ADDB: A9 00 LDA #$00 ; minimum is zero 3D/ADDD: A6 8F LDX $8F 3D/ADDF: 9D 00 72 STA $7200,X 3D/ADE2: E6 8F INC $8F 3D/ADE4: A5 8F LDA $8F 3D/ADE6: C9 17 CMP #$17 3D/ADE8: B0 03 BCS $ADED 3D/ADEA: 4C 89 AD JMP $AD89 3D/ADED: A9 3C LDA #$3C 3D/ADEF: 4C 06 FF JMP $FF06 ; switch prg bank 0 ; [ load new job stats ] ; $8F: new job id ; job stats format: ; $00: aaaabbbb job adjustment factors ; a: physical/magical index (8 is neutral) ; b: lawful/chaotic index (8 is neutral) ; $01: minimum level ; $02: strength ; $03: agility ; $04: vitality ; $05: intelligence ; $06: spirit ; $07: mp progression index 3D/ADF2: A9 39 LDA #$39 3D/ADF4: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/ADF7: A5 8F LDA $8F 3D/ADF9: 0A ASL 3D/ADFA: 0A ASL 3D/ADFB: 0A ASL 3D/ADFC: A8 TAY 3D/ADFD: A2 00 LDX #$00 3D/ADFF: B9 00 80 LDA $8000,Y 3D/AE02: 9D 00 7C STA $7C00,X 3D/AE05: E8 INX 3D/AE06: C8 INY 3D/AE07: E0 08 CPX #$08 3D/AE09: 90 F4 BCC $ADFF 3D/AE0B: A6 7F LDX $7F 3D/AE0D: BD 00 61 LDA $6100,X ; current job id 3D/AE10: 0A ASL 3D/AE11: 0A ASL 3D/AE12: 0A ASL 3D/AE13: A8 TAY 3D/AE14: A2 00 LDX #$00 3D/AE16: B9 00 80 LDA $8000,Y 3D/AE19: 9D 08 7C STA $7C08,X 3D/AE1C: E8 INX 3D/AE1D: C8 INY 3D/AE1E: E0 08 CPX #$08 3D/AE20: 90 F4 BCC $AE16 3D/AE22: 60 RTS ; [ check if character can change jobs ] ; set carry if allowed, clear carry if not 3D/AE23: 20 F2 AD JSR $ADF2 ; load new job stats 3D/AE26: A9 3C LDA #$3C 3D/AE28: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/AE2B: A6 7F LDX $7F 3D/AE2D: BD 01 61 LDA $6101,X 3D/AE30: CD 01 7C CMP $7C01 ; minimum level 3D/AE33: B0 04 BCS $AE39 3D/AE35: A9 3A LDA #$3A ; $013A: "Not enough experience" 3D/AE37: 18 CLC 3D/AE38: 60 RTS 3D/AE39: BD 00 62 LDA $6200,X 3D/AE3C: 1D 01 62 ORA $6201,X 3D/AE3F: 1D 02 62 ORA $6202,X 3D/AE42: 1D 03 62 ORA $6203,X 3D/AE45: 1D 05 62 ORA $6205,X 3D/AE48: F0 04 BEQ $AE4E 3D/AE4A: A9 71 LDA #$71 ; $0171: "Must remove equipment to change Jobs." 3D/AE4C: 18 CLC 3D/AE4D: 60 RTS 3D/AE4E: AD 1B 60 LDA $601B 3D/AE51: A6 8F LDX $8F 3D/AE53: DD 00 72 CMP $7200,X 3D/AE56: B0 03 BCS $AE5B 3D/AE58: A9 72 LDA #$72 ; $0172: "Not enough “Capacity”!" 3D/AE5A: 18 CLC 3D/AE5B: 60 RTS ; [ update sram checksum ] 3D/AE5C: A5 78 LDA $78 3D/AE5E: 8D 08 60 STA $6008 ; world id 3D/AE61: A5 42 LDA $42 3D/AE63: 8D 0F 60 STA $600F ; vehicle id 3D/AE66: A5 27 LDA $27 3D/AE68: 8D 09 60 STA $6009 ; world xy position 3D/AE6B: A5 28 LDA $28 3D/AE6D: 8D 0A 60 STA $600A 3D/AE70: A9 00 LDA #$00 3D/AE72: 8D 1A 60 STA $601A ; clear checksum 3D/AE75: A9 5A LDA #$5A 3D/AE77: 8D 19 60 STA $6019 ; save slot is initialized 3D/AE7A: A9 00 LDA #$00 3D/AE7C: A2 00 LDX #$00 3D/AE7E: 18 CLC 3D/AE7F: 7D 00 60 ADC $6000,X 3D/AE82: 18 CLC 3D/AE83: 7D 00 61 ADC $6100,X 3D/AE86: 18 CLC 3D/AE87: 7D 00 62 ADC $6200,X 3D/AE8A: 18 CLC 3D/AE8B: 7D 00 63 ADC $6300,X 3D/AE8E: E8 INX 3D/AE8F: D0 ED BNE $AE7E 3D/AE91: 49 FF EOR #$FF 3D/AE93: 8D 1A 60 STA $601A ; update checksum 3D/AE96: 60 RTS ; [ check if save slot is valid ] ; A: save slot id (1, 2, or 3) ; set carry if not valid 3D/AE97: 0A ASL 3D/AE98: 0A ASL 3D/AE99: 69 60 ADC #$60 3D/AE9B: 85 81 STA $81 3D/AE9D: A9 00 LDA #$00 3D/AE9F: 85 80 STA $80 3D/AEA1: A2 04 LDX #$04 3D/AEA3: A0 19 LDY #$19 3D/AEA5: B1 80 LDA ($80),Y 3D/AEA7: C9 5A CMP #$5A 3D/AEA9: D0 16 BNE $AEC1 ; return if save slot is not initialized 3D/AEAB: A0 00 LDY #$00 3D/AEAD: A9 00 LDA #$00 3D/AEAF: 18 CLC 3D/AEB0: 71 80 ADC ($80),Y ; sum of save slot bytes should be #$FFFF 3D/AEB2: C8 INY 3D/AEB3: D0 FA BNE $AEAF 3D/AEB5: E6 81 INC $81 3D/AEB7: CA DEX 3D/AEB8: D0 F5 BNE $AEAF 3D/AEBA: 18 CLC 3D/AEBB: 69 01 ADC #$01 ; add 1, will get 0 if checksum valid 3D/AEBD: D0 02 BNE $AEC1 3D/AEBF: 18 CLC 3D/AEC0: 60 RTS 3D/AEC1: 38 SEC 3D/AEC2: 60 RTS ; [ clear item equipability for all characters ] 3D/AEC3: A2 00 LDX #$00 3D/AEC5: BD 02 61 LDA $6102,X 3D/AEC8: 29 FE AND #$FE 3D/AECA: 9D 02 61 STA $6102,X 3D/AECD: 8A TXA 3D/AECE: 18 CLC 3D/AECF: 69 40 ADC #$40 3D/AED1: AA TAX 3D/AED2: D0 F1 BNE $AEC5 3D/AED4: 60 RTS ; [ check which characters can equip item/spell ] 3D/AED5: 20 C3 AE JSR $AEC3 ; clear item equipability for all characters 3D/AED8: AD F0 79 LDA $79F0 3D/AEDB: 4A LSR 3D/AEDC: 4A LSR 3D/AEDD: 85 8E STA $8E 3D/AEDF: AA TAX 3D/AEE0: BD 80 7B LDA $7B80,X ; item/spell id 3D/AEE3: 20 13 D1 JSR $D113 ; check which characters can equip item/spell 3D/AEE6: A5 80 LDA $80 3D/AEE8: 29 08 AND #$08 3D/AEEA: D0 08 BNE $AEF4 ; branch if character 1 can equip 3D/AEEC: AD 02 61 LDA $6102 3D/AEEF: 09 01 ORA #$01 3D/AEF1: 8D 02 61 STA $6102 ; set can equip flag 3D/AEF4: A5 80 LDA $80 3D/AEF6: 29 04 AND #$04 3D/AEF8: D0 08 BNE $AF02 ; branch if character 2 can equip 3D/AEFA: AD 42 61 LDA $6142 3D/AEFD: 09 01 ORA #$01 3D/AEFF: 8D 42 61 STA $6142 3D/AF02: A5 80 LDA $80 3D/AF04: 29 02 AND #$02 3D/AF06: D0 08 BNE $AF10 ; branch if character 3 can equip 3D/AF08: AD 82 61 LDA $6182 3D/AF0B: 09 01 ORA #$01 3D/AF0D: 8D 82 61 STA $6182 3D/AF10: A5 80 LDA $80 3D/AF12: 29 01 AND #$01 3D/AF14: D0 08 BNE $AF1E ; branch if character 4 can equip 3D/AF16: AD C2 61 LDA $61C2 3D/AF19: 09 01 ORA #$01 3D/AF1B: 8D C2 61 STA $61C2 3D/AF1E: 60 RTS ; -------------------------------------------------------------------------- ; [ shop menu ] 3D/AF1F: 20 EB B1 JSR $B1EB ; reset A and B button 3D/AF22: A9 00 LDA #$00 3D/AF24: 8D 01 20 STA $2001 3D/AF27: 8D F0 78 STA $78F0 3D/AF2A: 8D F0 79 STA $79F0 3D/AF2D: 8D F0 7A STA $7AF0 3D/AF30: 20 06 DD JSR $DD06 ; load menu graphics 3D/AF33: 20 BB F7 JSR $F7BB ; init ppu name table (menu) 3D/AF36: 20 86 C4 JSR $C486 ; clear oam data 3D/AF39: 20 00 FF JSR $FF00 ; wait for vblank 3D/AF3C: A9 02 LDA #$02 3D/AF3E: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/AF41: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3D/AF44: 20 69 B3 JSR $B369 3D/AF47: A9 3C LDA #$3C 3D/AF49: 85 57 STA $57 3D/AF4B: A9 01 LDA #$01 3D/AF4D: 85 37 STA $37 3D/AF4F: A9 00 LDA #$00 3D/AF51: 85 A3 STA $A3 3D/AF53: 85 A4 STA $A4 3D/AF55: A5 A0 LDA $A0 3D/AF57: C9 FC CMP #$FC 3D/AF59: 90 0D BCC $AF68 3D/AF5B: 4C 83 B3 JMP $B383 ; fat chocobo menu ; close menu 3D/AF5E: 20 74 8F JSR $8F74 ; cursor sound effect 3D/AF61: A9 00 LDA #$00 3D/AF63: 85 50 STA $50 3D/AF65: 4C 85 A6 JMP $A685 ; close menu ; normal shop 3D/AF68: 20 20 B2 JSR $B220 ; init shop item buffer 3D/AF6B: A2 14 LDX #$14 ; shop type window 3D/AF6D: 20 F1 AA JSR $AAF1 ; open menu window 3D/AF70: AD 00 7B LDA $7B00 ; shop type 3D/AF73: 20 78 A6 JSR $A678 ; load menu text 3D/AF76: 20 61 F4 JSR $F461 3D/AF79: A9 00 LDA #$00 3D/AF7B: 85 64 STA $64 3D/AF7D: A9 01 LDA #$01 ; show cursor 1 3D/AF7F: 85 A2 STA $A2 3D/AF81: A9 00 LDA #$00 3D/AF83: 8D F0 78 STA $78F0 3D/AF86: 85 A3 STA $A3 3D/AF88: 85 A4 STA $A4 3D/AF8A: 85 B4 STA $B4 ; hide page arrows 3D/AF8C: 20 A8 A3 JSR $A3A8 ; save window variables 3D/AF8F: 20 F2 B1 JSR $B1F2 ; draw shop gil menu 3D/AF92: A9 26 LDA #$26 ; $0126: "Welcome!" 3D/AF94: 20 0C B2 JSR $B20C ; show shop message 3D/AF97: A9 0B LDA #$0B ; $010B: "Buy Sell Exit" 3D/AF99: 20 16 B2 JSR $B216 ; show shop options 3D/AF9C: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/AF9F: A9 04 LDA #$04 3D/AFA1: 20 A3 91 JSR $91A3 ; update cursor 1 position 3D/AFA4: A5 25 LDA $25 3D/AFA6: D0 B6 BNE $AF5E 3D/AFA8: A5 24 LDA $24 3D/AFAA: F0 F0 BEQ $AF9C 3D/AFAC: 20 74 8F JSR $8F74 ; cursor sound effect 3D/AFAF: A2 00 LDX #$00 3D/AFB1: AD F0 78 LDA $78F0 3D/AFB4: 8E F0 78 STX $78F0 3D/AFB7: C9 08 CMP #$08 3D/AFB9: B0 A3 BCS $AF5E 3D/AFBB: C9 04 CMP #$04 3D/AFBD: 90 03 BCC $AFC2 3D/AFBF: 4C EB B0 JMP $B0EB 3D/AFC2: A2 18 LDX #$18 ; item list window 3D/AFC4: 20 F1 AA JSR $AAF1 ; open menu window 3D/AFC7: 20 81 B2 JSR $B281 ; calculate item prices 3D/AFCA: A9 20 LDA #$20 3D/AFCC: 20 78 A6 JSR $A678 ; load menu text 3D/AFCF: 20 C3 AE JSR $AEC3 ; clear item equipability for all characters 3D/AFD2: A9 00 LDA #$00 3D/AFD4: 85 A3 STA $A3 3D/AFD6: A9 27 LDA #$27 ; $0127: "Purchase which?" 3D/AFD8: 20 0C B2 JSR $B20C ; show shop message 3D/AFDB: A9 2D LDA #$2D ; $012D: "Qty? 1 4 10" 3D/AFDD: 20 16 B2 JSR $B216 ; show shop options 3D/AFE0: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/AFE3: A9 04 LDA #$04 3D/AFE5: 20 A3 91 JSR $91A3 ; update cursor 1 position 3D/AFE8: 20 35 B3 JSR $B335 ; draw character sprites 3D/AFEB: A5 25 LDA $25 3D/AFED: F0 09 BEQ $AFF8 3D/AFEF: 20 C3 AE JSR $AEC3 ; clear item equipability for all characters 3D/AFF2: 20 74 8F JSR $8F74 ; cursor sound effect 3D/AFF5: 4C 76 AF JMP $AF76 3D/AFF8: A5 24 LDA $24 3D/AFFA: F0 E4 BEQ $AFE0 3D/AFFC: 20 74 8F JSR $8F74 ; cursor sound effect 3D/AFFF: AD F0 78 LDA $78F0 ; current cursor position 3D/B002: 4A LSR 3D/B003: 4A LSR 3D/B004: 85 64 STA $64 3D/B006: A9 01 LDA #$01 3D/B008: 85 A3 STA $A3 3D/B00A: 20 81 B2 JSR $B281 ; calculate item prices 3D/B00D: A2 18 LDX #$18 ; item list window 3D/B00F: 20 F1 AA JSR $AAF1 ; open menu window 3D/B012: A9 20 LDA #$20 3D/B014: 20 78 A6 JSR $A678 ; load menu text 3D/B017: 20 D5 AE JSR $AED5 3D/B01A: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/B01D: AD F0 79 LDA $79F0 3D/B020: 48 PHA 3D/B021: A9 04 LDA #$04 3D/B023: 20 D9 91 JSR $91D9 ; update cursor 2 position 3D/B026: 20 35 B3 JSR $B335 ; draw character sprites 3D/B029: 68 PLA 3D/B02A: CD F0 79 CMP $79F0 3D/B02D: F0 03 BEQ $B032 3D/B02F: 20 D5 AE JSR $AED5 3D/B032: A5 25 LDA $25 3D/B034: F0 06 BEQ $B03C 3D/B036: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B039: 4C CF AF JMP $AFCF 3D/B03C: A5 24 LDA $24 3D/B03E: F0 DA BEQ $B01A 3D/B040: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B043: 20 4D B0 JSR $B04D 3D/B046: 20 F2 B1 JSR $B1F2 ; draw shop gil menu 3D/B049: 4C 1A B0 JMP $B01A 3D/B04C: 60 RTS 3D/B04D: A6 8E LDX $8E 3D/B04F: BD 90 7B LDA $7B90,X 3D/B052: 85 80 STA $80 3D/B054: 85 61 STA $61 3D/B056: BD 98 7B LDA $7B98,X 3D/B059: 85 81 STA $81 3D/B05B: 85 62 STA $62 3D/B05D: BD A0 7B LDA $7BA0,X 3D/B060: 85 82 STA $82 3D/B062: 85 63 STA $63 3D/B064: 20 CA B0 JSR $B0CA 3D/B067: 90 05 BCC $B06E 3D/B069: A9 6C LDA #$6C ; $016C: "Not enough money." 3D/B06B: 4C 0C B2 JMP $B20C ; show shop message 3D/B06E: A6 8E LDX $8E 3D/B070: BD 80 7B LDA $7B80,X 3D/B073: D0 01 BNE $B076 3D/B075: 60 RTS 3D/B076: 85 80 STA $80 3D/B078: A2 01 LDX #$01 3D/B07A: A5 64 LDA $64 3D/B07C: F0 08 BEQ $B086 3D/B07E: A2 04 LDX #$04 3D/B080: C9 01 CMP #$01 3D/B082: F0 02 BEQ $B086 3D/B084: A2 0A LDX #$0A 3D/B086: 86 81 STX $81 3D/B088: 20 7E 93 JSR $937E ; find item in inventory 3D/B08B: 90 05 BCC $B092 3D/B08D: A9 2C LDA #$2C ; $012C: "Can't carry anymore." 3D/B08F: 4C 0C B2 JMP $B20C ; show shop message 3D/B092: C9 00 CMP #$00 3D/B094: F0 0C BEQ $B0A2 3D/B096: BD E0 60 LDA $60E0,X 3D/B099: 18 CLC 3D/B09A: 65 81 ADC $81 3D/B09C: C9 64 CMP #$64 3D/B09E: B0 ED BCS $B08D 3D/B0A0: 90 07 BCC $B0A9 3D/B0A2: A5 80 LDA $80 3D/B0A4: 9D C0 60 STA $60C0,X 3D/B0A7: A5 81 LDA $81 3D/B0A9: 9D E0 60 STA $60E0,X 3D/B0AC: AD 1C 60 LDA $601C 3D/B0AF: 38 SEC 3D/B0B0: E5 61 SBC $61 3D/B0B2: 8D 1C 60 STA $601C 3D/B0B5: AD 1D 60 LDA $601D 3D/B0B8: E5 62 SBC $62 3D/B0BA: 8D 1D 60 STA $601D 3D/B0BD: AD 1E 60 LDA $601E 3D/B0C0: E5 63 SBC $63 3D/B0C2: 8D 1E 60 STA $601E 3D/B0C5: A9 28 LDA #$28 ; $0128: "Thank you!" 3D/B0C7: 4C 0C B2 JMP $B20C ; show shop message 3D/B0CA: AD 1E 60 LDA $601E 3D/B0CD: C5 82 CMP $82 3D/B0CF: 90 16 BCC $B0E7 3D/B0D1: F0 02 BEQ $B0D5 3D/B0D3: B0 14 BCS $B0E9 3D/B0D5: AD 1D 60 LDA $601D 3D/B0D8: C5 81 CMP $81 3D/B0DA: 90 0B BCC $B0E7 3D/B0DC: F0 02 BEQ $B0E0 3D/B0DE: B0 09 BCS $B0E9 3D/B0E0: AD 1C 60 LDA $601C 3D/B0E3: C5 80 CMP $80 3D/B0E5: B0 02 BCS $B0E9 3D/B0E7: 38 SEC 3D/B0E8: 60 RTS 3D/B0E9: 18 CLC 3D/B0EA: 60 RTS 3D/B0EB: A2 19 LDX #$19 3D/B0ED: 20 F1 AA JSR $AAF1 ; open menu window 3D/B0F0: A9 3D LDA #$3D 3D/B0F2: 20 78 A6 JSR $A678 ; load menu text 3D/B0F5: 20 3D 90 JSR $903D 3D/B0F8: A9 80 LDA #$80 3D/B0FA: 85 B4 STA $B4 ; show page down arrow 3D/B0FC: 20 A8 A3 JSR $A3A8 ; save window variables 3D/B0FF: A9 00 LDA #$00 3D/B101: 85 B4 STA $B4 ; hide page arrows 3D/B103: 8D F0 7A STA $7AF0 3D/B106: A9 00 LDA #$00 3D/B108: 85 A4 STA $A4 3D/B10A: 85 B4 STA $B4 ; hide page arrows 3D/B10C: A9 2A LDA #$2A ; $012A: "Sell Which?" 3D/B10E: 20 0C B2 JSR $B20C ; show shop message 3D/B111: A9 2E LDA #$2E ; $012E: " Qty? 1 All" 3D/B113: 20 16 B2 JSR $B216 ; show shop options 3D/B116: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/B119: A9 04 LDA #$04 3D/B11B: 20 A3 91 JSR $91A3 ; update cursor 1 position 3D/B11E: A5 25 LDA $25 3D/B120: F0 03 BEQ $B125 3D/B122: 4C F2 AF JMP $AFF2 3D/B125: A5 24 LDA $24 3D/B127: F0 ED BEQ $B116 3D/B129: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B12C: AD F0 78 LDA $78F0 3D/B12F: 4A LSR 3D/B130: 4A LSR 3D/B131: 85 64 STA $64 3D/B133: A9 01 LDA #$01 3D/B135: 85 A4 STA $A4 3D/B137: 20 8E A3 JSR $A38E ; restore window variables 3D/B13A: 20 19 B6 JSR $B619 3D/B13D: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/B140: A9 08 LDA #$08 3D/B142: 20 0D 92 JSR $920D ; update cursor 3 position 3D/B145: A5 25 LDA $25 3D/B147: F0 06 BEQ $B14F 3D/B149: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B14C: 4C 06 B1 JMP $B106 3D/B14F: A5 24 LDA $24 3D/B151: F0 EA BEQ $B13D 3D/B153: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B156: AE F0 7A LDX $7AF0 3D/B159: BD 02 7A LDA $7A02,X 3D/B15C: C9 0F CMP #$0F 3D/B15E: F0 0B BEQ $B16B 3D/B160: BD 03 7A LDA $7A03,X 3D/B163: 85 8E STA $8E 3D/B165: AA TAX 3D/B166: BD C0 60 LDA $60C0,X 3D/B169: D0 06 BNE $B171 3D/B16B: 20 29 D5 JSR $D529 ; error sound effect 3D/B16E: 4C 3D B1 JMP $B13D 3D/B171: C9 9A CMP #$9A 3D/B173: 90 0C BCC $B181 ; can sell items $00-$99 3D/B175: C9 A4 CMP #$A4 3D/B177: 90 F2 BCC $B16B ; can't sell items $9A-$A3 (key items) 3D/B179: C9 F6 CMP #$F6 3D/B17B: F0 EE BEQ $B16B ; can't sell toad or mini spells 3D/B17D: C9 F7 CMP #$F7 3D/B17F: F0 EA BEQ $B16B 3D/B181: 20 48 B2 JSR $B248 ; get item sell price 3D/B184: A9 2B LDA #$2B ; "\gil Gil,ok?" 3D/B186: 20 FC B1 JSR $B1FC ; show shop message 3D/B189: 20 CB B1 JSR $B1CB ; get next joypad input 3D/B18C: A5 20 LDA $20 3D/B18E: 29 80 AND #$80 3D/B190: D0 08 BNE $B19A 3D/B192: A9 2A LDA #$2A ; "Sell Which?" 3D/B194: 20 FC B1 JSR $B1FC ; show shop message 3D/B197: 4C 3D B1 JMP $B13D ; A button 3D/B19A: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B19D: A6 8E LDX $8E 3D/B19F: A5 64 LDA $64 3D/B1A1: D0 0B BNE $B1AE 3D/B1A3: BD E0 60 LDA $60E0,X 3D/B1A6: 38 SEC 3D/B1A7: E9 01 SBC #$01 3D/B1A9: 9D E0 60 STA $60E0,X 3D/B1AC: D0 08 BNE $B1B6 3D/B1AE: A9 00 LDA #$00 3D/B1B0: 9D C0 60 STA $60C0,X 3D/B1B3: 9D E0 60 STA $60E0,X 3D/B1B6: A5 61 LDA $61 3D/B1B8: 85 80 STA $80 3D/B1BA: A5 62 LDA $62 3D/B1BC: 85 81 STA $81 3D/B1BE: A5 63 LDA $63 3D/B1C0: 85 82 STA $82 3D/B1C2: 20 FF F5 JSR $F5FF ; give gil 3D/B1C5: 20 F2 B1 JSR $B1F2 ; draw shop gil menu 3D/B1C8: 4C 37 B1 JMP $B137 ; [ get next joypad input ] 3D/B1CB: 20 EB B1 JSR $B1EB ; reset A and B button 3D/B1CE: 20 00 FF JSR $FF00 ; wait for vblank 3D/B1D1: 20 81 D2 JSR $D281 ; read joypad registers 3D/B1D4: 20 58 C7 JSR $C758 ; update sound 3D/B1D7: A5 20 LDA $20 3D/B1D9: D0 F3 BNE $B1CE ; wait for key up 3D/B1DB: 20 00 FF JSR $FF00 ; wait for vblank 3D/B1DE: 20 81 D2 JSR $D281 ; read joypad registers 3D/B1E1: 20 58 C7 JSR $C758 ; update sound 3D/B1E4: A5 20 LDA $20 3D/B1E6: F0 F3 BEQ $B1DB ; wait for keypress 3D/B1E8: 85 21 STA $21 3D/B1EA: 60 RTS ; [ reset A and B button ] 3D/B1EB: A9 00 LDA #$00 3D/B1ED: 85 24 STA $24 3D/B1EF: 85 25 STA $25 3D/B1F1: 60 RTS ; [ draw shop gil menu ] 3D/B1F2: A2 17 LDX #$17 ; gil window 3D/B1F4: 20 F1 AA JSR $AAF1 ; open menu window 3D/B1F7: A9 05 LDA #$05 ; \partygil Gil 3D/B1F9: 4C 78 A6 JMP $A678 ; load menu text ; [ show shop message (save window variables) ] ; A: message id 3D/B1FC: 48 PHA 3D/B1FD: 20 A8 A3 JSR $A3A8 ; save window variables 3D/B200: A2 15 LDX #$15 ; shop message window 3D/B202: 20 F1 AA JSR $AAF1 ; open menu window 3D/B205: 68 PLA 3D/B206: 20 78 A6 JSR $A678 ; load menu text 3D/B209: 4C 8E A3 JMP $A38E ; restore window variables ; [ show shop message ] 3D/B20C: 48 PHA 3D/B20D: A2 15 LDX #$15 ; shop message menu 3D/B20F: 20 F1 AA JSR $AAF1 ; open menu window 3D/B212: 68 PLA 3D/B213: 4C 78 A6 JMP $A678 ; load menu text ; [ show shop options ] 3D/B216: 48 PHA 3D/B217: A2 16 LDX #$16 ; shop options menu 3D/B219: 20 F1 AA JSR $AAF1 ; open menu window 3D/B21C: 68 PLA 3D/B21D: 4C 78 A6 JMP $A678 ; load menu text ; [ init shop item buffer ] 3D/B220: A2 07 LDX #$07 3D/B222: BD 01 7B LDA $7B01,X ; copy shop items 3D/B225: 9D 80 7B STA $7B80,X 3D/B228: CA DEX 3D/B229: 10 F7 BPL $B222 3D/B22B: A0 00 LDY #$00 3D/B22D: BE 80 7B LDX $7B80,Y 3D/B230: 20 D4 F5 JSR $F5D4 ; get item price 3D/B233: A5 80 LDA $80 3D/B235: 99 A8 7B STA $7BA8,Y ; set item price in buffer 3D/B238: A5 81 LDA $81 3D/B23A: 99 B0 7B STA $7BB0,Y 3D/B23D: A5 82 LDA $82 3D/B23F: 99 B8 7B STA $7BB8,Y 3D/B242: C8 INY 3D/B243: C0 08 CPY #$08 3D/B245: 90 E6 BCC $B22D 3D/B247: 60 RTS ; [ get item sell price ] 3D/B248: A5 64 LDA $64 3D/B24A: D0 0B BNE $B257 ; 1 3D/B24C: A6 8E LDX $8E 3D/B24E: BD C0 60 LDA $60C0,X ; item id 3D/B251: 20 70 B2 JSR $B270 ; get item price 3D/B254: 4C 69 B2 JMP $B269 ; all 3D/B257: A6 8E LDX $8E 3D/B259: BD C0 60 LDA $60C0,X 3D/B25C: 20 70 B2 JSR $B270 ; get item price 3D/B25F: A6 8E LDX $8E 3D/B261: BD E0 60 LDA $60E0,X ; item qty 3D/B264: 85 80 STA $80 3D/B266: 20 55 8E JSR $8E55 ; multiply gil 3D/B269: 46 63 LSR $63 ; divide by 2 3D/B26B: 66 62 ROR $62 3D/B26D: 66 61 ROR $61 3D/B26F: 60 RTS ; [ get item price ] 3D/B270: AA TAX 3D/B271: 20 D4 F5 JSR $F5D4 ; get item price 3D/B274: A5 80 LDA $80 3D/B276: 85 61 STA $61 3D/B278: A5 81 LDA $81 3D/B27A: 85 62 STA $62 3D/B27C: A5 82 LDA $82 3D/B27E: 85 63 STA $63 3D/B280: 60 RTS ; [ calculate item prices ] 3D/B281: A5 64 LDA $64 ; purchase quantity 3D/B283: D0 0C BNE $B291 ; 0: buy 1 (no discount) 3D/B285: A2 17 LDX #$17 3D/B287: BD A8 7B LDA $7BA8,X ; copy item prices 3D/B28A: 9D 90 7B STA $7B90,X 3D/B28D: CA DEX 3D/B28E: 10 F7 BPL $B287 3D/B290: 60 RTS ; 1: buy 4 (~10% discount) 3D/B291: C9 01 CMP #$01 3D/B293: D0 50 BNE $B2E5 3D/B295: A9 00 LDA #$00 3D/B297: 85 8B STA $8B 3D/B299: A6 8B LDX $8B 3D/B29B: BD A8 7B LDA $7BA8,X 3D/B29E: 85 61 STA $61 3D/B2A0: BD B0 7B LDA $7BB0,X 3D/B2A3: 85 62 STA $62 3D/B2A5: BD B8 7B LDA $7BB8,X 3D/B2A8: 85 63 STA $63 3D/B2AA: A9 04 LDA #$04 ; multiply by 4 3D/B2AC: 85 80 STA $80 3D/B2AE: 20 55 8E JSR $8E55 ; multiply gil 3D/B2B1: A5 61 LDA $61 3D/B2B3: 85 88 STA $88 3D/B2B5: A5 62 LDA $62 3D/B2B7: 85 89 STA $89 3D/B2B9: A5 63 LDA $63 3D/B2BB: 85 8A STA $8A 3D/B2BD: A9 1A LDA #$1A ; multiply by 26 3D/B2BF: 85 80 STA $80 3D/B2C1: 20 55 8E JSR $8E55 ; multiply gil 3D/B2C4: A6 8B LDX $8B 3D/B2C6: A5 88 LDA $88 3D/B2C8: 38 SEC 3D/B2C9: E5 62 SBC $62 3D/B2CB: 9D 90 7B STA $7B90,X 3D/B2CE: A5 89 LDA $89 3D/B2D0: E5 63 SBC $63 3D/B2D2: 9D 98 7B STA $7B98,X 3D/B2D5: A5 8A LDA $8A 3D/B2D7: E9 00 SBC #$00 3D/B2D9: 9D A0 7B STA $7BA0,X 3D/B2DC: E6 8B INC $8B ; next item 3D/B2DE: A5 8B LDA $8B 3D/B2E0: C9 08 CMP #$08 3D/B2E2: 90 B5 BCC $B299 3D/B2E4: 60 RTS ; 2: buy 10 (~20% discount) 3D/B2E5: A9 00 LDA #$00 3D/B2E7: 85 8B STA $8B 3D/B2E9: A6 8B LDX $8B 3D/B2EB: BD A8 7B LDA $7BA8,X 3D/B2EE: 85 61 STA $61 3D/B2F0: BD B0 7B LDA $7BB0,X 3D/B2F3: 85 62 STA $62 3D/B2F5: BD B8 7B LDA $7BB8,X 3D/B2F8: 85 63 STA $63 3D/B2FA: A9 0A LDA #$0A ; multiply by 10 3D/B2FC: 85 80 STA $80 3D/B2FE: 20 55 8E JSR $8E55 ; multiply gil 3D/B301: A5 61 LDA $61 3D/B303: 85 88 STA $88 3D/B305: A5 62 LDA $62 3D/B307: 85 89 STA $89 3D/B309: A5 63 LDA $63 3D/B30B: 85 8A STA $8A 3D/B30D: A9 33 LDA #$33 ; multiply by 51 3D/B30F: 85 80 STA $80 3D/B311: 20 55 8E JSR $8E55 ; multiply gil 3D/B314: A5 88 LDA $88 3D/B316: 38 SEC 3D/B317: E5 62 SBC $62 3D/B319: A6 8B LDX $8B 3D/B31B: 9D 90 7B STA $7B90,X 3D/B31E: A5 89 LDA $89 3D/B320: E5 63 SBC $63 3D/B322: 9D 98 7B STA $7B98,X 3D/B325: A5 8A LDA $8A 3D/B327: E9 00 SBC #$00 3D/B329: 9D A0 7B STA $7BA0,X 3D/B32C: E6 8B INC $8B 3D/B32E: A5 8B LDA $8B 3D/B330: C9 08 CMP #$08 3D/B332: 90 B5 BCC $B2E9 3D/B334: 60 RTS ; [ draw character sprites (shop menu) ] 3D/B335: A9 D8 LDA #$D8 3D/B337: 85 40 STA $40 3D/B339: A9 60 LDA #$60 3D/B33B: 85 41 STA $41 3D/B33D: A2 00 LDX #$00 3D/B33F: 20 36 81 JSR $8136 ; draw character sprite 3D/B342: A9 D8 LDA #$D8 3D/B344: 85 40 STA $40 3D/B346: A9 80 LDA #$80 3D/B348: 85 41 STA $41 3D/B34A: A2 40 LDX #$40 3D/B34C: 20 36 81 JSR $8136 ; draw character sprite 3D/B34F: A9 D8 LDA #$D8 3D/B351: 85 40 STA $40 3D/B353: A9 A0 LDA #$A0 3D/B355: 85 41 STA $41 3D/B357: A2 80 LDX #$80 3D/B359: 20 36 81 JSR $8136 ; draw character sprite 3D/B35C: A9 D8 LDA #$D8 3D/B35E: 85 40 STA $40 3D/B360: A9 C0 LDA #$C0 3D/B362: 85 41 STA $41 3D/B364: A2 C0 LDX #$C0 3D/B366: 4C 36 81 JMP $8136 ; draw character sprite ; [ ] 3D/B369: A9 88 LDA #$88 3D/B36B: 85 FD STA $FD 3D/B36D: 85 FF STA $FF 3D/B36F: 8D 00 20 STA $2000 3D/B372: A9 00 LDA #$00 ; clear ppu scroll registers 3D/B374: 8D 05 20 STA $2005 3D/B377: 8D 05 20 STA $2005 3D/B37A: A9 1E LDA #$1E ; show sprites and background 3D/B37C: 8D 01 20 STA $2001 3D/B37F: 60 RTS ; [ fat chocobo menu ] ; starts at 3D/B383 ; close menu 3D/B380: 4C 5E AF JMP $AF5E ; subroutine starts here 3D/B383: A9 0F LDA #$0F ; set sprite palette 3 (cursor/fat chocobo) 3D/B385: 8D DD 03 STA $03DD 3D/B388: A9 27 LDA #$27 ; orange 3D/B38A: 8D DE 03 STA $03DE 3D/B38D: 20 00 FF JSR $FF00 ; wait for vblank 3D/B390: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3D/B393: 20 69 B3 JSR $B369 3D/B396: 20 C3 AE JSR $AEC3 ; clear item equipability for all characters 3D/B399: A9 51 LDA #$51 ; "でぶチョコボ:「よーお なんかようかーい?" / "Hey…! Whatcha want?" 3D/B39B: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B39E: A9 24 LDA #$24 ; $0124: "Give Take Exit" 3D/B3A0: 20 ED B5 JSR $B5ED ; show fat chocobo options 3D/B3A3: A9 00 LDA #$00 3D/B3A5: 85 A3 STA $A3 3D/B3A7: 85 A4 STA $A4 3D/B3A9: 85 B4 STA $B4 ; hide page arrows 3D/B3AB: 8D F0 78 STA $78F0 3D/B3AE: A9 01 LDA #$01 ; show cursor 1 3D/B3B0: 85 A2 STA $A2 3D/B3B2: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/B3B5: A9 04 LDA #$04 3D/B3B7: 20 A3 91 JSR $91A3 ; update cursor 1 position 3D/B3BA: 20 8C 80 JSR $808C ; draw sprites for fat chocobo menu 3D/B3BD: A5 25 LDA $25 3D/B3BF: D0 BF BNE $B380 3D/B3C1: A5 24 LDA $24 3D/B3C3: F0 ED BEQ $B3B2 3D/B3C5: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B3C8: AD F0 78 LDA $78F0 3D/B3CB: C9 08 CMP #$08 3D/B3CD: B0 B1 BCS $B380 3D/B3CF: C9 04 CMP #$04 3D/B3D1: F0 46 BEQ $B419 ; give 3D/B3D3: A9 52 LDA #$52 ; "「なにをくれるんだーい?" / "Whatcha got for me?" 3D/B3D5: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B3D8: A9 80 LDA #$80 3D/B3DA: 85 B4 STA $B4 ; show page down arrow 3D/B3DC: A2 19 LDX #$19 ; fat chocobo item list window 3D/B3DE: 20 F1 AA JSR $AAF1 ; open menu window 3D/B3E1: A9 3D LDA #$3D 3D/B3E3: 20 78 A6 JSR $A678 ; load menu text 3D/B3E6: A9 00 LDA #$00 3D/B3E8: 8D F0 7A STA $7AF0 3D/B3EB: A9 01 LDA #$01 3D/B3ED: 85 A4 STA $A4 3D/B3EF: 20 3D 90 JSR $903D 3D/B3F2: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/B3F5: 20 8C 80 JSR $808C ; draw sprites for fat chocobo menu 3D/B3F8: A9 08 LDA #$08 3D/B3FA: 20 0D 92 JSR $920D ; update cursor 3 position 3D/B3FD: A5 25 LDA $25 3D/B3FF: F0 06 BEQ $B407 3D/B401: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B404: 4C 83 B3 JMP $B383 3D/B407: A5 24 LDA $24 3D/B409: F0 E7 BEQ $B3F2 ; A button 3D/B40B: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B40E: 20 AE B4 JSR $B4AE 3D/B411: B0 DF BCS $B3F2 3D/B413: 20 19 B6 JSR $B619 3D/B416: 4C F2 B3 JMP $B3F2 ; take 3D/B419: A9 53 LDA #$53 ; "「なにがほしいんだってー?" / "Whatcha want back?" 3D/B41B: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B41E: A9 80 LDA #$80 3D/B420: 85 B4 STA $B4 ; show page down arrow 3D/B422: A2 19 LDX #$19 ; fat chocobo item list window 3D/B424: 20 F1 AA JSR $AAF1 ; open menu window 3D/B427: 20 70 B5 JSR $B570 ; init fat chocobo item list text 3D/B42A: A9 18 LDA #$18 3D/B42C: 85 93 STA $93 3D/B42E: A9 01 LDA #$01 ; $7301 (item list text buffer) 3D/B430: 85 3E STA $3E 3D/B432: A9 73 LDA #$73 3D/B434: 85 3F STA $3F 3D/B436: 20 61 EB JSR $EB61 ; load next line of text 3D/B439: A9 00 LDA #$00 3D/B43B: 8D F0 7A STA $7AF0 3D/B43E: A9 01 LDA #$01 3D/B440: 85 A4 STA $A4 3D/B442: 20 3D 90 JSR $903D 3D/B445: AD 00 7C LDA $7C00 3D/B448: F0 03 BEQ $B44D 3D/B44A: 20 92 B4 JSR $B492 3D/B44D: 20 CD A7 JSR $A7CD ; wait for vblank (update cursors) 3D/B450: 20 8C 80 JSR $808C ; draw sprites for fat chocobo menu 3D/B453: AE F0 7A LDX $7AF0 3D/B456: BC 03 7A LDY $7A03,X 3D/B459: B9 00 7C LDA $7C00,Y 3D/B45C: 48 PHA 3D/B45D: A9 08 LDA #$08 3D/B45F: 20 0D 92 JSR $920D ; update cursor 3 position 3D/B462: AE F0 7A LDX $7AF0 3D/B465: BC 03 7A LDY $7A03,X 3D/B468: 68 PLA 3D/B469: D9 00 7C CMP $7C00,Y 3D/B46C: F0 0B BEQ $B479 3D/B46E: 20 C3 AE JSR $AEC3 ; clear item equipability for all characters 3D/B471: B9 00 7C LDA $7C00,Y 3D/B474: F0 03 BEQ $B479 3D/B476: 20 92 B4 JSR $B492 3D/B479: A5 25 LDA $25 3D/B47B: F0 03 BEQ $B480 3D/B47D: 4C 01 B4 JMP $B401 3D/B480: A5 24 LDA $24 3D/B482: F0 C9 BEQ $B44D 3D/B484: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B487: 20 04 B5 JSR $B504 3D/B48A: B0 C1 BCS $B44D 3D/B48C: 20 19 B6 JSR $B619 3D/B48F: 4C 4D B4 JMP $B44D ; [ ] 3D/B492: 48 PHA 3D/B493: A2 00 LDX #$00 3D/B495: BD 70 74 LDA $7470,X 3D/B498: 9D 00 72 STA $7200,X 3D/B49B: E8 INX 3D/B49C: D0 F7 BNE $B495 3D/B49E: 68 PLA 3D/B49F: 20 E3 AE JSR $AEE3 3D/B4A2: A2 00 LDX #$00 3D/B4A4: BD 00 72 LDA $7200,X 3D/B4A7: 9D 70 74 STA $7470,X 3D/B4AA: E8 INX 3D/B4AB: D0 F7 BNE $B4A4 3D/B4AD: 60 RTS ; [ ] 3D/B4AE: AE F0 7A LDX $7AF0 3D/B4B1: BD 02 7A LDA $7A02,X 3D/B4B4: C9 0F CMP #$0F 3D/B4B6: F0 0B BEQ $B4C3 3D/B4B8: BD 03 7A LDA $7A03,X 3D/B4BB: 85 8E STA $8E 3D/B4BD: AA TAX 3D/B4BE: BD C0 60 LDA $60C0,X 3D/B4C1: D0 05 BNE $B4C8 3D/B4C3: 20 29 D5 JSR $D529 ; error sound effect 3D/B4C6: 38 SEC 3D/B4C7: 60 RTS 3D/B4C8: C9 9A CMP #$9A ; can't store key items ($9A-$A3) 3D/B4CA: 90 04 BCC $B4D0 3D/B4CC: C9 A4 CMP #$A4 3D/B4CE: 90 F3 BCC $B4C3 3D/B4D0: A8 TAY 3D/B4D1: A9 00 LDA #$00 3D/B4D3: 85 80 STA $80 3D/B4D5: B9 00 63 LDA $6300,Y 3D/B4D8: C9 63 CMP #$63 3D/B4DA: 90 07 BCC $B4E3 3D/B4DC: A9 55 LDA #$55 ; "「これいじょう おなじもんはくえねえよ" / "Ugh… I’m stuffed…" 3D/B4DE: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B4E1: 18 CLC 3D/B4E2: 60 RTS 3D/B4E3: 7D E0 60 ADC $60E0,X 3D/B4E6: C9 64 CMP #$64 3D/B4E8: 90 06 BCC $B4F0 3D/B4EA: E9 63 SBC #$63 3D/B4EC: 85 80 STA $80 3D/B4EE: A9 63 LDA #$63 3D/B4F0: 99 00 63 STA $6300,Y 3D/B4F3: A5 80 LDA $80 3D/B4F5: 9D E0 60 STA $60E0,X 3D/B4F8: D0 03 BNE $B4FD 3D/B4FA: 9D C0 60 STA $60C0,X 3D/B4FD: A9 54 LDA #$54 ; "「いっただっきまーす。 むしゃむしゃ…" / "Thanks! -swallow-" 3D/B4FF: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B502: 18 CLC 3D/B503: 60 RTS ; [ ] 3D/B504: AE F0 7A LDX $7AF0 3D/B507: BD 03 7A LDA $7A03,X 3D/B50A: 85 8E STA $8E 3D/B50C: AA TAX 3D/B50D: BD 00 7C LDA $7C00,X 3D/B510: D0 05 BNE $B517 3D/B512: 20 29 D5 JSR $D529 ; error sound effect 3D/B515: 38 SEC 3D/B516: 60 RTS 3D/B517: 85 8F STA $8F 3D/B519: A8 TAY 3D/B51A: B9 00 63 LDA $6300,Y 3D/B51D: 85 81 STA $81 3D/B51F: 84 80 STY $80 3D/B521: 20 7E 93 JSR $937E ; find item in inventory 3D/B524: 90 07 BCC $B52D 3D/B526: A9 56 LDA #$56 ; "「もちものがいっぱいで かえせねえなあ" / "But ya can't carry it!" 3D/B528: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B52B: 18 CLC 3D/B52C: 60 RTS ; item not in inventory 3D/B52D: C9 00 CMP #$00 3D/B52F: D0 1D BNE $B54E 3D/B531: A5 80 LDA $80 3D/B533: 9D C0 60 STA $60C0,X 3D/B536: A5 81 LDA $81 3D/B538: 9D E0 60 STA $60E0,X 3D/B53B: A6 8E LDX $8E 3D/B53D: A9 00 LDA #$00 3D/B53F: 9D 00 7C STA $7C00,X 3D/B542: A6 8F LDX $8F 3D/B544: 9D 00 63 STA $6300,X 3D/B547: A9 58 LDA #$58 ; "「ちょっとまってね いまだすから…" / "Here ya go…" 3D/B549: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B54C: 18 CLC 3D/B54D: 60 RTS ; add to item in inventory 3D/B54E: BD E0 60 LDA $60E0,X 3D/B551: C9 99 CMP #$99 3D/B553: B0 14 BCS $B569 3D/B555: 65 81 ADC $81 3D/B557: C9 64 CMP #$64 3D/B559: 90 DD BCC $B538 3D/B55B: E9 63 SBC #$63 3D/B55D: 85 81 STA $81 3D/B55F: A9 63 LDA #$63 3D/B561: 9D E0 60 STA $60E0,X 3D/B564: A5 81 LDA $81 3D/B566: 4C 42 B5 JMP $B542 3D/B569: A9 57 LDA #$57 ; "「かえしきれないので のこりはあずかっとくよ" / "Here ya go…" 3D/B56B: 20 F7 B5 JSR $B5F7 ; show fat chocobo message 3D/B56E: 18 CLC 3D/B56F: 60 RTS ; [ init fat chocobo item list text ] 3D/B570: A2 01 LDX #$01 3D/B572: A0 00 LDY #$00 3D/B574: BD 00 63 LDA $6300,X 3D/B577: F0 05 BEQ $B57E 3D/B579: 8A TXA 3D/B57A: 99 00 7C STA $7C00,Y 3D/B57D: C8 INY 3D/B57E: E8 INX 3D/B57F: D0 F3 BNE $B574 3D/B581: A9 00 LDA #$00 3D/B583: 99 00 7C STA $7C00,Y 3D/B586: C0 FF CPY #$FF 3D/B588: F0 06 BEQ $B590 3D/B58A: 99 00 7C STA $7C00,Y 3D/B58D: C8 INY 3D/B58E: D0 FA BNE $B58A 3D/B590: A9 00 LDA #$00 3D/B592: 85 82 STA $82 3D/B594: 8D FF 72 STA $72FF 3D/B597: 8D 00 73 STA $7300 3D/B59A: A9 01 LDA #$01 ; $7301 (item list text buffer) 3D/B59C: 85 80 STA $80 3D/B59E: A9 73 LDA #$73 3D/B5A0: 85 81 STA $81 ; start of loop 3D/B5A2: A0 00 LDY #$00 3D/B5A4: A9 1B LDA #$1B ; fat chocobo item name 3D/B5A6: 91 80 STA ($80),Y 3D/B5A8: C8 INY 3D/B5A9: A5 82 LDA $82 3D/B5AB: 91 80 STA ($80),Y 3D/B5AD: C8 INY 3D/B5AE: A9 1D LDA #$1D ; fat chocobo item quantity 3D/B5B0: 91 80 STA ($80),Y 3D/B5B2: C8 INY 3D/B5B3: A5 82 LDA $82 3D/B5B5: 91 80 STA ($80),Y 3D/B5B7: C8 INY 3D/B5B8: E6 82 INC $82 3D/B5BA: A9 1B LDA #$1B 3D/B5BC: 91 80 STA ($80),Y 3D/B5BE: C8 INY 3D/B5BF: A5 82 LDA $82 3D/B5C1: 91 80 STA ($80),Y 3D/B5C3: C8 INY 3D/B5C4: A9 1D LDA #$1D 3D/B5C6: 91 80 STA ($80),Y 3D/B5C8: C8 INY 3D/B5C9: A9 FF LDA #$FF 3D/B5CB: 91 80 STA ($80),Y 3D/B5CD: C8 INY 3D/B5CE: A9 01 LDA #$01 3D/B5D0: 91 80 STA ($80),Y 3D/B5D2: C8 INY 3D/B5D3: E6 82 INC $82 3D/B5D5: F0 10 BEQ $B5E7 3D/B5D7: A5 80 LDA $80 3D/B5D9: 18 CLC 3D/B5DA: 69 09 ADC #$09 3D/B5DC: 85 80 STA $80 3D/B5DE: A5 81 LDA $81 3D/B5E0: 69 00 ADC #$00 3D/B5E2: 85 81 STA $81 3D/B5E4: 4C A2 B5 JMP $B5A2 3D/B5E7: 88 DEY 3D/B5E8: A9 00 LDA #$00 3D/B5EA: 91 80 STA ($80),Y 3D/B5EC: 60 RTS ; [ show fat chocobo options ] 3D/B5ED: 48 PHA 3D/B5EE: A2 1B LDX #$1B 3D/B5F0: 20 F1 AA JSR $AAF1 ; open menu window 3D/B5F3: 68 PLA 3D/B5F4: 4C 78 A6 JMP $A678 ; load menu text ; [ show fat chocobo message ] 3D/B5F7: 48 PHA 3D/B5F8: 20 A8 A3 JSR $A3A8 ; save window variables 3D/B5FB: A2 1A LDX #$1A ; fat chocobo message window 3D/B5FD: 20 F1 AA JSR $AAF1 ; open menu window 3D/B600: 68 PLA 3D/B601: 20 78 A6 JSR $A678 ; load menu text 3D/B604: 4C 8E A3 JMP $A38E ; restore window variables ; [ show character message ] ; unused ??? (identical to 3D/A87A) 3D/B607: 20 B1 D1 JSR $D1B1 ; load character text string 3D/B60A: A9 18 LDA #$18 3D/B60C: 85 93 STA $93 3D/B60E: A9 01 LDA #$01 ; $7B01 (text buffer) 3D/B610: 85 3E STA $3E 3D/B612: A9 7B LDA #$7B 3D/B614: 85 3F STA $3F 3D/B616: 4C 61 EB JMP $EB61 ; load next line of text ; [ ] 3D/B619: 20 75 90 JSR $9075 3D/B61C: A5 1C LDA $1C 3D/B61E: 85 3E STA $3E 3D/B620: A5 1D LDA $1D 3D/B622: 85 3F STA $3F 3D/B624: 4C 61 EB JMP $EB61 ; load next line of text ; -------------------------------------------------------------------------- ; [ init guest npc ] ; identical to 3B/BA15 3D/B627: A9 1F LDA #$1F ; normal map width: 32 3D/B629: 85 80 STA $80 3D/B62B: A5 2D LDA $2D 3D/B62D: 4A LSR 3D/B62E: 90 07 BCC $B637 ; branch if on world map 3D/B630: A5 29 LDA $29 3D/B632: A4 2A LDY $2A 3D/B634: 4C 45 B6 JMP $B645 3D/B637: A9 FF LDA #$FF ; world map width: 256 3D/B639: 85 80 STA $80 3D/B63B: A5 78 LDA $78 3D/B63D: D0 02 BNE $B641 3D/B63F: 46 80 LSR $80 ; floating continent width: 128 3D/B641: A5 27 LDA $27 3D/B643: A4 28 LDY $28 3D/B645: 18 CLC 3D/B646: 69 07 ADC #$07 ; add 7 to get center of screen 3D/B648: 25 80 AND $80 3D/B64A: 85 AC STA $AC ; set guest npc x position 3D/B64C: 98 TYA 3D/B64D: 18 CLC 3D/B64E: 69 07 ADC #$07 ; add 7 to get center of screen 3D/B650: 25 80 AND $80 3D/B652: 85 AD STA $AD ; set guest npc y position 3D/B654: A9 00 LDA #$00 3D/B656: 85 13 STA $13 3D/B658: 85 14 STA $14 3D/B65A: 85 AE STA $AE 3D/B65C: 85 E1 STA $E1 3D/B65E: 85 E2 STA $E2 3D/B660: 85 E3 STA $E3 3D/B662: 85 E4 STA $E4 3D/B664: 85 A9 STA $A9 3D/B666: A9 04 LDA #$04 3D/B668: 85 A7 STA $A7 3D/B66A: A5 43 LDA $43 3D/B66C: 85 A8 STA $A8 3D/B66E: 60 RTS ; [ init invincible jump ] 3D/B66F: A5 33 LDA $33 ; facing direction 3D/B671: 4A LSR 3D/B672: B0 14 BCS $B688 3D/B674: 4A LSR 3D/B675: B0 18 BCS $B68F 3D/B677: 4A LSR 3D/B678: B0 07 BCS $B681 ; up 3D/B67A: A2 07 LDX #$07 ; target tile is 3 units up 3D/B67C: A0 04 LDY #$04 3D/B67E: 4C 93 B6 JMP $B693 ; down 3D/B681: A2 07 LDX #$07 3D/B683: A0 0A LDY #$0A 3D/B685: 4C 93 B6 JMP $B693 ; right 3D/B688: A2 0A LDX #$0A 3D/B68A: A0 07 LDY #$07 3D/B68C: 4C 93 B6 JMP $B693 ; left 3D/B68F: A2 04 LDX #$04 3D/B691: A0 07 LDY #$07 3D/B693: 8A TXA 3D/B694: 18 CLC 3D/B695: 65 27 ADC $27 ; x position 3D/B697: 85 80 STA $80 3D/B699: 85 82 STA $82 3D/B69B: 98 TYA 3D/B69C: 18 CLC 3D/B69D: 65 28 ADC $28 ; y position 3D/B69F: 85 83 STA $83 3D/B6A1: 98 TYA 3D/B6A2: 18 CLC 3D/B6A3: 65 2F ADC $2F 3D/B6A5: C9 0F CMP #$0F 3D/B6A7: 90 02 BCC $B6AB 3D/B6A9: E9 0F SBC #$0F 3D/B6AB: 09 70 ORA #$70 3D/B6AD: 85 81 STA $81 3D/B6AF: A0 00 LDY #$00 3D/B6B1: B1 80 LDA ($80),Y ; target tile id 3D/B6B3: 0A ASL 3D/B6B4: AA TAX 3D/B6B5: BD 00 04 LDA $0400,X ; tile properties 3D/B6B8: 29 30 AND #$30 3D/B6BA: F0 04 BEQ $B6C0 ; branch if not passable 3D/B6BC: A9 C1 LDA #$C1 3D/B6BE: D0 02 BNE $B6C2 3D/B6C0: A9 81 LDA #$81 3D/B6C2: 85 A6 STA $A6 ; set invincible jumping variable 3D/B6C4: A9 00 LDA #$00 3D/B6C6: 85 AF STA $AF ; reset invincible jumping delay counter 3D/B6C8: 85 24 STA $24 ; clear buttons pressed 3D/B6CA: 85 25 STA $25 3D/B6CC: 85 22 STA $22 3D/B6CE: 85 23 STA $23 3D/B6D0: A5 33 LDA $33 ; facing direction 3D/B6D2: 85 E0 STA $E0 3D/B6D4: A9 AC LDA #$AC ; sound effect $2C 3D/B6D6: 8D 49 7F STA $7F49 3D/B6D9: 60 RTS ; [ push to guest npc movement stack ] 3D/B6DA: A5 E3 LDA $E3 ; push to guest npc movement stack 3D/B6DC: 85 E4 STA $E4 3D/B6DE: A5 E2 LDA $E2 3D/B6E0: 85 E3 STA $E3 3D/B6E2: A5 E1 LDA $E1 3D/B6E4: 85 E2 STA $E2 3D/B6E6: A5 33 LDA $33 3D/B6E8: 29 0F AND #$0F 3D/B6EA: 85 E1 STA $E1 3D/B6EC: A5 2D LDA $2D 3D/B6EE: 4A LSR 3D/B6EF: B0 09 BCS $B6FA ; branch if not on world map 3D/B6F1: A5 44 LDA $44 3D/B6F3: 29 30 AND #$30 3D/B6F5: 05 E1 ORA $E1 3D/B6F7: 85 E1 STA $E1 3D/B6F9: 60 RTS 3D/B6FA: A5 44 LDA $44 3D/B6FC: 29 04 AND #$04 3D/B6FE: F0 06 BEQ $B706 3D/B700: A5 A5 LDA $A5 3D/B702: 4A LSR 3D/B703: 90 01 BCC $B706 3D/B705: 60 RTS 3D/B706: A5 44 LDA $44 3D/B708: 29 34 AND #$34 3D/B70A: 48 PHA 3D/B70B: 29 04 AND #$04 3D/B70D: C9 04 CMP #$04 3D/B70F: 68 PLA 3D/B710: 90 E3 BCC $B6F5 3D/B712: A9 70 LDA #$70 3D/B714: D0 DF BNE $B6F5 ; [ update guest npc follow ] 3D/B716: A5 AE LDA $AE 3D/B718: F0 01 BEQ $B71B ; return if guest npc is already moving 3D/B71A: 60 RTS ; 4 steps behind player 3D/B71B: A5 E4 LDA $E4 3D/B71D: F0 1C BEQ $B73B 3D/B71F: A2 00 LDX #$00 3D/B721: 86 E4 STX $E4 3D/B723: 48 PHA 3D/B724: 29 0F AND #$0F 3D/B726: 85 A7 STA $A7 3D/B728: 68 PLA 3D/B729: 29 70 AND #$70 3D/B72B: 85 A8 STA $A8 3D/B72D: A6 F0 LDX $F0 3D/B72F: BD 00 FE LDA $FE00,X ; random number table 3D/B732: 29 02 AND #$02 3D/B734: D0 02 BNE $B738 3D/B736: 09 01 ORA #$01 ; (1..2) 3D/B738: 85 AE STA $AE ; set guest npc movement speed 3D/B73A: 60 RTS ; 3 steps behind player 3D/B73B: A5 E3 LDA $E3 3D/B73D: F0 0E BEQ $B74D 3D/B73F: A5 A9 LDA $A9 3D/B741: D0 00 BNE $B743 3D/B743: A5 E3 LDA $E3 3D/B745: A2 00 LDX #$00 3D/B747: 86 E3 STX $E3 3D/B749: 4C 23 B7 JMP $B723 3D/B74C: 60 RTS ; 2 steps behind player 3D/B74D: A5 E2 LDA $E2 3D/B74F: F0 18 BEQ $B769 3D/B751: A5 A9 LDA $A9 3D/B753: D0 06 BNE $B75B 3D/B755: A5 F0 LDA $F0 3D/B757: 29 10 AND #$10 3D/B759: D0 F1 BNE $B74C 3D/B75B: A5 E2 LDA $E2 3D/B75D: A2 00 LDX #$00 3D/B75F: 86 E2 STX $E2 3D/B761: 20 23 B7 JSR $B723 3D/B764: A9 01 LDA #$01 ; movement speed: 1 3D/B766: 85 AE STA $AE 3D/B768: 60 RTS ; 1 step behind player 3D/B769: A5 E1 LDA $E1 3D/B76B: 29 0F AND #$0F 3D/B76D: 85 A7 STA $A7 3D/B76F: A5 2D LDA $2D 3D/B771: 4A LSR 3D/B772: B0 11 BCS $B785 ; branch if not on world map 3D/B774: A5 A9 LDA $A9 3D/B776: F0 F0 BEQ $B768 3D/B778: A5 E1 LDA $E1 3D/B77A: F0 09 BEQ $B785 3D/B77C: 85 E2 STA $E2 3D/B77E: A9 00 LDA #$00 3D/B780: 85 E1 STA $E1 3D/B782: 4C 5B B7 JMP $B75B 3D/B785: A9 00 LDA #$00 3D/B787: 85 A9 STA $A9 3D/B789: 60 RTS ; [ update guest npc ] 3D/B78A: AD 0B 60 LDA $600B 3D/B78D: D0 03 BNE $B792 ; branch if there is a guest npc 3D/B78F: 4C 54 B6 JMP $B654 3D/B792: A5 A9 LDA $A9 3D/B794: D0 09 BNE $B79F 3D/B796: A5 2D LDA $2D 3D/B798: 4A LSR 3D/B799: B0 04 BCS $B79F ; branch if not on world map 3D/B79B: A5 42 LDA $42 3D/B79D: D0 F0 BNE $B78F ; branch if in a vehicle 3D/B79F: 20 16 B7 JSR $B716 ; update guest npc follow 3D/B7A2: A5 AE LDA $AE 3D/B7A4: D0 01 BNE $B7A7 3D/B7A6: 60 RTS 3D/B7A7: A5 A7 LDA $A7 ; guest npc facing direction ; right 3D/B7A9: 4A LSR 3D/B7AA: 90 11 BCC $B7BD 3D/B7AC: A5 13 LDA $13 3D/B7AE: 18 CLC 3D/B7AF: 65 AE ADC $AE 3D/B7B1: 29 0F AND #$0F 3D/B7B3: 85 13 STA $13 3D/B7B5: D0 05 BNE $B7BC 3D/B7B7: E6 AC INC $AC 3D/B7B9: 4C F4 B7 JMP $B7F4 3D/B7BC: 60 RTS ; left 3D/B7BD: 4A LSR 3D/B7BE: 90 10 BCC $B7D0 3D/B7C0: A5 13 LDA $13 3D/B7C2: 38 SEC 3D/B7C3: E5 AE SBC $AE 3D/B7C5: 10 02 BPL $B7C9 3D/B7C7: C6 AC DEC $AC 3D/B7C9: 29 0F AND #$0F 3D/B7CB: 85 13 STA $13 3D/B7CD: F0 25 BEQ $B7F4 3D/B7CF: 60 RTS ; down 3D/B7D0: 4A LSR 3D/B7D1: 90 11 BCC $B7E4 3D/B7D3: A5 14 LDA $14 3D/B7D5: 18 CLC 3D/B7D6: 65 AE ADC $AE 3D/B7D8: 29 0F AND #$0F 3D/B7DA: 85 14 STA $14 3D/B7DC: D0 05 BNE $B7E3 3D/B7DE: E6 AD INC $AD 3D/B7E0: 4C F4 B7 JMP $B7F4 3D/B7E3: 60 RTS ; up 3D/B7E4: A5 14 LDA $14 3D/B7E6: 38 SEC 3D/B7E7: E5 AE SBC $AE 3D/B7E9: 10 02 BPL $B7ED 3D/B7EB: C6 AD DEC $AD 3D/B7ED: 29 0F AND #$0F 3D/B7EF: 85 14 STA $14 3D/B7F1: F0 01 BEQ $B7F4 3D/B7F3: 60 RTS 3D/B7F4: A9 00 LDA #$00 3D/B7F6: 85 AE STA $AE 3D/B7F8: 60 RTS ; -------------------------------------------------------------------------- ; [ update water animation buffers ] 3D/B7F9: A5 2D LDA $2D 3D/B7FB: 4A LSR 3D/B7FC: B0 1C BCS $B81A ; branch if not on world map 3D/B7FE: A5 78 LDA $78 3D/B800: C9 04 CMP #$04 3D/B802: 90 16 BCC $B81A ; branch if not underwater ; underwater 3D/B804: A5 6D LDA $6D 3D/B806: 29 10 AND #$10 3D/B808: F0 34 BEQ $B83E 3D/B80A: A9 00 LDA #$00 3D/B80C: 85 6D STA $6D 3D/B80E: A2 00 LDX #$00 3D/B810: E6 6E INC $6E 3D/B812: A5 6E LDA $6E 3D/B814: 29 04 AND #$04 3D/B816: F0 4C BEQ $B864 ; water animation (right) 3D/B818: D0 5B BNE $B875 ; water animation (left) ; not underwater 3D/B81A: A5 6E LDA $6E 3D/B81C: 10 0D BPL $B82B 3D/B81E: 29 10 AND #$10 3D/B820: F0 09 BEQ $B82B 3D/B822: A5 6E LDA $6E 3D/B824: 49 10 EOR #$10 3D/B826: 85 6E STA $6E 3D/B828: 20 3F B8 JSR $B83F ; water animation (down) 3D/B82B: A5 6D LDA $6D 3D/B82D: 10 0F BPL $B83E 3D/B82F: 29 10 AND #$10 3D/B831: F0 0B BEQ $B83E 3D/B833: A5 6D LDA $6D 3D/B835: 49 10 EOR #$10 3D/B837: 85 6D STA $6D 3D/B839: A2 00 LDX #$00 3D/B83B: 4C 64 B8 JMP $B864 ; water animation (right) 3D/B83E: 60 RTS ; [ water animation (down) ] 3D/B83F: A2 0C LDX #$0C 3D/B841: BD 22 7F LDA $7F22,X ; shift pixels down 3D/B844: 48 PHA 3D/B845: BD 23 7F LDA $7F23,X 3D/B848: 48 PHA 3D/B849: BD 20 7F LDA $7F20,X 3D/B84C: 9D 22 7F STA $7F22,X 3D/B84F: BD 21 7F LDA $7F21,X 3D/B852: 9D 23 7F STA $7F23,X 3D/B855: CA DEX 3D/B856: CA DEX 3D/B857: 10 F0 BPL $B849 3D/B859: E8 INX 3D/B85A: E8 INX 3D/B85B: 68 PLA 3D/B85C: 9D 21 7F STA $7F21,X 3D/B85F: 68 PLA 3D/B860: 9D 20 7F STA $7F20,X 3D/B863: 60 RTS ; [ water animation (right) ] 3D/B864: BD 01 7F LDA $7F01,X ; shift pixels right 3D/B867: 4A LSR 3D/B868: 7E 00 7F ROR $7F00,X 3D/B86B: 7E 01 7F ROR $7F01,X 3D/B86E: E8 INX 3D/B86F: E8 INX 3D/B870: E0 20 CPX #$20 3D/B872: D0 F0 BNE $B864 3D/B874: 60 RTS ; [ water animation (left) ] 3D/B875: BD 00 7F LDA $7F00,X ; shift pixels left 3D/B878: 0A ASL 3D/B879: 3E 01 7F ROL $7F01,X 3D/B87C: 3E 00 7F ROL $7F00,X 3D/B87F: E8 INX 3D/B880: E8 INX 3D/B881: E0 20 CPX #$20 3D/B883: D0 F0 BNE $B875 3D/B885: 60 RTS ; -------------------------------------------------------------------------- ; [ draw character sprite (name change menu) ] 3D/B886: A9 A0 LDA #$A0 ; x position 3D/B888: 85 40 STA $40 3D/B88A: A9 20 LDA #$20 ; y position 3D/B88C: 85 41 STA $41 3D/B88E: 4C 36 82 JMP $8236 ; escape codes for character names 3D/B891: 10 11 12 13 ; [ name change menu ] 3D/B895: 20 85 A6 JSR $A685 ; close menu 3D/B898: 20 58 8F JSR $8F58 3D/B89B: A9 00 LDA #$00 ; reset cursor position 3D/B89D: 8D F0 7A STA $7AF0 3D/B8A0: A2 23 LDX #$23 3D/B8A2: 20 F1 AA JSR $AAF1 ; open menu window 3D/B8A5: A9 21 LDA #$21 ; alphabet for character name select 3D/B8A7: 20 78 A6 JSR $A678 ; load menu text 3D/B8AA: 20 3D 90 JSR $903D 3D/B8AD: A9 80 LDA #$80 ; show page down arrow 3D/B8AF: 85 B4 STA $B4 3D/B8B1: 20 A8 A3 JSR $A3A8 ; save window variables 3D/B8B4: A9 01 LDA #$01 ; show cursor 3 3D/B8B6: 85 A4 STA $A4 3D/B8B8: A2 22 LDX #$22 3D/B8BA: 20 F1 AA JSR $AAF1 ; open menu window 3D/B8BD: A9 00 LDA #$00 3D/B8BF: 85 07 STA $07 ; character id 3D/B8C1: 85 08 STA $08 ; letter id 3D/B8C3: 20 8E A3 JSR $A38E ; restore window variables 3D/B8C6: 20 E6 B8 JSR $B8E6 ; get character name 3D/B8C9: 90 0E BCC $B8D9 ; branch if confirmed 3D/B8CB: A5 07 LDA $07 3D/B8CD: C9 01 CMP #$01 3D/B8CF: 90 F5 BCC $B8C6 ; repeat first slot 3D/B8D1: 38 SEC ; previous character 3D/B8D2: E9 01 SBC #$01 3D/B8D4: 85 07 STA $07 3D/B8D6: 4C C6 B8 JMP $B8C6 3D/B8D9: A5 07 LDA $07 ; next character 3D/B8DB: 18 CLC 3D/B8DC: 69 01 ADC #$01 3D/B8DE: 85 07 STA $07 3D/B8E0: C9 04 CMP #$04 3D/B8E2: 90 E2 BCC $B8C6 3D/B8E4: 18 CLC 3D/B8E5: 60 RTS ; [ get character name ] ; clear carry if name confirmed, set carry if cancelled 3D/B8E6: A6 07 LDX $07 3D/B8E8: BD 91 B8 LDA $B891,X 3D/B8EB: 85 9E STA $9E 3D/B8ED: 29 03 AND #$03 3D/B8EF: 4A LSR 3D/B8F0: 6A ROR 3D/B8F1: 6A ROR 3D/B8F2: 85 7F STA $7F ; pointer to character data 3D/B8F4: 20 B7 B9 JSR $B9B7 ; draw character name window 3D/B8F7: 20 00 FF JSR $FF00 ; wait for vblank 3D/B8FA: A9 02 LDA #$02 3D/B8FC: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/B8FF: 20 86 C4 JSR $C486 ; clear oam data 3D/B902: 20 58 C7 JSR $C758 ; update sound 3D/B905: 20 4C 91 JSR $914C ; draw cursor sprite 3 3D/B908: A6 7F LDX $7F 3D/B90A: 20 86 B8 JSR $B886 ; draw character sprite 3D/B90D: 20 E6 A7 JSR $A7E6 ; draw page up/down sprites 3D/B910: 20 CA B9 JSR $B9CA ; draw character name cursor 3D/B913: A9 28 LDA #$28 ; vertical increment: 10 3D/B915: 20 0D 92 JSR $920D ; update cursor 3 position 3D/B918: A5 25 LDA $25 3D/B91A: F0 12 BEQ $B92E ; branch if B button is not pressed 3D/B91C: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B91F: A5 08 LDA $08 3D/B921: 38 SEC 3D/B922: E9 01 SBC #$01 ; previous letter 3D/B924: 85 08 STA $08 3D/B926: 10 CF BPL $B8F7 3D/B928: A9 05 LDA #$05 ; loop to last letter 3D/B92A: 85 08 STA $08 3D/B92C: 38 SEC 3D/B92D: 60 RTS 3D/B92E: A5 24 LDA $24 3D/B930: F0 C5 BEQ $B8F7 ; branch if A button is not pressed 3D/B932: 20 74 8F JSR $8F74 ; cursor sound effect 3D/B935: A5 08 LDA $08 3D/B937: C9 06 CMP #$06 3D/B939: 90 06 BCC $B941 ; branch if less than 6 letters 3D/B93B: A9 00 LDA #$00 3D/B93D: 85 08 STA $08 3D/B93F: 18 CLC 3D/B940: 60 RTS 3D/B941: A5 08 LDA $08 3D/B943: 05 7F ORA $7F 3D/B945: A8 TAY 3D/B946: AE F0 7A LDX $7AF0 3D/B949: BD 02 7A LDA $7A02,X 3D/B94C: 99 06 61 STA $6106,Y ; copy letter to character name in sram 3D/B94F: E6 08 INC $08 3D/B951: 20 B7 B9 JSR $B9B7 ; draw character name window 3D/B954: A5 08 LDA $08 3D/B956: C9 06 CMP #$06 3D/B958: B0 03 BCS $B95D 3D/B95A: 4C F7 B8 JMP $B8F7 3D/B95D: A5 07 LDA $07 3D/B95F: F0 F9 BEQ $B95A 3D/B961: C9 01 CMP #$01 ; character slot 1 3D/B963: F0 12 BEQ $B977 3D/B965: C9 02 CMP #$02 ; character slot 2 3D/B967: F0 07 BEQ $B970 3D/B969: A4 7F LDY $7F 3D/B96B: A2 80 LDX #$80 3D/B96D: 20 81 B9 JSR $B981 ; check for duplicate character names 3D/B970: A4 7F LDY $7F 3D/B972: A2 40 LDX #$40 3D/B974: 20 81 B9 JSR $B981 ; check for duplicate character names 3D/B977: A4 7F LDY $7F 3D/B979: A2 00 LDX #$00 3D/B97B: 20 81 B9 JSR $B981 ; check for duplicate character names 3D/B97E: 4C F7 B8 JMP $B8F7 ; [ check for duplicate character names ] 3D/B981: B9 06 61 LDA $6106,Y 3D/B984: DD 06 61 CMP $6106,X 3D/B987: D0 2D BNE $B9B6 3D/B989: B9 07 61 LDA $6107,Y 3D/B98C: DD 07 61 CMP $6107,X 3D/B98F: D0 25 BNE $B9B6 3D/B991: B9 08 61 LDA $6108,Y 3D/B994: DD 08 61 CMP $6108,X 3D/B997: D0 1D BNE $B9B6 3D/B999: B9 09 61 LDA $6109,Y 3D/B99C: DD 09 61 CMP $6109,X 3D/B99F: D0 15 BNE $B9B6 3D/B9A1: B9 0A 61 LDA $610A,Y 3D/B9A4: DD 0A 61 CMP $610A,X 3D/B9A7: D0 0D BNE $B9B6 3D/B9A9: B9 0B 61 LDA $610B,Y 3D/B9AC: DD 0B 61 CMP $610B,X 3D/B9AF: D0 05 BNE $B9B6 3D/B9B1: C6 08 DEC $08 3D/B9B3: 20 29 D5 JSR $D529 ; error sound effect 3D/B9B6: 60 RTS ; [ draw character name window ] 3D/B9B7: 20 A8 A3 JSR $A3A8 ; save window variables 3D/B9BA: A2 22 LDX #$22 ; name change - name window 3D/B9BC: 20 A6 AA JSR $AAA6 3D/B9BF: A9 6D LDA #$6D ; $016D: character name 3D/B9C1: 20 B1 D1 JSR $D1B1 ; load character text string 3D/B9C4: 20 03 BC JSR $BC03 ; draw character name 3D/B9C7: 4C 8E A3 JMP $A38E ; restore window variables ; [ draw character name cursor ] 3D/B9CA: E6 F0 INC $F0 3D/B9CC: A5 08 LDA $08 3D/B9CE: C9 06 CMP #$06 3D/B9D0: 90 01 BCC $B9D3 ; return if at letter 6 3D/B9D2: 60 RTS 3D/B9D3: A5 F0 LDA $F0 3D/B9D5: 29 08 AND #$08 ; flash every 8 frames 3D/B9D7: D0 F9 BNE $B9D2 3D/B9D9: A6 26 LDX $26 3D/B9DB: A9 27 LDA #$27 ; y position 3D/B9DD: 9D 00 02 STA $0200,X 3D/B9E0: A9 D0 LDA #$D0 3D/B9E2: 9D 01 02 STA $0201,X 3D/B9E5: A9 03 LDA #$03 3D/B9E7: 9D 02 02 STA $0202,X 3D/B9EA: A5 08 LDA $08 ; current letter 3D/B9EC: 0A ASL 3D/B9ED: 0A ASL 3D/B9EE: 0A ASL 3D/B9EF: 18 CLC 3D/B9F0: 69 48 ADC #$48 3D/B9F2: 9D 03 02 STA $0203,X ; x position 3D/B9F5: 60 RTS ; [ game load menu ] ; return clear carry for new game, set carry to load saved game 3D/B9F6: A9 3C LDA #$3C ; return bank 3D/B9F8: 85 57 STA $57 3D/B9FA: A9 00 LDA #$00 3D/B9FC: 8D 01 20 STA $2001 3D/B9FF: AA TAX 3D/BA00: 9D 00 61 STA $6100,X ; clear character properties 3D/BA03: E8 INX 3D/BA04: D0 FA BNE $BA00 3D/BA06: A9 05 LDA #$05 ; default message speed: 5 3D/BA08: 85 08 STA $08 3D/BA0A: AD 10 64 LDA $6410 ; slot 1 message speed 3D/BA0D: 85 09 STA $09 3D/BA0F: AD 10 68 LDA $6810 ; slot 2 message speed 3D/BA12: 85 0A STA $0A 3D/BA14: AD 10 6C LDA $6C10 ; slot 3 message speed 3D/BA17: 85 0B STA $0B 3D/BA19: 20 06 DD JSR $DD06 ; load menu graphics 3D/BA1C: 20 C7 BB JSR $BBC7 ; init ppu 3D/BA1F: 20 00 FF JSR $FF00 ; wait for vblank 3D/BA22: A9 02 LDA #$02 3D/BA24: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/BA27: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3D/BA2A: A5 FF LDA $FF 3D/BA2C: 8D 00 20 STA $2000 3D/BA2F: A9 1E LDA #$1E 3D/BA31: 8D 01 20 STA $2001 3D/BA34: A9 0C LDA #$0C ; set cursor position 3D/BA36: 8D F0 78 STA $78F0 3D/BA39: A9 00 LDA #$00 3D/BA3B: 8D F0 79 STA $79F0 3D/BA3E: 8D F0 7A STA $7AF0 3D/BA41: A9 01 LDA #$01 ; song id 3D/BA43: 8D 43 7F STA $7F43 3D/BA46: A9 01 LDA #$01 ; play new song 3D/BA48: 8D 42 7F STA $7F42 3D/BA4B: 20 A0 A9 JSR $A9A0 ; init save slot windows 3D/BA4E: 20 EF BB JSR $BBEF ; draw new game windows 3D/BA51: 20 AD BB JSR $BBAD ; init game load menu cursor 3D/BA54: 20 00 FF JSR $FF00 ; wait for vblank ; start of frame loop 3D/BA57: A9 02 LDA #$02 3D/BA59: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/BA5C: 20 86 C4 JSR $C486 ; clear oam data 3D/BA5F: 20 58 C7 JSR $C758 ; update sound 3D/BA62: AD F0 78 LDA $78F0 3D/BA65: 4A LSR 3D/BA66: 4A LSR 3D/BA67: 29 03 AND #$03 3D/BA69: C9 03 CMP #$03 3D/BA6B: B0 05 BCS $BA72 3D/BA6D: C9 00 CMP #$00 3D/BA6F: 20 41 82 JSR $8241 ; draw character sprites 3D/BA72: 20 19 91 JSR $9119 ; draw cursor sprite 1 3D/BA75: 20 DD BA JSR $BADD ; update player input 3D/BA78: A5 24 LDA $24 3D/BA7A: F0 D8 BEQ $BA54 ; branch if A button is not pressed 3D/BA7C: 20 74 8F JSR $8F74 ; cursor sound effect 3D/BA7F: AD F0 78 LDA $78F0 3D/BA82: C9 0C CMP #$0C 3D/BA84: B0 40 BCS $BAC6 ; branch if cursor position 3 (new game) 3D/BA86: 4A LSR 3D/BA87: 4A LSR 3D/BA88: 85 80 STA $80 ; selected slot 3D/BA8A: 49 03 EOR #$03 3D/BA8C: C9 03 CMP #$03 3D/BA8E: D0 02 BNE $BA92 3D/BA90: A9 04 LDA #$04 ; save slot 1, check bit 2 3D/BA92: 25 62 AND $62 3D/BA94: F0 30 BEQ $BAC6 ; branch if save slot is not valid ; load game 3D/BA96: A5 80 LDA $80 ; selected save slot 3D/BA98: 48 PHA 3D/BA99: 0A ASL 3D/BA9A: 0A ASL 3D/BA9B: 18 CLC 3D/BA9C: 69 64 ADC #$64 ; $6400 (save slot) 3D/BA9E: 85 81 STA $81 3D/BAA0: A9 00 LDA #$00 3D/BAA2: 85 80 STA $80 3D/BAA4: 85 82 STA $82 3D/BAA6: A9 60 LDA #$60 ; $6000 (active slot) 3D/BAA8: 85 83 STA $83 3D/BAAA: A0 00 LDY #$00 3D/BAAC: B1 80 LDA ($80),Y 3D/BAAE: 91 82 STA ($82),Y 3D/BAB0: C8 INY 3D/BAB1: D0 F9 BNE $BAAC 3D/BAB3: E6 81 INC $81 3D/BAB5: E6 83 INC $83 3D/BAB7: A5 83 LDA $83 3D/BAB9: 29 03 AND #$03 ; copy 1024 bytes 3D/BABB: D0 EF BNE $BAAC 3D/BABD: 68 PLA 3D/BABE: AA TAX 3D/BABF: B5 09 LDA $09,X 3D/BAC1: 8D 10 60 STA $6010 ; message speed 3D/BAC4: 38 SEC ; load saved game 3D/BAC5: 60 RTS ; new game 3D/BAC6: A9 3A LDA #$3A 3D/BAC8: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/BACB: 20 0C 85 JSR $850C ; init sram 3D/BACE: A9 3C LDA #$3C 3D/BAD0: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/BAD3: A5 08 LDA $08 3D/BAD5: 8D 10 60 STA $6010 ; message speed 3D/BAD8: 20 95 B8 JSR $B895 ; name change menu 3D/BADB: 18 CLC ; new game 3D/BADC: 60 RTS ; [ update player input (game load menu) ] 3D/BADD: 20 75 91 JSR $9175 ; get cursor movement direction 3D/BAE0: 29 0F AND #$0F 3D/BAE2: F0 40 BEQ $BB24 ; return if no direction buttons pressed 3D/BAE4: C9 04 CMP #$04 3D/BAE6: 90 3D BCC $BB25 ; branch if left or right 3D/BAE8: C9 08 CMP #$08 3D/BAEA: B0 0E BCS $BAFA ; down 3D/BAEC: AD F0 78 LDA $78F0 3D/BAEF: 18 CLC 3D/BAF0: 69 04 ADC #$04 3D/BAF2: C9 10 CMP #$10 3D/BAF4: 90 0E BCC $BB04 3D/BAF6: A9 00 LDA #$00 3D/BAF8: F0 0A BEQ $BB04 ; up 3D/BAFA: AD F0 78 LDA $78F0 3D/BAFD: 38 SEC 3D/BAFE: E9 04 SBC #$04 3D/BB00: B0 02 BCS $BB04 3D/BB02: A9 0C LDA #$0C 3D/BB04: 8D F0 78 STA $78F0 3D/BB07: C9 0C CMP #$0C 3D/BB09: A2 00 LDX #$00 3D/BB0B: B0 12 BCS $BB1F ; branch if cursor is on new game 3D/BB0D: 4A LSR 3D/BB0E: 4A LSR 3D/BB0F: AA TAX 3D/BB10: E8 INX 3D/BB11: 49 03 EOR #$03 3D/BB13: C9 03 CMP #$03 3D/BB15: D0 02 BNE $BB19 3D/BB17: A9 04 LDA #$04 3D/BB19: 25 62 AND $62 3D/BB1B: D0 02 BNE $BB1F ; branch if slot is valid 3D/BB1D: A2 00 LDX #$00 ; use default message speed 3D/BB1F: B5 08 LDA $08,X ; save slot message speed 3D/BB21: 4C 7D BB JMP $BB7D ; wait one frame 3D/BB24: 60 RTS 3D/BB25: C9 02 CMP #$02 3D/BB27: B0 18 BCS $BB41 ; right 3D/BB29: AD F0 78 LDA $78F0 3D/BB2C: C9 0C CMP #$0C 3D/BB2E: B0 29 BCS $BB59 ; branch if cursor is on new game 3D/BB30: 4A LSR 3D/BB31: 4A LSR 3D/BB32: AA TAX 3D/BB33: 49 03 EOR #$03 3D/BB35: C9 03 CMP #$03 3D/BB37: D0 02 BNE $BB3B 3D/BB39: A9 04 LDA #$04 3D/BB3B: 25 62 AND $62 3D/BB3D: D0 2E BNE $BB6D 3D/BB3F: F0 18 BEQ $BB59 ; left 3D/BB41: AD F0 78 LDA $78F0 3D/BB44: C9 0C CMP #$0C 3D/BB46: B0 19 BCS $BB61 3D/BB48: 4A LSR 3D/BB49: 4A LSR 3D/BB4A: AA TAX 3D/BB4B: 49 03 EOR #$03 3D/BB4D: C9 03 CMP #$03 3D/BB4F: D0 02 BNE $BB53 3D/BB51: A9 04 LDA #$04 3D/BB53: 25 62 AND $62 3D/BB55: D0 1D BNE $BB74 3D/BB57: F0 08 BEQ $BB61 ; increase message speed (new game) 3D/BB59: A5 08 LDA $08 3D/BB5B: 18 CLC 3D/BB5C: 69 01 ADC #$01 3D/BB5E: 4C 66 BB JMP $BB66 ; decrease message speed (new game) 3D/BB61: A5 08 LDA $08 3D/BB63: 38 SEC 3D/BB64: E9 01 SBC #$01 3D/BB66: 29 07 AND #$07 3D/BB68: 85 08 STA $08 3D/BB6A: 4C 7D BB JMP $BB7D ; wait one frame ; increase message speed (save slot) 3D/BB6D: B5 09 LDA $09,X ; save slot message speed 3D/BB6F: 18 CLC 3D/BB70: 69 01 ADC #$01 3D/BB72: D0 05 BNE $BB79 ; decrease message speed (save slot) 3D/BB74: B5 09 LDA $09,X 3D/BB76: 38 SEC 3D/BB77: E9 01 SBC #$01 3D/BB79: 29 07 AND #$07 3D/BB7B: 95 09 STA $09,X ; fallthrough ; [ wait one frame (game load menu) ] ; A: message speed 3D/BB7D: 48 PHA 3D/BB7E: 20 00 FF JSR $FF00 ; wait for vblank 3D/BB81: 2C 02 20 BIT $2002 3D/BB84: A9 20 LDA #$20 ; ppu $207B 3D/BB86: 8D 06 20 STA $2006 3D/BB89: A9 7B LDA #$7B 3D/BB8B: 8D 06 20 STA $2006 3D/BB8E: 68 PLA 3D/BB8F: 18 CLC 3D/BB90: 69 81 ADC #$81 ; set message speed value 3D/BB92: 8D 07 20 STA $2007 3D/BB95: A9 00 LDA #$00 3D/BB97: 8D 05 20 STA $2005 3D/BB9A: 8D 05 20 STA $2005 3D/BB9D: A5 FF LDA $FF 3D/BB9F: 8D 00 20 STA $2000 3D/BBA2: 4C 58 C7 JMP $C758 ; update sound ; unused ??? 3D/BBA5: 20 21 22 20 3D/BBA9: DD DD DD 51 ; [ init game load menu cursor ] 3D/BBAD: A2 0F LDX #$0F 3D/BBAF: BD 00 79 LDA $7900,X ; copy cursor 2 positions to cursor 1 3D/BBB2: 9D 00 78 STA $7800,X 3D/BBB5: CA DEX 3D/BBB6: 10 F7 BPL $BBAF 3D/BBB8: A9 10 LDA #$10 ; 4 cursor positions 3D/BBBA: 8D F1 78 STA $78F1 3D/BBBD: A9 01 LDA #$01 ; show cursor 1 3D/BBBF: 85 A2 STA $A2 3D/BBC1: A5 08 LDA $08 3D/BBC3: 20 7D BB JSR $BB7D ; wait one frame 3D/BBC6: 60 RTS ; [ init ppu (game load menu) ] 3D/BBC7: 20 BB F7 JSR $F7BB ; init ppu name table (menu) 3D/BBCA: A9 88 LDA #$88 3D/BBCC: 85 FF STA $FF 3D/BBCE: 8D 00 20 STA $2000 3D/BBD1: A9 01 LDA #$01 3D/BBD3: 85 37 STA $37 3D/BBD5: 20 58 8F JSR $8F58 3D/BBD8: A9 00 LDA #$00 ; hide all cursors 3D/BBDA: 85 A2 STA $A2 3D/BBDC: 85 A3 STA $A3 3D/BBDE: 85 A4 STA $A4 3D/BBE0: 20 86 C4 JSR $C486 ; clear oam data 3D/BBE3: 20 00 FF JSR $FF00 ; wait for vblank 3D/BBE6: 20 00 FF JSR $FF00 ; wait for vblank 3D/BBE9: A9 02 LDA #$02 3D/BBEB: 8D 14 40 STA $4014 ; dma oam data to ppu 3D/BBEE: 60 RTS ; [ draw new game windows ] 3D/BBEF: A2 0C LDX #$0C 3D/BBF1: 20 F1 AA JSR $AAF1 ; open menu window 3D/BBF4: A9 22 LDA #$22 ; "\choice[0x01]New Game" 3D/BBF6: 20 78 A6 JSR $A678 ; load menu text 3D/BBF9: A2 21 LDX #$21 3D/BBFB: 20 F1 AA JSR $AAF1 ; open menu window 3D/BBFE: A9 23 LDA #$23 ; "Msg.Speed \0x06" 3D/BC00: 4C 78 A6 JMP $A678 ; load menu text ; [ draw character name ] ; for name change menu 3D/BC03: A9 18 LDA #$18 ; $7B01 (character name, loaded at 3D/D1B1) 3D/BC05: 85 93 STA $93 3D/BC07: A9 01 LDA #$01 3D/BC09: 85 3E STA $3E 3D/BC0B: A9 7B LDA #$7B 3D/BC0D: 85 3F STA $3F 3D/BC0F: 4C 61 EB JMP $EB61 ; load next line of text ; -------------------------------------------------------------------------- ; [ interlace inventory before battle ] 3D/BC12: 20 4D BC JSR $BC4D ; copy inventory 3D/BC15: A0 00 LDY #$00 3D/BC17: A2 00 LDX #$00 3D/BC19: BD 00 74 LDA $7400,X 3D/BC1C: 99 C0 60 STA $60C0,Y 3D/BC1F: BD 20 74 LDA $7420,X 3D/BC22: 99 C1 60 STA $60C1,Y 3D/BC25: C8 INY 3D/BC26: C8 INY 3D/BC27: E8 INX 3D/BC28: E0 20 CPX #$20 3D/BC2A: 90 ED BCC $BC19 3D/BC2C: 60 RTS ; [ deinterlace inventory after battle ] 3D/BC2D: 20 4D BC JSR $BC4D ; copy inventory 3D/BC30: A0 00 LDY #$00 3D/BC32: A2 00 LDX #$00 3D/BC34: B9 00 74 LDA $7400,Y 3D/BC37: 9D C0 60 STA $60C0,X 3D/BC3A: B9 01 74 LDA $7401,Y 3D/BC3D: 9D E0 60 STA $60E0,X 3D/BC40: C8 INY 3D/BC41: C8 INY 3D/BC42: E8 INX 3D/BC43: E0 20 CPX #$20 3D/BC45: 90 ED BCC $BC34 3D/BC47: A5 FF LDA $FF 3D/BC49: 8D 00 20 STA $2000 3D/BC4C: 60 RTS ; [ copy inventory ] 3D/BC4D: A2 00 LDX #$00 3D/BC4F: BD C0 60 LDA $60C0,X 3D/BC52: 9D 00 74 STA $7400,X 3D/BC55: E8 INX 3D/BC56: E0 40 CPX #$40 3D/BC58: 90 F5 BCC $BC4F 3D/BC5A: 60 RTS ; [ check random battle ] ; carry clear for world map, set for normal map 3D/BC5B: 90 0B BCC $BC68 3D/BC5D: 4C B9 BD JMP $BDB9 3D/BC60: A5 44 LDA $44 ; no battle 3D/BC62: 29 3F AND #$3F 3D/BC64: 85 44 STA $44 3D/BC66: 18 CLC 3D/BC67: 60 RTS ; world map 3D/BC68: A5 6C LDA $6C 3D/BC6A: D0 F4 BNE $BC60 ; branch if an event is running 3D/BC6C: A9 2E LDA #$2E 3D/BC6E: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/BC71: A5 78 LDA $78 3D/BC73: D0 17 BNE $BC8C ; branch if not floating continent ; floating continent 3D/BC75: AD 47 9D LDA $9D47 ; 2E/9D47 (no vehicle battle rate: 5) 3D/BC78: A6 42 LDX $42 3D/BC7A: F0 49 BEQ $BCC5 ; branch if no vehicle 3D/BC7C: AD 48 9D LDA $9D48 ; 2E/9D48 (canoe battle rate: 5) 3D/BC7F: E0 02 CPX #$02 3D/BC81: F0 42 BEQ $BCC5 ; branch if canoe 3D/BC83: AD 49 9D LDA $9D49 ; 2E/9D49 (ship battle rate: 5) 3D/BC86: E0 03 CPX #$03 3D/BC88: F0 3B BEQ $BCC5 ; branch if ship 3D/BC8A: D0 D4 BNE $BC60 ; flooded world 3D/BC8C: C9 02 CMP #$02 3D/BC8E: D0 09 BNE $BC99 3D/BC90: AD 4A 9D LDA $9D4A ; 2E/9D4A (no vehicle battle rate: 5) 3D/BC93: A6 42 LDX $42 3D/BC95: D0 C9 BNE $BC60 ; branch if in a vehicle 3D/BC97: F0 2C BEQ $BCC5 ; surface world 3D/BC99: C9 03 CMP #$03 3D/BC9B: D0 25 BNE $BCC2 3D/BC9D: AD 4B 9D LDA $9D4B ; 2E/9D4B (no vehicle battle rate: 5) 3D/BCA0: A6 42 LDX $42 3D/BCA2: F0 21 BEQ $BCC5 ; branch if no vehicle 3D/BCA4: AD 4C 9D LDA $9D4C ; 2E/9D4C (canoe battle rate: 5) 3D/BCA7: E0 02 CPX #$02 3D/BCA9: F0 1A BEQ $BCC5 3D/BCAB: AD 4D 9D LDA $9D4D ; 2E/9D4D (ship battle rate: 5) 3D/BCAE: E0 03 CPX #$03 3D/BCB0: F0 13 BEQ $BCC5 3D/BCB2: AD 2F 60 LDA $602F 3D/BCB5: 4A LSR 3D/BCB6: 90 07 BCC $BCBF 3D/BCB8: AD 4E 9D LDA $9D4E ; 2E/9D4E (chocobo ??? battle rate: 18) 3D/BCBB: E0 04 CPX #$04 3D/BCBD: B0 06 BCS $BCC5 ; branch if in an airship 3D/BCBF: 4C 60 BC JMP $BC60 ; underwater 3D/BCC2: AD 4F 9D LDA $9D4F ; 2E/9D4F (underwater battle rate: 7) 3D/BCC5: 85 80 STA $80 3D/BCC7: 20 11 C7 JSR $C711 ; get random number 3D/BCCA: C5 80 CMP $80 3D/BCCC: 90 03 BCC $BCD1 ; battle if (0..255) < (battle rate) 3D/BCCE: 4C 60 BC JMP $BC60 3D/BCD1: A5 78 LDA $78 3D/BCD3: D0 32 BNE $BD07 ; floating continent 3D/BCD5: A6 42 LDX $42 3D/BCD7: F0 0D BEQ $BCE6 3D/BCD9: AD 40 9D LDA $9D40 ; canoe battle group: $35 3D/BCDC: E0 02 CPX #$02 3D/BCDE: F0 03 BEQ $BCE3 3D/BCE0: AD 41 9D LDA $9D41 ; ship battle group: $35 3D/BCE3: 4C 4D BD JMP $BD4D 3D/BCE6: A5 27 LDA $27 3D/BCE8: 18 CLC 3D/BCE9: 69 07 ADC #$07 3D/BCEB: 29 7F AND #$7F 3D/BCED: 4A LSR 3D/BCEE: 4A LSR 3D/BCEF: 4A LSR 3D/BCF0: 4A LSR 3D/BCF1: 4A LSR 3D/BCF2: 85 80 STA $80 3D/BCF4: A5 28 LDA $28 3D/BCF6: 18 CLC 3D/BCF7: 69 07 ADC #$07 3D/BCF9: 29 60 AND #$60 3D/BCFB: 4A LSR 3D/BCFC: 4A LSR 3D/BCFD: 4A LSR 3D/BCFE: 05 80 ORA $80 3D/BD00: AA TAX 3D/BD01: BD F0 9C LDA $9CF0,X ; 2E/9CF0 (world 0 battle groups) 3D/BD04: 4C 4D BD JMP $BD4D ; flooded world 3D/BD07: C9 02 CMP #$02 3D/BD09: D0 06 BNE $BD11 3D/BD0B: AD 42 9D LDA $9D42 ; canoe battle group: $6B 3D/BD0E: 4C 4D BD JMP $BD4D ; surface world 3D/BD11: C9 03 CMP #$03 3D/BD13: D0 35 BNE $BD4A 3D/BD15: AD 43 9D LDA $9D43 ; canoe battle group: $54 3D/BD18: A6 42 LDX $42 3D/BD1A: E0 02 CPX #$02 3D/BD1C: F0 29 BEQ $BD47 3D/BD1E: AD 44 9D LDA $9D44 ; ship battle group: $54 3D/BD21: E0 03 CPX #$03 3D/BD23: F0 22 BEQ $BD47 3D/BD25: AD 45 9D LDA $9D45 ; airship ??? battle group: $5F 3D/BD28: E0 04 CPX #$04 3D/BD2A: B0 B7 BCS $BCE3 3D/BD2C: A5 27 LDA $27 3D/BD2E: 18 CLC 3D/BD2F: 69 07 ADC #$07 3D/BD31: 4A LSR 3D/BD32: 4A LSR 3D/BD33: 4A LSR 3D/BD34: 4A LSR 3D/BD35: 4A LSR 3D/BD36: 85 80 STA $80 3D/BD38: A5 28 LDA $28 3D/BD3A: 18 CLC 3D/BD3B: 69 07 ADC #$07 3D/BD3D: 29 E0 AND #$E0 3D/BD3F: 4A LSR 3D/BD40: 4A LSR 3D/BD41: 05 80 ORA $80 3D/BD43: AA TAX 3D/BD44: BD 00 9D LDA $9D00,X ; 2E/9D00 (world 2 battle groups) 3D/BD47: 4C 4D BD JMP $BD4D ; underwater 3D/BD4A: AD 46 9D LDA $9D46 ; underwater battle group: $63 ; fallthrough ; [ choose from battle group ] 3D/BD4D: A0 00 LDY #$00 3D/BD4F: 84 81 STY $81 3D/BD51: 0A ASL 3D/BD52: 26 81 ROL $81 3D/BD54: 0A ASL 3D/BD55: 26 81 ROL $81 3D/BD57: 0A ASL 3D/BD58: 26 81 ROL $81 3D/BD5A: 18 CLC 3D/BD5B: 69 F0 ADC #$F0 ; 2E/94F0 (world map battle groups) 3D/BD5D: 85 80 STA $80 3D/BD5F: A5 81 LDA $81 3D/BD61: 69 94 ADC #$94 3D/BD63: 85 81 STA $81 3D/BD65: E6 F7 INC $F7 3D/BD67: A6 F7 LDX $F7 3D/BD69: BD 00 FE LDA $FE00,X ; random number table 3D/BD6C: 29 3F AND #$3F 3D/BD6E: AA TAX 3D/BD6F: BC 78 BD LDY $BD78,X 3D/BD72: B1 80 LDA ($80),Y 3D/BD74: 85 6A STA $6A ; set battle id 3D/BD76: 18 CLC 3D/BD77: 60 RTS ; battle probabilities ; 0: 12/256 ; 1: 12/256 ; 2: 12/256 ; 3: 12/256 ; 4: 6/256 ; 5: 6/256 ; 6: 3/256 ; 7: 1/256 3D/BD78: 00 00 00 00 00 00 00 00 00 00 00 00 01 01 01 01 3D/BD88: 01 01 01 01 01 01 01 01 02 02 02 02 02 02 02 02 3D/BD98: 02 02 02 02 03 03 03 03 03 03 03 03 03 03 03 03 3D/BDA8: 04 04 04 04 04 04 05 05 05 05 05 05 06 06 06 07 3D/BDB8: 60 RTS ; normal map 3D/BDB9: A5 6C LDA $6C 3D/BDBB: D0 FB BNE $BDB8 ; return if in an event 3D/BDBD: 20 11 C7 JSR $C711 ; get random number 3D/BDC0: C5 F8 CMP $F8 3D/BDC2: B0 F4 BCS $BDB8 3D/BDC4: A9 2E LDA #$2E 3D/BDC6: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/BDC9: A6 48 LDX $48 3D/BDCB: A5 78 LDA $78 3D/BDCD: D0 0B BNE $BDDA ; branch if not world 0 3D/BDCF: BD F0 92 LDA $92F0,X ; world 0 battle groups 3D/BDD2: 20 4D BD JSR $BD4D ; choose from battle group 3D/BDD5: A9 20 LDA #$20 ; battle 3D/BDD7: 85 AB STA $AB 3D/BDD9: 60 RTS 3D/BDDA: BD F0 93 LDA $93F0,X ; world 2 battle groups 3D/BDDD: 4C D2 BD JMP $BDD2 ; -------------------------------------------------------------------------- ; [ load misc. world map sprite graphics ] 3D/BDE0: A9 0B LDA #$0B 3D/BDE2: 20 06 FF JSR $FF06 ; switch prg bank 0 3D/BDE5: A9 88 LDA #$88 ; 0B/8800 (canoe, chocobo, ship, enterprise) 3D/BDE7: 85 81 STA $81 3D/BDE9: A9 00 LDA #$00 3D/BDEB: 85 80 STA $80 3D/BDED: A2 06 LDX #$06 ; size: $0600 3D/BDEF: A9 12 LDA #$12 ; ppu $1200 3D/BDF1: 20 92 BE JSR $BE92 3D/BDF4: 2C 20 60 BIT $6020 3D/BDF7: 50 03 BVC $BDFC ; branch if cid's airship is destroyed 3D/BDF9: 20 7C BE JSR $BE7C 3D/BDFC: AD 20 60 LDA $6020 3D/BDFF: 4A LSR 3D/BE00: 90 0B BCC $BE0D ; branch if boulder is destroyed 3D/BE02: A9 80 LDA #$80 ; 0B/8F80 (cid's airship) 3D/BE04: 85 80 STA $80 3D/BE06: A9 8F LDA #$8F 3D/BE08: 85 81 STA $81 3D/BE0A: 20 7C BE JSR $BE7C 3D/BE0D: A9 00 LDA #$00 ; 0B/8700 (explosions ???) 3D/BE0F: 85 80 STA $80 3D/BE11: A9 87 LDA #$87 3D/BE13: 85 81 STA $81 3D/BE15: A2 01 LDX #$01 ; size: $0100 3D/BE17: A9 18 LDA #$18 ; ppu $1800 3D/BE19: 20 92 BE JSR $BE92 3D/BE1C: A9 9E LDA #$9E ; 0B/9E80 (boulder, something else ???) 3D/BE1E: 85 81 STA $81 3D/BE20: A0 80 LDY #$80 3D/BE22: A2 80 LDX #$80 3D/BE24: 20 AD BE JSR $BEAD 3D/BE27: A9 99 LDA #$99 ; 0B/9900 (leviathan shadow) 3D/BE29: 85 81 STA $81 3D/BE2B: A0 00 LDY #$00 3D/BE2D: A2 80 LDX #$80 3D/BE2F: 20 AD BE JSR $BEAD 3D/BE32: A9 80 LDA #$80 ; 0B/9A80 (invincible) 3D/BE34: 85 80 STA $80 3D/BE36: A9 9A LDA #$9A 3D/BE38: 85 81 STA $81 3D/BE3A: A9 1C LDA #$1C ; ppu $1C00 3D/BE3C: A2 04 LDX #$04 ; size: $0400 3D/BE3E: 20 92 BE JSR $BE92 3D/BE41: A5 78 LDA $78 3D/BE43: 4A LSR 3D/BE44: F0 1E BEQ $BE64 ; surface world / underwater 3D/BE46: A9 99 LDA #$99 ; 0B/9980 (floating continent) 3D/BE48: 85 81 STA $81 3D/BE4A: A9 80 LDA #$80 3D/BE4C: 85 80 STA $80 3D/BE4E: A2 01 LDX #$01 ; size: $0100 3D/BE50: A9 1A LDA #$1A ; ppu $1A00 3D/BE52: 20 92 BE JSR $BE92 3D/BE55: A9 00 LDA #$00 ; 0B/9F00 (bubble, fish, cannonball, chain) 3D/BE57: 85 80 STA $80 3D/BE59: A9 9F LDA #$9F 3D/BE5B: 85 81 STA $81 3D/BE5D: A2 01 LDX #$01 ; size: $0100 3D/BE5F: A9 1B LDA #$1B ; ppu $1B00 3D/BE61: 4C 92 BE JMP $BE92 ; floating continent 3D/BE64: AD 20 60 LDA $6020 3D/BE67: A2 97 LDX #$97 ; 0B/9700 (hein's castle, whirlpool) 3D/BE69: 29 0C AND #$0C 3D/BE6B: D0 02 BNE $BE6F 3D/BE6D: A2 95 LDX #$95 ; 0B/9500 (bahamut) 3D/BE6F: 86 81 STX $81 3D/BE71: A9 00 LDA #$00 3D/BE73: 85 80 STA $80 3D/BE75: A2 02 LDX #$02 ; size: $0200 3D/BE77: A9 1A LDA #$1A ; ppu $1A00 3D/BE79: 4C 92 BE JMP $BE92 ; [ load alt. airship ] ; for cid's airship and nautilus 3D/BE7C: A9 16 LDA #$16 ; ppu $1680 3D/BE7E: 8D 06 20 STA $2006 3D/BE81: A9 80 LDA #$80 3D/BE83: 8D 06 20 STA $2006 3D/BE86: D0 00 BNE $BE88 ; this does nothing ... 3D/BE88: A2 01 LDX #$01 ; size: $0100 3D/BE8A: 20 9D BE JSR $BE9D 3D/BE8D: A2 80 LDX #$80 ; size: $0080 3D/BE8F: 4C AD BE JMP $BEAD ; [ copy large data to ppu ] ; A: hi byte of ppu address ; X: size in bytes * 256 3D/BE92: 2C 02 20 BIT $2002 3D/BE95: 8D 06 20 STA $2006 3D/BE98: A9 00 LDA #$00 3D/BE9A: 8D 06 20 STA $2006 3D/BE9D: A0 00 LDY #$00 3D/BE9F: B1 80 LDA ($80),Y 3D/BEA1: 8D 07 20 STA $2007 3D/BEA4: C8 INY 3D/BEA5: D0 F8 BNE $BE9F 3D/BEA7: E6 81 INC $81 3D/BEA9: CA DEX 3D/BEAA: D0 F3 BNE $BE9F 3D/BEAC: 60 RTS ; [ copy small data to ppu ] ; X: size in bytes ; Y: offset 3D/BEAD: B1 80 LDA ($80),Y 3D/BEAF: 8D 07 20 STA $2007 3D/BEB2: C8 INY 3D/BEB3: CA DEX 3D/BEB4: D0 F7 BNE $BEAD 3D/BEB6: 60 RTS ; [ ] 3D/BEB7: A5 8A LDA $8A 3D/BEB9: C9 6A CMP #$6A 3D/BEBB: B0 01 BCS $BEBE 3D/BEBD: 60 RTS 3D/BEBE: A0 00 LDY #$00 3D/BEC0: A6 26 LDX $26 3D/BEC2: B9 00 02 LDA $0200,Y 3D/BEC5: 9D 00 02 STA $0200,X 3D/BEC8: E8 INX 3D/BEC9: C8 INY 3D/BECA: C0 10 CPY #$10 3D/BECC: 90 F4 BCC $BEC2 3D/BECE: 86 26 STX $26 3D/BED0: A2 00 LDX #$00 3D/BED2: A5 F0 LDA $F0 3D/BED4: 29 03 AND #$03 3D/BED6: D0 02 BNE $BEDA 3D/BED8: A2 10 LDX #$10 3D/BEDA: A0 00 LDY #$00 3D/BEDC: BD E9 BE LDA $BEE9,X 3D/BEDF: 99 00 02 STA $0200,Y 3D/BEE2: E8 INX 3D/BEE3: C8 INY 3D/BEE4: C0 10 CPY #$10 3D/BEE6: 90 F4 BCC $BEDC 3D/BEE8: 60 RTS 3D/BEE9: 6F FC 03 70 3D/BEED: 6F FD 03 78 3D/BEF1: 77 FE 03 70 3D/BEF5: 77 FF 03 78 3D/BEF9: 6F FD 43 70 3D/BEFD: 6F FC 43 78 3D/BF01: 77 FF 43 70 3D/BF05: 77 FE 43 78 ; [ draw ship chain ] ; starts at 3D/BF0A 3D/BF09: 60 RTS ; subroutine starts here 3D/BF0A: A5 78 LDA $78 3D/BF0C: C9 03 CMP #$03 3D/BF0E: D0 F9 BNE $BF09 ; return if not world 3 3D/BF10: AD 20 60 LDA $6020 3D/BF13: 29 20 AND #$20 3D/BF15: F0 F2 BEQ $BF09 3D/BF17: A9 75 LDA #$75 ; screen position (128,117) in pixels 3D/BF19: 85 41 STA $41 3D/BF1B: A9 80 LDA #$80 3D/BF1D: 85 40 STA $40 3D/BF1F: A9 A2 LDA #$A2 ; x position 162 3D/BF21: 38 SEC 3D/BF22: E5 27 SBC $27 ; horizontal scroll position 3D/BF24: 0A ASL 3D/BF25: 0A ASL 3D/BF26: 0A ASL 3D/BF27: 0A ASL 3D/BF28: 38 SEC 3D/BF29: E5 35 SBC $35 ; horizontal subtile position 3D/BF2B: 38 SEC 3D/BF2C: E9 08 SBC #$08 3D/BF2E: 90 D9 BCC $BF09 3D/BF30: 4A LSR 3D/BF31: 0A ASL 3D/BF32: 85 80 STA $80 3D/BF34: 0A ASL 3D/BF35: 65 80 ADC $80 3D/BF37: A8 TAY 3D/BF38: A9 06 LDA #$06 3D/BF3A: 85 81 STA $81 3D/BF3C: A6 26 LDX $26 3D/BF3E: B9 7A BF LDA $BF7A,Y 3D/BF41: 48 PHA 3D/BF42: 29 0F AND #$0F ; lo nybble is x-offset (in pixels) 3D/BF44: 18 CLC 3D/BF45: 65 40 ADC $40 3D/BF47: 85 40 STA $40 3D/BF49: 9D 03 02 STA $0203,X 3D/BF4C: 68 PLA ; hi nybble is y-offset (in pixels, signed) 3D/BF4D: 4A LSR 3D/BF4E: 4A LSR 3D/BF4F: 4A LSR 3D/BF50: 4A LSR 3D/BF51: C9 08 CMP #$08 3D/BF53: 90 07 BCC $BF5C 3D/BF55: 29 07 AND #$07 3D/BF57: 49 FF EOR #$FF 3D/BF59: 18 CLC 3D/BF5A: 69 01 ADC #$01 3D/BF5C: 18 CLC 3D/BF5D: 65 41 ADC $41 3D/BF5F: 85 41 STA $41 3D/BF61: 9D 00 02 STA $0200,X 3D/BF64: A9 B6 LDA #$B6 ; tile offset (0B/BF60) 3D/BF66: 9D 01 02 STA $0201,X 3D/BF69: A9 03 LDA #$03 3D/BF6B: 9D 02 02 STA $0202,X 3D/BF6E: E8 INX 3D/BF6F: E8 INX 3D/BF70: E8 INX 3D/BF71: E8 INX 3D/BF72: C8 INY 3D/BF73: C6 81 DEC $81 3D/BF75: D0 C7 BNE $BF3E 3D/BF77: 86 26 STX $26 3D/BF79: 60 RTS ; ship chain link positions (lo/hi nybble is x/y, relative) 3D/BF7A: 00 10 10 10 90 A0 ; 0 3D/BF80: 00 12 10 10 90 A0 ; 2 3D/BF86: 00 12 12 10 90 A0 ; 4 3D/BF8C: 00 12 12 10 92 A0 ; 6 3D/BF92: 00 14 12 10 92 A0 ; 8 3D/BF98: 00 14 12 12 92 A0 ; 10 3D/BF9E: 00 16 12 12 92 A0 ; 12 3D/BFA4: 00 16 12 12 92 A2 ; 14 3D/BFAA: 00 16 14 12 92 A2 ; 16 3D/BFB0: 00 16 16 12 92 A2 ; 18 3D/BFB6: 00 16 16 04 92 92 ; 20 3D/BFBC: 00 18 16 04 92 92 ; 22 3D/BFC2: 00 18 16 06 92 92 ; 24 3D/BFC8: 00 18 16 06 92 94 ; 26 3D/BFCE: 00 18 16 06 94 94 ; 28 3D/BFD4: 00 18 18 06 94 94 ; 30 3D/BFDA: 00 18 18 96 04 96 ; 32 3D/BFE0: 00 18 18 96 06 96 ; 34 3D/BFE6: 00 08 18 98 06 06 ; 36 3D/BFEC: 00 08 08 08 08 06 ; 38 3D/BFF2: 00 08 08 08 08 08 ; 40 3D/BFF8: 08 08 08 ; uninitialized padding 3D/BFFB: D5 FF 7D FF F7 ; -------------------------------------------------------------------------- 3E/C000: 4C 6E C0 JMP $C06E ; program start 3E/C003: 4C AF D3 JMP $D3AF ; darken/restore bg palette 3E/C006: 4C BB F7 JMP $F7BB ; init ppu name table (menu) 3E/C009: 4C 58 C7 JMP $C758 ; update sound 3E/C00C: 4C 7A D2 JMP $D27A ; update joypad input 3E/C00F: 4C 08 D3 JMP $D308 ; copy color palettes to ppu 3E/C012: 4C 66 D6 JMP $D666 ; draw inactive invincible 3E/C015: 4C 00 00 JMP $0000 ; unused 3E/C018: 4C 83 CC JMP $CC83 ; decompress world tilemap (minimap) 3E/C01B: 4C D3 D8 JMP $D8D3 ; update player sprites 3E/C01E: 4C 3A DA JMP $DA3A ; draw object sprite 3E/C021: 4C 3E C0 JMP $C03E ; update water animation buffers ; [ load prophecy text ] 3E/C024: 85 92 STA $92 ; text id 3E/C026: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C029: A2 25 LDX #$25 3E/C02B: 20 A6 AA JSR $AAA6 3E/C02E: A9 00 LDA #$00 ; 18/8000 3E/C030: 85 94 STA $94 3E/C032: A9 80 LDA #$80 3E/C034: 85 95 STA $95 3E/C036: 20 9A EE JSR $EE9A ; load text (single-page) 3E/C039: A9 3A LDA #$3A 3E/C03B: 4C 06 FF JMP $FF06 ; switch prg bank 0 ; [ update water animation buffers ] 3E/C03E: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C041: 20 F9 B7 JSR $B7F9 ; update water animation buffers 3E/C044: A9 3A LDA #$3A 3E/C046: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ battle ] 3E/C049: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C04C: 20 12 BC JSR $BC12 ; interlace inventory before battle 3E/C04F: A5 6A LDA $6A ; battle index 3E/C051: A6 6B LDX $6B ; battle bg 3E/C053: A4 78 LDY $78 ; battle flags 3E/C055: 20 00 F8 JSR $F800 ; execute battle 3E/C058: 90 03 BCC $C05D ; branch if not defeated 3E/C05A: 4C 00 C0 JMP $C000 ; program start 3E/C05D: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C060: 4C 2D BC JMP $BC2D ; deinterlace inventory after battle ; [ show minimap ] 3E/C063: A9 3A LDA #$3A 3E/C065: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/C068: 20 00 85 JSR $8500 ; show minimap 3E/C06B: 4C 8A C9 JMP $C98A ; load prg banks $3C/$3D ; [ program start ] 3E/C06E: A9 36 LDA #$36 3E/C070: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/C073: A9 00 LDA #$00 ; no sound effect 3E/C075: 8D 49 7F STA $7F49 3E/C078: 20 00 80 JSR $8000 ; init sound 3E/C07B: A9 00 LDA #$00 3E/C07D: 8D 01 20 STA $2001 3E/C080: 85 FE STA $FE 3E/C082: A9 88 LDA #$88 3E/C084: 85 FF STA $FF 3E/C086: 85 FD STA $FD 3E/C088: 8D 00 20 STA $2000 3E/C08B: A2 FF LDX #$FF 3E/C08D: 9A TXS 3E/C08E: A9 00 LDA #$00 3E/C090: 20 9E C4 JSR $C49E ; init zero page 3E/C093: 20 86 C4 JSR $C486 ; clear oam data 3E/C096: 20 00 FF JSR $FF00 ; wait for vblank 3E/C099: A9 02 LDA #$02 3E/C09B: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/C09E: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3E/C0A1: A5 FA LDA $FA 3E/C0A3: C9 77 CMP #$77 3E/C0A5: F0 1C BEQ $C0C3 ; branch if soft reset 3E/C0A7: A9 3A LDA #$3A 3E/C0A9: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/C0AC: 20 1B 85 JSR $851B ; show developer message 3E/C0AF: A9 00 LDA #$00 3E/C0B1: 8D 01 20 STA $2001 3E/C0B4: A9 77 LDA #$77 3E/C0B6: 85 FA STA $FA 3E/C0B8: 20 06 DD JSR $DD06 ; load menu graphics 3E/C0BB: A9 3A LDA #$3A 3E/C0BD: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/C0C0: 20 2D 85 JSR $852D ; prophecy 3E/C0C3: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C0C6: 20 F6 B9 JSR $B9F6 ; game load menu 3E/C0C9: 08 PHP 3E/C0CA: 20 9E C4 JSR $C49E ; init zero page 3E/C0CD: AD 09 60 LDA $6009 ; x position 3E/C0D0: 85 27 STA $27 3E/C0D2: AD 0A 60 LDA $600A ; y position 3E/C0D5: 85 28 STA $28 3E/C0D7: AD 0F 60 LDA $600F ; vehicle id 3E/C0DA: 85 46 STA $46 3E/C0DC: 85 42 STA $42 3E/C0DE: AD 08 60 LDA $6008 ; world id 3E/C0E1: 85 78 STA $78 3E/C0E3: 28 PLP 3E/C0E4: B0 07 BCS $C0ED ; branch if loading saved game 3E/C0E6: A9 00 LDA #$00 3E/C0E8: 85 48 STA $48 ; map id 3E/C0EA: 20 DC E1 JSR $E1DC ; map main ; fallthrough ; [ world map main ] 3E/C0ED: 20 59 C8 JSR $C859 ; load world map 3E/C0F0: 20 9F CF JSR $CF9F ; screen wipe in 3E/C0F3: AD 11 60 LDA $6011 3E/C0F6: 10 10 BPL $C108 ; branch if surface world not emerging 3E/C0F8: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C0FB: A9 04 LDA #$04 ; stop music 3E/C0FD: 8D 42 7F STA $7F42 3E/C100: A9 88 LDA #$88 ; sound effect $08 3E/C102: 8D 49 7F STA $7F49 3E/C105: 20 9B 93 JSR $939B ; surface world emerging cutscene 3E/C108: A2 FF LDX #$FF ; reset stack pointer 3E/C10A: 9A TXS 3E/C10B: 20 65 C7 JSR $C765 ; get tile properties 3E/C10E: 29 20 AND #$20 3E/C110: 85 43 STA $43 ; world map main loop 3E/C112: A9 3A LDA #$3A 3E/C114: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/C117: 20 00 FF JSR $FF00 ; wait for vblank 3E/C11A: A9 02 LDA #$02 3E/C11C: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/C11F: 20 15 85 JSR $8515 ; update water animation 3E/C122: 20 89 C3 JSR $C389 ; update scrolling 3E/C125: A5 F0 LDA $F0 ; increment frame counter 3E/C127: 18 CLC 3E/C128: 69 01 ADC #$01 3E/C12A: 85 F0 STA $F0 3E/C12C: A5 F1 LDA $F1 3E/C12E: 69 00 ADC #$00 3E/C130: 85 F1 STA $F1 3E/C132: 20 50 C7 JSR $C750 ; update sound 3E/C135: A5 46 LDA $46 3E/C137: 4A LSR 3E/C138: D0 0E BNE $C148 3E/C13A: A5 36 LDA $36 3E/C13C: 05 35 ORA $35 3E/C13E: C9 08 CMP #$08 3E/C140: D0 06 BNE $C148 3E/C142: A5 44 LDA $44 3E/C144: 29 20 AND #$20 3E/C146: 85 43 STA $43 3E/C148: A5 34 LDA $34 3E/C14A: D0 07 BNE $C153 3E/C14C: A5 46 LDA $46 3E/C14E: 85 42 STA $42 3E/C150: 20 E4 C1 JSR $C1E4 ; check player input/triggers 3E/C153: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C156: 20 8A B7 JSR $B78A ; update guest npc 3E/C159: 20 F9 B7 JSR $B7F9 ; update water animation buffers 3E/C15C: 20 86 C4 JSR $C486 ; clear oam data 3E/C15F: 20 3C D8 JSR $D83C ; update sprites 3E/C162: 4C 12 C1 JMP $C112 ; [ check player input/triggers (world map) ] ; subroutine starts at 3E/C1E4 ; $C0: 3E/C165: A9 00 LDA #$00 ; show player and guest npc 3E/C167: 85 7E STA $7E 3E/C169: 20 69 D4 JSR $D469 3E/C16C: A5 79 LDA $79 3E/C16E: 85 27 STA $27 3E/C170: A5 7A LDA $7A 3E/C172: 85 28 STA $28 3E/C174: A5 7B LDA $7B 3E/C176: A6 78 LDX $78 3E/C178: 85 78 STA $78 3E/C17A: C9 03 CMP #$03 3E/C17C: D0 1C BNE $C19A ; branch if not going to surface world 3E/C17E: E0 04 CPX #$04 3E/C180: D0 18 BNE $C19A ; branch if not coming from underwater 3E/C182: 20 59 C8 JSR $C859 ; load world map 3E/C185: A9 01 LDA #$01 3E/C187: 20 69 D4 JSR $D469 3E/C18A: A9 D2 LDA #$D2 3E/C18C: 8D 49 7F STA $7F49 3E/C18F: 20 D4 D6 JSR $D6D4 ; lift-off airship 3E/C192: A9 A7 LDA #$A7 3E/C194: 8D 49 7F STA $7F49 3E/C197: 4C 08 C1 JMP $C108 3E/C19A: 4C E6 C8 JMP $C8E6 ; reload world map ; $40: battle 3E/C19D: 20 4D D3 JSR $D34D ; flash screen for battle 3E/C1A0: 20 65 C7 JSR $C765 ; get tile properties 3E/C1A3: BD 01 04 LDA $0401,X ; battle bg 3E/C1A6: 85 6B STA $6B 3E/C1A8: 20 49 C0 JSR $C049 ; battle 3E/C1AB: 4C E6 C8 JMP $C8E6 ; reload world map 3E/C1AE: 70 B5 BVS $C165 ; $80: entrance 3E/C1B0: A5 42 LDA $42 3E/C1B2: D0 07 BNE $C1BB 3E/C1B4: 20 79 C3 JSR $C379 ; check if waiting for guest npc 3E/C1B7: A5 A9 LDA $A9 3E/C1B9: D0 24 BNE $C1DF ; branch if waiting for guest npc 3E/C1BB: A9 93 LDA #$93 ; sound effect $13 3E/C1BD: 8D 49 7F STA $7F49 3E/C1C0: 20 79 CF JSR $CF79 ; screen wipe out 3E/C1C3: A9 00 LDA #$00 3E/C1C5: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/C1C8: A6 45 LDX $45 ; trigger id 3E/C1CA: A5 78 LDA $78 3E/C1CC: D0 06 BNE $C1D4 ; branch if not world 0 3E/C1CE: BD 00 88 LDA $8800,X 3E/C1D1: 4C D7 C1 JMP $C1D7 3E/C1D4: BD 40 88 LDA $8840,X 3E/C1D7: 85 48 STA $48 ; set map id 3E/C1D9: 20 DC E1 JSR $E1DC ; map main 3E/C1DC: 4C ED C0 JMP $C0ED ; world map main 3E/C1DF: A9 01 LDA #$01 3E/C1E1: 85 A9 STA $A9 3E/C1E3: 60 RTS ; subroutine starts here 3E/C1E4: 24 44 BIT $44 3E/C1E6: 30 C6 BMI $C1AE 3E/C1E8: 70 B3 BVS $C19D ; branch if a battle 3E/C1EA: A5 A6 LDA $A6 3E/C1EC: 30 20 BMI $C20E ; branch if invincible is jumping 3E/C1EE: A5 6C LDA $6C 3E/C1F0: D0 1C BNE $C20E 3E/C1F2: A5 23 LDA $23 3E/C1F4: F0 03 BEQ $C1F9 3E/C1F6: 4C 69 C2 JMP $C269 3E/C1F9: A5 22 LDA $22 3E/C1FB: F0 03 BEQ $C200 3E/C1FD: 4C 58 C2 JMP $C258 3E/C200: A5 24 LDA $24 3E/C202: F0 03 BEQ $C207 3E/C204: 4C B7 C2 JMP $C2B7 3E/C207: A5 25 LDA $25 3E/C209: F0 03 BEQ $C20E 3E/C20B: 4C 82 C2 JMP $C282 3E/C20E: 24 A6 BIT $A6 3E/C210: 10 27 BPL $C239 ; branch if invincible is not jumping 3E/C212: 70 2E BVS $C242 ; return if invincible is moving 3E/C214: A5 AF LDA $AF 3E/C216: F0 2A BEQ $C242 3E/C218: C6 AF DEC $AF 3E/C21A: A5 E0 LDA $E0 ; restore facing direction 3E/C21C: 85 33 STA $33 3E/C21E: 20 5D C6 JSR $C65D ; check destination tile 3E/C221: A5 44 LDA $44 3E/C223: 29 C0 AND #$C0 3E/C225: 05 6C ORA $6C 3E/C227: F0 08 BEQ $C231 3E/C229: A9 90 LDA #$90 3E/C22B: 85 A6 STA $A6 3E/C22D: A9 00 LDA #$00 3E/C22F: 85 AF STA $AF 3E/C231: 20 67 CA JSR $CA67 ; init player movement 3E/C234: A9 01 LDA #$01 ; player is moving 3E/C236: 85 34 STA $34 3E/C238: 60 RTS 3E/C239: A5 47 LDA $47 3E/C23B: F0 06 BEQ $C243 3E/C23D: 38 SEC 3E/C23E: E9 01 SBC #$01 3E/C240: 85 47 STA $47 3E/C242: 60 RTS 3E/C243: A5 A9 LDA $A9 3E/C245: D0 0B BNE $C252 3E/C247: 20 19 D2 JSR $D219 ; execute event script / update joypad input 3E/C24A: A5 20 LDA $20 3E/C24C: 29 0F AND #$0F 3E/C24E: D0 03 BNE $C253 ; branch if any direction buttons are pressed 3E/C250: 85 4E STA $4E 3E/C252: 60 RTS ; direction button 3E/C253: 85 33 STA $33 ; set player facing direction 3E/C255: 4C FC C4 JMP $C4FC ; do player movement ; select button 3E/C258: A9 00 LDA #$00 3E/C25A: 85 22 STA $22 3E/C25C: A5 42 LDA $42 3E/C25E: D0 08 BNE $C268 3E/C260: A9 97 LDA #$97 3E/C262: 8D 49 7F STA $7F49 3E/C265: 4C 2C F7 JMP $F72C ; increment showing character 3E/C268: 60 RTS ; start button 3E/C269: A9 00 LDA #$00 3E/C26B: 85 23 STA $23 3E/C26D: A9 00 LDA #$00 3E/C26F: 20 69 D4 JSR $D469 3E/C272: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C275: A9 00 LDA #$00 3E/C277: 85 53 STA $53 3E/C279: 20 2F A5 JSR $A52F ; main menu 3E/C27C: 4C E6 C8 JMP $C8E6 ; reload world map 3E/C27F: 4C 42 C9 JMP $C942 ; check boarding invincible ; B button 3E/C282: A9 00 LDA #$00 3E/C284: 85 25 STA $25 3E/C286: A5 42 LDA $42 3E/C288: F0 F5 BEQ $C27F ; branch if no vehicle 3E/C28A: C9 07 CMP #$07 3E/C28C: D0 14 BNE $C2A2 ; return if not invincible 3E/C28E: A5 A6 LDA $A6 3E/C290: 30 10 BMI $C2A2 ; return if invincible jumping ; board invincible 3E/C292: 20 65 C7 JSR $C765 ; get tile properties 3E/C295: 29 81 AND #$81 3E/C297: 20 A3 C2 JSR $C2A3 ; check if invincible can take off ??? 3E/C29A: A9 80 LDA #$80 3E/C29C: 85 44 STA $44 3E/C29E: A9 00 LDA #$00 3E/C2A0: 85 45 STA $45 3E/C2A2: 60 RTS ; [ check if invincible can take off ??? ] 3E/C2A3: D0 09 BNE $C2AE ; branch if invincible can take off ??? 3E/C2A5: AD 2B 60 LDA $602B 3E/C2A8: 29 7F AND #$7F 3E/C2AA: 4C B3 C2 JMP $C2B3 3E/C2AD: 60 RTS 3E/C2AE: AD 2B 60 LDA $602B 3E/C2B1: 09 80 ORA #$80 3E/C2B3: 8D 2B 60 STA $602B 3E/C2B6: 60 RTS ; A button (from above) 3E/C2B7: A9 00 LDA #$00 3E/C2B9: 85 24 STA $24 3E/C2BB: A5 42 LDA $42 ; vehicle id 3E/C2BD: F0 44 BEQ $C303 3E/C2BF: C9 01 CMP #$01 3E/C2C1: F0 24 BEQ $C2E7 3E/C2C3: C9 03 CMP #$03 3E/C2C5: F0 09 BEQ $C2D0 3E/C2C7: C9 07 CMP #$07 3E/C2C9: F0 32 BEQ $C2FD 3E/C2CB: C9 04 CMP #$04 3E/C2CD: B0 15 BCS $C2E4 3E/C2CF: 60 RTS ; 3: ship 3E/C2D0: AD 20 60 LDA $6020 3E/C2D3: 29 10 AND #$10 3E/C2D5: F0 F8 BEQ $C2CF 3E/C2D7: AD 20 60 LDA $6020 3E/C2DA: 29 20 AND #$20 3E/C2DC: D0 F1 BNE $C2CF 3E/C2DE: A9 04 LDA #$04 3E/C2E0: 48 PHA 3E/C2E1: 4C 5C C3 JMP $C35C ; 4,5,6: airship 3E/C2E4: 4C A5 C7 JMP $C7A5 ; exit vehicle ; 1: chocobo 3E/C2E7: A9 80 LDA #$80 3E/C2E9: 85 B0 STA $B0 3E/C2EB: A9 70 LDA #$70 3E/C2ED: 85 B1 STA $B1 3E/C2EF: A9 6F LDA #$6F 3E/C2F1: 85 B2 STA $B2 3E/C2F3: A9 00 LDA #$00 ; no vehicle 3E/C2F5: 85 46 STA $46 3E/C2F7: 20 3A C9 JSR $C93A ; play world map song 3E/C2FA: 4C F7 C8 JMP $C8F7 ; 7: invincible 3E/C2FD: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C300: 4C 6F B6 JMP $B66F ; init invincible jump ; 0: no vehicle 3E/C303: AD 20 60 LDA $6020 3E/C306: 29 01 AND #$01 3E/C308: F0 1E BEQ $C328 3E/C30A: AD 00 60 LDA $6000 3E/C30D: F0 67 BEQ $C376 ; return if vehicle is not visible 3E/C30F: A5 27 LDA $27 3E/C311: 18 CLC 3E/C312: 69 07 ADC #$07 3E/C314: CD 01 60 CMP $6001 3E/C317: D0 5D BNE $C376 ; check x position 3E/C319: A5 28 LDA $28 3E/C31B: 18 CLC 3E/C31C: 69 07 ADC #$07 3E/C31E: CD 02 60 CMP $6002 3E/C321: D0 53 BNE $C376 ; check y position 3E/C323: A9 05 LDA #$05 ; enterprise ??? 3E/C325: 4C 4A C3 JMP $C34A 3E/C328: 2C 20 60 BIT $6020 3E/C32B: 50 49 BVC $C376 3E/C32D: AD 03 60 LDA $6003 3E/C330: C5 78 CMP $78 3E/C332: D0 42 BNE $C376 ; check vehicle world 3E/C334: A5 27 LDA $27 3E/C336: 18 CLC 3E/C337: 69 07 ADC #$07 3E/C339: CD 01 60 CMP $6001 3E/C33C: D0 38 BNE $C376 ; check x position 3E/C33E: A5 28 LDA $28 3E/C340: 18 CLC 3E/C341: 69 07 ADC #$07 3E/C343: CD 02 60 CMP $6002 3E/C346: D0 2E BNE $C376 ; check y position 3E/C348: A9 06 LDA #$06 ; nautilus ??? 3E/C34A: 48 PHA 3E/C34B: A5 42 LDA $42 3E/C34D: D0 0D BNE $C35C 3E/C34F: 20 79 C3 JSR $C379 ; check if waiting for guest npc 3E/C352: A5 A9 LDA $A9 3E/C354: F0 06 BEQ $C35C ; branch if not waiting for guest npc 3E/C356: 68 PLA 3E/C357: E6 24 INC $24 3E/C359: E6 A9 INC $A9 3E/C35B: 60 RTS 3E/C35C: A9 00 LDA #$00 3E/C35E: 85 A9 STA $A9 3E/C360: 68 PLA 3E/C361: 85 46 STA $46 3E/C363: 85 42 STA $42 3E/C365: A2 AD LDX #$AD ; sound effect $2D 3E/C367: C9 04 CMP #$04 3E/C369: D0 02 BNE $C36D 3E/C36B: A2 AA LDX #$AA ; sound effect $2A 3E/C36D: 8E 49 7F STX $7F49 3E/C370: 20 A7 D6 JSR $D6A7 3E/C373: 4C 3A C9 JMP $C93A ; play world map song 3E/C376: 4C 42 C9 JMP $C942 ; check boarding invincible ; [ check if waiting for guest npc (world map) ] 3E/C379: A5 A9 LDA $A9 3E/C37B: D0 0B BNE $C388 ; return if waiting for guest npc 3E/C37D: AD 0B 60 LDA $600B 3E/C380: F0 06 BEQ $C388 ; return if there is no guest npc 3E/C382: A5 E1 LDA $E1 3E/C384: F0 02 BEQ $C388 ; return if guest npc movement queue is empty 3E/C386: E6 A9 INC $A9 ; waiting for guest npc 3E/C388: 60 RTS ; [ update scrolling (world map) ] 3E/C389: A5 34 LDA $34 3E/C38B: F0 0B BEQ $C398 ; branch if player is not moving 3E/C38D: 20 16 C4 JSR $C416 ; update player movement 3E/C390: A5 42 LDA $42 3E/C392: D0 03 BNE $C397 3E/C394: 4C 07 C9 JMP $C907 ; do poison step damage 3E/C397: 60 RTS ; [ update ppu registers (world map) ] 3E/C398: A9 1E LDA #$1E 3E/C39A: 8D 01 20 STA $2001 ; ppu mask 3E/C39D: A5 FD LDA $FD 3E/C39F: 85 FF STA $FF 3E/C3A1: 8D 00 20 STA $2000 ; ppu control 3E/C3A4: AD 02 20 LDA $2002 ; ppu latch 3E/C3A7: A5 27 LDA $27 3E/C3A9: 0A ASL 3E/C3AA: 0A ASL 3E/C3AB: 0A ASL 3E/C3AC: 0A ASL 3E/C3AD: 05 35 ORA $35 3E/C3AF: 8D 05 20 STA $2005 ; ppu horizontal scroll 3E/C3B2: A5 2F LDA $2F 3E/C3B4: 0A ASL 3E/C3B5: 0A ASL 3E/C3B6: 0A ASL 3E/C3B7: 0A ASL 3E/C3B8: 05 36 ORA $36 3E/C3BA: 8D 05 20 STA $2005 ; ppu vertical scroll 3E/C3BD: 60 RTS ; [ update player movement (world map) ] ; subroutine starts at 3E/C416 ; right 3E/C3BE: A5 32 LDA $32 3E/C3C0: F0 03 BEQ $C3C5 ; branch if background doesn't need update 3E/C3C2: 20 79 CA JSR $CA79 ; update map background 3E/C3C5: 20 98 C3 JSR $C398 ; update ppu registers 3E/C3C8: A5 35 LDA $35 3E/C3CA: 18 CLC 3E/C3CB: 65 34 ADC $34 ; add player movement speed 3E/C3CD: 29 0F AND #$0F 3E/C3CF: F0 03 BEQ $C3D4 3E/C3D1: 85 35 STA $35 3E/C3D3: 60 RTS 3E/C3D4: 85 34 STA $34 3E/C3D6: 85 35 STA $35 3E/C3D8: A5 27 LDA $27 3E/C3DA: 18 CLC 3E/C3DB: 69 01 ADC #$01 3E/C3DD: 85 27 STA $27 3E/C3DF: 29 10 AND #$10 3E/C3E1: 46 FD LSR $FD 3E/C3E3: C9 10 CMP #$10 3E/C3E5: 26 FD ROL $FD 3E/C3E7: 60 RTS ; left 3E/C3E8: A5 32 LDA $32 3E/C3EA: F0 03 BEQ $C3EF ; branch if background doesn't need update 3E/C3EC: 20 79 CA JSR $CA79 ; update map background 3E/C3EF: 20 98 C3 JSR $C398 ; update ppu registers 3E/C3F2: A5 35 LDA $35 3E/C3F4: D0 11 BNE $C407 3E/C3F6: A5 27 LDA $27 3E/C3F8: 38 SEC 3E/C3F9: E9 01 SBC #$01 3E/C3FB: 85 27 STA $27 3E/C3FD: 29 10 AND #$10 3E/C3FF: 46 FD LSR $FD 3E/C401: C9 10 CMP #$10 3E/C403: 26 FD ROL $FD 3E/C405: A5 35 LDA $35 3E/C407: 38 SEC 3E/C408: E5 34 SBC $34 ; subtract player movement speed 3E/C40A: 29 0F AND #$0F 3E/C40C: F0 03 BEQ $C411 3E/C40E: 85 35 STA $35 3E/C410: 60 RTS 3E/C411: 85 34 STA $34 3E/C413: 85 35 STA $35 3E/C415: 60 RTS ; subroutine starts here 3E/C416: A5 33 LDA $33 ; player facing direction 3E/C418: 4A LSR 3E/C419: B0 A3 BCS $C3BE ; branch if facing right 3E/C41B: 4A LSR 3E/C41C: B0 CA BCS $C3E8 ; branch if facing left 3E/C41E: 4A LSR 3E/C41F: B0 03 BCS $C424 ; branch if facing down 3E/C421: 4C 54 C4 JMP $C454 ; jump if facing up ; down 3E/C424: A5 32 LDA $32 3E/C426: F0 09 BEQ $C431 ; branch if background doesn't need update 3E/C428: A5 36 LDA $36 3E/C42A: C9 08 CMP #$08 3E/C42C: 90 03 BCC $C431 3E/C42E: 20 79 CA JSR $CA79 ; update map background 3E/C431: 20 98 C3 JSR $C398 ; update ppu registers 3E/C434: A5 36 LDA $36 3E/C436: 18 CLC 3E/C437: 65 34 ADC $34 ; add player movement speed 3E/C439: 29 0F AND #$0F 3E/C43B: F0 03 BEQ $C440 3E/C43D: 85 36 STA $36 3E/C43F: 60 RTS 3E/C440: 85 34 STA $34 3E/C442: 85 36 STA $36 3E/C444: E6 28 INC $28 3E/C446: A5 2F LDA $2F 3E/C448: 18 CLC 3E/C449: 69 01 ADC #$01 3E/C44B: C9 0F CMP #$0F 3E/C44D: 90 02 BCC $C451 3E/C44F: E9 0F SBC #$0F 3E/C451: 85 2F STA $2F 3E/C453: 60 RTS ; up 3E/C454: A5 32 LDA $32 3E/C456: F0 09 BEQ $C461 ; branch if background doesn't need update 3E/C458: A5 36 LDA $36 3E/C45A: C9 08 CMP #$08 3E/C45C: D0 03 BNE $C461 3E/C45E: 20 79 CA JSR $CA79 ; update map background 3E/C461: 20 98 C3 JSR $C398 ; update ppu registers 3E/C464: A5 36 LDA $36 3E/C466: D0 0F BNE $C477 3E/C468: C6 28 DEC $28 3E/C46A: A5 2F LDA $2F 3E/C46C: 38 SEC 3E/C46D: E9 01 SBC #$01 3E/C46F: B0 02 BCS $C473 3E/C471: 69 0F ADC #$0F 3E/C473: 85 2F STA $2F 3E/C475: A5 36 LDA $36 3E/C477: 38 SEC 3E/C478: E5 34 SBC $34 ; subtract player movement speed 3E/C47A: 29 0F AND #$0F 3E/C47C: F0 03 BEQ $C481 3E/C47E: 85 36 STA $36 3E/C480: 60 RTS 3E/C481: 85 34 STA $34 3E/C483: 85 36 STA $36 3E/C485: 60 RTS ; [ clear oam data ] 3E/C486: A2 3F LDX #$3F 3E/C488: A9 F0 LDA #$F0 3E/C48A: 9D 00 02 STA $0200,X 3E/C48D: 9D 40 02 STA $0240,X 3E/C490: 9D 80 02 STA $0280,X 3E/C493: 9D C0 02 STA $02C0,X 3E/C496: CA DEX 3E/C497: 10 F1 BPL $C48A 3E/C499: A9 00 LDA #$00 3E/C49B: 85 26 STA $26 3E/C49D: 60 RTS ; [ init zero page ] 3E/C49E: A2 ED LDX #$ED 3E/C4A0: A9 00 LDA #$00 3E/C4A2: 95 00 STA $00,X ; clear $00-$ED 3E/C4A4: CA DEX 3E/C4A5: D0 FB BNE $C4A2 3E/C4A7: A9 1B LDA #$1B ; init npc movement rng 3E/C4A9: 05 F4 ORA $F4 3E/C4AB: 85 F4 STA $F4 3E/C4AD: A2 1F LDX #$1F 3E/C4AF: A9 0F LDA #$0F ; black 3E/C4B1: 9D C0 03 STA $03C0,X ; clear color palettes 3E/C4B4: CA DEX 3E/C4B5: 10 FA BPL $C4B1 3E/C4B7: 60 RTS ; [ do player movement (world map) ] ; starts at 3E/C4FC 3E/C4B8: A5 78 LDA $78 3E/C4BA: D0 15 BNE $C4D1 ; branch if not world 0 3E/C4BC: AD 20 60 LDA $6020 3E/C4BF: 29 04 AND #$04 3E/C4C1: F0 2C BEQ $C4EF 3E/C4C3: A5 82 LDA $82 3E/C4C5: C9 43 CMP #$43 3E/C4C7: D0 26 BNE $C4EF 3E/C4C9: A5 83 LDA $83 3E/C4CB: C9 20 CMP #$20 3E/C4CD: D0 20 BNE $C4EF 3E/C4CF: F0 15 BEQ $C4E6 3E/C4D1: A5 78 LDA $78 3E/C4D3: C9 03 CMP #$03 3E/C4D5: D0 18 BNE $C4EF ; branch if not world 3 3E/C4D7: AD 20 60 LDA $6020 3E/C4DA: 29 20 AND #$20 3E/C4DC: F0 11 BEQ $C4EF ; branch if no ship chain 3E/C4DE: A5 82 LDA $82 3E/C4E0: C9 A6 CMP #$A6 3E/C4E2: 90 02 BCC $C4E6 3E/C4E4: B0 09 BCS $C4EF 3E/C4E6: A5 43 LDA $43 3E/C4E8: 85 44 STA $44 3E/C4EA: 60 RTS 3E/C4EB: A5 43 LDA $43 3E/C4ED: 85 44 STA $44 3E/C4EF: A5 42 LDA $42 3E/C4F1: D0 06 BNE $C4F9 3E/C4F3: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C4F6: 20 DA B6 JSR $B6DA ; push to guest npc movement stack 3E/C4F9: 4C 67 CA JMP $CA67 ; init player movement ; subroutine starts here 3E/C4FC: A6 42 LDX $42 3E/C4FE: E0 02 CPX #$02 3E/C500: B0 29 BCS $C52B 3E/C502: 20 5D C6 JSR $C65D ; check destination tile 3E/C505: B0 14 BCS $C51B ; branch if not passable 3E/C507: A5 42 LDA $42 3E/C509: F0 04 BEQ $C50F ; branch if no vehicle 3E/C50B: 24 44 BIT $44 3E/C50D: 30 D7 BMI $C4E6 3E/C50F: A5 E4 LDA $E4 3E/C511: D0 D3 BNE $C4E6 3E/C513: 20 03 C6 JSR $C603 3E/C516: B0 CE BCS $C4E6 3E/C518: 4C EF C4 JMP $C4EF 3E/C51B: A5 42 LDA $42 3E/C51D: D0 C7 BNE $C4E6 3E/C51F: 20 DE C5 JSR $C5DE ; check boarding canoe 3E/C522: 90 C7 BCC $C4EB 3E/C524: 20 1B C6 JSR $C61B 3E/C527: 90 C2 BCC $C4EB 3E/C529: B0 BB BCS $C4E6 3E/C52B: D0 14 BNE $C541 3E/C52D: 20 5D C6 JSR $C65D ; check destination tile 3E/C530: 90 BD BCC $C4EF ; branch if passable 3E/C532: 20 B5 C5 JSR $C5B5 3E/C535: 90 B4 BCC $C4EB 3E/C537: 20 1B C6 JSR $C61B 3E/C53A: 90 AF BCC $C4EB 3E/C53C: B0 A8 BCS $C4E6 3E/C53E: 4C B8 C4 JMP $C4B8 3E/C541: E0 03 CPX #$03 3E/C543: D0 11 BNE $C556 3E/C545: 20 5D C6 JSR $C65D ; check destination tile 3E/C548: 90 F4 BCC $C53E ; branch if passable 3E/C54A: 20 DE C5 JSR $C5DE ; check boarding canoe 3E/C54D: 90 9C BCC $C4EB 3E/C54F: 20 B5 C5 JSR $C5B5 3E/C552: 90 97 BCC $C4EB 3E/C554: B0 90 BCS $C4E6 3E/C556: 20 5D C6 JSR $C65D ; check destination tile 3E/C559: B0 8B BCS $C4E6 ; branch if not passable 3E/C55B: A5 78 LDA $78 3E/C55D: F0 07 BEQ $C566 ; branch if on the floating continent 3E/C55F: C9 04 CMP #$04 3E/C561: F0 35 BEQ $C598 ; branch if underwater 3E/C563: 4C 66 C9 JMP $C966 ; floating continent 3E/C566: E0 C8 CPX #$C8 ; check if on an exit tile 3E/C568: D0 26 BNE $C590 3E/C56A: A5 27 LDA $27 3E/C56C: 8D 0C 60 STA $600C ; save floating continent xy position 3E/C56F: A5 28 LDA $28 3E/C571: 8D 0D 60 STA $600D 3E/C574: A9 19 LDA #$19 ; destination position (25,215) 3E/C576: 85 79 STA $79 3E/C578: A9 D7 LDA #$D7 3E/C57A: 85 7A STA $7A 3E/C57C: AD 21 60 LDA $6021 3E/C57F: 29 20 AND #$20 3E/C581: C9 01 CMP #$01 3E/C583: A9 02 LDA #$02 ; world 2 or 3 3E/C585: 69 00 ADC #$00 3E/C587: 85 7B STA $7B ; set destination world id 3E/C589: A9 C0 LDA #$C0 3E/C58B: 85 44 STA $44 3E/C58D: 4C EF C4 JMP $C4EF 3E/C590: 20 03 C6 JSR $C603 ; check for boulder explosion 3E/C593: B0 06 BCS $C59B 3E/C595: 4C EF C4 JMP $C4EF 3E/C598: 4C EF C4 JMP $C4EF 3E/C59B: 4C E6 C4 JMP $C4E6 ; [ ] 3E/C59E: A5 27 LDA $27 3E/C5A0: 18 CLC 3E/C5A1: 69 07 ADC #$07 3E/C5A3: 8D 01 60 STA $6001 3E/C5A6: A5 28 LDA $28 3E/C5A8: 18 CLC 3E/C5A9: 69 07 ADC #$07 3E/C5AB: 8D 02 60 STA $6002 3E/C5AE: A5 78 LDA $78 3E/C5B0: 8D 03 60 STA $6003 3E/C5B3: 18 CLC 3E/C5B4: 60 RTS ; [ ] 3E/C5B5: A5 44 LDA $44 3E/C5B7: 4A LSR 3E/C5B8: 90 01 BCC $C5BB 3E/C5BA: 60 RTS 3E/C5BB: A5 44 LDA $44 3E/C5BD: 29 20 AND #$20 3E/C5BF: 85 43 STA $43 3E/C5C1: AD 0B 60 LDA $600B 3E/C5C4: F0 05 BEQ $C5CB ; branch if there is no guest npc 3E/C5C6: 20 F7 C8 JSR $C8F7 3E/C5C9: E6 A9 INC $A9 3E/C5CB: A5 42 LDA $42 3E/C5CD: A2 00 LDX #$00 ; no vehicle 3E/C5CF: 86 46 STX $46 3E/C5D1: 86 42 STX $42 3E/C5D3: 48 PHA 3E/C5D4: 20 3A C9 JSR $C93A ; play world map song 3E/C5D7: 68 PLA 3E/C5D8: C9 03 CMP #$03 3E/C5DA: F0 C2 BEQ $C59E 3E/C5DC: 18 CLC 3E/C5DD: 60 RTS ; [ check boarding canoe ] ; clear carry if canoe, set carry if no canoe 3E/C5DE: AD 2E 60 LDA $602E 3E/C5E1: 4A LSR 3E/C5E2: 90 35 BCC $C619 ; canoe not obtained yet 3E/C5E4: A5 44 LDA $44 3E/C5E6: 4A LSR 3E/C5E7: 4A LSR 3E/C5E8: B0 F3 BCS $C5DD ; not a river 3E/C5EA: 20 4F C6 JSR $C64F 3E/C5ED: A2 02 LDX #$02 ; canoe 3E/C5EF: 86 46 STX $46 3E/C5F1: 86 47 STX $47 3E/C5F3: 20 3A C9 JSR $C93A ; play world map song 3E/C5F6: A5 42 LDA $42 3E/C5F8: C9 03 CMP #$03 3E/C5FA: D0 E0 BNE $C5DC ; branch if not in ship 3E/C5FC: A9 02 LDA #$02 3E/C5FE: 85 42 STA $42 3E/C600: 4C 9E C5 JMP $C59E ; [ check for boulder explosion ] ; return carry set for boulder explosion 3E/C603: A5 78 LDA $78 3E/C605: D0 D5 BNE $C5DC ; branch if not world zero 3E/C607: AD 20 60 LDA $6020 3E/C60A: 4A LSR 3E/C60B: 90 CF BCC $C5DC ; branch if boulder is destroyed 3E/C60D: A5 82 LDA $82 3E/C60F: C9 51 CMP #$51 ; (81,54) 3E/C611: D0 C9 BNE $C5DC 3E/C613: A5 83 LDA $83 3E/C615: C9 36 CMP #$36 3E/C617: D0 C3 BNE $C5DC 3E/C619: 38 SEC 3E/C61A: 60 RTS ; [ check boarding ship ] 3E/C61B: AD 20 60 LDA $6020 3E/C61E: 4A LSR 3E/C61F: B0 09 BCS $C62A 3E/C621: 29 20 AND #$20 3E/C623: D0 05 BNE $C62A 3E/C625: AD 00 60 LDA $6000 3E/C628: D0 02 BNE $C62C 3E/C62A: 38 SEC 3E/C62B: 60 RTS 3E/C62C: AD 03 60 LDA $6003 3E/C62F: C5 78 CMP $78 3E/C631: D0 F7 BNE $C62A ; check world 3E/C633: AD 01 60 LDA $6001 3E/C636: C5 82 CMP $82 3E/C638: D0 F0 BNE $C62A ; check x position 3E/C63A: AD 02 60 LDA $6002 3E/C63D: C5 83 CMP $83 3E/C63F: D0 E9 BNE $C62A ; check y position 3E/C641: 20 4F C6 JSR $C64F 3E/C644: A9 03 LDA #$03 ; ship 3E/C646: 85 46 STA $46 3E/C648: 85 47 STA $47 3E/C64A: 20 3A C9 JSR $C93A ; play world map song 3E/C64D: 18 CLC 3E/C64E: 60 RTS ; [ ] 3E/C64F: A5 42 LDA $42 3E/C651: D0 09 BNE $C65C ; return if in a vehicle 3E/C653: AD 0B 60 LDA $600B 3E/C656: F0 04 BEQ $C65C ; return if no guest npc 3E/C658: A9 01 LDA #$01 3E/C65A: 85 A9 STA $A9 3E/C65C: 60 RTS ; [ check destination tile (world map) ] ; A: ----udlr direction ; set carry if not passable 3E/C65D: 4A LSR 3E/C65E: B0 14 BCS $C674 3E/C660: 4A LSR 3E/C661: B0 18 BCS $C67B 3E/C663: 4A LSR 3E/C664: B0 07 BCS $C66D ; up 3E/C666: A2 07 LDX #$07 3E/C668: A0 06 LDY #$06 3E/C66A: 4C 7F C6 JMP $C67F ; down 3E/C66D: A2 07 LDX #$07 3E/C66F: A0 08 LDY #$08 3E/C671: 4C 7F C6 JMP $C67F ; right 3E/C674: A2 08 LDX #$08 3E/C676: A0 07 LDY #$07 3E/C678: 4C 7F C6 JMP $C67F ; left 3E/C67B: A2 06 LDX #$06 3E/C67D: A0 07 LDY #$07 3E/C67F: 8A TXA 3E/C680: 18 CLC 3E/C681: 65 27 ADC $27 3E/C683: 85 80 STA $80 3E/C685: 85 82 STA $82 3E/C687: 98 TYA 3E/C688: 18 CLC 3E/C689: 65 28 ADC $28 3E/C68B: 85 83 STA $83 3E/C68D: 98 TYA 3E/C68E: 18 CLC 3E/C68F: 65 2F ADC $2F 3E/C691: C9 0F CMP #$0F 3E/C693: 90 02 BCC $C697 3E/C695: E9 0F SBC #$0F 3E/C697: 09 70 ORA #$70 3E/C699: 85 81 STA $81 3E/C69B: A0 00 LDY #$00 3E/C69D: B1 80 LDA ($80),Y 3E/C69F: 0A ASL 3E/C6A0: AA TAX 3E/C6A1: BD 00 04 LDA $0400,X ; tile properties 1 3E/C6A4: 85 44 STA $44 3E/C6A6: BD 01 04 LDA $0401,X ; tile properties 1 3E/C6A9: 85 45 STA $45 3E/C6AB: A4 42 LDY $42 ; vehicle id 3E/C6AD: B9 CD C6 LDA $C6CD,Y ; tile passability mask 3E/C6B0: 25 44 AND $44 3E/C6B2: D9 CD C6 CMP $C6CD,Y 3E/C6B5: D0 1E BNE $C6D5 ; branch if passable 3E/C6B7: 38 SEC 3E/C6B8: 60 RTS ; from 3E/C6E1 3E/C6B9: A5 78 LDA $78 3E/C6BB: C9 04 CMP #$04 3E/C6BD: F0 0C BEQ $C6CB ; branch if underwater 3E/C6BF: A5 42 LDA $42 3E/C6C1: C9 04 CMP #$04 3E/C6C3: 90 06 BCC $C6CB ; branch if not in airship 3E/C6C5: A5 44 LDA $44 3E/C6C7: 29 7F AND #$7F 3E/C6C9: 85 44 STA $44 ; $00: passable 3E/C6CB: 18 CLC 3E/C6CC: 60 RTS ; tile passability masks for each vehicle 3E/C6CD: 01 03 02 04 10 10 10 10 ; from 3E/C6B5 3E/C6D5: A5 44 LDA $44 3E/C6D7: 30 06 BMI $C6DF 3E/C6D9: 29 40 AND #$40 3E/C6DB: F0 EE BEQ $C6CB 3E/C6DD: D0 18 BNE $C6F7 ; msb set: trigger 3E/C6DF: A5 45 LDA $45 3E/C6E1: 10 D6 BPL $C6B9 3E/C6E3: 8A TXA ; X is tile id 3E/C6E4: 48 PHA 3E/C6E5: A5 82 LDA $82 ; push x and y position 3E/C6E7: 48 PHA 3E/C6E8: A5 83 LDA $83 3E/C6EA: 48 PHA 3E/C6EB: 20 11 C9 JSR $C911 ; event trigger 3E/C6EE: 68 PLA 3E/C6EF: 85 83 STA $83 3E/C6F1: 68 PLA 3E/C6F2: 85 82 STA $82 3E/C6F4: 68 PLA 3E/C6F5: AA TAX 3E/C6F6: 60 RTS ; $40: battle 3E/C6F7: 8A TXA ; X is tile id 3E/C6F8: 48 PHA 3E/C6F9: A5 82 LDA $82 ; push x and y position 3E/C6FB: 48 PHA 3E/C6FC: A5 83 LDA $83 3E/C6FE: 48 PHA 3E/C6FF: A9 3D LDA #$3D 3E/C701: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/C704: 18 CLC 3E/C705: 20 5B BC JSR $BC5B ; check random battle 3E/C708: 68 PLA 3E/C709: 85 83 STA $83 3E/C70B: 68 PLA 3E/C70C: 85 82 STA $82 3E/C70E: 68 PLA 3E/C70F: AA TAX 3E/C710: 60 RTS ; [ get random number ] ; increment or decrement $F5 based on the sign of $F6. every 256 iterations, ; add 160 to $F6, leading to a repeating pattern +,-,+,-,-,+,-,+ where "+" ; indicates traversing the rng table in the positive direction and "-" ; indicates traversing the rng table in the negative direction 3E/C711: 24 F6 BIT $F6 3E/C713: 30 06 BMI $C71B 3E/C715: E6 F5 INC $F5 3E/C717: D0 0D BNE $C726 3E/C719: F0 04 BEQ $C71F 3E/C71B: C6 F5 DEC $F5 3E/C71D: D0 07 BNE $C726 3E/C71F: A5 F6 LDA $F6 3E/C721: 18 CLC 3E/C722: 69 A0 ADC #$A0 3E/C724: 85 F6 STA $F6 3E/C726: A6 F5 LDX $F5 3E/C728: BD 00 FE LDA $FE00,X ; random number table 3E/C72B: 60 RTS ; [ execute event ] 3E/C72C: 0A ASL 3E/C72D: A8 TAY 3E/C72E: A2 86 LDX #$86 ; event script pointers (2C/8600) 3E/C730: 90 01 BCC $C733 3E/C732: E8 INX 3E/C733: 86 81 STX $81 3E/C735: A9 00 LDA #$00 3E/C737: 85 80 STA $80 3E/C739: A9 2C LDA #$2C 3E/C73B: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/C73E: B1 80 LDA ($80),Y 3E/C740: 85 72 STA $72 3E/C742: C8 INY 3E/C743: B1 80 LDA ($80),Y 3E/C745: 85 73 STA $73 3E/C747: A9 01 LDA #$01 3E/C749: 85 6C STA $6C 3E/C74B: A9 00 LDA #$00 3E/C74D: 85 17 STA $17 3E/C74F: 60 RTS ; [ update sound (bank 3E or 3F) ] 3E/C750: A9 36 LDA #$36 3E/C752: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/C755: 4C 03 80 JMP $8003 ; update sound ; [ update sound (any other bank) ] 3E/C758: A9 36 LDA #$36 3E/C75A: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/C75D: 20 03 80 JSR $8003 3E/C760: A5 57 LDA $57 3E/C762: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ get tile properties (world map) ] 3E/C765: A5 27 LDA $27 3E/C767: 18 CLC 3E/C768: 69 07 ADC #$07 3E/C76A: 85 80 STA $80 3E/C76C: A5 2F LDA $2F 3E/C76E: 18 CLC 3E/C76F: 69 07 ADC #$07 3E/C771: C9 0F CMP #$0F 3E/C773: 90 02 BCC $C777 3E/C775: E9 0F SBC #$0F 3E/C777: 09 70 ORA #$70 3E/C779: 85 81 STA $81 3E/C77B: A0 00 LDY #$00 3E/C77D: B1 80 LDA ($80),Y 3E/C77F: A8 TAY 3E/C780: 0A ASL 3E/C781: AA TAX 3E/C782: BD 00 04 LDA $0400,X 3E/C785: 60 RTS ; [ exit vehicle ] ; A button is pressed while in a vehicle ; starts at 3E/C7A5 ; surface nautilus 3E/C786: 29 02 AND #$02 3E/C788: D0 1A BNE $C7A4 ; return if nautilus can't surface 3E/C78A: A9 AD LDA #$AD 3E/C78C: 8D 49 7F STA $7F49 3E/C78F: 20 A7 D6 JSR $D6A7 3E/C792: A9 03 LDA #$03 ; load world 3 (surface world) 3E/C794: 85 7B STA $7B 3E/C796: A5 27 LDA $27 ; set destination position 3E/C798: 85 79 STA $79 3E/C79A: A5 28 LDA $28 3E/C79C: 85 7A STA $7A 3E/C79E: A9 C0 LDA #$C0 ; hide player and guest npc 3E/C7A0: 85 7E STA $7E 3E/C7A2: 85 44 STA $44 3E/C7A4: 60 RTS ; subroutine starts here 3E/C7A5: A5 27 LDA $27 ; x position 3E/C7A7: 18 CLC 3E/C7A8: 69 07 ADC #$07 3E/C7AA: 85 82 STA $82 3E/C7AC: 85 80 STA $80 3E/C7AE: A5 28 LDA $28 3E/C7B0: 18 CLC 3E/C7B1: 69 07 ADC #$07 3E/C7B3: 85 83 STA $83 3E/C7B5: A5 2F LDA $2F 3E/C7B7: 18 CLC 3E/C7B8: 69 07 ADC #$07 3E/C7BA: C9 0F CMP #$0F 3E/C7BC: 90 02 BCC $C7C0 3E/C7BE: E9 0F SBC #$0F 3E/C7C0: 09 70 ORA #$70 3E/C7C2: 85 81 STA $81 3E/C7C4: A0 00 LDY #$00 3E/C7C6: B1 80 LDA ($80),Y ; tile id 3E/C7C8: 0A ASL 3E/C7C9: AA TAX 3E/C7CA: BD 00 04 LDA $0400,X ; tile properties 3E/C7CD: A4 78 LDY $78 3E/C7CF: C0 04 CPY #$04 3E/C7D1: B0 B3 BCS $C786 ; branch if underwater 3E/C7D3: A4 42 LDY $42 3E/C7D5: 39 51 C8 AND $C851,Y ; landing flag 3E/C7D8: F0 20 BEQ $C7FA ; branch if can't land 3E/C7DA: A5 78 LDA $78 3E/C7DC: C9 03 CMP #$03 3E/C7DE: D0 16 BNE $C7F6 ; branch if not surface world 3E/C7E0: E0 3C CPX #$3C 3E/C7E2: D0 12 BNE $C7F6 ; branch if not a sea tile ; submerge nautilus 3E/C7E4: AD 20 60 LDA $6020 3E/C7E7: 10 0D BPL $C7F6 3E/C7E9: A9 A9 LDA #$A9 3E/C7EB: 8D 49 7F STA $7F49 3E/C7EE: 20 F2 D6 JSR $D6F2 ; submerge nautilus 3E/C7F1: A9 04 LDA #$04 ; load world 4 (underwater) 3E/C7F3: 4C 94 C7 JMP $C794 ; land airship 3E/C7F6: 38 SEC 3E/C7F7: 4C 10 D7 JMP $D710 ; land airship ; can't land 3E/C7FA: A6 82 LDX $82 3E/C7FC: A4 83 LDY $83 3E/C7FE: A5 42 LDA $42 3E/C800: C9 04 CMP #$04 3E/C802: D0 15 BNE $C819 ; branch if not enterprise 3E/C804: 8E 01 60 STX $6001 3E/C807: 8C 02 60 STY $6002 3E/C80A: A5 78 LDA $78 3E/C80C: 8D 03 60 STA $6003 3E/C80F: A9 D3 LDA #$D3 3E/C811: 8D 49 7F STA $7F49 3E/C814: A9 03 LDA #$03 3E/C816: 4C 3D C8 JMP $C83D 3E/C819: C9 05 CMP #$05 3E/C81B: D0 0E BNE $C82B ; branch if not cid's airship 3E/C81D: 8E 01 60 STX $6001 3E/C820: 8C 02 60 STY $6002 3E/C823: A9 A4 LDA #$A4 3E/C825: 8D 49 7F STA $7F49 3E/C828: 4C 3B C8 JMP $C83B 3E/C82B: 8E 01 60 STX $6001 3E/C82E: 8C 02 60 STY $6002 3E/C831: A5 78 LDA $78 3E/C833: 8D 03 60 STA $6003 3E/C836: A9 A4 LDA #$A4 3E/C838: 8D 49 7F STA $7F49 3E/C83B: A9 00 LDA #$00 ; no vehicle 3E/C83D: 48 PHA 3E/C83E: 18 CLC 3E/C83F: 20 10 D7 JSR $D710 ; land airship 3E/C842: 68 PLA 3E/C843: 85 46 STA $46 3E/C845: 85 42 STA $42 3E/C847: A9 00 LDA #$00 3E/C849: 85 43 STA $43 3E/C84B: 20 3A C9 JSR $C93A ; play world map song 3E/C84E: 4C F7 C8 JMP $C8F7 ; landing flag for each vehicle 3E/C851: 00 00 00 00 04 08 08 08 ; [ load world map ] 3E/C859: A5 FF LDA $FF 3E/C85B: 8D 00 20 STA $2000 3E/C85E: A9 00 LDA #$00 3E/C860: 8D 01 20 STA $2001 3E/C863: A9 00 LDA #$00 3E/C865: 85 4E STA $4E 3E/C867: 85 2F STA $2F 3E/C869: 85 44 STA $44 3E/C86B: 85 45 STA $45 3E/C86D: 85 0D STA $0D 3E/C86F: 85 50 STA $50 3E/C871: 85 24 STA $24 3E/C873: 85 25 STA $25 3E/C875: 85 23 STA $23 3E/C877: 85 22 STA $22 3E/C879: 85 2D STA $2D ; on world map 3E/C87B: 20 1E DD JSR $DD1E ; load world map graphics 3E/C87E: A9 3A LDA #$3A 3E/C880: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/C883: 20 06 85 JSR $8506 ; init world map 3E/C886: 20 09 85 JSR $8509 ; load map palette 3E/C889: 20 25 CA JSR $CA25 3E/C88C: A5 27 LDA $27 3E/C88E: 29 10 AND #$10 3E/C890: C9 10 CMP #$10 3E/C892: 2A ROL 3E/C893: 29 01 AND #$01 3E/C895: 09 88 ORA #$88 3E/C897: 85 FD STA $FD 3E/C899: 85 FF STA $FF 3E/C89B: 20 00 FF JSR $FF00 ; wait for vblank 3E/C89E: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3E/C8A1: 20 98 C3 JSR $C398 ; update ppu registers 3E/C8A4: A9 00 LDA #$00 3E/C8A6: 8D 01 20 STA $2001 3E/C8A9: 20 3A C9 JSR $C93A ; play world map song 3E/C8AC: A5 B0 LDA $B0 3E/C8AE: 29 7F AND #$7F 3E/C8B0: 85 B0 STA $B0 3E/C8B2: AD 00 60 LDA $6000 3E/C8B5: 10 11 BPL $C8C8 3E/C8B7: A9 01 LDA #$01 3E/C8B9: 8D 00 60 STA $6000 3E/C8BC: AD 3C 62 LDA $623C 3E/C8BF: 8D 01 60 STA $6001 3E/C8C2: AD 3D 62 LDA $623D 3E/C8C5: 8D 02 60 STA $6002 3E/C8C8: A2 00 LDX #$00 3E/C8CA: A9 00 LDA #$00 3E/C8CC: 9D 10 01 STA $0110,X ; clear underwater bubbles data 3E/C8CF: E8 INX 3E/C8D0: E0 60 CPX #$60 3E/C8D2: 90 F8 BCC $C8CC 3E/C8D4: A9 8D LDA #$8D 3E/C8D6: 85 6D STA $6D 3E/C8D8: A9 8E LDA #$8E 3E/C8DA: 85 6E STA $6E 3E/C8DC: A9 04 LDA #$04 3E/C8DE: 85 33 STA $33 3E/C8E0: 20 F7 C8 JSR $C8F7 3E/C8E3: 4C 8A C9 JMP $C98A ; load prg banks $3C/$3D ; [ reload world map ] 3E/C8E6: A5 33 LDA $33 3E/C8E8: 48 PHA 3E/C8E9: 20 59 C8 JSR $C859 ; load world map 3E/C8EC: 68 PLA 3E/C8ED: 85 33 STA $33 3E/C8EF: A9 01 LDA #$01 3E/C8F1: 20 69 D4 JSR $D469 3E/C8F4: 4C 08 C1 JMP $C108 3E/C8F7: 20 8A C9 JSR $C98A ; load prg banks $3C/$3D 3E/C8FA: 4C 27 B6 JMP $B627 ; [ do floor damage ] 3E/C8FD: A9 3B LDA #$3B 3E/C8FF: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/C902: A2 03 LDX #$03 3E/C904: 4C 03 A0 JMP $A003 ; execute object command ; [ do poison step damage ] 3E/C907: A9 3B LDA #$3B 3E/C909: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/C90C: A2 04 LDX #$04 3E/C90E: 4C 03 A0 JMP $A003 ; execute object command ; [ event trigger ] 3E/C911: A5 44 LDA $44 ; clear trigger flag 3E/C913: 29 7F AND #$7F 3E/C915: 85 44 STA $44 3E/C917: A5 6C LDA $6C 3E/C919: D0 1D BNE $C938 ; return if in an event 3E/C91B: A2 3F LDX #$3F 3E/C91D: BD 00 7B LDA $7B00,X ; save trigger script to buffer 3E/C920: 9D 80 07 STA $0780,X 3E/C923: CA DEX 3E/C924: 10 F7 BPL $C91D 3E/C926: A5 45 LDA $45 ; trigger id 3E/C928: 29 7F AND #$7F 3E/C92A: 20 C6 E6 JSR $E6C6 ; event trigger 3E/C92D: A2 3F LDX #$3F 3E/C92F: BD 80 07 LDA $0780,X ; restore trigger script from buffer 3E/C932: 9D 00 7B STA $7B00,X 3E/C935: CA DEX 3E/C936: 10 F7 BPL $C92F 3E/C938: 18 CLC 3E/C939: 60 RTS ; [ play world map song ] 3E/C93A: A9 3B LDA #$3B 3E/C93C: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/C93F: 4C 06 A0 JMP $A006 ; play world map song ; [ check boarding invincible ] 3E/C942: AD 04 60 LDA $6004 3E/C945: F0 1E BEQ $C965 3E/C947: A5 78 LDA $78 3E/C949: CD 07 60 CMP $6007 3E/C94C: D0 17 BNE $C965 3E/C94E: A5 27 LDA $27 3E/C950: 18 CLC 3E/C951: 69 07 ADC #$07 3E/C953: CD 05 60 CMP $6005 3E/C956: D0 0D BNE $C965 3E/C958: A5 28 LDA $28 3E/C95A: 18 CLC 3E/C95B: 69 07 ADC #$07 3E/C95D: CD 06 60 CMP $6006 3E/C960: D0 03 BNE $C965 3E/C962: 4C 92 C2 JMP $C292 ; board invincible 3E/C965: 60 RTS ; [ ] 3E/C966: A5 82 LDA $82 3E/C968: C9 20 CMP #$20 3E/C96A: D0 1B BNE $C987 3E/C96C: A5 83 LDA $83 3E/C96E: C9 E0 CMP #$E0 3E/C970: D0 15 BNE $C987 3E/C972: A9 00 LDA #$00 3E/C974: 85 7B STA $7B 3E/C976: AD 0C 60 LDA $600C 3E/C979: 85 79 STA $79 3E/C97B: AD 0D 60 LDA $600D 3E/C97E: 85 7A STA $7A 3E/C980: A9 C0 LDA #$C0 ; hide player and guest npc 3E/C982: 85 7E STA $7E 3E/C984: 85 44 STA $44 3E/C986: 60 RTS 3E/C987: 4C EF C4 JMP $C4EF ; [ load prg banks $3C/$3D ] 3E/C98A: A9 3C LDA #$3C 3E/C98C: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; -------------------------------------------------------------------------- ; [ ] 3E/C98F: A5 37 LDA $37 3E/C991: D0 22 BNE $C9B5 ; return if in menu 3E/C993: A5 38 LDA $38 3E/C995: 4A LSR 3E/C996: 85 31 STA $31 3E/C998: A5 3B LDA $3B 3E/C99A: 4A LSR 3E/C99B: 85 30 STA $30 3E/C99D: A5 3C LDA $3C 3E/C99F: 4A LSR 3E/C9A0: 85 86 STA $86 3E/C9A2: A9 01 LDA #$01 ; not on world map 3E/C9A4: 85 2D STA $2D 3E/C9A6: 4C B1 CA JMP $CAB1 ; [ ] 3E/C9A9: A5 37 LDA $37 3E/C9AB: D0 08 BNE $C9B5 ; return if in menu 3E/C9AD: A5 3C LDA $3C 3E/C9AF: 4A LSR 3E/C9B0: AA TAX 3E/C9B1: CA DEX 3E/C9B2: 4C 6B CB JMP $CB6B 3E/C9B5: 60 RTS ; [ close text window ] ; top window 3E/C9B6: 20 0C EC JSR $EC0C ; show sprites behind text window 3E/C9B9: A9 05 LDA #$05 3E/C9BB: 85 66 STA $66 3E/C9BD: A2 06 LDX #$06 3E/C9BF: D0 09 BNE $C9CA ; bottom window 3E/C9C1: 20 12 EC JSR $EC12 ; show sprites behind text window 3E/C9C4: A9 07 LDA #$07 3E/C9C6: 85 66 STA $66 3E/C9C8: A2 0E LDX #$0E 3E/C9CA: A5 2F LDA $2F 3E/C9CC: 85 67 STA $67 3E/C9CE: 8A TXA 3E/C9CF: 18 CLC 3E/C9D0: 65 2F ADC $2F 3E/C9D2: C9 0F CMP #$0F 3E/C9D4: 90 02 BCC $C9D8 3E/C9D6: E9 0F SBC #$0F 3E/C9D8: 85 2F STA $2F 3E/C9DA: A5 69 LDA $69 3E/C9DC: 48 PHA 3E/C9DD: A5 2A LDA $2A 3E/C9DF: 48 PHA 3E/C9E0: 8A TXA 3E/C9E1: 18 CLC 3E/C9E2: 65 2A ADC $2A 3E/C9E4: 29 3F AND #$3F 3E/C9E6: 85 2A STA $2A 3E/C9E8: A5 33 LDA $33 3E/C9EA: 48 PHA 3E/C9EB: A9 08 LDA #$08 3E/C9ED: 85 33 STA $33 3E/C9EF: 20 67 CA JSR $CA67 ; init player movement 3E/C9F2: 20 00 FF JSR $FF00 ; wait for vblank 3E/C9F5: 20 79 CA JSR $CA79 ; update map background 3E/C9F8: A5 2F LDA $2F 3E/C9FA: 48 PHA 3E/C9FB: A5 67 LDA $67 3E/C9FD: 85 2F STA $2F 3E/C9FF: 20 71 E5 JSR $E571 ; update ppu registers 3E/CA02: 68 PLA 3E/CA03: 85 2F STA $2F 3E/CA05: 20 50 C7 JSR $C750 ; update sound 3E/CA08: 20 89 CA JSR $CA89 3E/CA0B: C6 66 DEC $66 3E/CA0D: D0 E0 BNE $C9EF 3E/CA0F: A5 67 LDA $67 3E/CA11: 85 2F STA $2F 3E/CA13: 68 PLA 3E/CA14: 85 33 STA $33 3E/CA16: 68 PLA 3E/CA17: 85 2A STA $2A 3E/CA19: 68 PLA 3E/CA1A: 85 69 STA $69 3E/CA1C: A9 00 LDA #$00 ; player is not moving 3E/CA1E: 85 34 STA $34 3E/CA20: A5 57 LDA $57 3E/CA22: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ ] 3E/CA25: A9 00 LDA #$00 3E/CA27: 85 2F STA $2F 3E/CA29: A5 2D LDA $2D 3E/CA2B: 4A LSR 3E/CA2C: B0 0A BCS $CA38 ; branch if not on world map 3E/CA2E: A5 28 LDA $28 3E/CA30: 18 CLC 3E/CA31: 69 0F ADC #$0F 3E/CA33: 85 28 STA $28 3E/CA35: 4C 41 CA JMP $CA41 3E/CA38: A5 2A LDA $2A 3E/CA3A: 18 CLC 3E/CA3B: 69 0F ADC #$0F 3E/CA3D: 29 3F AND #$3F 3E/CA3F: 85 2A STA $2A 3E/CA41: A9 08 LDA #$08 ; facing up 3E/CA43: 85 33 STA $33 3E/CA45: 20 67 CA JSR $CA67 ; init player movement 3E/CA48: 20 79 CA JSR $CA79 ; update map background 3E/CA4B: 20 89 CA JSR $CA89 3E/CA4E: A5 2F LDA $2F 3E/CA50: F0 0C BEQ $CA5E 3E/CA52: 29 03 AND #$03 3E/CA54: 49 03 EOR #$03 3E/CA56: D0 ED BNE $CA45 3E/CA58: 20 50 C7 JSR $C750 ; update sound 3E/CA5B: 4C 45 CA JMP $CA45 3E/CA5E: A9 00 LDA #$00 3E/CA60: 85 33 STA $33 ; clear facing direction 3E/CA62: 85 32 STA $32 ; background doesn't need update 3E/CA64: 85 34 STA $34 ; player is not moving 3E/CA66: 60 RTS ; [ init player movement ] 3E/CA67: A5 2D LDA $2D 3E/CA69: 4A LSR 3E/CA6A: 90 06 BCC $CA72 ; branch if on world map 3E/CA6C: 20 A3 CD JSR $CDA3 ; init player movement (normal map) 3E/CA6F: 4C 75 CA JMP $CA75 3E/CA72: 20 FB CC JSR $CCFB ; init player movement (world map) 3E/CA75: 20 AD CA JSR $CAAD 3E/CA78: 60 RTS ; [ update map background ] 3E/CA79: A9 3B LDA #$3B 3E/CA7B: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/CA7E: 20 00 BE JSR $BE00 ; update map background tilemap 3E/CA81: 20 61 CB JSR $CB61 ; update dialog window attributes 3E/CA84: A9 00 LDA #$00 3E/CA86: 85 32 STA $32 ; background doesn't need update 3E/CA88: 60 RTS ; [ ] 3E/CA89: A5 2D LDA $2D 3E/CA8B: 4A LSR 3E/CA8C: 90 0C BCC $CA9A ; branch if on world map 3E/CA8E: A5 2A LDA $2A 3E/CA90: 38 SEC 3E/CA91: E9 01 SBC #$01 3E/CA93: 29 3F AND #$3F 3E/CA95: 85 2A STA $2A 3E/CA97: 4C A1 CA JMP $CAA1 3E/CA9A: A5 28 LDA $28 3E/CA9C: 38 SEC 3E/CA9D: E9 01 SBC #$01 3E/CA9F: 85 28 STA $28 3E/CAA1: A5 2F LDA $2F 3E/CAA3: 38 SEC 3E/CAA4: E9 01 SBC #$01 3E/CAA6: B0 02 BCS $CAAA 3E/CAA8: 69 0F ADC #$0F 3E/CAAA: 85 2F STA $2F 3E/CAAC: 60 RTS ; [ ] 3E/CAAD: A9 10 LDA #$10 ; window width: 32 tiles 3E/CAAF: 85 86 STA $86 ; fallthrough ; [ ] ; $86: window width (in 16x16 attribute tiles) 3E/CAB1: A5 31 LDA $31 3E/CAB3: 48 PHA 3E/CAB4: A5 30 LDA $30 3E/CAB6: 48 PHA 3E/CAB7: A0 00 LDY #$00 3E/CAB9: A5 30 LDA $30 3E/CABB: A2 0F LDX #$0F 3E/CABD: 4A LSR 3E/CABE: 90 02 BCC $CAC2 3E/CAC0: A2 F0 LDX #$F0 3E/CAC2: 0A ASL 3E/CAC3: 0A ASL 3E/CAC4: 0A ASL 3E/CAC5: 85 80 STA $80 3E/CAC7: 86 81 STX $81 3E/CAC9: A5 31 LDA $31 3E/CACB: A2 23 LDX #$23 3E/CACD: C9 10 CMP #$10 3E/CACF: 90 04 BCC $CAD5 3E/CAD1: 29 0F AND #$0F 3E/CAD3: A2 27 LDX #$27 3E/CAD5: 86 82 STX $82 3E/CAD7: A2 33 LDX #$33 3E/CAD9: 4A LSR 3E/CADA: 90 02 BCC $CADE 3E/CADC: A2 CC LDX #$CC 3E/CADE: 05 80 ORA $80 3E/CAE0: 85 80 STA $80 3E/CAE2: 8A TXA 3E/CAE3: 25 81 AND $81 3E/CAE5: 85 81 STA $81 3E/CAE7: A5 82 LDA $82 3E/CAE9: 99 D0 07 STA $07D0,Y 3E/CAEC: A5 80 LDA $80 3E/CAEE: 09 C0 ORA #$C0 3E/CAF0: 99 E0 07 STA $07E0,Y 3E/CAF3: A5 81 LDA $81 3E/CAF5: 99 F0 07 STA $07F0,Y 3E/CAF8: A5 2D LDA $2D 3E/CAFA: 29 02 AND #$02 3E/CAFC: D0 11 BNE $CB0F ; branch if moving horizontally 3E/CAFE: A5 31 LDA $31 3E/CB00: 18 CLC 3E/CB01: 69 01 ADC #$01 3E/CB03: 29 1F AND #$1F 3E/CB05: 85 31 STA $31 3E/CB07: C8 INY 3E/CB08: C4 86 CPY $86 3E/CB0A: B0 18 BCS $CB24 3E/CB0C: 4C B9 CA JMP $CAB9 3E/CB0F: A5 30 LDA $30 3E/CB11: 18 CLC 3E/CB12: 69 01 ADC #$01 3E/CB14: C9 0F CMP #$0F 3E/CB16: 90 02 BCC $CB1A 3E/CB18: E9 0F SBC #$0F 3E/CB1A: 85 30 STA $30 3E/CB1C: C8 INY 3E/CB1D: C0 0F CPY #$0F 3E/CB1F: B0 03 BCS $CB24 3E/CB21: 4C B9 CA JMP $CAB9 3E/CB24: 68 PLA 3E/CB25: 85 30 STA $30 3E/CB27: 68 PLA 3E/CB28: 85 31 STA $31 3E/CB2A: A6 86 LDX $86 3E/CB2C: CA DEX 3E/CB2D: A5 2D LDA $2D 3E/CB2F: 29 02 AND #$02 3E/CB31: F0 01 BEQ $CB34 ; branch if moving vertically 3E/CB33: CA DEX 3E/CB34: BD D0 07 LDA $07D0,X 3E/CB37: 29 04 AND #$04 3E/CB39: D0 08 BNE $CB43 3E/CB3B: BD E0 07 LDA $07E0,X 3E/CB3E: 29 3F AND #$3F 3E/CB40: 4C 4A CB JMP $CB4A 3E/CB43: BD E0 07 LDA $07E0,X 3E/CB46: 29 3F AND #$3F 3E/CB48: 09 40 ORA #$40 3E/CB4A: A8 TAY 3E/CB4B: B9 00 03 LDA $0300,Y ; attribute table 3E/CB4E: 5D C0 07 EOR $07C0,X 3E/CB51: 3D F0 07 AND $07F0,X 3E/CB54: 59 00 03 EOR $0300,Y 3E/CB57: 99 00 03 STA $0300,Y 3E/CB5A: 9D F0 07 STA $07F0,X 3E/CB5D: CA DEX 3E/CB5E: 10 D4 BPL $CB34 3E/CB60: 60 RTS ; [ update dialogue window attributes ] 3E/CB61: A5 2D LDA $2D 3E/CB63: A2 0F LDX #$0F 3E/CB65: 29 02 AND #$02 3E/CB67: F0 02 BEQ $CB6B ; branch if moving vertically 3E/CB69: A2 0E LDX #$0E 3E/CB6B: AD 02 20 LDA $2002 3E/CB6E: BD D0 07 LDA $07D0,X ; ppu address 3E/CB71: 8D 06 20 STA $2006 3E/CB74: BD E0 07 LDA $07E0,X 3E/CB77: 8D 06 20 STA $2006 3E/CB7A: BD F0 07 LDA $07F0,X ; text window attribute data 3E/CB7D: 8D 07 20 STA $2007 3E/CB80: CA DEX 3E/CB81: 10 EB BPL $CB6E 3E/CB83: 60 RTS 3E/CB84: 00 40 80 C0 00 40 80 C0 00 40 80 C0 00 40 80 C0 3E/CB94: 20 20 20 20 21 21 21 21 22 22 22 22 23 23 23 23 ; -------------------------------------------------------------------------- ; [ load map data ] 3E/CBA4: A9 00 LDA #$00 3E/CBA6: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/CBA9: A6 48 LDX $48 3E/CBAB: A5 78 LDA $78 3E/CBAD: C9 02 CMP #$02 3E/CBAF: BD 00 8A LDA $8A00,X ; map background tilemap id (00/8A00) 3E/CBB2: 90 03 BCC $CBB7 3E/CBB4: BD 00 8B LDA $8B00,X 3E/CBB7: A8 TAY 3E/CBB8: A9 11 LDA #$11 3E/CBBA: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/CBBD: A2 80 LDX #$80 3E/CBBF: 98 TYA 3E/CBC0: 0A ASL 3E/CBC1: 90 01 BCC $CBC4 3E/CBC3: E8 INX 3E/CBC4: 86 87 STX $87 3E/CBC6: A8 TAY 3E/CBC7: A9 00 LDA #$00 ; map background tilemap (11/8000) 3E/CBC9: 85 86 STA $86 3E/CBCB: B1 86 LDA ($86),Y 3E/CBCD: 85 80 STA $80 3E/CBCF: C8 INY 3E/CBD0: B1 86 LDA ($86),Y 3E/CBD2: 48 PHA 3E/CBD3: 29 1F AND #$1F 3E/CBD5: 09 80 ORA #$80 3E/CBD7: 85 81 STA $81 3E/CBD9: 68 PLA 3E/CBDA: 4A LSR 3E/CBDB: 4A LSR 3E/CBDC: 4A LSR 3E/CBDD: 4A LSR 3E/CBDE: 4A LSR 3E/CBDF: 18 CLC 3E/CBE0: 69 11 ADC #$11 3E/CBE2: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/CBE5: A9 00 LDA #$00 3E/CBE7: 85 82 STA $82 3E/CBE9: A9 74 LDA #$74 3E/CBEB: 85 83 STA $83 3E/CBED: A0 00 LDY #$00 3E/CBEF: 20 FA CB JSR $CBFA ; decompress tilemap 3E/CBF2: A9 3A LDA #$3A 3E/CBF4: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/CBF7: 4C 03 85 JMP $8503 ; init map ; [ decompress tilemap ] ; rle encoding, all tile values are $00 to $7F ; if msb set, next byte gives run length ; otherwise store raw tile value 3E/CBFA: B1 80 LDA ($80),Y 3E/CBFC: 10 2C BPL $CC2A ; branch if not rle 3E/CBFE: 29 7F AND #$7F 3E/CC00: 85 84 STA $84 3E/CC02: E6 80 INC $80 3E/CC04: D0 02 BNE $CC08 3E/CC06: E6 81 INC $81 3E/CC08: B1 80 LDA ($80),Y ; run length 3E/CC0A: AA TAX 3E/CC0B: A5 84 LDA $84 3E/CC0D: 91 82 STA ($82),Y ; store tile value 3E/CC0F: C8 INY 3E/CC10: CA DEX 3E/CC11: D0 FA BNE $CC0D 3E/CC13: 98 TYA 3E/CC14: F0 09 BEQ $CC1F 3E/CC16: A0 00 LDY #$00 3E/CC18: 18 CLC 3E/CC19: 65 82 ADC $82 3E/CC1B: 85 82 STA $82 3E/CC1D: 90 19 BCC $CC38 3E/CC1F: E6 83 INC $83 3E/CC21: A5 83 LDA $83 3E/CC23: C9 78 CMP #$78 3E/CC25: B0 1A BCS $CC41 3E/CC27: 4C 38 CC JMP $CC38 3E/CC2A: 91 82 STA ($82),Y ; store tile value 3E/CC2C: E6 82 INC $82 3E/CC2E: D0 08 BNE $CC38 3E/CC30: E6 83 INC $83 3E/CC32: A5 83 LDA $83 3E/CC34: C9 78 CMP #$78 3E/CC36: B0 09 BCS $CC41 3E/CC38: E6 80 INC $80 3E/CC3A: D0 BE BNE $CBFA 3E/CC3C: E6 81 INC $81 3E/CC3E: 4C FA CB JMP $CBFA 3E/CC41: 60 RTS ; hi byte of world tilemap pointer table address (06/XX00) 3E/CC42: 90 90 92 94 96 ; [ decompress world tilemap ] ; decompresses one row (256 tiles) ; $2C: row ; $30: high byte of destination address (+$7000) 3E/CC47: 20 BB CC JSR $CCBB ; get pointer to world map tilemap 3E/CC4A: A0 00 LDY #$00 3E/CC4C: B1 80 LDA ($80),Y 3E/CC4E: 10 23 BPL $CC73 ; branch if not rle 3E/CC50: 29 7F AND #$7F 3E/CC52: 85 84 STA $84 ; tile index 3E/CC54: E6 80 INC $80 3E/CC56: D0 02 BNE $CC5A 3E/CC58: E6 81 INC $81 3E/CC5A: B1 80 LDA ($80),Y ; run length 3E/CC5C: AA TAX 3E/CC5D: A5 84 LDA $84 3E/CC5F: 91 82 STA ($82),Y ; copy to buffer 3E/CC61: C8 INY 3E/CC62: CA DEX 3E/CC63: D0 FA BNE $CC5F 3E/CC65: 98 TYA 3E/CC66: F0 1A BEQ $CC82 ; branch if done (256 bytes) 3E/CC68: A0 00 LDY #$00 3E/CC6A: 18 CLC 3E/CC6B: 65 82 ADC $82 3E/CC6D: 85 82 STA $82 3E/CC6F: 90 08 BCC $CC79 3E/CC71: B0 0F BCS $CC82 3E/CC73: 91 82 STA ($82),Y ; copy to buffer 3E/CC75: E6 82 INC $82 3E/CC77: F0 09 BEQ $CC82 3E/CC79: E6 80 INC $80 3E/CC7B: D0 CF BNE $CC4C 3E/CC7D: E6 81 INC $81 3E/CC7F: 4C 4C CC JMP $CC4C 3E/CC82: 60 RTS ; [ decompress world tilemap (minimap) ] ; decompress one row (256 tiles) to $0600 ; $2C: row 3E/CC83: 20 BB CC JSR $CCBB ; get pointer to world map tilemap 3E/CC86: A0 00 LDY #$00 3E/CC88: A2 00 LDX #$00 3E/CC8A: B1 80 LDA ($80),Y 3E/CC8C: 10 19 BPL $CCA7 ; branch if not rle 3E/CC8E: 29 7F AND #$7F 3E/CC90: 85 82 STA $82 ; tile index 3E/CC92: E6 80 INC $80 3E/CC94: D0 02 BNE $CC98 3E/CC96: E6 81 INC $81 3E/CC98: B1 80 LDA ($80),Y ; run length 3E/CC9A: A8 TAY 3E/CC9B: A5 82 LDA $82 3E/CC9D: 88 DEY 3E/CC9E: F0 07 BEQ $CCA7 3E/CCA0: 9D 00 06 STA $0600,X 3E/CCA3: E8 INX 3E/CCA4: 88 DEY 3E/CCA5: D0 F9 BNE $CCA0 3E/CCA7: 9D 00 06 STA $0600,X ; copy to buffer 3E/CCAA: E8 INX 3E/CCAB: F0 09 BEQ $CCB6 ; branch if done (256 bytes) 3E/CCAD: E6 80 INC $80 3E/CCAF: D0 D9 BNE $CC8A 3E/CCB1: E6 81 INC $81 3E/CCB3: 4C 8A CC JMP $CC8A 3E/CCB6: A9 3A LDA #$3A 3E/CCB8: 4C 06 FF JMP $FF06 ; switch prg bank 0 ; [ get pointer to world tilemap ] ; $2C: row 3E/CCBB: A9 06 LDA #$06 3E/CCBD: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/CCC0: A6 78 LDX $78 ; world id 3E/CCC2: BD 42 CC LDA $CC42,X ; high byte of pointer table address 3E/CCC5: 85 87 STA $87 3E/CCC7: A9 00 LDA #$00 3E/CCC9: 85 86 STA $86 3E/CCCB: A5 2C LDA $2C ; row to load 3E/CCCD: 0A ASL 3E/CCCE: 90 02 BCC $CCD2 3E/CCD0: E6 87 INC $87 ; increment hi byte of pointer 3E/CCD2: A8 TAY 3E/CCD3: B1 86 LDA ($86),Y 3E/CCD5: 85 80 STA $80 3E/CCD7: C8 INY 3E/CCD8: B1 86 LDA ($86),Y 3E/CCDA: 18 CLC 3E/CCDB: 69 10 ADC #$10 3E/CCDD: 48 PHA 3E/CCDE: 29 1F AND #$1F 3E/CCE0: 09 80 ORA #$80 3E/CCE2: 85 81 STA $81 3E/CCE4: 68 PLA 3E/CCE5: 4A LSR 3E/CCE6: 4A LSR 3E/CCE7: 4A LSR 3E/CCE8: 4A LSR 3E/CCE9: 4A LSR 3E/CCEA: 18 CLC 3E/CCEB: 69 06 ADC #$06 3E/CCED: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/CCF0: A5 30 LDA $30 3E/CCF2: 09 70 ORA #$70 3E/CCF4: 85 83 STA $83 3E/CCF6: A9 00 LDA #$00 3E/CCF8: 85 82 STA $82 3E/CCFA: 60 RTS ; [ init player movement (world map) ] 3E/CCFB: A5 33 LDA $33 3E/CCFD: 4A LSR 3E/CCFE: B0 0A BCS $CD0A 3E/CD00: 4A LSR 3E/CD01: B0 2C BCS $CD2F 3E/CD03: 4A LSR 3E/CD04: B0 31 BCS $CD37 3E/CD06: 4A LSR 3E/CD07: B0 43 BCS $CD4C 3E/CD09: 60 RTS ; right 3E/CD0A: A5 27 LDA $27 3E/CD0C: 18 CLC 3E/CD0D: 69 10 ADC #$10 3E/CD0F: 85 2B STA $2B 3E/CD11: 29 1F AND #$1F 3E/CD13: 85 31 STA $31 3E/CD15: A5 2F LDA $2F 3E/CD17: 85 30 STA $30 3E/CD19: A5 28 LDA $28 3E/CD1B: 85 2C STA $2C 3E/CD1D: A5 2D LDA $2D 3E/CD1F: 09 02 ORA #$02 ; moving horizontally 3E/CD21: 85 2D STA $2D 3E/CD23: 20 3D CE JSR $CE3D 3E/CD26: A9 01 LDA #$01 3E/CD28: 85 32 STA $32 ; background needs update 3E/CD2A: 85 34 STA $34 ; player movement speed: 1 3E/CD2C: 4C 7E CD JMP $CD7E ; update world map movement speed ; left 3E/CD2F: A5 27 LDA $27 3E/CD31: 38 SEC 3E/CD32: E9 01 SBC #$01 3E/CD34: 4C 0F CD JMP $CD0F ; down 3E/CD37: A5 28 LDA $28 3E/CD39: 18 CLC 3E/CD3A: 69 0F ADC #$0F ; load a row 15 tiles below the top row 3E/CD3C: 85 2C STA $2C 3E/CD3E: A5 2F LDA $2F 3E/CD40: 18 CLC 3E/CD41: 69 0F ADC #$0F 3E/CD43: C9 0F CMP #$0F 3E/CD45: 90 16 BCC $CD5D 3E/CD47: 38 SEC 3E/CD48: E9 0F SBC #$0F 3E/CD4A: B0 11 BCS $CD5D ; up 3E/CD4C: A5 28 LDA $28 3E/CD4E: 38 SEC 3E/CD4F: E9 01 SBC #$01 ; load a row 1 tiles above the top row 3E/CD51: 85 2C STA $2C 3E/CD53: A5 2F LDA $2F 3E/CD55: 38 SEC 3E/CD56: E9 01 SBC #$01 3E/CD58: B0 03 BCS $CD5D 3E/CD5A: 18 CLC 3E/CD5B: 69 0F ADC #$0F 3E/CD5D: 85 30 STA $30 3E/CD5F: A5 27 LDA $27 3E/CD61: 85 2B STA $2B 3E/CD63: 29 1F AND #$1F 3E/CD65: 85 31 STA $31 3E/CD67: A5 2D LDA $2D 3E/CD69: 29 FD AND #$FD ; moving vertically 3E/CD6B: 85 2D STA $2D 3E/CD6D: 20 47 CC JSR $CC47 ; decompress world map tilemap 3E/CD70: 20 3D CE JSR $CE3D 3E/CD73: 4C 26 CD JMP $CD26 ; speed for each vehicle 3E/CD76: 01 02 01 02 04 02 08 02 ; [ update world map movement speed ] 3E/CD7E: A5 78 LDA $78 3E/CD80: C9 04 CMP #$04 3E/CD82: 90 04 BCC $CD88 ; branch if not underwater 3E/CD84: A9 01 LDA #$01 ; underwater speed is always 1 3E/CD86: D0 05 BNE $CD8D 3E/CD88: A6 42 LDX $42 ; vehicle id 3E/CD8A: BD 76 CD LDA $CD76,X 3E/CD8D: 85 34 STA $34 3E/CD8F: C9 08 CMP #$08 3E/CD91: F0 05 BEQ $CD98 3E/CD93: A9 00 LDA #$00 3E/CD95: 85 4E STA $4E 3E/CD97: 60 RTS 3E/CD98: A5 4E LDA $4E 3E/CD9A: D0 06 BNE $CDA2 3E/CD9C: E6 4E INC $4E 3E/CD9E: A9 04 LDA #$04 3E/CDA0: 85 34 STA $34 3E/CDA2: 60 RTS ; [ init player movement (normal map) ] 3E/CDA3: A5 33 LDA $33 ; facing direction 3E/CDA5: 4A LSR 3E/CDA6: B0 0A BCS $CDB2 3E/CDA8: 4A LSR 3E/CDA9: B0 33 BCS $CDDE 3E/CDAB: 4A LSR 3E/CDAC: B0 41 BCS $CDEF 3E/CDAE: 4A LSR 3E/CDAF: B0 5C BCS $CE0D 3E/CDB1: 60 RTS ; right 3E/CDB2: A5 29 LDA $29 ; left scroll position 3E/CDB4: 18 CLC 3E/CDB5: 69 08 ADC #$08 3E/CDB7: 29 3F AND #$3F 3E/CDB9: 85 68 STA $68 3E/CDBB: 18 CLC 3E/CDBC: 69 08 ADC #$08 3E/CDBE: 29 3F AND #$3F 3E/CDC0: 85 2B STA $2B ; map row for horizontal scrolling 3E/CDC2: 29 1F AND #$1F 3E/CDC4: 85 31 STA $31 3E/CDC6: A5 2F LDA $2F 3E/CDC8: 85 30 STA $30 3E/CDCA: A5 2A LDA $2A 3E/CDCC: 85 2C STA $2C 3E/CDCE: A5 2D LDA $2D 3E/CDD0: 09 02 ORA #$02 ; moving horizontally 3E/CDD2: 85 2D STA $2D 3E/CDD4: 20 B4 CE JSR $CEB4 3E/CDD7: A9 01 LDA #$01 3E/CDD9: 85 32 STA $32 ; background needs update 3E/CDDB: 85 34 STA $34 ; player movement speed: 1 3E/CDDD: 60 RTS ; left 3E/CDDE: A5 29 LDA $29 3E/CDE0: 18 CLC 3E/CDE1: 69 06 ADC #$06 3E/CDE3: 29 3F AND #$3F 3E/CDE5: 85 68 STA $68 3E/CDE7: 38 SEC 3E/CDE8: E9 07 SBC #$07 3E/CDEA: 29 3F AND #$3F 3E/CDEC: 4C C0 CD JMP $CDC0 ; down 3E/CDEF: A5 2A LDA $2A 3E/CDF1: 18 CLC 3E/CDF2: 69 08 ADC #$08 3E/CDF4: 29 3F AND #$3F 3E/CDF6: 85 69 STA $69 3E/CDF8: 18 CLC 3E/CDF9: 69 07 ADC #$07 3E/CDFB: 29 3F AND #$3F 3E/CDFD: 85 2C STA $2C 3E/CDFF: A5 2F LDA $2F 3E/CE01: 18 CLC 3E/CE02: 69 0F ADC #$0F 3E/CE04: C9 0F CMP #$0F 3E/CE06: 90 1F BCC $CE27 3E/CE08: 38 SEC 3E/CE09: E9 0F SBC #$0F 3E/CE0B: B0 1A BCS $CE27 ; up 3E/CE0D: A5 2A LDA $2A 3E/CE0F: 18 CLC 3E/CE10: 69 06 ADC #$06 3E/CE12: 29 3F AND #$3F 3E/CE14: 85 69 STA $69 3E/CE16: 38 SEC 3E/CE17: E9 07 SBC #$07 3E/CE19: 29 3F AND #$3F 3E/CE1B: 85 2C STA $2C 3E/CE1D: A5 2F LDA $2F 3E/CE1F: 38 SEC 3E/CE20: E9 01 SBC #$01 3E/CE22: B0 03 BCS $CE27 3E/CE24: 18 CLC 3E/CE25: 69 0F ADC #$0F 3E/CE27: 85 30 STA $30 3E/CE29: A5 29 LDA $29 3E/CE2B: 85 2B STA $2B 3E/CE2D: 29 1F AND #$1F 3E/CE2F: 85 31 STA $31 3E/CE31: A5 2D LDA $2D 3E/CE33: 29 FD AND #$FD ; moving vertically 3E/CE35: 85 2D STA $2D 3E/CE37: 20 B4 CE JSR $CEB4 3E/CE3A: 4C D7 CD JMP $CDD7 ; [ load tiles for scrolling (world map) ] 3E/CE3D: A2 00 LDX #$00 3E/CE3F: A5 30 LDA $30 3E/CE41: 09 70 ORA #$70 3E/CE43: 85 81 STA $81 3E/CE45: A5 2B LDA $2B 3E/CE47: 85 80 STA $80 3E/CE49: A5 2D LDA $2D 3E/CE4B: 29 02 AND #$02 3E/CE4D: D0 2B BNE $CE7A ; branch if moving vertically ; horizontal 3E/CE4F: A0 00 LDY #$00 3E/CE51: B1 80 LDA ($80),Y ; tile index 3E/CE53: A8 TAY 3E/CE54: B9 00 05 LDA $0500,Y ; copy from tileset 3E/CE57: 9D 80 07 STA $0780,X 3E/CE5A: B9 80 05 LDA $0580,Y 3E/CE5D: 9D 90 07 STA $0790,X 3E/CE60: B9 00 06 LDA $0600,Y 3E/CE63: 9D A0 07 STA $07A0,X 3E/CE66: B9 80 06 LDA $0680,Y 3E/CE69: 9D B0 07 STA $07B0,X 3E/CE6C: B9 00 07 LDA $0700,Y 3E/CE6F: 9D C0 07 STA $07C0,X 3E/CE72: E6 80 INC $80 3E/CE74: E8 INX 3E/CE75: E0 10 CPX #$10 ; copy 16 tiles (one visible row) 3E/CE77: 90 D6 BCC $CE4F 3E/CE79: 60 RTS ; vertical 3E/CE7A: A0 00 LDY #$00 3E/CE7C: B1 80 LDA ($80),Y 3E/CE7E: A8 TAY 3E/CE7F: B9 00 05 LDA $0500,Y 3E/CE82: 9D 80 07 STA $0780,X 3E/CE85: B9 80 05 LDA $0580,Y 3E/CE88: 9D 90 07 STA $0790,X 3E/CE8B: B9 00 06 LDA $0600,Y 3E/CE8E: 9D A0 07 STA $07A0,X 3E/CE91: B9 80 06 LDA $0680,Y 3E/CE94: 9D B0 07 STA $07B0,X 3E/CE97: B9 00 07 LDA $0700,Y 3E/CE9A: 9D C0 07 STA $07C0,X 3E/CE9D: A5 81 LDA $81 3E/CE9F: 18 CLC 3E/CEA0: 69 01 ADC #$01 3E/CEA2: 29 0F AND #$0F 3E/CEA4: C9 0F CMP #$0F 3E/CEA6: 90 02 BCC $CEAA 3E/CEA8: E9 0F SBC #$0F 3E/CEAA: 09 70 ORA #$70 3E/CEAC: 85 81 STA $81 3E/CEAE: E8 INX 3E/CEAF: E0 10 CPX #$10 3E/CEB1: 90 C7 BCC $CE7A 3E/CEB3: 60 RTS ; [ load tiles for scrolling (normal map) ] 3E/CEB4: A2 00 LDX #$00 3E/CEB6: A5 2C LDA $2C 3E/CEB8: 29 1F AND #$1F 3E/CEBA: 4A LSR 3E/CEBB: 4A LSR 3E/CEBC: 4A LSR 3E/CEBD: 09 74 ORA #$74 3E/CEBF: 85 81 STA $81 3E/CEC1: A5 2C LDA $2C 3E/CEC3: 0A ASL 3E/CEC4: 0A ASL 3E/CEC5: 0A ASL 3E/CEC6: 0A ASL 3E/CEC7: 0A ASL 3E/CEC8: 85 82 STA $82 3E/CECA: A5 2B LDA $2B 3E/CECC: 29 1F AND #$1F 3E/CECE: 05 82 ORA $82 3E/CED0: 85 80 STA $80 3E/CED2: A5 2D LDA $2D 3E/CED4: 29 02 AND #$02 3E/CED6: D0 43 BNE $CF1B ; branch if moving horizontally ; vertical 3E/CED8: A0 00 LDY #$00 3E/CEDA: A5 2B LDA $2B 3E/CEDC: 05 2C ORA $2C 3E/CEDE: 29 20 AND #$20 3E/CEE0: F0 05 BEQ $CEE7 3E/CEE2: A4 4C LDY $4C ; fill tile 3E/CEE4: 4C EA CE JMP $CEEA 3E/CEE7: B1 80 LDA ($80),Y 3E/CEE9: A8 TAY 3E/CEEA: B9 00 7C LDA $7C00,Y ; copy tiles to tilemap buffer 3E/CEED: 9D 80 07 STA $0780,X 3E/CEF0: B9 00 7D LDA $7D00,Y 3E/CEF3: 9D 90 07 STA $0790,X 3E/CEF6: B9 00 7E LDA $7E00,Y 3E/CEF9: 9D A0 07 STA $07A0,X 3E/CEFC: B9 00 72 LDA $7200,Y 3E/CEFF: 9D B0 07 STA $07B0,X 3E/CF02: B9 00 06 LDA $0600,Y ; attribute table 3E/CF05: 9D C0 07 STA $07C0,X 3E/CF08: A5 80 LDA $80 ; next tile 3E/CF0A: 18 CLC 3E/CF0B: 69 01 ADC #$01 3E/CF0D: 29 1F AND #$1F 3E/CF0F: 05 82 ORA $82 3E/CF11: 85 80 STA $80 3E/CF13: E6 2B INC $2B 3E/CF15: E8 INX 3E/CF16: E0 10 CPX #$10 ; 16 tiles total 3E/CF18: 90 BE BCC $CED8 3E/CF1A: 60 RTS ; horizontal 3E/CF1B: A0 00 LDY #$00 3E/CF1D: A5 2C LDA $2C 3E/CF1F: 05 2B ORA $2B 3E/CF21: 29 20 AND #$20 3E/CF23: F0 05 BEQ $CF2A 3E/CF25: A4 4C LDY $4C ; fill tile 3E/CF27: 4C 2D CF JMP $CF2D 3E/CF2A: B1 80 LDA ($80),Y 3E/CF2C: A8 TAY 3E/CF2D: B9 00 7C LDA $7C00,Y ; copy tiles to tilemap buffer 3E/CF30: 9D 80 07 STA $0780,X 3E/CF33: B9 00 7D LDA $7D00,Y 3E/CF36: 9D 90 07 STA $0790,X 3E/CF39: B9 00 7E LDA $7E00,Y 3E/CF3C: 9D A0 07 STA $07A0,X 3E/CF3F: B9 00 72 LDA $7200,Y 3E/CF42: 9D B0 07 STA $07B0,X 3E/CF45: B9 00 06 LDA $0600,Y ; attribute table 3E/CF48: 9D C0 07 STA $07C0,X 3E/CF4B: A5 80 LDA $80 ; next tile 3E/CF4D: 18 CLC 3E/CF4E: 69 20 ADC #$20 3E/CF50: 85 80 STA $80 3E/CF52: A5 81 LDA $81 3E/CF54: 69 00 ADC #$00 3E/CF56: 29 03 AND #$03 3E/CF58: 09 74 ORA #$74 3E/CF5A: 85 81 STA $81 3E/CF5C: E8 INX 3E/CF5D: E6 2C INC $2C 3E/CF5F: E0 10 CPX #$10 ; 16 tiles total 3E/CF61: 90 B8 BCC $CF1B 3E/CF63: 60 RTS ; [ wait one scanline ] ; $82 doesn't get reset before calling this subroutine ; this subroutine takes 86-1/3 cycles ; one scanline is 113-2/3 cycles 3E/CF64: A0 10 LDY #$10 ; 2 cycles 3E/CF66: 88 DEY ; 32 cycles 3E/CF67: D0 FD BNE $CF66 ; 32 cycles 3E/CF69: A5 82 LDA $82 ; 3 cycles 3E/CF6B: C6 82 DEC $82 ; 5 cycles 3E/CF6D: D0 05 BNE $CF74 ; 2 cycles 3E/CF6F: A9 03 LDA #$03 ; 2 cycles 3E/CF71: 85 82 STA $82 ; 3 cycles (1/3 of the time) 3E/CF73: 60 RTS ; 6 cycles 3E/CF74: A9 00 LDA #$00 3E/CF76: A5 82 LDA $82 ; 2 cycles (2/3 of the time) 3E/CF78: 60 RTS ; [ screen wipe out (world map) ] 3E/CF79: 20 F8 D0 JSR $D0F8 ; hide all sprites 3E/CF7C: A9 70 LDA #$70 3E/CF7E: 85 84 STA $84 3E/CF80: A9 01 LDA #$01 3E/CF82: 85 85 STA $85 3E/CF84: 20 C5 CF JSR $CFC5 ; update screen wipe 3E/CF87: A5 85 LDA $85 3E/CF89: 18 CLC 3E/CF8A: 69 06 ADC #$06 3E/CF8C: 85 85 STA $85 3E/CF8E: A5 84 LDA $84 3E/CF90: 38 SEC 3E/CF91: E9 03 SBC #$03 3E/CF93: 85 84 STA $84 3E/CF95: C9 1F CMP #$1F 3E/CF97: B0 EB BCS $CF84 3E/CF99: A9 00 LDA #$00 3E/CF9B: 8D 01 20 STA $2001 3E/CF9E: 60 RTS ; [ screen wipe in (world map) ] 3E/CF9F: 20 F8 D0 JSR $D0F8 ; hide all sprites 3E/CFA2: A9 1F LDA #$1F 3E/CFA4: 85 84 STA $84 3E/CFA6: A9 A3 LDA #$A3 3E/CFA8: 85 85 STA $85 3E/CFAA: 20 C5 CF JSR $CFC5 ; update screen wipe 3E/CFAD: A5 85 LDA $85 3E/CFAF: 38 SEC 3E/CFB0: E9 06 SBC #$06 3E/CFB2: 85 85 STA $85 3E/CFB4: A5 84 LDA $84 3E/CFB6: 18 CLC 3E/CFB7: 69 03 ADC #$03 3E/CFB9: 85 84 STA $84 3E/CFBB: C9 70 CMP #$70 3E/CFBD: 90 EB BCC $CFAA 3E/CFBF: A9 0A LDA #$0A 3E/CFC1: 8D 01 20 STA $2001 3E/CFC4: 60 RTS ; [ update screen wipe (world map) ] ; the cycle and scanline counting here is not great, but apparently it's ; good enough to get a fairly smooth wipe ; $84: scanlines before turning bg off ; $85: scanlines before turning bg back on 3E/CFC5: 20 00 FF JSR $FF00 ; wait for vblank 3E/CFC8: A9 0A LDA #$0A ; show background 3E/CFCA: 8D 01 20 STA $2001 3E/CFCD: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3E/CFD0: 20 26 D0 JSR $D026 ; update ppu scroll for screen wipe 3E/CFD3: 20 57 D0 JSR $D057 ; wait for vblank to end 3E/CFD6: A6 84 LDX $84 3E/CFD8: 20 64 CF JSR $CF64 ; wait one scanline 3E/CFDB: CA DEX 3E/CFDC: D0 FA BNE $CFD8 3E/CFDE: A9 00 LDA #$00 ; turn off all layers 3E/CFE0: 8D 01 20 STA $2001 3E/CFE3: A6 85 LDX $85 3E/CFE5: 20 64 CF JSR $CF64 ; wait one scanline 3E/CFE8: CA DEX 3E/CFE9: D0 FA BNE $CFE5 3E/CFEB: AD 02 20 LDA $2002 ; latch ppu 3E/CFEE: A6 2F LDX $2F ; top scroll position 3E/CFF0: BD 17 D0 LDA $D017,X ; change ppu address on the fly 3E/CFF3: 8D 06 20 STA $2006 3E/CFF6: BD 07 D0 LDA $D007,X 3E/CFF9: 8D 06 20 STA $2006 3E/CFFC: 20 26 D0 JSR $D026 ; update ppu scroll for screen wipe 3E/CFFF: A9 0A LDA #$0A ; show background 3E/D001: 8D 01 20 STA $2001 3E/D004: 4C 50 C7 JMP $C750 ; update sound ; ppu address for bottom half of screen wipe 3E/D007: E0 20 60 A0 E0 20 60 A0 20 60 A0 E0 20 60 A0 E0 3E/D017: 21 22 22 22 22 23 23 23 20 20 20 20 21 21 21 ; [ update ppu scroll for screen wipe ] 3E/D026: A9 70 LDA #$70 3E/D028: 38 SEC 3E/D029: E5 84 SBC $84 3E/D02B: 29 7F AND #$7F 3E/D02D: 85 80 STA $80 3E/D02F: A5 FD LDA $FD 3E/D031: 85 FF STA $FF 3E/D033: 8D 00 20 STA $2000 ; set ppu control 3E/D036: AD 02 20 LDA $2002 ; latch ppu 3E/D039: A5 27 LDA $27 ; horizontal scroll 3E/D03B: 0A ASL 3E/D03C: 0A ASL 3E/D03D: 0A ASL 3E/D03E: 0A ASL 3E/D03F: 8D 05 20 STA $2005 3E/D042: A5 2F LDA $2F ; vertical scroll 3E/D044: 0A ASL 3E/D045: 0A ASL 3E/D046: 0A ASL 3E/D047: 0A ASL 3E/D048: 18 CLC 3E/D049: 65 80 ADC $80 3E/D04B: B0 04 BCS $D051 3E/D04D: C9 F0 CMP #$F0 3E/D04F: 90 02 BCC $D053 3E/D051: 69 0F ADC #$0F 3E/D053: 8D 05 20 STA $2005 3E/D056: 60 RTS ; [ wait for vblank to end ] ; 2608 cycles total ~ 23 scanlines 3E/D057: A2 90 LDX #$90 ; 2 cycles 3E/D059: A0 03 LDY #$03 ; 288 cycles 3E/D05B: 88 DEY ; 864 cycles 3E/D05C: D0 FD BNE $D05B ; 864 cycles 3E/D05E: CA DEX ; 288 cycles 3E/D05F: D0 F8 BNE $D059 ; 288 cycles 3E/D061: EA NOP ; 2 cycles 3E/D062: EA NOP ; 2 cycles 3E/D063: EA NOP ; 2 cycles 3E/D064: EA NOP ; 2 cycles 3E/D065: 60 RTS ; 6 cycles ; [ screen wipe in (normal map) ] 3E/D066: 20 F2 D0 JSR $D0F2 ; hide all sprites 3E/D069: A9 85 LDA #$85 3E/D06B: 85 84 STA $84 3E/D06D: A9 01 LDA #$01 3E/D06F: 85 85 STA $85 3E/D071: 20 C5 D0 JSR $D0C5 3E/D074: A5 84 LDA $84 3E/D076: 38 SEC 3E/D077: E9 03 SBC #$03 3E/D079: 85 84 STA $84 3E/D07B: A5 85 LDA $85 3E/D07D: 18 CLC 3E/D07E: 69 06 ADC #$06 3E/D080: 85 85 STA $85 3E/D082: C9 B6 CMP #$B6 3E/D084: 90 EB BCC $D071 3E/D086: A9 1E LDA #$1E 3E/D088: 8D 01 20 STA $2001 3E/D08B: 60 RTS ; [ screen wipe out (normal map) ] 3E/D08C: 20 F2 D0 JSR $D0F2 ; hide all sprites 3E/D08F: A9 29 LDA #$29 3E/D091: 85 84 STA $84 3E/D093: A9 B3 LDA #$B3 3E/D095: 85 85 STA $85 3E/D097: 20 C5 D0 JSR $D0C5 3E/D09A: A5 84 LDA $84 3E/D09C: 18 CLC 3E/D09D: 69 03 ADC #$03 3E/D09F: 85 84 STA $84 3E/D0A1: A5 85 LDA $85 3E/D0A3: 38 SEC 3E/D0A4: E9 06 SBC #$06 3E/D0A6: 85 85 STA $85 3E/D0A8: C9 06 CMP #$06 3E/D0AA: B0 EB BCS $D097 3E/D0AC: A9 00 LDA #$00 3E/D0AE: 8D 01 20 STA $2001 3E/D0B1: 60 RTS ; [ update ppu (screen wipe) ] 3E/D0B2: A9 02 LDA #$02 3E/D0B4: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/D0B7: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3E/D0BA: A5 2D LDA $2D 3E/D0BC: 4A LSR 3E/D0BD: B0 03 BCS $D0C2 ; branch if not on world map 3E/D0BF: 4C 9D C3 JMP $C39D ; never used ??? 3E/D0C2: 4C 71 E5 JMP $E571 ; update ppu registers ; [ update screen wipe (normal map) ] 3E/D0C5: 20 00 FF JSR $FF00 ; wait for vblank 3E/D0C8: 20 B2 D0 JSR $D0B2 ; update ppu 3E/D0CB: A2 0A LDX #$0A 3E/D0CD: CA DEX 3E/D0CE: D0 FD BNE $D0CD 3E/D0D0: A9 10 LDA #$10 3E/D0D2: 8D 01 20 STA $2001 3E/D0D5: A6 84 LDX $84 3E/D0D7: 20 64 CF JSR $CF64 ; wait one scanline 3E/D0DA: CA DEX 3E/D0DB: D0 FA BNE $D0D7 3E/D0DD: A9 1E LDA #$1E 3E/D0DF: 8D 01 20 STA $2001 3E/D0E2: A6 85 LDX $85 3E/D0E4: 20 64 CF JSR $CF64 ; wait one scanline 3E/D0E7: CA DEX 3E/D0E8: D0 FA BNE $D0E4 3E/D0EA: A9 10 LDA #$10 3E/D0EC: 8D 01 20 STA $2001 3E/D0EF: 4C 50 C7 JMP $C750 ; update sound ; [ hide all sprites ] 3E/D0F2: 20 F8 D0 JSR $D0F8 ; hide all sprites 3E/D0F5: 4C 50 C7 JMP $C750 ; update sound ; [ hide all sprites ] 3E/D0F8: A9 F0 LDA #$F0 3E/D0FA: A2 00 LDX #$00 3E/D0FC: 9D 00 02 STA $0200,X ; reset oam data 3E/D0FF: E8 INX 3E/D100: D0 FA BNE $D0FC 3E/D102: 20 00 FF JSR $FF00 ; wait for vblank 3E/D105: A9 02 LDA #$02 3E/D107: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/D10A: 60 RTS ; -------------------------------------------------------------------------- ; [ update character equipment ] 3E/D10B: 20 03 F8 JSR $F803 ; update character equipment 3E/D10E: A9 3C LDA #$3C 3E/D110: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ check which characters can equip item/spell ] 3E/D113: 48 PHA 3E/D114: A2 00 LDX #$00 3E/D116: 20 06 F8 JSR $F806 ; check if character can equip item/spell 3E/D119: C9 01 CMP #$01 3E/D11B: 26 80 ROL $80 3E/D11D: 68 PLA 3E/D11E: 48 PHA 3E/D11F: A2 40 LDX #$40 3E/D121: 20 06 F8 JSR $F806 ; check if character can equip item/spell 3E/D124: C9 01 CMP #$01 3E/D126: 26 80 ROL $80 3E/D128: 68 PLA 3E/D129: 48 PHA 3E/D12A: A2 80 LDX #$80 3E/D12C: 20 06 F8 JSR $F806 ; check if character can equip item/spell 3E/D12F: C9 01 CMP #$01 3E/D131: 26 80 ROL $80 3E/D133: 68 PLA 3E/D134: A2 C0 LDX #$C0 3E/D136: 20 06 F8 JSR $F806 ; check if character can equip item/spell 3E/D139: C9 01 CMP #$01 3E/D13B: 26 80 ROL $80 3E/D13D: A9 3C LDA #$3C 3E/D13F: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ init inventory equipability ] ; used by equip menu, checks all available items ; fills a buffer at $7200 indexed by item id 3E/D142: A6 7F LDX $7F 3E/D144: BD 00 62 LDA $6200,X ; check currently equipped items 3E/D147: 20 81 D1 JSR $D181 3E/D14A: A6 7F LDX $7F 3E/D14C: BD 01 62 LDA $6201,X 3E/D14F: 20 81 D1 JSR $D181 3E/D152: A6 7F LDX $7F 3E/D154: BD 02 62 LDA $6202,X 3E/D157: 20 81 D1 JSR $D181 3E/D15A: A6 7F LDX $7F 3E/D15C: BD 03 62 LDA $6203,X 3E/D15F: 20 81 D1 JSR $D181 3E/D162: A6 7F LDX $7F 3E/D164: BD 05 62 LDA $6205,X 3E/D167: 20 81 D1 JSR $D181 3E/D16A: A2 00 LDX #$00 3E/D16C: 86 8F STX $8F 3E/D16E: BD C0 60 LDA $60C0,X ; check inventory items 3E/D171: 20 81 D1 JSR $D181 3E/D174: E6 8F INC $8F 3E/D176: A6 8F LDX $8F 3E/D178: E0 20 CPX #$20 3E/D17A: 90 F2 BCC $D16E 3E/D17C: A9 3C LDA #$3C 3E/D17E: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ check item equipability ] 3E/D181: F0 14 BEQ $D197 ; return if no item 3E/D183: AA TAX 3E/D184: C9 98 CMP #$98 3E/D186: B0 0C BCS $D194 ; from 3E/D1A1 3E/D188: 48 PHA 3E/D189: A6 7F LDX $7F 3E/D18B: 20 06 F8 JSR $F806 ; check if character can equip item/spell 3E/D18E: 85 80 STA $80 3E/D190: 68 PLA 3E/D191: AA TAX 3E/D192: A5 80 LDA $80 3E/D194: 9D 00 72 STA $7200,X 3E/D197: 60 RTS ; [ init spell equipability ] 3E/D198: A2 00 LDX #$00 3E/D19A: 86 8F STX $8F 3E/D19C: BD 00 7C LDA $7C00,X ; spell id 3E/D19F: F0 03 BEQ $D1A4 3E/D1A1: 20 88 D1 JSR $D188 ; check spell equipability 3E/D1A4: E6 8F INC $8F 3E/D1A6: A6 8F LDX $8F 3E/D1A8: E0 18 CPX #$18 3E/D1AA: 90 F0 BCC $D19C 3E/D1AC: A9 3C LDA #$3C 3E/D1AE: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ load character text string ] ; load a text string to $7B01, replacing $10 with the given character escape code ; A: text index (offset $0100) 3E/D1B1: 48 PHA 3E/D1B2: A9 18 LDA #$18 3E/D1B4: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D1B7: A9 00 LDA #$00 ; text offset $0100 3E/D1B9: 85 82 STA $82 3E/D1BB: A9 82 LDA #$82 3E/D1BD: 85 83 STA $83 3E/D1BF: 68 PLA 3E/D1C0: 0A ASL 3E/D1C1: A8 TAY 3E/D1C2: 90 02 BCC $D1C6 3E/D1C4: E6 83 INC $83 3E/D1C6: B1 82 LDA ($82),Y ; pointer to text 3E/D1C8: 85 80 STA $80 3E/D1CA: C8 INY 3E/D1CB: B1 82 LDA ($82),Y 3E/D1CD: 48 PHA 3E/D1CE: 29 1F AND #$1F 3E/D1D0: 09 80 ORA #$80 3E/D1D2: 85 81 STA $81 3E/D1D4: 68 PLA 3E/D1D5: 4A LSR 3E/D1D6: 4A LSR 3E/D1D7: 4A LSR 3E/D1D8: 4A LSR 3E/D1D9: 4A LSR 3E/D1DA: 18 CLC 3E/D1DB: 69 18 ADC #$18 3E/D1DD: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D1E0: A0 00 LDY #$00 3E/D1E2: 8C 00 7B STY $7B00 3E/D1E5: B1 80 LDA ($80),Y 3E/D1E7: C9 28 CMP #$28 3E/D1E9: B0 15 BCS $D200 3E/D1EB: C9 10 CMP #$10 3E/D1ED: 90 11 BCC $D200 3E/D1EF: D0 02 BNE $D1F3 3E/D1F1: A5 9E LDA $9E ; replace $10 with correct character ; two-byte 3E/D1F3: 99 01 7B STA $7B01,Y 3E/D1F6: C8 INY 3E/D1F7: B1 80 LDA ($80),Y 3E/D1F9: 99 01 7B STA $7B01,Y 3E/D1FC: C8 INY 3E/D1FD: 4C E5 D1 JMP $D1E5 ; single-byte 3E/D200: 99 01 7B STA $7B01,Y 3E/D203: C8 INY 3E/D204: C9 00 CMP #$00 3E/D206: D0 DD BNE $D1E5 3E/D208: A9 3C LDA #$3C 3E/D20A: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; -------------------------------------------------------------------------- ; [ cursor sound effect (confirm) ] 3E/D20D: A9 85 LDA #$85 3E/D20F: 8D 49 7F STA $7F49 3E/D212: 60 RTS ; [ cursor sound effect (move) ] 3E/D213: A9 98 LDA #$98 3E/D215: 8D 49 7F STA $7F49 3E/D218: 60 RTS ; [ execute event script / update joypad input ] ; also used to update joypad input on menus 3E/D219: A5 6C LDA $6C 3E/D21B: F0 5D BEQ $D27A ; update joypad input 3E/D21D: A5 17 LDA $17 3E/D21F: F0 05 BEQ $D226 3E/D221: C6 17 DEC $17 ; decrement event repeat counter 3E/D223: 4C 6D D2 JMP $D26D 3E/D226: A9 2C LDA #$2C 3E/D228: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D22B: A0 00 LDY #$00 3E/D22D: B1 72 LDA ($72),Y ; event command 3E/D22F: C9 FE CMP #$FE 3E/D231: D0 19 BNE $D24C ; branch if not repeat 3E/D233: C8 INY 3E/D234: B1 72 LDA ($72),Y ; set event repeat counter 3E/D236: 85 17 STA $17 3E/D238: C6 17 DEC $17 3E/D23A: A5 72 LDA $72 ; increment event script pointer 3E/D23C: 18 CLC 3E/D23D: 69 02 ADC #$02 3E/D23F: 85 72 STA $72 3E/D241: A5 73 LDA $73 3E/D243: 69 00 ADC #$00 3E/D245: 85 73 STA $73 3E/D247: A9 3C LDA #$3C 3E/D249: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D24C: 85 70 STA $70 3E/D24E: C8 INY 3E/D24F: B1 72 LDA ($72),Y 3E/D251: 85 71 STA $71 3E/D253: A2 01 LDX #$01 3E/D255: A5 70 LDA $70 3E/D257: C9 E4 CMP #$E4 ; event commands $00-$E3 are 1 byte 3E/D259: 90 06 BCC $D261 3E/D25B: C9 FD CMP #$FD ; event commands $E4-$FC are 2 bytes 3E/D25D: B0 02 BCS $D261 ; event commands $FD and $FF are 1 byte 3E/D25F: A2 02 LDX #$02 3E/D261: 8A TXA 3E/D262: 18 CLC 3E/D263: 65 72 ADC $72 ; increment event script pointer 3E/D265: 85 72 STA $72 3E/D267: A5 73 LDA $73 3E/D269: 69 00 ADC #$00 3E/D26B: 85 73 STA $73 3E/D26D: A9 3B LDA #$3B 3E/D26F: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/D272: 20 00 A0 JSR $A000 ; execute event command 3E/D275: A9 3C LDA #$3C 3E/D277: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ update joypad input ] 3E/D27A: 20 81 D2 JSR $D281 ; read joypad registers 3E/D27D: 20 9A D2 JSR $D29A ; update button data 3E/D280: 60 RTS ; [ read joypad registers ] 3E/D281: A9 01 LDA #$01 3E/D283: 8D 16 40 STA $4016 3E/D286: A9 00 LDA #$00 3E/D288: 8D 16 40 STA $4016 3E/D28B: A2 08 LDX #$08 3E/D28D: AD 16 40 LDA $4016 3E/D290: 29 03 AND #$03 ; support expansion controllers 3E/D292: C9 01 CMP #$01 3E/D294: 26 20 ROL $20 3E/D296: CA DEX 3E/D297: D0 F4 BNE $D28D 3E/D299: 60 RTS ; [ update button data ] 3E/D29A: A5 20 LDA $20 3E/D29C: 29 03 AND #$03 3E/D29E: F0 02 BEQ $D2A2 3E/D2A0: A2 03 LDX #$03 ; left or right pressed 3E/D2A2: 86 81 STX $81 3E/D2A4: A5 20 LDA $20 3E/D2A6: 29 0C AND #$0C 3E/D2A8: F0 05 BEQ $D2AF 3E/D2AA: 8A TXA 3E/D2AB: 09 0C ORA #$0C ; up or down pressed 3E/D2AD: 85 81 STA $81 3E/D2AF: A5 20 LDA $20 3E/D2B1: 45 21 EOR $21 3E/D2B3: 25 81 AND $81 3E/D2B5: 45 21 EOR $21 3E/D2B7: 85 21 STA $21 3E/D2B9: 45 20 EOR $20 3E/D2BB: AA TAX 3E/D2BC: 29 10 AND #$10 3E/D2BE: F0 0E BEQ $D2CE 3E/D2C0: A5 20 LDA $20 3E/D2C2: 29 10 AND #$10 3E/D2C4: F0 02 BEQ $D2C8 3E/D2C6: E6 23 INC $23 ; start button pressed 3E/D2C8: A5 21 LDA $21 3E/D2CA: 49 10 EOR #$10 3E/D2CC: 85 21 STA $21 3E/D2CE: 8A TXA 3E/D2CF: 29 20 AND #$20 3E/D2D1: F0 0E BEQ $D2E1 3E/D2D3: A5 20 LDA $20 3E/D2D5: 29 20 AND #$20 3E/D2D7: F0 02 BEQ $D2DB 3E/D2D9: E6 22 INC $22 ; select button pressed 3E/D2DB: A5 21 LDA $21 3E/D2DD: 49 20 EOR #$20 3E/D2DF: 85 21 STA $21 3E/D2E1: 8A TXA 3E/D2E2: 29 40 AND #$40 3E/D2E4: F0 0E BEQ $D2F4 3E/D2E6: A5 20 LDA $20 3E/D2E8: 29 40 AND #$40 3E/D2EA: F0 02 BEQ $D2EE 3E/D2EC: E6 25 INC $25 ; B button pressed 3E/D2EE: A5 21 LDA $21 3E/D2F0: 49 40 EOR #$40 3E/D2F2: 85 21 STA $21 3E/D2F4: 8A TXA 3E/D2F5: 29 80 AND #$80 3E/D2F7: F0 0E BEQ $D307 3E/D2F9: A5 20 LDA $20 3E/D2FB: 29 80 AND #$80 3E/D2FD: F0 02 BEQ $D301 3E/D2FF: E6 24 INC $24 ; A button pressed 3E/D301: A5 21 LDA $21 3E/D303: 49 80 EOR #$80 3E/D305: 85 21 STA $21 3E/D307: 60 RTS ; [ copy color palettes to ppu ] 3E/D308: AD 02 20 LDA $2002 3E/D30B: A9 3F LDA #$3F ; ppu address $3F00 (color palettes) 3E/D30D: 8D 06 20 STA $2006 3E/D310: A9 00 LDA #$00 3E/D312: 8D 06 20 STA $2006 3E/D315: A2 00 LDX #$00 3E/D317: BD C0 03 LDA $03C0,X 3E/D31A: 8D 07 20 STA $2007 3E/D31D: E8 INX 3E/D31E: E0 20 CPX #$20 3E/D320: 90 F5 BCC $D317 3E/D322: AD 02 20 LDA $2002 3E/D325: A9 3F LDA #$3F 3E/D327: 8D 06 20 STA $2006 3E/D32A: A9 00 LDA #$00 3E/D32C: 8D 06 20 STA $2006 3E/D32F: 8D 06 20 STA $2006 3E/D332: 8D 06 20 STA $2006 3E/D335: 60 RTS ; [ ] 3E/D336: 20 86 C4 JSR $C486 ; clear oam data 3E/D339: 20 00 FF JSR $FF00 ; wait for vblank 3E/D33C: A9 02 LDA #$02 3E/D33E: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/D341: 60 RTS ; [ update ppu registers ] 3E/D342: A5 2D LDA $2D 3E/D344: 4A LSR 3E/D345: 90 03 BCC $D34A ; branch if on world map 3E/D347: 4C 71 E5 JMP $E571 ; update ppu registers (normal map) 3E/D34A: 4C 98 C3 JMP $C398 ; update ppu registers (world map) ; [ flash screen for battle ] 3E/D34D: A9 95 LDA #$95 3E/D34F: 8D 49 7F STA $7F49 3E/D352: A9 00 LDA #$00 3E/D354: 85 8C STA $8C 3E/D356: 20 00 FF JSR $FF00 ; wait for vblank 3E/D359: 20 42 D3 JSR $D342 ; update ppu registers 3E/D35C: A5 8C LDA $8C 3E/D35E: 29 01 AND #$01 3E/D360: 09 1E ORA #$1E 3E/D362: 8D 01 20 STA $2001 3E/D365: 20 50 C7 JSR $C750 ; update sound 3E/D368: E6 8C INC $8C 3E/D36A: A5 8C LDA $8C 3E/D36C: C9 41 CMP #$41 3E/D36E: 90 E6 BCC $D356 3E/D370: 20 00 FF JSR $FF00 ; wait for vblank 3E/D373: A9 0F LDA #$0F 3E/D375: 8D D0 03 STA $03D0 3E/D378: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3E/D37B: A9 00 LDA #$00 3E/D37D: 8D 01 20 STA $2001 3E/D380: 60 RTS ; [ ] 3E/D381: AD 02 20 LDA $2002 3E/D384: A2 00 LDX #$00 3E/D386: A9 3F LDA #$3F 3E/D388: 8D 06 20 STA $2006 3E/D38B: A9 00 LDA #$00 3E/D38D: 8D 06 20 STA $2006 3E/D390: BD F0 03 LDA $03F0,X 3E/D393: 8D 07 20 STA $2007 3E/D396: E8 INX 3E/D397: E0 10 CPX #$10 3E/D399: 90 F5 BCC $D390 3E/D39B: AD 02 20 LDA $2002 3E/D39E: A9 3F LDA #$3F 3E/D3A0: 8D 06 20 STA $2006 3E/D3A3: A9 00 LDA #$00 3E/D3A5: 8D 06 20 STA $2006 3E/D3A8: 8D 06 20 STA $2006 3E/D3AB: 8D 06 20 STA $2006 3E/D3AE: 60 RTS ; [ darken/restore bg palette ] ; carry clear = darken, set = restore 3E/D3AF: A9 02 LDA #$02 3E/D3B1: 85 61 STA $61 3E/D3B3: B0 30 BCS $D3E5 ; darken 3E/D3B5: A2 0F LDX #$0F 3E/D3B7: BD C0 03 LDA $03C0,X 3E/D3BA: 29 1F AND #$1F 3E/D3BC: 9D F0 03 STA $03F0,X 3E/D3BF: CA DEX 3E/D3C0: 10 F5 BPL $D3B7 3E/D3C2: A9 01 LDA #$01 3E/D3C4: 48 PHA 3E/D3C5: 29 03 AND #$03 3E/D3C7: D0 07 BNE $D3D0 3E/D3C9: 20 40 D4 JSR $D440 3E/D3CC: C0 00 CPY #$00 3E/D3CE: F0 13 BEQ $D3E3 3E/D3D0: 20 00 FF JSR $FF00 ; wait for vblank 3E/D3D3: 20 81 D3 JSR $D381 3E/D3D6: 20 42 D3 JSR $D342 ; update ppu registers 3E/D3D9: 20 50 C7 JSR $C750 ; update sound 3E/D3DC: 68 PLA 3E/D3DD: 18 CLC 3E/D3DE: 69 01 ADC #$01 3E/D3E0: 4C C4 D3 JMP $D3C4 3E/D3E3: 68 PLA 3E/D3E4: 60 RTS ; restore 3E/D3E5: A9 01 LDA #$01 3E/D3E7: 48 PHA 3E/D3E8: 29 03 AND #$03 3E/D3EA: D0 07 BNE $D3F3 3E/D3EC: 20 10 D4 JSR $D410 3E/D3EF: C0 00 CPY #$00 3E/D3F1: F0 13 BEQ $D406 3E/D3F3: 20 00 FF JSR $FF00 ; wait for vblank 3E/D3F6: 20 81 D3 JSR $D381 3E/D3F9: 20 42 D3 JSR $D342 ; update ppu registers 3E/D3FC: 20 50 C7 JSR $C750 ; update sound 3E/D3FF: 68 PLA 3E/D400: 18 CLC 3E/D401: 69 01 ADC #$01 3E/D403: 4C E7 D3 JMP $D3E7 3E/D406: 68 PLA 3E/D407: 20 00 FF JSR $FF00 ; wait for vblank 3E/D40A: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3E/D40D: 4C 42 D3 JMP $D342 ; update ppu registers ; [ ] 3E/D410: A0 00 LDY #$00 3E/D412: A2 0F LDX #$0F 3E/D414: BD F0 03 LDA $03F0,X 3E/D417: C9 0F CMP #$0F 3E/D419: F0 21 BEQ $D43C 3E/D41B: 48 PHA 3E/D41C: 29 10 AND #$10 3E/D41E: 85 80 STA $80 3E/D420: BD C0 03 LDA $03C0,X 3E/D423: 29 0F AND #$0F 3E/D425: 85 61 STA $61 3E/D427: 68 PLA 3E/D428: 29 0F AND #$0F 3E/D42A: C5 61 CMP $61 3E/D42C: F0 0E BEQ $D43C 3E/D42E: B0 04 BCS $D434 3E/D430: 69 01 ADC #$01 3E/D432: D0 02 BNE $D436 3E/D434: E9 01 SBC #$01 3E/D436: 05 80 ORA $80 3E/D438: 9D F0 03 STA $03F0,X 3E/D43B: C8 INY 3E/D43C: CA DEX 3E/D43D: 10 D5 BPL $D414 3E/D43F: 60 RTS ; [ ] 3E/D440: A0 00 LDY #$00 3E/D442: A2 0F LDX #$0F 3E/D444: BD F0 03 LDA $03F0,X 3E/D447: C9 0F CMP #$0F 3E/D449: F0 1A BEQ $D465 3E/D44B: 48 PHA 3E/D44C: 29 10 AND #$10 3E/D44E: 85 80 STA $80 3E/D450: 68 PLA 3E/D451: 29 0F AND #$0F 3E/D453: C5 61 CMP $61 3E/D455: F0 0E BEQ $D465 3E/D457: B0 04 BCS $D45D 3E/D459: 69 01 ADC #$01 3E/D45B: D0 02 BNE $D45F 3E/D45D: E9 01 SBC #$01 3E/D45F: 05 80 ORA $80 3E/D461: 9D F0 03 STA $03F0,X 3E/D464: C8 INY 3E/D465: CA DEX 3E/D466: 10 DC BPL $D444 3E/D468: 60 RTS ; [ ] 3E/D469: 85 8C STA $8C 3E/D46B: 20 36 D3 JSR $D336 3E/D46E: 20 D0 D4 JSR $D4D0 3E/D471: A9 01 LDA #$01 3E/D473: 48 PHA 3E/D474: 29 03 AND #$03 3E/D476: D0 07 BNE $D47F 3E/D478: 20 F3 D4 JSR $D4F3 3E/D47B: C0 00 CPY #$00 3E/D47D: F0 13 BEQ $D492 3E/D47F: 20 00 FF JSR $FF00 ; wait for vblank 3E/D482: 20 81 D3 JSR $D381 3E/D485: 20 A2 D4 JSR $D4A2 3E/D488: 20 50 C7 JSR $C750 ; update sound 3E/D48B: 68 PLA 3E/D48C: 18 CLC 3E/D48D: 69 01 ADC #$01 3E/D48F: 4C 73 D4 JMP $D473 3E/D492: 68 PLA 3E/D493: A5 8C LDA $8C 3E/D495: 4A LSR 3E/D496: B0 05 BCS $D49D 3E/D498: A9 00 LDA #$00 3E/D49A: 8D 01 20 STA $2001 3E/D49D: A9 3C LDA #$3C 3E/D49F: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ ] 3E/D4A2: A5 8C LDA $8C 3E/D4A4: 29 04 AND #$04 3E/D4A6: F0 13 BEQ $D4BB 3E/D4A8: A5 FF LDA $FF 3E/D4AA: 8D 00 20 STA $2000 3E/D4AD: A9 0A LDA #$0A 3E/D4AF: 8D 01 20 STA $2001 3E/D4B2: A9 00 LDA #$00 3E/D4B4: 8D 05 20 STA $2005 3E/D4B7: 8D 05 20 STA $2005 3E/D4BA: 60 RTS 3E/D4BB: A5 8C LDA $8C 3E/D4BD: 29 02 AND #$02 3E/D4BF: D0 06 BNE $D4C7 3E/D4C1: 20 98 C3 JSR $C398 ; update ppu registers 3E/D4C4: 4C CA D4 JMP $D4CA 3E/D4C7: 20 71 E5 JSR $E571 ; update ppu registers 3E/D4CA: A9 0A LDA #$0A 3E/D4CC: 8D 01 20 STA $2001 3E/D4CF: 60 RTS ; [ ] 3E/D4D0: A2 00 LDX #$00 3E/D4D2: A5 8C LDA $8C 3E/D4D4: 4A LSR 3E/D4D5: 90 10 BCC $D4E7 3E/D4D7: 20 E7 D4 JSR $D4E7 3E/D4DA: CA DEX 3E/D4DB: BD F0 03 LDA $03F0,X 3E/D4DE: 29 0F AND #$0F 3E/D4E0: 9D F0 03 STA $03F0,X 3E/D4E3: CA DEX 3E/D4E4: 10 F5 BPL $D4DB 3E/D4E6: 60 RTS ; [ ] 3E/D4E7: BD C0 03 LDA $03C0,X 3E/D4EA: 9D F0 03 STA $03F0,X 3E/D4ED: E8 INX 3E/D4EE: E0 10 CPX #$10 3E/D4F0: 90 F5 BCC $D4E7 3E/D4F2: 60 RTS ; [ ] 3E/D4F3: A0 00 LDY #$00 3E/D4F5: A2 00 LDX #$00 3E/D4F7: A5 8C LDA $8C 3E/D4F9: 4A LSR 3E/D4FA: B0 18 BCS $D514 3E/D4FC: BD F0 03 LDA $03F0,X 3E/D4FF: C9 0F CMP #$0F 3E/D501: F0 0B BEQ $D50E 3E/D503: 38 SEC 3E/D504: E9 10 SBC #$10 3E/D506: B0 02 BCS $D50A 3E/D508: A9 0F LDA #$0F 3E/D50A: 9D F0 03 STA $03F0,X 3E/D50D: C8 INY 3E/D50E: E8 INX 3E/D50F: E0 10 CPX #$10 3E/D511: D0 E9 BNE $D4FC 3E/D513: 60 RTS 3E/D514: BD F0 03 LDA $03F0,X 3E/D517: DD C0 03 CMP $03C0,X 3E/D51A: F0 07 BEQ $D523 3E/D51C: 18 CLC 3E/D51D: 69 10 ADC #$10 3E/D51F: 9D F0 03 STA $03F0,X 3E/D522: C8 INY 3E/D523: E8 INX 3E/D524: E0 10 CPX #$10 3E/D526: 90 EC BCC $D514 3E/D528: 60 RTS ; [ error sound effect ] 3E/D529: A9 86 LDA #$86 3E/D52B: 8D 49 7F STA $7F49 3E/D52E: 60 RTS ; -------------------------------------------------------------------------- ; [ draw leviathan shadow sprite ] 3E/D52F: A9 3C LDA #$3C 3E/D531: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D534: 4C 08 89 JMP $8908 ; draw leviathan shadow sprite ; [ draw misc. floating continent sprites ] 3E/D537: AD 20 60 LDA $6020 3E/D53A: 29 01 AND #$01 3E/D53C: F0 0E BEQ $D54C ; boulder 3E/D53E: A2 51 LDX #$51 ; boulder at (81,54) 3E/D540: A0 36 LDY #$36 3E/D542: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/D545: B0 5B BCS $D5A2 3E/D547: A9 90 LDA #$90 3E/D549: 4C 03 D6 JMP $D603 ; whirlpool 3E/D54C: AD 20 60 LDA $6020 3E/D54F: 29 04 AND #$04 3E/D551: F0 13 BEQ $D566 3E/D553: A2 43 LDX #$43 ; whirlpool at (67,32) 3E/D555: A0 20 LDY #$20 3E/D557: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/D55A: B0 0A BCS $D566 3E/D55C: A5 F0 LDA $F0 3E/D55E: 4A LSR 3E/D55F: 29 0C AND #$0C 3E/D561: 09 B0 ORA #$B0 3E/D563: 4C 03 D6 JMP $D603 ; hein's castle 1 3E/D566: AD 20 60 LDA $6020 3E/D569: 29 08 AND #$08 3E/D56B: F0 36 BEQ $D5A3 3E/D56D: A9 3B LDA #$3B 3E/D56F: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/D572: A2 00 LDX #$00 3E/D574: 20 03 A0 JSR $A003 ; execute object command 3E/D577: A5 81 LDA $81 3E/D579: 18 CLC 3E/D57A: 69 2D ADC #$2D ; hein's castle at (45,86)ish 3E/D57C: AA TAX 3E/D57D: A5 83 LDA $83 3E/D57F: 18 CLC 3E/D580: 69 56 ADC #$56 3E/D582: A8 TAY 3E/D583: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/D586: B0 1A BCS $D5A2 3E/D588: A5 40 LDA $40 3E/D58A: 18 CLC 3E/D58B: 65 80 ADC $80 3E/D58D: B0 13 BCS $D5A2 3E/D58F: 85 40 STA $40 3E/D591: A5 41 LDA $41 3E/D593: 18 CLC 3E/D594: 65 82 ADC $82 3E/D596: B0 0A BCS $D5A2 3E/D598: 85 41 STA $41 3E/D59A: A9 3C LDA #$3C 3E/D59C: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D59F: 4C C2 88 JMP $88C2 3E/D5A2: 60 RTS ; hein's castle 2 3E/D5A3: AD 2F 60 LDA $602F 3E/D5A6: 4A LSR 3E/D5A7: 4A LSR 3E/D5A8: 90 F8 BCC $D5A2 3E/D5AA: A9 3B LDA #$3B 3E/D5AC: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/D5AF: A2 02 LDX #$02 3E/D5B1: 20 03 A0 JSR $A003 ; execute object command 3E/D5B4: A5 81 LDA $81 3E/D5B6: 18 CLC 3E/D5B7: 69 2D ADC #$2D ; hein's castle offset from (45,86) 3E/D5B9: AA TAX 3E/D5BA: A5 83 LDA $83 3E/D5BC: 18 CLC 3E/D5BD: 69 56 ADC #$56 3E/D5BF: A8 TAY 3E/D5C0: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/D5C3: B0 DD BCS $D5A2 3E/D5C5: A5 40 LDA $40 3E/D5C7: 18 CLC 3E/D5C8: 65 80 ADC $80 3E/D5CA: B0 D6 BCS $D5A2 3E/D5CC: 85 40 STA $40 3E/D5CE: 85 E6 STA $E6 3E/D5D0: A5 41 LDA $41 3E/D5D2: 18 CLC 3E/D5D3: 65 82 ADC $82 3E/D5D5: B0 CB BCS $D5A2 3E/D5D7: 85 41 STA $41 3E/D5D9: 85 E7 STA $E7 3E/D5DB: A9 3C LDA #$3C 3E/D5DD: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D5E0: 4C DB 88 JMP $88DB ; [ draw floating continent sprite ] 3E/D5E3: A9 3C LDA #$3C 3E/D5E5: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D5E8: 4C 87 88 JMP $8887 ; draw floating continent sprite ; [ draw cursor sprite ] 3E/D5EB: A9 E4 LDA #$E4 ; tile offset (cursor) 3E/D5ED: 85 82 STA $82 3E/D5EF: A5 37 LDA $37 3E/D5F1: D0 12 BNE $D605 ; branch if in menu 3E/D5F3: A9 F2 LDA #$F2 ; 3E/DCFA (palette 0) 3E/D5F5: 18 CLC 3E/D5F6: 69 08 ADC #$08 3E/D5F8: 85 80 STA $80 3E/D5FA: A9 DC LDA #$DC 3E/D5FC: 69 00 ADC #$00 3E/D5FE: 85 81 STA $81 3E/D600: 4C 3A DA JMP $DA3A ; draw object sprite 3E/D603: 85 82 STA $82 3E/D605: A9 DC LDA #$DC ; 3E/DCF2 (palette 3) 3E/D607: 85 81 STA $81 3E/D609: A9 F2 LDA #$F2 3E/D60B: 85 80 STA $80 3E/D60D: 4C 3A DA JMP $DA3A ; draw object sprite ; [ draw invincible sprite ] ; subroutine starts at 3E/D622 3E/D610: A5 A6 LDA $A6 3E/D612: 20 7E D9 JSR $D97E ; calculate invincible y position 3E/D615: 38 SEC 3E/D616: 69 5F ADC #$5F 3E/D618: 85 41 STA $41 3E/D61A: A9 3C LDA #$3C 3E/D61C: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D61F: 4C A1 87 JMP $87A1 ; subroutine starts here 3E/D622: A5 A6 LDA $A6 3E/D624: 10 16 BPL $D63C ; branch if not jumping 3E/D626: A5 F0 LDA $F0 3E/D628: 4A LSR 3E/D629: A9 00 LDA #$00 ; increment y-offset every 2 frames 3E/D62B: 65 A6 ADC $A6 3E/D62D: 85 A6 STA $A6 3E/D62F: 29 1F AND #$1F 3E/D631: D0 DD BNE $D610 ; branch if jumping 3E/D633: A9 00 LDA #$00 3E/D635: 85 A6 STA $A6 3E/D637: A9 A8 LDA #$A8 ; sound effect $26 3E/D639: 8D 49 7F STA $7F49 3E/D63C: A5 33 LDA $33 3E/D63E: 29 0F AND #$0F 3E/D640: 0A ASL 3E/D641: 85 80 STA $80 3E/D643: AD 2F 60 LDA $602F 3E/D646: 29 40 AND #$40 3E/D648: F0 0E BEQ $D658 3E/D64A: A5 F0 LDA $F0 3E/D64C: 4A LSR 3E/D64D: 4A LSR 3E/D64E: 4A LSR 3E/D64F: 29 03 AND #$03 3E/D651: AA TAX 3E/D652: BD 02 DD LDA $DD02,X 3E/D655: 0A ASL 3E/D656: 85 80 STA $80 3E/D658: A5 F0 LDA $F0 3E/D65A: 29 04 AND #$04 3E/D65C: 0A ASL 3E/D65D: 0A ASL 3E/D65E: 0A ASL 3E/D65F: 05 80 ORA $80 3E/D661: AA TAX 3E/D662: 4C 8A D6 JMP $D68A ; [ draw inactive invincible ] ; subroutine starts at 3E/D666 3E/D665: 60 RTS ; subroutine starts here 3E/D666: A5 42 LDA $42 3E/D668: C9 07 CMP #$07 3E/D66A: F0 F9 BEQ $D665 ; return if in invincible 3E/D66C: AD 04 60 LDA $6004 3E/D66F: F0 F4 BEQ $D665 ; return if invincible is not visible 3E/D671: AD 07 60 LDA $6007 3E/D674: C5 78 CMP $78 3E/D676: D0 ED BNE $D665 ; return if invincible is not on this world 3E/D678: AE 05 60 LDX $6005 3E/D67B: AC 06 60 LDY $6006 3E/D67E: 88 DEY 3E/D67F: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/D682: B0 E1 BCS $D665 3E/D684: A5 F0 LDA $F0 3E/D686: 29 10 AND #$10 ; animation rate is 16 frames 3E/D688: 0A ASL 3E/D689: AA TAX 3E/D68A: A9 3C LDA #$3C 3E/D68C: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D68F: 20 57 88 JSR $8857 ; draw invincible sprite 3E/D692: A9 3A LDA #$3A 3E/D694: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ lift-off enterprise/surface nautilus ] ; subroutine starts at 3E/D6A7 ; surface nautilus 3E/D697: A9 5F LDA #$5F 3E/D699: 85 8A STA $8A 3E/D69B: 20 3E D7 JSR $D73E 3E/D69E: C6 8A DEC $8A ; move sprite up 3E/D6A0: A5 8A LDA $8A 3E/D6A2: C9 10 CMP #$10 3E/D6A4: B0 F5 BCS $D69B 3E/D6A6: 60 RTS ; subroutine starts here 3E/D6A7: A5 78 LDA $78 3E/D6A9: C9 04 CMP #$04 3E/D6AB: B0 EA BCS $D697 ; branch if underwater ; lift-off enterprise 3E/D6AD: A9 6F LDA #$6F 3E/D6AF: 85 8A STA $8A 3E/D6B1: A5 42 LDA $42 3E/D6B3: C9 04 CMP #$04 3E/D6B5: D0 07 BNE $D6BE ; branch if not enterprise 3E/D6B7: 20 7D D7 JSR $D77D ; transform enterprise into airship 3E/D6BA: A9 68 LDA #$68 3E/D6BC: 85 8A STA $8A ; lift-off 3E/D6BE: 20 3E D7 JSR $D73E 3E/D6C1: A5 F0 LDA $F0 3E/D6C3: 29 01 AND #$01 3E/D6C5: D0 F7 BNE $D6BE 3E/D6C7: C6 8A DEC $8A 3E/D6C9: A5 8A LDA $8A 3E/D6CB: C9 5F CMP #$5F 3E/D6CD: B0 EF BCS $D6BE 3E/D6CF: A9 02 LDA #$02 3E/D6D1: 85 33 STA $33 3E/D6D3: 60 RTS ; [ lift-off airship ] 3E/D6D4: A9 6F LDA #$6F 3E/D6D6: 85 8A STA $8A 3E/D6D8: 20 3E D7 JSR $D73E 3E/D6DB: A9 3C LDA #$3C 3E/D6DD: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D6E0: 20 B7 BE JSR $BEB7 3E/D6E3: A5 F0 LDA $F0 3E/D6E5: 29 01 AND #$01 3E/D6E7: D0 EF BNE $D6D8 3E/D6E9: C6 8A DEC $8A 3E/D6EB: A5 8A LDA $8A 3E/D6ED: C9 60 CMP #$60 3E/D6EF: B0 E7 BCS $D6D8 3E/D6F1: 60 RTS ; [ submerge nautilus ] 3E/D6F2: A9 5F LDA #$5F 3E/D6F4: 85 8A STA $8A 3E/D6F6: 20 3E D7 JSR $D73E 3E/D6F9: A9 3C LDA #$3C 3E/D6FB: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D6FE: 20 B7 BE JSR $BEB7 3E/D701: A5 F0 LDA $F0 3E/D703: 29 01 AND #$01 3E/D705: D0 EF BNE $D6F6 3E/D707: E6 8A INC $8A 3E/D709: A5 8A LDA $8A 3E/D70B: C9 70 CMP #$70 3E/D70D: 90 E7 BCC $D6F6 3E/D70F: 60 RTS ; [ land airship ] 3E/D710: 08 PHP 3E/D711: A9 5F LDA #$5F 3E/D713: 85 8A STA $8A 3E/D715: 20 3E D7 JSR $D73E 3E/D718: A5 F0 LDA $F0 3E/D71A: 29 01 AND #$01 3E/D71C: D0 F7 BNE $D715 3E/D71E: E6 8A INC $8A 3E/D720: A5 8A LDA $8A 3E/D722: A6 42 LDX $42 3E/D724: E0 04 CPX #$04 3E/D726: D0 0A BNE $D732 ; branch if not enterprise 3E/D728: C9 68 CMP #$68 3E/D72A: 90 E9 BCC $D715 3E/D72C: 28 PLP 3E/D72D: B0 8F BCS $D6BE 3E/D72F: 4C 89 D7 JMP $D789 ; transform enterprise into ship 3E/D732: C9 70 CMP #$70 3E/D734: 90 DF BCC $D715 3E/D736: 28 PLP 3E/D737: B0 85 BCS $D6BE 3E/D739: A9 01 LDA #$01 ; facing right 3E/D73B: 85 33 STA $33 3E/D73D: 60 RTS ; [ update airship lift-off/landing ] ; $8A: y position 3E/D73E: 20 00 FF JSR $FF00 ; wait for vblank 3E/D741: A9 02 LDA #$02 3E/D743: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/D746: A9 3A LDA #$3A 3E/D748: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D74B: 20 15 85 JSR $8515 ; update water animation 3E/D74E: E6 F0 INC $F0 3E/D750: 20 98 C3 JSR $C398 ; update ppu registers 3E/D753: 20 86 C4 JSR $C486 ; clear oam data 3E/D756: A9 3C LDA #$3C 3E/D758: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D75B: 20 F9 B7 JSR $B7F9 ; update water animation buffers 3E/D75E: 20 50 C7 JSR $C750 ; update sound 3E/D761: A9 70 LDA #$70 3E/D763: 85 40 STA $40 3E/D765: A5 8A LDA $8A 3E/D767: 85 41 STA $41 3E/D769: A5 F0 LDA $F0 3E/D76B: 29 08 AND #$08 3E/D76D: 09 10 ORA #$10 3E/D76F: 85 80 STA $80 3E/D771: A9 68 LDA #$68 ; airship 3E/D773: 20 07 DA JSR $DA07 ; draw vehicle sprite 3E/D776: 20 DA D9 JSR $D9DA 3E/D779: 20 5A D8 JSR $D85A ; update world map sprites 3E/D77C: 60 RTS ; [ transform enterprise into airship ] 3E/D77D: A9 00 LDA #$00 3E/D77F: 85 8A STA $8A 3E/D781: 20 99 D7 JSR $D799 3E/D784: E6 8A INC $8A 3E/D786: 10 F9 BPL $D781 3E/D788: 60 RTS ; [ transform enterprise into ship ] 3E/D789: A9 7F LDA #$7F 3E/D78B: 85 8A STA $8A 3E/D78D: 20 99 D7 JSR $D799 3E/D790: C6 8A DEC $8A 3E/D792: 10 F9 BPL $D78D 3E/D794: A9 02 LDA #$02 ; face left 3E/D796: 85 33 STA $33 3E/D798: 60 RTS ; [ update transforming enterprise ] ; $8A: animation counter (0 to 127) 3E/D799: A5 8A LDA $8A 3E/D79B: D0 06 BNE $D7A3 3E/D79D: A2 00 LDX #$00 3E/D79F: A0 AC LDY #$AC ; 0B/AC00 (normal ship) 3E/D7A1: D0 11 BNE $D7B4 3E/D7A3: 4A LSR 3E/D7A4: 4A LSR 3E/D7A5: 4A LSR 3E/D7A6: 4A LSR 3E/D7A7: 4A LSR 3E/D7A8: 18 CLC 3E/D7A9: 69 B1 ADC #$B1 ; 0B/B100 (transforming, 16 frames) 3E/D7AB: A8 TAY 3E/D7AC: A5 8A LDA $8A 3E/D7AE: 29 18 AND #$18 ; 4 tiles per frame 3E/D7B0: 0A ASL 3E/D7B1: 0A ASL 3E/D7B2: 0A ASL 3E/D7B3: AA TAX 3E/D7B4: A9 0B LDA #$0B 3E/D7B6: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/D7B9: 20 00 FF JSR $FF00 ; wait for vblank 3E/D7BC: A9 02 LDA #$02 3E/D7BE: 8D 14 40 STA $4014 ; dma oam data to ppu 3E/D7C1: E6 F0 INC $F0 3E/D7C3: 20 1E D8 JSR $D81E 3E/D7C6: A9 3A LDA #$3A 3E/D7C8: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D7CB: 20 15 85 JSR $8515 ; update water animation 3E/D7CE: 20 98 C3 JSR $C398 ; update ppu registers 3E/D7D1: 20 86 C4 JSR $C486 ; clear oam data 3E/D7D4: A9 3C LDA #$3C 3E/D7D6: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D7D9: 20 F9 B7 JSR $B7F9 ; update water animation buffers 3E/D7DC: 20 50 C7 JSR $C750 ; update sound 3E/D7DF: A9 00 LDA #$00 3E/D7E1: A6 8A LDX $8A 3E/D7E3: E0 60 CPX #$60 3E/D7E5: 90 0C BCC $D7F3 3E/D7E7: A9 80 LDA #$80 3E/D7E9: 38 SEC 3E/D7EA: E5 8A SBC $8A 3E/D7EC: 4A LSR 3E/D7ED: 4A LSR 3E/D7EE: 18 CLC 3E/D7EF: 69 68 ADC #$68 3E/D7F1: D0 03 BNE $D7F6 3E/D7F3: 18 CLC 3E/D7F4: 69 6F ADC #$6F 3E/D7F6: 85 41 STA $41 3E/D7F8: A2 00 LDX #$00 3E/D7FA: A5 8A LDA $8A 3E/D7FC: C9 60 CMP #$60 3E/D7FE: B0 08 BCS $D808 3E/D800: A2 01 LDX #$01 3E/D802: 29 04 AND #$04 3E/D804: D0 02 BNE $D808 3E/D806: A2 FF LDX #$FF 3E/D808: 8A TXA 3E/D809: 18 CLC 3E/D80A: 69 70 ADC #$70 3E/D80C: 85 40 STA $40 3E/D80E: A9 10 LDA #$10 3E/D810: 85 80 STA $80 3E/D812: A9 50 LDA #$50 ; ship 3E/D814: 20 07 DA JSR $DA07 ; draw vehicle sprite 3E/D817: 20 DA D9 JSR $D9DA 3E/D81A: 20 5A D8 JSR $D85A ; update world map sprites 3E/D81D: 60 RTS ; [ ] 3E/D81E: 2C 02 20 BIT $2002 3E/D821: A9 16 LDA #$16 3E/D823: 8D 06 20 STA $2006 3E/D826: A9 00 LDA #$00 3E/D828: 8D 06 20 STA $2006 3E/D82B: 86 80 STX $80 3E/D82D: 84 81 STY $81 3E/D82F: A0 00 LDY #$00 3E/D831: B1 80 LDA ($80),Y 3E/D833: 8D 07 20 STA $2007 3E/D836: C8 INY 3E/D837: C0 40 CPY #$40 3E/D839: 90 F6 BCC $D831 3E/D83B: 60 RTS ; [ update sprites (world map) ] 3E/D83C: A4 42 LDY $42 ; vehicle id 3E/D83E: 20 D3 D8 JSR $D8D3 ; update player sprites 3E/D841: 4C 5A D8 JMP $D85A ; update world map sprites ; [ update sprites (normal map) ] 3E/D844: A0 00 LDY #$00 ; no vehicle 3E/D846: 20 D3 D8 JSR $D8D3 ; update player sprites 3E/D849: 20 58 DB JSR $DB58 ; update guest npc sprites 3E/D84C: A9 40 LDA #$40 ; npcs start at sprite 16 3E/D84E: 85 26 STA $26 3E/D850: A2 06 LDX #$06 ; update npcs 3E/D852: A9 3B LDA #$3B 3E/D854: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/D857: 4C 03 A0 JMP $A003 ; execute object command ; [ update world map sprites ] 3E/D85A: A5 78 LDA $78 3E/D85C: 4A LSR 3E/D85D: F0 05 BEQ $D864 ; branch if world 0 or 1 3E/D85F: 4A LSR 3E/D860: F0 37 BEQ $D899 ; branch if world 2 or 3 3E/D862: D0 5E BNE $D8C2 ; branch if world 4 ; floating continent 3E/D864: A5 F0 LDA $F0 ; reverse order every other frame 3E/D866: 4A LSR 3E/D867: B0 18 BCS $D881 3E/D869: 20 58 DB JSR $DB58 ; update guest npc sprites 3E/D86C: 20 09 DB JSR $DB09 3E/D86F: 20 2F DB JSR $DB2F ; draw inactive airship 3E/D872: 20 D4 DA JSR $DAD4 ; draw inactive ship 3E/D875: 20 A3 DA JSR $DAA3 ; draw chocobo running away 3E/D878: 20 2F D5 JSR $D52F ; draw leviathan shadow sprite 3E/D87B: 20 37 D5 JSR $D537 ; draw misc. floating continent sprites 3E/D87E: 4C 66 D6 JMP $D666 ; draw inactive invincible 3E/D881: 20 66 D6 JSR $D666 ; draw inactive invincible 3E/D884: 20 37 D5 JSR $D537 ; draw misc. floating continent sprites 3E/D887: 20 2F D5 JSR $D52F ; draw leviathan shadow sprite 3E/D88A: 20 A3 DA JSR $DAA3 ; draw chocobo running away 3E/D88D: 20 D4 DA JSR $DAD4 ; draw inactive ship 3E/D890: 20 2F DB JSR $DB2F ; draw inactive airship 3E/D893: 20 09 DB JSR $DB09 3E/D896: 4C 58 DB JMP $DB58 ; update guest npc sprites ; flooded/surface world 3E/D899: A5 F0 LDA $F0 ; reverse order every other frame 3E/D89B: 4A LSR 3E/D89C: B0 12 BCS $D8B0 3E/D89E: 20 58 DB JSR $DB58 ; update guest npc sprites 3E/D8A1: 20 2F DB JSR $DB2F ; draw inactive airship 3E/D8A4: 20 D4 DA JSR $DAD4 ; draw inactive ship 3E/D8A7: 20 A3 DA JSR $DAA3 ; draw chocobo running away 3E/D8AA: 20 E3 D5 JSR $D5E3 ; draw floating continent sprite 3E/D8AD: 4C 66 D6 JMP $D666 ; draw inactive invincible 3E/D8B0: 20 66 D6 JSR $D666 ; draw inactive invincible 3E/D8B3: 20 E3 D5 JSR $D5E3 ; draw floating continent sprite 3E/D8B6: 20 A3 DA JSR $DAA3 ; draw chocobo running away 3E/D8B9: 20 D4 DA JSR $DAD4 ; draw inactive ship 3E/D8BC: 20 2F DB JSR $DB2F ; draw inactive airship 3E/D8BF: 4C 58 DB JMP $DB58 ; update guest npc sprites ; underwater 3E/D8C2: A9 3A LDA #$3A 3E/D8C4: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/D8C7: 4C 0F 85 JMP $850F ; update underwater bubbles ; y position for each vehicle sprite 3E/D8CA: 6C 6C 6F 6F 5F 5F 5F 5F ; [ update player sprites ] ; subroutine starts at 3E/D8D3 ; Y: vehicle id 3E/D8D2: 60 RTS ; subroutine starts here 3E/D8D3: 24 7E BIT $7E 3E/D8D5: 30 FB BMI $D8D2 ; return if player sprite hidden 3E/D8D7: A9 70 LDA #$70 ; x position is always $70 3E/D8D9: 85 40 STA $40 3E/D8DB: B9 CA D8 LDA $D8CA,Y ; get y position 3E/D8DE: 85 41 STA $41 3E/D8E0: A5 35 LDA $35 ; normal animation based on subtile position 3E/D8E2: 05 36 ORA $36 3E/D8E4: C0 04 CPY #$04 3E/D8E6: 90 03 BCC $D8EB ; branch if not in an airship 3E/D8E8: A5 F0 LDA $F0 3E/D8EA: 0A ASL ; airship animation is based on frame counter 3E/D8EB: 29 08 AND #$08 3E/D8ED: A6 33 LDX $33 ; facing direction 3E/D8EF: 1D 1A DC ORA $DC1A,X 3E/D8F2: 85 80 STA $80 3E/D8F4: AD 2F 60 LDA $602F 3E/D8F7: 29 40 AND #$40 3E/D8F9: F0 22 BEQ $D91D ; branch if not spinning ??? 3E/D8FB: A5 19 LDA $19 3E/D8FD: 18 CLC 3E/D8FE: 69 04 ADC #$04 3E/D900: 85 19 STA $19 3E/D902: 90 08 BCC $D90C 3E/D904: AD 2F 60 LDA $602F ; toggle spinning 3E/D907: 49 40 EOR #$40 3E/D909: 8D 2F 60 STA $602F 3E/D90C: A5 F0 LDA $F0 3E/D90E: 4A LSR 3E/D90F: 4A LSR 3E/D910: 4A LSR 3E/D911: 29 03 AND #$03 3E/D913: AA TAX 3E/D914: BD 02 DD LDA $DD02,X 3E/D917: AA TAX 3E/D918: BD 1A DC LDA $DC1A,X 3E/D91B: 85 80 STA $80 3E/D91D: C0 00 CPY #$00 3E/D91F: F0 42 BEQ $D963 3E/D921: C0 01 CPY #$01 3E/D923: F0 34 BEQ $D959 3E/D925: C0 02 CPY #$02 3E/D927: F0 2B BEQ $D954 3E/D929: C0 03 CPY #$03 3E/D92B: F0 1A BEQ $D947 3E/D92D: C0 04 CPY #$04 3E/D92F: F0 0B BEQ $D93C 3E/D931: C0 05 CPY #$05 3E/D933: F0 07 BEQ $D93C 3E/D935: C0 06 CPY #$06 3E/D937: F0 03 BEQ $D93C 3E/D939: 4C 22 D6 JMP $D622 ; draw invincible sprite ; airship 3E/D93C: A9 68 LDA #$68 3E/D93E: 20 07 DA JSR $DA07 ; draw vehicle sprite 3E/D941: 20 DA D9 JSR $D9DA ; draw airship shadow sprite 3E/D944: 4C 7C D7 JMP $D77C ; ship 3E/D947: A9 50 LDA #$50 3E/D949: 20 07 DA JSR $DA07 ; draw vehicle sprite 3E/D94C: A9 3C LDA #$3C 3E/D94E: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/D951: 4C 0A BF JMP $BF0A ; draw ship chain ; canoe 3E/D954: A9 20 LDA #$20 3E/D956: 4C 07 DA JMP $DA07 ; draw vehicle sprite ; chocobo 3E/D959: A9 38 LDA #$38 3E/D95B: 20 07 DA JSR $DA07 ; draw vehicle sprite 3E/D95E: A5 43 LDA $43 3E/D960: 4C A7 D9 JMP $D9A7 ; set sprite layer priority ; no vehicle 3E/D963: A5 80 LDA $80 3E/D965: 29 08 AND #$08 3E/D967: F0 0B BEQ $D974 3E/D969: A5 36 LDA $36 3E/D96B: F0 05 BEQ $D972 3E/D96D: C6 40 DEC $40 3E/D96F: 4C 74 D9 JMP $D974 3E/D972: C6 41 DEC $41 3E/D974: A9 00 LDA #$00 3E/D976: 20 2B DA JSR $DA2B ; draw player sprite 3E/D979: A5 43 LDA $43 3E/D97B: 4C A7 D9 JMP $D9A7 ; set sprite layer priority ; [ calculate invincible y position ] ; A: invincible jumping variable from $A6 3E/D97E: 29 1F AND #$1F 3E/D980: C9 10 CMP #$10 3E/D982: B0 16 BCS $D99A 3E/D984: 24 A6 BIT $A6 3E/D986: 70 08 BVS $D990 3E/D988: C9 0F CMP #$0F 3E/D98A: D0 04 BNE $D990 3E/D98C: A2 02 LDX #$02 3E/D98E: 86 AF STX $AF 3E/D990: 49 FF EOR #$FF 3E/D992: 60 RTS 3E/D993: A9 90 LDA #$90 3E/D995: 85 A6 STA $A6 3E/D997: A9 F0 LDA #$F0 3E/D999: 60 RTS 3E/D99A: A6 AF LDX $AF 3E/D99C: D0 F5 BNE $D993 3E/D99E: A6 34 LDX $34 3E/D9A0: D0 F1 BNE $D993 3E/D9A2: 29 1F AND #$1F 3E/D9A4: 49 E0 EOR #$E0 3E/D9A6: 60 RTS ; [ set sprite layer priority ] 3E/D9A7: 48 PHA 3E/D9A8: A5 26 LDA $26 3E/D9AA: 38 SEC 3E/D9AB: E9 10 SBC #$10 3E/D9AD: AA TAX 3E/D9AE: 68 PLA 3E/D9AF: 48 PHA 3E/D9B0: 29 24 AND #$24 3E/D9B2: F0 10 BEQ $D9C4 ; branch if upper sprites in front of bg 3E/D9B4: BD 0A 02 LDA $020A,X ; toggle layer priority of lower sprites 3E/D9B7: 49 20 EOR #$20 3E/D9B9: 9D 0A 02 STA $020A,X 3E/D9BC: BD 0E 02 LDA $020E,X 3E/D9BF: 49 20 EOR #$20 3E/D9C1: 9D 0E 02 STA $020E,X 3E/D9C4: 68 PLA 3E/D9C5: 29 14 AND #$14 3E/D9C7: F0 10 BEQ $D9D9 ; branch if lower sprites in front of bg 3E/D9C9: BD 02 02 LDA $0202,X ; toggle layer priority of upper sprites 3E/D9CC: 49 20 EOR #$20 3E/D9CE: 9D 02 02 STA $0202,X 3E/D9D1: BD 06 02 LDA $0206,X 3E/D9D4: 49 20 EOR #$20 3E/D9D6: 9D 06 02 STA $0206,X 3E/D9D9: 60 RTS ; [ draw airship shadow sprite ] 3E/D9DA: A5 F0 LDA $F0 3E/D9DC: 4A LSR 3E/D9DD: 90 27 BCC $DA06 3E/D9DF: A9 77 LDA #$77 3E/D9E1: 85 41 STA $41 3E/D9E3: A9 70 LDA #$70 3E/D9E5: 85 40 STA $40 3E/D9E7: A9 C0 LDA #$C0 3E/D9E9: 85 82 STA $82 3E/D9EB: A9 EA LDA #$EA ; 3E/DCEA 3E/D9ED: 85 80 STA $80 3E/D9EF: A9 DC LDA #$DC 3E/D9F1: 85 81 STA $81 3E/D9F3: 20 3A DA JSR $DA3A ; draw object sprite 3E/D9F6: A5 26 LDA $26 3E/D9F8: 38 SEC 3E/D9F9: E9 08 SBC #$08 3E/D9FB: 85 26 STA $26 3E/D9FD: AA TAX 3E/D9FE: A9 F0 LDA #$F0 3E/DA00: 9D 00 02 STA $0200,X 3E/DA03: 9D 04 02 STA $0204,X 3E/DA06: 60 RTS ; [ draw vehicle sprite ] ; A: tile offset (from 0B/8600) 3E/DA07: 85 82 STA $82 3E/DA09: A5 80 LDA $80 3E/DA0B: 18 CLC 3E/DA0C: 69 AA ADC #$AA ; 3E/DCAA 3E/DA0E: 85 80 STA $80 3E/DA10: A9 DC LDA #$DC 3E/DA12: 69 00 ADC #$00 3E/DA14: 85 81 STA $81 3E/DA16: 4C 3A DA JMP $DA3A ; draw object sprite ; [ draw guest npc sprite ] 3E/DA19: 85 82 STA $82 3E/DA1B: A5 80 LDA $80 3E/DA1D: 18 CLC 3E/DA1E: 69 6A ADC #$6A ; 3E/DC6A 3E/DA20: 85 80 STA $80 3E/DA22: A9 DC LDA #$DC 3E/DA24: 69 00 ADC #$00 3E/DA26: 85 81 STA $81 3E/DA28: 4C 3A DA JMP $DA3A ; draw object sprite ; [ draw player sprite ] ; A: tile offset ; $80: pointer offset 3E/DA2B: 85 82 STA $82 3E/DA2D: A9 2A LDA #$2A ; 3E/DC2A 3E/DA2F: 18 CLC 3E/DA30: 65 80 ADC $80 3E/DA32: 85 80 STA $80 3E/DA34: A9 DC LDA #$DC 3E/DA36: 69 00 ADC #$00 3E/DA38: 85 81 STA $81 ; fallthrough ; [ draw object sprite ] ; $26: sprite data offset (incremented after drawing) ; $40: x position ; $41: y position ; +$80: pointer to tile ids and palette/flags ; $82: tile offset 3E/DA3A: A0 00 LDY #$00 3E/DA3C: A6 26 LDX $26 ; sprite data offset 3E/DA3E: A5 41 LDA $41 ; y position 3E/DA40: 9D 00 02 STA $0200,X 3E/DA43: 9D 04 02 STA $0204,X 3E/DA46: 18 CLC 3E/DA47: 69 08 ADC #$08 3E/DA49: 9D 08 02 STA $0208,X 3E/DA4C: 9D 0C 02 STA $020C,X 3E/DA4F: A5 40 LDA $40 ; x position 3E/DA51: 9D 03 02 STA $0203,X 3E/DA54: 9D 0B 02 STA $020B,X 3E/DA57: 18 CLC 3E/DA58: 69 08 ADC #$08 3E/DA5A: 9D 07 02 STA $0207,X 3E/DA5D: 9D 0F 02 STA $020F,X 3E/DA60: B1 80 LDA ($80),Y ; tile id 3E/DA62: C8 INY 3E/DA63: 18 CLC 3E/DA64: 65 82 ADC $82 ; tile offset 3E/DA66: 9D 01 02 STA $0201,X 3E/DA69: B1 80 LDA ($80),Y ; palette/flags 3E/DA6B: C8 INY 3E/DA6C: 9D 02 02 STA $0202,X 3E/DA6F: B1 80 LDA ($80),Y 3E/DA71: C8 INY 3E/DA72: 18 CLC 3E/DA73: 65 82 ADC $82 3E/DA75: 9D 09 02 STA $0209,X 3E/DA78: B1 80 LDA ($80),Y 3E/DA7A: C8 INY 3E/DA7B: 9D 0A 02 STA $020A,X 3E/DA7E: B1 80 LDA ($80),Y 3E/DA80: C8 INY 3E/DA81: 18 CLC 3E/DA82: 65 82 ADC $82 3E/DA84: 9D 05 02 STA $0205,X 3E/DA87: B1 80 LDA ($80),Y 3E/DA89: C8 INY 3E/DA8A: 9D 06 02 STA $0206,X 3E/DA8D: B1 80 LDA ($80),Y 3E/DA8F: C8 INY 3E/DA90: 18 CLC 3E/DA91: 65 82 ADC $82 3E/DA93: 9D 0D 02 STA $020D,X 3E/DA96: B1 80 LDA ($80),Y 3E/DA98: 9D 0E 02 STA $020E,X 3E/DA9B: A5 26 LDA $26 ; increment sprite data offset 3E/DA9D: 18 CLC 3E/DA9E: 69 10 ADC #$10 3E/DAA0: 85 26 STA $26 3E/DAA2: 60 RTS ; [ draw chocobo running away ] 3E/DAA3: A5 B0 LDA $B0 3E/DAA5: 30 01 BMI $DAA8 ; return if no chocobo animation 3E/DAA7: 60 RTS 3E/DAA8: A5 B1 LDA $B1 ; run offscreen to the right 3E/DAAA: 18 CLC 3E/DAAB: 69 02 ADC #$02 3E/DAAD: 85 B1 STA $B1 3E/DAAF: C9 F8 CMP #$F8 3E/DAB1: 90 05 BCC $DAB8 ; branch if not offscreen 3E/DAB3: A9 00 LDA #$00 ; end chocobo animation 3E/DAB5: 85 B0 STA $B0 3E/DAB7: 60 RTS 3E/DAB8: 85 40 STA $40 3E/DABA: 29 08 AND #$08 3E/DABC: 85 80 STA $80 3E/DABE: A5 F0 LDA $F0 3E/DAC0: 10 04 BPL $DAC6 ; switch up/down direction every 128 frames 3E/DAC2: A9 01 LDA #$01 3E/DAC4: D0 02 BNE $DAC8 3E/DAC6: A9 FF LDA #$FF 3E/DAC8: 18 CLC 3E/DAC9: 65 B2 ADC $B2 3E/DACB: 85 B2 STA $B2 3E/DACD: 85 41 STA $41 ; oscillate up and down 3E/DACF: A9 38 LDA #$38 3E/DAD1: 4C 07 DA JMP $DA07 ; draw vehicle sprite ; [ draw inactive ship ] 3E/DAD4: AD 20 60 LDA $6020 3E/DAD7: 4A LSR 3E/DAD8: B0 2E BCS $DB08 ; return if nautilus has been obtained 3E/DADA: 29 20 AND #$20 3E/DADC: D0 2A BNE $DB08 3E/DADE: A5 42 LDA $42 3E/DAE0: C9 03 CMP #$03 3E/DAE2: F0 24 BEQ $DB08 3E/DAE4: C9 04 CMP #$04 3E/DAE6: F0 20 BEQ $DB08 3E/DAE8: AD 03 60 LDA $6003 3E/DAEB: C5 78 CMP $78 3E/DAED: D0 19 BNE $DB08 3E/DAEF: AD 00 60 LDA $6000 3E/DAF2: F0 14 BEQ $DB08 3E/DAF4: AE 01 60 LDX $6001 3E/DAF7: AC 02 60 LDY $6002 3E/DAFA: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/DAFD: B0 09 BCS $DB08 3E/DAFF: A9 00 LDA #$00 3E/DB01: 85 80 STA $80 3E/DB03: A9 50 LDA #$50 3E/DB05: 4C 07 DA JMP $DA07 ; draw vehicle sprite 3E/DB08: 60 RTS ; [ draw inactive nautilus ] 3E/DB09: AD 20 60 LDA $6020 3E/DB0C: 29 01 AND #$01 3E/DB0E: F0 F8 BEQ $DB08 ; return if nautilus hasn't been obtained 3E/DB10: A5 42 LDA $42 3E/DB12: C9 05 CMP #$05 3E/DB14: F0 F2 BEQ $DB08 3E/DB16: AD 00 60 LDA $6000 3E/DB19: F0 ED BEQ $DB08 3E/DB1B: AE 01 60 LDX $6001 3E/DB1E: AC 02 60 LDY $6002 3E/DB21: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/DB24: B0 E2 BCS $DB08 3E/DB26: A9 10 LDA #$10 3E/DB28: 85 80 STA $80 3E/DB2A: A9 68 LDA #$68 3E/DB2C: 4C 07 DA JMP $DA07 ; draw vehicle sprite ; [ draw inactive airship ] 3E/DB2F: AD 20 60 LDA $6020 3E/DB32: 29 40 AND #$40 3E/DB34: F0 D2 BEQ $DB08 3E/DB36: A5 42 LDA $42 3E/DB38: C9 06 CMP #$06 3E/DB3A: F0 CC BEQ $DB08 3E/DB3C: AD 03 60 LDA $6003 3E/DB3F: C5 78 CMP $78 3E/DB41: D0 C5 BNE $DB08 3E/DB43: AE 01 60 LDX $6001 3E/DB46: AC 02 60 LDY $6002 3E/DB49: 20 E4 DB JSR $DBE4 ; check if coordinates are onscreen 3E/DB4C: B0 BA BCS $DB08 3E/DB4E: A9 10 LDA #$10 3E/DB50: 85 80 STA $80 3E/DB52: A9 68 LDA #$68 3E/DB54: 4C 07 DA JMP $DA07 ; draw vehicle sprite ; [ update guest npc sprites ] ; subroutine starts at 3E/DB58 3E/DB57: 60 RTS ; subroutine starts here 3E/DB58: 24 7E BIT $7E 3E/DB5A: 30 FB BMI $DB57 ; return if player sprite or guest npc hidden 3E/DB5C: 70 F9 BVS $DB57 3E/DB5E: AD 0B 60 LDA $600B 3E/DB61: F0 F4 BEQ $DB57 3E/DB63: A5 A9 LDA $A9 3E/DB65: D0 09 BNE $DB70 3E/DB67: A5 2D LDA $2D 3E/DB69: 4A LSR 3E/DB6A: B0 04 BCS $DB70 ; branch if not on world map 3E/DB6C: A5 42 LDA $42 3E/DB6E: D0 E7 BNE $DB57 3E/DB70: 20 A6 DB JSR $DBA6 3E/DB73: AD 0B 60 LDA $600B 3E/DB76: C9 04 CMP #$04 3E/DB78: D0 06 BNE $DB80 3E/DB7A: A9 30 LDA #$30 3E/DB7C: 85 80 STA $80 3E/DB7E: D0 1C BNE $DB9C 3E/DB80: A5 13 LDA $13 3E/DB82: 05 14 ORA $14 3E/DB84: 29 08 AND #$08 3E/DB86: A6 A7 LDX $A7 3E/DB88: 1D 1A DC ORA $DC1A,X 3E/DB8B: 85 80 STA $80 3E/DB8D: 29 08 AND #$08 3E/DB8F: F0 0B BEQ $DB9C 3E/DB91: A5 13 LDA $13 3E/DB93: F0 05 BEQ $DB9A 3E/DB95: C6 41 DEC $41 3E/DB97: 4C 9C DB JMP $DB9C 3E/DB9A: C6 40 DEC $40 3E/DB9C: A9 10 LDA #$10 3E/DB9E: 20 19 DA JSR $DA19 3E/DBA1: A5 A8 LDA $A8 3E/DBA3: 4C A7 D9 JMP $D9A7 ; set sprite layer priority ; [ ] 3E/DBA6: A5 2D LDA $2D 3E/DBA8: 4A LSR 3E/DBA9: B0 09 BCS $DBB4 ; branch if not on world map 3E/DBAB: A5 27 LDA $27 3E/DBAD: 85 80 STA $80 3E/DBAF: A5 28 LDA $28 3E/DBB1: 4C BA DB JMP $DBBA 3E/DBB4: A5 29 LDA $29 3E/DBB6: 85 80 STA $80 3E/DBB8: A5 2A LDA $2A 3E/DBBA: 85 81 STA $81 3E/DBBC: A5 AD LDA $AD 3E/DBBE: 38 SEC 3E/DBBF: E5 81 SBC $81 3E/DBC1: 0A ASL 3E/DBC2: 0A ASL 3E/DBC3: 0A ASL 3E/DBC4: 0A ASL 3E/DBC5: 38 SEC 3E/DBC6: E5 36 SBC $36 3E/DBC8: 18 CLC 3E/DBC9: 65 14 ADC $14 3E/DBCB: 38 SEC 3E/DBCC: E9 04 SBC #$04 3E/DBCE: 85 41 STA $41 3E/DBD0: A5 AC LDA $AC 3E/DBD2: 38 SEC 3E/DBD3: E5 80 SBC $80 3E/DBD5: 0A ASL 3E/DBD6: 0A ASL 3E/DBD7: 0A ASL 3E/DBD8: 0A ASL 3E/DBD9: 38 SEC 3E/DBDA: E5 35 SBC $35 3E/DBDC: 18 CLC 3E/DBDD: 65 13 ADC $13 3E/DBDF: 85 40 STA $40 3E/DBE1: C6 41 DEC $41 3E/DBE3: 60 RTS ; [ check if coordinates are onscreen ] 3E/DBE4: 98 TYA 3E/DBE5: 38 SEC 3E/DBE6: E5 28 SBC $28 3E/DBE8: C9 10 CMP #$10 3E/DBEA: B0 2C BCS $DC18 3E/DBEC: 0A ASL 3E/DBED: 0A ASL 3E/DBEE: 0A ASL 3E/DBEF: 0A ASL 3E/DBF0: 38 SEC 3E/DBF1: E5 36 SBC $36 3E/DBF3: C9 EC CMP #$EC 3E/DBF5: B0 21 BCS $DC18 3E/DBF7: 85 41 STA $41 3E/DBF9: 8A TXA 3E/DBFA: 38 SEC 3E/DBFB: E5 27 SBC $27 3E/DBFD: C9 10 CMP #$10 3E/DBFF: B0 17 BCS $DC18 3E/DC01: 0A ASL 3E/DC02: 0A ASL 3E/DC03: 0A ASL 3E/DC04: 0A ASL 3E/DC05: 38 SEC 3E/DC06: E5 35 SBC $35 3E/DC08: 90 0E BCC $DC18 3E/DC0A: C9 F8 CMP #$F8 3E/DC0C: B0 0A BCS $DC18 3E/DC0E: 85 40 STA $40 3E/DC10: A5 41 LDA $41 3E/DC12: F0 02 BEQ $DC16 3E/DC14: C6 41 DEC $41 3E/DC16: 18 CLC 3E/DC17: 60 RTS 3E/DC18: 38 SEC 3E/DC19: 60 RTS ; tile offsets for facing directions (----udlr) 3E/DC1A: 00 00 10 00 3E/DC1E: 30 00 10 00 3E/DC22: 20 00 10 00 3E/DC26: 30 00 10 00 ; player sprites (palette 0 and 1) 3E/DC2A: 09 40 0B 41 ; right 3E/DC2E: 08 40 0A 41 3E/DC32: 0D 40 0F 41 3E/DC36: 0C 40 0E 41 3E/DC3A: 08 00 0A 01 ; left 3E/DC3E: 09 00 0B 01 3E/DC42: 0C 00 0E 01 3E/DC46: 0D 00 0F 01 3E/DC4A: 04 00 06 01 ; up 3E/DC4E: 05 00 07 01 3E/DC52: 04 00 07 41 3E/DC56: 05 00 06 41 3E/DC5A: 00 00 02 01 ; down 3E/DC5E: 01 00 03 01 3E/DC62: 00 00 03 41 3E/DC66: 01 00 02 41 ; guest npc sprites (palette 2) 3E/DC6A: 09 42 0B 42 3E/DC6E: 08 42 0A 42 3E/DC72: 0D 42 0F 42 3E/DC76: 0C 42 0E 42 3E/DC7A: 08 02 0A 02 3E/DC7E: 09 02 0B 02 3E/DC82: 0C 02 0E 02 3E/DC86: 0D 02 0F 02 3E/DC8A: 04 02 06 02 3E/DC8E: 05 02 07 02 3E/DC92: 04 02 07 42 3E/DC96: 05 02 06 42 3E/DC9A: 00 02 02 02 3E/DC9E: 01 02 03 02 3E/DCA2: 00 02 03 42 3E/DCA6: 01 02 02 42 ; vehicle sprites (palette 3) 3E/DCAA: 11 43 13 43 3E/DCAE: 10 43 12 43 3E/DCB2: 15 43 17 43 3E/DCB6: 14 43 16 43 3E/DCBA: 10 03 12 03 3E/DCBE: 11 03 13 03 3E/DCC2: 14 03 16 03 3E/DCC6: 15 03 17 03 3E/DCCA: 00 03 02 03 3E/DCCE: 01 03 03 03 3E/DCD2: 04 03 06 03 3E/DCD6: 05 03 07 03 3E/DCDA: 08 03 0A 03 3E/DCDE: 09 03 0B 03 3E/DCE2: 0C 03 0E 03 3E/DCE6: 0D 03 0F 03 ; airship shadow sprites (palette 3) 3E/DCEA: 00 03 02 03 3E/DCEE: 00 43 03 03 ; cursor sprite (palette 3) 3E/DCF2: 00 03 02 03 3E/DCF6: 01 03 03 03 ; cursor sprite (palette 0) 3E/DCFA: 00 00 02 00 3E/DCFE: 01 00 03 00 3E/DD02: 01 04 02 08 ; -------------------------------------------------------------------------- ; [ load menu graphics ] 3E/DD06: 20 D6 DF JSR $DFD6 ; load menu bg graphics 3E/DD09: 20 50 C7 JSR $C750 ; update sound 3E/DD0C: 4C F8 DF JMP $DFF8 ; load menu sprite graphics ; [ load normal map graphics ] 3E/DD0F: 20 2D DD JSR $DD2D ; load map character graphics 3E/DD12: 20 50 C7 JSR $C750 ; update sound 3E/DD15: 20 5A DE JSR $DE5A ; load map bg graphics 3E/DD18: 20 50 C7 JSR $C750 ; update sound 3E/DD1B: 4C 08 DF JMP $DF08 ; load misc. normal map sprite graphics ; [ load world map graphics ] 3E/DD1E: 20 C6 DD JSR $DDC6 ; load world map bg graphics 3E/DD21: 20 50 C7 JSR $C750 ; update sound 3E/DD24: 20 2D DD JSR $DD2D ; load map character graphics 3E/DD27: 20 50 C7 JSR $C750 ; update sound 3E/DD2A: 4C BE DD JMP $DDBE ; load misc. world map sprite graphics ; [ load map character graphics ] ; including guest npc ; similar to 3B/BA5D 3E/DD2D: AE 0E 60 LDX $600E ; showing character offset 3E/DD30: BD 02 61 LDA $6102,X 3E/DD33: 29 C0 AND #$C0 3E/DD35: F0 0A BEQ $DD41 ; branch if not dead or stone 3E/DD37: 8A TXA 3E/DD38: 18 CLC 3E/DD39: 69 40 ADC #$40 3E/DD3B: AA TAX 3E/DD3C: EC 0E 60 CPX $600E 3E/DD3F: D0 EF BNE $DD30 3E/DD41: 8E 0E 60 STX $600E ; update showing character offset 3E/DD44: A9 0E LDA #$0E 3E/DD46: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DD49: BD 02 61 LDA $6102,X 3E/DD4C: 29 20 AND #$20 3E/DD4E: F0 04 BEQ $DD54 ; branch if not toad 3E/DD50: A9 16 LDA #$16 3E/DD52: D0 0E BNE $DD62 3E/DD54: BD 02 61 LDA $6102,X 3E/DD57: 29 08 AND #$08 3E/DD59: F0 04 BEQ $DD5F ; branch if not mini 3E/DD5B: A9 17 LDA #$17 3E/DD5D: D0 03 BNE $DD62 3E/DD5F: BD 00 61 LDA $6100,X ; job 3E/DD62: 29 3F AND #$3F 3E/DD64: 18 CLC 3E/DD65: 69 80 ADC #$80 ; 0E/8000 (map character graphics) 3E/DD67: 85 81 STA $81 3E/DD69: A9 00 LDA #$00 3E/DD6B: 85 80 STA $80 3E/DD6D: A2 01 LDX #$01 ; copy 16 tiles 3E/DD6F: A9 10 LDA #$10 ; ppu $1000 3E/DD71: 20 0F DE JSR $DE0F ; copy large data to ppu 3E/DD74: AD 0B 60 LDA $600B ; guest npc 3E/DD77: C9 04 CMP #$04 3E/DD79: F0 1E BEQ $DD99 ; branch if guzco (shadow) 3E/DD7B: AD 02 61 LDA $6102 3E/DD7E: 2D 42 61 AND $6142 3E/DD81: 2D 82 61 AND $6182 3E/DD84: 2D C2 61 AND $61C2 3E/DD87: AA TAX 3E/DD88: 29 20 AND #$20 3E/DD8A: C9 20 CMP #$20 ; check if all characters are toad 3E/DD8C: A9 16 LDA #$16 3E/DD8E: B0 22 BCS $DDB2 3E/DD90: 8A TXA 3E/DD91: 29 08 AND #$08 3E/DD93: C9 08 CMP #$08 ; check if all characters are mini 3E/DD95: A9 17 LDA #$17 3E/DD97: B0 19 BCS $DDB2 3E/DD99: AD 0B 60 LDA $600B ; guest npc 3E/DD9C: F0 0E BEQ $DDAC 3E/DD9E: 38 SEC 3E/DD9F: E9 01 SBC #$01 3E/DDA1: C9 03 CMP #$03 3E/DDA3: 90 0A BCC $DDAF 3E/DDA5: 38 SEC 3E/DDA6: E9 01 SBC #$01 3E/DDA8: C9 03 CMP #$03 3E/DDAA: B0 03 BCS $DDAF 3E/DDAC: 4C 34 DE JMP $DE34 3E/DDAF: 18 CLC 3E/DDB0: 69 18 ADC #$18 3E/DDB2: 29 3F AND #$3F 3E/DDB4: 18 CLC 3E/DDB5: 69 80 ADC #$80 3E/DDB7: 85 81 STA $81 3E/DDB9: A2 01 LDX #$01 ; copy 16 tiles 3E/DDBB: 4C 1A DE JMP $DE1A ; copy large data to ppu ; [ load misc. world map sprite graphics ] 3E/DDBE: A9 3C LDA #$3C 3E/DDC0: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DDC3: 4C E0 BD JMP $BDE0 ; load misc. world map sprite graphics ; [ load world map bg graphics ] 3E/DDC6: A9 0A LDA #$0A 3E/DDC8: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DDCB: A9 00 LDA #$00 3E/DDCD: 85 80 STA $80 3E/DDCF: A9 8C LDA #$8C ; 0A/8C00 (world map graphics) 3E/DDD1: 85 81 STA $81 3E/DDD3: A2 08 LDX #$08 ; copy 8x16 = 128 tiles 3E/DDD5: A9 00 LDA #$00 3E/DDD7: 20 0F DE JSR $DE0F ; copy large data to ppu 3E/DDDA: AD 11 60 LDA $6011 3E/DDDD: 10 17 BPL $DDF6 ; branch if not surface world emerging 3E/DDDF: A5 78 LDA $78 3E/DDE1: C9 03 CMP #$03 3E/DDE3: D0 11 BNE $DDF6 ; branch if not world 3 3E/DDE5: A9 3A LDA #$3A 3E/DDE7: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DDEA: 18 CLC 3E/DDEB: 20 18 85 JSR $8518 ; init water animation graphics buffer 3E/DDEE: A9 3C LDA #$3C 3E/DDF0: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DDF3: 4C FF 94 JMP $94FF 3E/DDF6: A5 78 LDA $78 3E/DDF8: 29 06 AND #$06 3E/DDFA: 0A ASL 3E/DDFB: 0A ASL 3E/DDFC: 18 CLC 3E/DDFD: 69 94 ADC #$94 ; 0A/9400 3E/DDFF: 85 81 STA $81 3E/DE01: A2 08 LDX #$08 ; copy 8x16 = 128 tiles 3E/DE03: 20 1A DE JSR $DE1A ; copy large data to ppu 3E/DE06: A9 3A LDA #$3A 3E/DE08: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DE0B: 18 CLC 3E/DE0C: 4C 18 85 JMP $8518 ; init water animation graphics buffer ; [ copy large data to ppu ] ; +$80: source pointer ; X: size (in 256-byte blocks) ; A: ppu address (top byte) 3E/DE0F: 2C 02 20 BIT $2002 3E/DE12: 8D 06 20 STA $2006 3E/DE15: A9 00 LDA #$00 3E/DE17: 8D 06 20 STA $2006 3E/DE1A: A0 00 LDY #$00 3E/DE1C: B1 80 LDA ($80),Y 3E/DE1E: 8D 07 20 STA $2007 3E/DE21: C8 INY 3E/DE22: D0 F8 BNE $DE1C 3E/DE24: E6 81 INC $81 3E/DE26: CA DEX 3E/DE27: D0 F3 BNE $DE1C 3E/DE29: 60 RTS ; [ copy data to ppu ] ; +$80: source pointer ; Y: source offset ; X: size 3E/DE2A: B1 80 LDA ($80),Y 3E/DE2C: 8D 07 20 STA $2007 3E/DE2F: C8 INY 3E/DE30: CA DEX 3E/DE31: D0 F7 BNE $DE2A 3E/DE33: 60 RTS ; [ ] 3E/DE34: 2C 02 20 BIT $2002 3E/DE37: A9 11 LDA #$11 3E/DE39: 8D 06 20 STA $2006 3E/DE3C: A9 00 LDA #$00 3E/DE3E: 8D 06 20 STA $2006 3E/DE41: A2 20 LDX #$20 3E/DE43: 8D 07 20 STA $2007 3E/DE46: CA DEX 3E/DE47: D0 FA BNE $DE43 3E/DE49: A9 0D LDA #$0D 3E/DE4B: 20 09 FF JSR $FF09 ; switch prg bank 1 3E/DE4E: BD 80 AF LDA $AF80,X 3E/DE51: 8D 07 20 STA $2007 3E/DE54: E8 INX 3E/DE55: E0 20 CPX #$20 3E/DE57: 90 F5 BCC $DE4E 3E/DE59: 60 RTS ; [ load map bg graphics ] 3E/DE5A: A9 00 LDA #$00 3E/DE5C: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DE5F: A5 78 LDA $78 ; world id 3E/DE61: A6 48 LDX $48 ; map id 3E/DE63: C9 02 CMP #$02 3E/DE65: BD 00 8C LDA $8C00,X ; graphics subset 3E/DE68: 90 03 BCC $DE6D 3E/DE6A: BD 00 8D LDA $8D00,X 3E/DE6D: A2 00 LDX #$00 3E/DE6F: 86 8D STX $8D 3E/DE71: 0A ASL ; multiply by 16 3E/DE72: 0A ASL 3E/DE73: 0A ASL 3E/DE74: 26 8D ROL $8D 3E/DE76: 0A ASL 3E/DE77: 26 8D ROL $8D 3E/DE79: 85 8C STA $8C 3E/DE7B: A5 8D LDA $8D 3E/DE7D: 18 CLC 3E/DE7E: 69 8E ADC #$8E ; map graphics subset (00/8E00) 3E/DE80: 85 8D STA $8D 3E/DE82: A0 0F LDY #$0F 3E/DE84: B1 8C LDA ($8C),Y 3E/DE86: 99 00 7F STA $7F00,Y 3E/DE89: 88 DEY 3E/DE8A: 10 F8 BPL $DE84 3E/DE8C: A9 00 LDA #$00 3E/DE8E: 85 8E STA $8E ; tile block counter 3E/DE90: AD 02 20 LDA $2002 3E/DE93: A9 00 LDA #$00 3E/DE95: 8D 06 20 STA $2006 ; set vram address to $0000 3E/DE98: 8D 06 20 STA $2006 3E/DE9B: A5 8E LDA $8E 3E/DE9D: 0A ASL 3E/DE9E: A8 TAY 3E/DE9F: B9 00 7F LDA $7F00,Y ; graphics pointer 3E/DEA2: 85 80 STA $80 3E/DEA4: B9 01 7F LDA $7F01,Y 3E/DEA7: 48 PHA 3E/DEA8: 29 1F AND #$1F 3E/DEAA: 09 80 ORA #$80 3E/DEAC: 85 81 STA $81 3E/DEAE: 68 PLA 3E/DEAF: 4A LSR 3E/DEB0: 4A LSR 3E/DEB1: 4A LSR 3E/DEB2: 4A LSR 3E/DEB3: 4A LSR 3E/DEB4: 18 CLC 3E/DEB5: 69 03 ADC #$03 3E/DEB7: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DEBA: A6 8E LDX $8E 3E/DEBC: BD 00 DF LDA $DF00,X 3E/DEBF: AA TAX 3E/DEC0: A0 00 LDY #$00 3E/DEC2: 20 EA DE JSR $DEEA ; copy tile to vram 3E/DEC5: E6 8E INC $8E 3E/DEC7: A5 8E LDA $8E 3E/DEC9: C9 08 CMP #$08 3E/DECB: 90 CE BCC $DE9B 3E/DECD: A9 3A LDA #$3A 3E/DECF: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DED2: 38 SEC 3E/DED3: 20 18 85 JSR $8518 ; init water animation graphics buffer ; fallthrough ; [ load menu window/text graphics ] 3E/DED6: A9 0D LDA #$0D 3E/DED8: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DEDB: A9 00 LDA #$00 ; 0D/B700 (menu window/text graphics) 3E/DEDD: 85 80 STA $80 3E/DEDF: A9 97 LDA #$97 3E/DEE1: 85 81 STA $81 3E/DEE3: A2 09 LDX #$09 ; copy 9x16 = 144 tiles 3E/DEE5: A9 07 LDA #$07 ; ppu $0700 3E/DEE7: 4C 0F DE JMP $DE0F ; copy large data to ppu ; [ copy tiles to vram ] ; X: tile count ; +$80: pointer to graphics 3E/DEEA: A9 10 LDA #$10 ; 16 bytes per tile 3E/DEEC: 85 82 STA $82 3E/DEEE: B1 80 LDA ($80),Y 3E/DEF0: 8D 07 20 STA $2007 3E/DEF3: C8 INY 3E/DEF4: D0 02 BNE $DEF8 3E/DEF6: E6 81 INC $81 3E/DEF8: C6 82 DEC $82 3E/DEFA: D0 F2 BNE $DEEE 3E/DEFC: CA DEX 3E/DEFD: D0 EB BNE $DEEA 3E/DEFF: 60 RTS ; tile count for loading map bg graphics 3E/DF00: 1A 08 08 0E 08 10 10 10 ; [ load misc. normal map sprite graphics ] 3E/DF08: A5 78 LDA $78 3E/DF0A: C9 02 CMP #$02 3E/DF0C: A9 00 LDA #$00 3E/DF0E: 69 94 ADC #$94 ; 00/9400 (graphics for each npc id) 3E/DF10: 85 8D STA $8D 3E/DF12: A9 00 LDA #$00 3E/DF14: 85 8C STA $8C 3E/DF16: 85 8B STA $8B 3E/DF18: 85 8A STA $8A ; start of npc loop 3E/DF1A: 20 41 DF JSR $DF41 ; load npc graphics 3E/DF1D: A5 8B LDA $8B 3E/DF1F: 18 CLC 3E/DF20: 69 10 ADC #$10 3E/DF22: 85 8B STA $8B 3E/DF24: E6 8A INC $8A 3E/DF26: A5 8A LDA $8A 3E/DF28: C9 0C CMP #$0C ; 12 npcs 3E/DF2A: 90 EE BCC $DF1A 3E/DF2C: A9 0D LDA #$0D 3E/DF2E: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DF31: A9 00 LDA #$00 ; 0D/B400 (cursor graphics, etc.) 3E/DF33: 85 80 STA $80 3E/DF35: A9 94 LDA #$94 3E/DF37: 85 81 STA $81 3E/DF39: A2 02 LDX #$02 ; copy 32 tiles 3E/DF3B: A9 1E LDA #$1E ; ppu $1E00 3E/DF3D: 4C 0F DE JMP $DE0F ; copy large data to ppu ; [ load npc graphics ] 3E/DF40: 60 RTS ; subroutine starts here 3E/DF41: A6 8B LDX $8B 3E/DF43: BD 0A 70 LDA $700A,X ; npc id 3E/DF46: F0 F8 BEQ $DF40 3E/DF48: A8 TAY 3E/DF49: A9 00 LDA #$00 3E/DF4B: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DF4E: B1 8C LDA ($8C),Y 3E/DF50: C9 40 CMP #$40 3E/DF52: B0 17 BCS $DF6B 3E/DF54: 69 80 ADC #$80 3E/DF56: 85 81 STA $81 3E/DF58: A9 00 LDA #$00 3E/DF5A: 85 80 STA $80 3E/DF5C: A9 0E LDA #$0E 3E/DF5E: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DF61: A2 01 LDX #$01 3E/DF63: A5 8A LDA $8A 3E/DF65: 18 CLC 3E/DF66: 69 12 ADC #$12 3E/DF68: 4C 0F DE JMP $DE0F ; copy large data to ppu 3E/DF6B: C9 58 CMP #$58 3E/DF6D: B0 30 BCS $DF9F 3E/DF6F: 38 SEC 3E/DF70: E9 40 SBC #$40 3E/DF72: 4A LSR 3E/DF73: 09 80 ORA #$80 3E/DF75: 85 81 STA $81 3E/DF77: A9 00 LDA #$00 3E/DF79: 6A ROR 3E/DF7A: 85 80 STA $80 3E/DF7C: A9 0A LDA #$0A 3E/DF7E: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DF81: A2 80 LDX #$80 3E/DF83: A0 00 LDY #$00 3E/DF85: 2C 02 20 BIT $2002 3E/DF88: A5 8A LDA $8A 3E/DF8A: 18 CLC 3E/DF8B: 69 12 ADC #$12 3E/DF8D: 8D 06 20 STA $2006 3E/DF90: A9 00 LDA #$00 3E/DF92: 8D 06 20 STA $2006 3E/DF95: 20 2A DE JSR $DE2A ; copy data to ppu 3E/DF98: A0 00 LDY #$00 3E/DF9A: A2 80 LDX #$80 3E/DF9C: 4C 2A DE JMP $DE2A ; copy data to ppu 3E/DF9F: E9 58 SBC #$58 3E/DFA1: 48 PHA 3E/DFA2: 4A LSR 3E/DFA3: 4A LSR 3E/DFA4: 18 CLC 3E/DFA5: 69 88 ADC #$88 3E/DFA7: 85 81 STA $81 3E/DFA9: 68 PLA 3E/DFAA: 29 03 AND #$03 3E/DFAC: 4A LSR 3E/DFAD: 6A ROR 3E/DFAE: 6A ROR 3E/DFAF: 85 80 STA $80 3E/DFB1: A9 0D LDA #$0D 3E/DFB3: 20 06 FF JSR $FF06 ; switch prg bank 0 3E/DFB6: 2C 02 20 BIT $2002 3E/DFB9: A5 8A LDA $8A 3E/DFBB: 18 CLC 3E/DFBC: 69 12 ADC #$12 3E/DFBE: 8D 06 20 STA $2006 3E/DFC1: A9 00 LDA #$00 3E/DFC3: 8D 06 20 STA $2006 3E/DFC6: 20 CF DF JSR $DFCF 3E/DFC9: 20 CF DF JSR $DFCF 3E/DFCC: 20 CF DF JSR $DFCF 3E/DFCF: A2 40 LDX #$40 3E/DFD1: A0 00 LDY #$00 3E/DFD3: 4C 2A DE JMP $DE2A ; copy data to ppu ; [ load menu bg graphics ] 3E/DFD6: 20 D6 DE JSR $DED6 ; load menu window/text graphics 3E/DFD9: A9 95 LDA #$95 ; 0D/B500 (item icons) 3E/DFDB: 85 81 STA $81 3E/DFDD: A9 05 LDA #$05 ; ppu $0500 3E/DFDF: A2 02 LDX #$02 ; copy 32 tiles 3E/DFE1: 20 0F DE JSR $DE0F ; copy large data to ppu 3E/DFE4: 2C 02 20 BIT $2002 3E/DFE7: A9 00 LDA #$00 3E/DFE9: 8D 06 20 STA $2006 3E/DFEC: 8D 06 20 STA $2006 3E/DFEF: A2 10 LDX #$10 3E/DFF1: 8D 07 20 STA $2007 ; clear one tile at $0700 3E/DFF4: CA DEX 3E/DFF5: D0 FA BNE $DFF1 3E/DFF7: 60 RTS ; [ load menu sprite graphics ] 3E/DFF8: A9 28 LDA #$28 3E/DFFA: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3E/DFFD: AD 02 20 LDA $2002 3F/E000: A9 10 LDA #$10 ; ppu $1000 3F/E002: 8D 06 20 STA $2006 3F/E005: A9 00 LDA #$00 3F/E007: 8D 06 20 STA $2006 3F/E00A: AD 00 61 LDA $6100 3F/E00D: 20 92 E0 JSR $E092 ; load character graphics 3F/E010: AD 40 61 LDA $6140 3F/E013: 20 92 E0 JSR $E092 ; load character graphics 3F/E016: AD 80 61 LDA $6180 3F/E019: 20 92 E0 JSR $E092 ; load character graphics 3F/E01C: AD C0 61 LDA $61C0 3F/E01F: 20 92 E0 JSR $E092 ; load character graphics 3F/E022: A9 E0 LDA #$E0 ; 28/BAE0 (dead/toad/mini) 3F/E024: 85 80 STA $80 3F/E026: A9 BA LDA #$BA 3F/E028: 85 81 STA $81 3F/E02A: A2 01 LDX #$01 ; 256 bytes 3F/E02C: 20 1A DE JSR $DE1A ; copy large data to ppu 3F/E02F: A2 20 LDX #$20 ; 32 bytes (18 tiles total) 3F/E031: 20 2A DE JSR $DE2A ; copy data to ppu 3F/E034: AD 0B 60 LDA $600B ; guest npc 3F/E037: 38 SEC 3F/E038: E9 01 SBC #$01 3F/E03A: 29 07 AND #$07 3F/E03C: 0A ASL 3F/E03D: AA TAX 3F/E03E: BD B7 E0 LDA $E0B7,X 3F/E041: 85 80 STA $80 3F/E043: BD B8 E0 LDA $E0B8,X 3F/E046: 18 CLC 3F/E047: 69 BC ADC #$BC ; 28/BC00 (guest npc graphics) 3F/E049: 85 81 STA $81 3F/E04B: A2 60 LDX #$60 ; copy 6 tiles 3F/E04D: A0 00 LDY #$00 3F/E04F: 20 2A DE JSR $DE2A ; copy data to ppu 3F/E052: 20 F3 E0 JSR $E0F3 ; load character graphics for save/load menu 3F/E055: A9 0A LDA #$0A 3F/E057: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/E05A: A9 00 LDA #$00 ; 0A/8A00 (fat chocobo top left) 3F/E05C: 85 80 STA $80 3F/E05E: A9 8A LDA #$8A 3F/E060: 85 81 STA $81 3F/E062: A9 1B LDA #$1B ; ppu $1B00 3F/E064: A2 01 LDX #$01 ; copy 16 tiles 3F/E066: 20 0F DE JSR $DE0F ; copy large data to ppu 3F/E069: A9 0D LDA #$0D 3F/E06B: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/E06E: A9 00 LDA #$00 ; 0D/AE00 (fat chocobo) 3F/E070: 85 80 STA $80 3F/E072: A9 8E LDA #$8E 3F/E074: 85 81 STA $81 3F/E076: A9 1C LDA #$1C ; ppu $1C00 3F/E078: A2 01 LDX #$01 ; copy 16 tiles 3F/E07A: 20 0F DE JSR $DE0F ; copy large data to ppu 3F/E07D: A2 10 LDX #$10 3F/E07F: A9 FF LDA #$FF 3F/E081: 8D 07 20 STA $2007 ; clear one tile 3F/E084: CA DEX 3F/E085: D0 FA BNE $E081 3F/E087: 20 2C DF JSR $DF2C 3F/E08A: 20 B0 E1 JSR $E1B0 ; load menu palettes 3F/E08D: A9 3C LDA #$3C 3F/E08F: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ load character graphics ] ; A: job id 3F/E092: 29 3F AND #$3F 3F/E094: 0A ASL 3F/E095: AA TAX 3F/E096: BD C7 E0 LDA $E0C7,X 3F/E099: 85 80 STA $80 3F/E09B: BD C8 E0 LDA $E0C8,X 3F/E09E: 85 81 STA $81 3F/E0A0: A0 00 LDY #$00 3F/E0A2: A2 60 LDX #$60 3F/E0A4: 20 2A DE JSR $DE2A ; copy data to ppu 3F/E0A7: A0 80 LDY #$80 3F/E0A9: A2 60 LDX #$60 3F/E0AB: 20 2A DE JSR $DE2A ; copy data to ppu 3F/E0AE: A2 60 LDX #$60 3F/E0B0: E6 81 INC $81 3F/E0B2: A0 80 LDY #$80 3F/E0B4: 4C 2A DE JMP $DE2A ; copy data to ppu ; pointers to guest npc graphics (+28/BC00) 3F/E0B7: 0000 0060 00C0 0120 0180 01E0 0240 02A0 ; pointers to character graphics (bank 28) 3F/E0C7: 8000 82A0 8540 87E0 8A80 8D20 8FC0 9260 3F/E0D7: 9500 97A0 9A40 9CE0 9F80 A220 A4C0 A760 3F/E0E7: AA00 ACA0 AF40 B1E0 B480 B720 ; [ load character graphics for save/load menu ] ; slot 1 3F/E0F3: AD 02 65 LDA $6502 ; status 3F/E0F6: AE 00 65 LDX $6500 ; job 3F/E0F9: 20 5C E1 JSR $E15C 3F/E0FC: AD 42 65 LDA $6542 3F/E0FF: AE 40 65 LDX $6540 3F/E102: 20 5C E1 JSR $E15C 3F/E105: AD 82 65 LDA $6582 3F/E108: AE 80 65 LDX $6580 3F/E10B: 20 5C E1 JSR $E15C 3F/E10E: AD C2 65 LDA $65C2 3F/E111: AE C0 65 LDX $65C0 3F/E114: 20 5C E1 JSR $E15C ; slot 2 3F/E117: AD 02 69 LDA $6902 3F/E11A: AE 00 69 LDX $6900 3F/E11D: 20 5C E1 JSR $E15C 3F/E120: AD 42 69 LDA $6942 3F/E123: AE 40 69 LDX $6940 3F/E126: 20 5C E1 JSR $E15C 3F/E129: AD 82 69 LDA $6982 3F/E12C: AE 80 69 LDX $6980 3F/E12F: 20 5C E1 JSR $E15C 3F/E132: AD C2 69 LDA $69C2 3F/E135: AE C0 69 LDX $69C0 3F/E138: 20 5C E1 JSR $E15C ; slot 3 3F/E13B: AD 02 6D LDA $6D02 3F/E13E: AE 00 6D LDX $6D00 3F/E141: 20 5C E1 JSR $E15C 3F/E144: AD 42 6D LDA $6D42 3F/E147: AE 40 6D LDX $6D40 3F/E14A: 20 5C E1 JSR $E15C 3F/E14D: AD 82 6D LDA $6D82 3F/E150: AE 80 6D LDX $6D80 3F/E153: 20 5C E1 JSR $E15C 3F/E156: AD C2 6D LDA $6DC2 3F/E159: AE C0 6D LDX $6DC0 ; fallthrough ; [ load character graphics for save/load menu ] ; A: status ; X: job 3F/E15C: A8 TAY 3F/E15D: 29 E8 AND #$E8 3F/E15F: F0 39 BEQ $E19A ; branch if not dead, stone, toad, or mini 3F/E161: 0A ASL 3F/E162: 90 09 BCC $E16D ; dead 3F/E164: A9 E0 LDA #$E0 ; 28/BAE0 3F/E166: 85 80 STA $80 3F/E168: A9 BA LDA #$BA 3F/E16A: 4C A7 E1 JMP $E1A7 ; stone 3F/E16D: 0A ASL 3F/E16E: 90 15 BCC $E185 3F/E170: 8A TXA 3F/E171: 29 3F AND #$3F 3F/E173: 0A ASL 3F/E174: AA TAX 3F/E175: BD C7 E0 LDA $E0C7,X 3F/E178: 18 CLC 3F/E179: 69 80 ADC #$80 3F/E17B: 85 80 STA $80 3F/E17D: BD C8 E0 LDA $E0C8,X 3F/E180: 69 00 ADC #$00 3F/E182: 4C A7 E1 JMP $E1A7 ; toad 3F/E185: 0A ASL 3F/E186: 90 09 BCC $E191 3F/E188: A9 40 LDA #$40 ; 28/BB40 3F/E18A: 85 80 STA $80 3F/E18C: A9 BB LDA #$BB 3F/E18E: 4C A7 E1 JMP $E1A7 ; mini 3F/E191: A9 A0 LDA #$A0 ; 28/BBA0 3F/E193: 85 80 STA $80 3F/E195: A9 BB LDA #$BB 3F/E197: 4C A7 E1 JMP $E1A7 ; normal 3F/E19A: 8A TXA 3F/E19B: 29 3F AND #$3F ; job id 3F/E19D: 0A ASL 3F/E19E: AA TAX 3F/E19F: BD C7 E0 LDA $E0C7,X ; pointer to character graphics 3F/E1A2: 85 80 STA $80 3F/E1A4: BD C8 E0 LDA $E0C8,X 3F/E1A7: 85 81 STA $81 3F/E1A9: A0 00 LDY #$00 3F/E1AB: A2 60 LDX #$60 3F/E1AD: 4C 2A DE JMP $DE2A ; copy data to ppu ; [ load menu palettes ] 3F/E1B0: A2 1F LDX #$1F 3F/E1B2: BD BC E1 LDA $E1BC,X 3F/E1B5: 9D C0 03 STA $03C0,X 3F/E1B8: CA DEX 3F/E1B9: 10 F7 BPL $E1B2 3F/E1BB: 60 RTS ; menu color palettes 3F/E1BC: 0F 00 01 2A ; 0: green text 3F/E1C0: 0F 00 01 27 ; 1: orange text 3F/E1C4: 0F 00 01 24 ; 2: pink text 3F/E1C8: 0F 00 01 30 ; 3: white text 3F/E1CC: 0F 36 30 16 ; 4: character palette 1 3F/E1D0: 0F 27 18 21 ; 5: character palette 2 3F/E1D4: 0F 36 17 2A ; 6: character palette 3 3F/E1D8: 0F 00 10 30 ; 7: cursor palette ; -------------------------------------------------------------------------- ; [ map main ] ; from world map 3F/E1DC: A9 00 LDA #$00 ; load submap (from 3F/E2CB) 3F/E1DE: 20 EC E7 JSR $E7EC ; load map ; start of frame loop 3F/E1E1: A9 3A LDA #$3A 3F/E1E3: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/E1E6: 20 00 FF JSR $FF00 ; wait for vblank 3F/E1E9: A9 02 LDA #$02 3F/E1EB: 8D 14 40 STA $4014 ; dma oam data to ppu 3F/E1EE: 20 15 85 JSR $8515 ; update water animation 3F/E1F1: 20 4C E5 JSR $E54C ; update scrolling 3F/E1F4: A5 F0 LDA $F0 ; increment frame counter 3F/E1F6: 18 CLC 3F/E1F7: 69 01 ADC #$01 3F/E1F9: 85 F0 STA $F0 3F/E1FB: A5 F1 LDA $F1 3F/E1FD: 69 00 ADC #$00 3F/E1FF: 85 F1 STA $F1 3F/E201: 20 50 C7 JSR $C750 ; update sound 3F/E204: A5 36 LDA $36 ; player vertical subtile position 3F/E206: 05 35 ORA $35 ; player horizontal subtile position 3F/E208: C9 08 CMP #$08 3F/E20A: D0 03 BNE $E20F ; branch if not halfway across tile 3F/E20C: 20 00 E9 JSR $E900 ; update sprite layer priority 3F/E20F: A5 34 LDA $34 3F/E211: D0 16 BNE $E229 ; branch if player is moving 3F/E213: A5 76 LDA $76 3F/E215: D0 12 BNE $E229 ; branch if dialogue pending 3F/E217: A5 AB LDA $AB 3F/E219: 29 E0 AND #$E0 3F/E21B: F0 03 BEQ $E220 ; branch if no trigger 3F/E21D: 4C 6A E2 JMP $E26A ; execute trigger event 3F/E220: A5 76 LDA $76 ; pending dialogue 3F/E222: 05 A9 ORA $A9 ; waiting for guest npc ??? 3F/E224: D0 03 BNE $E229 3F/E226: 20 F8 E2 JSR $E2F8 ; check player input 3F/E229: A5 A9 LDA $A9 3F/E22B: D0 0D BNE $E23A ; branch if waiting for guest npc 3F/E22D: A5 76 LDA $76 3F/E22F: F0 09 BEQ $E23A ; branch if no dialogue pending 3F/E231: 85 92 STA $92 3F/E233: A9 00 LDA #$00 3F/E235: 85 76 STA $76 3F/E237: 20 8B EC JSR $EC8B ; show dialogue 3F/E23A: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E23D: 20 8A B7 JSR $B78A ; update guest npc 3F/E240: 20 86 C4 JSR $C486 ; clear oam data 3F/E243: 20 44 D8 JSR $D844 ; update sprites 3F/E246: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E249: 20 F9 B7 JSR $B7F9 ; update water animation buffers 3F/E24C: A5 4B LDA $4B 3F/E24E: C9 FF CMP #$FF 3F/E250: F0 8F BEQ $E1E1 ; branch if no map title 3F/E252: A9 00 LDA #$00 ; 18/8200 (string offset $0100) 3F/E254: 85 94 STA $94 3F/E256: A5 4B LDA $4B 3F/E258: 85 92 STA $92 3F/E25A: A9 82 LDA #$82 3F/E25C: 85 95 STA $95 3F/E25E: A9 FF LDA #$FF 3F/E260: 85 4B STA $4B 3F/E262: A9 04 LDA #$04 ; map title 3F/E264: 20 8D EC JSR $EC8D ; show text 3F/E267: 4C E1 E1 JMP $E1E1 ; [ execute trigger event ] 3F/E26A: C9 40 CMP #$40 3F/E26C: B0 1D BCS $E28B ; $20: battle 3F/E26E: 20 4D D3 JSR $D34D ; flash screen for battle 3F/E271: 20 83 E2 JSR $E283 ; get default battle bg 3F/E274: 20 49 C0 JSR $C049 ; battle 3F/E277: A9 01 LDA #$01 3F/E279: 20 F8 E7 JSR $E7F8 ; reload map 3F/E27C: A9 FF LDA #$FF 3F/E27E: 85 4B STA $4B 3F/E280: 4C E1 E1 JMP $E1E1 ; [ get default battle bg ] 3F/E283: A9 3A LDA #$3A 3F/E285: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/E288: 4C 33 85 JMP $8533 ; get default battle bg ; $40: exit (to previous map) 3F/E28B: D0 08 BNE $E295 3F/E28D: A9 94 LDA #$94 ; sound effect $14 3F/E28F: 8D 49 7F STA $7F49 3F/E292: 4C 8C D0 JMP $D08C ; $80: entrance trigger 3F/E295: C9 80 CMP #$80 3F/E297: D0 35 BNE $E2CE 3F/E299: BA TSX 3F/E29A: E0 20 CPX #$20 3F/E29C: B0 03 BCS $E2A1 3F/E29E: 4C 20 E2 JMP $E220 3F/E2A1: A5 29 LDA $29 3F/E2A3: 48 PHA 3F/E2A4: A5 2A LDA $2A 3F/E2A6: 48 PHA 3F/E2A7: A5 48 LDA $48 3F/E2A9: 48 PHA 3F/E2AA: A9 93 LDA #$93 3F/E2AC: 20 8F E2 JSR $E28F 3F/E2AF: A5 45 LDA $45 ; trigger id 3F/E2B1: 29 0F AND #$0F 3F/E2B3: AA TAX 3F/E2B4: BD 00 07 LDA $0700,X ; destination map 3F/E2B7: 85 48 STA $48 3F/E2B9: 20 DC E1 JSR $E1DC ; map main 3F/E2BC: 68 PLA 3F/E2BD: 85 48 STA $48 3F/E2BF: 68 PLA 3F/E2C0: 85 2A STA $2A 3F/E2C2: 68 PLA 3F/E2C3: 85 29 STA $29 3F/E2C5: A9 00 LDA #$00 3F/E2C7: 85 A5 STA $A5 3F/E2C9: A9 81 LDA #$81 ; load submap 3F/E2CB: 4C DE E1 JMP $E1DE ; $C0: exit (to world map) 3F/E2CE: C9 C0 CMP #$C0 3F/E2D0: D0 26 BNE $E2F8 ; other values branch to subroutine ??? 3F/E2D2: A9 94 LDA #$94 ; sound effect $14 3F/E2D4: 8D 49 7F STA $7F49 3F/E2D7: 20 8C D0 JSR $D08C 3F/E2DA: A9 00 LDA #$00 3F/E2DC: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/E2DF: AD 30 07 LDA $0730 3F/E2E2: 29 3F AND #$3F 3F/E2E4: AA TAX 3F/E2E5: BD 80 88 LDA $8880,X 3F/E2E8: 38 SEC 3F/E2E9: E9 07 SBC #$07 3F/E2EB: 85 27 STA $27 3F/E2ED: BD C0 88 LDA $88C0,X 3F/E2F0: 38 SEC 3F/E2F1: E9 07 SBC #$07 3F/E2F3: 85 28 STA $28 3F/E2F5: 4C ED C0 JMP $C0ED ; world map main ; [ check player input ] 3F/E2F8: A5 50 LDA $50 3F/E2FA: F0 32 BEQ $E32E 3F/E2FC: A9 02 LDA #$02 3F/E2FE: 20 69 D4 JSR $D469 3F/E301: A5 50 LDA $50 3F/E303: 10 1A BPL $E31F 3F/E305: C9 80 CMP #$80 3F/E307: D0 0B BNE $E314 ; $80: prologue 3F/E309: A9 1E LDA #$1E 3F/E30B: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/E30E: 20 F7 BF JSR $BFF7 ; prologue 3F/E311: 4C 25 E3 JMP $E325 ; $81: epilogue 3F/E314: A9 1E LDA #$1E 3F/E316: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/E319: 20 FA BF JSR $BFFA ; epilogue 3F/E31C: 4C 25 E3 JMP $E325 ; $01: shop 3F/E31F: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E322: 20 1F AF JSR $AF1F ; shop menu 3F/E325: A9 00 LDA #$00 3F/E327: 85 50 STA $50 3F/E329: A9 01 LDA #$01 3F/E32B: 4C F8 E7 JMP $E7F8 ; reload map ; $00: none 3F/E32E: A5 6C LDA $6C 3F/E330: D0 3C BNE $E36E ; branch if an event is running ; A button 3F/E332: A5 24 LDA $24 3F/E334: F0 03 BEQ $E339 3F/E336: 4C 26 EA JMP $EA26 ; check npcs and treasures ; B button 3F/E339: A5 25 LDA $25 3F/E33B: F0 03 BEQ $E340 3F/E33D: 4C 9C EA JMP $EA9C ; check item select/guest npc dialog ; start button 3F/E340: A5 23 LDA $23 3F/E342: F0 17 BEQ $E35B 3F/E344: A9 00 LDA #$00 3F/E346: 85 23 STA $23 3F/E348: A9 02 LDA #$02 3F/E34A: 20 69 D4 JSR $D469 3F/E34D: 20 83 E2 JSR $E283 ; get default battle bg 3F/E350: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E353: 20 2F A5 JSR $A52F ; main menu 3F/E356: A9 01 LDA #$01 3F/E358: 4C F8 E7 JMP $E7F8 ; reload map ; select button 3F/E35B: A5 22 LDA $22 3F/E35D: F0 0F BEQ $E36E 3F/E35F: A9 00 LDA #$00 3F/E361: 85 22 STA $22 3F/E363: A9 97 LDA #$97 ; sound effect $17 3F/E365: 8D 49 7F STA $7F49 3F/E368: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E36B: 4C 2C F7 JMP $F72C ; increment showing character ; event running or no button pressed 3F/E36E: A5 4B LDA $4B ; map title 3F/E370: C9 FF CMP #$FF 3F/E372: D0 09 BNE $E37D 3F/E374: 20 19 D2 JSR $D219 ; execute event script / update joypad input 3F/E377: A5 20 LDA $20 3F/E379: 29 0F AND #$0F 3F/E37B: D0 01 BNE $E37E ; branch if any direction buttons pressed 3F/E37D: 60 RTS ; direction button 3F/E37E: 85 33 STA $33 ; set facing direction 3F/E380: 20 96 E3 JSR $E396 ; check tile passability 3F/E383: B0 F8 BCS $E37D ; return if impassable 3F/E385: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E388: 20 DA B6 JSR $B6DA ; push to guest npc movement stack 3F/E38B: AD 21 60 LDA $6021 ; clear unlocked door flag 3F/E38E: 29 BF AND #$BF 3F/E390: 8D 21 60 STA $6021 3F/E393: 4C 67 CA JMP $CA67 ; init player movement ; [ check tile passability ] ; return carry clear if passable 3F/E396: 20 E9 E4 JSR $E4E9 ; get tile in facing direction 3F/E399: 20 F1 E3 JSR $E3F1 ; check if player is touching an npc 3F/E39C: B0 47 BCS $E3E5 ; return if touching an npc (impassable) 3F/E39E: 20 1C E5 JSR $E51C ; get tile properties 3F/E3A1: A5 44 LDA $44 3F/E3A3: 30 2B BMI $E3D0 ; branch if a trigger tile ; not a trigger tile 3F/E3A5: 24 44 BIT $44 3F/E3A7: 50 0B BVC $E3B4 3F/E3A9: A9 3D LDA #$3D 3F/E3AB: 20 09 FF JSR $FF09 ; switch prg bank 1 3F/E3AE: 38 SEC 3F/E3AF: 20 5B BC JSR $BC5B ; check random battle 3F/E3B2: A5 44 LDA $44 3F/E3B4: 29 07 AND #$07 3F/E3B6: F0 12 BEQ $E3CA ; branch if stairs 3F/E3B8: C9 04 CMP #$04 3F/E3BA: B0 0C BCS $E3C8 ; branch if a bridge tile 3F/E3BC: C9 03 CMP #$03 3F/E3BE: F0 25 BEQ $E3E5 ; branch if impassable on both z-levels 3F/E3C0: 05 A5 ORA $A5 3F/E3C2: C9 03 CMP #$03 3F/E3C4: F0 1F BEQ $E3E5 ; branch if not current z-level 3F/E3C6: 85 A5 STA $A5 3F/E3C8: 18 CLC ; passable 3F/E3C9: 60 RTS 3F/E3CA: A9 00 LDA #$00 ; passable on both z-levels (stairs) 3F/E3CC: 85 A5 STA $A5 3F/E3CE: 18 CLC ; passable 3F/E3CF: 60 RTS ; trigger tile 3F/E3D0: A5 45 LDA $45 ; trigger type 3F/E3D2: 4A LSR 3F/E3D3: 4A LSR 3F/E3D4: 4A LSR 3F/E3D5: 4A LSR 3F/E3D6: 0A ASL 3F/E3D7: AA TAX 3F/E3D8: BD 69 E6 LDA $E669,X ; trigger type jump table 3F/E3DB: 85 80 STA $80 3F/E3DD: BD 6A E6 LDA $E66A,X 3F/E3E0: 85 81 STA $81 3F/E3E2: 6C 80 00 JMP ($0080) ; impassable, no trigger 3F/E3E5: A9 00 LDA #$00 3F/E3E7: 85 45 STA $45 3F/E3E9: 85 AB STA $AB 3F/E3EB: A5 43 LDA $43 3F/E3ED: 85 44 STA $44 3F/E3EF: 38 SEC ; impassable 3F/E3F0: 60 RTS ; [ check if player is touching an npc ] ; $84: x position ; $85: y position ; set carry if player is touching an npc 3F/E3F1: A2 00 LDX #$00 3F/E3F3: BD 06 71 LDA $7106,X 3F/E3F6: F0 09 BEQ $E401 3F/E3F8: A5 A5 LDA $A5 3F/E3FA: F0 05 BEQ $E401 3F/E3FC: DD 06 71 CMP $7106,X 3F/E3FF: D0 22 BNE $E423 3F/E401: BD 00 70 LDA $7000,X 3F/E404: F0 1D BEQ $E423 3F/E406: BD 02 70 LDA $7002,X 3F/E409: C5 84 CMP $84 3F/E40B: D0 16 BNE $E423 3F/E40D: BD 03 70 LDA $7003,X 3F/E410: C5 85 CMP $85 3F/E412: D0 0F BNE $E423 3F/E414: BD 0B 70 LDA $700B,X 3F/E417: 29 03 AND #$03 3F/E419: 9D 0B 70 STA $700B,X 3F/E41C: A9 01 LDA #$01 3F/E41E: 9D 0D 70 STA $700D,X ; npc has been touched by player 3F/E421: 38 SEC 3F/E422: 60 RTS 3F/E423: 8A TXA ; next npc 3F/E424: 18 CLC 3F/E425: 69 10 ADC #$10 3F/E427: AA TAX 3F/E428: C9 C0 CMP #$C0 3F/E42A: 90 C7 BCC $E3F3 3F/E42C: A2 00 LDX #$00 3F/E42E: A5 A5 LDA $A5 3F/E430: F0 09 BEQ $E43B 3F/E432: BD 06 71 LDA $7106,X 3F/E435: F0 04 BEQ $E43B 3F/E437: C5 A5 CMP $A5 3F/E439: D0 4E BNE $E489 3F/E43B: BD 00 70 LDA $7000,X 3F/E43E: F0 49 BEQ $E489 3F/E440: BD 08 70 LDA $7008,X 3F/E443: 30 1A BMI $E45F 3F/E445: BD 09 70 LDA $7009,X 3F/E448: 10 2A BPL $E474 3F/E44A: BD 04 70 LDA $7004,X 3F/E44D: C5 84 CMP $84 3F/E44F: D0 38 BNE $E489 3F/E451: BD 05 70 LDA $7005,X 3F/E454: 18 CLC 3F/E455: 69 01 ADC #$01 3F/E457: 29 3F AND #$3F 3F/E459: C5 85 CMP $85 3F/E45B: D0 2C BNE $E489 3F/E45D: F0 23 BEQ $E482 3F/E45F: BD 04 70 LDA $7004,X 3F/E462: 18 CLC 3F/E463: 69 01 ADC #$01 3F/E465: 29 3F AND #$3F 3F/E467: C5 84 CMP $84 3F/E469: D0 1E BNE $E489 3F/E46B: BD 05 70 LDA $7005,X 3F/E46E: C5 85 CMP $85 3F/E470: D0 17 BNE $E489 3F/E472: F0 0E BEQ $E482 3F/E474: BD 04 70 LDA $7004,X 3F/E477: C5 84 CMP $84 3F/E479: D0 0E BNE $E489 3F/E47B: BD 05 70 LDA $7005,X 3F/E47E: C5 85 CMP $85 3F/E480: D0 07 BNE $E489 3F/E482: A9 01 LDA #$01 3F/E484: 9D 0D 70 STA $700D,X ; npc has been touched by player 3F/E487: 18 CLC 3F/E488: 60 RTS 3F/E489: 8A TXA ; next npc 3F/E48A: 18 CLC 3F/E48B: 69 10 ADC #$10 3F/E48D: AA TAX 3F/E48E: C9 C0 CMP #$C0 3F/E490: 90 9C BCC $E42E 3F/E492: 18 CLC 3F/E493: 60 RTS ; [ check npcs ] ; return carry set if there is an npc 3F/E494: A2 00 LDX #$00 3F/E496: BD 06 71 LDA $7106,X 3F/E499: F0 0D BEQ $E4A8 3F/E49B: C9 03 CMP #$03 3F/E49D: F0 09 BEQ $E4A8 3F/E49F: A5 A5 LDA $A5 3F/E4A1: F0 05 BEQ $E4A8 3F/E4A3: DD 06 71 CMP $7106,X 3F/E4A6: D0 36 BNE $E4DE 3F/E4A8: BD 00 70 LDA $7000,X 3F/E4AB: F0 31 BEQ $E4DE 3F/E4AD: BD 06 70 LDA $7006,X 3F/E4B0: C9 08 CMP #$08 3F/E4B2: BD 04 70 LDA $7004,X 3F/E4B5: 69 00 ADC #$00 3F/E4B7: 29 3F AND #$3F 3F/E4B9: C5 84 CMP $84 3F/E4BB: D0 21 BNE $E4DE 3F/E4BD: BD 07 70 LDA $7007,X 3F/E4C0: C9 08 CMP #$08 3F/E4C2: BD 05 70 LDA $7005,X 3F/E4C5: 69 00 ADC #$00 3F/E4C7: 29 3F AND #$3F 3F/E4C9: C5 85 CMP $85 3F/E4CB: D0 11 BNE $E4DE 3F/E4CD: BD 01 70 LDA $7001,X 3F/E4D0: 29 30 AND #$30 3F/E4D2: D0 08 BNE $E4DC 3F/E4D4: BD 0D 70 LDA $700D,X ; player interacted with npc (face player) 3F/E4D7: 09 80 ORA #$80 3F/E4D9: 9D 0D 70 STA $700D,X 3F/E4DC: 38 SEC 3F/E4DD: 60 RTS 3F/E4DE: 8A TXA 3F/E4DF: 18 CLC 3F/E4E0: 69 10 ADC #$10 3F/E4E2: AA TAX 3F/E4E3: C9 C0 CMP #$C0 3F/E4E5: 90 AF BCC $E496 3F/E4E7: 18 CLC 3F/E4E8: 60 RTS ; [ get tile in facing direction ] 3F/E4E9: 4A LSR 3F/E4EA: B0 14 BCS $E500 3F/E4EC: 4A LSR 3F/E4ED: B0 18 BCS $E507 3F/E4EF: 4A LSR 3F/E4F0: B0 07 BCS $E4F9 3F/E4F2: A2 07 LDX #$07 3F/E4F4: A0 06 LDY #$06 3F/E4F6: 4C 0B E5 JMP $E50B 3F/E4F9: A2 07 LDX #$07 3F/E4FB: A0 08 LDY #$08 3F/E4FD: 4C 0B E5 JMP $E50B 3F/E500: A2 08 LDX #$08 3F/E502: A0 07 LDY #$07 3F/E504: 4C 0B E5 JMP $E50B 3F/E507: A2 06 LDX #$06 3F/E509: A0 07 LDY #$07 3F/E50B: 8A TXA 3F/E50C: 18 CLC 3F/E50D: 65 29 ADC $29 3F/E50F: 29 3F AND #$3F 3F/E511: 85 84 STA $84 3F/E513: 98 TYA 3F/E514: 18 CLC 3F/E515: 65 2A ADC $2A 3F/E517: 29 3F AND #$3F 3F/E519: 85 85 STA $85 3F/E51B: 60 RTS ; [ get tile properties ] 3F/E51C: A4 4C LDY $4C 3F/E51E: A5 84 LDA $84 3F/E520: 05 85 ORA $85 3F/E522: 29 20 AND #$20 3F/E524: D0 1B BNE $E541 3F/E526: A5 85 LDA $85 3F/E528: 29 1F AND #$1F 3F/E52A: 4A LSR 3F/E52B: 4A LSR 3F/E52C: 4A LSR 3F/E52D: 09 74 ORA #$74 3F/E52F: 85 81 STA $81 3F/E531: A5 85 LDA $85 3F/E533: 0A ASL 3F/E534: 0A ASL 3F/E535: 0A ASL 3F/E536: 0A ASL 3F/E537: 0A ASL 3F/E538: 05 84 ORA $84 3F/E53A: 85 80 STA $80 3F/E53C: A0 00 LDY #$00 3F/E53E: B1 80 LDA ($80),Y 3F/E540: A8 TAY 3F/E541: B9 00 04 LDA $0400,Y ; byte 1 3F/E544: 85 44 STA $44 3F/E546: B9 00 05 LDA $0500,Y ; byte 2 3F/E549: 85 45 STA $45 3F/E54B: 60 RTS ; [ update scrolling (normal map) ] 3F/E54C: A9 1E LDA #$1E 3F/E54E: 8D 01 20 STA $2001 3F/E551: 20 D1 E7 JSR $E7D1 ; draw open door/treasure chest 3F/E554: AD 02 20 LDA $2002 3F/E557: A5 34 LDA $34 3F/E559: F0 16 BEQ $E571 ; update ppu registers 3F/E55B: 20 EB E5 JSR $E5EB ; update player movement 3F/E55E: 20 07 C9 JSR $C907 ; do poison step damage 3F/E561: A5 44 LDA $44 3F/E563: 29 08 AND #$08 3F/E565: C9 08 CMP #$08 3F/E567: D0 07 BNE $E570 3F/E569: A5 45 LDA $45 3F/E56B: D0 03 BNE $E570 ; return if on a trigger ??? 3F/E56D: 20 FD C8 JSR $C8FD ; do floor damage 3F/E570: 60 RTS ; [ update ppu registers (normal map) ] 3F/E571: A5 FD LDA $FD 3F/E573: 85 FF STA $FF 3F/E575: 8D 00 20 STA $2000 ; ppu control 3F/E578: A5 29 LDA $29 3F/E57A: 0A ASL 3F/E57B: 0A ASL 3F/E57C: 0A ASL 3F/E57D: 0A ASL 3F/E57E: 05 35 ORA $35 3F/E580: 8D 05 20 STA $2005 ; ppu scroll x 3F/E583: A5 2F LDA $2F 3F/E585: 0A ASL 3F/E586: 0A ASL 3F/E587: 0A ASL 3F/E588: 0A ASL 3F/E589: 05 36 ORA $36 3F/E58B: 8D 05 20 STA $2005 ; ppu scroll y 3F/E58E: 60 RTS ; [ update player movement (normal map) ] ; subroutine starts at 3F/E5EB 3F/E58F: A5 32 LDA $32 3F/E591: F0 03 BEQ $E596 ; branch if background doesn't need update 3F/E593: 20 79 CA JSR $CA79 ; update map background 3F/E596: 20 71 E5 JSR $E571 ; update ppu registers 3F/E599: A5 35 LDA $35 3F/E59B: 18 CLC 3F/E59C: 65 34 ADC $34 3F/E59E: 29 0F AND #$0F 3F/E5A0: F0 03 BEQ $E5A5 3F/E5A2: 85 35 STA $35 3F/E5A4: 60 RTS 3F/E5A5: 85 34 STA $34 3F/E5A7: 85 35 STA $35 3F/E5A9: A5 29 LDA $29 3F/E5AB: 18 CLC 3F/E5AC: 69 01 ADC #$01 3F/E5AE: 29 3F AND #$3F 3F/E5B0: 85 29 STA $29 3F/E5B2: 29 10 AND #$10 3F/E5B4: 46 FD LSR $FD 3F/E5B6: C9 10 CMP #$10 3F/E5B8: 26 FD ROL $FD 3F/E5BA: 60 RTS 3F/E5BB: A5 32 LDA $32 3F/E5BD: F0 03 BEQ $E5C2 ; branch if background doesn't need update 3F/E5BF: 20 79 CA JSR $CA79 ; update map background 3F/E5C2: 20 71 E5 JSR $E571 ; update ppu registers 3F/E5C5: A5 35 LDA $35 3F/E5C7: D0 13 BNE $E5DC 3F/E5C9: A5 29 LDA $29 3F/E5CB: 38 SEC 3F/E5CC: E9 01 SBC #$01 3F/E5CE: 29 3F AND #$3F 3F/E5D0: 85 29 STA $29 3F/E5D2: 29 10 AND #$10 3F/E5D4: 46 FD LSR $FD 3F/E5D6: C9 10 CMP #$10 3F/E5D8: 26 FD ROL $FD 3F/E5DA: A5 35 LDA $35 3F/E5DC: 38 SEC 3F/E5DD: E5 34 SBC $34 3F/E5DF: 29 0F AND #$0F 3F/E5E1: F0 03 BEQ $E5E6 3F/E5E3: 85 35 STA $35 3F/E5E5: 60 RTS 3F/E5E6: 85 34 STA $34 3F/E5E8: 85 35 STA $35 3F/E5EA: 60 RTS ; subroutine starts here 3F/E5EB: A5 33 LDA $33 3F/E5ED: 4A LSR 3F/E5EE: B0 9F BCS $E58F 3F/E5F0: 4A LSR 3F/E5F1: B0 C8 BCS $E5BB 3F/E5F3: 4A LSR 3F/E5F4: B0 03 BCS $E5F9 3F/E5F6: 4C 30 E6 JMP $E630 3F/E5F9: A5 32 LDA $32 3F/E5FB: F0 09 BEQ $E606 ; branch if background doesn't need update 3F/E5FD: A5 36 LDA $36 3F/E5FF: C9 08 CMP #$08 3F/E601: D0 03 BNE $E606 3F/E603: 20 79 CA JSR $CA79 ; update map background 3F/E606: 20 71 E5 JSR $E571 ; update ppu registers 3F/E609: A5 36 LDA $36 3F/E60B: 18 CLC 3F/E60C: 65 34 ADC $34 3F/E60E: 29 0F AND #$0F 3F/E610: F0 03 BEQ $E615 3F/E612: 85 36 STA $36 3F/E614: 60 RTS 3F/E615: 85 34 STA $34 3F/E617: 85 36 STA $36 3F/E619: A5 2A LDA $2A 3F/E61B: 18 CLC 3F/E61C: 69 01 ADC #$01 3F/E61E: 29 3F AND #$3F 3F/E620: 85 2A STA $2A 3F/E622: A5 2F LDA $2F 3F/E624: 18 CLC 3F/E625: 69 01 ADC #$01 3F/E627: C9 0F CMP #$0F 3F/E629: 90 02 BCC $E62D 3F/E62B: E9 0F SBC #$0F 3F/E62D: 85 2F STA $2F 3F/E62F: 60 RTS 3F/E630: A5 32 LDA $32 3F/E632: F0 09 BEQ $E63D ; branch if background doesn't need update 3F/E634: A5 36 LDA $36 3F/E636: C9 08 CMP #$08 3F/E638: D0 03 BNE $E63D 3F/E63A: 20 79 CA JSR $CA79 ; update map background 3F/E63D: 20 71 E5 JSR $E571 ; update ppu registers 3F/E640: A5 36 LDA $36 3F/E642: D0 16 BNE $E65A 3F/E644: A5 2A LDA $2A 3F/E646: 38 SEC 3F/E647: E9 01 SBC #$01 3F/E649: 29 3F AND #$3F 3F/E64B: 85 2A STA $2A 3F/E64D: A5 2F LDA $2F 3F/E64F: 38 SEC 3F/E650: E9 01 SBC #$01 3F/E652: B0 02 BCS $E656 3F/E654: 69 0F ADC #$0F 3F/E656: 85 2F STA $2F 3F/E658: A5 36 LDA $36 3F/E65A: 38 SEC 3F/E65B: E5 34 SBC $34 3F/E65D: 29 0F AND #$0F 3F/E65F: F0 03 BEQ $E664 3F/E661: 85 36 STA $36 3F/E663: 60 RTS 3F/E664: 85 34 STA $34 3F/E666: 85 36 STA $36 3F/E668: 60 RTS ; trigger type jump table 3F/E669: E689 E68F E6B9 E6B9 E695 E69B E6A8 E6B9 3F/E679: E6B9 E6B9 E6B9 E6B9 E6B3 E6B3 E6B3 E6BE ; 0: exit to previous map 3F/E689: A9 40 LDA #$40 ; exit to previous map 3F/E68B: 85 AB STA $AB 3F/E68D: 18 CLC ; passable 3F/E68E: 60 RTS ; 1: exit to world map 3F/E68F: A9 C0 LDA #$C0 ; exit to world map 3F/E691: 85 AB STA $AB 3F/E693: 18 CLC ; passable 3F/E694: 60 RTS ; 4: entrance 3F/E695: A9 80 LDA #$80 ; entrance 3F/E697: 85 AB STA $AB 3F/E699: 18 CLC ; passable 3F/E69A: 60 RTS ; 5: door 3F/E69B: A9 83 LDA #$83 ; play sound effect 3 3F/E69D: 8D 49 7F STA $7F49 3F/E6A0: A9 7E LDA #$7E ; open door tile 3F/E6A2: 20 F2 E6 JSR $E6F2 ; open door 3F/E6A5: 4C 95 E6 JMP $E695 ; entrance ; 6: locked door 3F/E6A8: AD 21 60 LDA $6021 ; check unlocked door flag 3F/E6AB: 29 40 AND #$40 3F/E6AD: F0 04 BEQ $E6B3 3F/E6AF: A9 92 LDA #$92 ; play sound effect $12 3F/E6B1: D0 EA BNE $E69D ; C,D,E: impassable 3F/E6B3: A5 43 LDA $43 3F/E6B5: 85 44 STA $44 3F/E6B7: 38 SEC ; impassable 3F/E6B8: 60 RTS ; default: no trigger 3F/E6B9: A5 44 LDA $44 3F/E6BB: 4C B4 E3 JMP $E3B4 ; F: trigger 3F/E6BE: A5 45 LDA $45 ; trigger id 3F/E6C0: 29 0F AND #$0F 3F/E6C2: AA TAX 3F/E6C3: BD 20 07 LDA $0720,X ; map triggers ; fallthrough ; [ event trigger ] ; A: trigger id 3F/E6C6: 48 PHA 3F/E6C7: 20 23 EB JSR $EB23 ; load prg banks $2C/$2D 3F/E6CA: 68 PLA 3F/E6CB: 0A ASL 3F/E6CC: AA TAX 3F/E6CD: BD 80 88 LDA $8880,X 3F/E6D0: 85 82 STA $82 3F/E6D2: BD 81 88 LDA $8881,X 3F/E6D5: 85 83 STA $83 3F/E6D7: 20 1B EA JSR $EA1B ; load trigger script 3F/E6DA: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E6DD: 20 74 92 JSR $9274 ; update vehicle/status event switches 3F/E6E0: 20 19 93 JSR $9319 ; check trigger script 3F/E6E3: 20 DD E9 JSR $E9DD ; execute event 3F/E6E6: A5 2D LDA $2D 3F/E6E8: 4A LSR 3F/E6E9: 90 29 BCC $E714 ; return if on world map 3F/E6EB: A5 44 LDA $44 3F/E6ED: 4C B4 E3 JMP $E3B4 ; [ open treasure chest ] 3F/E6F0: A9 7D LDA #$7D ; open treasure chest tile ; fallthrough ; [ open door ] 3F/E6F2: 85 0D STA $0D 3F/E6F4: A2 07 LDX #$07 ; y = 7 (facing left or right) 3F/E6F6: A5 33 LDA $33 ; facing direction 3F/E6F8: 29 0C AND #$0C 3F/E6FA: F0 08 BEQ $E704 ; branch if facing left or right 3F/E6FC: A2 08 LDX #$08 ; y = 8 (facing down) 3F/E6FE: C9 04 CMP #$04 3F/E700: F0 02 BEQ $E704 3F/E702: A2 06 LDX #$06 ; y = 6 (facing up) 3F/E704: 8A TXA 3F/E705: 18 CLC 3F/E706: 65 2F ADC $2F 3F/E708: C9 0F CMP #$0F 3F/E70A: 90 02 BCC $E70E 3F/E70C: E9 0F SBC #$0F 3F/E70E: 85 0F STA $0F 3F/E710: A5 84 LDA $84 3F/E712: 85 0E STA $0E 3F/E714: 60 RTS ; [ update bg for open door/treasure chest ] 3F/E715: A6 0F LDX $0F 3F/E717: A5 0E LDA $0E 3F/E719: 0A ASL 3F/E71A: C9 20 CMP #$20 3F/E71C: B0 0B BCS $E729 3F/E71E: 1D 84 CB ORA $CB84,X 3F/E721: 85 80 STA $80 3F/E723: BD 94 CB LDA $CB94,X 3F/E726: 4C 36 E7 JMP $E736 3F/E729: 29 1F AND #$1F 3F/E72B: 1D 84 CB ORA $CB84,X 3F/E72E: 85 80 STA $80 3F/E730: BD 94 CB LDA $CB94,X 3F/E733: 18 CLC 3F/E734: 69 04 ADC #$04 3F/E736: 85 81 STA $81 3F/E738: 8D 06 20 STA $2006 3F/E73B: A5 80 LDA $80 3F/E73D: 8D 06 20 STA $2006 3F/E740: A6 0D LDX $0D ; open door tile id 3F/E742: BD 00 7C LDA $7C00,X ; top left 3F/E745: 8D 07 20 STA $2007 3F/E748: BD 00 7D LDA $7D00,X ; top right 3F/E74B: 8D 07 20 STA $2007 3F/E74E: A5 81 LDA $81 3F/E750: 8D 06 20 STA $2006 3F/E753: A5 80 LDA $80 3F/E755: 18 CLC 3F/E756: 69 20 ADC #$20 3F/E758: 8D 06 20 STA $2006 3F/E75B: BD 00 7E LDA $7E00,X ; bottom left 3F/E75E: 8D 07 20 STA $2007 3F/E761: BD 00 72 LDA $7200,X ; bottom right 3F/E764: 8D 07 20 STA $2007 3F/E767: A9 00 LDA #$00 3F/E769: 85 82 STA $82 3F/E76B: A5 0E LDA $0E 3F/E76D: 29 0F AND #$0F 3F/E76F: 4A LSR 3F/E770: 85 80 STA $80 3F/E772: 90 02 BCC $E776 3F/E774: E6 82 INC $82 3F/E776: A5 0F LDA $0F 3F/E778: 4A LSR 3F/E779: 90 04 BCC $E77F 3F/E77B: E6 82 INC $82 3F/E77D: E6 82 INC $82 3F/E77F: 0A ASL 3F/E780: 0A ASL 3F/E781: 0A ASL 3F/E782: 05 80 ORA $80 3F/E784: 85 80 STA $80 3F/E786: A9 23 LDA #$23 3F/E788: 85 81 STA $81 3F/E78A: A5 0E LDA $0E 3F/E78C: C9 10 CMP #$10 3F/E78E: 90 0B BCC $E79B 3F/E790: A5 80 LDA $80 3F/E792: 18 CLC 3F/E793: 69 40 ADC #$40 3F/E795: 85 80 STA $80 3F/E797: A9 27 LDA #$27 3F/E799: 85 81 STA $81 3F/E79B: A6 80 LDX $80 3F/E79D: A4 0D LDY $0D 3F/E79F: B9 00 06 LDA $0600,Y ; attribute table entry 3F/E7A2: A4 82 LDY $82 3F/E7A4: 39 CC E7 AND $E7CC,Y 3F/E7A7: 85 82 STA $82 3F/E7A9: BD 00 03 LDA $0300,X 3F/E7AC: 39 C8 E7 AND $E7C8,Y 3F/E7AF: 05 82 ORA $82 3F/E7B1: 9D 00 03 STA $0300,X 3F/E7B4: 85 82 STA $82 3F/E7B6: A5 81 LDA $81 3F/E7B8: 8D 06 20 STA $2006 3F/E7BB: A5 80 LDA $80 3F/E7BD: 09 C0 ORA #$C0 3F/E7BF: 8D 06 20 STA $2006 3F/E7C2: A5 82 LDA $82 3F/E7C4: 8D 07 20 STA $2007 3F/E7C7: 60 RTS ; masks for map attribute table 3F/E7C8: FC F3 CF 3F 3F/E7CC: 03 0C 30 C0 ; [ draw open door/treasure chest ] ; subroutine starts at 3F/E7D1 3F/E7D0: 60 RTS ; subroutine starts here 3F/E7D1: A5 0D LDA $0D 3F/E7D3: F0 FB BEQ $E7D0 3F/E7D5: A5 34 LDA $34 3F/E7D7: F0 0A BEQ $E7E3 ; branch if not moving 3F/E7D9: A5 33 LDA $33 3F/E7DB: 29 03 AND #$03 3F/E7DD: F0 04 BEQ $E7E3 ; branch if not moving left or right 3F/E7DF: A5 32 LDA $32 3F/E7E1: D0 ED BNE $E7D0 ; return if map bg needs update 3F/E7E3: 20 15 E7 JSR $E715 ; update bg for open door/treasure chest 3F/E7E6: A9 00 LDA #$00 3F/E7E8: 85 0D STA $0D 3F/E7EA: 60 RTS ; unused (was open door sound effect) 3F/E7EB: 60 RTS ; [ load map ] 3F/E7EC: 20 03 E8 JSR $E803 ; load map 3F/E7EF: 20 11 E8 JSR $E811 ; load npcs 3F/E7F2: 20 1B E8 JSR $E81B ; init map 3F/E7F5: 4C 66 D0 JMP $D066 ; [ reload map ] 3F/E7F8: 20 03 E8 JSR $E803 ; load map 3F/E7FB: 20 1B E8 JSR $E81B ; init map 3F/E7FE: A9 03 LDA #$03 3F/E800: 4C 69 D4 JMP $D469 ; [ load map ] ; A: s------r ; s: load submap ; r: not coming from world map ??? 3F/E803: 85 AA STA $AA 3F/E805: A9 01 LDA #$01 ; not on world map 3F/E807: 85 2D STA $2D 3F/E809: A9 00 LDA #$00 3F/E80B: 8D 01 20 STA $2001 3F/E80E: 4C A4 CB JMP $CBA4 ; load map data ; [ load npcs ] 3F/E811: A9 3B LDA #$3B 3F/E813: 20 09 FF JSR $FF09 ; switch prg bank 1 3F/E816: A2 07 LDX #$07 ; load npcs 3F/E818: 4C 03 A0 JMP $A003 ; execute object command ; [ init map ] 3F/E81B: A9 00 LDA #$00 3F/E81D: 85 37 STA $37 3F/E81F: 8D 01 20 STA $2001 3F/E822: 85 22 STA $22 3F/E824: 85 23 STA $23 3F/E826: 85 24 STA $24 3F/E828: 85 25 STA $25 3F/E82A: 85 AB STA $AB 3F/E82C: 20 0F DD JSR $DD0F ; load normal map graphics 3F/E82F: A9 3A LDA #$3A 3F/E831: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/E834: 20 09 85 JSR $8509 ; load map palette 3F/E837: A5 33 LDA $33 ; save facing direction 3F/E839: 48 PHA 3F/E83A: 20 25 CA JSR $CA25 3F/E83D: 68 PLA 3F/E83E: 85 33 STA $33 3F/E840: A5 29 LDA $29 3F/E842: 29 10 AND #$10 3F/E844: C9 10 CMP #$10 3F/E846: 2A ROL 3F/E847: 29 01 AND #$01 3F/E849: 09 88 ORA #$88 3F/E84B: 85 FD STA $FD 3F/E84D: 85 FF STA $FF 3F/E84F: 20 00 FF JSR $FF00 ; wait for vblank 3F/E852: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3F/E855: 20 71 E5 JSR $E571 ; update ppu registers 3F/E858: A9 00 LDA #$00 3F/E85A: 8D 01 20 STA $2001 3F/E85D: A5 AA LDA $AA 3F/E85F: D0 04 BNE $E865 ; branch if not coming from world map 3F/E861: A9 04 LDA #$04 3F/E863: 85 33 STA $33 ; facing down 3F/E865: A5 29 LDA $29 3F/E867: 18 CLC 3F/E868: 69 07 ADC #$07 3F/E86A: 29 3F AND #$3F 3F/E86C: 85 68 STA $68 3F/E86E: 85 84 STA $84 3F/E870: A5 2A LDA $2A 3F/E872: 18 CLC 3F/E873: 69 07 ADC #$07 3F/E875: 29 3F AND #$3F 3F/E877: 85 85 STA $85 3F/E879: 85 69 STA $69 3F/E87B: 20 1C E5 JSR $E51C ; get tile properties 3F/E87E: A5 AA LDA $AA 3F/E880: 30 02 BMI $E884 ; branch if loading submap 3F/E882: D0 0C BNE $E890 ; branch if reloading map 3F/E884: A5 44 LDA $44 3F/E886: 29 34 AND #$34 3F/E888: 85 43 STA $43 3F/E88A: A5 44 LDA $44 3F/E88C: 29 03 AND #$03 3F/E88E: 85 A5 STA $A5 3F/E890: A5 44 LDA $44 3F/E892: 10 09 BPL $E89D 3F/E894: A5 45 LDA $45 3F/E896: C9 F0 CMP #$F0 3F/E898: 90 03 BCC $E89D 3F/E89A: 20 D0 E3 JSR $E3D0 3F/E89D: A5 43 LDA $43 3F/E89F: 85 44 STA $44 3F/E8A1: A9 00 LDA #$00 3F/E8A3: 85 45 STA $45 3F/E8A5: A9 39 LDA #$39 3F/E8A7: 20 09 FF JSR $FF09 ; switch prg bank 1 3F/E8AA: A6 48 LDX $48 3F/E8AC: A5 78 LDA $78 3F/E8AE: F0 06 BEQ $E8B6 3F/E8B0: BD 00 BF LDA $BF00,X ; 39/BF00 (initial random battle rng) 3F/E8B3: 4C B9 E8 JMP $E8B9 3F/E8B6: BD 00 BE LDA $BE00,X ; 39/BE00 3F/E8B9: 85 F8 STA $F8 3F/E8BB: A9 00 LDA #$00 3F/E8BD: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/E8C0: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E8C3: 20 27 B6 JSR $B627 3F/E8C6: A5 AA LDA $AA 3F/E8C8: F0 04 BEQ $E8CE ; branch if coming from world map 3F/E8CA: A9 FF LDA #$FF ; no map title 3F/E8CC: 85 4B STA $4B 3F/E8CE: A5 4D LDA $4D 3F/E8D0: 30 09 BMI $E8DB ; branch if there is a conditional song 3F/E8D2: 8D 43 7F STA $7F43 3F/E8D5: A9 01 LDA #$01 ; play new song 3F/E8D7: 8D 42 7F STA $7F42 3F/E8DA: 60 RTS 3F/E8DB: 29 07 AND #$07 3F/E8DD: 09 38 ORA #$38 3F/E8DF: A2 88 LDX #$88 ; trigger script pointer offset: 2C/8870 3F/E8E1: 20 04 EA JSR $EA04 ; load trigger script 3F/E8E4: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E8E7: A5 6C LDA $6C ; save event id 3F/E8E9: 48 PHA 3F/E8EA: 20 19 93 JSR $9319 ; check trigger script 3F/E8ED: A5 6C LDA $6C ; set song id 3F/E8EF: 85 71 STA $71 3F/E8F1: A9 F8 LDA #$F8 ; event command $F8 (play song) 3F/E8F3: 85 70 STA $70 3F/E8F5: 68 PLA ; restore event id 3F/E8F6: 85 6C STA $6C 3F/E8F8: A9 3B LDA #$3B 3F/E8FA: 20 09 FF JSR $FF09 ; switch prg bank 1 3F/E8FD: 4C 00 A0 JMP $A000 ; execute event command ; [ update sprite layer priority ] 3F/E900: A5 44 LDA $44 3F/E902: 29 04 AND #$04 3F/E904: F0 0A BEQ $E910 ; branch if not a bridge tile 3F/E906: A5 A5 LDA $A5 3F/E908: 4A LSR 3F/E909: 90 05 BCC $E910 ; branch if on lower z-level 3F/E90B: A9 00 LDA #$00 ; all sprites above bg (top of bridge) 3F/E90D: 85 43 STA $43 3F/E90F: 60 RTS 3F/E910: A5 44 LDA $44 3F/E912: 29 34 AND #$34 ; use tile's layer priority 3F/E914: 85 43 STA $43 3F/E916: 60 RTS ; [ check treasures and locked doors ] ; return carry set if need to display dialogue (A = dialogue id in bank 1) 3F/E917: 20 1C E5 JSR $E51C ; get tile properties 3F/E91A: A5 44 LDA $44 3F/E91C: 10 40 BPL $E95E 3F/E91E: 98 TYA ; tile index 3F/E91F: C9 90 CMP #$90 3F/E921: 90 3B BCC $E95E 3F/E923: C9 A0 CMP #$A0 3F/E925: 90 41 BCC $E968 3F/E927: C9 D0 CMP #$D0 3F/E929: 90 33 BCC $E95E 3F/E92B: C9 F0 CMP #$F0 3F/E92D: B0 2F BCS $E95E ; $D0-$EF: treasure 3F/E92F: A2 00 LDX #$00 3F/E931: 86 BA STX $BA 3F/E933: C9 E0 CMP #$E0 3F/E935: 90 4B BCC $E982 3F/E937: C6 BA DEC $BA ; not a chest 3F/E939: A5 45 LDA $45 3F/E93B: 29 0F AND #$0F 3F/E93D: AA TAX 3F/E93E: BD 10 07 LDA $0710,X ; map treasure 3F/E941: 48 PHA 3F/E942: 29 07 AND #$07 3F/E944: AA TAX 3F/E945: 68 PLA 3F/E946: 4A LSR 3F/E947: 4A LSR 3F/E948: 4A LSR 3F/E949: A8 TAY 3F/E94A: A5 78 LDA $78 ; world id 3F/E94C: F0 05 BEQ $E953 3F/E94E: 98 TYA 3F/E94F: 18 CLC 3F/E950: 69 20 ADC #$20 ; add 32 if not on floating continent 3F/E952: A8 TAY 3F/E953: BD 60 E9 LDA $E960,X ; bit masks 3F/E956: 39 40 60 AND $6040,Y ; check treasure switch 3F/E959: F0 03 BEQ $E95E 3F/E95B: 4C 82 E9 JMP $E982 ; default 3F/E95E: 18 CLC 3F/E95F: 60 RTS ; bit masks 3F/E960: 01 02 04 08 10 20 40 80 ; $90-$9F: locked door 3F/E968: AE 0E 60 LDX $600E 3F/E96B: BD 00 61 LDA $6100,X 3F/E96E: C9 08 CMP #$08 3F/E970: F0 04 BEQ $E976 ; branch if showing character is a thief 3F/E972: A9 03 LDA #$03 ; $0103: "Locked." 3F/E974: 38 SEC 3F/E975: 60 RTS 3F/E976: AD 21 60 LDA $6021 ; set door is unlocked flag 3F/E979: 09 40 ORA #$40 3F/E97B: 8D 21 60 STA $6021 3F/E97E: A9 7A LDA #$7A ; $017A: "Unlocked by the Thief's ability!" 3F/E980: 38 SEC 3F/E981: 60 RTS ; give treasure 3F/E982: A9 BF LDA #$BF ; play sound effect $3F 3F/E984: 8D 49 7F STA $7F49 3F/E987: 24 BA BIT $BA 3F/E989: 30 03 BMI $E98E ; branch if not a chest 3F/E98B: 20 F0 E6 JSR $E6F0 ; open treasure chest 3F/E98E: A5 80 LDA $80 ; save pointer to tilemap (at $7400) 3F/E990: 48 PHA 3F/E991: A5 81 LDA $81 3F/E993: 48 PHA 3F/E994: 20 49 F5 JSR $F549 ; give treasure 3F/E997: AA TAX 3F/E998: 68 PLA 3F/E999: 85 81 STA $81 3F/E99B: 68 PLA 3F/E99C: 85 80 STA $80 3F/E99E: 8A TXA 3F/E99F: C9 50 CMP #$50 3F/E9A1: D0 0A BNE $E9AD ; branch if not "Can't carry anymore." 3F/E9A3: A9 00 LDA #$00 ; don't change tile 3F/E9A5: 85 0D STA $0D 3F/E9A7: 85 44 STA $44 3F/E9A9: A9 50 LDA #$50 ; $0150: "Can't carry anymore." 3F/E9AB: 38 SEC 3F/E9AC: 60 RTS 3F/E9AD: 24 BA BIT $BA 3F/E9AF: 30 FA BMI $E9AB ; branch if not a chest 3F/E9B1: AA TAX 3F/E9B2: A0 00 LDY #$00 3F/E9B4: A9 7D LDA #$7D 3F/E9B6: 91 80 STA ($80),Y ; set tilemap 3F/E9B8: 8A TXA 3F/E9B9: 38 SEC 3F/E9BA: 60 RTS ; [ execute npc event ] 3F/E9BB: A5 43 LDA $43 3F/E9BD: 85 44 STA $44 3F/E9BF: BD 00 70 LDA $7000,X 3F/E9C2: 85 A0 STA $A0 3F/E9C4: A2 82 LDX #$82 ; trigger script pointer offset: 2C/8200 3F/E9C6: A5 78 LDA $78 3F/E9C8: F0 02 BEQ $E9CC 3F/E9CA: A2 84 LDX #$84 ; trigger script pointer offset: 2C/8400 3F/E9CC: A5 A0 LDA $A0 3F/E9CE: 20 04 EA JSR $EA04 ; load trigger script 3F/E9D1: A5 A0 LDA $A0 3F/E9D3: C9 E0 CMP #$E0 3F/E9D5: B0 11 BCS $E9E8 ; branch if an inn, shop, or fat chocobo 3F/E9D7: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E9DA: 20 F3 92 JSR $92F3 ; check npc script ; fallthrough ; [ execute event ] 3F/E9DD: A5 6C LDA $6C 3F/E9DF: F0 03 BEQ $E9E4 ; return if no event 3F/E9E1: 4C 2C C7 JMP $C72C ; execute event 3F/E9E4: 60 RTS ; shop npc (from 3F/E9EA) 3F/E9E5: E6 50 INC $50 ; set shop flag 3F/E9E7: 60 RTS ; from 3F/E9D5 3F/E9E8: C9 E3 CMP #$E3 3F/E9EA: B0 F9 BCS $E9E5 ; branch if a shop (or fat chocobo) ; inn npc 3F/E9EC: A2 08 LDX #$08 ; update all npc sprites (no movement) 3F/E9EE: A9 3B LDA #$3B 3F/E9F0: 20 09 FF JSR $FF09 ; switch prg bank 1 3F/E9F3: 20 03 A0 JSR $A003 ; execute object command 3F/E9F6: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/E9F9: 20 DD 8F JSR $8FDD ; inn 3F/E9FC: A5 6C LDA $6C 3F/E9FE: F0 03 BEQ $EA03 ; return if no event 3F/EA00: 4C 2C C7 JMP $C72C ; execute event 3F/EA03: 60 RTS ; [ load trigger script ] ; A: trigger script id ; X: hi byte of pointer table address (bank 2C/2D) 3F/EA04: 0A ASL 3F/EA05: A8 TAY 3F/EA06: 90 01 BCC $EA09 3F/EA08: E8 INX 3F/EA09: 86 81 STX $81 3F/EA0B: A9 00 LDA #$00 3F/EA0D: 85 80 STA $80 3F/EA0F: 20 23 EB JSR $EB23 ; load prg banks $2C/$2D 3F/EA12: B1 80 LDA ($80),Y 3F/EA14: 85 82 STA $82 3F/EA16: C8 INY 3F/EA17: B1 80 LDA ($80),Y 3F/EA19: 85 83 STA $83 ; fallthrough ; [ load trigger script ] ; +$82: pointer to trigger script 3F/EA1B: A0 3F LDY #$3F 3F/EA1D: B1 82 LDA ($82),Y 3F/EA1F: 99 00 7B STA $7B00,Y 3F/EA22: 88 DEY 3F/EA23: 10 F8 BPL $EA1D 3F/EA25: 60 RTS ; [ check npcs and treasures ] ; player pressed A button 3F/EA26: A9 00 LDA #$00 3F/EA28: 85 24 STA $24 3F/EA2A: 20 00 FF JSR $FF00 ; wait for vblank 3F/EA2D: 20 50 C7 JSR $C750 ; update sound 3F/EA30: A5 33 LDA $33 ; facing direction 3F/EA32: 20 E9 E4 JSR $E4E9 ; get tile in facing direction 3F/EA35: 20 94 E4 JSR $E494 ; check npcs 3F/EA38: 90 03 BCC $EA3D ; branch if no npc 3F/EA3A: 4C BB E9 JMP $E9BB ; execute npc event 3F/EA3D: 20 17 E9 JSR $E917 ; check treasures and locked doors 3F/EA40: 90 0F BCC $EA51 3F/EA42: 85 76 STA $76 3F/EA44: A9 82 LDA #$82 ; text offset $0100 3F/EA46: 85 95 STA $95 3F/EA48: A9 00 LDA #$00 3F/EA4A: 85 94 STA $94 3F/EA4C: A5 43 LDA $43 3F/EA4E: 85 44 STA $44 3F/EA50: 60 RTS 3F/EA51: A5 43 LDA $43 3F/EA53: 85 44 STA $44 3F/EA55: 60 RTS ; [ do guest npc script ] 3F/EA56: 24 7E BIT $7E 3F/EA58: 70 F7 BVS $EA51 ; branch if guest npc is hidden 3F/EA5A: AD 0B 60 LDA $600B 3F/EA5D: F0 F2 BEQ $EA51 ; branch if no guest npc 3F/EA5F: E6 A9 INC $A9 3F/EA61: 20 23 EB JSR $EB23 ; load prg banks $2C/$2D 3F/EA64: AD 0B 60 LDA $600B ; guest npc 3F/EA67: 38 SEC 3F/EA68: E9 01 SBC #$01 3F/EA6A: 0A ASL 3F/EA6B: AA TAX 3F/EA6C: BD 60 88 LDA $8860,X 3F/EA6F: 85 82 STA $82 3F/EA71: BD 61 88 LDA $8861,X 3F/EA74: 85 83 STA $83 3F/EA76: 20 1B EA JSR $EA1B ; load trigger script 3F/EA79: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/EA7C: 20 19 93 JSR $9319 ; check trigger script 3F/EA7F: A5 E1 LDA $E1 3F/EA81: 29 0F AND #$0F 3F/EA83: AA TAX 3F/EA84: BD 8C EA LDA $EA8C,X 3F/EA87: 85 33 STA $33 ; face toward guest noc 3F/EA89: 4C DD E9 JMP $E9DD ; execute event ; facing direction to face toward guest npc 3F/EA8C: 08 02 01 00 3F/EA90: 08 02 01 00 3F/EA94: 04 02 01 00 3F/EA98: 00 00 00 00 ; [ check item select/guest npc dialog ] ; player pressed B button 3F/EA9C: A9 00 LDA #$00 3F/EA9E: 85 25 STA $25 3F/EAA0: 20 00 FF JSR $FF00 ; wait for vblank 3F/EAA3: 20 50 C7 JSR $C750 ; update sound 3F/EAA6: A5 33 LDA $33 3F/EAA8: 20 E9 E4 JSR $E4E9 ; get tile in facing direction 3F/EAAB: 20 94 E4 JSR $E494 ; check npcs 3F/EAAE: B0 20 BCS $EAD0 ; branch if no npc 3F/EAB0: 20 1C E5 JSR $E51C ; get tile properties 3F/EAB3: A5 44 LDA $44 3F/EAB5: 10 12 BPL $EAC9 ; branch if not on an entrance 3F/EAB7: 98 TYA 3F/EAB8: C9 90 CMP #$90 3F/EABA: 90 0D BCC $EAC9 3F/EABC: C9 A0 CMP #$A0 3F/EABE: B0 09 BCS $EAC9 ; tile index $90-$9F (locked door ???) 3F/EAC0: A5 43 LDA $43 3F/EAC2: 85 44 STA $44 3F/EAC4: A9 DF LDA #$DF ; npc $DF (locked door) 3F/EAC6: 4C D7 EA JMP $EAD7 3F/EAC9: A5 43 LDA $43 3F/EACB: 85 44 STA $44 3F/EACD: 4C 56 EA JMP $EA56 ; do guest npc script ; npc present (do item select) 3F/EAD0: A5 43 LDA $43 3F/EAD2: 85 44 STA $44 3F/EAD4: BD 00 70 LDA $7000,X ; npc id 3F/EAD7: 85 A0 STA $A0 3F/EAD9: A2 08 LDX #$08 ; update all npc sprites (no movement) 3F/EADB: A9 3B LDA #$3B 3F/EADD: 20 09 FF JSR $FF09 ; switch prg bank 1 3F/EAE0: 20 03 A0 JSR $A003 ; execute object command 3F/EAE3: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/EAE6: 20 E3 8D JSR $8DE3 ; npc item select 3F/EAE9: D0 01 BNE $EAEC ; branch if an item was selected 3F/EAEB: 60 RTS 3F/EAEC: 85 67 STA $67 3F/EAEE: C9 B0 CMP #$B0 ; only key items and usable items are valid 3F/EAF0: B0 F9 BCS $EAEB 3F/EAF2: C9 98 CMP #$98 3F/EAF4: 90 F5 BCC $EAEB 3F/EAF6: E9 98 SBC #$98 3F/EAF8: 0A ASL 3F/EAF9: AA TAX 3F/EAFA: A5 78 LDA $78 3F/EAFC: F0 05 BEQ $EB03 3F/EAFE: 8A TXA 3F/EAFF: 18 CLC 3F/EB00: 69 30 ADC #$30 ; pointer offset: 2C/8830 for surface world 3F/EB02: AA TAX 3F/EB03: 20 23 EB JSR $EB23 ; load prg banks $2C/$2D 3F/EB06: BD 00 88 LDA $8800,X ; 2C/8800 (pointers to item select npc scripts) 3F/EB09: 85 82 STA $82 3F/EB0B: BD 01 88 LDA $8801,X 3F/EB0E: 85 83 STA $83 3F/EB10: 20 1B EA JSR $EA1B ; load trigger script 3F/EB13: 20 28 EB JSR $EB28 ; load prg banks $3C/$3D 3F/EB16: AD 00 7B LDA $7B00 ; first byte of trigger script is npc id 3F/EB19: C5 A0 CMP $A0 3F/EB1B: D0 CE BNE $EAEB ; branch if not a match 3F/EB1D: 20 EE 92 JSR $92EE ; check item select npc script 3F/EB20: 4C DD E9 JMP $E9DD ; execute event ; [ load prg banks $2C/$2D ] 3F/EB23: A9 2C LDA #$2C 3F/EB25: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ load prg banks $3C/$3D ] 3F/EB28: A9 3C LDA #$3C 3F/EB2A: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; -------------------------------------------------------------------------- ; [ scroll menu down ] ; set carry if at bottom 3F/EB2D: A0 00 LDY #$00 3F/EB2F: A5 93 LDA $93 3F/EB31: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/EB34: B1 3E LDA ($3E),Y 3F/EB36: D0 0B BNE $EB43 ; branch if not at bottom 3F/EB38: A9 40 LDA #$40 3F/EB3A: 85 B4 STA $B4 ; show page up arrow 3F/EB3C: A5 57 LDA $57 3F/EB3E: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/EB41: 38 SEC 3F/EB42: 60 RTS 3F/EB43: A9 C0 LDA #$C0 3F/EB45: 85 B4 STA $B4 ; show both page arrows 3F/EB47: A5 A3 LDA $A3 3F/EB49: C9 02 CMP #$02 3F/EB4B: D0 11 BNE $EB5E 3F/EB4D: AD F0 79 LDA $79F0 3F/EB50: 38 SEC 3F/EB51: E9 08 SBC #$08 3F/EB53: 8D F0 79 STA $79F0 3F/EB56: AD F2 79 LDA $79F2 3F/EB59: E9 00 SBC #$00 3F/EB5B: 8D F2 79 STA $79F2 3F/EB5E: 20 A9 EB JSR $EBA9 ; find next line of text ; fallthrough ; [ load next line of text (external) ] 3F/EB61: 20 C0 EE JSR $EEC0 ; load next line of text 3F/EB64: 20 F5 EC JSR $ECF5 ; restore prg banks 3F/EB67: 18 CLC 3F/EB68: 60 RTS ; [ scroll menu up ] ; set carry if at top 3F/EB69: A5 1C LDA $1C 3F/EB6B: 38 SEC 3F/EB6C: E9 02 SBC #$02 3F/EB6E: 85 1C STA $1C 3F/EB70: A5 1D LDA $1D 3F/EB72: E9 00 SBC #$00 3F/EB74: 85 1D STA $1D 3F/EB76: A5 93 LDA $93 3F/EB78: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/EB7B: A0 01 LDY #$01 3F/EB7D: B1 1C LDA ($1C),Y 3F/EB7F: F0 21 BEQ $EBA2 ; branch if at top 3F/EB81: 20 D1 EB JSR $EBD1 3F/EB84: A9 C0 LDA #$C0 3F/EB86: 85 B4 STA $B4 ; show both page arrows 3F/EB88: A5 A3 LDA $A3 3F/EB8A: C9 02 CMP #$02 3F/EB8C: D0 11 BNE $EB9F 3F/EB8E: AD F0 79 LDA $79F0 3F/EB91: 18 CLC 3F/EB92: 69 08 ADC #$08 3F/EB94: 8D F0 79 STA $79F0 3F/EB97: AD F2 79 LDA $79F2 3F/EB9A: 69 00 ADC #$00 3F/EB9C: 8D F2 79 STA $79F2 3F/EB9F: 4C 61 EB JMP $EB61 ; load next line of text 3F/EBA2: A9 80 LDA #$80 3F/EBA4: 85 B4 STA $B4 ; show page down arrow 3F/EBA6: 4C 3C EB JMP $EB3C ; [ find next line of text ] 3F/EBA9: A0 00 LDY #$00 3F/EBAB: B1 1C LDA ($1C),Y ; get next letter 3F/EBAD: E6 1C INC $1C 3F/EBAF: D0 02 BNE $EBB3 3F/EBB1: E6 1D INC $1D 3F/EBB3: C9 01 CMP #$01 ; newline 3F/EBB5: F0 11 BEQ $EBC8 3F/EBB7: C9 28 CMP #$28 ; 2-byte escape code 3F/EBB9: B0 F0 BCS $EBAB 3F/EBBB: C9 10 CMP #$10 ; 1-byte escape code 3F/EBBD: 90 EC BCC $EBAB 3F/EBBF: E6 1C INC $1C ; increment again for 2-byte escape codes 3F/EBC1: D0 E8 BNE $EBAB 3F/EBC3: E6 1D INC $1D 3F/EBC5: 4C AB EB JMP $EBAB 3F/EBC8: A5 1C LDA $1C 3F/EBCA: 85 3E STA $3E 3F/EBCC: A5 1D LDA $1D 3F/EBCE: 85 3F STA $3F 3F/EBD0: 60 RTS ; [ ] 3F/EBD1: A5 1C LDA $1C 3F/EBD3: 38 SEC 3F/EBD4: E9 01 SBC #$01 3F/EBD6: 85 1C STA $1C 3F/EBD8: A5 1D LDA $1D 3F/EBDA: E9 00 SBC #$00 3F/EBDC: 85 1D STA $1D 3F/EBDE: A0 00 LDY #$00 3F/EBE0: B1 1C LDA ($1C),Y 3F/EBE2: C9 10 CMP #$10 3F/EBE4: 90 0C BCC $EBF2 3F/EBE6: C9 28 CMP #$28 3F/EBE8: B0 08 BCS $EBF2 3F/EBEA: A5 1C LDA $1C 3F/EBEC: 38 SEC 3F/EBED: E9 02 SBC #$02 3F/EBEF: 4C D6 EB JMP $EBD6 3F/EBF2: C8 INY 3F/EBF3: B1 1C LDA ($1C),Y 3F/EBF5: F0 07 BEQ $EBFE 3F/EBF7: C9 01 CMP #$01 3F/EBF9: F0 03 BEQ $EBFE 3F/EBFB: 4C D1 EB JMP $EBD1 3F/EBFE: A5 1C LDA $1C 3F/EC00: 18 CLC 3F/EC01: 69 02 ADC #$02 3F/EC03: 85 3E STA $3E 3F/EC05: A5 1D LDA $1D 3F/EC07: 69 00 ADC #$00 3F/EC09: 85 3F STA $3F 3F/EC0B: 60 RTS ; [ show/hide sprites behind text window ] ; show sprites (dialogue) 3F/EC0C: A2 06 LDX #$06 3F/EC0E: A9 01 LDA #$01 3F/EC10: D0 08 BNE $EC1A ; show sprites (item select) 3F/EC12: A2 07 LDX #$07 3F/EC14: A9 01 LDA #$01 3F/EC16: D0 02 BNE $EC1A ; hide sprites 3F/EC18: A9 00 LDA #$00 3F/EC1A: 85 84 STA $84 3F/EC1C: BD 67 EC LDA $EC67,X ; left x position 3F/EC1F: 85 80 STA $80 3F/EC21: BD 6E EC LDA $EC6E,X ; right x position 3F/EC24: 85 81 STA $81 3F/EC26: BD 75 EC LDA $EC75,X ; top y position 3F/EC29: 85 82 STA $82 3F/EC2B: BD 7C EC LDA $EC7C,X ; bottom y position 3F/EC2E: 85 83 STA $83 3F/EC30: A0 40 LDY #$40 3F/EC32: B9 03 02 LDA $0203,Y 3F/EC35: C5 80 CMP $80 3F/EC37: 90 26 BCC $EC5F 3F/EC39: C5 81 CMP $81 3F/EC3B: B0 22 BCS $EC5F 3F/EC3D: B9 00 02 LDA $0200,Y 3F/EC40: C5 82 CMP $82 3F/EC42: 90 1B BCC $EC5F 3F/EC44: C5 83 CMP $83 3F/EC46: B0 17 BCS $EC5F 3F/EC48: A5 84 LDA $84 3F/EC4A: D0 0B BNE $EC57 3F/EC4C: B9 02 02 LDA $0202,Y 3F/EC4F: 09 20 ORA #$20 ; set priority 3F/EC51: 99 02 02 STA $0202,Y 3F/EC54: 4C 5F EC JMP $EC5F 3F/EC57: B9 02 02 LDA $0202,Y 3F/EC5A: 29 DF AND #$DF ; clear priority 3F/EC5C: 99 02 02 STA $0202,Y 3F/EC5F: 98 TYA 3F/EC60: 18 CLC 3F/EC61: 69 04 ADC #$04 3F/EC63: A8 TAY 3F/EC64: 90 CC BCC $EC32 3F/EC66: 60 RTS ; text window regions for covering sprites 3F/EC67: 0A 0A 0A 8A 0A 0A 0A ; left 3F/EC6E: EF 4F EF EF EF EF EF ; right 3F/EC75: 0A 8A 8A 6A 0A 0A 6A ; top 3F/EC7C: 57 D7 D7 87 2A 57 D7 ; bottom ; [ ] ; unused ??? 3F/EC83: A9 00 LDA #$00 3F/EC85: 20 FA EC JSR $ECFA ; open window 3F/EC88: 4C 65 EE JMP $EE65 ; load text (multi-page) ; [ show dialogue ] 3F/EC8B: A9 00 LDA #$00 ; fallthrough ; [ show text ] ; A: window size -> $96 3F/EC8D: 20 FA EC JSR $ECFA ; open window 3F/EC90: 20 65 EE JSR $EE65 ; load text (multi-page) 3F/EC93: 20 AB EC JSR $ECAB ; wait for keypress 3F/EC96: A5 7D LDA $7D 3F/EC98: F0 0E BEQ $ECA8 ; branch if not waiting for A button 3F/EC9A: A5 20 LDA $20 3F/EC9C: 30 06 BMI $ECA4 ; branch if A button pressed 3F/EC9E: 20 C4 EC JSR $ECC4 ; wait for vblank 3F/ECA1: 4C 9A EC JMP $EC9A 3F/ECA4: A9 00 LDA #$00 3F/ECA6: 85 7D STA $7D 3F/ECA8: 4C B6 C9 JMP $C9B6 ; [ wait for keypress ] 3F/ECAB: 20 81 D2 JSR $D281 ; read joypad registers 3F/ECAE: A5 20 LDA $20 3F/ECB0: F0 0B BEQ $ECBD ; wait for button release 3F/ECB2: 20 00 FF JSR $FF00 ; wait for vblank 3F/ECB5: E6 F0 INC $F0 3F/ECB7: 20 50 C7 JSR $C750 ; update sound 3F/ECBA: 4C AB EC JMP $ECAB 3F/ECBD: 20 81 D2 JSR $D281 ; read joypad registers 3F/ECC0: A5 20 LDA $20 3F/ECC2: D0 0B BNE $ECCF ; wait for any key 3F/ECC4: 20 00 FF JSR $FF00 ; wait for vblank 3F/ECC7: E6 F0 INC $F0 3F/ECC9: 20 50 C7 JSR $C750 ; update sound 3F/ECCC: 4C BD EC JMP $ECBD 3F/ECCF: A5 20 LDA $20 3F/ECD1: 85 21 STA $21 3F/ECD3: A5 93 LDA $93 3F/ECD5: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ wait for vblank (dialogue text scrolling) ] 3F/ECD8: 20 00 FF JSR $FF00 ; wait for vblank 3F/ECDB: E6 F0 INC $F0 3F/ECDD: 20 50 C7 JSR $C750 ; update sound 3F/ECE0: A5 93 LDA $93 3F/ECE2: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ redraw window ] ; does not redraw bottom border 3F/ECE5: A5 39 LDA $39 3F/ECE7: 85 3B STA $3B 3F/ECE9: 20 70 F6 JSR $F670 ; reset text buffer 3F/ECEC: 20 56 ED JSR $ED56 3F/ECEF: 20 F6 ED JSR $EDF6 ; draw top of text window 3F/ECF2: 20 C6 ED JSR $EDC6 ; copy text window to ppu 3F/ECF5: A5 57 LDA $57 3F/ECF7: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ open window ] ; A: window size ; 0: dialogue ; 1: yes/no ; 2: item select ; 3: gil ; 4: map title 3F/ECFA: 85 96 STA $96 3F/ECFC: A9 00 LDA #$00 ; clear buttons pressed 3F/ECFE: 85 24 STA $24 3F/ED00: 85 25 STA $25 ; menu code jumps here 3F/ED02: A6 96 LDX $96 3F/ED04: 20 61 ED JSR $ED61 ; get text window position 3F/ED07: A5 39 LDA $39 3F/ED09: 85 3B STA $3B 3F/ED0B: 20 70 F6 JSR $F670 ; reset text buffer 3F/ED0E: 20 56 ED JSR $ED56 3F/ED11: A5 3D LDA $3D 3F/ED13: 38 SEC 3F/ED14: E9 02 SBC #$02 ; top 3F/ED16: 48 PHA 3F/ED17: 20 F6 ED JSR $EDF6 ; draw top of text window 3F/ED1A: 20 C6 ED JSR $EDC6 ; copy text window to ppu 3F/ED1D: 68 PLA 3F/ED1E: 38 SEC 3F/ED1F: E9 02 SBC #$02 3F/ED21: F0 18 BEQ $ED3B 3F/ED23: B0 05 BCS $ED2A 3F/ED25: C6 3B DEC $3B 3F/ED27: 4C 3B ED JMP $ED3B ; middle 3F/ED2A: 48 PHA 3F/ED2B: 20 1D EE JSR $EE1D ; draw middle of text window 3F/ED2E: 20 C6 ED JSR $EDC6 ; copy text window to ppu 3F/ED31: 68 PLA 3F/ED32: 38 SEC 3F/ED33: E9 02 SBC #$02 3F/ED35: F0 04 BEQ $ED3B 3F/ED37: B0 F1 BCS $ED2A ; bottom 3F/ED39: C6 3B DEC $3B 3F/ED3B: 20 3E EE JSR $EE3E ; draw bottom of text window 3F/ED3E: 20 C6 ED JSR $EDC6 ; copy text window to ppu 3F/ED41: E6 38 INC $38 3F/ED43: E6 39 INC $39 3F/ED45: A5 3C LDA $3C 3F/ED47: 38 SEC 3F/ED48: E9 02 SBC #$02 3F/ED4A: 85 3C STA $3C 3F/ED4C: A5 3D LDA $3D 3F/ED4E: 38 SEC 3F/ED4F: E9 02 SBC #$02 3F/ED51: 85 3D STA $3D 3F/ED53: 4C F5 EC JMP $ECF5 ; [ clear text window attribute buffer ??? ] 3F/ED56: A2 0F LDX #$0F 3F/ED58: A9 FF LDA #$FF 3F/ED5A: 9D C0 07 STA $07C0,X 3F/ED5D: CA DEX 3F/ED5E: 10 FA BPL $ED5A 3F/ED60: 60 RTS ; [ get text window position ] 3F/ED61: A5 37 LDA $37 3F/ED63: D0 4C BNE $EDB1 ; return if in menu 3F/ED65: BD B2 ED LDA $EDB2,X ; left 3F/ED68: 85 B6 STA $B6 3F/ED6A: 38 SEC 3F/ED6B: E9 01 SBC #$01 3F/ED6D: 85 97 STA $97 3F/ED6F: BD B7 ED LDA $EDB7,X ; top 3F/ED72: 18 CLC 3F/ED73: 69 02 ADC #$02 3F/ED75: 85 B5 STA $B5 3F/ED77: C6 B5 DEC $B5 3F/ED79: 85 98 STA $98 3F/ED7B: A5 29 LDA $29 ; player x position 3F/ED7D: 0A ASL 3F/ED7E: 18 CLC 3F/ED7F: 7D B2 ED ADC $EDB2,X ; left 3F/ED82: 29 3F AND #$3F 3F/ED84: 85 38 STA $38 3F/ED86: A5 2F LDA $2F ; player y position 3F/ED88: 0A ASL 3F/ED89: 18 CLC 3F/ED8A: 7D B7 ED ADC $EDB7,X ; top 3F/ED8D: C9 1E CMP #$1E 3F/ED8F: 90 02 BCC $ED93 3F/ED91: E9 1E SBC #$1E 3F/ED93: 85 39 STA $39 3F/ED95: BD BC ED LDA $EDBC,X ; width 3F/ED98: 85 3C STA $3C 3F/ED9A: 18 CLC 3F/ED9B: 65 B6 ADC $B6 3F/ED9D: 85 B8 STA $B8 3F/ED9F: C6 B8 DEC $B8 3F/EDA1: BD C1 ED LDA $EDC1,X ; height 3F/EDA4: 85 3D STA $3D 3F/EDA6: 18 CLC 3F/EDA7: 65 B5 ADC $B5 3F/EDA9: 38 SEC 3F/EDAA: E9 03 SBC #$03 3F/EDAC: 85 B7 STA $B7 3F/EDAE: 20 18 EC JSR $EC18 ; hide sprites behind text window 3F/EDB1: 60 RTS ; text window positions 3F/EDB2: 02 02 02 12 02 ; left 3F/EDB7: 02 12 12 0E 02 ; top 3F/EDBC: 1C 08 1C 0C 1C ; width 3F/EDC1: 0A 0A 0A 04 04 ; height ; [ copy text window to ppu ] 3F/EDC6: A5 3C LDA $3C 3F/EDC8: 85 90 STA $90 3F/EDCA: 20 8F C9 JSR $C98F 3F/EDCD: 20 00 FF JSR $FF00 ; wait for vblank 3F/EDD0: A9 02 LDA #$02 3F/EDD2: 8D 14 40 STA $4014 ; dma oam data to ppu 3F/EDD5: 20 AA F6 JSR $F6AA ; copy text to ppu 3F/EDD8: 20 A9 C9 JSR $C9A9 3F/EDDB: 20 E1 ED JSR $EDE1 ; update scrolling (text window) 3F/EDDE: 4C 50 C7 JMP $C750 ; update sound ; [ update scrolling (text window) ] 3F/EDE1: A5 37 LDA $37 3F/EDE3: D0 03 BNE $EDE8 ; branch if in menu 3F/EDE5: 4C 71 E5 JMP $E571 ; update ppu registers 3F/EDE8: A5 FF LDA $FF 3F/EDEA: 8D 00 20 STA $2000 3F/EDED: A9 00 LDA #$00 ; clear ppu scrolling registers 3F/EDEF: 8D 05 20 STA $2005 3F/EDF2: 8D 05 20 STA $2005 3F/EDF5: 60 RTS ; [ draw top of text window ] 3F/EDF6: A2 01 LDX #$01 3F/EDF8: A9 F7 LDA #$F7 ; top left corner 3F/EDFA: 8D 80 07 STA $0780 3F/EDFD: A9 FA LDA #$FA ; left side 3F/EDFF: 8D A0 07 STA $07A0 3F/EE02: A9 F8 LDA #$F8 ; top 3F/EE04: 9D 80 07 STA $0780,X 3F/EE07: A9 FF LDA #$FF ; blank 3F/EE09: 9D A0 07 STA $07A0,X 3F/EE0C: E8 INX 3F/EE0D: E4 3C CPX $3C 3F/EE0F: 90 F1 BCC $EE02 3F/EE11: CA DEX 3F/EE12: A9 F9 LDA #$F9 ; top right 3F/EE14: 9D 80 07 STA $0780,X 3F/EE17: A9 FB LDA #$FB ; right side 3F/EE19: 9D A0 07 STA $07A0,X 3F/EE1C: 60 RTS ; [ draw middle of text window ] 3F/EE1D: A2 01 LDX #$01 3F/EE1F: A9 FA LDA #$FA ; left side 3F/EE21: 8D 80 07 STA $0780 3F/EE24: 8D A0 07 STA $07A0 3F/EE27: A9 FF LDA #$FF ; blank 3F/EE29: 9D 80 07 STA $0780,X 3F/EE2C: 9D A0 07 STA $07A0,X 3F/EE2F: E8 INX 3F/EE30: E4 3C CPX $3C 3F/EE32: 90 F5 BCC $EE29 3F/EE34: CA DEX 3F/EE35: A9 FB LDA #$FB ; right side 3F/EE37: 9D 80 07 STA $0780,X 3F/EE3A: 9D A0 07 STA $07A0,X 3F/EE3D: 60 RTS ; [ draw bottom of text window ] 3F/EE3E: A2 01 LDX #$01 3F/EE40: A9 FA LDA #$FA ; left side 3F/EE42: 8D 80 07 STA $0780 3F/EE45: A9 FC LDA #$FC ; bottom left 3F/EE47: 8D A0 07 STA $07A0 3F/EE4A: A9 FF LDA #$FF ; blank 3F/EE4C: 9D 80 07 STA $0780,X 3F/EE4F: A9 FD LDA #$FD ; bottom 3F/EE51: 9D A0 07 STA $07A0,X 3F/EE54: E8 INX 3F/EE55: E4 3C CPX $3C 3F/EE57: 90 F1 BCC $EE4A 3F/EE59: CA DEX 3F/EE5A: A9 FB LDA #$FB ; right side 3F/EE5C: 9D 80 07 STA $0780,X 3F/EE5F: A9 FE LDA #$FE ; bottom right 3F/EE61: 9D A0 07 STA $07A0,X 3F/EE64: 60 RTS ; [ load text (multi-page) ] 3F/EE65: 20 9A EE JSR $EE9A ; load text (single-page) 3F/EE68: 90 2F BCC $EE99 ; branch if end of string 3F/EE6A: 20 AB EC JSR $ECAB ; wait for keypress 3F/EE6D: A5 3D LDA $3D ; window height 3F/EE6F: 48 PHA 3F/EE70: A9 00 LDA #$00 3F/EE72: 85 F0 STA $F0 3F/EE74: 20 D8 EC JSR $ECD8 ; wait for vblank 3F/EE77: A5 F0 LDA $F0 3F/EE79: 29 01 AND #$01 ; wait 2 frames 3F/EE7B: D0 F7 BNE $EE74 3F/EE7D: 20 A9 EB JSR $EBA9 ; find next line of text 3F/EE80: 20 C0 EE JSR $EEC0 ; load next page of text 3F/EE83: B0 0A BCS $EE8F ; branch if not end of string ; end of string 3F/EE85: 68 PLA 3F/EE86: 38 SEC 3F/EE87: E9 02 SBC #$02 ; scroll text by 1 line 3F/EE89: F0 0E BEQ $EE99 3F/EE8B: B0 E2 BCS $EE6F 3F/EE8D: 90 0A BCC $EE99 ; not end of string 3F/EE8F: 68 PLA 3F/EE90: 38 SEC 3F/EE91: E9 02 SBC #$02 ; scroll text by 1 line 3F/EE93: F0 D5 BEQ $EE6A 3F/EE95: B0 D8 BCS $EE6F 3F/EE97: 90 D1 BCC $EE6A 3F/EE99: 60 RTS ; [ load text (single-page) ] ; $92: text id ; +$94: pointer table address ; return carry clear if end of string is reached ; return carry set if window is full but end of end of string is not reached 3F/EE9A: A9 18 LDA #$18 3F/EE9C: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/EE9F: A5 92 LDA $92 3F/EEA1: 0A ASL 3F/EEA2: A8 TAY 3F/EEA3: 90 02 BCC $EEA7 3F/EEA5: E6 95 INC $95 3F/EEA7: B1 94 LDA ($94),Y ; get text pointer 3F/EEA9: 85 3E STA $3E 3F/EEAB: C8 INY 3F/EEAC: B1 94 LDA ($94),Y 3F/EEAE: 48 PHA 3F/EEAF: 29 1F AND #$1F 3F/EEB1: 09 80 ORA #$80 3F/EEB3: 85 3F STA $3F 3F/EEB5: 68 PLA 3F/EEB6: 4A LSR ; get bank 3F/EEB7: 4A LSR 3F/EEB8: 4A LSR 3F/EEB9: 4A LSR 3F/EEBA: 4A LSR 3F/EEBB: 18 CLC 3F/EEBC: 69 18 ADC #$18 3F/EEBE: 85 93 STA $93 ; load next line of text 3F/EEC0: A5 93 LDA $93 3F/EEC2: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/EEC5: A9 00 LDA #$00 ; clear number of choices 3F/EEC7: 85 1E STA $1E 3F/EEC9: A5 3E LDA $3E ; copy scrolled text pointer 3F/EECB: 85 1C STA $1C 3F/EECD: A5 3F LDA $3F 3F/EECF: 85 1D STA $1D 3F/EED1: 85 1D STA $1D ; oops... 3F/EED3: A5 38 LDA $38 ; reset text window position to top left 3F/EED5: 85 3A STA $3A 3F/EED7: A5 39 LDA $39 3F/EED9: 85 3B STA $3B 3F/EEDB: 20 70 F6 JSR $F670 ; reset text buffer 3F/EEDE: A9 00 LDA #$00 3F/EEE0: 85 90 STA $90 3F/EEE2: 85 1F STA $1F 3F/EEE4: 20 FA EE JSR $EEFA ; decode text 3F/EEE7: B0 0A BCS $EEF3 ; end of string 3F/EEE9: 20 92 F6 JSR $F692 ; draw one line of text 3F/EEEC: A5 57 LDA $57 3F/EEEE: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/EEF1: 18 CLC 3F/EEF2: 60 RTS ; not end of string 3F/EEF3: A5 57 LDA $57 3F/EEF5: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/EEF8: 38 SEC 3F/EEF9: 60 RTS ; [ decode text ] ; return carry clear if end of string is reached ; return carry set if window is full but end of end of string is not reached 3F/EEFA: A0 00 LDY #$00 3F/EEFC: B1 3E LDA ($3E),Y 3F/EEFE: F0 F1 BEQ $EEF1 ; branch if null terminator 3F/EF00: E6 3E INC $3E 3F/EF02: D0 02 BNE $EF06 3F/EF04: E6 3F INC $3F 3F/EF06: C9 28 CMP #$28 3F/EF08: 90 34 BCC $EF3E ; branch if a control code 3F/EF0A: C9 5C CMP #$5C 3F/EF0C: 90 19 BCC $EF27 ; branch if character with dakuten 3F/EF0E: A4 90 LDY $90 3F/EF10: A6 37 LDX $37 3F/EF12: D0 06 BNE $EF1A ; branch if in menu 3F/EF14: C9 70 CMP #$70 3F/EF16: B0 02 BCS $EF1A ; hide characters $5C-$6F 3F/EF18: A9 FF LDA #$FF 3F/EF1A: 99 A0 07 STA $07A0,Y ; character 3F/EF1D: A9 FF LDA #$FF 3F/EF1F: 99 80 07 STA $0780,Y ; no dakuten 3F/EF22: E6 90 INC $90 3F/EF24: 4C FA EE JMP $EEFA ; next character 3F/EF27: 38 SEC 3F/EF28: E9 28 SBC #$28 3F/EF2A: AA TAX 3F/EF2B: A4 90 LDY $90 3F/EF2D: BD 15 F5 LDA $F515,X ; dakuten 3F/EF30: 99 80 07 STA $0780,Y 3F/EF33: BD E1 F4 LDA $F4E1,X ; kana 3F/EF36: 99 A0 07 STA $07A0,Y 3F/EF39: E6 90 INC $90 3F/EF3B: 4C FA EE JMP $EEFA ; next character 3F/EF3E: C9 10 CMP #$10 3F/EF40: 90 03 BCC $EF45 3F/EF42: 4C 2A F0 JMP $F02A 3F/EF45: C9 01 CMP #$01 3F/EF47: D0 12 BNE $EF5B ; $01: newline 3F/EF49: 20 92 F6 JSR $F692 ; draw one line of text 3F/EF4C: E6 1F INC $1F ; go to next line 3F/EF4E: E6 1F INC $1F 3F/EF50: A5 1F LDA $1F 3F/EF52: C5 3D CMP $3D 3F/EF54: 90 02 BCC $EF58 ; branch if window is not full 3F/EF56: 38 SEC 3F/EF57: 60 RTS 3F/EF58: 4C FA EE JMP $EEFA ; $02: item name 3F/EF5B: C9 02 CMP #$02 3F/EF5D: D0 0B BNE $EF6A 3F/EF5F: A5 BB LDA $BB 3F/EF61: 85 84 STA $84 3F/EF63: A9 00 LDA #$00 3F/EF65: 85 B9 STA $B9 3F/EF67: 4C 9D F0 JMP $F09D ; $03: gil (treasure) 3F/EF6A: C9 03 CMP #$03 3F/EF6C: D0 0E BNE $EF7C 3F/EF6E: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/EF71: A6 BB LDX $BB 3F/EF73: 20 D4 F5 JSR $F5D4 ; get item price 3F/EF76: 20 78 8B JSR $8B78 ; copy number to text buffer (6 digits) 3F/EF79: 4C 91 F2 JMP $F291 ; $04: gil (variable) 3F/EF7C: C9 04 CMP #$04 3F/EF7E: D0 15 BNE $EF95 3F/EF80: A5 61 LDA $61 3F/EF82: 85 80 STA $80 3F/EF84: A5 62 LDA $62 3F/EF86: 85 81 STA $81 3F/EF88: A5 63 LDA $63 3F/EF8A: 85 82 STA $82 3F/EF8C: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/EF8F: 20 78 8B JSR $8B78 ; copy number to text buffer (6 digits) 3F/EF92: 4C 91 F2 JMP $F291 ; $05: current gil 3F/EF95: C9 05 CMP #$05 3F/EF97: D0 09 BNE $EFA2 3F/EF99: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/EF9C: 20 03 8B JSR $8B03 ; copy current gil to text buffer 3F/EF9F: 4C 91 F2 JMP $F291 ; $06: message speed 3F/EFA2: C9 06 CMP #$06 3F/EFA4: D0 03 BNE $EFA9 3F/EFA6: 4C FA EE JMP $EEFA ; $07: guest npc name 3F/EFA9: C9 07 CMP #$07 3F/EFAB: D0 0E BNE $EFBB 3F/EFAD: AD 0B 60 LDA $600B 3F/EFB0: F0 F4 BEQ $EFA6 3F/EFB2: 38 SEC 3F/EFB3: E9 01 SBC #$01 3F/EFB5: 18 CLC 3F/EFB6: 69 F8 ADC #$F8 3F/EFB8: 4C D8 F2 JMP $F2D8 ; $08: current cp 3F/EFBB: C9 08 CMP #$08 3F/EFBD: D0 1B BNE $EFDA 3F/EFBF: AD 1B 60 LDA $601B 3F/EFC2: 85 80 STA $80 3F/EFC4: A9 00 LDA #$00 3F/EFC6: 85 81 STA $81 3F/EFC8: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/EFCB: 20 57 8B JSR $8B57 ; copy number to text buffer (3 digits) 3F/EFCE: A6 90 LDX $90 3F/EFD0: E6 90 INC $90 3F/EFD2: A9 5C LDA #$5C 3F/EFD4: 9D A0 07 STA $07A0,X 3F/EFD7: 4C 91 F2 JMP $F291 ; $09: half newline (no dakuten) 3F/EFDA: C9 09 CMP #$09 3F/EFDC: D0 06 BNE $EFE4 3F/EFDE: 20 92 F6 JSR $F692 ; draw one line of text 3F/EFE1: 4C 4E EF JMP $EF4E ; $0A: 3F/EFE4: C9 0A CMP #$0A 3F/EFE6: D0 04 BNE $EFEC 3F/EFE8: A9 09 LDA #$09 3F/EFEA: 18 CLC 3F/EFEB: 60 RTS ; $0B: unused 3F/EFEC: C9 0B CMP #$0B 3F/EFEE: D0 00 BNE $EFF0 ; $0C: showing character's name 3F/EFF0: C9 0C CMP #$0C 3F/EFF2: D0 06 BNE $EFFA 3F/EFF4: AE 0E 60 LDX $600E 3F/EFF7: 4C 16 F3 JMP $F316 ; $0D: save count 3F/EFFA: C9 0D CMP #$0D 3F/EFFC: D0 09 BNE $F007 3F/EFFE: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F001: 20 34 8B JSR $8B34 ; copy save count to text buffer 3F/F004: 4C 91 F2 JMP $F291 ; $0F: trash can icon 3F/F007: C9 0F CMP #$0F 3F/F009: D0 1C BNE $F027 3F/F00B: A6 90 LDX $90 3F/F00D: A9 58 LDA #$58 3F/F00F: 9D 80 07 STA $0780,X 3F/F012: A9 59 LDA #$59 3F/F014: 9D 81 07 STA $0781,X 3F/F017: A9 5A LDA #$5A 3F/F019: 9D A0 07 STA $07A0,X 3F/F01C: A9 5B LDA #$5B 3F/F01E: 9D A1 07 STA $07A1,X 3F/F021: 8A TXA 3F/F022: 18 CLC 3F/F023: 69 02 ADC #$02 3F/F025: 85 90 STA $90 3F/F027: 4C FA EE JMP $EEFA ; $10-$27 (control code with parameter) 3F/F02A: 48 PHA 3F/F02B: A6 67 LDX $67 3F/F02D: C9 1D CMP #$1D 3F/F02F: F0 03 BEQ $F034 3F/F031: B1 3E LDA ($3E),Y ; get parameter 3F/F033: AA TAX 3F/F034: 86 84 STX $84 3F/F036: 86 67 STX $67 3F/F038: E6 3E INC $3E 3F/F03A: D0 02 BNE $F03E 3F/F03C: E6 3F INC $3F 3F/F03E: 68 PLA 3F/F03F: C9 14 CMP #$14 3F/F041: B0 03 BCS $F046 3F/F043: 4C 39 F2 JMP $F239 ; $14: tab 3F/F046: D0 07 BNE $F04F 3F/F048: A5 84 LDA $84 3F/F04A: 85 90 STA $90 3F/F04C: 4C FA EE JMP $EEFA ; $15-$17: multiple choice indicator 3F/F04F: C9 18 CMP #$18 3F/F051: B0 48 BCS $F09B 3F/F053: 38 SEC 3F/F054: E9 15 SBC #$15 3F/F056: 18 CLC 3F/F057: 69 78 ADC #$78 ; $7800 (menu cursor data) 3F/F059: 85 81 STA $81 3F/F05B: A9 00 LDA #$00 3F/F05D: 85 80 STA $80 3F/F05F: A5 84 LDA $84 3F/F061: 85 90 STA $90 3F/F063: B1 3E LDA ($3E),Y 3F/F065: 85 82 STA $82 3F/F067: C8 INY 3F/F068: B1 3E LDA ($3E),Y 3F/F06A: 85 83 STA $83 3F/F06C: A0 F1 LDY #$F1 3F/F06E: B1 80 LDA ($80),Y 3F/F070: A6 1E LDX $1E 3F/F072: D0 03 BNE $F077 3F/F074: E6 1E INC $1E 3F/F076: 8A TXA 3F/F077: AA TAX 3F/F078: 18 CLC 3F/F079: 69 04 ADC #$04 3F/F07B: 91 80 STA ($80),Y 3F/F07D: 8A TXA 3F/F07E: A8 TAY 3F/F07F: A5 84 LDA $84 3F/F081: 18 CLC 3F/F082: 65 97 ADC $97 3F/F084: 91 80 STA ($80),Y 3F/F086: A5 98 LDA $98 3F/F088: 18 CLC 3F/F089: 65 1F ADC $1F 3F/F08B: C8 INY 3F/F08C: 91 80 STA ($80),Y 3F/F08E: C8 INY 3F/F08F: A5 82 LDA $82 3F/F091: 91 80 STA ($80),Y 3F/F093: A5 83 LDA $83 3F/F095: C8 INY 3F/F096: 91 80 STA ($80),Y 3F/F098: 4C FA EE JMP $EEFA ; $18: item name (check usability) 3F/F09B: D0 53 BNE $F0F0 3F/F09D: A5 84 LDA $84 3F/F09F: F0 4C BEQ $F0ED ; branch if empty item 3F/F0A1: A5 90 LDA $90 3F/F0A3: 48 PHA 3F/F0A4: 20 E4 F3 JSR $F3E4 3F/F0A7: A9 18 LDA #$18 3F/F0A9: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F0AC: A5 84 LDA $84 3F/F0AE: 0A ASL 3F/F0AF: AA TAX 3F/F0B0: B0 0B BCS $F0BD 3F/F0B2: BD 00 88 LDA $8800,X ; string offset: $0400 (item names) 3F/F0B5: 85 3E STA $3E 3F/F0B7: BD 01 88 LDA $8801,X 3F/F0BA: 4C C5 F0 JMP $F0C5 3F/F0BD: BD 00 89 LDA $8900,X 3F/F0C0: 85 3E STA $3E 3F/F0C2: BD 01 89 LDA $8901,X 3F/F0C5: 48 PHA 3F/F0C6: 29 1F AND #$1F 3F/F0C8: 09 80 ORA #$80 3F/F0CA: 85 3F STA $3F 3F/F0CC: 68 PLA 3F/F0CD: 4A LSR 3F/F0CE: 4A LSR 3F/F0CF: 4A LSR 3F/F0D0: 4A LSR 3F/F0D1: 4A LSR 3F/F0D2: 18 CLC 3F/F0D3: 69 18 ADC #$18 3F/F0D5: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F0D8: 20 FA EE JSR $EEFA 3F/F0DB: 20 ED F3 JSR $F3ED 3F/F0DE: 68 PLA 3F/F0DF: AA TAX 3F/F0E0: A5 B9 LDA $B9 3F/F0E2: F0 09 BEQ $F0ED 3F/F0E4: A9 00 LDA #$00 3F/F0E6: 85 B9 STA $B9 3F/F0E8: A9 73 LDA #$73 ; unusable "X" symbol 3F/F0EA: 9D A0 07 STA $07A0,X 3F/F0ED: 4C FA EE JMP $EEFA ; $19: shop item name 3F/F0F0: C9 19 CMP #$19 3F/F0F2: D0 20 BNE $F114 3F/F0F4: A6 84 LDX $84 3F/F0F6: BD 80 7B LDA $7B80,X 3F/F0F9: 85 84 STA $84 3F/F0FB: D0 0D BNE $F10A 3F/F0FD: AD F1 79 LDA $79F1 3F/F100: 38 SEC 3F/F101: E9 04 SBC #$04 3F/F103: 8D F1 79 STA $79F1 3F/F106: A9 FF LDA #$FF 3F/F108: 18 CLC 3F/F109: 60 RTS 3F/F10A: A9 00 LDA #$00 3F/F10C: 85 B9 STA $B9 3F/F10E: 4C 9D F0 JMP $F09D 3F/F111: 4C FA EE JMP $EEFA ; $1A: item name (inventory) 3F/F114: C9 1A CMP #$1A 3F/F116: D0 10 BNE $F128 3F/F118: A9 00 LDA #$00 3F/F11A: 85 B9 STA $B9 3F/F11C: A6 84 LDX $84 3F/F11E: BD C0 60 LDA $60C0,X ; inventory item id 3F/F121: F0 EE BEQ $F111 3F/F123: 85 84 STA $84 3F/F125: 4C 9D F0 JMP $F09D ; $1B: fat chocobo item name 3F/F128: C9 1B CMP #$1B 3F/F12A: D0 13 BNE $F13F 3F/F12C: 20 AC F3 JSR $F3AC 3F/F12F: A6 84 LDX $84 3F/F131: BD 00 7C LDA $7C00,X ; item id 3F/F134: F0 DB BEQ $F111 3F/F136: 85 84 STA $84 3F/F138: A9 00 LDA #$00 3F/F13A: 85 B9 STA $B9 3F/F13C: 4C 9D F0 JMP $F09D ; $1C: inventory item quantity 3F/F13F: C9 1C CMP #$1C 3F/F141: D0 09 BNE $F14C 3F/F143: A6 84 LDX $84 3F/F145: BD E0 60 LDA $60E0,X ; inventory item quantity 3F/F148: F0 C7 BEQ $F111 3F/F14A: D0 1A BNE $F166 ; add the ":" ; $1D: fat chocobo item quantity 3F/F14C: C9 1D CMP #$1D 3F/F14E: D0 2A BNE $F17A 3F/F150: A5 84 LDA $84 3F/F152: 4A LSR 3F/F153: A9 0A LDA #$0A 3F/F155: 90 02 BCC $F159 3F/F157: A9 18 LDA #$18 3F/F159: 85 90 STA $90 3F/F15B: A6 84 LDX $84 3F/F15D: BD 00 7C LDA $7C00,X 3F/F160: F0 AF BEQ $F111 3F/F162: AA TAX 3F/F163: BD 00 63 LDA $6300,X ; fat chocobo item quantity 3F/F166: 85 80 STA $80 3F/F168: A6 90 LDX $90 3F/F16A: E6 90 INC $90 3F/F16C: A9 C8 LDA #$C8 ; ":" 3F/F16E: 9D A0 07 STA $07A0,X 3F/F171: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F174: 20 29 8B JSR $8B29 ; copy number to text buffer (2 digits) 3F/F177: 4C 91 F2 JMP $F291 ; $1E: job name (job list) 3F/F17A: C9 1E CMP #$1E 3F/F17C: D0 1C BNE $F19A 3F/F17E: 20 8A F3 JSR $F38A ; get number of available jobs 3F/F181: C5 84 CMP $84 3F/F183: B0 0D BCS $F192 ; branch if job is available 3F/F185: AD F1 78 LDA $78F1 3F/F188: 38 SEC 3F/F189: E9 04 SBC #$04 ; remove last cursor position 3F/F18B: 8D F1 78 STA $78F1 3F/F18E: A9 FF LDA #$FF ; terminate string 3F/F190: 18 CLC 3F/F191: 60 RTS 3F/F192: A5 84 LDA $84 3F/F194: 18 CLC 3F/F195: 69 E2 ADC #$E2 ; string offset $01E2: "OnionKid" 3F/F197: 4C D8 F2 JMP $F2D8 ; $1F: job cp required 3F/F19A: C9 1F CMP #$1F 3F/F19C: D0 1D BNE $F1BB 3F/F19E: A6 84 LDX $84 3F/F1A0: BD 00 72 LDA $7200,X 3F/F1A3: 85 80 STA $80 3F/F1A5: A6 90 LDX $90 3F/F1A7: E6 90 INC $90 3F/F1A9: A9 C8 LDA #$C8 ; ":" 3F/F1AB: 9D A0 07 STA $07A0,X 3F/F1AE: A9 00 LDA #$00 3F/F1B0: 85 81 STA $81 3F/F1B2: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F1B5: 20 57 8B JSR $8B57 ; copy number to text buffer (3 digits) 3F/F1B8: 4C 91 F2 JMP $F291 ; $20: item name (sell) 3F/F1BB: C9 20 CMP #$20 3F/F1BD: D0 12 BNE $F1D1 3F/F1BF: A6 84 LDX $84 3F/F1C1: BD C0 60 LDA $60C0,X ; inventory item id 3F/F1C4: F0 30 BEQ $F1F6 3F/F1C6: 85 84 STA $84 3F/F1C8: AA TAX 3F/F1C9: BD 00 72 LDA $7200,X 3F/F1CC: 85 B9 STA $B9 3F/F1CE: 4C 9D F0 JMP $F09D ; $21: item price (shop) 3F/F1D1: C9 21 CMP #$21 3F/F1D3: D0 24 BNE $F1F9 3F/F1D5: A6 84 LDX $84 3F/F1D7: BD 80 7B LDA $7B80,X 3F/F1DA: F0 1A BEQ $F1F6 ; branch if no item 3F/F1DC: BD 90 7B LDA $7B90,X ; calculated item price 3F/F1DF: 85 80 STA $80 3F/F1E1: BD 98 7B LDA $7B98,X 3F/F1E4: 85 81 STA $81 3F/F1E6: BD A0 7B LDA $7BA0,X 3F/F1E9: 85 82 STA $82 3F/F1EB: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F1EE: 20 78 8B JSR $8B78 ; copy number to text buffer (6 digits) 3F/F1F1: A5 93 LDA $93 3F/F1F3: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F1F6: 4C FA EE JMP $EEFA ; $22: item name (no symbol) 3F/F1F9: C9 22 CMP #$22 3F/F1FB: D0 F9 BNE $F1F6 3F/F1FD: A9 00 LDA #$00 3F/F1FF: 85 B9 STA $B9 3F/F201: A6 84 LDX $84 3F/F203: BD C0 60 LDA $60C0,X ; inventory item id 3F/F206: F0 EE BEQ $F1F6 3F/F208: 85 84 STA $84 3F/F20A: A5 90 LDA $90 3F/F20C: 48 PHA 3F/F20D: 20 E4 F3 JSR $F3E4 3F/F210: A9 18 LDA #$18 3F/F212: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F215: A5 84 LDA $84 3F/F217: 0A ASL 3F/F218: AA TAX 3F/F219: B0 0E BCS $F229 3F/F21B: BD 00 88 LDA $8800,X ; pointer to string $0400 (item names) 3F/F21E: 18 CLC 3F/F21F: 69 01 ADC #$01 3F/F221: 85 3E STA $3E 3F/F223: BD 01 88 LDA $8801,X 3F/F226: 4C 34 F2 JMP $F234 3F/F229: BD 00 89 LDA $8900,X 3F/F22C: 18 CLC 3F/F22D: 69 01 ADC #$01 3F/F22F: 85 3E STA $3E 3F/F231: BD 01 89 LDA $8901,X 3F/F234: 69 00 ADC #$00 3F/F236: 4C C5 F0 JMP $F0C5 ; $10-$13: character string 3F/F239: 4A LSR 3F/F23A: 6A ROR 3F/F23B: 6A ROR 3F/F23C: 29 C0 AND #$C0 ; character pointer 3F/F23E: 85 67 STA $67 3F/F240: A5 84 LDA $84 3F/F242: C9 30 CMP #$30 3F/F244: 90 53 BCC $F299 3F/F246: C9 FF CMP #$FF 3F/F248: D0 3F BNE $F289 ; character string $FF: exp to next level 3F/F24A: A6 67 LDX $67 3F/F24C: BD 01 61 LDA $6101,X ; level 3F/F24F: C9 62 CMP #$62 3F/F251: B0 3E BCS $F291 3F/F253: 85 80 STA $80 3F/F255: 0A ASL 3F/F256: 18 CLC 3F/F257: 65 80 ADC $80 3F/F259: 85 84 STA $84 3F/F25B: A9 00 LDA #$00 3F/F25D: 69 80 ADC #$80 3F/F25F: 85 85 STA $85 3F/F261: A9 39 LDA #$39 3F/F263: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/F266: A0 B0 LDY #$B0 3F/F268: B1 84 LDA ($84),Y 3F/F26A: 38 SEC 3F/F26B: FD 03 61 SBC $6103,X ; experience 3F/F26E: 85 80 STA $80 3F/F270: C8 INY 3F/F271: B1 84 LDA ($84),Y 3F/F273: FD 04 61 SBC $6104,X 3F/F276: 85 81 STA $81 3F/F278: C8 INY 3F/F279: B1 84 LDA ($84),Y 3F/F27B: FD 05 61 SBC $6105,X 3F/F27E: 85 82 STA $82 3F/F280: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F283: 20 78 8B JSR $8B78 ; copy number to text buffer (6 digits) 3F/F286: 4C 91 F2 JMP $F291 ; character string $30-$FE 3F/F289: 48 PHA 3F/F28A: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F28D: 68 PLA 3F/F28E: 20 98 89 JSR $8998 ; decode character string $30-$FE 3F/F291: A5 93 LDA $93 3F/F293: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F296: 4C FA EE JMP $EEFA ; $00: character level or status 3F/F299: C9 00 CMP #$00 3F/F29B: D0 64 BNE $F301 3F/F29D: A6 67 LDX $67 3F/F29F: BD 02 61 LDA $6102,X 3F/F2A2: 29 FE AND #$FE 3F/F2A4: D0 15 BNE $F2BB ; branch if character has a status 3F/F2A6: A6 90 LDX $90 3F/F2A8: E6 90 INC $90 3F/F2AA: E6 90 INC $90 3F/F2AC: A9 5E LDA #$5E ; "L" 3F/F2AE: 9D A0 07 STA $07A0,X 3F/F2B1: A9 5F LDA #$5F ; "V" 3F/F2B3: 9D A1 07 STA $07A1,X 3F/F2B6: A9 3E LDA #$3E ; character level 3F/F2B8: 4C 46 F2 JMP $F246 3F/F2BB: A0 16 LDY #$16 ; "しぼう " (death) 3F/F2BD: 0A ASL 3F/F2BE: B0 17 BCS $F2D7 3F/F2C0: A0 17 LDY #$17 ; " いし " (stone) 3F/F2C2: 0A ASL 3F/F2C3: B0 12 BCS $F2D7 3F/F2C5: A0 1B LDY #$1B ; "かえる " (toad) 3F/F2C7: 0A ASL 3F/F2C8: B0 0D BCS $F2D7 3F/F2CA: C8 INY ; "ちんもく" (silence) 3F/F2CB: 0A ASL 3F/F2CC: B0 09 BCS $F2D7 3F/F2CE: C8 INY ; "こびと " (mini) 3F/F2CF: 0A ASL 3F/F2D0: B0 05 BCS $F2D7 3F/F2D2: C8 INY ; "くらやみ" (blind) 3F/F2D3: 0A ASL 3F/F2D4: B0 01 BCS $F2D7 3F/F2D6: C8 INY ; " どく " (poison) 3F/F2D7: 98 TYA 3F/F2D8: AA TAX 3F/F2D9: 20 E4 F3 JSR $F3E4 3F/F2DC: A9 18 LDA #$18 3F/F2DE: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F2E1: 8A TXA 3F/F2E2: 0A ASL 3F/F2E3: AA TAX 3F/F2E4: B0 0B BCS $F2F1 3F/F2E6: BD 00 82 LDA $8200,X ; pointer to status name 3F/F2E9: 85 3E STA $3E 3F/F2EB: BD 01 82 LDA $8201,X 3F/F2EE: 4C F9 F2 JMP $F2F9 3F/F2F1: BD 00 83 LDA $8300,X 3F/F2F4: 85 3E STA $3E 3F/F2F6: BD 01 83 LDA $8301,X 3F/F2F9: AA TAX 3F/F2FA: A5 90 LDA $90 3F/F2FC: 48 PHA 3F/F2FD: 8A TXA 3F/F2FE: 4C C5 F0 JMP $F0C5 ; $01: job name 3F/F301: C9 01 CMP #$01 3F/F303: D0 0B BNE $F310 3F/F305: A6 67 LDX $67 3F/F307: BD 00 61 LDA $6100,X ; job id 3F/F30A: 18 CLC 3F/F30B: 69 E2 ADC #$E2 ; first job name is string $01E2 3F/F30D: 4C D8 F2 JMP $F2D8 ; $02: character name 3F/F310: C9 02 CMP #$02 3F/F312: D0 34 BNE $F348 3F/F314: A6 67 LDX $67 3F/F316: BD 06 61 LDA $6106,X ; character name 3F/F319: 85 5A STA $5A 3F/F31B: BD 07 61 LDA $6107,X 3F/F31E: 85 5B STA $5B 3F/F320: BD 08 61 LDA $6108,X 3F/F323: 85 5C STA $5C 3F/F325: BD 09 61 LDA $6109,X 3F/F328: 85 5D STA $5D 3F/F32A: BD 0A 61 LDA $610A,X 3F/F32D: 85 5E STA $5E 3F/F32F: BD 0B 61 LDA $610B,X 3F/F332: 85 5F STA $5F 3F/F334: 20 E4 F3 JSR $F3E4 3F/F337: A9 5A LDA #$5A 3F/F339: 85 3E STA $3E 3F/F33B: A9 00 LDA #$00 3F/F33D: 85 3F STA $3F 3F/F33F: 20 FA EE JSR $EEFA 3F/F342: 20 ED F3 JSR $F3ED 3F/F345: 4C FA EE JMP $EEFA ; $03-$07: equipped item name 3F/F348: C9 08 CMP #$08 3F/F34A: B0 27 BCS $F373 3F/F34C: 38 SEC 3F/F34D: E9 03 SBC #$03 3F/F34F: C9 04 CMP #$04 3F/F351: D0 03 BNE $F356 3F/F353: 18 CLC 3F/F354: 69 01 ADC #$01 ; get left hand item 3F/F356: 05 67 ORA $67 3F/F358: AA TAX 3F/F359: BD 00 62 LDA $6200,X ; equipped item id 3F/F35C: D0 0A BNE $F368 ; branch if slot not empty 3F/F35E: 8A TXA 3F/F35F: 29 07 AND #$07 3F/F361: AA TAX 3F/F362: BD 6D F3 LDA $F36D,X 3F/F365: 4C D8 F2 JMP $F2D8 3F/F368: 85 84 STA $84 3F/F36A: 4C A1 F0 JMP $F0A1 ; text strings for empty equipment slots (string offset $0100) 3F/F36D: DD ; "あたま" / "Head" 3F/F36E: DE ; "からだ" / "Body" 3F/F36F: DF ; "うで" / "Arms" 3F/F370: E0 ; "みぎて" / "RHand" 3F/F371: E1 ; "ひだりて" / "LHand" 3F/F372: E1 ; "ひだりて" / "LHand" ; $08-$1F: spell list 3F/F373: 38 SEC 3F/F374: E9 08 SBC #$08 3F/F376: AA TAX 3F/F377: BD 00 7C LDA $7C00,X 3F/F37A: F0 0B BEQ $F387 3F/F37C: 85 84 STA $84 3F/F37E: AA TAX 3F/F37F: BD 00 72 LDA $7200,X 3F/F382: 85 B9 STA $B9 3F/F384: 4C 9D F0 JMP $F09D 3F/F387: 4C FA EE JMP $EEFA ; [ get number of available jobs ] 3F/F38A: AD 21 60 LDA $6021 ; crystal level 3F/F38D: 29 1F AND #$1F 3F/F38F: A2 00 LDX #$00 3F/F391: 4A LSR 3F/F392: 90 16 BCC $F3AA 3F/F394: A2 05 LDX #$05 3F/F396: 4A LSR 3F/F397: 90 11 BCC $F3AA 3F/F399: A2 09 LDX #$09 3F/F39B: 4A LSR 3F/F39C: 90 0C BCC $F3AA 3F/F39E: A2 10 LDX #$10 3F/F3A0: 4A LSR 3F/F3A1: 90 07 BCC $F3AA 3F/F3A3: A2 13 LDX #$13 3F/F3A5: 4A LSR 3F/F3A6: 90 02 BCC $F3AA 3F/F3A8: A2 30 LDX #$30 3F/F3AA: 8A TXA 3F/F3AB: 60 RTS ; [ ] 3F/F3AC: A5 84 LDA $84 3F/F3AE: 4A LSR 3F/F3AF: A9 01 LDA #$01 3F/F3B1: 90 02 BCC $F3B5 3F/F3B3: A9 0F LDA #$0F 3F/F3B5: 85 90 STA $90 3F/F3B7: AE F1 7A LDX $7AF1 3F/F3BA: A5 1E LDA $1E 3F/F3BC: D0 04 BNE $F3C2 3F/F3BE: E6 1E INC $1E 3F/F3C0: A2 00 LDX #$00 3F/F3C2: 8A TXA 3F/F3C3: 18 CLC 3F/F3C4: 69 04 ADC #$04 3F/F3C6: 8D F1 7A STA $7AF1 3F/F3C9: A5 90 LDA $90 3F/F3CB: 18 CLC 3F/F3CC: 65 97 ADC $97 3F/F3CE: 9D 00 7A STA $7A00,X 3F/F3D1: A5 98 LDA $98 3F/F3D3: 18 CLC 3F/F3D4: 65 1F ADC $1F 3F/F3D6: 9D 01 7A STA $7A01,X 3F/F3D9: A9 1B LDA #$1B 3F/F3DB: 9D 02 7A STA $7A02,X 3F/F3DE: A5 84 LDA $84 3F/F3E0: 9D 03 7A STA $7A03,X 3F/F3E3: 60 RTS ; [ ] 3F/F3E4: A5 3E LDA $3E 3F/F3E6: 85 99 STA $99 3F/F3E8: A5 3F LDA $3F 3F/F3EA: 85 9A STA $9A 3F/F3EC: 60 RTS ; [ ] 3F/F3ED: A5 99 LDA $99 3F/F3EF: 85 3E STA $3E 3F/F3F1: A5 9A LDA $9A 3F/F3F3: 85 3F STA $3F 3F/F3F5: A5 93 LDA $93 3F/F3F7: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ ] 3F/F3FA: A2 05 LDX #$05 3F/F3FC: B5 5A LDA $5A,X 3F/F3FE: C9 FF CMP #$FF 3F/F400: D0 07 BNE $F409 3F/F402: A9 00 LDA #$00 3F/F404: 95 5A STA $5A,X 3F/F406: CA DEX 3F/F407: 10 F3 BPL $F3FC 3F/F409: 60 RTS ; [ set ppu address ] ; $3A: x position ; $3B: y position 3F/F40A: AD 02 20 LDA $2002 ; latch ppu 3F/F40D: A6 3A LDX $3A 3F/F40F: A4 3B LDY $3B 3F/F411: E0 20 CPX #$20 3F/F413: B0 0E BCS $F423 ; branch if on 2nd screen 3F/F415: B9 C1 F4 LDA $F4C1,Y 3F/F418: 8D 06 20 STA $2006 ; ppu address 3F/F41B: 8A TXA 3F/F41C: 19 A1 F4 ORA $F4A1,Y 3F/F41F: 8D 06 20 STA $2006 3F/F422: 60 RTS 3F/F423: B9 C1 F4 LDA $F4C1,Y 3F/F426: 09 04 ORA #$04 ; 2nd screen (columns 32-63) 3F/F428: 8D 06 20 STA $2006 3F/F42B: 8A TXA 3F/F42C: 29 1F AND #$1F 3F/F42E: 19 A1 F4 ORA $F4A1,Y 3F/F431: 8D 06 20 STA $2006 3F/F434: 60 RTS ; [ ] ; unused ??? 3F/F435: A6 3B LDX $3B 3F/F437: CA DEX 3F/F438: 10 02 BPL $F43C 3F/F43A: A6 3B LDX $3B 3F/F43C: A5 3A LDA $3A 3F/F43E: 29 1F AND #$1F 3F/F440: 1D A1 F4 ORA $F4A1,X 3F/F443: 85 54 STA $54 3F/F445: BD C1 F4 LDA $F4C1,X 3F/F448: 85 55 STA $55 3F/F44A: 60 RTS ; [ close menu 1 ] 3F/F44B: A9 02 LDA #$02 3F/F44D: 85 39 STA $39 3F/F44F: 85 3B STA $3B 3F/F451: A9 09 LDA #$09 3F/F453: 85 38 STA $38 3F/F455: A9 16 LDA #$16 3F/F457: 85 3C STA $3C 3F/F459: A9 04 LDA #$04 3F/F45B: 85 3D STA $3D 3F/F45D: A9 02 LDA #$02 3F/F45F: D0 19 BNE $F47A ; [ close menu 2 ] 3F/F461: A9 14 LDA #$14 3F/F463: D0 02 BNE $F467 ; [ close menu 3 ] 3F/F465: A9 1C LDA #$1C 3F/F467: 85 3D STA $3D 3F/F469: A9 1B LDA #$1B 3F/F46B: 85 39 STA $39 3F/F46D: 85 3B STA $3B 3F/F46F: A9 01 LDA #$01 3F/F471: 85 38 STA $38 3F/F473: A9 1E LDA #$1E 3F/F475: 85 3C STA $3C 3F/F477: A5 3D LDA $3D ; window height (start at bottom) 3F/F479: 4A LSR ; start of row loop (clear 2 rows of 8x8 tiles per frame) 3F/F47A: 48 PHA 3F/F47B: A5 3C LDA $3C 3F/F47D: 85 90 STA $90 3F/F47F: 85 91 STA $91 3F/F481: A0 1D LDY #$1D 3F/F483: A9 00 LDA #$00 3F/F485: 99 80 07 STA $0780,Y ; clear text buffer 3F/F488: 99 A0 07 STA $07A0,Y 3F/F48B: 88 DEY 3F/F48C: 10 F7 BPL $F485 3F/F48E: 20 92 F6 JSR $F692 ; draw one line of text 3F/F491: A5 3B LDA $3B 3F/F493: 38 SEC 3F/F494: E9 04 SBC #$04 3F/F496: 85 3B STA $3B 3F/F498: 68 PLA ; next row 3F/F499: 38 SEC 3F/F49A: E9 01 SBC #$01 3F/F49C: D0 DC BNE $F47A 3F/F49E: 4C F5 EC JMP $ECF5 ; name table ppu address (lo byte) 3F/F4A1: 00 20 40 60 80 A0 C0 E0 3F/F4A9: 00 20 40 60 80 A0 C0 E0 3F/F4B1: 00 20 40 60 80 A0 C0 E0 3F/F4B9: 00 20 40 60 80 A0 00 20 ; loop around to $2000 ; name table ppu address (hi byte) 3F/F4C1: 20 20 20 20 20 20 20 20 3F/F4C9: 21 21 21 21 21 21 21 21 3F/F4D1: 22 22 22 22 22 22 22 22 3F/F4D9: 23 23 23 23 23 23 20 20 ; kana w/ dakuten ($28-$5B) 3F/F4E1: 00 8F 90 91 92 93 94 95 3F/F4E9: 96 97 98 99 9A 9B 9C 9D A3 A4 A5 A6 A7 A3 A4 A5 3F/F4F9: A6 A7 CC CF D0 D1 D2 D3 D4 D5 D6 D7 D8 D9 DA DB 3F/F509: DC DD E3 E4 E5 A6 E7 E3 E4 E5 A6 E7 ; dakuten ($28-$5B) 3F/F515: 00 C0 C0 C0 C0 C0 C0 C0 3F/F51D: C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C1 C1 C1 3F/F52D: C1 C1 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 C0 3F/F53D: C0 C0 C0 C0 C0 C0 C0 C1 C1 C1 C1 C1 ; [ give treasure ] ; return dialogue id 3F/F549: A5 45 LDA $45 ; map treasure id (0-15) 3F/F54B: 29 0F AND #$0F 3F/F54D: AA TAX 3F/F54E: BD 10 07 LDA $0710,X ; treasure id 3F/F551: 85 8F STA $8F 3F/F553: AA TAX 3F/F554: A5 BA LDA $BA 3F/F556: D0 04 BNE $F55C ; branch if not a chest 3F/F558: A5 49 LDA $49 3F/F55A: D0 56 BNE $F5B2 ; branch if chests contain gil 3F/F55C: 20 C4 F5 JSR $F5C4 ; get treasure contents 3F/F55F: 85 80 STA $80 3F/F561: A2 01 LDX #$01 ; quantity 1 3F/F563: 86 81 STX $81 3F/F565: C9 57 CMP #$57 ; item id $4F-$56 (arrows) 3F/F567: B0 08 BCS $F571 3F/F569: C9 4F CMP #$4F 3F/F56B: 90 04 BCC $F571 3F/F56D: A9 14 LDA #$14 ; quantity 20 3F/F56F: 85 81 STA $81 3F/F571: 20 27 F7 JSR $F727 ; load prg banks $3C/$3D 3F/F574: A5 80 LDA $80 3F/F576: 85 BB STA $BB 3F/F578: 20 7E 93 JSR $937E ; find item in inventory 3F/F57B: B0 32 BCS $F5AF ; branch if inventory is full 3F/F57D: A5 80 LDA $80 3F/F57F: 9D C0 60 STA $60C0,X ; item id 3F/F582: BD E0 60 LDA $60E0,X ; item quantity 3F/F585: 18 CLC 3F/F586: 65 81 ADC $81 3F/F588: C9 63 CMP #$63 ; max 99 3F/F58A: 90 02 BCC $F58E 3F/F58C: A9 63 LDA #$63 3F/F58E: 9D E0 60 STA $60E0,X 3F/F591: 20 40 F6 JSR $F640 ; toggle treasure switch 3F/F594: 24 BA BIT $BA 3F/F596: 30 14 BMI $F5AC ; branch if not a chest 3F/F598: A5 8F LDA $8F 3F/F59A: C9 E0 CMP #$E0 3F/F59C: B0 03 BCS $F5A1 ; branch if there is a battle ; chest with item 3F/F59E: A9 59 LDA #$59 ; $0159: "Found \item!" 3F/F5A0: 60 RTS ; chest with battle and item 3F/F5A1: A9 20 LDA #$20 ; trigger a battle 3F/F5A3: 85 AB STA $AB 3F/F5A5: A5 8F LDA $8F ; battle id 3F/F5A7: 85 6A STA $6A 3F/F5A9: A9 02 LDA #$02 ; $0102: "Found \item! A monster appeared!" 3F/F5AB: 60 RTS ; not a chest 3F/F5AC: A9 76 LDA #$76 ; $0176: "Found \item!" 3F/F5AE: 60 RTS 3F/F5AF: A9 50 LDA #$50 ; $0150: "Can't carry anymore." 3F/F5B1: 60 RTS ; contains gil 3F/F5B2: 20 C4 F5 JSR $F5C4 ; get treasure contents 3F/F5B5: AA TAX 3F/F5B6: 86 BB STX $BB 3F/F5B8: 20 D4 F5 JSR $F5D4 ; get item price 3F/F5BB: 20 FF F5 JSR $F5FF ; give gil 3F/F5BE: 20 40 F6 JSR $F640 ; toggle treasure switch 3F/F5C1: A9 01 LDA #$01 ; $0101: "Found \gil Gil!" 3F/F5C3: 60 RTS ; [ get treasure contents ] 3F/F5C4: A9 01 LDA #$01 3F/F5C6: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/F5C9: BD 00 9C LDA $9C00,X ; chest contents (world 0) 3F/F5CC: A4 78 LDY $78 3F/F5CE: F0 03 BEQ $F5D3 3F/F5D0: BD 00 9D LDA $9D00,X ; chest contents (world != 0) 3F/F5D3: 60 RTS ; [ get item price ] ; X: item id 3F/F5D4: A9 10 LDA #$10 3F/F5D6: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/F5D9: 8A TXA 3F/F5DA: 0A ASL 3F/F5DB: AA TAX 3F/F5DC: B0 0B BCS $F5E9 3F/F5DE: BD 00 9E LDA $9E00,X ; 10/9E00 (item prices) 3F/F5E1: 85 80 STA $80 3F/F5E3: BD 01 9E LDA $9E01,X 3F/F5E6: 4C F1 F5 JMP $F5F1 3F/F5E9: BD 00 9F LDA $9F00,X 3F/F5EC: 85 80 STA $80 3F/F5EE: BD 01 9F LDA $9F01,X 3F/F5F1: 85 81 STA $81 3F/F5F3: A9 00 LDA #$00 3F/F5F5: 85 82 STA $82 3F/F5F7: 8A TXA 3F/F5F8: 4A LSR 3F/F5F9: AA TAX 3F/F5FA: A9 3C LDA #$3C 3F/F5FC: 4C 06 FF JMP $FF06 ; switch prg bank 0 ; [ give gil ] 3F/F5FF: AD 1C 60 LDA $601C ; current gil 3F/F602: 18 CLC 3F/F603: 65 80 ADC $80 3F/F605: 8D 1C 60 STA $601C 3F/F608: AD 1D 60 LDA $601D 3F/F60B: 65 81 ADC $81 3F/F60D: 8D 1D 60 STA $601D 3F/F610: AD 1E 60 LDA $601E 3F/F613: 65 82 ADC $82 3F/F615: 8D 1E 60 STA $601E 3F/F618: C9 98 CMP #$98 ; max 9999999 3F/F61A: B0 14 BCS $F630 3F/F61C: 90 21 BCC $F63F 3F/F61E: AD 1D 60 LDA $601D 3F/F621: C9 96 CMP #$96 3F/F623: 90 1A BCC $F63F 3F/F625: F0 02 BEQ $F629 3F/F627: B0 07 BCS $F630 3F/F629: AD 1C 60 LDA $601C 3F/F62C: C9 80 CMP #$80 3F/F62E: 90 0F BCC $F63F 3F/F630: A9 7F LDA #$7F 3F/F632: 8D 1C 60 STA $601C 3F/F635: A9 96 LDA #$96 3F/F637: 8D 1D 60 STA $601D 3F/F63A: A9 98 LDA #$98 3F/F63C: 8D 1E 60 STA $601E 3F/F63F: 60 RTS ; [ toggle treasure switch ] 3F/F640: A5 45 LDA $45 3F/F642: 29 0F AND #$0F 3F/F644: AA TAX 3F/F645: BD 10 07 LDA $0710,X ; treasure id 3F/F648: 48 PHA 3F/F649: 29 07 AND #$07 3F/F64B: AA TAX 3F/F64C: BD 68 F6 LDA $F668,X 3F/F64F: 85 80 STA $80 3F/F651: 68 PLA 3F/F652: 4A LSR 3F/F653: 4A LSR 3F/F654: 4A LSR 3F/F655: AA TAX 3F/F656: A5 78 LDA $78 3F/F658: F0 05 BEQ $F65F 3F/F65A: 8A TXA 3F/F65B: 18 CLC 3F/F65C: 69 20 ADC #$20 3F/F65E: AA TAX 3F/F65F: A5 80 LDA $80 3F/F661: 5D 40 60 EOR $6040,X ; treasure switches 3F/F664: 9D 40 60 STA $6040,X 3F/F667: 60 RTS 3F/F668: 01 02 04 08 10 20 40 80 ; [ reset text buffer ] 3F/F670: A5 3C LDA $3C 3F/F672: 85 91 STA $91 3F/F674: A5 38 LDA $38 3F/F676: 29 1F AND #$1F 3F/F678: 49 1F EOR #$1F 3F/F67A: 18 CLC 3F/F67B: 69 01 ADC #$01 3F/F67D: C5 3C CMP $3C 3F/F67F: B0 02 BCS $F683 3F/F681: 85 91 STA $91 3F/F683: A0 1D LDY #$1D 3F/F685: A9 FF LDA #$FF 3F/F687: 99 80 07 STA $0780,Y 3F/F68A: 99 A0 07 STA $07A0,Y 3F/F68D: 88 DEY 3F/F68E: 10 F7 BPL $F687 3F/F690: 18 CLC 3F/F691: 60 RTS ; [ draw one line of text ] ; also used to close menu windows 3F/F692: 48 PHA 3F/F693: 20 00 FF JSR $FF00 ; wait for vblank 3F/F696: E6 F0 INC $F0 3F/F698: 68 PLA 3F/F699: 20 AA F6 JSR $F6AA ; copy text to ppu 3F/F69C: 20 E1 ED JSR $EDE1 ; update scrolling (text window) 3F/F69F: 20 50 C7 JSR $C750 ; update sound 3F/F6A2: A5 93 LDA $93 3F/F6A4: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F6A7: 4C 83 F6 JMP $F683 ; [ copy text to ppu ] 3F/F6AA: C9 09 CMP #$09 3F/F6AC: F0 37 BEQ $F6E5 ; branch if half newline (no dakuten) 3F/F6AE: A5 38 LDA $38 3F/F6B0: 85 3A STA $3A 3F/F6B2: 20 0A F4 JSR $F40A ; set ppu address 3F/F6B5: A2 00 LDX #$00 3F/F6B7: BD 80 07 LDA $0780,X ; draw dakuten row 3F/F6BA: 8D 07 20 STA $2007 3F/F6BD: E8 INX 3F/F6BE: E4 91 CPX $91 3F/F6C0: 90 F5 BCC $F6B7 3F/F6C2: E4 3C CPX $3C 3F/F6C4: B0 18 BCS $F6DE 3F/F6C6: A5 3A LDA $3A 3F/F6C8: 29 20 AND #$20 3F/F6CA: 49 20 EOR #$20 3F/F6CC: 85 3A STA $3A 3F/F6CE: 20 0A F4 JSR $F40A ; set ppu address 3F/F6D1: A6 91 LDX $91 3F/F6D3: BD 80 07 LDA $0780,X ; draw dakuten row (second tilemap) 3F/F6D6: 8D 07 20 STA $2007 3F/F6D9: E8 INX 3F/F6DA: E4 3C CPX $3C 3F/F6DC: 90 F5 BCC $F6D3 3F/F6DE: A5 3B LDA $3B 3F/F6E0: 18 CLC 3F/F6E1: 69 01 ADC #$01 3F/F6E3: 85 3B STA $3B 3F/F6E5: A5 38 LDA $38 3F/F6E7: 85 3A STA $3A 3F/F6E9: 20 0A F4 JSR $F40A ; set ppu address 3F/F6EC: A2 00 LDX #$00 3F/F6EE: BD A0 07 LDA $07A0,X ; draw kana row 3F/F6F1: 8D 07 20 STA $2007 3F/F6F4: E8 INX 3F/F6F5: E4 91 CPX $91 3F/F6F7: 90 F5 BCC $F6EE 3F/F6F9: E4 3C CPX $3C 3F/F6FB: B0 18 BCS $F715 3F/F6FD: A5 3A LDA $3A 3F/F6FF: 29 20 AND #$20 3F/F701: 49 20 EOR #$20 3F/F703: 85 3A STA $3A 3F/F705: 20 0A F4 JSR $F40A ; set ppu address 3F/F708: A6 91 LDX $91 3F/F70A: BD A0 07 LDA $07A0,X ; draw kana row (second tilemap) 3F/F70D: 8D 07 20 STA $2007 3F/F710: E8 INX 3F/F711: E4 3C CPX $3C 3F/F713: 90 F5 BCC $F70A 3F/F715: A9 00 LDA #$00 3F/F717: 85 90 STA $90 3F/F719: A5 3B LDA $3B 3F/F71B: 18 CLC 3F/F71C: 69 01 ADC #$01 3F/F71E: C9 1E CMP #$1E 3F/F720: 90 02 BCC $F724 3F/F722: E9 1E SBC #$1E 3F/F724: 85 3B STA $3B 3F/F726: 60 RTS ; [ load prg banks $3C/$3D ] 3F/F727: A9 3C LDA #$3C 3F/F729: 4C 03 FF JMP $FF03 ; switch prg bank 0 and 1 (sequential) ; [ increment showing character ] 3F/F72C: AD 0E 60 LDA $600E ; showing character 3F/F72F: 18 CLC 3F/F730: 69 40 ADC #$40 3F/F732: 8D 0E 60 STA $600E 3F/F735: AA TAX 3F/F736: BD 02 61 LDA $6102,X 3F/F739: 29 C0 AND #$C0 3F/F73B: D0 EF BNE $F72C ; branch if character is dead or stone 3F/F73D: A9 3A LDA #$3A 3F/F73F: 20 06 FF JSR $FF06 ; switch prg bank 0 3F/F742: 20 30 85 JSR $8530 ; load map character palette 3F/F745: A9 00 LDA #$00 3F/F747: 48 PHA 3F/F748: A9 0E LDA #$0E 3F/F74A: 20 03 FF JSR $FF03 ; switch prg bank 0 and 1 (sequential) 3F/F74D: 20 00 FF JSR $FF00 ; wait for vblank 3F/F750: 68 PLA 3F/F751: 48 PHA 3F/F752: 20 7B F7 JSR $F77B 3F/F755: 20 70 F7 JSR $F770 ; update ppu registers 3F/F758: 20 50 C7 JSR $C750 ; update sound 3F/F75B: 68 PLA 3F/F75C: 18 CLC 3F/F75D: 69 01 ADC #$01 3F/F75F: C9 08 CMP #$08 3F/F761: 90 E4 BCC $F747 3F/F763: 20 00 FF JSR $FF00 ; wait for vblank 3F/F766: 20 08 D3 JSR $D308 ; copy color palettes to ppu 3F/F769: 20 70 F7 JSR $F770 ; update ppu registers 3F/F76C: 20 50 C7 JSR $C750 ; update sound 3F/F76F: 60 RTS ; [ update ppu registers ] 3F/F770: A5 2D LDA $2D 3F/F772: 4A LSR 3F/F773: B0 03 BCS $F778 ; branch if not on world map 3F/F775: 4C 98 C3 JMP $C398 ; update ppu registers (world map) 3F/F778: 4C 71 E5 JMP $E571 ; update ppu registers (normal map) ; [ ] 3F/F77B: A8 TAY 3F/F77C: AE 0E 60 LDX $600E 3F/F77F: BD 02 61 LDA $6102,X 3F/F782: 29 20 AND #$20 3F/F784: C9 20 CMP #$20 3F/F786: A9 16 LDA #$16 3F/F788: B0 0E BCS $F798 3F/F78A: BD 02 61 LDA $6102,X 3F/F78D: 29 08 AND #$08 3F/F78F: C9 08 CMP #$08 3F/F791: A9 17 LDA #$17 3F/F793: B0 03 BCS $F798 3F/F795: BD 00 61 LDA $6100,X 3F/F798: 29 3F AND #$3F 3F/F79A: 18 CLC 3F/F79B: 69 80 ADC #$80 3F/F79D: 85 3F STA $3F 3F/F79F: A9 00 LDA #$00 3F/F7A1: 85 3E STA $3E 3F/F7A3: 2C 02 20 BIT $2002 3F/F7A6: A9 10 LDA #$10 3F/F7A8: 8D 06 20 STA $2006 3F/F7AB: 8C 06 20 STY $2006 3F/F7AE: B1 3E LDA ($3E),Y 3F/F7B0: 8D 07 20 STA $2007 3F/F7B3: 98 TYA 3F/F7B4: 18 CLC 3F/F7B5: 69 08 ADC #$08 3F/F7B7: A8 TAY 3F/F7B8: 90 EC BCC $F7A6 3F/F7BA: 60 RTS ; [ init ppu name table (menu) ] 3F/F7BB: AD 02 20 LDA $2002 ; latch ppu 3F/F7BE: A9 20 LDA #$20 ; ppu $2000 3F/F7C0: 8D 06 20 STA $2006 3F/F7C3: A9 00 LDA #$00 3F/F7C5: 8D 06 20 STA $2006 3F/F7C8: A0 00 LDY #$00 3F/F7CA: 98 TYA 3F/F7CB: A2 03 LDX #$03 3F/F7CD: 8D 07 20 STA $2007 ; clear ppu $2000-$22FF 3F/F7D0: C8 INY 3F/F7D1: D0 FA BNE $F7CD 3F/F7D3: CA DEX 3F/F7D4: D0 F7 BNE $F7CD 3F/F7D6: 8D 07 20 STA $2007 ; clear ppu $2300-$23BF 3F/F7D9: C8 INY 3F/F7DA: C0 C0 CPY #$C0 3F/F7DC: 90 F8 BCC $F7D6 3F/F7DE: A9 FF LDA #$FF ; all tiles use bg palette 3 3F/F7E0: 8D 07 20 STA $2007 ; set attribute table 3F/F7E3: C8 INY 3F/F7E4: D0 FA BNE $F7E0 3F/F7E6: 60 RTS ; stale code 3F/F7E7: -- FA 3F/F7E8: CA DEX 3F/F7E9: D0 F7 BNE $F7E2 3F/F7EB: 8D 07 20 STA $2007 3F/F7EE: C8 INY 3F/F7EF: C0 C0 CPY #$C0 3F/F7F1: 90 F8 BCC $F7EB 3F/F7F3: A9 FF LDA #$FF 3F/F7F5: 8D 07 20 STA $2007 3F/F7F8: C8 INY 3F/F7F9: D0 FA BNE $F7F5 3F/F7FB: 60 RTS 3F/F7FC: 00 00 00 00 ; -------------------------------------------------------------------------- 3F/F800: 4C 26 FA JMP $FA26 ; execute battle 3F/F803: 4C 20 F8 JMP $F820 ; update character equipment 3F/F806: 4C 17 F8 JMP $F817 ; check if character can equip item/spell ; [ wait for last battle bg scanline ] ; about 5400 cycles total (~3ms) ; this is about 47 scanlines ; one frame is about 16.6ms ; vblank is about 1.4ms or 20 scanlines ; the battle bg is 32 scanlines ; they must have tuned the number of NOPs so that it finishes right around ; when the ppu finishes drawing the battle bg 3F/F809: A0 00 LDY #$00 3F/F80B: EA NOP ; (2 cycles) * 8 * 256 3F/F80C: EA NOP 3F/F80D: EA NOP 3F/F80E: EA NOP 3F/F80F: EA NOP 3F/F810: EA NOP 3F/F811: EA NOP 3F/F812: EA NOP 3F/F813: 88 DEY ; (2 cycles) * 256 3F/F814: D0 F5 BNE $F80B ; (3 cycles) * 256 3F/F816: 60 RTS ; [ check if character can equip item/spell ] 3F/F817: 20 2C F8 JSR $F82C ; push dp and switch to bank $34/$35 3F/F81A: 20 09 80 JSR $8009 ; check if character can equip item/spell 3F/F81D: 4C 26 F8 JMP $F826 ; pop dp and return ; [ update character equipment ] 3F/F820: 20 2C F8 JSR $F82C ; push dp and switch to bank $34/$35 3F/F823: 20 06 80 JSR $8006 ; update character equipment 3F/F826: 48 PHA 3F/F827: 20 3B F8 JSR $F83B ; pop dp 3F/F82A: 68 PLA 3F/F82B: 60 RTS ; [ push dp and switch to bank $34/$35 ] 3F/F82C: 48 PHA 3F/F82D: 8A TXA 3F/F82E: 48 PHA 3F/F82F: 20 17 FB JSR $FB17 ; push dp 3F/F832: A9 1A LDA #$1A 3F/F834: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F837: 68 PLA 3F/F838: AA TAX 3F/F839: 68 PLA 3F/F83A: 60 RTS ; [ pop dp ] 3F/F83B: A2 00 LDX #$00 3F/F83D: BD 80 74 LDA $7480,X 3F/F840: 9D 00 00 STA $0000,X 3F/F843: E8 INX 3F/F844: E0 D0 CPX #$D0 ; skip sound dp ($D0-$DF) 3F/F846: D0 F5 BNE $F83D 3F/F848: A2 E0 LDX #$E0 3F/F84A: BD 70 74 LDA $7470,X 3F/F84D: 9D 00 00 STA $0000,X 3F/F850: E8 INX 3F/F851: D0 F7 BNE $F84A 3F/F853: 60 RTS ; [ execute animation function ] 3F/F854: 85 96 STA $96 3F/F856: 86 97 STX $97 3F/F858: 8A TXA 3F/F859: 48 PHA 3F/F85A: AD F6 7C LDA $7CF6 3F/F85D: 48 PHA 3F/F85E: A9 19 LDA #$19 3F/F860: 8D F6 7C STA $7CF6 3F/F863: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F866: A5 96 LDA $96 3F/F868: A6 97 LDX $97 3F/F86A: 20 00 80 JSR $8000 ; 32/8000 3F/F86D: 68 PLA 3F/F86E: 8D F6 7C STA $7CF6 3F/F871: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F874: 68 PLA 3F/F875: AA TAX 3F/F876: 60 RTS ; [ load general use palette ] ; this subroutine is to load the battle background palette ; these palettes are also used for maps (see 3A/914B) ; $7CEF: palette offset ; $7CF0-$7CF2: palette buffer 3F/F877: A9 00 LDA #$00 3F/F879: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F87C: AE EF 7C LDX $7CEF 3F/F87F: BD 00 91 LDA $9100,X ; general use palettes 3F/F882: 8D F0 7C STA $7CF0 3F/F885: BD 00 92 LDA $9200,X 3F/F888: 8D F1 7C STA $7CF1 3F/F88B: BD 00 93 LDA $9300,X 3F/F88E: 8D F2 7C STA $7CF2 ; fallthrough ; [ restore prg banks ] 3F/F891: AD F6 7C LDA $7CF6 3F/F894: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; [ copy color palettes to ppu ] 3F/F897: A9 3F LDA #$3F ; ppu $3F00 (color palettes) 3F/F899: A2 00 LDX #$00 3F/F89B: 20 E0 F8 JSR $F8E0 ; set ppu address 3F/F89E: BD F7 7C LDA $7CF7,X 3F/F8A1: 8D 07 20 STA $2007 ; ppu data 3F/F8A4: E8 INX 3F/F8A5: E0 20 CPX #$20 ; copy 32 bytes 3F/F8A7: D0 F5 BNE $F89E 3F/F8A9: 60 RTS ; [ copy oam data to ppu ] 3F/F8AA: A9 02 LDA #$02 3F/F8AC: 8D 14 40 STA $4014 ; dma oam data to ppu 3F/F8AF: 60 RTS ; [ wait for vblank (update oam and color) ] 3F/F8B0: 20 80 FB JSR $FB80 ; wait for nmi 3F/F8B3: 20 AA F8 JSR $F8AA ; copy oam data to ppu 3F/F8B6: 20 97 F8 JSR $F897 ; copy color palettes to ppu 3F/F8B9: 4C CB F8 JMP $F8CB ; update ppu registers ; [ wait for vblank (no oam update) ] 3F/F8BC: 20 80 FB JSR $FB80 ; wait for nmi 3F/F8BF: 20 97 F8 JSR $F897 ; copy color palettes to ppu 3F/F8C2: 4C CB F8 JMP $F8CB ; update ppu registers ; [ wait for vblank (no color update) ] 3F/F8C5: 20 80 FB JSR $FB80 ; wait for nmi 3F/F8C8: 20 AA F8 JSR $F8AA ; copy oam data to ppu ; fallthrough ; [ update ppu registers ] 3F/F8CB: A5 06 LDA $06 3F/F8CD: 8D 00 20 STA $2000 3F/F8D0: A5 09 LDA $09 3F/F8D2: 8D 01 20 STA $2001 3F/F8D5: A5 0C LDA $0C 3F/F8D7: 8D 05 20 STA $2005 3F/F8DA: A5 0D LDA $0D 3F/F8DC: 8D 05 20 STA $2005 3F/F8DF: 60 RTS ; [ set ppu address ] ; A: upper byte ; X: lower byte 3F/F8E0: 2C 02 20 BIT $2002 3F/F8E3: 8D 06 20 STA $2006 3F/F8E6: 8E 06 20 STX $2006 3F/F8E9: 60 RTS ; [ multiply ] 3F/F8EA: 20 D6 FC JSR $FCD6 ; multiply 3F/F8ED: A5 1A LDA $1A 3F/F8EF: A6 1B LDX $1B 3F/F8F1: 60 RTS ; [ add to +$7E ] 3F/F8F2: 18 CLC 3F/F8F3: 65 7E ADC $7E 3F/F8F5: 85 7E STA $7E 3F/F8F7: A5 7F LDA $7F 3F/F8F9: 69 00 ADC #$00 3F/F8FB: 85 7F STA $7F 3F/F8FD: 60 RTS ; [ add to +$80 ] 3F/F8FE: 18 CLC 3F/F8FF: 65 80 ADC $80 3F/F901: 85 80 STA $80 3F/F903: A5 81 LDA $81 3F/F905: 69 00 ADC #$00 3F/F907: 85 81 STA $81 3F/F909: 60 RTS ; [ load boss tilemap ] ; +$7E: source address (bank 2A) ; +$80: destination address (ram) 3F/F90A: A9 15 LDA #$15 3F/F90C: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F90F: A9 0C LDA #$0C 3F/F911: 85 82 STA $82 3F/F913: A0 00 LDY #$00 3F/F915: B1 7E LDA ($7E),Y 3F/F917: 91 80 STA ($80),Y 3F/F919: C8 INY 3F/F91A: C0 12 CPY #$12 3F/F91C: D0 F7 BNE $F915 3F/F91E: A9 20 LDA #$20 3F/F920: 20 FE F8 JSR $F8FE ; add to +$80 3F/F923: A9 12 LDA #$12 3F/F925: 20 F2 F8 JSR $F8F2 ; add to +$7E 3F/F928: C6 82 DEC $82 3F/F92A: D0 E7 BNE $F913 3F/F92C: 4C 91 F8 JMP $F891 ; restore prg banks ; [ load rom data ] ; +$7E: source address ; +$80: destination address (ram) ; $82: size ($00 = $0100) ; $84: source bank 3F/F92F: A5 84 LDA $84 3F/F931: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F934: A0 00 LDY #$00 3F/F936: B1 7E LDA ($7E),Y 3F/F938: 91 80 STA ($80),Y 3F/F93A: C8 INY 3F/F93B: C6 82 DEC $82 3F/F93D: D0 F7 BNE $F936 3F/F93F: 4C 91 F8 JMP $F891 ; restore prg banks ; [ copy graphics to ppu (flip if back attack) ] 3F/F942: AD C3 78 LDA $78C3 3F/F945: C9 88 CMP #$88 3F/F947: D0 03 BNE $F94C ; branch if not a back attack 3F/F949: 4C 4F F9 JMP $F94F 3F/F94C: 4C 69 F9 JMP $F969 ; copy graphics to ppu (no flip) ; [ generate graphics horizontal flip table ] 3F/F94F: A2 00 LDX #$00 3F/F951: A0 08 LDY #$08 3F/F953: 8A TXA 3F/F954: 0A ASL 3F/F955: 66 18 ROR $18 3F/F957: 88 DEY 3F/F958: D0 FA BNE $F954 3F/F95A: A5 18 LDA $18 3F/F95C: 9D 00 73 STA $7300,X 3F/F95F: E8 INX 3F/F960: D0 EF BNE $F951 3F/F962: A9 01 LDA #$01 3F/F964: 85 92 STA $92 3F/F966: 4C 70 F9 JMP $F970 ; [ copy graphics to ppu (no flip) ] 3F/F969: A9 00 LDA #$00 3F/F96B: 85 92 STA $92 3F/F96D: 4C 70 F9 JMP $F970 ; [ copy graphics to ppu ] ; +$7E: source address ; +$80: ppu address ; $82: row count ; $84: source bank ; $92: use horizontal flip table 3F/F970: A5 82 LDA $82 3F/F972: 29 03 AND #$03 3F/F974: 85 83 STA $83 3F/F976: 46 82 LSR $82 3F/F978: 46 82 LSR $82 3F/F97A: A5 84 LDA $84 3F/F97C: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/F97F: AD F3 7C LDA $7CF3 3F/F982: F0 03 BEQ $F987 3F/F984: 20 80 FB JSR $FB80 ; wait for nmi 3F/F987: A5 81 LDA $81 3F/F989: A6 80 LDX $80 3F/F98B: 20 E0 F8 JSR $F8E0 ; set ppu address 3F/F98E: A0 00 LDY #$00 3F/F990: B1 7E LDA ($7E),Y 3F/F992: A6 92 LDX $92 3F/F994: F0 04 BEQ $F99A 3F/F996: AA TAX 3F/F997: BD 00 73 LDA $7300,X ; horizontal flip table 3F/F99A: 8D 07 20 STA $2007 3F/F99D: C8 INY 3F/F99E: C0 40 CPY #$40 ; copy 4 tiles per frame 3F/F9A0: D0 EE BNE $F990 3F/F9A2: AD F3 7C LDA $7CF3 3F/F9A5: F0 03 BEQ $F9AA 3F/F9A7: 20 CB F8 JSR $F8CB ; update ppu registers 3F/F9AA: A9 00 LDA #$00 3F/F9AC: 8D 05 20 STA $2005 3F/F9AF: 8D 05 20 STA $2005 3F/F9B2: A9 40 LDA #$40 3F/F9B4: 20 F2 F8 JSR $F8F2 ; add to +$7E 3F/F9B7: A9 40 LDA #$40 3F/F9B9: 20 FE F8 JSR $F8FE ; add to +$80 3F/F9BC: C6 82 DEC $82 3F/F9BE: D0 BA BNE $F97A 3F/F9C0: A5 83 LDA $83 3F/F9C2: F0 3A BEQ $F9FE 3F/F9C4: A2 10 LDX #$10 3F/F9C6: 20 EA F8 JSR $F8EA ; multiply 3F/F9C9: 85 82 STA $82 3F/F9CB: AD F3 7C LDA $7CF3 3F/F9CE: F0 03 BEQ $F9D3 3F/F9D0: 20 80 FB JSR $FB80 ; wait for nmi 3F/F9D3: A5 81 LDA $81 3F/F9D5: A6 80 LDX $80 3F/F9D7: 20 E0 F8 JSR $F8E0 ; set ppu address 3F/F9DA: A0 00 LDY #$00 3F/F9DC: B1 7E LDA ($7E),Y 3F/F9DE: A6 92 LDX $92 3F/F9E0: F0 04 BEQ $F9E6 3F/F9E2: AA TAX 3F/F9E3: BD 00 73 LDA $7300,X 3F/F9E6: 8D 07 20 STA $2007 3F/F9E9: C8 INY 3F/F9EA: C4 82 CPY $82 3F/F9EC: D0 EE BNE $F9DC 3F/F9EE: AD F3 7C LDA $7CF3 3F/F9F1: F0 03 BEQ $F9F6 3F/F9F3: 20 CB F8 JSR $F8CB ; update ppu registers 3F/F9F6: A9 00 LDA #$00 3F/F9F8: 8D 05 20 STA $2005 3F/F9FB: 8D 05 20 STA $2005 3F/F9FE: 4C 91 F8 JMP $F891 ; restore prg banks ; [ draw text ] 3F/FA01: A9 1A LDA #$1A 3F/FA03: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FA06: 20 0C 80 JSR $800C 3F/FA09: A9 0F LDA #$0F 3F/FA0B: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; [ execute battle graphics ] 3F/FA0E: 48 PHA 3F/FA0F: A9 17 LDA #$17 3F/FA11: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FA14: 68 PLA 3F/FA15: 20 53 9D JSR $9D53 ; execute battle graphics 3F/FA18: A9 1A LDA #$1A 3F/FA1A: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; [ reset ppu control ] 3F/FA1D: A9 00 LDA #$00 3F/FA1F: 8D 00 20 STA $2000 3F/FA22: 8D 01 20 STA $2001 3F/FA25: 60 RTS ; [ execute battle ] ; A: battle index ; X: battle bg ; Y: battle flags 3F/FA26: 8D ED 7C STA $7CED ; battle index 3F/FA29: 8E EF 7C STX $7CEF ; battle bg 3F/FA2C: 8C D8 7E STY $7ED8 ; battle flags 3F/FA2F: 20 1D FA JSR $FA1D ; reset ppu control 3F/FA32: 85 A9 STA $A9 ; reset prg bank loading flag 3F/FA34: 20 17 FB JSR $FB17 ; push dp 3F/FA37: 20 B5 FA JSR $FAB5 ; set interrupt jump code 3F/FA3A: A9 17 LDA #$17 3F/FA3C: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FA3F: 20 56 9D JSR $9D56 ; init battle 3F/FA42: A9 1A LDA #$1A 3F/FA44: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FA47: 20 03 80 JSR $8003 ; init characters/monsters 3F/FA4A: A9 17 LDA #$17 3F/FA4C: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FA4F: 20 50 9D JSR $9D50 3F/FA52: 58 CLI 3F/FA53: A9 1A LDA #$1A 3F/FA55: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FA58: 20 00 80 JSR $8000 ; battle main 3F/FA5B: A9 00 LDA #$00 3F/FA5D: 85 B6 STA $B6 ; fade out 3F/FA5F: 20 B0 F8 JSR $F8B0 ; wait for vblank (update oam and color) 3F/FA62: A5 B6 LDA $B6 3F/FA64: 29 03 AND #$03 3F/FA66: D0 03 BNE $FA6B 3F/FA68: 20 87 FA JSR $FA87 3F/FA6B: E6 B6 INC $B6 3F/FA6D: A5 B6 LDA $B6 3F/FA6F: C9 14 CMP #$14 ; 20 frames 3F/FA71: D0 EC BNE $FA5F 3F/FA73: 20 1D FA JSR $FA1D ; reset ppu control 3F/FA76: 20 DD FA JSR $FADD ; pop interrupt jump code 3F/FA79: 20 3B F8 JSR $F83B ; pop dp 3F/FA7C: 78 SEI 3F/FA7D: 0E D3 78 ASL $78D3 ; set carry if defeated 3F/FA80: 60 RTS ; color fade data (3 * 2 bytes) ; $00: last color (exclusive) ; $01: first color 3F/FA81: 20 00 ; 0: all palettes 3F/FA83: 10 00 ; 1: bg palettes 3F/FA85: 20 10 ; 2: sprite palettes ; [ fade out color palettes ] ; A: fade type 3F/FA87: 0A ASL 3F/FA88: A8 TAY 3F/FA89: B9 82 FA LDA $FA82,Y 3F/FA8C: 85 80 STA $80 3F/FA8E: BE 81 FA LDX $FA81,Y 3F/FA91: BD F7 7C LDA $7CF7,X ; color 3F/FA94: C9 0F CMP #$0F 3F/FA96: F0 14 BEQ $FAAC ; branch if black 3F/FA98: 48 PHA 3F/FA99: 29 0F AND #$0F 3F/FA9B: 85 7E STA $7E 3F/FA9D: 68 PLA 3F/FA9E: 29 30 AND #$30 3F/FAA0: D0 05 BNE $FAA7 3F/FAA2: A9 0F LDA #$0F 3F/FAA4: 4C AC FA JMP $FAAC 3F/FAA7: 38 SEC 3F/FAA8: E9 10 SBC #$10 3F/FAAA: 05 7E ORA $7E 3F/FAAC: 9D F7 7C STA $7CF7,X 3F/FAAF: E8 INX 3F/FAB0: E4 80 CPX $80 3F/FAB2: D0 DD BNE $FA91 3F/FAB4: 60 RTS ; [ set interrupt jump code ] 3F/FAB5: A2 06 LDX #$06 3F/FAB7: BD FF 00 LDA $00FF,X ; saved jump code 3F/FABA: 9D D8 7E STA $7ED8,X 3F/FABD: CA DEX 3F/FABE: D0 F7 BNE $FAB7 3F/FAC0: A9 57 LDA #$57 ; JMP $FB57 (nmi) 3F/FAC2: 8D 01 01 STA $0101 3F/FAC5: A9 FB LDA #$FB 3F/FAC7: 8D 02 01 STA $0102 3F/FACA: A9 4C LDA #$4C 3F/FACC: 8D 00 01 STA $0100 3F/FACF: 8D 03 01 STA $0103 3F/FAD2: A9 30 LDA #$30 ; JMP $FB30 (irq) 3F/FAD4: 8D 04 01 STA $0104 3F/FAD7: A9 FB LDA #$FB 3F/FAD9: 8D 05 01 STA $0105 3F/FADC: 60 RTS ; [ pop interrupt jump code ] 3F/FADD: A2 06 LDX #$06 3F/FADF: BD D8 7E LDA $7ED8,X ; saved jump code 3F/FAE2: 9D FF 00 STA $00FF,X 3F/FAE5: CA DEX 3F/FAE6: D0 F7 BNE $FADF 3F/FAE8: 60 RTS ; [ play song ] 3F/FAE9: 8D 43 7F STA $7F43 ; song id 3F/FAEC: A9 01 LDA #$01 ; play new song 3F/FAEE: 8D 42 7F STA $7F42 3F/FAF1: 60 RTS ; [ update sound ] 3F/FAF2: 8A TXA 3F/FAF3: 48 PHA 3F/FAF4: 98 TYA 3F/FAF5: 48 PHA 3F/FAF6: A5 C9 LDA $C9 3F/FAF8: F0 0B BEQ $FB05 ; branch if no sound effect pending 3F/FAFA: A5 CA LDA $CA 3F/FAFC: 09 80 ORA #$80 3F/FAFE: 8D 49 7F STA $7F49 3F/FB01: A9 00 LDA #$00 3F/FB03: 85 C9 STA $C9 3F/FB05: A9 1B LDA #$1B 3F/FB07: 20 89 FB JSR $FB89 3F/FB0A: 20 03 80 JSR $8003 ; update sound 3F/FB0D: A5 AB LDA $AB 3F/FB0F: 20 89 FB JSR $FB89 ; restore prg bank 3F/FB12: 68 PLA 3F/FB13: A8 TAY 3F/FB14: 68 PLA 3F/FB15: AA TAX 3F/FB16: 60 RTS ; [ push dp ] 3F/FB17: A2 00 LDX #$00 3F/FB19: BD 00 00 LDA $0000,X 3F/FB1C: 9D 80 74 STA $7480,X 3F/FB1F: E8 INX 3F/FB20: E0 D0 CPX #$D0 3F/FB22: D0 F5 BNE $FB19 3F/FB24: A2 E0 LDX #$E0 3F/FB26: BD 00 00 LDA $0000,X 3F/FB29: 9D 70 74 STA $7470,X 3F/FB2C: E8 INX 3F/FB2D: D0 F7 BNE $FB26 3F/FB2F: 60 RTS ; [ irq ] ; for battle and cutscenes 3F/FB30: 48 PHA 3F/FB31: AD AA 00 LDA $00AA 3F/FB34: D0 0F BNE $FB45 ; branch if irq ppu update is disabled 3F/FB36: A5 08 LDA $08 3F/FB38: 8D 00 20 STA $2000 3F/FB3B: A5 10 LDA $10 3F/FB3D: 8D 05 20 STA $2005 3F/FB40: A5 11 LDA $11 3F/FB42: 8D 05 20 STA $2005 3F/FB45: 8D 00 E0 STA $E000 ; disable irq 3F/FB48: A9 00 LDA #$00 3F/FB4A: 85 00 STA $00 ; clear irq flag 3F/FB4C: A5 AA LDA $AA 3F/FB4E: 05 A9 ORA $A9 ; no sound update if prg bank is loading 3F/FB50: D0 03 BNE $FB55 3F/FB52: 20 F2 FA JSR $FAF2 ; update sound 3F/FB55: 68 PLA 3F/FB56: 40 RTI ; [ nmi ] ; for battle and cutscenes 3F/FB57: 48 PHA 3F/FB58: 8A TXA 3F/FB59: 48 PHA 3F/FB5A: AD F3 7C LDA $7CF3 3F/FB5D: F0 12 BEQ $FB71 3F/FB5F: 20 CB F8 JSR $F8CB ; update ppu registers 3F/FB62: A5 03 LDA $03 3F/FB64: 85 02 STA $02 3F/FB66: 8D 00 C0 STA $C000 ; irq scanline 3F/FB69: 8D 01 C0 STA $C001 3F/FB6C: A6 01 LDX $01 3F/FB6E: 9D 00 E0 STA $E000,X ; enable/disable irq 3F/FB71: A9 00 LDA #$00 3F/FB73: 85 05 STA $05 3F/FB75: 68 PLA 3F/FB76: AA TAX 3F/FB77: 68 PLA 3F/FB78: 40 RTI ; [ wait for irq ] 3F/FB79: E6 00 INC $00 3F/FB7B: A5 00 LDA $00 3F/FB7D: D0 FC BNE $FB7B 3F/FB7F: 60 RTS ; [ wait for nmi ] 3F/FB80: E6 05 INC $05 3F/FB82: A5 05 LDA $05 3F/FB84: D0 FC BNE $FB82 3F/FB86: 60 RTS ; [ switch prg bank 0 and 1 ] 3F/FB87: 85 AB STA $AB 3F/FB89: 0A ASL 3F/FB8A: 48 PHA 3F/FB8B: A9 06 LDA #$06 ; select prg bank 0 3F/FB8D: E6 A9 INC $A9 ; disable sound update during irq 3F/FB8F: 8D 00 80 STA $8000 3F/FB92: 68 PLA 3F/FB93: 8D 01 80 STA $8001 3F/FB96: C6 A9 DEC $A9 3F/FB98: 18 CLC 3F/FB99: 69 01 ADC #$01 3F/FB9B: 48 PHA 3F/FB9C: A9 07 LDA #$07 ; select prg bank 1 3F/FB9E: E6 A9 INC $A9 3F/FBA0: 8D 00 80 STA $8000 3F/FBA3: 68 PLA 3F/FBA4: 8D 01 80 STA $8001 3F/FBA7: C6 A9 DEC $A9 3F/FBA9: 60 RTS ; [ update joypad input ] 3F/FBAA: A5 13 LDA $13 3F/FBAC: 85 12 STA $12 ; save previous frame buttons 3F/FBAE: A9 01 LDA #$01 3F/FBB0: 8D 16 40 STA $4016 3F/FBB3: A9 00 LDA #$00 3F/FBB5: 8D 16 40 STA $4016 3F/FBB8: A2 08 LDX #$08 3F/FBBA: AD 16 40 LDA $4016 ; read button 3F/FBBD: 6A ROR 3F/FBBE: B0 01 BCS $FBC1 3F/FBC0: 6A ROR 3F/FBC1: 66 13 ROR $13 3F/FBC3: CA DEX 3F/FBC4: D0 F4 BNE $FBBA 3F/FBC6: A5 12 LDA $12 3F/FBC8: 05 13 ORA $13 3F/FBCA: D0 07 BNE $FBD3 ; branch if any buttons are pressed 3F/FBCC: 85 12 STA $12 3F/FBCE: A9 08 LDA #$08 ; reset repeat counter (8 frame delay) 3F/FBD0: 85 14 STA $14 3F/FBD2: 60 RTS 3F/FBD3: A5 12 LDA $12 3F/FBD5: 25 13 AND $13 3F/FBD7: D0 09 BNE $FBE2 3F/FBD9: A5 12 LDA $12 3F/FBDB: 49 FF EOR #$FF 3F/FBDD: 25 13 AND $13 3F/FBDF: 85 12 STA $12 3F/FBE1: 60 RTS 3F/FBE2: C6 14 DEC $14 ; decrement repeat counter 3F/FBE4: D0 F3 BNE $FBD9 3F/FBE6: A9 04 LDA #$04 ; reset repeat counter (4 frames per repeat) 3F/FBE8: 85 14 STA $14 3F/FBEA: A5 13 LDA $13 3F/FBEC: 85 12 STA $12 3F/FBEE: 60 RTS ; [ random (X..A) ] ; $1A: rng counter to use ($15, $16, or $17) 3F/FBEF: 86 20 STX $20 3F/FBF1: E0 FF CPX #$FF 3F/FBF3: D0 03 BNE $FBF8 3F/FBF5: 8A TXA 3F/FBF6: D0 2E BNE $FC26 3F/FBF8: C9 00 CMP #$00 3F/FBFA: F0 2A BEQ $FC26 3F/FBFC: C5 20 CMP $20 3F/FBFE: F0 26 BEQ $FC26 3F/FC00: 38 SEC 3F/FC01: E5 20 SBC $20 3F/FC03: 85 18 STA $18 3F/FC05: A9 80 LDA #$80 3F/FC07: 85 1A STA $1A 3F/FC09: 0A ASL 3F/FC0A: 85 19 STA $19 3F/FC0C: A6 21 LDX $21 3F/FC0E: B5 15 LDA $15,X ; rng counter 3F/FC10: F6 15 INC $15,X 3F/FC12: AA TAX 3F/FC13: BD E3 7B LDA $7BE3,X ; rng table 3F/FC16: 85 1B STA $1B 3F/FC18: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 3F/FC1B: A6 1E LDX $1E 3F/FC1D: A5 1D LDA $1D 3F/FC1F: 10 01 BPL $FC22 3F/FC21: E8 INX 3F/FC22: 8A TXA 3F/FC23: 18 CLC 3F/FC24: 65 20 ADC $20 3F/FC26: 60 RTS ; [ init rng ] ; this is for the battle and cutscene modules. it does not use the random ; number table at 3F/FE00. instead it generates a new random number table ; at $7BE3 every time a battle or cutscene is initiated. 3F/FC27: A2 00 LDX #$00 3F/FC29: 75 00 ADC $00,X ; seed with sum of zero page 3F/FC2B: E8 INX 3F/FC2C: D0 FB BNE $FC29 3F/FC2E: 85 15 STA $15 ; init rng counters 3F/FC30: 85 16 STA $16 3F/FC32: 85 17 STA $17 3F/FC34: 29 02 AND #$02 3F/FC36: 18 CLC 3F/FC37: 69 03 ADC #$03 3F/FC39: 85 22 STA $22 3F/FC3B: A9 01 LDA #$01 3F/FC3D: 85 20 STA $20 3F/FC3F: A9 00 LDA #$00 3F/FC41: 85 21 STA $21 3F/FC43: A8 TAY 3F/FC44: A5 22 LDA $22 3F/FC46: 85 18 STA $18 3F/FC48: A9 00 LDA #$00 3F/FC4A: 85 19 STA $19 3F/FC4C: A5 20 LDA $20 3F/FC4E: 85 1A STA $1A 3F/FC50: A5 21 LDA $21 3F/FC52: 85 1B STA $1B 3F/FC54: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 3F/FC57: A5 1C LDA $1C 3F/FC59: 85 18 STA $18 3F/FC5B: A5 1D LDA $1D 3F/FC5D: 85 19 STA $19 3F/FC5F: A9 00 LDA #$00 3F/FC61: 85 1A STA $1A 3F/FC63: A9 04 LDA #$04 3F/FC65: 85 1B STA $1B 3F/FC67: 20 92 FC JSR $FC92 ; divide (16-bit) 3F/FC6A: 38 SEC 3F/FC6B: A5 1F LDA $1F 3F/FC6D: E9 02 SBC #$02 3F/FC6F: 05 1E ORA $1E 3F/FC71: F0 0E BEQ $FC81 3F/FC73: 90 0C BCC $FC81 3F/FC75: A9 00 LDA #$00 3F/FC77: E5 1E SBC $1E 3F/FC79: 85 1E STA $1E 3F/FC7B: A9 04 LDA #$04 3F/FC7D: E5 1F SBC $1F 3F/FC7F: 85 1F STA $1F 3F/FC81: A5 1F LDA $1F 3F/FC83: 85 21 STA $21 3F/FC85: 4A LSR 3F/FC86: A5 1E LDA $1E 3F/FC88: 85 20 STA $20 3F/FC8A: 6A ROR 3F/FC8B: 99 E3 7B STA $7BE3,Y ; rng table 3F/FC8E: C8 INY 3F/FC8F: D0 B3 BNE $FC44 3F/FC91: 60 RTS ; [ divide (16-bit) ] ; +$1C = +$18 / +$1A ; +$1E = remainder 3F/FC92: A9 00 LDA #$00 3F/FC94: 85 1D STA $1D 3F/FC96: 85 1C STA $1C 3F/FC98: 85 1F STA $1F 3F/FC9A: 85 1E STA $1E 3F/FC9C: A5 18 LDA $18 3F/FC9E: 05 19 ORA $19 3F/FCA0: F0 33 BEQ $FCD5 3F/FCA2: A5 1A LDA $1A 3F/FCA4: 05 1B ORA $1B 3F/FCA6: F0 2D BEQ $FCD5 3F/FCA8: A2 10 LDX #$10 3F/FCAA: 26 18 ROL $18 3F/FCAC: 26 19 ROL $19 3F/FCAE: 26 1E ROL $1E 3F/FCB0: 26 1F ROL $1F 3F/FCB2: 38 SEC 3F/FCB3: A5 1E LDA $1E 3F/FCB5: E5 1A SBC $1A 3F/FCB7: 85 1E STA $1E 3F/FCB9: A5 1F LDA $1F 3F/FCBB: E5 1B SBC $1B 3F/FCBD: 85 1F STA $1F 3F/FCBF: B0 0D BCS $FCCE 3F/FCC1: A5 1E LDA $1E 3F/FCC3: 65 1A ADC $1A 3F/FCC5: 85 1E STA $1E 3F/FCC7: A5 1F LDA $1F 3F/FCC9: 65 1B ADC $1B 3F/FCCB: 85 1F STA $1F 3F/FCCD: 18 CLC 3F/FCCE: 26 1C ROL $1C 3F/FCD0: 26 1D ROL $1D 3F/FCD2: CA DEX 3F/FCD3: D0 D5 BNE $FCAA 3F/FCD5: 60 RTS ; [ multiply ] ; +$1A <- A * X 3F/FCD6: 85 18 STA $18 3F/FCD8: 86 19 STX $19 3F/FCDA: A2 08 LDX #$08 3F/FCDC: A9 00 LDA #$00 3F/FCDE: 85 1B STA $1B 3F/FCE0: 85 1A STA $1A 3F/FCE2: 66 19 ROR $19 3F/FCE4: 90 07 BCC $FCED 3F/FCE6: 18 CLC 3F/FCE7: A5 18 LDA $18 3F/FCE9: 65 1B ADC $1B 3F/FCEB: 85 1B STA $1B 3F/FCED: 66 1B ROR $1B 3F/FCEF: 66 1A ROR $1A 3F/FCF1: CA DEX 3F/FCF2: D0 EE BNE $FCE2 3F/FCF4: 60 RTS ; [ multiply (16-bit) ] ; +++$1C <- +$18 * +$1A 3F/FCF5: A2 10 LDX #$10 3F/FCF7: A9 00 LDA #$00 3F/FCF9: 85 1D STA $1D 3F/FCFB: 85 1C STA $1C 3F/FCFD: 85 1F STA $1F 3F/FCFF: 85 1E STA $1E 3F/FD01: 66 1B ROR $1B 3F/FD03: 66 1A ROR $1A 3F/FD05: 90 0D BCC $FD14 3F/FD07: 18 CLC 3F/FD08: A5 18 LDA $18 3F/FD0A: 65 1E ADC $1E 3F/FD0C: 85 1E STA $1E 3F/FD0E: A5 19 LDA $19 3F/FD10: 65 1F ADC $1F 3F/FD12: 85 1F STA $1F 3F/FD14: 66 1F ROR $1F 3F/FD16: 66 1E ROR $1E 3F/FD18: 66 1D ROR $1D 3F/FD1A: 66 1C ROR $1C 3F/FD1C: CA DEX 3F/FD1D: D0 E2 BNE $FD01 3F/FD1F: 60 RTS ; [ set bit ] 3F/FD20: 1D 24 FD ORA $FD24,X 3F/FD23: 60 RTS ; bit masks 3F/FD24: 80 40 20 10 08 04 02 01 ; [ clear bit ] 3F/FD2C: 3D 30 FD AND $FD30,X 3F/FD2F: 60 RTS ; inverse bit masks 3F/FD30: 7F BF DF EF F7 FB FD FE ; [ check bit ] 3F/FD38: 3D 24 FD AND $FD24,X 3F/FD3B: 60 RTS ; [ asl ] 3F/FD3C: 0A ASL 3F/FD3D: 0A ASL 3F/FD3E: 0A ASL 3F/FD3F: 0A ASL 3F/FD40: 0A ASL 3F/FD41: 0A ASL 3F/FD42: 60 RTS ; [ lsr ] 3F/FD43: 4A LSR 3F/FD44: 4A LSR 3F/FD45: 4A LSR 3F/FD46: 4A LSR 3F/FD47: 4A LSR 3F/FD48: 4A LSR 3F/FD49: 60 RTS ; [ get text string ] ; A: source bank ; X: destination offset in text buffer (returns offset of last text character) ; +$18: source address 3F/FD4A: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FD4D: A0 00 LDY #$00 3F/FD4F: B1 18 LDA ($18),Y 3F/FD51: F0 07 BEQ $FD5A ; null-terminator 3F/FD53: 9D D7 7A STA $7AD7,X 3F/FD56: E8 INX 3F/FD57: C8 INY 3F/FD58: D0 F5 BNE $FD4F 3F/FD5A: A9 1A LDA #$1A 3F/FD5C: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FD5F: 60 RTS ; [ get pointer to text string ] ; +$18: offset ; $1A: string id 3F/FD60: A9 0C LDA #$0C 3F/FD62: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FD65: A9 00 LDA #$00 3F/FD67: 85 1B STA $1B 3F/FD69: 06 1A ASL $1A 3F/FD6B: 26 1B ROL $1B 3F/FD6D: 18 CLC 3F/FD6E: A5 1A LDA $1A 3F/FD70: 65 18 ADC $18 3F/FD72: 85 1A STA $1A 3F/FD74: A5 1B LDA $1B 3F/FD76: 65 19 ADC $19 3F/FD78: 85 1B STA $1B 3F/FD7A: A0 00 LDY #$00 3F/FD7C: B1 1A LDA ($1A),Y 3F/FD7E: 85 18 STA $18 3F/FD80: C8 INY 3F/FD81: B1 1A LDA ($1A),Y 3F/FD83: 85 19 STA $19 3F/FD85: A9 1A LDA #$1A 3F/FD87: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FD8A: 60 RTS ; [ get class equipment types ] 3F/FD8B: A9 00 LDA #$00 3F/FD8D: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FD90: BD 00 89 LDA $8900,X ; class equipment types 3F/FD93: 85 3B STA $3B 3F/FD95: E8 INX 3F/FD96: BD 00 89 LDA $8900,X 3F/FD99: 85 3C STA $3C 3F/FD9B: E8 INX 3F/FD9C: BD 00 89 LDA $8900,X 3F/FD9F: 85 3D STA $3D 3F/FDA1: A9 1A LDA #$1A 3F/FDA3: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; [ load array item ] ; $18: index ; $1A: size ; +$20: source address ; A: source bank ; X: destination (+$7400) ; Y: return address bank 3F/FDA6: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FDA9: 98 TYA 3F/FDAA: 48 PHA 3F/FDAB: 8A TXA 3F/FDAC: 48 PHA 3F/FDAD: A5 1A LDA $1A 3F/FDAF: 48 PHA 3F/FDB0: A9 00 LDA #$00 3F/FDB2: 85 19 STA $19 3F/FDB4: 85 1B STA $1B 3F/FDB6: 20 F5 FC JSR $FCF5 ; multiply (16-bit) 3F/FDB9: 18 CLC 3F/FDBA: A5 1C LDA $1C 3F/FDBC: 65 20 ADC $20 3F/FDBE: 85 1C STA $1C 3F/FDC0: A5 1D LDA $1D 3F/FDC2: 65 21 ADC $21 3F/FDC4: 85 1D STA $1D 3F/FDC6: 68 PLA 3F/FDC7: 85 1A STA $1A 3F/FDC9: 68 PLA 3F/FDCA: AA TAX 3F/FDCB: A0 00 LDY #$00 3F/FDCD: B1 1C LDA ($1C),Y 3F/FDCF: 9D 00 74 STA $7400,X 3F/FDD2: E8 INX 3F/FDD3: C8 INY 3F/FDD4: C4 1A CPY $1A 3F/FDD6: D0 F5 BNE $FDCD 3F/FDD8: 68 PLA 3F/FDD9: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; [ load rom data to buffer ] ; A: source bank ; +$46: source address ; $4A: return bank ; $4B: size 3F/FDDC: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FDDF: A2 00 LDX #$00 3F/FDE1: A0 00 LDY #$00 3F/FDE3: B1 46 LDA ($46),Y 3F/FDE5: 9D 00 74 STA $7400,X 3F/FDE8: E8 INX 3F/FDE9: C8 INY 3F/FDEA: E4 4B CPX $4B 3F/FDEC: D0 F5 BNE $FDE3 3F/FDEE: A5 4A LDA $4A 3F/FDF0: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; [ do battle algorithm ] 3F/FDF3: A9 18 LDA #$18 3F/FDF5: 20 87 FB JSR $FB87 ; switch prg bank 0 and 1 3F/FDF8: 20 58 9E JSR $9E58 3F/FDFB: A9 1A LDA #$1A 3F/FDFD: 4C 87 FB JMP $FB87 ; switch prg bank 0 and 1 ; -------------------------------------------------------------------------- ; random number table 3F/FE00: 1F A6 DE BA CC 12 7D 74 1B F3 B4 88 F8 52 F4 07 3F/FE10: 90 AB B3 BD AA 55 28 BC 8A 60 0E C4 83 A9 3B 76 3F/FE20: 20 7C 09 92 FD 4A A8 F0 61 E3 F2 69 6C BB 38 C3 3F/FE30: AE B7 43 84 78 23 7B 9B 2D DB 3E 91 CF 02 2A B6 3F/FE40: 86 EE 9C 8E B8 6F 1A 57 05 E9 73 31 D2 D9 1D FB 3F/FE50: 94 9D B1 0A 3A 11 5A 47 95 2C 44 E0 6A 8C 5B 7A 3F/FE60: A7 5D 36 70 E5 C7 49 DC 68 97 D8 66 A3 0F B0 9F 3F/FE70: 03 D6 77 16 13 30 25 3C 10 17 AD 98 6B 2F D7 A1 3F/FE80: FF A4 EB 51 FE 27 8D 93 D5 3D F6 08 75 E1 A5 46 3F/FE90: 63 F5 4D DA 32 AF 40 37 D3 C0 89 67 06 21 6E 81 3F/FEA0: B5 A0 4F 0C 2E E7 1C 58 85 E8 59 CE 35 CB 1E C6 3F/FEB0: 2B 9A E6 DD F1 EC 96 CA AC 00 50 C9 4C FC 14 7E 3F/FEC0: 56 80 D0 79 BF 29 87 48 24 19 C5 22 71 7F 72 0D 3F/FED0: CD 8F BE 3F 90 34 ED 53 54 04 62 A2 C2 41 5E 82 3F/FEE0: 4B 26 5C 42 65 99 4E 60 8B F7 0B 33 DF D1 64 C8 3F/FEF0: C0 01 EF F9 FA E4 5F 18 B9 B2 39 D4 15 E2 EA 45 3F/FF00: 4C 36 FF JMP $FF36 ; wait for vblank 3F/FF03: 4C 17 FF JMP $FF17 ; switch prg bank 0 and 1 (sequential) 3F/FF06: 4C 0C FF JMP $FF0C ; switch prg bank 0 3F/FF09: 4C 1F FF JMP $FF1F ; switch prg bank 1 ; [ switch prg bank 0 ] 3F/FF0C: 48 PHA 3F/FF0D: A9 06 LDA #$06 3F/FF0F: 8D 00 80 STA $8000 3F/FF12: 68 PLA 3F/FF13: 8D 01 80 STA $8001 3F/FF16: 60 RTS ; [ switch prg bank 0 and 1 (sequential) ] 3F/FF17: 48 PHA 3F/FF18: 20 0C FF JSR $FF0C 3F/FF1B: 68 PLA 3F/FF1C: 18 CLC 3F/FF1D: 69 01 ADC #$01 ; fallthrough ; [ switch prg bank 1 ] 3F/FF1F: 48 PHA 3F/FF20: A9 07 LDA #$07 3F/FF22: 8D 00 80 STA $8000 3F/FF25: 68 PLA 3F/FF26: 8D 01 80 STA $8001 3F/FF29: 60 RTS ; [ return after vblank ] 3F/FF2A: AD 02 20 LDA $2002 3F/FF2D: A9 40 LDA #$40 ; RTI 3F/FF2F: 8D 00 01 STA $0100 3F/FF32: 68 PLA 3F/FF33: 68 PLA 3F/FF34: 68 PLA 3F/FF35: 60 RTS ; [ wait for vblank ] 3F/FF36: A9 2A LDA #$2A ; JMP $FF2A 3F/FF38: 8D 01 01 STA $0101 3F/FF3B: A9 FF LDA #$FF 3F/FF3D: 8D 02 01 STA $0102 3F/FF40: A9 4C LDA #$4C 3F/FF42: 8D 00 01 STA $0100 3F/FF45: 4C 45 FF JMP $FF45 ; [ reset ] 3F/FF48: 78 SEI 3F/FF49: D8 CLD 3F/FF4A: A9 00 LDA #$00 3F/FF4C: 8D 00 20 STA $2000 3F/FF4F: 8D 01 20 STA $2001 3F/FF52: 8D 10 40 STA $4010 3F/FF55: A2 02 LDX #$02 3F/FF57: 2C 02 20 BIT $2002 3F/FF5A: 10 FB BPL $FF57 3F/FF5C: CA DEX 3F/FF5D: D0 F8 BNE $FF57 3F/FF5F: A2 FF LDX #$FF 3F/FF61: 9A TXS 3F/FF62: A9 40 LDA #$40 ; rti 3F/FF64: 8D 00 01 STA $0100 3F/FF67: 8D 03 01 STA $0103 3F/FF6A: 8D 17 40 STA $4017 3F/FF6D: A9 00 LDA #$00 ; vertical mirroring 3F/FF6F: 8D 00 A0 STA $A000 3F/FF72: A9 80 LDA #$80 ; enable prg ram 3F/FF74: 8D 01 A0 STA $A001 3F/FF77: 8D 00 80 STA $8000 ; invert chr banks 3F/FF7A: A9 00 LDA #$00 3F/FF7C: 8D 01 80 STA $8001 3F/FF7F: 8D 00 E0 STA $E000 ; disable irq 3F/FF82: AD 02 20 LDA $2002 ; latch ppu 3F/FF85: A9 10 LDA #$10 3F/FF87: AA TAX 3F/FF88: 8D 06 20 STA $2006 ; set ppu address (not sure what this does) 3F/FF8B: 8D 06 20 STA $2006 3F/FF8E: 49 10 EOR #$10 ; toggle between low and high chr ram 3F/FF90: CA DEX 3F/FF91: D0 F5 BNE $FF88 3F/FF93: 8D 00 E0 STA $E000 ; disable irq 3F/FF96: A2 00 LDX #$00 3F/FF98: 8E 00 80 STX $8000 ; normal order for chr banks 3F/FF9B: BD B3 FF LDA $FFB3,X 3F/FF9E: 8D 01 80 STA $8001 ; set chr banks 3F/FFA1: E8 INX 3F/FFA2: E0 06 CPX #$06 ; 6 banks total 3F/FFA4: 90 F2 BCC $FF98 3F/FFA6: A9 40 LDA #$40 3F/FFA8: 8D 00 A0 STA $A000 ; i don't think this does anything on mmc3 3F/FFAB: A9 80 LDA #$80 3F/FFAD: 8D 01 A0 STA $A001 ; enable prg ram again 3F/FFB0: 4C 00 C0 JMP $C000 ; program start ; switchable chr ram banks (switch at reset and leave them) 3F/FFB3: 00 02 04 05 06 07 ; unused (these may have originally loaded prg rom banks 00 and 01) 3F/FFB9: 00 01 ; uninitialized padding 3F/FFBB: 5F FF FD 3F/FFC0: FF 7D FF DF FF 7D FF 7D FF F5 FF 5D FF DF FF 7F 3F/FFD0: FF 5F FF 77 FF 55 FF D7 FF D5 FF 75 FF 77 FF DF 3F/FFE0: FF 5F FF F5 FF 77 FF 7D FF 5F FF 75 FF 57 FF FF 3F/FFF0: FF 5D FF D6 FF 75 FF F5 BF D7 ; interrupt vectors 3F/FFF8: 0103 ; abort (unused) 3F/FFFA: 0100 ; nmi 3F/FFFC: FF48 ; reset 3F/FFFE: 0103 ; irq