Welcome to Data Crystal's new home! Data Crystal is now part of the TCRF family (sort of).
The wiki has recently moved; please report any issues in Discord. Pardon the dust.

Dragon Warrior II (NES)/ROM map/ASM bank 06

From Data Crystal
Jump to navigation Jump to search

This is a sub-page of Dragon Warrior II (NES)/ROM map.

bank 0x06 of 16 starts at file address 0x018010
; code bytes:	$2F06 (73.47% of bytes in this ROM bank)
; data bytes:	$10B1 (26.08% of bytes in this ROM bank)
; pcm bytes:	$0000 (0.00% of bytes in this ROM bank)
; chr bytes:	$0000 (0.00% of bytes in this ROM bank)
; free bytes:	$0021 (0.20% of bytes in this ROM bank)
; unknown bytes:	$0028 (0.24% of bytes in this ROM bank)
; $3FB7 bytes last seen in RAM bank $8000 - $BFFF (100.00% of bytes seen in this ROM bank, 99.55% of bytes in this ROM bank):
;	$2F06 code bytes (73.80% of bytes seen in this RAM bank, 73.47% of bytes in this ROM bank)
;	$10B1 data bytes (26.20% of bytes seen in this RAM bank, 26.08% of bytes in this ROM bank)

; PRG Bank 0x06: handlers for main COMMAND menu options (TALK, SPELL, STATUS, ITEM, SEARCH, and EQUIP) including pretty much anything that is required input to or happens as a result of those commands; also includes code and data for gluing together irregularly shaped dungeon maps, starting and saving a game, text for items/spells/monster names, and the ending sequence

; [bank start] -> data
; possible external indexed data load target (from $0F:$F3ED, $0F:$FF28)
; external indirect data load target (via $08:$80CC, $0A:$80F5, $0A:$813E, $0F:$F052, $0F:$F83D)
0x018010|$06:$8000:12
; possible external indexed data load target (from $0F:$F3F2, $0F:$FF2D)
0x018011|$06:$8001:   A6	; $06:$A612
; indirect data load target (via $B0A8)
; external indirect data load target (via $02:$B74E, $0F:$FD25, $0F:$FD98)
0x018012|$06:$8002:09 A8	; $06:$A809
; -> $06:$A843: display and handle main game menu
; external indirect data load target (via $0F:$C6C7)
0x018014|$06:$8004:43 A8	; $06:$A843; display and handle main game menu
; -> $06:$ABC7: copy save data from save data buffer at $7000 to system RAM; update Don Mahone quest status if applicable
; external indirect data load target (via $0F:$C6F9)
0x018016|$06:$8006:C7 AB	; $06:$ABC7; copy save data from save data buffer at $7000 to system RAM; update Don Mahone quest status if applicable
; external indirect data load target (via $0F:$D15F, $0F:$D171)
0x018018|$06:$8008:5F A8	; $06:$A85F
; -> $06:$A896: copy Midenhall's full name from save slot in $75DB to $0100 in reverse
; external indirect data load target (via $0F:$EF5B)
0x01801A|$06:$800A:96 A8	; $06:$A896; copy Midenhall's full name from save slot in $75DB to $0100 in reverse
; -> $06:$A8AA: given current game save slot in $75DB, return Midenhall's level in that save game in A/$0E
; external indirect data load target (via $0F:$EE09)
0x01801C|$06:$800C:AA A8	; $06:$A8AA; given current game save slot in $75DB, return Midenhall's level in that save game in A/$0E
0x01801E|$06:$800E:B7 A8	; $06:$A8B7
; -> $06:$ADFC: given a selected list index in A, an item type in X, and a hero ID in $4A, set A to the A'th item of type X in hero $4A's inventory
; external indirect data load target (via $0F:$F4E6, $0F:$F5E4, $0F:$F614)
0x018020|$06:$8010:FC AD	; $06:$ADFC; given a selected list index in A, an item type in X, and a hero ID in $4A, set A to the A'th item of type X in hero $4A's inventory
; -> $06:$AE30: given hero ID - 1 in $4A and field spell menu selection index in A, return spell ID in A
; external indirect data load target (via $0F:$F5FA)
0x018022|$06:$8012:30 AE	; $06:$AE30; given hero ID - 1 in $4A and field spell menu selection index in A, return spell ID in A
; -> $06:$AE3D: given hero ID - 1 in $4A and battle spell menu selection index in A, return spell ID in A
; external indirect data load target (via $0F:$F4AC)
0x018024|$06:$8014:3D AE	; $06:$AE3D; given hero ID - 1 in $4A and battle spell menu selection index in A, return spell ID in A
0x018026|$06:$8016:86 AE	; $06:$AE86
; external indirect data load target (via $0F:$F0BF)
0x018028|$06:$8018:7F AF	; $06:$AF7F
0x01802A|$06:$801A:8E AF	; $06:$AF8E
; -> $06:$A88F: copy Midenhall's short name from save slot in A to $0100 in reverse
; external indirect data load target (via $0F:$EE7E)
0x01802C|$06:$801C:8F A8	; $06:$A88F; copy Midenhall's short name from save slot in A to $0100 in reverse
; -> $06:$A885: copy save data from system RAM to per-game save data
; external indirect data load target (via $0F:$C6DA)
0x01802E|$06:$801E:85 A8	; $06:$A885; copy save data from system RAM to per-game save data
; -> $06:$AE4A: given spell ID in A, set A to spell name index
; external indirect data load target (via $02:$BEA4)
0x018030|$06:$8020:4A AE	; $06:$AE4A; given spell ID in A, set A to spell name index
; -> $06:$B2CA: Item list part 1, line 1
; external indirect data load target (via $0F:$F316)
0x018032|$06:$8022:CA B2	; $06:$B2CA; Item list part 1, line 1
; -> $06:$B4B2: Item list part 1, line 2
; external indirect data load target (via $0F:$F317)
0x018034|$06:$8024:B2 B4	; $06:$B4B2; Item list part 1, line 2
; -> $06:$B624: Spell name list
; data load target (from $F3AB)
0x018036|$06:$8026:24 B6	; $06:$B624; Spell name list
; -> $06:$B718: Monster list part 1, line 1
; external indirect data load target (via $0F:$F3DE)
0x018038|$06:$8028:18 B7	; $06:$B718; Monster list part 1, line 1
; -> $06:$B945: Monster list part 1, line 2
; external indirect data load target (via $0F:$F3DF)
0x01803A|$06:$802A:45 B9	; $06:$B945; Monster list part 1, line 2
0x01803C|$06:$802C:43 BA	; $06:$BA43; tiles for redrawing the part of the main COMMAND menu obscured by the EQUIP sub-menu when the EQUIP sub-menu is closed; (only?) read during battle where there is no main COMMAND menu
0x01803E|$06:$802E:83 BA	; $06:$BA83
; -> $06:$B3BE: Item list part 2, line 1
; external indirect data load target (via $0F:$F318)
0x018040|$06:$8030:BE B3	; $06:$B3BE; Item list part 2, line 1
; -> $06:$B57C: Item list part 2, line 2
; external indirect data load target (via $0F:$F319)
0x018042|$06:$8032:7C B5	; $06:$B57C; Item list part 2, line 2
; -> $06:$B85E: Monster list part 2, line 1
; external indirect data load target (via $0F:$F3E0)
0x018044|$06:$8034:5E B8	; $06:$B85E; Monster list part 2, line 1
; -> $06:$B9D5: Monster list part 2, line 2
; external indirect data load target (via $0F:$F3E1)
0x018046|$06:$8036:D5 B9	; $06:$B9D5; Monster list part 2, line 2
; external indirect data load target (via $0F:$C897)
0x018048|$06:$8038:3D BB	; $06:$BB3D
; external indirect data load target (via $0F:$C889)
0x01804A|$06:$803A:A3 BA	; $06:$BAA3
0x01804C|$06:$803C:1A A6	; $06:$A61A
; external indirect data load target (via $0F:$D359)
0x01804E|$06:$803E:3D BC	; $06:$BC3D
; external indirect data load target (via $0F:$CC9E)
0x018050|$06:$8040:8D BC	; $06:$BC8D
0x018052|$06:$8042:E1 A3	; $06:$A3E1; pointers to warp spaces for irregularly-shaped maps
; external indirect data load target (via $0F:$D2FA)
0x018054|$06:$8044:96 BD	; $06:$BD96
; -> $06:$BEED: X = 1 => CLC and update $0C-$0D to warp point data to use if Outside allowed from current map, SEC otherwise, X = 2 => CLC and update $0C-$0D to warp point data to use if Return allowed from current map, SEC otherwise, X = 3 => disembark from ship and update ship position based on last save point ID $48
; external indirect data load target (via $0F:$D2EA)
0x018056|$06:$8046:ED BE	; $06:$BEED; X = 1 => CLC and update $0C-$0D to warp point data to use if Outside allowed from current map, SEC otherwise, X = 2 => CLC and update $0C-$0D to warp point data to use if Return allowed from current map, SEC otherwise, X = 3 => disembark from ship and update ship position based on last save point ID $48

; data -> code
; control flow target (from $8056)
; external control flow target (from $0F:$C70F)
; call to code in a different bank ($0F:$C1DC)
0x018058|$06:$8048:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01805B|$06:$804B:A5 03   	LDA $03    	; game clock?
0x01805D|$06:$804D:29 0F   	AND #$0F   
0x01805F|$06:$804F:C9 01   	CMP #$01   
0x018061|$06:$8051:F0 06   	BEQ $8059  
; call to code in a different bank ($0F:$CF64)
0x018063|$06:$8053:20 64 CF	JSR $CF64  
0x018066|$06:$8056:4C 48 80	JMP $8048  

; control flow target (from $8051)
0x018069|$06:$8059:A9 FF   	LDA #$FF   
0x01806B|$06:$805B:85 35   	STA $35    	; flag indicating whether any menu is currently open
0x01806D|$06:$805D:A9 06   	LDA #$06   
0x01806F|$06:$805F:85 94   	STA $94    	; return bank for various function calls, doubles as index of selected option for multiple-choice menus
; call to code in a different bank ($0F:$EB76)
0x018071|$06:$8061:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018074|$06:$8064:00	; Menu ID #$00: Mini status window, bottom

; data -> code
; call to code in a different bank ($0F:$EB76)
0x018075|$06:$8065:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018078|$06:$8068:06	; Menu ID #$06: Map menu: main COMMAND menu

; data -> code
0x018079|$06:$8069:C9 FF   	CMP #$FF   
0x01807B|$06:$806B:D0 0A   	BNE $8077  	; given a main COMMAND menu selection index in A, execute the handler for that menu function
; exit COMMAND menu
; control flow target (from $809A, $89D1, $8A09, $8B0C, $8B3D, $8B9F, $9545, $9558)
0x01807D|$06:$806D:A9 01   	LDA #$01   
; call to code in a different bank ($0F:$CF6A)
0x01807F|$06:$806F:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x018082|$06:$8072:A9 00   	LDA #$00   
0x018084|$06:$8074:85 35   	STA $35    	; flag indicating whether any menu is currently open
0x018086|$06:$8076:60      	RTS        

; given a main COMMAND menu selection index in A, execute the handler for that menu function
; control flow target (from $806B)
0x018087|$06:$8077:0A      	ASL        
0x018088|$06:$8078:A8      	TAY        
0x018089|$06:$8079:B9 86 80	LDA $8086,Y	; COMMAND menu command handler pointers
0x01808C|$06:$807C:85 0C   	STA $0C    
0x01808E|$06:$807E:B9 87 80	LDA $8087,Y
0x018091|$06:$8081:85 0D   	STA $0D    
0x018093|$06:$8083:6C 0C 00	JMP ($000C)


; code -> data
; COMMAND menu command handler pointers
; indexed data load target (from $8079)
0x018096|$06:$8086:A8
; indexed data load target (from $807E)
0x018097|$06:$8087:   80	; $06:$80A8; COMMAND menu TALK command handler
0x018098|$06:$8088:36 8B	; $06:$8B36; COMMAND menu SPELL command handler
0x01809A|$06:$808A:CA 89	; $06:$89CA; COMMAND menu STATUS command handler
0x01809C|$06:$808C:5B 95	; $06:$955B; COMMAND menu ITEM command handler
0x01809E|$06:$808E:17 9B	; $06:$9B17; COMMAND menu SEARCH handler
0x0180A0|$06:$8090:02 8A	; $06:$8A02; COMMAND menu EQUIP handler

; data -> code
; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu
; control flow target (from $80BC, $80C7, $80DA, $80F3, $8139, $816F, $81AF, $8295, $82A0, $82C0, $82D2, $8385, $83B6, $8567, $86D2, $89FF, $8AFC, $8B52, $8B66, $8B87, $8C00, $8C2D, $8C91, $8C9C, $8F4B, $8F67)
0x0180A2|$06:$8092:20 9D 80	JSR $809D  	; wait until all joypad buttons are released and then some button pressed
; wipe menus and exit COMMAND menu
; control flow target (from $80E8, $9071, $90C9, $91C3, $9345)
0x0180A5|$06:$8095:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$CF6A)
0x0180A7|$06:$8097:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x0180AA|$06:$809A:4C 6D 80	JMP $806D  	; exit COMMAND menu

; wait until all joypad buttons are released and then some button pressed
; control flow target (from $8092, $80A0, $89D9, $89F2, $954D, $A257)
; call to code in a different bank ($0F:$D13D)
0x0180AD|$06:$809D:20 3D D1	JSR $D13D  	; wait for interrupt, read joypad data into $2F and A
0x0180B0|$06:$80A0:D0 FB   	BNE $809D  	; wait until all joypad buttons are released and then some button pressed; loop until no buttons pressed
; control flow target (from $80A5)
; call to code in a different bank ($0F:$D13D)
0x0180B2|$06:$80A2:20 3D D1	JSR $D13D  	; wait for interrupt, read joypad data into $2F and A
0x0180B5|$06:$80A5:F0 FB   	BEQ $80A2  	; loop until some button pressed
0x0180B7|$06:$80A7:60      	RTS        

; COMMAND menu TALK command handler
; indirect control flow target (via $8086)
0x0180B8|$06:$80A8:AD 40 05	LDA $0540  	; NPC #$00 ? + direction nybble
0x0180BB|$06:$80AB:29 03   	AND #$03   
; call to code in a different bank ($0F:$CF70)
0x0180BD|$06:$80AD:20 70 CF	JSR $CF70  	; -> $02:$B141
0x0180C0|$06:$80B0:A5 D0   	LDA $D0    	; Malroth status flag (#$FF = defeated, #$00 = alive, others = countdown to battle)
0x0180C2|$06:$80B2:10 0B   	BPL $80BF  	; pre-Malroth dialogue
0x0180C4|$06:$80B4:AD F3 05	LDA $05F3  	; target NPC sprite ID; post-Malroth, most dialogue becomes based on NPC sprite ID
0x0180C7|$06:$80B7:F0 0A   	BEQ $80C3  	; no sprite ID => nobody to talk to
; call to code in a different bank ($0F:$D334)
0x0180C9|$06:$80B9:20 34 D3	JSR $D334  	; post-Malroth dialogue
0x0180CC|$06:$80BC:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; pre-Malroth dialogue
; control flow target (from $80B2)
0x0180CF|$06:$80BF:A5 0C   	LDA $0C    	; dialogue ID
0x0180D1|$06:$80C1:D0 07   	BNE $80CA  	; #$00 => nobody to talk to
; control flow target (from $80B7, $8216)
; call to code in a different bank ($0F:$F6F0)
0x0180D3|$06:$80C3:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x0180D6|$06:$80C6:00	; String ID #$0100: No one is in that direction.[end-FC]

; data -> code
0x0180D7|$06:$80C7:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $80C1)
0x0180DA|$06:$80CA:C9 D7   	CMP #$D7   
0x0180DC|$06:$80CC:D0 0F   	BNE $80DD  
0x0180DE|$06:$80CE:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0180E1|$06:$80D1:A9 00   	LDA #$00   	; Midenhall; useless since string doesn't use [name] control code
; call to code in a different bank ($0F:$FC50)
0x0180E3|$06:$80D3:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2A)
0x0180E6|$06:$80D6:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x0180E9|$06:$80D9:76	; String ID #$0076: ‘Go now, my heir! Our fate is now in thy hands[.’][end-FC]

; data -> code
0x0180EA|$06:$80DA:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $80CC)
0x0180ED|$06:$80DD:C9 D9   	CMP #$D9   
0x0180EF|$06:$80DF:D0 0A   	BNE $80EB  
; call to code in a different bank ($0F:$F6F6)
0x0180F1|$06:$80E1:20 F6 F6	JSR $F6F6  	; open main dialogue window and display string ID specified by byte following JSR + #$0200

; code -> data
; indirect data load target
0x0180F4|$06:$80E4:9A	; String ID #$029A: ‘Would thou allow me to escape and tell Hargon many tidings?’[wait][line]‘Oh, but thou art such a fool[.’][wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$D1E5)
0x0180F5|$06:$80E5:20 E5 D1	JSR $D1E5  	; trigger Fixed Battle #$01: 1 Evil Clown (Map ID #$04: Midenhall B1)
0x0180F8|$06:$80E8:4C 95 80	JMP $8095  	; wipe menus and exit COMMAND menu

; control flow target (from $80DF)
0x0180FB|$06:$80EB:C9 D8   	CMP #$D8   
0x0180FD|$06:$80ED:D0 07   	BNE $80F6  
; call to code in a different bank ($0F:$F6EA)
0x0180FF|$06:$80EF:20 EA F6	JSR $F6EA  	; open main dialogue window and display string ID specified by byte following JSR

; code -> data
; indirect data load target
0x018102|$06:$80F2:67	; String ID #$0067: ‘Open now the treasure chest[.’][end-FC]

; data -> code
0x018103|$06:$80F3:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $80ED)
0x018106|$06:$80F6:C9 01   	CMP #$01   
0x018108|$06:$80F8:D0 62   	BNE $815C  
0x01810A|$06:$80FA:20 CB 9A	JSR $9ACB  	; open dialogue window
0x01810D|$06:$80FD:A9 01   	LDA #$01   	; Cannock; useless since string doesn't use [name] control code
; call to code in a different bank ($0F:$FC50)
0x01810F|$06:$80FF:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018112|$06:$8102:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018115|$06:$8105:55	; String ID #$0155: ‘Hail, friend! I am Prince [name] of Cannock[.’][wait][end-FC]

; data -> code
0x018116|$06:$8106:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$FC50)
0x018118|$06:$8108:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01811B|$06:$810B:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01811E|$06:$810E:56	; String ID #$0156: ‘Art thou my cousin from Midenhall? Ah, it is as I guessed[.’][wait][line]‘I have been seeking thee so that together we may oppose Hargon[.’][wait][line]‘Come, let us go forth[.’][end-FC]

; data -> code
0x01811F|$06:$810F:A9 07   	LDA #$07   	; Music ID #$07: add party member BGM
; call to code in a different bank ($0F:$C58D)
0x018121|$06:$8111:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
0x018124|$06:$8114:AD C0 05	LDA $05C0  	; NPC #$10 motion nybble + direction nybble
0x018127|$06:$8117:29 03   	AND #$03   
0x018129|$06:$8119:0A      	ASL        
0x01812A|$06:$811A:0A      	ASL        
0x01812B|$06:$811B:0A      	ASL        
0x01812C|$06:$811C:AA      	TAX        
0x01812D|$06:$811D:A0 00   	LDY #$00   
; control flow target (from $8129)
0x01812F|$06:$811F:BD 3C 81	LDA $813C,X
0x018132|$06:$8122:99 42 05	STA $0542,Y	; NPC #$00 ?
0x018135|$06:$8125:C8      	INY        
0x018136|$06:$8126:E8      	INX        
0x018137|$06:$8127:C0 08   	CPY #$08   
0x018139|$06:$8129:D0 F4   	BNE $811F  
0x01813B|$06:$812B:A9 84   	LDA #$84   	; add Cannock to party
0x01813D|$06:$812D:8D 3F 06	STA $063F  	; Cannock status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018140|$06:$8130:A9 FF   	LDA #$FF   
0x018142|$06:$8132:8D C1 05	STA $05C1  	; NPC #$10 sprite ID
0x018145|$06:$8135:A9 03   	LDA #$03   
0x018147|$06:$8137:85 CA   	STA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x018149|$06:$8139:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu


; code -> data
; indexed data load target (from $811F, $817D)
0x01814C|$06:$813C:80 7F 00 01 00 00 00 01
0x018154|$06:$8144:70 6F FF 00 00 00 01 01
0x01815C|$06:$814C:80 5F 00 FF 00 00 02 01
0x018164|$06:$8154:90 6F 01 00 00 00 03 01

; data -> code
; control flow target (from $80F8)
0x01816C|$06:$815C:C9 02   	CMP #$02   
0x01816E|$06:$815E:D0 42   	BNE $81A2  
0x018170|$06:$8160:20 CB 9A	JSR $9ACB  	; open dialogue window
; call to code in a different bank ($0F:$FA32)
0x018173|$06:$8163:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018176|$06:$8166:A8	; String ID #$02A8: ‘Woof-woof!’[end-FC]

; data -> code
0x018177|$06:$8167:20 72 81	JSR $8172  
0x01817A|$06:$816A:A9 09   	LDA #$09   	; Sprite ID $#09: Dog
0x01817C|$06:$816C:8D 51 05	STA $0551  	; NPC #$02 sprite ID
0x01817F|$06:$816F:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $8167, $9727)
0x018182|$06:$8172:AD 58 05	LDA $0558  	; NPC #$03 motion nybble + direction nybble
0x018185|$06:$8175:29 03   	AND #$03   
0x018187|$06:$8177:0A      	ASL        
0x018188|$06:$8178:0A      	ASL        
0x018189|$06:$8179:0A      	ASL        
0x01818A|$06:$817A:AA      	TAX        
0x01818B|$06:$817B:A0 00   	LDY #$00   
; control flow target (from $8187)
0x01818D|$06:$817D:BD 3C 81	LDA $813C,X
0x018190|$06:$8180:99 4A 05	STA $054A,Y	; NPC #$01 scripted motion low byte
0x018193|$06:$8183:C8      	INY        
0x018194|$06:$8184:E8      	INX        
0x018195|$06:$8185:C0 08   	CPY #$08   
0x018197|$06:$8187:D0 F4   	BNE $817D  
0x018199|$06:$8189:A9 FF   	LDA #$FF   
0x01819B|$06:$818B:8D 59 05	STA $0559  	; NPC #$03 sprite ID
0x01819E|$06:$818E:A0 08   	LDY #$08   
0x0181A0|$06:$8190:4C 93 81	JMP $8193  	; useless op

; control flow target (from $8190)
0x0181A3|$06:$8193:20 97 81	JSR $8197  
0x0181A6|$06:$8196:C8      	INY        
; control flow target (from $8193)
0x0181A7|$06:$8197:B9 44 05	LDA $0544,Y	; NPC #$01 ?
0x0181AA|$06:$819A:38      	SEC        
0x0181AB|$06:$819B:F9 3C 05	SBC $053C,Y	; NPC #$00 ?
0x0181AE|$06:$819E:99 44 05	STA $0544,Y	; NPC #$01 ?
0x0181B1|$06:$81A1:60      	RTS        

; control flow target (from $815E)
0x0181B2|$06:$81A2:C9 03   	CMP #$03   
0x0181B4|$06:$81A4:D0 0C   	BNE $81B2  
; call to code in a different bank ($0F:$F6F6)
0x0181B6|$06:$81A6:20 F6 F6	JSR $F6F6  	; open main dialogue window and display string ID specified by byte following JSR + #$0200

; code -> data
; indirect data load target
0x0181B9|$06:$81A9:4D	; String ID #$024D: ‘I bid thee welcome to Wellgarth Town[.’][wait][line]‘I shall sing for thee[.’][end-FC]

; data -> code
0x0181BA|$06:$81AA:A9 0C   	LDA #$0C   	; Music ID #$0C: game menu / Wellgarth singer BGM
; call to code in a different bank ($0F:$C561)
0x0181BC|$06:$81AC:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x0181BF|$06:$81AF:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $81A4)
0x0181C2|$06:$81B2:C9 04   	CMP #$04   
0x0181C4|$06:$81B4:D0 03   	BNE $81B9  
0x0181C6|$06:$81B6:4C 34 97	JMP $9734  	; unused since no NPC has dialogue ID #$04

; control flow target (from $81B4)
0x0181C9|$06:$81B9:C9 05   	CMP #$05   
0x0181CB|$06:$81BB:D0 08   	BNE $81C5  
0x0181CD|$06:$81BD:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0181D0|$06:$81C0:A9 06   	LDA #$06   	; Save Point ID #$06: Hamlin
0x0181D2|$06:$81C2:4C E3 93	JMP $93E3  	; update save point $48 to A, run through the whole save point sequence

; control flow target (from $81BB)
0x0181D5|$06:$81C5:C9 0A   	CMP #$0A   	; useless op
0x0181D7|$06:$81C7:B0 00   	BCS $81C9  	; useless op
; control flow target (from $81C7)
0x0181D9|$06:$81C9:C9 14   	CMP #$14   
0x0181DB|$06:$81CB:B0 03   	BCS $81D0  
0x0181DD|$06:$81CD:4C 19 82	JMP $8219  	; handler for dialogue IDs #$0A-#$13 (Innkeepers)

; control flow target (from $81CB)
0x0181E0|$06:$81D0:C9 1C   	CMP #$1C   
0x0181E2|$06:$81D2:B0 03   	BCS $81D7  
0x0181E4|$06:$81D4:4C AD 82	JMP $82AD  	; handler for dialogue IDs #$14-#$1B (Weapon Shops)

; control flow target (from $81D2)
0x0181E7|$06:$81D7:C9 27   	CMP #$27   
0x0181E9|$06:$81D9:B0 03   	BCS $81DE  
0x0181EB|$06:$81DB:4C 9A 83	JMP $839A  	; handler for dialogue IDs #$1C-#$26 (Item Shops)

; control flow target (from $81D9)
0x0181EE|$06:$81DE:C9 28   	CMP #$28   
0x0181F0|$06:$81E0:B0 03   	BCS $81E5  
0x0181F2|$06:$81E2:4C 4E 85	JMP $854E  	; handler for dialogue ID #$27 (House of Healing)

; control flow target (from $81E0)
0x0181F5|$06:$81E5:C9 29   	CMP #$29   
0x0181F7|$06:$81E7:B0 03   	BCS $81EC  
0x0181F9|$06:$81E9:4C C0 86	JMP $86C0  	; handler for dialogue ID #$28 (Lottery)

; control flow target (from $81E7)
0x0181FC|$06:$81EC:C9 95   	CMP #$95   
0x0181FE|$06:$81EE:B0 03   	BCS $81F3  
0x018200|$06:$81F0:4C 06 8E	JMP $8E06  	; handler for dialogue IDs #$29-#$94 (open dialogue window and display string specified by A + #$1D7, i.e. String IDs #$0200-#$026B)

; control flow target (from $81EE)
0x018203|$06:$81F3:C9 9D   	CMP #$9D   
0x018205|$06:$81F5:B0 03   	BCS $81FA  
0x018207|$06:$81F7:4C 44 8E	JMP $8E44  	; handler for dialogue IDs #$95-#$9C (open dialogue window, display string specified by A + #$1D9, display YES/NO menu, and display string corresponding to selected option)

; control flow target (from $81F5)
0x01820A|$06:$81FA:C9 C3   	CMP #$C3   
0x01820C|$06:$81FC:B0 03   	BCS $8201  
0x01820E|$06:$81FE:4C 6A 8E	JMP $8E6A  	; handler for dialogue IDs #$9D-#$C2 (town NPCs with complex logic)

; control flow target (from $81FC)
0x018211|$06:$8201:C9 CD   	CMP #$CD   
0x018213|$06:$8203:B0 03   	BCS $8208  
0x018215|$06:$8205:4C B0 94	JMP $94B0  	; handler for dialogue IDs #$C3-#$CC (open dialogue window and display string specified by A - #$73)

; control flow target (from $8203)
0x018218|$06:$8208:C9 D0   	CMP #$D0   
0x01821A|$06:$820A:B0 03   	BCS $820F  
0x01821C|$06:$820C:4C BE 94	JMP $94BE  	; handler for dialogue IDs #$CD-#$CF (open dialogue window, display string specified by A - #$73, display YES/NO menu, and display string corresponding to selected option)

; control flow target (from $820A)
0x01821F|$06:$820F:C9 D9   	CMP #$D9   
0x018221|$06:$8211:B0 03   	BCS $8216  
0x018223|$06:$8213:4C E4 94	JMP $94E4  	; handler for dialogue IDs #$D0-#$D8 (dungeon NPCs with complex logic)

; control flow target (from $8211)
0x018226|$06:$8216:4C C3 80	JMP $80C3  	; unused since #$D9 was handled earlier and no NPC has dialogue ID > #$D9

; handler for dialogue IDs #$0A-#$13 (Innkeepers)
; control flow target (from $81CD)
0x018229|$06:$8219:38      	SEC        
0x01822A|$06:$821A:E9 0A   	SBC #$0A   	; convert to zero-based
0x01822C|$06:$821C:85 49   	STA $49    	; object hero/target/item/string ID $49
0x01822E|$06:$821E:A8      	TAY        
0x01822F|$06:$821F:B9 80 9F	LDA $9F80,Y	; Inn prices per party member
0x018232|$06:$8222:48      	PHA        	; Inn price per party member
; call to code in a different bank ($0F:$F6CE)
0x018233|$06:$8223:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018236|$06:$8226:85 0C   	STA $0C    	; number of party members - 1
0x018238|$06:$8228:E6 0C   	INC $0C    	; number of party members
0x01823A|$06:$822A:68      	PLA        	; Inn price per party member
0x01823B|$06:$822B:20 AC 86	JSR $86AC  	; multiply A by $0C, store results in ($10-$11) and ($8F-$90); consumes $0C
; call to code in a different bank ($0F:$F6F0)
0x01823E|$06:$822E:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x018241|$06:$8231:7B	; String ID #$017B: ‘Welcome to the Village Inn[.’][wait][line]‘It's only [number] piece[(s)] of gold for the night.[line]Dost thou want a room?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$EB76)
0x018242|$06:$8232:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018245|$06:$8235:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x018246|$06:$8236:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018249|$06:$8239:C9 00   	CMP #$00   	; YES
0x01824B|$06:$823B:D0 5F   	BNE $829C  
0x01824D|$06:$823D:20 31 8D	JSR $8D31  	; given gold amount in $8F-$90, decrease party gold by that amount and SEC if possible, CLC otherwise
0x018250|$06:$8240:90 56   	BCC $8298  
; call to code in a different bank ($0F:$EB76)
0x018252|$06:$8242:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018255|$06:$8245:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x018256|$06:$8246:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018259|$06:$8249:7E	; String ID #$017E: ‘Sleep well[.’][FD][FD][end-FC]

; data -> code
0x01825A|$06:$824A:A2 14   	LDX #$14   
; call to code in a different bank ($0F:$C1EE)
0x01825C|$06:$824C:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x01825F|$06:$824F:A9 FF   	LDA #$FF   
0x018261|$06:$8251:85 0D   	STA $0D    
; call to code in a different bank ($0F:$C2EB)
0x018263|$06:$8253:20 EB C2	JSR $C2EB  
0x018266|$06:$8256:A9 01   	LDA #$01   	; Music ID #$01: Inn BGM
; call to code in a different bank ($0F:$C58D)
0x018268|$06:$8258:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
0x01826B|$06:$825B:20 CC 8D	JSR $8DCC  	; restore full HP to all living party members
0x01826E|$06:$825E:20 EC 8D	JSR $8DEC  	; restore full MP to all living party members
0x018271|$06:$8261:A4 49   	LDY $49    	; object hero/target/item/string ID $49
0x018273|$06:$8263:B9 A3 82	LDA $82A3,Y	; party direction after sleeping at inn (bits 0-1 = Cannock and Moonbrooke direction, 2-3 = Midenhall direction)
0x018276|$06:$8266:29 03   	AND #$03   
0x018278|$06:$8268:18      	CLC        
0x018279|$06:$8269:69 05   	ADC #$05   
0x01827B|$06:$826B:85 45   	STA $45    
; call to code in a different bank ($0F:$CF76)
0x01827D|$06:$826D:20 76 CF	JSR $CF76  
0x018280|$06:$8270:A4 49   	LDY $49    	; object hero/target/item/string ID $49
0x018282|$06:$8272:B9 A3 82	LDA $82A3,Y	; party direction after sleeping at inn (bits 0-1 = Cannock and Moonbrooke direction, 2-3 = Midenhall direction)
0x018285|$06:$8275:4A      	LSR        
0x018286|$06:$8276:4A      	LSR        
0x018287|$06:$8277:8D 40 05	STA $0540  	; NPC #$00 ? + direction nybble
; call to code in a different bank ($0F:$CF64)
0x01828A|$06:$827A:20 64 CF	JSR $CF64  
0x01828D|$06:$827D:A0 00   	LDY #$00   
; control flow target (from $8288)
0x01828F|$06:$827F:B9 E6 C2	LDA $C2E6,Y
0x018292|$06:$8282:99 0D 00	STA $000D,Y
0x018295|$06:$8285:C8      	INY        
0x018296|$06:$8286:C0 05   	CPY #$05   
0x018298|$06:$8288:D0 F5   	BNE $827F  
; call to code in a different bank ($0F:$C2DE)
0x01829A|$06:$828A:20 DE C2	JSR $C2DE  
; call to code in a different bank ($0F:$FA2E)
0x01829D|$06:$828D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182A0|$06:$8290:7F	; String ID #$017F: ‘Ah, good morning.[line]I trust thou art well rested[.’][wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x0182A1|$06:$8291:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182A4|$06:$8294:80	; String ID #$0180: ‘Goodbye[.’][end-FC]

; data -> code
0x0182A5|$06:$8295:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $8240)
; call to code in a different bank ($0F:$FA2E)
0x0182A8|$06:$8298:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182AB|$06:$829B:7D	; String ID #$017D: ‘Sorry, thou hasn't enough gold[.’][wait][end-FC]

; data -> code
; control flow target (from $823B)
; call to code in a different bank ($0F:$FA2E)
0x0182AC|$06:$829C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182AF|$06:$829F:7C	; String ID #$017C: ‘Farewell, stranger[.’][end-FC]

; data -> code
0x0182B0|$06:$82A0:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu


; code -> data
; party direction after sleeping at inn (bits 0-1 = Cannock and Moonbrooke direction, 2-3 = Midenhall direction)
; indexed data load target (from $8263, $8272)
0x0182B3|$06:$82A3:04	; Inn ID #$00, Map IDs #$00/#$03: Fake Midenhall/Midenhall 1F
0x0182B4|$06:$82A4:04	; Inn ID #$01, Map ID #$05: Leftwyne
0x0182B5|$06:$82A5:0E	; Inn ID #$02, Map ID #$06: Cannock
0x0182B6|$06:$82A6:0C	; Inn ID #$03, Map ID #$07: Hamlin
0x0182B7|$06:$82A7:04	; Inn ID #$04, Map ID #$0B: Lianport
0x0182B8|$06:$82A8:0C	; Inn ID #$05, Map ID #$0C: Tantegel
0x0182B9|$06:$82A9:0C	; Inn ID #$06, Map ID #$0F: Osterfair
0x0182BA|$06:$82AA:0C	; Inn ID #$07, Map ID #$10: Zahan
0x0182BB|$06:$82AB:0F	; Inn ID #$08, Map ID #$11: Tuhn / Map ID #$14: Wellgarth Underground
0x0182BC|$06:$82AC:0C	; Inn ID #$09, Map ID #$15: Beran

; data -> code
; handler for dialogue IDs #$14-#$1B (Weapon Shops)
; control flow target (from $81D4)
0x0182BD|$06:$82AD:85 49   	STA $49    	; object hero/target/item/string ID $49
0x0182BF|$06:$82AF:C9 18   	CMP #$18   	; Weapon Shop ID #04, Map ID #$0F: Osterfair
0x0182C1|$06:$82B1:D0 10   	BNE $82C3  
0x0182C3|$06:$82B3:AD C0 05	LDA $05C0  	; NPC #$10 motion nybble + direction nybble
0x0182C6|$06:$82B6:29 03   	AND #$03   
0x0182C8|$06:$82B8:C9 01   	CMP #$01   	; Right
0x0182CA|$06:$82BA:F0 07   	BEQ $82C3  	; talking to the shopkeeper from behind the counter, use a different string
; call to code in a different bank ($0F:$F6F6)
0x0182CC|$06:$82BC:20 F6 F6	JSR $F6F6  	; open main dialogue window and display string ID specified by byte following JSR + #$0200

; code -> data
; indirect data load target
0x0182CF|$06:$82BF:CE	; String ID #$02CE: ‘Do not enter this place!’[end-FC]

; data -> code
0x0182D0|$06:$82C0:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $82B1, $82BA)
; call to code in a different bank ($0F:$F6F0)
0x0182D3|$06:$82C3:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x0182D6|$06:$82C6:5B	; String ID #$015B: ‘We deal in weapons and armor.[line]Dost thou wish to see them?’[FD][FD][end-FC]

; data -> code
0x0182D7|$06:$82C7:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0182DA|$06:$82CA:C9 00   	CMP #$00   	; YES
0x0182DC|$06:$82CC:F0 07   	BEQ $82D5  
; finish weapon transaction
; control flow target (from $82E3, $8318, $8367)
; call to code in a different bank ($0F:$FA2E)
0x0182DE|$06:$82CE:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182E1|$06:$82D1:5D	; String ID #$015D: ‘Come again[.’][end-FC]

; data -> code
0x0182E2|$06:$82D2:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $82CC, $836A)
; call to code in a different bank ($0F:$FA2E)
0x0182E5|$06:$82D5:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182E8|$06:$82D8:5C	; String ID #$015C: ‘What would thou purchase?’[FD][FD][end-FC]

; data -> code
0x0182E9|$06:$82D9:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x0182EB|$06:$82DB:38      	SEC        
0x0182EC|$06:$82DC:E9 14   	SBC #$14   	; convert to Shop ID
; call to code in a different bank ($0F:$F61B)
0x0182EE|$06:$82DE:20 1B F6	JSR $F61B  	; display shop menu item list for shop ID given in A, returning selected item (with Jailor's Key replaced by blank) in A
0x0182F1|$06:$82E1:C9 FF   	CMP #$FF   
0x0182F3|$06:$82E3:F0 E9   	BEQ $82CE  	; finish weapon transaction
0x0182F5|$06:$82E5:20 4D 8D	JSR $8D4D  	; given item ID in A, save it to $96 and set $8F-$90 to purchase price of item, accounting for possible Golden Card discount; decrease party gold by that amount and SEC if possible, CLC otherwise
0x0182F8|$06:$82E8:B0 07   	BCS $82F1  	; branch if price of item was deducted from party gold
; call to code in a different bank ($0F:$FA2E)
0x0182FA|$06:$82EA:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0182FD|$06:$82ED:5E	; String ID #$015E: ‘Sorry, it seems thou hast not enough gold[.’][wait][end-FC]

; data -> code
0x0182FE|$06:$82EE:4C 5C 83	JMP $835C  

; control flow target (from $82E8)
; call to code in a different bank ($0F:$F6CE)
0x018301|$06:$82F1:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018304|$06:$82F4:C9 00   	CMP #$00   
0x018306|$06:$82F6:D0 0E   	BNE $8306  	; if Midenhall is alone, no need to ask who to give it to
0x018308|$06:$82F8:20 6D 83	JSR $836D  	; given hero ID in A and item ID in $96, try to add item to first empty slot in hero's inventory; if unable to add, refund purchase, pop JSR return address and JMP $8092 instead
0x01830B|$06:$82FB:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x01830D|$06:$82FD:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2E)
0x01830F|$06:$82FF:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018312|$06:$8302:5F	; String ID #$015F: ‘The [item], is it? Good choice and many thanks[.’][wait][end-FC]

; data -> code
0x018313|$06:$8303:4C 4C 83	JMP $834C  

; control flow target (from $82F6)
0x018316|$06:$8306:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x018318|$06:$8308:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2E)
0x01831A|$06:$830A:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01831D|$06:$830D:62	; String ID #$0162: ‘The [item]? Who will take this?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$F595)
0x01831E|$06:$830E:20 95 F5	JSR $F595  	; display appropriate shop BUY/SELL hero select menu
0x018321|$06:$8311:C9 FF   	CMP #$FF   
0x018323|$06:$8313:D0 06   	BNE $831B  
; control flow target (from $8330)
0x018325|$06:$8315:20 88 83	JSR $8388  	; add the number at $8F-$90 to party gold; no check for overflow, so this is only safe to use when reverting a sale
0x018328|$06:$8318:4C CE 82	JMP $82CE  	; finish weapon transaction

; control flow target (from $8313)
0x01832B|$06:$831B:85 97   	STA $97    	; subject hero ID $97
0x01832D|$06:$831D:20 A3 A3	JSR $A3A3  	; given item ID in $96 and hero ID in $97, set A to #$80 if hero can equip item, #$00 otherwise
0x018330|$06:$8320:C9 00   	CMP #$00   
0x018332|$06:$8322:D0 0E   	BNE $8332  
0x018334|$06:$8324:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018337|$06:$8327:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01833A|$06:$832A:91	; String ID #$0191: ‘[name] cannot be equipped with the [item]. Is it all right?’[end-FC]

; data -> code
0x01833B|$06:$832B:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01833E|$06:$832E:C9 00   	CMP #$00   
0x018340|$06:$8330:D0 E3   	BNE $8315  
; control flow target (from $8322)
0x018342|$06:$8332:A5 97   	LDA $97    	; subject hero ID $97
0x018344|$06:$8334:20 6D 83	JSR $836D  	; given hero ID in A and item ID in $96, try to add item to first empty slot in hero's inventory; if unable to add, refund purchase, pop JSR return address and JMP $8092 instead
0x018347|$06:$8337:A9 80   	LDA #$80   	; Alive
0x018349|$06:$8339:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x01834C|$06:$833C:90 0A   	BCC $8348  
0x01834E|$06:$833E:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018351|$06:$8341:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018354|$06:$8344:63	; String ID #$0163: ‘Splendid, [name]!’[wait][end-FC]

; data -> code
0x018355|$06:$8345:4C 4C 83	JMP $834C  

; control flow target (from $833C)
; call to code in a different bank ($0F:$FA2E)
0x018358|$06:$8348:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01835B|$06:$834B:64	; String ID #$0164: ‘Well, I'll just give it to the ghost, eh?’[wait][end-FC]

; data -> code
; control flow target (from $8303, $8345)
0x01835C|$06:$834C:A9 32   	LDA #$32   	; Item ID #$32: Golden Card
0x01835E|$06:$834E:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x018361|$06:$8351:C9 FF   	CMP #$FF   
0x018363|$06:$8353:F0 07   	BEQ $835C  
0x018365|$06:$8355:20 11 8D	JSR $8D11  	; given item ID in $96 and discount amount in $8F-$90, set $8F-$90 to discounted item price
; call to code in a different bank ($0F:$FA2E)
0x018368|$06:$8358:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01836B|$06:$835B:60	; String ID #$0160: ‘Since thou hast the Golden Card I shall give thee a special discount of [number] piece[(s)] of gold[.’][wait][end-FC]

; data -> code
; control flow target (from $82EE, $8353)
; call to code in a different bank ($0F:$FA2E)
0x01836C|$06:$835C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01836F|$06:$835F:61	; String ID #$0161: ‘Can I interest thee in anything else?’[FD][FD][end-FC]

; data -> code
0x018370|$06:$8360:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018373|$06:$8363:C9 00   	CMP #$00   	; YES
0x018375|$06:$8365:F0 03   	BEQ $836A  
0x018377|$06:$8367:4C CE 82	JMP $82CE  	; finish weapon transaction

; control flow target (from $8365)
0x01837A|$06:$836A:4C D5 82	JMP $82D5  

; given hero ID in A and item ID in $96, try to add item to first empty slot in hero's inventory; if unable to add, refund purchase, pop JSR return address and JMP $8092 instead
; control flow target (from $82F8, $8334)
0x01837D|$06:$836D:85 97   	STA $97    	; subject hero ID $97
0x01837F|$06:$836F:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x018382|$06:$8372:90 05   	BCC $8379  
; call to code in a different bank ($0F:$EB76)
0x018384|$06:$8374:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018387|$06:$8377:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x018388|$06:$8378:60      	RTS        

; control flow target (from $8372)
0x018389|$06:$8379:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01838C|$06:$837C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01838F|$06:$837F:65	; String ID #$0165: ‘It seems [name] has no more room to carry things[.’][end-FC]

; data -> code
0x018390|$06:$8380:20 88 83	JSR $8388  	; add the number at $8F-$90 to party gold; no check for overflow, so this is only safe to use when reverting a sale
0x018393|$06:$8383:68      	PLA        
0x018394|$06:$8384:68      	PLA        
0x018395|$06:$8385:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; add the number at $8F-$90 to party gold; no check for overflow, so this is only safe to use when reverting a sale
; control flow target (from $8315, $8380, $8403)
0x018398|$06:$8388:A5 8F   	LDA $8F    
0x01839A|$06:$838A:18      	CLC        
0x01839B|$06:$838B:6D 24 06	ADC $0624  	; party gold, low byte
0x01839E|$06:$838E:8D 24 06	STA $0624  	; party gold, low byte
0x0183A1|$06:$8391:A5 90   	LDA $90    
0x0183A3|$06:$8393:6D 25 06	ADC $0625  	; party gold, high byte
0x0183A6|$06:$8396:8D 25 06	STA $0625  	; party gold, high byte
0x0183A9|$06:$8399:60      	RTS        

; handler for dialogue IDs #$1C-#$26 (Item Shops)
; control flow target (from $81DB)
0x0183AA|$06:$839A:38      	SEC        
0x0183AB|$06:$839B:E9 14   	SBC #$14   	; convert to Shop ID
0x0183AD|$06:$839D:85 49   	STA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$F6F0)
0x0183AF|$06:$839F:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x0183B2|$06:$83A2:66	; String ID #$0166: ‘We deal in tools.[line]What can I offer thee?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$EB76)
0x0183B3|$06:$83A3:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x0183B6|$06:$83A6:18	; Menu ID #$18: Shop menu: BUY/SELL

; data -> code
0x0183B7|$06:$83A7:C9 FF   	CMP #$FF   
0x0183B9|$06:$83A9:F0 07   	BEQ $83B2  	; finish item transaction
0x0183BB|$06:$83AB:C9 00   	CMP #$00   	; BUY
0x0183BD|$06:$83AD:F0 15   	BEQ $83C4  	; BUY handler
0x0183BF|$06:$83AF:4C 85 84	JMP $8485  	; SELL handler

; finish item transaction
; control flow target (from $83A9, $83C2, $83CF, $83DE, $8406, $8497, $84B4)
; call to code in a different bank ($0F:$FA2E)
0x0183C2|$06:$83B2:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0183C5|$06:$83B5:70	; String ID #$0170: ‘Good day, then[.’][end-FC]

; data -> code
0x0183C6|$06:$83B6:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $83EB, $8469, $8482)
; call to code in a different bank ($0F:$FA2E)
0x0183C9|$06:$83B9:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0183CC|$06:$83BC:6F	; String ID #$016F: ‘Dost thou need anything else?’[FD][FD][end-FC]

; data -> code
0x0183CD|$06:$83BD:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0183D0|$06:$83C0:C9 00   	CMP #$00   	; YES
0x0183D2|$06:$83C2:D0 EE   	BNE $83B2  	; finish item transaction
; BUY handler
; control flow target (from $83AD)
; call to code in a different bank ($0F:$FA2E)
0x0183D4|$06:$83C4:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0183D7|$06:$83C7:67	; String ID #$0167: ‘What dost thou want?’[FD][FD][end-FC]

; data -> code
0x0183D8|$06:$83C8:A5 49   	LDA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$F61B)
0x0183DA|$06:$83CA:20 1B F6	JSR $F61B  	; display shop menu item list for shop ID given in A, returning selected item (with Jailor's Key replaced by blank) in A
0x0183DD|$06:$83CD:C9 FF   	CMP #$FF   
0x0183DF|$06:$83CF:F0 E1   	BEQ $83B2  	; finish item transaction
0x0183E1|$06:$83D1:C9 00   	CMP #$00   	; Jailor's Key converted to #$00
0x0183E3|$06:$83D3:D0 0D   	BNE $83E2  
; call to code in a different bank ($0F:$FA32)
0x0183E5|$06:$83D5:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0183E8|$06:$83D8:DA	; String ID #$02DA: ‘So thou hast heard about my wares[.’][wait][line]‘A bit expensive, maybe, but such fine craftsmanship![line]Will thou take it?’[FD][FD][end-FC]

; data -> code
0x0183E9|$06:$83D9:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0183EC|$06:$83DC:C9 00   	CMP #$00   	; YES
0x0183EE|$06:$83DE:D0 D2   	BNE $83B2  	; finish item transaction
0x0183F0|$06:$83E0:A9 39   	LDA #$39   	; Item ID #$39: Jailor’s Key
; control flow target (from $83D3)
0x0183F2|$06:$83E2:20 4D 8D	JSR $8D4D  	; given item ID in A, save it to $96 and set $8F-$90 to purchase price of item, accounting for possible Golden Card discount; decrease party gold by that amount and SEC if possible, CLC otherwise
0x0183F5|$06:$83E5:B0 07   	BCS $83EE  
; call to code in a different bank ($0F:$FA2E)
0x0183F7|$06:$83E7:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0183FA|$06:$83EA:68	; String ID #$0168: ‘Unfortunately, thou hast not enough gold for that[.’][wait][end-FC]

; data -> code
0x0183FB|$06:$83EB:4C B9 83	JMP $83B9  

; control flow target (from $83E5)
; call to code in a different bank ($0F:$F6CE)
0x0183FE|$06:$83EE:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018401|$06:$83F1:C9 00   	CMP #$00   
0x018403|$06:$83F3:D0 1F   	BNE $8414  	; if Midenhall is alone, no need to ask who to give it to
0x018405|$06:$83F5:85 97   	STA $97    	; subject hero ID $97
0x018407|$06:$83F7:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x01840A|$06:$83FA:B0 0D   	BCS $8409  
0x01840C|$06:$83FC:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01840F|$06:$83FF:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018412|$06:$8402:6C	; String ID #$016C: ‘Sorry. Thou cannot carry more[.’][wait][end-FC]

; data -> code
; revert sale, finish item transaction
; control flow target (from $842E, $8448)
0x018413|$06:$8403:20 88 83	JSR $8388  	; add the number at $8F-$90 to party gold; no check for overflow, so this is only safe to use when reverting a sale
0x018416|$06:$8406:4C B2 83	JMP $83B2  	; finish item transaction

; control flow target (from $83FA)
0x018419|$06:$8409:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x01841B|$06:$840B:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2E)
0x01841D|$06:$840D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018420|$06:$8410:69	; String ID #$0169: ‘The [item], eh? I thank thee[.’][wait][end-FC]

; data -> code
0x018421|$06:$8411:4C 55 84	JMP $8455  

; control flow target (from $83F3)
0x018424|$06:$8414:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x018426|$06:$8416:C9 39   	CMP #$39   	; Item ID #$39: Jailor’s Key
0x018428|$06:$8418:D0 07   	BNE $8421  
; call to code in a different bank ($0F:$FA32)
0x01842A|$06:$841A:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01842D|$06:$841D:DB	; String ID #$02DB: ‘Tell nobody that I have sold it[.’][wait][end-FC]

; data -> code
0x01842E|$06:$841E:4C 4A 84	JMP $844A  

; control flow target (from $8418)
0x018431|$06:$8421:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2E)
0x018433|$06:$8423:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018436|$06:$8426:6A	; String ID #$016A: ‘Thou will buy the [item]?[line]And who will carry it?’[FD][FD][end-FC]

; data -> code
; control flow target (from $844E)
; call to code in a different bank ($0F:$F595)
0x018437|$06:$8427:20 95 F5	JSR $F595  	; display appropriate shop BUY/SELL hero select menu
0x01843A|$06:$842A:C9 FF   	CMP #$FF   
0x01843C|$06:$842C:D0 03   	BNE $8431  
0x01843E|$06:$842E:4C 03 84	JMP $8403  	; revert sale, finish item transaction

; control flow target (from $842C)
0x018441|$06:$8431:85 97   	STA $97    	; subject hero ID $97
0x018443|$06:$8433:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x018446|$06:$8436:B0 19   	BCS $8451  
0x018448|$06:$8438:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01844B|$06:$843B:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01844E|$06:$843E:6C	; String ID #$016C: ‘Sorry. Thou cannot carry more[.’][wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x01844F|$06:$843F:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018452|$06:$8442:6D	; String ID #$016D: ‘Will one of thy companions carry it?’[FD][FD][end-FC]

; data -> code
0x018453|$06:$8443:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018456|$06:$8446:C9 00   	CMP #$00   	; YES
0x018458|$06:$8448:D0 B9   	BNE $8403  	; revert sale, finish item transaction
; control flow target (from $841E)
; call to code in a different bank ($0F:$FA2E)
0x01845A|$06:$844A:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01845D|$06:$844D:6E	; String ID #$016E: ‘Who shall take it?’[FD][FD][end-FC]

; data -> code
0x01845E|$06:$844E:4C 27 84	JMP $8427  

; control flow target (from $8436)
; call to code in a different bank ($0F:$FA2E)
0x018461|$06:$8451:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018464|$06:$8454:6B	; String ID #$016B: ‘I thank thee kindly[.’][wait][end-FC]

; data -> code
; control flow target (from $8411)
; call to code in a different bank ($0F:$EB76)
0x018465|$06:$8455:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018468|$06:$8458:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x018469|$06:$8459:A9 32   	LDA #$32   	; Item ID #$32: Golden Card
0x01846B|$06:$845B:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x01846E|$06:$845E:C9 FF   	CMP #$FF   
0x018470|$06:$8460:F0 0A   	BEQ $846C  
0x018472|$06:$8462:20 11 8D	JSR $8D11  	; given item ID in $96 and discount amount in $8F-$90, set $8F-$90 to discounted item price
; call to code in a different bank ($0F:$FA2E)
0x018475|$06:$8465:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018478|$06:$8468:71	; String ID #$0171: ‘I see thou hast a Golden Card, but I will offer only a discount of [number] piece[(s)] of gold[.’][wait][end-FC]

; data -> code
; control flow target (from $8473, $847C)
0x018479|$06:$8469:4C B9 83	JMP $83B9  

; control flow target (from $8460)
; call to code in a different bank ($0F:$C3AB)
0x01847C|$06:$846C:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x01847F|$06:$846F:A5 32   	LDA $32    	; RNG byte 0
0x018481|$06:$8471:C9 2B   	CMP #$2B   	; odds of getting a Lottery Ticket = 43/256
0x018483|$06:$8473:B0 F4   	BCS $8469  
0x018485|$06:$8475:A9 33   	LDA #$33   	; Item ID #$33: Lottery Ticket
0x018487|$06:$8477:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x018489|$06:$8479:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x01848C|$06:$847C:90 EB   	BCC $8469  
; call to code in a different bank ($0F:$FA2E)
0x01848E|$06:$847E:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018491|$06:$8481:9D	; String ID #$019D: ‘With my compliments, here is an extra lottery ticket[.’][wait][end-FC]

; data -> code
0x018492|$06:$8482:4C B9 83	JMP $83B9  

; SELL handler
; control flow target (from $83AF)
; call to code in a different bank ($0F:$F6CE)
0x018495|$06:$8485:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018498|$06:$8488:C9 00   	CMP #$00   
0x01849A|$06:$848A:F0 0E   	BEQ $849A  	; if Midenhall is alone, no need to ask who's selling
; call to code in a different bank ($0F:$FA2E)
0x01849C|$06:$848C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01849F|$06:$848F:72	; String ID #$0172: ‘Whose property will thou sell?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$F595)
0x0184A0|$06:$8490:20 95 F5	JSR $F595  	; display appropriate shop BUY/SELL hero select menu
0x0184A3|$06:$8493:C9 FF   	CMP #$FF   
0x0184A5|$06:$8495:D0 03   	BNE $849A  
0x0184A7|$06:$8497:4C B2 83	JMP $83B2  	; finish item transaction

; control flow target (from $848A, $8495)
0x0184AA|$06:$849A:85 97   	STA $97    	; subject hero ID $97
; control flow target (from $850D)
0x0184AC|$06:$849C:A5 97   	LDA $97    	; subject hero ID $97
0x0184AE|$06:$849E:0A      	ASL        	; 8 inventory items per hero
0x0184AF|$06:$849F:0A      	ASL        
0x0184B0|$06:$84A0:0A      	ASL        
0x0184B1|$06:$84A1:A8      	TAY        	; hero inventory read index
0x0184B2|$06:$84A2:A2 08   	LDX #$08   	; 8 inventory items per hero; loop counter
; control flow target (from $84AB)
0x0184B4|$06:$84A4:B9 00 06	LDA $0600,Y	; Midenhall inventory item 1 (| #$40 if equipped)
0x0184B7|$06:$84A7:D0 0E   	BNE $84B7  
0x0184B9|$06:$84A9:C8      	INY        	; hero inventory read index
0x0184BA|$06:$84AA:CA      	DEX        	; loop counter
0x0184BB|$06:$84AB:D0 F7   	BNE $84A4  
0x0184BD|$06:$84AD:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x0184C0|$06:$84B0:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0184C3|$06:$84B3:73	; String ID #$0173: ‘But [name] hast nothing to sell[.’][wait][end-FC]

; data -> code
; finish item transaction
; control flow target (from $84CF, $850B)
0x0184C4|$06:$84B4:4C B2 83	JMP $83B2  	; finish item transaction

; control flow target (from $84A7)
; call to code in a different bank ($0F:$FA2E)
0x0184C7|$06:$84B7:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0184CA|$06:$84BA:74	; String ID #$0174: ‘Which art thou going to sell?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$EB76)
0x0184CB|$06:$84BB:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x0184CE|$06:$84BE:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x0184CF|$06:$84BF:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F5FE)
0x0184D1|$06:$84C1:20 FE F5	JSR $F5FE  	; given a hero ID in A, open hero's item list and return selected item ID (or #$FE if they have no items)
0x0184D4|$06:$84C4:86 49   	STX $49    	; object hero/target/item/string ID $49
0x0184D6|$06:$84C6:48      	PHA        	; item ID
0x0184D7|$06:$84C7:A9 03   	LDA #$03   
; call to code in a different bank ($0F:$CF6A)
0x0184D9|$06:$84C9:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x0184DC|$06:$84CC:68      	PLA        	; item ID
0x0184DD|$06:$84CD:C9 FF   	CMP #$FF   
0x0184DF|$06:$84CF:F0 E3   	BEQ $84B4  	; finish item transaction
0x0184E1|$06:$84D1:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x0184E3|$06:$84D3:29 3F   	AND #$3F   	; strip off the equipped bit
0x0184E5|$06:$84D5:0A      	ASL        
0x0184E6|$06:$84D6:A8      	TAY        
0x0184E7|$06:$84D7:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x0184EA|$06:$84DA:85 8F   	STA $8F    
0x0184EC|$06:$84DC:B9 FD 9F	LDA $9FFD,Y	; Item Prices, high byte
0x0184EF|$06:$84DF:85 90   	STA $90    
0x0184F1|$06:$84E1:46 90   	LSR $90    	; LSR 16-bit $8F-$90
0x0184F3|$06:$84E3:66 8F   	ROR $8F    
0x0184F5|$06:$84E5:46 90   	LSR $90    	; LSR 16-bit $8F-$90
0x0184F7|$06:$84E7:66 8F   	ROR $8F    
0x0184F9|$06:$84E9:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x0184FC|$06:$84EC:38      	SEC        
0x0184FD|$06:$84ED:E5 8F   	SBC $8F    
0x0184FF|$06:$84EF:85 8F   	STA $8F    
0x018501|$06:$84F1:B9 FD 9F	LDA $9FFD,Y	; Item Prices, high byte
0x018504|$06:$84F4:E5 90   	SBC $90    
0x018506|$06:$84F6:85 90   	STA $90    	; at this point item sell price is 75% of base price
0x018508|$06:$84F8:A5 8F   	LDA $8F    	; check if sell price is zero
0x01850A|$06:$84FA:05 90   	ORA $90    
0x01850C|$06:$84FC:D0 12   	BNE $8510  	; sell price of zero => key item
; call to code in a different bank ($0F:$FA2E)
0x01850E|$06:$84FE:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018511|$06:$8501:75	; String ID #$0175: ‘Sorry, friend, but I cannot buy that[.’][wait][end-FC]

; data -> code
; control flow target (from $8523, $8544, $854B)
; call to code in a different bank ($0F:$FA2E)
0x018512|$06:$8502:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018515|$06:$8505:79	; String ID #$0179: ‘Art thou going to sell more?’[FD][FD][end-FC]

; data -> code
0x018516|$06:$8506:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018519|$06:$8509:C9 00   	CMP #$00   	; YES
0x01851B|$06:$850B:D0 A7   	BNE $84B4  	; finish item transaction
0x01851D|$06:$850D:4C 9C 84	JMP $849C  

; control flow target (from $84FC)
0x018520|$06:$8510:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x018522|$06:$8512:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2E)
0x018524|$06:$8514:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018527|$06:$8517:76	; String ID #$0176: ‘Thy [item]? Well, I'll give thee [number] piece[(s)] of gold for that[.’][FD][FD][end-FC]

; data -> code
0x018528|$06:$8518:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01852B|$06:$851B:C9 00   	CMP #$00   	; YES
0x01852D|$06:$851D:F0 07   	BEQ $8526  
; call to code in a different bank ($0F:$FA2E)
0x01852F|$06:$851F:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018532|$06:$8522:77	; String ID #$0177: ‘That's too bad[.’][wait][end-FC]

; data -> code
0x018533|$06:$8523:4C 02 85	JMP $8502  

; control flow target (from $851D)
0x018536|$06:$8526:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x018538|$06:$8528:20 0F 8B	JSR $8B0F  	; given hero ID in $97 and hero inventory index in X, return corresponding item ID in A and party inventory index in X
0x01853B|$06:$852B:8A      	TXA        	; don't care about the item ID, just want the party inventory ID
0x01853C|$06:$852C:A8      	TAY        
0x01853D|$06:$852D:20 23 8B	JSR $8B23  	; given party inventory index in Y, CLC and return equipped item ID in A if corresponding item is equipped and cursed, SEC and return unequipped item ID in A otherwise
0x018540|$06:$8530:90 15   	BCC $8547  
; call to code in a different bank ($0F:$FA2E)
0x018542|$06:$8532:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018545|$06:$8535:78	; String ID #$0178: ‘I thank thee[.’][wait][end-FC]

; data -> code
0x018546|$06:$8536:20 F5 8C	JSR $8CF5  	; add $8F-$90 to party gold, capped at $FFFF
0x018549|$06:$8539:A5 97   	LDA $97    	; subject hero ID $97
0x01854B|$06:$853B:A6 49   	LDX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$C4D4)
0x01854D|$06:$853D:20 D4 C4	JSR $C4D4  	; given hero ID in A and hero inventory offset in X, remove that item from hero's inventory and move all lower items up 1 slot
; call to code in a different bank ($0F:$EB76)
0x018550|$06:$8540:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018553|$06:$8543:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x018554|$06:$8544:4C 02 85	JMP $8502  

; control flow target (from $8530)
; call to code in a different bank ($0F:$FA2E)
0x018557|$06:$8547:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01855A|$06:$854A:7A	; String ID #$017A: ‘I fear it won't come off due to the curse[.’][wait][end-FC]

; data -> code
0x01855B|$06:$854B:4C 02 85	JMP $8502  

; handler for dialogue ID #$27 (House of Healing)
; control flow target (from $81E2)
0x01855E|$06:$854E:38      	SEC        
0x01855F|$06:$854F:E9 27   	SBC #$27   	; LDA #$00 would have been shorter and faster
0x018561|$06:$8551:85 49   	STA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$F6F0)
0x018563|$06:$8553:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x018566|$06:$8556:81	; String ID #$0181: ‘Welcome to the House of Healing[.’][wait][end-FC]

; data -> code
; control flow target (from $8573)
; call to code in a different bank ($0F:$FA2E)
0x018567|$06:$8557:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01856A|$06:$855A:82	; String ID #$0182: ‘What service dost thou require?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$EB76)
0x01856B|$06:$855B:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01856E|$06:$855E:1A	; Menu ID #$1A: Priest menu: DETOXICATE/UNCURSE/REVIVAL

; data -> code
0x01856F|$06:$855F:C9 FF   	CMP #$FF   
0x018571|$06:$8561:D0 14   	BNE $8577  
; finish conversation
; control flow target (from $8575, $858E, $85D9, $8632)
; call to code in a different bank ($0F:$FA2E)
0x018573|$06:$8563:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018576|$06:$8566:88	; String ID #$0188: ‘Good luck and hey, let's be careful out there[.’][end-FC]

; data -> code
0x018577|$06:$8567:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; repeat service loop
; control flow target (from $85A0, $85BD, $85F7, $8619, $8645, $866F, $869A)
; call to code in a different bank ($0F:$FA2E)
0x01857A|$06:$856A:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01857D|$06:$856D:87	; String ID #$0187: ‘Can I do anything else for thee?’[FD][FD][end-FC]

; data -> code
0x01857E|$06:$856E:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018581|$06:$8571:C9 00   	CMP #$00   	; YES
0x018583|$06:$8573:F0 E2   	BEQ $8557  
0x018585|$06:$8575:D0 EC   	BNE $8563  	; finish conversation
; control flow target (from $8561)
0x018587|$06:$8577:C9 00   	CMP #$00   	; DETOXICATE
0x018589|$06:$8579:F0 03   	BEQ $857E  	; DETOXICATE handler
0x01858B|$06:$857B:4C C0 85	JMP $85C0  

; DETOXICATE handler
; control flow target (from $8579)
; call to code in a different bank ($0F:$F6CE)
0x01858E|$06:$857E:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018591|$06:$8581:C9 00   	CMP #$00   
0x018593|$06:$8583:F0 0B   	BEQ $8590  	; if Midenhall is alone, no need to ask for target hero
; call to code in a different bank ($0F:$FA2E)
0x018595|$06:$8585:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018598|$06:$8588:83	; String ID #$0183: ‘Who is the patient?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$F595)
0x018599|$06:$8589:20 95 F5	JSR $F595  	; display appropriate shop BUY/SELL hero select menu
0x01859C|$06:$858C:C9 FF   	CMP #$FF   
0x01859E|$06:$858E:F0 D3   	BEQ $8563  	; finish conversation
; control flow target (from $8583)
0x0185A0|$06:$8590:85 97   	STA $97    	; subject hero ID $97
0x0185A2|$06:$8592:A9 20   	LDA #$20   	; Poison
0x0185A4|$06:$8594:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x0185A7|$06:$8597:B0 0A   	BCS $85A3  
0x0185A9|$06:$8599:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x0185AC|$06:$859C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0185AF|$06:$859F:84	; String ID #$0184: ‘Good news, [name] has not been poisoned[.’][wait][end-FC]

; data -> code
0x0185B0|$06:$85A0:4C 6A 85	JMP $856A  	; repeat service loop

; control flow target (from $8597)
0x0185B3|$06:$85A3:A9 02   	LDA #$02   	; DETOXICATE fee is hero level * 2
0x0185B5|$06:$85A5:20 A4 86	JSR $86A4  	; given hero ID in $97, multiply A by that hero's level, store results in ($10-$11) and ($8F-$90); consumes $0C
0x0185B8|$06:$85A8:20 79 86	JSR $8679  	; try to collect payment for House of Healing service; refusal or insufficient gold pops JSP return address and jumps to repeat service loop at $06:$856A
; call to code in a different bank ($0F:$FA2E)
0x0185BB|$06:$85AB:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0185BE|$06:$85AE:86	; String ID #$0186: ‘Now I will administer the antidote to [name].[line]Stand still, please[.’][wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$C515)
0x0185BF|$06:$85AF:20 15 C5	JSR $C515  	; flash screen 10 times
0x0185C2|$06:$85B2:20 AA 8D	JSR $8DAA  	; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
0x0185C5|$06:$85B5:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x0185C8|$06:$85B8:29 DF   	AND #$DF   	; clear Poison
0x0185CA|$06:$85BA:99 2D 06	STA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x0185CD|$06:$85BD:4C 6A 85	JMP $856A  	; repeat service loop

; control flow target (from $857B)
0x0185D0|$06:$85C0:C9 01   	CMP #$01   	; UNCURSE
0x0185D2|$06:$85C2:F0 03   	BEQ $85C7  	; UNCURSE handler
0x0185D4|$06:$85C4:4C 20 86	JMP $8620  	; REVIVAL handler

; UNCURSE handler
; control flow target (from $85C2)
; call to code in a different bank ($0F:$F6CE)
0x0185D7|$06:$85C7:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x0185DA|$06:$85CA:C9 00   	CMP #$00   
0x0185DC|$06:$85CC:F0 0E   	BEQ $85DC  	; if Midenhall is alone, no need to ask for target hero
; call to code in a different bank ($0F:$FA2E)
0x0185DE|$06:$85CE:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0185E1|$06:$85D1:8B	; String ID #$018B: ‘A curse is it?[line]Who needs the cure?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$F595)
0x0185E2|$06:$85D2:20 95 F5	JSR $F595  	; display appropriate shop BUY/SELL hero select menu
0x0185E5|$06:$85D5:C9 FF   	CMP #$FF   
0x0185E7|$06:$85D7:D0 03   	BNE $85DC  
0x0185E9|$06:$85D9:4C 63 85	JMP $8563  	; finish conversation

; control flow target (from $85CC, $85D7)
0x0185EC|$06:$85DC:85 97   	STA $97    	; subject hero ID $97
0x0185EE|$06:$85DE:A9 04   	LDA #$04   	; there are 4 cursed items in the game
0x0185F0|$06:$85E0:85 0C   	STA $0C    
; control flow target (from $85EE)
0x0185F2|$06:$85E2:A4 0C   	LDY $0C    
0x0185F4|$06:$85E4:B9 1B 86	LDA $861B,Y	; list of cursed items (equipped), built in offset from $861C
0x0185F7|$06:$85E7:20 BA 8D	JSR $8DBA  	; given a hero ID in $97 and an item ID in A, SEC if hero has that item, CLC otherwise
0x0185FA|$06:$85EA:B0 0E   	BCS $85FA  
0x0185FC|$06:$85EC:C6 0C   	DEC $0C    
0x0185FE|$06:$85EE:D0 F2   	BNE $85E2  	; loop to check next cursed item
0x018600|$06:$85F0:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018603|$06:$85F3:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018606|$06:$85F6:8C	; String ID #$018C: ‘Hmmm. No. [name] is not cursed[.’][wait][end-FC]

; data -> code
0x018607|$06:$85F7:4C 6A 85	JMP $856A  	; repeat service loop

; control flow target (from $85EA)
0x01860A|$06:$85FA:A9 64   	LDA #$64   	; UNCURSE fee is hero level * 100
0x01860C|$06:$85FC:20 A4 86	JSR $86A4  	; given hero ID in $97, multiply A by that hero's level, store results in ($10-$11) and ($8F-$90); consumes $0C
0x01860F|$06:$85FF:20 79 86	JSR $8679  	; try to collect payment for House of Healing service; refusal or insufficient gold pops JSP return address and jumps to repeat service loop at $06:$856A
; call to code in a different bank ($0F:$FA2E)
0x018612|$06:$8602:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018615|$06:$8605:8D	; String ID #$018D: ‘A curse is like a virus, of course. This medicine should remove it[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$C515)
0x018616|$06:$8606:20 15 C5	JSR $C515  	; flash screen 10 times
0x018619|$06:$8609:A9 04   	LDA #$04   	; there are 4 cursed items in the game
0x01861B|$06:$860B:85 0C   	STA $0C    
; control flow target (from $8617)
0x01861D|$06:$860D:A4 0C   	LDY $0C    
0x01861F|$06:$860F:B9 1B 86	LDA $861B,Y	; list of cursed items (equipped), built in offset from $861C
0x018622|$06:$8612:20 C3 8D	JSR $8DC3  	; given a hero ID in $97 and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise
0x018625|$06:$8615:C6 0C   	DEC $0C    
0x018627|$06:$8617:D0 F4   	BNE $860D  	; loop to keep removing cursed items
0x018629|$06:$8619:4C 6A
; list of cursed items (equipped), built in offset from $861C
; indexed data load target (from $85E4, $860F, $8AC8)
0x01862B|$06:$861B:      85	JMP $856A  	; repeat service loop


; code -> data
; list of equipped cursed items
; indexed data load target (from $8B28)
0x01862C|$06:$861C:6F	; Item ID #$6F: Gremlin’s Tail (equipped)
0x01862D|$06:$861D:4C	; Item ID #$4C: Sword of Destruction (equipped)
0x01862E|$06:$861E:57	; Item ID #$57: Gremlin’s Armor (equipped)
0x01862F|$06:$861F:5F	; Item ID #$5F: Evil Shield (equipped)

; data -> code
; REVIVAL handler
; control flow target (from $85C4)
; call to code in a different bank ($0F:$F6CE)
0x018630|$06:$8620:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018633|$06:$8623:C9 00   	CMP #$00   	; if Midenhall is alone, no need to ask for target hero
0x018635|$06:$8625:F0 0E   	BEQ $8635  
; call to code in a different bank ($0F:$FA2E)
0x018637|$06:$8627:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01863A|$06:$862A:8E	; String ID #$018E: ‘Whom shall I revive?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$F595)
0x01863B|$06:$862B:20 95 F5	JSR $F595  	; display appropriate shop BUY/SELL hero select menu
0x01863E|$06:$862E:C9 FF   	CMP #$FF   
0x018640|$06:$8630:D0 03   	BNE $8635  
0x018642|$06:$8632:4C 63 85	JMP $8563  	; finish conversation

; control flow target (from $8625, $8630)
0x018645|$06:$8635:85 97   	STA $97    	; subject hero ID $97
0x018647|$06:$8637:A9 80   	LDA #$80   	; Alive
0x018649|$06:$8639:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x01864C|$06:$863C:90 0A   	BCC $8648  
0x01864E|$06:$863E:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018651|$06:$8641:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018654|$06:$8644:8F	; String ID #$018F: ‘There, I think [name] will live now[.’][wait][end-FC]

; data -> code
0x018655|$06:$8645:4C 6A 85	JMP $856A  	; repeat service loop

; control flow target (from $863C)
0x018658|$06:$8648:A9 14   	LDA #$14   	; REVIVAL fee is hero level * 20
0x01865A|$06:$864A:20 A4 86	JSR $86A4  	; given hero ID in $97, multiply A by that hero's level, store results in ($10-$11) and ($8F-$90); consumes $0C
0x01865D|$06:$864D:20 79 86	JSR $8679  	; try to collect payment for House of Healing service; refusal or insufficient gold pops JSP return address and jumps to repeat service loop at $06:$856A
; call to code in a different bank ($0F:$FA2E)
0x018660|$06:$8650:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018663|$06:$8653:90	; String ID #$0190: ‘This is a very delicate operation[.’][wait][line]‘It may take a little while[.’][FD][FD][end-FC]

; data -> code
0x018664|$06:$8654:A9 02   	LDA #$02   	; Music ID #$02: revive BGM
; call to code in a different bank ($0F:$C58D)
0x018666|$06:$8656:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
0x018669|$06:$8659:20 AA 8D	JSR $8DAA  	; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
0x01866C|$06:$865C:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01866F|$06:$865F:09 80   	ORA #$80   	; Alive
0x018671|$06:$8661:99 2D 06	STA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018674|$06:$8664:A9 01   	LDA #$01   	; revived with 1 HP
0x018676|$06:$8666:99 3B 06	STA $063B,Y	; Midenhall Current HP, low byte
; call to code in a different bank ($0F:$D302)
0x018679|$06:$8669:20 02 D3	JSR $D302  
; call to code in a different bank ($0F:$C22C)
0x01867C|$06:$866C:20 2C C2	JSR $C22C  
0x01867F|$06:$866F:4C 6A 85	JMP $856A  	; repeat service loop

; call to code in a different bank ($0F:$FA2E)
0x018682|$06:$8672:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
0x018685|$06:$8675:91	; String ID #$0191: ‘[name] cannot be equipped with the [item]. Is it all right?’[end-FC]

; data -> code
0x018686|$06:$8676:4C 7D 86	JMP $867D  

; try to collect payment for House of Healing service; refusal or insufficient gold pops JSP return address and jumps to repeat service loop at $06:$856A
; control flow target (from $85A8, $85FF, $864D)
; call to code in a different bank ($0F:$FA2E)
0x018689|$06:$8679:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01868C|$06:$867C:85	; String ID #$0185: ‘The fee is [number] piece[(s)] of gold.[line]Will thou pay?’[FD][FD][end-FC]

; data -> code
; control flow target (from $8676)
; call to code in a different bank ($0F:$EB76)
0x01868D|$06:$867D:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018690|$06:$8680:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x018691|$06:$8681:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018694|$06:$8684:C9 00   	CMP #$00   	; YES
0x018696|$06:$8686:D0 0C   	BNE $8694  
0x018698|$06:$8688:20 31 8D	JSR $8D31  	; given gold amount in $8F-$90, decrease party gold by that amount and SEC if possible, CLC otherwise
0x01869B|$06:$868B:90 10   	BCC $869D  
; call to code in a different bank ($0F:$EB76)
0x01869D|$06:$868D:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x0186A0|$06:$8690:1B	; Menu ID #$1B: Shop menu: current gold

; data -> code
0x0186A1|$06:$8691:4C 25 8D	JMP $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA

; control flow target (from $8686)
; call to code in a different bank ($0F:$FA2E)
0x0186A4|$06:$8694:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0186A7|$06:$8697:89	; String ID #$0189: ‘Come now, dost thou think leeches grow on trees?’[wait][line]‘I have expenses, taxes to pay, a wife, two kids, and a brand new cow[.’][wait][end-FC]

; data -> code
; control flow target (from $86A1)
0x0186A8|$06:$8698:68      	PLA        
0x0186A9|$06:$8699:68      	PLA        
0x0186AA|$06:$869A:4C 6A 85	JMP $856A  	; repeat service loop

; control flow target (from $868B)
; call to code in a different bank ($0F:$FA2E)
0x0186AD|$06:$869D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0186B0|$06:$86A0:8A	; String ID #$018A: ‘What's this?[line]Thou hast no gold?[line]Well then get some!’[wait][end-FC]

; data -> code
0x0186B1|$06:$86A1:4C 98 86	JMP $8698  

; given hero ID in $97, multiply A by that hero's level, store results in ($10-$11) and ($8F-$90); consumes $0C
; control flow target (from $85A5, $85FC, $864A)
0x0186B4|$06:$86A4:85 0C   	STA $0C    
0x0186B6|$06:$86A6:20 AA 8D	JSR $8DAA  	; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
0x0186B9|$06:$86A9:B9 3E 06	LDA $063E,Y	; Midenhall Level
; multiply A by $0C, store results in ($10-$11) and ($8F-$90); consumes $0C
; control flow target (from $822B)
0x0186BC|$06:$86AC:85 0E   	STA $0E    
0x0186BE|$06:$86AE:A9 00   	LDA #$00   
0x0186C0|$06:$86B0:85 0D   	STA $0D    
0x0186C2|$06:$86B2:85 0F   	STA $0F    
; call to code in a different bank ($0F:$C339)
0x0186C4|$06:$86B4:20 39 C3	JSR $C339  	; 16-bit multiplication: ($10-$11) = ($0C-$0D) * ($0E-$0F); consumes $0C-$0F
0x0186C7|$06:$86B7:A5 10   	LDA $10    
0x0186C9|$06:$86B9:85 8F   	STA $8F    
0x0186CB|$06:$86BB:A5 11   	LDA $11    
0x0186CD|$06:$86BD:85 90   	STA $90    
0x0186CF|$06:$86BF:60      	RTS        

; handler for dialogue ID #$28 (Lottery)
; control flow target (from $81E9)
; call to code in a different bank ($0F:$F6F0)
0x0186D0|$06:$86C0:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x0186D3|$06:$86C3:94	; String ID #$0194: ‘Step right up and welcome to the Lottery.[line]Art thou going to play?’[FD][FD][end-FC]

; data -> code
0x0186D4|$06:$86C4:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0186D7|$06:$86C7:C9 00   	CMP #$00   	; YES
0x0186D9|$06:$86C9:F0 0A   	BEQ $86D5  
; finish lottery conversation
; control flow target (from $86E2, $870B, $8723, $873C)
; call to code in a different bank ($0F:$FA2E)
0x0186DB|$06:$86CB:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0186DE|$06:$86CE:95	; String ID #$0195: ‘Well, perhaps some other time[.’][end-FC]

; data -> code
0x0186DF|$06:$86CF:20 05 89	JSR $8905  
0x0186E2|$06:$86D2:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; control flow target (from $86C9)
0x0186E5|$06:$86D5:A9 33   	LDA #$33   	; Item ID #$33: Lottery Ticket
0x0186E7|$06:$86D7:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0186EA|$06:$86DA:C9 FF   	CMP #$FF   
0x0186EC|$06:$86DC:D0 07   	BNE $86E5  
; call to code in a different bank ($0F:$FA2E)
0x0186EE|$06:$86DE:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0186F1|$06:$86E1:96	; String ID #$0196: ‘I'm afraid thou must have a Lottery Ticket[.’][wait][end-FC]

; data -> code
0x0186F2|$06:$86E2:4C CB 86	JMP $86CB  	; finish lottery conversation

; control flow target (from $86DC)
0x0186F5|$06:$86E5:4A      	LSR        	; convert party inventory index to hero ID
0x0186F6|$06:$86E6:4A      	LSR        
0x0186F7|$06:$86E7:4A      	LSR        
0x0186F8|$06:$86E8:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$FA2E)
0x0186FA|$06:$86EA:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0186FD|$06:$86ED:97	; String ID #$0197: ‘Dost thou wish to hear how the game is played?’[FD][FD][end-FC]

; data -> code
0x0186FE|$06:$86EE:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018701|$06:$86F1:C9 00   	CMP #$00   	; YES
0x018703|$06:$86F3:D0 04   	BNE $86F9  
; call to code in a different bank ($0F:$FA2E)
0x018705|$06:$86F5:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018708|$06:$86F8:98	; String ID #$0198: ‘As the Lottery wheels spin, push thy controller button to stop them[.’][wait][line]‘Three [sun] marks win the first prize--a Golden Card[.’][wait][line]‘Three [star] marks win the second prize--the Wizard's Ring[.’][wait][line][FD][FD]‘There may be further prizes, too[.’][wait][end-FC]

; data -> code
; control flow target (from $86F3)
0x018709|$06:$86F9:20 44 87	JSR $8744  
; call to code in a different bank ($0F:$FA2E)
0x01870C|$06:$86FC:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01870F|$06:$86FF:99	; String ID #$0199: ‘Let's play now!’[FD][FD][no voice][no voice][no voice][no voice][no voice][no voice][no voice][sun] [star] [moon][FD][FD][end-FC]

; data -> code
0x018710|$06:$8700:20 78 87	JSR $8778  
0x018713|$06:$8703:C9 05   	CMP #$05   
0x018715|$06:$8705:D0 07   	BNE $870E  
; call to code in a different bank ($0F:$FA2E)
0x018717|$06:$8707:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01871A|$06:$870A:9C	; String ID #$019C: [wait]‘That was close.[line]As a consolation prize I'll give thee a lottery ticket[.’][wait][end-FC]

; data -> code
0x01871B|$06:$870B:4C CB 86	JMP $86CB  	; finish lottery conversation

; control flow target (from $8705)
0x01871E|$06:$870E:85 8F   	STA $8F    	; prize number
0x018720|$06:$8710:A9 00   	LDA #$00   
0x018722|$06:$8712:85 90   	STA $90    
0x018724|$06:$8714:A9 33   	LDA #$33   	; Item ID #$33: Lottery Ticket
0x018726|$06:$8716:20 C3 8D	JSR $8DC3  	; given a hero ID in $97 and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise
0x018729|$06:$8719:A5 8F   	LDA $8F    
0x01872B|$06:$871B:C9 FF   	CMP #$FF   
0x01872D|$06:$871D:D0 07   	BNE $8726  
; call to code in a different bank ($0F:$FA2E)
0x01872F|$06:$871F:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018732|$06:$8722:9B	; String ID #$019B: [wait]‘Sorry, thou hast lost. Better luck next time[.’][wait][end-FC]

; data -> code
0x018733|$06:$8723:4C CB 86	JMP $86CB  	; finish lottery conversation

; control flow target (from $871D)
0x018736|$06:$8726:A8      	TAY        
0x018737|$06:$8727:B9 3F 87	LDA $873F,Y	; Lottery prizes
0x01873A|$06:$872A:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x01873C|$06:$872C:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x01873E|$06:$872E:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x018741|$06:$8731:E6 8F   	INC $8F    
0x018743|$06:$8733:A9 06   	LDA #$06   	; Music ID #$06: lottery win BGM
; call to code in a different bank ($0F:$C58D)
0x018745|$06:$8735:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
; call to code in a different bank ($0F:$FA2E)
0x018748|$06:$8738:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01874B|$06:$873B:9A	; String ID #$019A: [wait]‘Congratulations![line]Thou hast won prize number [number], the [item]!’[wait][end-FC]

; data -> code
0x01874C|$06:$873C:4C CB 86	JMP $86CB  	; finish lottery conversation


; code -> data
; Lottery prizes
; indexed data load target (from $8727)
0x01874F|$06:$873F:32	; Item ID #$32: Golden Card
0x018750|$06:$8740:3D	; Item ID #$3D: Wizard’s Ring
0x018751|$06:$8741:03	; Item ID #$03: Wizard’s Wand
0x018752|$06:$8742:30	; Item ID #$30: Dragon’s Bane
0x018753|$06:$8743:3C	; Item ID #$3C: Medical Herb

; data -> code
; control flow target (from $86F9)
; call to code in a different bank ($0F:$C3AB)
0x018754|$06:$8744:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x018757|$06:$8747:A5 32   	LDA $32    	; RNG byte 0
0x018759|$06:$8749:4A      	LSR        
0x01875A|$06:$874A:29 78   	AND #$78   
0x01875C|$06:$874C:85 DD   	STA $DD    
0x01875E|$06:$874E:A2 00   	LDX #$00   
0x018760|$06:$8750:20 78 88	JSR $8878  
0x018763|$06:$8753:A5 32   	LDA $32    	; RNG byte 0
0x018765|$06:$8755:0A      	ASL        
0x018766|$06:$8756:0A      	ASL        
0x018767|$06:$8757:0A      	ASL        
0x018768|$06:$8758:29 78   	AND #$78   
0x01876A|$06:$875A:85 DF   	STA $DF    
0x01876C|$06:$875C:A2 08   	LDX #$08   
0x01876E|$06:$875E:20 78 88	JSR $8878  
0x018771|$06:$8761:A5 33   	LDA $33    	; RNG byte 1
0x018773|$06:$8763:29 78   	AND #$78   
0x018775|$06:$8765:85 E1   	STA $E1    
0x018777|$06:$8767:A2 10   	LDX #$10   
0x018779|$06:$8769:20 78 88	JSR $8878  
0x01877C|$06:$876C:A9 00   	LDA #$00   
0x01877E|$06:$876E:85 DE   	STA $DE    
0x018780|$06:$8770:85 E0   	STA $E0    
0x018782|$06:$8772:85 E2   	STA $E2    
0x018784|$06:$8774:20 5B 89	JSR $895B  
0x018787|$06:$8777:60      	RTS        

; control flow target (from $8700)
0x018788|$06:$8778:A9 00   	LDA #$00   
0x01878A|$06:$877A:85 DC   	STA $DC    
0x01878C|$06:$877C:A5 2F   	LDA $2F    	; joypad 1 data
0x01878E|$06:$877E:29 01   	AND #$01   
0x018790|$06:$8780:85 DA   	STA $DA    
; control flow target (from $87D5)
0x018792|$06:$8782:A5 DC   	LDA $DC    
0x018794|$06:$8784:29 07   	AND #$07   
0x018796|$06:$8786:C9 07   	CMP #$07   
0x018798|$06:$8788:F0 1D   	BEQ $87A7  
; control flow target (from $8799)
0x01879A|$06:$878A:20 1F 89	JSR $891F  
0x01879D|$06:$878D:45 DC   	EOR $DC    
0x01879F|$06:$878F:4A      	LSR        
0x0187A0|$06:$8790:90 02   	BCC $8794  
0x0187A2|$06:$8792:E6 DC   	INC $DC    
; control flow target (from $8790)
0x0187A4|$06:$8794:A5 DC   	LDA $DC    
0x0187A6|$06:$8796:4A      	LSR        
0x0187A7|$06:$8797:29 03   	AND #$03   
0x0187A9|$06:$8799:F0 EF   	BEQ $878A  
0x0187AB|$06:$879B:90 0A   	BCC $87A7  
0x0187AD|$06:$879D:0A      	ASL        
0x0187AE|$06:$879E:AA      	TAX        
0x0187AF|$06:$879F:CA      	DEX        
0x0187B0|$06:$87A0:CA      	DEX        
0x0187B1|$06:$87A1:B5 DE   	LDA $DE,X  
0x0187B3|$06:$87A3:09 40   	ORA #$40   
0x0187B5|$06:$87A5:95 DE   	STA $DE,X  
; control flow target (from $8788, $879B)
0x0187B7|$06:$87A7:A2 00   	LDX #$00   
; control flow target (from $87C9)
0x0187B9|$06:$87A9:86 D5   	STX $D5    
0x0187BB|$06:$87AB:8A      	TXA        
0x0187BC|$06:$87AC:0A      	ASL        
0x0187BD|$06:$87AD:0A      	ASL        
0x0187BE|$06:$87AE:85 D6   	STA $D6    
0x0187C0|$06:$87B0:B5 DD   	LDA $DD,X  
0x0187C2|$06:$87B2:85 D7   	STA $D7    
0x0187C4|$06:$87B4:B5 DE   	LDA $DE,X  
0x0187C6|$06:$87B6:85 D8   	STA $D8    
0x0187C8|$06:$87B8:20 1A 88	JSR $881A  
0x0187CB|$06:$87BB:A6 D5   	LDX $D5    
0x0187CD|$06:$87BD:A5 D7   	LDA $D7    
0x0187CF|$06:$87BF:95 DD   	STA $DD,X  
0x0187D1|$06:$87C1:A5 D8   	LDA $D8    
0x0187D3|$06:$87C3:95 DE   	STA $DE,X  
0x0187D5|$06:$87C5:E8      	INX        
0x0187D6|$06:$87C6:E8      	INX        
0x0187D7|$06:$87C7:E0 06   	CPX #$06   
0x0187D9|$06:$87C9:D0 DE   	BNE $87A9  
0x0187DB|$06:$87CB:20 5B 89	JSR $895B  
0x0187DE|$06:$87CE:A5 DE   	LDA $DE    
0x0187E0|$06:$87D0:25 E0   	AND $E0    
0x0187E2|$06:$87D2:25 E2   	AND $E2    
0x0187E4|$06:$87D4:0A      	ASL        
0x0187E5|$06:$87D5:90 AB   	BCC $8782  
0x0187E7|$06:$87D7:A2 05   	LDX #$05   
0x0187E9|$06:$87D9:A9 00   	LDA #$00   
; control flow target (from $87DF)
0x0187EB|$06:$87DB:9D 62 06	STA $0662,X	; Moonbrooke Level
0x0187EE|$06:$87DE:CA      	DEX        
0x0187EF|$06:$87DF:D0 FA   	BNE $87DB  
0x0187F1|$06:$87E1:A0 00   	LDY #$00   
; control flow target (from $87FF)
0x0187F3|$06:$87E3:B6 DD   	LDX $DD,Y  
0x0187F5|$06:$87E5:8A      	TXA        
0x0187F6|$06:$87E6:4A      	LSR        
0x0187F7|$06:$87E7:4A      	LSR        
0x0187F8|$06:$87E8:4A      	LSR        
0x0187F9|$06:$87E9:29 0F   	AND #$0F   
0x0187FB|$06:$87EB:85 D5   	STA $D5    
0x0187FD|$06:$87ED:98      	TYA        
0x0187FE|$06:$87EE:0A      	ASL        
0x0187FF|$06:$87EF:0A      	ASL        
0x018800|$06:$87F0:0A      	ASL        
0x018801|$06:$87F1:05 D5   	ORA $D5    
0x018803|$06:$87F3:AA      	TAX        
0x018804|$06:$87F4:BD D5 88	LDA $88D5,X
0x018807|$06:$87F7:AA      	TAX        
0x018808|$06:$87F8:FE 63 06	INC $0663,X	; monster ID, group 1
0x01880B|$06:$87FB:C8      	INY        
0x01880C|$06:$87FC:C8      	INY        
0x01880D|$06:$87FD:C0 06   	CPY #$06   
0x01880F|$06:$87FF:D0 E2   	BNE $87E3  
0x018811|$06:$8801:A2 00   	LDX #$00   
; control flow target (from $8811)
0x018813|$06:$8803:BD 63 06	LDA $0663,X	; monster ID, group 1
0x018816|$06:$8806:C9 03   	CMP #$03   
0x018818|$06:$8808:F0 0B   	BEQ $8815  
0x01881A|$06:$880A:C9 02   	CMP #$02   
0x01881C|$06:$880C:F0 09   	BEQ $8817  
0x01881E|$06:$880E:E8      	INX        
0x01881F|$06:$880F:E0 05   	CPX #$05   
0x018821|$06:$8811:D0 F0   	BNE $8803  
0x018823|$06:$8813:A2 FF   	LDX #$FF   
; control flow target (from $8808)
0x018825|$06:$8815:8A      	TXA        
0x018826|$06:$8816:60      	RTS        

; control flow target (from $880C)
0x018827|$06:$8817:A9 05   	LDA #$05   
0x018829|$06:$8819:60      	RTS        

; control flow target (from $87B8)
0x01882A|$06:$881A:A5 D8   	LDA $D8    
0x01882C|$06:$881C:30 51   	BMI $886F  
0x01882E|$06:$881E:29 07   	AND #$07   
0x018830|$06:$8820:D0 4B   	BNE $886D  
0x018832|$06:$8822:E6 D7   	INC $D7    
0x018834|$06:$8824:20 7C 88	JSR $887C  
0x018837|$06:$8827:A5 D7   	LDA $D7    
0x018839|$06:$8829:29 07   	AND #$07   
0x01883B|$06:$882B:D0 2C   	BNE $8859  
0x01883D|$06:$882D:A9 85   	LDA #$85   	; Music ID #$85: single beep SFX
; call to code in a different bank ($0F:$C561)
0x01883F|$06:$882F:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x018842|$06:$8832:A5 D8   	LDA $D8    
0x018844|$06:$8834:29 78   	AND #$78   
0x018846|$06:$8836:C9 40   	CMP #$40   
0x018848|$06:$8838:90 1F   	BCC $8859  
0x01884A|$06:$883A:C9 78   	CMP #$78   
0x01884C|$06:$883C:B0 14   	BCS $8852  
0x01884E|$06:$883E:18      	CLC        
0x01884F|$06:$883F:69 08   	ADC #$08   
0x018851|$06:$8841:85 D8   	STA $D8    
0x018853|$06:$8843:29 20   	AND #$20   
0x018855|$06:$8845:F0 12   	BEQ $8859  
; call to code in a different bank ($0F:$C3AB)
0x018857|$06:$8847:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x01885A|$06:$884A:A5 32   	LDA $32    	; RNG byte 0
0x01885C|$06:$884C:45 D8   	EOR $D8    
0x01885E|$06:$884E:29 18   	AND #$18   
0x018860|$06:$8850:D0 07   	BNE $8859  
; control flow target (from $883C)
0x018862|$06:$8852:A5 D8   	LDA $D8    
0x018864|$06:$8854:09 80   	ORA #$80   
0x018866|$06:$8856:85 D8   	STA $D8    
0x018868|$06:$8858:60      	RTS        

; control flow target (from $882B, $8838, $8845, $8850)
0x018869|$06:$8859:A5 D8   	LDA $D8    
0x01886B|$06:$885B:29 78   	AND #$78   
0x01886D|$06:$885D:85 D8   	STA $D8    
0x01886F|$06:$885F:4A      	LSR        
0x018870|$06:$8860:4A      	LSR        
0x018871|$06:$8861:4A      	LSR        
0x018872|$06:$8862:29 07   	AND #$07   
0x018874|$06:$8864:AA      	TAX        
0x018875|$06:$8865:BD 70 88	LDA $8870,X
0x018878|$06:$8868:05 D8   	ORA $D8    
0x01887A|$06:$886A:85 D8   	STA $D8    
0x01887C|$06:$886C:60      	RTS        

; control flow target (from $8820)
0x01887D|$06:$886D:C6 D8   	DEC $D8    
; control flow target (from $881C)
0x01887F|$06:$886F:60      	RTS        


; code -> data
; indexed data load target (from $8865)
0x018880|$06:$8870:00
0x018881|$06:$8871:01
0x018882|$06:$8872:01
0x018883|$06:$8873:02
0x018884|$06:$8874:02
0x018885|$06:$8875:03
0x018886|$06:$8876:04
0x018887|$06:$8877:07

; data -> code
; control flow target (from $8750, $875E, $8769)
0x018888|$06:$8878:86 D6   	STX $D6    
0x01888A|$06:$887A:85 D7   	STA $D7    
; control flow target (from $8824)
0x01888C|$06:$887C:A5 D6   	LDA $D6    
0x01888E|$06:$887E:0A      	ASL        
0x01888F|$06:$887F:85 D9   	STA $D9    
0x018891|$06:$8881:A5 D7   	LDA $D7    
0x018893|$06:$8883:4A      	LSR        
0x018894|$06:$8884:4A      	LSR        
0x018895|$06:$8885:4A      	LSR        
0x018896|$06:$8886:29 0F   	AND #$0F   
0x018898|$06:$8888:05 D9   	ORA $D9    
0x01889A|$06:$888A:AA      	TAX        
0x01889B|$06:$888B:A5 D7   	LDA $D7    
0x01889D|$06:$888D:29 07   	AND #$07   
0x01889F|$06:$888F:85 D9   	STA $D9    
0x0188A1|$06:$8891:BD D5 88	LDA $88D5,X
0x0188A4|$06:$8894:0A      	ASL        
0x0188A5|$06:$8895:0A      	ASL        
0x0188A6|$06:$8896:0A      	ASL        
0x0188A7|$06:$8897:18      	CLC        
0x0188A8|$06:$8898:65 D9   	ADC $D9    
0x0188AA|$06:$889A:AA      	TAX        
0x0188AB|$06:$889B:A4 D6   	LDY $D6    
; control flow target (from $88A8)
0x0188AD|$06:$889D:BD A2 89	LDA $89A2,X
0x0188B0|$06:$88A0:99 63 06	STA $0663,Y	; monster ID, group 1
0x0188B3|$06:$88A3:C8      	INY        
0x0188B4|$06:$88A4:E8      	INX        
0x0188B5|$06:$88A5:8A      	TXA        
0x0188B6|$06:$88A6:29 07   	AND #$07   
0x0188B8|$06:$88A8:D0 F3   	BNE $889D  
0x0188BA|$06:$88AA:A5 D9   	LDA $D9    
0x0188BC|$06:$88AC:F0 26   	BEQ $88D4  
0x0188BE|$06:$88AE:A5 D6   	LDA $D6    
0x0188C0|$06:$88B0:0A      	ASL        
0x0188C1|$06:$88B1:85 D9   	STA $D9    
0x0188C3|$06:$88B3:A5 D7   	LDA $D7    
0x0188C5|$06:$88B5:4A      	LSR        
0x0188C6|$06:$88B6:4A      	LSR        
0x0188C7|$06:$88B7:4A      	LSR        
0x0188C8|$06:$88B8:18      	CLC        
0x0188C9|$06:$88B9:69 01   	ADC #$01   
0x0188CB|$06:$88BB:29 0F   	AND #$0F   
0x0188CD|$06:$88BD:05 D9   	ORA $D9    
0x0188CF|$06:$88BF:AA      	TAX        
0x0188D0|$06:$88C0:BD D5 88	LDA $88D5,X
0x0188D3|$06:$88C3:0A      	ASL        
0x0188D4|$06:$88C4:0A      	ASL        
0x0188D5|$06:$88C5:0A      	ASL        
0x0188D6|$06:$88C6:AA      	TAX        
; control flow target (from $88D2)
0x0188D7|$06:$88C7:BD A2 89	LDA $89A2,X
0x0188DA|$06:$88CA:99 63 06	STA $0663,Y	; monster ID, group 1
0x0188DD|$06:$88CD:E8      	INX        
0x0188DE|$06:$88CE:C8      	INY        
0x0188DF|$06:$88CF:98      	TYA        
0x0188E0|$06:$88D0:29 07   	AND #$07   
0x0188E2|$06:$88D2:D0 F3   	BNE $88C7  
; control flow target (from $88AC)
0x0188E4|$06:$88D4:60      	RTS        


; code -> data
; indexed data load target (from $87F4, $8891, $88C0)
0x0188E5|$06:$88D5:04
0x0188E6|$06:$88D6:03
0x0188E7|$06:$88D7:02
0x0188E8|$06:$88D8:04
0x0188E9|$06:$88D9:00
0x0188EA|$06:$88DA:04
0x0188EB|$06:$88DB:01
0x0188EC|$06:$88DC:04
0x0188ED|$06:$88DD:02
0x0188EE|$06:$88DE:03
0x0188EF|$06:$88DF:04
0x0188F0|$06:$88E0:01
0x0188F1|$06:$88E1:03
0x0188F2|$06:$88E2:04
0x0188F3|$06:$88E3:02
0x0188F4|$06:$88E4:03
0x0188F5|$06:$88E5:02
0x0188F6|$06:$88E6:04
0x0188F7|$06:$88E7:03
0x0188F8|$06:$88E8:01
0x0188F9|$06:$88E9:04
0x0188FA|$06:$88EA:00
0x0188FB|$06:$88EB:02
0x0188FC|$06:$88EC:04
0x0188FD|$06:$88ED:01
0x0188FE|$06:$88EE:03
0x0188FF|$06:$88EF:04
0x018900|$06:$88F0:03
0x018901|$06:$88F1:01
0x018902|$06:$88F2:04
0x018903|$06:$88F3:00
0x018904|$06:$88F4:04
0x018905|$06:$88F5:04
0x018906|$06:$88F6:00
0x018907|$06:$88F7:04
0x018908|$06:$88F8:02
0x018909|$06:$88F9:01
0x01890A|$06:$88FA:04
0x01890B|$06:$88FB:03
0x01890C|$06:$88FC:02
0x01890D|$06:$88FD:04
0x01890E|$06:$88FE:03
0x01890F|$06:$88FF:01
0x018910|$06:$8900:04
0x018911|$06:$8901:02
0x018912|$06:$8902:03
0x018913|$06:$8903:04
0x018914|$06:$8904:03

; data -> code
; control flow target (from $86CF, $890A)
; call to code in a different bank ($0F:$C1DC)
0x018915|$06:$8905:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x018918|$06:$8908:A5 02   	LDA $02    
0x01891A|$06:$890A:D0 F9   	BNE $8905  
0x01891C|$06:$890C:A9 05   	LDA #$05   
0x01891E|$06:$890E:85 08   	STA $08    
0x018920|$06:$8910:AD 1D 89	LDA $891D  
0x018923|$06:$8913:85 D7   	STA $D7    
0x018925|$06:$8915:AD 1E 89	LDA $891E  
0x018928|$06:$8918:85 D8   	STA $D8    
0x01892A|$06:$891A:4C 73 89	JMP $8973  


; code -> data
; data load target (from $8910)
0x01892D|$06:$891D:A2
; data load target (from $8915)
0x01892E|$06:$891E:   89	; $06:$89A2

; data -> code
; control flow target (from $878A)
0x01892F|$06:$891F:A2 20   	LDX #$20   
0x018931|$06:$8921:A5 DC   	LDA $DC    
0x018933|$06:$8923:29 06   	AND #$06   
0x018935|$06:$8925:D0 07   	BNE $892E  
0x018937|$06:$8927:85 DB   	STA $DB    
; call to code in a different bank ($0F:$C1DC)
0x018939|$06:$8929:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01893C|$06:$892C:A2 08   	LDX #$08   
; control flow target (from $8925)
0x01893E|$06:$892E:86 DB   	STX $DB    
; call to code in a different bank ($0F:$C476)
0x018940|$06:$8930:20 76 C4	JSR $C476  	; read joypad 1 data into $2F
0x018943|$06:$8933:A5 2F   	LDA $2F    	; joypad 1 data
0x018945|$06:$8935:45 DA   	EOR $DA    
0x018947|$06:$8937:4A      	LSR        
0x018948|$06:$8938:90 07   	BCC $8941  
0x01894A|$06:$893A:A5 2F   	LDA $2F    	; joypad 1 data
0x01894C|$06:$893C:29 01   	AND #$01   
0x01894E|$06:$893E:85 DA   	STA $DA    
0x018950|$06:$8940:60      	RTS        

; control flow target (from $8938)
0x018951|$06:$8941:A5 DC   	LDA $DC    
0x018953|$06:$8943:18      	CLC        
0x018954|$06:$8944:69 08   	ADC #$08   
0x018956|$06:$8946:85 DC   	STA $DC    
0x018958|$06:$8948:90 10   	BCC $895A  
0x01895A|$06:$894A:E6 DA   	INC $DA    
0x01895C|$06:$894C:E6 DA   	INC $DA    
0x01895E|$06:$894E:A5 DA   	LDA $DA    
0x018960|$06:$8950:C5 DB   	CMP $DB    
0x018962|$06:$8952:90 06   	BCC $895A  
0x018964|$06:$8954:49 01   	EOR #$01   
0x018966|$06:$8956:29 01   	AND #$01   
0x018968|$06:$8958:85 DA   	STA $DA    
; control flow target (from $8948, $8952)
0x01896A|$06:$895A:60      	RTS        

; control flow target (from $8774, $87CB, $8962)
0x01896B|$06:$895B:A5 02   	LDA $02    
0x01896D|$06:$895D:F0 06   	BEQ $8965  
; call to code in a different bank ($0F:$C1DC)
0x01896F|$06:$895F:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x018972|$06:$8962:4C 5B 89	JMP $895B  

; control flow target (from $895D)
0x018975|$06:$8965:A9 05   	LDA #$05   
0x018977|$06:$8967:85 08   	STA $08    
0x018979|$06:$8969:AD 8C 89	LDA $898C  
0x01897C|$06:$896C:85 D7   	STA $D7    
0x01897E|$06:$896E:AD 8D 89	LDA $898D  
0x018981|$06:$8971:85 D8   	STA $D8    
; control flow target (from $891A)
0x018983|$06:$8973:A9 A0   	LDA #$A0   
0x018985|$06:$8975:A0 00   	LDY #$00   
0x018987|$06:$8977:20 8E 89	JSR $898E  
0x01898A|$06:$897A:A9 B0   	LDA #$B0   
0x01898C|$06:$897C:A0 08   	LDY #$08   
0x01898E|$06:$897E:20 8E 89	JSR $898E  
0x018991|$06:$8981:A9 C0   	LDA #$C0   
0x018993|$06:$8983:A0 10   	LDY #$10   
0x018995|$06:$8985:20 8E 89	JSR $898E  
; call to code in a different bank ($0F:$C1DC)
0x018998|$06:$8988:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01899B|$06:$898B:60      	RTS        


; code -> data
; data load target (from $8969)
0x01899C|$06:$898C:63
; data load target (from $896E)
0x01899D|$06:$898D:   06	; $06:$0663; monster ID, group 1

; data -> code
; control flow target (from $8977, $897E, $8985)
0x01899E|$06:$898E:85 07   	STA $07    
; control flow target (from $899F)
0x0189A0|$06:$8990:84 D5   	STY $D5    
0x0189A2|$06:$8992:B1 D7   	LDA ($D7),Y
0x0189A4|$06:$8994:85 09   	STA $09    
; call to code in a different bank ($0F:$C1FA)
0x0189A6|$06:$8996:20 FA C1	JSR $C1FA  	; wait for $02 to not be #$C0, write PPU address in $07-$08 and data in $09 to PPU write buffer at $0300,$02, $01 += 1, $02 += 3, and set $0183 to #$00
0x0189A9|$06:$8999:A4 D5   	LDY $D5    
0x0189AB|$06:$899B:C8      	INY        
0x0189AC|$06:$899C:98      	TYA        
0x0189AD|$06:$899D:29 07   	AND #$07   
0x0189AF|$06:$899F:D0 EF   	BNE $8990  
0x0189B1|$06:$89A1:60      	RTS        


; code -> data
; indexed data load target (from $889D, $88C7)
; indirect data load target (via $891D)
0x0189B2|$06:$89A2:10 82 38 7C 7C 38 82 10
0x0189BA|$06:$89AA:10 10 FE 7C 38 7C 6C 82
0x0189C2|$06:$89B2:70 38 1C 1C 1C 1C 38 70
0x0189CA|$06:$89BA:10 10 38 7C FE FE FE 7C
0x0189D2|$06:$89C2:00 6C FE FE 7C 7C 38 10

; data -> code
; COMMAND menu STATUS command handler
; indirect control flow target (via $808A)
; call to code in a different bank ($0F:$F537)
0x0189DA|$06:$89CA:20 37 F5	JSR $F537  	; display hero select STATUS menu if necessary
0x0189DD|$06:$89CD:C9 FF   	CMP #$FF   
0x0189DF|$06:$89CF:D0 03   	BNE $89D4  
0x0189E1|$06:$89D1:4C 6D 80	JMP $806D  	; exit COMMAND menu

; control flow target (from $89CF)
0x0189E4|$06:$89D4:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F497)
0x0189E6|$06:$89D6:20 97 F4	JSR $F497  	; display Menu ID #$03: Main menu: selected hero's status
0x0189E9|$06:$89D9:20 9D 80	JSR $809D  	; wait until all joypad buttons are released and then some button pressed
; call to code in a different bank ($0F:$F492)
0x0189EC|$06:$89DC:20 92 F4	JSR $F492  	; display Menu ID #$02: Main menu: gold/crests
0x0189EF|$06:$89DF:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F63B)
0x0189F1|$06:$89E1:20 3B F6	JSR $F63B  	; display Menu ID #$1C: Main menu: status screen equipped items
0x0189F4|$06:$89E4:C6 97   	DEC $97    	; subject hero ID $97
0x0189F6|$06:$89E6:30 17   	BMI $89FF  	; Midenhall has no magic, so no need to show spell lists
0x0189F8|$06:$89E8:A6 97   	LDX $97    	; subject hero ID $97
0x0189FA|$06:$89EA:BD 18 06	LDA $0618,X	; Cannock's learned battle spell list
0x0189FD|$06:$89ED:1D 1A 06	ORA $061A,X	; Cannock's learned field spell list
0x018A00|$06:$89F0:F0 0D   	BEQ $89FF  	; if casters haven't learned any spell yet (which is impossible), no need to show spell lists
0x018A02|$06:$89F2:20 9D 80	JSR $809D  	; wait until all joypad buttons are released and then some button pressed
0x018A05|$06:$89F5:A9 85   	LDA #$85   	; Music ID #$85: single beep SFX
; call to code in a different bank ($0F:$C561)
0x018A07|$06:$89F7:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x018A0A|$06:$89FA:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F64E)
0x018A0C|$06:$89FC:20 4E F6	JSR $F64E  	; display spell lists
; control flow target (from $89E6, $89F0)
0x018A0F|$06:$89FF:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; COMMAND menu EQUIP handler
; indirect control flow target (via $8090)
; call to code in a different bank ($0F:$F56B)
0x018A12|$06:$8A02:20 6B F5	JSR $F56B  	; display appropriate main EQUIP hero select menu
0x018A15|$06:$8A05:C9 FF   	CMP #$FF   
0x018A17|$06:$8A07:D0 03   	BNE $8A0C  
0x018A19|$06:$8A09:4C 6D 80	JMP $806D  	; exit COMMAND menu

; control flow target (from $8A07)
0x018A1C|$06:$8A0C:85 97   	STA $97    	; subject hero ID $97
0x018A1E|$06:$8A0E:A9 00   	LDA #$00   
0x018A20|$06:$8A10:85 49   	STA $49    	; object hero/target/item/string ID $49; EQUIP sub-type
0x018A22|$06:$8A12:85 A5   	STA $A5    
0x018A24|$06:$8A14:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$CF6A)
0x018A26|$06:$8A16:20 6A CF	JSR $CF6A  	; wipe selected menu region
; control flow target (from $8AEB)
0x018A29|$06:$8A19:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x018A2B|$06:$8A1B:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F5A3)
0x018A2D|$06:$8A1D:20 A3 F5	JSR $F5A3  	; given a hero ID in A and an item type in X, display the EQUIP sub-menu for hero A and item type X, returning the selected item ID in A
0x018A30|$06:$8A20:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; new item to equip
; control flow target (from $8A35)
0x018A32|$06:$8A22:C9 FF   	CMP #$FF   
0x018A34|$06:$8A24:D0 18   	BNE $8A3E  
0x018A36|$06:$8A26:C6 49   	DEC $49    	; object hero/target/item/string ID $49
0x018A38|$06:$8A28:30 11   	BMI $8A3B  
; control flow target (from $8A39)
0x018A3A|$06:$8A2A:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x018A3C|$06:$8A2C:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F5A3)
0x018A3E|$06:$8A2E:20 A3 F5	JSR $F5A3  	; given a hero ID in A and an item type in X, display the EQUIP sub-menu for hero A and item type X, returning the selected item ID in A
0x018A41|$06:$8A31:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; new item to equip
0x018A43|$06:$8A33:C9 FE   	CMP #$FE   
0x018A45|$06:$8A35:D0 EB   	BNE $8A22  
0x018A47|$06:$8A37:C6 49   	DEC $49    	; object hero/target/item/string ID $49
0x018A49|$06:$8A39:10 EF   	BPL $8A2A  
; control flow target (from $8A28)
0x018A4B|$06:$8A3B:4C FF 8A	JMP $8AFF  	; wait #$14 interrupts, update each hero's stats based on their current EXP, wipe menu and exit COMMAND menu

; control flow target (from $8A24)
0x018A4E|$06:$8A3E:C9 FE   	CMP #$FE   
0x018A50|$06:$8A40:D0 20   	BNE $8A62  
0x018A52|$06:$8A42:4C E3 8A	JMP $8AE3  

; control flow target (from $8A8C)
0x018A55|$06:$8A45:29 3F   	AND #$3F   	; strip off the equipped bit
0x018A57|$06:$8A47:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$F6F0)
0x018A59|$06:$8A49:20 F0 F6	JSR $F6F0  	; open main dialogue window and display string ID specified by byte following JSR + #$0100

; code -> data
; indirect data load target
0x018A5C|$06:$8A4C:12	; String ID #$0112: It cannot be removed due to the curse.[end-FC]

; data -> code
; control flow target (from $8AE0)
0x018A5D|$06:$8A4D:A9 0A   	LDA #$0A   	; Music ID #$0A: cursed BGM
; call to code in a different bank ($0F:$C58D)
0x018A5F|$06:$8A4F:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
0x018A62|$06:$8A52:4C 5A 8A	JMP $8A5A  

; control flow target (from $8ABC)
0x018A65|$06:$8A55:A2 50   	LDX #$50   
; call to code in a different bank ($0F:$C1EE)
0x018A67|$06:$8A57:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
; control flow target (from $8A52)
0x018A6A|$06:$8A5A:A9 05   	LDA #$05   
; call to code in a different bank ($0F:$CF6A)
0x018A6C|$06:$8A5C:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x018A6F|$06:$8A5F:4C E3 8A	JMP $8AE3  

; control flow target (from $8A40)
0x018A72|$06:$8A62:E6 A5   	INC $A5    
0x018A74|$06:$8A64:86 12   	STX $12    
0x018A76|$06:$8A66:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x018A78|$06:$8A68:BD 57 F7	LDA $F757,X	; table of first item IDs for each item type
0x018A7B|$06:$8A6B:85 0E   	STA $0E    	; lowest item ID of current item type
0x018A7D|$06:$8A6D:BD 58 F7	LDA $F758,X
0x018A80|$06:$8A70:85 0F   	STA $0F    	; lowest item ID of next item type
0x018A82|$06:$8A72:20 1D 8B	JSR $8B1D  	; set A to hero ID in $97 * 8
0x018A85|$06:$8A75:A8      	TAY        
0x018A86|$06:$8A76:A9 08   	LDA #$08   	; 8 inventory slots per hero
0x018A88|$06:$8A78:85 0C   	STA $0C    	; number of invetory slots left to check
; control flow target (from $8A94)
0x018A8A|$06:$8A7A:B9 00 06	LDA $0600,Y	; Midenhall inventory item 1 (| #$40 if equipped)
0x018A8D|$06:$8A7D:F0 12   	BEQ $8A91  
0x018A8F|$06:$8A7F:29 3F   	AND #$3F   	; strip off the equipped bit
0x018A91|$06:$8A81:C5 0E   	CMP $0E    	; lowest item ID of current item type
0x018A93|$06:$8A83:90 0C   	BCC $8A91  
0x018A95|$06:$8A85:C5 0F   	CMP $0F    	; lowest item ID of next item type
0x018A97|$06:$8A87:B0 08   	BCS $8A91  
0x018A99|$06:$8A89:20 23 8B	JSR $8B23  	; given party inventory index in Y, CLC and return equipped item ID in A if corresponding item is equipped and cursed, SEC and return unequipped item ID in A otherwise
0x018A9C|$06:$8A8C:90 B7   	BCC $8A45  
0x018A9E|$06:$8A8E:99 00 06	STA $0600,Y	; Midenhall inventory item 1 (| #$40 if equipped); note that this unequips the item!
; control flow target (from $8A7D, $8A83, $8A87)
0x018AA1|$06:$8A91:C8      	INY        
0x018AA2|$06:$8A92:C6 0C   	DEC $0C    	; number of invetory slots left to check
0x018AA4|$06:$8A94:D0 E4   	BNE $8A7A  
0x018AA6|$06:$8A96:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x018AA8|$06:$8A98:F0 49   	BEQ $8AE3  
0x018AAA|$06:$8A9A:C9 FF   	CMP #$FF   
0x018AAC|$06:$8A9C:F0 45   	BEQ $8AE3  
0x018AAE|$06:$8A9E:A6 12   	LDX $12    
0x018AB0|$06:$8AA0:20 0F 8B	JSR $8B0F  	; given hero ID in $97 and hero inventory index in X, return corresponding item ID in A and party inventory index in X
0x018AB3|$06:$8AA3:29 3F   	AND #$3F   	; strip off the equipped bit
0x018AB5|$06:$8AA5:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x018AB7|$06:$8AA7:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x018AB9|$06:$8AA9:20 A3 A3	JSR $A3A3  	; given item ID in $96 and hero ID in $97, set A to #$80 if hero can equip item, #$00 otherwise
0x018ABC|$06:$8AAC:C9 00   	CMP #$00   
0x018ABE|$06:$8AAE:D0 0F   	BNE $8ABF  
0x018AC0|$06:$8AB0:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018AC3|$06:$8AB3:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018AC6|$06:$8AB6:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018AC9|$06:$8AB9:92	; String ID #$0192: [name] cannot be equipped with the [item].[end-FC]

; data -> code
0x018ACA|$06:$8ABA:C6 49   	DEC $49    	; object hero/target/item/string ID $49
0x018ACC|$06:$8ABC:4C 55 8A	JMP $8A55  

; control flow target (from $8AAE)
0x018ACF|$06:$8ABF:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
; equip item
0x018AD1|$06:$8AC1:09 40   	ORA #$40   
0x018AD3|$06:$8AC3:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x018AD6|$06:$8AC6:A0 04   	LDY #$04   	; there are 4 cursed item in the game
; control flow target (from $8ACE)
0x018AD8|$06:$8AC8:D9 1B 86	CMP $861B,Y	; list of cursed items (equipped), built in offset from $861C
0x018ADB|$06:$8ACB:F0 05   	BEQ $8AD2  
0x018ADD|$06:$8ACD:88      	DEY        
0x018ADE|$06:$8ACE:D0 F8   	BNE $8AC8  
0x018AE0|$06:$8AD0:F0 11   	BEQ $8AE3  
; control flow target (from $8ACB)
0x018AE2|$06:$8AD2:29 3F   	AND #$3F   	; strip off the equipped bit
0x018AE4|$06:$8AD4:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x018AE6|$06:$8AD6:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018AE9|$06:$8AD9:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018AEC|$06:$8ADC:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018AEF|$06:$8ADF:11	; String ID #$0111: [name], too, was cursed.[end-FC]

; data -> code
0x018AF0|$06:$8AE0:4C 4D 8A	JMP $8A4D  

; control flow target (from $8A42, $8A5F, $8A98, $8A9C, $8AD0)
0x018AF3|$06:$8AE3:E6 49   	INC $49    	; object hero/target/item/string ID $49
0x018AF5|$06:$8AE5:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x018AF7|$06:$8AE7:C9 04   	CMP #$04   	; there are 4 EQUIP item types
0x018AF9|$06:$8AE9:F0 03   	BEQ $8AEE  
0x018AFB|$06:$8AEB:4C 19 8A	JMP $8A19  

; control flow target (from $8AE9)
0x018AFE|$06:$8AEE:A5 A5   	LDA $A5    
0x018B00|$06:$8AF0:D0 0D   	BNE $8AFF  	; wait #$14 interrupts, update each hero's stats based on their current EXP, wipe menu and exit COMMAND menu
0x018B02|$06:$8AF2:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018B05|$06:$8AF5:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018B08|$06:$8AF8:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018B0B|$06:$8AFB:A0	; String ID #$01A0: [name] has nothing to equip.[end-FC]

; data -> code
0x018B0C|$06:$8AFC:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; wait #$14 interrupts, update each hero's stats based on their current EXP, wipe menu and exit COMMAND menu
; control flow target (from $8A3B, $8AF0)
0x018B0F|$06:$8AFF:A2 14   	LDX #$14   
; call to code in a different bank ($0F:$C1EE)
0x018B11|$06:$8B01:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
; call to code in a different bank ($0F:$D0EC)
0x018B14|$06:$8B04:20 EC D0	JSR $D0EC  	; update each hero's stats based on their current EXP
0x018B17|$06:$8B07:A9 07   	LDA #$07   
; call to code in a different bank ($0F:$CF6A)
0x018B19|$06:$8B09:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x018B1C|$06:$8B0C:4C 6D 80	JMP $806D  	; exit COMMAND menu

; given hero ID in $97 and hero inventory index in X, return corresponding item ID in A and party inventory index in X
; control flow target (from $8528, $8AA0, $989E, $98B9, $991D)
0x018B1F|$06:$8B0F:20 1D 8B	JSR $8B1D  	; set A to hero ID in $97 * 8
0x018B22|$06:$8B12:85 0C   	STA $0C    
0x018B24|$06:$8B14:8A      	TXA        
0x018B25|$06:$8B15:18      	CLC        
0x018B26|$06:$8B16:65 0C   	ADC $0C    
0x018B28|$06:$8B18:AA      	TAX        
0x018B29|$06:$8B19:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x018B2C|$06:$8B1C:60      	RTS        

; set A to hero ID in $97 * 8
; control flow target (from $8A72, $8B0F)
0x018B2D|$06:$8B1D:A5 97   	LDA $97    	; subject hero ID $97
0x018B2F|$06:$8B1F:0A      	ASL        
0x018B30|$06:$8B20:0A      	ASL        
0x018B31|$06:$8B21:0A      	ASL        
0x018B32|$06:$8B22:60      	RTS        

; given party inventory index in Y, CLC and return equipped item ID in A if corresponding item is equipped and cursed, SEC and return unequipped item ID in A otherwise
; control flow target (from $852D, $8A89)
0x018B33|$06:$8B23:B9 00 06	LDA $0600,Y	; Midenhall inventory item 1 (| #$40 if equipped)
0x018B36|$06:$8B26:A2 03   	LDX #$03   	; max index of list of cursed items in the game
; control flow target (from $8B2E)
0x018B38|$06:$8B28:DD 1C 86	CMP $861C,X	; list of equipped cursed items
0x018B3B|$06:$8B2B:F0 07   	BEQ $8B34  
0x018B3D|$06:$8B2D:CA      	DEX        
0x018B3E|$06:$8B2E:10 F8   	BPL $8B28  
0x018B40|$06:$8B30:29 3F   	AND #$3F   
0x018B42|$06:$8B32:38      	SEC        
0x018B43|$06:$8B33:60      	RTS        

; control flow target (from $8B2B)
0x018B44|$06:$8B34:18      	CLC        
0x018B45|$06:$8B35:60      	RTS        

; COMMAND menu SPELL command handler
; indirect control flow target (via $8088)
; call to code in a different bank ($0F:$F545)
0x018B46|$06:$8B36:20 45 F5	JSR $F545  	; depending on number of casters in party, maybe open caster select menu
0x018B49|$06:$8B39:C9 FF   	CMP #$FF   
0x018B4B|$06:$8B3B:D0 03   	BNE $8B40  	; did not cancel menu
; exit COMMAND menu
; control flow target (from $8B73)
0x018B4D|$06:$8B3D:4C 6D 80	JMP $806D  	; exit COMMAND menu

; did not cancel menu
; control flow target (from $8B3B)
0x018B50|$06:$8B40:85 97   	STA $97    	; subject hero ID $97; caster hero ID
0x018B52|$06:$8B42:C9 FE   	CMP #$FE   
0x018B54|$06:$8B44:D0 0F   	BNE $8B55  	; hero is a caster
0x018B56|$06:$8B46:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018B59|$06:$8B49:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x018B5B|$06:$8B4B:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018B5E|$06:$8B4E:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018B61|$06:$8B51:01	; String ID #$0101: [name] cannot use the spell.[end-FC]

; data -> code
0x018B62|$06:$8B52:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; hero is a caster
; control flow target (from $8B44)
0x018B65|$06:$8B55:A9 80   	LDA #$80   	; Alive
0x018B67|$06:$8B57:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x018B6A|$06:$8B5A:B0 0D   	BCS $8B69  	; caster is alive
0x018B6C|$06:$8B5C:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018B6F|$06:$8B5F:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x018B72|$06:$8B62:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018B75|$06:$8B65:02	; String ID #$0102: Alas, poor [name] is dead.[end-FC]

; data -> code
0x018B76|$06:$8B66:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; caster is alive
; control flow target (from $8B5A)
0x018B79|$06:$8B69:A5 97   	LDA $97    	; subject hero ID $97; caster hero ID
0x018B7B|$06:$8B6B:38      	SEC        
0x018B7C|$06:$8B6C:E9 01   	SBC #$01   	; Midenhall can't use magic and $0F:$F5EC wants hero ID - 1
; call to code in a different bank ($0F:$F5EC)
0x018B7E|$06:$8B6E:20 EC F5	JSR $F5EC  	; given hero ID - 1 in A, open hero's spell list and return selected spell ID in A
0x018B81|$06:$8B71:C9 FF   	CMP #$FF   
0x018B83|$06:$8B73:F0 C8   	BEQ $8B3D  	; exit COMMAND menu
0x018B85|$06:$8B75:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; selected spell ID
0x018B87|$06:$8B77:AA      	TAX        
0x018B88|$06:$8B78:20 AA 8D	JSR $8DAA  	; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
0x018B8B|$06:$8B7B:B9 3D 06	LDA $063D,Y	; Midenhall Current MP
0x018B8E|$06:$8B7E:DD DD 8C	CMP $8CDD,X	; MP costs (built in offset from real data at $8CE6)
0x018B91|$06:$8B81:B0 07   	BCS $8B8A  	; hero has enough MP to cast
; call to code in a different bank ($0F:$F6EA)
0x018B93|$06:$8B83:20 EA F6	JSR $F6EA  	; open main dialogue window and display string ID specified by byte following JSR

; code -> data
; indirect data load target
0x018B96|$06:$8B86:11	; String ID #$0011: Thy MP is low.[end-FC]

; data -> code
0x018B97|$06:$8B87:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; hero has enough MP to cast
; control flow target (from $8B81)
0x018B9A|$06:$8B8A:A0 04   	LDY #$04   	; there are 5 single-target spells on the field
0x018B9C|$06:$8B8C:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; selected spell ID
; check if spell is a healing spell
; control flow target (from $8B94)
0x018B9E|$06:$8B8E:D9 E1 8C	CMP $8CE1,Y	; single-target spell list, field
0x018BA1|$06:$8B91:F0 05   	BEQ $8B98  	; chose a healing spell
0x018BA3|$06:$8B93:88      	DEY        
0x018BA4|$06:$8B94:10 F8   	BPL $8B8E  	; check if spell is a healing spell
0x018BA6|$06:$8B96:30 0C   	BMI $8BA4  	; cast spell
; chose a healing spell
; control flow target (from $8B91)
; call to code in a different bank ($0F:$F579)
0x018BA8|$06:$8B98:20 79 F5	JSR $F579  	; display appropriate main SPELL target menu
0x018BAB|$06:$8B9B:C9 FF   	CMP #$FF   
0x018BAD|$06:$8B9D:D0 03   	BNE $8BA2  	; update target hero ID
0x018BAF|$06:$8B9F:4C 6D 80	JMP $806D  	; exit COMMAND menu

; update target hero ID
; control flow target (from $8B9D)
0x018BB2|$06:$8BA2:85 49   	STA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
; cast spell
; control flow target (from $8B96)
0x018BB4|$06:$8BA4:20 AA 8D	JSR $8DAA  	; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
0x018BB7|$06:$8BA7:A6 96   	LDX $96    	; temp storage for item/spell/type/etc. IDs; selected spell ID
0x018BB9|$06:$8BA9:B9 3D 06	LDA $063D,Y	; Midenhall Current MP
0x018BBC|$06:$8BAC:38      	SEC        
0x018BBD|$06:$8BAD:FD DD 8C	SBC $8CDD,X	; MP costs (built in offset from real data at $8CE6)
0x018BC0|$06:$8BB0:99 3D 06	STA $063D,Y	; Midenhall Current MP
0x018BC3|$06:$8BB3:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018BC6|$06:$8BB6:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x018BC9|$06:$8BB9:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; selected spell ID
0x018BCB|$06:$8BBB:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2A)
0x018BCD|$06:$8BBD:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x018BD0|$06:$8BC0:1A	; String ID #$001A: [name] chanted the spell of [spell].[end-FC]

; data -> code
0x018BD1|$06:$8BC1:A9 90   	LDA #$90   	; Music ID #$90: casting SFX
; call to code in a different bank ($0F:$C561)
0x018BD3|$06:$8BC3:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
; call to code in a different bank ($0F:$C515)
0x018BD6|$06:$8BC6:20 15 C5	JSR $C515  	; flash screen 10 times
0x018BD9|$06:$8BC9:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; selected spell ID
0x018BDB|$06:$8BCB:C9 09   	CMP #$09   	; Spell ID #$09: Heal
0x018BDD|$06:$8BCD:D0 04   	BNE $8BD3  	; spell ID is not #$09
0x018BDF|$06:$8BCF:A2 40   	LDX #$40   	; power on field for Heal
0x018BE1|$06:$8BD1:D0 0E   	BNE $8BE1  
; spell ID is not #$09
; control flow target (from $8BCD)
0x018BE3|$06:$8BD3:C9 0B   	CMP #$0B   	; Spell ID #$0B: Healmore
0x018BE5|$06:$8BD5:D0 04   	BNE $8BDB  	; spell ID is not #$09 or #$0B
0x018BE7|$06:$8BD7:A2 64   	LDX #$64   	; power on field for Healmore
0x018BE9|$06:$8BD9:D0 06   	BNE $8BE1  
; spell ID is not #$09 or #$0B
; control flow target (from $8BD5)
0x018BEB|$06:$8BDB:C9 0D   	CMP #$0D   	; Spell ID #$0D: Healall
0x018BED|$06:$8BDD:D0 24   	BNE $8C03  	; spell ID is not #$09, #$0B, or #$0D
0x018BEF|$06:$8BDF:A2 FF   	LDX #$FF   	; power on field for Healall
; control flow target (from $8BD1, $8BD9)
0x018BF1|$06:$8BE1:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018BF3|$06:$8BE3:20 AC 8D	JSR $8DAC  	; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
0x018BF6|$06:$8BE6:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018BF9|$06:$8BE9:10 51   	BPL $8C3C  	; spell ineffective; can't heal dead people :(
0x018BFB|$06:$8BEB:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
; call to code in a different bank ($0F:$D146)
0x018BFD|$06:$8BED:20 46 D1	JSR $D146  	; heal hero ID in A by random amount based on healing power in X
; call to code in a different bank ($0F:$C22C)
0x018C00|$06:$8BF0:20 2C C2	JSR $C22C  
0x018C03|$06:$8BF3:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
; call to code in a different bank ($0F:$FC50)
0x018C05|$06:$8BF5:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2A)
0x018C08|$06:$8BF8:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x018C0B|$06:$8BFB:17	; String ID #$0017: [name]'s wounds were healed.[end-FC]

; data -> code
; call to code in a different bank ($0F:$EB76)
0x018C0C|$06:$8BFC:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018C0F|$06:$8BFF:01	; Menu ID #$01: Mini status window, top, Midenhall only

; data -> code
0x018C10|$06:$8C00:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; spell ID is not #$09, #$0B, or #$0D
; control flow target (from $8BDD)
0x018C13|$06:$8C03:C9 10   	CMP #$10   	; Spell ID #$10: Antidote
0x018C15|$06:$8C05:D0 29   	BNE $8C30  	; spell ID is not #$09, #$0B, #$0D, or #$10
0x018C17|$06:$8C07:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018C19|$06:$8C09:20 AC 8D	JSR $8DAC  	; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
0x018C1C|$06:$8C0C:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018C1F|$06:$8C0F:29 20   	AND #$20   	; pick out the poison bit from hero status byte
0x018C21|$06:$8C11:F0 29   	BEQ $8C3C  	; spell ineffective
0x018C23|$06:$8C13:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
; call to code in a different bank ($0F:$FC50)
0x018C25|$06:$8C15:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2A)
0x018C28|$06:$8C18:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x018C2B|$06:$8C1B:43	; String ID #$0043: The poison was drawn out of [name]'s wound.[end-FC]

; data -> code
0x018C2C|$06:$8C1C:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018C2E|$06:$8C1E:20 AC 8D	JSR $8DAC  	; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
0x018C31|$06:$8C21:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018C34|$06:$8C24:29 DF   	AND #$DF   	; set poison bit to 0
0x018C36|$06:$8C26:99 2D 06	STA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
; call to code in a different bank ($0F:$EB76)
0x018C39|$06:$8C29:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x018C3C|$06:$8C2C:01	; Menu ID #$01: Mini status window, top

; data -> code
; control flow target (from $8C4B)
0x018C3D|$06:$8C2D:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; spell ID is not #$09, #$0B, #$0D, or #$10
; control flow target (from $8C05)
0x018C40|$06:$8C30:C9 12   	CMP #$12   	; Spell ID #$12: Outside
0x018C42|$06:$8C32:D0 0F   	BNE $8C43  	; spell ID is not #$09, #$0B, #$0D, #$10, or #$12
0x018C44|$06:$8C34:20 D4 8C	JSR $8CD4  	; handler for Outside spell effect
0x018C47|$06:$8C37:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$D88F)
0x018C49|$06:$8C39:4C 8F D8	JMP $D88F  	; warp to warp point given by ($0C)

; spell ineffective
; control flow target (from $8BE9, $8C11, $8C56, $8CAB, $8CDE)
; call to code in a different bank ($0F:$FA2E)
0x018C4C|$06:$8C3C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018C4F|$06:$8C3F:9E	; String ID #$019E: But nothing happened.[end-FC]

; data -> code
0x018C50|$06:$8C40:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; spell ID is not #$09, #$0B, #$0D, #$10, or #$12
; control flow target (from $8C32)
0x018C53|$06:$8C43:C9 13   	CMP #$13   	; Spell ID #$13: Repel
0x018C55|$06:$8C45:D0 06   	BNE $8C4D  	; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$13
0x018C57|$06:$8C47:A9 FE   	LDA #$FE   
0x018C59|$06:$8C49:85 46   	STA $46    	; Repel (#$FE) / Fairy Water (#$FF) flag
0x018C5B|$06:$8C4B:D0 E0   	BNE $8C2D  
; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$13
; control flow target (from $8C45)
0x018C5D|$06:$8C4D:C9 14   	CMP #$14   	; Spell ID #$14: Return
0x018C5F|$06:$8C4F:D0 11   	BNE $8C62  	; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$14
; handler for Return spell effect
; control flow target (from $9661)
0x018C61|$06:$8C51:A2 02   	LDX #$02   
; call to code in a different bank ($0F:$D2E7)
0x018C63|$06:$8C53:20 E7 D2	JSR $D2E7  	; X = 1 => CLC and update $0C-$0D to warp point data to use if Outside allowed from current map, SEC otherwise, X = 2 => CLC and update $0C-$0D to warp point data to use if Return allowed from current map, SEC otherwise, X = 3 => disembark from ship and update ship position based on last save point ID $48
0x018C66|$06:$8C56:B0 E4   	BCS $8C3C  	; spell ineffective
0x018C68|$06:$8C58:A9 95   	LDA #$95   	; Music ID #$95: Return SFX
; call to code in a different bank ($0F:$C561)
0x018C6A|$06:$8C5A:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x018C6D|$06:$8C5D:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$D88F)
0x018C6F|$06:$8C5F:4C 8F D8	JMP $D88F  	; warp to warp point given by ($0C)

; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$14
; control flow target (from $8C4F)
0x018C72|$06:$8C62:C9 15   	CMP #$15   	; Spell ID #$15: Open
0x018C74|$06:$8C64:D0 2E   	BNE $8C94  	; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$15
0x018C76|$06:$8C66:A9 00   	LDA #$00   
0x018C78|$06:$8C68:85 C9   	STA $C9    
; call to code in a different bank ($0F:$CF7C)
0x018C7A|$06:$8C6A:20 7C CF	JSR $CF7C  
0x018C7D|$06:$8C6D:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018C7F|$06:$8C6F:C9 FF   	CMP #$FF   
0x018C81|$06:$8C71:F0 1E   	BEQ $8C91  
0x018C83|$06:$8C73:A9 01   	LDA #$01   
0x018C85|$06:$8C75:85 C9   	STA $C9    
; call to code in a different bank ($0F:$CF7C)
0x018C87|$06:$8C77:20 7C CF	JSR $CF7C  
0x018C8A|$06:$8C7A:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018C8C|$06:$8C7C:C9 FF   	CMP #$FF   
0x018C8E|$06:$8C7E:F0 11   	BEQ $8C91  
0x018C90|$06:$8C80:A9 02   	LDA #$02   
0x018C92|$06:$8C82:85 C9   	STA $C9    
; call to code in a different bank ($0F:$CF7C)
0x018C94|$06:$8C84:20 7C CF	JSR $CF7C  
0x018C97|$06:$8C87:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018C99|$06:$8C89:C9 FF   	CMP #$FF   
0x018C9B|$06:$8C8B:F0 04   	BEQ $8C91  
; call to code in a different bank ($0F:$FA2E)
0x018C9D|$06:$8C8D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x018CA0|$06:$8C90:3B	; String ID #$013B: There is no door here.[end-FC]

; data -> code
; control flow target (from $8C71, $8C7E, $8C8B)
0x018CA1|$06:$8C91:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$15
; control flow target (from $8C64)
0x018CA4|$06:$8C94:C9 16   	CMP #$16   	; Spell ID #$16: Stepguard
0x018CA6|$06:$8C96:D0 07   	BNE $8C9F  	; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$16; ergo it's Spell ID #$17: Revive
0x018CA8|$06:$8C98:A9 FF   	LDA #$FF   
0x018CAA|$06:$8C9A:85 47   	STA $47    	; Stepguard flag
0x018CAC|$06:$8C9C:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$16; ergo it's Spell ID #$17: Revive
; control flow target (from $8C96, $964B)
0x018CAF|$06:$8C9F:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018CB1|$06:$8CA1:20 AC 8D	JSR $8DAC  	; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
0x018CB4|$06:$8CA4:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018CB7|$06:$8CA7:29 80   	AND #$80   	; Alive
0x018CB9|$06:$8CA9:F0 03   	BEQ $8CAE  
0x018CBB|$06:$8CAB:4C 3C 8C	JMP $8C3C  	; spell ineffective

; control flow target (from $8CA9)
0x018CBE|$06:$8CAE:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
0x018CC0|$06:$8CB0:85 97   	STA $97    	; subject hero ID $97
0x018CC2|$06:$8CB2:20 AC 8D	JSR $8DAC  	; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
0x018CC5|$06:$8CB5:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018CC8|$06:$8CB8:09 80   	ORA #$80   	; Alive
0x018CCA|$06:$8CBA:99 2D 06	STA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018CCD|$06:$8CBD:A9 01   	LDA #$01   	; revive with 1 HP
0x018CCF|$06:$8CBF:99 3B 06	STA $063B,Y	; Midenhall Current HP, low byte
; call to code in a different bank ($0F:$D302)
0x018CD2|$06:$8CC2:20 02 D3	JSR $D302  
; call to code in a different bank ($0F:$C22C)
0x018CD5|$06:$8CC5:20 2C C2	JSR $C22C  
0x018CD8|$06:$8CC8:A5 49   	LDA $49    	; object hero/target/item/string ID $49; target hero ID for single-target spells
; call to code in a different bank ($0F:$FC50)
0x018CDA|$06:$8CCA:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2A)
0x018CDD|$06:$8CCD:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x018CE0|$06:$8CD0:44	; String ID #$0044: [name] returned to life.[end-FC]

; data -> code
0x018CE1|$06:$8CD1:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for Outside spell effect
; control flow target (from $8C34)
; external control flow target (from $0F:$D597, $0F:$D59D)
0x018CE4|$06:$8CD4:A2 01   	LDX #$01   
; call to code in a different bank ($0F:$D2E7)
0x018CE6|$06:$8CD6:20 E7 D2	JSR $D2E7  	; X = 1 => CLC and update $0C-$0D to warp point data to use if Outside allowed from current map, SEC otherwise, X = 2 => CLC and update $0C-$0D to warp point data to use if Return allowed from current map, SEC otherwise, X = 3 => disembark from ship and update ship position based on last save point ID $48
0x018CE9|$06:$8CD9:B0 01   	BCS $8CDC  
0x018CEB|$06:$8CDB:60      	RTS        

; control flow target (from $8CD9)
0x018CEC|$06:$8CDC:68      	PLA        
; MP costs (built in offset from real data at $8CE6)
; indexed data load target (from $8B7E, $8BAD)
0x018CED|$06:$8CDD:68      	PLA        
0x018CEE|$06:$8CDE:4C 3C 8C	JMP $8C3C  	; spell ineffective


; code -> data
; single-target spell list, field
; indexed data load target (from $8B8E)
0x018CF1|$06:$8CE1:09	; Spell ID #$09: Heal
0x018CF2|$06:$8CE2:0B	; Spell ID #$0B: Healmore
0x018CF3|$06:$8CE3:0D	; Spell ID #$0D: Healall
0x018CF4|$06:$8CE4:10	; Spell ID #$10: Antidote
0x018CF5|$06:$8CE5:17	; Spell ID #$17: Revive

; MP Cost for Spells on Field (referenced as $8CDD,X)
0x018CF6|$06:$8CE6:03	; Spell ID #$09: Heal
0x018CF7|$06:$8CE7:00	; Spell ID #$0A: Increase
0x018CF8|$06:$8CE8:05	; Spell ID #$0B: Healmore
0x018CF9|$06:$8CE9:00	; Spell ID #$0C: Sacrifice
0x018CFA|$06:$8CEA:08	; Spell ID #$0D: Healall
0x018CFB|$06:$8CEB:00	; Spell ID #$0E: Explodet
0x018CFC|$06:$8CEC:00	; Spell ID #$0F: Chance
0x018CFD|$06:$8CED:03	; Spell ID #$10: Antidote
0x018CFE|$06:$8CEE:02	; Spell ID #$11: Heal (not used by heroes)
0x018CFF|$06:$8CEF:06	; Spell ID #$12: Outside
0x018D00|$06:$8CF0:02	; Spell ID #$13: Repel
0x018D01|$06:$8CF1:06	; Spell ID #$14: Return
0x018D02|$06:$8CF2:02	; Spell ID #$15: Open
0x018D03|$06:$8CF3:04	; Spell ID #$16: Stepguard
0x018D04|$06:$8CF4:0F	; Spell ID #$17: Revive

; data -> code
; add $8F-$90 to party gold, capped at $FFFF
; control flow target (from $8536, $9C58)
0x018D05|$06:$8CF5:A5 8F   	LDA $8F    
0x018D07|$06:$8CF7:18      	CLC        
0x018D08|$06:$8CF8:6D 24 06	ADC $0624  	; party gold, low byte
0x018D0B|$06:$8CFB:8D 24 06	STA $0624  	; party gold, low byte
0x018D0E|$06:$8CFE:A5 90   	LDA $90    
0x018D10|$06:$8D00:6D 25 06	ADC $0625  	; party gold, high byte
0x018D13|$06:$8D03:8D 25 06	STA $0625  	; party gold, high byte
0x018D16|$06:$8D06:90 08   	BCC $8D10  	; cap party gold at 65,535
0x018D18|$06:$8D08:A9 FF   	LDA #$FF   
0x018D1A|$06:$8D0A:8D 24 06	STA $0624  	; party gold, low byte
0x018D1D|$06:$8D0D:8D 25 06	STA $0625  	; party gold, high byte
; control flow target (from $8D06)
0x018D20|$06:$8D10:60      	RTS        

; given item ID in $96 and discount amount in $8F-$90, set $8F-$90 to discounted item price
; control flow target (from $8355, $8462)
0x018D21|$06:$8D11:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x018D23|$06:$8D13:0A      	ASL        	; item prices are 2 bytes each
0x018D24|$06:$8D14:A8      	TAY        
0x018D25|$06:$8D15:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x018D28|$06:$8D18:38      	SEC        
0x018D29|$06:$8D19:E5 8F   	SBC $8F    
0x018D2B|$06:$8D1B:85 8F   	STA $8F    
0x018D2D|$06:$8D1D:B9 FD 9F	LDA $9FFD,Y	; Item Prices, high byte
0x018D30|$06:$8D20:E5 90   	SBC $90    
0x018D32|$06:$8D22:85 90   	STA $90    
0x018D34|$06:$8D24:60      	RTS        

; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; control flow target (from $8324, $833E, $8379, $83FC, $8438, $84AD, $8599, $85F0, $863E, $8691, $8AB3, $8AD9, $8AF5, $8B5F, $8BB6, $8F26, $904A, $9125, $9476, $959D, $95C0, $963A, $9652, $96D4, $9830, $99B7, $99E5, $99F2, $9A0D, $9A26, $9A31, $9A55, $9A5F, $9A6F, $9A7A, $9A9F, $9AAC, $9AF1, $9B1E, $9D2D, $9D3C)
0x018D35|$06:$8D25:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$FC50)
0x018D37|$06:$8D27:4C 50 FC	JMP $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA

; set $8F-$90 to A-#$00
; control flow target (from $9C75)
0x018D3A|$06:$8D2A:85 8F   	STA $8F    
0x018D3C|$06:$8D2C:A9 00   	LDA #$00   
0x018D3E|$06:$8D2E:85 90   	STA $90    
0x018D40|$06:$8D30:60      	RTS        

; given gold amount in $8F-$90, decrease party gold by that amount and SEC if possible, CLC otherwise
; control flow target (from $823D, $8688, $8D7B, $9130)
0x018D41|$06:$8D31:AD 24 06	LDA $0624  	; party gold, low byte
0x018D44|$06:$8D34:38      	SEC        
0x018D45|$06:$8D35:E5 8F   	SBC $8F    	; amount to subtract, low byte
0x018D47|$06:$8D37:85 0C   	STA $0C    
0x018D49|$06:$8D39:AD 25 06	LDA $0625  	; party gold, high byte
0x018D4C|$06:$8D3C:E5 90   	SBC $90    	; amount to subtract, high byte
0x018D4E|$06:$8D3E:85 0D   	STA $0D    
0x018D50|$06:$8D40:90 0A   	BCC $8D4C  	; C clear => not enough gold, so just RTS
0x018D52|$06:$8D42:A5 0C   	LDA $0C    	; otherwise, C is set; update party gold with new total
0x018D54|$06:$8D44:8D 24 06	STA $0624  	; party gold, low byte
0x018D57|$06:$8D47:A5 0D   	LDA $0D    
0x018D59|$06:$8D49:8D 25 06	STA $0625  	; party gold, high byte
; control flow target (from $8D40)
0x018D5C|$06:$8D4C:60      	RTS        

; given item ID in A, save it to $96 and set $8F-$90 to purchase price of item, accounting for possible Golden Card discount; decrease party gold by that amount and SEC if possible, CLC otherwise
; control flow target (from $82E5, $83E2)
0x018D5D|$06:$8D4D:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x018D5F|$06:$8D4F:0A      	ASL        	; price list is 2 bytes wide
0x018D60|$06:$8D50:A8      	TAY        
0x018D61|$06:$8D51:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x018D64|$06:$8D54:85 8F   	STA $8F    
0x018D66|$06:$8D56:B9 FD 9F	LDA $9FFD,Y	; Item Prices, high byte
0x018D69|$06:$8D59:85 90   	STA $90    
0x018D6B|$06:$8D5B:A9 32   	LDA #$32   	; Item ID #$32: Golden Card
0x018D6D|$06:$8D5D:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x018D70|$06:$8D60:C9 FF   	CMP #$FF   
0x018D72|$06:$8D62:F0 17   	BEQ $8D7B  	; branch if no Golden Card, otherwise extra string and altered price
0x018D74|$06:$8D64:46 90   	LSR $90    	; 16-bit LSR
0x018D76|$06:$8D66:66 8F   	ROR $8F    
0x018D78|$06:$8D68:46 90   	LSR $90    	; 16-bit LSR
0x018D7A|$06:$8D6A:66 8F   	ROR $8F    
0x018D7C|$06:$8D6C:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x018D7F|$06:$8D6F:38      	SEC        
0x018D80|$06:$8D70:E5 8F   	SBC $8F    
0x018D82|$06:$8D72:85 8F   	STA $8F    
0x018D84|$06:$8D74:B9 FD 9F	LDA $9FFD,Y	; Item Prices, high byte
0x018D87|$06:$8D77:E5 90   	SBC $90    
0x018D89|$06:$8D79:85 90   	STA $90    	; 25% discount
; control flow target (from $8D62)
0x018D8B|$06:$8D7B:4C 31 8D	JMP $8D31  	; given gold amount in $8F-$90, decrease party gold by that amount and SEC if possible, CLC otherwise

; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
; control flow target (from $836F, $83F7, $8433, $8479, $872E, $92A9, $9313, $9A07, $9C70, $9C8B, $A2D2, $A2D9, $A2E0)
0x018D8E|$06:$8D7E:A5 97   	LDA $97    	; subject hero ID $97; hero ID
0x018D90|$06:$8D80:0A      	ASL        	; 8 inventory slots per hero
0x018D91|$06:$8D81:0A      	ASL        
0x018D92|$06:$8D82:0A      	ASL        
0x018D93|$06:$8D83:A8      	TAY        
0x018D94|$06:$8D84:A2 00   	LDX #$00   	; loop counter
; control flow target (from $8D8F)
0x018D96|$06:$8D86:B9 00 06	LDA $0600,Y	; Midenhall inventory item 1 (| #$40 if equipped)
0x018D99|$06:$8D89:F0 08   	BEQ $8D93  	; if empty slot, go add item
0x018D9B|$06:$8D8B:C8      	INY        	; else, increment inventory index and loop counter
0x018D9C|$06:$8D8C:E8      	INX        
0x018D9D|$06:$8D8D:E0 08   	CPX #$08   	; 8 inventory slots per hero
0x018D9F|$06:$8D8F:D0 F5   	BNE $8D86  	; if more inventory slots to check, loop to check them
0x018DA1|$06:$8D91:18      	CLC        	; at this point, we know hero's inventory is already full, so flag failure for calling code
0x018DA2|$06:$8D92:60      	RTS        

; control flow target (from $8D89)
0x018DA3|$06:$8D93:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x018DA5|$06:$8D95:99 00 06	STA $0600,Y	; Midenhall inventory item 1 (| #$40 if equipped); add to hero's inventory
0x018DA8|$06:$8D98:38      	SEC        	; flag success for calling code
0x018DA9|$06:$8D99:60      	RTS        

; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
; control flow target (from $8339, $8594, $8639, $8B57, $9045, $9453, $946C, $9499, $94A3, $9595, $95EA, $9608, $99E0, $9A21, $9A36, $9A50, $9A9A, $9ADB, $9D25)
0x018DAA|$06:$8D9A:85 0C   	STA $0C    
0x018DAC|$06:$8D9C:20 AA 8D	JSR $8DAA  	; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
0x018DAF|$06:$8D9F:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018DB2|$06:$8DA2:25 0C   	AND $0C    
0x018DB4|$06:$8DA4:F0 02   	BEQ $8DA8  
0x018DB6|$06:$8DA6:38      	SEC        
0x018DB7|$06:$8DA7:60      	RTS        

; control flow target (from $8DA4)
0x018DB8|$06:$8DA8:18      	CLC        
0x018DB9|$06:$8DA9:60      	RTS        

; given hero ID in $97, set Y to start of hero's data in $062D,Y, i.e. Y = $97 * #$12
; control flow target (from $85B2, $8659, $86A6, $8B78, $8BA4, $8D9C)
0x018DBA|$06:$8DAA:A5 97   	LDA $97    	; subject hero ID $97
; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
; control flow target (from $8BE3, $8C09, $8C1E, $8CA1, $8CB2, $960F)
0x018DBC|$06:$8DAC:F0 0A   	BEQ $8DB8  	; if it's Midenhall, use + #$00
0x018DBE|$06:$8DAE:C9 01   	CMP #$01   	; is it Cannock?
0x018DC0|$06:$8DB0:D0 04   	BNE $8DB6  	; if no, keep checking
0x018DC2|$06:$8DB2:A9 12   	LDA #$12   	; if yes, use + #$12
0x018DC4|$06:$8DB4:D0 02   	BNE $8DB8  	; and skip over Moonbrooke
; control flow target (from $8DB0)
0x018DC6|$06:$8DB6:A9 24   	LDA #$24   	; it's Moonbrooke, so use + #$24
; control flow target (from $8DAC, $8DB4)
0x018DC8|$06:$8DB8:A8      	TAY        
0x018DC9|$06:$8DB9:60      	RTS        

; given a hero ID in $97 and an item ID in A, SEC if hero has that item, CLC otherwise
; control flow target (from $85E7, $9897, $98B2, $9916)
0x018DCA|$06:$8DBA:48      	PHA        
0x018DCB|$06:$8DBB:A5 97   	LDA $97    	; subject hero ID $97
0x018DCD|$06:$8DBD:85 9C   	STA $9C    
0x018DCF|$06:$8DBF:68      	PLA        
; call to code in a different bank ($0F:$C4B0)
0x018DD0|$06:$8DC0:4C B0 C4	JMP $C4B0  	; given a hero ID in $9C and an item ID in A, SEC if hero has that item, CLC otherwise

; given a hero ID in $97 and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise
; control flow target (from $8612, $8716)
0x018DD3|$06:$8DC3:48      	PHA        
0x018DD4|$06:$8DC4:A5 97   	LDA $97    	; subject hero ID $97
0x018DD6|$06:$8DC6:85 9C   	STA $9C    
0x018DD8|$06:$8DC8:68      	PLA        
; call to code in a different bank ($0F:$C4B6)
0x018DD9|$06:$8DC9:4C B6 C4	JMP $C4B6  	; given a hero ID in $9C and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise

; restore full HP to all living party members
; control flow target (from $825B, $951C)
; external control flow target (from $0F:$C789, $0F:$D289)
0x018DDC|$06:$8DCC:A0 00   	LDY #$00   
; control flow target (from $8DE9)
0x018DDE|$06:$8DCE:B9 3B 06	LDA $063B,Y	; Midenhall Current HP, low byte
0x018DE1|$06:$8DD1:19 3C 06	ORA $063C,Y	; Midenhall Current HP, high byte
0x018DE4|$06:$8DD4:F0 0C   	BEQ $8DE2  	; branch if current HP is #$00
0x018DE6|$06:$8DD6:B9 30 06	LDA $0630,Y	; Midenhall Max HP low byte
0x018DE9|$06:$8DD9:99 3B 06	STA $063B,Y	; Midenhall Current HP, low byte
0x018DEC|$06:$8DDC:B9 31 06	LDA $0631,Y	; Midenhall Max HP high byte
0x018DEF|$06:$8DDF:99 3C 06	STA $063C,Y	; Midenhall Current HP, high byte
; control flow target (from $8DD4)
0x018DF2|$06:$8DE2:98      	TYA        
0x018DF3|$06:$8DE3:18      	CLC        
0x018DF4|$06:$8DE4:69 12   	ADC #$12   	; hero data is #$12 bytes each
0x018DF6|$06:$8DE6:A8      	TAY        
0x018DF7|$06:$8DE7:C9 36   	CMP #$36   	; and there are 3 heroes
0x018DF9|$06:$8DE9:D0 E3   	BNE $8DCE  	; if more heroes to heal, heal them
0x018DFB|$06:$8DEB:60      	RTS        

; restore full MP to all living party members
; control flow target (from $825E, $9175)
; external control flow target (from $0F:$C78C)
0x018DFC|$06:$8DEC:A0 00   	LDY #$00   	; start with Midenhall
; control flow target (from $8E03)
0x018DFE|$06:$8DEE:B9 3B 06	LDA $063B,Y	; Midenhall Current HP, low byte
0x018E01|$06:$8DF1:19 3C 06	ORA $063C,Y	; Midenhall Current HP, high byte
0x018E04|$06:$8DF4:F0 06   	BEQ $8DFC  	; zero HP => dead, right?
0x018E06|$06:$8DF6:B9 32 06	LDA $0632,Y	; Midenhall Max MP
0x018E09|$06:$8DF9:99 3D 06	STA $063D,Y	; Midenhall Current MP
; control flow target (from $8DF4)
0x018E0C|$06:$8DFC:98      	TYA        
0x018E0D|$06:$8DFD:18      	CLC        
0x018E0E|$06:$8DFE:69 12   	ADC #$12   	; hero data is #$12 bytes wide
0x018E10|$06:$8E00:A8      	TAY        
0x018E11|$06:$8E01:C9 36   	CMP #$36   	; max of 3 heroes at #$12 each => stop at #$36
0x018E13|$06:$8E03:D0 E9   	BNE $8DEE  	; if more heroes to check, check them
0x018E15|$06:$8E05:60      	RTS        

; handler for dialogue IDs #$29-#$94 (open dialogue window and display string specified by A + #$1D7, i.e. String IDs #$0200-#$026B)
; control flow target (from $81F0)
0x018E16|$06:$8E06:38      	SEC        
0x018E17|$06:$8E07:E9 29   	SBC #$29   
0x018E19|$06:$8E09:85 49   	STA $49    	; object hero/target/item/string ID $49
0x018E1B|$06:$8E0B:48      	PHA        	; string ID
0x018E1C|$06:$8E0C:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018E1F|$06:$8E0F:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$FC50)
0x018E21|$06:$8E11:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x018E24|$06:$8E14:68      	PLA        	; string ID
0x018E25|$06:$8E15:C9 64   	CMP #$64   	; either this or the above call to $FC50 are useless
0x018E27|$06:$8E17:90 17   	BCC $8E30  
0x018E29|$06:$8E19:48      	PHA        	; string ID
0x018E2A|$06:$8E1A:C9 6A   	CMP #$6A   
0x018E2C|$06:$8E1C:B0 04   	BCS $8E22  
0x018E2E|$06:$8E1E:A9 00   	LDA #$00   	; Midenhall
0x018E30|$06:$8E20:F0 0A   	BEQ $8E2C  
; control flow target (from $8E1C)
0x018E32|$06:$8E22:C9 6A   	CMP #$6A   	; string ID #026A uses Cannock's name
0x018E34|$06:$8E24:D0 04   	BNE $8E2A  	; string IDs > #026A uses Moonbrooke's name
0x018E36|$06:$8E26:A9 01   	LDA #$01   	; Cannock
0x018E38|$06:$8E28:D0 02   	BNE $8E2C  
; control flow target (from $8E24)
0x018E3A|$06:$8E2A:A9 02   	LDA #$02   	; Moonbrooke
; control flow target (from $8E20, $8E28)
; call to code in a different bank ($0F:$FC50)
0x018E3C|$06:$8E2C:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x018E3F|$06:$8E2F:68      	PLA        	; String IDs #$0200-#$026B: "‘When in need, visit the Houses of Healing[.’][end-FC]" / "‘[name] is still inexperienced.[line]Return here in thy need[.’][end-FC]" / "‘One who sets foot upon the Travel Door is transported to a distant place[.’][end-FC]" / "‘The Dragon's Bane is a magic charm[.’][wait][line]‘It is said that it may keep one safe from the spell[.’][end-FC]" / "‘If thy path leads west of this castle thou shall reach the town of Leftwyne[.’][end-FC]" / "‘This is Midenhall Castle[.’][end-FC]" / "‘Remember to equip thyself with weapons and armor when thou obtains such items[.’][end-FC]" / "‘Woof, woof!’[end-FC]" / "‘[name], royalty should not venture into prisons such as this[.’][end-FC]" / "‘I have heard that the heir of our good King has ventured forth to do battle with the evil sorcerer, Hargon[.’][wait][line]‘What? Thou art the one? Luck be with thee[.’][end-FC]" / "‘If thou art poisoned, each step will weaken thee further[.’][end-FC]" / "‘Northward lies the castle of Cannock, my friend[.’][end-FC]" / "‘Welcome to Leftwyne[.’][end-FC]" / "‘Look for the monolith by the inland sea west of this place[.’][wait][line]‘It is by that route alone that thou shall reach Moonbrooke[.’][end-FC]" / "‘Oh, thou scared me! And my hiccups are cured! Thank thee, stranger[.’][end-FC]" / "‘Bow-wow!’[end-FC]" / "‘I have heard of a cave far to the east in which the Spring of Bravery rises[.’][end-FC]" / "‘Welcome to Cannock Castle[.’][end-FC]" / "‘Only if the descendants of Erdrick combine their skills can the forces of evil be overcome[.’][end-FC]" / "‘If thou would speak to the prisoners, do so through the barred doors[.’][end-FC]" / "‘Pssst.[line]I'll tell thee a secret[.’][wait][line]‘There is a silver key that opens doors of silver[.’][end-FC]" / "‘What does it matter if people steal things[.’][wait][line]‘The world is doomed no matter what happens[.’][end-FC]" / "‘I saw the sky burning red on the southern horizon[.’][wait][line]‘Perhaps it was Moonbrooke Castle in flames[.’][end-FC]" / "‘Listen closely[.’][wait][line]‘Our prince has studied the ways of magic, though with heavy armor or weapons he has no skill[.’][wait][line]‘Still, he seeks to fight evil[.’][end-FC]" / "‘There is a legend that tells of a great and good wizard who lives in a cave in the sea[.’][wait][line]‘If thou hast the five crests he will come to thee[.’][end-FC]" / "‘Here in Hamlin not all is as it seems[.’][wait][line]‘Talk to everyone, for appearances may not reflect the true person[.’][end-FC]" / "‘Southwest of this village lies the castle of Moonbrooke[.’][end-FC]" / "‘Some say that there is a tall tower, and in it a brave adventurer may find the Cloak of Wind[.’][wait][line]‘It can save thee if thou falls from a great height[.’][end-FC]" / "‘The Mirror of Ra was lost long ago in a swamp southeast of Hamlin in the place where four bridges can be seen[.’][end-FC]" / "‘Help! Help! Hargon is coming to destroy us all!’[end-FC]" / "‘Of keys and doors I know this[.’][wait][line]‘There are silver keys and golden keys, and doors to match them each[.’][wait][line]‘Seek thee first the silver key, for this is what I teach[.’][wait][line]‘That key is in the Cave of the Lake, west of Cannock's walls[.’][wait][line]‘But go only with a friend inside, or there thou shall surely fall[.’][end-FC]" / "‘Eastward, across an arm of the sea lies the kingdom of Alefgard[.’][wait][line]‘From there in ages past came a great warrior ‟a descendant of Erdrick” who slew dragons, and there came also a princess named Gwaelin[.’][end-FC]" / "‘Please, please, do not hurt me!’[wait][line]‘I can tell thee of a secret[.’][wait][line]‘In Hamlin Village there is a Water Crest. Seek it!’[end-FC]" / "‘It has been rumored that the king of Tantegel Castle has disappeared[.’][end-FC]" / "‘I am a soldier from Alefgard[.’][wait][line]‘Perhaps thou has seen ancient maps of my land, but it has changed much through the ages[.’][end-FC]" / "‘Thou art welcome in Lianport[.’][end-FC]" / "‘Yes, this is Tantegel[.’][end-FC]" / "‘The golden key opens the red door, too[.’][end-FC]" / "‘Pardon me, stranger, but I had a vision and in it descendants of the great hero Erdrick came to us in our need[.’][wait][line]‘Ah! So it was true.[line]Thou art truly welcome[.’][end-FC]" / "‘Thou hast come to Tantegel Castle[.’][end-FC]" / "‘Long ago Princess Gwaelin departed over the sea, but thy companion is her twin in appearance[.’][end-FC]" / "‘So thou has come even here to this simple room[.’][wait][line]‘I cannot help thee. My hope fled long ago[.’][end-FC]" / "‘The King keeps himself hidden, for he is afraid of Hargon's wrath[.’][end-FC]" / "‘The Echoing Flute blows a magical note[.’][wait][line]‘On an island, in a tower, in a chamber remote, play it and listen, a wise man once wrote[.’][wait][line]‘For when the sound echoes, there shall thou find, a crest of great power to aid thee in time[.’][end-FC]" / "‘So, thou art the great warriors of which we have heard[.’][end-FC]" / "‘Here in this coliseum many heroes have proven their strength[.’][end-FC]" / "‘Beyond lies the coliseum and the court of the King[.’][end-FC]" / "‘In the island town of Zahan in the southern ocean lives a man named Torval who owns the golden key[.’][end-FC]" / "‘As the story goes, it was a dark and stormy night when the pirate ship, Relentless, hit a reef and sank[.’][wait][line]‘They say that in its hold was the Echoing Flute[.’][end-FC]" / "‘I seek the Armor of Gaia[.’][wait][line]‘I was told that it was kept in a shop that sells armor[.’][end-FC]" / "Thou hast found the Stars Crest.[end-FC]" / "‘Do not overburden thyself. Cast away those items that thou doesn't need[.’][end-FC]" / "‘I have come seeking a thief by the name of Roge Fastfinger[.’][end-FC]" / "‘I warn thee to go back. This wizard's house may be thy ruin[.’][end-FC]" / "‘Thou hast come to Zahan at a poor time[.’][wait][line]‘All the men are away fishing at sea[.’][end-FC]" / "‘Many are the tales of a mountainous island in the sea and its great cavern[.’][wait][line]‘It is said that only one who bears the Moon Fragment may enter there[.’][end-FC]" / "‘One day I will be a great fisherman like Papa[.’][end-FC]" / "‘When the Moon Fragment is held upon high, the tide will rise and the seagulls cry[.’][end-FC]" / "‘Oh Formeo, Formeo, where for art thou my Formeo!’[end-FC]" / "‘Yes, I am Torval's wife. But just between us, he loves his dogs more than me[.’][end-FC]" / "‘That mutt yonder keeps pulling at my sleeve[.’][end-FC]" / "‘So thou hast heard of the sinking of the Relentless[.’][wait][line]‘Some say that the pirates simply left the plug out. Fools[.’][end-FC]" / "‘This is a town of lonely women, old men, dogs and children[.’][wait][line]‘What the men want of those stinking fish is beyond me[.’][end-FC]" / "‘Hello. This is the village of Tuhn[.’][end-FC]" / "‘Many years have passed since the Tower of the Moon could be reached by ship[.’][wait][line]‘It lies to the south[.’][end-FC]" / "‘Thou hast heard of Roge Fastfinger I see[.’][wait][line]‘Well, he stole the key to our watergate, the scoundrel.[line]We would dearly love to have it back[.’][end-FC]" / "‘If Jena sent thee, tell her I would not name our dog Ruffles for all the dragon's gold in Alefgard[.’][end-FC]" / "‘Ruff, ruff..[.’][end-FC]" / "‘It is said that the Tower of the Moon holds a piece of the moon[.’][end-FC]" / "‘I'm Jena. If thou meets my husband, tell him that my father's name was Ruffles[.’][end-FC]" / "‘Far and wide I have sought a master weaver who makes Water Flying Cloth, and they say such a man lives here[.’][end-FC]" / "‘If the watergate were to be raised, water would once more fill the dry riverbed[.’][end-FC]" / "‘Where has everyone gone?[line]Dost thou think it is my breath?’[end-FC]" / "‘Yip, yip, yip!’[end-FC]" / "‘Hargon dwells on the high plateau of Rhone[.’][wait][line]‘Only one who has the Eye of Malroth can find the road to that place[.’][end-FC]" / "‘It is true enough[.’][wait][line]‘I locked Roge Fastfinger in prison and threw away the key.[line]But he has escaped[.’][end-FC]" / "‘For the finest Water Flying Cloth I recommend Don Mahone who lives in Tuhn[.’][end-FC]" / "‘I bid thee welcome to Wellgarth Town[.’][wait][line]‘I shall sing for thee[.’][end-FC]" / "‘Let me tell thee, Hargon is a master of disguise, but if thou hast the Charm of Rubiss thou will see through the deception[.’][end-FC]" / "‘How dare thou enter a lady's room unbidden!’[end-FC]" / "‘It is said that the greatest shall fall by a spell of his own devising[.’][end-FC]" / "‘There is an isolated valley northwest of the town where once a road led to Rhone[.’][end-FC]" / "‘Some say that Hargon has cast a spell over his entire castle, that it looks fair and peaceful[.’][wait][line]‘Thou will not be deceived if thou hast the gift of Rubiss[.’][end-FC]" / "‘In the ocean far to the east lies an island and on it are trees from every corner of the world[.’][end-FC]" / "‘Having come this far, thou may as well try the door there to the left[.’][end-FC]" / "‘Roge Fastfinger? No, I have not heard the name[.’][end-FC]" / "‘We call this town Beran. Welcome[.’][end-FC]" / "‘Thou should see the King of Osterfair for the Moon Crest[.’][end-FC]" / "‘With the Magic Loom and Dew's Yarn thou can make the Water Flying Cloth[.’][end-FC]" / "‘The Leaf of the World Tree has the power to revive ghosts[.’][end-FC]" / "‘I seek the Thunder Sword, for one need not know magic to use its power[.’][end-FC]" / "‘Osterfair lies far south of Midenhall on a great island[.’][end-FC]" / "‘Welcome to Bragol's Tools. May I help thee?’[end-FC]" / "‘Greetings. I am the Keeper of this Inn[.’][end-FC]" / "‘Thou hast come to Midenhall[.’][end-FC]" / "‘[..][..][.’][end-FC]" / "‘[..][..][.’][end-FC]" / "‘Only the golden key can open this door[.’][end-FC]" / "‘This travel door takes one back to the underworld.[line]If that is thy wish, please enter[.’][end-FC]" / "‘The ancient road to Rhone was once west of this monolith[.’][end-FC]" / "‘In Cannock there is a young prince and Moonbrooke had a princess[.’][end-FC]" / "‘Although it makes me sad, thou must go forth and seek thy destiny[.’][end-FC]" / "‘Thief! Thief! What? Thou art [name], heir of Midenhall!’[wait][line]‘Please forgive me[.’][end-FC]" / "[end-FC]" / "‘Ghosts may wander this world under moon or sun and at times they may even be recalled[.’][end-FC]" / "‘If thy name is [name], I have a message for thee[.’][wait][line]‘Seek the Fire Monolith and thou shall find the Sun Crest[.’][end-FC]" / "‘That is the chamber of Prince [name]'s sister, Princess Halla[.’][end-FC]" / "‘After the sacking of Moonbrooke I escaped and made my way here, hoping others would follow[.’][end-FC]"
; control flow target (from $8E17)
; call to code in a different bank ($0F:$FA52)
0x018E40|$06:$8E30:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x018E43|$06:$8E33:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x018E45|$06:$8E35:C9 6B   	CMP #$6B   
0x018E47|$06:$8E37:D0 08   	BNE $8E41  
; call to code in a different bank ($0F:$FA32)
0x018E49|$06:$8E39:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018E4C|$06:$8E3C:6C	; String ID #$026C: [end-FC]

; data -> code
; call to code in a different bank ($0F:$FA32)
0x018E4D|$06:$8E3D:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018E50|$06:$8E40:6D	; String ID #$026D: [end-FC]

; data -> code
; control flow target (from $8E37)
0x018E51|$06:$8E41:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue IDs #$95-#$9C (open dialogue window, display string specified by A + #$1D9, display YES/NO menu, and display string corresponding to selected option)
; control flow target (from $81F7)
0x018E54|$06:$8E44:38      	SEC        
0x018E55|$06:$8E45:E9 95   	SBC #$95   	; why not just SBC #$27?
0x018E57|$06:$8E47:18      	CLC        
0x018E58|$06:$8E48:69 6E   	ADC #$6E   	; String IDs #$026E-#$0275: "‘Dost thou think it was Hargon who attacked Moonbrooke and set it aflame?’[FD][FD][end-FC]" / "‘Dost thou have a lottery ticket?’[FD][FD][end-FC]" / "‘This is a sewing shop, true, but I do not have the Dew's Yarn[.’][line]Dost thou seek the Dew's Yarn, too?’[FD][FD][end-FC]" / "‘Hast thou heard of the sunken treasure?’[FD][FD][end-FC]" / "‘Tell me, did thou come to buy the Jailor's Key?’[FD][FD][end-FC]" / "‘Pardon me, good folk, but dost thou have the time?’[FD][FD][end-FC]" / "‘Hast thou found the Eye of Malroth?’[FD][FD][end-FC]" / "‘Hast thy travels taken thee to the monolith south of Midenhall?’[FD][FD][end-FC]"
0x018E5A|$06:$8E4A:85 49   	STA $49    	; object hero/target/item/string ID $49
0x018E5C|$06:$8E4C:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018E5F|$06:$8E4F:A5 49   	LDA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$FA52)
0x018E61|$06:$8E51:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x018E64|$06:$8E54:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018E67|$06:$8E57:C9 00   	CMP #$00   	; YES
0x018E69|$06:$8E59:D0 04   	BNE $8E5F  
0x018E6B|$06:$8E5B:A9 08   	LDA #$08   	; String IDs #$0276-#$027D: "‘Yes, I think so, too[.’][end-FC]" / "‘The Lottery is but a game; do not take it too seriously[.’][end-FC]" / "‘Alas, I have no more of the Dew's Yarn, but I know where thou may seek some,[wait][line]for it is a substance made of wind and water and it drifts aloft until it lands on the third floor[line]in the North Tower of the Dragon's Horn[.’][end-FC]" / "‘The pirate ship sank in the wide seas of the north[.’][end-FC]" / "‘I heard that it is sold here, but perhaps that is a lie[.’][end-FC]" / "‘I thank thee very much indeed[.’][end-FC]" / "‘The Eye of Malroth sees much that is not readily apparent[.’][wait][line]‘Use it in the swamp of the hidden valley and perhaps thou will see a way to Rhone[.’][end-FC]" / "‘Please say nothing of this[.’][end-FC]"
0x018E6D|$06:$8E5D:D0 02   	BNE $8E61  
; control flow target (from $8E59)
0x018E6F|$06:$8E5F:A9 10   	LDA #$10   	; String IDs #$027E-#$0285: "‘But I cannot think of anyone else with such power[.’][end-FC]" / "‘Some merchants give out Lottery Tickets for free[.’][end-FC]" / "‘Stop again if thou art near[.’][end-FC]" / "‘Speak to the merchantman in Lianport[.’][end-FC]" / "‘Perhaps I should not say anything more[.’][end-FC]" / "‘Then may thy ears become cabbages and thy tongue a sausage[.’][wait][line]‘A little courtesy never killed anyone[.’][end-FC]" / "‘Once thou hast the Moon Fragment thou may enter the island cave where the Eye of Malroth is kept in darkness[.’][end-FC]" / "‘My brother must be there now. Will thou not go to him?’[end-FC]"
; control flow target (from $8E5D)
0x018E71|$06:$8E61:18      	CLC        
0x018E72|$06:$8E62:65 49   	ADC $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$FA52)
0x018E74|$06:$8E64:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x018E77|$06:$8E67:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue IDs #$9D-#$C2 (town NPCs with complex logic)
; control flow target (from $81FE)
0x018E7A|$06:$8E6A:48      	PHA        	; dialogue ID
0x018E7B|$06:$8E6B:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018E7E|$06:$8E6E:68      	PLA        	; dialogue ID
0x018E7F|$06:$8E6F:38      	SEC        
0x018E80|$06:$8E70:E9 9D   	SBC #$9D   	; convert to zero-based
0x018E82|$06:$8E72:0A      	ASL        	; 2 bytes per pointer
0x018E83|$06:$8E73:AA      	TAX        
0x018E84|$06:$8E74:BD 81 8E	LDA $8E81,X	; complex dialogue logic handlers
0x018E87|$06:$8E77:85 0C   	STA $0C    
0x018E89|$06:$8E79:BD 82 8E	LDA $8E82,X
0x018E8C|$06:$8E7C:85 0D   	STA $0D    
0x018E8E|$06:$8E7E:6C 0C 00	JMP ($000C)


; code -> data
; complex dialogue logic handlers
; indexed data load target (from $8E74)
0x018E91|$06:$8E81:CD
; indexed data load target (from $8E79)
0x018E92|$06:$8E82:   8E	; $06:$8ECD; handler for dialogue ID #$9D: King in Map ID #$02: Midenhall 2F
0x018E93|$06:$8E83:6A 8F	; $06:$8F6A; handler for dialogue ID #$9E: Guard in Map ID #$02: Midenhall 2F
0x018E95|$06:$8E85:85 8F	; $06:$8F85; handler for dialogue ID #$9F: Wizard in Map ID #$02: Midenhall 2F
0x018E97|$06:$8E87:AC 8F	; $06:$8FAC; handler for dialogue ID #$A0: Brute in Map ID #$04: Midenhall B1
0x018E99|$06:$8E89:CC 8F	; $06:$8FCC; handler for dialogue ID #$A1: King in Map ID #$06: Cannock
0x018E9B|$06:$8E8B:19 90	; $06:$9019; handler for dialogue ID #$A2: Princess Halla in Map ID #$06: Cannock
0x018E9D|$06:$8E8D:55 90	; $06:$9055; handler for dialogue ID #$A3: Wizard in Map ID #$06: Cannock
0x018E9F|$06:$8E8F:65 90	; $06:$9065; handler for dialogue ID #$A4-#$A5: Monsters in Map ID #$08: Hamlin Waterway
0x018EA1|$06:$8E91:65 90	; $06:$9065; handler for dialogue ID #$A4-#$A5: Monsters in Map ID #$08: Hamlin Waterway
0x018EA3|$06:$8E93:77 90	; $06:$9077; handler for dialogue ID #$A6: King Moonbrooke's Flame in Map ID #$09: Moonbrooke
0x018EA5|$06:$8E95:95 90	; $06:$9095; handler for dialogue ID #$A7: Guard in Map ID #$0A: Moonbrooke B1
0x018EA7|$06:$8E97:A8 90	; $06:$90A8; handler for dialogue ID #$A8: Wizard in Map ID #$0B: Lianport
0x018EA9|$06:$8E99:CC 90	; $06:$90CC; handler for dialogue ID #$A9: Echoing Flute guy in NE in Map ID #$0B: Lianport
0x018EAB|$06:$8E9B:EF 90	; $06:$90EF; handler for dialogue ID #$AA: Woman in Map ID #$0B: Lianport
0x018EAD|$06:$8E9D:02 91	; $06:$9102; handler for dialogue ID #$AB: Brute in Map ID #$0B: Lianport
0x018EAF|$06:$8E9F:12 91	; $06:$9112; handler for dialogue ID #$AC: Woman in SW corner of Map ID #$0B: Lianport
0x018EB1|$06:$8EA1:4D 91	; $06:$914D; handler for dialogue ID #$AD: Wizard in Map ID #$0C: Tantegel
0x018EB3|$06:$8EA3:6E 91	; $06:$916E; handler for dialogue ID #$AE: Wizard in Map ID #$0C: Tantegel
0x018EB5|$06:$8EA5:7B 91	; $06:$917B; handler for dialogue ID #$AF: Priest in Map ID #$0C: Tantegel
0x018EB7|$06:$8EA7:97 91	; $06:$9197; handler for dialogue ID #$B0: King in Map ID #$0F: Osterfair
0x018EB9|$06:$8EA9:13 92	; $06:$9213; handler for dialogue ID #$B1: crazy fortuneteller Wizard in NW Map ID #$0F: Osterfair
0x018EBB|$06:$8EAB:8B 92	; $06:$928B; handler for dialogue IDs #$B2-#$B3: Dog in Map ID #$0F: Osterfair
0x018EBD|$06:$8EAD:8B 92	; $06:$928B; handler for dialogue IDs #$B2-#$B3: Dog in Map ID #$0F: Osterfair
0x018EBF|$06:$8EAF:92 92	; $06:$9292; handler for dialogue ID #$B4: Dog in Map ID #$10: Zahan
0x018EC1|$06:$8EB1:99 92	; $06:$9299; handler for dialogue ID #$B5: Don Mahone in Map ID #$11: Tuhn
0x018EC3|$06:$8EB3:FE 92	; $06:$92FE; handler for dialogue ID #$B6: Roge Fastfinger in NE Map ID #$14: Wellgarth Underground
0x018EC5|$06:$8EB5:2C 93	; $06:$932C; handler for dialogue IDs #$B7-#$B9: Priest in Map ID #$15: Beran
0x018EC7|$06:$8EB7:2C 93	; $06:$932C; handler for dialogue IDs #$B7-#$B9: Priest in Map ID #$15: Beran
0x018EC9|$06:$8EB9:2C 93	; $06:$932C; handler for dialogue IDs #$B7-#$B9: Priest in Map ID #$15: Beran
0x018ECB|$06:$8EBB:3E 93	; $06:$933E; handler for dialogue ID #$BA: Monster in Map ID #$16: Hargon's Castle 1F
0x018ECD|$06:$8EBD:48 93	; $06:$9348; handler for dialogue ID #$BB: Hargon in Map ID #$17: Hargon's Castle 7F
0x018ECF|$06:$8EBF:7F 93	; $06:$937F; handler for dialogue ID #$BC: Dragonlord's Grandson in Map ID #$18: Charlock Castle B8
0x018ED1|$06:$8EC1:9B 93	; $06:$939B; handler for dialogue ID #$BD: Guard in Map ID #$1A: Shrine SW of Cannock
0x018ED3|$06:$8EC3:9F 93	; $06:$939F; handler for dialogue ID #$BE: Guard in Map ID #$1A: Shrine SW of Cannock
0x018ED5|$06:$8EC5:BE 93	; $06:$93BE; handler for dialogue ID #$BF: Wizard in Map ID #$1C: Shrine SE of Rimuldar
0x018ED7|$06:$8EC7:E1 93	; $06:$93E1; handler for dialogue ID #$C0: Wizard in Map ID #$15: Beran
0x018ED9|$06:$8EC9:00 94	; $06:$9400; handler for dialogue ID #$C1: Priest in Map ID #$1F: Rhone Shrine
0x018EDB|$06:$8ECB:4D 94	; $06:$944D; handler for dialogue ID #$C2: Priest in Map ID #$20: Shrine SW of Moonbrooke

; data -> code
; handler for dialogue ID #$9D: King in Map ID #$02: Midenhall 2F
; indirect control flow target (via $8E81)
0x018EDD|$06:$8ECD:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x018EE0|$06:$8ED0:D0 3A   	BNE $8F0C  	; different dialogue when talking to King Midenhall depending on whether Prince Midenhall is alive or not
; call to code in a different bank ($0F:$FC50)
0x018EE2|$06:$8ED2:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018EE5|$06:$8ED5:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018EE8|$06:$8ED8:86	; String ID #$0286: ‘Welcome back, [name][.’][wait][end-FC]

; data -> code
0x018EE9|$06:$8ED9:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
0x018EEC|$06:$8EDC:A9 00   	LDA #$00   	; Midenhall; pointless since none of these string use the [name] control code
; call to code in a different bank ($0F:$FC50)
0x018EEE|$06:$8EDE:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x018EF1|$06:$8EE1:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x018EF3|$06:$8EE3:C9 02   	CMP #$02   
0x018EF5|$06:$8EE5:F0 0D   	BEQ $8EF4  	; update Cannock quest status to 3
0x018EF7|$06:$8EE7:C9 03   	CMP #$03   
0x018EF9|$06:$8EE9:D0 0F   	BNE $8EFA  
0x018EFB|$06:$8EEB:AD 3F 06	LDA $063F  	; Cannock status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x018EFE|$06:$8EEE:29 04   	AND #$04   	; pick out the In Party bit
0x018F00|$06:$8EF0:F0 04   	BEQ $8EF6  	; message for when you're able to add Cannock, but haven't yet done so
0x018F02|$06:$8EF2:D0 06   	BNE $8EFA  
; control flow target (from $8EE5)
0x018F04|$06:$8EF4:E6 CA   	INC $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
; control flow target (from $8EF0)
; call to code in a different bank ($0F:$FA32)
0x018F06|$06:$8EF6:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F09|$06:$8EF9:89	; String ID #$0289: ‘Well, thou hast missed him[.’][wait][line]‘The Prince of Cannock was here, but now he is off to Midenhall, looking for thee, I believe[.’][wait][end-FC]

; data -> code
; control flow target (from $8EE9, $8EF2)
; call to code in a different bank ($0F:$FA32)
0x018F0A|$06:$8EFA:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F0D|$06:$8EFD:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
0x018F0E|$06:$8EFE:A9 00   	LDA #$00   	; Save Point ID #$00: Midenhall 2F
0x018F10|$06:$8F00:85 48   	STA $48    	; last save point ID
0x018F12|$06:$8F02:20 5D A3	JSR $A35D  	; save game handler
; call to code in a different bank ($0F:$FA32)
0x018F15|$06:$8F05:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F18|$06:$8F08:88	; String ID #$0288: [wait]‘All of us await the day that Hargon is cast down[.’][end-FC]

; data -> code
0x018F19|$06:$8F09:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $8ED0)
0x018F1C|$06:$8F0C:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x018F1E|$06:$8F0E:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018F21|$06:$8F11:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F24|$06:$8F14:8A	; String ID #$028A: ‘Poor [name]. Thou hast met an untimely end[.’][wait][end-FC]

; data -> code
0x018F25|$06:$8F15:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
0x018F28|$06:$8F18:A9 00   	LDA #$00   	; Save Point ID #$00: Midenhall 2F
0x018F2A|$06:$8F1A:85 48   	STA $48    	; last save point ID
; call to code in a different bank ($0F:$FA32)
0x018F2C|$06:$8F1C:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F2F|$06:$8F1F:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$D16B)
0x018F30|$06:$8F20:20 6B D1	JSR $D16B  
0x018F33|$06:$8F23:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x018F36|$06:$8F26:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018F39|$06:$8F29:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F3C|$06:$8F2C:8B	; String ID #$028B: ‘[name]!’[wait][end-FC]

; data -> code
0x018F3D|$06:$8F2D:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x018F3F|$06:$8F2F:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018F42|$06:$8F32:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F45|$06:$8F35:8C	; String ID #$028C: ‘Please give thy[line]regards to my son[.’][end-FC]

; data -> code
0x018F46|$06:$8F36:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; external control flow target (from $0F:$D28F)
0x018F49|$06:$8F39:4E 25 06	LSR $0625  	; party gold, high byte; full party death costs you half your gold
0x018F4C|$06:$8F3C:6E 24 06	ROR $0624  	; party gold, low byte
0x018F4F|$06:$8F3F:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018F52|$06:$8F42:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x018F54|$06:$8F44:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018F57|$06:$8F47:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F5A|$06:$8F4A:8D	; String ID #$028D: ‘No pulse, no breath, cold as a cod[.’][wait][line]‘Yes, thou art truly dead, [name][.’][wait][line]‘I suppose I had better revive thee, though thou deserve less[.’][end-FC]

; data -> code
0x018F5B|$06:$8F4B:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; external control flow target (from $0F:$C6FD)
0x018F5E|$06:$8F4E:20 CB 9A	JSR $9ACB  	; open dialogue window
0x018F61|$06:$8F51:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x018F64|$06:$8F54:48      	PHA        
; call to code in a different bank ($0F:$FC50)
0x018F65|$06:$8F55:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018F68|$06:$8F58:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F6B|$06:$8F5B:8E	; String ID #$028E: ‘Welcome back, [name][.’][wait][end-FC]

; data -> code
0x018F6C|$06:$8F5C:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
0x018F6F|$06:$8F5F:68      	PLA        
; call to code in a different bank ($0F:$FC50)
0x018F70|$06:$8F60:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x018F73|$06:$8F63:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018F76|$06:$8F66:90	; String ID #$0290: ‘Thy road is long and fraught with peril, but don't despair.[line]Come see me in thy need, [name][.’][end-FC]

; data -> code
0x018F77|$06:$8F67:4C 92 80	JMP $8092  	; wait until all joypad buttons are released and then some button pressed then wipe menus and exit COMMAND menu

; handler for dialogue ID #$9E: Guard in Map ID #$02: Midenhall 2F
; indirect control flow target (via $8E83)
0x018F7A|$06:$8F6A:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x018F7C|$06:$8F6C:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x018F7F|$06:$8F6F:A5 44   	LDA $44    	; non-saved event status (#$00 = event start, #$01 = Lianport Gremlins defeated, #$02 = met with Lianport grandfather/have no friends at Shrine SW of Cannock, #$03 = King Midenhall moved to stairs, #$04 = King Midenhall moved down stairs, #$05 = King Midenhall spoke on Midenhall 1F, #$0B = Lighthouse Wizard 7F, #$1B Lighthouse Wizard 2F spoke, #$64 = Hargon dead, #$FF = event end)
0x018F81|$06:$8F71:C9 03   	CMP #$03   
0x018F83|$06:$8F73:F0 08   	BEQ $8F7D  
0x018F85|$06:$8F75:C9 04   	CMP #$04   
0x018F87|$06:$8F77:F0 04   	BEQ $8F7D  
0x018F89|$06:$8F79:A9 92   	LDA #$92   	; String ID #$0292: ‘I would come with thee, [name],[wait][line]but my place is here beside the King[.’][end-FC]
0x018F8B|$06:$8F7B:D0 02   	BNE $8F7F  
; control flow target (from $8F73, $8F77)
0x018F8D|$06:$8F7D:A9 91   	LDA #$91   	; String ID #$0291: ‘By land and sea and air will thy path lead, and in places I cannot see[.’][end-FC]
; control flow target (from $8F7B)
; call to code in a different bank ($0F:$FA52)
0x018F8F|$06:$8F7F:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x018F92|$06:$8F82:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$9F: Wizard in Map ID #$02: Midenhall 2F
; indirect control flow target (via $8E85)
0x018F95|$06:$8F85:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x018F97|$06:$8F87:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x018F9A|$06:$8F8A:A5 44   	LDA $44    	; non-saved event status (#$00 = event start, #$01 = Lianport Gremlins defeated, #$02 = met with Lianport grandfather/have no friends at Shrine SW of Cannock, #$03 = King Midenhall moved to stairs, #$04 = King Midenhall moved down stairs, #$05 = King Midenhall spoke on Midenhall 1F, #$0B = Lighthouse Wizard 7F, #$1B Lighthouse Wizard 2F spoke, #$64 = Hargon dead, #$FF = event end)
0x018F9C|$06:$8F8C:C9 03   	CMP #$03   
0x018F9E|$06:$8F8E:F0 04   	BEQ $8F94  
0x018FA0|$06:$8F90:C9 04   	CMP #$04   
0x018FA2|$06:$8F92:D0 07   	BNE $8F9B  
; control flow target (from $8F8E)
; call to code in a different bank ($0F:$FA32)
0x018FA4|$06:$8F94:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018FA7|$06:$8F97:93	; String ID #$0293: ‘It is difficult to see thee go, [name][.’][end-FC]

; data -> code
0x018FA8|$06:$8F98:4C A9 8F	JMP $8FA9  

; control flow target (from $8F92)
0x018FAB|$06:$8F9B:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x018FAE|$06:$8F9E:D0 04   	BNE $8FA4  	; branch if Midenhall dead
0x018FB0|$06:$8FA0:A9 94   	LDA #$94   	; String ID #$0294: ‘Thou art now as strong as an ox and twice as good looking.[line]That is very good[.’][end-FC]
0x018FB2|$06:$8FA2:D0 02   	BNE $8FA6  
; control flow target (from $8F9E)
0x018FB4|$06:$8FA4:A9 95   	LDA #$95   	; String ID #$0295: ‘[name], it is such a pity[.’][end-FC]
; control flow target (from $8FA2)
; call to code in a different bank ($0F:$FA52)
0x018FB6|$06:$8FA6:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
; control flow target (from $8F98)
0x018FB9|$06:$8FA9:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A0: Brute in Map ID #$04: Midenhall B1
; indirect control flow target (via $8E87)
0x018FBC|$06:$8FAC:AD F2 05	LDA $05F2  	; probably whether door between you and NPC is open
0x018FBF|$06:$8FAF:F0 13   	BEQ $8FC4  
; call to code in a different bank ($0F:$FA32)
0x018FC1|$06:$8FB1:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018FC4|$06:$8FB4:96	; String ID #$0296: ‘Dost thou have the Jailor's Key?’[end-FC]

; data -> code
0x018FC5|$06:$8FB5:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x018FC8|$06:$8FB8:C9 00   	CMP #$00   	; YES
0x018FCA|$06:$8FBA:D0 04   	BNE $8FC0  
0x018FCC|$06:$8FBC:A9 97   	LDA #$97   	; String ID #$0297: ‘Open this and I shall give thee some news[.’][end-FC]
0x018FCE|$06:$8FBE:D0 06   	BNE $8FC6  
; control flow target (from $8FBA)
0x018FD0|$06:$8FC0:A9 98   	LDA #$98   	; String ID #$0298: ‘Be gone with thee!’[end-FC]
0x018FD2|$06:$8FC2:D0 02   	BNE $8FC6  
; control flow target (from $8FAF)
0x018FD4|$06:$8FC4:A9 99   	LDA #$99   	; String ID #$0299: ‘As a reward for opening the door, let me tell thee of the Crest of Life[.’][wait][line]‘Find it on the dark road that leads to Rhone[.’][end-FC]
; control flow target (from $8FBE, $8FC2)
; call to code in a different bank ($0F:$FA52)
0x018FD6|$06:$8FC6:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x018FD9|$06:$8FC9:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A1: King in Map ID #$06: Cannock
; indirect control flow target (via $8E89)
0x018FDC|$06:$8FCC:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
; call to code in a different bank ($0F:$FC50)
0x018FDF|$06:$8FCF:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$F6CE)
0x018FE2|$06:$8FD2:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x018FE5|$06:$8FD5:85 49   	STA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$FA32)
0x018FE7|$06:$8FD7:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x018FEA|$06:$8FDA:E2	; String ID #$02E2: ‘Welcome, [name]!’[wait][end-FC]

; data -> code
0x018FEB|$06:$8FDB:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
0x018FEE|$06:$8FDE:A9 01   	LDA #$01   	; Cannock
; call to code in a different bank ($0F:$FC50)
0x018FF0|$06:$8FE0:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x018FF3|$06:$8FE3:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x018FF5|$06:$8FE5:F0 06   	BEQ $8FED  
0x018FF7|$06:$8FE7:C9 01   	CMP #$01   
0x018FF9|$06:$8FE9:F0 04   	BEQ $8FEF  
0x018FFB|$06:$8FEB:D0 09   	BNE $8FF6  
; control flow target (from $8FE5)
0x018FFD|$06:$8FED:E6 CA   	INC $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
; control flow target (from $8FE9)
; call to code in a different bank ($0F:$FA32)
0x018FFF|$06:$8FEF:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019002|$06:$8FF2:9D	; String ID #$029D: ‘My son, [name], has already left on his journey[.’][wait] [line]‘Please find him and take him as thy companion[.’][wait][end-FC]

; data -> code
0x019003|$06:$8FF3:4C 02 90	JMP $9002  

; control flow target (from $8FEB)
0x019006|$06:$8FF6:C9 03   	CMP #$03   
0x019008|$06:$8FF8:D0 08   	BNE $9002  
0x01900A|$06:$8FFA:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x01900C|$06:$8FFC:D0 04   	BNE $9002  
; call to code in a different bank ($0F:$FA32)
0x01900E|$06:$8FFE:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019011|$06:$9001:9E	; String ID #$029E: [end-FC]

; data -> code
; control flow target (from $8FF3, $8FF8, $8FFC)
; call to code in a different bank ($0F:$FA32)
0x019012|$06:$9002:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019015|$06:$9005:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
0x019016|$06:$9006:A9 01   	LDA #$01   	; Save Point ID #$01: Cannock
0x019018|$06:$9008:85 48   	STA $48    	; last save point ID
0x01901A|$06:$900A:20 5D A3	JSR $A35D  	; save game handler
0x01901D|$06:$900D:A9 01   	LDA #$01   	; Cannock
; call to code in a different bank ($0F:$FC50)
0x01901F|$06:$900F:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x019022|$06:$9012:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019025|$06:$9015:9C	; String ID #$029C: [wait]‘With my son's help thou shall go far[.’][end-FC]

; data -> code
0x019026|$06:$9016:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A2: Princess Halla in Map ID #$06: Cannock
; indirect control flow target (via $8E8B)
0x019029|$06:$9019:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x01902B|$06:$901B:C9 04   	CMP #$04   
0x01902D|$06:$901D:D0 04   	BNE $9023  
0x01902F|$06:$901F:A9 A4   	LDA #$A4   	; String ID #$02A4: [end-FC]
0x019031|$06:$9021:D0 16   	BNE $9039  
; control flow target (from $901D)
; call to code in a different bank ($0F:$F6CE)
0x019033|$06:$9023:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x019036|$06:$9026:D0 17   	BNE $903F  
; call to code in a different bank ($0F:$FA32)
0x019038|$06:$9028:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01903B|$06:$902B:9F	; String ID #$029F: ‘Who art thou?[line]A friend of my brother's?’[FD][FD][end-FC]

; data -> code
0x01903C|$06:$902C:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01903F|$06:$902F:C9 00   	CMP #$00   	; YES
0x019041|$06:$9031:D0 04   	BNE $9037  
0x019043|$06:$9033:A9 A0   	LDA #$A0   	; String ID #$02A0: ‘Then I'll give thee some advice[.’][wait][line]‘My brother has gone searching for the Spring of Bravery, but he travels slowly[.’][end-FC]
0x019045|$06:$9035:D0 02   	BNE $9039  
; control flow target (from $9031)
0x019047|$06:$9037:A9 A1   	LDA #$A1   	; String ID #$02A1: ‘Then I wish to be left alone[.’][end-FC]
; control flow target (from $9021, $9035, $904F, $9053)
; call to code in a different bank ($0F:$FA52)
0x019049|$06:$9039:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01904C|$06:$903C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9026)
0x01904F|$06:$903F:A9 01   	LDA #$01   	; Cannock
0x019051|$06:$9041:85 97   	STA $97    	; subject hero ID $97
0x019053|$06:$9043:A9 80   	LDA #$80   	; Alive
0x019055|$06:$9045:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019058|$06:$9048:90 07   	BCC $9051  
0x01905A|$06:$904A:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x01905D|$06:$904D:A9 A2   	LDA #$A2   	; String ID #$02A2: ‘So, thou hast found my brother[.’][wait][line]‘Why dost thou tarry here when the world is in grave peril?’[end-FC]
0x01905F|$06:$904F:D0 E8   	BNE $9039  
; control flow target (from $9048)
0x019061|$06:$9051:A9 A3   	LDA #$A3   	; String ID #$02A3: ‘Oh, no! He is as dead as a pork chop[.’][end-FC]
0x019063|$06:$9053:D0 E4   	BNE $9039  
; handler for dialogue ID #$A3: Wizard in Map ID #$06: Cannock
; indirect control flow target (via $8E8D)
; call to code in a different bank ($0F:$FA32)
0x019065|$06:$9055:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019068|$06:$9058:A5	; String ID #$02A5: ‘Well, don't just stand there.[line]Open the treasure chest[.’][end-FC]

; data -> code
0x019069|$06:$9059:AD 1A 05	LDA $051A  	; something to do with whether you've opened the chest containing the Shield of Erdrick
0x01906C|$06:$905C:F0 04   	BEQ $9062  
; call to code in a different bank ($0F:$FA32)
0x01906E|$06:$905E:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019071|$06:$9061:A6	; String ID #$02A6: [wait]‘So you've already peeked, eh?’[end-FC]

; data -> code
; control flow target (from $905C)
0x019072|$06:$9062:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A4-#$A5: Monsters in Map ID #$08: Hamlin Waterway
; indirect control flow target (via $8E8F, $8E91)
; call to code in a different bank ($0F:$FA32)
0x019075|$06:$9065:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019078|$06:$9068:A9	; String ID #$02A9: ‘Aiyee!’[end-FC]

; data -> code
0x019079|$06:$9069:AD F2 05	LDA $05F2  	; probably whether door between you and NPC is open
0x01907C|$06:$906C:D0 06   	BNE $9074  
; call to code in a different bank ($0F:$D1A1)
0x01907E|$06:$906E:20 A1 D1	JSR $D1A1  	; handle Hamlin Waterway Gremlins fight
0x019081|$06:$9071:4C 95 80	JMP $8095  	; wipe menus and exit COMMAND menu

; control flow target (from $906C)
0x019084|$06:$9074:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A6: King Moonbrooke's Flame in Map ID #$09: Moonbrooke
; indirect control flow target (via $8E93)
0x019087|$06:$9077:A9 02   	LDA #$02   	; Moonbrooke
; call to code in a different bank ($0F:$FC50)
0x019089|$06:$9079:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x01908C|$06:$907C:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01908F|$06:$907F:AA	; String ID #$02AA: ‘Woe is me, for I am the unhappy ghost of the King of Moonbrooke[.’][wait][line]‘To make matters worse, my daughter has been cursed and transformed into a common mutt[.’][wait][line]‘I am burning with shame[.’][end-FC]

; data -> code
0x019090|$06:$9080:AD 51 06	LDA $0651  	; Moonbrooke status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019093|$06:$9083:29 84   	AND #$84   	; pick out the Alive and In Party bits
0x019095|$06:$9085:C9 84   	CMP #$84   	; is Moonbrooke alive and in your party?
0x019097|$06:$9087:D0 09   	BNE $9092  	; if yes, she gets extra text
0x019099|$06:$9089:A9 02   	LDA #$02   	; Moonbrooke
; call to code in a different bank ($0F:$FC50)
0x01909B|$06:$908B:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x01909E|$06:$908E:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0190A1|$06:$9091:AB	; String ID #$02AB: [wait][line][no voice]Then [name] cried[line][no voice]out: ‘Father? Is it really thee in the flames?’[wait][line]And the Flame replied: ‘Alas, it is I. It is Hargon's way of firing those he doesn't need[.’][end-FC]

; data -> code
; control flow target (from $9087)
0x0190A2|$06:$9092:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A7: Guard in Map ID #$0A: Moonbrooke B1
; indirect control flow target (via $8E95)
0x0190A5|$06:$9095:20 93 94	JSR $9493  	; SEC if Moonbrooke in party, CLC otherwise
0x0190A8|$06:$9098:90 07   	BCC $90A1  
; call to code in a different bank ($0F:$FA32)
0x0190AA|$06:$909A:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0190AD|$06:$909D:AD	; String ID #$02AD: ‘Princess, thou art now free[.’][end-FC]

; data -> code
0x0190AE|$06:$909E:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9098)
; call to code in a different bank ($0F:$FA32)
0x0190B1|$06:$90A1:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0190B4|$06:$90A4:AC	; String ID #$02AC: ‘The Princess has been transformed by a curse[.’][wait][line]‘Only the Mirror of Ra can break the spell, for in that glass one sees her true self[.’][end-FC]

; data -> code
0x0190B5|$06:$90A5:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$A8: Wizard in Map ID #$0B: Lianport
; indirect control flow target (via $8E97)
0x0190B8|$06:$90A8:AD 9C 05	LDA $059C  	; NPC #$0C X-pos
0x0190BB|$06:$90AB:C9 0F   	CMP #$0F   
0x0190BD|$06:$90AD:D0 04   	BNE $90B3  
0x0190BF|$06:$90AF:A9 B8   	LDA #$B8   	; String ID #$02B8: ‘Farewell[.’][end-FC]
0x0190C1|$06:$90B1:D0 06   	BNE $90B9  
; control flow target (from $90AD)
0x0190C3|$06:$90B3:A5 CF   	LDA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x0190C5|$06:$90B5:D0 08   	BNE $90BF  
0x0190C7|$06:$90B7:A9 AE   	LDA #$AE   	; String ID #$02AE: ‘We never lend boats to strangers, sorry[.’][end-FC]
; control flow target (from $90B1)
; call to code in a different bank ($0F:$FA52)
0x0190C9|$06:$90B9:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x0190CC|$06:$90BC:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $90B5)
; call to code in a different bank ($0F:$FA32)
0x0190CF|$06:$90BF:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0190D2|$06:$90C2:AF	; String ID #$02AF: ‘Oh, thou art the ones who helped my granddaughter[.’][wait][line]‘Many thanks[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$D0F5)
0x0190D3|$06:$90C3:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
; call to code in a different bank ($0F:$CCA2)
0x0190D6|$06:$90C6:20 A2 CC	JSR $CCA2  
0x0190D9|$06:$90C9:4C 95 80	JMP $8095  	; wipe menus and exit COMMAND menu

; handler for dialogue ID #$A9: Echoing Flute guy in NE in Map ID #$0B: Lianport
; indirect control flow target (via $8E99)
0x0190DC|$06:$90CC:A9 25   	LDA #$25   	; Item ID #$25: Tresures
0x0190DE|$06:$90CE:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0190E1|$06:$90D1:10 0B   	BPL $90DE  	; branch if found
0x0190E3|$06:$90D3:A9 2A   	LDA #$2A   	; Item ID #$2A: Echoing Flute
0x0190E5|$06:$90D5:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0190E8|$06:$90D8:10 0D   	BPL $90E7  	; branch if found
0x0190EA|$06:$90DA:A9 B0   	LDA #$B0   	; String ID #$02B0: ‘The pirate ship Relentless sank in chill waters with a great treasure still aboard[.’][wait][line]‘Bring me this treasure and I shall pay a handsome fee[.’][end-FC]
0x0190EC|$06:$90DC:D0 0B   	BNE $90E9  
; control flow target (from $90D1)
0x0190EE|$06:$90DE:A9 2A   	LDA #$2A   	; Item ID #$2A: Echoing Flute
0x0190F0|$06:$90E0:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped); replace Tresures in party inventory with Echoing Flute
0x0190F3|$06:$90E3:A9 B1   	LDA #$B1   	; String ID #$02B1: ‘Thou hast done exceedingly well[.’][wait][line]‘As I promised I shall give thee the Echoing Flute as thy reward[.’][end-FC]
0x0190F5|$06:$90E5:D0 02   	BNE $90E9  
; control flow target (from $90D8)
0x0190F7|$06:$90E7:A9 B2   	LDA #$B2   	; String ID #$02B2: ‘Thanks to thee I was greatly helped[.’][end-FC]
; control flow target (from $90DC, $90E5)
; call to code in a different bank ($0F:$FA52)
0x0190F9|$06:$90E9:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x0190FC|$06:$90EC:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$AA: Woman in Map ID #$0B: Lianport
; indirect control flow target (via $8E9B)
0x0190FF|$06:$90EF:AD 94 05	LDA $0594  	; NPC #$0B X-pos
0x019102|$06:$90F2:C9 03   	CMP #$03   
0x019104|$06:$90F4:D0 04   	BNE $90FA  
0x019106|$06:$90F6:A9 B9   	LDA #$B9   	; String ID #$02B9: ‘I am in thy debt.[line]Please see my grandfather[.’][wait][line]‘He is at the port where his ship is docked[.’][end-FC]
0x019108|$06:$90F8:D0 02   	BNE $90FC  
; control flow target (from $90F4)
0x01910A|$06:$90FA:A9 B7   	LDA #$B7   	; String ID #$02B7: ‘I wish thee speed and health[.’][end-FC]
; control flow target (from $90F8)
; call to code in a different bank ($0F:$FA52)
0x01910C|$06:$90FC:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01910F|$06:$90FF:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$AB: Brute in Map ID #$0B: Lianport
; indirect control flow target (via $8E9D)
; call to code in a different bank ($0F:$FA32)
0x019112|$06:$9102:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019115|$06:$9105:BA	; String ID #$02BA: ‘I have nothing to say to thee[.’][end-FC]

; data -> code
0x019116|$06:$9106:20 9D 94	JSR $949D  	; SEC if Moonbrooke alive, CLC otherwise
0x019119|$06:$9109:90 04   	BCC $910F  
; call to code in a different bank ($0F:$FA32)
0x01911B|$06:$910B:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01911E|$06:$910E:BB	; String ID #$02BB: [wait]‘That's right, nothing at all[.’][end-FC]

; data -> code
; control flow target (from $9109)
0x01911F|$06:$910F:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$AC: Woman in SW corner of Map ID #$0B: Lianport
; indirect control flow target (via $8E9F)
0x019122|$06:$9112:20 9D 94	JSR $949D  	; SEC if Moonbrooke alive, CLC otherwise
0x019125|$06:$9115:B0 2E   	BCS $9145  	; if Moonbrooke's alive, display the boring string, otherwise...
; call to code in a different bank ($0F:$FA32)
0x019127|$06:$9117:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01912A|$06:$911A:BC	; String ID #$02BC: ‘Dost thou think I am pretty enough to be a queen?’[end-FC]

; data -> code
0x01912B|$06:$911B:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01912E|$06:$911E:C9 00   	CMP #$00   	; #$00 = YES
0x019130|$06:$9120:D0 1F   	BNE $9141  	; branch if you chose NO
0x019132|$06:$9122:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x019135|$06:$9125:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019138|$06:$9128:A9 64   	LDA #$64   	; 100 gold
0x01913A|$06:$912A:85 8F   	STA $8F    
0x01913C|$06:$912C:A9 00   	LDA #$00   
0x01913E|$06:$912E:85 90   	STA $90    
0x019140|$06:$9130:20 31 8D	JSR $8D31  	; given gold amount in $8F-$90, decrease party gold by that amount and SEC if possible, CLC otherwise
0x019143|$06:$9133:B0 08   	BCS $913D  	; if you didn't have 100 G to start with, reduce party gold to 0 :(
0x019145|$06:$9135:A9 00   	LDA #$00   
0x019147|$06:$9137:8D 24 06	STA $0624  	; party gold, low byte
0x01914A|$06:$913A:8D 25 06	STA $0625  	; party gold, high byte
; control flow target (from $9133)
0x01914D|$06:$913D:A9 BD   	LDA #$BD   	; String ID #$02BD: ‘Perhaps the great Prince of Cannock thinks so too[.’][end-FC]
0x01914F|$06:$913F:D0 06   	BNE $9147  
; control flow target (from $9120)
0x019151|$06:$9141:A9 BE   	LDA #$BE   	; String ID #$02BE: ‘What's wrong!’[end-FC]
0x019153|$06:$9143:D0 02   	BNE $9147  
; control flow target (from $9115)
0x019155|$06:$9145:A9 BF   	LDA #$BF   	; String ID #$02BF: ‘Be nice to one who lives here; she knows how to turn princes into tadpoles[.’][end-FC]
; control flow target (from $913F, $9143)
; call to code in a different bank ($0F:$FA52)
0x019157|$06:$9147:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01915A|$06:$914A:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$AD: Wizard in Map ID #$0C: Tantegel
; indirect control flow target (via $8EA1)
0x01915D|$06:$914D:A9 00   	LDA #$00   
0x01915F|$06:$914F:85 49   	STA $49    	; object hero/target/item/string ID $49
0x019161|$06:$9151:85 97   	STA $97    	; subject hero ID $97
; control flow target (from $915E)
0x019163|$06:$9153:20 FC 9A	JSR $9AFC  	; given hero ID in $97 and hero inventory index in $49, set Z if item is equipped and cursed, clear if not
0x019166|$06:$9156:F0 0A   	BEQ $9162  
0x019168|$06:$9158:E6 49   	INC $49    	; object hero/target/item/string ID $49
0x01916A|$06:$915A:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x01916C|$06:$915C:C9 18   	CMP #$18   	; party inventory size
0x01916E|$06:$915E:D0 F3   	BNE $9153  
0x019170|$06:$9160:F0 04   	BEQ $9166  
; control flow target (from $9156)
0x019172|$06:$9162:A9 C1   	LDA #$C1   	; String ID #$02C1: ‘Unfortunately I have not the skill to cure this curse[.’][end-FC]
0x019174|$06:$9164:D0 02   	BNE $9168  
; control flow target (from $9160)
0x019176|$06:$9166:A9 C0   	LDA #$C0   	; String ID #$02C0: ‘Come here when thou art afflicted by a curse[.’][end-FC]
; control flow target (from $9164)
; call to code in a different bank ($0F:$FA52)
0x019178|$06:$9168:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01917B|$06:$916B:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$AE: Wizard in Map ID #$0C: Tantegel
; indirect control flow target (via $8EA3)
; call to code in a different bank ($0F:$FA32)
0x01917E|$06:$916E:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019181|$06:$9171:C2	; String ID #$02C2: ‘Peace be with thee[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$C515)
0x019182|$06:$9172:20 15 C5	JSR $C515  	; flash screen 10 times
0x019185|$06:$9175:20 EC 8D	JSR $8DEC  	; restore full MP to all living party members
0x019188|$06:$9178:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$AF: Priest in Map ID #$0C: Tantegel
; indirect control flow target (via $8EA5)
0x01918B|$06:$917B:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
; call to code in a different bank ($0F:$FA32)
0x01918E|$06:$917E:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019191|$06:$9181:C3	; String ID #$02C3: ‘To the noble descendant of Erdrick I bid welcome[.’][wait][end-FC]

; data -> code
0x019192|$06:$9182:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
; call to code in a different bank ($0F:$FA32)
0x019195|$06:$9185:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019198|$06:$9188:A7	; String ID #$02A7: ‘Although there is no king here, I can save thy deeds[.’][wait][line]‘Shall I do this?’[FD][FD][end-FC]

; data -> code
0x019199|$06:$9189:A9 02   	LDA #$02   	; Save Point ID #$02: Tantegel
0x01919B|$06:$918B:85 48   	STA $48    	; last save point ID
0x01919D|$06:$918D:20 5D A3	JSR $A35D  	; save game handler
; call to code in a different bank ($0F:$FA32)
0x0191A0|$06:$9190:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0191A3|$06:$9193:C4	; String ID #$02C4: [wait]‘Go in peace[.’][end-FC]

; data -> code
0x0191A4|$06:$9194:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$B0: King in Map ID #$0F: Osterfair
; indirect control flow target (via $8EA7)
0x0191A7|$06:$9197:A5 98   	LDA $98    	; outcome of last fight?
0x0191A9|$06:$9199:F0 06   	BEQ $91A1  
0x0191AB|$06:$919B:C9 FC   	CMP #$FC   
0x0191AD|$06:$919D:F0 44   	BEQ $91E3  
0x0191AF|$06:$919F:D0 25   	BNE $91C6  
; control flow target (from $9199)
0x0191B1|$06:$91A1:AD 12 01	LDA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x0191B4|$06:$91A4:29 04   	AND #$04   	; Moon Crest
0x0191B6|$06:$91A6:D0 4C   	BNE $91F4  
; call to code in a different bank ($0F:$FA32)
0x0191B8|$06:$91A8:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0191BB|$06:$91AB:C5	; String ID #$02C5: ‘Thou art welcome in my castle of Osterfair[.’][wait][line]‘If thou entertain me, thou shall receive a valuable prize[.’][wait][line]‘Dost thou wish to try?’[FD][FD][end-FC]

; data -> code
0x0191BC|$06:$91AC:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0191BF|$06:$91AF:C9 00   	CMP #$00   	; YES
0x0191C1|$06:$91B1:D0 3A   	BNE $91ED  
; call to code in a different bank ($0F:$FA32)
0x0191C3|$06:$91B3:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0191C6|$06:$91B6:C6	; String ID #$02C6: ‘Thou must go forth to the center of this Coliseum[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$D0F5)
0x0191C7|$06:$91B7:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x0191CA|$06:$91BA:A9 00   	LDA #$00   
0x0191CC|$06:$91BC:85 98   	STA $98    	; outcome of last fight?
0x0191CE|$06:$91BE:85 03   	STA $03    	; game clock?
; call to code in a different bank ($0F:$CABA)
0x0191D0|$06:$91C0:20 BA CA	JSR $CABA  
0x0191D3|$06:$91C3:4C 95 80	JMP $8095  	; wipe menus and exit COMMAND menu

; control flow target (from $919F)
0x0191D6|$06:$91C6:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0191D9|$06:$91C9:AD 12 01	LDA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x0191DC|$06:$91CC:29 04   	AND #$04   	; Moon Crest
0x0191DE|$06:$91CE:D0 0C   	BNE $91DC  
; call to code in a different bank ($0F:$FA32)
0x0191E0|$06:$91D0:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0191E3|$06:$91D3:C7	; String ID #$02C7: ‘Thou hast done well[.’][wait][line]‘I shall give thee the Moon Crest[.’][wait][end-FC]

; data -> code
0x0191E4|$06:$91D4:A9 04   	LDA #$04   	; Moon Crest
0x0191E6|$06:$91D6:0D 12 01	ORA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x0191E9|$06:$91D9:8D 12 01	STA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
; control flow target (from $91CE)
; call to code in a different bank ($0F:$FA2E)
0x0191EC|$06:$91DC:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0191EF|$06:$91DF:15	; String ID #$0115: ‘Thou must fight gallantly[.’][end-FC]

; data -> code
0x0191F0|$06:$91E0:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $919D)
0x0191F3|$06:$91E3:20 CB 9A	JSR $9ACB  	; open dialogue window
; call to code in a different bank ($0F:$FA32)
0x0191F6|$06:$91E6:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0191F9|$06:$91E9:C9	; String ID #$02C9: ‘Thou art a poor excuse for a warrior[.’][wait][line]‘Get thee gone!’[end-FC]

; data -> code
0x0191FA|$06:$91EA:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $91B1)
; call to code in a different bank ($0F:$FA32)
0x0191FD|$06:$91ED:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019200|$06:$91F0:C8	; String ID #$02C8: ‘That's unfortunate[.’][wait][line]‘Good bye[.’][end-FC]

; data -> code
0x019201|$06:$91F1:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $91A6)
0x019204|$06:$91F4:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
; call to code in a different bank ($0F:$FC50)
0x019207|$06:$91F7:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x01920A|$06:$91FA:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01920D|$06:$91FD:EC	; String ID #$02EC: ‘Welcome back!’[wait][end-FC]

; data -> code
0x01920E|$06:$91FE:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
; call to code in a different bank ($0F:$FA32)
0x019211|$06:$9201:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019214|$06:$9204:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
0x019215|$06:$9205:A9 03   	LDA #$03   	; Save Point ID #$03: Osterfair
0x019217|$06:$9207:85 48   	STA $48    	; last save point ID
0x019219|$06:$9209:20 5D A3	JSR $A35D  	; save game handler
; call to code in a different bank ($0F:$FA32)
0x01921C|$06:$920C:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01921F|$06:$920F:CA	; String ID #$02CA: [wait]‘Thy strength is that of many fearsome Hibabongos[.’][wait][line]‘The Moon Crest that I have given thee is just one of many tokens thou must collect[.’][end-FC]

; data -> code
0x019220|$06:$9210:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$B1: crazy fortuneteller Wizard in NW Map ID #$0F: Osterfair
; indirect control flow target (via $8EA9)
; call to code in a different bank ($0F:$FA32)
0x019223|$06:$9213:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019226|$06:$9216:CB	; String ID #$02CB: ‘I'm a fortune-teller.[line]Art thou looking for something?’[FD][FD][end-FC]

; data -> code
0x019227|$06:$9217:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01922A|$06:$921A:C9 00   	CMP #$00   	; YES
0x01922C|$06:$921C:D0 28   	BNE $9246  
; call to code in a different bank ($0F:$C3AB)
0x01922E|$06:$921E:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x019231|$06:$9221:A5 32   	LDA $32    	; RNG byte 0
0x019233|$06:$9223:05 33   	ORA $33    	; RNG byte 1
0x019235|$06:$9225:29 03   	AND #$03   	; 4 direction options to choose from
0x019237|$06:$9227:AA      	TAX        
0x019238|$06:$9228:E8      	INX        
0x019239|$06:$9229:AD 4E 92	LDA $924E  	; -> $06:$9250: Direction Names text
0x01923C|$06:$922C:85 0C   	STA $0C    
0x01923E|$06:$922E:AD 4F 92	LDA $924F  
0x019241|$06:$9231:85 0D   	STA $0D    
0x019243|$06:$9233:20 66 92	JSR $9266  	; given a pointer ($0C) and a number (one-based) in X, update $0C-$0D to the address of the start of the X'th string in ($0C)
0x019246|$06:$9236:A0 00   	LDY #$00   	; copy direction name to $5A
; control flow target (from $9240)
0x019248|$06:$9238:B1 0C   	LDA ($0C),Y
0x01924A|$06:$923A:99 5A 00	STA $005A,Y	; Crest/direction name write buffer start
0x01924D|$06:$923D:C8      	INY        
; [end-FA]
0x01924E|$06:$923E:C9 FA   	CMP #$FA   
0x019250|$06:$9240:D0 F6   	BNE $9238  	; if not end of string, loop to copy more data
0x019252|$06:$9242:A9 CC   	LDA #$CC   	; String ID #$02CC: ‘I'll tell thy fortune[.’][wait][line]‘That which thou seeks is [item-F9]!’[end-FC]
0x019254|$06:$9244:D0 02   	BNE $9248  
; control flow target (from $921C)
0x019256|$06:$9246:A9 CD   	LDA #$CD   	; String ID #$02CD: ‘So be it then.[line]I shall tell thee nothing[.’][end-FC]
; control flow target (from $9244)
; call to code in a different bank ($0F:$FA52)
0x019258|$06:$9248:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01925B|$06:$924B:4C 48 95	JMP $9548  	; end TALK/ITEM routines


; code -> data
; -> $06:$9250: Direction Names text
; data load target (from $9229)
0x01925E|$06:$924E:50
; data load target (from $922E)
0x01925F|$06:$924F:   92	; $06:$9250; Direction Names text
; Direction Names text
; indirect data load target (via $924E)
0x019260|$06:$9250:28 0A 1C 1D FA	; "East" + [end-FA]
; indirect data load target
0x019265|$06:$9255:3A 0E 1C 1D FA	; "West" + [end-FA]
; indirect data load target
0x01926A|$06:$925A:36 18 1E 1D 11 FA	; "South" + [end-FA]
; indirect data load target
0x019270|$06:$9260:31 18 1B 1D 11 FA	; "North" + [end-FA]

; data -> code
; given a pointer ($0C) and a number (one-based) in X, update $0C-$0D to the address of the start of the X'th string in ($0C)
; control flow target (from $9233, $9287)
0x019276|$06:$9266:A0 00   	LDY #$00   	; start at the current position of ($0C)
; control flow target (from $9277)
0x019278|$06:$9268:B1 0C   	LDA ($0C),Y
; [end-FA]
0x01927A|$06:$926A:C9 FA   	CMP #$FA   
0x01927C|$06:$926C:F0 0C   	BEQ $927A  	; found some end token
; [end-FC]
0x01927E|$06:$926E:C9 FC   	CMP #$FC   
0x019280|$06:$9270:F0 08   	BEQ $927A  	; found some end token
; [end-FF]
0x019282|$06:$9272:C9 FF   	CMP #$FF   
0x019284|$06:$9274:F0 04   	BEQ $927A  	; found some end token
0x019286|$06:$9276:C8      	INY        
0x019287|$06:$9277:4C 68 92	JMP $9268  

; found some end token
; control flow target (from $926C, $9270, $9274)
0x01928A|$06:$927A:CA      	DEX        	; number of strings to skip ahead + 1
0x01928B|$06:$927B:F0 0D   	BEQ $928A  	; if no more strings to skip, then ($0C) is correct and we're done
0x01928D|$06:$927D:98      	TYA        	; otherwise update $0C-$0D and loop to the next string
0x01928E|$06:$927E:38      	SEC        
0x01928F|$06:$927F:65 0C   	ADC $0C    
0x019291|$06:$9281:85 0C   	STA $0C    
0x019293|$06:$9283:90 02   	BCC $9287  
0x019295|$06:$9285:E6 0D   	INC $0D    
; control flow target (from $9283)
0x019297|$06:$9287:4C 66 92	JMP $9266  	; given a pointer ($0C) and a number (one-based) in X, update $0C-$0D to the address of the start of the X'th string in ($0C)

; control flow target (from $927B)
0x01929A|$06:$928A:60      	RTS        

; handler for dialogue IDs #$B2-#$B3: Dog in Map ID #$0F: Osterfair
; indirect control flow target (via $8EAB, $8EAD)
; call to code in a different bank ($0F:$FA32)
0x01929B|$06:$928B:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01929E|$06:$928E:CF	; String ID #$02CF: ‘Roarrrr[..][..]!’[end-FC]

; data -> code
0x01929F|$06:$928F:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$B4: Dog in Map ID #$10: Zahan
; indirect control flow target (via $8EAF)
; call to code in a different bank ($0F:$FA32)
0x0192A2|$06:$9292:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0192A5|$06:$9295:D0	; String ID #$02D0: ‘Bow-wow-wow!’[end-FC]

; data -> code
0x0192A6|$06:$9296:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$B5: Don Mahone in Map ID #$11: Tuhn
; indirect control flow target (via $8EB1)
0x0192A9|$06:$9299:A5 CD   	LDA $CD    	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered)
0x0192AB|$06:$929B:F0 1D   	BEQ $92BA  
0x0192AD|$06:$929D:C9 03   	CMP #$03   
0x0192AF|$06:$929F:D0 0D   	BNE $92AE  
0x0192B1|$06:$92A1:A9 02   	LDA #$02   	; Moonbrooke
0x0192B3|$06:$92A3:85 97   	STA $97    	; subject hero ID $97
0x0192B5|$06:$92A5:A9 13   	LDA #$13   	; Item ID #$13: Water Flying Cloth
0x0192B7|$06:$92A7:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x0192B9|$06:$92A9:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x0192BC|$06:$92AC:B0 04   	BCS $92B2  
; control flow target (from $929F)
0x0192BE|$06:$92AE:A9 D5   	LDA #$D5   	; String ID #$02D5: ‘Sorry.[line]I haven't finished it yet.[line]Please be patient[.’][end-FC]
0x0192C0|$06:$92B0:D0 46   	BNE $92F8  	; display string, end TALK routine
; control flow target (from $92AC)
0x0192C2|$06:$92B2:A9 00   	LDA #$00   
0x0192C4|$06:$92B4:85 CD   	STA $CD    	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered)
0x0192C6|$06:$92B6:A9 D6   	LDA #$D6   	; String ID #$02D6: ‘Hello.[line]I've just finished[.’][wait][line]‘See that the princess wears this[.’][end-FC]
0x0192C8|$06:$92B8:D0 3E   	BNE $92F8  	; display string, end TALK routine
; control flow target (from $929B)
0x0192CA|$06:$92BA:A9 2C   	LDA #$2C   	; Item ID #$2C: Dew’s Yarn
0x0192CC|$06:$92BC:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0192CF|$06:$92BF:30 26   	BMI $92E7  
0x0192D1|$06:$92C1:A9 2D   	LDA #$2D   	; Item ID #$2D: Magic Loom
0x0192D3|$06:$92C3:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0192D6|$06:$92C6:30 1F   	BMI $92E7  
0x0192D8|$06:$92C8:20 A7 94	JSR $94A7  	; X = A mod 8, A = A / 8
0x0192DB|$06:$92CB:85 9C   	STA $9C    	; hero ID
0x0192DD|$06:$92CD:A9 2D   	LDA #$2D   	; Item ID #$2D: Magic Loom
; call to code in a different bank ($0F:$C4B6)
0x0192DF|$06:$92CF:20 B6 C4	JSR $C4B6  	; given a hero ID in $9C and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise
0x0192E2|$06:$92D2:A9 2C   	LDA #$2C   	; Item ID #$2C: Dew’s Yarn
0x0192E4|$06:$92D4:48      	PHA        	; Item ID #$2C: Dew’s Yarn
0x0192E5|$06:$92D5:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0192E8|$06:$92D8:20 A7 94	JSR $94A7  	; X = A mod 8, A = A / 8
0x0192EB|$06:$92DB:85 9C   	STA $9C    	; hero ID
0x0192ED|$06:$92DD:68      	PLA        	; Item ID #$2C: Dew’s Yarn
; call to code in a different bank ($0F:$C4B6)
0x0192EE|$06:$92DE:20 B6 C4	JSR $C4B6  	; given a hero ID in $9C and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise
0x0192F1|$06:$92E1:E6 CD   	INC $CD    	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered)
0x0192F3|$06:$92E3:A9 D4   	LDA #$D4   	; String ID #$02D4: ‘Ah, so thou has found my loom, and the Dew's Yarn, too[.’][wait][line]‘I shall weave thee a Water Flying Cloth, but it will take time[.’][wait][line]‘Please come back in a day or so[.’][end-FC]
0x0192F5|$06:$92E5:D0 11   	BNE $92F8  	; display string, end TALK routine
; control flow target (from $92BF, $92C6)
; call to code in a different bank ($0F:$FA32)
0x0192F7|$06:$92E7:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0192FA|$06:$92EA:D1	; String ID #$02D1: ‘Yes, I am Don Mahone. Once I was a famous weaver, but my loom was stolen[.’][wait][line]‘Will thou help me?’[FD][FD][end-FC]

; data -> code
0x0192FB|$06:$92EB:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0192FE|$06:$92EE:C9 00   	CMP #$00   	; YES
0x019300|$06:$92F0:D0 04   	BNE $92F6  
0x019302|$06:$92F2:A9 D2   	LDA #$D2   	; String ID #$02D2: ‘Good, good.[line]All I can tell thee is that the loom was taken by someone who smelled like fish[.’][end-FC]
0x019304|$06:$92F4:D0 02   	BNE $92F8  	; display string, end TALK routine
; control flow target (from $92F0)
0x019306|$06:$92F6:A9 D3   	LDA #$D3   	; String ID #$02D3: ‘That's too bad.[line]We could help each other[.’][end-FC]
; display string, end TALK routine
; control flow target (from $92B0, $92B8, $92E5, $92F4)
; call to code in a different bank ($0F:$FA52)
0x019308|$06:$92F8:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01930B|$06:$92FB:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$B6: Roge Fastfinger in NE Map ID #$14: Wellgarth Underground
; indirect control flow target (via $8EB3)
0x01930E|$06:$92FE:A5 CE   	LDA $CE    	; Tuhn Watergate open flag (#$00 = closed, #$01 = open)
0x019310|$06:$9300:D0 22   	BNE $9324  
0x019312|$06:$9302:A9 3A   	LDA #$3A   	; Item ID #$3A: Watergate Key
0x019314|$06:$9304:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x019316|$06:$9306:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019319|$06:$9309:10 19   	BPL $9324  
; call to code in a different bank ($0F:$FA32)
0x01931B|$06:$930B:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01931E|$06:$930E:D7	; String ID #$02D7: ‘Curses, I am found!’[wait][line]‘Yes, I am Roge Fastfinger and here is the watergate key[.’][end-FC]

; data -> code
0x01931F|$06:$930F:A9 00   	LDA #$00   	; Midenhall
; control flow target (from $931E)
0x019321|$06:$9311:85 97   	STA $97    	; subject hero ID $97
0x019323|$06:$9313:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x019326|$06:$9316:B0 11   	BCS $9329  
0x019328|$06:$9318:E6 97   	INC $97    	; subject hero ID $97
0x01932A|$06:$931A:A5 97   	LDA $97    	; subject hero ID $97
0x01932C|$06:$931C:C9 03   	CMP #$03   	; max of 3 heroes
0x01932E|$06:$931E:D0 F1   	BNE $9311  	; if more heroes to check, check them
0x019330|$06:$9320:A9 D8   	LDA #$D8   	; String ID #$02D8: [wait]‘But thou hast many things.[line]See me again later[.’][end-FC]
0x019332|$06:$9322:D0 02   	BNE $9326  
; control flow target (from $9300, $9309)
0x019334|$06:$9324:A9 D9   	LDA #$D9   	; String ID #$02D9: ‘I'm sorry; I will not do that anymore[.’][end-FC]
; control flow target (from $9322)
; call to code in a different bank ($0F:$FA52)
0x019336|$06:$9326:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
; control flow target (from $9316)
0x019339|$06:$9329:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue IDs #$B7-#$B9: Priest in Map ID #$15: Beran
; indirect control flow target (via $8EB5, $8EB7, $8EB9)
0x01933C|$06:$932C:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x01933E|$06:$932E:C9 04   	CMP #$04   
0x019340|$06:$9330:B0 04   	BCS $9336  
0x019342|$06:$9332:A9 E1   	LDA #$E1   	; String ID #$02E1: ‘I see that thou hast faced many dangers and the greatest lie ahead[.’][end-FC]
0x019344|$06:$9334:D0 02   	BNE $9338  
; control flow target (from $9330)
0x019346|$06:$9336:A9 E2   	LDA #$E2   	; String ID #$02E2: ‘Welcome, [name]!’[wait][end-FC]
; control flow target (from $9334)
; call to code in a different bank ($0F:$FA52)
0x019348|$06:$9338:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x01934B|$06:$933B:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$BA: Monster in Map ID #$16: Hargon's Castle 1F
; indirect control flow target (via $8EBB)
; call to code in a different bank ($0F:$FA32)
0x01934E|$06:$933E:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019351|$06:$9341:E3	; String ID #$02E3: ‘The fool's false paradise suited thee better[.’][wait][line]‘Thou shall regret meddling in Hargon's affairs[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$D1C6)
0x019352|$06:$9342:20 C6 D1	JSR $D1C6  
0x019355|$06:$9345:4C 95 80	JMP $8095  	; wipe menus and exit COMMAND menu

; handler for dialogue ID #$BB: Hargon in Map ID #$17: Hargon's Castle 7F
; indirect control flow target (via $8EBD)
; call to code in a different bank ($0F:$FA32)
0x019358|$06:$9348:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01935B|$06:$934B:E4	; String ID #$02E4: ‘Who comes hither to disturb the Great Hargon?’[wait][line]‘Dost thou know who I am?’[FD][FD][end-FC]

; data -> code
0x01935C|$06:$934C:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01935F|$06:$934F:C9 00   	CMP #$00   	; YES
0x019361|$06:$9351:D0 04   	BNE $9357  
0x019363|$06:$9353:A9 E5   	LDA #$E5   	; String ID #$02E5: ‘Such audacity is unforgivable!’[end-FC]
0x019365|$06:$9355:D0 02   	BNE $9359  
; control flow target (from $9351)
0x019367|$06:$9357:A9 E6   	LDA #$E6   	; String ID #$02E6: ‘Then I shall teach the proper respect!’[end-FC]
; control flow target (from $9355)
; call to code in a different bank ($0F:$FA52)
0x019369|$06:$9359:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
; call to code in a different bank ($0F:$D0F5)
0x01936C|$06:$935C:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
; call to code in a different bank ($0F:$D1F8)
0x01936F|$06:$935F:20 F8 D1	JSR $D1F8  	; trigger Fixed Battle #$0B: 1 Hargon (Map ID #$17: Hargon's Castle 7F)
0x019372|$06:$9362:A5 98   	LDA $98    	; outcome of last fight?
0x019374|$06:$9364:C9 FC   	CMP #$FC   
0x019376|$06:$9366:F0 14   	BEQ $937C  
; call to code in a different bank ($0F:$F6F6)
0x019378|$06:$9368:20 F6 F6	JSR $F6F6  	; open main dialogue window and display string ID specified by byte following JSR + #$0200

; code -> data
; indirect data load target
0x01937B|$06:$936B:E7	; String ID #$02E7: ‘So thou hast proven a mighty warrior, mightier even than Hargon the Great[.’][wait][line]‘But there is one even greater than I, a sorcerer of the Shadowtime,[wait][line]a being of pure malice that none shall overcome[.’][wait][line]‘I send thee now to meet Malroth!’[end-FC]

; data -> code
0x01937C|$06:$936C:A9 FF   	LDA #$FF   
0x01937E|$06:$936E:8D 61 05	STA $0561  	; NPC #$04 sprite ID
; call to code in a different bank ($0F:$CF64)
0x019381|$06:$9371:20 64 CF	JSR $CF64  
; call to code in a different bank ($0F:$D0F5)
0x019384|$06:$9374:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x019387|$06:$9377:A9 64   	LDA #$64   
0x019389|$06:$9379:85 44   	STA $44    	; non-saved event status (#$00 = event start, #$01 = Lianport Gremlins defeated, #$02 = met with Lianport grandfather/have no friends at Shrine SW of Cannock, #$03 = King Midenhall moved to stairs, #$04 = King Midenhall moved down stairs, #$05 = King Midenhall spoke on Midenhall 1F, #$0B = Lighthouse Wizard 7F, #$1B Lighthouse Wizard 2F spoke, #$64 = Hargon dead, #$FF = event end)
0x01938B|$06:$937B:60      	RTS        

; control flow target (from $9366)
0x01938C|$06:$937C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$BC: Dragonlord's Grandson in Map ID #$18: Charlock Castle B8
; indirect control flow target (via $8EBF)
0x01938F|$06:$937F:A9 00   	LDA #$00   	; Midenhall
; call to code in a different bank ($0F:$FC50)
0x019391|$06:$9381:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x019394|$06:$9384:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019397|$06:$9387:EA	; String ID #$02EA: ‘Welcome, [name][.’][wait][line]‘All that Hargon threatens to take is really mine, for I am the grandson of the Dragonlord[.’][wait][line]‘Defeat Hargon and I will give thee advice.[line]Will thou do this?’[FD][FD][end-FC]

; data -> code
0x019398|$06:$9388:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x01939B|$06:$938B:C9 00   	CMP #$00   	; YES
0x01939D|$06:$938D:D0 04   	BNE $9393  
0x01939F|$06:$938F:A9 F0   	LDA #$F0   	; String ID #$02F0: ‘Once thou hast the five crests, seek out the good wizard, Rubiss,[wait][line]who dwells in the depths of the sea south of Midenhall[.’][end-FC]
0x0193A1|$06:$9391:D0 02   	BNE $9395  
; control flow target (from $938D)
0x0193A3|$06:$9393:A9 F1   	LDA #$F1   	; String ID #$02F1: ‘Thou art surely missing thy brain.[line]But it is up to thee[.’][end-FC]
; control flow target (from $9391)
; call to code in a different bank ($0F:$FA52)
0x0193A5|$06:$9395:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x0193A8|$06:$9398:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$BD: Guard in Map ID #$1A: Shrine SW of Cannock
; indirect control flow target (via $8EC1)
0x0193AB|$06:$939B:A9 BD   	LDA #$BD   	; dialogue ID
0x0193AD|$06:$939D:D0 02   	BNE $93A1  
; handler for dialogue ID #$BE: Guard in Map ID #$1A: Shrine SW of Cannock
; indirect control flow target (via $8EC3)
0x0193AF|$06:$939F:A9 BE   	LDA #$BE   	; dialogue ID
; control flow target (from $939D)
0x0193B1|$06:$93A1:85 49   	STA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$F6CE)
0x0193B3|$06:$93A3:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x0193B6|$06:$93A6:D0 0E   	BNE $93B6  	; if Midenhall is alone, he can't pass
0x0193B8|$06:$93A8:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x0193BA|$06:$93AA:C9 BD   	CMP #$BD   
0x0193BC|$06:$93AC:D0 04   	BNE $93B2  
0x0193BE|$06:$93AE:A9 F3   	LDA #$F3   	; String ID #$02F3: ‘It is dangerous to tread some roads alone[.’][end-FC]
0x0193C0|$06:$93B0:D0 06   	BNE $93B8  
; control flow target (from $93AC)
0x0193C2|$06:$93B2:A9 F4   	LDA #$F4   	; String ID #$02F4: ‘The King of Cannock has left orders that none shall pass alone[.’][end-FC]
0x0193C4|$06:$93B4:D0 02   	BNE $93B8  
; control flow target (from $93A6)
0x0193C6|$06:$93B6:A9 EB   	LDA #$EB   	; String ID #$02EB: ‘Please go through[.’][end-FC]
; control flow target (from $93B0, $93B4)
; call to code in a different bank ($0F:$FA52)
0x0193C8|$06:$93B8:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x0193CB|$06:$93BB:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$BF: Wizard in Map ID #$1C: Shrine SE of Rimuldar
; indirect control flow target (via $8EC5)
0x0193CE|$06:$93BE:A9 23   	LDA #$23   	; Item ID #$23: Helmet of Erdrick
0x0193D0|$06:$93C0:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0193D3|$06:$93C3:30 04   	BMI $93C9  
0x0193D5|$06:$93C5:A9 F7   	LDA #$F7   	; String ID #$02F7: ‘Thou hast no further business here. Go[.’][end-FC]
0x0193D7|$06:$93C7:D0 12   	BNE $93DB  
; control flow target (from $93C3)
0x0193D9|$06:$93C9:A9 24   	LDA #$24   	; Item ID #$24: Token of Erdrick
0x0193DB|$06:$93CB:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x0193DE|$06:$93CE:10 04   	BPL $93D4  
0x0193E0|$06:$93D0:A9 F5   	LDA #$F5   	; String ID #$02F5: ‘The real descendant of Erdrick carries a token to prove his heritage[.’][wait][line]‘Now be off with thee, imposter[.’][end-FC]
0x0193E2|$06:$93D2:D0 07   	BNE $93DB  
; control flow target (from $93CE)
0x0193E4|$06:$93D4:A9 23   	LDA #$23   	; Item ID #$23: Helmet of Erdrick
0x0193E6|$06:$93D6:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x0193E9|$06:$93D9:A9 F6   	LDA #$F6   	; String ID #$02F6: ‘I have been waiting for thee to come[.’][wait][line]‘I will trade the Helmet of Erdrick for the token thou carries[.’][end-FC]
; control flow target (from $93C7, $93D2)
; call to code in a different bank ($0F:$FA52)
0x0193EB|$06:$93DB:20 52 FA	JSR $FA52  	; display string ID specified by A + #$0200
0x0193EE|$06:$93DE:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$C0: Wizard in Map ID #$15: Beran
; indirect control flow target (via $8EC7)
0x0193F1|$06:$93E1:A9 04   	LDA #$04   	; Save Point ID #$04: Beran
; update save point $48 to A, run through the whole save point sequence
; control flow target (from $81C2)
0x0193F3|$06:$93E3:85 48   	STA $48    	; last save point ID
0x0193F5|$06:$93E5:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
; call to code in a different bank ($0F:$FC50)
0x0193F8|$06:$93E8:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x0193FB|$06:$93EB:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x0193FE|$06:$93EE:F8	; String ID #$02F8: ‘Even here thou can record thy deeds in the Imperial Scrolls of Honor[.’][wait][end-FC]

; data -> code
0x0193FF|$06:$93EF:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
; call to code in a different bank ($0F:$FA32)
0x019402|$06:$93F2:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019405|$06:$93F5:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
0x019406|$06:$93F6:20 5D A3	JSR $A35D  	; save game handler
; call to code in a different bank ($0F:$FA32)
0x019409|$06:$93F9:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01940C|$06:$93FC:F9	; String ID #$02F9: [wait]‘Return when in need[.’][end-FC]

; data -> code
0x01940D|$06:$93FD:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$C1: Priest in Map ID #$1F: Rhone Shrine
; indirect control flow target (via $8EC9)
0x019410|$06:$9400:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x019413|$06:$9403:48      	PHA        	; ID of first living hero at start of conversation
; call to code in a different bank ($0F:$FC50)
0x019414|$06:$9404:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x019417|$06:$9407:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01941A|$06:$940A:FA	; String ID #$02FA: ‘May the light shine upon thee, [name][.’][FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$C515)
0x01941B|$06:$940B:20 15 C5	JSR $C515  	; flash screen 10 times
0x01941E|$06:$940E:A9 84   	LDA #$84   	; everybody's alive and in your party!
0x019420|$06:$9410:8D 2D 06	STA $062D  	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019423|$06:$9413:8D 3F 06	STA $063F  	; Cannock status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019426|$06:$9416:8D 51 06	STA $0651  	; Moonbrooke status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
; call to code in a different bank ($0F:$C77B)
0x019429|$06:$9419:20 7B C7	JSR $C77B  	; restore full HP/MP to all living party members
0x01942C|$06:$941C:A9 00   	LDA #$00   
0x01942E|$06:$941E:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$D302)
0x019430|$06:$9420:20 02 D3	JSR $D302  
0x019433|$06:$9423:A9 01   	LDA #$01   
0x019435|$06:$9425:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$D302)
0x019437|$06:$9427:20 02 D3	JSR $D302  
0x01943A|$06:$942A:A9 02   	LDA #$02   
0x01943C|$06:$942C:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$D302)
0x01943E|$06:$942E:20 02 D3	JSR $D302  
; call to code in a different bank ($0F:$C22C)
0x019441|$06:$9431:20 2C C2	JSR $C22C  
0x019444|$06:$9434:20 66 94	JSR $9466  	; display EXP to next level messages for entire party
; call to code in a different bank ($0F:$FA32)
0x019447|$06:$9437:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01944A|$06:$943A:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
0x01944B|$06:$943B:A9 05   	LDA #$05   	; Save Point ID #$05: Rhone Shrine
0x01944D|$06:$943D:85 48   	STA $48    	; last save point ID
0x01944F|$06:$943F:20 5D A3	JSR $A35D  	; save game handler
0x019452|$06:$9442:68      	PLA        	; ID of first living hero at start of conversation
; call to code in a different bank ($0F:$FC50)
0x019453|$06:$9443:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA32)
0x019456|$06:$9446:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019459|$06:$9449:FB	; String ID #$02FB: [wait]‘Go now, [name][.’][end-FC]

; data -> code
0x01945A|$06:$944A:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue ID #$C2: Priest in Map ID #$20: Shrine SW of Moonbrooke
; indirect control flow target (via $8ECB)
0x01945D|$06:$944D:A9 02   	LDA #$02   	; Moonbrooke
0x01945F|$06:$944F:85 97   	STA $97    	; subject hero ID $97
0x019461|$06:$9451:A9 04   	LDA #$04   	; In Party
0x019463|$06:$9453:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019466|$06:$9456:B0 07   	BCS $945F  
; call to code in a different bank ($0F:$FA32)
0x019468|$06:$9458:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
0x01946B|$06:$945B:FC	; String ID #$02FC: ‘None shall pass until aid has been rendered to the Princess of Moonbrooke[.’][end-FC]

; data -> code
0x01946C|$06:$945C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9456)
; call to code in a different bank ($0F:$FA32)
0x01946F|$06:$945F:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019472|$06:$9462:00	; String ID #$0200: ‘When in need, visit the Houses of Healing[.’][end-FC]

; data -> code
0x019473|$06:$9463:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; display EXP to next level messages for entire party
; control flow target (from $8ED9, $8F15, $8F5C, $8FDB, $9182, $91FE, $93EF, $9434)
0x019476|$06:$9466:A9 00   	LDA #$00   	; Midenhall
0x019478|$06:$9468:85 97   	STA $97    	; subject hero ID $97
; control flow target (from $9490)
0x01947A|$06:$946A:A9 04   	LDA #$04   	; In Party
0x01947C|$06:$946C:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
; skip if not in party
0x01947F|$06:$946F:90 19   	BCC $948A  
0x019481|$06:$9471:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F734)
0x019483|$06:$9473:20 34 F7	JSR $F734  	; set $8F-$90 to EXP required to reach next level
0x019486|$06:$9476:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019489|$06:$9479:A5 8F   	LDA $8F    
0x01948B|$06:$947B:05 90   	ORA $90    
0x01948D|$06:$947D:D0 07   	BNE $9486  	; different messages depending on whether you're at max EXP or not
; call to code in a different bank ($0F:$FA2A)
0x01948F|$06:$947F:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019492|$06:$9482:52	; String ID #$0052: ‘[name] is now strong enough[.’][wait][end-FC]

; data -> code
0x019493|$06:$9483:4C 8A 94	JMP $948A  

; control flow target (from $947D)
; call to code in a different bank ($0F:$FA32)
0x019496|$06:$9486:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x019499|$06:$9489:8F	; String ID #$028F: ‘Of experience points [name] needs [number] to reach the next level[.’][wait][end-FC]

; data -> code
; control flow target (from $946F, $9483)
0x01949A|$06:$948A:E6 97   	INC $97    	; subject hero ID $97
0x01949C|$06:$948C:A5 97   	LDA $97    	; subject hero ID $97
0x01949E|$06:$948E:C9 03   	CMP #$03   	; max of 3 heroes
0x0194A0|$06:$9490:90 D8   	BCC $946A  	; if more heroes to handle, handle them
0x0194A2|$06:$9492:60      	RTS        

; SEC if Moonbrooke in party, CLC otherwise
; control flow target (from $9095)
0x0194A3|$06:$9493:A9 02   	LDA #$02   	; Moonbrooke
0x0194A5|$06:$9495:85 97   	STA $97    	; subject hero ID $97
0x0194A7|$06:$9497:A9 04   	LDA #$04   	; In Party
0x0194A9|$06:$9499:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x0194AC|$06:$949C:60      	RTS        

; SEC if Moonbrooke alive, CLC otherwise
; control flow target (from $9106, $9112)
0x0194AD|$06:$949D:A9 02   	LDA #$02   	; Moonbrooke
0x0194AF|$06:$949F:85 97   	STA $97    	; subject hero ID $97
0x0194B1|$06:$94A1:A9 80   	LDA #$80   	; Alive
0x0194B3|$06:$94A3:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x0194B6|$06:$94A6:60      	RTS        

; X = A mod 8, A = A / 8
; control flow target (from $92C8, $92D8)
0x0194B7|$06:$94A7:48      	PHA        
0x0194B8|$06:$94A8:29 07   	AND #$07   
0x0194BA|$06:$94AA:AA      	TAX        
0x0194BB|$06:$94AB:68      	PLA        
0x0194BC|$06:$94AC:4A      	LSR        
0x0194BD|$06:$94AD:4A      	LSR        
0x0194BE|$06:$94AE:4A      	LSR        
0x0194BF|$06:$94AF:60      	RTS        

; handler for dialogue IDs #$C3-#$CC (open dialogue window and display string specified by A - #$73)
; control flow target (from $8205)
0x0194C0|$06:$94B0:38      	SEC        
0x0194C1|$06:$94B1:E9 73   	SBC #$73   	; convert to string ID
0x0194C3|$06:$94B3:48      	PHA        
0x0194C4|$06:$94B4:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0194C7|$06:$94B7:68      	PLA        	; String IDs #$50-#$59: "‘Take care that thou strays not over the tower's edge[.’][end-FC]" / "‘As the full moon waxes and wanes so too the tide rises and falls[.’][end-FC]" / "‘[name] is now strong enough[.’][wait][end-FC]" / "And [cardinal #] [monster(s)][line]appeared.[end-FC]" / "[cardinal #] [monster(s)][line]appeared.[end-FC]" / "[end-FC]" / "[end-FC]" / "‘In ancient times a volcano rose from the seabed, and inside was a deep cavern[.’][end-FC]" / "[end-FC]" / "[end-FC]"
; call to code in a different bank ($0F:$FA4A)
0x0194C8|$06:$94B8:20 4A FA	JSR $FA4A  	; display string ID specified by A
0x0194CB|$06:$94BB:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue IDs #$CD-#$CF (open dialogue window, display string specified by A - #$73, display YES/NO menu, and display string corresponding to selected option)
; control flow target (from $820C)
0x0194CE|$06:$94BE:38      	SEC        
0x0194CF|$06:$94BF:E9 CD   	SBC #$CD   	; why not just SBC #$73?
0x0194D1|$06:$94C1:18      	CLC        
0x0194D2|$06:$94C2:69 5A   	ADC #$5A   	; String IDs #$5A-#$5C: "‘Hast thou purified thy body in the Spring of Bravery?’[end-FC]" / "‘Dost thou know what I know?’[FD][FD][end-FC]" / "‘Hast thou found the Wizard's Home?’[FD][FD][end-FC]"
0x0194D4|$06:$94C4:85 49   	STA $49    	; object hero/target/item/string ID $49
0x0194D6|$06:$94C6:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0194D9|$06:$94C9:A5 49   	LDA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$FA4A)
0x0194DB|$06:$94CB:20 4A FA	JSR $FA4A  	; display string ID specified by A
0x0194DE|$06:$94CE:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x0194E1|$06:$94D1:C9 00   	CMP #$00   	; YES
0x0194E3|$06:$94D3:D0 04   	BNE $94D9  
0x0194E5|$06:$94D5:A9 03   	LDA #$03   	; String IDs #$5D-#$5F: "‘Then all is well[.’][end-FC]" / "‘But I have not yet spoken[.’][end-FC]" / "‘Go then, for thou must defeat Hargon[.’][end-FC]"
0x0194E7|$06:$94D7:D0 02   	BNE $94DB  
; control flow target (from $94D3)
0x0194E9|$06:$94D9:A9 06   	LDA #$06   	; String IDs #$60-#$62: "‘That is not good[.’][wait][line]‘All who seek victory must first visit the Spring of Bravery[.’][end-FC]" / "‘These twin towers are known as the Dragon's Horn[.’][end-FC]" / "‘Thou art close to the island cave wherein lies an object of great power and greater peril!’[end-FC]"
; control flow target (from $94D7)
0x0194EB|$06:$94DB:18      	CLC        
0x0194EC|$06:$94DC:65 49   	ADC $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$FA4A)
0x0194EE|$06:$94DE:20 4A FA	JSR $FA4A  	; display string ID specified by A
0x0194F1|$06:$94E1:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; handler for dialogue IDs #$D0-#$D8 (dungeon NPCs with complex logic)
; control flow target (from $8213)
0x0194F4|$06:$94E4:48      	PHA        	; dialogue ID
0x0194F5|$06:$94E5:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0194F8|$06:$94E8:68      	PLA        	; dialogue ID
0x0194F9|$06:$94E9:C9 D0   	CMP #$D0   	; dialogue ID #$D0: Wizard in Map ID #$40: Spring of Bravery
0x0194FB|$06:$94EB:D0 38   	BNE $9525  
; call to code in a different bank ($0F:$FA2A)
0x0194FD|$06:$94ED:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019500|$06:$94F0:6A	; String ID #$006A: ‘Welcome to the Spring of Bravery[.’][wait][end-FC]

; data -> code
0x019501|$06:$94F1:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x019503|$06:$94F3:C9 01   	CMP #$01   
0x019505|$06:$94F5:F0 04   	BEQ $94FB  
0x019507|$06:$94F7:C9 02   	CMP #$02   
0x019509|$06:$94F9:D0 1A   	BNE $9515  
; control flow target (from $94F5)
; call to code in a different bank ($0F:$FA2A)
0x01950B|$06:$94FB:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x01950E|$06:$94FE:64	; String ID #$0064: ‘Art thou seeking the Prince of Cannock?’[FD][FD][end-FC]

; data -> code
0x01950F|$06:$94FF:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x019512|$06:$9502:C9 00   	CMP #$00   	; YES
0x019514|$06:$9504:D0 0F   	BNE $9515  
0x019516|$06:$9506:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x019518|$06:$9508:C9 01   	CMP #$01   
0x01951A|$06:$950A:D0 02   	BNE $950E  
0x01951C|$06:$950C:E6 CA   	INC $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
; control flow target (from $950A)
; call to code in a different bank ($0F:$FA2A)
0x01951E|$06:$950E:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019521|$06:$9511:65	; String ID #$0065: ‘Only moments ago he was here.[line]I think he is going to Midenhall Castle[.’][end-FC]

; data -> code
0x019522|$06:$9512:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $94F9, $9504)
; call to code in a different bank ($0F:$FA2A)
0x019525|$06:$9515:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019528|$06:$9518:63	; String ID #$0063: ‘I shall anoint thee with this water and wish thee well[.’][wait][line]‘Know that Token of Erdrick is kept by a brave hero[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$C515)
0x019529|$06:$9519:20 15 C5	JSR $C515  	; flash screen 10 times
0x01952C|$06:$951C:20 CC 8D	JSR $8DCC  	; restore full HP to all living party members
; call to code in a different bank ($0F:$C22C)
0x01952F|$06:$951F:20 2C C2	JSR $C22C  
0x019532|$06:$9522:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $94EB)
0x019535|$06:$9525:C9 D1   	CMP #$D1   	; dialogue ID #$D1: Wizard in Map ID #$56: Lighthouse 7F
0x019537|$06:$9527:D0 07   	BNE $9530  
; call to code in a different bank ($0F:$FA2E)
0x019539|$06:$9529:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
0x01953C|$06:$952C:52	; String ID #$0152: ‘Follow me and do not make a peep[.’][end-FC]

; data -> code
0x01953D|$06:$952D:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9527)
0x019540|$06:$9530:C9 D6   	CMP #$D6   	; dialogue ID #$D6: Guard in Map ID ; Map ID #$57: Lighthouse 8F
0x019542|$06:$9532:D0 0B   	BNE $953F  
; call to code in a different bank ($0F:$FA2A)
0x019544|$06:$9534:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019547|$06:$9537:70	; String ID #$0070: ‘For long ages have I guarded the Chamber of Hargon[.’][wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$FA2A)
0x019548|$06:$9538:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x01954B|$06:$953B:71	; String ID #$0071: ‘There is a land called Rhone, high in the mountains in the middle of a great continent[.’][wait][line]‘There shall thou find Hargon[.’][end-FC]

; data -> code
0x01954C|$06:$953C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9532)
0x01954F|$06:$953F:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; exit COMMAND menu
; control flow target (from $9560, $9569, $958A, $95B8, $9630, $99C8)
; call to code in a different bank ($0F:$FA89)
0x019552|$06:$9542:20 89 FA	JSR $FA89  	; useless JSR to RTS?!
0x019555|$06:$9545:4C 6D 80	JMP $806D  	; exit COMMAND menu

; end TALK/ITEM routines
; control flow target (from $8C40, $8CD1, $8E41, $8E67, $8F09, $8F36, $8F82, $8FA9, $8FC9, $9016, $903C, $9062, $9074, $9092, $909E, $90A5, $90BC, $90EC, $90FF, $910F, $914A, $916B, $9178, $9194, $91E0, $91EA, $91F1, $9210, $924B, $928F, $9296, $92FB, $9329, $933B, $937C, $9398, $93BB, $93DE, $93FD, $944A, $945C, $9463, $94BB, $94E1, $9512, $9522, $952D, $953C, $953F, $957B, $95A4, $9603, $966C, $967E, $96CD, $96F6, $9745, $9754, $97E6, $97F1, $980C, $9822, $983B, $9845, $984F, $9859, $9863, $986D, $9877, $9881, $988B, $9892, $99BE, $99EC, $99FD, $9A14, $9A44, $9A66, $9A81, $9ABA, $9AC1, $9AC8, $9B81, $9BA3, $9BB7, $9BEF, $9C02, $9C34, $9C5F, $9C90, $9CBE, $9D4C)
0x019558|$06:$9548:A5 8E   	LDA $8E    	; flag for in battle or not (#$FF)?
0x01955A|$06:$954A:10 01   	BPL $954D  
0x01955C|$06:$954C:60      	RTS        

; control flow target (from $954A)
0x01955D|$06:$954D:20 9D 80	JSR $809D  	; wait until all joypad buttons are released and then some button pressed
; call to code in a different bank ($0F:$FA89)
0x019560|$06:$9550:20 89 FA	JSR $FA89  	; useless JSR to RTS?!
0x019563|$06:$9553:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$CF6A)
0x019565|$06:$9555:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x019568|$06:$9558:4C 6D 80	JMP $806D  	; exit COMMAND menu

; COMMAND menu ITEM command handler
; indirect control flow target (via $808C)
; call to code in a different bank ($0F:$F55D)
0x01956B|$06:$955B:20 5D F5	JSR $F55D  	; display appropriate main ITEM hero select menu
0x01956E|$06:$955E:C9 FF   	CMP #$FF   
0x019570|$06:$9560:F0 E0   	BEQ $9542  	; exit COMMAND menu
0x019572|$06:$9562:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F5FE)
0x019574|$06:$9564:20 FE F5	JSR $F5FE  	; given a hero ID in A, open hero's item list and return selected item ID (or #$FE if they have no items)
0x019577|$06:$9567:C9 FF   	CMP #$FF   
0x019579|$06:$9569:F0 D7   	BEQ $9542  	; exit COMMAND menu
0x01957B|$06:$956B:C9 FE   	CMP #$FE   
0x01957D|$06:$956D:D0 0F   	BNE $957E  	; hero has selected an item to use
0x01957F|$06:$956F:20 CB 9A	JSR $9ACB  	; open dialogue window
0x019582|$06:$9572:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$FC50)
0x019584|$06:$9574:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019587|$06:$9577:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01958A|$06:$957A:13	; String ID #$0113: [name] does not yet have anything.[end-FC]

; data -> code
0x01958B|$06:$957B:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; hero has selected an item to use
; control flow target (from $956D)
0x01958E|$06:$957E:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019590|$06:$9580:85 95   	STA $95    	; ID for [item] and [spell] control codes; item ID
0x019592|$06:$9582:86 49   	STX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$EB76)
0x019594|$06:$9584:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x019597|$06:$9587:17	; Menu ID #$17: Main menu: what to do with selected item

; data -> code
0x019598|$06:$9588:C9 FF   	CMP #$FF   
0x01959A|$06:$958A:F0 B6   	BEQ $9542  	; exit COMMAND menu
0x01959C|$06:$958C:C9 01   	CMP #$01   	; TRADE
0x01959E|$06:$958E:90 03   	BCC $9593  	; USE handler
0x0195A0|$06:$9590:4C A8 99	JMP $99A8  	; TRADE/THROW handler

; USE handler
; control flow target (from $958E)
0x0195A3|$06:$9593:A9 80   	LDA #$80   	; Alive
0x0195A5|$06:$9595:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x0195A8|$06:$9598:B0 0D   	BCS $95A7  	; USE handler, hero alive
0x0195AA|$06:$959A:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0195AD|$06:$959D:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x0195B0|$06:$95A0:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0195B3|$06:$95A3:1F	; String ID #$011F: Alas, being but a ghost, [name] cannot use the [item].[end-FC]

; data -> code
0x0195B4|$06:$95A4:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; USE handler, hero alive
; control flow target (from $9598)
0x0195B7|$06:$95A7:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x0195B9|$06:$95A9:C9 3C   	CMP #$3C   	; Item ID #$3C: Medical Herb
0x0195BB|$06:$95AB:F0 04   	BEQ $95B1  	; USE Medical/Antidote Herb
0x0195BD|$06:$95AD:C9 3B   	CMP #$3B   	; Item ID #$3B: Antidote Herb
0x0195BF|$06:$95AF:D0 74   	BNE $9625  
; USE Medical/Antidote Herb
; control flow target (from $95AB)
; call to code in a different bank ($0F:$F587)
0x0195C1|$06:$95B1:20 87 F5	JSR $F587  	; display appropriate main ITEM target menu
0x0195C4|$06:$95B4:C9 FF   	CMP #$FF   
0x0195C6|$06:$95B6:D0 03   	BNE $95BB  
0x0195C8|$06:$95B8:4C 42 95	JMP $9542  	; exit COMMAND menu

; control flow target (from $95B6)
0x0195CB|$06:$95BB:85 C9   	STA $C9    	; target hero ID
0x0195CD|$06:$95BD:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0195D0|$06:$95C0:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x0195D3|$06:$95C3:A5 97   	LDA $97    	; subject hero ID $97
0x0195D5|$06:$95C5:C5 C9   	CMP $C9    	; target hero ID
0x0195D7|$06:$95C7:F0 0D   	BEQ $95D6  	; use different strings depending on whether hero uses item on themself or another hero
; call to code in a different bank ($0F:$FA2E)
0x0195D9|$06:$95C9:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0195DC|$06:$95CC:20	; String ID #$0120: [name] [end-FF]

; data -> code
0x0195DD|$06:$95CD:A5 C9   	LDA $C9    	; target hero ID
; call to code in a different bank ($0F:$FC50)
0x0195DF|$06:$95CF:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x0195E2|$06:$95D2:A9 1D   	LDA #$1D   	; String ID #$011D: used the [item] on [name].[end-FC]
0x0195E4|$06:$95D4:D0 02   	BNE $95D8  
; control flow target (from $95C7)
0x0195E6|$06:$95D6:A9 1E   	LDA #$1E   	; String ID #$011E: [name] used the [item].[end-FC]
; control flow target (from $95D4)
; call to code in a different bank ($0F:$FA4E)
0x0195E8|$06:$95D8:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x0195EB|$06:$95DB:A5 97   	LDA $97    	; subject hero ID $97
0x0195ED|$06:$95DD:48      	PHA        	; subject hero ID
0x0195EE|$06:$95DE:A5 C9   	LDA $C9    	; target hero ID
0x0195F0|$06:$95E0:85 97   	STA $97    	; subject hero ID $97
0x0195F2|$06:$95E2:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x0195F4|$06:$95E4:C9 3C   	CMP #$3C   	; Item ID #$3C: Medical Herb
0x0195F6|$06:$95E6:D0 1E   	BNE $9606  	; USE Antidote Herb
0x0195F8|$06:$95E8:A9 80   	LDA #$80   	; Alive
0x0195FA|$06:$95EA:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x0195FD|$06:$95ED:90 0A   	BCC $95F9  	; Medical Herbs can't heal dead people
0x0195FF|$06:$95EF:A5 C9   	LDA $C9    	; target hero ID
0x019601|$06:$95F1:A2 64   	LDX #$64   	; Healing Power on field for Medical Herb
; call to code in a different bank ($0F:$F72B)
0x019603|$06:$95F3:20 2B F7	JSR $F72B  	; heal hero ID in A by random amount based on healing power in X
; call to code in a different bank ($0F:$C22C)
0x019606|$06:$95F6:20 2C C2	JSR $C22C  
; control flow target (from $95ED, $960B, $961A)
0x019609|$06:$95F9:68      	PLA        	; subject hero ID
0x01960A|$06:$95FA:A6 49   	LDX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$C4D4)
0x01960C|$06:$95FC:20 D4 C4	JSR $C4D4  	; given hero ID in A and hero inventory offset in X, remove that item from hero's inventory and move all lower items up 1 slot
; call to code in a different bank ($0F:$EB76)
0x01960F|$06:$95FF:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x019612|$06:$9602:01	; Menu ID #$01: Mini status window, top

; data -> code
0x019613|$06:$9603:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; USE Antidote Herb
; control flow target (from $95E6)
0x019616|$06:$9606:A9 80   	LDA #$80   	; Alive
0x019618|$06:$9608:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x01961B|$06:$960B:90 EC   	BCC $95F9  	; Antidote Herbs can't heal dead people
0x01961D|$06:$960D:A5 C9   	LDA $C9    	; target hero ID
0x01961F|$06:$960F:20 AC 8D	JSR $8DAC  	; given hero ID in A, set Y to start of hero's data in $062D,Y, i.e. Y = A * #$12
0x019622|$06:$9612:A9 DF   	LDA #$DF   	; clear Poison
0x019624|$06:$9614:39 2D 06	AND $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019627|$06:$9617:99 2D 06	STA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01962A|$06:$961A:4C F9 95	JMP $95F9  

; given hero ID in $97 and hero inventory offset in $49, remove that item from hero's inventory and move all lower items up 1 slot
; control flow target (from $9634, $965E, $967B, $9809)
0x01962D|$06:$961D:A5 97   	LDA $97    	; subject hero ID $97
0x01962F|$06:$961F:A6 49   	LDX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$C4D4)
0x019631|$06:$9621:20 D4 C4	JSR $C4D4  	; given hero ID in A and hero inventory offset in X, remove that item from hero's inventory and move all lower items up 1 slot
0x019634|$06:$9624:60      	RTS        

; control flow target (from $95AF)
0x019635|$06:$9625:C9 29   	CMP #$29   	; Item ID #$29: Leaf of The World Tree
0x019637|$06:$9627:D0 25   	BNE $964E  
; call to code in a different bank ($0F:$F587)
0x019639|$06:$9629:20 87 F5	JSR $F587  	; display appropriate main ITEM target menu
0x01963C|$06:$962C:C9 FF   	CMP #$FF   
0x01963E|$06:$962E:D0 03   	BNE $9633  	; USE Item ID #$29: Leaf of The World Tree on target hero
0x019640|$06:$9630:4C 42 95	JMP $9542  	; exit COMMAND menu

; USE Item ID #$29: Leaf of The World Tree on target hero
; control flow target (from $962E)
0x019643|$06:$9633:48      	PHA        	; target hero ID
0x019644|$06:$9634:20 1D 96	JSR $961D  	; given hero ID in $97 and hero inventory offset in $49, remove that item from hero's inventory and move all lower items up 1 slot
0x019647|$06:$9637:20 CB 9A	JSR $9ACB  	; open dialogue window
0x01964A|$06:$963A:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01964D|$06:$963D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019650|$06:$9640:20	; String ID #$0120: [name] [end-FF]

; data -> code
0x019651|$06:$9641:68      	PLA        	; target hero ID
0x019652|$06:$9642:85 49   	STA $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$FC50)
0x019654|$06:$9644:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019657|$06:$9647:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01965A|$06:$964A:32	; String ID #$0132: ground up the Leaf of the World Tree and gave it to [name].[wait][end-FC]

; data -> code
0x01965B|$06:$964B:4C 9F 8C	JMP $8C9F  	; spell ID is not #$09, #$0B, #$0D, #$10, or #$12-#$16; ergo it's Spell ID #$17: Revive

; control flow target (from $9627)
0x01965E|$06:$964E:48      	PHA        	; item ID
0x01965F|$06:$964F:20 CB 9A	JSR $9ACB  	; open dialogue window
0x019662|$06:$9652:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019665|$06:$9655:68      	PLA        	; item ID
0x019666|$06:$9656:C9 35   	CMP #$35   	; Item ID #$35: Wing of the Wyvern
0x019668|$06:$9658:D0 0A   	BNE $9664  
; call to code in a different bank ($0F:$FA2E)
0x01966A|$06:$965A:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01966D|$06:$965D:21	; String ID #$0121: [name] threw the Wing of the Wyvern into the air.[end-FC]

; data -> code
0x01966E|$06:$965E:20 1D 96	JSR $961D  	; given hero ID in $97 and hero inventory offset in $49, remove that item from hero's inventory and move all lower items up 1 slot
0x019671|$06:$9661:4C 51 8C	JMP $8C51  	; handler for Return spell effect

; control flow target (from $9658)
0x019674|$06:$9664:C9 25   	CMP #$25   	; Item ID #$25: Tresures
0x019676|$06:$9666:D0 07   	BNE $966F  
; call to code in a different bank ($0F:$FA2E)
0x019678|$06:$9668:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01967B|$06:$966B:29	; String ID #$0129: [name] could not open the treasure chest, for it was locked.[end-FC]

; data -> code
0x01967C|$06:$966C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9666)
0x01967F|$06:$966F:C9 34   	CMP #$34   	; Item ID #$34: Fairy Water
0x019681|$06:$9671:D0 0E   	BNE $9681  
; call to code in a different bank ($0F:$FA2E)
0x019683|$06:$9673:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019686|$06:$9676:2A	; String ID #$012A: [name] sprinkled the Fairy Water from head to toe.[end-FC]

; data -> code
0x019687|$06:$9677:A9 FF   	LDA #$FF   
0x019689|$06:$9679:85 46   	STA $46    	; Repel (#$FE) / Fairy Water (#$FF) flag
0x01968B|$06:$967B:20 1D 96	JSR $961D  	; given hero ID in $97 and hero inventory offset in $49, remove that item from hero's inventory and move all lower items up 1 slot
0x01968E|$06:$967E:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9671)
0x019691|$06:$9681:C9 28   	CMP #$28   	; Item ID #$28: Eye of Malroth
0x019693|$06:$9683:D0 4B   	BNE $96D0  
; call to code in a different bank ($0F:$FA2E)
0x019695|$06:$9685:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019698|$06:$9688:31	; String ID #$0131: [name] held high the Eye of Malroth.[end-FC]

; data -> code
0x019699|$06:$9689:A5 31   	LDA $31    	; current map ID
0x01969B|$06:$968B:C9 01   	CMP #$01   	; Map ID #$01: World Map
0x01969D|$06:$968D:D0 24   	BNE $96B3  	; if not World Map, go check Hagon's Castle 1F
0x01969F|$06:$968F:AD F9 05	LDA $05F9  	; flag for Cave to Rhone open
0x0196A2|$06:$9692:D0 35   	BNE $96C9  	; item useless here
0x0196A4|$06:$9694:A5 16   	LDA $16    	; current map X-pos (1)
0x0196A6|$06:$9696:C9 71   	CMP #$71   	; X-pos range for successful use: #$71 - #$76 inclusive
0x0196A8|$06:$9698:90 2F   	BCC $96C9  	; item useless here
0x0196AA|$06:$969A:C9 77   	CMP #$77   
0x0196AC|$06:$969C:B0 2B   	BCS $96C9  	; item useless here
0x0196AE|$06:$969E:A5 17   	LDA $17    	; current map Y-pos (1)
0x0196B0|$06:$96A0:C9 C6   	CMP #$C6   	; Y-pos range for successful use: #$C6 - #$C8 inclusive
0x0196B2|$06:$96A2:90 25   	BCC $96C9  	; item useless here
0x0196B4|$06:$96A4:C9 C9   	CMP #$C9   
0x0196B6|$06:$96A6:B0 21   	BCS $96C9  	; item useless here
; call to code in a different bank ($0F:$D0F5)
0x0196B8|$06:$96A8:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x0196BB|$06:$96AB:A2 3C   	LDX #$3C   
; call to code in a different bank ($0F:$C1EE)
0x0196BD|$06:$96AD:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
; call to code in a different bank ($0F:$D23E)
0x0196C0|$06:$96B0:4C 3E D2	JMP $D23E  

; control flow target (from $968D)
0x0196C3|$06:$96B3:C9 16   	CMP #$16   	; Map ID #$16: Hargon's Castle 1F
0x0196C5|$06:$96B5:D0 12   	BNE $96C9  	; item useless here
; call to code in a different bank ($0F:$CD26)
0x0196C7|$06:$96B7:20 26 CD	JSR $CD26  	; set Z if your current map position is the (X, Y) co-ordinates given by the next 2 bytes

; code -> data
; indirect data load target
0x0196CA|$06:$96BA:0D
; indirect data load target
0x0196CB|$06:$96BB:04

; data -> code
0x0196CC|$06:$96BC:D0 0B   	BNE $96C9  	; item useless here
0x0196CE|$06:$96BE:A2 78   	LDX #$78   
; call to code in a different bank ($0F:$C1EE)
0x0196D0|$06:$96C0:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
; call to code in a different bank ($0F:$C515)
0x0196D3|$06:$96C3:20 15 C5	JSR $C515  	; flash screen 10 times
; call to code in a different bank ($0F:$D7A6)
0x0196D6|$06:$96C6:4C A6 D7	JMP $D7A6  

; item useless here
; control flow target (from $9692, $9698, $969C, $96A2, $96A6, $96B5, $96BC)
; call to code in a different bank ($0F:$FA2E)
0x0196D9|$06:$96C9:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0196DC|$06:$96CC:27	; String ID #$0127: [wait]But nothing happened.[end-FC]

; data -> code
0x0196DD|$06:$96CD:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9683)
0x0196E0|$06:$96D0:C9 2B   	CMP #$2B   	; Item ID #$2B: Mirror of Ra
0x0196E2|$06:$96D2:D0 74   	BNE $9748  
0x0196E4|$06:$96D4:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x0196E7|$06:$96D7:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0196EA|$06:$96DA:36	; String ID #$0136: [name] held up the Mirror of Ra.[end-FC]

; data -> code
0x0196EB|$06:$96DB:A9 00   	LDA #$00   
0x0196ED|$06:$96DD:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
; control flow target (from $96F0)
0x0196EF|$06:$96DF:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
; call to code in a different bank ($0F:$CF70)
0x0196F1|$06:$96E1:20 70 CF	JSR $CF70  
0x0196F4|$06:$96E4:A5 0C   	LDA $0C    
0x0196F6|$06:$96E6:C9 02   	CMP #$02   	; Moonbrooke
0x0196F8|$06:$96E8:F0 0F   	BEQ $96F9  
0x0196FA|$06:$96EA:E6 96   	INC $96    	; temp storage for item/spell/type/etc. IDs
0x0196FC|$06:$96EC:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x0196FE|$06:$96EE:C9 04   	CMP #$04   
0x019700|$06:$96F0:D0 ED   	BNE $96DF  
; call to code in a different bank ($0F:$FA2E)
0x019702|$06:$96F2:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019705|$06:$96F5:27	; String ID #$0127: [wait]But nothing happened.[end-FC]

; data -> code
0x019706|$06:$96F6:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $96E8)
0x019709|$06:$96F9:A9 02   	LDA #$02   	; Moonbrooke; useless op
; call to code in a different bank ($0F:$FC50)
0x01970B|$06:$96FB:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01970E|$06:$96FE:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019711|$06:$9701:37	; String ID #$0137: [wait]Behold, the mirror reflected back the image of Princess [name].[wait][line]Suddenly it shattered and the enchantment was broken,[wait][line]freeing the princess from her furry form.[end-FC]

; data -> code
0x019712|$06:$9702:A5 97   	LDA $97    	; subject hero ID $97
0x019714|$06:$9704:A6 49   	LDX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$C4D4)
0x019716|$06:$9706:20 D4 C4	JSR $C4D4  	; given hero ID in A and hero inventory offset in X, remove that item from hero's inventory and move all lower items up 1 slot
; call to code in a different bank ($0F:$D0F5)
0x019719|$06:$9709:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x01971C|$06:$970C:A2 28   	LDX #$28   
; call to code in a different bank ($0F:$C1EE)
0x01971E|$06:$970E:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x019721|$06:$9711:A9 00   	LDA #$00   
0x019723|$06:$9713:8D 4A 05	STA $054A  	; NPC #$01 scripted motion low byte
0x019726|$06:$9716:8D 4B 05	STA $054B  	; NPC #$01 scripted motion high byte
0x019729|$06:$9719:A9 09   	LDA #$09   
0x01972B|$06:$971B:A0 1F   	LDY #$1F   
; call to code in a different bank ($0F:$CD45)
0x01972D|$06:$971D:20 45 CD	JSR $CD45  
0x019730|$06:$9720:A9 02   	LDA #$02   
0x019732|$06:$9722:A0 1F   	LDY #$1F   
; call to code in a different bank ($0F:$CD4B)
0x019734|$06:$9724:20 4B CD	JSR $CD4B  
0x019737|$06:$9727:20 72 81	JSR $8172  
0x01973A|$06:$972A:A9 84   	LDA #$84   	; add Moonbrooke to party
0x01973C|$06:$972C:8D 51 06	STA $0651  	; Moonbrooke status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01973F|$06:$972F:A9 02   	LDA #$02   
0x019741|$06:$9731:8D 51 05	STA $0551  	; NPC #$02 sprite ID
; control flow target (from $81B6)
0x019744|$06:$9734:20 CB 9A	JSR $9ACB  	; open dialogue window
0x019747|$06:$9737:A9 02   	LDA #$02   	; Moonbrooke
; call to code in a different bank ($0F:$FC50)
0x019749|$06:$9739:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01974C|$06:$973C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01974F|$06:$973F:57	; String ID #$0157: ‘Oh, dear cousin, thou hast freed me beyond all hope[.’][wait][line]‘To repay this, I offer thee my loyalty and service as the Princess of Moonbrooke[.’][wait][line]‘Please, take me with thee on thy quest[.’][end-FC]

; data -> code
0x019750|$06:$9740:A9 07   	LDA #$07   	; Music ID #$07: add party member BGM
; call to code in a different bank ($0F:$C58D)
0x019752|$06:$9742:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
0x019755|$06:$9745:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $96D2)
0x019758|$06:$9748:C9 2C   	CMP #$2C   	; Item ID #$2C: Dew’s Yarn
0x01975A|$06:$974A:F0 04   	BEQ $9750  
0x01975C|$06:$974C:C9 2D   	CMP #$2D   	; Item ID #$2D: Magic Loom
0x01975E|$06:$974E:D0 07   	BNE $9757  
; control flow target (from $974A)
; call to code in a different bank ($0F:$FA2E)
0x019760|$06:$9750:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019763|$06:$9753:38	; String ID #$0138: [name] tried to use the [item],[wait] but didn't know how.[end-FC]

; data -> code
0x019764|$06:$9754:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $974E)
0x019767|$06:$9757:C9 37   	CMP #$37   	; Item ID #$37: Golden Key
0x019769|$06:$9759:D0 04   	BNE $975F  
0x01976B|$06:$975B:A9 01   	LDA #$01   
0x01976D|$06:$975D:D0 14   	BNE $9773  
; control flow target (from $9759)
0x01976F|$06:$975F:C9 38   	CMP #$38   	; Item ID #$38: Silver Key
0x019771|$06:$9761:D0 04   	BNE $9767  
0x019773|$06:$9763:A9 00   	LDA #$00   
0x019775|$06:$9765:F0 0C   	BEQ $9773  
; control flow target (from $9761)
0x019777|$06:$9767:C9 39   	CMP #$39   	; Item ID #$39: Jailor’s Key
0x019779|$06:$9769:F0 06   	BEQ $9771  
0x01977B|$06:$976B:C9 3A   	CMP #$3A   	; Item ID #$3A: Watergate Key
0x01977D|$06:$976D:F0 1E   	BEQ $978D  	; check Watergate
0x01977F|$06:$976F:D0 78   	BNE $97E9  
; control flow target (from $9769)
0x019781|$06:$9771:A9 02   	LDA #$02   
; control flow target (from $975D, $9765)
0x019783|$06:$9773:85 C9   	STA $C9    
; call to code in a different bank ($0F:$CF7C)
0x019785|$06:$9775:20 7C CF	JSR $CF7C  
0x019788|$06:$9778:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x01978A|$06:$977A:D0 08   	BNE $9784  
0x01978C|$06:$977C:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x01978E|$06:$977E:C9 39   	CMP #$39   	; Item ID #$39: Jailor’s Key
0x019790|$06:$9780:F0 57   	BEQ $97D9  
0x019792|$06:$9782:D0 51   	BNE $97D5  
; control flow target (from $977A)
0x019794|$06:$9784:C9 01   	CMP #$01   
0x019796|$06:$9786:F0 59   	BEQ $97E1  	; wrong key for door
0x019798|$06:$9788:A9 58   	LDA #$58   	; String ID #$0158: The door opened.[end-FC]
0x01979A|$06:$978A:4C E3 97	JMP $97E3  

; check Watergate
; control flow target (from $976D)
0x01979D|$06:$978D:A5 31   	LDA $31    	; current map ID
0x01979F|$06:$978F:C9 12   	CMP #$12   	; Map ID #$12: Tuhn Watergate
0x0197A1|$06:$9791:D0 4A   	BNE $97DD  
; call to code in a different bank ($0F:$CD26)
0x0197A3|$06:$9793:20 26 CD	JSR $CD26  	; set Z if your current map position is the (X, Y) co-ordinates given by the next 2 bytes

; code -> data
; indirect data load target
0x0197A6|$06:$9796:02
; indirect data load target
0x0197A7|$06:$9797:04

; data -> code
0x0197A8|$06:$9798:D0 43   	BNE $97DD  
; call to code in a different bank ($0F:$FA2E)
0x0197AA|$06:$979A:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0197AD|$06:$979D:59	; String ID #$0159: The water gate opened.[end-FC]

; data -> code
; call to code in a different bank ($0F:$D0F5)
0x0197AE|$06:$979E:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x0197B1|$06:$97A1:A5 97   	LDA $97    	; subject hero ID $97
0x0197B3|$06:$97A3:85 9C   	STA $9C    
0x0197B5|$06:$97A5:A9 3A   	LDA #$3A   	; Item ID #$3A: Watergate Key
; call to code in a different bank ($0F:$C4B6)
0x0197B7|$06:$97A7:20 B6 C4	JSR $C4B6  	; given a hero ID in $9C and an item ID in A, remove that item from hero's inventory if present and SEC, CLC otherwise
0x0197BA|$06:$97AA:A9 04   	LDA #$04   
0x0197BC|$06:$97AC:85 20   	STA $20    	; map exterior border tile ID (#$00 = Road, #$01 = Grass, #$02 = Sand, #$03 = Tree, #$04 = Water, #$05 = Vertical Wall, #$06 = Shrub, #$07 = Horizontal Wall, #$08 = Swamp, ..., #$20 = Ceiling Alternating?, #$21 = Ceiling Down?, #$24 = Black?, #$28 = Blue?)
0x0197BE|$06:$97AE:A9 01   	LDA #$01   
0x0197C0|$06:$97B0:85 CE   	STA $CE    	; Tuhn Watergate open flag (#$00 = closed, #$01 = open)
0x0197C2|$06:$97B2:A9 00   	LDA #$00   
0x0197C4|$06:$97B4:85 18   	STA $18    
0x0197C6|$06:$97B6:A9 02   	LDA #$02   
0x0197C8|$06:$97B8:85 19   	STA $19    
; call to code in a different bank ($0F:$D256)
0x0197CA|$06:$97BA:20 56 D2	JSR $D256  
0x0197CD|$06:$97BD:A9 02   	LDA #$02   
0x0197CF|$06:$97BF:85 18   	STA $18    
; call to code in a different bank ($0F:$D256)
0x0197D1|$06:$97C1:20 56 D2	JSR $D256  
0x0197D4|$06:$97C4:A9 96   	LDA #$96   	; Music ID #$96: Watergate SFX
; call to code in a different bank ($0F:$C561)
0x0197D6|$06:$97C6:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x0197D9|$06:$97C9:A2 3C   	LDX #$3C   
; call to code in a different bank ($0F:$C1EE)
0x0197DB|$06:$97CB:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x0197DE|$06:$97CE:A9 32   	LDA #$32   
0x0197E0|$06:$97D0:85 41   	STA $41    
; call to code in a different bank ($0F:$E938)
0x0197E2|$06:$97D2:4C 38 E9	JMP $E938  

; control flow target (from $9782)
0x0197E5|$06:$97D5:A9 3B   	LDA #$3B   	; String ID #$013B: There is no door here.[end-FC]
0x0197E7|$06:$97D7:D0 0A   	BNE $97E3  
; control flow target (from $9780)
0x0197E9|$06:$97D9:A9 3C   	LDA #$3C   	; String ID #$013C: There is no prison here.[end-FC]
0x0197EB|$06:$97DB:D0 06   	BNE $97E3  
; control flow target (from $9791, $9798)
0x0197ED|$06:$97DD:A9 3D   	LDA #$3D   	; String ID #$013D: This is not the water gate.[end-FC]
0x0197EF|$06:$97DF:D0 02   	BNE $97E3  
; wrong key for door
; control flow target (from $9786)
0x0197F1|$06:$97E1:A9 3E   	LDA #$3E   	; String ID #$013E: The key wouldn't turn in the lock.[end-FC]
; control flow target (from $978A, $97D7, $97DB, $97DF)
; call to code in a different bank ($0F:$FA4E)
0x0197F3|$06:$97E3:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x0197F6|$06:$97E6:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $976F)
0x0197F9|$06:$97E9:C9 33   	CMP #$33   	; Item ID #$33: Lottery Ticket
0x0197FB|$06:$97EB:D0 07   	BNE $97F4  
; call to code in a different bank ($0F:$FA2E)
0x0197FD|$06:$97ED:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019800|$06:$97F0:40	; String ID #$0140: [name] eagerly handed over the lottery ticket.[end-FC]

; data -> code
0x019801|$06:$97F1:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $97EB)
0x019804|$06:$97F4:C9 3D   	CMP #$3D   	; Item ID #$3D: Wizard’s Ring
0x019806|$06:$97F6:D0 17   	BNE $980F  
; call to code in a different bank ($0F:$FA2E)
0x019808|$06:$97F8:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01980B|$06:$97FB:41	; String ID #$0141: [name] slipped on the Wizard's Ring and spoke a word of magic.[end-FC]

; data -> code
0x01980C|$06:$97FC:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F722)
0x01980E|$06:$97FE:20 22 F7	JSR $F722  	; restore the hero ID in A's MP by a random amount based on the Wizard's Ring's power; returns a random number between $03 and #$0A in A and $99
0x019811|$06:$9801:A5 99   	LDA $99    	; chance for Wizard's Ring to break
0x019813|$06:$9803:D0 07   	BNE $980C  
; call to code in a different bank ($0F:$FA2E)
0x019815|$06:$9805:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019818|$06:$9808:42	; String ID #$0142: [wait]The ring crumbled like clay into dust, losing all its power.[end-FC]

; data -> code
0x019819|$06:$9809:20 1D 96	JSR $961D  	; given hero ID in $97 and hero inventory offset in $49, remove that item from hero's inventory and move all lower items up 1 slot
; control flow target (from $9803)
0x01981C|$06:$980C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $97F6)
0x01981F|$06:$980F:C9 31   	CMP #$31   	; Item ID #$31: Dragon’s Potion
0x019821|$06:$9811:D0 12   	BNE $9825  
; call to code in a different bank ($0F:$FA2E)
0x019823|$06:$9813:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019826|$06:$9816:43	; String ID #$0143: The beautiful voice can be heard from somewhere[..][..][wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$FA32)
0x019827|$06:$9817:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01982A|$06:$981A:87	; String ID #$0287: ‘Dost thou wish to save thy deeds in the Imperial Scrolls of Honor?’[FD][FD][end-FC]

; data -> code
0x01982B|$06:$981B:20 5D A3	JSR $A35D  	; save game handler
; call to code in a different bank ($0F:$FA2E)
0x01982E|$06:$981E:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019831|$06:$9821:47	; String ID #$0147: ‘I watch over my descendants[.’][end-FC]

; data -> code
0x019832|$06:$9822:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9811)
0x019835|$06:$9825:C9 3E   	CMP #$3E   	; Item ID #$3E: Perilous
0x019837|$06:$9827:D0 0B   	BNE $9834  
; external control flow target (from $0F:$F74D)
0x019839|$06:$9829:86 49   	STX $49    	; object hero/target/item/string ID $49
0x01983B|$06:$982B:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x01983D|$06:$982D:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x01983F|$06:$982F:48      	PHA        
0x019840|$06:$9830:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019843|$06:$9833:68      	PLA        
; control flow target (from $9827)
0x019844|$06:$9834:C9 30   	CMP #$30   	; Item ID #$30: Dragon’s Bane
0x019846|$06:$9836:D0 06   	BNE $983E  
0x019848|$06:$9838:20 95 98	JSR $9895  	; USE Dragon's Bane
0x01984B|$06:$983B:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9836)
0x01984E|$06:$983E:C9 2F   	CMP #$2F   	; Item ID #$2F: Gremlin’s Tail
0x019850|$06:$9840:D0 06   	BNE $9848  
0x019852|$06:$9842:20 B0 98	JSR $98B0  	; USE Gremlin's Tail
0x019855|$06:$9845:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9840)
0x019858|$06:$9848:C9 26   	CMP #$26   	; Item ID #$26: Moon Fragment
0x01985A|$06:$984A:D0 06   	BNE $9852  
0x01985C|$06:$984C:20 CB 98	JSR $98CB  	; USE Moon Fragment
0x01985F|$06:$984F:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $984A)
0x019862|$06:$9852:C9 24   	CMP #$24   	; Item ID #$24: Token of Erdrick
0x019864|$06:$9854:D0 06   	BNE $985C  
0x019866|$06:$9856:20 08 99	JSR $9908  	; USE Token of Erdrick
0x019869|$06:$9859:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9854)
0x01986C|$06:$985C:C9 2E   	CMP #$2E   	; Item ID #$2E: Cloak of Wind
0x01986E|$06:$985E:D0 06   	BNE $9866  
0x019870|$06:$9860:20 14 99	JSR $9914  	; USE Cloak of Wind
0x019873|$06:$9863:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $985E)
0x019876|$06:$9866:C9 27   	CMP #$27   	; Item ID #$27: Charm of Rubiss
0x019878|$06:$9868:D0 06   	BNE $9870  
0x01987A|$06:$986A:20 2F 99	JSR $992F  	; USE Charm of Rubiss
0x01987D|$06:$986D:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9868)
0x019880|$06:$9870:C9 2A   	CMP #$2A   	; Item ID #$2A: Echoing Flute
0x019882|$06:$9872:D0 06   	BNE $987A  
0x019884|$06:$9874:20 63 99	JSR $9963  	; USE Echoing Flute
0x019887|$06:$9877:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9872)
0x01988A|$06:$987A:C9 36   	CMP #$36   	; Item ID #$36: [blank]
0x01988C|$06:$987C:D0 06   	BNE $9884  
0x01988E|$06:$987E:20 9C 99	JSR $999C  	; USE Golden Card
0x019891|$06:$9881:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $987C)
0x019894|$06:$9884:C9 32   	CMP #$32   	; Item ID #$32: Golden Card
0x019896|$06:$9886:D0 06   	BNE $988E  
0x019898|$06:$9888:20 9C 99	JSR $999C  	; USE Golden Card
0x01989B|$06:$988B:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9886)
; call to code in a different bank ($0F:$FA2E)
0x01989E|$06:$988E:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0198A1|$06:$9891:9E	; String ID #$019E: But nothing happened.[end-FC]

; data -> code
0x0198A2|$06:$9892:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; USE Dragon's Bane
; control flow target (from $9838)
0x0198A5|$06:$9895:09 40   	ORA #$40   	; check for equipped version
0x0198A7|$06:$9897:20 BA 8D	JSR $8DBA  	; given a hero ID in $97 and an item ID in A, SEC if hero has that item, CLC otherwise
0x0198AA|$06:$989A:B0 0E   	BCS $98AA  
0x0198AC|$06:$989C:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x0198AE|$06:$989E:20 0F 8B	JSR $8B0F  	; given hero ID in $97 and hero inventory index in X, return corresponding item ID in A and party inventory index in X
0x0198B1|$06:$98A1:09 40   	ORA #$40   	; equip it
0x0198B3|$06:$98A3:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x0198B6|$06:$98A6:A9 22   	LDA #$22   	; String ID #$0122: [name] put on the Dragon's Bane.[end-FC]
0x0198B8|$06:$98A8:D0 02   	BNE $98AC  
; control flow target (from $989A)
0x0198BA|$06:$98AA:A9 23   	LDA #$23   	; String ID #$0123: [name] has already put on the Dragon's Bane.[end-FC]
; control flow target (from $98A8)
; call to code in a different bank ($0F:$FA4E)
0x0198BC|$06:$98AC:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x0198BF|$06:$98AF:60      	RTS        

; USE Gremlin's Tail
; control flow target (from $9842)
0x0198C0|$06:$98B0:09 40   	ORA #$40   	; check for equipped version
0x0198C2|$06:$98B2:20 BA 8D	JSR $8DBA  	; given a hero ID in $97 and an item ID in A, SEC if hero has that item, CLC otherwise
0x0198C5|$06:$98B5:B0 0E   	BCS $98C5  
0x0198C7|$06:$98B7:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x0198C9|$06:$98B9:20 0F 8B	JSR $8B0F  	; given hero ID in $97 and hero inventory index in X, return corresponding item ID in A and party inventory index in X
0x0198CC|$06:$98BC:09 40   	ORA #$40   	; equip it
0x0198CE|$06:$98BE:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x0198D1|$06:$98C1:A9 24   	LDA #$24   	; String ID #$0124: [name] put on the Gremlin's Tail.[end-FC]
0x0198D3|$06:$98C3:D0 02   	BNE $98C7  
; control flow target (from $98B5)
0x0198D5|$06:$98C5:A9 25   	LDA #$25   	; String ID #$0125: [name] has already put on the Gremlin's Tail.[end-FC]
; control flow target (from $98C3)
; call to code in a different bank ($0F:$FA4E)
0x0198D7|$06:$98C7:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x0198DA|$06:$98CA:60      	RTS        

; USE Moon Fragment
; control flow target (from $984C)
; call to code in a different bank ($0F:$FA2E)
0x0198DB|$06:$98CB:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0198DE|$06:$98CE:26	; String ID #$0126: [name] held the Moon Fragment overhead.[end-FC]

; data -> code
0x0198DF|$06:$98CF:A5 8E   	LDA $8E    	; flag for in battle or not (#$FF)?
0x0198E1|$06:$98D1:30 2D   	BMI $9900  
0x0198E3|$06:$98D3:A5 1F   	LDA $1F    	; some kind of map type (#$00: World Map, #$01: other non-dungeon maps, #$02: maps #$2B - #$43 inclusive, #$03: maps >= #$44, #$FF => game menu)
0x0198E5|$06:$98D5:D0 29   	BNE $9900  
0x0198E7|$06:$98D7:AD F8 05	LDA $05F8  	; Sea Cave shoal status (#$00 = shoals up, others = shoals down)
0x0198EA|$06:$98DA:D0 24   	BNE $9900  
0x0198EC|$06:$98DC:A5 16   	LDA $16    	; current map X-pos (1)
0x0198EE|$06:$98DE:C9 B1   	CMP #$B1   	; X-range for effective use is #$B1-#$B9 inclusive
0x0198F0|$06:$98E0:90 1E   	BCC $9900  
0x0198F2|$06:$98E2:C9 BA   	CMP #$BA   
0x0198F4|$06:$98E4:B0 1A   	BCS $9900  
0x0198F6|$06:$98E6:A5 17   	LDA $17    	; current map Y-pos (1)
0x0198F8|$06:$98E8:C9 A2   	CMP #$A2   	; Y-range for effective use is #$A2-#$AC inclusive
0x0198FA|$06:$98EA:90 14   	BCC $9900  
0x0198FC|$06:$98EC:C9 AD   	CMP #$AD   
0x0198FE|$06:$98EE:B0 10   	BCS $9900  
; call to code in a different bank ($0F:$D0F5)
0x019900|$06:$98F0:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x019903|$06:$98F3:A2 3C   	LDX #$3C   
; call to code in a different bank ($0F:$C1EE)
0x019905|$06:$98F5:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x019908|$06:$98F8:A9 01   	LDA #$01   
0x01990A|$06:$98FA:8D F8 05	STA $05F8  	; Sea Cave shoal status (#$00 = shoals up, others = shoals down)
; call to code in a different bank ($0F:$D218)
0x01990D|$06:$98FD:4C 18 D2	JMP $D218  	; open path to Sea Cave

; control flow target (from $98D1, $98D5, $98DA, $98E0, $98E4, $98EA, $98EE)
; call to code in a different bank ($0F:$F73D)
0x019910|$06:$9900:20 3D F7	JSR $F73D  	; calls $04:$99E6
; call to code in a different bank ($0F:$FA2E)
0x019913|$06:$9903:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019916|$06:$9906:27	; String ID #$0127: [wait]But nothing happened.[end-FC]

; data -> code
0x019917|$06:$9907:60      	RTS        

; USE Token of Erdrick
; control flow target (from $9856)
; call to code in a different bank ($0F:$FA2E)
0x019918|$06:$9908:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
0x01991B|$06:$990B:28	; String ID #$0128: [name] gripped Token of Erdrick.[wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$F73D)
0x01991C|$06:$990C:20 3D F7	JSR $F73D  	; calls $04:$99E6
; call to code in a different bank ($0F:$FA2E)
0x01991F|$06:$990F:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
0x019922|$06:$9912:53	; String ID #$0153: Thy courage soared![end-FC]

; data -> code
0x019923|$06:$9913:60      	RTS        

; USE Cloak of Wind
; control flow target (from $9860)
0x019924|$06:$9914:09 40   	ORA #$40   	; check for equipped version
0x019926|$06:$9916:20 BA 8D	JSR $8DBA  	; given a hero ID in $97 and an item ID in A, SEC if hero has that item, CLC otherwise
0x019929|$06:$9919:B0 0E   	BCS $9929  
0x01992B|$06:$991B:A6 49   	LDX $49    	; object hero/target/item/string ID $49
0x01992D|$06:$991D:20 0F 8B	JSR $8B0F  	; given hero ID in $97 and hero inventory index in X, return corresponding item ID in A and party inventory index in X
0x019930|$06:$9920:09 40   	ORA #$40   	; equip it
0x019932|$06:$9922:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x019935|$06:$9925:A9 2C   	LDA #$2C   	; String ID #$012C: [name] donned the Cloak of Wind.[end-FC]
0x019937|$06:$9927:D0 02   	BNE $992B  
; control flow target (from $9919)
0x019939|$06:$9929:A9 2D   	LDA #$2D   	; String ID #$012D: Remember, [name] has already put on the Cloak of Wind.[end-FC]
; control flow target (from $9927)
; call to code in a different bank ($0F:$FA4E)
0x01993B|$06:$992B:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x01993E|$06:$992E:60      	RTS        

; USE Charm of Rubiss
; control flow target (from $986A)
; call to code in a different bank ($0F:$FA2E)
0x01993F|$06:$992F:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019942|$06:$9932:2E	; String ID #$012E: With one hand, [name] held aloft the Charm of Rubiss.[wait][end-FC]

; data -> code
0x019943|$06:$9933:A5 8E   	LDA $8E    	; flag for in battle or not (#$FF)?
0x019945|$06:$9935:30 24   	BMI $995B  
0x019947|$06:$9937:A5 31   	LDA $31    	; current map ID
; Map ID #$00: Fake Midenhall
0x019949|$06:$9939:D0 20   	BNE $995B  
; call to code in a different bank ($0F:$FA2E)
0x01994B|$06:$993B:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01994E|$06:$993E:30	; String ID #$0130: [name] could hear a voice drawing near.[wait][line]‘[name]! Be not deceived by false visions[.’][end-FC]

; data -> code
0x01994F|$06:$993F:A2 78   	LDX #$78   
; call to code in a different bank ($0F:$C1EE)
0x019951|$06:$9941:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
; call to code in a different bank ($0F:$C515)
0x019954|$06:$9944:20 15 C5	JSR $C515  	; flash screen 10 times
; call to code in a different bank ($0F:$C515)
0x019957|$06:$9947:20 15 C5	JSR $C515  	; flash screen 10 times
0x01995A|$06:$994A:68      	PLA        
0x01995B|$06:$994B:68      	PLA        
0x01995C|$06:$994C:AD 59 99	LDA $9959  
0x01995F|$06:$994F:85 0C   	STA $0C    
0x019961|$06:$9951:AD 5A 99	LDA $995A  
0x019964|$06:$9954:85 0D   	STA $0D    
; call to code in a different bank ($0F:$D81C)
0x019966|$06:$9956:4C 1C D8	JMP $D81C  


; code -> data
; data load target (from $994C)
0x019969|$06:$9959:85
; data load target (from $9951)
0x01996A|$06:$995A:   BD	; $03:$BD85

; data -> code
; control flow target (from $9935, $9939)
; call to code in a different bank ($0F:$F73D)
0x01996B|$06:$995B:20 3D F7	JSR $F73D  	; calls $04:$99E6
; call to code in a different bank ($0F:$FA2E)
0x01996E|$06:$995E:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019971|$06:$9961:2F	; String ID #$012F: And yet nothing happened.[end-FC]

; data -> code
0x019972|$06:$9962:60      	RTS        

; USE Echoing Flute
; control flow target (from $9874)
; call to code in a different bank ($0F:$FA2E)
0x019973|$06:$9963:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019976|$06:$9966:35	; String ID #$0135: Briefly, [name] played the Echoing Flute.[end-FC]

; data -> code
0x019977|$06:$9967:A0 00   	LDY #$00   
0x019979|$06:$9969:A5 31   	LDA $31    	; current map ID
; control flow target (from $9986)
0x01997B|$06:$996B:D9 8D 99	CMP $998D,Y	; minimum map ID (inclusive)
0x01997E|$06:$996E:90 11   	BCC $9981  	; wrong map
0x019980|$06:$9970:D9 8E 99	CMP $998E,Y	; maximum map ID (exclusive)
0x019983|$06:$9973:B0 0C   	BCS $9981  	; wrong map
0x019985|$06:$9975:B9 8F 99	LDA $998F,Y	; Crest in this map
0x019988|$06:$9978:2D 12 01	AND $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x01998B|$06:$997B:D0 0B   	BNE $9988  	; flute does not echo
0x01998D|$06:$997D:A9 03   	LDA #$03   	; Music ID #$03: Echoing Flute echoing BGM
0x01998F|$06:$997F:D0 09   	BNE $998A  	; flute echoes!
; wrong map
; control flow target (from $996E, $9973)
0x019991|$06:$9981:C8      	INY        
0x019992|$06:$9982:C8      	INY        
0x019993|$06:$9983:C8      	INY        
0x019994|$06:$9984:C0 0F   	CPY #$0F   	; 3 bytes per crest * 5 crests = #$0F
0x019996|$06:$9986:D0 E3   	BNE $996B  	; if more maps to check, check them
; flute does not echo
; control flow target (from $997B)
0x019998|$06:$9988:A9 04   	LDA #$04   	; Music ID #$04: Echoing Flute not echoing BGM
; control flow target (from $997F)
; call to code in a different bank ($0F:$C58D)
0x01999A|$06:$998A:4C 8D C5	JMP $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM


; code -> data
; minimum map ID (inclusive)
; indexed data load target (from $996B)
0x01999D|$06:$998D:08
; maximum map ID (exclusive)
; indexed data load target (from $9970)
0x01999E|$06:$998E:   09
; Crest in this map
; indexed data load target (from $9975)
0x01999F|$06:$998F:      08	; Map ID #$08: Hamlin Waterway
0x0199A0|$06:$9990:0F 10 04	; Map ID #$0F: Osterfair
0x0199A3|$06:$9993:1E 1F 01	; Map ID #$1E: Shrine NW of Zahan
0x0199A6|$06:$9996:50 58 02	; Map IDs #$50 - #$57: Lighthouse
0x0199A9|$06:$9999:37 40 10	; Map IDs #$37 - #$3F: Cave to Rhone

; data -> code
; USE Golden Card
; control flow target (from $987E, $9888)
; call to code in a different bank ($0F:$FA2E)
0x0199AC|$06:$999C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0199AF|$06:$999F:3F	; String ID #$013F: [name] took the Golden Card.[wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$F73D)
0x0199B0|$06:$99A0:20 3D F7	JSR $F73D  	; calls $04:$99E6
; call to code in a different bank ($0F:$FA2E)
0x0199B3|$06:$99A3:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0199B6|$06:$99A6:54	; String ID #$0154: Thou art happy indeed.[end-FC]

; data -> code
0x0199B7|$06:$99A7:60      	RTS        

; TRADE/THROW handler
; control flow target (from $9590)
0x0199B8|$06:$99A8:C9 01   	CMP #$01   	; TRADE; useless op
0x0199BA|$06:$99AA:F0 03   	BEQ $99AF  	; TRADE handler
0x0199BC|$06:$99AC:4C 84 9A	JMP $9A84  	; THROW command handler

; TRADE handler
; control flow target (from $99AA)
; call to code in a different bank ($0F:$F6CE)
0x0199BF|$06:$99AF:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x0199C2|$06:$99B2:D0 0D   	BNE $99C1  	; determine target hero
0x0199C4|$06:$99B4:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0199C7|$06:$99B7:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x0199CA|$06:$99BA:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0199CD|$06:$99BD:19	; String ID #$0119: [name] has no companion with which to exchange tools.[end-FC]

; data -> code
0x0199CE|$06:$99BE:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; determine target hero
; control flow target (from $99B2)
; call to code in a different bank ($0F:$F587)
0x0199D1|$06:$99C1:20 87 F5	JSR $F587  	; display appropriate main ITEM target menu
0x0199D4|$06:$99C4:C9 FF   	CMP #$FF   
0x0199D6|$06:$99C6:D0 03   	BNE $99CB  
0x0199D8|$06:$99C8:4C 42 95	JMP $9542  	; exit COMMAND menu

; control flow target (from $99C6)
0x0199DB|$06:$99CB:85 C9   	STA $C9    	; target hero ID
0x0199DD|$06:$99CD:20 CB 9A	JSR $9ACB  	; open dialogue window
0x0199E0|$06:$99D0:20 FC 9A	JSR $9AFC  	; given hero ID in $97 and hero inventory index in $49, set Z if item is equipped and cursed, clear if not
0x0199E3|$06:$99D3:D0 03   	BNE $99D8  	; item can be traded
0x0199E5|$06:$99D5:4C C4 9A	JMP $9AC4  	; item is equipped and cursed

; item can be traded
; control flow target (from $99D3)
0x0199E8|$06:$99D8:A5 97   	LDA $97    	; subject hero ID $97
0x0199EA|$06:$99DA:C5 C9   	CMP $C9    	; target hero ID
0x0199EC|$06:$99DC:D0 22   	BNE $9A00  	; give to different hero
0x0199EE|$06:$99DE:A9 80   	LDA #$80   	; Alive
0x0199F0|$06:$99E0:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x0199F3|$06:$99E3:90 0A   	BCC $99EF  	; ghost giving to itself
0x0199F5|$06:$99E5:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x0199F8|$06:$99E8:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x0199FB|$06:$99EB:1C	; String ID #$011C: [name] started to give it, but held on to it instead.[end-FC]

; data -> code
0x0199FC|$06:$99EC:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; ghost giving to itself
; control flow target (from $99E3)
0x0199FF|$06:$99EF:20 EB 9A	JSR $9AEB  	; using name of first living hero, display String ID #$0120: [name] [end-FF]
0x019A02|$06:$99F2:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019A05|$06:$99F5:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A08|$06:$99F8:A1	; String ID #$01A1: took the [item] from the ghost of [name] and [end-FF]

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x019A09|$06:$99F9:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A0C|$06:$99FC:A3	; String ID #$01A3: gave it back to the ghost of [name].[end-FC]

; data -> code
0x019A0D|$06:$99FD:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; give to different hero
; control flow target (from $99DC)
0x019A10|$06:$9A00:A5 97   	LDA $97    	; subject hero ID $97
0x019A12|$06:$9A02:48      	PHA        	; item owner hero ID
0x019A13|$06:$9A03:A5 C9   	LDA $C9    	; target hero ID
0x019A15|$06:$9A05:85 97   	STA $97    	; subject hero ID $97
0x019A17|$06:$9A07:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x019A1A|$06:$9A0A:B0 0B   	BCS $9A17  	; item given to target hero
0x019A1C|$06:$9A0C:68      	PLA        	; item owner hero ID
0x019A1D|$06:$9A0D:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019A20|$06:$9A10:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A23|$06:$9A13:1B	; String ID #$011B: [name] cannot carry more items.[end-FC]

; data -> code
0x019A24|$06:$9A14:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; item given to target hero
; control flow target (from $9A0A)
0x019A27|$06:$9A17:68      	PLA        	; item owner hero ID
0x019A28|$06:$9A18:85 97   	STA $97    	; subject hero ID $97
0x019A2A|$06:$9A1A:A6 49   	LDX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$C4D4)
0x019A2C|$06:$9A1C:20 D4 C4	JSR $C4D4  	; given hero ID in A and hero inventory offset in X, remove that item from hero's inventory and move all lower items up 1 slot
0x019A2F|$06:$9A1F:A9 80   	LDA #$80   	; Alive
0x019A31|$06:$9A21:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019A34|$06:$9A24:90 21   	BCC $9A47  	; owner is a ghost
0x019A36|$06:$9A26:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019A39|$06:$9A29:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A3C|$06:$9A2C:20	; String ID #$0120: [name] [end-FF]

; data -> code
0x019A3D|$06:$9A2D:A5 C9   	LDA $C9    	; target hero ID
0x019A3F|$06:$9A2F:85 97   	STA $97    	; subject hero ID $97
0x019A41|$06:$9A31:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019A44|$06:$9A34:A9 80   	LDA #$80   	; Alive
0x019A46|$06:$9A36:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019A49|$06:$9A39:90 04   	BCC $9A3F  	; target is a ghost
0x019A4B|$06:$9A3B:A9 1A   	LDA #$1A   	; String ID #$011A: handed the [item] to [name].[end-FC]
0x019A4D|$06:$9A3D:D0 02   	BNE $9A41  	; target is alive
; target is a ghost
; control flow target (from $9A39)
0x019A4F|$06:$9A3F:A9 17   	LDA #$17   	; String ID #$0117: gave the [item] to the ghost of [name].[end-FC]
; target is alive
; control flow target (from $9A3D)
; call to code in a different bank ($0F:$FA4E)
0x019A51|$06:$9A41:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x019A54|$06:$9A44:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; owner is a ghost
; control flow target (from $9A24)
0x019A57|$06:$9A47:A5 97   	LDA $97    	; subject hero ID $97
0x019A59|$06:$9A49:48      	PHA        	; item owner hero ID
0x019A5A|$06:$9A4A:A5 C9   	LDA $C9    	; target hero ID
0x019A5C|$06:$9A4C:85 97   	STA $97    	; subject hero ID $97
0x019A5E|$06:$9A4E:A9 80   	LDA #$80   	; Alive
0x019A60|$06:$9A50:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019A63|$06:$9A53:90 14   	BCC $9A69  	; target is a ghost
0x019A65|$06:$9A55:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019A68|$06:$9A58:68      	PLA        	; item owner hero ID
0x019A69|$06:$9A59:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$FA2E)
0x019A6B|$06:$9A5B:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A6E|$06:$9A5E:20	; String ID #$0120: [name] [end-FF]

; data -> code
0x019A6F|$06:$9A5F:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019A72|$06:$9A62:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A75|$06:$9A65:18	; String ID #$0118: took the [item] from [name].[end-FC]

; data -> code
0x019A76|$06:$9A66:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; target is a ghost
; control flow target (from $9A53)
0x019A79|$06:$9A69:20 EB 9A	JSR $9AEB  	; using name of first living hero, display String ID #$0120: [name] [end-FF]
0x019A7C|$06:$9A6C:68      	PLA        	; item owner hero ID
0x019A7D|$06:$9A6D:85 97   	STA $97    	; subject hero ID $97
0x019A7F|$06:$9A6F:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019A82|$06:$9A72:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A85|$06:$9A75:A1	; String ID #$01A1: took the [item] from the ghost of [name] and [end-FF]

; data -> code
0x019A86|$06:$9A76:A5 C9   	LDA $C9    	; target hero ID
0x019A88|$06:$9A78:85 97   	STA $97    	; subject hero ID $97
0x019A8A|$06:$9A7A:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019A8D|$06:$9A7D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019A90|$06:$9A80:A2	; String ID #$01A2: gave it to ghost of [name].[end-FC]

; data -> code
0x019A91|$06:$9A81:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; THROW command handler
; control flow target (from $99AC)
0x019A94|$06:$9A84:20 CB 9A	JSR $9ACB  	; open dialogue window
0x019A97|$06:$9A87:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x019A99|$06:$9A89:0A      	ASL        	; item prices are 2 bytes each
0x019A9A|$06:$9A8A:A8      	TAY        
0x019A9B|$06:$9A8B:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x019A9E|$06:$9A8E:19 FD 9F	ORA $9FFD,Y	; Item Prices, high byte
0x019AA1|$06:$9A91:F0 2A   	BEQ $9ABD  	; 0 G items are key items
0x019AA3|$06:$9A93:20 FC 9A	JSR $9AFC  	; given hero ID in $97 and hero inventory index in $49, set Z if item is equipped and cursed, clear if not
0x019AA6|$06:$9A96:F0 2C   	BEQ $9AC4  	; item is equipped and cursed
0x019AA8|$06:$9A98:A9 80   	LDA #$80   	; Alive
0x019AAA|$06:$9A9A:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019AAD|$06:$9A9D:90 0A   	BCC $9AA9  	; owner is a ghost
0x019AAF|$06:$9A9F:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019AB2|$06:$9AA2:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019AB5|$06:$9AA5:14	; String ID #$0114: [name] threw away the [item].[end-FC]

; data -> code
0x019AB6|$06:$9AA6:4C B3 9A	JMP $9AB3  

; owner is a ghost
; control flow target (from $9A9D)
0x019AB9|$06:$9AA9:20 EB 9A	JSR $9AEB  	; using name of first living hero, display String ID #$0120: [name] [end-FF]
0x019ABC|$06:$9AAC:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019ABF|$06:$9AAF:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019AC2|$06:$9AB2:16	; String ID #$0116: took the [item] from [name] and threw it away.[end-FC]

; data -> code
; control flow target (from $9AA6)
0x019AC3|$06:$9AB3:A5 97   	LDA $97    	; subject hero ID $97
0x019AC5|$06:$9AB5:A6 49   	LDX $49    	; object hero/target/item/string ID $49
; call to code in a different bank ($0F:$C4D4)
0x019AC7|$06:$9AB7:20 D4 C4	JSR $C4D4  	; given hero ID in A and hero inventory offset in X, remove that item from hero's inventory and move all lower items up 1 slot
0x019ACA|$06:$9ABA:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; 0 G items are key items
; control flow target (from $9A91)
; call to code in a different bank ($0F:$FA2E)
0x019ACD|$06:$9ABD:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019AD0|$06:$9AC0:0E	; String ID #$010E: Thou should not throw that away.[end-FC]

; data -> code
0x019AD1|$06:$9AC1:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; item is equipped and cursed
; control flow target (from $99D5, $9A96)
; call to code in a different bank ($0F:$FA2E)
0x019AD4|$06:$9AC4:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019AD7|$06:$9AC7:12	; String ID #$0112: It cannot be removed due to the curse.[end-FC]

; data -> code
0x019AD8|$06:$9AC8:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; open dialogue window
; control flow target (from $80CE, $80FA, $8160, $81BD, $8AB0, $8AD6, $8AF2, $8B46, $8B5C, $8BB3, $8E0C, $8E4C, $8E6B, $8F3F, $8F4E, $91C6, $91E3, $94B4, $94C6, $94E5, $956F, $959A, $95BD, $9637, $964F, $9734, $99B4, $99CD, $9A84)
; call to code in a different bank ($0F:$EB76)
0x019ADB|$06:$9ACB:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x019ADE|$06:$9ACE:04	; Menu ID #$04: Dialogue window

; data -> code
0x019ADF|$06:$9ACF:60      	RTS        

; open YES/NO menu, return selected option in A
; control flow target (from $8236, $82C7, $832B, $8360, $83BD, $83D9, $8443, $8506, $8518, $856E, $8681, $86C4, $86EE, $8E54, $8FB5, $902C, $911B, $91AC, $9217, $92EB, $934C, $9388, $94CE, $94FF, $9CAE)
; call to code in a different bank ($0F:$EB76)
0x019AE0|$06:$9AD0:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x019AE3|$06:$9AD3:19	; Menu ID #$19: General menu: YES/NO

; data -> code
0x019AE4|$06:$9AD4:60      	RTS        

; set A/$97 to ID of first living hero
; control flow target (from $8ECD, $8F23, $8F51, $8F9B, $8FCC, $9122, $917B, $91F4, $93E5, $9400, $9AEE, $9B1B)
0x019AE5|$06:$9AD5:A9 00   	LDA #$00   	; start with Midenhall
0x019AE7|$06:$9AD7:85 97   	STA $97    	; subject hero ID $97
; control flow target (from $9AE6)
0x019AE9|$06:$9AD9:A9 80   	LDA #$80   	; Alive
0x019AEB|$06:$9ADB:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019AEE|$06:$9ADE:B0 08   	BCS $9AE8  	; if hero alive, then we're done
0x019AF0|$06:$9AE0:E6 97   	INC $97    	; subject hero ID $97
0x019AF2|$06:$9AE2:A5 97   	LDA $97    	; subject hero ID $97
0x019AF4|$06:$9AE4:C9 03   	CMP #$03   	; only 3 heroes
0x019AF6|$06:$9AE6:D0 F1   	BNE $9AD9  	; loop if more heroes to check
; control flow target (from $9ADE)
0x019AF8|$06:$9AE8:A5 97   	LDA $97    	; subject hero ID $97
0x019AFA|$06:$9AEA:60      	RTS        

; using name of first living hero, display String ID #$0120: [name] [end-FF]
; control flow target (from $99EF, $9A69, $9AA9, $9D2A)
0x019AFB|$06:$9AEB:A5 97   	LDA $97    	; subject hero ID $97; save $97 to stack since $9AD5 will overwrite it
0x019AFD|$06:$9AED:48      	PHA        
0x019AFE|$06:$9AEE:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x019B01|$06:$9AF1:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019B04|$06:$9AF4:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019B07|$06:$9AF7:20	; String ID #$0120: [name] [end-FF]

; data -> code
0x019B08|$06:$9AF8:68      	PLA        	; restore $97 from stack
0x019B09|$06:$9AF9:85 97   	STA $97    	; subject hero ID $97
0x019B0B|$06:$9AFB:60      	RTS        

; given hero ID in $97 and hero inventory index in $49, set Z if item is equipped and cursed, clear if not
; control flow target (from $9153, $99D0, $9A93, $9CF4)
0x019B0C|$06:$9AFC:A5 97   	LDA $97    	; subject hero ID $97
0x019B0E|$06:$9AFE:0A      	ASL        	; inventory is 8 items per hero
0x019B0F|$06:$9AFF:0A      	ASL        
0x019B10|$06:$9B00:0A      	ASL        
0x019B11|$06:$9B01:18      	CLC        
0x019B12|$06:$9B02:65 49   	ADC $49    	; object hero/target/item/string ID $49
0x019B14|$06:$9B04:AA      	TAX        
0x019B15|$06:$9B05:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x019B18|$06:$9B08:C9 4C   	CMP #$4C   	; Item ID #$4C: Sword of Destruction (equipped)
0x019B1A|$06:$9B0A:F0 0A   	BEQ $9B16  
0x019B1C|$06:$9B0C:C9 57   	CMP #$57   	; Item ID #$57: Gremlin’s Armor (equipped)
0x019B1E|$06:$9B0E:F0 06   	BEQ $9B16  
0x019B20|$06:$9B10:C9 5F   	CMP #$5F   	; Item ID #$5F: Evil Shield (equipped)
0x019B22|$06:$9B12:F0 02   	BEQ $9B16  
0x019B24|$06:$9B14:C9 6F   	CMP #$6F   	; Item ID #$6F: Gremlin’s Tail (equipped)
; control flow target (from $9B0A, $9B0E, $9B12)
0x019B26|$06:$9B16:60      	RTS        

; COMMAND menu SEARCH handler
; indirect control flow target (via $808E)
; call to code in a different bank ($0F:$EB76)
0x019B27|$06:$9B17:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x019B2A|$06:$9B1A:04	; Menu ID #$04: Dialogue window

; data -> code
0x019B2B|$06:$9B1B:20 D5 9A	JSR $9AD5  	; set A/$97 to ID of first living hero
0x019B2E|$06:$9B1E:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
0x019B31|$06:$9B21:A5 CF   	LDA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x019B33|$06:$9B23:29 04   	AND #$04   	; pick out the "on ship" bit
0x019B35|$06:$9B25:F0 04   	BEQ $9B2B  	; branch if you're not on the ship
0x019B37|$06:$9B27:A9 07   	LDA #$07   	; String ID #$0107: [name] dove overboard into the sea.[wait][end-FC]
0x019B39|$06:$9B29:D0 02   	BNE $9B2D  
; control flow target (from $9B25)
0x019B3B|$06:$9B2B:A9 03   	LDA #$03   	; String ID #$0103: [name] searched all about.[wait][end-FC]
; control flow target (from $9B29)
; call to code in a different bank ($0F:$FA4E)
0x019B3D|$06:$9B2D:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
; call to code in a different bank ($0F:$D095)
0x019B40|$06:$9B30:20 95 D0	JSR $D095  
0x019B43|$06:$9B33:90 10   	BCC $9B45  
0x019B45|$06:$9B35:AD 2A 9E	LDA $9E2A  	; -> $06:$9E2E: Treasure List 1 (map ID, X-pos, Y-pos, item ID)
0x019B48|$06:$9B38:85 0C   	STA $0C    
0x019B4A|$06:$9B3A:AD 2B 9E	LDA $9E2B  
0x019B4D|$06:$9B3D:85 0D   	STA $0D    
0x019B4F|$06:$9B3F:20 58 9D	JSR $9D58  	; scan treasure list at ($0C), returning in A/$95/$96 the item ID corresponding to party's current map ID/position or #$00 if there is no item or you're not allowed to get it
0x019B52|$06:$9B42:4C 84 9B	JMP $9B84  

; control flow target (from $9B33)
0x019B55|$06:$9B45:A5 31   	LDA $31    	; current map ID
0x019B57|$06:$9B47:C9 68   	CMP #$68   	; Map ID #$68: Dragon Horn North 3F
0x019B59|$06:$9B49:D0 1E   	BNE $9B69  
0x019B5B|$06:$9B4B:A9 2C   	LDA #$2C   	; Item ID #$2C: Dew’s Yarn
0x019B5D|$06:$9B4D:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019B5F|$06:$9B4F:85 95   	STA $95    	; ID for [item] and [spell] control codes; item ID
0x019B61|$06:$9B51:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019B64|$06:$9B54:10 27   	BPL $9B7D  	; search failed
0x019B66|$06:$9B56:A9 13   	LDA #$13   	; Item ID #$13: Water Flying Cloth
0x019B68|$06:$9B58:20 60 A3	JSR $A360  	; check for item A (possibly equipped) in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019B6B|$06:$9B5B:10 20   	BPL $9B7D  	; search failed
; call to code in a different bank ($0F:$C3AB)
0x019B6D|$06:$9B5D:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x019B70|$06:$9B60:A5 32   	LDA $32    	; RNG byte 0
0x019B72|$06:$9B62:29 03   	AND #$03   	; 1/4 chance to find item
0x019B74|$06:$9B64:D0 17   	BNE $9B7D  	; search failed
0x019B76|$06:$9B66:4C 05 9C	JMP $9C05  

; control flow target (from $9B49)
0x019B79|$06:$9B69:AD 2C 9E	LDA $9E2C  	; -> $06:$9F07: Treasure List 2 (map ID, X-pos, Y-pos, item ID)
0x019B7C|$06:$9B6C:85 0C   	STA $0C    
0x019B7E|$06:$9B6E:AD 2D 9E	LDA $9E2D  
0x019B81|$06:$9B71:85 0D   	STA $0D    
0x019B83|$06:$9B73:20 58 9D	JSR $9D58  	; scan treasure list at ($0C), returning in A/$95/$96 the item ID corresponding to party's current map ID/position or #$00 if there is no item or you're not allowed to get it
0x019B86|$06:$9B76:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; useless op; $96 is already in A
0x019B88|$06:$9B78:F0 03   	BEQ $9B7D  	; search failed
0x019B8A|$06:$9B7A:4C 05 9C	JMP $9C05  

; search failed
; control flow target (from $9B54, $9B5B, $9B64, $9B78)
; call to code in a different bank ($0F:$FA2E)
0x019B8D|$06:$9B7D:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019B90|$06:$9B80:06	; String ID #$0106: But [name] found nothing.[end-FC]

; data -> code
0x019B91|$06:$9B81:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9B42)
0x019B94|$06:$9B84:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; useless op; $96 is already in A
0x019B96|$06:$9B86:C9 FF   	CMP #$FF   	; Item ID #$FF: Trap!
0x019B98|$06:$9B88:F0 1C   	BEQ $9BA6  	; if Midenhall is equipped with the Armour of Erdrick, chest is empty, otherwise it's a trap with 50/50 chance for the party leader losing half their current HP or getting poisoned
; call to code in a different bank ($0F:$FA2E)
0x019B9A|$06:$9B8A:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019B9D|$06:$9B8D:05	; String ID #$0105: Seeing a treasure chest, [name] opened it.[wait][end-FC]

; data -> code
0x019B9E|$06:$9B8E:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019BA0|$06:$9B90:D0 73   	BNE $9C05  	; Item ID #$00: (no item)
; call to code in a different bank ($0F:$FA2E)
0x019BA2|$06:$9B92:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019BA5|$06:$9B95:4B	; String ID #$014B: But it was empty.[end-FC]

; data -> code
0x019BA6|$06:$9B96:A5 31   	LDA $31    	; current map ID
0x019BA8|$06:$9B98:C9 51   	CMP #$51   	; Map ID #$51: Lighthouse 2F
0x019BAA|$06:$9B9A:D0 07   	BNE $9BA3  
0x019BAC|$06:$9B9C:A5 D0   	LDA $D0    	; Malroth status flag (#$FF = defeated, #$00 = alive, others = countdown to battle)
0x019BAE|$06:$9B9E:30 03   	BMI $9BA3  
; call to code in a different bank ($0F:$CC0A)
0x019BB0|$06:$9BA0:4C 0A CC	JMP $CC0A  	; trigger Stars Crest battle

; control flow target (from $9B9A, $9B9E)
0x019BB3|$06:$9BA3:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; if Midenhall is equipped with the Armour of Erdrick, chest is empty, otherwise it's a trap with 50/50 chance for the party leader losing half their current HP or getting poisoned
; control flow target (from $9B88)
0x019BB6|$06:$9BA6:A9 5B   	LDA #$5B   	; Item ID #$5B: Armor of Erdrick (equipped)
0x019BB8|$06:$9BA8:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019BBB|$06:$9BAB:C9 08   	CMP #$08   	; only Midenhall can equip the Armour of Erdrick, so inventory index >= #$08 means he does not have it equipped
0x019BBD|$06:$9BAD:B0 0B   	BCS $9BBA  	; if you don't have it or it isn't equipped, the treasure chest is a trap :(
; call to code in a different bank ($0F:$FA2E)
0x019BBF|$06:$9BAF:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019BC2|$06:$9BB2:05	; String ID #$0105: Seeing a treasure chest, [name] opened it.[wait][end-FC]

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x019BC3|$06:$9BB3:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019BC6|$06:$9BB6:4B	; String ID #$014B: But it was empty.[end-FC]

; data -> code
0x019BC7|$06:$9BB7:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9BAD)
; call to code in a different bank ($0F:$FA2E)
0x019BCA|$06:$9BBA:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019BCD|$06:$9BBD:4C	; String ID #$014C: The treasure chest was a trap![end-FC]

; data -> code
; call to code in a different bank ($0F:$C3AB)
0x019BCE|$06:$9BBE:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x019BD1|$06:$9BC1:A5 32   	LDA $32    	; RNG byte 0
0x019BD3|$06:$9BC3:30 2D   	BMI $9BF2  	; 50% chance to branch and get poisoned or not branch and lose half your current HP
0x019BD5|$06:$9BC5:20 4F 9D	JSR $9D4F  	; given hero ID in $97, set A to the offset of that hero's data in $062D
0x019BD8|$06:$9BC8:18      	CLC        
0x019BD9|$06:$9BC9:69 0E   	ADC #$0E   	; offset for hero's current HP, low byte
0x019BDB|$06:$9BCB:AA      	TAX        
0x019BDC|$06:$9BCC:BD 2D 06	LDA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019BDF|$06:$9BCF:85 8F   	STA $8F    	; hero's current HP, low byte
0x019BE1|$06:$9BD1:BD 2E 06	LDA $062E,X	; Midenhall Battle Command Target
0x019BE4|$06:$9BD4:85 90   	STA $90    	; hero's current HP, high byte
0x019BE6|$06:$9BD6:46 90   	LSR $90    	; divide 16-bit current HP by 2 (round down)
0x019BE8|$06:$9BD8:66 8F   	ROR $8F    
0x019BEA|$06:$9BDA:BD 2D 06	LDA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019BED|$06:$9BDD:38      	SEC        	; set 16-bit current HP to 1/2 current HP, rounded up
0x019BEE|$06:$9BDE:E5 8F   	SBC $8F    
0x019BF0|$06:$9BE0:9D 2D 06	STA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019BF3|$06:$9BE3:BD 2E 06	LDA $062E,X	; Midenhall Battle Command Target
0x019BF6|$06:$9BE6:E5 90   	SBC $90    
0x019BF8|$06:$9BE8:9D 2E 06	STA $062E,X	; Midenhall Battle Command Target
; call to code in a different bank ($0F:$FA2A)
0x019BFB|$06:$9BEB:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019BFE|$06:$9BEE:0C	; String ID #$000C: [name]'s HP is reduced by [number].[end-FC]

; data -> code
0x019BFF|$06:$9BEF:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9BC3)
0x019C02|$06:$9BF2:20 4F 9D	JSR $9D4F  	; given hero ID in $97, set A to the offset of that hero's data in $062D
0x019C05|$06:$9BF5:AA      	TAX        
0x019C06|$06:$9BF6:A9 20   	LDA #$20   	; Poison
0x019C08|$06:$9BF8:1D 2D 06	ORA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019C0B|$06:$9BFB:9D 2D 06	STA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
; call to code in a different bank ($0F:$FA2E)
0x019C0E|$06:$9BFE:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019C11|$06:$9C01:4D	; String ID #$014D: The poison weakened [name].[end-FC]

; data -> code
0x019C12|$06:$9C02:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9B66, $9B7A, $9B90)
0x019C15|$06:$9C05:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019C17|$06:$9C07:C9 40   	CMP #$40   	; Crest ID #$40: Sun Crest
0x019C19|$06:$9C09:90 57   	BCC $9C62  	; find a regular item
0x019C1B|$06:$9C0B:C9 45   	CMP #$45   	; Chest Gold ID #$45: 15 - 30 G
0x019C1D|$06:$9C0D:B0 28   	BCS $9C37  	; generate randomized gold amount for treasure ID in A
0x019C1F|$06:$9C0F:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; ... yup, still item ID
0x019C21|$06:$9C11:C9 43   	CMP #$43   	; Crest ID #$43: Water Crest
0x019C23|$06:$9C13:D0 04   	BNE $9C19  
0x019C25|$06:$9C15:A0 0A   	LDY #$0A   	; offset from $9F5F for start of "Water Crest"
0x019C27|$06:$9C17:D0 0A   	BNE $9C23  
; control flow target (from $9C13)
0x019C29|$06:$9C19:C9 40   	CMP #$40   	; Crest ID #$40: Sun Crest
0x019C2B|$06:$9C1B:D0 04   	BNE $9C21  	; #$44 = Life Crest, #$41, #$42 = Life Crest too :p
0x019C2D|$06:$9C1D:A0 00   	LDY #$00   	; offset from $9F5F for start of "Sun Crest"
0x019C2F|$06:$9C1F:F0 02   	BEQ $9C23  
; control flow target (from $9C1B)
0x019C31|$06:$9C21:A0 16   	LDY #$16   	; offset from $9F5F for start of "Life Crest"
; copy crest name (terminated by #$FA) to $5A,X
; control flow target (from $9C17, $9C1F)
0x019C33|$06:$9C23:A2 00   	LDX #$00   
; control flow target (from $9C2E)
0x019C35|$06:$9C25:B9 5F 9F	LDA $9F5F,Y	; Crest Names
0x019C38|$06:$9C28:95 5A   	STA $5A,X  	; Crest/direction name write buffer start
0x019C3A|$06:$9C2A:C8      	INY        
0x019C3B|$06:$9C2B:E8      	INX        
0x019C3C|$06:$9C2C:C9 FA   	CMP #$FA   
0x019C3E|$06:$9C2E:D0 F5   	BNE $9C25  
; call to code in a different bank ($0F:$FA2E)
0x019C40|$06:$9C30:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019C43|$06:$9C33:4E	; String ID #$014E: Thou hast found the [item-F9].[end-FC]

; data -> code
0x019C44|$06:$9C34:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; generate randomized gold amount for treasure ID in A
; control flow target (from $9C0D)
0x019C47|$06:$9C37:38      	SEC        
0x019C48|$06:$9C38:E9 45   	SBC #$45   	; subtract treasure offset to get index
0x019C4A|$06:$9C3A:85 8F   	STA $8F    	; A = A * 3 (treasure list is 3 bytes per item)
0x019C4C|$06:$9C3C:0A      	ASL        
0x019C4D|$06:$9C3D:18      	CLC        
0x019C4E|$06:$9C3E:65 8F   	ADC $8F    
0x019C50|$06:$9C40:48      	PHA        
; call to code in a different bank ($0F:$C3AB)
0x019C51|$06:$9C41:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x019C54|$06:$9C44:68      	PLA        
0x019C55|$06:$9C45:A8      	TAY        
0x019C56|$06:$9C46:B9 3A 9F	LDA $9F3A,Y	; random treasure chest gold amount; fetch maximum bonus gold amount
0x019C59|$06:$9C49:25 32   	AND $32    	; RNG byte 0; AND with random number to make a randomized bonus gold amount
0x019C5B|$06:$9C4B:18      	CLC        
0x019C5C|$06:$9C4C:79 38 9F	ADC $9F38,Y	; base treasure chest gold amount, low byte; add random bonus amount to low byte of base gold amount
0x019C5F|$06:$9C4F:85 8F   	STA $8F    	; store to $8F for later use
0x019C61|$06:$9C51:B9 39 9F	LDA $9F39,Y	; base treasure chest gold amount, high byte; load high byte of base gold amount
0x019C64|$06:$9C54:69 00   	ADC #$00   	; add carry from low byte
0x019C66|$06:$9C56:85 90   	STA $90    	; store to $90 for later use
; add $8F-$90 to party gold, capped at $FFFF, and display String ID #$0048: And earned [number] piece[(s)] of gold.[end-FC]
; control flow target (from $9C78)
0x019C68|$06:$9C58:20 F5 8C	JSR $8CF5  	; add $8F-$90 to party gold, capped at $FFFF
; call to code in a different bank ($0F:$FA2A)
0x019C6B|$06:$9C5B:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x019C6E|$06:$9C5E:48	; String ID #$0048: And earned [number] piece[(s)] of gold.[end-FC]

; data -> code
0x019C6F|$06:$9C5F:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; find a regular item
; control flow target (from $9C09)
; call to code in a different bank ($0F:$FA2E)
0x019C72|$06:$9C62:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019C75|$06:$9C65:04	; String ID #$0104: And there [name] discovered the [item]![end-FC]

; data -> code
0x019C76|$06:$9C66:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019C78|$06:$9C68:C9 06   	CMP #$06   	; Item ID #$06: Copper Sword
0x019C7A|$06:$9C6A:D0 0F   	BNE $9C7B  
0x019C7C|$06:$9C6C:A9 00   	LDA #$00   	; Midenhall
0x019C7E|$06:$9C6E:85 97   	STA $97    	; subject hero ID $97
0x019C80|$06:$9C70:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x019C83|$06:$9C73:A9 32   	LDA #$32   	; at this point in the game, Midenhall is incapable of having a full inventory, so no need to check C; #$32 = 50 Gold
0x019C85|$06:$9C75:20 2A 8D	JSR $8D2A  	; set $8F-$90 to A-#$00
0x019C88|$06:$9C78:4C 58 9C	JMP $9C58  	; add $8F-$90 to party gold, capped at $FFFF, and display String ID #$0048: And earned [number] piece[(s)] of gold.[end-FC]

; control flow target (from $9C6A)
0x019C8B|$06:$9C7B:A5 95   	LDA $95    	; ID for [item] and [spell] control codes; item ID
0x019C8D|$06:$9C7D:8D 4C 61	STA $614C  	; found item ID
; call to code in a different bank ($0F:$F6CE)
0x019C90|$06:$9C80:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x019C93|$06:$9C83:85 C9   	STA $C9    	; number of party members - 1
0x019C95|$06:$9C85:E6 C9   	INC $C9    	; number of party members
0x019C97|$06:$9C87:A9 00   	LDA #$00   
0x019C99|$06:$9C89:85 97   	STA $97    	; subject hero ID $97
; try to add item to party member's inventory
; control flow target (from $9C99)
0x019C9B|$06:$9C8B:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x019C9E|$06:$9C8E:90 03   	BCC $9C93  	; branch if party member has no room
0x019CA0|$06:$9C90:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9C8E)
0x019CA3|$06:$9C93:E6 97   	INC $97    	; subject hero ID $97
0x019CA5|$06:$9C95:A5 97   	LDA $97    	; subject hero ID $97
0x019CA7|$06:$9C97:C5 C9   	CMP $C9    
; if more party members to try, try them
0x019CA9|$06:$9C99:D0 F0   	BNE $9C8B  	; try to add item to party member's inventory
0x019CAB|$06:$9C9B:A9 00   	LDA #$00   
0x019CAD|$06:$9C9D:85 97   	STA $97    	; subject hero ID $97
0x019CAF|$06:$9C9F:C6 C9   	DEC $C9    	; number of party members
0x019CB1|$06:$9CA1:A5 C9   	LDA $C9    	; number of party members - 1
0x019CB3|$06:$9CA3:F0 02   	BEQ $9CA7  	; useless op; #$80 and #$00 are identical as far as $FC50 is concerned
0x019CB5|$06:$9CA5:A9 80   	LDA #$80   
; control flow target (from $9CA3)
; call to code in a different bank ($0F:$FC50)
0x019CB7|$06:$9CA7:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019CBA|$06:$9CAA:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019CBD|$06:$9CAD:08	; String ID #$0108: [wait][name] can carry no more. Dost thou wish to throw something away?[FD][FD][end-FC]

; data -> code
0x019CBE|$06:$9CAE:20 D0 9A	JSR $9AD0  	; open YES/NO menu, return selected option in A
0x019CC1|$06:$9CB1:C9 00   	CMP #$00   	; YES
0x019CC3|$06:$9CB3:F0 0C   	BEQ $9CC1  
; give up new item
; control flow target (from $9CCE, $9CEC)
0x019CC5|$06:$9CB5:AD 4C 61	LDA $614C  	; found item ID; useless op; $95 hasn't changed since we copied it to $614C
0x019CC8|$06:$9CB8:85 95   	STA $95    	; ID for [item] and [spell] control codes
; call to code in a different bank ($0F:$FA2E)
0x019CCA|$06:$9CBA:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019CCD|$06:$9CBD:09	; String ID #$0109: [name] gave up the [item].[end-FC]

; data -> code
0x019CCE|$06:$9CBE:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; control flow target (from $9CB3)
0x019CD1|$06:$9CC1:A5 C9   	LDA $C9    	; number of party members - 1
0x019CD3|$06:$9CC3:F0 0D   	BEQ $9CD2  	; if Midenhall's alone, no need to pick a party member
; control flow target (from $9CEE)
; call to code in a different bank ($0F:$FA2E)
0x019CD5|$06:$9CC5:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019CD8|$06:$9CC8:0A	; String ID #$010A: Who shall throw something away?[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$F55D)
0x019CD9|$06:$9CC9:20 5D F5	JSR $F55D  	; display appropriate main ITEM hero select menu
0x019CDC|$06:$9CCC:C9 FF   	CMP #$FF   
0x019CDE|$06:$9CCE:F0 E5   	BEQ $9CB5  	; give up new item
0x019CE0|$06:$9CD0:85 97   	STA $97    	; subject hero ID $97
; control flow target (from $9CC3, $9CFD, $9D12)
; call to code in a different bank ($0F:$FA2E)
0x019CE2|$06:$9CD2:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019CE5|$06:$9CD5:0B	; String ID #$010B: What shall thou throw away?[FD][FD][end-FC]

; data -> code
0x019CE6|$06:$9CD6:A5 97   	LDA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$F5FE)
0x019CE8|$06:$9CD8:20 FE F5	JSR $F5FE  	; given a hero ID in A, open hero's item list and return selected item ID (or #$FE if they have no items)
0x019CEB|$06:$9CDB:48      	PHA        	; item ID to drop
0x019CEC|$06:$9CDC:8A      	TXA        
0x019CED|$06:$9CDD:48      	PHA        	; save X
0x019CEE|$06:$9CDE:A9 03   	LDA #$03   
; call to code in a different bank ($0F:$CF6A)
0x019CF0|$06:$9CE0:20 6A CF	JSR $CF6A  	; wipe selected menu region
0x019CF3|$06:$9CE3:68      	PLA        	; restore X
0x019CF4|$06:$9CE4:AA      	TAX        
0x019CF5|$06:$9CE5:68      	PLA        	; item ID to drop
0x019CF6|$06:$9CE6:C9 FF   	CMP #$FF   
0x019CF8|$06:$9CE8:D0 06   	BNE $9CF0  
0x019CFA|$06:$9CEA:A5 C9   	LDA $C9    	; number of party members - 1
0x019CFC|$06:$9CEC:F0 C7   	BEQ $9CB5  	; give up new item
0x019CFE|$06:$9CEE:D0 D5   	BNE $9CC5  
; control flow target (from $9CE8)
0x019D00|$06:$9CF0:86 49   	STX $49    	; object hero/target/item/string ID $49
0x019D02|$06:$9CF2:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x019D04|$06:$9CF4:20 FC 9A	JSR $9AFC  	; given hero ID in $97 and hero inventory index in $49, set Z if item is equipped and cursed, clear if not
0x019D07|$06:$9CF7:D0 07   	BNE $9D00  
; call to code in a different bank ($0F:$FA2E)
0x019D09|$06:$9CF9:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019D0C|$06:$9CFC:12	; String ID #$0112: It cannot be removed due to the curse.[end-FC]

; data -> code
0x019D0D|$06:$9CFD:4C D2 9C	JMP $9CD2  

; control flow target (from $9CF7)
0x019D10|$06:$9D00:A5 95   	LDA $95    	; ID for [item] and [spell] control codes; item ID to throw away
0x019D12|$06:$9D02:29 3F   	AND #$3F   	; strip off the equipped bit
0x019D14|$06:$9D04:0A      	ASL        
0x019D15|$06:$9D05:A8      	TAY        
0x019D16|$06:$9D06:B9 FC 9F	LDA $9FFC,Y	; Item Prices, low byte
0x019D19|$06:$9D09:19 FD 9F	ORA $9FFD,Y	; Item Prices, high byte
0x019D1C|$06:$9D0C:D0 07   	BNE $9D15  	; if price is 0 G, it's a quest item
; call to code in a different bank ($0F:$FA2E)
0x019D1E|$06:$9D0E:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019D21|$06:$9D11:0E	; String ID #$010E: Thou should not throw that away.[end-FC]

; data -> code
0x019D22|$06:$9D12:4C D2 9C	JMP $9CD2  

; control flow target (from $9D0C)
0x019D25|$06:$9D15:A5 97   	LDA $97    	; subject hero ID $97
0x019D27|$06:$9D17:0A      	ASL        	; 8 items per hero
0x019D28|$06:$9D18:0A      	ASL        
0x019D29|$06:$9D19:0A      	ASL        
0x019D2A|$06:$9D1A:18      	CLC        
0x019D2B|$06:$9D1B:65 49   	ADC $49    	; object hero/target/item/string ID $49
0x019D2D|$06:$9D1D:AA      	TAX        
0x019D2E|$06:$9D1E:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID to gain
0x019D30|$06:$9D20:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x019D33|$06:$9D23:A9 80   	LDA #$80   	; Alive
0x019D35|$06:$9D25:20 9A 8D	JSR $8D9A  	; given hero ID in $97, and status in A, SEC if hero has that status, CLC otherwise
0x019D38|$06:$9D28:B0 12   	BCS $9D3C  
0x019D3A|$06:$9D2A:20 EB 9A	JSR $9AEB  	; using name of first living hero, display String ID #$0120: [name] [end-FF]
0x019D3D|$06:$9D2D:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019D40|$06:$9D30:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019D43|$06:$9D33:0F	; String ID #$010F: threw away [name]'s [item] and gave [end-FF]

; data -> code
0x019D44|$06:$9D34:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x019D46|$06:$9D36:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x019D48|$06:$9D38:A9 10   	LDA #$10   	; String ID #$0110: the [item] to ghost of [name].[end-FC]
0x019D4A|$06:$9D3A:D0 0D   	BNE $9D49  
; control flow target (from $9D28)
0x019D4C|$06:$9D3C:20 25 8D	JSR $8D25  	; print name of hero given by low 2 bits of $97 to [name] buffer $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x019D4F|$06:$9D3F:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x019D52|$06:$9D42:0C	; String ID #$010C: [name] threw away the [item].[end-FC]

; data -> code
0x019D53|$06:$9D43:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x019D55|$06:$9D45:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x019D57|$06:$9D47:A9 0D   	LDA #$0D   	; String ID #$010D: [name] obtained the [item].[end-FC]
; control flow target (from $9D3A)
; call to code in a different bank ($0F:$FA4E)
0x019D59|$06:$9D49:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x019D5C|$06:$9D4C:4C 48 95	JMP $9548  	; end TALK/ITEM routines

; given hero ID in $97, set A to the offset of that hero's data in $062D
; control flow target (from $9BC5, $9BF2)
0x019D5F|$06:$9D4F:A6 97   	LDX $97    	; subject hero ID $97
0x019D61|$06:$9D51:BD 55 9D	LDA $9D55,X	; pre-computed offsets for the start of each hero's data at $062D
0x019D64|$06:$9D54:60      	RTS        


; code -> data
; pre-computed offsets for the start of each hero's data at $062D
; indexed data load target (from $9D51)
0x019D65|$06:$9D55:00	; Midenhall
0x019D66|$06:$9D56:12	; Cannock
0x019D67|$06:$9D57:24	; Moonbrooke

; data -> code
; scan treasure list at ($0C), returning in A/$95/$96 the item ID corresponding to party's current map ID/position or #$00 if there is no item or you're not allowed to get it
; control flow target (from $9B3F, $9B73, $9DFB)
0x019D68|$06:$9D58:A0 00   	LDY #$00   
0x019D6A|$06:$9D5A:B1 0C   	LDA ($0C),Y	; read map ID
0x019D6C|$06:$9D5C:C9 FF   	CMP #$FF   	; #$FF => end of list
0x019D6E|$06:$9D5E:D0 03   	BNE $9D63  
0x019D70|$06:$9D60:4C FE 9D	JMP $9DFE  	; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS

; control flow target (from $9D5E)
0x019D73|$06:$9D63:C5 31   	CMP $31    	; current map ID
0x019D75|$06:$9D65:F0 03   	BEQ $9D6A  	; map ID matches, start checking position
0x019D77|$06:$9D67:4C EE 9D	JMP $9DEE  	; increment 16-bit $0C-$0D by 4 (move to next treasure record) and loop to check next treasure

; map ID matches, start checking position
; control flow target (from $9D65)
0x019D7A|$06:$9D6A:C8      	INY        
0x019D7B|$06:$9D6B:B1 0C   	LDA ($0C),Y	; treasure X-pos
0x019D7D|$06:$9D6D:C5 16   	CMP $16    	; current map X-pos (1)
0x019D7F|$06:$9D6F:D0 7D   	BNE $9DEE  	; increment 16-bit $0C-$0D by 4 (move to next treasure record) and loop to check next treasure
0x019D81|$06:$9D71:C8      	INY        
0x019D82|$06:$9D72:B1 0C   	LDA ($0C),Y	; treasure Y-pos
0x019D84|$06:$9D74:C5 17   	CMP $17    	; current map Y-pos (1)
0x019D86|$06:$9D76:D0 76   	BNE $9DEE  	; increment 16-bit $0C-$0D by 4 (move to next treasure record) and loop to check next treasure
0x019D88|$06:$9D78:C8      	INY        
0x019D89|$06:$9D79:B1 0C   	LDA ($0C),Y	; item ID
0x019D8B|$06:$9D7B:D0 03   	BNE $9D80  	; map/position is valid and there is an item here
0x019D8D|$06:$9D7D:4C 00 9E	JMP $9E00  	; store item ID in $95 and $96 and RTS

; map/position is valid and there is an item here
; control flow target (from $9D7B)
0x019D90|$06:$9D80:C9 45   	CMP #$45   	; randomized gold chests have IDs >= #$45
0x019D92|$06:$9D82:B0 7C   	BCS $9E00  	; store item ID in $95 and $96 and RTS
0x019D94|$06:$9D84:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019D96|$06:$9D86:C9 25   	CMP #$25   	; Item ID #$25: Tresures
0x019D98|$06:$9D88:D0 09   	BNE $9D93  
0x019D9A|$06:$9D8A:A9 2A   	LDA #$2A   	; Item ID #$2A: Echoing Flute
0x019D9C|$06:$9D8C:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019D9F|$06:$9D8F:10 6D   	BPL $9DFE  	; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS
0x019DA1|$06:$9D91:30 27   	BMI $9DBA  
; control flow target (from $9D88)
0x019DA3|$06:$9D93:C9 2B   	CMP #$2B   	; Item ID #$2B: Mirror of Ra
0x019DA5|$06:$9D95:D0 09   	BNE $9DA0  
0x019DA7|$06:$9D97:AD 51 06	LDA $0651  	; Moonbrooke status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x019DAA|$06:$9D9A:29 04   	AND #$04   	; pick out the In Party bit
0x019DAC|$06:$9D9C:D0 60   	BNE $9DFE  	; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS
0x019DAE|$06:$9D9E:F0 1A   	BEQ $9DBA  
; control flow target (from $9D95)
0x019DB0|$06:$9DA0:C9 37   	CMP #$37   	; Item ID #$37: Golden Key
0x019DB2|$06:$9DA2:D0 16   	BNE $9DBA  
; the Golden Key is available in 2 places in Zahan; a dog points you to the one at (#$16, #$08), and the other one is at (#$12, #$04)
; you can only pick it up from one place at a time, however, depending on the position of the dog
0x019DB4|$06:$9DA4:A5 17   	LDA $17    	; current map Y-pos (1)
0x019DB6|$06:$9DA6:C9 04   	CMP #$04   
0x019DB8|$06:$9DA8:D0 09   	BNE $9DB3  
; the (#$12, #$04) Golden Key
0x019DBA|$06:$9DAA:AD 7C 05	LDA $057C  	; NPC #$08 X-pos; dog's X-pos
0x019DBD|$06:$9DAD:C9 12   	CMP #$12   
0x019DBF|$06:$9DAF:D0 3D   	BNE $9DEE  	; increment 16-bit $0C-$0D by 4 (move to next treasure record) and loop to check next treasure
0x019DC1|$06:$9DB1:F0 07   	BEQ $9DBA  
; the (#$16, #$08) Golden Key
; control flow target (from $9DA8)
0x019DC3|$06:$9DB3:AD 7C 05	LDA $057C  	; NPC #$08 X-pos; dog's X-pos
0x019DC6|$06:$9DB6:C9 12   	CMP #$12   
0x019DC8|$06:$9DB8:F0 34   	BEQ $9DEE  	; increment 16-bit $0C-$0D by 4 (move to next treasure record) and loop to check next treasure
; control flow target (from $9D91, $9D9E, $9DA2, $9DB1)
0x019DCA|$06:$9DBA:AD 24 9F	LDA $9F24  	; -> $06:$9F26: unique items
0x019DCD|$06:$9DBD:85 0C   	STA $0C    
0x019DCF|$06:$9DBF:AD 25 9F	LDA $9F25  
0x019DD2|$06:$9DC2:85 0D   	STA $0D    
0x019DD4|$06:$9DC4:A0 00   	LDY #$00   
0x019DD6|$06:$9DC6:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
; control flow target (from $9DCF)
0x019DD8|$06:$9DC8:D1 0C   	CMP ($0C),Y	; compare against list of unique items
0x019DDA|$06:$9DCA:F0 08   	BEQ $9DD4  
0x019DDC|$06:$9DCC:C8      	INY        
0x019DDD|$06:$9DCD:C0 12   	CPY #$12   
0x019DDF|$06:$9DCF:D0 F7   	BNE $9DC8  	; if more items to check, check them
0x019DE1|$06:$9DD1:4C 00 9E	JMP $9E00  	; store item ID in $95 and $96 and RTS; happens if item is not unique

; control flow target (from $9DCA)
0x019DE4|$06:$9DD4:C9 40   	CMP #$40   	; we already handled IDs >= #$45, so this checks for Crests #$40 - #$44
0x019DE6|$06:$9DD6:B0 2D   	BCS $9E05  	; handle finding a Crest
0x019DE8|$06:$9DD8:20 60 A3	JSR $A360  	; check for item A (possibly equipped) in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019DEB|$06:$9DDB:10 21   	BPL $9DFE  	; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS
0x019DED|$06:$9DDD:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019DEF|$06:$9DDF:C9 24   	CMP #$24   	; Item ID #$24: Token of Erdrick
0x019DF1|$06:$9DE1:D0 1D   	BNE $9E00  	; store item ID in $95 and $96 and RTS
0x019DF3|$06:$9DE3:A9 23   	LDA #$23   	; Item ID #$23: Helmet of Erdrick
0x019DF5|$06:$9DE5:20 60 A3	JSR $A360  	; check for item A (possibly equipped) in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x019DF8|$06:$9DE8:10 14   	BPL $9DFE  	; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS
0x019DFA|$06:$9DEA:A9 24   	LDA #$24   	; Item ID #$24: Token of Erdrick
0x019DFC|$06:$9DEC:D0 12   	BNE $9E00  	; store item ID in $95 and $96 and RTS
; increment 16-bit $0C-$0D by 4 (move to next treasure record) and loop to check next treasure
; control flow target (from $9D67, $9D6F, $9D76, $9DAF, $9DB8)
0x019DFE|$06:$9DEE:A5 0C   	LDA $0C    
0x019E00|$06:$9DF0:18      	CLC        
0x019E01|$06:$9DF1:69 04   	ADC #$04   
0x019E03|$06:$9DF3:85 0C   	STA $0C    
0x019E05|$06:$9DF5:A5 0D   	LDA $0D    
0x019E07|$06:$9DF7:69 00   	ADC #$00   
0x019E09|$06:$9DF9:85 0D   	STA $0D    
0x019E0B|$06:$9DFB:4C 58 9D	JMP $9D58  	; scan treasure list at ($0C), returning in A/$95/$96 the item ID corresponding to party's current map ID/position or #$00 if there is no item or you're not allowed to get it

; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS
; control flow target (from $9D60, $9D8F, $9D9C, $9DDB, $9DE8, $9E1C)
0x019E0E|$06:$9DFE:A9 00   	LDA #$00   
; store item ID in $95 and $96 and RTS
; control flow target (from $9D7D, $9D82, $9DD1, $9DE1, $9DEC, $9E28)
0x019E10|$06:$9E00:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x019E12|$06:$9E02:85 95   	STA $95    	; ID for [item] and [spell] control codes
0x019E14|$06:$9E04:60      	RTS        

; handle finding a Crest
; control flow target (from $9DD6)
0x019E15|$06:$9E05:C9 43   	CMP #$43   	; Crest ID #$43: Water Crest
0x019E17|$06:$9E07:D0 04   	BNE $9E0D  
0x019E19|$06:$9E09:A9 08   	LDA #$08   	; Crest ID #$43: Water Crest sets bit #$08
0x019E1B|$06:$9E0B:D0 0A   	BNE $9E17  
; control flow target (from $9E07)
0x019E1D|$06:$9E0D:C9 40   	CMP #$40   
0x019E1F|$06:$9E0F:D0 04   	BNE $9E15  
0x019E21|$06:$9E11:A9 01   	LDA #$01   	; Crest ID #$40: Sun Crest sets bit #$01
0x019E23|$06:$9E13:D0 02   	BNE $9E17  
; control flow target (from $9E0F)
0x019E25|$06:$9E15:A9 10   	LDA #$10   	; by process of elimination, Crest ID #$44: Life Crest sets bit #$10
; control flow target (from $9E0B, $9E13)
0x019E27|$06:$9E17:85 0C   	STA $0C    
0x019E29|$06:$9E19:2D 12 01	AND $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x019E2C|$06:$9E1C:D0 E0   	BNE $9DFE  	; end of treasure list or you aren't allowed to get the item again; set $95 = $96 = #$00 and RTS
0x019E2E|$06:$9E1E:A5 0C   	LDA $0C    
0x019E30|$06:$9E20:0D 12 01	ORA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x019E33|$06:$9E23:8D 12 01	STA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun); mark Crest as found
0x019E36|$06:$9E26:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x019E38|$06:$9E28:D0 D6   	BNE $9E00  	; store item ID in $95 and $96 and RTS

; code -> data
; -> $06:$9E2E: Treasure List 1 (map ID, X-pos, Y-pos, item ID)
; data load target (from $9B35)
0x019E3A|$06:$9E2A:2E
; data load target (from $9B3A)
0x019E3B|$06:$9E2B:   9E	; $06:$9E2E; Treasure List 1 (map ID, X-pos, Y-pos, item ID)
; -> $06:$9F07: Treasure List 2 (map ID, X-pos, Y-pos, item ID)
; data load target (from $9B69)
0x019E3C|$06:$9E2C:07
; data load target (from $9B6E)
0x019E3D|$06:$9E2D:   9F	; $06:$9F07; Treasure List 2 (map ID, X-pos, Y-pos, item ID)
; Treasure List 1 (map ID, X-pos, Y-pos, item ID)
; indirect data load target (via $9E2A)
0x019E3E|$06:$9E2E:03 0E 02 06	; Item ID #$06: Copper Sword (Midenhall Castle)
0x019E42|$06:$9E32:03 13 0E 35	; Item ID #$35: Wing of Wyvern (Midenhall Castle)
0x019E46|$06:$9E36:03 14 0E 3C	; Item ID #$3C: Medical Herb (Midenhall Castle)
0x019E4A|$06:$9E3A:03 13 0F 47	; Item ID #$47: 50 - 113 G (Midenhall Castle)
0x019E4E|$06:$9E3E:03 14 0F 00	; Item ID #$00: Empty (Midenhall Castle)
0x019E52|$06:$9E42:03 15 0F 24	; Item ID #$24: Token of Erdrick (Midenhall Castle)

0x019E56|$06:$9E46:06 0A 0A 20	; Item ID #$20: Shield of Erdrick (Cannock Castle)

0x019E5A|$06:$9E4A:0F 06 14 1A	; Item ID #$1A: Armor of Gaia (Osterfair)
0x019E5E|$06:$9E4E:0F 06 16 02	; Item ID #$02: Magic Knife (Osterfair)

0x019E62|$06:$9E52:10 02 02 2D	; Item ID #$2D: Magic Loom (Zahan)

0x019E66|$06:$9E56:18 07 06 33	; Item ID #$33: Lottery Ticket (Charlock Castle)
0x019E6A|$06:$9E5A:18 08 06 3C	; Item ID #$3C: Medical Herb (Charlock Castle)
0x019E6E|$06:$9E5E:18 06 07 49	; Item ID #$49: 100 - 163 G (Charlock Castle)
0x019E72|$06:$9E62:18 07 07 35	; Item ID #$35: Wing of Wyvern (Charlock Castle)

0x019E76|$06:$9E66:2C 12 0C 3C	; Item ID #$3C: Medical Herb (Lake Cave B1)
0x019E7A|$06:$9E6A:2C 0E 1C 45	; Item ID #$45: 15 - 30 G (Lake Cave B1)
0x019E7E|$06:$9E6E:2D 0E 0C 3C	; Item ID #$3C: Medical Herb (Lake Cave B2)
0x019E82|$06:$9E72:2D 14 1A 46	; Item ID #$46: 31 - 46 G (Lake Cave B2)
0x019E86|$06:$9E76:2D 02 14 3B	; Item ID #$3B: Antidote Herb (Lake Cave B2)
0x019E8A|$06:$9E7A:2D 14 1C 35	; Item ID #$35: Wing of Wyvern (Lake Cave B2)
0x019E8E|$06:$9E7E:2D 14 14 38	; Item ID #$38: Silver Key (Lake Cave B2)

0x019E92|$06:$9E82:2E 18 02 4B	; Item ID #$4B: 111 - 142 G (Sea Cave B1)
0x019E96|$06:$9E86:2E 02 0A 3C	; Item ID #$3C: Medical Herb (Sea Cave B1)
0x019E9A|$06:$9E8A:2F 20 0E FF	; Item ID #$FF: Trap (Sea Cave B2)
0x019E9E|$06:$9E8E:2F 0E 18 48	; Item ID #$48: 51 - 82 G (Sea Cave B2)
0x019EA2|$06:$9E92:31 02 02 49	; Item ID #$49: 100 - 163 G (Sea Cave B3(2))
0x019EA6|$06:$9E96:31 0A 02 FF	; Item ID #$FF: Trap (Sea Cave B3(2))
0x019EAA|$06:$9E9A:32 10 0E 30	; Item ID #$30: Dragon's Bane (Sea Cave B4)
0x019EAE|$06:$9E9E:33 16 02 28	; Item ID #$28: Eye of Malroth (Sea Cave B5)

0x019EB2|$06:$9EA2:34 0E 10 0F	; Item ID #$0F: Sword of Erdrick (Charlock Castle)

0x019EB6|$06:$9EA6:37 10 10 44	; Item ID #$44: Life Crest (Cave to Rhone B1)
0x019EBA|$06:$9EAA:3C 0C 1A 4B	; Item ID #$4B: 111 - 142 G (Cave to Rhone 3F)
0x019EBE|$06:$9EAE:3C 0E 32 10	; Item ID #$10: Thunder Sword (Cave to Rhone 3F)
0x019EC2|$06:$9EB2:3C 1E 2C 33	; Item ID #$33: Lottery Ticket (Cave to Rhone 3F)
0x019EC6|$06:$9EB6:3E 18 0E 1B	; Item ID #$1B: Armor of Erdrick (Cave to Rhone 5F)
0x019ECA|$06:$9EBA:3E 1A 18 4D	; Item ID #$4D: 111 - 174 G (Cave to Rhone 5F)
0x019ECE|$06:$9EBE:3E 12 20 FF	; Item ID #$FF: Trap (Cave to Rhone 5F)
0x019ED2|$06:$9EC2:3E 12 24 4A	; Item ID #$4A: 561 - 624 G (Cave to Rhone 5F)

0x019ED6|$06:$9EC6:40 02 0E 3C	; Item ID #$3C: Medical Herb (Spring Of Bravery)
0x019EDA|$06:$9ECA:40 0E 1A 45	; Item ID #$45: 15 - 30 G (Spring Of Bravery)
0x019EDE|$06:$9ECE:40 16 1C 3C	; Item ID #$3C: Medical Herb (Spring Of Bravery)

0x019EE2|$06:$9ED2:49 12 14 3C	; Item ID #$3C: Medical Herb (Moon Tower 1F)
0x019EE6|$06:$9ED6:49 10 02 26	; Item ID #$26: Moon Fragment (Moon Tower 1F)
0x019EEA|$06:$9EDA:4B 02 02 50	; Item ID #$50: 101 - 132 G (Moon Tower 3F)
0x019EEE|$06:$9EDE:4C 04 0C 01	; Item ID #$01: Bamboo Stick (Moon Tower 4F)
0x019EF2|$06:$9EE2:4C 02 0C 4F	; Item ID #$4F: 251 - 282 G (Moon Tower 4F)

0x019EF6|$06:$9EE6:50 14 0A 51	; Item ID #$51: 38 - 53 G (Lighthouse 1F)
0x019EFA|$06:$9EEA:51 1E 1C 00	; Item ID #$00: Empty (triggers Star Crest battle) (Lighthouse 2F)
0x019EFE|$06:$9EEE:53 0C 16 4E	; Item ID #$4E: 120 - 135 G (Lighthouse 4F)
0x019F02|$06:$9EF2:54 16 02 34	; Item ID #$34: Fairy Water (Lighthouse 5F)
0x019F06|$06:$9EF6:54 0E 12 07	; Item ID #$07: Chain Sickle (Lighthouse 5F)

0x019F0A|$06:$9EFA:58 10 14 3C	; Item ID #$3C: Medical Herb (Wind Tower 1F)
0x019F0E|$06:$9EFE:59 02 04 2E	; Item ID #$2E: Cloak of Wind (Wind Tower 2F)
0x019F12|$06:$9F02:5A 06 10 4C	; Item ID #$4C: 41 - 56 G (Wind Tower 3F)
; indirect data load target
0x019F16|$06:$9F06:FF	; end of Treasure List 1
; Treasure List 2 (map ID, X-pos, Y-pos, item ID)
; indirect data load target (via $9E2C)
0x019F17|$06:$9F07:01 92 6D 2B	; Item ID #$2B: Mirror of Ra (Swamp SE of Hamlin)
0x019F1B|$06:$9F0B:01 1E FC 25	; Item ID #$25: Tresures (Ocean NW of Tantegal)
0x019F1F|$06:$9F0F:01 BB DD 29	; Item ID #$29: Leaf of World Tree (Island E of Wellgarth)
0x019F23|$06:$9F13:08 05 01 43	; Item ID #$43: Water Crest (Hamlin)
0x019F27|$06:$9F17:1E 08 00 40	; Item ID #$40: Sun Crest (Monolith E of Wellgarth)
0x019F2B|$06:$9F1B:10 12 04 37	; Item ID #$37: Golden Key location #1 (Zahan)
0x019F2F|$06:$9F1F:10 16 08 37	; Item ID #$37: Golden Key location #2 (Zahan)
; indirect data load target
0x019F33|$06:$9F23:FF	; end of Treasure List 2
; -> $06:$9F26: unique items
; data load target (from $9DBA)
0x019F34|$06:$9F24:26
; data load target (from $9DBF)
0x019F35|$06:$9F25:   9F	; $06:$9F26; unique items
; unique items
; indirect data load target (via $9F24)
0x019F36|$06:$9F26:38	; Item ID #$38: Silver Key
0x019F37|$06:$9F27:25	; Item ID #$25: Tresures
0x019F38|$06:$9F28:29	; Item ID #$29: Leaf of The World Tree
0x019F39|$06:$9F29:24	; Item ID #$24: Token of Erdrick
0x019F3A|$06:$9F2A:20	; Item ID #$20: Shield of Erdrick
0x019F3B|$06:$9F2B:43	; Crest ID #$43: Water Crest
0x019F3C|$06:$9F2C:1A	; Item ID #$1A: Armor of Gaia
0x019F3D|$06:$9F2D:10	; Item ID #$10: Thunder Sword
0x019F3E|$06:$9F2E:40	; Crest ID #$40: Sun Crest
0x019F3F|$06:$9F2F:28	; Item ID #$28: Eye of Malroth
0x019F40|$06:$9F30:0F	; Item ID #$0F: Sword of Erdrick
0x019F41|$06:$9F31:44	; Crest ID #$44: Life Crest
0x019F42|$06:$9F32:1B	; Item ID #$1B: Armor of Erdrick
0x019F43|$06:$9F33:26	; Item ID #$26: Moon Fragment
0x019F44|$06:$9F34:2E	; Item ID #$2E: Cloak of Wind
0x019F45|$06:$9F35:2B	; Item ID #$2B: Mirror of Ra
0x019F46|$06:$9F36:37	; Item ID #$37: Golden Key
0x019F47|$06:$9F37:2D	; Item ID #$2D: Magic Loom
; base treasure chest gold amount, low byte
; random gold amounts
; indexed data load target (from $9C4C)
0x019F48|$06:$9F38:0F
; base treasure chest gold amount, high byte
; indexed data load target (from $9C51)
0x019F49|$06:$9F39:   00
; random treasure chest gold amount
; indexed data load target (from $9C46)
0x019F4A|$06:$9F3A:      0F	; Chest Gold ID #$45: 15 - 30 G
0x019F4B|$06:$9F3B:1F 00 0F	; Chest Gold ID #$46: 31 - 46 G
0x019F4E|$06:$9F3E:32 00 3F	; Chest Gold ID #$47: 50 - 113 G
0x019F51|$06:$9F41:33 00 1F	; Chest Gold ID #$48: 51 - 82 G
0x019F54|$06:$9F44:64 00 3F	; Chest Gold ID #$49: 100 - 163 G
0x019F57|$06:$9F47:31 02 3F	; Chest Gold ID #$4A: 561 - 624 G
0x019F5A|$06:$9F4A:6F 00 1F	; Chest Gold ID #$4B: 111 - 142 G
0x019F5D|$06:$9F4D:29 00 0F	; Chest Gold ID #$4C: 41 - 56 G
0x019F60|$06:$9F50:6F 00 3F	; Chest Gold ID #$4D: 111 - 174 G
0x019F63|$06:$9F53:78 00 0F	; Chest Gold ID #$4E: 120 - 135 G
0x019F66|$06:$9F56:FB 00 1F	; Chest Gold ID #$4F: 251 - 282 G
0x019F69|$06:$9F59:65 00 1F	; Chest Gold ID #$50: 101 - 132 G
0x019F6C|$06:$9F5C:26 00 0F	; Chest Gold ID #$51: 38 - 53 G
; Crest Names
; indexed data load target (from $9C25)
0x019F6F|$06:$9F5F:36 1E 17 5F 26 1B 0E 1C 1D FA	; "Sun Crest" + [end-FA]
0x019F79|$06:$9F69:3A 0A 1D 0E 1B 5F 26 1B 0E 1C 1D FA	; "Water Crest" + [end-FA]
0x019F85|$06:$9F75:2F 12 0F 0E 5F 26 1B 0E 1C 1D FA	; "Life Crest"  + [end-FA]
; Inn prices per party member
; indexed data load target (from $821F)
0x019F90|$06:$9F80:04	; Inn ID #$00, Map IDs #$00/#$03: Fake Midenhall/Midenhall 1F
0x019F91|$06:$9F81:06	; Inn ID #$01, Map ID #$05: Leftwyne
0x019F92|$06:$9F82:08	; Inn ID #$02, Map ID #$06: Cannock
0x019F93|$06:$9F83:0C	; Inn ID #$03, Map ID #$07: Hamlin
0x019F94|$06:$9F84:14	; Inn ID #$04, Map ID #$0B: Lianport
0x019F95|$06:$9F85:02	; Inn ID #$05, Map ID #$0C: Tantegel
0x019F96|$06:$9F86:19	; Inn ID #$06, Map ID #$0F: Osterfair
0x019F97|$06:$9F87:1E	; Inn ID #$07, Map ID #$10: Zahan
0x019F98|$06:$9F88:28	; Inn ID #$08, Map ID #$11: Tuhn / Map ID #$14: Wellgarth Underground
0x019F99|$06:$9F89:1E
; Weapon Shop inventories
; external indexed data load target (from $0F:$F266, $0F:$F278, $0F:$F299)
0x019F9A|$06:$9F8A:05 06 02 07 16 1C	; Shop ID #00, Weapons/Armor, Map ID #$05: Leftwyne
0x019FA0|$06:$9F90:07 08 0A 16 19 1E	; Shop ID #01, Weapons/Armor, Map ID #$07: Hamlin
0x019FA6|$06:$9F96:02 0A 03 19 12 1E	; Shop ID #02, Weapons/Armor, Map ID #$0B: Lianport
0x019FAC|$06:$9F9C:0A 0B 03 12 1E 22	; Shop ID #03, Weapons/Armor, Map ID #$0C: Tantegel
0x019FB2|$06:$9FA2:0A 0B 0D 12 18 22	; Shop ID #04, Weapons/Armor, Map ID #$0F: Osterfair
0x019FB8|$06:$9FA8:03 09 0D 18 1D 22	; Shop ID #05, Weapons/Armor, Map ID #$11: Tuhn
0x019FBE|$06:$9FAE:0B 0D 0E 14 1D 22	; Shop ID #06, Weapons/Armor, Map ID #$14: Wellgarth Underground
0x019FC4|$06:$9FB4:0B 03 0D 1E 1D 22	; Shop ID #07, Weapons/Armor, Map ID #$15: Beran
; Tool Shop inventories
0x019FCA|$06:$9FBA:3C 3B 00 00 00 00	; Shop ID #$00, Items, Map IDs #$00/#$03: Fake Midenhall/Midenhall 1F
0x019FD0|$06:$9FC0:3C 3B 35 00 00 00	; Shop ID #$01, Items, Map ID #$05: Leftwyne
0x019FD6|$06:$9FC6:3C 3B 35 34 00 00	; Shop ID #$02, Items, Map ID #$06: Cannock
0x019FDC|$06:$9FCC:3C 3B 35 34 00 00	; Shop ID #$03, Items, Map ID #$07: Hamlin
0x019FE2|$06:$9FD2:3C 3B 35 34 30 00	; Shop ID #$04, Items, Map ID #$0B: Lianport
0x019FE8|$06:$9FD8:3C 3B 35 34 30 00	; Shop ID #$05, Items, Map ID #$0C: Tantegel
0x019FEE|$06:$9FDE:3C 35 34 30 00 00	; Shop ID #$06, Items, Map ID #$10: Zahan
0x019FF4|$06:$9FE4:35 34 30 00 00 00	; Shop ID #$07, Items, Map ID #$11: Tuhn
0x019FFA|$06:$9FEA:3C 3B 34 30 00 00	; Shop ID #$08, Items, Map ID #$14: Wellgarth Underground, #1
0x01A000|$06:$9FF0:3C 3B 39 35 00 00	; Shop ID #$09, Items, Map ID #$14: Wellgarth Underground, #2
0x01A006|$06:$9FF6:3C 3B 35 34 00 00	; Shop ID #$0A, Items, Map ID #$15: Beran
; Item Prices, low byte
; indexed data load target (from $84D7, $84E9, $8D15, $8D51, $8D6C, $9A8B, $9D06)
; external indexed data load target (from $0F:$EED3)
0x01A00C|$06:$9FFC:00
; Item Prices, high byte
; indexed data load target (from $84DC, $84F1, $8D1D, $8D56, $8D74, $9A8E, $9D09)
; external indexed data load target (from $0F:$EED8)
0x01A00D|$06:$9FFD:   00	; Item ID #$00: (no item)
0x01A00E|$06:$9FFE:14 00	; Item ID #$01: Bamboo Stick
0x01A010|$06:$A000:C8 00	; Item ID #$02: Magic Knife
0x01A012|$06:$A002:C4 09	; Item ID #$03: Wizard’s Wand
0x01A014|$06:$A004:90 65	; Item ID #$04: Staff of Thunder
0x01A016|$06:$A006:3C 00	; Item ID #$05: Club
0x01A018|$06:$A008:64 00	; Item ID #$06: Copper Sword
0x01A01A|$06:$A00A:86 01	; Item ID #$07: Chain Sickle
0x01A01C|$06:$A00C:02 03	; Item ID #$08: Iron Spear
0x01A01E|$06:$A00E:A8 61	; Item ID #$09: Falcon Sword
0x01A020|$06:$A010:DC 05	; Item ID #$0A: Broad Sword
0x01A022|$06:$A012:A0 0F	; Item ID #$0B: Giant Hammer
0x01A024|$06:$A014:98 3A	; Item ID #$0C: Sword of Destruction
0x01A026|$06:$A016:40 1F	; Item ID #$0D: Dragon Killer
0x01A028|$06:$A018:80 3E	; Item ID #$0E: Light Sword
0x01A02A|$06:$A01A:02 00	; Item ID #$0F: Sword of Erdrick
0x01A02C|$06:$A01C:F4 01	; Item ID #$10: Thunder Sword

0x01A02E|$06:$A01E:1E 00	; Item ID #$11: Clothes
0x01A030|$06:$A020:E2 04	; Item ID #$12: Clothes Hiding
0x01A032|$06:$A022:46 00	; Item ID #$13: Water Flying Cloth
0x01A034|$06:$A024:E8 FD	; Item ID #$14: Mink Coat
0x01A036|$06:$A026:96 00	; Item ID #$15: Leather Armor
0x01A038|$06:$A028:E0 01	; Item ID #$16: Chain Mail
0x01A03A|$06:$A02A:00 19	; Item ID #$17: Gremlin’s Armor
0x01A03C|$06:$A02C:CC 10	; Item ID #$18: Magic Armor
0x01A03E|$06:$A02E:E8 03	; Item ID #$19: Full Plate Armor
0x01A040|$06:$A030:32 00	; Item ID #$1A: Armor of Gaia
0x01A042|$06:$A032:04 00	; Item ID #$1B: Armor of Erdrick

0x01A044|$06:$A034:5A 00	; Item ID #$1C: Leather Shield
0x01A046|$06:$A036:FC 53	; Item ID #$1D: Shield of Strength
0x01A048|$06:$A038:D0 07	; Item ID #$1E: Steel Shield
0x01A04A|$06:$A03A:60 22	; Item ID #$1F: Evil Shield
0x01A04C|$06:$A03C:14 00	; Item ID #$20: Shield of Erdrick

0x01A04E|$06:$A03E:20 4E	; Item ID #$21: Mysterious Hat
0x01A050|$06:$A040:4E 0C	; Item ID #$22: Iron Helmet
0x01A052|$06:$A042:46 00	; Item ID #$23: Helmet of Erdrick

0x01A054|$06:$A044:0A 00	; Item ID #$24: Token of Erdrick
0x01A056|$06:$A046:00 00	; Item ID #$25: Tresures
0x01A058|$06:$A048:2C 01	; Item ID #$26: Moon Fragment
0x01A05A|$06:$A04A:00 00	; Item ID #$27: Charm of Rubiss
0x01A05C|$06:$A04C:00 00	; Item ID #$28: Eye of Malroth
0x01A05E|$06:$A04E:06 00	; Item ID #$29: Leaf of The World Tree
0x01A060|$06:$A050:90 01	; Item ID #$2A: Echoing Flute
0x01A062|$06:$A052:00 00	; Item ID #$2B: Mirror of Ra
0x01A064|$06:$A054:28 00	; Item ID #$2C: Dew’s Yarn
0x01A066|$06:$A056:1E 00	; Item ID #$2D: Magic Loom
0x01A068|$06:$A058:46 00	; Item ID #$2E: Cloak of Wind
0x01A06A|$06:$A05A:DC 05	; Item ID #$2F: Gremlin’s Tail
0x01A06C|$06:$A05C:80 02	; Item ID #$30: Dragon’s Bane
0x01A06E|$06:$A05E:10 27	; Item ID #$31: Dragon’s Potion
0x01A070|$06:$A060:F4 01	; Item ID #$32: Golden Card
0x01A072|$06:$A062:46 00	; Item ID #$33: Lottery Ticket
0x01A074|$06:$A064:28 00	; Item ID #$34: Fairy Water
0x01A076|$06:$A066:50 00	; Item ID #$35: Wing of the Wyvern
0x01A078|$06:$A068:02 00	; Item ID #$36: [blank]
0x01A07A|$06:$A06A:02 00	; Item ID #$37: Golden Key
0x01A07C|$06:$A06C:02 00	; Item ID #$38: Silver Key
0x01A07E|$06:$A06E:D0 07	; Item ID #$39: Jailor’s Key
0x01A080|$06:$A070:00 00	; Item ID #$3A: Watergate Key
0x01A082|$06:$A072:08 00	; Item ID #$3B: Antidote Herb
0x01A084|$06:$A074:0F 00	; Item ID #$3C: Medical Herb
0x01A086|$06:$A076:28 0A	; Item ID #$3D: Wizard’s Ring
0x01A088|$06:$A078:02 00	; Item ID #$3E: Perilous
0x01A08A|$06:$A07A:02 00	; Item ID #$3F: [blank]

; data -> code
; control flow target (from $A141, $A14C)
0x01A08C|$06:$A07C:A5 47   	LDA $47    	; Stepguard flag
0x01A08E|$06:$A07E:10 08   	BPL $A088  
0x01A090|$06:$A080:C0 04   	CPY #$04   
0x01A092|$06:$A082:D0 11   	BNE $A095  
0x01A094|$06:$A084:A9 07   	LDA #$07   
0x01A096|$06:$A086:85 47   	STA $47    	; Stepguard flag
; control flow target (from $A07E)
0x01A098|$06:$A088:98      	TYA        
0x01A099|$06:$A089:25 47   	AND $47    	; Stepguard flag
0x01A09B|$06:$A08B:F0 0D   	BEQ $A09A  
0x01A09D|$06:$A08D:0A      	ASL        
0x01A09E|$06:$A08E:38      	SEC        
0x01A09F|$06:$A08F:E9 01   	SBC #$01   
0x01A0A1|$06:$A091:05 47   	ORA $47    	; Stepguard flag
0x01A0A3|$06:$A093:85 47   	STA $47    	; Stepguard flag
; control flow target (from $A082)
0x01A0A5|$06:$A095:68      	PLA        
0x01A0A6|$06:$A096:68      	PLA        
0x01A0A7|$06:$A097:4C A1 A1	JMP $A1A1  

; control flow target (from $A08B)
0x01A0AA|$06:$A09A:60      	RTS        


; code -> data
; indexed data load target (from $A11D)
0x01A0AB|$06:$A09B:04
0x01A0AC|$06:$A09C:02
0x01A0AD|$06:$A09D:01

; data -> code
; external control flow target (from $0F:$C89E)
0x01A0AE|$06:$A09E:AD 5A 01	LDA $015A  
0x01A0B1|$06:$A0A1:8D 5B 01	STA $015B  
0x01A0B4|$06:$A0A4:AD 59 01	LDA $0159  
0x01A0B7|$06:$A0A7:8D 5A 01	STA $015A  
0x01A0BA|$06:$A0AA:A5 3B   	LDA $3B    	; high nybble = terrain ID
0x01A0BC|$06:$A0AC:8D 59 01	STA $0159  
0x01A0BF|$06:$A0AF:A9 00   	LDA #$00   
0x01A0C1|$06:$A0B1:85 0E   	STA $0E    
0x01A0C3|$06:$A0B3:A9 06   	LDA #$06   
0x01A0C5|$06:$A0B5:85 94   	STA $94    	; return bank for various function calls, doubles as index of selected option for multiple-choice menus
0x01A0C7|$06:$A0B7:A5 46   	LDA $46    	; Repel (#$FE) / Fairy Water (#$FF) flag
0x01A0C9|$06:$A0B9:F0 23   	BEQ $A0DE  
0x01A0CB|$06:$A0BB:C9 01   	CMP #$01   
0x01A0CD|$06:$A0BD:D0 04   	BNE $A0C3  
0x01A0CF|$06:$A0BF:A9 2B   	LDA #$2B   	; String ID #$012B: The Fairy Water evaporated and lost its power.[end-FC]
0x01A0D1|$06:$A0C1:D0 06   	BNE $A0C9  
; control flow target (from $A0BD)
0x01A0D3|$06:$A0C3:C9 02   	CMP #$02   
0x01A0D5|$06:$A0C5:D0 13   	BNE $A0DA  
0x01A0D7|$06:$A0C7:A9 BE   	LDA #$BE   	; String ID #$01BE: Repel has lost its effect.[end-FC]
; control flow target (from $A0C1)
0x01A0D9|$06:$A0C9:48      	PHA        
; call to code in a different bank ($0F:$EB76)
0x01A0DA|$06:$A0CA:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01A0DD|$06:$A0CD:04	; Menu ID #$04: Dialogue window

; data -> code
0x01A0DE|$06:$A0CE:68      	PLA        
; call to code in a different bank ($0F:$FA4E)
0x01A0DF|$06:$A0CF:20 4E FA	JSR $FA4E  	; display string ID specified by A + #$0100
0x01A0E2|$06:$A0D2:A9 01   	LDA #$01   
0x01A0E4|$06:$A0D4:85 0E   	STA $0E    
0x01A0E6|$06:$A0D6:A9 02   	LDA #$02   
0x01A0E8|$06:$A0D8:85 46   	STA $46    	; Repel (#$FE) / Fairy Water (#$FF) flag
; control flow target (from $A0C5)
0x01A0EA|$06:$A0DA:C6 46   	DEC $46    	; Repel (#$FE) / Fairy Water (#$FF) flag
0x01A0EC|$06:$A0DC:C6 46   	DEC $46    	; Repel (#$FE) / Fairy Water (#$FF) flag
; control flow target (from $A0B9)
0x01A0EE|$06:$A0DE:EE FB 05	INC $05FB  	; movement counter
0x01A0F1|$06:$A0E1:AD FB 05	LDA $05FB  	; movement counter
0x01A0F4|$06:$A0E4:29 03   	AND #$03   
0x01A0F6|$06:$A0E6:D0 26   	BNE $A10E  
0x01A0F8|$06:$A0E8:A5 1F   	LDA $1F    	; some kind of map type (#$00: World Map, #$01: other non-dungeon maps, #$02: maps #$2B - #$43 inclusive, #$03: maps >= #$44, #$FF => game menu)
0x01A0FA|$06:$A0EA:C9 01   	CMP #$01   
0x01A0FC|$06:$A0EC:F0 20   	BEQ $A10E  
0x01A0FE|$06:$A0EE:A0 00   	LDY #$00   
; control flow target (from $A10C)
0x01A100|$06:$A0F0:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01A103|$06:$A0F3:29 A0   	AND #$A0   
0x01A105|$06:$A0F5:C9 A0   	CMP #$A0   
0x01A107|$06:$A0F7:D0 0C   	BNE $A105  
0x01A109|$06:$A0F9:98      	TYA        
0x01A10A|$06:$A0FA:48      	PHA        
0x01A10B|$06:$A0FB:20 62 A2	JSR $A262  
0x01A10E|$06:$A0FE:68      	PLA        
0x01A10F|$06:$A0FF:A8      	TAY        
0x01A110|$06:$A100:A9 01   	LDA #$01   
0x01A112|$06:$A102:20 C7 A1	JSR $A1C7  
; control flow target (from $A0F7)
0x01A115|$06:$A105:98      	TYA        
0x01A116|$06:$A106:18      	CLC        
0x01A117|$06:$A107:69 12   	ADC #$12   
0x01A119|$06:$A109:A8      	TAY        
0x01A11A|$06:$A10A:C0 36   	CPY #$36   
0x01A11C|$06:$A10C:90 E2   	BCC $A0F0  
; control flow target (from $A0E6, $A0EC)
0x01A11E|$06:$A10E:A9 24   	LDA #$24   
0x01A120|$06:$A110:85 49   	STA $49    	; object hero/target/item/string ID $49
0x01A122|$06:$A112:A9 00   	LDA #$00   
0x01A124|$06:$A114:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
; control flow target (from $A1AA)
0x01A126|$06:$A116:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x01A128|$06:$A118:4A      	LSR        
0x01A129|$06:$A119:4A      	LSR        
0x01A12A|$06:$A11A:4A      	LSR        
0x01A12B|$06:$A11B:4A      	LSR        
0x01A12C|$06:$A11C:AA      	TAX        
0x01A12D|$06:$A11D:BC 9B A0	LDY $A09B,X
0x01A130|$06:$A120:BD 59 01	LDA $0159,X
0x01A133|$06:$A123:C9 70   	CMP #$70   
0x01A135|$06:$A125:D0 04   	BNE $A12B  
0x01A137|$06:$A127:A9 02   	LDA #$02   
0x01A139|$06:$A129:D0 36   	BNE $A161  
; control flow target (from $A125)
0x01A13B|$06:$A12B:C9 A0   	CMP #$A0   
0x01A13D|$06:$A12D:D0 0E   	BNE $A13D  
0x01A13F|$06:$A12F:A5 31   	LDA $31    	; current map ID
0x01A141|$06:$A131:C9 2E   	CMP #$2E   	; Map ID #$2E: Sea Cave B1
0x01A143|$06:$A133:90 1E   	BCC $A153  
0x01A145|$06:$A135:C9 34   	CMP #$34   	; Map ID #$34: Charlock Castle B1/B2
0x01A147|$06:$A137:B0 1A   	BCS $A153  
0x01A149|$06:$A139:A9 01   	LDA #$01   
0x01A14B|$06:$A13B:D0 24   	BNE $A161  
; control flow target (from $A12D)
0x01A14D|$06:$A13D:C9 80   	CMP #$80   
0x01A14F|$06:$A13F:D0 07   	BNE $A148  
0x01A151|$06:$A141:20 7C A0	JSR $A07C  
0x01A154|$06:$A144:A9 0F   	LDA #$0F   
0x01A156|$06:$A146:D0 19   	BNE $A161  
; control flow target (from $A13F)
0x01A158|$06:$A148:C9 90   	CMP #$90   
0x01A15A|$06:$A14A:D0 07   	BNE $A153  
0x01A15C|$06:$A14C:20 7C A0	JSR $A07C  
0x01A15F|$06:$A14F:A9 1E   	LDA #$1E   
0x01A161|$06:$A151:D0 0E   	BNE $A161  
; control flow target (from $A133, $A137, $A14A)
0x01A163|$06:$A153:A5 47   	LDA $47    	; Stepguard flag
0x01A165|$06:$A155:30 4A   	BMI $A1A1  
0x01A167|$06:$A157:98      	TYA        
0x01A168|$06:$A158:49 FF   	EOR #$FF   
0x01A16A|$06:$A15A:25 47   	AND $47    	; Stepguard flag
0x01A16C|$06:$A15C:85 47   	STA $47    	; Stepguard flag
0x01A16E|$06:$A15E:4C A1 A1	JMP $A1A1  

; control flow target (from $A129, $A13B, $A146, $A151)
0x01A171|$06:$A161:85 CC   	STA $CC    
0x01A173|$06:$A163:A4 49   	LDY $49    	; object hero/target/item/string ID $49
0x01A175|$06:$A165:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01A178|$06:$A168:10 37   	BPL $A1A1  
0x01A17A|$06:$A16A:A9 5B   	LDA #$5B   
0x01A17C|$06:$A16C:20 B5 A1	JSR $A1B5  
0x01A17F|$06:$A16F:B0 30   	BCS $A1A1  
0x01A181|$06:$A171:A5 CC   	LDA $CC    
0x01A183|$06:$A173:C9 0A   	CMP #$0A   
0x01A185|$06:$A175:B0 07   	BCS $A17E  
0x01A187|$06:$A177:A9 53   	LDA #$53   
0x01A189|$06:$A179:20 B5 A1	JSR $A1B5  
0x01A18C|$06:$A17C:B0 23   	BCS $A1A1  
; control flow target (from $A175)
0x01A18E|$06:$A17E:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs
0x01A190|$06:$A180:D0 18   	BNE $A19A  
0x01A192|$06:$A182:98      	TYA        
0x01A193|$06:$A183:48      	PHA        
0x01A194|$06:$A184:A5 CC   	LDA $CC    
0x01A196|$06:$A186:C9 0A   	CMP #$0A   
0x01A198|$06:$A188:B0 0B   	BCS $A195  
0x01A19A|$06:$A18A:A9 91   	LDA #$91   	; Music ID #$91: swamp SFX
; call to code in a different bank ($0F:$C561)
0x01A19C|$06:$A18C:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x01A19F|$06:$A18F:20 62 A2	JSR $A262  
0x01A1A2|$06:$A192:4C 98 A1	JMP $A198  

; control flow target (from $A188)
0x01A1A5|$06:$A195:20 96 A2	JSR $A296  
; control flow target (from $A192)
0x01A1A8|$06:$A198:68      	PLA        
0x01A1A9|$06:$A199:A8      	TAY        
; control flow target (from $A180)
0x01A1AA|$06:$A19A:E6 96   	INC $96    	; temp storage for item/spell/type/etc. IDs
0x01A1AC|$06:$A19C:A5 CC   	LDA $CC    
0x01A1AE|$06:$A19E:20 C7 A1	JSR $A1C7  
; control flow target (from $A097, $A155, $A15E, $A168, $A16F, $A17C)
0x01A1B1|$06:$A1A1:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x01A1B3|$06:$A1A3:38      	SEC        
0x01A1B4|$06:$A1A4:E9 12   	SBC #$12   
0x01A1B6|$06:$A1A6:85 49   	STA $49    	; object hero/target/item/string ID $49
0x01A1B8|$06:$A1A8:30 03   	BMI $A1AD  
0x01A1BA|$06:$A1AA:4C 16 A1	JMP $A116  

; control flow target (from $A1A8)
0x01A1BD|$06:$A1AD:A5 0E   	LDA $0E    
0x01A1BF|$06:$A1AF:F0 03   	BEQ $A1B4  
; call to code in a different bank ($0F:$D0F5)
0x01A1C1|$06:$A1B1:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
; control flow target (from $A1AF)
0x01A1C4|$06:$A1B4:60      	RTS        

; control flow target (from $A16C, $A179)
0x01A1C5|$06:$A1B5:85 0C   	STA $0C    
0x01A1C7|$06:$A1B7:98      	TYA        
0x01A1C8|$06:$A1B8:48      	PHA        
0x01A1C9|$06:$A1B9:4A      	LSR        
0x01A1CA|$06:$A1BA:4A      	LSR        
0x01A1CB|$06:$A1BB:4A      	LSR        
0x01A1CC|$06:$A1BC:4A      	LSR        
0x01A1CD|$06:$A1BD:85 9C   	STA $9C    
0x01A1CF|$06:$A1BF:A5 0C   	LDA $0C    
; call to code in a different bank ($0F:$C4B0)
0x01A1D1|$06:$A1C1:20 B0 C4	JSR $C4B0  	; given a hero ID in $9C and an item ID in A, SEC if hero has that item, CLC otherwise
0x01A1D4|$06:$A1C4:68      	PLA        
0x01A1D5|$06:$A1C5:A8      	TAY        
0x01A1D6|$06:$A1C6:60      	RTS        

; control flow target (from $A102, $A19E)
0x01A1D7|$06:$A1C7:85 0C   	STA $0C    
0x01A1D9|$06:$A1C9:B9 3B 06	LDA $063B,Y	; Midenhall Current HP, low byte
0x01A1DC|$06:$A1CC:38      	SEC        
0x01A1DD|$06:$A1CD:E5 0C   	SBC $0C    
0x01A1DF|$06:$A1CF:99 3B 06	STA $063B,Y	; Midenhall Current HP, low byte
0x01A1E2|$06:$A1D2:B9 3C 06	LDA $063C,Y	; Midenhall Current HP, high byte
0x01A1E5|$06:$A1D5:E9 00   	SBC #$00   
0x01A1E7|$06:$A1D7:99 3C 06	STA $063C,Y	; Midenhall Current HP, high byte
0x01A1EA|$06:$A1DA:B0 08   	BCS $A1E4  
0x01A1EC|$06:$A1DC:A9 00   	LDA #$00   
0x01A1EE|$06:$A1DE:99 3B 06	STA $063B,Y	; Midenhall Current HP, low byte
0x01A1F1|$06:$A1E1:99 3C 06	STA $063C,Y	; Midenhall Current HP, high byte
; control flow target (from $A1DA)
0x01A1F4|$06:$A1E4:19 3B 06	ORA $063B,Y	; Midenhall Current HP, low byte
0x01A1F7|$06:$A1E7:F0 0C   	BEQ $A1F5  
0x01A1F9|$06:$A1E9:98      	TYA        
0x01A1FA|$06:$A1EA:48      	PHA        
0x01A1FB|$06:$A1EB:8A      	TXA        
0x01A1FC|$06:$A1EC:48      	PHA        
; call to code in a different bank ($0F:$C22C)
0x01A1FD|$06:$A1ED:20 2C C2	JSR $C22C  
0x01A200|$06:$A1F0:68      	PLA        
0x01A201|$06:$A1F1:AA      	TAX        
0x01A202|$06:$A1F2:68      	PLA        
0x01A203|$06:$A1F3:A8      	TAY        
0x01A204|$06:$A1F4:60      	RTS        

; control flow target (from $A1E7)
0x01A205|$06:$A1F5:A9 04   	LDA #$04   
0x01A207|$06:$A1F7:99 2D 06	STA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01A20A|$06:$A1FA:A9 FF   	LDA #$FF   
0x01A20C|$06:$A1FC:85 35   	STA $35    	; flag indicating whether any menu is currently open
0x01A20E|$06:$A1FE:A5 0E   	LDA $0E    
0x01A210|$06:$A200:D0 0C   	BNE $A20E  
0x01A212|$06:$A202:98      	TYA        
0x01A213|$06:$A203:48      	PHA        
; call to code in a different bank ($0F:$EB76)
0x01A214|$06:$A204:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01A217|$06:$A207:04	; Menu ID #$04: Dialogue window

; data -> code
0x01A218|$06:$A208:68      	PLA        
0x01A219|$06:$A209:A8      	TAY        
0x01A21A|$06:$A20A:A9 00   	LDA #$00   
0x01A21C|$06:$A20C:85 0E   	STA $0E    
; control flow target (from $A200)
0x01A21E|$06:$A20E:E6 0E   	INC $0E    
0x01A220|$06:$A210:A5 0E   	LDA $0E    
0x01A222|$06:$A212:48      	PHA        
0x01A223|$06:$A213:98      	TYA        
0x01A224|$06:$A214:48      	PHA        
0x01A225|$06:$A215:4A      	LSR        
0x01A226|$06:$A216:4A      	LSR        
0x01A227|$06:$A217:4A      	LSR        
0x01A228|$06:$A218:4A      	LSR        
0x01A229|$06:$A219:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$FC50)
0x01A22B|$06:$A21B:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
0x01A22E|$06:$A21E:A5 97   	LDA $97    	; subject hero ID $97
0x01A230|$06:$A220:18      	CLC        
0x01A231|$06:$A221:69 03   	ADC #$03   
0x01A233|$06:$A223:85 97   	STA $97    	; subject hero ID $97
; call to code in a different bank ($0F:$D302)
0x01A235|$06:$A225:20 02 D3	JSR $D302  
; call to code in a different bank ($0F:$FA2A)
0x01A238|$06:$A228:20 2A FA	JSR $FA2A  	; display string ID specified by next byte

; code -> data
; indirect data load target
0x01A23B|$06:$A22B:1B	; String ID #$001B: Alas, brave [name] hast died.[end-FC]

; data -> code
0x01A23C|$06:$A22C:68      	PLA        
0x01A23D|$06:$A22D:A8      	TAY        
0x01A23E|$06:$A22E:68      	PLA        
0x01A23F|$06:$A22F:85 0E   	STA $0E    
0x01A241|$06:$A231:A2 00   	LDX #$00   
; control flow target (from $A23F)
0x01A243|$06:$A233:BD 2D 06	LDA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01A246|$06:$A236:30 25   	BMI $A25D  
0x01A248|$06:$A238:8A      	TXA        
0x01A249|$06:$A239:18      	CLC        
0x01A24A|$06:$A23A:69 12   	ADC #$12   
0x01A24C|$06:$A23C:AA      	TAX        
0x01A24D|$06:$A23D:C9 36   	CMP #$36   
0x01A24F|$06:$A23F:90 F2   	BCC $A233  
; call to code in a different bank ($0F:$F6CE)
0x01A251|$06:$A241:20 CE F6	JSR $F6CE  	; return number of party members - 1 in A/X
0x01A254|$06:$A244:F0 09   	BEQ $A24F  
0x01A256|$06:$A246:A9 80   	LDA #$80   
; call to code in a different bank ($0F:$FC50)
0x01A258|$06:$A248:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01A25B|$06:$A24B:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01A25E|$06:$A24E:51	; String ID #$0151: [name] is utterly destroyed.[end-FC]

; data -> code
; control flow target (from $A244)
0x01A25F|$06:$A24F:A9 12   	LDA #$12   	; Music ID #$12: party defeat BGM
0x01A261|$06:$A251:8D F7 05	STA $05F7  	; probably BGM for current area
; call to code in a different bank ($0F:$C561)
0x01A264|$06:$A254:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x01A267|$06:$A257:20 9D 80	JSR $809D  	; wait until all joypad buttons are released and then some button pressed
; call to code in a different bank ($0F:$D271)
0x01A26A|$06:$A25A:4C 71 D2	JMP $D271  

; control flow target (from $A236)
0x01A26D|$06:$A25D:A9 00   	LDA #$00   
0x01A26F|$06:$A25F:85 35   	STA $35    	; flag indicating whether any menu is currently open
0x01A271|$06:$A261:60      	RTS        

; control flow target (from $A0FB, $A18F, $A29F)
; call to code in a different bank ($0F:$C1DC)
0x01A272|$06:$A262:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01A275|$06:$A265:AD 87 A2	LDA $A287  
0x01A278|$06:$A268:85 0A   	STA $0A    
0x01A27A|$06:$A26A:AD 88 A2	LDA $A288  
0x01A27D|$06:$A26D:20 7E A2	JSR $A27E  
; call to code in a different bank ($0F:$C1DC)
0x01A280|$06:$A270:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
; call to code in a different bank ($0F:$C1DC)
0x01A283|$06:$A273:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01A286|$06:$A276:AD E9 C2	LDA $C2E9  
0x01A289|$06:$A279:85 0A   	STA $0A    
0x01A28B|$06:$A27B:AD EA C2	LDA $C2EA  
; control flow target (from $A26D)
0x01A28E|$06:$A27E:85 0B   	STA $0B    
0x01A290|$06:$A280:A9 00   	LDA #$00   
0x01A292|$06:$A282:85 0C   	STA $0C    
; call to code in a different bank ($0F:$C228)
0x01A294|$06:$A284:4C 28 C2	JMP $C228  


; code -> data
; data load target (from $A265)
0x01A297|$06:$A287:89
; data load target (from $A26A)
0x01A298|$06:$A288:   A2	; $06:$A289
; indirect data load target (via $A287)
0x01A299|$06:$A289:0F
; indirect data load target
0x01A29A|$06:$A28A:16
; indirect data load target
0x01A29B|$06:$A28B:16
; indirect data load target
0x01A29C|$06:$A28C:16
; indirect data load target
0x01A29D|$06:$A28D:16
; indirect data load target
0x01A29E|$06:$A28E:16
; indirect data load target
0x01A29F|$06:$A28F:16
; indirect data load target
0x01A2A0|$06:$A290:16
; indirect data load target
0x01A2A1|$06:$A291:16
; indirect data load target
0x01A2A2|$06:$A292:16
; indirect data load target
0x01A2A3|$06:$A293:16
; indirect data load target
0x01A2A4|$06:$A294:16
; indirect data load target
0x01A2A5|$06:$A295:16

; data -> code
; control flow target (from $A195)
0x01A2A6|$06:$A296:A9 81   	LDA #$81   	; Music ID #$81: hit 1 SFX
; call to code in a different bank ($0F:$C561)
0x01A2A8|$06:$A298:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x01A2AB|$06:$A29B:A9 04   	LDA #$04   
0x01A2AD|$06:$A29D:85 13   	STA $13    
; control flow target (from $A2A4)
0x01A2AF|$06:$A29F:20 62 A2	JSR $A262  
0x01A2B2|$06:$A2A2:C6 13   	DEC $13    
0x01A2B4|$06:$A2A4:D0 F9   	BNE $A29F  
0x01A2B6|$06:$A2A6:60      	RTS        

; external control flow target (from $0F:$C91B)
0x01A2B7|$06:$A2A7:AD 12 01	LDA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x01A2BA|$06:$A2AA:29 1F   	AND #$1F   
0x01A2BC|$06:$A2AC:C9 1F   	CMP #$1F   
0x01A2BE|$06:$A2AE:F0 01   	BEQ $A2B1  
; control flow target (from $A2B8)
0x01A2C0|$06:$A2B0:60      	RTS        

; control flow target (from $A2AE)
0x01A2C1|$06:$A2B1:A9 27   	LDA #$27   
0x01A2C3|$06:$A2B3:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x01A2C6|$06:$A2B6:C9 FF   	CMP #$FF   
0x01A2C8|$06:$A2B8:D0 F6   	BNE $A2B0  
0x01A2CA|$06:$A2BA:A9 05   	LDA #$05   	; Music ID #$05: Rubiss BGM
; call to code in a different bank ($0F:$C561)
0x01A2CC|$06:$A2BC:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x01A2CF|$06:$A2BF:A9 04   	LDA #$04   
0x01A2D1|$06:$A2C1:85 49   	STA $49    	; object hero/target/item/string ID $49
0x01A2D3|$06:$A2C3:20 FB A2	JSR $A2FB  
; call to code in a different bank ($0F:$F6F6)
0x01A2D6|$06:$A2C6:20 F6 F6	JSR $F6F6  	; open main dialogue window and display string ID specified by byte following JSR + #$0200

; code -> data
; indirect data load target
0x01A2D9|$06:$A2C9:FD	; String ID #$02FD: I hear a mortal voice calling me.[wait][line]‘Ah, three descendants of Erdrick[.’][wait][line]‘Yes, I shall help thee[.’][wait][line]‘I am Rubiss, an Enchanter, and long ago I promised Erdrick to help when the time came[.’][wait][line]‘Now is the time[.’][wait][line]‘Receive now my charm and my spell of protection[.’][end-FC]

; data -> code
0x01A2DA|$06:$A2CA:A9 27   	LDA #$27   
0x01A2DC|$06:$A2CC:85 96   	STA $96    	; temp storage for item/spell/type/etc. IDs
0x01A2DE|$06:$A2CE:A9 00   	LDA #$00   
0x01A2E0|$06:$A2D0:85 97   	STA $97    	; subject hero ID $97
0x01A2E2|$06:$A2D2:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x01A2E5|$06:$A2D5:B0 12   	BCS $A2E9  
0x01A2E7|$06:$A2D7:E6 97   	INC $97    	; subject hero ID $97
0x01A2E9|$06:$A2D9:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x01A2EC|$06:$A2DC:B0 0B   	BCS $A2E9  
0x01A2EE|$06:$A2DE:E6 97   	INC $97    	; subject hero ID $97
0x01A2F0|$06:$A2E0:20 7E 8D	JSR $8D7E  	; given hero ID in $97 and item ID in $96, try to add item to first empty slot in hero's inventory; SEC if added, CLC if no empty slots
0x01A2F3|$06:$A2E3:B0 04   	BCS $A2E9  
; call to code in a different bank ($0F:$FA32)
0x01A2F5|$06:$A2E5:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
0x01A2F8|$06:$A2E8:D8	; String ID #$02D8: [wait]‘But thou hast many things.[line]See me again later[.’][end-FC]

; data -> code
; control flow target (from $A2D5, $A2DC, $A2E3)
0x01A2F9|$06:$A2E9:A2 3C   	LDX #$3C   
; call to code in a different bank ($0F:$C1EE)
0x01A2FB|$06:$A2EB:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x01A2FE|$06:$A2EE:A9 FF   	LDA #$FF   
0x01A300|$06:$A2F0:85 49   	STA $49    	; object hero/target/item/string ID $49
0x01A302|$06:$A2F2:20 FB A2	JSR $A2FB  
; call to code in a different bank ($0F:$C59D)
0x01A305|$06:$A2F5:20 9D C5	JSR $C59D  
; call to code in a different bank ($0F:$D0F5)
0x01A308|$06:$A2F8:4C F5 D0	JMP $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01

; control flow target (from $A2C3, $A2F2)
0x01A30B|$06:$A2FB:A0 1F   	LDY #$1F   
0x01A30D|$06:$A2FD:20 0C A3	JSR $A30C  
0x01A310|$06:$A300:A0 27   	LDY #$27   
0x01A312|$06:$A302:20 0C A3	JSR $A30C  
0x01A315|$06:$A305:A0 2F   	LDY #$2F   
0x01A317|$06:$A307:20 0C A3	JSR $A30C  
0x01A31A|$06:$A30A:A0 37   	LDY #$37   
; control flow target (from $A2FD, $A302, $A307)
0x01A31C|$06:$A30C:A5 49   	LDA $49    	; object hero/target/item/string ID $49
0x01A31E|$06:$A30E:99 3A 05	STA $053A,Y
; call to code in a different bank ($0F:$CF64)
0x01A321|$06:$A311:20 64 CF	JSR $CF64  
0x01A324|$06:$A314:A2 19   	LDX #$19   
; call to code in a different bank ($0F:$C1EE)
0x01A326|$06:$A316:4C EE C1	JMP $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF

; if $05FC is #$00, copy battle stats at $015D,Y to field stats at $0600,X, otherwise copy field stats at $0600,X to battle stats at $015D,Y
; external control flow target (from $0F:$E438)
0x01A329|$06:$A319:A2 00   	LDX #$00   
0x01A32B|$06:$A31B:A0 00   	LDY #$00   
; control flow target (from $A337)
0x01A32D|$06:$A31D:86 0C   	STX $0C    
0x01A32F|$06:$A31F:BD 4E A3	LDA $A34E,X
0x01A332|$06:$A322:85 0D   	STA $0D    
0x01A334|$06:$A324:BD 4D A3	LDA $A34D,X	; stat ranges
0x01A337|$06:$A327:AA      	TAX        
; control flow target (from $A32F)
0x01A338|$06:$A328:20 3A A3	JSR $A33A  	; if $05FC is #$00, copy $015D,Y to $0600,X, otherwise copy $0600,X to $015D,Y
0x01A33B|$06:$A32B:E8      	INX        
0x01A33C|$06:$A32C:C8      	INY        
0x01A33D|$06:$A32D:E4 0D   	CPX $0D    
0x01A33F|$06:$A32F:D0 F7   	BNE $A328  
0x01A341|$06:$A331:A6 0C   	LDX $0C    
0x01A343|$06:$A333:E8      	INX        
0x01A344|$06:$A334:E8      	INX        
0x01A345|$06:$A335:E0 10   	CPX #$10   
0x01A347|$06:$A337:D0 E4   	BNE $A31D  
0x01A349|$06:$A339:60      	RTS        

; if $05FC is #$00, copy $015D,Y to $0600,X, otherwise copy $0600,X to $015D,Y
; control flow target (from $A328)
0x01A34A|$06:$A33A:AD FC 05	LDA $05FC  
0x01A34D|$06:$A33D:F0 07   	BEQ $A346  
0x01A34F|$06:$A33F:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x01A352|$06:$A342:99 5D 01	STA $015D,Y
0x01A355|$06:$A345:60      	RTS        

; control flow target (from $A33D)
0x01A356|$06:$A346:B9 5D 01	LDA $015D,Y
0x01A359|$06:$A349:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x01A35C|$06:$A34C:60      	RTS        


; code -> data
; stat ranges
; indexed data load target (from $A324)
0x01A35D|$06:$A34D:00
; indexed data load target (from $A31F)
0x01A35E|$06:$A34E:   18	; $0600 inclusive - $0618 exclusive
0x01A35F|$06:$A34F:24 26	; $0624 inclusive - $0626 exclusive
0x01A361|$06:$A351:2D 2E	; $062D inclusive - $062E exclusive
0x01A363|$06:$A353:3B 3E	; $063B inclusive - $063E exclusive
0x01A365|$06:$A355:3F 40	; $063F inclusive - $0640 exclusive
0x01A367|$06:$A357:4D 50	; $064D inclusive - $0650 exclusive
0x01A369|$06:$A359:51 52	; $0651 inclusive - $0652 exclusive
0x01A36B|$06:$A35B:5F 62	; $065F inclusive - $0662 exclusive

; data -> code
; save game handler
; control flow target (from $8F02, $900A, $918D, $9209, $93F6, $943F, $981B)
; call to code in a different bank ($0F:$D159)
0x01A36D|$06:$A35D:4C 59 D1	JMP $D159  

; check for item A (possibly equipped) in party inventory, returning inventory index of item in A/X if found, #$FF if not
; control flow target (from $9B58, $9DD8, $9DE5)
0x01A370|$06:$A360:20 69 A3	JSR $A369  	; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
0x01A373|$06:$A363:10 3A   	BPL $A39F  	; if found, RTS
0x01A375|$06:$A365:A5 0C   	LDA $0C    	; otherwise re-load the item ID
0x01A377|$06:$A367:09 40   	ORA #$40   	; and check for an equipped version
; check for item A in party inventory, returning inventory index of item in A/X if found, #$FF if not
; control flow target (from $834E, $845B, $86D7, $8D5D, $90CE, $90D5, $92BC, $92C3, $92D5, $9306, $93C0, $93CB, $9B51, $9BA8, $9D8C, $A2B3, $A360)
; external control flow target (from $0F:$D589)
0x01A379|$06:$A369:84 10   	STY $10    	; save Y in $10
0x01A37B|$06:$A36B:85 0C   	STA $0C    	; save item ID in $0C
0x01A37D|$06:$A36D:A2 00   	LDX #$00   	; initialize both inventory index and hero ID to #$00
0x01A37F|$06:$A36F:86 0D   	STX $0D    	; inventory index
; control flow target (from $A398)
0x01A381|$06:$A371:A4 0D   	LDY $0D    	; hero ID
0x01A383|$06:$A373:B9 A0 A3	LDA $A3A0,Y	; pre-computed offsets for the start of each hero's data (what's wrong with the same data at $06:$9D55?)
0x01A386|$06:$A376:A8      	TAY        
0x01A387|$06:$A377:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01A38A|$06:$A37A:29 04   	AND #$04   	; pick out the In Party bit
0x01A38C|$06:$A37C:D0 07   	BNE $A385  	; if not in party, skip to the next hero (but heroes are gained sequentially and never leave, so BNE $A39A would be faster)
0x01A38E|$06:$A37E:8A      	TXA        	; inventory index
0x01A38F|$06:$A37F:18      	CLC        
0x01A390|$06:$A380:69 08   	ADC #$08   	; move to start of next hero's inventory
0x01A392|$06:$A382:AA      	TAX        
0x01A393|$06:$A383:D0 0D   	BNE $A392  	; branch always taken; skip cheking current hero's inventory (since they're not in the party)
; control flow target (from $A37C, $A390)
0x01A395|$06:$A385:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x01A398|$06:$A388:C5 0C   	CMP $0C    	; item ID
0x01A39A|$06:$A38A:F0 10   	BEQ $A39C  	; if we have one, then done
0x01A39C|$06:$A38C:E8      	INX        	; otherwise move to next inventory index
0x01A39D|$06:$A38D:8A      	TXA        	; calculate inventory index mod 8
0x01A39E|$06:$A38E:29 07   	AND #$07   
0x01A3A0|$06:$A390:D0 F3   	BNE $A385  	; if this hero has more inventory to check, check it
; control flow target (from $A383)
0x01A3A2|$06:$A392:E6 0D   	INC $0D    	; increment hero ID
0x01A3A4|$06:$A394:A5 0D   	LDA $0D    
0x01A3A6|$06:$A396:C9 03   	CMP #$03   	; 3 heroes total
0x01A3A8|$06:$A398:D0 D7   	BNE $A371  	; if more heroes to check, check them
0x01A3AA|$06:$A39A:A2 FF   	LDX #$FF   	; otherwise flag item not found
; control flow target (from $A38A)
0x01A3AC|$06:$A39C:A4 10   	LDY $10    	; restore Y from $10
0x01A3AE|$06:$A39E:8A      	TXA        
; control flow target (from $A363)
0x01A3AF|$06:$A39F:60      	RTS        


; code -> data
; pre-computed offsets for the start of each hero's data (what's wrong with the same data at $06:$9D55?)
; indexed data load target (from $A373)
0x01A3B0|$06:$A3A0:00	; Midenhall
0x01A3B1|$06:$A3A1:12	; Cannock
0x01A3B2|$06:$A3A2:24	; Moonbrooke

; data -> code
; given item ID in $96 and hero ID in $97, set A to #$80 if hero can equip item, #$00 otherwise
; control flow target (from $831D, $8AA9)
0x01A3B3|$06:$A3A3:86 10   	STX $10    	; save X
0x01A3B5|$06:$A3A5:A5 96   	LDA $96    	; temp storage for item/spell/type/etc. IDs; item ID
0x01A3B7|$06:$A3A7:29 3F   	AND #$3F   	; strip off equipped bit
0x01A3B9|$06:$A3A9:AA      	TAX        
0x01A3BA|$06:$A3AA:BD BD A3	LDA $A3BD,X	; Bit fields controlling who can equip each item
0x01A3BD|$06:$A3AD:85 0D   	STA $0D    
0x01A3BF|$06:$A3AF:A4 97   	LDY $97    	; subject hero ID $97
0x01A3C1|$06:$A3B1:C8      	INY        	; number of bits to shift
; control flow target (from $A3B8)
0x01A3C2|$06:$A3B2:A9 00   	LDA #$00   	; initialize return value
0x01A3C4|$06:$A3B4:46 0D   	LSR $0D    	; shift hero's equipability bit into C
0x01A3C6|$06:$A3B6:6A      	ROR        	; and then into A
0x01A3C7|$06:$A3B7:88      	DEY        	; number of bits to shift
0x01A3C8|$06:$A3B8:D0 F8   	BNE $A3B2  	; if it's the wrong hero's data, loop to next hero
0x01A3CA|$06:$A3BA:A6 10   	LDX $10    	; restore X
0x01A3CC|$06:$A3BC:60      	RTS        


; code -> data
; Bit fields controlling who can equip each item
; #$01 = Midenhall, #$02 = Cannock, #$04 = Moonbrooke
; indexed data load target (from $A3AA)
0x01A3CD|$06:$A3BD:00	; Item ID #$00: (no item)
0x01A3CE|$06:$A3BE:07	; Item ID #$01: Bamboo Stick
0x01A3CF|$06:$A3BF:07	; Item ID #$02: Magic Knife
0x01A3D0|$06:$A3C0:07	; Item ID #$03: Wizard’s Wand
0x01A3D1|$06:$A3C1:07	; Item ID #$04: Staff of Thunder
0x01A3D2|$06:$A3C2:03	; Item ID #$05: Club
0x01A3D3|$06:$A3C3:03	; Item ID #$06: Copper Sword
0x01A3D4|$06:$A3C4:03	; Item ID #$07: Chain Sickle
0x01A3D5|$06:$A3C5:03	; Item ID #$08: Iron Spear
0x01A3D6|$06:$A3C6:03	; Item ID #$09: Falcon Sword
0x01A3D7|$06:$A3C7:01	; Item ID #$0A: Broad Sword
0x01A3D8|$06:$A3C8:01	; Item ID #$0B: Giant Hammer
0x01A3D9|$06:$A3C9:01	; Item ID #$0C: Sword of Destruction
0x01A3DA|$06:$A3CA:01	; Item ID #$0D: Dragon Killer
0x01A3DB|$06:$A3CB:01	; Item ID #$0E: Light Sword
0x01A3DC|$06:$A3CC:01	; Item ID #$0F: Sword of Erdrick
0x01A3DD|$06:$A3CD:01	; Item ID #$10: Thunder Sword

0x01A3DE|$06:$A3CE:07	; Item ID #$11: Clothes
0x01A3DF|$06:$A3CF:07	; Item ID #$12: Clothes Hiding
0x01A3E0|$06:$A3D0:07	; Item ID #$13: Water Flying Cloth
0x01A3E1|$06:$A3D1:07	; Item ID #$14: Mink Coat
0x01A3E2|$06:$A3D2:03	; Item ID #$15: Leather Armor
0x01A3E3|$06:$A3D3:03	; Item ID #$16: Chain Mail
0x01A3E4|$06:$A3D4:03	; Item ID #$17: Gremlin’s Armor
0x01A3E5|$06:$A3D5:03	; Item ID #$18: Magic Armor
0x01A3E6|$06:$A3D6:01	; Item ID #$19: Full Plate Armor
0x01A3E7|$06:$A3D7:01	; Item ID #$1A: Armor of Gaia
0x01A3E8|$06:$A3D8:01	; Item ID #$1B: Armor of Erdrick

0x01A3E9|$06:$A3D9:03	; Item ID #$1C: Leather Shield
0x01A3EA|$06:$A3DA:03	; Item ID #$1D: Shield of Strength
0x01A3EB|$06:$A3DB:01	; Item ID #$1E: Steel Shield
0x01A3EC|$06:$A3DC:01	; Item ID #$1F: Evil Shield
0x01A3ED|$06:$A3DD:01	; Item ID #$20: Shield of Erdrick

0x01A3EE|$06:$A3DE:07	; Item ID #$21: Mysterious Hat
0x01A3EF|$06:$A3DF:01	; Item ID #$22: Iron Helmet
0x01A3F0|$06:$A3E0:01	; Item ID #$23: Helmet of Erdrick
; pointers to warp spaces for irregularly-shaped maps
; indirect data load target (via $8042)
; external indexed data load target (from $0F:$E8BC)
0x01A3F1|$06:$A3E1:00
; external indexed data load target (from $0F:$E8C1)
0x01A3F2|$06:$A3E2:   00	; $06:$0000; Map ID #$2B: Cave to Hamlin
0x01A3F3|$06:$A3E3:1B A4	; $06:$A41B; Map ID #$2C: Lake Cave B1
0x01A3F5|$06:$A3E5:30 A4	; $06:$A430; Map ID #$2D: Lake Cave B2
0x01A3F7|$06:$A3E7:45 A4	; $06:$A445; Map ID #$2E: Sea Cave B1
0x01A3F9|$06:$A3E9:50 A4	; $06:$A450; Map ID #$2F: Sea Cave B2
0x01A3FB|$06:$A3EB:00 00	; $06:$0000; Map ID #$30: Sea Cave B3-1
0x01A3FD|$06:$A3ED:00 00	; $06:$0000; Map ID #$31: Sea Cave B3-2
0x01A3FF|$06:$A3EF:00 00	; $06:$0000; Map ID #$32: Sea Cave B4
0x01A401|$06:$A3F1:00 00	; $06:$0000; Map ID #$33: Sea Cave B5
0x01A403|$06:$A3F3:00 00	; $06:$0000; Map ID #$34: Charlock Castle B1/B2
0x01A405|$06:$A3F5:00 00	; $06:$0000; Map ID #$35: Charlock Castle B3/B4-1/B5-1
0x01A407|$06:$A3F7:00 00	; $06:$0000; Map ID #$36: Charlock Castle B4-2/B5-2/B6
0x01A409|$06:$A3F9:00 00	; $06:$0000; Map ID #$37: Cave to Rhone B1
0x01A40B|$06:$A3FB:00 00	; $06:$0000; Map ID #$38: Cave to Rhone 1F
0x01A40D|$06:$A3FD:5B A4	; $06:$A45B; Map ID #$39: Cave to Rhone 2F-1
0x01A40F|$06:$A3FF:98 A4	; $06:$A498; Map ID #$3A: Cave to Rhone 2F-2
0x01A411|$06:$A401:D5 A4	; $06:$A4D5; Map ID #$3B: Cave to Rhone 2F-3
0x01A413|$06:$A403:F4 A4	; $06:$A4F4; Map ID #$3C: Cave to Rhone 3F
0x01A415|$06:$A405:00 00	; $06:$0000; Map ID #$3D: Cave to Rhone 4F
0x01A417|$06:$A407:00 00	; $06:$0000; Map ID #$3E: Cave to Rhone 5F
0x01A419|$06:$A409:31 A5	; $06:$A531; Map ID #$3F: Cave to Rhone 6F
0x01A41B|$06:$A40B:00 00	; $06:$0000; Map ID #$40: Spring of Bravery
0x01A41D|$06:$A40D:00 00	; $06:$0000; Map ID #$41: unused?
0x01A41F|$06:$A40F:00 00	; $06:$0000; Map ID #$42: unused?
0x01A421|$06:$A411:00 00	; $06:$0000; Map ID #$43: Cave to Rimuldar
0x01A423|$06:$A413:00 00	; $06:$0000; Map ID #$44: Hargon's Castle 2F
0x01A425|$06:$A415:00 00	; $06:$0000; Map ID #$45: Hargon's Castle 3F
0x01A427|$06:$A417:00 00	; $06:$0000; Map ID #$46: Hargon's Castle 4F
0x01A429|$06:$A419:00 00	; $06:$0000; Map ID #$47: Hargon's Castle 5F
; warp spaces for irregularly-shaped maps; format is (destination map ID, destination X-pos, destination Y-pos, transition X-pos, transition Y-pos), all positions are 7-bit, describing a 2x2 space
; Map ID #$2C: Lake Cave B1
; indirect data load target (via $A3E3)
0x01A42B|$06:$A41B:2C 1E 16 FE 10
0x01A430|$06:$A420:2C 00 10 20 16
0x01A435|$06:$A425:2C 04 00 18 20
0x01A43A|$06:$A42A:2C 18 1E 04 FE
; indirect data load target
0x01A43F|$06:$A42F:FF
; Map ID #$2D: Lake Cave B2
; indirect data load target (via $A3E5)
0x01A440|$06:$A430:2D 16 02 0E 20
0x01A445|$06:$A435:2D 0E 1E 16 00
0x01A44A|$06:$A43A:2D 1A 1C FE 1C
0x01A44F|$06:$A43F:2D 00 1C 1C 1C
; indirect data load target
0x01A454|$06:$A444:FF
; Map ID #$2E: Sea Cave B1
; indirect data load target (via $A3E7)
0x01A455|$06:$A445:2E 04 02 02 1C
0x01A45A|$06:$A44A:2E 02 1A 04 00
; indirect data load target
0x01A45F|$06:$A44F:FF
; Map ID #$2F: Sea Cave B2
; indirect data load target (via $A3E9)
0x01A460|$06:$A450:2F 20 14 12 28
0x01A465|$06:$A455:2F 12 26 20 12
; indirect data load target
0x01A46A|$06:$A45A:FF
; Map ID #$39: Cave to Rhone 2F-1
; indirect data load target (via $A3FD)
0x01A46B|$06:$A45B:3A 06 0A 06 00
0x01A470|$06:$A460:3A 10 0A 10 00
0x01A475|$06:$A465:3A 1A 0A 1A 00
0x01A47A|$06:$A46A:3A 24 0A 24 00
0x01A47F|$06:$A46F:3A 2E 0A 2E 00
0x01A484|$06:$A474:3A 06 02 06 0C
0x01A489|$06:$A479:3A 10 02 10 0C
0x01A48E|$06:$A47E:3A 1A 02 1A 0C
0x01A493|$06:$A483:3A 24 02 24 0C
0x01A498|$06:$A488:3A 2E 02 2E 0C
0x01A49D|$06:$A48D:3B 08 04 FE 08
0x01A4A2|$06:$A492:3B 00 04 36 08
; indirect data load target
0x01A4A7|$06:$A497:FF
; Map ID #$3A: Cave to Rhone 2F-2
; indirect data load target (via $A3FF)
0x01A4A8|$06:$A498:39 06 0A 06 00
0x01A4AD|$06:$A49D:39 10 0A 10 00
0x01A4B2|$06:$A4A2:39 1A 0A 1A 00
0x01A4B7|$06:$A4A7:39 24 0A 24 00
0x01A4BC|$06:$A4AC:39 2E 0A 2E 00
0x01A4C1|$06:$A4B1:39 06 02 06 0C
0x01A4C6|$06:$A4B6:39 10 02 10 0C
0x01A4CB|$06:$A4BB:39 1A 02 1A 0C
0x01A4D0|$06:$A4C0:39 24 02 24 0C
0x01A4D5|$06:$A4C5:39 2E 02 2E 0C
0x01A4DA|$06:$A4CA:3B 08 0E FE 08
0x01A4DF|$06:$A4CF:3B 00 0E 36 08
; indirect data load target
0x01A4E4|$06:$A4D4:FF
; Map ID #$3B: Cave to Rhone 2F-3
; indirect data load target (via $A401)
0x01A4E5|$06:$A4D5:3B 04 00 04 14
0x01A4EA|$06:$A4DA:3B 04 12 04 FE
0x01A4EF|$06:$A4DF:39 34 08 FE 04
0x01A4F4|$06:$A4E4:39 00 08 0A 04
0x01A4F9|$06:$A4E9:3A 34 08 FE 0E
0x01A4FE|$06:$A4EE:3A 00 08 0A 0E
; indirect data load target
0x01A503|$06:$A4F3:FF
; Map ID #$3C: Cave to Rhone 3F
; indirect data load target (via $A403)
0x01A504|$06:$A4F4:3C 16 18 FE 06
0x01A509|$06:$A4F9:3C 00 06 18 18
0x01A50E|$06:$A4FE:3C 26 0A FE 12
0x01A513|$06:$A503:3C 00 12 28 0A
0x01A518|$06:$A508:3C 26 16 FE 22
0x01A51D|$06:$A50D:3C 00 22 28 16
0x01A522|$06:$A512:3C 22 1E 20 38
0x01A527|$06:$A517:3C 20 36 22 1C
0x01A52C|$06:$A51C:3C 0A 2A 28 34
0x01A531|$06:$A521:3C 26 34 08 2A
0x01A536|$06:$A526:3C 26 02 10 16
0x01A53B|$06:$A52B:3C 12 16 28 02
; indirect data load target
0x01A540|$06:$A530:FF
; Map ID #$3F: Cave to Rhone 6F
; indirect data load target (via $A409)
0x01A541|$06:$A531:3F 02 16 1A 12
0x01A546|$06:$A536:3F 18 12 00 16
0x01A54B|$06:$A53B:3F 18 12 20 14
0x01A550|$06:$A540:3F 18 12 FE 02
0x01A555|$06:$A545:3F 08 0C 12 0E
0x01A55A|$06:$A54A:3F 12 10 08 0E
0x01A55F|$06:$A54F:3F 12 10 06 30
0x01A564|$06:$A554:3F 24 0E 0A 12
0x01A569|$06:$A559:3F 0C 12 26 0E
0x01A56E|$06:$A55E:3F 0C 12 06 02
0x01A573|$06:$A563:3F 0C 12 06 12
0x01A578|$06:$A568:3F 00 0C 28 02
0x01A57D|$06:$A56D:3F 26 02 FE 0C
0x01A582|$06:$A572:3F 00 12 28 1A
0x01A587|$06:$A577:3F 26 1A FE 12
0x01A58C|$06:$A57C:3F 00 26 1E 04
0x01A591|$06:$A581:3F 00 26 28 14
0x01A596|$06:$A586:3F 00 26 20 1C
0x01A59B|$06:$A58B:3F 10 2C 12 24
0x01A5A0|$06:$A590:3F 10 2C 20 22
0x01A5A5|$06:$A595:3F 10 2C 1A 2C
0x01A5AA|$06:$A59A:3F 22 22 12 2C
0x01A5AF|$06:$A59F:3F 00 1C 28 24
0x01A5B4|$06:$A5A4:3F 00 1C 28 2C
0x01A5B9|$06:$A5A9:3F 26 24 FE 1C
0x01A5BE|$06:$A5AE:3F 00 20 28 28
0x01A5C3|$06:$A5B3:3F 26 28 FE 20
0x01A5C8|$06:$A5B8:3F 1C 2C 28 20
0x01A5CD|$06:$A5BD:3F 0E 0C 1E 26
0x01A5D2|$06:$A5C2:3F 1A 1E 0A FE
0x01A5D7|$06:$A5C7:3F 16 2E 1C 16
0x01A5DC|$06:$A5CC:3F 08 18 1C 24
0x01A5E1|$06:$A5D1:3F 1A 24 06 18
0x01A5E6|$06:$A5D6:3F 18 0A 16 1E
0x01A5EB|$06:$A5DB:3F 14 1E 16 0A
0x01A5F0|$06:$A5E0:3F 06 2E 12 FE
0x01A5F5|$06:$A5E5:3F 0C 24 0E 0E
0x01A5FA|$06:$A5EA:3F 0C 24 1A 20
0x01A5FF|$06:$A5EF:3F 0C 24 16 30
0x01A604|$06:$A5F4:3F 12 0A 12 1A
0x01A609|$06:$A5F9:3F 12 18 12 08
0x01A60E|$06:$A5FE:3F 12 18 0C 22
0x01A613|$06:$A603:3F 12 18 22 FE
0x01A618|$06:$A608:3F 1C 04 FE 26
0x01A61D|$06:$A60D:FF

; data -> code
0x01A61E|$06:$A60E:A9 FF   	LDA #$FF   
0x01A620|$06:$A610:D0 02   	BNE $A614  
; indirect control flow target (via $8000)
0x01A622|$06:$A612:A9 00   	LDA #$00   
; control flow target (from $A610)
0x01A624|$06:$A614:20 1A A6	JSR $A61A  
; call to code in a different bank ($0F:$C1DC)
0x01A627|$06:$A617:4C DC C1	JMP $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF

; control flow target (from $A614)
; indirect control flow target (via $803C)
0x01A62A|$06:$A61A:48      	PHA        
0x01A62B|$06:$A61B:AD 01 00	LDA $0001  
0x01A62E|$06:$A61E:F0 03   	BEQ $A623  
; call to code in a different bank ($0F:$C1DC)
0x01A630|$06:$A620:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
; control flow target (from $A61E)
0x01A633|$06:$A623:A9 01   	LDA #$01   
0x01A635|$06:$A625:8D 83 01	STA $0183  
0x01A638|$06:$A628:A9 00   	LDA #$00   
0x01A63A|$06:$A62A:8D 80 60	STA $6080  
0x01A63D|$06:$A62D:68      	PLA        
0x01A63E|$06:$A62E:20 63 A7	JSR $A763  
0x01A641|$06:$A631:A9 00   	LDA #$00   
0x01A643|$06:$A633:8D 81 60	STA $6081  
0x01A646|$06:$A636:8D 82 60	STA $6082  
0x01A649|$06:$A639:AD 7B 60	LDA $607B  
0x01A64C|$06:$A63C:48      	PHA        
0x01A64D|$06:$A63D:29 F0   	AND #$F0   
0x01A64F|$06:$A63F:4A      	LSR        
0x01A650|$06:$A640:4A      	LSR        
0x01A651|$06:$A641:4A      	LSR        
0x01A652|$06:$A642:8D 7E 60	STA $607E  
0x01A655|$06:$A645:68      	PLA        
0x01A656|$06:$A646:29 0F   	AND #$0F   
0x01A658|$06:$A648:0A      	ASL        
0x01A659|$06:$A649:8D 7F 60	STA $607F  
0x01A65C|$06:$A64C:8D 83 60	STA $6083  
0x01A65F|$06:$A64F:AE 02 00	LDX $0002  
; control flow target (from $A6D0)
0x01A662|$06:$A652:A5 08   	LDA $08    
0x01A664|$06:$A654:8D 90 60	STA $6090  
0x01A667|$06:$A657:A5 07   	LDA $07    
0x01A669|$06:$A659:8D 8F 60	STA $608F  
0x01A66C|$06:$A65C:29 1F   	AND #$1F   
0x01A66E|$06:$A65E:8D 8B 60	STA $608B  
0x01A671|$06:$A661:A9 20   	LDA #$20   
0x01A673|$06:$A663:38      	SEC        
0x01A674|$06:$A664:ED 8B 60	SBC $608B  
0x01A677|$06:$A667:8D 8D 60	STA $608D  
0x01A67A|$06:$A66A:AD 7F 60	LDA $607F  
0x01A67D|$06:$A66D:38      	SEC        
0x01A67E|$06:$A66E:ED 8D 60	SBC $608D  
0x01A681|$06:$A671:8D 8E 60	STA $608E  
0x01A684|$06:$A674:F0 02   	BEQ $A678  
0x01A686|$06:$A676:B0 09   	BCS $A681  
; control flow target (from $A674)
0x01A688|$06:$A678:AD 7F 60	LDA $607F  
0x01A68B|$06:$A67B:8D 8D 60	STA $608D  
0x01A68E|$06:$A67E:4C A4 A6	JMP $A6A4  

; control flow target (from $A676)
0x01A691|$06:$A681:20 D6 A6	JSR $A6D6  
0x01A694|$06:$A684:AD 90 60	LDA $6090  
0x01A697|$06:$A687:49 04   	EOR #$04   
0x01A699|$06:$A689:8D 90 60	STA $6090  
0x01A69C|$06:$A68C:AD 8F 60	LDA $608F  
0x01A69F|$06:$A68F:29 1F   	AND #$1F   
0x01A6A1|$06:$A691:8D 8B 60	STA $608B  
0x01A6A4|$06:$A694:AD 8F 60	LDA $608F  
0x01A6A7|$06:$A697:38      	SEC        
0x01A6A8|$06:$A698:ED 8B 60	SBC $608B  
0x01A6AB|$06:$A69B:8D 8F 60	STA $608F  
0x01A6AE|$06:$A69E:AD 8E 60	LDA $608E  
0x01A6B1|$06:$A6A1:8D 8D 60	STA $608D  
; control flow target (from $A67E)
0x01A6B4|$06:$A6A4:20 D6 A6	JSR $A6D6  
0x01A6B7|$06:$A6A7:A5 08   	LDA $08    
0x01A6B9|$06:$A6A9:29 FB   	AND #$FB   
0x01A6BB|$06:$A6AB:C9 23   	CMP #$23   
0x01A6BD|$06:$A6AD:90 11   	BCC $A6C0  
0x01A6BF|$06:$A6AF:A5 07   	LDA $07    
0x01A6C1|$06:$A6B1:C9 A0   	CMP #$A0   
0x01A6C3|$06:$A6B3:90 0B   	BCC $A6C0  
0x01A6C5|$06:$A6B5:29 1F   	AND #$1F   
0x01A6C7|$06:$A6B7:85 07   	STA $07    
0x01A6C9|$06:$A6B9:A5 08   	LDA $08    
0x01A6CB|$06:$A6BB:29 FC   	AND #$FC   
0x01A6CD|$06:$A6BD:4C CB A6	JMP $A6CB  

; control flow target (from $A6AD, $A6B3)
0x01A6D0|$06:$A6C0:A5 07   	LDA $07    
0x01A6D2|$06:$A6C2:18      	CLC        
0x01A6D3|$06:$A6C3:69 20   	ADC #$20   
0x01A6D5|$06:$A6C5:85 07   	STA $07    
0x01A6D7|$06:$A6C7:A5 08   	LDA $08    
0x01A6D9|$06:$A6C9:69 00   	ADC #$00   
; control flow target (from $A6BD)
0x01A6DB|$06:$A6CB:85 08   	STA $08    
0x01A6DD|$06:$A6CD:CE 7E 60	DEC $607E  
0x01A6E0|$06:$A6D0:D0 80   	BNE $A652  
0x01A6E2|$06:$A6D2:8E 02 00	STX $0002  
0x01A6E5|$06:$A6D5:60      	RTS        

; control flow target (from $A681, $A6A4)
0x01A6E6|$06:$A6D6:AD 90 60	LDA $6090  
0x01A6E9|$06:$A6D9:09 80   	ORA #$80   
0x01A6EB|$06:$A6DB:9D 00 03	STA $0300,X	; PPU write buffer start
0x01A6EE|$06:$A6DE:AD 8D 60	LDA $608D  
0x01A6F1|$06:$A6E1:9D 01 03	STA $0301,X
0x01A6F4|$06:$A6E4:AD 8F 60	LDA $608F  
0x01A6F7|$06:$A6E7:9D 02 03	STA $0302,X
0x01A6FA|$06:$A6EA:E8      	INX        
0x01A6FB|$06:$A6EB:E8      	INX        
0x01A6FC|$06:$A6EC:E8      	INX        
0x01A6FD|$06:$A6ED:AD 8D 60	LDA $608D  
0x01A700|$06:$A6F0:48      	PHA        
0x01A701|$06:$A6F1:AC 81 60	LDY $6081  
; control flow target (from $A6FF)
0x01A704|$06:$A6F4:B9 0B 60	LDA $600B,Y
0x01A707|$06:$A6F7:9D 00 03	STA $0300,X	; PPU write buffer start
0x01A70A|$06:$A6FA:E8      	INX        
0x01A70B|$06:$A6FB:C8      	INY        
0x01A70C|$06:$A6FC:CE 8D 60	DEC $608D  
0x01A70F|$06:$A6FF:D0 F3   	BNE $A6F4  
0x01A711|$06:$A701:8C 81 60	STY $6081  
0x01A714|$06:$A704:68      	PLA        
0x01A715|$06:$A705:4A      	LSR        
0x01A716|$06:$A706:8D 8D 60	STA $608D  
0x01A719|$06:$A709:AD 7E 60	LDA $607E  
0x01A71C|$06:$A70C:29 01   	AND #$01   
0x01A71E|$06:$A70E:F0 4F   	BEQ $A75F  
0x01A720|$06:$A710:AC 82 60	LDY $6082  
0x01A723|$06:$A713:AD 90 60	LDA $6090  
0x01A726|$06:$A716:8D 98 60	STA $6098  
0x01A729|$06:$A719:AD 8F 60	LDA $608F  
0x01A72C|$06:$A71C:8D 97 60	STA $6097  
; control flow target (from $A75A)
0x01A72F|$06:$A71F:8A      	TXA        
0x01A730|$06:$A720:48      	PHA        
0x01A731|$06:$A721:98      	TYA        
0x01A732|$06:$A722:48      	PHA        
0x01A733|$06:$A723:AD 90 60	LDA $6090  
0x01A736|$06:$A726:48      	PHA        
0x01A737|$06:$A727:B9 6B 60	LDA $606B,Y
0x01A73A|$06:$A72A:20 89 A7	JSR $A789  
0x01A73D|$06:$A72D:8D 8B 60	STA $608B  
0x01A740|$06:$A730:68      	PLA        
0x01A741|$06:$A731:8D 90 60	STA $6090  
0x01A744|$06:$A734:68      	PLA        
0x01A745|$06:$A735:A8      	TAY        
0x01A746|$06:$A736:68      	PLA        
0x01A747|$06:$A737:AA      	TAX        
0x01A748|$06:$A738:AD 9A 60	LDA $609A  
0x01A74B|$06:$A73B:9D 00 03	STA $0300,X	; PPU write buffer start
0x01A74E|$06:$A73E:E8      	INX        
0x01A74F|$06:$A73F:AD 99 60	LDA $6099  
0x01A752|$06:$A742:9D 00 03	STA $0300,X	; PPU write buffer start
0x01A755|$06:$A745:E8      	INX        
0x01A756|$06:$A746:AD 8B 60	LDA $608B  
0x01A759|$06:$A749:9D 00 03	STA $0300,X	; PPU write buffer start
0x01A75C|$06:$A74C:E8      	INX        
0x01A75D|$06:$A74D:C8      	INY        
0x01A75E|$06:$A74E:EE 97 60	INC $6097  
0x01A761|$06:$A751:EE 97 60	INC $6097  
0x01A764|$06:$A754:EE 01 00	INC $0001  
0x01A767|$06:$A757:CE 8D 60	DEC $608D  
0x01A76A|$06:$A75A:D0 C3   	BNE $A71F  
0x01A76C|$06:$A75C:8C 82 60	STY $6082  
; control flow target (from $A70E)
0x01A76F|$06:$A75F:EE 01 00	INC $0001  
0x01A772|$06:$A762:60      	RTS        

; control flow target (from $A62E)
0x01A773|$06:$A763:48      	PHA        
0x01A774|$06:$A764:20 72 A7	JSR $A772  
0x01A777|$06:$A767:68      	PLA        
0x01A778|$06:$A768:D0 01   	BNE $A76B  
0x01A77A|$06:$A76A:60      	RTS        

; control flow target (from $A768)
0x01A77B|$06:$A76B:A5 08   	LDA $08    
0x01A77D|$06:$A76D:49 04   	EOR #$04   
0x01A77F|$06:$A76F:85 08   	STA $08    
0x01A781|$06:$A771:60      	RTS        

; control flow target (from $A764)
0x01A782|$06:$A772:AD 7C 60	LDA $607C  
0x01A785|$06:$A775:0A      	ASL        
0x01A786|$06:$A776:29 1E   	AND #$1E   
0x01A788|$06:$A778:8D 8B 60	STA $608B  
0x01A78B|$06:$A77B:AD 7C 60	LDA $607C  
0x01A78E|$06:$A77E:4A      	LSR        
0x01A78F|$06:$A77F:4A      	LSR        
0x01A790|$06:$A780:4A      	LSR        
0x01A791|$06:$A781:29 1E   	AND #$1E   
0x01A793|$06:$A783:8D 8C 60	STA $608C  
0x01A796|$06:$A786:4C 09 A8	JMP $A809  

; control flow target (from $A72A)
0x01A799|$06:$A789:8D 96 60	STA $6096  
0x01A79C|$06:$A78C:A9 1F   	LDA #$1F   
0x01A79E|$06:$A78E:2D 97 60	AND $6097  
0x01A7A1|$06:$A791:4A      	LSR        
0x01A7A2|$06:$A792:4A      	LSR        
0x01A7A3|$06:$A793:8D 90 60	STA $6090  
0x01A7A6|$06:$A796:A9 80   	LDA #$80   
0x01A7A8|$06:$A798:2D 97 60	AND $6097  
0x01A7AB|$06:$A79B:4A      	LSR        
0x01A7AC|$06:$A79C:4A      	LSR        
0x01A7AD|$06:$A79D:4A      	LSR        
0x01A7AE|$06:$A79E:4A      	LSR        
0x01A7AF|$06:$A79F:0D 90 60	ORA $6090  
0x01A7B2|$06:$A7A2:8D 90 60	STA $6090  
0x01A7B5|$06:$A7A5:A9 03   	LDA #$03   
0x01A7B7|$06:$A7A7:2D 98 60	AND $6098  
0x01A7BA|$06:$A7AA:0A      	ASL        
0x01A7BB|$06:$A7AB:0A      	ASL        
0x01A7BC|$06:$A7AC:0A      	ASL        
0x01A7BD|$06:$A7AD:0A      	ASL        
0x01A7BE|$06:$A7AE:09 C0   	ORA #$C0   
0x01A7C0|$06:$A7B0:0D 90 60	ORA $6090  
0x01A7C3|$06:$A7B3:8D 99 60	STA $6099  
0x01A7C6|$06:$A7B6:A2 23   	LDX #$23   
0x01A7C8|$06:$A7B8:AD 98 60	LDA $6098  
0x01A7CB|$06:$A7BB:C9 24   	CMP #$24   
0x01A7CD|$06:$A7BD:90 02   	BCC $A7C1  
0x01A7CF|$06:$A7BF:A2 27   	LDX #$27   
; control flow target (from $A7BD)
0x01A7D1|$06:$A7C1:8E 9A 60	STX $609A  
0x01A7D4|$06:$A7C4:AD 97 60	LDA $6097  
0x01A7D7|$06:$A7C7:29 40   	AND #$40   
0x01A7D9|$06:$A7C9:4A      	LSR        
0x01A7DA|$06:$A7CA:4A      	LSR        
0x01A7DB|$06:$A7CB:4A      	LSR        
0x01A7DC|$06:$A7CC:4A      	LSR        
0x01A7DD|$06:$A7CD:8D 93 60	STA $6093  
0x01A7E0|$06:$A7D0:AD 97 60	LDA $6097  
0x01A7E3|$06:$A7D3:29 02   	AND #$02   
0x01A7E5|$06:$A7D5:0D 93 60	ORA $6093  
0x01A7E8|$06:$A7D8:8D 93 60	STA $6093  
0x01A7EB|$06:$A7DB:AD 99 60	LDA $6099  
0x01A7EE|$06:$A7DE:85 57   	STA $57    	; pointer to start of main pointer table, low byte
0x01A7F0|$06:$A7E0:AD 9A 60	LDA $609A  
0x01A7F3|$06:$A7E3:29 07   	AND #$07   
0x01A7F5|$06:$A7E5:85 58   	STA $58    	; pointer to start of main pointer table, high byte
0x01A7F7|$06:$A7E7:A0 00   	LDY #$00   
0x01A7F9|$06:$A7E9:B1 57   	LDA ($57),Y	; pointer to start of main pointer table, low byte
0x01A7FB|$06:$A7EB:8D 94 60	STA $6094  
0x01A7FE|$06:$A7EE:A9 03   	LDA #$03   
0x01A800|$06:$A7F0:AC 93 60	LDY $6093  
0x01A803|$06:$A7F3:F0 07   	BEQ $A7FC  
; control flow target (from $A7FA)
0x01A805|$06:$A7F5:0A      	ASL        
0x01A806|$06:$A7F6:0E 96 60	ASL $6096  
0x01A809|$06:$A7F9:88      	DEY        
0x01A80A|$06:$A7FA:D0 F9   	BNE $A7F5  
; control flow target (from $A7F3)
0x01A80C|$06:$A7FC:49 FF   	EOR #$FF   
0x01A80E|$06:$A7FE:2D 94 60	AND $6094  
0x01A811|$06:$A801:0D 96 60	ORA $6096  
0x01A814|$06:$A804:A0 00   	LDY #$00   
0x01A816|$06:$A806:91 57   	STA ($57),Y	; pointer to start of main pointer table, low byte
0x01A818|$06:$A808:60      	RTS        

; from $02:$B74E, $06:$B0A8, $0F:$FD25, $0F:$FD98 via $8002
; control flow target (from $A786, $AF70)
; indirect control flow target (via $8002)
0x01A819|$06:$A809:A5 04   	LDA $04    
0x01A81B|$06:$A80B:0A      	ASL        
0x01A81C|$06:$A80C:0A      	ASL        
0x01A81D|$06:$A80D:29 04   	AND #$04   
0x01A81F|$06:$A80F:09 20   	ORA #$20   
0x01A821|$06:$A811:85 08   	STA $08    
0x01A823|$06:$A813:AD 8B 60	LDA $608B  
0x01A826|$06:$A816:0A      	ASL        
0x01A827|$06:$A817:0A      	ASL        
0x01A828|$06:$A818:0A      	ASL        
0x01A829|$06:$A819:18      	CLC        
0x01A82A|$06:$A81A:65 05   	ADC $05    
0x01A82C|$06:$A81C:85 07   	STA $07    
0x01A82E|$06:$A81E:90 06   	BCC $A826  
0x01A830|$06:$A820:A5 08   	LDA $08    
0x01A832|$06:$A822:49 04   	EOR #$04   
0x01A834|$06:$A824:85 08   	STA $08    
; control flow target (from $A81E)
0x01A836|$06:$A826:A5 06   	LDA $06    
0x01A838|$06:$A828:4A      	LSR        
0x01A839|$06:$A829:4A      	LSR        
0x01A83A|$06:$A82A:4A      	LSR        
0x01A83B|$06:$A82B:18      	CLC        
0x01A83C|$06:$A82C:6D 8C 60	ADC $608C  
0x01A83F|$06:$A82F:C9 1E   	CMP #$1E   
0x01A841|$06:$A831:90 02   	BCC $A835  
0x01A843|$06:$A833:E9 1E   	SBC #$1E   
; control flow target (from $A831)
0x01A845|$06:$A835:4A      	LSR        
0x01A846|$06:$A836:66 07   	ROR $07    
0x01A848|$06:$A838:4A      	LSR        
0x01A849|$06:$A839:66 07   	ROR $07    
0x01A84B|$06:$A83B:4A      	LSR        
0x01A84C|$06:$A83C:66 07   	ROR $07    
0x01A84E|$06:$A83E:05 08   	ORA $08    
0x01A850|$06:$A840:85 08   	STA $08    
0x01A852|$06:$A842:60      	RTS        

; display and handle main game menu
; from $0F:$C6C7 via $8004
; indirect control flow target (via $8004)
0x01A853|$06:$A843:A9 0C   	LDA #$0C   	; Music ID #$0C: game menu / Wellgarth singer BGM
0x01A855|$06:$A845:8D F7 05	STA $05F7  	; probably BGM for current area
; call to code in a different bank ($0F:$D14F)
0x01A858|$06:$A848:20 4F D1	JSR $D14F  
0x01A85B|$06:$A84B:A9 00   	LDA #$00   	; Music ID #$00: BGM off
0x01A85D|$06:$A84D:8D F7 05	STA $05F7  	; probably BGM for current area
0x01A860|$06:$A850:20 CA A8	JSR $A8CA  
; control flow target (from $A85C)
0x01A863|$06:$A853:20 7E A9	JSR $A97E  
; control flow target (from $A9CC)
0x01A866|$06:$A856:20 A3 A9	JSR $A9A3  	; open apporpriate main game menu based on number of filled save slots, set $75DB = #$0A, #$05, or #$00 based on number of filled slots, return menu selection index in A
0x01A869|$06:$A859:20 CF A9	JSR $A9CF  
0x01A86C|$06:$A85C:4C 53 A8	JMP $A853  

; from $0F:$D15F via $8008
; indirect control flow target (via $8008)
0x01A86F|$06:$A85F:A9 19   	LDA #$19   	; Menu ID #$19: General menu: YES/NO
0x01A871|$06:$A861:20 93 A9	JSR $A993  	; open menu specified by A
0x01A874|$06:$A864:AA      	TAX        
0x01A875|$06:$A865:D0 0D   	BNE $A874  	; branch if NO
0x01A877|$06:$A867:A9 FF   	LDA #$FF   
0x01A879|$06:$A869:8D 70 70	STA $7070  	; ????, SRAM buffer
0x01A87C|$06:$A86C:20 85 A8	JSR $A885  	; copy save data from system RAM to per-game save data
0x01A87F|$06:$A86F:A9 78   	LDA #$78   	; String ID #$0078: ‘I have entered thy deeds in the Imperial Scrolls of Honor[.’][wait][end-FC]
0x01A881|$06:$A871:20 9B A9	JSR $A99B  	; display string ID specified by A
; control flow target (from $A865)
0x01A884|$06:$A874:A9 79   	LDA #$79   	; String ID #$0079: ‘Dost thou wish to continue thy quest?’[FD][FD][end-FC]
0x01A886|$06:$A876:20 9B A9	JSR $A99B  	; display string ID specified by A
0x01A889|$06:$A879:A9 19   	LDA #$19   	; Menu ID #$19: General menu: YES/NO
0x01A88B|$06:$A87B:20 93 A9	JSR $A993  	; open menu specified by A
0x01A88E|$06:$A87E:AA      	TAX        
0x01A88F|$06:$A87F:D0 01   	BNE $A882  	; branch if NO
0x01A891|$06:$A881:60      	RTS        

; control flow target (from $A87F)
; call to code in a different bank ($0F:$D175)
0x01A892|$06:$A882:4C 75 D1	JMP $D175  

; copy save data from system RAM to per-game save data
; from $0F:$C6DA via $801E
; control flow target (from $A86C)
; indirect control flow target (via $801E)
0x01A895|$06:$A885:20 3C AC	JSR $AC3C  	; copy save data from system RAM to $7000-$706F
0x01A898|$06:$A888:20 AD AC	JSR $ACAD  	; initialize the RNG based on 71 passes using SRAM data $7000-$7070 and save resulting seed to $7071-$7072
0x01A89B|$06:$A88B:20 87 AB	JSR $AB87  	; copy data from SRAM buffer to per-game save data
0x01A89E|$06:$A88E:60      	RTS        

; copy Midenhall's short name from save slot in A to $0100 in reverse
; from $0F:$EE7E via $801C
; indirect control flow target (via $801C)
0x01A89F|$06:$A88F:20 F5 A9	JSR $A9F5  	; given save slot number in A, set $99-$9A to pointer to second part of save slot data
0x01A8A2|$06:$A892:A0 03   	LDY #$03   	; copy 4 bytes
0x01A8A4|$06:$A894:D0 08   	BNE $A89E  
; copy Midenhall's full name from save slot in $75DB to $0100 in reverse
; from $0F:$EF5B via $800A
; indirect control flow target (via $800A)
0x01A8A6|$06:$A896:AD DB 75	LDA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01A8A9|$06:$A899:20 F5 A9	JSR $A9F5  	; given save slot number in A, set $99-$9A to pointer to second part of save slot data
0x01A8AC|$06:$A89C:A0 07   	LDY #$07   	; copy 8 bytes
; control flow target (from $A894)
0x01A8AE|$06:$A89E:A2 00   	LDX #$00   
; control flow target (from $A8A7)
0x01A8B0|$06:$A8A0:B1 99   	LDA ($99),Y
0x01A8B2|$06:$A8A2:9D 00 01	STA $0100,X	; string copy buffer start (often referenced as $00FF,X)
0x01A8B5|$06:$A8A5:E8      	INX        
0x01A8B6|$06:$A8A6:88      	DEY        
0x01A8B7|$06:$A8A7:10 F7   	BPL $A8A0  
0x01A8B9|$06:$A8A9:60      	RTS        

; given current game save slot in $75DB, return Midenhall's level in that save game in A/$0E
; indirect control flow target (via $800C)
0x01A8BA|$06:$A8AA:AD DB 75	LDA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01A8BD|$06:$A8AD:20 F5 A9	JSR $A9F5  	; given save slot number in A, set $99-$9A to pointer to second part of save slot data
0x01A8C0|$06:$A8B0:A0 08   	LDY #$08   	; offset for Midenhall's level
0x01A8C2|$06:$A8B2:B1 99   	LDA ($99),Y
0x01A8C4|$06:$A8B4:85 0E   	STA $0E    
0x01A8C6|$06:$A8B6:60      	RTS        

; indirect control flow target (via $800E)
0x01A8C7|$06:$A8B7:20 F5 A9	JSR $A9F5  	; given save slot number in A, set $99-$9A to pointer to second part of save slot data
0x01A8CA|$06:$A8BA:A2 02   	LDX #$02   
0x01A8CC|$06:$A8BC:A0 09   	LDY #$09   
0x01A8CE|$06:$A8BE:B1 99   	LDA ($99),Y
0x01A8D0|$06:$A8C0:30 06   	BMI $A8C8  
0x01A8D2|$06:$A8C2:C9 46   	CMP #$46   
0x01A8D4|$06:$A8C4:F0 01   	BEQ $A8C7  
0x01A8D6|$06:$A8C6:CA      	DEX        
; control flow target (from $A8C4)
0x01A8D7|$06:$A8C7:CA      	DEX        
; control flow target (from $A8C0)
0x01A8D8|$06:$A8C8:8A      	TXA        
0x01A8D9|$06:$A8C9:60      	RTS        

; control flow target (from $A850)
0x01A8DA|$06:$A8CA:A2 05   	LDX #$05   
; control flow target (from $A8DF)
0x01A8DC|$06:$A8CC:BD B9 AD	LDA $ADB9,X
0x01A8DF|$06:$A8CF:DD FA 75	CMP $75FA,X
0x01A8E2|$06:$A8D2:F0 0A   	BEQ $A8DE  
0x01A8E4|$06:$A8D4:DD 01 60	CMP $6001,X
0x01A8E7|$06:$A8D7:F0 05   	BEQ $A8DE  
0x01A8E9|$06:$A8D9:DD A7 61	CMP $61A7,X
0x01A8EC|$06:$A8DC:D0 05   	BNE $A8E3  
; control flow target (from $A8D2, $A8D7)
0x01A8EE|$06:$A8DE:CA      	DEX        
0x01A8EF|$06:$A8DF:10 EB   	BPL $A8CC  
0x01A8F1|$06:$A8E1:30 36   	BMI $A919  
; control flow target (from $A8DC)
0x01A8F3|$06:$A8E3:AD F4 AD	LDA $ADF4  
0x01A8F6|$06:$A8E6:8D 99 00	STA $0099  
0x01A8F9|$06:$A8E9:AD F5 AD	LDA $ADF5  
0x01A8FC|$06:$A8EC:8D 9A 00	STA $009A  
0x01A8FF|$06:$A8EF:A2 0D   	LDX #$0D   
; control flow target (from $A908)
0x01A901|$06:$A8F1:A0 72   	LDY #$72   
0x01A903|$06:$A8F3:A9 00   	LDA #$00   
; control flow target (from $A8F8)
0x01A905|$06:$A8F5:91 99   	STA ($99),Y
0x01A907|$06:$A8F7:88      	DEY        
0x01A908|$06:$A8F8:10 FB   	BPL $A8F5  
0x01A90A|$06:$A8FA:38      	SEC        
0x01A90B|$06:$A8FB:A5 99   	LDA $99    
0x01A90D|$06:$A8FD:E9 73   	SBC #$73   
0x01A90F|$06:$A8FF:85 99   	STA $99    
0x01A911|$06:$A901:A5 9A   	LDA $9A    
0x01A913|$06:$A903:E9 00   	SBC #$00   
0x01A915|$06:$A905:85 9A   	STA $9A    
0x01A917|$06:$A907:CA      	DEX        
0x01A918|$06:$A908:D0 E7   	BNE $A8F1  
0x01A91A|$06:$A90A:A9 00   	LDA #$00   
0x01A91C|$06:$A90C:8D DA 75	STA $75DA  	; bit field for which save game slots are filled
0x01A91F|$06:$A90F:A2 02   	LDX #$02   
0x01A921|$06:$A911:A9 FF   	LDA #$FF   
; control flow target (from $A917)
0x01A923|$06:$A913:9D D7 75	STA $75D7,X	; save slot 1 status (write-only?)
0x01A926|$06:$A916:CA      	DEX        
0x01A927|$06:$A917:10 FA   	BPL $A913  
; control flow target (from $A8E1)
0x01A929|$06:$A919:A2 05   	LDX #$05   
; control flow target (from $A928)
0x01A92B|$06:$A91B:BD B9 AD	LDA $ADB9,X
0x01A92E|$06:$A91E:9D FA 75	STA $75FA,X
0x01A931|$06:$A921:9D 01 60	STA $6001,X
0x01A934|$06:$A924:9D A7 61	STA $61A7,X
0x01A937|$06:$A927:CA      	DEX        
0x01A938|$06:$A928:10 F1   	BPL $A91B  
0x01A93A|$06:$A92A:A9 00   	LDA #$00   
0x01A93C|$06:$A92C:8D DB 75	STA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
; control flow target (from $A973)
0x01A93F|$06:$A92F:AE DB 75	LDX $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01A942|$06:$A932:AD DA 75	LDA $75DA  	; bit field for which save game slots are filled
; control flow target (from $A937)
0x01A945|$06:$A935:4A      	LSR        
0x01A946|$06:$A936:CA      	DEX        
0x01A947|$06:$A937:10 FC   	BPL $A935  
0x01A949|$06:$A939:90 30   	BCC $A96B  
0x01A94B|$06:$A93B:20 44 AB	JSR $AB44  	; copy current save game's data to save data buffer at $7000; CLC if data is valid, SEC if it's unrecoverable
0x01A94E|$06:$A93E:90 28   	BCC $A968  
0x01A950|$06:$A940:AE DB 75	LDX $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01A953|$06:$A943:A9 FD   	LDA #$FD   
0x01A955|$06:$A945:9D D7 75	STA $75D7,X	; save slot 1 status (write-only?)
0x01A958|$06:$A948:E8      	INX        
0x01A959|$06:$A949:86 8F   	STX $8F    
0x01A95B|$06:$A94B:A9 00   	LDA #$00   
0x01A95D|$06:$A94D:85 90   	STA $90    
0x01A95F|$06:$A94F:A9 04   	LDA #$04   	; Menu ID #$04: Dialogue window
0x01A961|$06:$A951:20 93 A9	JSR $A993  	; open menu specified by A
0x01A964|$06:$A954:A9 0A   	LDA #$0A   	; Music ID #$0A: cursed BGM
; call to code in a different bank ($0F:$C58D)
0x01A966|$06:$A956:20 8D C5	JSR $C58D  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM]), wait for it to finish, then play previous BGM
0x01A969|$06:$A959:E6 8E   	INC $8E    	; flag for in battle or not (#$FF)?
0x01A96B|$06:$A95B:A9 77   	LDA #$77   	; String ID #$0077: [no voice]I'm afraid that[line][no voice]scenario [number] was not[line][no voice]recorded in the[line][no voice]Imperial Scrolls of[line][no voice]Honor.[end-FC]
0x01A96D|$06:$A95D:20 9B A9	JSR $A99B  	; display string ID specified by A
0x01A970|$06:$A960:E6 8E   	INC $8E    	; flag for in battle or not (#$FF)?
0x01A972|$06:$A962:20 76 A9	JSR $A976  	; wait for controller input
0x01A975|$06:$A965:20 EB AA	JSR $AAEB  
; control flow target (from $A93E)
0x01A978|$06:$A968:20 02 AA	JSR $AA02  	; copy more data to second part of per-game save data
; control flow target (from $A939)
0x01A97B|$06:$A96B:EE DB 75	INC $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01A97E|$06:$A96E:AD DB 75	LDA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01A981|$06:$A971:C9 03   	CMP #$03   
0x01A983|$06:$A973:90 BA   	BCC $A92F  
0x01A985|$06:$A975:60      	RTS        

; wait for controller input
; control flow target (from $A962, $A97B)
; call to code in a different bank ($0F:$C476)
0x01A986|$06:$A976:20 76 C4	JSR $C476  	; read joypad 1 data into $2F
0x01A989|$06:$A979:A5 2F   	LDA $2F    	; joypad 1 data
0x01A98B|$06:$A97B:F0 F9   	BEQ $A976  	; wait for controller input
0x01A98D|$06:$A97D:60      	RTS        

; control flow target (from $A853)
; call to code in a different bank ($0F:$C42A)
0x01A98E|$06:$A97E:20 2A C4	JSR $C42A  
; call to code in a different bank ($0F:$C446)
0x01A991|$06:$A981:20 46 C4	JSR $C446  	; turn screen off, write $800 [space] tiles to PPU $2000, turn screen on
; call to code in a different bank ($0F:$C1DC)
0x01A994|$06:$A984:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01A997|$06:$A987:A9 80   	LDA #$80   
0x01A999|$06:$A989:8D 07 60	STA $6007  
; call to code in a different bank ($0F:$C41C)
0x01A99C|$06:$A98C:20 1C C4	JSR $C41C  	; wait for interrupt, turn screen sprites and backround on
; call to code in a different bank ($0F:$D14F)
0x01A99F|$06:$A98F:20 4F D1	JSR $D14F  
0x01A9A2|$06:$A992:60      	RTS        

; open menu specified by A
; control flow target (from $A861, $A87B, $A951, $A9C2, $AA76, $AAFE, $AB03, $AB1C)
0x01A9A3|$06:$A993:A2 06   	LDX #$06   
0x01A9A5|$06:$A995:86 94   	STX $94    	; return bank for various function calls, doubles as index of selected option for multiple-choice menus
; call to code in a different bank ($0F:$EB89)
0x01A9A7|$06:$A997:20 89 EB	JSR $EB89  	; open menu specified by A
0x01A9AA|$06:$A99A:60      	RTS        	; JMP > JSR + RTS

; display string ID specified by A
; control flow target (from $A871, $A876, $A95D)
0x01A9AB|$06:$A99B:A2 06   	LDX #$06   
0x01A9AD|$06:$A99D:86 94   	STX $94    	; return bank for various function calls, doubles as index of selected option for multiple-choice menus
; call to code in a different bank ($0F:$FA4A)
0x01A9AF|$06:$A99F:20 4A FA	JSR $FA4A  	; display string ID specified by A
0x01A9B2|$06:$A9A2:60      	RTS        

; open apporpriate main game menu based on number of filled save slots, set $75DB = #$0A, #$05, or #$00 based on number of filled slots, return menu selection index in A
; control flow target (from $A856)
0x01A9B3|$06:$A9A3:A2 02   	LDX #$02   
0x01A9B5|$06:$A9A5:AD DA 75	LDA $75DA  	; bit field for which save game slots are filled
0x01A9B8|$06:$A9A8:29 07   	AND #$07   
0x01A9BA|$06:$A9AA:F0 06   	BEQ $A9B2  	; 0 slots filled => use X = #$02
0x01A9BC|$06:$A9AC:C9 07   	CMP #$07   
0x01A9BE|$06:$A9AE:D0 01   	BNE $A9B1  	; 1-2 slots filled => use X = #$01
0x01A9C0|$06:$A9B0:CA      	DEX        	; 3 slots filled => use X = #$00
; control flow target (from $A9AE)
0x01A9C1|$06:$A9B1:CA      	DEX        
; control flow target (from $A9AA)
0x01A9C2|$06:$A9B2:8A      	TXA        
0x01A9C3|$06:$A9B3:8D DB 75	STA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values; base index into main game menu handlers
0x01A9C6|$06:$A9B6:0A      	ASL        
0x01A9C7|$06:$A9B7:0A      	ASL        
0x01A9C8|$06:$A9B8:6D DB 75	ADC $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values; base index into main game menu handlers
0x01A9CB|$06:$A9BB:8D DB 75	STA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values; base index into main game menu handlers
0x01A9CE|$06:$A9BE:8A      	TXA        
0x01A9CF|$06:$A9BF:18      	CLC        
0x01A9D0|$06:$A9C0:69 32   	ADC #$32   	; Menu ID #$32 - #$34: Game menu: 3, 1-2, or 0 saves
0x01A9D2|$06:$A9C2:20 93 A9	JSR $A993  	; open menu specified by A
0x01A9D5|$06:$A9C5:C9 FF   	CMP #$FF   
0x01A9D7|$06:$A9C7:F0 01   	BEQ $A9CA  
0x01A9D9|$06:$A9C9:60      	RTS        

; control flow target (from $A9C7)
0x01A9DA|$06:$A9CA:68      	PLA        
0x01A9DB|$06:$A9CB:68      	PLA        
0x01A9DC|$06:$A9CC:4C 56 A8	JMP $A856  

; control flow target (from $A859)
0x01A9DF|$06:$A9CF:18      	CLC        
0x01A9E0|$06:$A9D0:6D DB 75	ADC $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values; base index into main game menu handlers
0x01A9E3|$06:$A9D3:AA      	TAX        
0x01A9E4|$06:$A9D4:BD D7 AD	LDA $ADD7,X	; index into jump table at $ADE2
0x01A9E7|$06:$A9D7:0A      	ASL        
0x01A9E8|$06:$A9D8:AA      	TAX        
0x01A9E9|$06:$A9D9:BD E2 AD	LDA $ADE2,X	; jump table for main game menu handlers
0x01A9EC|$06:$A9DC:85 99   	STA $99    
0x01A9EE|$06:$A9DE:BD E3 AD	LDA $ADE3,X
0x01A9F1|$06:$A9E1:85 9A   	STA $9A    
0x01A9F3|$06:$A9E3:6C 99 00	JMP ($0099)

0x01A9F6|$06:$A9E6:A8      	TAY        
0x01A9F7|$06:$A9E7:A2 00   	LDX #$00   
0x01A9F9|$06:$A9E9:AD DA 75	LDA $75DA  	; bit field for which save game slots are filled
; control flow target (from $A9EE, $A9F1)
0x01A9FC|$06:$A9EC:E8      	INX        
0x01A9FD|$06:$A9ED:4A      	LSR        
0x01A9FE|$06:$A9EE:90 FC   	BCC $A9EC  
0x01AA00|$06:$A9F0:88      	DEY        
0x01AA01|$06:$A9F1:10 F9   	BPL $A9EC  
0x01AA03|$06:$A9F3:CA      	DEX        
0x01AA04|$06:$A9F4:8A      	TXA        
; given save slot number in A, set $99-$9A to pointer to second part of save slot data
; control flow target (from $A88F, $A899, $A8AD, $A8B7, $AA05)
0x01AA05|$06:$A9F5:0A      	ASL        
0x01AA06|$06:$A9F6:AA      	TAX        
0x01AA07|$06:$A9F7:BD F6 AD	LDA $ADF6,X
0x01AA0A|$06:$A9FA:85 99   	STA $99    
0x01AA0C|$06:$A9FC:BD F7 AD	LDA $ADF7,X
0x01AA0F|$06:$A9FF:85 9A   	STA $9A    
0x01AA11|$06:$AA01:60      	RTS        

; copy more data to second part of per-game save data
; control flow target (from $A968, $AB8C)
0x01AA12|$06:$AA02:AD DB 75	LDA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01AA15|$06:$AA05:20 F5 A9	JSR $A9F5  	; given save slot number in A, set $99-$9A to pointer to second part of save slot data
0x01AA18|$06:$AA08:A0 09   	LDY #$09   
0x01AA1A|$06:$AA0A:AD 6F 70	LDA $706F  	; current battle message delay, SRAM buffer
0x01AA1D|$06:$AA0D:91 99   	STA ($99),Y
0x01AA1F|$06:$AA0F:88      	DEY        
0x01AA20|$06:$AA10:AD 26 70	LDA $7026  
0x01AA23|$06:$AA13:91 99   	STA ($99),Y
0x01AA25|$06:$AA15:A2 03   	LDX #$03   
; control flow target (from $AA1E)
0x01AA27|$06:$AA17:88      	DEY        
0x01AA28|$06:$AA18:BD 63 70	LDA $7063,X	; party names, bytes 4-7, SRAM buffer
0x01AA2B|$06:$AA1B:91 99   	STA ($99),Y
0x01AA2D|$06:$AA1D:CA      	DEX        
0x01AA2E|$06:$AA1E:10 F7   	BPL $AA17  
0x01AA30|$06:$AA20:88      	DEY        
; control flow target (from $AA27)
0x01AA31|$06:$AA21:B9 09 70	LDA $7009,Y	; Midenhall name bytes 0-3, SRAM buffer
0x01AA34|$06:$AA24:91 99   	STA ($99),Y
0x01AA36|$06:$AA26:88      	DEY        
0x01AA37|$06:$AA27:10 F8   	BPL $AA21  
0x01AA39|$06:$AA29:60      	RTS        

; mark save game slot specified by $75DB as filled
; control flow target (from $AAAE, $AAD3)
0x01AA3A|$06:$AA2A:38      	SEC        
0x01AA3B|$06:$AA2B:A9 00   	LDA #$00   
0x01AA3D|$06:$AA2D:AE DB 75	LDX $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
; control flow target (from $AA32)
0x01AA40|$06:$AA30:2A      	ROL        
0x01AA41|$06:$AA31:CA      	DEX        
0x01AA42|$06:$AA32:10 FC   	BPL $AA30  	; keep shifting that 1 set bit until it's in the right position
0x01AA44|$06:$AA34:0D DA 75	ORA $75DA  	; bit field for which save game slots are filled
0x01AA47|$06:$AA37:8D DA 75	STA $75DA  	; bit field for which save game slots are filled
0x01AA4A|$06:$AA3A:60      	RTS        

; mark save game slot specified by $75DB as empty
; control flow target (from $AAEB)
0x01AA4B|$06:$AA3B:18      	CLC        
0x01AA4C|$06:$AA3C:A9 FF   	LDA #$FF   
0x01AA4E|$06:$AA3E:AE DB 75	LDX $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
; control flow target (from $AA43)
0x01AA51|$06:$AA41:2A      	ROL        
0x01AA52|$06:$AA42:CA      	DEX        
0x01AA53|$06:$AA43:10 FC   	BPL $AA41  	; keep shifting that 1 clear bit until it's in the right position
0x01AA55|$06:$AA45:2D DA 75	AND $75DA  	; bit field for which save game slots are filled
0x01AA58|$06:$AA48:8D DA 75	STA $75DA  	; bit field for which save game slots are filled
0x01AA5B|$06:$AA4B:60      	RTS        

; set $75D7,$75DB to #$FF (useless op?)
; control flow target (from $AAB1, $AAD6)
0x01AA5C|$06:$AA4C:A9 FF   	LDA #$FF   
0x01AA5E|$06:$AA4E:AE DB 75	LDX $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01AA61|$06:$AA51:9D D7 75	STA $75D7,X	; save slot 1 status (write-only?)
0x01AA64|$06:$AA54:60      	RTS        

; CONTINUE A QUEST handler
; indirect control flow target (via $ADE2)
0x01AA65|$06:$AA55:20 0C AB	JSR $AB0C  	; display filled slots selection menu, set A/$75DB to selected slot
0x01AA68|$06:$AA58:20 44 AB	JSR $AB44  	; copy current save game's data to save data buffer at $7000; CLC if data is valid, SEC if it's unrecoverable
0x01AA6B|$06:$AA5B:20 C7 AB	JSR $ABC7  	; copy save data from save data buffer at $7000 to system RAM; update Don Mahone quest status if applicable
; control flow target (from $AABA)
0x01AA6E|$06:$AA5E:68      	PLA        
0x01AA6F|$06:$AA5F:68      	PLA        
; call to code in a different bank ($0F:$C577)
0x01AA70|$06:$AA60:20 77 C5	JSR $C577  	; set $6144 to #$05
0x01AA73|$06:$AA63:60      	RTS        

; CHANGE MESSAGE SPEED handler
; indirect control flow target (via $ADE4)
0x01AA74|$06:$AA64:20 0C AB	JSR $AB0C  	; display filled slots selection menu, set A/$75DB to selected slot
0x01AA77|$06:$AA67:20 44 AB	JSR $AB44  	; copy current save game's data to save data buffer at $7000; CLC if data is valid, SEC if it's unrecoverable
0x01AA7A|$06:$AA6A:20 6E AA	JSR $AA6E  	; display Menu ID #$45: Game menu: select message speed, update message speed based on new selection
0x01AA7D|$06:$AA6D:60      	RTS        

; display Menu ID #$45: Game menu: select message speed, update message speed based on new selection
; control flow target (from $AA6A, $AAA9)
0x01AA7E|$06:$AA6E:AD 6F 70	LDA $706F  	; current battle message delay, SRAM buffer
0x01AA81|$06:$AA71:8D 2C 06	STA $062C  	; current battle message delay
0x01AA84|$06:$AA74:A9 45   	LDA #$45   	; Menu ID #$45: Game menu: select message speed
0x01AA86|$06:$AA76:20 93 A9	JSR $A993  	; open menu specified by A
0x01AA89|$06:$AA79:C9 FF   	CMP #$FF   
0x01AA8B|$06:$AA7B:F0 12   	BEQ $AA8F  	; pop JSR return address and RTS back to to display and handle main game menu
0x01AA8D|$06:$AA7D:AA      	TAX        
0x01AA8E|$06:$AA7E:BD BF AD	LDA $ADBF,X	; battle message delays (frames between prints; higher = slower)
0x01AA91|$06:$AA81:8D 6F 70	STA $706F  	; current battle message delay, SRAM buffer
0x01AA94|$06:$AA84:8D 2C 06	STA $062C  	; current battle message delay
0x01AA97|$06:$AA87:20 AD AC	JSR $ACAD  	; initialize the RNG based on 71 passes using SRAM data $7000-$7070 and save resulting seed to $7071-$7072
0x01AA9A|$06:$AA8A:20 87 AB	JSR $AB87  	; copy data from SRAM buffer to per-game save data
0x01AA9D|$06:$AA8D:18      	CLC        
0x01AA9E|$06:$AA8E:60      	RTS        

; pop JSR return address and RTS back to to display and handle main game menu
; control flow target (from $AA7B)
0x01AA9F|$06:$AA8F:68      	PLA        
0x01AAA0|$06:$AA90:68      	PLA        
0x01AAA1|$06:$AA91:38      	SEC        
0x01AAA2|$06:$AA92:60      	RTS        

; BEGIN A NEW QUEST handler
; indirect control flow target (via $ADE6)
0x01AAA3|$06:$AA93:A9 00   	LDA #$00   
0x01AAA5|$06:$AA95:8D 70 70	STA $7070  	; ????, SRAM buffer
0x01AAA8|$06:$AA98:20 15 AB	JSR $AB15  	; display empty slots selection menu, set A/$75DB to selected slot
0x01AAAB|$06:$AA9B:20 CD AC	JSR $ACCD  
0x01AAAE|$06:$AA9E:20 C0 AA	JSR $AAC0  	; if $0100 is [space], pop JSR return address and RTS back to to display and handle main game menu
0x01AAB1|$06:$AAA1:A9 46   	LDA #$46   	; NORMAL
0x01AAB3|$06:$AAA3:8D 2C 06	STA $062C  	; current battle message delay
0x01AAB6|$06:$AAA6:8D 6F 70	STA $706F  	; current battle message delay, SRAM buffer
0x01AAB9|$06:$AAA9:20 6E AA	JSR $AA6E  	; display Menu ID #$45: Game menu: select message speed, update message speed based on new selection
0x01AABC|$06:$AAAC:B0 0F   	BCS $AABD  	; impossible branch; if $AA6E finishes with SEC, it also popped its return address, so control flow does not end up here
0x01AABE|$06:$AAAE:20 2A AA	JSR $AA2A  	; mark save game slot specified by $75DB as filled
0x01AAC1|$06:$AAB1:20 4C AA	JSR $AA4C  	; set $75D7,$75DB to #$FF (useless op?)
0x01AAC4|$06:$AAB4:20 AD AC	JSR $ACAD  	; initialize the RNG based on 71 passes using SRAM data $7000-$7070 and save resulting seed to $7071-$7072
0x01AAC7|$06:$AAB7:20 87 AB	JSR $AB87  	; copy data from SRAM buffer to per-game save data
0x01AACA|$06:$AABA:4C 5E AA	JMP $AA5E  

; pop JSR return address and RTS back to to display and handle main game menu
; control flow target (from $AAAC)
0x01AACD|$06:$AABD:68      	PLA        
0x01AACE|$06:$AABE:68      	PLA        
0x01AACF|$06:$AABF:60      	RTS        

; if $0100 is [space], pop JSR return address and RTS back to to display and handle main game menu
; control flow target (from $AA9E)
0x01AAD0|$06:$AAC0:AD 00 01	LDA $0100  	; string copy buffer start (often referenced as $00FF,X)
0x01AAD3|$06:$AAC3:C9 5F   	CMP #$5F   	; Tile ID #$5F: [space]
0x01AAD5|$06:$AAC5:D0 02   	BNE $AAC9  
0x01AAD7|$06:$AAC7:68      	PLA        
0x01AAD8|$06:$AAC8:68      	PLA        
; control flow target (from $AAC5)
0x01AAD9|$06:$AAC9:60      	RTS        

; COPY A QUEST handler
; indirect control flow target (via $ADE8)
0x01AADA|$06:$AACA:20 0C AB	JSR $AB0C  	; display filled slots selection menu, set A/$75DB to selected slot
0x01AADD|$06:$AACD:20 44 AB	JSR $AB44  	; copy current save game's data to save data buffer at $7000; CLC if data is valid, SEC if it's unrecoverable
0x01AAE0|$06:$AAD0:20 15 AB	JSR $AB15  	; display empty slots selection menu, set A/$75DB to selected slot
0x01AAE3|$06:$AAD3:20 2A AA	JSR $AA2A  	; mark save game slot specified by $75DB as filled
0x01AAE6|$06:$AAD6:20 4C AA	JSR $AA4C  	; set $75D7,$75DB to #$FF (useless op?)
0x01AAE9|$06:$AAD9:20 87 AB	JSR $AB87  	; copy data from SRAM buffer to per-game save data
0x01AAEC|$06:$AADC:60      	RTS        

; ERASE A QUEST handler
; indirect control flow target (via $ADEA)
0x01AAED|$06:$AADD:20 0C AB	JSR $AB0C  	; display filled slots selection menu, set A/$75DB to selected slot
0x01AAF0|$06:$AAE0:20 FC AA	JSR $AAFC  	; display Menu ID #$43: Game menu: delete selected game and Menu ID #$19: General menu: YES/NO
0x01AAF3|$06:$AAE3:AE DB 75	LDX $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01AAF6|$06:$AAE6:A9 FE   	LDA #$FE   
0x01AAF8|$06:$AAE8:9D D7 75	STA $75D7,X	; save slot 1 status (write-only?)
; control flow target (from $A965)
0x01AAFB|$06:$AAEB:20 3B AA	JSR $AA3B  	; mark save game slot specified by $75DB as empty
0x01AAFE|$06:$AAEE:A2 72   	LDX #$72   	; fill save game buffer with #$00
0x01AB00|$06:$AAF0:A9 00   	LDA #$00   
; control flow target (from $AAF6)
0x01AB02|$06:$AAF2:9D 00 70	STA $7000,X	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4), SRAM buffer
0x01AB05|$06:$AAF5:CA      	DEX        
0x01AB06|$06:$AAF6:10 FA   	BPL $AAF2  
0x01AB08|$06:$AAF8:20 87 AB	JSR $AB87  	; copy data from SRAM buffer to per-game save data
0x01AB0B|$06:$AAFB:60      	RTS        

; display Menu ID #$43: Game menu: delete selected game and Menu ID #$19: General menu: YES/NO
; control flow target (from $AAE0)
0x01AB0C|$06:$AAFC:A9 43   	LDA #$43   	; Menu ID #$43: Game menu: delete selected game
0x01AB0E|$06:$AAFE:20 93 A9	JSR $A993  	; open menu specified by A
0x01AB11|$06:$AB01:A9 19   	LDA #$19   	; Menu ID #$19: General menu: YES/NO
0x01AB13|$06:$AB03:20 93 A9	JSR $A993  	; open menu specified by A
0x01AB16|$06:$AB06:AA      	TAX        
; if NO, pop JSR return address and RTS back to to display and handle main game menu
0x01AB17|$06:$AB07:F0 02   	BEQ $AB0B  
0x01AB19|$06:$AB09:68      	PLA        
0x01AB1A|$06:$AB0A:68      	PLA        
; control flow target (from $AB07)
0x01AB1B|$06:$AB0B:60      	RTS        

; display filled slots selection menu, set A/$75DB to selected slot
; control flow target (from $AA55, $AA64, $AACA, $AADD)
0x01AB1C|$06:$AB0C:A9 00   	LDA #$00   	; get index for filled slots
0x01AB1E|$06:$AB0E:20 32 AB	JSR $AB32  	; set A to offset of appropriate save slot selection menu: A = #$00 gets index for filled slots, A = #$FF gets index for empty slots; also sets $75DB to offset for corresponding current slot lut
0x01AB21|$06:$AB11:69 3C   	ADC #$3C   	; base menu ID
0x01AB23|$06:$AB13:D0 07   	BNE $AB1C  
; display empty slots selection menu, set A/$75DB to selected slot
; control flow target (from $AA98, $AAD0)
0x01AB25|$06:$AB15:A9 FF   	LDA #$FF   	; get index for empty slots
0x01AB27|$06:$AB17:20 32 AB	JSR $AB32  	; set A to offset of appropriate save slot selection menu: A = #$00 gets index for filled slots, A = #$FF gets index for empty slots; also sets $75DB to offset for corresponding current slot lut
0x01AB2A|$06:$AB1A:69 35   	ADC #$35   	; base menu ID
; control flow target (from $AB13)
0x01AB2C|$06:$AB1C:20 93 A9	JSR $A993  	; open menu specified by A
0x01AB2F|$06:$AB1F:C9 FF   	CMP #$FF   
0x01AB31|$06:$AB21:F0 0C   	BEQ $AB2F  	; pop JSR return address and RTS back to to display and handle main game menu
0x01AB33|$06:$AB23:18      	CLC        
0x01AB34|$06:$AB24:6D DB 75	ADC $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values; offset for current slot lookup table
0x01AB37|$06:$AB27:AA      	TAX        
0x01AB38|$06:$AB28:BD C2 AD	LDA $ADC2,X	; lookup table for save game slot based on save game slot selection type + menu selection index
0x01AB3B|$06:$AB2B:8D DB 75	STA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01AB3E|$06:$AB2E:60      	RTS        

; pop JSR return address and RTS back to to display and handle main game menu
; control flow target (from $AB21)
0x01AB3F|$06:$AB2F:68      	PLA        
0x01AB40|$06:$AB30:68      	PLA        
0x01AB41|$06:$AB31:60      	RTS        

; set A to offset of appropriate save slot selection menu: A = #$00 gets index for filled slots, A = #$FF gets index for empty slots; also sets $75DB to offset for corresponding current slot lut
; control flow target (from $AB0E, $AB17)
0x01AB42|$06:$AB32:4D DA 75	EOR $75DA  	; bit field for which save game slots are filled
0x01AB45|$06:$AB35:29 07   	AND #$07   	; 3 save slots
0x01AB47|$06:$AB37:AA      	TAX        
0x01AB48|$06:$AB38:CA      	DEX        
0x01AB49|$06:$AB39:8A      	TXA        
0x01AB4A|$06:$AB3A:85 99   	STA $99    
0x01AB4C|$06:$AB3C:0A      	ASL        
0x01AB4D|$06:$AB3D:65 99   	ADC $99    
0x01AB4F|$06:$AB3F:8D DB 75	STA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01AB52|$06:$AB42:8A      	TXA        
0x01AB53|$06:$AB43:60      	RTS        

; copy current save game's data to save data buffer at $7000; CLC if data is valid, SEC if it's unrecoverable
; control flow target (from $A93B, $AA58, $AA67, $AACD)
0x01AB54|$06:$AB44:20 90 AB	JSR $AB90  	; set $99-$9A to pointer to current game's save slot, $9B-$9C to pointer to save data buffer at $7000
0x01AB57|$06:$AB47:A2 00   	LDX #$00   	; save data copy number
; control flow target (from $AB7B)
0x01AB59|$06:$AB49:A0 72   	LDY #$72   	; copy #$73 bytes of data from current game's save slot to save data buffer at $7000
; control flow target (from $AB50)
0x01AB5B|$06:$AB4B:B1 99   	LDA ($99),Y
0x01AB5D|$06:$AB4D:91 9B   	STA ($9B),Y
0x01AB5F|$06:$AB4F:88      	DEY        
0x01AB60|$06:$AB50:10 F9   	BPL $AB4B  
0x01AB62|$06:$AB52:98      	TYA        	; save Y and X on the stack
0x01AB63|$06:$AB53:48      	PHA        
0x01AB64|$06:$AB54:8A      	TXA        
0x01AB65|$06:$AB55:48      	PHA        
0x01AB66|$06:$AB56:20 BB AC	JSR $ACBB  	; initialize the RNG based on 71 passes using SRAM data $7000-$7070
0x01AB69|$06:$AB59:68      	PLA        	; restore X and Y from the stack
0x01AB6A|$06:$AB5A:AA      	TAX        
0x01AB6B|$06:$AB5B:68      	PLA        
0x01AB6C|$06:$AB5C:A8      	TAY        
0x01AB6D|$06:$AB5D:AD 71 70	LDA $7071  	; RNG byte 0, SRAM buffer
0x01AB70|$06:$AB60:C5 32   	CMP $32    	; RNG byte 0
0x01AB72|$06:$AB62:D0 07   	BNE $AB6B  	; save data corrupted!
0x01AB74|$06:$AB64:AD 72 70	LDA $7072  	; RNG byte 1, SRAM buffer
0x01AB77|$06:$AB67:C5 33   	CMP $33    	; RNG byte 1
0x01AB79|$06:$AB69:F0 14   	BEQ $AB7F  	; save data valid!
; save data corrupted!
; control flow target (from $AB62)
0x01AB7B|$06:$AB6B:18      	CLC        	; add #$159 (i.e. #$73 * 3) to $99-$9A
0x01AB7C|$06:$AB6C:A9 59   	LDA #$59   
0x01AB7E|$06:$AB6E:65 99   	ADC $99    
0x01AB80|$06:$AB70:85 99   	STA $99    
0x01AB82|$06:$AB72:A9 01   	LDA #$01   
0x01AB84|$06:$AB74:65 9A   	ADC $9A    
0x01AB86|$06:$AB76:85 9A   	STA $9A    
0x01AB88|$06:$AB78:E8      	INX        	; save data copy number
0x01AB89|$06:$AB79:E0 04   	CPX #$04   	; there are 4 copies of save data
0x01AB8B|$06:$AB7B:D0 CC   	BNE $AB49  
0x01AB8D|$06:$AB7D:38      	SEC        	; flag data as unrecoverable :(
0x01AB8E|$06:$AB7E:60      	RTS        

; save data valid!
; control flow target (from $AB69)
0x01AB8F|$06:$AB7F:8A      	TXA        
0x01AB90|$06:$AB80:F0 03   	BEQ $AB85  	; if first save data copy was bad, update all copies with good data
0x01AB92|$06:$AB82:20 AA AB	JSR $ABAA  	; copy save data from save data buffer to current game's save slot, making X copies of the data spaced 3 saves slots away
; control flow target (from $AB80)
0x01AB95|$06:$AB85:18      	CLC        	; flag data as valid
0x01AB96|$06:$AB86:60      	RTS        

; copy data from SRAM buffer to per-game save data
; control flow target (from $A88B, $AA8A, $AAB7, $AAD9, $AAF8)
0x01AB97|$06:$AB87:A2 04   	LDX #$04   	; make 4 copies of save data
0x01AB99|$06:$AB89:20 AA AB	JSR $ABAA  	; copy save data from save data buffer to current game's save slot, making X copies of the data spaced 3 saves slots away
0x01AB9C|$06:$AB8C:20 02 AA	JSR $AA02  	; copy more data to second part of per-game save data
0x01AB9F|$06:$AB8F:60      	RTS        

; set $99-$9A to pointer to current game's save slot, $9B-$9C to pointer to save data buffer at $7000
; control flow target (from $AB44, $ABAA)
0x01ABA0|$06:$AB90:AD DB 75	LDA $75DB  	; in game: current game save slot; out of game: various temporary game menu setup values
0x01ABA3|$06:$AB93:0A      	ASL        
0x01ABA4|$06:$AB94:A8      	TAY        
0x01ABA5|$06:$AB95:B9 EE AD	LDA $ADEE,Y	; pointers to start of per-game save data
0x01ABA8|$06:$AB98:85 99   	STA $99    
0x01ABAA|$06:$AB9A:B9 EF AD	LDA $ADEF,Y
0x01ABAD|$06:$AB9D:85 9A   	STA $9A    
0x01ABAF|$06:$AB9F:AD EC AD	LDA $ADEC  	; pointer to start of current game save data buffer
0x01ABB2|$06:$ABA2:85 9B   	STA $9B    
0x01ABB4|$06:$ABA4:AD ED AD	LDA $ADED  
0x01ABB7|$06:$ABA7:85 9C   	STA $9C    
0x01ABB9|$06:$ABA9:60      	RTS        

; copy save data from save data buffer to current game's save slot, making X copies of the data spaced 3 saves slots away
; control flow target (from $AB82, $AB89)
0x01ABBA|$06:$ABAA:20 90 AB	JSR $AB90  	; set $99-$9A to pointer to current game's save slot, $9B-$9C to pointer to save data buffer at $7000
; control flow target (from $ABC4)
0x01ABBD|$06:$ABAD:A0 72   	LDY #$72   
; control flow target (from $ABB4)
0x01ABBF|$06:$ABAF:B1 9B   	LDA ($9B),Y
0x01ABC1|$06:$ABB1:91 99   	STA ($99),Y
0x01ABC3|$06:$ABB3:88      	DEY        
0x01ABC4|$06:$ABB4:10 F9   	BPL $ABAF  
0x01ABC6|$06:$ABB6:18      	CLC        	; add #$72 * 3 = #$0159 to write address $99-$9A
0x01ABC7|$06:$ABB7:A9 59   	LDA #$59   
0x01ABC9|$06:$ABB9:65 99   	ADC $99    
0x01ABCB|$06:$ABBB:85 99   	STA $99    
0x01ABCD|$06:$ABBD:A9 01   	LDA #$01   
0x01ABCF|$06:$ABBF:65 9A   	ADC $9A    
0x01ABD1|$06:$ABC1:85 9A   	STA $9A    
0x01ABD3|$06:$ABC3:CA      	DEX        
0x01ABD4|$06:$ABC4:D0 E7   	BNE $ABAD  	; make X copies of the save data
0x01ABD6|$06:$ABC6:60      	RTS        

; copy save data from save data buffer at $7000 to system RAM; update Don Mahone quest status if applicable
; from $0F:$C6F9 via $8006
; control flow target (from $AA5B)
; indirect control flow target (via $8006)
0x01ABD7|$06:$ABC7:AD 00 70	LDA $7000  	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4), SRAM buffer
0x01ABDA|$06:$ABCA:85 CA   	STA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x01ABDC|$06:$ABCC:AD 01 70	LDA $7001  	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered), SRAM buffer
0x01ABDF|$06:$ABCF:F0 02   	BEQ $ABD3  
0x01ABE1|$06:$ABD1:A9 03   	LDA #$03   
; control flow target (from $ABCF)
0x01ABE3|$06:$ABD3:85 CD   	STA $CD    	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered)
0x01ABE5|$06:$ABD5:AD 02 70	LDA $7002  	; Tuhn Watergate open flag (#$00 = closed, #$01 = open), SRAM buffer
0x01ABE8|$06:$ABD8:85 CE   	STA $CE    	; Tuhn Watergate open flag (#$00 = closed, #$01 = open)
0x01ABEA|$06:$ABDA:AD 03 70	LDA $7003  	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01ABED|$06:$ABDD:85 CF   	STA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01ABEF|$06:$ABDF:AD 04 70	LDA $7004  	; Sea Cave shoal status (#$00 = shoals up, others = shoals down), SRAM buffer
0x01ABF2|$06:$ABE2:8D F8 05	STA $05F8  	; Sea Cave shoal status (#$00 = shoals up, others = shoals down)
0x01ABF5|$06:$ABE5:AD 05 70	LDA $7005  	; Crests found bit field, SRAM buffer
0x01ABF8|$06:$ABE8:8D 12 01	STA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x01ABFB|$06:$ABEB:AD 06 70	LDA $7006  	; last save point ID, SRAM buffer
0x01ABFE|$06:$ABEE:8D 48 00	STA $0048  	; last save point ID
0x01AC01|$06:$ABF1:AD 07 70	LDA $7007  	; party gold, low byte, SRAM buffer
0x01AC04|$06:$ABF4:8D 24 06	STA $0624  	; party gold, low byte
0x01AC07|$06:$ABF7:AD 08 70	LDA $7008  	; party gold, high byte, SRAM buffer
0x01AC0A|$06:$ABFA:8D 25 06	STA $0625  	; party gold, high byte
0x01AC0D|$06:$ABFD:A2 35   	LDX #$35   
; control flow target (from $AC06)
0x01AC0F|$06:$ABFF:BD 15 70	LDA $7015,X	; hero data from $062D, SRAM buffer
0x01AC12|$06:$AC02:9D 2D 06	STA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01AC15|$06:$AC05:CA      	DEX        
0x01AC16|$06:$AC06:10 F7   	BPL $ABFF  
0x01AC18|$06:$AC08:A2 17   	LDX #$17   
; control flow target (from $AC11)
0x01AC1A|$06:$AC0A:BD 4B 70	LDA $704B,X	; party inventory, SRAM buffer
0x01AC1D|$06:$AC0D:9D 00 06	STA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x01AC20|$06:$AC10:CA      	DEX        
0x01AC21|$06:$AC11:10 F7   	BPL $AC0A  
0x01AC23|$06:$AC13:A2 03   	LDX #$03   
; control flow target (from $AC28)
0x01AC25|$06:$AC15:BD 09 70	LDA $7009,X	; Midenhall name bytes 0-3, SRAM buffer
0x01AC28|$06:$AC18:9D 13 01	STA $0113,X	; Midenhall name bytes 0-3 + terminator
0x01AC2B|$06:$AC1B:BD 0D 70	LDA $700D,X	; Cannock name bytes 0-3, SRAM buffer
0x01AC2E|$06:$AC1E:9D 18 01	STA $0118,X	; Cannock name bytes 0-3 + terminator
0x01AC31|$06:$AC21:BD 11 70	LDA $7011,X	; Moonbrooke name bytes 0-3, SRAM buffer
0x01AC34|$06:$AC24:9D 1D 01	STA $011D,X	; Moonbrooke name bytes 0-3 + terminator
0x01AC37|$06:$AC27:CA      	DEX        
0x01AC38|$06:$AC28:10 EB   	BPL $AC15  
0x01AC3A|$06:$AC2A:A2 0B   	LDX #$0B   
; control flow target (from $AC33)
0x01AC3C|$06:$AC2C:BD 63 70	LDA $7063,X	; party names, bytes 4-7, SRAM buffer
0x01AC3F|$06:$AC2F:9D 86 01	STA $0186,X	; Midenhall name bytes 4-7
0x01AC42|$06:$AC32:CA      	DEX        
0x01AC43|$06:$AC33:10 F7   	BPL $AC2C  
0x01AC45|$06:$AC35:AD 6F 70	LDA $706F  	; current battle message delay, SRAM buffer
0x01AC48|$06:$AC38:8D 2C 06	STA $062C  	; current battle message delay
0x01AC4B|$06:$AC3B:60      	RTS        

; copy save data from system RAM to $7000-$706F
; control flow target (from $A885)
0x01AC4C|$06:$AC3C:A5 CA   	LDA $CA    	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4)
0x01AC4E|$06:$AC3E:8D 00 70	STA $7000  	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4), SRAM buffer
0x01AC51|$06:$AC41:A5 CD   	LDA $CD    	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered)
0x01AC53|$06:$AC43:8D 01 70	STA $7001  	; Don Mahone quest status (#$00 = not started, #$01 = ingredients delivered, #$03 = game loaded after ingredients delivered), SRAM buffer
0x01AC56|$06:$AC46:A5 CE   	LDA $CE    	; Tuhn Watergate open flag (#$00 = closed, #$01 = open)
0x01AC58|$06:$AC48:8D 02 70	STA $7002  	; Tuhn Watergate open flag (#$00 = closed, #$01 = open), SRAM buffer
0x01AC5B|$06:$AC4B:A5 CF   	LDA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01AC5D|$06:$AC4D:8D 03 70	STA $7003  	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01AC60|$06:$AC50:AD F8 05	LDA $05F8  	; Sea Cave shoal status (#$00 = shoals up, others = shoals down)
0x01AC63|$06:$AC53:8D 04 70	STA $7004  	; Sea Cave shoal status (#$00 = shoals up, others = shoals down), SRAM buffer
0x01AC66|$06:$AC56:AD 12 01	LDA $0112  	; Crests found bit field (#$10 = Life, #$80 = Water, #$04 = Moon, #$02 = Stars, #$01 = Sun)
0x01AC69|$06:$AC59:8D 05 70	STA $7005  	; Crests found bit field, SRAM buffer
0x01AC6C|$06:$AC5C:AD 48 00	LDA $0048  	; last save point ID
0x01AC6F|$06:$AC5F:8D 06 70	STA $7006  	; last save point ID, SRAM buffer
0x01AC72|$06:$AC62:AD 24 06	LDA $0624  	; party gold, low byte
0x01AC75|$06:$AC65:8D 07 70	STA $7007  	; party gold, low byte, SRAM buffer
0x01AC78|$06:$AC68:AD 25 06	LDA $0625  	; party gold, high byte
0x01AC7B|$06:$AC6B:8D 08 70	STA $7008  	; party gold, high byte, SRAM buffer
0x01AC7E|$06:$AC6E:A2 35   	LDX #$35   
; control flow target (from $AC77)
0x01AC80|$06:$AC70:BD 2D 06	LDA $062D,X	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01AC83|$06:$AC73:9D 15 70	STA $7015,X	; hero data from $062D, SRAM buffer
0x01AC86|$06:$AC76:CA      	DEX        
0x01AC87|$06:$AC77:10 F7   	BPL $AC70  
0x01AC89|$06:$AC79:A2 17   	LDX #$17   
; control flow target (from $AC82)
0x01AC8B|$06:$AC7B:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x01AC8E|$06:$AC7E:9D 4B 70	STA $704B,X	; party inventory, SRAM buffer
0x01AC91|$06:$AC81:CA      	DEX        
0x01AC92|$06:$AC82:10 F7   	BPL $AC7B  
0x01AC94|$06:$AC84:A2 03   	LDX #$03   
; control flow target (from $AC99)
0x01AC96|$06:$AC86:BD 13 01	LDA $0113,X	; Midenhall name bytes 0-3 + terminator
0x01AC99|$06:$AC89:9D 09 70	STA $7009,X	; Midenhall name bytes 0-3, SRAM buffer
0x01AC9C|$06:$AC8C:BD 18 01	LDA $0118,X	; Cannock name bytes 0-3 + terminator
0x01AC9F|$06:$AC8F:9D 0D 70	STA $700D,X	; Cannock name bytes 0-3, SRAM buffer
0x01ACA2|$06:$AC92:BD 1D 01	LDA $011D,X	; Moonbrooke name bytes 0-3 + terminator
0x01ACA5|$06:$AC95:9D 11 70	STA $7011,X	; Moonbrooke name bytes 0-3, SRAM buffer
0x01ACA8|$06:$AC98:CA      	DEX        
0x01ACA9|$06:$AC99:10 EB   	BPL $AC86  
0x01ACAB|$06:$AC9B:A2 0B   	LDX #$0B   
; control flow target (from $ACA4)
0x01ACAD|$06:$AC9D:BD 86 01	LDA $0186,X	; Midenhall name bytes 4-7
0x01ACB0|$06:$ACA0:9D 63 70	STA $7063,X	; party names, bytes 4-7, SRAM buffer
0x01ACB3|$06:$ACA3:CA      	DEX        
0x01ACB4|$06:$ACA4:10 F7   	BPL $AC9D  
0x01ACB6|$06:$ACA6:AD 2C 06	LDA $062C  	; current battle message delay
0x01ACB9|$06:$ACA9:8D 6F 70	STA $706F  	; current battle message delay, SRAM buffer
0x01ACBC|$06:$ACAC:60      	RTS        

; initialize the RNG based on 71 passes using SRAM data $7000-$7070 and save resulting seed to $7071-$7072
; control flow target (from $A888, $AA87, $AAB4)
0x01ACBD|$06:$ACAD:20 BB AC	JSR $ACBB  	; initialize the RNG based on 71 passes using SRAM data $7000-$7070
0x01ACC0|$06:$ACB0:A5 32   	LDA $32    	; RNG byte 0
0x01ACC2|$06:$ACB2:8D 71 70	STA $7071  	; RNG byte 0, SRAM buffer
0x01ACC5|$06:$ACB5:A5 33   	LDA $33    	; RNG byte 1
0x01ACC7|$06:$ACB7:8D 72 70	STA $7072  	; RNG byte 1, SRAM buffer
0x01ACCA|$06:$ACBA:60      	RTS        

; initialize the RNG based on 71 passes using SRAM data $7000-$7070
; control flow target (from $AB56, $ACAD)
0x01ACCB|$06:$ACBB:A2 70   	LDX #$70   
0x01ACCD|$06:$ACBD:86 32   	STX $32    	; RNG byte 0
0x01ACCF|$06:$ACBF:86 33   	STX $33    	; RNG byte 1
; control flow target (from $ACCA)
0x01ACD1|$06:$ACC1:BD 00 70	LDA $7000,X	; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4), SRAM buffer
0x01ACD4|$06:$ACC4:85 0C   	STA $0C    
; call to code in a different bank ($0F:$C3B6)
0x01ACD6|$06:$ACC6:20 B6 C3	JSR $C3B6  	; generate a random number and store it in $32-$33 (one pass)
0x01ACD9|$06:$ACC9:CA      	DEX        
0x01ACDA|$06:$ACCA:10 F5   	BPL $ACC1  
0x01ACDC|$06:$ACCC:60      	RTS        

; control flow target (from $AA9B)
0x01ACDD|$06:$ACCD:20 86 AE	JSR $AE86  
0x01ACE0|$06:$ACD0:A2 03   	LDX #$03   
; save Midenhall's name
; control flow target (from $ACE5)
0x01ACE2|$06:$ACD2:BD 04 01	LDA $0104,X
0x01ACE5|$06:$ACD5:9D 63 70	STA $7063,X	; party names, bytes 4-7, SRAM buffer
0x01ACE8|$06:$ACD8:9D 86 01	STA $0186,X	; Midenhall name bytes 4-7
0x01ACEB|$06:$ACDB:BD 00 01	LDA $0100,X	; string copy buffer start (often referenced as $00FF,X)
0x01ACEE|$06:$ACDE:9D 09 70	STA $7009,X	; Midenhall name bytes 0-3, SRAM buffer
0x01ACF1|$06:$ACE1:9D 13 01	STA $0113,X	; Midenhall name bytes 0-3 + terminator
0x01ACF4|$06:$ACE4:CA      	DEX        
0x01ACF5|$06:$ACE5:10 EB   	BPL $ACD2  
0x01ACF7|$06:$ACE7:20 EB AC	JSR $ACEB  	; generate and save Cannock/Moonbrooke's names
0x01ACFA|$06:$ACEA:60      	RTS        

; generate and save Cannock/Moonbrooke's names
; control flow target (from $ACE7)
0x01ACFB|$06:$ACEB:A9 00   	LDA #$00   
0x01ACFD|$06:$ACED:A2 03   	LDX #$03   
0x01ACFF|$06:$ACEF:18      	CLC        
; control flow target (from $ACF7)
0x01AD00|$06:$ACF0:7D 09 70	ADC $7009,X	; Midenhall name bytes 0-3, SRAM buffer; first 4 characters of Midenhall's name
0x01AD03|$06:$ACF3:7D 63 70	ADC $7063,X	; party names, bytes 4-7, SRAM buffer; last 4 characters of Midenhall's name
0x01AD06|$06:$ACF6:CA      	DEX        
0x01AD07|$06:$ACF7:10 F7   	BPL $ACF0  
0x01AD09|$06:$ACF9:48      	PHA        
0x01AD0A|$06:$ACFA:29 07   	AND #$07   	; Cannock's name is based on bits 0-2 of the sum of Midenhall's name
0x01AD0C|$06:$ACFC:0A      	ASL        	; << 3 since names are 8 bytes long
0x01AD0D|$06:$ACFD:0A      	ASL        
0x01AD0E|$06:$ACFE:0A      	ASL        
0x01AD0F|$06:$ACFF:AA      	TAX        
0x01AD10|$06:$AD00:A0 00   	LDY #$00   
; save Cannock's name
; control flow target (from $AD18)
0x01AD12|$06:$AD02:BD 39 AD	LDA $AD39,X	; Prince of Cannock Names, first 4 bytes; pointer to list of Cannock names, starting at 0th byte
0x01AD15|$06:$AD05:99 0D 70	STA $700D,Y	; Cannock name bytes 0-3, SRAM buffer; store the first 4 characters in SRAM
0x01AD18|$06:$AD08:99 18 01	STA $0118,Y	; Cannock name bytes 0-3 + terminator; store the first 4 characters in RAM
0x01AD1B|$06:$AD0B:BD 3D AD	LDA $AD3D,X	; Prince of Cannock Names, last 4 bytes; pointer to list of Cannock names, starting at 4th byte
0x01AD1E|$06:$AD0E:99 67 70	STA $7067,Y	; store the last 4 characters in SRAM
0x01AD21|$06:$AD11:99 8A 01	STA $018A,Y	; Cannock name bytes 4-7; store the last 4 characters in RAM
0x01AD24|$06:$AD14:E8      	INX        
0x01AD25|$06:$AD15:C8      	INY        
0x01AD26|$06:$AD16:C0 04   	CPY #$04   
0x01AD28|$06:$AD18:D0 E8   	BNE $AD02  
0x01AD2A|$06:$AD1A:68      	PLA        
0x01AD2B|$06:$AD1B:29 38   	AND #$38   	; Moonbrooke's name is based on bits 3-6 of the sum of Midenhall's name
0x01AD2D|$06:$AD1D:AA      	TAX        
0x01AD2E|$06:$AD1E:A0 00   	LDY #$00   
; save Moonbrooke's name
; control flow target (from $AD36)
0x01AD30|$06:$AD20:BD 79 AD	LDA $AD79,X	; Princess of Moonbrooke Names, first 4 bytes; pointer to list of Moonbrooke names, starting at 0th byte
0x01AD33|$06:$AD23:99 11 70	STA $7011,Y	; Moonbrooke name bytes 0-3, SRAM buffer; store the first 4 characters in SRAM
0x01AD36|$06:$AD26:99 1D 01	STA $011D,Y	; Moonbrooke name bytes 0-3 + terminator; store the first 4 characters in RAM
0x01AD39|$06:$AD29:BD 7D AD	LDA $AD7D,X	; Princess of Moonbrooke Names, last 4 bytes; pointer to list of Moonbrooke names, starting at 0th byte
0x01AD3C|$06:$AD2C:99 6B 70	STA $706B,Y	; store the last 4 characters in SRAM
0x01AD3F|$06:$AD2F:99 8E 01	STA $018E,Y	; Moonbrooke name bytes 4-7; store the last 4 characters in RAM
0x01AD42|$06:$AD32:E8      	INX        
0x01AD43|$06:$AD33:C8      	INY        
0x01AD44|$06:$AD34:C0 04   	CPY #$04   
0x01AD46|$06:$AD36:D0 E8   	BNE $AD20  
0x01AD48|$06:$AD38:60      	RTS        


; code -> data
; Prince of Cannock Names, first 4 bytes
; indexed data load target (from $AD02)
0x01AD49|$06:$AD39:25 1B 0A 17
; Prince of Cannock Names, last 4 bytes
; indexed data load target (from $AD0B)
0x01AD4D|$06:$AD3D:            5F 5F 5F 5F	; "Bran    "
0x01AD51|$06:$AD41:2A 15 22 17 17 5F 5F 5F	; "Glynn   "
0x01AD59|$06:$AD49:37 0A 15 12 17 1D 5F 5F	; "Talint  "
0x01AD61|$06:$AD51:31 1E 16 18 1B 5F 5F 5F	; "Numor   "
0x01AD69|$06:$AD59:2F 0A 1B 1C 5F 5F 5F 5F	; "Lars    "
0x01AD71|$06:$AD61:32 1B 0F 0E 18 5F 5F 5F	; "Orfeo   "
0x01AD79|$06:$AD69:24 1B 1D 11 18 5F 5F 5F	; "Artho   "
0x01AD81|$06:$AD71:28 1C 10 0A 1B 5F 5F 5F	; "Esgar   "
; Princess of Moonbrooke Names, first 4 bytes
; indexed data load target (from $AD20)
0x01AD89|$06:$AD79:39 0A 1B 12
; Princess of Moonbrooke Names, last 4 bytes
; indexed data load target (from $AD29)
0x01AD8D|$06:$AD7D:            0A 5F 5F 5F	; "Varia   "
0x01AD91|$06:$AD81:28 15 0A 17 12 5F 5F 5F	; "Elani   "
0x01AD99|$06:$AD89:32 15 15 12 1C 0A 5F 5F	; "Ollisa  "
0x01ADA1|$06:$AD91:35 18 23 5F 5F 5F 5F 5F	; "Roz     "
0x01ADA9|$06:$AD99:2E 0A 12 15 12 17 5F 5F	; "Kailin  "
0x01ADB1|$06:$ADA1:33 0E 1D 0A 5F 5F 5F 5F	; "Peta    "
0x01ADB9|$06:$ADA9:2C 15 15 22 1D 11 5F 5F	; "Illyth  "
0x01ADC1|$06:$ADB1:2A 20 0E 17 5F 5F 5F 5F	; "Gwen    "
; indexed data load target (from $A8CC, $A91B)
0x01ADC9|$06:$ADB9:44 51 32 55 53 41
; battle message delays (frames between prints; higher = slower)
; indexed data load target (from $AA7E)
0x01ADCF|$06:$ADBF:28	; 40 frames
0x01ADD0|$06:$ADC0:46	; 70 frames
0x01ADD1|$06:$ADC1:FF	; 255 frames
; lookup table for save game slot based on save game slot selection type + menu selection index
; only slot 0
; indexed data load target (from $AB28)
0x01ADD2|$06:$ADC2:00	; slot 0
0x01ADD3|$06:$ADC3:00	; (impossible)
0x01ADD4|$06:$ADC4:00	; (impossible)
; only slot 1
0x01ADD5|$06:$ADC5:01	; slot 1
0x01ADD6|$06:$ADC6:00	; (impossible)
0x01ADD7|$06:$ADC7:00	; (impossible)
; slots 0 and 1
0x01ADD8|$06:$ADC8:00	; slot 0
0x01ADD9|$06:$ADC9:01	; slot 1
0x01ADDA|$06:$ADCA:00	; (impossible)
; only slot 2
0x01ADDB|$06:$ADCB:02	; slot 2
0x01ADDC|$06:$ADCC:00	; (impossible)
0x01ADDD|$06:$ADCD:00	; (impossible)
; slots 0 and 2
0x01ADDE|$06:$ADCE:00	; slot 0
0x01ADDF|$06:$ADCF:02	; slot 2
0x01ADE0|$06:$ADD0:00	; (impossible)
; slots 1 and 2
0x01ADE1|$06:$ADD1:01	; slot 1
0x01ADE2|$06:$ADD2:02	; slot 2
0x01ADE3|$06:$ADD3:00	; (impossible)
; all 3 slots
0x01ADE4|$06:$ADD4:00	; slot 0
0x01ADE5|$06:$ADD5:01	; slot 1
0x01ADE6|$06:$ADD6:02	; slot 2
; index into jump table at $ADE2
; indexed data load target (from $A9D4)
0x01ADE7|$06:$ADD7:00	; CONTINUE A QUEST
0x01ADE8|$06:$ADD8:01	; CHANGE MESSAGE SPEED
0x01ADE9|$06:$ADD9:04	; ERASE A QUEST
0x01ADEA|$06:$ADDA:00	; (impossible)
0x01ADEB|$06:$ADDB:00	; (impossible)
0x01ADEC|$06:$ADDC:00	; CONTINUE A QUEST
0x01ADED|$06:$ADDD:01	; CHANGE MESSAGE SPEED
0x01ADEE|$06:$ADDE:02	; BEGIN A NEW QUEST
0x01ADEF|$06:$ADDF:03	; COPY A QUEST
0x01ADF0|$06:$ADE0:04	; ERASE A QUEST
0x01ADF1|$06:$ADE1:02	; BEGIN A NEW QUEST
; jump table for main game menu handlers
; indexed data load target (from $A9D9)
0x01ADF2|$06:$ADE2:55
; indexed data load target (from $A9DE)
0x01ADF3|$06:$ADE3:   AA	; $06:$AA55; CONTINUE A QUEST handler
0x01ADF4|$06:$ADE4:64 AA	; $06:$AA64; CHANGE MESSAGE SPEED handler
0x01ADF6|$06:$ADE6:93 AA	; $06:$AA93; BEGIN A NEW QUEST handler
0x01ADF8|$06:$ADE8:CA AA	; $06:$AACA; COPY A QUEST handler
0x01ADFA|$06:$ADEA:DD AA	; $06:$AADD; ERASE A QUEST handler
; pointer to start of current game save data buffer
; data load target (from $AB9F)
0x01ADFC|$06:$ADEC:00
; data load target (from $ABA4)
0x01ADFD|$06:$ADED:   70	; $7000; Cannock runaround quest status (0 = start of game, 0 -> 1 = talked to King Cannock, 1 -> 2 = said YES to seeking Cannock in Spring of Bravery, 2 -> 3 = talked to King Midenhall; adding Cannock sets this to 3; some code checks for 4), SRAM buffer
; pointers to start of per-game save data
; indexed data load target (from $AB95)
0x01ADFE|$06:$ADEE:73
; indexed data load target (from $AB9A)
0x01ADFF|$06:$ADEF:   70	; $7073; start of save game 1 backup #1
0x01AE00|$06:$ADF0:E6 70	; $70E6; start of save game 1 backup #2
0x01AE02|$06:$ADF2:59 71	; $7159; start of save game 1 backup #3
; data load target (from $A8E3)
0x01AE04|$06:$ADF4:64
; data load target (from $A8E9)
0x01AE05|$06:$ADF5:   75	; $7564
; indexed data load target (from $A9F7)
0x01AE06|$06:$ADF6:DC
; indexed data load target (from $A9FC)
0x01AE07|$06:$ADF7:   75	; $75DC
0x01AE08|$06:$ADF8:E6 75	; $75E6
0x01AE0A|$06:$ADFA:F0 75	; $75F0

; data -> code
; given a selected list index in A, an item type in X, and a hero ID in $4A, set A to the A'th item of type X in hero $4A's inventory
; from $0F:$F4E6, $0F:$F5E4, $0F:$F614 via $8010
; indirect control flow target (via $8010)
0x01AE0C|$06:$ADFC:C9 FE   	CMP #$FE   
0x01AE0E|$06:$ADFE:B0 2F   	BCS $AE2F  	; A >= #$FE => just RTS
0x01AE10|$06:$AE00:8E 9D 60	STX $609D  	; menu function parameter
0x01AE13|$06:$AE03:85 10   	STA $10    	; selected item index
; call to code in a different bank ($0F:$F1B0)
0x01AE15|$06:$AE05:20 B0 F1	JSR $F1B0  	; given a hero ID in $4A, set A and X to hero ID * 8, a.k.a. offset for start of hero's inventory
0x01AE18|$06:$AE08:A0 08   	LDY #$08   
0x01AE1A|$06:$AE0A:8C AA 60	STY $60AA  	; menu format (#$80 = has cursor, #$40 = is linked, #$20 = is single spaced, #$02 = only display equipped items, #$01 = display [left border, equipped] if equipped)
; control flow target (from $AE1E)
0x01AE1D|$06:$AE0D:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
; call to code in a different bank ($0F:$F1D6)
0x01AE20|$06:$AE10:20 D6 F1	JSR $F1D6  	; determine item type (#$00 = weapon, #$01 = armour, #$02 = shield, #$03 = helmet, #$04 = menu function wants all items or item is non-equipment, #$05 = menu format wants equipped items only and item not equipped)
0x01AE23|$06:$AE13:CD 9D 60	CMP $609D  	; menu function parameter
0x01AE26|$06:$AE16:D0 04   	BNE $AE1C  	; if it's not the right type of item, it doesn't count
0x01AE28|$06:$AE18:C6 10   	DEC $10    	; otherwise it does!
0x01AE2A|$06:$AE1A:30 08   	BMI $AE24  	; branch if we've found the right item
; control flow target (from $AE16)
0x01AE2C|$06:$AE1C:E8      	INX        	; increment inventory index
0x01AE2D|$06:$AE1D:88      	DEY        	; decrement inventory counter
0x01AE2E|$06:$AE1E:D0 ED   	BNE $AE0D  	; if more inventory slots to check, check them
0x01AE30|$06:$AE20:A9 00   	LDA #$00   	; if item not found, set A = X = #$00
0x01AE32|$06:$AE22:AA      	TAX        
0x01AE33|$06:$AE23:60      	RTS        

; control flow target (from $AE1A)
0x01AE34|$06:$AE24:BD 00 06	LDA $0600,X	; Midenhall inventory item 1 (| #$40 if equipped)
0x01AE37|$06:$AE27:48      	PHA        
0x01AE38|$06:$AE28:8A      	TXA        	; X = X mod 8
0x01AE39|$06:$AE29:29 07   	AND #$07   
0x01AE3B|$06:$AE2B:AA      	TAX        
0x01AE3C|$06:$AE2C:68      	PLA        
0x01AE3D|$06:$AE2D:29 3F   	AND #$3F   	; strip off the equipped bit
; control flow target (from $ADFE)
0x01AE3F|$06:$AE2F:60      	RTS        

; given hero ID - 1 in $4A and field spell menu selection index in A, return spell ID in A
; from $0F:$F5FA via $8012
; indirect control flow target (via $8012)
0x01AE40|$06:$AE30:06 4A   	ASL $4A    	; convert hero ID - 1 to spell list start index; 8 spells per hero
0x01AE42|$06:$AE32:06 4A   	ASL $4A    
0x01AE44|$06:$AE34:06 4A   	ASL $4A    
; add list start offset to spell menu selection index
0x01AE46|$06:$AE36:65 4A   	ADC $4A    
0x01AE48|$06:$AE38:AA      	TAX        
0x01AE49|$06:$AE39:BD 66 AE	LDA $AE66,X	; Cannock field spell list
0x01AE4C|$06:$AE3C:60      	RTS        

; given hero ID - 1 in $4A and battle spell menu selection index in A, return spell ID in A
; from $0F:$F4AC via $8014
; indirect control flow target (via $8014)
0x01AE4D|$06:$AE3D:06 4A   	ASL $4A    	; convert hero ID - 1 to spell list start index; 8 spells per hero
0x01AE4F|$06:$AE3F:06 4A   	ASL $4A    
0x01AE51|$06:$AE41:06 4A   	ASL $4A    
; add list start offset to spell menu selection index
0x01AE53|$06:$AE43:65 4A   	ADC $4A    
0x01AE55|$06:$AE45:AA      	TAX        
0x01AE56|$06:$AE46:BD 76 AE	LDA $AE76,X	; Cannock battle spell list
0x01AE59|$06:$AE49:60      	RTS        

; given spell ID in A, set A to spell name index
; from $02:$BEA4 via $8020
; indirect control flow target (via $8020)
0x01AE5A|$06:$AE4A:AA      	TAX        
0x01AE5B|$06:$AE4B:BD 4E AE	LDA $AE4E,X
; indexed data load target (from $AE4B)
0x01AE5E|$06:$AE4E:60      	RTS        


; code -> data
; spell ID -> spell name index (built in offset from $AE4F)
0x01AE5F|$06:$AE4F:00	; Spell ID #$00: (no spell)
0x01AE60|$06:$AE50:10	; Spell ID #$01: Firebal
0x01AE61|$06:$AE51:04	; Spell ID #$02: Sleep
0x01AE62|$06:$AE52:06	; Spell ID #$03: Firebane
0x01AE63|$06:$AE53:12	; Spell ID #$04: Defeat
0x01AE64|$06:$AE54:02	; Spell ID #$05: Infernos
0x01AE65|$06:$AE55:14	; Spell ID #$06: Stopspell
0x01AE66|$06:$AE56:13	; Spell ID #$07: Surround
0x01AE67|$06:$AE57:08	; Spell ID #$08: Defence
0x01AE68|$06:$AE58:05	; Spell ID #$09: Heal
0x01AE69|$06:$AE59:18	; Spell ID #$0A: Increase
0x01AE6A|$06:$AE5A:07	; Spell ID #$0B: Healmore
0x01AE6B|$06:$AE5B:1B	; Spell ID #$0C: Sacrifice
0x01AE6C|$06:$AE5C:16	; Spell ID #$0D: Healall
0x01AE6D|$06:$AE5D:17	; Spell ID #$0E: Explodet
0x01AE6E|$06:$AE5E:1A	; Spell ID #$0F: Chance
0x01AE6F|$06:$AE5F:08	; Spell ID #$10: Antidote
0x01AE70|$06:$AE60:1C	; Spell ID #$11: Heal (not used by heroes)
0x01AE71|$06:$AE61:19	; Spell ID #$12: Outside
0x01AE72|$06:$AE62:0A	; Spell ID #$13: Repel
0x01AE73|$06:$AE63:1E	; Spell ID #$14: Return
0x01AE74|$06:$AE64:0D	; Spell ID #$15: Open
0x01AE75|$06:$AE65:0E
; Cannock field spell list
; indexed data load target (from $AE39)
0x01AE76|$06:$AE66:09	; Spell ID #$09: Heal
0x01AE77|$06:$AE67:10	; Spell ID #$10: Antidote
0x01AE78|$06:$AE68:14	; Spell ID #$14: Return
0x01AE79|$06:$AE69:12	; Spell ID #$12: Outside
0x01AE7A|$06:$AE6A:0B	; Spell ID #$0B: Healmore
0x01AE7B|$06:$AE6B:16	; Spell ID #$16: Stepguard
0x01AE7C|$06:$AE6C:17	; Spell ID #$17: Revive
0x01AE7D|$06:$AE6D:00	; Spell ID #$00: (no spell)
; Moonbrooke field spell list
0x01AE7E|$06:$AE6E:0B	; Spell ID #$0B: Healmore
0x01AE7F|$06:$AE6F:13	; Spell ID #$13: Repel
0x01AE80|$06:$AE70:10	; Spell ID #$10: Antidote
0x01AE81|$06:$AE71:0D	; Spell ID #$0D: Healall
0x01AE82|$06:$AE72:12	; Spell ID #$12: Outside
0x01AE83|$06:$AE73:16	; Spell ID #$16: Stepguard
0x01AE84|$06:$AE74:15	; Spell ID #$15: Open
0x01AE85|$06:$AE75:00	; Spell ID #$00: (no spell)
; Cannock battle spell list
; indexed data load target (from $AE46)
0x01AE86|$06:$AE76:01	; Spell ID #$01: Firebal
0x01AE87|$06:$AE77:09	; Spell ID #$09: Heal
0x01AE88|$06:$AE78:06	; Spell ID #$06: Stopspell
0x01AE89|$06:$AE79:0B	; Spell ID #$0B: Healmore
0x01AE8A|$06:$AE7A:03	; Spell ID #$03: Firebane
0x01AE8B|$06:$AE7B:0A	; Spell ID #$0A: Increase
0x01AE8C|$06:$AE7C:04	; Spell ID #$04: Defeat
0x01AE8D|$06:$AE7D:0C	; Spell ID #$0C: Sacrifice
; Moonbrooke battle spell list
0x01AE8E|$06:$AE7E:02	; Spell ID #$02: Sleep
0x01AE8F|$06:$AE7F:0B	; Spell ID #$0B: Healmore
0x01AE90|$06:$AE80:05	; Spell ID #$05: Infernos
0x01AE91|$06:$AE81:08	; Spell ID #$08: Defence
0x01AE92|$06:$AE82:07	; Spell ID #$07: Surround
0x01AE93|$06:$AE83:0D	; Spell ID #$0D: Healall
0x01AE94|$06:$AE84:0E	; Spell ID #$0E: Explodet
0x01AE95|$06:$AE85:0F	; Spell ID #$0F: Chance

; data -> code
; control flow target (from $ACCD)
; indirect control flow target (via $8016)
0x01AE96|$06:$AE86:20 9E AE	JSR $AE9E  
0x01AE99|$06:$AE89:20 56 AF	JSR $AF56  
0x01AE9C|$06:$AE8C:20 7F AF	JSR $AF7F  
; control flow target (from $AE9A)
0x01AE9F|$06:$AE8F:20 CC AE	JSR $AECC  
0x01AEA2|$06:$AE92:20 30 AF	JSR $AF30  
0x01AEA5|$06:$AE95:B0 06   	BCS $AE9D  
0x01AEA7|$06:$AE97:20 8E AF	JSR $AF8E  
0x01AEAA|$06:$AE9A:4C 8F AE	JMP $AE8F  

; control flow target (from $AE95)
0x01AEAD|$06:$AE9D:60      	RTS        

; control flow target (from $AE86)
0x01AEAE|$06:$AE9E:A9 FF   	LDA #$FF   
0x01AEB0|$06:$AEA0:85 8E   	STA $8E    	; flag for in battle or not (#$FF)?
0x01AEB2|$06:$AEA2:A9 00   	LDA #$00   
0x01AEB4|$06:$AEA4:8D C2 60	STA $60C2  
0x01AEB7|$06:$AEA7:8D C3 60	STA $60C3  
0x01AEBA|$06:$AEAA:A9 47   	LDA #$47   	; Menu ID #$47: Game menu: new game name entry display
; call to code in a different bank ($0F:$EB89)
0x01AEBC|$06:$AEAC:20 89 EB	JSR $EB89  	; open menu specified by A
0x01AEBF|$06:$AEAF:A9 44   	LDA #$44   	; Menu ID #$44: Game menu: new game name input area
; call to code in a different bank ($0F:$EB89)
0x01AEC1|$06:$AEB1:20 89 EB	JSR $EB89  	; open menu specified by A
; call to code in a different bank ($0F:$C22C)
0x01AEC4|$06:$AEB4:20 2C C2	JSR $C22C  
0x01AEC7|$06:$AEB7:A9 12   	LDA #$12   
0x01AEC9|$06:$AEB9:8D A5 60	STA $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01AECC|$06:$AEBC:A9 21   	LDA #$21   
0x01AECE|$06:$AEBE:8D A9 60	STA $60A9  	; menu cursor initial position (from ROM; X-pos = low nybble, Y-pos = high nybble)
0x01AED1|$06:$AEC1:A9 60   	LDA #$60   
0x01AED3|$06:$AEC3:A2 0C   	LDX #$0C   
; control flow target (from $AEC9)
0x01AED5|$06:$AEC5:9D 00 01	STA $0100,X	; string copy buffer start (often referenced as $00FF,X)
0x01AED8|$06:$AEC8:CA      	DEX        
0x01AED9|$06:$AEC9:10 FA   	BPL $AEC5  
0x01AEDB|$06:$AECB:60      	RTS        

; control flow target (from $AE8F)
0x01AEDC|$06:$AECC:C9 FF   	CMP #$FF   
0x01AEDE|$06:$AECE:F0 35   	BEQ $AF05  
0x01AEE0|$06:$AED0:C9 1A   	CMP #$1A   
0x01AEE2|$06:$AED2:90 1B   	BCC $AEEF  
0x01AEE4|$06:$AED4:C9 21   	CMP #$21   
0x01AEE6|$06:$AED6:90 21   	BCC $AEF9  
0x01AEE8|$06:$AED8:C9 3B   	CMP #$3B   
0x01AEEA|$06:$AEDA:90 18   	BCC $AEF4  
0x01AEEC|$06:$AEDC:C9 3D   	CMP #$3D   
0x01AEEE|$06:$AEDE:90 1F   	BCC $AEFF  
0x01AEF0|$06:$AEE0:C9 3D   	CMP #$3D   
0x01AEF2|$06:$AEE2:F0 21   	BEQ $AF05  
0x01AEF4|$06:$AEE4:20 46 AF	JSR $AF46  	; CLC if $0100-$0103 are all #$60, SEC otherwise
0x01AEF7|$06:$AEE7:90 05   	BCC $AEEE  
0x01AEF9|$06:$AEE9:A9 08   	LDA #$08   
0x01AEFB|$06:$AEEB:8D C2 60	STA $60C2  
; control flow target (from $AEE7)
0x01AEFE|$06:$AEEE:60      	RTS        

; control flow target (from $AED2)
0x01AEFF|$06:$AEEF:18      	CLC        
0x01AF00|$06:$AEF0:69 24   	ADC #$24   
0x01AF02|$06:$AEF2:D0 20   	BNE $AF14  
; control flow target (from $AEDA)
0x01AF04|$06:$AEF4:38      	SEC        
0x01AF05|$06:$AEF5:E9 17   	SBC #$17   
0x01AF07|$06:$AEF7:D0 1B   	BNE $AF14  
; control flow target (from $AED6)
0x01AF09|$06:$AEF9:AA      	TAX        
0x01AF0A|$06:$AEFA:BD 5C AF	LDA $AF5C,X
0x01AF0D|$06:$AEFD:D0 15   	BNE $AF14  
; control flow target (from $AEDE)
0x01AF0F|$06:$AEFF:AA      	TAX        	; A is either #$3B or #$3C
0x01AF10|$06:$AF00:BD 42 AF	LDA $AF42,X	; $AF7D or $AF7E
0x01AF13|$06:$AF03:D0 0F   	BNE $AF14  
; control flow target (from $AECE, $AEE2)
0x01AF15|$06:$AF05:AD C2 60	LDA $60C2  
0x01AF18|$06:$AF08:F0 09   	BEQ $AF13  
0x01AF1A|$06:$AF0A:20 5A AF	JSR $AF5A  
0x01AF1D|$06:$AF0D:CE C2 60	DEC $60C2  
0x01AF20|$06:$AF10:20 56 AF	JSR $AF56  
; control flow target (from $AF08)
0x01AF23|$06:$AF13:60      	RTS        

; control flow target (from $AEF2, $AEF7, $AEFD, $AF03)
0x01AF24|$06:$AF14:48      	PHA        
0x01AF25|$06:$AF15:20 5A AF	JSR $AF5A  
0x01AF28|$06:$AF18:68      	PLA        
0x01AF29|$06:$AF19:AE C2 60	LDX $60C2  
0x01AF2C|$06:$AF1C:9D 00 01	STA $0100,X	; string copy buffer start (often referenced as $00FF,X)
0x01AF2F|$06:$AF1F:20 60 AF	JSR $AF60  
0x01AF32|$06:$AF22:EE C2 60	INC $60C2  
0x01AF35|$06:$AF25:AD C2 60	LDA $60C2  
0x01AF38|$06:$AF28:C9 08   	CMP #$08   
0x01AF3A|$06:$AF2A:B0 03   	BCS $AF2F  
0x01AF3C|$06:$AF2C:20 56 AF	JSR $AF56  
; control flow target (from $AF2A)
0x01AF3F|$06:$AF2F:60      	RTS        

; control flow target (from $AE92)
0x01AF40|$06:$AF30:AD C2 60	LDA $60C2  
0x01AF43|$06:$AF33:C9 08   	CMP #$08   
0x01AF45|$06:$AF35:90 0E   	BCC $AF45  
0x01AF47|$06:$AF37:20 46 AF	JSR $AF46  	; CLC if $0100-$0103 are all #$60, SEC otherwise
0x01AF4A|$06:$AF3A:B0 09   	BCS $AF45  	; branch if we have something != #$60
0x01AF4C|$06:$AF3C:A9 07   	LDA #$07   
0x01AF4E|$06:$AF3E:8D C2 60	STA $60C2  
0x01AF51|$06:$AF41:20
; actual target is $AF7D/$AF7E
; indexed data load target (from $AF00)
0x01AF52|$06:$AF42:   56 AF	JSR $AF56  
0x01AF54|$06:$AF44:18      	CLC        
; control flow target (from $AF35, $AF3A)
0x01AF55|$06:$AF45:60      	RTS        

; CLC if $0100-$0103 are all #$60, SEC otherwise
; control flow target (from $AEE4, $AF37)
0x01AF56|$06:$AF46:A2 03   	LDX #$03   
; control flow target (from $AF50)
0x01AF58|$06:$AF48:BD 00 01	LDA $0100,X	; string copy buffer start (often referenced as $00FF,X)
0x01AF5B|$06:$AF4B:C9 60   	CMP #$60   
0x01AF5D|$06:$AF4D:D0 05   	BNE $AF54  
0x01AF5F|$06:$AF4F:CA      	DEX        
0x01AF60|$06:$AF50:10 F6   	BPL $AF48  
0x01AF62|$06:$AF52:18      	CLC        	; entire string is #$60
0x01AF63|$06:$AF53:60      	RTS        

; control flow target (from $AF4D)
0x01AF64|$06:$AF54:38      	SEC        	; not entire string is #$60
0x01AF65|$06:$AF55:60      	RTS        

; control flow target (from $AE89, $AF10, $AF2C, $AF41)
0x01AF66|$06:$AF56:A9 77   	LDA #$77   
0x01AF68|$06:$AF58:D0 02   	BNE $AF5C  
; control flow target (from $AF0A, $AF15)
0x01AF6A|$06:$AF5A:A9 5F   	LDA #$5F   
; control flow target (from $AF58)
; indexed data load target (from $AEFA)
0x01AF6C|$06:$AF5C:A2 07   	LDX #$07   
0x01AF6E|$06:$AF5E:D0 02   	BNE $AF62  
; control flow target (from $AF1F)
0x01AF70|$06:$AF60:A2 06   	LDX #$06   
; control flow target (from $AF5E)
0x01AF72|$06:$AF62:8E 8C 60	STX $608C  
0x01AF75|$06:$AF65:85 09   	STA $09    
0x01AF77|$06:$AF67:AD C2 60	LDA $60C2  
0x01AF7A|$06:$AF6A:18      	CLC        
0x01AF7B|$06:$AF6B:69 0C   	ADC #$0C   
0x01AF7D|$06:$AF6D:8D 8B 60	STA $608B  
0x01AF80|$06:$AF70:20 09 A8	JSR $A809  
; call to code in a different bank ($0F:$C1FA)
0x01AF83|$06:$AF73:4C FA C1	JMP $C1FA  	; wait for $02 to not be #$C0, write PPU address in $07-$08 and data in $09 to PPU write buffer at $0300,$02, $01 += 1, $02 += 3, and set $0183 to #$00


; code -> data
0x01AF86|$06:$AF76:67
0x01AF87|$06:$AF77:69
0x01AF88|$06:$AF78:6B
0x01AF89|$06:$AF79:70
0x01AF8A|$06:$AF7A:75
0x01AF8B|$06:$AF7B:63
0x01AF8C|$06:$AF7C:60
0x01AF8D|$06:$AF7D:6F
0x01AF8E|$06:$AF7E:6E

; data -> code
; from $0F:$F0BF via $8018
; control flow target (from $AE8C)
; indirect control flow target (via $8018)
0x01AF8F|$06:$AF7F:AD B4 60	LDA $60B4  	; menu phase (1 = first, 0 = second)
0x01AF92|$06:$AF82:D0 0D   	BNE $AF91  
0x01AF94|$06:$AF84:20 C6 AF	JSR $AFC6  
0x01AF97|$06:$AF87:A9 80   	LDA #$80   
0x01AF99|$06:$AF89:8D C5 60	STA $60C5  
0x01AF9C|$06:$AF8C:85 2F   	STA $2F    	; joypad 1 data
; control flow target (from $AE97)
; indirect control flow target (via $801A)
0x01AF9E|$06:$AF8E:20 92 AF	JSR $AF92  
; control flow target (from $AF82)
0x01AFA1|$06:$AF91:60      	RTS        

; control flow target (from $AF8E, $AF98)
0x01AFA2|$06:$AF92:20 9B AF	JSR $AF9B  
0x01AFA5|$06:$AF95:20 AC B0	JSR $B0AC  
0x01AFA8|$06:$AF98:4C 92 AF	JMP $AF92  

; control flow target (from $AF92, $AFB4, $AFC3)
; call to code in a different bank ($0F:$C1DC)
0x01AFAB|$06:$AF9B:20 DC C1	JSR $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF
0x01AFAE|$06:$AF9E:20 85 B0	JSR $B085  
0x01AFB1|$06:$AFA1:A5 2F   	LDA $2F    	; joypad 1 data
0x01AFB3|$06:$AFA3:F0 06   	BEQ $AFAB  
0x01AFB5|$06:$AFA5:A5 03   	LDA $03    	; game clock?
0x01AFB7|$06:$AFA7:29 0F   	AND #$0F   
0x01AFB9|$06:$AFA9:D0 03   	BNE $AFAE  
; control flow target (from $AFA3)
0x01AFBB|$06:$AFAB:8D C5 60	STA $60C5  
; control flow target (from $AFA9)
; call to code in a different bank ($0F:$C476)
0x01AFBE|$06:$AFAE:20 76 C4	JSR $C476  	; read joypad 1 data into $2F
0x01AFC1|$06:$AFB1:AD C5 60	LDA $60C5  
0x01AFC4|$06:$AFB4:D0 E5   	BNE $AF9B  
0x01AFC6|$06:$AFB6:AD C5 60	LDA $60C5  
0x01AFC9|$06:$AFB9:25 2F   	AND $2F    	; joypad 1 data
0x01AFCB|$06:$AFBB:8D C5 60	STA $60C5  
0x01AFCE|$06:$AFBE:45 2F   	EOR $2F    	; joypad 1 data
0x01AFD0|$06:$AFC0:8D 8D 60	STA $608D  
0x01AFD3|$06:$AFC3:F0 D6   	BEQ $AF9B  
0x01AFD5|$06:$AFC5:60      	RTS        

; control flow target (from $AF84)
0x01AFD6|$06:$AFC6:A9 00   	LDA #$00   
0x01AFD8|$06:$AFC8:85 82   	STA $82    
0x01AFDA|$06:$AFCA:85 83   	STA $83    
0x01AFDC|$06:$AFCC:85 81   	STA $81    
0x01AFDE|$06:$AFCE:8D B0 60	STA $60B0  
0x01AFE1|$06:$AFD1:8D B1 60	STA $60B1  
0x01AFE4|$06:$AFD4:8D C5 60	STA $60C5  
0x01AFE7|$06:$AFD7:AD A5 60	LDA $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01AFEA|$06:$AFDA:4A      	LSR        
0x01AFEB|$06:$AFDB:4A      	LSR        
0x01AFEC|$06:$AFDC:4A      	LSR        
0x01AFED|$06:$AFDD:4A      	LSR        
0x01AFEE|$06:$AFDE:AA      	TAX        
0x01AFEF|$06:$AFDF:BD C8 B2	LDA $B2C8,X
0x01AFF2|$06:$AFE2:8D C4 60	STA $60C4  
0x01AFF5|$06:$AFE5:A5 59   	LDA $59    	; menu ID
0x01AFF7|$06:$AFE7:C9 13   	CMP #$13   	; Menu ID #$13: Main menu: equip weapon
0x01AFF9|$06:$AFE9:F0 58   	BEQ $B043  
0x01AFFB|$06:$AFEB:C9 2D   	CMP #$2D   	; Menu ID #$2D: Main menu: equip armour
0x01AFFD|$06:$AFED:F0 54   	BEQ $B043  
0x01AFFF|$06:$AFEF:C9 2E   	CMP #$2E   	; Menu ID #$2E: Main menu: equip shield
0x01B001|$06:$AFF1:F0 50   	BEQ $B043  
0x01B003|$06:$AFF3:C9 2F   	CMP #$2F   	; Menu ID #$2F: Main menu: equip helmet
0x01B005|$06:$AFF5:F0 4C   	BEQ $B043  
0x01B007|$06:$AFF7:C9 45   	CMP #$45   	; Menu ID #$45: Game menu: select message speed
0x01B009|$06:$AFF9:F0 07   	BEQ $B002  
0x01B00B|$06:$AFFB:C9 07   	CMP #$07   	; Menu ID #$07: Battle menu: spell list
0x01B00D|$06:$AFFD:F0 1C   	BEQ $B01B  
0x01B00F|$06:$AFFF:4C 60 B0	JMP $B060  

; control flow target (from $AFF9)
0x01B012|$06:$B002:A2 00   	LDX #$00   
0x01B014|$06:$B004:AD 2C 06	LDA $062C  	; current battle message delay
0x01B017|$06:$B007:C9 32   	CMP #$32   
0x01B019|$06:$B009:90 06   	BCC $B011  
0x01B01B|$06:$B00B:E8      	INX        
0x01B01C|$06:$B00C:C9 64   	CMP #$64   
0x01B01E|$06:$B00E:90 01   	BCC $B011  
0x01B020|$06:$B010:E8      	INX        
; control flow target (from $B009, $B00E)
0x01B021|$06:$B011:86 83   	STX $83    
0x01B023|$06:$B013:8A      	TXA        
0x01B024|$06:$B014:0A      	ASL        
0x01B025|$06:$B015:8D B1 60	STA $60B1  
0x01B028|$06:$B018:4C 60 B0	JMP $B060  

; control flow target (from $AFFD)
0x01B02B|$06:$B01B:A2 00   	LDX #$00   
; control flow target (from $B025)
0x01B02D|$06:$B01D:BD BA 60	LDA $60BA,X
0x01B030|$06:$B020:D0 07   	BNE $B029  
0x01B032|$06:$B022:E8      	INX        
0x01B033|$06:$B023:E0 08   	CPX #$08   
0x01B035|$06:$B025:D0 F6   	BNE $B01D  
0x01B037|$06:$B027:A2 00   	LDX #$00   
; control flow target (from $B020)
0x01B039|$06:$B029:8A      	TXA        
0x01B03A|$06:$B02A:29 01   	AND #$01   
0x01B03C|$06:$B02C:85 82   	STA $82    
0x01B03E|$06:$B02E:F0 08   	BEQ $B038  
0x01B040|$06:$B030:AD A5 60	LDA $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01B043|$06:$B033:29 0F   	AND #$0F   
0x01B045|$06:$B035:8D B0 60	STA $60B0  
; control flow target (from $B02E)
0x01B048|$06:$B038:8A      	TXA        
0x01B049|$06:$B039:4A      	LSR        
0x01B04A|$06:$B03A:85 83   	STA $83    
0x01B04C|$06:$B03C:0A      	ASL        
0x01B04D|$06:$B03D:8D B1 60	STA $60B1  
0x01B050|$06:$B040:4C 60 B0	JMP $B060  

; control flow target (from $AFE9, $AFED, $AFF1, $AFF5)
0x01B053|$06:$B043:AD B9 60	LDA $60B9  
0x01B056|$06:$B046:C9 FF   	CMP #$FF   
0x01B058|$06:$B048:F0 09   	BEQ $B053  
0x01B05A|$06:$B04A:85 83   	STA $83    
0x01B05C|$06:$B04C:0A      	ASL        
0x01B05D|$06:$B04D:8D B1 60	STA $60B1  
0x01B060|$06:$B050:4C 60 B0	JMP $B060  

; control flow target (from $B048)
0x01B063|$06:$B053:38      	SEC        
0x01B064|$06:$B054:AD A3 60	LDA $60A3  	; menu window height (ROM value * 2)
0x01B067|$06:$B057:E9 03   	SBC #$03   
0x01B069|$06:$B059:4A      	LSR        
0x01B06A|$06:$B05A:85 83   	STA $83    
0x01B06C|$06:$B05C:0A      	ASL        
0x01B06D|$06:$B05D:8D B1 60	STA $60B1  
; control flow target (from $AFFF, $B018, $B040, $B050)
0x01B070|$06:$B060:AD A9 60	LDA $60A9  	; menu cursor initial position (from ROM; X-pos = low nybble, Y-pos = high nybble)
0x01B073|$06:$B063:48      	PHA        
0x01B074|$06:$B064:29 0F   	AND #$0F   
0x01B076|$06:$B066:8D B2 60	STA $60B2  
0x01B079|$06:$B069:18      	CLC        
0x01B07A|$06:$B06A:6D B0 60	ADC $60B0  
0x01B07D|$06:$B06D:8D B0 60	STA $60B0  
0x01B080|$06:$B070:68      	PLA        
0x01B081|$06:$B071:29 F0   	AND #$F0   
0x01B083|$06:$B073:4A      	LSR        
0x01B084|$06:$B074:4A      	LSR        
0x01B085|$06:$B075:4A      	LSR        
0x01B086|$06:$B076:4A      	LSR        
0x01B087|$06:$B077:8D B3 60	STA $60B3  
0x01B08A|$06:$B07A:6D B1 60	ADC $60B1  
0x01B08D|$06:$B07D:8D B1 60	STA $60B1  
0x01B090|$06:$B080:A9 05   	LDA #$05   
0x01B092|$06:$B082:85 03   	STA $03    	; game clock?
0x01B094|$06:$B084:60      	RTS        

; control flow target (from $AF9E)
0x01B095|$06:$B085:A2 5F   	LDX #$5F   
0x01B097|$06:$B087:A5 03   	LDA $03    	; game clock?
0x01B099|$06:$B089:29 1F   	AND #$1F   
0x01B09B|$06:$B08B:C9 10   	CMP #$10   
0x01B09D|$06:$B08D:B0 02   	BCS $B091  
; control flow target (from $B218)
0x01B09F|$06:$B08F:A2 72   	LDX #$72   
; control flow target (from $B08D, $B211)
0x01B0A1|$06:$B091:86 09   	STX $09    
0x01B0A3|$06:$B093:A5 4D   	LDA $4D    
0x01B0A5|$06:$B095:18      	CLC        
0x01B0A6|$06:$B096:6D B0 60	ADC $60B0  
0x01B0A9|$06:$B099:8D 8B 60	STA $608B  
0x01B0AC|$06:$B09C:A5 4E   	LDA $4E    
0x01B0AE|$06:$B09E:18      	CLC        
0x01B0AF|$06:$B09F:6D B1 60	ADC $60B1  
0x01B0B2|$06:$B0A2:8D 8C 60	STA $608C  
; call to code in a different bank ($0F:$FE97)
0x01B0B5|$06:$B0A5:20 97 FE	JSR $FE97  	; read byte following JSR, parse it for bank and pointer index, execute ($8000,X) in selected bank, swap back in original bank

; code -> data
; indirect data load target
0x01B0B8|$06:$B0A8:C1	; $06:$8002

; data -> code
; call to code in a different bank ($0F:$C1FA)
0x01B0B9|$06:$B0A9:4C FA C1	JMP $C1FA  	; wait for $02 to not be #$C0, write PPU address in $07-$08 and data in $09 to PPU write buffer at $0300,$02, $01 += 1, $02 += 3, and set $0183 to #$00

; control flow target (from $AF95)
0x01B0BC|$06:$B0AC:AD 8D 60	LDA $608D  
0x01B0BF|$06:$B0AF:4A      	LSR        
0x01B0C0|$06:$B0B0:B0 17   	BCS $B0C9  
0x01B0C2|$06:$B0B2:4A      	LSR        
0x01B0C3|$06:$B0B3:B0 31   	BCS $B0E6  
0x01B0C5|$06:$B0B5:4A      	LSR        
0x01B0C6|$06:$B0B6:4A      	LSR        
0x01B0C7|$06:$B0B7:4A      	LSR        
0x01B0C8|$06:$B0B8:B0 39   	BCS $B0F3  
0x01B0CA|$06:$B0BA:4A      	LSR        
0x01B0CB|$06:$B0BB:B0 63   	BCS $B120  
0x01B0CD|$06:$B0BD:4A      	LSR        
0x01B0CE|$06:$B0BE:B0 06   	BCS $B0C6  
0x01B0D0|$06:$B0C0:4A      	LSR        
0x01B0D1|$06:$B0C1:90 47   	BCC $B10A  
0x01B0D3|$06:$B0C3:4C BE B1	JMP $B1BE  

; control flow target (from $B0BE)
0x01B0D6|$06:$B0C6:4C 74 B1	JMP $B174  

; control flow target (from $B0B0)
0x01B0D9|$06:$B0C9:A9 01   	LDA #$01   
0x01B0DB|$06:$B0CB:8D C5 60	STA $60C5  
0x01B0DE|$06:$B0CE:20 14 B2	JSR $B214  
0x01B0E1|$06:$B0D1:A9 85   	LDA #$85   	; Music ID #$85: single beep SFX
; call to code in a different bank ($0F:$C561)
0x01B0E3|$06:$B0D3:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x01B0E6|$06:$B0D6:A5 82   	LDA $82    
0x01B0E8|$06:$B0D8:85 12   	STA $12    
0x01B0EA|$06:$B0DA:A5 83   	LDA $83    
0x01B0EC|$06:$B0DC:85 13   	STA $13    
0x01B0EE|$06:$B0DE:20 94 B2	JSR $B294  
0x01B0F1|$06:$B0E1:68      	PLA        
0x01B0F2|$06:$B0E2:68      	PLA        
0x01B0F3|$06:$B0E3:A5 81   	LDA $81    
0x01B0F5|$06:$B0E5:60      	RTS        

; control flow target (from $B0B3)
0x01B0F6|$06:$B0E6:A9 02   	LDA #$02   
0x01B0F8|$06:$B0E8:8D C5 60	STA $60C5  
0x01B0FB|$06:$B0EB:20 14 B2	JSR $B214  
0x01B0FE|$06:$B0EE:68      	PLA        
0x01B0FF|$06:$B0EF:68      	PLA        
0x01B100|$06:$B0F0:A9 FF   	LDA #$FF   
0x01B102|$06:$B0F2:60      	RTS        

; control flow target (from $B0B8)
0x01B103|$06:$B0F3:A9 10   	LDA #$10   
0x01B105|$06:$B0F5:8D C5 60	STA $60C5  
0x01B108|$06:$B0F8:2C AA 60	BIT $60AA  	; menu format (#$80 = has cursor, #$40 = is linked, #$20 = is single spaced, #$02 = only display equipped items, #$01 = display [left border, equipped] if equipped)
0x01B10B|$06:$B0FB:70 0E   	BVS $B10B  
; control flow target (from $B112)
0x01B10D|$06:$B0FD:A5 83   	LDA $83    
0x01B10F|$06:$B0FF:F0 09   	BEQ $B10A  
0x01B111|$06:$B101:20 0F B2	JSR $B20F  
0x01B114|$06:$B104:20 BC B2	JSR $B2BC  
0x01B117|$06:$B107:20 14 B2	JSR $B214  
; control flow target (from $B0C1, $B0FF, $B10E)
0x01B11A|$06:$B10A:60      	RTS        

; control flow target (from $B0FB)
0x01B11B|$06:$B10B:AD B1 60	LDA $60B1  
0x01B11E|$06:$B10E:F0 FA   	BEQ $B10A  
0x01B120|$06:$B110:A5 83   	LDA $83    
0x01B122|$06:$B112:D0 E9   	BNE $B0FD  
0x01B124|$06:$B114:20 0F B2	JSR $B20F  
0x01B127|$06:$B117:A9 00   	LDA #$00   
0x01B129|$06:$B119:8D B1 60	STA $60B1  
0x01B12C|$06:$B11C:20 14 B2	JSR $B214  
0x01B12F|$06:$B11F:60      	RTS        

; control flow target (from $B0BB)
0x01B130|$06:$B120:A9 20   	LDA #$20   
0x01B132|$06:$B122:8D C5 60	STA $60C5  
0x01B135|$06:$B125:A5 59   	LDA $59    	; menu ID
0x01B137|$06:$B127:C9 45   	CMP #$45   	; Menu ID #$45: Game menu: select message speed
0x01B139|$06:$B129:D0 06   	BNE $B131  
0x01B13B|$06:$B12B:A5 83   	LDA $83    
0x01B13D|$06:$B12D:C9 02   	CMP #$02   
0x01B13F|$06:$B12F:F0 42   	BEQ $B173  
; control flow target (from $B129)
0x01B141|$06:$B131:38      	SEC        
0x01B142|$06:$B132:AD A3 60	LDA $60A3  	; menu window height (ROM value * 2)
0x01B145|$06:$B135:E9 03   	SBC #$03   
0x01B147|$06:$B137:4A      	LSR        
0x01B148|$06:$B138:C5 83   	CMP $83    
0x01B14A|$06:$B13A:F0 37   	BEQ $B173  
0x01B14C|$06:$B13C:20 0F B2	JSR $B20F  
0x01B14F|$06:$B13F:A5 59   	LDA $59    	; menu ID
0x01B151|$06:$B141:C9 44   	CMP #$44   	; Menu ID #$44: Game menu: new game name input area
0x01B153|$06:$B143:F0 13   	BEQ $B158  
0x01B155|$06:$B145:C9 07   	CMP #$07   	; Menu ID #$07: Battle menu: spell list
0x01B157|$06:$B147:F0 08   	BEQ $B151  
0x01B159|$06:$B149:C9 08   	CMP #$08   	; Menu ID #$08: Battle menu: item list window 1
0x01B15B|$06:$B14B:F0 04   	BEQ $B151  
0x01B15D|$06:$B14D:C9 22   	CMP #$22   	; Menu ID #$22: Battle menu: item list window 2
0x01B15F|$06:$B14F:D0 0A   	BNE $B15B  
; control flow target (from $B147, $B14B)
0x01B161|$06:$B151:20 43 B2	JSR $B243  
0x01B164|$06:$B154:90 1D   	BCC $B173  
0x01B166|$06:$B156:B0 03   	BCS $B15B  
; control flow target (from $B143)
0x01B168|$06:$B158:20 1E B2	JSR $B21E  
; control flow target (from $B14F, $B156)
0x01B16B|$06:$B15B:AD B1 60	LDA $60B1  
0x01B16E|$06:$B15E:D0 08   	BNE $B168  
0x01B170|$06:$B160:AD B3 60	LDA $60B3  
0x01B173|$06:$B163:8D B1 60	STA $60B1  
0x01B176|$06:$B166:D0 08   	BNE $B170  
; control flow target (from $B15E)
0x01B178|$06:$B168:18      	CLC        
0x01B179|$06:$B169:69 02   	ADC #$02   
0x01B17B|$06:$B16B:8D B1 60	STA $60B1  
0x01B17E|$06:$B16E:E6 83   	INC $83    
; control flow target (from $B166)
0x01B180|$06:$B170:20 14 B2	JSR $B214  
; control flow target (from $B12F, $B13A, $B154)
0x01B183|$06:$B173:60      	RTS        

; control flow target (from $B0C6)
0x01B184|$06:$B174:A9 40   	LDA #$40   
0x01B186|$06:$B176:8D C5 60	STA $60C5  
0x01B189|$06:$B179:A5 82   	LDA $82    
0x01B18B|$06:$B17B:F0 40   	BEQ $B1BD  
0x01B18D|$06:$B17D:A5 59   	LDA $59    	; menu ID
0x01B18F|$06:$B17F:C9 44   	CMP #$44   	; Menu ID #$44: Game menu: new game name input area
0x01B191|$06:$B181:F0 0B   	BEQ $B18E  
0x01B193|$06:$B183:C9 07   	CMP #$07   	; Menu ID #$07: Battle menu: spell list
0x01B195|$06:$B185:D0 1E   	BNE $B1A5  
0x01B197|$06:$B187:20 52 B2	JSR $B252  
0x01B19A|$06:$B18A:90 31   	BCC $B1BD  
0x01B19C|$06:$B18C:B0 17   	BCS $B1A5  
; control flow target (from $B181)
0x01B19E|$06:$B18E:A5 83   	LDA $83    
0x01B1A0|$06:$B190:C9 05   	CMP #$05   
0x01B1A2|$06:$B192:D0 11   	BNE $B1A5  
0x01B1A4|$06:$B194:A5 82   	LDA $82    
0x01B1A6|$06:$B196:C9 09   	CMP #$09   
0x01B1A8|$06:$B198:D0 0B   	BNE $B1A5  
0x01B1AA|$06:$B19A:A9 06   	LDA #$06   
0x01B1AC|$06:$B19C:85 82   	STA $82    
0x01B1AE|$06:$B19E:20 0F B2	JSR $B20F  
0x01B1B1|$06:$B1A1:A9 0D   	LDA #$0D   
0x01B1B3|$06:$B1A3:D0 12   	BNE $B1B7  
; control flow target (from $B185, $B18C, $B192, $B198)
0x01B1B5|$06:$B1A5:20 0F B2	JSR $B20F  
0x01B1B8|$06:$B1A8:C6 82   	DEC $82    
0x01B1BA|$06:$B1AA:AD A5 60	LDA $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01B1BD|$06:$B1AD:29 0F   	AND #$0F   
0x01B1BF|$06:$B1AF:85 10   	STA $10    
0x01B1C1|$06:$B1B1:AD B0 60	LDA $60B0  
0x01B1C4|$06:$B1B4:38      	SEC        
0x01B1C5|$06:$B1B5:E5 10   	SBC $10    
; control flow target (from $B1A3)
0x01B1C7|$06:$B1B7:8D B0 60	STA $60B0  
0x01B1CA|$06:$B1BA:20 14 B2	JSR $B214  
; control flow target (from $B17B, $B18A)
0x01B1CD|$06:$B1BD:60      	RTS        

; control flow target (from $B0C3)
0x01B1CE|$06:$B1BE:A9 80   	LDA #$80   
0x01B1D0|$06:$B1C0:8D C5 60	STA $60C5  
0x01B1D3|$06:$B1C3:AD A5 60	LDA $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01B1D6|$06:$B1C6:F0 46   	BEQ $B20E  
0x01B1D8|$06:$B1C8:A5 59   	LDA $59    	; menu ID
0x01B1DA|$06:$B1CA:C9 44   	CMP #$44   	; Menu ID #$44: Game menu: new game name input area
0x01B1DC|$06:$B1CC:F0 0B   	BEQ $B1D9  
0x01B1DE|$06:$B1CE:C9 07   	CMP #$07   	; Menu ID #$07: Battle menu: spell list
0x01B1E0|$06:$B1D0:D0 20   	BNE $B1F2  
0x01B1E2|$06:$B1D2:20 5A B2	JSR $B25A  
0x01B1E5|$06:$B1D5:90 37   	BCC $B20E  
0x01B1E7|$06:$B1D7:B0 19   	BCS $B1F2  
; control flow target (from $B1CC)
0x01B1E9|$06:$B1D9:A5 83   	LDA $83    
0x01B1EB|$06:$B1DB:C9 05   	CMP #$05   
0x01B1ED|$06:$B1DD:D0 13   	BNE $B1F2  
0x01B1EF|$06:$B1DF:A5 82   	LDA $82    
0x01B1F1|$06:$B1E1:C9 06   	CMP #$06   
0x01B1F3|$06:$B1E3:90 0D   	BCC $B1F2  
0x01B1F5|$06:$B1E5:D0 27   	BNE $B20E  
0x01B1F7|$06:$B1E7:20 0F B2	JSR $B20F  
0x01B1FA|$06:$B1EA:A9 09   	LDA #$09   
0x01B1FC|$06:$B1EC:85 82   	STA $82    
0x01B1FE|$06:$B1EE:A9 13   	LDA #$13   
0x01B200|$06:$B1F0:D0 16   	BNE $B208  
; control flow target (from $B1D0, $B1D7, $B1DD, $B1E3)
0x01B202|$06:$B1F2:AE C4 60	LDX $60C4  
0x01B205|$06:$B1F5:CA      	DEX        
0x01B206|$06:$B1F6:E4 82   	CPX $82    
0x01B208|$06:$B1F8:F0 14   	BEQ $B20E  
0x01B20A|$06:$B1FA:20 0F B2	JSR $B20F  
0x01B20D|$06:$B1FD:E6 82   	INC $82    
0x01B20F|$06:$B1FF:AD A5 60	LDA $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01B212|$06:$B202:29 0F   	AND #$0F   
0x01B214|$06:$B204:18      	CLC        
0x01B215|$06:$B205:6D B0 60	ADC $60B0  
; control flow target (from $B1F0)
0x01B218|$06:$B208:8D B0 60	STA $60B0  
0x01B21B|$06:$B20B:20 14 B2	JSR $B214  
; control flow target (from $B1C6, $B1D5, $B1E5, $B1F8)
0x01B21E|$06:$B20E:60      	RTS        

; control flow target (from $B101, $B114, $B13C, $B19E, $B1A5, $B1E7, $B1FA, $B276, $B27F)
0x01B21F|$06:$B20F:A2 5F   	LDX #$5F   
0x01B221|$06:$B211:4C 91 B0	JMP $B091  

; control flow target (from $B0CE, $B0EB, $B107, $B11C, $B170, $B1BA, $B20B)
0x01B224|$06:$B214:A9 05   	LDA #$05   
0x01B226|$06:$B216:85 03   	STA $03    	; game clock?
0x01B228|$06:$B218:20 8F B0	JSR $B08F  
; call to code in a different bank ($0F:$C1DC)
0x01B22B|$06:$B21B:4C DC C1	JMP $C1DC  	; set $6007 = #$00, set $00 = #$01, wait for interrupt, set $00 = #$FF

; control flow target (from $B158)
0x01B22E|$06:$B21E:A5 83   	LDA $83    
0x01B230|$06:$B220:C9 04   	CMP #$04   
0x01B232|$06:$B222:D0 1E   	BNE $B242  
0x01B234|$06:$B224:A5 82   	LDA $82    
0x01B236|$06:$B226:C9 07   	CMP #$07   
0x01B238|$06:$B228:F0 0F   	BEQ $B239  
0x01B23A|$06:$B22A:C9 08   	CMP #$08   
0x01B23C|$06:$B22C:90 14   	BCC $B242  
0x01B23E|$06:$B22E:A9 09   	LDA #$09   
0x01B240|$06:$B230:85 82   	STA $82    
0x01B242|$06:$B232:A9 13   	LDA #$13   
0x01B244|$06:$B234:8D B0 60	STA $60B0  
0x01B247|$06:$B237:D0 09   	BNE $B242  
; control flow target (from $B228)
0x01B249|$06:$B239:A9 06   	LDA #$06   
0x01B24B|$06:$B23B:85 82   	STA $82    
0x01B24D|$06:$B23D:A9 0D   	LDA #$0D   
0x01B24F|$06:$B23F:8D B0 60	STA $60B0  
; control flow target (from $B222, $B22C, $B237)
0x01B252|$06:$B242:60      	RTS        

; control flow target (from $B151)
0x01B253|$06:$B243:20 B3 B2	JSR $B2B3  	; copy $82-$83 to $12-$13
0x01B256|$06:$B246:E6 13   	INC $13    
0x01B258|$06:$B248:AD B1 60	LDA $60B1  
0x01B25B|$06:$B24B:F0 03   	BEQ $B250  
0x01B25D|$06:$B24D:4C 87 B2	JMP $B287  

; control flow target (from $B24B)
0x01B260|$06:$B250:38      	SEC        
0x01B261|$06:$B251:60      	RTS        

; control flow target (from $B187)
0x01B262|$06:$B252:20 B3 B2	JSR $B2B3  	; copy $82-$83 to $12-$13
0x01B265|$06:$B255:C6 12   	DEC $12    
0x01B267|$06:$B257:4C 5F B2	JMP $B25F  

; control flow target (from $B1D2)
0x01B26A|$06:$B25A:20 B3 B2	JSR $B2B3  	; copy $82-$83 to $12-$13
0x01B26D|$06:$B25D:E6 12   	INC $12    
; control flow target (from $B257)
0x01B26F|$06:$B25F:20 87 B2	JSR $B287  
0x01B272|$06:$B262:B0 22   	BCS $B286  
0x01B274|$06:$B264:C6 13   	DEC $13    
0x01B276|$06:$B266:30 1E   	BMI $B286  
0x01B278|$06:$B268:20 87 B2	JSR $B287  
0x01B27B|$06:$B26B:B0 12   	BCS $B27F  
0x01B27D|$06:$B26D:C6 13   	DEC $13    
0x01B27F|$06:$B26F:30 15   	BMI $B286  
0x01B281|$06:$B271:20 87 B2	JSR $B287  
0x01B284|$06:$B274:90 10   	BCC $B286  
0x01B286|$06:$B276:20 0F B2	JSR $B20F  
0x01B289|$06:$B279:20 BC B2	JSR $B2BC  
0x01B28C|$06:$B27C:4C 82 B2	JMP $B282  

; control flow target (from $B26B)
0x01B28F|$06:$B27F:20 0F B2	JSR $B20F  
; control flow target (from $B27C)
0x01B292|$06:$B282:20 BC B2	JSR $B2BC  
0x01B295|$06:$B285:38      	SEC        
; control flow target (from $B262, $B266, $B26F, $B274)
0x01B296|$06:$B286:60      	RTS        

; control flow target (from $B24D, $B25F, $B268, $B271)
0x01B297|$06:$B287:20 94 B2	JSR $B294  
0x01B29A|$06:$B28A:AA      	TAX        
0x01B29B|$06:$B28B:BD BA 60	LDA $60BA,X
0x01B29E|$06:$B28E:F0 02   	BEQ $B292  
0x01B2A0|$06:$B290:38      	SEC        
0x01B2A1|$06:$B291:60      	RTS        

; control flow target (from $B28E)
0x01B2A2|$06:$B292:18      	CLC        
0x01B2A3|$06:$B293:60      	RTS        

; control flow target (from $B0DE, $B287)
0x01B2A4|$06:$B294:A5 13   	LDA $13    
0x01B2A6|$06:$B296:AE A5 60	LDX $60A5  	; menu cursor second column X-offset (from left edge of menu)
0x01B2A9|$06:$B299:F0 15   	BEQ $B2B0  
0x01B2AB|$06:$B29B:29 0F   	AND #$0F   
0x01B2AD|$06:$B29D:85 10   	STA $10    
0x01B2AF|$06:$B29F:A9 00   	LDA #$00   
0x01B2B1|$06:$B2A1:85 11   	STA $11    
0x01B2B3|$06:$B2A3:A2 10   	LDX #$10   
0x01B2B5|$06:$B2A5:AD C4 60	LDA $60C4  
; call to code in a different bank ($0F:$F0F4)
0x01B2B8|$06:$B2A8:20 F4 F0	JSR $F0F4  	; 16-bit multiplication: set 16-bit ($00,X-$01,X) = ($00,X-$01,X) * A
0x01B2BB|$06:$B2AB:A5 10   	LDA $10    
0x01B2BD|$06:$B2AD:18      	CLC        
0x01B2BE|$06:$B2AE:65 12   	ADC $12    
; control flow target (from $B299)
0x01B2C0|$06:$B2B0:85 81   	STA $81    
0x01B2C2|$06:$B2B2:60      	RTS        

; copy $82-$83 to $12-$13
; control flow target (from $B243, $B252, $B25A)
0x01B2C3|$06:$B2B3:A5 82   	LDA $82    
0x01B2C5|$06:$B2B5:85 12   	STA $12    
0x01B2C7|$06:$B2B7:A5 83   	LDA $83    
0x01B2C9|$06:$B2B9:85 13   	STA $13    
0x01B2CB|$06:$B2BB:60      	RTS        

; control flow target (from $B104, $B279, $B282)
0x01B2CC|$06:$B2BC:AD B1 60	LDA $60B1  
0x01B2CF|$06:$B2BF:38      	SEC        
0x01B2D0|$06:$B2C0:E9 02   	SBC #$02   
0x01B2D2|$06:$B2C2:8D B1 60	STA $60B1  
0x01B2D5|$06:$B2C5:C6 83   	DEC $83    
0x01B2D7|$06:$B2C7:60      	RTS        


; code -> data
; indexed data load target (from $AFDF)
0x01B2D8|$06:$B2C8:02
0x01B2D9|$06:$B2C9:0B
; Item list part 1, line 1
; indirect data load target (via $8022)
0x01B2DA|$06:$B2CA:25 0A 16 0B 18 18 FF	; Bamboo[end-FF]
0x01B2E1|$06:$B2D1:30 0A 10 12 0C FF	; Magic[end-FF]
0x01B2E7|$06:$B2D7:3A 12 23 0A 1B 0D 67 1C FF	; Wizard's[end-FF]
0x01B2F0|$06:$B2E0:36 1D 0A 0F 0F 5F 18 0F FF	; Staff of[end-FF]
0x01B2F9|$06:$B2E9:26 15 1E 0B FF	; Club[end-FF]
0x01B2FE|$06:$B2EE:26 18 19 19 0E 1B FF	; Copper[end-FF]
0x01B305|$06:$B2F5:26 11 0A 12 17 FF	; Chain[end-FF]
0x01B30B|$06:$B2FB:2C 1B 18 17 FF	; Iron[end-FF]
0x01B310|$06:$B300:29 0A 15 0C 18 17 FF	; Falcon[end-FF]
0x01B317|$06:$B307:25 1B 18 0A 0D FF	; Broad[end-FF]
0x01B31D|$06:$B30D:2A 12 0A 17 1D FF	; Giant[end-FF]
0x01B323|$06:$B313:36 20 18 1B 0D 5F 18 0F FF	; Sword of[end-FF]
0x01B32C|$06:$B31C:27 1B 0A 10 18 17 FF	; Dragon[end-FF]
0x01B333|$06:$B323:2F 12 10 11 1D FF	; Light[end-FF]
0x01B339|$06:$B329:36 20 18 1B 0D 5F 18 0F FF	; Sword of[end-FF]
0x01B342|$06:$B332:37 11 1E 17 0D 0E 1B FF	; Thunder[end-FF]
0x01B34A|$06:$B33A:26 15 18 1D 11 0E 1C FF	; Clothes[end-FF]
0x01B352|$06:$B342:26 15 18 1D 11 0E 1C FF	; Clothes[end-FF]
0x01B35A|$06:$B34A:3A 0A 1D 0E 1B 5F 29 15 22 12 17 10 FF	; Water Flying[end-FF]
0x01B367|$06:$B357:30 12 17 14 FF	; Mink[end-FF]
0x01B36C|$06:$B35C:2F 0E 0A 1D 11 0E 1B FF	; Leather[end-FF]
0x01B374|$06:$B364:26 11 0A 12 17 FF	; Chain[end-FF]
0x01B37A|$06:$B36A:2A 1B 0E 16 15 12 17 67 1C FF	; Gremlin's[end-FF]
0x01B384|$06:$B374:30 0A 10 12 0C FF	; Magic[end-FF]
0x01B38A|$06:$B37A:29 1E 15 15 5F 33 15 0A 1D 0E FF	; Full Plate[end-FF]
0x01B395|$06:$B385:24 1B 16 18 1B 5F 18 0F FF	; Armor of[end-FF]
0x01B39E|$06:$B38E:24 1B 16 18 1B 5F 18 0F FF	; Armor of[end-FF]
0x01B3A7|$06:$B397:2F 0E 0A 1D 11 0E 1B FF	; Leather[end-FF]
0x01B3AF|$06:$B39F:36 11 12 0E 15 0D 5F 18 0F FF	; Shield of[end-FF]
0x01B3B9|$06:$B3A9:36 1D 0E 0E 15 FF	; Steel[end-FF]
0x01B3BF|$06:$B3AF:28 1F 12 15 FF	; Evil[end-FF]
0x01B3C4|$06:$B3B4:36 11 12 0E 15 0D 5F 18 0F FF	; Shield of[end-FF]
; Item list part 2, line 1
; indirect data load target (via $8030)
0x01B3CE|$06:$B3BE:30 22 1C 1D 0E 1B 12 18 1E 1C FF	; Mysterious[end-FF]
0x01B3D9|$06:$B3C9:2C 1B 18 17 FF	; Iron[end-FF]
0x01B3DE|$06:$B3CE:2B 0E 15 16 0E 1D 5F 18 0F FF	; Helmet of[end-FF]
0x01B3E8|$06:$B3D8:37 18 14 0E 17 5F 18 0F FF	; Token of[end-FF]
0x01B3F1|$06:$B3E1:37 1B 0E 1C 1E 1B 0E 1C FF	; Tresures[end-FF]
0x01B3FA|$06:$B3EA:30 18 18 17 FF	; Moon[end-FF]
0x01B3FF|$06:$B3EF:26 11 0A 1B 16 5F 18 0F FF	; Charm of[end-FF]
0x01B408|$06:$B3F8:28 22 0E 5F 18 0F FF	; Eye of[end-FF]
0x01B40F|$06:$B3FF:2F 0E 0A 0F 5F 18 0F 5F 37 11 0E FF	; Leaf of The[end-FF]
0x01B41B|$06:$B40B:28 0C 11 18 12 17 10 FF	; Echoing[end-FF]
0x01B423|$06:$B413:30 12 1B 1B 18 1B 5F 18 0F FF	; Mirror of[end-FF]
0x01B42D|$06:$B41D:27 0E 20 67 1C FF	; Dew's[end-FF]
0x01B433|$06:$B423:30 0A 10 12 0C FF	; Magic[end-FF]
0x01B439|$06:$B429:26 15 18 0A 14 5F 18 0F FF	; Cloak of[end-FF]
0x01B442|$06:$B432:2A 1B 0E 16 15 12 17 67 1C FF	; Gremlin's[end-FF]
0x01B44C|$06:$B43C:27 1B 0A 10 18 17 67 1C FF	; Dragon's[end-FF]
0x01B455|$06:$B445:27 1B 0A 10 18 17 67 1C FF	; Dragon's[end-FF]
0x01B45E|$06:$B44E:2A 18 15 0D 0E 17 FF	; Golden[end-FF]
0x01B465|$06:$B455:2F 18 1D 1D 0E 1B 22 FF	; Lottery[end-FF]
0x01B46D|$06:$B45D:29 0A 12 1B 22 FF	; Fairy[end-FF]
0x01B473|$06:$B463:3A 12 17 10 5F 18 0F FF	; Wing of[end-FF]
0x01B47B|$06:$B46B:FF	; [end-FF]
0x01B47C|$06:$B46C:2A 18 15 0D 0E 17 FF	; Golden[end-FF]
0x01B483|$06:$B473:36 12 15 1F 0E 1B FF	; Silver[end-FF]
0x01B48A|$06:$B47A:2D 0A 12 15 18 1B 67 1C FF	; Jailor's[end-FF]
0x01B493|$06:$B483:3A 0A 1D 0E 1B 10 0A 1D 0E FF	; Watergate[end-FF]
0x01B49D|$06:$B48D:24 17 1D 12 0D 18 1D 0E FF	; Antidote[end-FF]
0x01B4A6|$06:$B496:30 0E 0D 12 0C 0A 15 FF	; Medical[end-FF]
0x01B4AE|$06:$B49E:3A 12 23 0A 1B 0D 67 1C FF	; Wizard's[end-FF]
0x01B4B7|$06:$B4A7:33 0E 1B 12 15 18 1E 1C FF	; Perilous[end-FF]
0x01B4C0|$06:$B4B0:FF	; [end-FF]
0x01B4C1|$06:$B4B1:FF	; [end-FF]
; Item list part 1, line 2
; indirect data load target (via $8024)
0x01B4C2|$06:$B4B2:36 1D 12 0C 14 FF	; Stick[end-FF]
0x01B4C8|$06:$B4B8:2E 17 12 0F 0E FF	; Knife[end-FF]
0x01B4CE|$06:$B4BE:3A 0A 17 0D FF	; Wand[end-FF]
0x01B4D3|$06:$B4C3:37 11 1E 17 0D 0E 1B FF	; Thunder[end-FF]
0x01B4DB|$06:$B4CB:FF	; [end-FF]
0x01B4DC|$06:$B4CC:36 20 18 1B 0D FF	; Sword[end-FF]
0x01B4E2|$06:$B4D2:36 12 0C 14 15 0E FF	; Sickle[end-FF]
0x01B4E9|$06:$B4D9:36 19 0E 0A 1B FF	; Spear[end-FF]
0x01B4EF|$06:$B4DF:36 20 18 1B 0D FF	; Sword[end-FF]
0x01B4F5|$06:$B4E5:36 20 18 1B 0D FF	; Sword[end-FF]
0x01B4FB|$06:$B4EB:2B 0A 16 16 0E 1B FF	; Hammer[end-FF]
0x01B502|$06:$B4F2:27 0E 1C 1D 1B 1E 0C 1D 12 18 17 FF	; Destruction[end-FF]
0x01B50E|$06:$B4FE:2E 12 15 15 0E 1B FF	; Killer[end-FF]
0x01B515|$06:$B505:36 20 18 1B 0D FF	; Sword[end-FF]
0x01B51B|$06:$B50B:28 1B 0D 1B 12 0C 14 FF	; Erdrick[end-FF]
0x01B523|$06:$B513:36 20 18 1B 0D FF	; Sword[end-FF]
0x01B529|$06:$B519:FF	; [end-FF]
0x01B52A|$06:$B51A:2B 12 0D 12 17 10 FF	; Hiding[end-FF]
0x01B531|$06:$B521:26 15 18 1D 11 FF	; Cloth[end-FF]
0x01B537|$06:$B527:26 18 0A 1D FF	; Coat[end-FF]
0x01B53C|$06:$B52C:24 1B 16 18 1B FF	; Armor[end-FF]
0x01B542|$06:$B532:30 0A 12 15 FF	; Mail[end-FF]
0x01B547|$06:$B537:24 1B 16 18 1B FF	; Armor[end-FF]
0x01B54D|$06:$B53D:24 1B 16 18 1B FF	; Armor[end-FF]
0x01B553|$06:$B543:24 1B 16 18 1B FF	; Armor[end-FF]
0x01B559|$06:$B549:2A 0A 12 0A FF	; Gaia[end-FF]
0x01B55E|$06:$B54E:28 1B 0D 1B 12 0C 14 FF	; Erdrick[end-FF]
0x01B566|$06:$B556:36 11 12 0E 15 0D FF	; Shield[end-FF]
0x01B56D|$06:$B55D:36 1D 1B 0E 17 10 1D 11 FF	; Strength[end-FF]
0x01B576|$06:$B566:36 11 12 0E 15 0D FF	; Shield[end-FF]
0x01B57D|$06:$B56D:36 11 12 0E 15 0D FF	; Shield[end-FF]
0x01B584|$06:$B574:28 1B 0D 1B 12 0C 14 FF	; Erdrick[end-FF]
; Item list part 2, line 2
; indirect data load target (via $8032)
0x01B58C|$06:$B57C:2B 0A 1D FF	; Hat[end-FF]
0x01B590|$06:$B580:2B 0E 15 16 0E 1D FF	; Helmet[end-FF]
0x01B597|$06:$B587:28 1B 0D 1B 12 0C 14 FF	; Erdrick[end-FF]
0x01B59F|$06:$B58F:28 1B 0D 1B 12 0C 14 FF	; Erdrick[end-FF]
0x01B5A7|$06:$B597:FF	; [end-FF]
0x01B5A8|$06:$B598:29 1B 0A 10 16 0E 17 1D FF	; Fragment[end-FF]
0x01B5B1|$06:$B5A1:35 1E 0B 12 1C 1C FF	; Rubiss[end-FF]
0x01B5B8|$06:$B5A8:30 0A 15 1B 18 1D 11 FF	; Malroth[end-FF]
0x01B5C0|$06:$B5B0:3A 18 1B 15 0D 5F 37 1B 0E 0E FF	; World Tree[end-FF]
0x01B5CB|$06:$B5BB:29 15 1E 1D 0E FF	; Flute[end-FF]
0x01B5D1|$06:$B5C1:35 0A FF	; Ra[end-FF]
0x01B5D4|$06:$B5C4:3C 0A 1B 17 FF	; Yarn[end-FF]
0x01B5D9|$06:$B5C9:2F 18 18 16 FF	; Loom[end-FF]
0x01B5DE|$06:$B5CE:3A 12 17 0D FF	; Wind[end-FF]
0x01B5E3|$06:$B5D3:37 0A 12 15 FF	; Tail[end-FF]
0x01B5E8|$06:$B5D8:25 0A 17 0E FF	; Bane[end-FF]
0x01B5ED|$06:$B5DD:33 18 1D 12 18 17 FF	; Potion[end-FF]
0x01B5F4|$06:$B5E4:26 0A 1B 0D FF	; Card[end-FF]
0x01B5F9|$06:$B5E9:37 12 0C 14 0E 1D FF	; Ticket[end-FF]
0x01B600|$06:$B5F0:3A 0A 1D 0E 1B FF	; Water[end-FF]
0x01B606|$06:$B5F6:1D 11 0E 5F 3A 22 1F 0E 1B 17 FF	; the Wyvern[end-FF]
0x01B611|$06:$B601:FF	; [end-FF]
0x01B612|$06:$B602:2E 0E 22 FF	; Key[end-FF]
0x01B616|$06:$B606:2E 0E 22 FF	; Key[end-FF]
0x01B61A|$06:$B60A:2E 0E 22 FF	; Key[end-FF]
0x01B61E|$06:$B60E:2E 0E 22 FF	; Key[end-FF]
0x01B622|$06:$B612:2B 0E 1B 0B FF	; Herb[end-FF]
0x01B627|$06:$B617:2B 0E 1B 0B FF	; Herb[end-FF]
0x01B62C|$06:$B61C:35 12 17 10 FF	; Ring[end-FF]
0x01B631|$06:$B621:FF	; [end-FF]
0x01B632|$06:$B622:FF	; [end-FF]
0x01B633|$06:$B623:FF	; [end-FF]
; Spell name list
; indirect data load target (via $8026)
0x01B634|$06:$B624:29 12 1B 0E 0B 0A 15 FF	; Firebal[end-FF]
0x01B63C|$06:$B62C:2B 0E 0A 15 FF	; Heal[end-FF]
0x01B641|$06:$B631:36 1D 18 19 1C 19 0E 15 15 FF	; Stopspell[end-FF]
0x01B64B|$06:$B63B:2B 0E 0A 15 16 18 1B 0E FF	; Healmore[end-FF]
0x01B654|$06:$B644:29 12 1B 0E 0B 0A 17 0E FF	; Firebane[end-FF]
0x01B65D|$06:$B64D:2C 17 0C 1B 0E 0A 1C 0E FF	; Increase[end-FF]
0x01B666|$06:$B656:27 0E 0F 0E 0A 1D FF	; Defeat[end-FF]
0x01B66D|$06:$B65D:36 0A 0C 1B 12 0F 12 0C 0E FF	; Sacrifice[end-FF]
0x01B677|$06:$B667:2B 0E 0A 15 FF	; Heal[end-FF]
0x01B67C|$06:$B66C:24 17 1D 12 0D 18 1D 0E FF	; Antidote[end-FF]
0x01B685|$06:$B675:35 0E 1D 1E 1B 17 FF	; Return[end-FF]
0x01B68C|$06:$B67C:32 1E 1D 1C 12 0D 0E FF	; Outside[end-FF]
0x01B694|$06:$B684:2B 0E 0A 15 16 18 1B 0E FF	; Healmore[end-FF]
0x01B69D|$06:$B68D:36 1D 0E 19 10 1E 0A 1B 0D FF	; Stepguard[end-FF]
0x01B6A7|$06:$B697:35 0E 1F 12 1F 0E FF	; Revive[end-FF]
0x01B6AE|$06:$B69E:FF	; [end-FF]
0x01B6AF|$06:$B69F:36 15 0E 0E 19 FF	; Sleep[end-FF]
0x01B6B5|$06:$B6A5:2B 0E 0A 15 16 18 1B 0E FF	; Healmore[end-FF]
0x01B6BE|$06:$B6AE:2C 17 0F 0E 1B 17 18 1C FF	; Infernos[end-FF]
0x01B6C7|$06:$B6B7:27 0E 0F 0E 17 0C 0E FF	; Defence[end-FF]
0x01B6CF|$06:$B6BF:36 1E 1B 1B 18 1E 17 0D FF	; Surround[end-FF]
0x01B6D8|$06:$B6C8:2B 0E 0A 15 0A 15 15 FF	; Healall[end-FF]
0x01B6E0|$06:$B6D0:28 21 19 15 18 0D 0E 1D FF	; Explodet[end-FF]
0x01B6E9|$06:$B6D9:26 11 0A 17 0C 0E FF	; Chance[end-FF]
0x01B6F0|$06:$B6E0:2B 0E 0A 15 16 18 1B 0E FF	; Healmore[end-FF]
0x01B6F9|$06:$B6E9:35 0E 19 0E 15 FF	; Repel[end-FF]
0x01B6FF|$06:$B6EF:24 17 1D 12 0D 18 1D 0E FF	; Antidote[end-FF]
0x01B708|$06:$B6F8:2B 0E 0A 15 0A 15 15 FF	; Healall[end-FF]
0x01B710|$06:$B700:32 1E 1D 1C 12 0D 0E FF	; Outside[end-FF]
0x01B718|$06:$B708:36 1D 0E 19 10 1E 0A 1B 0D FF	; Stepguard[end-FF]
0x01B722|$06:$B712:32 19 0E 17 FF	; Open[end-FF]
0x01B727|$06:$B717:FF	; [end-FF]
; Monster list part 1, line 1
; indirect data load target (via $8028)
0x01B728|$06:$B718:36 15 12 16 0E FF	; Slime[end-FF]
0x01B72E|$06:$B71E:25 12 10 FF	; Big[end-FF]
0x01B732|$06:$B722:2C 1B 18 17 FF	; Iron[end-FF]
0x01B737|$06:$B727:27 1B 0A 14 0E 0E FF	; Drakee[end-FF]
0x01B73E|$06:$B72E:3A 12 15 0D FF	; Wild[end-FF]
0x01B743|$06:$B733:2B 0E 0A 15 0E 1B FF	; Healer[end-FF]
0x01B74A|$06:$B73A:2A 11 18 1C 1D FF	; Ghost[end-FF]
0x01B750|$06:$B740:25 0A 0B 0B 15 0E FF	; Babble[end-FF]
0x01B757|$06:$B747:24 1B 16 22 FF	; Army[end-FF]
0x01B75C|$06:$B74C:30 0A 10 12 0C 12 0A 17 FF	; Magician[end-FF]
0x01B765|$06:$B755:25 12 10 FF	; Big[end-FF]
0x01B769|$06:$B759:25 12 10 FF	; Big[end-FF]
0x01B76D|$06:$B75D:30 0A 10 12 0C FF	; Magic[end-FF]
0x01B773|$06:$B763:30 0A 10 12 0D 1B 0A 14 0E 0E FF	; Magidrakee[end-FF]
0x01B77E|$06:$B76E:26 0E 17 1D 12 19 18 0D FF	; Centipod[end-FF]
0x01B787|$06:$B777:30 0A 17 5F 32 67 FF	; Man O'[end-FF]
0x01B78E|$06:$B77E:2F 12 23 0A 1B 0D FF	; Lizard[end-FF]
0x01B795|$06:$B785:3D 18 16 0B 12 0E FF	; Zombie[end-FF]
0x01B79C|$06:$B78C:36 16 18 14 0E FF	; Smoke[end-FF]
0x01B7A2|$06:$B792:2A 11 18 1C 1D FF	; Ghost[end-FF]
0x01B7A8|$06:$B798:25 0A 0B 18 18 17 FF	; Baboon[end-FF]
0x01B7AF|$06:$B79F:26 0A 1B 17 12 1F 18 10 FF	; Carnivog[end-FF]
0x01B7B8|$06:$B7A8:30 0E 10 0A 19 0E 0D 0E FF	; Megapede[end-FF]
0x01B7C1|$06:$B7B1:36 0E 0A FF	; Sea[end-FF]
0x01B7C5|$06:$B7B5:30 0E 0D 1E 1C 0A FF	; Medusa[end-FF]
0x01B7CC|$06:$B7BC:28 17 0C 11 0A 17 1D 0E 1B FF	; Enchanter[end-FF]
0x01B7D6|$06:$B7C6:30 1E 0D FF	; Mud[end-FF]
0x01B7DA|$06:$B7CA:30 0A 10 12 0C FF	; Magic[end-FF]
0x01B7E0|$06:$B7D0:27 0E 16 12 10 11 18 1C 1D FF	; Demighost[end-FF]
0x01B7EA|$06:$B7DA:2A 1B 0E 16 15 12 17 FF	; Gremlin[end-FF]
0x01B7F2|$06:$B7E2:33 18 12 1C 18 17 FF	; Poison[end-FF]
0x01B7F9|$06:$B7E9:30 1E 16 16 22 FF	; Mummy[end-FF]
0x01B7FF|$06:$B7EF:2A 18 1B 10 18 17 FF	; Gorgon[end-FF]
0x01B806|$06:$B7F6:36 0A 0B 0E 1B FF	; Saber[end-FF]
0x01B80C|$06:$B7FC:27 1B 0A 10 18 17 FF	; Dragon[end-FF]
0x01B813|$06:$B803:37 12 1D 0A 17 FF	; Titan[end-FF]
0x01B819|$06:$B809:38 17 0D 0E 0A 0D FF	; Undead[end-FF]
0x01B820|$06:$B810:25 0A 1C 12 15 12 1C 14 FF	; Basilisk[end-FF]
0x01B829|$06:$B819:2A 18 18 19 12 FF	; Goopi[end-FF]
0x01B82F|$06:$B81F:32 1B 0C FF	; Orc[end-FF]
0x01B833|$06:$B823:33 1E 19 19 0E 1D FF	; Puppet[end-FF]
0x01B83A|$06:$B82A:30 1E 16 16 22 FF	; Mummy[end-FF]
0x01B840|$06:$B830:28 1F 12 15 FF	; Evil[end-FF]
0x01B845|$06:$B835:2A 0A 1C FF	; Gas[end-FF]
0x01B849|$06:$B839:2B 18 1B 14 FF	; Hork[end-FF]
0x01B84E|$06:$B83E:2B 0A 20 14 FF	; Hawk[end-FF]
0x01B853|$06:$B843:36 18 1B 0C 0E 1B 0E 1B FF	; Sorcerer[end-FF]
0x01B85C|$06:$B84C:30 0E 1D 0A 15 FF	; Metal[end-FF]
0x01B862|$06:$B852:2B 1E 17 1D 0E 1B FF	; Hunter[end-FF]
0x01B869|$06:$B859:28 1F 12 15 FF	; Evil[end-FF]
; Monster list part 2, line 1
; indirect data load target (via $8034)
0x01B86E|$06:$B85E:2B 12 0B 0A 0B 0A 17 10 18 FF	; Hibabango[end-FF]
0x01B878|$06:$B868:2A 1B 0A 0B 18 18 19 12 FF	; Graboopi[end-FF]
0x01B881|$06:$B871:2A 18 15 0D FF	; Gold[end-FF]
0x01B886|$06:$B876:28 1F 12 15 FF	; Evil[end-FF]
0x01B88B|$06:$B87B:2A 11 18 1E 15 FF	; Ghoul[end-FF]
0x01B891|$06:$B881:39 0A 16 19 12 1B 1E 1C FF	; Vampirus[end-FF]
0x01B89A|$06:$B88A:30 0E 10 0A FF	; Mega[end-FF]
0x01B89F|$06:$B88F:36 0A 0B 0E 1B FF	; Saber[end-FF]
0x01B8A5|$06:$B895:30 0E 1D 0A 15 FF	; Metal[end-FF]
0x01B8AB|$06:$B89B:32 23 20 0A 1B 10 FF	; Ozwarg[end-FF]
0x01B8B2|$06:$B8A2:27 0A 1B 14 FF	; Dark[end-FF]
0x01B8B7|$06:$B8A7:2A 0A 1B 10 18 22 15 0E FF	; Gargoyle[end-FF]
0x01B8C0|$06:$B8B0:32 1B 0C FF	; Orc[end-FF]
0x01B8C4|$06:$B8B4:30 0A 10 12 0C FF	; Magic[end-FF]
0x01B8CA|$06:$B8BA:25 0E 1B 1C 0E 1B 14 0E 1B FF	; Berserker[end-FF]
0x01B8D4|$06:$B8C4:30 0E 1D 0A 15 FF	; Metal[end-FF]
0x01B8DA|$06:$B8CA:2B 0A 1B 10 18 17 67 1C FF	; Hargon's[end-FF]
0x01B8E3|$06:$B8D3:26 22 0C 15 18 19 1C FF	; Cyclops[end-FF]
0x01B8EB|$06:$B8DB:24 1D 1D 0A 0C 14 0B 18 1D FF	; Attackbot[end-FF]
0x01B8F5|$06:$B8E5:2A 1B 0E 0E 17 FF	; Green[end-FF]
0x01B8FB|$06:$B8EB:30 0A 0C 0E FF	; Mace[end-FF]
0x01B900|$06:$B8F0:29 15 0A 16 0E FF	; Flame[end-FF]
0x01B906|$06:$B8F6:36 12 15 1F 0E 1B FF	; Silver[end-FF]
0x01B90D|$06:$B8FD:25 15 12 23 23 0A 1B 0D FF	; Blizzard[end-FF]
0x01B916|$06:$B906:2A 12 0A 17 1D FF	; Giant[end-FF]
0x01B91C|$06:$B90C:2A 18 15 0D FF	; Gold[end-FF]
0x01B921|$06:$B911:25 1E 15 15 20 18 17 10 FF	; Bullwong[end-FF]
0x01B92A|$06:$B91A:24 1D 15 0A 1C FF	; Atlas[end-FF]
0x01B930|$06:$B920:25 0A 23 1E 23 1E FF	; Bazuzu[end-FF]
0x01B937|$06:$B927:3D 0A 1B 15 18 21 FF	; Zarlox[end-FF]
0x01B93E|$06:$B92E:2B 0A 1B 10 18 17 FF	; Hargon[end-FF]
0x01B945|$06:$B935:30 0A 15 1B 18 1D 11 FF	; Malroth[end-FF]
0x01B94D|$06:$B93D:28 17 0E 16 12 0E 1C FF	; Enemies[end-FF]
; Monster list part 1, line 2
; indirect data load target (via $802A)
0x01B955|$06:$B945:FF	; [end-FF]
0x01B956|$06:$B946:36 15 1E 10 FF	; Slug[end-FF]
0x01B95B|$06:$B94B:24 17 1D FF	; Ant[end-FF]
0x01B95F|$06:$B94F:FF	; [end-FF]
0x01B960|$06:$B950:30 18 1E 1C 0E FF	; Mouse[end-FF]
0x01B966|$06:$B956:FF	; [end-FF]
0x01B967|$06:$B957:30 18 1E 1C 0E FF	; Mouse[end-FF]
0x01B96D|$06:$B95D:FF	; [end-FF]
0x01B96E|$06:$B95E:24 17 1D FF	; Ant[end-FF]
0x01B972|$06:$B962:FF	; [end-FF]
0x01B973|$06:$B963:35 0A 1D FF	; Rat[end-FF]
0x01B977|$06:$B967:26 18 0B 1B 0A FF	; Cobra[end-FF]
0x01B97D|$06:$B96D:24 17 1D FF	; Ant[end-FF]
0x01B981|$06:$B971:FF	; [end-FF]
0x01B982|$06:$B972:FF	; [end-FF]
0x01B983|$06:$B973:3A 0A 1B FF	; War[end-FF]
0x01B987|$06:$B977:29 15 22 FF	; Fly[end-FF]
0x01B98B|$06:$B97B:FF	; [end-FF]
0x01B98C|$06:$B97C:FF	; [end-FF]
0x01B98D|$06:$B97D:35 0A 1D FF	; Rat[end-FF]
0x01B991|$06:$B981:FF	; [end-FF]
0x01B992|$06:$B982:FF	; [end-FF]
0x01B993|$06:$B983:FF	; [end-FF]
0x01B994|$06:$B984:36 15 1E 10 FF	; Slug[end-FF]
0x01B999|$06:$B989:25 0A 15 15 FF	; Ball[end-FF]
0x01B99E|$06:$B98E:FF	; [end-FF]
0x01B99F|$06:$B98F:30 0A 17 FF	; Man[end-FF]
0x01B9A3|$06:$B993:25 0A 0B 18 18 17 FF	; Baboon[end-FF]
0x01B9AA|$06:$B99A:FF	; [end-FF]
0x01B9AB|$06:$B99B:FF	; [end-FF]
0x01B9AC|$06:$B99C:2F 12 15 22 FF	; Lily[end-FF]
0x01B9B1|$06:$B9A1:30 0A 17 FF	; Man[end-FF]
0x01B9B5|$06:$B9A5:FF	; [end-FF]
0x01B9B6|$06:$B9A6:37 12 10 0E 1B FF	; Tiger[end-FF]
0x01B9BC|$06:$B9AC:29 15 22 FF	; Fly[end-FF]
0x01B9C0|$06:$B9B0:37 1B 0E 0E FF	; Tree[end-FF]
0x01B9C5|$06:$B9B5:FF	; [end-FF]
0x01B9C6|$06:$B9B6:FF	; [end-FF]
0x01B9C7|$06:$B9B7:FF	; [end-FF]
0x01B9C8|$06:$B9B8:FF	; [end-FF]
0x01B9C9|$06:$B9B9:30 0A 17 FF	; Man[end-FF]
0x01B9CD|$06:$B9BD:FF	; [end-FF]
0x01B9CE|$06:$B9BE:37 1B 0E 0E FF	; Tree[end-FF]
0x01B9D3|$06:$B9C3:FF	; [end-FF]
0x01B9D4|$06:$B9C4:FF	; [end-FF]
0x01B9D5|$06:$B9C5:30 0A 17 FF	; Man[end-FF]
0x01B9D9|$06:$B9C9:FF	; [end-FF]
0x01B9DA|$06:$B9CA:36 15 12 16 0E FF	; Slime[end-FF]
0x01B9E0|$06:$B9D0:FF	; [end-FF]
0x01B9E1|$06:$B9D1:28 22 0E FF	; Eye[end-FF]
; Monster list part 2, line 2
; indirect data load target (via $8036)
0x01B9E5|$06:$B9D5:FF	; [end-FF]
0x01B9E6|$06:$B9D6:FF	; [end-FF]
0x01B9E7|$06:$B9D7:32 1B 0C FF	; Orc[end-FF]
0x01B9EB|$06:$B9DB:26 15 18 20 17 FF	; Clown[end-FF]
0x01B9F1|$06:$B9E1:FF	; [end-FF]
0x01B9F2|$06:$B9E2:FF	; [end-FF]
0x01B9F3|$06:$B9E3:2E 17 12 10 11 1D FF	; Knight[end-FF]
0x01B9FA|$06:$B9EA:2F 12 18 17 FF	; Lion[end-FF]
0x01B9FF|$06:$B9EF:2B 1E 17 1D 0E 1B FF	; Hunter[end-FF]
0x01BA06|$06:$B9F6:FF	; [end-FF]
0x01BA07|$06:$B9F7:28 22 0E FF	; Eye[end-FF]
0x01BA0B|$06:$B9FB:FF	; [end-FF]
0x01BA0C|$06:$B9FC:2E 12 17 10 FF	; King[end-FF]
0x01BA11|$06:$BA01:39 0A 16 19 12 1B 1E 1C FF	; Vampirus[end-FF]
0x01BA1A|$06:$BA0A:FF	; [end-FF]
0x01BA1B|$06:$BA0B:25 0A 0B 0B 15 0E FF	; Babble[end-FF]
0x01BA22|$06:$BA12:2E 17 12 10 11 1D FF	; Knight[end-FF]
0x01BA29|$06:$BA19:FF	; [end-FF]
0x01BA2A|$06:$BA1A:FF	; [end-FF]
0x01BA2B|$06:$BA1B:27 1B 0A 10 18 17 FF	; Dragon[end-FF]
0x01BA32|$06:$BA22:30 0A 1C 1D 0E 1B FF	; Master[end-FF]
0x01BA39|$06:$BA29:FF	; [end-FF]
0x01BA3A|$06:$BA2A:25 0A 1D 0B 18 18 17 FF	; Batboon[end-FF]
0x01BA42|$06:$BA32:FF	; [end-FF]
0x01BA43|$06:$BA33:FF	; [end-FF]
0x01BA44|$06:$BA34:25 0A 1D 0B 18 18 17 FF	; Batboon[end-FF]
0x01BA4C|$06:$BA3C:FF	; [end-FF]
0x01BA4D|$06:$BA3D:FF	; [end-FF]
0x01BA4E|$06:$BA3E:FF	; [end-FF]
0x01BA4F|$06:$BA3F:FF	; [end-FF]
0x01BA50|$06:$BA40:FF	; [end-FF]
0x01BA51|$06:$BA41:FF	; [end-FF]
0x01BA52|$06:$BA42:FF	; [end-FF]
; tiles for redrawing the part of the main COMMAND menu obscured by the EQUIP sub-menu when the EQUIP sub-menu is closed; (only?) read during battle where there is no main COMMAND menu
; completely useless?
; indirect data load target (via $802C)
0x01BA53|$06:$BA43:24 31 5F 5F
0x01BA57|$06:$BA47:27 77 5F 5F
0x01BA5B|$06:$BA4B:77 77 5F 5F
0x01BA5F|$06:$BA4F:77 7C 5F 5F
0x01BA63|$06:$BA53:5F 5F 5F 5F
0x01BA67|$06:$BA57:36 33 5F 5F
0x01BA6B|$06:$BA5B:28 2F 5F 5F
0x01BA6F|$06:$BA5F:2F 7B 5F 7B
0x01BA73|$06:$BA63:5F 5F 5F 5F
0x01BA77|$06:$BA67:2C 37 5F 5F
0x01BA7B|$06:$BA6B:28 30 5F 5F
0x01BA7F|$06:$BA6F:5F 7B 5F 7B
0x01BA83|$06:$BA73:5F 5F 7D 7D
0x01BA87|$06:$BA77:28 34 7D 7D
0x01BA8B|$06:$BA7B:38 2C 7D 7D
0x01BA8F|$06:$BA7F:33 7B 7D 7E
; indirect data load target (via $802E)
0x01BA93|$06:$BA83:77 77 77 77
0x01BA97|$06:$BA87:77 77 77 7C
0x01BA9B|$06:$BA8B:79 77 77 77
0x01BA9F|$06:$BA8F:77 77 7C 7B
0x01BAA3|$06:$BA93:76 5F 5F 5F
0x01BAA7|$06:$BA97:5F 5F 7B 7B
0x01BAAB|$06:$BA9B:7A 7D 7D 7D
0x01BAAF|$06:$BA9F:7D 7D 7E 7B

; data -> code
; indirect control flow target (via $803A)
0x01BAB3|$06:$BAA3:A9 05   	LDA #$05   
0x01BAB5|$06:$BAA5:85 94   	STA $94    	; return bank for various function calls, doubles as index of selected option for multiple-choice menus
0x01BAB7|$06:$BAA7:A5 31   	LDA $31    	; current map ID
0x01BAB9|$06:$BAA9:C9 03   	CMP #$03   	; Map ID #$03: Midenhall 1F
0x01BABB|$06:$BAAB:F0 01   	BEQ $BAAE  
; control flow target (from $BAB3, $BAB9, $BABF, $BAC3)
0x01BABD|$06:$BAAD:60      	RTS        

; control flow target (from $BAAB)
0x01BABE|$06:$BAAE:AD 49 05	LDA $0549  	; NPC #$01 sprite ID
0x01BAC1|$06:$BAB1:C9 FF   	CMP #$FF   
0x01BAC3|$06:$BAB3:F0 F8   	BEQ $BAAD  
0x01BAC5|$06:$BAB5:A5 17   	LDA $17    	; current map Y-pos (1)
0x01BAC7|$06:$BAB7:C9 05   	CMP #$05   
0x01BAC9|$06:$BAB9:D0 F2   	BNE $BAAD  
0x01BACB|$06:$BABB:A5 16   	LDA $16    	; current map X-pos (1)
0x01BACD|$06:$BABD:C9 0E   	CMP #$0E   
0x01BACF|$06:$BABF:90 EC   	BCC $BAAD  
0x01BAD1|$06:$BAC1:C9 11   	CMP #$11   
0x01BAD3|$06:$BAC3:B0 E8   	BCS $BAAD  
0x01BAD5|$06:$BAC5:AD 4B 05	LDA $054B  	; NPC #$01 scripted motion high byte
0x01BAD8|$06:$BAC8:C9 7F   	CMP #$7F   
0x01BADA|$06:$BACA:D0 09   	BNE $BAD5  
; call to code in a different bank ($0F:$CCF1)
0x01BADC|$06:$BACC:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BADF|$06:$BACF:82
; indirect data load target
0x01BAE0|$06:$BAD0:21
; indirect data load target
0x01BAE1|$06:$BAD1:D5 80	; $07:$80D5; motion script for Moonbrooke, ending part 1 (turned)

; data -> code
0x01BAE3|$06:$BAD3:90 0A   	BCC $BADF  
; control flow target (from $BACA)
; call to code in a different bank ($0F:$CCF1)
0x01BAE5|$06:$BAD5:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BAE8|$06:$BAD8:82
; indirect data load target
0x01BAE9|$06:$BAD9:21
; indirect data load target
0x01BAEA|$06:$BADA:DB 80	; $07:$80DB; motion script for Cannock, ending part 1

; data -> code
0x01BAEC|$06:$BADC:EE 65 05	INC $0565  	; NPC #$05 Y-pos
; control flow target (from $BAD3)
; call to code in a different bank ($0F:$CCF1)
0x01BAEF|$06:$BADF:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BAF2|$06:$BAE2:81
; indirect data load target
0x01BAF3|$06:$BAE3:21
; indirect data load target
0x01BAF4|$06:$BAE4:CF 80	; $07:$80CF; motion script for Moonbrooke, ending part 1 (not turned)

; data -> code
0x01BAF6|$06:$BAE6:A5 16   	LDA $16    	; current map X-pos (1)
0x01BAF8|$06:$BAE8:C9 0E   	CMP #$0E   
0x01BAFA|$06:$BAEA:D0 08   	BNE $BAF4  
0x01BAFC|$06:$BAEC:EE 5A 05	INC $055A  	; NPC #$03 scripted motion low byte
0x01BAFF|$06:$BAEF:CE 5C 05	DEC $055C  	; NPC #$04 X-pos
0x01BB02|$06:$BAF2:D0 0A   	BNE $BAFE  
; control flow target (from $BAEA)
0x01BB04|$06:$BAF4:C9 10   	CMP #$10   
0x01BB06|$06:$BAF6:D0 06   	BNE $BAFE  
0x01BB08|$06:$BAF8:CE 5A 05	DEC $055A  	; NPC #$03 scripted motion low byte
0x01BB0B|$06:$BAFB:EE 5C 05	INC $055C  	; NPC #$04 X-pos
; control flow target (from $BAF2, $BAF6)
0x01BB0E|$06:$BAFE:A5 16   	LDA $16    	; current map X-pos (1)
0x01BB10|$06:$BB00:18      	CLC        
0x01BB11|$06:$BB01:6D 44 05	ADC $0544  	; NPC #$01 ?
0x01BB14|$06:$BB04:18      	CLC        
0x01BB15|$06:$BB05:6D 4C 05	ADC $054C  	; NPC #$02 ?
0x01BB18|$06:$BB08:C9 0E   	CMP #$0E   
0x01BB1A|$06:$BB0A:D0 08   	BNE $BB14  
0x01BB1C|$06:$BB0C:CE 62 05	DEC $0562  	; NPC #$04 scripted motion low byte
0x01BB1F|$06:$BB0F:CE 64 05	DEC $0564  	; NPC #$05 X-pos
0x01BB22|$06:$BB12:D0 0A   	BNE $BB1E  
; control flow target (from $BB0A)
0x01BB24|$06:$BB14:C9 10   	CMP #$10   
0x01BB26|$06:$BB16:D0 06   	BNE $BB1E  
0x01BB28|$06:$BB18:EE 62 05	INC $0562  	; NPC #$04 scripted motion low byte
0x01BB2B|$06:$BB1B:EE 64 05	INC $0564  	; NPC #$05 X-pos
; control flow target (from $BB12, $BB16)
0x01BB2E|$06:$BB1E:A9 00   	LDA #$00   
0x01BB30|$06:$BB20:A8      	TAY        
; control flow target (from $BB27)
0x01BB31|$06:$BB21:99 42 05	STA $0542,Y	; NPC #$00 ?
0x01BB34|$06:$BB24:C8      	INY        
0x01BB35|$06:$BB25:C0 10   	CPY #$10   
0x01BB37|$06:$BB27:D0 F8   	BNE $BB21  
0x01BB39|$06:$BB29:A9 FF   	LDA #$FF   
0x01BB3B|$06:$BB2B:8D 49 05	STA $0549  	; NPC #$01 sprite ID
0x01BB3E|$06:$BB2E:8D 51 05	STA $0551  	; NPC #$02 sprite ID
0x01BB41|$06:$BB31:A2 01   	LDX #$01   
0x01BB43|$06:$BB33:8E 61 05	STX $0561  	; NPC #$04 sprite ID
0x01BB46|$06:$BB36:E8      	INX        
0x01BB47|$06:$BB37:8E 69 05	STX $0569  	; NPC #$05 sprite ID
; call to code in a different bank ($0F:$CCD2)
0x01BB4A|$06:$BB3A:4C D2 CC	JMP $CCD2  	; execute scripted motion

; indirect control flow target (via $8038)
; call to code in a different bank ($0F:$CD26)
0x01BB4D|$06:$BB3D:20 26 CD	JSR $CD26  	; set Z if your current map position is the (X, Y) co-ordinates given by the next 2 bytes

; code -> data
; indirect data load target
0x01BB50|$06:$BB40:0F
; indirect data load target
0x01BB51|$06:$BB41:03

; data -> code
0x01BB52|$06:$BB42:F0 01   	BEQ $BB45  
0x01BB54|$06:$BB44:60      	RTS        

; control flow target (from $BB42)
0x01BB55|$06:$BB45:A9 FF   	LDA #$FF   
0x01BB57|$06:$BB47:85 35   	STA $35    	; flag indicating whether any menu is currently open
0x01BB59|$06:$BB49:A9 46   	LDA #$46   
0x01BB5B|$06:$BB4B:8D 2C 06	STA $062C  	; current battle message delay
; call to code in a different bank ($0F:$EB76)
0x01BB5E|$06:$BB4E:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01BB61|$06:$BB51:04	; Menu ID #$04: Dialogue window

; data -> code
0x01BB62|$06:$BB52:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$FC50)
0x01BB64|$06:$BB54:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01BB67|$06:$BB57:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BB6A|$06:$BB5A:B5	; String ID #$01B5: ‘[name], thou art of the line of Erdrick and have proven thy heritage by thy deeds[.’][wait][end-FC]

; data -> code
; control flow target (from $BB6B)
; call to code in a different bank ($0F:$FA2E)
0x01BB6B|$06:$BB5B:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BB6E|$06:$BB5E:B6	; String ID #$01B6: ‘Now is the time for thee to take the throne. Will it be so?’[FD][FD][end-FC]

; data -> code
; call to code in a different bank ($0F:$EB76)
0x01BB6F|$06:$BB5F:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01BB72|$06:$BB62:19	; Menu ID #$19: General menu: YES/NO

; data -> code
0x01BB73|$06:$BB63:C9 00   	CMP #$00   
0x01BB75|$06:$BB65:F0 07   	BEQ $BB6E  
; call to code in a different bank ($0F:$FA2E)
0x01BB77|$06:$BB67:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BB7A|$06:$BB6A:B7	; String ID #$01B7: ‘Be careful, [name]. Do not be selfish[.’][wait][end-FC]

; data -> code
0x01BB7B|$06:$BB6B:4C 5B BB	JMP $BB5B  

; control flow target (from $BB65)
0x01BB7E|$06:$BB6E:A9 01   	LDA #$01   
; call to code in a different bank ($0F:$FC50)
0x01BB80|$06:$BB70:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01BB83|$06:$BB73:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BB86|$06:$BB76:B8	; String ID #$01B8: ‘Hail all to the new monarch of Midenhall!’[wait][line]‘Now, [name], Prince of Cannock, come forth[.’][wait][end-FC]

; data -> code
0x01BB87|$06:$BB77:A9 02   	LDA #$02   
; call to code in a different bank ($0F:$FC50)
0x01BB89|$06:$BB79:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01BB8C|$06:$BB7C:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BB8F|$06:$BB7F:BC	; String ID #$01BC: ‘[name], Princess of Moonbrooke, come forth[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$D0F5)
0x01BB90|$06:$BB80:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
; call to code in a different bank ($0F:$CCF1)
0x01BB93|$06:$BB83:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BB96|$06:$BB86:85
; indirect data load target
0x01BB97|$06:$BB87:20
; indirect data load target
0x01BB98|$06:$BB88:BE 80	; $07:$80BE; motion script for top 2 guards, ending part 2

; data -> code
; call to code in a different bank ($0F:$CCF1)
0x01BB9A|$06:$BB8A:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BB9D|$06:$BB8D:84
; indirect data load target
0x01BB9E|$06:$BB8E:20
; indirect data load target
0x01BB9F|$06:$BB8F:BE 80	; $07:$80BE; motion script for top 2 guards, ending part 2

; data -> code
; call to code in a different bank ($0F:$CCE7)
0x01BBA1|$06:$BB91:20 E7 CC	JSR $CCE7  
0x01BBA4|$06:$BB94:20 38 BC	JSR $BC38  
; call to code in a different bank ($0F:$CCF1)
0x01BBA7|$06:$BB97:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BBAA|$06:$BB9A:82
; indirect data load target
0x01BBAB|$06:$BB9B:20
; indirect data load target
0x01BBAC|$06:$BB9C:55 80	; $07:$8055; motion script for Cannock and Moonbrooke, ending part 3, dog in Zahan, triggered from right

; data -> code
; call to code in a different bank ($0F:$CCF1)
0x01BBAE|$06:$BB9E:20 F1 CC	JSR $CCF1  	; set up scripted motion variables based on next 4 bytes (low 5 bits = NPC index, NPC index + 1's motion + direction byte?, 2-byte pointer to motion script)

; code -> data
; indirect data load target
0x01BBB1|$06:$BBA1:81
; indirect data load target
0x01BBB2|$06:$BBA2:20
; indirect data load target
0x01BBB3|$06:$BBA3:55 80	; $07:$8055; motion script for Cannock and Moonbrooke, ending part 3, dog in Zahan, triggered from right

; data -> code
; call to code in a different bank ($0F:$CCE7)
0x01BBB5|$06:$BBA5:20 E7 CC	JSR $CCE7  
0x01BBB8|$06:$BBA8:20 38 BC	JSR $BC38  
; call to code in a different bank ($0F:$EB76)
0x01BBBB|$06:$BBAB:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01BBBE|$06:$BBAE:04	; Menu ID #$04: Dialogue window

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x01BBBF|$06:$BBAF:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BBC2|$06:$BBB2:B9	; String ID #$01B9: ‘This charge I lay on the three heroes, that for evermore they guard against evil[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$D0F5)
0x01BBC3|$06:$BBB3:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x01BBC6|$06:$BBB6:A0 38   	LDY #$38   
; control flow target (from $BBC2)
0x01BBC8|$06:$BBB8:A9 02   	LDA #$02   
0x01BBCA|$06:$BBBA:99 78 05	STA $0578,Y	; NPC #$07 motion nybble + direction nybble
0x01BBCD|$06:$BBBD:98      	TYA        
0x01BBCE|$06:$BBBE:38      	SEC        
0x01BBCF|$06:$BBBF:E9 08   	SBC #$08   
0x01BBD1|$06:$BBC1:A8      	TAY        
0x01BBD2|$06:$BBC2:10 F4   	BPL $BBB8  
; call to code in a different bank ($0F:$CF64)
0x01BBD4|$06:$BBC4:20 64 CF	JSR $CF64  
0x01BBD7|$06:$BBC7:20 38 BC	JSR $BC38  
; call to code in a different bank ($0F:$EB76)
0x01BBDA|$06:$BBCA:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01BBDD|$06:$BBCD:04	; Menu ID #$04: Dialogue window

; data -> code
0x01BBDE|$06:$BBCE:A9 00   	LDA #$00   
; call to code in a different bank ($0F:$FC50)
0x01BBE0|$06:$BBD0:20 50 FC	JSR $FC50  	; print name of hero given by low 2 bits of A to $6119, terminated by #$FA
; call to code in a different bank ($0F:$FA2E)
0x01BBE3|$06:$BBD3:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BBE6|$06:$BBD6:BA	; String ID #$01BA: ‘Three cheers for the new monarch of Midenhall![line]Hip-hip-hooray!’[end-FC]

; data -> code
; call to code in a different bank ($0F:$D0F5)
0x01BBE7|$06:$BBD7:20 F5 D0	JSR $D0F5  	; wait for a while and then wipe menu regions #$03, #$00, and #$01
0x01BBEA|$06:$BBDA:A9 01   	LDA #$01   
0x01BBEC|$06:$BBDC:8D 68 05	STA $0568  	; NPC #$05 motion nybble + direction nybble
0x01BBEF|$06:$BBDF:20 2D BC	JSR $BC2D  
0x01BBF2|$06:$BBE2:A9 02   	LDA #$02   
0x01BBF4|$06:$BBE4:8D 68 05	STA $0568  	; NPC #$05 motion nybble + direction nybble
0x01BBF7|$06:$BBE7:20 2D BC	JSR $BC2D  
0x01BBFA|$06:$BBEA:A2 0A   	LDX #$0A   
; call to code in a different bank ($0F:$C1EE)
0x01BBFC|$06:$BBEC:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x01BBFF|$06:$BBEF:A9 03   	LDA #$03   
0x01BC01|$06:$BBF1:8D 60 05	STA $0560  	; NPC #$04 motion nybble + direction nybble
0x01BC04|$06:$BBF4:20 2D BC	JSR $BC2D  
0x01BC07|$06:$BBF7:A9 02   	LDA #$02   
0x01BC09|$06:$BBF9:8D 60 05	STA $0560  	; NPC #$04 motion nybble + direction nybble
0x01BC0C|$06:$BBFC:20 2D BC	JSR $BC2D  
0x01BC0F|$06:$BBFF:20 34 BC	JSR $BC34  
0x01BC12|$06:$BC02:A9 01   	LDA #$01   
0x01BC14|$06:$BC04:8D 40 05	STA $0540  	; NPC #$00 ? + direction nybble
0x01BC17|$06:$BC07:20 2D BC	JSR $BC2D  
0x01BC1A|$06:$BC0A:A9 02   	LDA #$02   
0x01BC1C|$06:$BC0C:8D 40 05	STA $0540  	; NPC #$00 ? + direction nybble
0x01BC1F|$06:$BC0F:20 2D BC	JSR $BC2D  
0x01BC22|$06:$BC12:20 34 BC	JSR $BC34  
0x01BC25|$06:$BC15:A9 19   	LDA #$19   	; Music ID #$19: end credits BGM
; call to code in a different bank ($0F:$C561)
0x01BC27|$06:$BC17:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
0x01BC2A|$06:$BC1A:20 38 BC	JSR $BC38  
0x01BC2D|$06:$BC1D:A9 FF   	LDA #$FF   	; SLOW
0x01BC2F|$06:$BC1F:8D 2C 06	STA $062C  	; current battle message delay
; call to code in a different bank ($0F:$EB76)
0x01BC32|$06:$BC22:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01BC35|$06:$BC25:04	; Menu ID #$04: Dialogue window

; data -> code
; call to code in a different bank ($0F:$FA2E)
0x01BC36|$06:$BC26:20 2E FA	JSR $FA2E  	; display string ID specified by next byte + #$0100

; code -> data
; indirect data load target
0x01BC39|$06:$BC29:93	; String ID #$0193: ‘Then peace returned[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$D343)
0x01BC3A|$06:$BC2A:4C 43 D3	JMP $D343  

; control flow target (from $BBDF, $BBE7, $BBF4, $BBFC, $BC07, $BC0F)
; call to code in a different bank ($0F:$CF64)
0x01BC3D|$06:$BC2D:20 64 CF	JSR $CF64  
0x01BC40|$06:$BC30:A2 0A   	LDX #$0A   
0x01BC42|$06:$BC32:D0 06   	BNE $BC3A  
; control flow target (from $BBFF, $BC12)
0x01BC44|$06:$BC34:A2 1E   	LDX #$1E   
0x01BC46|$06:$BC36:D0 02   	BNE $BC3A  
; control flow target (from $BB94, $BBA8, $BBC7, $BC1A)
0x01BC48|$06:$BC38:A2 3C   	LDX #$3C   
; control flow target (from $BC32, $BC36)
; call to code in a different bank ($0F:$C1EE)
0x01BC4A|$06:$BC3A:4C EE C1	JMP $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF

; indirect control flow target (via $803E)
0x01BC4D|$06:$BC3D:A2 3D   	LDX #$3D   
; control flow target (from $BC46)
0x01BC4F|$06:$BC3F:BD 4F BC	LDA $BC4F,X	; code copied to and executed in RAM
0x01BC52|$06:$BC42:9D 00 04	STA $0400,X	; menu-based palette overrides start
0x01BC55|$06:$BC45:CA      	DEX        
0x01BC56|$06:$BC46:10 F7   	BPL $BC3F  
0x01BC58|$06:$BC48:AD F6 05	LDA $05F6  	; current bank
0x01BC5B|$06:$BC4B:48      	PHA        
; call to code in RAM
0x01BC5C|$06:$BC4C:4C 33 04	JMP $0433  

; code copied to and executed in RAM
; control flow target (from $BC8B)
; indexed data load target (from $BC3F)
0x01BC5F|$06:$BC4F:AC F6 05	LDY $05F6  	; current bank
0x01BC62|$06:$BC52:C8      	INY        
0x01BC63|$06:$BC53:98      	TYA        
0x01BC64|$06:$BC54:29 07   	AND #$07   
0x01BC66|$06:$BC56:48      	PHA        
0x01BC67|$06:$BC57:A6 43   	LDX $43    
0x01BC69|$06:$BC59:E0 03   	CPX #$03   
0x01BC6B|$06:$BC5B:D0 09   	BNE $BC66  
; call to code in a different bank ($0F:$C476)
0x01BC6D|$06:$BC5D:20 76 C4	JSR $C476  	; read joypad 1 data into $2F
0x01BC70|$06:$BC60:46 2F   	LSR $2F    	; joypad 1 data
0x01BC72|$06:$BC62:A6 43   	LDX $43    
0x01BC74|$06:$BC64:90 1E   	BCC $BC84  
; control flow target (from $BC5B)
0x01BC76|$06:$BC66:E8      	INX        
0x01BC77|$06:$BC67:E0 14   	CPX #$14   
0x01BC79|$06:$BC69:90 19   	BCC $BC84  
; call to code in a different bank ($0F:$C3AB)
0x01BC7B|$06:$BC6B:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x01BC7E|$06:$BC6E:A5 32   	LDA $32    	; RNG byte 0
0x01BC80|$06:$BC70:29 24   	AND #$24   
0x01BC82|$06:$BC72:D0 10   	BNE $BC84  
; control flow target (from $BC79)
; call to code in a different bank ($0F:$C476)
0x01BC84|$06:$BC74:20 76 C4	JSR $C476  	; read joypad 1 data into $2F
0x01BC87|$06:$BC77:46 2F   	LSR $2F    	; joypad 1 data
0x01BC89|$06:$BC79:90 F9   	BCC $BC74  
; control flow target (from $BC80)
; call to code in a different bank ($0F:$C476)
0x01BC8B|$06:$BC7B:20 76 C4	JSR $C476  	; read joypad 1 data into $2F
0x01BC8E|$06:$BC7E:46 2F   	LSR $2F    	; joypad 1 data
0x01BC90|$06:$BC80:B0 F9   	BCS $BC7B  
0x01BC92|$06:$BC82:A2 03   	LDX #$03   
; control flow target (from $BC64, $BC69, $BC72)
0x01BC94|$06:$BC84:68      	PLA        
; call to code in a different bank ($0F:$C3D5)
0x01BC95|$06:$BC85:20 D5 C3	JSR $C3D5  	; save A to $05F6, X to $43, and load bank specified by A
; call to code in a different bank ($0F:$C1EE)
0x01BC98|$06:$BC88:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x01BC9B|$06:$BC8B:F0 C2   	BEQ $BC4F  	; code copied to and executed in RAM

; indirect control flow target (via $8040)
0x01BC9D|$06:$BC8D:A5 17   	LDA $17    	; current map Y-pos (1)
0x01BC9F|$06:$BC8F:C9 07   	CMP #$07   
0x01BCA1|$06:$BC91:F0 01   	BEQ $BC94  
0x01BCA3|$06:$BC93:60      	RTS        

; control flow target (from $BC91)
0x01BCA4|$06:$BC94:A0 50   	LDY #$50   
0x01BCA6|$06:$BC96:A9 00   	LDA #$00   
; control flow target (from $BC9E)
0x01BCA8|$06:$BC98:99 3A 05	STA $053A,Y
0x01BCAB|$06:$BC9B:C8      	INY        
0x01BCAC|$06:$BC9C:C0 68   	CPY #$68   
0x01BCAE|$06:$BC9E:D0 F8   	BNE $BC98  
0x01BCB0|$06:$BCA0:A9 FF   	LDA #$FF   
0x01BCB2|$06:$BCA2:8D 91 05	STA $0591  	; NPC #$0A sprite ID
0x01BCB5|$06:$BCA5:8D 99 05	STA $0599  	; NPC #$0B sprite ID
0x01BCB8|$06:$BCA8:8D A1 05	STA $05A1  	; NPC #$0C sprite ID
0x01BCBB|$06:$BCAB:A5 16   	LDA $16    	; current map X-pos (1)
0x01BCBD|$06:$BCAD:8D 8C 05	STA $058C  	; NPC #$0A X-pos
0x01BCC0|$06:$BCB0:8D 94 05	STA $0594  	; NPC #$0B X-pos
0x01BCC3|$06:$BCB3:CE 94 05	DEC $0594  	; NPC #$0B X-pos
0x01BCC6|$06:$BCB6:8D 9C 05	STA $059C  	; NPC #$0C X-pos
0x01BCC9|$06:$BCB9:EE 9C 05	INC $059C  	; NPC #$0C X-pos
0x01BCCC|$06:$BCBC:A5 17   	LDA $17    	; current map Y-pos (1)
0x01BCCE|$06:$BCBE:8D 8D 05	STA $058D  	; NPC #$0A Y-pos
0x01BCD1|$06:$BCC1:EE 8D 05	INC $058D  	; NPC #$0A Y-pos
0x01BCD4|$06:$BCC4:8D 95 05	STA $0595  	; NPC #$0B Y-pos
0x01BCD7|$06:$BCC7:8D 9D 05	STA $059D  	; NPC #$0C Y-pos
0x01BCDA|$06:$BCCA:A9 04   	LDA #$04   
0x01BCDC|$06:$BCCC:8D 91 05	STA $0591  	; NPC #$0A sprite ID
0x01BCDF|$06:$BCCF:20 6C BD	JSR $BD6C  
0x01BCE2|$06:$BCD2:8D 99 05	STA $0599  	; NPC #$0B sprite ID
0x01BCE5|$06:$BCD5:20 6C BD	JSR $BD6C  
0x01BCE8|$06:$BCD8:8D A1 05	STA $05A1  	; NPC #$0C sprite ID
0x01BCEB|$06:$BCDB:20 6C BD	JSR $BD6C  
0x01BCEE|$06:$BCDE:20 7C BD	JSR $BD7C  
0x01BCF1|$06:$BCE1:20 7C BD	JSR $BD7C  
0x01BCF4|$06:$BCE4:A9 0A   	LDA #$0A   
0x01BCF6|$06:$BCE6:85 D0   	STA $D0    	; Malroth status flag (#$FF = defeated, #$00 = alive, others = countdown to battle)
; control flow target (from $BD23)
; call to code in a different bank ($0F:$C3AB)
0x01BCF8|$06:$BCE8:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x01BCFB|$06:$BCEB:A5 32   	LDA $32    	; RNG byte 0
0x01BCFD|$06:$BCED:29 0E   	AND #$0E   
0x01BCFF|$06:$BCEF:38      	SEC        
0x01BD00|$06:$BCF0:E9 08   	SBC #$08   
0x01BD02|$06:$BCF2:85 18   	STA $18    
; call to code in a different bank ($0F:$C3AB)
0x01BD04|$06:$BCF4:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x01BD07|$06:$BCF7:A5 32   	LDA $32    	; RNG byte 0
0x01BD09|$06:$BCF9:29 0E   	AND #$0E   
0x01BD0B|$06:$BCFB:38      	SEC        
0x01BD0C|$06:$BCFC:E9 08   	SBC #$08   
0x01BD0E|$06:$BCFE:85 19   	STA $19    
0x01BD10|$06:$BD00:A9 00   	LDA #$00   
0x01BD12|$06:$BD02:85 1C   	STA $1C    
0x01BD14|$06:$BD04:85 1E   	STA $1E    
0x01BD16|$06:$BD06:A9 87   	LDA #$87   	; Music ID #$87: hit 2 SFX
; call to code in a different bank ($0F:$C561)
0x01BD18|$06:$BD08:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
; call to code in a different bank ($0F:$D325)
0x01BD1B|$06:$BD0B:20 25 D3	JSR $D325  
; call to code in a different bank ($0F:$C3AB)
0x01BD1E|$06:$BD0E:20 AB C3	JSR $C3AB  	; generate a random number and store it in $32-$33 (two passes)
0x01BD21|$06:$BD11:A5 32   	LDA $32    	; RNG byte 0
0x01BD23|$06:$BD13:29 07   	AND #$07   
0x01BD25|$06:$BD15:D0 06   	BNE $BD1D  
; call to code in a different bank ($0F:$C511)
0x01BD27|$06:$BD17:20 11 C5	JSR $C511  	; flash screen 5 times
0x01BD2A|$06:$BD1A:4C 21 BD	JMP $BD21  

; control flow target (from $BD15)
0x01BD2D|$06:$BD1D:AA      	TAX        
; call to code in a different bank ($0F:$C1EE)
0x01BD2E|$06:$BD1E:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
; control flow target (from $BD1A)
0x01BD31|$06:$BD21:C6 D0   	DEC $D0    	; Malroth status flag (#$FF = defeated, #$00 = alive, others = countdown to battle)
0x01BD33|$06:$BD23:D0 C3   	BNE $BCE8  
; control flow target (from $BD31)
0x01BD35|$06:$BD25:A9 94   	LDA #$94   	; Music ID #$94: burning SFX
; call to code in a different bank ($0F:$C561)
0x01BD37|$06:$BD27:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
; call to code in a different bank ($0F:$D200)
0x01BD3A|$06:$BD2A:20 00 D2	JSR $D200  
0x01BD3D|$06:$BD2D:A5 98   	LDA $98    	; outcome of last fight?
0x01BD3F|$06:$BD2F:C9 FE   	CMP #$FE   
0x01BD41|$06:$BD31:90 F2   	BCC $BD25  
0x01BD43|$06:$BD33:A9 06   	LDA #$06   
0x01BD45|$06:$BD35:85 94   	STA $94    	; return bank for various function calls, doubles as index of selected option for multiple-choice menus
; call to code in a different bank ($0F:$FA32)
0x01BD47|$06:$BD37:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01BD4A|$06:$BD3A:E8	; String ID #$02E8: [wait]‘Thou hast delivered the world from Malroth's evil[.’][wait][line]‘Great is the victory and greater the rewards[.’][wait][line]‘I, Rubiss, have watched thy struggles and I am proud of thee[.’][end-FC]

; data -> code
; call to code in a different bank ($0F:$C515)
0x01BD4B|$06:$BD3B:20 15 C5	JSR $C515  	; flash screen 10 times
; call to code in a different bank ($0F:$C515)
0x01BD4E|$06:$BD3E:20 15 C5	JSR $C515  	; flash screen 10 times
0x01BD51|$06:$BD41:A9 84   	LDA #$84   
0x01BD53|$06:$BD43:8D 2D 06	STA $062D  	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01BD56|$06:$BD46:8D 3F 06	STA $063F  	; Cannock status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01BD59|$06:$BD49:8D 51 06	STA $0651  	; Moonbrooke status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
; call to code in a different bank ($0F:$C77B)
0x01BD5C|$06:$BD4C:20 7B C7	JSR $C77B  	; restore full HP/MP to all living party members
; call to code in a different bank ($0F:$EB76)
0x01BD5F|$06:$BD4F:20 76 EB	JSR $EB76  	; open menu specified by next byte

; code -> data
; indirect data load target
0x01BD62|$06:$BD52:01	; Menu ID #$04: Mini status window, top

; data -> code
; call to code in a different bank ($0F:$C22C)
0x01BD63|$06:$BD53:20 2C C2	JSR $C22C  
; call to code in a different bank ($0F:$FA32)
0x01BD66|$06:$BD56:20 32 FA	JSR $FA32  	; display string ID specified by next byte + #$0200

; code -> data
; indirect data load target
0x01BD69|$06:$BD59:E9	; String ID #$02E9: [wait]‘Go now!’[end-FC]

; data -> code
0x01BD6A|$06:$BD5A:A9 FF   	LDA #$FF   
0x01BD6C|$06:$BD5C:85 D0   	STA $D0    	; Malroth status flag (#$FF = defeated, #$00 = alive, others = countdown to battle)
0x01BD6E|$06:$BD5E:85 44   	STA $44    	; non-saved event status (#$00 = event start, #$01 = Lianport Gremlins defeated, #$02 = met with Lianport grandfather/have no friends at Shrine SW of Cannock, #$03 = King Midenhall moved to stairs, #$04 = King Midenhall moved down stairs, #$05 = King Midenhall spoke on Midenhall 1F, #$0B = Lighthouse Wizard 7F, #$1B Lighthouse Wizard 2F spoke, #$64 = Hargon dead, #$FF = event end)
0x01BD70|$06:$BD60:A2 01   	LDX #$01   
; call to code in a different bank ($0F:$D2F1)
0x01BD72|$06:$BD62:20 F1 D2	JSR $D2F1  
0x01BD75|$06:$BD65:A9 00   	LDA #$00   
0x01BD77|$06:$BD67:85 8E   	STA $8E    	; flag for in battle or not (#$FF)?
; call to code in a different bank ($0F:$D88F)
0x01BD79|$06:$BD69:4C 8F D8	JMP $D88F  	; warp to warp point given by ($0C)

; control flow target (from $BCCF, $BCD5, $BCDB)
0x01BD7C|$06:$BD6C:A9 91   	LDA #$91   	; Music ID #$91: swamp SFX
; call to code in a different bank ($0F:$C561)
0x01BD7E|$06:$BD6E:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
; call to code in a different bank ($0F:$D32E)
0x01BD81|$06:$BD71:20 2E D3	JSR $D32E  
0x01BD84|$06:$BD74:A2 28   	LDX #$28   
; call to code in a different bank ($0F:$C1EE)
0x01BD86|$06:$BD76:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x01BD89|$06:$BD79:A9 04   	LDA #$04   
0x01BD8B|$06:$BD7B:60      	RTS        

; control flow target (from $BCDE, $BCE1)
0x01BD8C|$06:$BD7C:A9 94   	LDA #$94   	; Music ID #$94: burning SFX
; call to code in a different bank ($0F:$C561)
0x01BD8E|$06:$BD7E:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
; call to code in a different bank ($0F:$C511)
0x01BD91|$06:$BD81:20 11 C5	JSR $C511  	; flash screen 5 times
0x01BD94|$06:$BD84:A2 11   	LDX #$11   
; call to code in a different bank ($0F:$C1EE)
0x01BD96|$06:$BD86:20 EE C1	JSR $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF
0x01BD99|$06:$BD89:A9 94   	LDA #$94   	; Music ID #$94: burning SFX
; call to code in a different bank ($0F:$C561)
0x01BD9B|$06:$BD8B:20 61 C5	JSR $C561  	; play PCM specified by A (>= #$80 = sound effect [SFX], < #$80 = background music [BGM])
; call to code in a different bank ($0F:$C511)
0x01BD9E|$06:$BD8E:20 11 C5	JSR $C511  	; flash screen 5 times
0x01BDA1|$06:$BD91:A2 32   	LDX #$32   
; call to code in a different bank ($0F:$C1EE)
0x01BDA3|$06:$BD93:4C EE C1	JMP $C1EE  	; set $6007 = #$00, set $00 = #$01, wait for X interrupts, set $00 = #$FF

; indirect control flow target (via $8044)
0x01BDA6|$06:$BD96:AD AD 61	LDA $61AD  
0x01BDA9|$06:$BD99:D0 51   	BNE $BDEC  
0x01BDAB|$06:$BD9B:A9 FF   	LDA #$FF   
0x01BDAD|$06:$BD9D:8D 41 05	STA $0541  	; NPC #$00 sprite ID
0x01BDB0|$06:$BDA0:8D 49 05	STA $0549  	; NPC #$01 sprite ID
0x01BDB3|$06:$BDA3:8D 51 05	STA $0551  	; NPC #$02 sprite ID
0x01BDB6|$06:$BDA6:A5 CF   	LDA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01BDB8|$06:$BDA8:29 04   	AND #$04   
0x01BDBA|$06:$BDAA:F0 07   	BEQ $BDB3  
0x01BDBC|$06:$BDAC:A9 05   	LDA #$05   
0x01BDBE|$06:$BDAE:8D 41 05	STA $0541  	; NPC #$00 sprite ID
0x01BDC1|$06:$BDB1:D0 13   	BNE $BDC6  
; control flow target (from $BDAA)
0x01BDC3|$06:$BDB3:A2 07   	LDX #$07   
0x01BDC5|$06:$BDB5:A9 84   	LDA #$84   
0x01BDC7|$06:$BDB7:85 0E   	STA $0E    
0x01BDC9|$06:$BDB9:20 ED BD	JSR $BDED  
0x01BDCC|$06:$BDBC:A9 04   	LDA #$04   
0x01BDCE|$06:$BDBE:85 0E   	STA $0E    
0x01BDD0|$06:$BDC0:20 ED BD	JSR $BDED  
0x01BDD3|$06:$BDC3:20 10 BE	JSR $BE10  
; control flow target (from $BDB1)
0x01BDD6|$06:$BDC6:A0 00   	LDY #$00   
; control flow target (from $BDEA)
0x01BDD8|$06:$BDC8:B9 41 05	LDA $0541,Y	; NPC #$00 sprite ID
0x01BDDB|$06:$BDCB:C9 FF   	CMP #$FF   
0x01BDDD|$06:$BDCD:D0 14   	BNE $BDE3  
0x01BDDF|$06:$BDCF:A9 00   	LDA #$00   
0x01BDE1|$06:$BDD1:99 3A 05	STA $053A,Y
0x01BDE4|$06:$BDD4:99 3B 05	STA $053B,Y
0x01BDE7|$06:$BDD7:99 3C 05	STA $053C,Y	; NPC #$00 ?
0x01BDEA|$06:$BDDA:99 3D 05	STA $053D,Y	; NPC #$00 ?
0x01BDED|$06:$BDDD:99 3E 05	STA $053E,Y	; NPC #$00 ?
0x01BDF0|$06:$BDE0:99 3F 05	STA $053F,Y	; NPC #$00 ?
; control flow target (from $BDCD)
0x01BDF3|$06:$BDE3:98      	TYA        
0x01BDF4|$06:$BDE4:18      	CLC        
0x01BDF5|$06:$BDE5:69 08   	ADC #$08   
0x01BDF7|$06:$BDE7:A8      	TAY        
0x01BDF8|$06:$BDE8:C9 18   	CMP #$18   
0x01BDFA|$06:$BDEA:D0 DC   	BNE $BDC8  
; control flow target (from $BD99)
0x01BDFC|$06:$BDEC:60      	RTS        

; control flow target (from $BDB9, $BDC0)
0x01BDFD|$06:$BDED:A0 00   	LDY #$00   
0x01BDFF|$06:$BDEF:84 0C   	STY $0C    
; control flow target (from $BE0D)
0x01BE01|$06:$BDF1:B9 2D 06	LDA $062D,Y	; Midenhall status (80 = Alive, 40 = Sleep, 20 = Poison, 10 = ?, 08 = ?, 04 = In Party, 02 = Surround, 01 = Silence)
0x01BE04|$06:$BDF4:29 84   	AND #$84   
0x01BE06|$06:$BDF6:C5 0E   	CMP $0E    
0x01BE08|$06:$BDF8:D0 0A   	BNE $BE04  
0x01BE0A|$06:$BDFA:A5 0C   	LDA $0C    
0x01BE0C|$06:$BDFC:9D 3A 05	STA $053A,X
0x01BE0F|$06:$BDFF:8A      	TXA        
0x01BE10|$06:$BE00:18      	CLC        
0x01BE11|$06:$BE01:69 08   	ADC #$08   
0x01BE13|$06:$BE03:AA      	TAX        
; control flow target (from $BDF8)
0x01BE14|$06:$BE04:E6 0C   	INC $0C    
0x01BE16|$06:$BE06:98      	TYA        
0x01BE17|$06:$BE07:18      	CLC        
0x01BE18|$06:$BE08:69 12   	ADC #$12   
0x01BE1A|$06:$BE0A:A8      	TAY        
0x01BE1B|$06:$BE0B:C9 36   	CMP #$36   
0x01BE1D|$06:$BE0D:D0 E2   	BNE $BDF1  
0x01BE1F|$06:$BE0F:60      	RTS        

; control flow target (from $BDC3)
0x01BE20|$06:$BE10:A5 45   	LDA $45    
0x01BE22|$06:$BE12:C9 FF   	CMP #$FF   
0x01BE24|$06:$BE14:D0 01   	BNE $BE17  
0x01BE26|$06:$BE16:60      	RTS        

; control flow target (from $BE14)
0x01BE27|$06:$BE17:C9 00   	CMP #$00   
0x01BE29|$06:$BE19:D0 08   	BNE $BE23  
0x01BE2B|$06:$BE1B:A9 02   	LDA #$02   
; control flow target (from $BE57, $BE5F, $BE67, $BE6F)
0x01BE2D|$06:$BE1D:8D 40 05	STA $0540  	; NPC #$00 ? + direction nybble
0x01BE30|$06:$BE20:4C 27 BE	JMP $BE27  

; control flow target (from $BE19)
0x01BE33|$06:$BE23:C9 01   	CMP #$01   
0x01BE35|$06:$BE25:D0 2A   	BNE $BE51  
; control flow target (from $BE20)
0x01BE37|$06:$BE27:AD 3A 05	LDA $053A  
0x01BE3A|$06:$BE2A:8D 42 05	STA $0542  	; NPC #$00 ?
0x01BE3D|$06:$BE2D:8D 4A 05	STA $054A  	; NPC #$01 scripted motion low byte
0x01BE40|$06:$BE30:AD 3B 05	LDA $053B  
0x01BE43|$06:$BE33:8D 43 05	STA $0543  	; NPC #$00 ?
0x01BE46|$06:$BE36:8D 4B 05	STA $054B  	; NPC #$01 scripted motion high byte
0x01BE49|$06:$BE39:AD 40 05	LDA $0540  	; NPC #$00 ? + direction nybble
0x01BE4C|$06:$BE3C:8D 48 05	STA $0548  	; NPC #$01 ? + direction nybble
0x01BE4F|$06:$BE3F:8D 50 05	STA $0550  	; NPC #$02 ? + direction nybble
0x01BE52|$06:$BE42:A9 00   	LDA #$00   
0x01BE54|$06:$BE44:8D 44 05	STA $0544  	; NPC #$01 ?
0x01BE57|$06:$BE47:8D 45 05	STA $0545  	; NPC #$01 ?
0x01BE5A|$06:$BE4A:8D 4C 05	STA $054C  	; NPC #$02 ?
0x01BE5D|$06:$BE4D:8D 4D 05	STA $054D  	; NPC #$02 ?
0x01BE60|$06:$BE50:60      	RTS        

; control flow target (from $BE25)
0x01BE61|$06:$BE51:C9 03   	CMP #$03   
0x01BE63|$06:$BE53:D0 04   	BNE $BE59  
0x01BE65|$06:$BE55:A9 03   	LDA #$03   
0x01BE67|$06:$BE57:D0 C4   	BNE $BE1D  
; control flow target (from $BE53)
0x01BE69|$06:$BE59:C9 04   	CMP #$04   
0x01BE6B|$06:$BE5B:D0 04   	BNE $BE61  
0x01BE6D|$06:$BE5D:A9 01   	LDA #$01   
0x01BE6F|$06:$BE5F:D0 BC   	BNE $BE1D  
; control flow target (from $BE5B)
0x01BE71|$06:$BE61:C9 09   	CMP #$09   
0x01BE73|$06:$BE63:D0 04   	BNE $BE69  
0x01BE75|$06:$BE65:A9 00   	LDA #$00   
0x01BE77|$06:$BE67:F0 B4   	BEQ $BE1D  
; control flow target (from $BE63)
0x01BE79|$06:$BE69:C9 0A   	CMP #$0A   
0x01BE7B|$06:$BE6B:D0 04   	BNE $BE71  
0x01BE7D|$06:$BE6D:A9 02   	LDA #$02   
0x01BE7F|$06:$BE6F:D0 AC   	BNE $BE1D  
; control flow target (from $BE6B)
0x01BE81|$06:$BE71:C9 02   	CMP #$02   
0x01BE83|$06:$BE73:D0 47   	BNE $BEBC  
0x01BE85|$06:$BE75:A5 17   	LDA $17    	; current map Y-pos (1)
0x01BE87|$06:$BE77:D0 04   	BNE $BE7D  
; control flow target (from $BEC6)
0x01BE89|$06:$BE79:A9 02   	LDA #$02   
0x01BE8B|$06:$BE7B:D0 16   	BNE $BE93  
; control flow target (from $BE77)
0x01BE8D|$06:$BE7D:A5 16   	LDA $16    	; current map X-pos (1)
0x01BE8F|$06:$BE7F:C5 21   	CMP $21    	; map width
0x01BE91|$06:$BE81:D0 04   	BNE $BE87  
; control flow target (from $BECA)
0x01BE93|$06:$BE83:A9 03   	LDA #$03   
0x01BE95|$06:$BE85:D0 0C   	BNE $BE93  
; control flow target (from $BE81)
0x01BE97|$06:$BE87:A5 16   	LDA $16    	; current map X-pos (1)
0x01BE99|$06:$BE89:D0 04   	BNE $BE8F  
; control flow target (from $BEC2)
0x01BE9B|$06:$BE8B:A9 01   	LDA #$01   
0x01BE9D|$06:$BE8D:D0 04   	BNE $BE93  
; control flow target (from $BE89, $BEBE)
0x01BE9F|$06:$BE8F:A9 00   	LDA #$00   
0x01BEA1|$06:$BE91:F0 00   	BEQ $BE93  	; useless op
; control flow target (from $BE7B, $BE85, $BE8D, $BE91)
0x01BEA3|$06:$BE93:8D 40 05	STA $0540  	; NPC #$00 ? + direction nybble
0x01BEA6|$06:$BE96:8D 48 05	STA $0548  	; NPC #$01 ? + direction nybble
0x01BEA9|$06:$BE99:8D 50 05	STA $0550  	; NPC #$02 ? + direction nybble
0x01BEAC|$06:$BE9C:0A      	ASL        
0x01BEAD|$06:$BE9D:0A      	ASL        
0x01BEAE|$06:$BE9E:0A      	ASL        
0x01BEAF|$06:$BE9F:AA      	TAX        
0x01BEB0|$06:$BEA0:A0 08   	LDY #$08   
; control flow target (from $BEB9)
0x01BEB2|$06:$BEA2:A9 04   	LDA #$04   
0x01BEB4|$06:$BEA4:85 2E   	STA $2E    
; control flow target (from $BEB0)
0x01BEB6|$06:$BEA6:BD CD BE	LDA $BECD,X
0x01BEB9|$06:$BEA9:99 3A 05	STA $053A,Y
0x01BEBC|$06:$BEAC:C8      	INY        
0x01BEBD|$06:$BEAD:E8      	INX        
0x01BEBE|$06:$BEAE:C6 2E   	DEC $2E    
0x01BEC0|$06:$BEB0:D0 F4   	BNE $BEA6  
0x01BEC2|$06:$BEB2:98      	TYA        
0x01BEC3|$06:$BEB3:18      	CLC        
0x01BEC4|$06:$BEB4:69 04   	ADC #$04   
0x01BEC6|$06:$BEB6:A8      	TAY        
0x01BEC7|$06:$BEB7:C9 18   	CMP #$18   
0x01BEC9|$06:$BEB9:D0 E7   	BNE $BEA2  
0x01BECB|$06:$BEBB:60      	RTS        

; control flow target (from $BE73)
0x01BECC|$06:$BEBC:C9 05   	CMP #$05   
0x01BECE|$06:$BEBE:F0 CF   	BEQ $BE8F  
0x01BED0|$06:$BEC0:C9 06   	CMP #$06   
0x01BED2|$06:$BEC2:F0 C7   	BEQ $BE8B  
0x01BED4|$06:$BEC4:C9 07   	CMP #$07   
0x01BED6|$06:$BEC6:F0 B1   	BEQ $BE79  
0x01BED8|$06:$BEC8:C9 08   	CMP #$08   
0x01BEDA|$06:$BECA:F0 B7   	BEQ $BE83  
0x01BEDC|$06:$BECC:60      	RTS        


; code -> data
; indexed data load target (from $BEA6)
0x01BEDD|$06:$BECD:80 7F 00 01
0x01BEE1|$06:$BED1:80 8F 00 01
0x01BEE5|$06:$BED5:70 6F FF 00
0x01BEE9|$06:$BED9:60 6F FF 00
0x01BEED|$06:$BEDD:80 5F 00 FF
0x01BEF1|$06:$BEE1:80 4F 00 FF
; indirect data load target
0x01BEF5|$06:$BEE5:90 6F 01 00
0x01BEF9|$06:$BEE9:A0 6F 01 00

; data -> code
; X = 1 => CLC and update $0C-$0D to warp point data to use if Outside allowed from current map, SEC otherwise, X = 2 => CLC and update $0C-$0D to warp point data to use if Return allowed from current map, SEC otherwise, X = 3 => disembark from ship and update ship position based on last save point ID $48
; indirect control flow target (via $8046)
0x01BEFD|$06:$BEED:CA      	DEX        
0x01BEFE|$06:$BEEE:F0 08   	BEQ $BEF8  	; CLC and update $0C-$0D to warp point data to use if Outside allowed from current map
0x01BF00|$06:$BEF0:CA      	DEX        
0x01BF01|$06:$BEF1:F0 47   	BEQ $BF3A  	; CLC and update $0C-$0D to warp point data to use if Return allowed from current map
0x01BF03|$06:$BEF3:CA      	DEX        
0x01BF04|$06:$BEF4:F0 69   	BEQ $BF5F  	; disembark from ship and update ship position based on last save point ID $48
0x01BF06|$06:$BEF6:38      	SEC        
0x01BF07|$06:$BEF7:60      	RTS        

; CLC and update $0C-$0D to warp point data to use if Outside allowed from current map
; control flow target (from $BEEE)
0x01BF08|$06:$BEF8:A5 31   	LDA $31    	; current map ID
0x01BF0A|$06:$BEFA:C9 17   	CMP #$17   	; Map ID #$17: Hargon's Castle 7F
0x01BF0C|$06:$BEFC:D0 11   	BNE $BF0F  
; Hargon's Castle 7F is special: after defeating Hargon, you can't escape before defeating Malroth
0x01BF0E|$06:$BEFE:A5 D0   	LDA $D0    	; Malroth status flag (#$FF = defeated, #$00 = alive, others = countdown to battle)
0x01BF10|$06:$BF00:30 07   	BMI $BF09  	; Outside from Hargon's Castle 7F is okay
0x01BF12|$06:$BF02:AD 61 05	LDA $0561  	; NPC #$04 sprite ID; #$FF if Hargon defeated
0x01BF15|$06:$BF05:C9 FF   	CMP #$FF   
0x01BF17|$06:$BF07:F0 1A   	BEQ $BF23  	; SEC to flag Outside not allowed for calling code
; Outside from Hargon's Castle 7F is okay
; control flow target (from $BF00)
0x01BF19|$06:$BF09:A9 44   	LDA #$44   	; Map ID #$44: Hargon's Castle 2F
0x01BF1B|$06:$BF0B:A0 07   	LDY #$07   	; first floor index for Map ID #$44: Hargon's Castle 2F
0x01BF1D|$06:$BF0D:D0 16   	BNE $BF25  	; Outside is allowed
; control flow target (from $BEFC)
0x01BF1F|$06:$BF0F:C9 18   	CMP #$18   	; Map ID #$18: Charlock Castle B8
0x01BF21|$06:$BF11:D0 06   	BNE $BF19  
; Charlock Castle B8 is not considered a dungeon, so handle it specially
0x01BF23|$06:$BF13:A9 34   	LDA #$34   	; Map ID #$34: Charlock Castle B1/B2
0x01BF25|$06:$BF15:A0 03   	LDY #$03   	; first floor index for Map ID #$34: Charlock Castle B1/B2
0x01BF27|$06:$BF17:D0 0C   	BNE $BF25  	; Outside is allowed
; control flow target (from $BF11)
0x01BF29|$06:$BF19:A0 0C   	LDY #$0C   	; for everything else, start scanning the first floor list
; control flow target (from $BF21)
0x01BF2B|$06:$BF1B:D9 82 BF	CMP $BF82,Y	; dungeon first floors
0x01BF2E|$06:$BF1E:B0 05   	BCS $BF25  	; Outside is allowed
0x01BF30|$06:$BF20:88      	DEY        
0x01BF31|$06:$BF21:10 F8   	BPL $BF1B  	; if more first floors to check, check them
; SEC to flag Outside not allowed for calling code
; control flow target (from $BF07)
0x01BF33|$06:$BF23:38      	SEC        
0x01BF34|$06:$BF24:60      	RTS        

; Outside is allowed
; control flow target (from $BF0D, $BF17, $BF1E)
0x01BF35|$06:$BF25:38      	SEC        
0x01BF36|$06:$BF26:F9 82 BF	SBC $BF82,Y	; dungeon first floors
0x01BF39|$06:$BF29:85 0E   	STA $0E    	; floor number
0x01BF3B|$06:$BF2B:98      	TYA        
0x01BF3C|$06:$BF2C:0A      	ASL        
0x01BF3D|$06:$BF2D:A8      	TAY        
0x01BF3E|$06:$BF2E:B9 8F BF	LDA $BF8F,Y	; pointer to warp point data used when casting Outside
0x01BF41|$06:$BF31:85 0C   	STA $0C    
0x01BF43|$06:$BF33:B9 90 BF	LDA $BF90,Y
0x01BF46|$06:$BF36:85 0D   	STA $0D    
0x01BF48|$06:$BF38:18      	CLC        
0x01BF49|$06:$BF39:60      	RTS        

; CLC and update $0C-$0D to warp point data to use if Return allowed from current map
; control flow target (from $BEF1)
0x01BF4A|$06:$BF3A:A5 31   	LDA $31    	; current map ID
0x01BF4C|$06:$BF3C:F0 1F   	BEQ $BF5D  	; SEC to flag Return disallowed for calling code; Map ID #$00: Fake Midenhall
0x01BF4E|$06:$BF3E:C9 2B   	CMP #$2B   	; map IDs >= #$2B are dungeon maps
0x01BF50|$06:$BF40:B0 1B   	BCS $BF5D  	; SEC to flag Return disallowed for calling code
0x01BF52|$06:$BF42:C9 17   	CMP #$17   	; Map ID #$17: Hargon's Castle 7F
0x01BF54|$06:$BF44:F0 17   	BEQ $BF5D  	; SEC to flag Return disallowed for calling code
0x01BF56|$06:$BF46:C9 18   	CMP #$18   	; Map ID #$18: Charlock Castle B8
0x01BF58|$06:$BF48:F0 13   	BEQ $BF5D  	; SEC to flag Return disallowed for calling code
0x01BF5A|$06:$BF4A:20 5F BF	JSR $BF5F  	; disembark from ship and update ship position based on last save point ID $48
0x01BF5D|$06:$BF4D:A5 48   	LDA $48    	; last save point ID
0x01BF5F|$06:$BF4F:0A      	ASL        
0x01BF60|$06:$BF50:A8      	TAY        
0x01BF61|$06:$BF51:B9 A9 BF	LDA $BFA9,Y	; pointer to warp point data used when casting Return
0x01BF64|$06:$BF54:85 0C   	STA $0C    
0x01BF66|$06:$BF56:B9 AA BF	LDA $BFAA,Y
0x01BF69|$06:$BF59:85 0D   	STA $0D    
0x01BF6B|$06:$BF5B:18      	CLC        	; CLC to flag Return allowed for calling code
0x01BF6C|$06:$BF5C:60      	RTS        

; SEC to flag Return disallowed for calling code
; control flow target (from $BF3C, $BF40, $BF44, $BF48)
0x01BF6D|$06:$BF5D:38      	SEC        
0x01BF6E|$06:$BF5E:60      	RTS        

; disembark from ship and update ship position based on last save point ID $48
; control flow target (from $BEF4, $BF4A)
0x01BF6F|$06:$BF5F:A5 CF   	LDA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01BF71|$06:$BF61:29 03   	AND #$03   
0x01BF73|$06:$BF63:85 CF   	STA $CF    	; ship status (#$04 = on ship, #$02 = own ship, #$01 = beat Lianport Gremlins)
0x01BF75|$06:$BF65:A5 48   	LDA $48    	; last save point ID
0x01BF77|$06:$BF67:0A      	ASL        
0x01BF78|$06:$BF68:A8      	TAY        
0x01BF79|$06:$BF69:B9 74 BF	LDA $BF74,Y	; ship X-pos after warp
0x01BF7C|$06:$BF6C:85 D2   	STA $D2    	; ship X-pos (when you aren't on it)
0x01BF7E|$06:$BF6E:B9 75 BF	LDA $BF75,Y	; ship Y-pos after warp
0x01BF81|$06:$BF71:85 D3   	STA $D3    	; ship Y-pos (when you aren't on it)
0x01BF83|$06:$BF73:60      	RTS        


; code -> data
; ship X-pos after warp
; indexed data load target (from $BF69)
0x01BF84|$06:$BF74:D4
; ship Y-pos after warp
; indexed data load target (from $BF6E)
0x01BF85|$06:$BF75:   3C	; Save Point ID #$00: Midenhall 2F
0x01BF86|$06:$BF76:A4 09	; Save Point ID #$01: Cannock
; indirect data load target
0x01BF88|$06:$BF78:3B 2E	; Save Point ID #$02: Tantegel
0x01BF8A|$06:$BF7A:DA 91	; Save Point ID #$03: Osterfair
0x01BF8C|$06:$BF7C:1F C5	; Save Point ID #$04: Beran
0x01BF8E|$06:$BF7E:1F C5	; Save Point ID #$05: Rhone Shrine
0x01BF90|$06:$BF80:78 58	; Save Point ID #$06: Hamlin
; dungeon first floors
; indexed data load target (from $BF1B, $BF26)
0x01BF92|$06:$BF82:2B	; Map ID #$2B: Cave to Hamlin
0x01BF93|$06:$BF83:2C	; Map ID #$2C: Lake Cave B1
0x01BF94|$06:$BF84:2E	; Map ID #$2E: Sea Cave B1
0x01BF95|$06:$BF85:34	; Map ID #$34: Charlock Castle B1/B2
0x01BF96|$06:$BF86:37	; Map ID #$37: Cave to Rhone B1
0x01BF97|$06:$BF87:40	; Map ID #$40: Spring of Bravery
0x01BF98|$06:$BF88:43	; Map ID #$43: Cave to Rimuldar
0x01BF99|$06:$BF89:44	; Map ID #$44: Hargon's Castle 2F
0x01BF9A|$06:$BF8A:49	; Map ID #$49: Moon Tower 1F
0x01BF9B|$06:$BF8B:50	; Map ID #$50: Lighthouse 1F
0x01BF9C|$06:$BF8C:58	; Map ID #$58: Wind Tower 1F
0x01BF9D|$06:$BF8D:60	; Map ID #$60: Dragon Horn South 1F
0x01BF9E|$06:$BF8E:66	; Map ID #$66: Dragon Horn North 1F
; pointer to warp point data used when casting Outside
; indexed data load target (from $BF2E)
; indirect data load target
0x01BF9F|$06:$BF8F:A8
; indexed data load target (from $BF33)
0x01BFA0|$06:$BF90:   A2	; $02:$A2A8; Map ID #$2B: Cave to Hamlin
0x01BFA1|$06:$BF91:CF A2	; $02:$A2CF; Map ID #$2C: Lake Cave B1
0x01BFA3|$06:$BF93:D2 A2	; $02:$A2D2; Map ID #$2E: Sea Cave B1
0x01BFA5|$06:$BF95:D8 A2	; $02:$A2D8; Map ID #$34: Charlock Castle B1/B2
0x01BFA7|$06:$BF97:DE A2	; $02:$A2DE; Map ID #$37: Cave to Rhone B1
0x01BFA9|$06:$BF99:ED A2	; $02:$A2ED; Map ID #$40: Spring of Bravery
0x01BFAB|$06:$BF9B:EA A2	; $02:$A2EA; Map ID #$43: Cave to Rimuldar
0x01BFAD|$06:$BF9D:A2 A2	; $02:$A2A2; Map ID #$44: Hargon's Castle 2F
0x01BFAF|$06:$BF9F:E1 A2	; $02:$A2E1; Map ID #$49: Moon Tower 1F
0x01BFB1|$06:$BFA1:DB A2	; $02:$A2DB; Map ID #$50: Lighthouse 1F
0x01BFB3|$06:$BFA3:D5 A2	; $02:$A2D5; Map ID #$58: Wind Tower 1F
0x01BFB5|$06:$BFA5:E4 A2	; $02:$A2E4; Map ID #$60: Dragon Horn South 1F
0x01BFB7|$06:$BFA7:E7 A2	; $02:$A2E7; Map ID #$66: Dragon Horn North 1F
; pointer to warp point data used when casting Return
; indexed data load target (from $BF51)
; indirect data load target
0x01BFB9|$06:$BFA9:69
; indexed data load target (from $BF56)
0x01BFBA|$06:$BFAA:   A2	; $02:$A269; warp point data (map ID, X-pos, Y-pos) used when casting Return; Save Point ID #$00: Midenhall 2F
0x01BFBB|$06:$BFAB:6C A2	; $02:$A26C; Save Point ID #$01: Cannock
0x01BFBD|$06:$BFAD:6F A2	; $02:$A26F; Save Point ID #$02: Tantegel
0x01BFBF|$06:$BFAF:72 A2	; $02:$A272; Save Point ID #$03: Osterfair
0x01BFC1|$06:$BFB1:75 A2	; $02:$A275; Save Point ID #$04: Beran
0x01BFC3|$06:$BFB3:78 A2	; $02:$A278; Save Point ID #$05: Rhone Shrine
0x01BFC5|$06:$BFB5:7B A2	; $02:$A27B; Save Point ID #$06: Hamlin

; data -> free
; indirect data load target
0x01BFC7|$06:$BFB7:FF
; ... skipping $1F FF bytes
; indirect data load target
0x01BFE7|$06:$BFD7:FF

; free -> unknown
0x01BFE8|$06:$BFD8:78      	; SEI        
0x01BFE9|$06:$BFD9:EE DF BF	; INC $BFDF  
0x01BFEA|$06:$BFDA:DF      	; INVALID OPCODE
0x01BFEB|$06:$BFDB:BF      	; INVALID OPCODE
0x01BFEC|$06:$BFDC:4C 86 FF	; JMP $FF86  
0x01BFED|$06:$BFDD:86 FF   	; STX $FF    
0x01BFEE|$06:$BFDE:FF      	; INVALID OPCODE
0x01BFEF|$06:$BFDF:80      	; INVALID OPCODE
0x01BFF0|$06:$BFE0:44      	; INVALID OPCODE
0x01BFF1|$06:$BFE1:52      	; INVALID OPCODE
0x01BFF2|$06:$BFE2:41 47   	; EOR ($47,X)
0x01BFF3|$06:$BFE3:47      	; INVALID OPCODE
0x01BFF4|$06:$BFE4:4F      	; INVALID OPCODE
0x01BFF5|$06:$BFE5:4E 20 57	; LSR $5720  
0x01BFF6|$06:$BFE6:20 57 41	; JSR $4157  
0x01BFF7|$06:$BFE7:57      	; INVALID OPCODE
0x01BFF8|$06:$BFE8:41 52   	; EOR ($52,X)
0x01BFF9|$06:$BFE9:52      	; INVALID OPCODE
0x01BFFA|$06:$BFEA:52      	; INVALID OPCODE
0x01BFFB|$06:$BFEB:49 4F   	; EOR #$4F   
0x01BFFC|$06:$BFEC:4F      	; INVALID OPCODE
0x01BFFD|$06:$BFED:52      	; INVALID OPCODE
0x01BFFE|$06:$BFEE:53      	; INVALID OPCODE
0x01BFFF|$06:$BFEF:32      	; INVALID OPCODE
0x01C000|$06:$BFF0:FF      	; INVALID OPCODE
0x01C001|$06:$BFF1:FF      	; INVALID OPCODE
0x01C002|$06:$BFF2:00      	; BRK        
0x01C003|$06:$BFF3:00      	; BRK        
0x01C004|$06:$BFF4:48      	; PHA        
0x01C005|$06:$BFF5:04      	; INVALID OPCODE
0x01C006|$06:$BFF6:01 0F   	; ORA ($0F,X)
0x01C007|$06:$BFF7:0F      	; INVALID OPCODE
0x01C008|$06:$BFF8:07      	; INVALID OPCODE
0x01C009|$06:$BFF9:9D D8 BF	; STA $BFD8,X
0x01C00A|$06:$BFFA:D8      	; CLD        
0x01C00B|$06:$BFFB:BF      	; INVALID OPCODE
0x01C00C|$06:$BFFC:D8      	; CLD        
0x01C00D|$06:$BFFD:BF      	; INVALID OPCODE
0x01C00E|$06:$BFFE:D8      	; CLD        
0x01C00F|$06:$BFFF:BF      	; INVALID OPCODE