Prev: 39151 Up: Map Next: 39584
39278: Update state of clawed foot (level 3)
Used by the routine at 39137.
39278 LD A,(34228) If clawed foot's attack timer is zero...
39281 OR A ...
39282 JR Z,39289 ...then skip ahead to 39289
39284 DEC A Decrease clawed foot's attack timer...
39285 LD (34228),A ...
39288 RET Return
Clawed foot is attacking
39289 LD IY,44881 Load IY with address of complex state data for clawed foot (level 3)
39293 LD IX,(34240) Load IX with address of current level's complex state data for Berk
39297 CALL 53848 Store room size data for Berk's current room
39300 LD A,(44890) Load A with clawed foot's flags...
39303 OR A ...and if any are set...
39304 JR NZ,39337 ...then skip ahead to 39337
Clawed foot attack not yet started
39306 LD A,(IY+0) If the clawed foot's room...
39309 CP (IX+0) ...is not the same as Berk's room...
39312 RET NZ ...then return
39313 LD A,(IX+11) If Berk's walking-left flag or walking-right flag is set...
39316 AND 3 ...
39318 RET NZ ...then return
39319 LD A,(IX+5) Set the clawed foot's left edge...
39322 INC A ...to be one character to the right of Berk's left edge...
39323 LD (IY+5),A ...
39326 ADD A,2 Set the clawed foot's right edge...
39328 LD (IY+7),A ...to be two characters to the right of its left edge
39331 SET 1,(IY+9) Set clawed foot's moving-down flag
39335 JR 39341 Skip ahead to 39341
Clawed foot attack underway
39337 BIT 1,A If clawed foot's moving-down flag is reset...
39339 JR Z,39420 ...then skip ahead to 39420
39341 LD B,3 Load B with 3 (as the clawed foot moves down three characters at time)
39343 INC (IY+4) Advance clawed foot one character down...
39346 INC (IY+6) ...
39349 LD A,(IY+6) If y-coordinate of bottom edge of clawed foot is 115...
39352 CP 115 ...
39354 JR Z,39359 ...then skip ahead to 39359
39356 DJNZ 39343 Decrease remaining number of characters to move and loop back to 39343 if not zero
39358 RET Return
Clawed foot attempting to grab Berk
39359 BIT 6,(IX+9) If Berk is flying...
39363 JR NZ,39386 ...then skip ahead to 39386 (set clawed foot's moving-up flag and return)
39365 BIT 6,(IX+10) If Berk is falling...
39369 JR NZ,39386 ...then skip ahead to 39386 (set clawed foot's moving-up flag and return)
39371 LD A,(IY+5) If clawed foot's left edge...
39374 DEC A ...is one character to the right of Berk's left edge...
39375 CP (IX+5) ...
39378 JR Z,39391 ...then skip ahead to 39391
39380 DEC A If clawed foot's left edge...
39381 CP (IX+5) ...is two characters to the right of Berk's left edge...
39384 JR Z,39391 ...then skip ahead to 39391
Berk is flying or falling, or clawed foot has missed
39386 LD (IY+9),4 Set clawed foot's moving-up flag
39390 RET Return
Make clawed foot grab Berk (clawed foot is one or two characters to the right of Berk's left edge)
39391 LD BC,35515 Set current position in Berk's script data to...
39394 LD (35687),BC ...Berk in floating position
39398 SET 0,(IX+9) Set Berk's must-process-current-script-data flag
39402 LD A,12 Set clawed foot's moving-up flag and holding-Berk flag...
39404 LD (IY+9),A ...
39407 LD BC,40368 Set clawed foot's graphic layout data address to point to 40368 (reaching, closed)...
39410 LD (IY+2),C ...
39413 LD (IY+3),B ...
39416 CALL 36296 Make Berk drop the entity he is holding and load IY with its complex state data address
39419 RET Return
Check clawed foot's moving-up flag
39420 BIT 2,A If clawed foot's moving-up flag is reset...
39422 JR Z,39532 ...then skip ahead to 39532
39424 DEC (IY+4) Move clawed foot up one character...
39427 DEC (IY+6) ...
39430 LD A,(IY+6) If y-coordinate of bottom of clawed foot...
39433 CP 95 ...is 95...
39435 JR Z,39449 ...then skip ahead to 39449
39437 BIT 3,(IY+9) If clawed foot's holding-Berk flag is reset...
39441 RET Z ...then return
This entry point is used by the routine at 39151.
39442 DEC (IX+4) Move entity at IX (Berk) up one character...
39445 DEC (IX+6) ...
39448 RET Return
39449 BIT 3,(IY+9) If clawed foot's holding-Berk flag is reset...
39453 JR Z,39527 ...then skip ahead to 39527 (reset clawed foot to inactive state and return)
39455 LD A,(34229) Increase clawed foot's action index...
39458 INC A ...
39459 LD (34229),A ...
39462 CP 7 ...and if less than 7...
39464 JR C,39470 ...then skip ahead to 39470
39466 LD A,1 Set clawed foot's action index to 1...
39468 JR 39459 ...and jump to 39470 (via 39459)
39470 CP 3 If clawed foot's action index is less than 3...
39472 JR C,39501 ...then skip ahead to 39501 (i.e. make clawed foot release Berk, and return)
39474 CP 5 If clawed foot's action index is less than 5...
39476 JR C,39482 ...then skip ahead to 39482
39478 LD E,112 Load E with 112 (prepare to set clawed foot's destination x-coordinate)
39480 JR 39484 Skip ahead to 39484
39482 LD E,122 Load E with 122 (prepare to set clawed foot's destination x-coordinate)
39484 LD (IX+12),E Store destination x-coordinate in byte 12 of Berk's complex state data
39487 BIT 0,A If clawed foot's action index is even...
39489 JR Z,39496 ...then skip ahead to 39496
39491 LD (IY+9),16 Set clawed foot's moving-left flag
39495 RET Return
39496 LD (IY+9),32 Set clawed foot's moving-right flag
39500 RET Return
The instructions between 39501 and 39531 make the clawed foot release Berk.
39501 LD A,100 Set clawed foot's attack timer to 100...
39503 LD (34228),A ...i.e. clawed foot will attack again in 100 cycles
39506 SET 6,(IX+10) Set Berk's can-fall flag
39510 LD (IX+12),2 Set Berk's velocity factor to 2
39514 LD BC,35359 Set current position in Berk's script data to...
39517 LD (35687),BC ...Berk starting to fall downwards
39521 LD BC,40320 Set clawed foot's graphic layout data address to point to 40320 (reaching, open)...
39524 CALL 39410 ...make Berk drop the entity he is holding and load IY with its complex state data address
Reset clawed foot to inactive state
39527 LD (IY+9),0 Reset clawed foot's flags
39531 RET Return
Check clawed foot's moving-left flag
39532 BIT 4,A If clawed foot's moving-left flag is reset...
39534 JR Z,39552 ...then skip ahead to 39552
39536 DEC (IX+5) Move Berk one character left...
39539 DEC (IX+7) ...
39542 CALL 54348 Move Berk into room to the left, if appropriate
39545 LD A,(IX+0) If Berk's room is 5 (room to the left of the coloured creatures' room)...
39548 CP 5 ...then set zero flag
39550 JR 39569 Skip ahead to 39569
Check clawed foot's moving-right flag
39552 BIT 5,A If clawed foot's moving-right flag is reset...
39554 RET Z ...then return
39555 INC (IX+5) Move Berk one character right...
39558 INC (IX+7) ...
39561 CALL 54313 Move Berk into room to the right, if appropriate
39564 LD A,(IX+0) If Berk's room is 7 (room to the right of the coloured creatures' room)...
39567 CP 7 ...then set zero flag
39569 RET NZ If zero flag is not set (i.e. Berk is not in room 5 or room 7) then return
39570 LD A,(IX+12) If the x-coordinate of Berk's left edge...
39573 CP (IX+5) ...is not the same as the clawed foot's destination x-coordinate...
39576 RET NZ ...then return
39577 LD IY,44881 Load IY with address of complex state data for clawed foot (level 3)
39581 JP 39501 Make clawed foot release Berk, and return
Prev: 39151 Up: Map Next: 39584