Skip to navigation

The Sentinel H source

Name: MoveSights [Show more] Type: Subroutine Category: Sights Summary: Check for up/down/left/right key presses and move the sights accordingly, panning the screen if they go past the screen edges
Context: See this subroutine on its own page References: This subroutine is called as follows: * CheckForKeyPresses calls MoveSights
.MoveSights JSR MoveSightsSideways \ Check for the left/right keys and move the sights \ accordingly, panning to the left or right if they go \ past the screen edges LDA panKeyBeingPressed \ If panKeyBeingPressed contains a key press then one BPL sigh1 \ of the left and right keys is being pressed, so jump \ to sigh1 to skip scanning the up and down keys as we \ can only move the sights in one direction at a time JSR MoveSightsUpDown \ Check for the up/down keys and move the sights \ accordingly, panning up or down if they go past the \ screen edges .sigh1 JMP DrawSights \ Jump to DrawSights to draw the sights in their new \ position, returning from the subroutine using a tail \ call
Name: MoveSightsSideways [Show more] Type: Subroutine Category: Sights Summary: Check for the left/right keys and move the sights accordingly, panning to the left or right if they go past the screen edges
Context: See this subroutine on its own page References: This subroutine is called as follows: * MoveSights calls MoveSightsSideways
.MoveSightsSideways LDX keyLogger \ Set X to the key logger entry for "S" and "D" (pan \ left, pan right), which are used to move the sights BMI sisd4 \ If there is no key press in the key logger entry, jump \ to sisd4 to return from the subroutine \ If we get here then "S" or "D" is being pressed, which \ will put 1 or 0 into the key logger respectively BNE sisd2 \ If X = 1 then "S" is being pressed, so jump to sisd2 \ to process moving the sights left \ If we get here then X = 0, so "D" is being pressed, \ which is the key for moving the sights right LDA xSights \ Increment xSights to move the sights right CLC ADC #1 CMP #144 \ If xSights < 144 then skip the following, as the BCC sisd1 \ sights have not moved off the right edge of the screen \ If we get here then the sights have just moved off the \ right edge of the screen, so we need to pan the screen \ by moving the sights back towards the centre of the \ screen and starting a pan right by "pressing" the \ relevant pan key SBC #64 \ Subtract 64 from A to move the sights to the left by \ 64, as we are about to pan the screen to the right \ (the subtraction works because we passed through a \ BCC so we know the C flag is set) STX panKeyBeingPressed \ Set panKeyBeingPressed to the key logger entry for "D" \ to pretend that the "D" key is being pressed to pan \ the screen as well as move the sights \ \ This will pan to the right by scrolling the screen to \ the left .sisd1 STA xSights \ Update the x-coordinate of the sights to the updated \ value in A AND #%00000011 \ If the x-coordinate is now a multiple of four then the BEQ SetSightsAddress \ sights just moved right into the next character block \ (as each block is four pixels wide), so jump to \ SetSightsAddress with X = 0 to update the screen \ variables for the sights JMP sisd4 \ Otherwise jump to sisd4 to return from the subroutine .sisd2 \ If we get here then X = 1, so "S" is being pressed, \ which is the key for moving the sights left LDA xSights \ Decrement xSights to move the sights left SEC SBC #1 CMP #16 \ If xSights >= 16 then skip the following, as the BCS sisd3 \ sights have not moved off the left edge of the screen \ If we get here then the sights have just moved off the \ left edge of the screen, so we need to pan the screen \ by moving the sights back towards the centre of the \ screen and starting a pan left by "pressing" the \ relevant pan key ADC #64 \ Add 64 to A to move the sights to the right by 64, as \ we are about to pan the screen to the left (the \ addition works because we passed through a BCS so we \ know the C flag is clear) STX panKeyBeingPressed \ Set panKeyBeingPressed to the key logger entry for "S" \ to pretend that the "S" key is being pressed to pan \ the screen as well as move the sights \ \ This will pan to the left by scrolling the screen to \ the right .sisd3 STA xSights \ Update the x-coordinate of the sights to the updated \ value in A AND #%00000011 \ If the x-coordinate is now one less than a multiple of CMP #%00000011 \ four then the sights just moved left into the previous BEQ SetSightsAddress \ character block (as each block is four pixels wide), \ so jump to SetSightsAddress to update the screen \ variables for the sights .sisd4 RTS \ Return from the subroutine
Name: MoveSightsUpDown [Show more] Type: Subroutine Category: Sights Summary: Check for the up/down keys and move the sights accordingly, panning up or down if they go past the screen edges
Context: See this subroutine on its own page References: This subroutine is called as follows: * MoveSights calls MoveSightsUpDown
.MoveSightsUpDown LDX playerObject \ Set Y to the current pitch angle of the player LDY objectPitchAngle,X LDX keyLogger+2 \ Set X to the key logger entry for "L" and "," (pan \ up, pan down), which are used to move the sights BMI sadr3 \ If there is no key press in the key logger entry, jump \ to sadr3 to return from the subroutine \ If we get here then "L" or "," is being pressed, which \ will put 2 or 3 into the key logger respectively CPX #2 \ If X = 3 then "," is being pressed, so jump to siud2 BNE siud2 \ to process moving the sights down \ If we get here then X = 2, so "L" is being pressed, \ which is the key for moving the sights up LDA ySights \ Increment ySights to move the sights up CLC ADC #1 CMP #160 \ If ySights < 160 then skip the following, as the BCC siud1 \ sights have not moved off the top edge of the screen CPY highestPitchAngle \ If the player's pitch angle is already equal to the BEQ sadr3 \ the pitch angle of the highest gaze allowed, then jump \ to sadr3 to return from the subroutine without moving \ the sights, as we can't move them any higher SEC \ Subtract 64 from A to move the sights down by 64, as SBC #64 \ we are about to pan the screen up STX panKeyBeingPressed \ Set panKeyBeingPressed to the key logger entry for "L" \ to pretend that the "L" key is being pressed to pan \ the screen as well as move the sights \ \ This will pan up by scrolling the screen down .siud1 STA ySights \ Update the y-coordinate of the sights to the updated \ value in A AND #%00000111 \ If the y-coordinate is not a multiple of eight then BNE SetSightsAddress \ the sights are still within the same character row, so \ jump to SetSightsAddress with X = 2 to update the \ address variables for the sights JMP siud4 \ Otherwise jump to sisd4 to increment X to 4 before \ falling into SetSightsAddress to set the address \ variables for the sights .siud2 \ If we get here then X = 3, so "," is being pressed, \ which is the key for moving the sights down LDA ySights \ Decrement ySights to move the sights down SEC SBC #1 CMP #32 \ If ySights >= 32 then skip the following, as the BCS siud3 \ sights have not moved off the bottom edge of the \ screen CPY lowestPitchAngle \ If the player's pitch angle is already equal to the BEQ sadr3 \ the pitch angle of the lowest gaze allowed, then jump \ to sadr3 to return from the subroutine without moving \ the sights, as we can't move them any lower CLC \ Add 64 to A to move the sights up by 64, as we are ADC #64 \ about to pan the screen up STX panKeyBeingPressed \ Set panKeyBeingPressed to the key logger entry for "," \ to pretend that the "," key is being pressed to pan \ the screen as well as move the sights \ \ This will pan down by scrolling the screen up .siud3 STA ySights \ Update the y-coordinate of the sights to the updated \ value in A AND #%00000111 \ If the y-coordinate is not one less than a multiple of CMP #%00000111 \ eight then the sights are still within the current BNE SetSightsAddress \ character row, so jump to SetSightsAddress with X = 3 \ to update the address variables for the sights \ Otherwise increment X to 5 before falling into \ SetSightsAddress to set the address variables for the \ sights .siud4 INX \ Increment X by 2, so: INX \ \ * X = 4 if "L" was pressed to move the sights up and \ this moved the sights into the character row above \ \ * X = 5 if "," was pressed to move the sights down \ and this moved the sights into the character row \ below \ Fall into SetSightsAddress to set the address \ variables for the sights
Name: SetSightsAddress [Show more] Type: Subroutine Category: Sights Summary: Update the address variables for the sights when they move into a new character block or row
Context: See this subroutine on its own page References: This subroutine is called as follows: * MoveSightsSideways calls SetSightsAddress * MoveSightsUpDown calls SetSightsAddress * MoveSightsUpDown calls via sadr3

Arguments: X Describes how the sights have moved when they move into a new character block or row in screen memory: * 0 if the sights moved right into the next character block * 1 if the sights moved left into the previous character block * 2 if the sights moved up within the same row * 3 if the sights moved down within the same row * 4 if the sights moved up into the row above * 5 if the sights moved down into the row below
Other entry points: sadr3 Contains an RTS
.SetSightsAddress \ We calculate the new screen address for the sights \ after the movement type described in X, by adding the \ relevant address change from entry X in the tables at \ sightsMoveAddr(Hi Lo) LDA sightsScreenAddr \ Add the address change for the movement type in X to CLC \ the sights screen address in sightsScreenAddr(1 0) ADC sightsMoveAddrLo,X \ STA sightsScreenAddr \ We start by calculating this: LDA sightsScreenAddr+1 \ ADC sightsMoveAddrHi,X \ (A sightsScreenAddr) = viewScreenAddr(1 0) \ + (sightsMoveAddrHi+X sightsMoveAddrLo+X) CMP #&80 \ If the high byte in A >= &80 then the new address is BCC sadr1 \ past the end of screen memory, so subtract &20 from SBC #&20 \ the high byte so the address wraps around within the \ range of screen memory between &6000 and &8000 \ \ If the high byte is in range, jump to sadr1 to check \ the high byte against the start of screen memory JMP sadr2 \ Jump to sadr2 to skip the next check, as we know it \ doesn't apply .sadr1 CMP #&60 \ If the high byte in A < &60 then the new address is BCS sadr2 \ before the start of screen memory, so add &20 to the ADC #&20 \ high byte so the address wraps around within the range \ of screen memory between &6000 and &8000 .sadr2 STA sightsScreenAddr+1 \ Store the high byte of the result, so we now have: \ \ sightsScreenAddr(1 0) = viewScreenAddr(1 0) \ + (sightsMoveAddrHi+X sightsMoveAddrLo+X) \ \ with the address wrapped around as required .sadr3 RTS \ Return from the subroutine
Name: DrawSights [Show more] Type: Subroutine Category: Sights Summary: Draw the sights on the screen, saving the existing screen contents in the sights pixel byte stash
Context: See this subroutine on its own page References: This subroutine is called as follows: * CheckForKeyPresses calls DrawSights * DrawUpdatedObject calls DrawSights * MoveSights calls DrawSights
.DrawSights LDA doNotDrawSights \ If bit 7 of doNotDrawSights is set then we do not draw BMI dras2 \ the sights, so jump to dras12 via dras2 to return from \ the subroutine JSR RemoveSights \ First we remove the sights from the screen (if there \ are any sights on-screen), so if we are drawing the \ sights to move them, this removes the old sights \ \ This also sets sightsByteCount = 0 to reset the sights \ pixel byte stash \ We now set the coordinates of the "brush" that we're \ going to use to draw the sights \ \ The coordinates of the brush are stored relative to \ the top-left corner of the character block containing \ the top of the sights \ \ The current coordinate of the brush is stored as \ follows: \ \ * sightsByteAddr(1 0) contains the address of the \ character block in which we are dabbing our brush \ \ * The x-coordinate is stored in xSightsBrush in the \ form of a pixel offset within the character block \ pointed to by sightsByteAddr(1 0), so this is \ always in the range 0 to 3 \ \ * The y-coordinate is stored in Y in the form of a \ pixel row offset within the character block \ pointed to by sightsByteAddr(1 0), so this is \ always in the range 0 to 7 LDA xSights \ Set xSightsBrush as follows: AND #%00000011 \ STA xSightsBrush \ xSightsBrush = xSights mod 4 \ \ Each pixel byte contains four pixels, so this sets \ xSightsBrush to the x-coordinate of the sights within \ the pixel byte in which the sights appear, in the \ range 0 to 3 \ \ This gives us the x-coordinate of the starting point \ for the brush at the top of the sights, relative to \ the top-left corner of the character block containing \ the top of the sights LDA sightsScreenAddr \ Set Y to bits 0-2 of the address of the sights in AND #%00000111 \ screen memory, so Y contains the number of the pixel TAY \ row within the character block containing the sights \ \ This gives us the y-coordinate of the starting point \ for the brush at the top of the sights, relative to \ the top-left corner of the character block containing \ the top of the sights LDA sightsScreenAddr \ Set sightsByteAddr(1 0) to bits 3-15 of the address AND #%11111000 \ of the sights in screen memory, so it contains the STA sightsByteAddr \ address of the top-left corner of the character block LDA sightsScreenAddr+1 \ containing the top of the sights STA sightsByteAddr+1 \ We now draw the sights one step at a time, dabbing the \ brush on the screen for each step \ \ There are 12 steps when drawing the sights, and we \ draw one screen byte (four pixels) in each step, \ storing the original screen contents in the sights \ pixel byte stash, so we can easily remove the sights \ later \ \ We start by placing our brush at the top of the sights \ and dabbing the screen to draw the first pixel byte \ \ The top of the sights are at a relative coordinate of \ (xSightsBrush, Y) from the start of the character \ block of the sights, so this is where we start \ \ We then apply the steps from the xSightsStep and \ ySightsStep tables to the brush coordinates, dabbing \ the screen at each step, starting from step 0 and \ moving as follows (where steps 10 and 11 are shown as \ A and B): \ \ 00 \ 11 \ 22 \ 334455667788 \ 99 \ AA \ BB \ \ The current step number is stored in sightsByteCount, \ which also tracks the size of the sights pixel byte \ stash .dras1 \ We start by adding the next step to the y-coordinate \ of the brush and updating sightsByteAddr(1 0) and Y \ accordingly LDX sightsByteCount \ Set X to the current step number, which is also the \ current size of the sights pixel byte stash TYA \ Set A = Y + the X-th entry in ySightsStep CLC \ ADC ySightsStep,X \ So this applies the next step from the ySightsStep \ table to the relative y-coordinate of the brush in Y BPL dras3 \ The table at ySightsStep is terminated by %10000000, \ so if bit 7 of the result is clear then we haven't yet \ reached the end of the table, so jump to dras3 to keep \ drawing \ Otherwise we just read the terminator at the end of \ the ySightsStep table, so fall through into dras2 to \ return from the subroutine .dras2 JMP dras12 \ Jump to dras12 to return from the subroutine .dras3 CMP #8 \ Compare A and 8 and set the status flags for us to \ check below TAY \ Set Y to the updated value of A, so Y now contains the \ updated y-coordinate of the brush after applying the \ next step from ySightsStep BCC dras5 \ If A < 8 then the y-coordinate has not moved past the \ bottom of the current character row, so jump to dras5 \ to move on to processing the x-coordinate \ We have just stepped down into the next character row, \ so we need to recalculate the values in Y and \ sightsByteAddr(1 0) to point to the correct address \ in the next character row SBC #8 \ Set Y = Y - 8 TAY \ \ This resets Y to the number of the pixel row in the \ next character row down, as each character row is \ eight bytes high \ \ This subtraction works as we passed through a BCC \ above, so we know the C flag is set LDA sightsByteAddr \ Set (A sightsByteAddr) = sightsByteAddr(1 0) + &140 CLC \ = sightsByteAddr(1 0) + 320 ADC #&40 \ STA sightsByteAddr \ Each character row in screen mode 5 takes up 320 bytes LDA sightsByteAddr+1 \ (40 character blocks of eight bytes each), so this ADC #&01 \ sets sightsByteAddr(1 0) to the address of the next \ row down in screen memory CMP #&80 \ If the high byte in A >= &80 then the new address is BCC dras4 \ past the end of screen memory, so subtract &20 from SBC #&20 \ the high byte so the address wraps around within the \ range of screen memory between &6000 and &8000 .dras4 STA sightsByteAddr+1 \ Store the high byte of the result, so we now have: \ \ sightsByteAddr(1 0) = sightsByteAddr(1 0) + 320 \ \ with the address wrapped around as required .dras5 \ We now need to add the next step to the x-coordinate \ of the brush and update sightsByteAddr(1 0) and \ xSightsBrush accordingly LDA xSightsStep,X \ Set A to the next step from the xSightsStep that we \ need to apply to the relative x-coordinate in \ xSightsBrush BEQ dras9 \ If the step is zero then we don't need to change the \ x-coordinate in xSightsBrush, so jump to dras9 to \ move on to the actual drawing step CLC \ Set xSightsBrush = xSightsBrush + A ADC xSightsBrush \ STA xSightsBrush \ So this applies the next step from the xSightsStep \ table to the relative x-coordinate of the brush in \ xSightsBrush AND #%11111100 \ Set A = (A * 2) div 8 ASL A \ \ All the step values in xSightsStep and ySightsStep \ and the brush coordinates in xSightsBrush and Y are \ in pixels, with each step in the x-coordinate drawing \ two pixels, so these steps: \ \ 00 \ 11 \ 22 \ 334455667788 \ 99 \ AA \ BB \ \ end up drawing pixels like this: \ \ x. \ x. \ x. \ x.x.x.x.x.x. \ x. \ x. \ x. \ \ Screen mode 5 contains four pixels in each byte, so to \ convert the x-coordinate of the brush offset from step \ pixels into screen pixels, we have to double it \ \ We then apply div 8 to the result to give us the \ offset of the start of the character block containing \ the new position of the brush, as each character block \ contains eight bytes BPL dras6 \ If A is a negative value then to make the following DEC sightsByteAddr+1 \ addition work we would have to add (&FF A) to make \ the 16-bit addition work in signed 16-bit arithmetic, \ but to save having to do this we can simply decrement \ the high byte of sightsByteAddr(1 0) in advance and \ add (0 A) instead .dras6 CLC \ Set (A sightsByteAddr) = sightsByteAddr(1 0) + A ADC sightsByteAddr \ STA sightsByteAddr \ So this applies the step in A to sightsByteAddr(1 0) LDA sightsByteAddr+1 ADC #0 CMP #&60 \ If the high byte in A < &60 then the new address is BCS dras7 \ before the start of screen memory, so add &20 to the ADC #&20 \ high byte so the address wraps around within the range \ of screen memory between &6000 and &8000 JMP dras8 \ Jump to dras8 to skip the next check, as we know it \ doesn't apply .dras7 CMP #&80 \ If the high byte in A >= &80 then the new address is BCC dras8 \ past the end of screen memory, so subtract &20 from SBC #&20 \ the high byte so the address wraps around within the \ range of screen memory between &6000 and &8000 .dras8 STA sightsByteAddr+1 \ Store the high byte of the result, so we now have: \ \ sightsByteAddr(1 0) = sightsByteAddr(1 0) + A \ \ with the address wrapped around as required \ \ So this applies the next step to sightsByteAddr(1 0) \ to give us the screen address of the character block \ that we need to update to make the next brush stroke LDA xSightsBrush \ Set xSightsBrush as follows: AND #%00000011 \ STA xSightsBrush \ xSightsBrush = xSightsBrush mod 4 \ \ Each pixel byte contains four pixels, so this sets \ xSightsBrush to the x-coordinate of the sights within \ the pixel byte in which the sights appear, in the \ range 0 to 3 .dras9 \ We have now set up sightsByteAddr(1 0), xSightsBrush \ and Y to the address of the next pixel byte to paint, \ so let's dab the brush for this step \ \ The address of the pixel byte we need to paint is \ sightsByteAddr(1 0) + Y \ \ The offset of the pixel within that pixel byte (in \ terms of step pixels) is in xSightsBrush \ First, we need to save the current contents of the \ screen in the sights pixel byte stash by storing the \ screen address of the pixel in the X-th entry of \ sightsByteAddr(Hi Lo), and then storing the existing \ contents of that address to the X-th entry of \ sightsByte TYA \ Set the X-th entry in the sights pixel byte stash ORA sightsByteAddr \ address list at sightsByteAddr(Hi Lo) to STA sightsByteAddrLo,X \ sightsByteAddr(1 0) + Y, which is the address of LDA sightsByteAddr+1 \ the pixel byte we are about to change STA sightsByteAddrHi,X LDA (sightsByteAddr),Y \ Set A to the current screen contents of the pixel byte \ we are updating STA sightsByte,X \ Store the current screen contents in the X-th entry in \ the sights pixel byte stash at sightsByte \ We now apply the brush to the pixel byte in screen \ memory at sightsByteAddr(1 0) + Y \ \ We do this by taking the existing screen pixel byte in \ A and setting the pixel number xSightsBrush to either \ colour 1 or colour 2, depending on the current colour \ in that pixel \ \ Specifically, we draw the sights in colour 2 when the \ background is colour 0 or 1, and we draw the sights in \ colour 1 when the background is colour 2 or 3 \ \ As an example of physical colours, in landscape 0000 \ we paint the sights pixels in white (colour 2) when \ the background is blue (colour 0) or black (colour 1), \ and we paint the sights pixels in black (colour 1) \ when the background is white (colour 2) or green \ (colour 3) \ \ This ensures that the sights are visible wherever they \ are on-screen, irrespective of the current screen \ contents LDX xSightsBrush \ Convert xSightsBrush from a number in the range 0 to 3 AND pixelBitMask,X \ into a bit mask with that pixel number set (where \ pixel 0 is on the left and pixel 3 is on the right) \ \ So if xSightsBrush is 2, for example, the resulting \ mask will be %00100010, in which pixel 2 is set \ At this point, A contains the existing contents of the \ screen byte into which we need to draw the sights, \ with all bits zeroed except for those for the pixel we \ want to colour in CMP #%00010000 \ Set the status flags on the comparison of A and PHP \ %00010000 and push the resulting flags on the stack \ so we can retrieve them below LDA (sightsByteAddr),Y \ Set A to the current screen contents of the pixel byte \ we are updating AND clearPixelMask,X \ Clear the pixel number in xSightsBrush by applying a \ pixel bit mask from clearPixelMask where the bits for \ every pixel are set except for pixel X PLP \ Using the status flags that we put on the stack above, BCS dras10 \ check whether A >= %00010000, where A contains the \ existing contents of the screen for pixel X \ \ If A >= %00010000 then A must have at least one bit \ set in the high nibble, which means the existing \ contents of pixel X on-screen has to have its top bit \ set, so it must either be colour %10 (2) or %11 (3) \ \ As the background is colour 2 or 3, jump to dras10 to \ paint the sights pixel in colour 1 \ If we get here then the existing screen contents are \ in colour 0 or 1, so we now paint the sights pixel in \ colour 2 ORA pixelByteColour2,X \ Set the colour of pixel X to colour 2 by OR'ing in a \ pixel mask where pixel X is set to %10 for colour 2 BCC dras11 \ Jump to dras11 to skip the following instruction (this \ BCC is effectively a JMP as we just passed through a \ BCS) .dras10 ORA pixelByteColour1,X \ Set the colour of pixel X to colour 1 by OR'ing in a \ pixel mask where pixel X is set to %01 for colour 1 .dras11 STA (sightsByteAddr),Y \ Store the updated pixel byte in screen memory to apply \ the brush to the canvas INC sightsByteCount \ Increment sightsByteCount to move on to the next step \ in the drawing process JMP dras1 \ Loop back to draw the next step of the sights .dras12 RTS \ Return from the subroutine
Name: pixelByteColour2 [Show more] Type: Variable Category: Graphics Summary: A table for converting a pixel number in the range 0 to 3 into a screen mode 5 pixel byte with that pixel set to colour 2 (%10)
Context: See this variable on its own page References: This variable is used as follows: * DrawSights uses pixelByteColour2
.pixelByteColour2 EQUB %10000000 \ Pixel byte with pixel 0 set to colour 2 EQUB %01000000 \ Pixel byte with pixel 1 set to colour 2 EQUB %00100000 \ Pixel byte with pixel 2 set to colour 2 EQUB %00010000 \ Pixel byte with pixel 3 set to colour 2
Name: xSightsStep [Show more] Type: Variable Category: Sights Summary: Steps to take along the x-axis when drawing the sights
Context: See this variable on its own page References: This variable is used as follows: * DrawSights uses xSightsStep

The xSightsStep and ySightsStep tables define a set of 12 steps to follow when drawing the sights, relative to the start position at the top of the sights. The steps draw a shape like this, starting at step 0 and showing steps 10 and 11 as A and B): 00 11 22 334455667788 99 AA BB Each step is made up of two pixels, one filled (e.g. white) and one transparent, to give a shape like this: x. x. x. x.x.x.x.x.x. x. x. x. In the above, "x" denotes a filled pixel while "." denotes a transparent pixel.
.xSightsStep EQUB 0 \ Step 0 = ( 0, 0) -> ( 0, 0) EQUB 0 \ Step 1 = ( 0, 2) -> ( 0, 2) EQUB 0 \ Step 2 = ( 0, 2) -> ( 0, 4) EQUB -5 \ Step 3 = (-5, 1) -> (-5, 5) EQUB 2 \ Step 4 = ( 2, 0) -> (-3, 5) EQUB 2 \ Step 5 = ( 2, 0) -> (-1, 5) EQUB 2 \ Step 6 = ( 2, 0) -> ( 1, 5) EQUB 2 \ Step 7 = ( 2, 0) -> ( 3, 5) EQUB 2 \ Step 8 = ( 2, 0) -> ( 5, 5) EQUB -5 \ Step 9 = (-5, 1) -> ( 0, 6) EQUB 0 \ Step 10 = ( 0, 2) -> ( 0, 8) EQUB 0 \ Step 11 = ( 0, 2) -> ( 0, 10)
Name: ySightsStep [Show more] Type: Variable Category: Sights Summary: Steps to take along the y-axis when drawing the sights
Context: See this variable on its own page References: This variable is used as follows: * DrawSights uses ySightsStep

The ySightsStep and xSightsStep tables define a set of 12 steps to follow when drawing the sights, relative to the start position. The steps draw a shape like this, starting at step 0 and showing steps 10 and 11 as A and B): 33 44 55 00112299AABB 66 77 88
.ySightsStep EQUB 0 \ Step 0 = ( 0, 0) -> ( 0, 0) EQUB 2 \ Step 1 = ( 0, 2) -> ( 0, 2) EQUB 2 \ Step 2 = ( 0, 2) -> ( 0, 4) EQUB 1 \ Step 3 = (-5, 1) -> (-5, 5) EQUB 0 \ Step 4 = ( 2, 0) -> (-3, 5) EQUB 0 \ Step 5 = ( 2, 0) -> (-1, 5) EQUB 0 \ Step 6 = ( 2, 0) -> ( 1, 5) EQUB 0 \ Step 7 = ( 2, 0) -> ( 3, 5) EQUB 0 \ Step 8 = ( 2, 0) -> ( 5, 5) EQUB 1 \ Step 9 = (-5, 1) -> ( 0, 6) EQUB 2 \ Step 10 = ( 0, 2) -> ( 0, 8) EQUB 2 \ Step 11 = ( 0, 2) -> ( 0, 10) EQUB %10000000 \ End of table
Name: RemoveSights [Show more] Type: Subroutine Category: Sights Summary: Remove the sights from the screen
Context: See this subroutine on its own page References: This subroutine is called as follows: * CheckForKeyPresses calls RemoveSights * DrawSights calls RemoveSights * DrawUpdatedObject calls RemoveSights
.RemoveSights LDX sightsByteCount \ If the sights pixel byte stash is empty then there are BEQ rems2 \ no pixel bytes to restore to the screen, so jump to \ rems2 to return from the subroutine DEX \ Decrement the size of the sights pixel byte stash to \ give us a loop counter to count through the bytes LDY #0 \ Set Y = 0 so the STA (sightsByteAddr),Y instruction \ below behaves like STA (sightsByteAddr) .rems1 LDA sightsByteAddrLo,X \ Set sightsByteAddr(1 0) to the address for the X-th STA sightsByteAddr \ entry in the sights pixel byte stash, which we get LDA sightsByteAddrHi,X \ from the sightsByteAddr(Hi Lo) tables STA sightsByteAddr+1 LDA sightsByte,X \ Copy the X-th pixel byte from the sights pixel byte STA (sightsByteAddr),Y \ stash to the address in sightsByteAddr(1 0), to \ restore this byte of screen memory to its original \ contents, thus removing the sights from this byte DEX \ Decrement the pixel byte counter BPL rems1 \ Loop back until we have restored every byte from the \ sights pixel byte stash into its original address in \ screen memory LDX #0 \ Reset the size of the sights pixel byte stash to zero STX sightsByteCount \ as we have just emptied it .rems2 RTS \ Return from the subroutine
Name: sightsMoveAddrLo [Show more] Type: Variable Category: Sights Summary: The change to apply to the screen address of the sights when they move into a new character block or row (low byte)
Context: See this variable on its own page References: This variable is used as follows: * SetSightsAddress uses sightsMoveAddrLo
.sightsMoveAddrLo EQUB LO(+8) \ Move right into the next character block EQUB LO(-8) \ Move left into the previous character block EQUB LO(-1) \ Move up within the same character row EQUB LO(+1) \ Move down within the same character row EQUB LO(-320 + 7) \ Move up into the bottom pixel row of the character row \ above EQUB LO(320 - 7) \ Move down into the top pixel row of the character row \ below
Name: sightsMoveAddrHi [Show more] Type: Variable Category: Sights Summary: The change to apply to the screen address of the sights when they move into a new character block or row (high byte)
Context: See this variable on its own page References: This variable is used as follows: * SetSightsAddress uses sightsMoveAddrHi
.sightsMoveAddrHi EQUB HI(+8) \ Move right into the next character block EQUB HI(-8) \ Move left into the previous character block EQUB HI(-1) \ Move up within the same character row EQUB HI(+1) \ Move down within the same character row EQUB HI(-320 + 7) \ Move up into the bottom pixel row of the character row \ above EQUB HI(320 - 7) \ Move down into the top pixel row of the character row \ below
Name: GetIconRowAddress [Show more] Type: Subroutine Category: Scanner/energy row Summary: Calculate the address in screen memory of the icon and scanner row at the top of the screen
Context: See this subroutine on its own page References: This subroutine is called as follows: * ResetScreenAddress calls GetIconRowAddress * ScrollPlayerView calls GetIconRowAddress

Returns: A The high byte of the address in iconRowAddr(1 0)
.GetIconRowAddress LDA viewScreenAddr \ Set iconRowAddr(1 0) = viewScreenAddr(1 0) - &0140 SEC \ = viewScreenAddr(1 0) - 320 SBC #&40 \ STA iconRowAddr \ starting with the low bytes LDA viewScreenAddr+1 \ And then the high bytes SBC #&01 CMP #&60 \ If the result of the subtraction is less than &6000, BCS gicn1 \ add &2000 to wrap it around so the result is within ADC #&20 \ screen memory from &6000 and up .gicn1 STA iconRowAddr+1 \ Store the high byte of the result in iconRowAddr(1 0), \ so we have the following: \ \ iconRowAddr(1 0) = viewScreenAddr(1 0) - 320 \ \ Each character row in screen mode 5 takes up 320 bytes \ (40 character blocks of eight bytes each), so this \ sets iconRowAddr(1 0) to the address of the character \ row just above the player's scrolling landscape view, \ which is in screen memory at viewScreenAddr(1 0) RTS \ Return from the subroutine
Name: ShowIconBuffer [Show more] Type: Subroutine Category: Screen buffer Summary: Display the redrawn icon and scanner row by copying the contents of the icon screen buffer into screen memory
Context: See this subroutine on its own page References: This subroutine is called as follows: * ClearIconsScanner calls ShowIconBuffer * IRQHandler calls ShowIconBuffer * UpdateIconsScanner calls ShowIconBuffer
.ShowIconBuffer LDA #HI(iconBuffer) \ Set fromAddr(1 0) = iconBuffer(1 0) STA fromAddr+1 \ LDA #LO(iconBuffer) \ So the call to ShowBufferRow copies from the icon STA fromAddr \ screen buffer, which contains the redrawn icon and \ scanner row LDA iconRowAddr+1 \ Set toAddr(1 0) = iconRowAddr(1 0) STA toAddr+1 \ LDA iconRowAddr \ So the call to ShowBufferRow copies from the icon STA toAddr \ screen buffer into the screen memory for the icon and \ scanner row at the top of the screen JMP ShowBufferRow \ Jump to ShowBufferRow to copy the contents of the \ icon screen buffer into screen memory
Name: arctanLo [Show more] Type: Variable Category: Maths (Geometry) Summary: Table for arctan values when calculating yaw angles (low byte)
Context: See this variable on its own page References: This variable is used as follows: * GetAngleFromCoords (Part 3 of 3) uses arctanLo
.arctanLo FOR I%, 0, 256 EQUB LO(INT(0.5 + 32 * ATN(I% / 256) * 256 / ATN(1))) NEXT
Name: arctanHi [Show more] Type: Variable Category: Maths (Geometry) Summary: Table for arctan values when calculating yaw angles (high byte)
Context: See this variable on its own page References: This variable is used as follows: * GetAngleFromCoords (Part 3 of 3) uses arctanHi
.arctanHi FOR I%, 0, 256 EQUB HI(INT(0.5 + 32 * ATN(I% / 256) * 256 / ATN(1))) NEXT
Name: tanHalfAngle [Show more] Type: Variable Category: Maths (Geometry) Summary: Table for hypotenuse lengths given the tangent of an angle
Context: See this variable on its own page References: This variable is used as follows: * GetHypotenuse uses tanHalfAngle

Given the tangent of an angle, X = tan(theta), this table contains the following at index X: tanHalfAngle,X = 2 * tan(theta / 2) The table contains lookup values for indexes 0 to 128, which correspond to theta angles of 0 to 45 degrees. This allows us to approximate the length of the hypotenuse of a triangle with angle theta, adjacent side a and opposite side b, as follows: h =~ a + b * tan(theta / 2)
.tanHalfAngle EQUB 0 FOR I%, 1, 128 EQUB INT(0.5 + 2 * 256 * TAN(ATN(I% / 128) / 2)) NEXT
Name: screenRowAddrLo [Show more] Type: Variable Category: Screen buffer Summary: Address lookup table for character rows in screen memory (low byte)
Context: See this variable on its own page References: This variable is used as follows: * DrawPolygonLines (Part 1 of 4) uses screenRowAddrLo * FillScreen uses screenRowAddrLo

This table contains addresses for each of the 24 character rows in the player's scrolling landscape view in screen memory. In its default, unscrolled state, screen memory starts at &7F80, so the address of the first row in the player's scrolling landscape view (i.e. the second row on-screen below the energy icon and scanner row) is &7F80 + 320, or &60C0 (as screen memory wraps around from &8000 back to &6000). See the ResetScreenAddress routine for more details.
.screenRowAddrLo FOR I%, 0, 24 EQUB LO(&60C0 + (I% * &140)) NEXT
Name: bufferRowAddrLo [Show more] Type: Variable Category: Screen buffer Summary: Address lookup table for character rows in the screen buffer (low byte)
Context: See this variable on its own page References: This variable is used as follows: * DrawPolygonLines (Part 2 of 4) uses bufferRowAddrLo

This table contains addresses for each of the 24 character rows in the screen buffer for the player's scrolling landscape view. There is an additional address for a 25th character row, but this clashes with the object data and is unused.
.bufferRowAddrLo EQUB LO(screenBufferRow0) EQUB LO(screenBufferRow1) EQUB LO(screenBufferRow2) EQUB LO(screenBufferRow3) EQUB LO(screenBufferRow4) EQUB LO(screenBufferRow5) EQUB LO(screenBufferRow6) EQUB LO(screenBufferRow7) EQUB LO(screenBufferRow8) EQUB LO(screenBufferRow9) EQUB LO(screenBufferRow10) EQUB LO(screenBufferRow11) EQUB LO(screenBufferRow12) EQUB LO(screenBufferRow13) EQUB LO(screenBufferRow14) EQUB LO(screenBufferRow15) EQUB LO(screenBufferRow16) EQUB LO(screenBufferRow17) EQUB LO(screenBufferRow18) EQUB LO(screenBufferRow19) EQUB LO(screenBufferRow20) EQUB LO(screenBufferRow21) EQUB LO(screenBufferRow22) EQUB LO(screenBufferRow23) EQUB LO(screenBufferRow23 + 320) \ This part of the screen buffer is unused
Name: screenRowAddrHi [Show more] Type: Variable Category: Graphics Summary: Address lookup table for character rows in screen memory (high byte)
Context: See this variable on its own page References: This variable is used as follows: * DrawPolygonLines (Part 1 of 4) uses screenRowAddrHi * FillScreen uses screenRowAddrHi

This table contains addresses for each of the 24 character rows in the player's scrolling landscape view in screen memory. In its default, unscrolled state, screen memory starts at &7F80, so the address of the first row in the player's scrolling landscape view (i.e. the second row on-screen below the energy icon and scanner row) is &7F80 + 320, or &60C0 (as screen memory wraps around from &8000 back to &6000). See the ResetScreenAddress routine for more details.
.screenRowAddrHi FOR I%, 0, 24 EQUB HI(&60C0 + (I% * &140)) NEXT
Name: bufferRowAddrHi [Show more] Type: Variable Category: Screen buffer Summary: Address lookup table for character rows in the screen buffer (high byte)
Context: See this variable on its own page References: This variable is used as follows: * DrawPolygonLines (Part 2 of 4) uses bufferRowAddrHi

This table contains addresses for each of the 24 character rows in the screen buffer for the player's scrolling landscape view. There is an additional address for a 25th character row, but this clashes with the object data and is unused.
.bufferRowAddrHi EQUB HI(screenBufferRow0) EQUB HI(screenBufferRow1) EQUB HI(screenBufferRow2) EQUB HI(screenBufferRow3) EQUB HI(screenBufferRow4) EQUB HI(screenBufferRow5) EQUB HI(screenBufferRow6) EQUB HI(screenBufferRow7) EQUB HI(screenBufferRow8) EQUB HI(screenBufferRow9) EQUB HI(screenBufferRow10) EQUB HI(screenBufferRow11) EQUB HI(screenBufferRow12) EQUB HI(screenBufferRow13) EQUB HI(screenBufferRow14) EQUB HI(screenBufferRow15) EQUB HI(screenBufferRow16) EQUB HI(screenBufferRow17) EQUB HI(screenBufferRow18) EQUB HI(screenBufferRow19) EQUB HI(screenBufferRow20) EQUB HI(screenBufferRow21) EQUB HI(screenBufferRow22) EQUB HI(screenBufferRow23) EQUB HI(screenBufferRow23 + 320) \ This part of the screen buffer is unused
Name: sightsByte [Show more] Type: Variable Category: Sights Summary: The sights pixel byte stash, which contains the screen pixel bytes behind the sights, so they can be restored to remove the sights
Context: See this variable on its own page References: This variable is used as follows: * DrawSights uses sightsByte * RemoveSights uses sightsByte
.sightsByte EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00
Name: sightsByteAddrHi [Show more] Type: Variable Category: Sights Summary: The screen addresses of the bytes in the sights pixel byte stash, to which they can be restored to remove the sights (high byte)
Context: See this variable on its own page References: This variable is used as follows: * DrawSights uses sightsByteAddrHi * RemoveSights uses sightsByteAddrHi
.sightsByteAddrHi EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &08 \ This byte appears to be unused
Name: edgePixelsLeft [Show more] Type: Variable Category: Drawing polygons Summary: Table to convert a polygon colours byte and a pixel offset (0-3) into a pixel byte for the left edge of the polygon pixel line
Context: See this variable on its own page References: This variable is used as follows: * DrawPolygonLines (Part 2 of 4) uses edgePixelsLeft * DrawPolygonLines (Part 3 of 4) uses edgePixelsLeft

Each batch of four pixel bytes contains the pixels for the left edge of the polygon, for a specific edge and fill colour. Within each batch of four are the pixel bytes for the edge when the edge pixel is in the first, second, third and fourth pixel, when counting from the left. The comments show the index range for each batch. The index matches the relevant polygonColours variable, which is in the format %00eeff00, where %ee is the edge colour and %ff is the fill colour. Adding X to this value gives us the index of the byte in that colour whose edge pixel is in pixel X. As this is the left edge, the pixel byte contains pixels in the edge colour on the left and the fill colour on the right.
.edgePixelsLeft EQUB %00000000 \ Index %000000xx for edge colour 0 then fill colour 0 EQUB %00000000 EQUB %00000000 EQUB %00000000 EQUB %00000111 \ Index %000001xx for edge colour 0 then fill colour 1 EQUB %00000011 EQUB %00000001 EQUB %00000000 EQUB %01110000 \ Index %000010xx for edge colour 0 then fill colour 2 EQUB %00110000 EQUB %00010000 EQUB %00000000 EQUB %01110111 \ Index %000011xx for edge colour 0 then fill colour 3 EQUB %00110011 EQUB %00010001 EQUB %00000000 EQUB %00001000 \ Index %000100xx for edge colour 1 then fill colour 0 EQUB %00000100 EQUB %00000010 EQUB %00000001 EQUB %00001111 \ Index %000101xx for edge colour 1 then fill colour 1 EQUB %00000111 EQUB %00000011 EQUB %00000001 EQUB %01111000 \ Index %000110xx for edge colour 1 then fill colour 2 EQUB %00110100 EQUB %00010010 EQUB %00000001 EQUB %01111111 \ Index %000111xx for edge colour 1 then fill colour 3 EQUB %00110111 EQUB %00010011 EQUB %00000001 EQUB %10000000 \ Index %001000xx for edge colour 2 then fill colour 0 EQUB %01000000 EQUB %00100000 EQUB %00010000 EQUB %10000111 \ Index %001001xx for edge colour 2 then fill colour 1 EQUB %01000011 EQUB %00100001 EQUB %00010000 EQUB %11110000 \ Index %001010xx for edge colour 2 then fill colour 2 EQUB %01110000 EQUB %00110000 EQUB %00010000 EQUB %11110111 \ Index %001011xx for edge colour 2 then fill colour 3 EQUB %01110011 EQUB %00110001 EQUB %00010000 EQUB %10001000 \ Index %001100xx for edge colour 3 then fill colour 0 EQUB %01000100 EQUB %00100010 EQUB %00010001 EQUB %10001111 \ Index %001101xx for edge colour 3 then fill colour 1 EQUB %01000111 EQUB %00100011 EQUB %00010001 EQUB %11111000 \ Index %001110xx for edge colour 3 then fill colour 2 EQUB %01110100 EQUB %00110010 EQUB %00010001 EQUB %11111111 \ Index %001111xx for edge colour 3 then fill colour 3 EQUB %01110111 EQUB %00110011 EQUB %00010001
Name: edgePixelsRight [Show more] Type: Variable Category: Drawing polygons Summary: Table to convert a polygon colours byte and a pixel offset (0-3) into a pixel byte for the right edge of the polygon pixel line
Context: See this variable on its own page References: This variable is used as follows: * DrawPolygonLines (Part 3 of 4) uses edgePixelsRight

Each batch of four pixel bytes contains the pixels for the right edge of the polygon, for a specific edge and fill colour. Within each batch of four are the pixel bytes for the edge when the edge pixel is in the first, second, third and fourth pixel, when counting from the left. The comments show the index range for each batch. The index matches the relevant polygonColours variable, which is in the format %00eeff00, where %ee is the edge colour and %ff is the fill colour. Adding X to this value gives us the index of the byte in that colour whose edge pixel is in pixel X. As this is the right edge, the pixel byte contains pixels in the fill colour on the left and the edge colour on the right.
.edgePixelsRight EQUB %00000000 \ Index %000000xx for fill colour 0 then edge colour 0 EQUB %00000000 EQUB %00000000 EQUB %00000000 EQUB %00000000 \ Index %000001xx for fill colour 1 then edge colour 0 EQUB %00001000 EQUB %00001100 EQUB %00001110 EQUB %00000000 \ Index %000010xx for fill colour 2 then edge colour 0 EQUB %10000000 EQUB %11000000 EQUB %11100000 EQUB %00000000 \ Index %000011xx for fill colour 3 then edge colour 0 EQUB %10001000 EQUB %11001100 EQUB %11101110 EQUB %00001000 \ Index %000100xx for fill colour 0 then edge colour 1 EQUB %00000100 EQUB %00000010 EQUB %00000001 EQUB %00001000 \ Index %000101xx for fill colour 1 then edge colour 1 EQUB %00001100 EQUB %00001110 EQUB %00001111 EQUB %00001000 \ Index %000110xx for fill colour 2 then edge colour 1 EQUB %10000100 EQUB %11000010 EQUB %11100001 EQUB %00001000 \ Index %000111xx for fill colour 3 then edge colour 1 EQUB %10001100 EQUB %11001110 EQUB %11101111 EQUB %10000000 \ Index %001000xx for fill colour 0 then edge colour 2 EQUB %01000000 EQUB %00100000 EQUB %00010000 EQUB %10000000 \ Index %001001xx for fill colour 1 then edge colour 2 EQUB %01001000 EQUB %00101100 EQUB %00011110 EQUB %10000000 \ Index %001010xx for fill colour 2 then edge colour 2 EQUB %11000000 EQUB %11100000 EQUB %11110000 EQUB %10000000 \ Index %001011xx for fill colour 3 then edge colour 2 EQUB %11001000 EQUB %11101100 EQUB %11111110 EQUB %10001000 \ Index %001100xx for fill colour 0 then edge colour 3 EQUB %01000100 EQUB %00100010 EQUB %00010001 EQUB %10001000 \ Index %001101xx for fill colour 1 then edge colour 3 EQUB %01001100 EQUB %00101110 EQUB %00011111 EQUB %10001000 \ Index %001110xx for fill colour 2 then edge colour 3 EQUB %11000100 EQUB %11100010 EQUB %11110001 EQUB %10001000 \ Index %001111xx for fill colour 3 then edge colour 3 EQUB %11001100 EQUB %11101110 EQUB %11111111
Name: tileVisibility [Show more] Type: Variable Category: Drawing the landscape Summary: A table for storing the visibility of each tile from the player's point of view, with one bit per tile (1 = visible, 0 = hidden)
Context: See this variable on its own page References: This variable is used as follows: * DrawTitleView uses tileVisibility * GetTileViewAngles (Part 3 of 4) uses tileVisibility * GetTileVisibility uses tileVisibility * ResetTilesObjects uses tileVisibility
.tileVisibility EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ These values are workspace EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ noise and have no meaning EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF
Name: secretCodeStash [Show more] Type: Subroutine Category: Landscape Summary: A stash for calculated values for each iteration in the CheckSecretCode routine
Context: See this subroutine on its own page References: This subroutine is called as follows: * CheckSecretCode (Part 1 of 2) calls secretCodeStash * CheckSecretStash calls secretCodeStash
.secretCodeStash SKIP 0 \ This variable shares the same memory location as \ screenBufferRow0
Name: screenBufferRow0 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 0
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow0 * bufferRowAddrLo calls screenBufferRow0 * DitherScreenBuffer calls screenBufferRow0 * screenBufferHi calls screenBufferRow0 * screenBufferLo calls screenBufferRow0

The screen buffer is split up into 24 parts, one for each of the character rows in the player's scrolling landscape view. The lookup tables contain an additional address for a 25th character row, but this clashes with the object data and is unused. The buffer rows wrap around in memory after the 16th row, so they can fit into the program space without overlapping with screen memory or game code. The addresses are as follows: &3F00 (screenBufferRow0) &4040 (screenBufferRow1) &4180 (screenBufferRow2) &42C0 (screenBufferRow3) &4400 (screenBufferRow4) &4540 (screenBufferRow5) &4680 (screenBufferRow6) &47C0 (screenBufferRow7) &4900 (screenBufferRow8) &4A40 (screenBufferRow9) &4B80 (screenBufferRow10) &4CC0 (screenBufferRow11) &4E00 (screenBufferRow12) &4F40 (screenBufferRow13) &5080 (screenBufferRow14) &51C0 (screenBufferRow15) and then they wrap around to the following locations for rows 16 to 24: &3FA0 (screenBufferRow16) &40E0 (screenBufferRow17) &4220 (screenBufferRow18) &4360 (screenBufferRow19) &44A0 (screenBufferRow20) &45E0 (screenBufferRow21) &4720 (screenBufferRow22) &4860 (screenBufferRow23) The first batch of locations need to be able to store an entire screen row of 320 bytes, so they can be used to store the screen buffer when scrolling in any direction (and specifically for the up and down scrolling, when we need to be able to store eight full character rows in the buffer). We only need to use the second batch of locations when we are drawing the left or right buffers when scrolling sideways, or when updating an object on-screen via the screen buffer, as we then need to fit all 24 character rows into the buffer. We can fit the first 16 rows into the first batch of buffer rows, but we need more. Luckily, when scrolling sideways, each row is only eight character blocks wide, so each buffer row only needs to be 64 bytes long rather than the 320 bytes needed when scrolling up or down. This means that we are only using the first 64 bytes of each buffer, so we can stick a second batch of buffers in the latter part of each of the first batch. However, when using the screen buffer to update an on-screen object, we can't necessarily fit the entire object into the screen buffer in one go, as it could be as wide as the screen. In this case we use the full 160 bytes of each row in the screen buffer, which can contain half a screen (as half a screen is 20 character rows that takes up 160 bytes). We therefore do the object update in two stages. In other words, when the player pans up or down, we need to draw eight full-width character rows of new screen content into the screen buffers, each of which is 320 bytes. So we use the screen buffer space as follows: &3F00 to &403F for character row 0 (all 320 bytes of screenBufferRow0) &4040 to &417F for character row 1 (all 320 bytes of screenBufferRow1) &4180 to &42BF for character row 2 (all 320 bytes of screenBufferRow2) &42C0 to &43FF for character row 3 (all 320 bytes of screenBufferRow3) &4400 to &453F for character row 4 (all 320 bytes of screenBufferRow4) &4540 to &467F for character row 5 (all 320 bytes of screenBufferRow5) &4680 to &47BF for character row 6 (all 320 bytes of screenBufferRow6) &47C0 to &48FF for character row 7 (all 320 bytes of screenBufferRow7) And when the player pans left or right, the new screen content that we need to draw into the screen buffers is a strip down the side of the screen that's 24 character rows tall and eight character columns wide, so each row is 64 bytes long. So we use the screen buffer space as follows: &3F00 to &3F3F for character row 0 (first 64 bytes of screenBufferRow0) &4040 to &407F for character row 1 (first 64 bytes of screenBufferRow1) &4180 to &41BF for character row 2 (first 64 bytes of screenBufferRow2) &42C0 to &42FF for character row 3 (first 64 bytes of screenBufferRow3) &4400 to &443F for character row 4 (first 64 bytes of screenBufferRow4) &4540 to &457F for character row 5 (first 64 bytes of screenBufferRow5) &4680 to &46BF for character row 6 (first 64 bytes of screenBufferRow6) &47C0 to &47FF for character row 7 (first 64 bytes of screenBufferRow7) &4900 to &493F for character row 8 (first 64 bytes of screenBufferRow8) &4A40 to &4A7F for character row 9 (first 64 bytes of screenBufferRow9) &4B80 to &4BBF for character row 10 (first 64 bytes of screenBufferRow10) &4CC0 to &4CFF for character row 11 (first 64 bytes of screenBufferRow11) &4E00 to &4E3F for character row 12 (first 64 bytes of screenBufferRow12) &4F40 to &4F7F for character row 13 (first 64 bytes of screenBufferRow13) &5080 to &50BF for character row 14 (first 64 bytes of screenBufferRow14) &51C0 to &51FF for character row 15 (first 64 bytes of screenBufferRow15) &3FA0 to &3FDF for character row 16 (first 64 bytes of screenBufferRow16) &40E0 to &411F for character row 17 (first 64 bytes of screenBufferRow17) &4220 to &425F for character row 18 (first 64 bytes of screenBufferRow18) &4360 to &439F for character row 19 (first 64 bytes of screenBufferRow19) &44A0 to &43DF for character row 20 (first 64 bytes of screenBufferRow20) &45E0 to &461F for character row 21 (first 64 bytes of screenBufferRow21) &4720 to &475F for character row 22 (first 64 bytes of screenBufferRow22) &4860 to &489F for character row 23 (first 64 bytes of screenBufferRow23) And when we update an object on-screen that is wider than half a screen, we use 160 bytes in all 24 row buffers to draw the first 20 character columns of the object, and then we repeat the process to finish off drawing the remainder of the object. This structure ensures that the screen buffer always fits into the collection of screenBufferRow blocks, irrespective of the scrolling direction or the size of the object we're drawing.
.screenBufferRow0 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow16 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 16 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow16 * bufferRowAddrLo calls screenBufferRow16
.screenBufferRow16 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow1 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 1
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow1 * bufferRowAddrLo calls screenBufferRow1
.screenBufferRow1 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow17 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 17 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow17 * bufferRowAddrLo calls screenBufferRow17
.screenBufferRow17 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow2 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 2
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow2 * bufferRowAddrLo calls screenBufferRow2
.screenBufferRow2 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow18 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 18 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow18 * bufferRowAddrLo calls screenBufferRow18
.screenBufferRow18 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow3 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 3
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow3 * bufferRowAddrLo calls screenBufferRow3
.screenBufferRow3 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow19 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 19 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow19 * bufferRowAddrLo calls screenBufferRow19
.screenBufferRow19 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow4 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 4
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow4 * bufferRowAddrLo calls screenBufferRow4
.screenBufferRow4 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow20 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 20 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow20 * bufferRowAddrLo calls screenBufferRow20
.screenBufferRow20 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow5 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 5
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow5 * bufferRowAddrLo calls screenBufferRow5
.screenBufferRow5 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow21 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 21 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow21 * bufferRowAddrLo calls screenBufferRow21
.screenBufferRow21 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow6 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 6
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow6 * bufferRowAddrLo calls screenBufferRow6
.screenBufferRow6 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow22 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 22 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow22 * bufferRowAddrLo calls screenBufferRow22
.screenBufferRow22 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow7 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 7
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow7 * bufferRowAddrLo calls screenBufferRow7
.screenBufferRow7 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow23 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 23 (as part of a column buffer)
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow23 * bufferRowAddrLo calls screenBufferRow23
.screenBufferRow23 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00
Name: screenBufferRow8 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 8
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow8 * bufferRowAddrLo calls screenBufferRow8
.screenBufferRow8 EQUB &FE, &FE, &FF, &FF, &FF, &FF, &FF, &FF \ These values are workspace EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ noise and have no meaning EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &10 EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF
Name: objPointRange [Show more] Type: Variable Category: Drawing objects Summary: The first and last point numbers for each object
Context: See this variable on its own page References: This variable is used as follows: * GetObjPointAngles uses objPointRange
.objPointRange EQUB 0 \ Object type 0: Robot Points 0 to 28 EQUB 29 \ Object type 1: Sentry Points 29 to 50 EQUB 51 \ Object type 2: Tree Points 51 to 67 EQUB 68 \ Object type 3: Boulder Points 68 to 75 EQUB 76 \ Object type 4: Meanie Points 76 to 93 EQUB 94 \ Object type 5: The Sentinel Points 94 to 123 EQUB 124 \ Object type 6: Sentinel's tower Points 124 to 135 EQUB 136 \ Object type 7: 3D text block 1 Points 136 to 143 EQUB 144 \ Object type 8: 3D text block 2 Points 144 to 151 EQUB 152 \ Object type 9: 3D text block 3 Points 152 to 159 EQUB 160
Name: objPolygonRange [Show more] Type: Variable Category: Drawing objects Summary: The first and last polygon numbers for each object
Context: See this variable on its own page References: This variable is used as follows: * DrawObject uses objPolygonRange
.objPolygonRange EQUB 0 \ Object type 0: Robot Polygons 0 to 26 EQUB 27 \ Object type 1: Sentry Polygons 27 to 51 EQUB 52 \ Object type 2: Tree Polygons 52 to 66 EQUB 67 \ Object type 3: Boulder Polygons 67 to 76 EQUB 77 \ Object type 4: Meanie Polygons 77 to 101 EQUB 102 \ Object type 5: The Sentinel Polygons 102 to 136 EQUB 137 \ Object type 6: Sentinel's tower Polygons 137 to 147 EQUB 148 \ Object type 7: 3D text block 1 Polygons 148 to 151 EQUB 152 \ Object type 8: 3D text block 2 Polygons 152 to 155 EQUB 156 \ Object type 9: 3D text block 3 Polygons 156 to 159 EQUB 160
Name: objPolygonPhases [Show more] Type: Variable Category: Drawing objects Summary: The phase configuration for each object
Context: See this variable on its own page References: This variable is used as follows: * DrawObject uses objPolygonPhases

Most objects are drawn in one phase, but some are drawn in two phases. This can depend on the relative altitude of the object compared to the viewer (for the robot, the sentry or the Sentinel), or it can depend on the object's gaze direction as given in the object's yaw angle (for the meanie). See the DrawObject routine for details.
.objPolygonPhases EQUB %11 \ Object type 0: Robot Depends on altitude EQUB %11 \ Object type 1: Sentry Depends on altitude EQUB %00 \ Object type 2: Tree One phase EQUB %00 \ Object type 3: Boulder One phase EQUB %10 \ Object type 4: Meanie Depends on yaw EQUB %11 \ Object type 5: The Sentinel Depends on altitude EQUB %00 \ Object type 6: Sentinel's tower One phase EQUB %00 \ Object type 7: 3D text block 1 One phase EQUB %00 \ Object type 8: 3D text block 2 One phase EQUB %00 \ Object type 9: 3D text block 3 One phase EQUB &00 \ This byte appears to be unused
Name: sightsByteAddrLo [Show more] Type: Variable Category: Sights Summary: The screen addresses of the bytes in the sights pixel byte stash, to which they can be restored to remove the sights (low byte)
Context: See this variable on its own page References: This variable is used as follows: * DrawSights uses sightsByteAddrLo * RemoveSights uses sightsByteAddrLo
.sightsByteAddrLo EQUB &00, &00 \ These values are workspace noise and have no meaning EQUB &00, &00 EQUB &00, &FF EQUB &FF, &FF EQUB &FF, &FF EQUB &FF, &FF
Name: objMeanie [Show more] Type: Variable Category: Drawing objects Summary: The list of polygons and points for the meanie object (polygons 77 to 101, using points 76 to 93)
Context: See this variable on its own page References: No direct references to this variable in this source file
.objMeanie .objPolygon077 EQUB 64 + 7 \ Polygon 77 points: 83, 88, 87, 82, 83 EQUB 64 + 12 EQUB 64 + 11 EQUB 64 + 6 EQUB 64 + 7 .objPolygon078 EQUB 64 + 0 \ Polygon 78 points: 76, 81, 78, 76 EQUB 64 + 5 EQUB 64 + 2 EQUB 64 + 0 .objPolygon079 EQUB 64 + 1 \ Polygon 79 points: 77, 80, 76, 77 EQUB 64 + 4 EQUB 64 + 0 EQUB 64 + 1 .objPolygon080 EQUB 64 + 0 \ Polygon 80 points: 76, 80, 79, 76 EQUB 64 + 4 EQUB 64 + 3 EQUB 64 + 0 .objPolygon081 EQUB 64 + 0 \ Polygon 81 points: 76, 79, 81, 76 EQUB 64 + 3 EQUB 64 + 5 EQUB 64 + 0 .objPolygon082 EQUB 64 + 2 \ Polygon 82 points: 78, 81, 80, 77, 78 EQUB 64 + 5 EQUB 64 + 4 EQUB 64 + 1 EQUB 64 + 2 .objPolygon083 EQUB 64 + 5 \ Polygon 83 points: 81, 82, 85, 81 EQUB 64 + 6 EQUB 64 + 9 EQUB 64 + 5 .objPolygon084 EQUB 64 + 4 \ Polygon 84 points: 80, 84, 83, 80 EQUB 64 + 8 EQUB 64 + 7 EQUB 64 + 4 .objPolygon085 EQUB 64 + 5 \ Polygon 85 points: 81, 85, 84, 80, 81 EQUB 64 + 9 EQUB 64 + 8 EQUB 64 + 4 EQUB 64 + 5 .objPolygon086 EQUB 64 + 3 \ Polygon 86 points: 79, 82, 81, 79 EQUB 64 + 6 EQUB 64 + 5 EQUB 64 + 3 .objPolygon087 EQUB 64 + 4 \ Polygon 87 points: 80, 83, 79, 80 EQUB 64 + 7 EQUB 64 + 3 EQUB 64 + 4 .objPolygon088 EQUB 64 + 3 \ Polygon 88 points: 79, 83, 82, 79 EQUB 64 + 7 EQUB 64 + 6 EQUB 64 + 3 .objPolygon089 EQUB 64 + 11 \ Polygon 89 points: 87, 86, 82, 87 EQUB 64 + 10 EQUB 64 + 6 EQUB 64 + 11 .objPolygon090 EQUB 64 + 7 \ Polygon 90 points: 83, 89, 88, 83 EQUB 64 + 13 EQUB 64 + 12 EQUB 64 + 7 .objPolygon091 EQUB 64 + 11 \ Polygon 91 points: 87, 90, 86, 87 EQUB 64 + 14 EQUB 64 + 10 EQUB 64 + 11 .objPolygon092 EQUB 64 + 12 \ Polygon 92 points: 88, 89, 91, 88 EQUB 64 + 13 EQUB 64 + 15 EQUB 64 + 12 .objPolygon093 EQUB 64 + 12 \ Polygon 93 points: 88, 91, 90, 87, 88 EQUB 64 + 15 EQUB 64 + 14 EQUB 64 + 11 EQUB 64 + 12 .objPolygon094 EQUB 64 + 6 \ Polygon 94 points: 82, 86, 85, 82 EQUB 64 + 10 EQUB 64 + 9 EQUB 64 + 6 .objPolygon095 EQUB 64 + 7 \ Polygon 95 points: 83, 84, 89, 83 EQUB 64 + 8 EQUB 64 + 13 EQUB 64 + 7 .objPolygon096 EQUB 64 + 10 \ Polygon 96 points: 86, 92, 85, 86 EQUB 64 + 16 EQUB 64 + 9 EQUB 64 + 10 .objPolygon097 EQUB 64 + 8 \ Polygon 97 points: 84, 93, 89, 84 EQUB 64 + 17 EQUB 64 + 13 EQUB 64 + 8 .objPolygon098 EQUB 64 + 10 \ Polygon 98 points: 86, 90, 92, 86 EQUB 64 + 14 EQUB 64 + 16 EQUB 64 + 10 .objPolygon099 EQUB 64 + 13 \ Polygon 99 points: 89, 93, 91, 89 EQUB 64 + 17 EQUB 64 + 15 EQUB 64 + 13 .objPolygon100 EQUB 64 + 9 \ Polygon 100 points: 85, 92, 93, 84, 85 EQUB 64 + 16 EQUB 64 + 17 EQUB 64 + 8 EQUB 64 + 9 .objPolygon101 EQUB 64 + 15 \ Polygon 101 points: 91, 93, 92, 90, 91 EQUB 64 + 17 EQUB 64 + 16 EQUB 64 + 14 EQUB 64 + 15
Name: enemyYawStep [Show more] Type: Variable Category: 3D objects Summary: The yaw angle through which each enemy rotates on each scheduled rotation
Context: See this variable on its own page References: This variable is used as follows: * AddEnemiesToTiles uses enemyYawStep * ApplyTactics (Part 6 of 8) uses enemyYawStep
.enemyYawStep EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00, &00 EQUB &00 \ This byte appears to be unused
Name: screenBufferRow9 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 9
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow9 * bufferRowAddrLo calls screenBufferRow9
.screenBufferRow9 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF \ These values are workspace EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ noise and have no meaning EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &10 EQUB &FE, &FE, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF
Name: objPointYaw [Show more] Type: Variable Category: Drawing objects Summary: Polar yaw angles for each of the points in each of the objects
Context: See this variable on its own page References: This variable is used as follows: * GetObjPointAngles uses objPointYaw
.objPointYaw EQUB 207 \ Point 0: yaw = 207, distance = 20, height = -112 EQUB 49 \ Point 1: yaw = 49, distance = 20, height = -112 EQUB 95 \ Point 2: yaw = 95, distance = 27, height = -112 EQUB 161 \ Point 3: yaw = 161, distance = 27, height = -112 EQUB 217 \ Point 4: yaw = 217, distance = 31, height = -56 EQUB 39 \ Point 5: yaw = 39, distance = 31, height = -56 EQUB 87 \ Point 6: yaw = 87, distance = 35, height = -56 EQUB 169 \ Point 7: yaw = 169, distance = 35, height = -56 EQUB 203 \ Point 8: yaw = 203, distance = 42, height = -56 EQUB 0 \ Point 9: yaw = 0, distance = 32, height = -56 EQUB 53 \ Point 10: yaw = 53, distance = 42, height = -56 EQUB 85 \ Point 11: yaw = 85, distance = 48, height = -56 EQUB 171 \ Point 12: yaw = 171, distance = 48, height = -56 EQUB 197 \ Point 13: yaw = 197, distance = 52, height = -18 EQUB 59 \ Point 14: yaw = 59, distance = 52, height = -18 EQUB 82 \ Point 15: yaw = 82, distance = 56, height = -18 EQUB 174 \ Point 16: yaw = 174, distance = 56, height = -18 EQUB 0 \ Point 17: yaw = 0, distance = 0, height = -10 EQUB 236 \ Point 18: yaw = 236, distance = 19, height = -11 EQUB 20 \ Point 19: yaw = 20, distance = 19, height = -11 EQUB 99 \ Point 20: yaw = 99, distance = 29, height = -11 EQUB 157 \ Point 21: yaw = 157, distance = 29, height = -11 EQUB 192 \ Point 22: yaw = 192, distance = 12, height = +8 EQUB 64 \ Point 23: yaw = 64, distance = 12, height = +8 EQUB 105 \ Point 24: yaw = 105, distance = 19, height = +8 EQUB 151 \ Point 25: yaw = 151, distance = 19, height = +8 EQUB 33 \ Point 26: yaw = 33, distance = 28, height = -3 EQUB 223 \ Point 27: yaw = 223, distance = 28, height = -3 EQUB 0 \ Point 28: yaw = 0, distance = 32, height = -21 EQUB 218 \ Point 29: yaw = 218, distance = 42, height = -112 EQUB 38 \ Point 30: yaw = 38, distance = 42, height = -112 EQUB 90 \ Point 31: yaw = 90, distance = 42, height = -112 EQUB 166 \ Point 32: yaw = 166, distance = 42, height = -112 EQUB 245 \ Point 33: yaw = 245, distance = 50, height = -24 EQUB 11 \ Point 34: yaw = 11, distance = 50, height = -24 EQUB 64 \ Point 35: yaw = 64, distance = 54, height = -27 EQUB 90 \ Point 36: yaw = 90, distance = 42, height = -27 EQUB 166 \ Point 37: yaw = 166, distance = 42, height = -27 EQUB 192 \ Point 38: yaw = 192, distance = 54, height = -27 EQUB 218 \ Point 39: yaw = 218, distance = 34, height = -8 EQUB 38 \ Point 40: yaw = 38, distance = 34, height = -8 EQUB 90 \ Point 41: yaw = 90, distance = 34, height = -8 EQUB 166 \ Point 42: yaw = 166, distance = 34, height = -8 EQUB 245 \ Point 43: yaw = 245, distance = 64, height = -8 EQUB 11 \ Point 44: yaw = 11, distance = 64, height = -8 EQUB 248 \ Point 45: yaw = 248, distance = 63, height = +1 EQUB 8 \ Point 46: yaw = 8, distance = 63, height = +1 EQUB 226 \ Point 47: yaw = 226, distance = 34, height = +8 EQUB 30 \ Point 48: yaw = 30, distance = 34, height = +8 EQUB 92 \ Point 49: yaw = 92, distance = 31, height = +5 EQUB 164 \ Point 50: yaw = 164, distance = 31, height = +5 EQUB 224 \ Point 51: yaw = 224, distance = 24, height = -112 EQUB 32 \ Point 52: yaw = 32, distance = 24, height = -112 EQUB 96 \ Point 53: yaw = 96, distance = 24, height = -112 EQUB 160 \ Point 54: yaw = 160, distance = 24, height = -112 EQUB 224 \ Point 55: yaw = 224, distance = 24, height = -72 EQUB 32 \ Point 56: yaw = 32, distance = 24, height = -72 EQUB 96 \ Point 57: yaw = 96, distance = 24, height = -72 EQUB 160 \ Point 58: yaw = 160, distance = 24, height = -72 EQUB 0 \ Point 59: yaw = 0, distance = 104, height = -72 EQUB 32 \ Point 60: yaw = 32, distance = 104, height = -72 EQUB 64 \ Point 61: yaw = 64, distance = 104, height = -72 EQUB 96 \ Point 62: yaw = 96, distance = 104, height = -72 EQUB 128 \ Point 63: yaw = 128, distance = 104, height = -72 EQUB 160 \ Point 64: yaw = 160, distance = 104, height = -72 EQUB 192 \ Point 65: yaw = 192, distance = 104, height = -72 EQUB 224 \ Point 66: yaw = 224, distance = 104, height = -72 EQUB 0 \ Point 67: yaw = 0, distance = 0, height = +120 EQUB 0 \ Point 68: yaw = 0, distance = 112, height = -48 EQUB 32 \ Point 69: yaw = 32, distance = 112, height = -112 EQUB 64 \ Point 70: yaw = 64, distance = 112, height = -48 EQUB 96 \ Point 71: yaw = 96, distance = 112, height = -112 EQUB 128 \ Point 72: yaw = 128, distance = 112, height = -48 EQUB 160 \ Point 73: yaw = 160, distance = 112, height = -112 EQUB 192 \ Point 74: yaw = 192, distance = 112, height = -48 EQUB 224 \ Point 75: yaw = 224, distance = 112, height = -112 EQUB 0 \ Point 76: yaw = 0, distance = 52, height = -112 EQUB 89 \ Point 77: yaw = 89, distance = 68, height = -112 EQUB 167 \ Point 78: yaw = 167, distance = 68, height = -112 EQUB 128 \ Point 79: yaw = 128, distance = 26, height = -60 EQUB 114 \ Point 80: yaw = 114, distance = 41, height = -60 EQUB 142 \ Point 81: yaw = 142, distance = 41, height = -60 EQUB 225 \ Point 82: yaw = 225, distance = 12, height = -10 EQUB 31 \ Point 83: yaw = 31, distance = 12, height = -10 EQUB 89 \ Point 84: yaw = 89, distance = 23, height = +1 EQUB 167 \ Point 85: yaw = 167, distance = 23, height = +1 EQUB 213 \ Point 86: yaw = 213, distance = 46, height = -8 EQUB 246 \ Point 87: yaw = 246, distance = 54, height = -14 EQUB 10 \ Point 88: yaw = 10, distance = 54, height = -14 EQUB 43 \ Point 89: yaw = 43, distance = 46, height = -8 EQUB 251 \ Point 90: yaw = 251, distance = 58, height = -5 EQUB 5 \ Point 91: yaw = 5, distance = 58, height = -5 EQUB 233 \ Point 92: yaw = 233, distance = 34, height = +6 EQUB 23 \ Point 93: yaw = 23, distance = 34, height = +6 EQUB 218 \ Point 94: yaw = 218, distance = 56, height = -112 EQUB 38 \ Point 95: yaw = 38, distance = 56, height = -112 EQUB 90 \ Point 96: yaw = 90, distance = 56, height = -112 EQUB 166 \ Point 97: yaw = 166, distance = 56, height = -112 EQUB 218 \ Point 98: yaw = 218, distance = 42, height = -96 EQUB 38 \ Point 99: yaw = 38, distance = 42, height = -96 EQUB 90 \ Point 100: yaw = 90, distance = 42, height = -96 EQUB 166 \ Point 101: yaw = 166, distance = 42, height = -96 EQUB 245 \ Point 102: yaw = 245, distance = 50, height = -8 EQUB 11 \ Point 103: yaw = 11, distance = 50, height = -8 EQUB 64 \ Point 104: yaw = 64, distance = 54, height = -11 EQUB 90 \ Point 105: yaw = 90, distance = 42, height = -11 EQUB 166 \ Point 106: yaw = 166, distance = 42, height = -11 EQUB 192 \ Point 107: yaw = 192, distance = 54, height = -11 EQUB 218 \ Point 108: yaw = 218, distance = 34, height = +8 EQUB 38 \ Point 109: yaw = 38, distance = 34, height = +8 EQUB 90 \ Point 110: yaw = 90, distance = 34, height = +5 EQUB 166 \ Point 111: yaw = 166, distance = 34, height = +5 EQUB 245 \ Point 112: yaw = 245, distance = 64, height = +8 EQUB 11 \ Point 113: yaw = 11, distance = 64, height = +8 EQUB 83 \ Point 114: yaw = 83, distance = 70, height = +2 EQUB 173 \ Point 115: yaw = 173, distance = 70, height = +2 EQUB 248 \ Point 116: yaw = 248, distance = 63, height = +17 EQUB 8 \ Point 117: yaw = 8, distance = 63, height = +17 EQUB 226 \ Point 118: yaw = 226, distance = 34, height = +24 EQUB 30 \ Point 119: yaw = 30, distance = 34, height = +24 EQUB 220 \ Point 120: yaw = 220, distance = 19, height = +39 EQUB 36 \ Point 121: yaw = 36, distance = 19, height = +39 EQUB 102 \ Point 122: yaw = 102, distance = 24, height = +39 EQUB 154 \ Point 123: yaw = 154, distance = 24, height = +39 EQUB 224 \ Point 124: yaw = 224, distance = 181, height = -112 EQUB 32 \ Point 125: yaw = 32, distance = 181, height = -112 EQUB 96 \ Point 126: yaw = 96, distance = 181, height = -112 EQUB 160 \ Point 127: yaw = 160, distance = 181, height = -112 EQUB 212 \ Point 128: yaw = 212, distance = 145, height = +16 EQUB 236 \ Point 129: yaw = 236, distance = 145, height = +16 EQUB 20 \ Point 130: yaw = 20, distance = 145, height = +16 EQUB 44 \ Point 131: yaw = 44, distance = 145, height = +16 EQUB 84 \ Point 132: yaw = 84, distance = 145, height = +16 EQUB 108 \ Point 133: yaw = 108, distance = 145, height = +16 EQUB 148 \ Point 134: yaw = 148, distance = 145, height = +16 EQUB 172 \ Point 135: yaw = 172, distance = 145, height = +16 EQUB 224 \ Point 136: yaw = 224, distance = 192, height = -112 EQUB 253 \ Point 137: yaw = 253, distance = 136, height = -112 EQUB 131 \ Point 138: yaw = 131, distance = 136, height = -112 EQUB 160 \ Point 139: yaw = 160, distance = 192, height = -112 EQUB 224 \ Point 140: yaw = 224, distance = 192, height = +112 EQUB 253 \ Point 141: yaw = 253, distance = 136, height = +112 EQUB 131 \ Point 142: yaw = 131, distance = 136, height = +112 EQUB 160 \ Point 143: yaw = 160, distance = 192, height = +112 EQUB 3 \ Point 144: yaw = 3, distance = 136, height = -112 EQUB 32 \ Point 145: yaw = 32, distance = 192, height = -112 EQUB 96 \ Point 146: yaw = 96, distance = 192, height = -112 EQUB 125 \ Point 147: yaw = 125, distance = 136, height = -112 EQUB 3 \ Point 148: yaw = 3, distance = 136, height = +112 EQUB 32 \ Point 149: yaw = 32, distance = 192, height = +112 EQUB 96 \ Point 150: yaw = 96, distance = 192, height = +112 EQUB 125 \ Point 151: yaw = 125, distance = 136, height = +112 EQUB 224 \ Point 152: yaw = 224, distance = 192, height = -112 EQUB 32 \ Point 153: yaw = 32, distance = 192, height = -112 EQUB 96 \ Point 154: yaw = 96, distance = 192, height = -112 EQUB 160 \ Point 155: yaw = 160, distance = 192, height = -112 EQUB 224 \ Point 156: yaw = 224, distance = 192, height = +112 EQUB 32 \ Point 157: yaw = 32, distance = 192, height = +112 EQUB 96 \ Point 158: yaw = 96, distance = 192, height = +112 EQUB 160 \ Point 159: yaw = 160, distance = 192, height = +112
Name: screenBufferRow10 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 10
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow10 * bufferRowAddrLo calls screenBufferRow10
.screenBufferRow10 EQUB &FE, &FE, &FF, &FF, &FF, &FF, &FF, &FF \ These values are workspace EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ noise and have no meaning EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &10 EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF
Name: objPointHeight [Show more] Type: Variable Category: Drawing objects Summary: The height of each of the points in each of the objects, relative to the object's origin
Context: See this variable on its own page References: This variable is used as follows: * GetObjPointAngles uses objPointHeight

The height is stored as follows: * Bit 7 contains the sign bit * Bits 0 to 6 contain half the magnitude of the height
.objPointHeight EQUB 240 \ Point 0: yaw = 207, distance = 20, height = -112 EQUB 240 \ Point 1: yaw = 49, distance = 20, height = -112 EQUB 240 \ Point 2: yaw = 95, distance = 27, height = -112 EQUB 240 \ Point 3: yaw = 161, distance = 27, height = -112 EQUB 184 \ Point 4: yaw = 217, distance = 31, height = -56 EQUB 184 \ Point 5: yaw = 39, distance = 31, height = -56 EQUB 184 \ Point 6: yaw = 87, distance = 35, height = -56 EQUB 184 \ Point 7: yaw = 169, distance = 35, height = -56 EQUB 184 \ Point 8: yaw = 203, distance = 42, height = -56 EQUB 184 \ Point 9: yaw = 0, distance = 32, height = -56 EQUB 184 \ Point 10: yaw = 53, distance = 42, height = -56 EQUB 184 \ Point 11: yaw = 85, distance = 48, height = -56 EQUB 184 \ Point 12: yaw = 171, distance = 48, height = -56 EQUB 146 \ Point 13: yaw = 197, distance = 52, height = -18 EQUB 146 \ Point 14: yaw = 59, distance = 52, height = -18 EQUB 146 \ Point 15: yaw = 82, distance = 56, height = -18 EQUB 146 \ Point 16: yaw = 174, distance = 56, height = -18 EQUB 138 \ Point 17: yaw = 0, distance = 0, height = -10 EQUB 139 \ Point 18: yaw = 236, distance = 19, height = -11 EQUB 139 \ Point 19: yaw = 20, distance = 19, height = -11 EQUB 139 \ Point 20: yaw = 99, distance = 29, height = -11 EQUB 139 \ Point 21: yaw = 157, distance = 29, height = -11 EQUB 8 \ Point 22: yaw = 192, distance = 12, height = +8 EQUB 8 \ Point 23: yaw = 64, distance = 12, height = +8 EQUB 8 \ Point 24: yaw = 105, distance = 19, height = +8 EQUB 8 \ Point 25: yaw = 151, distance = 19, height = +8 EQUB 131 \ Point 26: yaw = 33, distance = 28, height = -3 EQUB 131 \ Point 27: yaw = 223, distance = 28, height = -3 EQUB 149 \ Point 28: yaw = 0, distance = 32, height = -21 EQUB 240 \ Point 29: yaw = 218, distance = 42, height = -112 EQUB 240 \ Point 30: yaw = 38, distance = 42, height = -112 EQUB 240 \ Point 31: yaw = 90, distance = 42, height = -112 EQUB 240 \ Point 32: yaw = 166, distance = 42, height = -112 EQUB 152 \ Point 33: yaw = 245, distance = 50, height = -24 EQUB 152 \ Point 34: yaw = 11, distance = 50, height = -24 EQUB 155 \ Point 35: yaw = 64, distance = 54, height = -27 EQUB 155 \ Point 36: yaw = 90, distance = 42, height = -27 EQUB 155 \ Point 37: yaw = 166, distance = 42, height = -27 EQUB 155 \ Point 38: yaw = 192, distance = 54, height = -27 EQUB 136 \ Point 39: yaw = 218, distance = 34, height = -8 EQUB 136 \ Point 40: yaw = 38, distance = 34, height = -8 EQUB 136 \ Point 41: yaw = 90, distance = 34, height = -8 EQUB 136 \ Point 42: yaw = 166, distance = 34, height = -8 EQUB 136 \ Point 43: yaw = 245, distance = 64, height = -8 EQUB 136 \ Point 44: yaw = 11, distance = 64, height = -8 EQUB 1 \ Point 45: yaw = 248, distance = 63, height = +1 EQUB 1 \ Point 46: yaw = 8, distance = 63, height = +1 EQUB 8 \ Point 47: yaw = 226, distance = 34, height = +8 EQUB 8 \ Point 48: yaw = 30, distance = 34, height = +8 EQUB 5 \ Point 49: yaw = 92, distance = 31, height = +5 EQUB 5 \ Point 50: yaw = 164, distance = 31, height = +5 EQUB 240 \ Point 51: yaw = 224, distance = 24, height = -112 EQUB 240 \ Point 52: yaw = 32, distance = 24, height = -112 EQUB 240 \ Point 53: yaw = 96, distance = 24, height = -112 EQUB 240 \ Point 54: yaw = 160, distance = 24, height = -112 EQUB 200 \ Point 55: yaw = 224, distance = 24, height = -72 EQUB 200 \ Point 56: yaw = 32, distance = 24, height = -72 EQUB 200 \ Point 57: yaw = 96, distance = 24, height = -72 EQUB 200 \ Point 58: yaw = 160, distance = 24, height = -72 EQUB 200 \ Point 59: yaw = 0, distance = 104, height = -72 EQUB 200 \ Point 60: yaw = 32, distance = 104, height = -72 EQUB 200 \ Point 61: yaw = 64, distance = 104, height = -72 EQUB 200 \ Point 62: yaw = 96, distance = 104, height = -72 EQUB 200 \ Point 63: yaw = 128, distance = 104, height = -72 EQUB 200 \ Point 64: yaw = 160, distance = 104, height = -72 EQUB 200 \ Point 65: yaw = 192, distance = 104, height = -72 EQUB 200 \ Point 66: yaw = 224, distance = 104, height = -72 EQUB 120 \ Point 67: yaw = 0, distance = 0, height = +120 EQUB 176 \ Point 68: yaw = 0, distance = 112, height = -48 EQUB 240 \ Point 69: yaw = 32, distance = 112, height = -112 EQUB 176 \ Point 70: yaw = 64, distance = 112, height = -48 EQUB 240 \ Point 71: yaw = 96, distance = 112, height = -112 EQUB 176 \ Point 72: yaw = 128, distance = 112, height = -48 EQUB 240 \ Point 73: yaw = 160, distance = 112, height = -112 EQUB 176 \ Point 74: yaw = 192, distance = 112, height = -48 EQUB 240 \ Point 75: yaw = 224, distance = 112, height = -112 EQUB 240 \ Point 76: yaw = 0, distance = 52, height = -112 EQUB 240 \ Point 77: yaw = 89, distance = 68, height = -112 EQUB 240 \ Point 78: yaw = 167, distance = 68, height = -112 EQUB 188 \ Point 79: yaw = 128, distance = 26, height = -60 EQUB 188 \ Point 80: yaw = 114, distance = 41, height = -60 EQUB 188 \ Point 81: yaw = 142, distance = 41, height = -60 EQUB 138 \ Point 82: yaw = 225, distance = 12, height = -10 EQUB 138 \ Point 83: yaw = 31, distance = 12, height = -10 EQUB 1 \ Point 84: yaw = 89, distance = 23, height = +1 EQUB 1 \ Point 85: yaw = 167, distance = 23, height = +1 EQUB 136 \ Point 86: yaw = 213, distance = 46, height = -8 EQUB 142 \ Point 87: yaw = 246, distance = 54, height = -14 EQUB 142 \ Point 88: yaw = 10, distance = 54, height = -14 EQUB 136 \ Point 89: yaw = 43, distance = 46, height = -8 EQUB 133 \ Point 90: yaw = 251, distance = 58, height = -5 EQUB 133 \ Point 91: yaw = 5, distance = 58, height = -5 EQUB 6 \ Point 92: yaw = 233, distance = 34, height = +6 EQUB 6 \ Point 93: yaw = 23, distance = 34, height = +6 EQUB 240 \ Point 94: yaw = 218, distance = 56, height = -112 EQUB 240 \ Point 95: yaw = 38, distance = 56, height = -112 EQUB 240 \ Point 96: yaw = 90, distance = 56, height = -112 EQUB 240 \ Point 97: yaw = 166, distance = 56, height = -112 EQUB 224 \ Point 98: yaw = 218, distance = 42, height = -96 EQUB 224 \ Point 99: yaw = 38, distance = 42, height = -96 EQUB 224 \ Point 100: yaw = 90, distance = 42, height = -96 EQUB 224 \ Point 101: yaw = 166, distance = 42, height = -96 EQUB 136 \ Point 102: yaw = 245, distance = 50, height = -8 EQUB 136 \ Point 103: yaw = 11, distance = 50, height = -8 EQUB 139 \ Point 104: yaw = 64, distance = 54, height = -11 EQUB 139 \ Point 105: yaw = 90, distance = 42, height = -11 EQUB 139 \ Point 106: yaw = 166, distance = 42, height = -11 EQUB 139 \ Point 107: yaw = 192, distance = 54, height = -11 EQUB 8 \ Point 108: yaw = 218, distance = 34, height = +8 EQUB 8 \ Point 109: yaw = 38, distance = 34, height = +8 EQUB 5 \ Point 110: yaw = 90, distance = 34, height = +5 EQUB 5 \ Point 111: yaw = 166, distance = 34, height = +5 EQUB 8 \ Point 112: yaw = 245, distance = 64, height = +8 EQUB 8 \ Point 113: yaw = 11, distance = 64, height = +8 EQUB 2 \ Point 114: yaw = 83, distance = 70, height = +2 EQUB 2 \ Point 115: yaw = 173, distance = 70, height = +2 EQUB 17 \ Point 116: yaw = 248, distance = 63, height = +17 EQUB 17 \ Point 117: yaw = 8, distance = 63, height = +17 EQUB 24 \ Point 118: yaw = 226, distance = 34, height = +24 EQUB 24 \ Point 119: yaw = 30, distance = 34, height = +24 EQUB 39 \ Point 120: yaw = 220, distance = 19, height = +39 EQUB 39 \ Point 121: yaw = 36, distance = 19, height = +39 EQUB 39 \ Point 122: yaw = 102, distance = 24, height = +39 EQUB 39 \ Point 123: yaw = 154, distance = 24, height = +39 EQUB 240 \ Point 124: yaw = 224, distance = 181, height = -112 EQUB 240 \ Point 125: yaw = 32, distance = 181, height = -112 EQUB 240 \ Point 126: yaw = 96, distance = 181, height = -112 EQUB 240 \ Point 127: yaw = 160, distance = 181, height = -112 EQUB 16 \ Point 128: yaw = 212, distance = 145, height = +16 EQUB 16 \ Point 129: yaw = 236, distance = 145, height = +16 EQUB 16 \ Point 130: yaw = 20, distance = 145, height = +16 EQUB 16 \ Point 131: yaw = 44, distance = 145, height = +16 EQUB 16 \ Point 132: yaw = 84, distance = 145, height = +16 EQUB 16 \ Point 133: yaw = 108, distance = 145, height = +16 EQUB 16 \ Point 134: yaw = 148, distance = 145, height = +16 EQUB 16 \ Point 135: yaw = 172, distance = 145, height = +16 EQUB 240 \ Point 136: yaw = 224, distance = 192, height = -112 EQUB 240 \ Point 137: yaw = 253, distance = 136, height = -112 EQUB 240 \ Point 138: yaw = 131, distance = 136, height = -112 EQUB 240 \ Point 139: yaw = 160, distance = 192, height = -112 EQUB 112 \ Point 140: yaw = 224, distance = 192, height = +112 EQUB 112 \ Point 141: yaw = 253, distance = 136, height = +112 EQUB 112 \ Point 142: yaw = 131, distance = 136, height = +112 EQUB 112 \ Point 143: yaw = 160, distance = 192, height = +112 EQUB 240 \ Point 144: yaw = 3, distance = 136, height = -112 EQUB 240 \ Point 145: yaw = 32, distance = 192, height = -112 EQUB 240 \ Point 146: yaw = 96, distance = 192, height = -112 EQUB 240 \ Point 147: yaw = 125, distance = 136, height = -112 EQUB 112 \ Point 148: yaw = 3, distance = 136, height = +112 EQUB 112 \ Point 149: yaw = 32, distance = 192, height = +112 EQUB 112 \ Point 150: yaw = 96, distance = 192, height = +112 EQUB 112 \ Point 151: yaw = 125, distance = 136, height = +112 EQUB 240 \ Point 152: yaw = 224, distance = 192, height = -112 EQUB 240 \ Point 153: yaw = 32, distance = 192, height = -112 EQUB 240 \ Point 154: yaw = 96, distance = 192, height = -112 EQUB 240 \ Point 155: yaw = 160, distance = 192, height = -112 EQUB 112 \ Point 156: yaw = 224, distance = 192, height = +112 EQUB 112 \ Point 157: yaw = 32, distance = 192, height = +112 EQUB 112 \ Point 158: yaw = 96, distance = 192, height = +112 EQUB 112 \ Point 159: yaw = 160, distance = 192, height = +112
Name: screenBufferRow11 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 11
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow11 * bufferRowAddrLo calls screenBufferRow11
.screenBufferRow11 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF \ These values are workspace EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ noise and have no meaning EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &18 EQUB &FE, &FE, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF
Name: objPointDistance [Show more] Type: Variable Category: Drawing objects Summary: Polar distances for each of the points in each of the objects
Context: See this variable on its own page References: This variable is used as follows: * GetObjPointAngles uses objPointDistance
.objPointDistance EQUB 20 \ Point 0: yaw = 207, distance = 20, height = -112 EQUB 20 \ Point 1: yaw = 49, distance = 20, height = -112 EQUB 27 \ Point 2: yaw = 95, distance = 27, height = -112 EQUB 27 \ Point 3: yaw = 161, distance = 27, height = -112 EQUB 31 \ Point 4: yaw = 217, distance = 31, height = -56 EQUB 31 \ Point 5: yaw = 39, distance = 31, height = -56 EQUB 35 \ Point 6: yaw = 87, distance = 35, height = -56 EQUB 35 \ Point 7: yaw = 169, distance = 35, height = -56 EQUB 42 \ Point 8: yaw = 203, distance = 42, height = -56 EQUB 32 \ Point 9: yaw = 0, distance = 32, height = -56 EQUB 42 \ Point 10: yaw = 53, distance = 42, height = -56 EQUB 48 \ Point 11: yaw = 85, distance = 48, height = -56 EQUB 48 \ Point 12: yaw = 171, distance = 48, height = -56 EQUB 52 \ Point 13: yaw = 197, distance = 52, height = -18 EQUB 52 \ Point 14: yaw = 59, distance = 52, height = -18 EQUB 56 \ Point 15: yaw = 82, distance = 56, height = -18 EQUB 56 \ Point 16: yaw = 174, distance = 56, height = -18 EQUB 0 \ Point 17: yaw = 0, distance = 0, height = -10 EQUB 19 \ Point 18: yaw = 236, distance = 19, height = -11 EQUB 19 \ Point 19: yaw = 20, distance = 19, height = -11 EQUB 29 \ Point 20: yaw = 99, distance = 29, height = -11 EQUB 29 \ Point 21: yaw = 157, distance = 29, height = -11 EQUB 12 \ Point 22: yaw = 192, distance = 12, height = +8 EQUB 12 \ Point 23: yaw = 64, distance = 12, height = +8 EQUB 19 \ Point 24: yaw = 105, distance = 19, height = +8 EQUB 19 \ Point 25: yaw = 151, distance = 19, height = +8 EQUB 28 \ Point 26: yaw = 33, distance = 28, height = -3 EQUB 28 \ Point 27: yaw = 223, distance = 28, height = -3 EQUB 32 \ Point 28: yaw = 0, distance = 32, height = -21 EQUB 42 \ Point 29: yaw = 218, distance = 42, height = -112 EQUB 42 \ Point 30: yaw = 38, distance = 42, height = -112 EQUB 42 \ Point 31: yaw = 90, distance = 42, height = -112 EQUB 42 \ Point 32: yaw = 166, distance = 42, height = -112 EQUB 50 \ Point 33: yaw = 245, distance = 50, height = -24 EQUB 50 \ Point 34: yaw = 11, distance = 50, height = -24 EQUB 54 \ Point 35: yaw = 64, distance = 54, height = -27 EQUB 42 \ Point 36: yaw = 90, distance = 42, height = -27 EQUB 42 \ Point 37: yaw = 166, distance = 42, height = -27 EQUB 54 \ Point 38: yaw = 192, distance = 54, height = -27 EQUB 34 \ Point 39: yaw = 218, distance = 34, height = -8 EQUB 34 \ Point 40: yaw = 38, distance = 34, height = -8 EQUB 34 \ Point 41: yaw = 90, distance = 34, height = -8 EQUB 34 \ Point 42: yaw = 166, distance = 34, height = -8 EQUB 64 \ Point 43: yaw = 245, distance = 64, height = -8 EQUB 64 \ Point 44: yaw = 11, distance = 64, height = -8 EQUB 63 \ Point 45: yaw = 248, distance = 63, height = +1 EQUB 63 \ Point 46: yaw = 8, distance = 63, height = +1 EQUB 34 \ Point 47: yaw = 226, distance = 34, height = +8 EQUB 34 \ Point 48: yaw = 30, distance = 34, height = +8 EQUB 31 \ Point 49: yaw = 92, distance = 31, height = +5 EQUB 31 \ Point 50: yaw = 164, distance = 31, height = +5 EQUB 24 \ Point 51: yaw = 224, distance = 24, height = -112 EQUB 24 \ Point 52: yaw = 32, distance = 24, height = -112 EQUB 24 \ Point 53: yaw = 96, distance = 24, height = -112 EQUB 24 \ Point 54: yaw = 160, distance = 24, height = -112 EQUB 24 \ Point 55: yaw = 224, distance = 24, height = -72 EQUB 24 \ Point 56: yaw = 32, distance = 24, height = -72 EQUB 24 \ Point 57: yaw = 96, distance = 24, height = -72 EQUB 24 \ Point 58: yaw = 160, distance = 24, height = -72 EQUB 104 \ Point 59: yaw = 0, distance = 104, height = -72 EQUB 104 \ Point 60: yaw = 32, distance = 104, height = -72 EQUB 104 \ Point 61: yaw = 64, distance = 104, height = -72 EQUB 104 \ Point 62: yaw = 96, distance = 104, height = -72 EQUB 104 \ Point 63: yaw = 128, distance = 104, height = -72 EQUB 104 \ Point 64: yaw = 160, distance = 104, height = -72 EQUB 104 \ Point 65: yaw = 192, distance = 104, height = -72 EQUB 104 \ Point 66: yaw = 224, distance = 104, height = -72 EQUB 0 \ Point 67: yaw = 0, distance = 0, height = +120 EQUB 112 \ Point 68: yaw = 0, distance = 112, height = -48 EQUB 112 \ Point 69: yaw = 32, distance = 112, height = -112 EQUB 112 \ Point 70: yaw = 64, distance = 112, height = -48 EQUB 112 \ Point 71: yaw = 96, distance = 112, height = -112 EQUB 112 \ Point 72: yaw = 128, distance = 112, height = -48 EQUB 112 \ Point 73: yaw = 160, distance = 112, height = -112 EQUB 112 \ Point 74: yaw = 192, distance = 112, height = -48 EQUB 112 \ Point 75: yaw = 224, distance = 112, height = -112 EQUB 52 \ Point 76: yaw = 0, distance = 52, height = -112 EQUB 68 \ Point 77: yaw = 89, distance = 68, height = -112 EQUB 68 \ Point 78: yaw = 167, distance = 68, height = -112 EQUB 26 \ Point 79: yaw = 128, distance = 26, height = -60 EQUB 41 \ Point 80: yaw = 114, distance = 41, height = -60 EQUB 41 \ Point 81: yaw = 142, distance = 41, height = -60 EQUB 12 \ Point 82: yaw = 225, distance = 12, height = -10 EQUB 12 \ Point 83: yaw = 31, distance = 12, height = -10 EQUB 23 \ Point 84: yaw = 89, distance = 23, height = +1 EQUB 23 \ Point 85: yaw = 167, distance = 23, height = +1 EQUB 46 \ Point 86: yaw = 213, distance = 46, height = -8 EQUB 54 \ Point 87: yaw = 246, distance = 54, height = -14 EQUB 54 \ Point 88: yaw = 10, distance = 54, height = -14 EQUB 46 \ Point 89: yaw = 43, distance = 46, height = -8 EQUB 58 \ Point 90: yaw = 251, distance = 58, height = -5 EQUB 58 \ Point 91: yaw = 5, distance = 58, height = -5 EQUB 34 \ Point 92: yaw = 233, distance = 34, height = +6 EQUB 34 \ Point 93: yaw = 23, distance = 34, height = +6 EQUB 56 \ Point 94: yaw = 218, distance = 56, height = -112 EQUB 56 \ Point 95: yaw = 38, distance = 56, height = -112 EQUB 56 \ Point 96: yaw = 90, distance = 56, height = -112 EQUB 56 \ Point 97: yaw = 166, distance = 56, height = -112 EQUB 42 \ Point 98: yaw = 218, distance = 42, height = -96 EQUB 42 \ Point 99: yaw = 38, distance = 42, height = -96 EQUB 42 \ Point 100: yaw = 90, distance = 42, height = -96 EQUB 42 \ Point 101: yaw = 166, distance = 42, height = -96 EQUB 50 \ Point 102: yaw = 245, distance = 50, height = -8 EQUB 50 \ Point 103: yaw = 11, distance = 50, height = -8 EQUB 54 \ Point 104: yaw = 64, distance = 54, height = -11 EQUB 42 \ Point 105: yaw = 90, distance = 42, height = -11 EQUB 42 \ Point 106: yaw = 166, distance = 42, height = -11 EQUB 54 \ Point 107: yaw = 192, distance = 54, height = -11 EQUB 34 \ Point 108: yaw = 218, distance = 34, height = +8 EQUB 34 \ Point 109: yaw = 38, distance = 34, height = +8 EQUB 34 \ Point 110: yaw = 90, distance = 34, height = +5 EQUB 34 \ Point 111: yaw = 166, distance = 34, height = +5 EQUB 64 \ Point 112: yaw = 245, distance = 64, height = +8 EQUB 64 \ Point 113: yaw = 11, distance = 64, height = +8 EQUB 70 \ Point 114: yaw = 83, distance = 70, height = +2 EQUB 70 \ Point 115: yaw = 173, distance = 70, height = +2 EQUB 63 \ Point 116: yaw = 248, distance = 63, height = +17 EQUB 63 \ Point 117: yaw = 8, distance = 63, height = +17 EQUB 34 \ Point 118: yaw = 226, distance = 34, height = +24 EQUB 34 \ Point 119: yaw = 30, distance = 34, height = +24 EQUB 19 \ Point 120: yaw = 220, distance = 19, height = +39 EQUB 19 \ Point 121: yaw = 36, distance = 19, height = +39 EQUB 24 \ Point 122: yaw = 102, distance = 24, height = +39 EQUB 24 \ Point 123: yaw = 154, distance = 24, height = +39 EQUB 181 \ Point 124: yaw = 224, distance = 181, height = -112 EQUB 181 \ Point 125: yaw = 32, distance = 181, height = -112 EQUB 181 \ Point 126: yaw = 96, distance = 181, height = -112 EQUB 181 \ Point 127: yaw = 160, distance = 181, height = -112 EQUB 145 \ Point 128: yaw = 212, distance = 145, height = +16 EQUB 145 \ Point 129: yaw = 236, distance = 145, height = +16 EQUB 145 \ Point 130: yaw = 20, distance = 145, height = +16 EQUB 145 \ Point 131: yaw = 44, distance = 145, height = +16 EQUB 145 \ Point 132: yaw = 84, distance = 145, height = +16 EQUB 145 \ Point 133: yaw = 108, distance = 145, height = +16 EQUB 145 \ Point 134: yaw = 148, distance = 145, height = +16 EQUB 145 \ Point 135: yaw = 172, distance = 145, height = +16 EQUB 192 \ Point 136: yaw = 224, distance = 192, height = -112 EQUB 136 \ Point 137: yaw = 253, distance = 136, height = -112 EQUB 136 \ Point 138: yaw = 131, distance = 136, height = -112 EQUB 192 \ Point 139: yaw = 160, distance = 192, height = -112 EQUB 192 \ Point 140: yaw = 224, distance = 192, height = +112 EQUB 136 \ Point 141: yaw = 253, distance = 136, height = +112 EQUB 136 \ Point 142: yaw = 131, distance = 136, height = +112 EQUB 192 \ Point 143: yaw = 160, distance = 192, height = +112 EQUB 136 \ Point 144: yaw = 3, distance = 136, height = -112 EQUB 192 \ Point 145: yaw = 32, distance = 192, height = -112 EQUB 192 \ Point 146: yaw = 96, distance = 192, height = -112 EQUB 136 \ Point 147: yaw = 125, distance = 136, height = -112 EQUB 136 \ Point 148: yaw = 3, distance = 136, height = +112 EQUB 192 \ Point 149: yaw = 32, distance = 192, height = +112 EQUB 192 \ Point 150: yaw = 96, distance = 192, height = +112 EQUB 136 \ Point 151: yaw = 125, distance = 136, height = +112 EQUB 192 \ Point 152: yaw = 224, distance = 192, height = -112 EQUB 192 \ Point 153: yaw = 32, distance = 192, height = -112 EQUB 192 \ Point 154: yaw = 96, distance = 192, height = -112 EQUB 192 \ Point 155: yaw = 160, distance = 192, height = -112 EQUB 192 \ Point 156: yaw = 224, distance = 192, height = +112 EQUB 192 \ Point 157: yaw = 32, distance = 192, height = +112 EQUB 192 \ Point 158: yaw = 96, distance = 192, height = +112 EQUB 192 \ Point 159: yaw = 160, distance = 192, height = +112
Name: screenBufferRow12 [Show more] Type: Subroutine Category: Screen buffer Summary: The screen buffer for character row 12
Context: See this subroutine on its own page References: This subroutine is called as follows: * bufferRowAddrHi calls screenBufferRow12 * bufferRowAddrLo calls screenBufferRow12
.screenBufferRow12 EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ These values are workspace EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF \ noise and have no meaning EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &FF, &FF, &FF, &FF, &FF, &7F, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &00, &00, &00, &00, &00, &00, &00, &00 EQUB &FE, &FE, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF EQUB &FF, &FF, &FF, &FF, &FF, &FF, &FF, &FF
Name: objPolygonData [Show more] Type: Variable Category: Drawing objects Summary: Various data for object polygons (colour, drawing phase)
Context: See this variable on its own page References: This variable is used as follows: * DrawObject uses objPolygonData

Polygon data is stored as follows: * Bit 7 is the phase in which to draw this polygon (0 = first phase, 1 = second phase) * Bit 6 is unused and is always clear * Bits 4-5 contain the edge colour (0 to 3) * Bits 2-3 contain the fill colour (0 to 3) * Bits 0-1 give the number of sides (0 = three sides, 1 = four sides) The individual object tables (such as objTree and objSentinel) list the points that are used to draw each polygon.
.objPolygonData EQUB %00010101 \ Polygon 0 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010100 \ Polygon 1 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010101 \ Polygon 2 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10011001 \ Polygon 3 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10011001 \ Polygon 4 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10100101 \ Polygon 5 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10100101 \ Polygon 6 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010001 \ Polygon 7 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010001 \ Polygon 8 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10011001 \ Polygon 9 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010000 \ Polygon 10 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010000 \ Polygon 11 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 12 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 13 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010000 \ Polygon 14 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010000 \ Polygon 15 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10011100 \ Polygon 16 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10011100 \ Polygon 17 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010000 \ Polygon 18 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx00xx: Fill colour 0 (blue) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010101 \ Polygon 19 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111100 \ Polygon 20 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111100 \ Polygon 21 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011001 \ Polygon 22 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011001 \ Polygon 23 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 24 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 25 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111101 \ Polygon 26 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010101 \ Polygon 27 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010100 \ Polygon 28 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 29 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010101 \ Polygon 30 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10101000 \ Polygon 31 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 32 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 33 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 34 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 35 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101001 \ Polygon 36 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10101000 \ Polygon 37 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 38 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010101 \ Polygon 39 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10101000 \ Polygon 40 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 41 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 42 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010101 \ Polygon 43 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 44 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 45 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 46 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 47 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 48 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 49 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 50 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 51 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 52 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 53 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 54 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 55 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011001 \ Polygon 56 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011001 \ Polygon 57 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 58 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011000 \ Polygon 59 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011100 \ Polygon 60 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 61 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011100 \ Polygon 62 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 63 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011100 \ Polygon 64 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 65 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011100 \ Polygon 66 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 67 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 68 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 69 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 70 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 71 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 72 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 73 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 74 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010101 \ Polygon 75 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 76 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 77 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101000 \ Polygon 78 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00101000 \ Polygon 79 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011100 \ Polygon 80 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011100 \ Polygon 81 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00110101 \ Polygon 82 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10111100 \ Polygon 83 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10111100 \ Polygon 84 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10111001 \ Polygon 85 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010100 \ Polygon 86 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 87 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 88 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 89 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 90 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 91 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 92 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111101 \ Polygon 93 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011000 \ Polygon 94 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011000 \ Polygon 95 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 96 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 97 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111100 \ Polygon 98 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111100 \ Polygon 99 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00110101 \ Polygon 100 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00110101 \ Polygon 101 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 102 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010100 \ Polygon 103 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 104 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010101 \ Polygon 105 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10101001 \ Polygon 106 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010101 \ Polygon 107 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010101 \ Polygon 108 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010101 \ Polygon 109 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010101 \ Polygon 110 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010100 \ Polygon 111 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 112 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010101 \ Polygon 113 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10101000 \ Polygon 114 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 115 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 116 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 117 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 118 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101000 \ Polygon 119 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10101001 \ Polygon 120 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %10010100 \ Polygon 121 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010100 \ Polygon 122 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10111100 \ Polygon 123 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10111100 \ Polygon 124 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %10010101 \ Polygon 125 data: \ \ * %1xxxxxxx: Draw polygon in second phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 126 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 127 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010100 \ Polygon 128 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00010100 \ Polygon 129 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00011101 \ Polygon 130 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 131 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 132 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00011101 \ Polygon 133 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 134 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 135 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 136 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 137 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 138 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 139 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 140 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111100 \ Polygon 141 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111100 \ Polygon 142 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111100 \ Polygon 143 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111100 \ Polygon 144 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx00: Polygon has three sides (triangle) EQUB %00111101 \ Polygon 145 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111101 \ Polygon 146 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111101 \ Polygon 147 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 148 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 149 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 150 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111101 \ Polygon 151 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 152 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 153 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 154 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111101 \ Polygon 155 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 156 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00010101 \ Polygon 157 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx01xxxx: Edge colour 1 (black) \ * %xxxx01xx: Fill colour 1 (black) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00101001 \ Polygon 158 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx10xxxx: Edge colour 2 (white/yellow/cyan/red) \ * %xxxx10xx: Fill colour 2 (white/yellow/cyan/red) \ * %xxxxxx01: Polygon has four sides (quadrilateral) EQUB %00111101 \ Polygon 159 data: \ \ * %0xxxxxxx: Draw polygon in first phase \ * %xx11xxxx: Edge colour 3 (green/red/yellow/cyan) \ * %xxxx11xx: Fill colour 3 (green/red/yellow/cyan) \ * %xxxxxx01: Polygon has four sides (quadrilateral)