Prev: 39933 Up: Map Next: 40008
39958: Animate puff of smoke at coordinates pointed to by IX
Used by the routines at 39393 and 39829.
Input
IX Address of position data for a character, or Magic Knight
39958 PUSH AF Store AF
39959 PUSH BC Store BC
39960 CALL 41504 Copy 2 × 4 (characters) region of display file into temporary storage at 23299
39963 LD A,(23367) Set character-is-incoming flag...
39966 INC A ...
39967 LD (23367),A ...
39970 LD C,30 Load C with 30 (graphic index of first puff of smoke frame)
39972 LD B,5 Load B with 5 (number of smoke frames to draw) [bug]
39974 PUSH BC Store BC (B = remaining number of frames to draw, C = current frame's lookup index)
39975 PUSH IX Store IX (address of position data)
39977 PUSH AF Store AF
39978 LD A,C Load A with current graphic index
39979 LD C,(IX+1) Load C with x-coordinate (characters)
39982 LD B,(IX+2) Load B with y-coordinate (characters)
39985 CALL 63494 Draw 2 × 3 graphic with lookup index A at character coordinates (C, B)
39988 PUSH BC Store BC (B = remaining number of frames to draw, C = current frame's lookup index)
39989 LD B,12 Load B with 12 (number of interrupt cycles to wait per frame)
39991 HALT Wait for interrupt
39992 DJNZ 39991 Decrease remaining number of interrupt cycles to wait and loop back to 39991 if not zero
39994 POP BC Restore BC (B = remaining number of frames to draw, C = current frame's lookup index)
39995 CALL 41545 Copy 2 × 4 (characters) region from temporary storage at 23299 into display file
39998 POP AF Restore AF
39999 POP IX Restore IX (address of position data)
40001 POP BC Restore BC (B = remaining number of frames to draw, C = current frame's lookup index)
40002 INC C Advance to next puff of smoke frame
40003 DJNZ 39974 Decrease remaining number of frames to draw and loop back to 39974 if not zero
40005 POP BC Restore BC
40006 POP AF Restore AF
40007 RET Return
Prev: 39933 Up: Map Next: 40008