Dun Darach | Routines |
Prev: 85AC | Up: Map |
Used by the routine at Game_Main.
|
|||||||
Action_Enter | 85AE | LD A,(Camera_Compass) | |||||
85B1 | BIT 0,A | ||||||
85B3 | JR NZ,Action_Enter_0 | ||||||
85B5 | LD DE,(Coords_EW) | ||||||
85B9 | JR Action_Enter_1 | ||||||
Action_Enter_0 | 85BB | LD DE,(Coords_NS) | |||||
Action_Enter_1 | 85BF | LD IX,Door_cache | Data on possible exits. | ||||
85C3 | LD A,$06 | Number of possible exits. | |||||
85C5 | LD BC,$0004 | Bytes in data structure. | |||||
Action_Enter_2 | 85C8 | PUSH AF | Get next exit and check distance from current coords allowing for an error of 4 units. | ||||
85C9 | LD L,(IX+$00) | ||||||
85CC | LD H,(IX+$01) | ||||||
85CF | CALL sub_abs | ||||||
85D2 | AND A | ||||||
85D3 | SBC HL,BC | ||||||
85D5 | JR C,Action_Enter_3 | ||||||
85D7 | ADD IX,BC | ||||||
85D9 | POP AF | ||||||
85DA | DEC A | ||||||
85DB | JR NZ,Action_Enter_2 | ||||||
85DD | RET | ||||||
Exit Found
|
|||||||
Action_Enter_3 | 85DE | POP AF | Remove unwanted data. | ||||
85DF | PUSH IX | Make a copy of the exit data. | |||||
85E1 | POP HL | ||||||
85E2 | LD DE,ExitFound_Coords | ||||||
85E5 | LDIR | ||||||
85E7 | LD IX,Room_MainData | Get Room address based on room index held within exit found data. | |||||
85EB | LD A,(ExitFound_RoomIndex) | ||||||
85EE | AND A | ||||||
85EF | JR Z,Action_Enter_5 | ||||||
85F1 | LD B,A | ||||||
85F2 | LD D,$00 | ||||||
Action_Enter_4 | 85F4 | LD E,(IX+$00) | Skip through data, using the size byte of each one until we hit the room required. | ||||
85F7 | ADD IX,DE | ||||||
85F9 | DJNZ Action_Enter_4 | ||||||
Room found
|
|||||||
Action_Enter_5 | 85FB | LD (RoomEntered_DataPtr),IX | Store address of the room data required. | ||||
85FF | LD C,(IX+$01) | Get room's data flags. | |||||
8602 | LD A,C | Get room type. | |||||
8603 | RRA | ||||||
8604 | RRA | ||||||
8605 | RRA | ||||||
8606 | RRA | ||||||
8607 | AND $0F | ||||||
8609 | LD L,A | Get the size of the data based on the type number. | |||||
860A | LD H,$00 | ||||||
860C | LD DE,Room_DataSizes | ||||||
860F | ADD HL,DE | ||||||
8610 | LD E,(HL) | ||||||
8611 | LD D,$00 | ||||||
See if exit, enter through, exists in data.
|
|||||||
8613 | ADD IX,DE | Move indexing onto exits. | |||||
8615 | LD A,C | Check the exit flags (lower half of data flags). If zero (no exits) use special exit data. | |||||
8616 | AND $0F | ||||||
8618 | JR NZ,Action_Enter_6 | ||||||
861A | LD IX,Exit_SimpleData | ||||||
Action_Enter_6 | 861E | LD (RoomEnter_ExitDataPtr),IX | Store the address for exit data. | ||||
8622 | LD A,(Camera_Compass) | Flip the direction of the hero, to get the exit's true direction within the room being entered. | |||||
8625 | XOR $02 | ||||||
8627 | JR Z,Action_Enter_10 | ||||||
8629 | LD B,A | Using that direction (index), search through exits to see if there is any data. | |||||
Action_Enter_7 | 862A | RRC C | Each bit in the flag represents an exit. | ||||
862C | JR NC,Action_Enter_9 | Skip onto next exit if bit clear. | |||||
862E | LD DE,$0007 | Calculate the size of exit data from type and skip onto next exit data. | |||||
8631 | LD A,(IX+$00) | ||||||
8634 | AND $0F | ||||||
8636 | JR Z,Action_Enter_8 | ||||||
8638 | LD DE,$0003 | ||||||
863B | CP $01 | ||||||
863D | JR Z,Action_Enter_8 | ||||||
863F | LD DE,$0002 | ||||||
Action_Enter_8 | 8642 | ADD IX,DE | |||||
Action_Enter_9 | 8644 | DJNZ Action_Enter_7 | Keep going until we have reached the exit based on the index calculated earlier. | ||||
Exit found, check if locked.
|
|||||||
Action_Enter_10 | 8646 | LD A,(IX+$01) | Does the door require a key? | ||||
8649 | AND A | ||||||
864A | JR Z,Action_Enter_11 | ||||||
864C | LD HL,Inv_Pocket1 | See if 'key' is being carried. | |||||
864F | LD BC,$0003 | ||||||
8652 | CPIR | ||||||
8654 | JR Z,Action_Enter_11 | ||||||
8656 | CALL Message_Display | If not display 'locked' on message line. | |||||
8659 | DEFM "locked" | ||||||
865F | DEFB $5E | ||||||
8660 | RET | ||||||
Through door.
|
|||||||
Action_Enter_11 | 8661 | LD (RoomEntered_EntryPtr),IX | |||||
8665 | LD HL,(CurrentRoom_JP_Vector) | ||||||
8668 | CALL JP_HL | ||||||
866B | RET NZ | ||||||
866C | CALL Event_CreateDoor | ||||||
866F | RET Z | ||||||
8670 | LD A,$01 | ||||||
8672 | LD (Flag_DoorEntry),A | ||||||
8675 | LD A,(Camera_Compass) | ||||||
8678 | LD (Hero_CompassFacing),A | ||||||
867B | LD A,$12 | ||||||
867D | LD (Hero_Frame),A | ||||||
8680 | POP HL | ||||||
8681 | JP Stage_Draw_0 |
Prev: 85AC | Up: Map |