|  | Routines | 
| Prev: 33278 | Up: Map | Next: 33565 | 
| 
 | ||||||||
| 33312 | LD A,(65532) | Load Magic Knight's current action flags into A | ||||||
| 33315 | BIT 6,A | If blow-enabled flag is unset... | ||||||
| 33317 | JP Z,27189 | ...then jump into main game loop (process keyboard input and move Magic Knight, enter menus or execute other command) | ||||||
| 33320 | CALL 38075 | Play upward scale sound | ||||||
| 33323 | LD IX,25395 | Point IX at Magic Knight's current inventory | ||||||
| 33327 | LD B,5 | Set B to 5 (as there are 5 inventory slots) | ||||||
| 33329 | LD HL,50891 | Point HL at "BLOW WHICH OBJECT?" text | ||||||
| 33332 | LD DE,50902 | Point DE at "BLOW" text | ||||||
| 33335 | CALL 34914 | Display list of objects in Magic Knight's inventory and wait for one to be selected. Load its index into A | ||||||
| 33338 | LD HL,25395 | Point DE at name of a selected object in object names table and print in command summary window... | ||||||
| 33341 | CALL 34864 | ... | ||||||
| 33344 | LD A,(30467) | If selected object is not the Elf-Horn... | ||||||
| 33347 | CP 38 | ... | ||||||
| 33349 | JP NZ,33574 | ...then confirm and process blow command (create dust or racket!) then return to game | ||||||
| 33352 | SET 2,(IY+65) | Set characters-can't-move flag | ||||||
| 33356 | CALL 37654 | Display / update command summary window at bottom of screen | ||||||
| 33359 | LD DE,50909 | Point DE at "SUMMON" text... | ||||||
| 33362 | CALL 38693 | ...and print in command summary window at bottom of screen | ||||||
| 33365 | LD HL,44069 | Point HL at "SUMMON ?" text... | ||||||
| 33368 | PUSH HL | ...and store | ||||||
| 33369 | CALL 35293 | Display and handle full character selection menu | ||||||
| 33372 | CALL 38725 | Display execute / reject command window and return if execute chosen, else exit | ||||||
| 33375 | CALL 34402 | Point HL at current position data for Current Character | ||||||
| 33378 | LD A,(65529) | Load Magic Knight's current room into A | ||||||
| 33381 | CP (HL) | If character is in the same room as Magic Knight... | ||||||
| 33382 | JP Z,34616 | ...then display "[CHARACTER] IS ALREADY HERE!" message and return to game | ||||||
| 33385 | LD A,(HL) | Load character's current room into A | ||||||
| 33386 | LD HL,51173 | Point HL at "[CHARACTER] IS NO LONGER AROUND" text | ||||||
| 33389 | CP 100 | If character's current room is 100... | ||||||
| 33391 | JP Z,34808 | ...then display "[CHARACTER] IS NO LONGER AROUND" window then return to game | ||||||
| 33394 | LD A,(30615) | Load A with index of Current Character | ||||||
| 33397 | CP 7 | If character is The Banshee... | ||||||
| 33399 | JR Z,33435 | ...skip over asleep / tiredness check as Banshee never sleeps or gets tired | ||||||
| 33401 | LD A,(30615) | Load A with index of Current Character | ||||||
| 33404 | LD E,0 | Point HL at property 0 (strength) of character... | ||||||
| 33406 | CALL 34174 | ... | ||||||
| 33409 | PUSH HL | Copy location from HL to IX... | ||||||
| 33410 | POP IX | ... | ||||||
| 33412 | BIT 7,(IX+6) | If character is asleep (bit 7 of the byte 6 bytes forward)... | ||||||
| 33416 | JP NZ,34598 | ...then display "[CHARACTER] IS ASLEEP" message and return to game | ||||||
| 33419 | LD A,(IX+1) | Load A with happiness of Current Character | ||||||
| 33422 | CP 40 | If happiness is less than 40... | ||||||
| 33424 | JP C,34604 | ... | ||||||
| 33427 | LD A,(IX+2) | ...then display "[CHARACTER] DOES NOT WANT TO BE SUMMONED" message and return to game | ||||||
| 33430 | CP 30 | If happiness is less than 30... | ||||||
| 33432 | JP C,34610 | ...then display "[CHARACTER] IS TOO TIRED TO BE SUMMONED" message and return to game | ||||||
| 33435 | CALL 34402 | Point HL at current position data for Current Character | ||||||
| 33438 | PUSH HL | Store HL | ||||||
| 33439 | PUSH IX | Store IX | ||||||
| 33441 | LD A,(65529) | Load Magic Knight's current room into C... | ||||||
| 33444 | LD C,A | ... | ||||||
| 33445 | LD A,(30615) | Load B with index of Current Character... | ||||||
| 33448 | LD B,A | ... | ||||||
| 33449 | CALL 36327 | Assign a slot in room C to character B and get x- and y-coordinates in BC | ||||||
| 33452 | POP IX | Restore IX | ||||||
| 33454 | POP HL | Restore HL | ||||||
| 33455 | CP 4 | If assigned slot number is 4 (i.e. already three characters in this room)... | ||||||
| 33457 | JP Z,34622 | ...then display "[CHARACTER] DOES NOT WANT TO COME TO SUCH A CROWDED ROOM" message and return to game | ||||||
| 33460 | PUSH HL | Store HL (current position data for Current Character) | ||||||
| 33461 | INC HL | Load x-coordinate of character into C... | ||||||
| 33462 | LD (HL),C | ... | ||||||
| 33463 | INC HL | Load y-coordinate of character into B... | ||||||
| 33464 | LD (HL),B | ... | ||||||
| 33465 | POP HL | Restore HL (start of current position data for Current Character) | ||||||
| 33466 | LD A,(65529) | Load Magic Knight's current room into A | ||||||
| 33469 | OR 128 | Set bit 7 of room index data if it is not already set to denote that this character's entry needs to be animated (puff of smoke) | ||||||
| 33471 | LD (HL),A | Load data into current room of Current Character | ||||||
| 33472 | LD A,(30615) | Load A with index of Current Character | ||||||
| 33475 | CP 7 | If character is The Banshee then skip over section dealing with decreasing summoned characters stats as Banshee's stats never change (see trivia) | ||||||
| 33477 | JP Z,33512 | |||||||
| 33480 | LD A,(IX+0) | Decrease character's strength by 10... | ||||||
| 33483 | SUB 10 | ... | ||||||
| 33485 | LD (IX+0),A | ... | ||||||
| 33488 | LD A,(IX+1) | Decrease character's happiness by 5... | ||||||
| 33491 | SUB 5 | ... | ||||||
| 33493 | LD (IX+1),A | ... | ||||||
| 33496 | LD A,(IX+2) | Decrease character's stamina by 12... | ||||||
| 33499 | SUB 12 | ... | ||||||
| 33501 | LD (IX+2),A | ... | ||||||
| 33504 | LD A,(25318) | Decrease Magic Knight's spell power by 3... | ||||||
| 33507 | SUB 3 | ... | ||||||
| 33509 | LD (25318),A | ... | ||||||
| 33512 | LD A,(23378) | If Release-Spell-cast score flag is not set... | ||||||
| 33515 | BIT 4,A | ... | ||||||
| 33517 | JP Z,34628 | ...then display "[CHARACTER] APPEARS IN A THICK PUFF OF SMOKE" window and return to game | ||||||
| 33520 | LD IX,(23503) | Else load IX with address of index of next character to send home from table at 33565 | ||||||
| 33524 | LD A,(30615) | Load A with index of Current Character | ||||||
| 33527 | CP (IX+0) | If data at IX does not match Current Character... | ||||||
| 33530 | JP NZ,34628 | ...then display "[CHARACTER] APPEARS IN A THICK PUFF OF SMOKE" window and return to game (character is not to be sent home yet) | ||||||
| 33533 | LD (HL),100 | Set character's current room to 100 | ||||||
| 33535 | INC IX | Advance IX to next character in sequence... | ||||||
| 33537 | LD (23503),IX | ...and store this new pointer | ||||||
| 33541 | LD A,255 | If index of next character to go home is 255... | ||||||
| 33543 | CP (IX+0) | ... | ||||||
| 33546 | JP Z,33180 | ...then jump to "well done" (i.e. game complete) routine | ||||||
| 33549 | CALL 33278 | Flash border and screen (as in cast a spell) | ||||||
| 33552 | LD A,(23506) | Add one to "characters sent home" score... | ||||||
| 33555 | INC A | ... | ||||||
| 33556 | LD (23506),A | ... | ||||||
| 33559 | LD HL,51194 | Display "[CHARACTER] APPEARS IN SPIRIT FORM AS GIMBAL..." window and return to game... | ||||||
| 33562 | JP 34808 | ... | ||||||
| Prev: 33278 | Up: Map | Next: 33565 |