Routines |
Prev: A8D8 | Up: Map | Next: AA97 |
Used by the routine at Controller_DrawRoom.
|
||||
Clear the screen to BLACK.
|
||||
DrawRoom | A900 | LD A,$00 | Write BLACK to *ATTR_P. | |
A902 | LD ($5C8D),A | |||
A905 | CALL ClearRoomBuffer | Call ClearRoomBuffer. | ||
A908 | LD A,($5BD1) | A=*ActiveRoom_PaperColour. | ||
A90B | SLA A | Convert a PAPER value (using bits 3, 4 and 5) to an "INK" value (shifted left to bits 0, 1 and 2). | ||
A90D | SLA A | |||
A90F | SLA A | |||
A911 | LD ($5C8D),A | Write A to *ATTR_P. | ||
A914 | LD A,$11 | Set PAPER: *ActiveRoom_PaperColour. | ||
A916 | RST $10 | |||
A917 | LD A,($5BD1) | |||
A91A | RST $10 | |||
Set the UDG graphics pointer.
|
||||
A91B | LD HL,$8378 | Write 8378 (Graphics_RoomScaffolding_Empty) to *CHARS. | ||
A91E | LD ($5C36),HL | |||
Set the attributes for drawing the room scaffolding (i.e. ceilings and floors).
|
||||
A921 | LD A,$10 | Set INK: *ActiveRoom_ScaffoldingColour. | ||
A923 | RST $10 | |||
A924 | LD A,($5BCF) | |||
A927 | RST $10 | |||
Fetch the address of the current room data buffer.
|
||||
A928 | LD HL,($5BE8) | HL=*PointerCurrentRoomBuffer. | ||
Draw the ceilings/ floors.
|
||||
DrawRoomScaffolding | A92B | LD C,(HL) | Get the screen co-ordinates where the scaffolding will begin printing from the current room data buffer and store them in BC. | |
A92C | INC HL | |||
A92D | LD B,(HL) | |||
A92E | INC HL | Increment the current room data buffer by one. | ||
A92F | LD A,$FF | Jump to DrawRoomLadders if the terminator character has been received (FF). | ||
A931 | CP C | |||
A932 | JR Z,DrawRoomLadders | |||
A934 | PUSH HL | Stash the current room data buffer on the stack. | ||
A935 | CALL $A86E | Call A86E. | ||
Set the co-ordinates of where we're going to PRINT AT.
|
||||
A938 | CALL $0DD9 | Call CL_SET. | ||
A93B | POP HL | Restore the current room data buffer from the stack. | ||
A93C | LD B,(HL) | Fetch the length counter and store it in B. | ||
A93D | INC HL | Increment the current room data buffer by one. | ||
All scaffolding is two bytes wide, alternating between Graphics_RoomScaffolding_Top1 and Graphics_RoomScaffolding_Top2.
|
||||
DrawRoomScaffolding_Loop | A93E | LD A,$21 | A=Graphics_RoomScaffolding_Top1 (21). | |
A940 | CALL PopulateRoomBuffer | Call PopulateRoomBuffer. | ||
A943 | CALL PrintUDG | Call PrintUDG. | ||
A946 | LD A,$22 | A=Graphics_RoomScaffolding_Top2 (22). | ||
A948 | CALL PopulateRoomBuffer | Call PopulateRoomBuffer. | ||
A94B | CALL PrintUDG | Call PrintUDG. | ||
A94E | DJNZ DrawRoomScaffolding_Loop | Decrease counter by one and loop back to DrawRoomScaffolding_Loop until counter is zero. | ||
A950 | JR DrawRoomScaffolding | Jump to DrawRoomScaffolding. | ||
Draw the ladders.
|
||||
DrawRoomLadders | A952 | LD A,$10 | Set INK: *ActiveRoom_LadderColour. | |
A954 | RST $10 | |||
A955 | LD A,($5BD2) | |||
A958 | RST $10 | |||
A959 | LD HL,($5BD8) | HL=*ReferenceLadders. | ||
DrawRoomLadders_Loop | A95C | LD A,(HL) | A=*HL. | |
A95D | CP $FF | Jump to DrawRoomDoors if the room data is the termination byte (FF). | ||
A95F | JR Z,DrawRoomDoors | |||
A961 | LD C,A | C=A. | ||
A962 | INC HL | Increment HL by one. | ||
A963 | LD B,(HL) | B=*HL. | ||
A964 | INC HL | Increment HL by one. | ||
A965 | LD A,$2F | A=Graphics_Ladder (2F). | ||
A967 | LD E,$02 | E=Sprite width (02). | ||
A969 | LD D,$05 | D=Sprite height (05). | ||
A96B | CALL $A83F | Call A83F. | ||
A96E | CALL $A8AF | Call A8AF. | ||
A971 | JR DrawRoomLadders_Loop | Jump to DrawRoomLadders_Loop. | ||
Draws the front facing doors which lead to other rooms.
|
||||
DrawRoomDoors | A973 | LD HL,($5BD6) | HL=*ReferenceDoors. | |
DrawRoomDoors_Loop | A976 | LD C,(HL) | C=*HL. | |
A977 | INC HL | Increment HL by one. | ||
A978 | LD B,(HL) | B=*HL. | ||
A979 | INC HL | Increment HL by one. | ||
A97A | LD A,(HL) | A=*HL. | ||
A97B | INC HL | Increment HL by two. | ||
A97C | INC HL | |||
A97D | PUSH AF | Stash AF on the stack. | ||
A97E | LD A,$FF | Jump to DrawRoomKeysAndLockedDoors if FF is equal to C. | ||
A980 | CP C | |||
A981 | JR Z,DrawRoomKeysAndLockedDoors | |||
A983 | LD A,$10 | Set INK to ... | ||
A985 | RST $10 | |||
A986 | POP AF | Restore AF from the stack. | ||
A987 | RST $10 | ... the value held in A (from the stack). | ||
A988 | LD A,$23 | A=Graphics_Door (23). | ||
A98A | LD E,$03 | E=Sprite width (03). | ||
A98C | LD D,$04 | D=Sprite height (04). | ||
A98E | CALL $A83F | Call A83F. | ||
A991 | CALL $A8AF | Call A8AF. | ||
A994 | JR DrawRoomDoors_Loop | Jump to DrawRoomDoors_Loop. | ||
Draws the numbered keys and locked doors which correlate to them.
|
||||
DrawRoomKeysAndLockedDoors | A996 | POP AF | Restore AF from the stack. | |
A997 | LD A,$10 | Set INK: *ActiveRoom_ScaffoldingColour. | ||
A999 | RST $10 | |||
A99A | LD A,($5BCF) | |||
A99D | RST $10 | |||
A99E | LD IX,($5BDA) | IX=*ReferenceKeysAndLockedDoors. | ||
DrawRoomKeysAndLockedDoors_Loop | A9A2 | LD C,(IX+$00) | C=*IX+00. | |
A9A5 | LD A,$FF | Jump to DrawRoomItems if FF is equal to C. | ||
A9A7 | CP C | |||
A9A8 | JR Z,DrawRoomItems | |||
A9AA | LD A,(IX+$05) | Jump to DrawRoomKeysAndLockedDoors_Next if *IX+05 is equal to 00. | ||
A9AD | CP $00 | |||
A9AF | JR Z,DrawRoomKeysAndLockedDoors_Next | |||
A9B1 | LD (IX+$05),$03 | Write 03 to *IX+05. | ||
A9B5 | LD B,(IX+$01) | B=*IX+01. | ||
A9B8 | PUSH BC | Stash BC on the stack. | ||
A9B9 | CALL $A86E | Call A86E. | ||
A9BC | CALL $0DD9 | Call CL_SET. | ||
A9BF | LD A,$10 | Set INK: *ActiveRoom_ScaffoldingColour. | ||
A9C1 | RST $10 | |||
A9C2 | LD A,($5BCF) | |||
A9C5 | RST $10 | |||
A9C6 | LD A,(IX+$04) | A=*IX+04. | ||
A9C9 | ADD A,$38 | A+=38. | ||
A9CB | CALL PopulateRoomBuffer | Call PopulateRoomBuffer. | ||
A9CE | CALL PrintUDG | Call PrintUDG. | ||
A9D1 | LD A,$10 | Set INK: *ActiveRoom_ClosedDoorColour. | ||
A9D3 | RST $10 | |||
A9D4 | LD A,($5BCD) | |||
A9D7 | RST $10 | |||
A9D8 | POP BC | Restore BC from the stack. | ||
A9D9 | DEC B | Decrease B by one. | ||
A9DA | LD A,$4C | A=Graphics_DoorClosed (4C). | ||
A9DC | LD E,$01 | E=Sprite width (01). | ||
A9DE | LD D,$04 | D=Sprite height (04). | ||
A9E0 | CALL $A83F | Call A83F. | ||
A9E3 | CALL $A8AF | Call A8AF. | ||
A9E6 | LD C,(IX+$02) | C=*IX+02. | ||
A9E9 | LD B,(IX+$03) | B=*IX+03. | ||
A9EC | PUSH BC | Stash BC on the stack. | ||
A9ED | CALL $A86E | Call A86E. | ||
A9F0 | CALL $0DD9 | Call CL_SET. | ||
A9F3 | LD A,$10 | Set INK: *ActiveRoom_KeyColour. | ||
A9F5 | RST $10 | |||
A9F6 | LD A,($5BCC) | |||
A9F9 | RST $10 | |||
A9FA | LD A,(IX+$04) | A=*IX+04. | ||
A9FD | ADD A,$41 | A+=41. | ||
A9FF | CALL PopulateRoomBuffer | Call PopulateRoomBuffer. | ||
AA02 | CALL PrintUDG | Call PrintUDG. | ||
AA05 | POP BC | Restore BC from the stack. | ||
AA06 | DEC B | Decrease B by one. | ||
AA07 | CALL $A86E | Call A86E. | ||
AA0A | CALL $0DD9 | Call CL_SET. | ||
All the keys share the same bottom half.
|
||||
AA0D | LD A,$4B | A=Graphics_KeyBottom (4B). | ||
AA0F | CALL PopulateRoomBuffer | Call PopulateRoomBuffer. | ||
AA12 | CALL PrintUDG | Call PrintUDG. | ||
DrawRoomKeysAndLockedDoors_Next | AA15 | LD DE,$0006 | IX+=0006. | |
AA18 | ADD IX,DE | |||
AA1A | JR DrawRoomKeysAndLockedDoors_Loop | Jump to DrawRoomKeysAndLockedDoors_Loop. | ||
Draw room items.
|
||||
DrawRoomItems | AA1C | LD IX,($5BE0) | IX=*ReferenceItems. | |
DrawRoomItems_Loop | AA20 | LD A,(IX+$00) | Jump to DrawRoomFurniture if *IX+00 is equal to FF. | |
AA23 | CP $FF | |||
AA25 | JR Z,DrawRoomFurniture | |||
AA27 | LD A,(IX+$05) | Jump to DrawRoomItems_Next if *IX+05 is equal to 00. | ||
AA2A | CP $00 | |||
AA2C | JR Z,DrawRoomItems_Next | |||
AA2E | LD A,$10 | Set INK: *IX+04. | ||
AA30 | RST $10 | |||
AA31 | LD A,(IX+$04) | |||
AA34 | RST $10 | |||
AA35 | LD C,(IX+$00) | C=*IX+00. | ||
AA38 | LD B,(IX+$01) | B=*IX+01. | ||
AA3B | LD D,$02 | D=Sprite height (02). | ||
AA3D | LD E,$02 | E=Sprite width (02). | ||
AA3F | LD A,(IX+$06) | A=*IX+06. | ||
AA42 | CALL $A83F | Call A83F. | ||
AA45 | CALL $A8AF | Call A8AF. | ||
DrawRoomItems_Next | AA48 | LD DE,$0007 | IX+=0007. | |
AA4B | ADD IX,DE | |||
AA4D | JR DrawRoomItems_Loop | Jump to DrawRoomItems_Loop. | ||
Draw all the room "furniture", like the barrels and stacks of crates.
|
||||
DrawRoomFurniture | AA4F | LD HL,$8678 | Write 8678 (Graphics_Barrels) to *CHARS. | |
AA52 | LD ($5C36),HL | |||
AA55 | LD IX,($5BE2) | IX=*ReferenceFurniture. | ||
DrawRoomFurniture_Loop | AA59 | LD A,(IX+$00) | Jump to WriteRoomAttributes if *IX+00 is equal to FF. | |
AA5C | CP $FF | |||
AA5E | JR Z,WriteRoomAttributes | |||
AA60 | LD A,$10 | Set INK: *IX+03. | ||
AA62 | RST $10 | |||
AA63 | LD A,(IX+$03) | |||
AA66 | RST $10 | |||
AA67 | LD C,(IX+$00) | C=*IX+00. | ||
AA6A | LD B,(IX+$01) | B=*IX+01. | ||
AA6D | LD D,$04 | D=Sprite height (04). | ||
AA6F | LD E,$06 | E=Sprite width (06). | ||
AA71 | LD A,(IX+$02) | A=*IX+02. | ||
AA74 | OR %10000000 | Set bit 7. | ||
AA76 | CALL $A83F | Call A83F. | ||
AA79 | AND %01111111 | Keep only bits 0-6. | ||
AA7B | CALL $A8AF | Call A8AF. | ||
AA7E | LD DE,$0004 | IX+=0004. | ||
AA81 | ADD IX,DE | |||
AA83 | JR DrawRoomFurniture_Loop | Jump to DrawRoomFurniture_Loop. | ||
Copy the room attributes buffer to the screen.
|
||||
WriteRoomAttributes | AA85 | LD DE,$5800 | Copy 0300 bytes of data from BufferRoomAttributes to the attribute buffer. | |
AA88 | LD HL,$A4E4 | |||
AA8B | LD BC,$0300 | |||
AA8E | LDIR | |||
AA90 | LD A,($5BD0) | Set the border to *Active_BorderColour using BORDER. | ||
AA93 | CALL $229B | |||
AA96 | RET | Return. |
Prev: A8D8 | Up: Map | Next: AA97 |