![]() |
Routines |
| Prev: CB92 | Up: Map | Next: CC31 |
|
This sends the hero to solitary.
|
||||||||
| solitary | CB98 | LD A,$FF | Set the bell ring counter/flag to bell_STOP | |||||
| CB9A | LD ($A130),A | |||||||
|
Seize hero's held items.
|
||||||||
| CB9D | LD HL,$8215 | Point HL at items_held[0] | ||||||
| CBA0 | LD C,(HL) | Fetch the item | ||||||
| CBA1 | LD (HL),A | Set it to item_NONE | ||||||
| CBA2 | CALL item_discovered | Discover the item | ||||||
| CBA5 | LD HL,$8216 | Point HL at items_held[1] | ||||||
| CBA8 | LD C,(HL) | Fetch the item | ||||||
| CBA9 | LD (HL),$FF | Set it to item_NONE | ||||||
| CBAB | CALL item_discovered | Discover the item | ||||||
| CBAE | CALL draw_all_items | Draw held items | ||||||
|
Discover all items.
|
||||||||
| CBB1 | LD B,$10 | Set B to 16 iterations - once per item | ||||||
| CBB3 | LD HL,$76C9 | Point HL at item_structs[0].room | ||||||
|
Start loop
|
||||||||
| solitary_0 | CBB6 | PUSH BC | Preserve loop counter | |||||
| CBB7 | PUSH HL | Preserve itemstruct pointer | ||||||
|
Is the item outdoors?
|
||||||||
| CBB8 | LD A,(HL) | Fetch itemstruct.room_and_flags | ||||||
| CBB9 | AND $3F | Mask off the room part. Is the item indoors? | ||||||
| CBBB | JR NZ,solitary_next | Jump if so | ||||||
| CBBD | DEC HL | Point HL at itemstruct.item_and_flags | ||||||
| CBBE | LD A,(HL) | Fetch it | ||||||
| CBBF | INC HL | Advance HL to itemstruct.pos.x | ||||||
| CBC0 | INC HL | |||||||
| CBC1 | EX DE,HL | Bank itemstruct pointer | ||||||
| CBC2 | EX AF,AF' | Bank item_and_flags | ||||||
| CBC3 | XOR A | Set area index to zero | ||||||
|
Start loop
|
||||||||
| solitary_1 | CBC4 | PUSH AF | Preserve area index | |||||
| CBC5 | PUSH DE | Preserve itemstruct pointer | ||||||
|
If the item is within the camp bounds then it will be discovered.
|
||||||||
| CBC6 | CALL within_camp_bounds | Is the specified position within the bounds of the indexed area? | ||||||
| CBC9 | JR Z,solitary_discovered | Jump if so | ||||||
| CBCB | POP DE | Restore itemstruct pointer | ||||||
| CBCC | POP AF | Restore area index | ||||||
| CBCD | INC A | Loop until area index is 3 | ||||||
| CBCE | CP $03 | |||||||
| CBD0 | JP NZ,solitary_1 | |||||||
| CBD3 | JR solitary_next | Jump to next | ||||||
| solitary_discovered | CBD5 | POP DE | Restore itemstruct pointer | |||||
| CBD6 | POP AF | Restore area index | ||||||
| CBD7 | EX AF,AF' | Unbank item_and_flags | ||||||
| CBD8 | LD C,A | Discover the item | ||||||
| CBD9 | CALL item_discovered | |||||||
| solitary_next | CBDC | POP HL | Restore itemstruct pointer | |||||
| CBDD | POP BC | Restore loop counter | ||||||
| CBDE | LD DE,$0007 | Advance HL to the next itemstruct | ||||||
| CBE1 | ADD HL,DE | |||||||
| CBE2 | DJNZ solitary_0 | ...loop | ||||||
|
Move the hero to solitary.
|
||||||||
| CBE4 | LD A,$18 | Set vischar[0].room to room_24_SOLITARY | ||||||
| CBE6 | LD ($801C),A | |||||||
|
Commentary: This should instead be 24 which is the door between room_22_REDKEY and room_24_SOLITARY.
|
||||||||
| CBE9 | LD A,$14 | Set the global current door to 20 | ||||||
| CBEB | LD ($68A1),A | |||||||
| CBEE | LD B,$23 | Decrease morale by 35 | ||||||
| CBF0 | CALL decrease_morale | |||||||
| CBF3 | CALL reset_map_and_characters | Reset all visible characters, clock, day_or_night flag, general flags, collapsed tunnel objects, lock the gates, reset all beds, clear the mess halls and reset characters | ||||||
|
Set the commandant on a path which results in the hero being released.
|
||||||||
| CBF6 | LD DE,$7613 | Point DE at character_structs[character_0_COMMANDANT].room | ||||||
| CBF9 | LD HL,$CC31 | Point HL at solitary_commandant_data | ||||||
| CBFC | LD BC,$0006 | Copy six bytes | ||||||
| CBFF | LDIR | |||||||
|
Queue solitary messages.
|
||||||||
| CC01 | LD B,$0D | Queue the message "YOU ARE IN SOLITARY" | ||||||
| CC03 | CALL queue_message | |||||||
| CC06 | LD B,$0E | Queue the message "WAIT FOR RELEASE" | ||||||
| CC08 | CALL queue_message | |||||||
| CC0B | LD B,$13 | Queue the message "ANOTHER DAY DAWNS" | ||||||
| CC0D | CALL queue_message | |||||||
| CC10 | LD A,$FF | Inhibit user input | ||||||
| CC12 | LD ($A13A),A | |||||||
| CC15 | XOR A | Immediately take automatic control of the hero | ||||||
| CC16 | LD ($A139),A | |||||||
| CC19 | LD HL,$CE2E | Set vischar.mi.sprite to the prisoner sprite set | ||||||
| CC1C | LD ($8015),HL | |||||||
| CC1F | LD HL,$7AC6 | Point HL at solitary_pos for transition | ||||||
| CC22 | LD IY,$8000 | Point IY at the hero's vischar | ||||||
| CC26 | LD (IY+$0E),$03 | Set vischar.direction to direction_BOTTOM_LEFT | ||||||
| CC2A | XOR A | Set hero's route.index to routeindex_0_HALT | ||||||
| CC2B | LD ($8002),A | |||||||
| CC2E | JP transition | Exit via transition | ||||||
| Prev: CB92 | Up: Map | Next: CC31 |