![]() |
Routines |
| Prev: E0B0 | Up: Map | Next: E0F5 |
|
||||||||
|
Room graphics are prepared using this routine when Maroc moves into a new room/screen.
The routine is also called to prepare any additional graphics required as and when needed (e.g. a creature entering the room, the warlock appearing, or to draw the arrow on the spell menu if fire is pressed).
|
||||||||
| E0C2 | LD B,A | Transfer offset value to B register | ||||||
|
Calculate graphics address pointer using offset, using table at 97C3
|
||||||||
| E0C3 | LD HL,($EB6A) | Pointer to graphics address list at 97C3 | ||||||
| E0C6 | DEC A | Address pointers are 2 bytes long, so get offset value, subtract 1... | ||||||
| E0C7 | LD D,$00 | |||||||
| E0C9 | RLA | ...multiply by 2 | ||||||
| E0CA | RL D | |||||||
| E0CC | AND $FE | Address pointers are 2 bytes long, so filter out bit 0 (1) to ensure it's an even number | ||||||
| E0CE | LD E,A | |||||||
| E0CF | ADD HL,DE | Add the calculated offset to the base table address, to get the right graphics address pointer | ||||||
| E0D0 | LD ($EAB2),HL | ...and store. Initially corner vertical wall section at 97E5/9E0F. | ||||||
|
Calculate a second graphics pointer offset, that will point to the flipped/mirrored graphic's address.
|
||||||||
| E0D3 | LD A,($EB50) | Offset byte for address pointer for store of mirrored graphic | ||||||
| E0D6 | DEC A | Address pointers are 2 bytes long, so get offset value, subtract 1... | ||||||
| E0D7 | RLA | ...multiply by 2 | ||||||
| E0D8 | AND $1E | Keep bits 1-4 (no bit 0). Address pointers are 2 bytes long, so filter out bit 0 (1) just to make sure it's an even number. | ||||||
| E0DA | LD E,A | Put offset in DE | ||||||
| E0DB | LD D,$00 | |||||||
| E0DD | ADD HL,DE | Add this to HL address graphic pointer | ||||||
| E0DE | LD ($EB51),HL | ...and store. | ||||||
|
Point DE register pair to graphics data (HL = pointer at address table at 97C3)
|
||||||||
| E0E1 | LD HL,($EAB2) | Get graphics address pointer (with first offset pointing to the 'standard' graphics address) | ||||||
| E0E4 | LD E,(HL) | Point DE to the actual graphics address data e.g. 9950, 9E0F. | ||||||
| E0E5 | INC HL | |||||||
| E0E6 | LD D,(HL) | |||||||
| E0E7 | DEC HL | |||||||
|
Pre-graphics byte - see Graphic properties
|
||||||||
| E0E8 | DEC DE | Get pre-graphics byte | ||||||
| E0E9 | LD A,(DE) | |||||||
| E0EA | INC DE | |||||||
| E0EB | LD ($EB4F),A | ...and store. | ||||||
|
The next routine checks if the graphic has a 'mirrored' version. If so, this is constructed in the following routine at E0F5.
If bit 5 (32) is set, it indicates that the graphic is 'flippable' - for example, graphics for the background right-hand side wall, which can be flipped to create the background left-hand side wall.
|
||||||||
| E0EE | LD C,A | Store the byte in the C register, used in the following 'flip' routine | ||||||
| E0EF | AND $20 | If bit 5 is NOT set, no need to generate 'flipped' graphics. | ||||||
| E0F1 | CP $00 | |||||||
| E0F3 | JR Z,$E169 | In which case, jump straight to the RET command at the end of the following flip/reflect routine | ||||||
| Prev: E0B0 | Up: Map | Next: E0F5 |