![]() |
Routines |
| Prev: 27809 | Up: Map | Next: 28064 |
|
||||||||
| 27865 | LD (65529),A | Update Magic Knight's current room to be room index passed to this routine in A | ||||||
| 27868 | LD A,(25315) | Decrease Magic Knight's current strength by one... | ||||||
| 27871 | DEC A | ... | ||||||
| 27872 | LD (25315),A | ... | ||||||
| 27875 | OR A | Set zero flag if strength is zero | ||||||
| 27876 | LD HL,43960 | Point HL to "YOU DIED OF EXHAUSTION" text... | ||||||
| 27879 | JP Z,35101 | ...and if strength is zero, jump to "game over" window routine and exit | ||||||
| 27882 | LD A,32 | Load 32 into "frame number" property of... | ||||||
| 27884 | LD (36187),A | ...odd ball 1... | ||||||
| 27887 | LD (36195),A | ...odd ball 2... | ||||||
| 27890 | LD (36203),A | ...odd ball 3... | ||||||
| 27893 | LD (36211),A | ...and odd ball 4 | ||||||
| 27896 | CALL 30101 | Indent "SPELLBOUND" text in bottom window to indicate Magic Knight's current floor | ||||||
| 27899 | LD A,(65529) | Flag Magic Knight's current room as visited for scoring purposes... | ||||||
| 27902 | LD E,A | ... | ||||||
| 27903 | LD D,0 | ... | ||||||
| 27905 | LD HL,23412 | ... | ||||||
| 27908 | ADD HL,DE | ... | ||||||
| 27909 | LD (HL),1 | ... | ||||||
| 27911 | LD A,7 | Set stored border colour to 7 (black)... | ||||||
| 27913 | LD (23624),A | ... | ||||||
| 27916 | XOR A | Set A to zero | ||||||
| 27917 | OUT (254),A | Set border to black and reset speaker state | ||||||
| 27919 | LD A,224 | Set current terrain interaction parameter to impassable-horizontally, impassable-vertically and preserve-attribute... | ||||||
| 27921 | LD (23483),A | ... | ||||||
| 27924 | LD A,71 | Store 71 (white INK, black PAPER, BRIGHT) at 23695... | ||||||
| 27926 | LD (23695),A | ... | ||||||
| 27929 | LD A,(23467) | Load game progress flags, part 2 into A | ||||||
| 27932 | RRCA | Set A to 2 if Armouris Photonicus has been cast, else set A to zero... | ||||||
| 27933 | AND 2 | ... | ||||||
| 27935 | ADD A,69 | ...add A to 69 (attribute value for cyan INK, black PAPER, BRIGHT, i.e. Magic Knight's initial attribute) | ||||||
| 27937 | LD (25393),A | Load this value into Magic Knight's current attribute slot | ||||||
| 27940 | XOR A | Set brickwork-drawing-direction flag to zero (horizontal mode for floor and ceiling)... | ||||||
| 27941 | LD (23476),A | ... | ||||||
| 27944 | LD HL,24539 | Point HL at start of terrain interaction data... | ||||||
| 27947 | LD DE,24540 | ...and set 640 bytes from there onwards to 0, clearing data... | ||||||
| 27950 | LD BC,639 | ... | ||||||
| 27953 | LD (HL),A | ... | ||||||
| 27954 | LDIR | ... | ||||||
| 27956 | LD HL,23383 | Clear table of glowing attribute file addresses... | ||||||
| 27959 | LD DE,23384 | ... | ||||||
| 27962 | LD BC,19 | ... | ||||||
| 27965 | LD (HL),A | ... | ||||||
| 27966 | LDIR | ... | ||||||
| 27968 | LD (25389),A | Set Magic Knight's current frame to erase to zero (frame 0 is blank graphic data) so Magic Knight is drawn but not erased | ||||||
| 27971 | LD (25390),A | Set Magic Knight's frame number to zero | ||||||
| 27974 | LD HL,16384 | Set "display file address to print character to" to beginning of display file... | ||||||
| 27977 | LD (36488),HL | ... | ||||||
| 27980 | LD HL,22528 | Point attribute cursor to beginning of attribute file... | ||||||
| 27983 | LD (23487),HL | ... | ||||||
| 27986 | LD HL,24539 | Set terrain interaction table cursor to point to start of terrain interaction table... | ||||||
| 27989 | LD (23481),HL | ... | ||||||
| 27992 | LD A,(65529) | Load Magic Knight's current room into A... | ||||||
| 27995 | ADD A,A | ...and double the value (as room entries are 2 bytes wide) | ||||||
| 27996 | LD D,0 | Load into DE... | ||||||
| 27998 | LD E,A | ... | ||||||
| 27999 | LD HL,51913 | ...and add to position of start of table of room data addresses... | ||||||
| 28002 | ADD HL,DE | ...into HL | ||||||
| 28003 | LD A,(HL) | Read address of room data for this room into HL... | ||||||
| 28004 | INC HL | ... | ||||||
| 28005 | LD H,(HL) | ... | ||||||
| 28006 | LD L,A | ... | ||||||
|
Room data is read here
|
||||||||
| 28007 | LD A,(HL) | Load byte from room data into A | ||||||
| 28008 | OR A | If data is a zero... | ||||||
| 28009 | JP Z,28092 | ...then draw bottom in-game window + room name and animate entry (puff of smoke) of a character if required and return | ||||||
| 28012 | CP 160 | If data is less than 160... | ||||||
| 28014 | JP C,28038 | ...then skip ahead to 28038 | ||||||
| 28017 | PUSH HL | Store HL (pointer to current position in current room data) | ||||||
| 28018 | SUB 230 | Subtract 230 from current data | ||||||
| 28020 | ADD A,A | Double the remaining value... | ||||||
| 28021 | LD E,A | ...and load into DE... | ||||||
| 28022 | LD D,0 | ... | ||||||
| 28024 | LD HL,30170 | Point HL at table of addresses of room feature drawing routines | ||||||
| 28027 | ADD HL,DE | Add doubled index value as offset to pointer to table of room feature drawing routine addresses | ||||||
| 28028 | LD A,(HL) | Load room feature drawing address into HL... | ||||||
| 28029 | INC HL | ... | ||||||
| 28030 | LD H,(HL) | ... | ||||||
| 28031 | LD L,A | ... | ||||||
| 28032 | PUSH HL | Transfer room feature drawing address into IX... | ||||||
| 28033 | POP IX | ... | ||||||
| 28035 | POP HL | Restore HL (pointer to current position in current room data) | ||||||
| 28036 | JP (IX) | Jump to room feature drawing routine address | ||||||
|
Data is less than 160
|
||||||||
| 28038 | LD B,A | Copy byte of room data into B (repeat counter for drawing brickwork / architecture) | ||||||
| 28039 | INC HL | Advance pointer to current room data by one byte | ||||||
| 28040 | LD A,(HL) | Load next byte of room data into A... | ||||||
| 28041 | LD C,A | ...and copy into C | ||||||
| 28042 | OR A | If this value is zero... | ||||||
| 28043 | JR Z,28050 | ...then skip ahead to 28050 | ||||||
| 28045 | INC HL | Advance HL by one byte | ||||||
| 28046 | LD A,(HL) | Store data at 23695... | ||||||
| 28047 | LD (23695),A | ... | ||||||
| 28050 | LD A,C | Copy C into A | ||||||
| 28051 | CALL 28344 | Draw a 2-by-2 block of brickwork, depending upon brickwork drawing mode, with architecture style A | ||||||
| 28054 | DJNZ 28050 | Loop back to draw next block of brickwork if counter is not zero | ||||||
| 28056 | XOR A | Set brickwork drawing mode to two rows... | ||||||
| 28057 | LD (23469),A | ... | ||||||
| 28060 | INC HL | Advance room data pointer by one byte... | ||||||
| 28061 | JP 28007 | ...and repeat routine for this new data | ||||||
| Prev: 27809 | Up: Map | Next: 28064 |