Prev: B205 Up: Map Next: B339
B258: Draw an entity (enemy, object or player)
Used by the routines at 969B, 9AC5 and BA5C.
B258 PUSH DE Save DE
B259 OR A is entity facing left?
B25A JP NZ,$B2C1 Jump if so
Entity facing right. Computes address of graphic data for entity and address destination on room buffer
B25D LD A,($A0AF) Set A to the x-position of entity
B260 AND $07 Set A to the bit position of the entity (bits2-0)
B262 LD E,A Set HL to the address pointer of offset for sprite movement
B263 LD D,$00
B265 ADD HL,DE
B266 LD E,(HL) Set DE to the corresponding offset based on the position of the sprite
B267 LD D,$00
B269 POP HL Recover HL (graphics data of the sprite)
B26A ADD HL,DE Set HL to the address of the corresponding sprite based on the offset
B26B LD A,($A0AF) Computes at HL the address into room graphic data buffer for the entity
B26E SRL A
B270 SRL A
B272 SRL A
B274 LD ($A0AF),A
B277 PUSH HL
B278 LD A,($A0B0)
B27B LD L,A
B27C LD H,$00
B27E ADD HL,HL
B27F ADD HL,HL
B280 ADD HL,HL
B281 ADD HL,HL
B282 ADD HL,HL
B283 LD DE,$E8FF
B286 ADD HL,DE
B287 LD A,($A0AF)
B28A LD E,A
B28B LD D,$00
B28D ADD HL,DE
B28E EX DE,HL Exchange DE and HL
B28F POP HL Recover HL (the address of the corresponding sprite based on the offset)
B290 PUSH DE Save DE
B291 LD A,($A0B1) Set A to the width of the sprite (in bytes)
B294 LD ($B2B0),A Configure LD opcode at B2AB to set B register to the width of the sprite
B297 LD A,($A0B2) Set A to the height of the sprite (in pixels)
B29A LD ($B2AC),A Configure LD opcode at B2AF to set B register to the height of the sprite
B29D EX DE,HL Exchange DE and HL
B29E LD A,($A033) Check bit for Graphic Data Select
B2A1 BIT 7,A
B2A3 JP Z,$B2AA Jump if graphic data is based in animation offsets
B2A6 LD DE,($A034) Set DE to the graphic data for static (non animated) sprite
Entity facing right. Draw entity (enemy, object or Rex)
B2AA POP HL Restore HL
B2AB LD B,$00 Set B to the width of the sprite
B2AD PUSH BC Save BC and HL
B2AE PUSH HL
B2AF LD B,$00 Set B to the height of the sprite
B2B1 LD A,(DE) Set A to the graphic data to copy
B2B2 OR (HL) Blend the graphic data with the graphic data on the room
B2B3 LD (HL),A Copy graphics data to the room buffer
B2B4 INC DE Increment sprite graphic data and room graphic data destination
B2B5 INC HL
B2B6 DJNZ $B2B1 Jump back if the are more sprite rows o draw
B2B8 POP HL Restore HL
B2B9 LD BC,$0020 Increment one row for the room graphic data
B2BC ADD HL,BC
B2BD POP BC Restore BC
B2BE DJNZ $B2AD Jump back until all rows drawn
B2C0 RET
Entity facing left. Computes address of graphic data for entity and address destination on room buffer
B2C1 LD A,($A0AF) Set A to the x-position
B2C4 LD DE,$0007 Set HL to point to the last byte of the offset animation
B2C7 ADD HL,DE
B2C8 AND $07 And substract the position bit2-0 for the sprite x-position to point to the correspondent offset
B2CA LD E,A
B2CB LD D,$00
B2CD AND A
B2CE SBC HL,DE
B2D0 LD E,(HL) Set DE to the offset animation value
B2D1 LD D,$00
B2D3 POP HL Recover HL (address pointer for graphic data of sprite)
B2D4 ADD HL,DE And adds the offset
B2D5 LD A,($A0AF) Computes at HL the address into room graphic data buffer for the entity
B2D8 SRL A
B2DA SRL A
B2DC SRL A
B2DE LD ($A0AF),A
B2E1 PUSH HL
B2E2 LD A,($A0B0)
B2E5 LD L,A
B2E6 LD H,$00
B2E8 ADD HL,HL
B2E9 ADD HL,HL
B2EA ADD HL,HL
B2EB ADD HL,HL
B2EC ADD HL,HL
B2ED LD DE,$E8FF
B2F0 ADD HL,DE
B2F1 LD A,($A0AF)
B2F4 LD E,A
B2F5 LD D,$00
B2F7 ADD HL,DE
B2F8 EX DE,HL Exchange DE an HL
B2F9 POP HL Restore HL
B2FA PUSH DE Save DE
B2FB LD A,($A0B1) Set A to the width of the sprite (in bytes)
B2FE LD ($B31C),A Configure LD opcode at B317 to set B register to the width of the sprite
B301 LD A,($A0B2) Set A to the height of the sprite (in pixels)
B304 LD ($B318),A Configure LD opcode at B31B to set B register to the height of the sprite
B307 EX DE,HL Exchange DE and HL
B308 LD A,($A033) Check bit for Graphic Data Select
B30B BIT 7,A
B30D JP Z,$B314 Jump if graphic data is based in animation offsets
B310 LD DE,($A034) Set DE to the graphic data for static (non animated) sprite
Entity facing left. Draw entity (enemy, object or Rex)
B314 POP HL Restore HL (address pointer to room graphic buffer)
B315 INC HL Increment address pointer to draw backwards from here
B316 INC HL
B317 LD B,$00 Set B to the width of the sprite
B319 PUSH BC Save BC and REGhl
B31A PUSH HL
B31B LD B,$00 Set B to the height of the sprite
B31D LD A,(DE) Set A to the byte of the graphic data
B31E PUSH DE Save DE and HL
B31F PUSH HL
B320 LD E,A Point graphic value into Invert byte lookup table
B321 LD D,$00
B323 LD HL,$AD5D
B326 ADD HL,DE
B327 LD A,(HL) Set A to the corresponent inverted byte
B328 POP HL Restore HL and DE
B329 POP DE
B32A OR (HL) Blend byte with graphic data of room
B32B LD (HL),A Set graphic data into room
B32C INC DE Increment address to graphic data
B32D DEC HL Decrement address to room graphic buffer
B32E DJNZ $B31D Jump back until the row is completed
B330 POP HL Restore HL
B331 LD BC,$0020 Add one row to the address pointer for the room graphic data
B334 ADD HL,BC
B335 POP BC Restore BC
B336 DJNZ $B319 Jump back until all the rows has been draw
B338 RET
Prev: B205 Up: Map Next: B339