Prev: 30170 Up: Map Next: 30439
30222: Process command to pick up an object
Used by the routines at 27176 and 31153.
30222 CALL 38075 Play upward scale sound
30225 CALL 37654 Display / update command summary window at bottom of screen
30228 LD DE,45305 Point DE at "PICK UP" text...
30231 CALL 38693 ...and print in command summary window at bottom of screen
30234 LD IX,25464 Point IX at objects' current positions table
30238 LD BC,3200 Load B with 12 and C with 128 (bug)
30241 LD A,(65529) Load A with Magic Knight's current room
30244 CP (IX+0) If current object's room is not the same as Magic Knight's then...
30247 JR NZ,30250 ...skip ahead to 30250
30249 INC C Increase C (count of objects in Magic Knight's current room)
30250 INC IX Advance IX to next object's position...
30252 INC IX ...
30254 INC IX ...
30256 DJNZ 30241 Decrease B and loop back for next object
30258 LD A,C Copy total number of objects into A...
30259 OR A ...and if this value is zero... [can't actually happen because of bug at 30238]
30260 JP Z,34436 ...display "THERE IS NOTHING IN THIS ROOM" message and return to game
30263 LD IX,25464 Point IX at objects' current positions table
30267 LD A,(65529) Load A with Magic Knight's current room...
30270 LD C,A ...and copy into C
30271 CALL 34385 Load Magic Knight's coordinates (in characters) into DE
30274 XOR A Set A to zero
30275 EX AF,AF' Switch A register
30276 LD B,50 Load B with 50 (as there are 50 objects)
30278 LD A,C Load Magic Knight's current room into A
30279 CP (IX+0) If room of current object is not the same as Magic Knight's current room then...
30282 JR NZ,30327 ...skip ahead to 30327 (advance to next object)
30284 LD A,D Copy Magic Knight's y-coordinate into A
30285 CP (IX+2) If y-coordinate of object is not the same as Magic Knight's y-coordinate then...
30288 JR NZ,30327 ...skip ahead to 30327 (advance to next object)
30290 LD A,E Load Magic Knight's x-coordinate into A
30291 DEC A Decrease x-coordinate by two...
30292 DEC A ...
30293 CP (IX+1) If x-coordinate of object is the same as Magic Knight's x-coordinate minus two...
30296 JP Z,30341 ...skip ahead to 30341
30299 INC A Increase x-coordinate by one
30300 CP (IX+1) If x-coordinate of object is the same as Magic Knight's x-coordinate minus one then...
30303 JP Z,30341 ...skip ahead to 30341
30306 INC A Increase x-coordinate by one
30307 CP (IX+1) If x-coordinate of object is the same as Magic Knight's x-coordinate then...
30310 JP Z,30341 ...skip ahead to 30341
30313 INC A Increase x-coordinate by one
30314 CP (IX+1) If x-coordinate of object is the same as Magic Knight's x-coordinate plus one then...
30317 JP Z,30341 ...skip ahead to 30341
30320 INC A Increase x-coordinate by one
30321 CP (IX+1) If x-coordinate of object is the same as Magic Knight's x-coordinate plus two then...
30324 JP Z,30341 ...skip ahead to 30341
30327 INC IX Advance IX by three bytes to move to next object...
30329 INC IX ...
30331 INC IX ...
30333 EX AF,AF' Switch A register back (so now contains the index of the object to test next)
30334 INC A Increase A (index of current object to test)
30335 EX AF,AF' Switch A register
30336 DJNZ 30278 Loop back to 30278 for next object
30338 JP 34430 Display "THERE IS NOTHING NEAR ENOUGH" message and return to game
An object has been found within Magic Knight's reach so make this the Current Object
30341 EX AF,AF' Switch A register (so now contains index of first object that is within Magic Knight's reach)
30342 LD (30467),A Load index of this object into instruction at 30466 (i.e. set as Current Object)
30345 LD HL,41236 Point HL at table of object names
30348 LD B,A Load B with index of object that is within Magic Knight's reach
30349 CALL 34842 Advance HL to B-th entry in object names table
30352 EX DE,HL Swap DE and HL (so DE now contains pointer to name of Current Object)
30353 CALL 38693 ...and print in command summary window at bottom of screen
30356 CALL 38725 Display execute / reject command window and return if execute chosen, else exit
30359 LD A,(30467) Load A with index of Current Object...
30362 CP 34 ...and if it is not object 34 (Strange Liquid) then...
30364 JR NZ,30369 ...jump to 30369
30366 JP 34592 Display "THE LIQUID IS STUCK TO THE FLOOR (IT'S A VERY THICK LIQUID)" window and exit
30369 LD HL,25399 Load A with object at Magic Knight's fifth inventory slot...
30372 LD A,(HL) ...
30373 OR A If this is not zero (i.e. Magic Knight's hands are full)...
30374 JP NZ,34418 ...then display "YOUR HANDS ARE FULL" window and return to game
30377 CALL 34202 Check whether object has a weight greater than Magic Knight's surplus strength...
30380 JP P,34424 ...and if it does, display "THAT OBJECT IS TOO HEAVY" message and return to game
30383 LD A,(30467) Load A with index of Current Object...
30386 LD C,A ...and into C
30387 LD B,5 Load B with 5 (as 5 inventory slots)
30389 LD HL,25395 Point HL at start of Magic Knight's inventory
30392 CALL 34151 Load object in C into Magic Knight's first empty inventory slot
30395 LD A,(30467) Load A with index of Current Object...
30398 LD C,A ...and into C
30399 ADD A,A Multiply index by three in A...
30400 ADD A,C ...
30401 LD B,0 Load B with zero
30403 LD C,A Load three times object index into C (as position data is three bytes wide)
30404 LD HL,25464 Point HL at objects' current positions table
30407 ADD HL,BC Add BC as offset to point HL at position data for Current Object
30408 LD (HL),99 Set object's room to 99
This entry point is used by the routines at 30439, 30602 and 30880.
30410 LD IX,25395 Point IX at Magic Knight's current inventory
30414 LD B,5 Load B with 5 (as five inventory slots)
30416 LD HL,45285 Point HL at "YOU ARE NOW CARRYING" text
30419 CALL 34907 Display "Magic Knight's current inventory" window as an information window
30422 CALL 38749 Display "PRESS SPACE OR FIRE TO CONTINUE" window and wait for space / fire
30425 CALL 35495 Set Magic Knight's available action flags
This entry point is used by the routines at 31153, 31370, 32035, 32194, 32258, 32655, 33932, 34350, 34768, 35141 and 38725.
30428 LD A,(23377) Reset Gimbal-white-out-safe flag...
30431 AND 254 ...
30433 LD (23377),A ...
30436 JP 27168 Redraw current room and return to game
Prev: 30170 Up: Map Next: 30439