Prev: 29767 Up: Map Next: 29839
29776: Colourise Sprite
Used by the routines at 24542, AnimateExplosion, 27112, 27731, 27916, 28370, 28401 and 29210.
ColouriseSprite 29776 EXX Switch to the shadow registers.
29777 LD HL,(24090) HL'=actor co-ordinates.
29780 CALL AttributeAddress Call AttributeAddress - HL' now holds the co-ordinates to an attribute file address.
29783 LD A,(24079) B'=width loop counter (in pixels).
29786 LD B,A
29787 LD A,(24078) A=24078.
29790 RRCA A=((A / 4) + 1) / 2.
29791 RRCA
29792 INC A
29793 RRCA
29794 AND %00011111 Keep only bits 0-4.
29796 INC A Increment A by one.
29797 LD C,A C=height loop counter (in pixels).
29798 LD D,(IX+3) D=object colour attribute.
29801 LD E,B E=width loop counter (in pixels).
ColouriseSprite_Loop1 29802 PUSH HL Stash HL on the stack.
ColouriseSprite_Loop2 29803 LD A,H A=actor Y position.
29804 CP 91 Decrement position if address is outside of attribute file address range.
29806 JR NC,ColouriseSprite_1
29808 CP 88
29810 JR C,ColouriseSprite_1
29812 LD (HL),D Otherwise, set the colour at this location.
29813 INC L Next tile column.
29814 LD A,L Next tile if column < screen width (32 chars).
29815 AND %00011111
29817 JR NZ,ColouriseSprite_0
29819 LD A,L else, wrap-around and continue applying colour.
29820 SUB 32
29822 LD L,A L=start of current row.
ColouriseSprite_0 29823 DJNZ ColouriseSprite_Loop2 Decrease counter by one and loop back to ColouriseSprite_Loop2 until counter is zero.
ColouriseSprite_1 29825 POP HL Restore HL from the stack.
29826 PUSH BC Stash BC on the stack.
29827 AND A Clear the carry flag.
29828 LD BC,32 HL -= 32 tiles. Places address pointer previous line.
29831 SBC HL,BC
29833 POP BC Restore BC from the stack.
29834 LD B,E B=reset to original width counter.
29835 DEC C Decrement height counter.
29836 JR NZ,ColouriseSprite_Loop1 Repeat until all tiles have been coloured.
29838 RET Return.
Prev: 29767 Up: Map Next: 29839