Prev: B837 Up: Map Next: B866
B83B: Searchlight mask test
This checks the mask buffer to see if the hero is hiding behind the scenery.
Used by the routine at plot_sprites.
Input
IY Pointer to visible character.
searchlight_mask_test B83B PUSH IY Copy the current visible character pointer into HL
B83D POP HL
B83E LD A,L Extract the visible character's offset
B83F AND A Is it zero?
B840 RET NZ Return if not - skip non-hero characters
Start testing at approximately the middle of the character.
B841 LD HL,$8131 Point HL at mask_buffer ($8100) + $31
Bug: This does a fused load of BC, but doesn't use C after. It's probably a leftover stride constant.
B844 LD BC,$0804 Set B for eight iterations
Start loop
B847 XOR A Preload A with zero
searchlight_mask_test_0 B848 CP (HL) Is the mask byte zero?
B849 JR NZ,still_in_searchlight Jump to still_in_searchlight if not
B84B INC L Advance HL to the next row (note cheap increment due to alignment)
B84C INC L
B84D INC L
B84E INC L
B84F DJNZ searchlight_mask_test_0 ...loop
Otherwise the hero has escaped the searchlight, so decrement the counter.
B851 LD HL,$81BD Point HL at searchlight_state
B854 DEC (HL) Decrement it
B855 LD A,$FF Is it searchlight_STATE_SEARCHING?
B857 CP (HL)
B858 RET NZ Return if not
B859 CALL choose_game_window_attributes Choose game window attributes
B85C CALL set_game_window_attributes Set game window attributes
B85F RET Return
still_in_searchlight B860 LD HL,$81BD Set searchlight_state to searchlight_STATE_CAUGHT
B863 LD (HL),$1F
B865 RET Return
Prev: B837 Up: Map Next: B866