Prev: 54983 Up: Map Next: 55068
54994: Tunnel section - Generate and prepare tunnel items
Used by the routine at 54524.
This routine uses the cyclical game timer at 60074 to generate the left and right walls of the tunnel.
54994 LD A,0 Reset current horizontal & vertical speeds back to zero
54996 LD (60237),A
54999 LD (60236),A
55002 LD A,(60074) Game timer
55005 LD C,A
55006 AND 1 Every other game timer frame, decide whether to generate a left/right tunnel boundary wall
55008 JP NZ,55068
55011 LD A,(60286) Incremental tunnel counter
55014 INC A Add 1
55015 CP 20 Check if >=20 (this determines the limit to how many boundary wall sections can be generated on screen)
55017 JP NC,55188 If it's >=20, skip out of this routine. The most that will realistically fit on screen is 10, so this limit shouldn't normally be reached.
55020 LD (60286),A Counter is <20. Restore incremented counter
Use the game timer to create left/right tunnel border sections:
55023 LD A,C Retrieve game timer
55024 AND 2 Check bit 2 - 50/50 set/unset. Will go in a sequence of 11-00-11-00-11
55026 JR Z,55036 The 50/50 is used to create either a left-hand or right-hand tunnel boundary graphic. In this sequence this creates a 'staggered' effect for the tunnel walls.
Right tunnel boundary wall:
55028 LD A,1 Graphic offset = 1 (no offset - use graphic at 41114)
55030 LD C,16 Horizontal movement speed/direction = +16 (moving right)
55032 LD E,4 Horizontal movement position offset - in half-character/4-pixel steps (2 character squares to the right)
55034 JR 55042
Left tunnel boundary wall:
55036 LD A,2 Graphic offset = 2 (a mirrored version of the tunnel graphic at 41114 will be created and the graphics address stored at 38929)
55038 LD C,240 Horizontal movement speed/direction = -16 (moving left)
55040 LD E,252 Horizontal movement position offset - in half-character/4-pixel steps (2 character squares to the left)
Store calculated boundary attributes:
55042 LD (60230),A 1 = Right boundary, 2 = Left boundary (mirror version)
55045 LD (60240),A Graphic frame offset (1 = no offset or 2 = mirrored)
55048 LD A,14 Graphic type = Tunnel object
55050 LD (60227),A
55053 LD A,C Retrieve horizontal position/movement offset
55054 LD (60236),A ...and store
55057 LD A,(60574) Get horizontal graphic position (in 4-pixel/half-character steps)
55060 ADD A,E Add the offset (+ or - 2 character squares)
55061 LD (60232),A ...and store as graphic's horizontal screen position
55064 LD A,39 Graphic number for tunnel boundary graphic address pointer at 38927
55066 JR 55165 Set up the tunnel wall graphic
Prev: 54983 Up: Map Next: 55068