Routines |
Prev: E4F1 | Up: Map | Next: E5F4 |
Used by the routine at InitialiseGame.
|
||||
Handler_DisappearingFloors | E581 | LD IX,($5BE6) | IX=*ReferenceDisappearingFloors. | |
Are we done?
|
||||
Handler_DisappearingFloors_Loop | E585 | LD A,(IX+$00) | Return if the terminator character has been received instead of a co-ordinate (FF). | |
E588 | CP $FF | |||
E58A | RET Z | |||
Bit 7 of *IX+02 holds the floor "state".
Is the floor currently visible?
|
||||
E58B | LD A,(IX+$02) | A=Sprite width+state (*IX+02). | ||
E58E | AND %10000000 | Keep only the current "state". | ||
E590 | JP Z,DisplayFloor | Jump to DisplayFloor if the floor should be visible. | ||
We didn't jump, so the floor is currently NOT visible.
The game uses a bunch of 00 bytes at Graphics_MaskSprite to "print empty space" - this is how we remove sprites.
|
||||
E593 | LD HL,$9F6C | Write 9F6C (Graphics_MaskSprite) to *CHARS. | ||
E596 | LD ($5C36),HL | |||
E599 | INC (IX+$05) | Increment the the floor change timer (*IX+05) by one. | ||
Check the current floor change timer against the max. count for how long the floor should stay disappeared for.
|
||||
E59C | LD A,(IX+$04) | Jump to PrintDisappearedFloor if the current floor change timer has not yet reached the maximum value set in the disappeared timer count. | ||
E59F | CP (IX+$05) | |||
E5A2 | JR NZ,PrintDisappearedFloor | |||
The timer for how long the floor should be "disappeared" has elapsed.
|
||||
E5A4 | LD A,(IX+$02) | A=Sprite width+state (*IX+02). | ||
E5A7 | AND %01111111 | Strip off bit 7 (which is the current "state") as we need to unset it so the floor will display next cycle. | ||
E5A9 | LD (IX+$02),A | Write this value back to sprite width+state (*IX+02). | ||
E5AC | LD (IX+$05),$00 | Reset the the floor change timer back to 00. | ||
Whilst this routine could also print the floor as well, the game needs to update other buffers when it changes, so this version is a lot simpler.
|
||||
PrintDisappearedFloor | E5B0 | LD C,(IX+$00) | C=Horizontal position (*IX+00). | |
E5B3 | LD B,(IX+$01) | B=Vertical position (*IX+01). | ||
Bits 0-6 of *IX+02 hold the floor width.
|
||||
E5B6 | LD A,(IX+$02) | A=Sprite width+state (*IX+02). | ||
E5B9 | AND %01111111 | Strip off bit 7 (which is the current "state") as we need the actual width to render the empty space where the floor should be. | ||
E5BB | LD E,A | E=Sprite width (A). | ||
E5BC | LD D,$01 | D=Sprite height (always 01). | ||
E5BE | LD A,$20 | A=base sprite ID (20). | ||
E5C0 | CALL PrintSprite | Call PrintSprite. | ||
E5C3 | JR DisappearingFloors_Next | Jump to DisappearingFloors_Next. | ||
The floor is currently visible so handle checking the current floor change timer against the max. count for how long the floor should stay visible for.
|
||||
DisplayFloor | E5C5 | LD A,(IX+$03) | Fetch the maximum visible count value. | |
E5C8 | INC (IX+$05) | Increment the the floor change timer by one. | ||
E5CB | CP (IX+$05) | Jump to PrintVisibleFloor if the current floor change timer has not yet reached the maximum value set in the visible timer count. | ||
E5CE | JR NZ,PrintVisibleFloor | |||
The timer for how long the floor should be "visible" has elapsed.
|
||||
E5D0 | LD A,(IX+$02) | A=Sprite width+state (*IX+02). | ||
E5D3 | OR %10000000 | Set bit 7 (which is the current "state") so the floor will disappear next cycle. | ||
E5D5 | LD (IX+$02),A | Write this value back to sprite width+state (*IX+02). | ||
E5D8 | LD (IX+$05),$00 | Reset the the floor change timer back to 00. | ||
Display the visible floor. Note the similarity to PrintDisappearedFloor.
|
||||
PrintVisibleFloor | E5DC | LD C,(IX+$00) | C=Horizontal position (*IX+00). | |
E5DF | LD B,(IX+$01) | B=Vertical position (*IX+01). | ||
Bits 0-6 of *IX+02 hold the floor width.
|
||||
E5E2 | LD A,(IX+$02) | A=Sprite width+state (*IX+02). | ||
E5E5 | AND %01111111 | Strip off bit 7 (which is the current "state") as we need the actual width to render the floor. | ||
E5E7 | LD E,A | E=Sprite width (A). | ||
E5E8 | LD D,$01 | D=Sprite height (always 01). | ||
E5EA | CALL PrintSpriteUpdateBuffer | Call PrintSpriteUpdateBuffer. | ||
Move onto the next disappearing floor data.
|
||||
DisappearingFloors_Next | E5ED | LD DE,$0006 | IX+=0006. | |
E5F0 | ADD IX,DE | |||
E5F2 | JR Handler_DisappearingFloors_Loop | Jump to Handler_DisappearingFloors_Loop. |
Prev: E4F1 | Up: Map | Next: E5F4 |