![]() |
Routines |
| Prev: 6400 | Up: Map | Next: 647B |
|
Used by the routine at 64BD. Animatory states 0x09, 0x0A, 0x0F and 0x1F - corresponding to the sprites of Sam rolling and somersaulting - use sprite tiles 0xEF-0xF7. These sprite tiles are initialised before Sam starts his acrobatic manoeuvre, and later rotated as he moves through each phase of animation.
|
||||
| 6412 | LD L,$02 | Copy sprite tiles 0x02-0x07 over sprite tiles 0xEF-0xF4 | ||
| 6414 | LD E,$EF | |||
| 6416 | LD C,$06 | |||
| 6418 | CALL $6400 | |||
| 641B | LD E,$F2 | Copy sprite tile 0xAA over sprite tile 0xF2 | ||
| 641D | LD L,$AA | |||
| 641F | INC C | |||
| 6420 | CALL $6400 | |||
| 6423 | LD A,$B5 | Copy sprite tiles 0xB5, 0xBD and 0xC5 from base page 0xD7 over sprite tiles 0xF5-0xF7 | ||
| 6425 | LD E,$F5 | |||
| 6427 | LD L,A | |||
| 6428 | LD H,$D7 | |||
| 642A | INC C | |||
| 642B | CALL $6402 | |||
| 642E | LD A,L | |||
| 642F | ADD A,$07 | |||
| 6431 | CP $CD | |||
| 6433 | JR NZ,$6427 | |||
| 6435 | LD B,$08 | Superimpose sprite tile 0xCD from base page 0xD7 over sprite tile 0xF3 (which is currently a copy of sprite tile 0x06, the centre tile of Sam's base animatory state); this makes Sam appear to bend his arms and hold his knees while performing the acrobatic feat, at the expense of losing some detail from his current disguise | ||
| 6437 | LD HL,$D7CD | |||
| 643A | LD DE,$C7F3 | |||
| 643D | LD A,(DE) | |||
| 643E | OR (HL) | |||
| 643F | INC H | |||
| 6440 | AND (HL) | |||
| 6441 | INC H | |||
| 6442 | LD (DE),A | |||
| 6443 | INC D | |||
| 6444 | LD (DE),A | |||
| 6445 | INC D | |||
| 6446 | DJNZ $643D | |||
|
This entry point is used by the routine at 64BD. Here we rotate sprite tiles 0xEF-0xF7 and store the results in sprite tile slots 0xEE-0xF6.
|
||||
| 6448 | LD L,$EF | Tile 0xEF is the first source tile | ||
| 644A | LD E,L | E=0xEE (the first target tile) | ||
| 644B | DEC E | |||
| 644C | LD D,$C7 | The base page for these tiles is 0xC7 | ||
| 644E | LD B,$08 | Rotate the source sprite tile 90 degrees anticlockwise and copy it over the target sprite tile | ||
| 6450 | LD H,$C6 | |||
| 6452 | LD C,$01 | |||
| 6454 | INC H | |||
| 6455 | RRC (HL) | |||
| 6457 | RLA | |||
| 6458 | INC H | |||
| 6459 | RRC (HL) | |||
| 645B | RL C | |||
| 645D | JR NC,$6454 | |||
| 645F | LD (DE),A | |||
| 6460 | INC D | |||
| 6461 | LD A,C | |||
| 6462 | LD (DE),A | |||
| 6463 | INC D | |||
| 6464 | DJNZ $6450 | |||
| 6466 | INC L | Move to the next source sprite tile reference | ||
| 6467 | BIT 3,L | Have we rotated sprite tiles 0xEF-0xF7 yet? | ||
| 6469 | JR Z,$644A | Jump back if not | ||
|
Next we move sprite tiles 0xEE-0xF6 up to 0xEF-0xF7.
|
||||
| 646B | LD A,$10 | There are 16 bytes of graphic and mask data in each tile | ||
| 646D | LD E,$F7 | Copy sprite tiles 0xEE-0xF6 into slots 0xEF-0xF7 | ||
| 646F | LD L,$F6 | |||
| 6471 | LD C,$09 | |||
| 6473 | DEC D | |||
| 6474 | LD H,D | |||
| 6475 | LDDR | |||
| 6477 | DEC A | |||
| 6478 | JR NZ,$646D | |||
| 647A | RET | Return with the zero flag set | ||
| Prev: 6400 | Up: Map | Next: 647B |