'MAZE 3D, ED. 2021-09-30, BY NATHANIEL BABIAK. 'BACKING-UP INTO DOOR FRAMES CAN CRASH, BUG COULD GO AWAY AS DOORS ARE MODIFIED THOUGH. 'TRACK OLD VS. NEW VALUES OF R_MAPX, R_MAPY, SWAP P6, P7 (ROM#6) CROSSING DOOR AT (10,42). 'BUTTON-PRESS TO OPEN DOORS, PUSH WALLS, AND TOGGLE SWITCHES... 'FADE-IN AND FADE-OUT EFFECT (FOR START AND END OF LEVEL)... 'RED DIFFUSION EFFECT (FOR DEATH? OR WHAT?)... 'MIRROR DOOR TEXTURES, HANDLE SHOULDN'T BE ON THE LEFT FROM *BOTH* SIDES. REPEAT 'INTERRUPTS. DIM GLOBAL I_BGY( 127 ), I_P0C0( 127 ), I_P0C1( 127 ), I_P0C2( 127 ), I_P0C3( 127 ) GLOBAL I_NEG4 'MOVEMENT. GLOBAL M_FWD0, M_BAK0, M_STR0, M_ROT0, M_FWD1, M_BAK1, M_STR1, M_ROT1, M_RAD, M_ITER GLOBAL M_NEG_STR0, M_NEG_ROT0, M_NEG_STR1, M_NEG_ROT1, M_INC_RAD 'RAYCAST. DIM GLOBAL R_MAP1( 63, 63 ), R_MAP2( 63, 63 ), R_MAP3( 63, 63 ) GLOBAL R_SCREENM5,R_DSCREENF,R_DSCREENF2, R_LOCX,R_LOCY, R_ROTA,R_ROTX,R_ROTY, R_DSCREENX,R_DSCREENY,R_BOXHEIGHT5 GLOBAL R_MAPX0,R_MAPY0, R_RAYX,R_RAYY, R_DMAPX,R_DMAPY, R_DSX,R_DSY, R_SX,R_SY, R_INT_TILE GLOBAL R_MPXP,R_MPYP,R_TILP,R_SIDP,R_RAYP,R_WALP,R_MPX0,R_MPY0,R_TIL0,R_SID0,R_RAY0,R_WAL0 GLOBAL R_MPX1,R_MPY1,R_TIL1,R_SID1,R_RAY1,R_WAL1,R_MAPX,R_MAPY,R_TILE,R_SIDE,R_RAYM,R_WALL GLOBAL R_NEG1, R_NEG06 'DISPLAY. DIM GLOBAL D_TXY002CH(15,31,15), D_TXY012CH(15,31,15) DIM GLOBAL D_TXY102CH(15,31,15), D_TXY112CH(15,31,15) DIM GLOBAL D_HXY002CH(7,31,31), D_HXY102CH(7,31,31) DIM GLOBAL D_HXY012CH(7,31,31), D_HXY112CH(7,31,31) DIM GLOBAL D_TILE2PAL(40), D_TILE2VTEX(40), D_TILE2HTEX(40) GLOBAL D_CX, D_TEX_PER_BOX 'STATUS. DIM GLOBAL S_PW( 13 ), S_SN2( 13 ), S_PX( 13, 5 ), S_PY( 13, 5 ), S_CELL( 13, 5 ) GLOBAL S_SN, S_INIT 'COMPASS. GLOBAL C_CELL1, C_CELL2 'FPS. GLOBAL F_FRAMES, F_TIME, F_STR$ 'DO IT! CALL MAIN END UNTIL 1 SUB MAIN GAMEPAD 1 CALL M_INIT CALL R_INIT( ROM( 3 ) ) CALL D_INIT( ROM( 4 ), ROM( 5 ) ) CALL S_INIT( 4, 2 ) CALL C_INIT( 3, 1 ) CALL I_INIT CALL F_INIT DO TIME = TIMER CALL M_INPUT CALL R_CALC CALL S_SHOW CALL C_SHOW CALL F_SHOW FRAMES = TIMER - TIME IF FRAMES < 3 THEN WAIT 3 - FRAMES LOOP END SUB SUB CC COPY ROM( 2 ), $1000 TO $8000 LOOPS = 5000 WAIT VBL TIME = TIMER FOR I = 1 TO LOOPS 'PASTE CODE HERE. NEXT I FRAMES = TIMER - TIME PRINT "FR="+STR$( FRAMES ), "CC="+STR$( INT(((FRAMES)*17556)/LOOPS-2.5) ) IF FRAMES < 100 THEN PRINT "WARNING! FR<100" END END SUB SUB I_INIT RESTORE I_DATA 'DARK (%000000,%000001), DIM (%000001,%010001), RED (%010101,%010000) CEILING_COLOR = -1 FLOOR_COLOR = %010101 FOR RY = 0 TO 63 I_BGY( RY ) = RY \ 2 * 6 IF CEILING_COLOR < 0 THEN READ I_P0C0( RY ) ELSE I_P0C0( RY ) = CEILING_COLOR I_P0C1( RY ) = I_P0C0( RY ) I_P0C2( RY ) = PEEK( $FF02 ) I_P0C3( RY ) = PEEK( $FF02 ) NEXT RY FOR RY = 64 TO 127 I_BGY( RY ) = I_BGY( 127 - RY ) + 127 - 2 * RY I_P0C0( RY ) = FLOOR_COLOR I_P0C1( RY ) = PEEK( $FF01 ) I_P0C2( RY ) = FLOOR_COLOR I_P0C3( RY ) = PEEK( $FF01 ) NEXT RY ON RASTER CALL I_RASTER ON VBL CALL I_VBL I_NEG4 = -4 I_DATA: DATA %111111, %111111, %111111, %111111, %101111, %111111, %101111, %111111 DATA %101111, %101111, %101111, %101111, %011111, %101111, %011111, %101111 DATA %011111, %011111, %011111, %011111 DATA %001111, %001111, %001111, %001111, %001011, %001111, %001011, %001111 DATA %001011, %001011, %001011, %001011, %000111, %001011, %000111, %001011 DATA %000111, %000111, %000111, %000111, %000011, %000111, %000011, %000111 DATA %000011, %000011, %000011, %000011, %000010, %000011, %000010, %000011 DATA %000010, %000010, %000010, %000010, %000001, %000010, %000001, %000010 DATA %000001, %000001, %000001, %000001 END SUB SUB I_RASTER SCROLL 0, 0, I_BGY( RASTER ) SCROLL 1, I_NEG4, I_BGY( RASTER ) PALETTE 0, I_P0C0( RASTER ), I_P0C1( RASTER ), I_P0C2( RASTER ), I_P0C3( RASTER ) END SUB SUB I_VBL END SUB SUB M_INIT PAUSE OFF 'DEFINE RUNNING INCREMENTS. M_FWD0 = 0.225 M_BAK0 = -0.159 M_STR0 = 0.060 M_ROT0 = 6.000 * PI / 180 'DEFINE WALKING INCREMENTS. M_FWD1 = 0.100 M_BAK1 = -0.071 M_STR1 = 0.040 M_ROT1 = 2.000 * PI / 180 'DEFINE CLIPPING COLLISION DIAMOND RADIUS. M_RAD = 0.100 'DIVIDE INCREMENTS FOR USE LATER WITH M_INPUT LOOP. FOR M_ITER = 1 TO 99 'STILL NOT SURE WHAT FRACTION TO USE HERE, CALC WITH 95% FOR NOW. IF SQR( (M_FWD0/M_ITER)^2 + (M_STR0/M_ITER)^2 ) < 0.95 * M_RAD THEN EXIT NEXT M_ITER M_FWD0 = M_FWD0 / M_ITER M_BAK0 = M_BAK0 / M_ITER M_STR0 = M_STR0 / M_ITER M_ROT0 = M_ROT0 / M_ITER M_FWD1 = M_FWD1 / M_ITER M_BAK1 = M_BAK1 / M_ITER M_STR1 = M_STR1 / M_ITER M_ROT1 = M_ROT1 / M_ITER 'PRE-CALCS FOR SPEED. M_NEG_STR0 = -M_STR0 M_NEG_ROT0 = -M_ROT0 M_NEG_STR1 = -M_STR1 M_NEG_ROT1 = -M_ROT1 M_INC_RAD = M_RAD + 1 END SUB SUB M_INPUT IF LEFT(0) THEN USE_CALC = 1 IF BUTTON(0,1) THEN ROT = M_ROT1 STR = M_STR1 IF UP(0) THEN FWD=M_FWD1 ELSE IF DOWN(0) THEN FWD=M_BAK1 ELSE FWD=0.00 ELSE ROT=M_ROT0 STR=M_STR0 IF UP(0) THEN FWD=M_FWD0 ELSE IF DOWN(0) THEN FWD=M_BAK0 ELSE FWD=0.00 END IF ELSE IF RIGHT(0) THEN USE_CALC = 1 IF BUTTON(0,1) THEN ROT=M_NEG_ROT1 STR=M_NEG_STR1 IF UP(0) THEN FWD=M_FWD1 ELSE IF DOWN(0) THEN FWD=M_BAK1 ELSE FWD=0.00 ELSE ROT=M_NEG_ROT0 STR=M_NEG_STR0 IF UP(0) THEN FWD=M_FWD0 ELSE IF DOWN(0) THEN FWD=M_BAK0 ELSE FWD=0.00 END IF ELSE IF UP(0) THEN USE_CALC = 1 ROT= 0.00 STR= 0.00 IF BUTTON(0,1) THEN FWD=M_FWD1 ELSE FWD=M_FWD0 ELSE IF DOWN(0) THEN USE_CALC = 1 ROT= 0.00 STR= 0.00 IF BUTTON(0,1) THEN FWD=M_BAK1 ELSE FWD=M_BAK0 ELSE IF BUTTON(0,0) THEN USE_CALC = 0 ' IF IS_DONE THEN\. ' PCTSTEP = -PCTSTEP\. ' IS_DONE = 0\. ' END IF ELSE IF PAUSE THEN USE_CALC = 0 CALL M_PAUSE ELSE USE_CALC = 0 END IF IF USE_CALC THEN 'REPEAT THIS CALL INSTRUCTION M_ITER TIMES, USE TRACE INSTRUCTION TO VIEW M_ITER. CALL M_CALC( FWD, STR, ROT ) CALL M_CALC( FWD, STR, ROT ) CALL M_CALC( FWD, STR, ROT ) IF ROT THEN CALL M_CALC2 END IF END SUB SUB M_CALC( FWD, STR, ROT ) IF ROT THEN ADD R_ROTA, ROT R_ROTX = COS( R_ROTA ) R_ROTY = SIN( R_ROTA ) END IF IF SGN( FWD ) OR SGN( STR ) THEN '=++RAD*<> (RAD*<> ALLOWS BACK-TO-WALL BUT NOT NOSE). CYLX = R_LOCX + ( FWD + M_RAD ) * R_ROTX + STR * R_ROTY CYLY = R_LOCY + ( FWD + M_RAD ) * R_ROTY - STR * R_ROTX 'DIAMOND, SIZE 2*M_RAD, ORIENTED ON <> AND <> (NOT <>), AROUND <>. IF R_MAP3( CYLX + M_RAD, CYLY ) THEN R_LOCX = INT( CYLX + M_RAD ) - M_RAD - M_RAD * R_ROTX ELSE IF R_MAP3( CYLX - M_RAD, CYLY ) THEN R_LOCX = INT( CYLX - M_RAD ) + M_INC_RAD - M_RAD * R_ROTX ELSE R_LOCX = CYLX - M_RAD * R_ROTX END IF IF R_MAP3( CYLX, CYLY + M_RAD ) THEN R_LOCY = INT( CYLY + M_RAD ) - M_RAD - M_RAD * R_ROTY ELSE IF R_MAP3( CYLX, CYLY - M_RAD ) THEN R_LOCY = INT( CYLY - M_RAD ) + M_INC_RAD - M_RAD * R_ROTY ELSE R_LOCY = CYLY - M_RAD * R_ROTY END IF END IF END SUB SUB M_CALC2 IF SGN(INT(R_ROTA/6.2831)) THEN R_ROTA=(R_ROTA/6.2831-INT(R_ROTA/6.2831))*6.2831 R_DSCREENX = R_ROTY * R_DSCREENF R_DSCREENY = -R_ROTX * R_DSCREENF END SUB SUB M_PAUSE PAUSE END SUB SUB R_INIT( SRC ) '_*_*_*_ ABANDON ALL HOPE, YE WHO ENTER HERE _*_*_*_ ' @@| | | | VECTORS: ' |@@@@| | | | | TAIL TIP DESCRIPTION ' ---(R)-+----+----+----+----+-- 0 L (LOCATION) OF BIOLOGICAL EYE ' | |\ | | | | | L P <> (ROTATION) (NOT TO SCALE) ' | | \| | | | | @ S SCREEN, DEFINED BY <> AND FOV ' ---+-|--\----+----+----+----+--- L R RAY, CAST PATH ' | | |\ @----@ | | * R RAY, PERSPECTIVE-CORRECT DEPTH ' | | | \ |\XXX| | | TRIANGLES: ' ---+-|-@+--Y-+-\XX|----+----+--- POINTS DESCRIPTION ' | | |\ \| \X| | | L@S PROJECTION ' | | |Y\ X \| | | XXX CAST X, HYPOTINUSE IS UNIT DIST. ON X-AXIS ' ---+-|-@--@--+\---@----+----+--- Y CAST Y, HYPOTINUSE IS UNIT DIST. ON Y-AXIS ' | | | | @-----(P)----(S) NOTES: ' | | | | \ | || / * AND <> ALSO DEFINE IN-GAME USER. ' ---+-|--+----+---\+---|+---/+--- MOVING AND ROTATING PROJECTION TRIANGLE CHANGES ' | | | | \ _|_ / | IN-GAME USER POSITION AND DIRECTION. ' | | | | |\/ | \/FOV * FIRST RAY IS CAST ALONG PATH L-@, LAST RAY IS CAST ' ---+-|--+----+----+-\-|-/---+--- ALONG PATH L-S. PATH STARTS AT , AND MIGHT HIT ' | | | | | \|/ | A BOX EVEN BEFORE REACHING THE SCREEN PLANE. (NOTE ' | *---------------(L) | <> IS A UNIT B/C RAY CAN HIT BEFORE SCREEN.) ' --+----+----+----+--/-+----+-- * TRIANGLES XXX AND Y ARE SHOWN ALIGNED WITH THE ' | | | ^ / | | BACKGROUND GRID UNIT SPACING, BUT THIS IS ONLY FOR ' | | |/ | CLARITY AND NOT A RESTRICTION. ' --0--> * ALL UNITS ARE "BOXES" OR RADIANS UNLESS COMMENTED. ' | FOV = 90 * PI / 180 R_SCREENM5 = TAN( FOV / 2 ) * 1.0 * 2 * 0.5 'UNITS ARE BOXES PER COLUMN (40 COLUMNS COVERS HALF THE SCREEN). R_DSCREENF = R_SCREENM5 / 40 'UNITS ARE BOXES PER PIXEL (80 PIXELS COVERS HALF THE SCREEN). R_DSCREENF2 = R_SCREENM5 / 80 'UNITS ARE PIXELS PER BOX HEIGHT. R_BOXHEIGHT5 = 80 * 0.5 / R_SCREENM5 CURRENT_FONT = 0 MAPW = PEEK( SRC + 2 ) MAPH = PEEK( SRC + 3 ) ADD SRC, 4 FOR CY = MAPH - 1 TO 0 STEP -1 FOR CX = 0 TO MAPW - 1 TILE = PEEK( SRC ) IF TILE = 0 THEN R_MAP1( CX, CY ) = 0 R_MAP2( CX, CY ) = 0 R_MAP3( CX, CY ) = 0 ELSE IF TILE >= 24 AND TILE <= 29 THEN R_MAP1( CX, CY ) = 0 R_MAP2( CX, CY ) = TILE R_MAP3( CX, CY ) = 0 ELSE IF TILE < 12 OR TILE > 15 THEN R_MAP1( CX, CY ) = TILE 'IF TILE IS A DOOR, ADD ITS PERCENTAGE CLOSED (99.99%). R_MAP2( CX, CY ) = PEEK( SRC + 1 ) \ 8 'DOOR IS MODELED 0% CLOSED, FOR NOW... IF TILE=1 OR TILE=17 OR TILE=22 THEN R_MAP3( CX, CY ) = 0 ELSE R_MAP3( CX, CY ) = 1 ELSE IF TILE >= 12 AND TILE <= 15 THEN R_MAP1( CX, CY ) = 0 R_MAP2( CX, CY ) = 0 R_MAP3( CX, CY ) = 0 R_LOCX = CX + 0.5 R_LOCY = CY + 0.5 R_ROTA = 0 CALL M_CALC( 0, 0, ( TILE - 11 ) * PI / 2 ) CALL M_CALC2 END IF ADD SRC, 2 NEXT CX NEXT CY R_NEG1 = -1 R_NEG06 = -0.6 R_SIDE1: DATA 1 R_SIDE0: DATA 0 'SEE D_SHOW READ TX0, TX1. DATA 0, 0, 0, 0 END SUB SUB R_CALC R_MAPX0 = INT( R_LOCX ) R_MAPY0 = INT( R_LOCY ) R_RAYX = R_ROTX - R_ROTY * R_SCREENM5 R_RAYY = R_ROTY + R_ROTX * R_SCREENM5 CALL R_CAST R_MPX1 = R_MAPX R_MPY1 = R_MAPY R_TIL1 = R_TILE R_SID1 = R_SIDE R_RAY1 = R_RAYM R_WAL1 = R_WALL CALL R_CAST FOR D_CX = 0 TO 19 '(UNROLLED) FOR BK = 0 TO 1. BG BK. (SAVES 7*80 CC, 3.2% CPU.) BG 0 R_MPXP = R_MPX1 R_MPYP = R_MPY1 R_TILP = R_TIL1 R_SIDP = R_SID1 R_RAYP = R_RAY1 R_WALP = R_WAL1 'P=PREVIOUS=-1. 0=LEFT. 1=RIGHT. DEFAULT,NOW=RIGHT-RIGHT. DEFAULT,NEXT=0=LEFT. R_MPX0 = R_MAPX R_MPY0 = R_MAPY R_TIL0 = R_TILE R_SID0 = R_SIDE R_RAY0 = R_RAYM R_WAL0 = R_WALL CALL R_CAST R_MPX1 = R_MAPX R_MPY1 = R_MAPY R_TIL1 = R_TILE R_SID1 = R_SIDE R_RAY1 = R_RAYM R_WAL1 = R_WALL CALL R_CAST CALL D_SHOW BG 1 R_MPXP = R_MPX1 R_MPYP = R_MPY1 R_TILP = R_TIL1 R_SIDP = R_SID1 R_RAYP = R_RAY1 R_WALP = R_WAL1 'P=PREVIOUS=-1. 0=LEFT. 1=RIGHT. DEFAULT,NOW=RIGHT-RIGHT. DEFAULT,NEXT=0=LEFT. R_MPX0 = R_MAPX R_MPY0 = R_MAPY R_TIL0 = R_TILE R_SID0 = R_SIDE R_RAY0 = R_RAYM R_WAL0 = R_WALL CALL R_CAST R_MPX1 = R_MAPX R_MPY1 = R_MAPY R_TIL1 = R_TILE R_SID1 = R_SIDE R_RAY1 = R_RAYM R_WAL1 = R_WALL CALL R_CAST CALL D_SHOW '(UNROLLED) NEXT BK. NEXT D_CX END SUB SUB R_CAST R_MAPX = R_MAPX0 R_MAPY = R_MAPY0 IF R_RAYX > 0 THEN R_DMAPX = 1 R_SX = ( R_MAPX - R_LOCX + 1 ) / R_RAYX ELSE R_DMAPX = R_NEG1 R_SX = ( R_MAPX - R_LOCX ) / R_RAYX END IF IF R_RAYY > 0 THEN R_DMAPY = 1 R_SY = ( R_MAPY - R_LOCY + 1 ) / R_RAYY ELSE R_DMAPY = R_NEG1 R_SY = ( R_MAPY - R_LOCY ) / R_RAYY END IF R_DSX = R_DMAPX / R_RAYX R_DSY = R_DMAPY / R_RAYY CALL R_CAST2 ADD R_RAYX, R_DSCREENX ADD R_RAYY, R_DSCREENY END SUB SUB R_CAST2 REPEAT IF R_SX < R_SY THEN ADD R_SX, R_DSX ADD R_MAPX, R_DMAPX RESTORE R_SIDE0 ELSE ADD R_SY, R_DSY ADD R_MAPY, R_DMAPY RESTORE R_SIDE1 END IF UNTIL R_MAP1( R_MAPX, R_MAPY ) R_TILE = R_MAP1( R_MAPX, R_MAPY ) R_INT_TILE = INT( R_TILE ) IF R_INT_TILE = 1 OR R_INT_TILE = 17 OR R_INT_TILE = 22 THEN IF R_INT_TILE = 17 THEN 'IT'S AN EAST-WEST (STEEL) DOOR, OFFSET X-DEPTH 0.4 (1-0.4=0.6) BLOCKS. ADD R_SY, R_NEG06 * R_DSY ADD R_MAPY, R_NEG06 * R_DMAPY IF R_SX < R_SY THEN ADD R_SX, R_DSX ADD R_MAPX, R_DMAPX RESTORE R_SIDE0 ELSE ADD R_SY, R_DSY ADD R_MAPY, R_DMAPY RESTORE R_SIDE1 END IF READ R_SIDE IF R_SIDE = 0 THEN R_TILE = 33 ELSE 'IT'S A NORTH-SOUTH (STEEL OR FINAL) DOOR, OFFSET X-DEPTH 0.4 (1-0.4=0.6) BLOCKS. ADD R_SX, R_NEG06 * R_DSX ADD R_MAPX, R_NEG06 * R_DMAPX IF R_SX < R_SY THEN ADD R_SX, R_DSX ADD R_MAPX, R_DMAPX RESTORE R_SIDE0 ELSE ADD R_SY, R_DSY ADD R_MAPY, R_DMAPY RESTORE R_SIDE1 END IF READ R_SIDE IF R_SIDE THEN R_TILE = 33 END IF '(INLINE) SUB R_CAST3. IF R_SIDE THEN IF R_RAYY < 0 THEN R_RAYM = ( R_MAPY - R_LOCY + 1 ) / R_RAYY R_WALL = R_LOCX + R_RAYM * R_RAYX R_WALL = INT( R_WALL ) - R_WALL + 1 ELSE R_RAYM = ( R_MAPY - R_LOCY ) / R_RAYY R_WALL = R_LOCX + R_RAYM * R_RAYX ADD R_WALL, -INT( R_WALL ) END IF ELSE IF R_RAYX < 0 THEN R_RAYM = ( R_MAPX - R_LOCX + 1 ) / R_RAYX R_WALL = R_LOCY + R_RAYM * R_RAYY ADD R_WALL, -INT( R_WALL ) ELSE R_RAYM = ( R_MAPX - R_LOCX ) / R_RAYX R_WALL = R_LOCY + R_RAYM * R_RAYY R_WALL = INT( R_WALL ) - R_WALL + 1 END IF END IF '(INLINE) END SUB. ALSO, VERIFY IF 0.4 BLOCK OFFSET NEEDS UN-OFFSET BEFORE CALL R_CAST2. FRAC = R_TILE - R_INT_TILE 'IF R_WALL > FRAC THEN CALL R_CAST2 ELSE '(IT'S NOT A DOOR.) READ R_SIDE '(INLINE SUB R_CAST3.) IF R_SIDE THEN IF R_RAYY < 0 THEN R_RAYM = ( R_MAPY - R_LOCY + 1 ) / R_RAYY R_WALL = R_LOCX + R_RAYM * R_RAYX R_WALL = INT( R_WALL ) - R_WALL + 1 ELSE R_RAYM = ( R_MAPY - R_LOCY ) / R_RAYY R_WALL = R_LOCX + R_RAYM * R_RAYX ADD R_WALL, -INT( R_WALL ) END IF ELSE IF R_RAYX < 0 THEN R_RAYM = ( R_MAPX - R_LOCX + 1 ) / R_RAYX R_WALL = R_LOCY + R_RAYM * R_RAYY ADD R_WALL, -INT( R_WALL ) ELSE R_RAYM = ( R_MAPX - R_LOCX ) / R_RAYX R_WALL = R_LOCY + R_RAYM * R_RAYY R_WALL = INT( R_WALL ) - R_WALL + 1 END IF END IF '(INLINE) END SUB. END IF END SUB SUB D_INIT( SRCV, SRCH ) DIM MASK( 7 ), MULT2( 1 ), MULT4( 3 ), MULT16( 3 ), MULT64( 3 ) FOR PX1 = 0 TO 7 MASK( PX1 ) = 2 ^ ( 7 - PX1 ) NEXT PX1 MULT2( 1 ) = 2 FOR CLR = 1 TO 3 MULT4( CLR ) = CLR * 4 MULT16( CLR ) = CLR * 16 MULT64( CLR ) = CLR * 64 NEXT CLR TEXTURE = 0 DOWN1LEFT4 = $100 - $40 RIGHT4UP2 = $40 - $200 RIGHT4UP4 = $40 - $400 FOR MY = 0 TO 3 FOR MX = 0 TO 3 FOR CY = 0 TO 8 STEP 8 FOR CX = 0 TO 24 STEP 8 FOR PY = 0 TO 7 TY = PY + CY VAL0 = PEEK( SRCV ) VAL8 = PEEK( SRCV + 8 ) FOR PX = 0 TO 7 TX = PX + CX CLR = SGN( VAL0 AND MASK( PX ) ) + MULT2( SGN( VAL8 AND MASK( PX ) ) ) D_TXY002CH( TEXTURE, TX, TY ) = CLR D_TXY102CH( TEXTURE, TX, TY ) = MULT4 ( CLR ) D_TXY012CH( TEXTURE, TX, TY ) = MULT16( CLR ) D_TXY112CH( TEXTURE, TX, TY ) = MULT64( CLR ) NEXT PX INC SRCV NEXT PY ADD SRCV, 8 NEXT CX ADD SRCV, DOWN1LEFT4 NEXT CY INC TEXTURE ADD SRCV, RIGHT4UP2 NEXT MX ADD SRCV, $100 NEXT MY TEXTURE = 0 FOR MY = 0 TO 1 FOR MX = 0 TO 3 FOR CY = 0 TO 24 STEP 8 FOR CX = 0 TO 24 STEP 8 FOR PY = 0 TO 7 TY = PY + CY VAL0 = PEEK( SRCH ) VAL8 = PEEK( SRCH + 8 ) FOR PX = 0 TO 7 TX = PX + CX CLR = SGN( VAL0 AND MASK( PX ) ) + MULT2( SGN( VAL8 AND MASK( PX ) ) ) D_HXY002CH( TEXTURE, TX, TY ) = CLR D_HXY102CH( TEXTURE, TX, TY ) = MULT4 ( CLR ) D_HXY012CH( TEXTURE, TX, TY ) = MULT16( CLR ) D_HXY112CH( TEXTURE, TX, TY ) = MULT64( CLR ) NEXT PX INC SRCH NEXT PY ADD SRCH, 8 NEXT CX ADD SRCH, DOWN1LEFT4 NEXT CY INC TEXTURE ADD SRCH, RIGHT4UP4 NEXT MX ADD SRCH, $300 NEXT MY SRC = $8000 FILL SRC, $1000 DIM M01( 3 ), M81( 3 ), M04( 3 ), M84( 3 ) RESTORE D_DATA1 D_DATA1: DATA $C0, $C0, $C0, $C0, $30, $30, $30, $30 READ M01(1), M81(2), M01(3), M81(3), M04(1), M84(2), M04(3), M84(3) FOR C11 = 0 TO 3 FOR C01 = 0 TO 3 FOR C10 = 0 TO 3 FOR C00 = 0 TO 3 POKE SRC , M01( C00 ) + M04( C10 ) POKE SRC + 8, M81( C00 ) + M84( C10 ) POKE SRC + 1, M01( C01 ) + M04( C11 ) POKE SRC + 9, M81( C01 ) + M84( C11 ) ADD SRC, 16 NEXT C00 NEXT C10 NEXT C01 NEXT C11 RESTORE D_DATA2 FOR TILE = 1 TO 40 READ D_TILE2PAL( TILE ) NEXT TILE FOR TILE = 1 TO 40 READ D_TILE2VTEX( TILE ) NEXT TILE FOR TILE = 1 TO 40 READ D_TILE2HTEX( TILE ) NEXT TILE D_DATA2: 'PALETTE 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 DATA 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 3, 0 DATA 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 5, 6, 6, 0 'VERT TEX 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 DATA 1, 2, 3, 4, 5, 6, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 13, 0 DATA 8, 00, 12, 0, 0, 0, 0, 0, 0, 0, 0, 0, 14, 0, 0, 0, 9, 10, 11, 0 'HORZ TEX 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 DATA 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 DATA 0, 0, 0, 00, 1, 2, 3, 4, 5, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 TEXEL_HEIGHT = 16 PIXEL_HEIGHT = R_BOXHEIGHT5 D_TEX_PER_BOX = TEXEL_HEIGHT / PIXEL_HEIGHT END SUB SUB D_SHOW PL0 = INT( 64.0 - R_BOXHEIGHT5 / R_RAY0 ) PY0 = MAX( 0, PL0 ) DTY0 = D_TEX_PER_BOX * R_RAY0 TX0 = 31.999 * R_WAL0 TY0 = ( PY0 - PL0 ) * DTY0 TEX0 = D_TILE2VTEX( R_TIL0 ) PL1 = INT( 64.0 - R_BOXHEIGHT5 / R_RAY1 ) TX1 = 31.999 * R_WAL1 PY1 = MAX( 0, PL1 ) DTY1 = D_TEX_PER_BOX * R_RAY1 TY1 = ( PY1 - PL1 ) * DTY1 TEX1 = D_TILE2VTEX( R_TIL1 ) 'COMPARE LEFT SIDE OF CAST=0, THEN RIGHT SIDE, THEN REPEAT LEFT/RIGHT FOR CAST=1. IF R_RAYP>R_RAY0 THEN IF R_MPX0<>R_MPXP OR R_MPY0<>R_MPYP OR R_SID0<>R_SIDP THEN READ TX0 IF R_RAY1>R_RAY0 THEN IF R_MPX0<>R_MPX1 OR R_MPY0<>R_MPY1 OR R_SID0<>R_SID1 THEN READ TX0 IF R_RAY0>R_RAY1 THEN IF R_MPX1<>R_MPX0 OR R_MPY1<>R_MPY0 OR R_SID1<>R_SID0 THEN READ TX1 IF R_RAYM>R_RAY1 THEN IF R_MPX1<>R_MAPX OR R_MPY1<>R_MAPY OR R_SID1<>R_SIDE THEN READ TX1 IF PL0 < PL1 THEN CY = PY0 \ 2 CM = PY1 \ 2 - 1 PAL 0 BG FILL D_CX, 0 TO D_CX, CY - 1 CHAR 000 PAL D_TILE2PAL( R_TIL1 ) IF PY0 AND 1 THEN CELL D_CX, CY, D_TXY012CH( TEX0, TX0, TY0 ) ADD TY0, DTY0 INC CY END IF FOR CY = CY TO CM CH = D_TXY002CH( TEX0, TX0, TY0 ) ADD TY0, DTY0 CELL D_CX, CY, CH + D_TXY012CH( TEX0, TX0, TY0 ) ADD TY0, DTY0 NEXT CY IF PY1 AND 1 THEN CH = D_TXY002CH( TEX0, TX0, TY0 ) ADD TY0, DTY0 CELL D_CX, CY, CH + D_TXY012CH( TEX0, TX0, TY0 ) + D_TXY112CH( TEX1, TX1, TY1 ) ADD TY0, DTY0 ADD TY1, DTY1 INC CY END IF ELSE IF PL1 < PL0 THEN CY = PY1 \ 2 CM = PY0 \ 2 - 1 PAL 0 BG FILL D_CX, 0 TO D_CX, CY - 1 CHAR 000 PAL D_TILE2PAL( R_TIL0 ) IF PY1 AND 1 THEN CELL D_CX, CY, D_TXY112CH( TEX1, TX1, TY1 ) ADD TY1, DTY1 INC CY END IF FOR CY = CY TO CM CH = D_TXY102CH( TEX1, TX1, TY1 ) ADD TY1, DTY1 CELL D_CX, CY, CH + D_TXY112CH( TEX1, TX1, TY1 ) ADD TY1, DTY1 NEXT CY IF PY0 AND 1 THEN CH = D_TXY102CH( TEX1, TX1, TY1 ) ADD TY1, DTY1 CELL D_CX, CY, CH + D_TXY012CH( TEX0, TX0, TY0 ) + D_TXY112CH( TEX1, TX1, TY1 ) ADD TY0, DTY0 ADD TY1, DTY1 INC CY END IF ELSE CY = PY0 \ 2 PAL 0 BG FILL D_CX, 0 TO D_CX, CY - 1 CHAR 000 IF INT( TX0 ) THEN PAL D_TILE2PAL( R_TIL0 ) ELSE PAL D_TILE2PAL( R_TIL1 ) IF PY0 AND 1 THEN CELL D_CX, CY, D_TXY012CH( TEX0, TX0, TY0 ) + D_TXY112CH( TEX1, TX1, TY1 ) ADD TY0, DTY0 ADD TY1, DTY1 INC CY END IF END IF FOR CY = CY TO 30 CH = D_TXY002CH( TEX0, TX0, TY0 ) + D_TXY102CH( TEX1, TX1, TY1 ) ADD TY0, DTY0 ADD TY1, DTY1 CELL D_CX, CY, CH + D_TXY012CH( TEX0, TX0, TY0 ) + D_TXY112CH( TEX1, TX1, TY1 ) ADD TY0, DTY0 ADD TY1, DTY1 NEXT CY IF CY <= 31 THEN CH = D_TXY002CH( TEX0, TX0, TY0 ) + D_TXY102CH( TEX1, TX1, TY1 ) CELL D_CX, CY, CH + D_TXY012CH( TEX0, TX0, 15 ) + D_TXY112CH( TEX1, TX1, 15 ) END IF END SUB SUB S_INIT( PL, CLR ) IF S_INIT THEN FOR SN = 0 TO 60 SPRITE SN PAL PL NEXT SN RESTORE S_DATA1 FOR CH = 0 TO 12 FOR SN = 0 TO S_SN2( CH ) READ TEMP S_CELL( CH, SN ) = TEMP * CLR NEXT SN NEXT CH ELSE S_INIT = 1 RESTORE S_DATA0 FOR CH = 0 TO 12 READ COMMENT$, S_PW( CH ), S_SN2( CH ) FOR SN = 0 TO S_SN2( CH ) READ S_PX( CH, SN ), S_PY( CH, SN ) NEXT SN NEXT CH CALL S_INIT( PL, CLR ) S_DATA0: DATA "-", 4,1, 0,2, 1,2, ".", 3,0, 0,4, "/", 6,3, 3,1, 2,2, 1,3, 0,4, "0", 6,5, 1,0, 0,1 DATA 3,2, 0,3, 3,3, 0,4, "1", 5,4, 1,0, 0,1, 1,2, 1,4, 0,5, "2", 6,5, 0,0, 3,1, 2,2, 1,3 DATA 0,4, 3,5, "3", 6,4, 0,0, 3,1, 2,2, 3,3, 0,5, "4", 6,4, 0,0, 3,1, 0,2, 3,3, 3,5, "5" DATA 6,4, 0,0, 1,0, 0,2, 3,3, 0,5, "6", 6,5, 1,0, 0,1, 0,3, 3,3, 1,5, 2,5, "7", 6,3, 0,0 DATA 3,0, 2,2, 1,4, "8", 6,5, 0,0, 3,0, 0,2, 3,2, 0,4, 3,4, "9", 6,4, 0,0, 3,0, 0,2, 3,2 DATA 3,4 S_DATA1: DATA 001, 001, 017, 001, 001, 001, 001, 069, 017 DATA 001, 001, 017, 081, 017, 001, 017, 001, 005, 005, 001, 001, 001 DATA 081, 001, 005, 001, 001, 017, 005, 017, 017, 005, 017, 001 DATA 017, 005, 005, 017, 005, 005, 081, 017, 017, 001, 001, 005 DATA 017, 017, 017, 021, 017, 021, 017, 081, 017, 021, 017, 005, 017 DATA 017 END IF END SUB SUB S_SHOW S_SN = 0 IF R_LOCX < 9.95 THEN LN = 3 ELSE LN = 4 CALL S_TEXT( 0, 122, LEFT$( STR$( INT( R_LOCX * 10 + 0.5 ) / 10 + 0.01 ), LN ), 1 ) IF R_LOCY < 9.95 THEN LN = 3 ELSE LN = 4 CALL S_TEXT( 80, 122, LEFT$( STR$( INT( R_LOCY * 10 + 0.5 ) / 10 + 0.01 ), LN ), 0 ) CALL S_TEXT( 161, 122, STR$( INT( R_ROTA * 57.296 + 0.5 ) ), -1 ) IF S_SN < 60 THEN SPRITE OFF S_SN TO 60 ELSE IF S_SN = 60 THEN SPRITE OFF 60 END SUB SUB S_TEXT( PX, PY, S$, ALIGNMENT ) IF ALIGNMENT >= 0 THEN IF ALIGNMENT = 0 THEN PW = -1 FOR PS = 1 TO LEN( S$ ) ADD PW, S_PW( ASC( MID$( S$, PS, 1 ) ) - 45 ) NEXT PS ADD PX, -PW \ 2 END IF FOR PS = 1 TO LEN( S$ ) CH = ASC( MID$( S$, PS, 1 ) ) - 45 FOR SN = 0 TO S_SN2( CH ) SPRITE S_SN, PX + S_PX( CH, SN ), PY + S_PY( CH, SN ), S_CELL( CH, SN ) S_SN = MIN( S_SN + 1, 61 ) NEXT SN ADD PX, S_PW( CH ) NEXT PS ELSE FOR PS = LEN( S$ ) TO 1 STEP ALIGNMENT CH = ASC( MID$( S$, PS, 1 ) ) - 45 ADD PX, -S_PW( CH ) FOR SN = 0 TO S_SN2( CH ) SPRITE S_SN, PX + S_PX( CH, SN ), PY + S_PY( CH, SN ), S_CELL( CH, SN ) S_SN = MIN( S_SN + 1, 61 ) NEXT SN NEXT PS END IF END SUB SUB C_INIT( PL, CLR ) SPRITE 61 PAL PL SPRITE 62 PAL PL SPRITE 63 PAL PL C_CELL1 = CLR C_CELL2 = CLR * 85 END SUB SUB C_SHOW 'SUPER ELLIPSE COMMENTED-OUT. DON'T USE UNTIL IT'S PROJECTED (ON A SKYBOX) FIRST. RAD = PI + R_ROTA 'PX=79.5+78*SGN(COS(RAD))*SQR(ABS(COS(RAD))),PY=59.0+58.5*SGN(SIN(RAD))*SQR(ABS(SIN(RAD))) PX = 13 + 12 * COS( RAD ) PY = 12 + 12 * SIN( RAD ) SPRITE 61, PX , PY , C_CELL1 SPRITE 62, PX - 1, PY + 1, C_CELL2 SPRITE 63, PX , PY + 3, C_CELL1 END SUB SUB F_INIT F_STR$ = "FPS" + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) F_STR$ = F_STR$ + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) F_STR$ = F_STR$ + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) + CHR$( 10 ) F_FRAMES = 22.2 F_TIME = TIMER - 60 END SUB SUB F_SHOW INC F_FRAMES IF TIMER - F_TIME >= 30.000 THEN TRACE LEFT$(STR$( INT( F_FRAMES * 600 / ( TIMER - F_TIME ) ) / 9.9999 ),4), F_STR$ F_FRAMES = 0 F_TIME = TIMER END IF END SUB '##:LAYERS 'BG 0 AND 1 BLOXEL DISPLAY 'SN 61 TO 63 COMPASS 'SN 0 TO 60 STATUS '#0:DEFAULT 'COULD BE USED FOR A LOADING SCREEN OR PAUSE MENU? '#1:PALETTES COLORS UPDATE_IN DESCRIPTION ' 0 0 RASTER BACKGROUND COLORS ' 0 1 3 RASTER FLOOR HORZ TEXTURE COLOR* ' 0 23 RASTER CEILING HORZ TEXTURE COLOR* ' 1234567 12 N/A VERT TEXTURE UNIQUE COLORS ' 1234567 3 N/A VERT TEXTURE COMMON COLOR '* SEE #5:HORZ TEXTURES '#2:TILES 'AUTO-LOADS INTO THE GFX EDITOR, FOR EASE OF EDITING MAZE TILEMAPS (NOT USED IN-GAME) 'TRANSPARENT TILES = CEILING AND FLOOR TILES, PASSABLE. 'OPAQUE/BLOCK TILES = WALLS, IMPASSABLE. 'DIRECTION TILES = PLAYER STARTING POSITION (ONLY ONE PER LEVEL). 'OTHERS AND UNUSED = CONVERTED TO TILE 0 'CHAR/TILE STYLE PALETTE ORIENT. TEXTURE DESCRIPTION ' 1 STEEL 1 V 1 DOOR (NORTH-SOUTH) ' 2 STONE 2 V 2 DEFAULT ' 3 STONE 3 V 3 BANNER ' 4 PANEL 4 V 4 DEFAULT ' 5 PANEL 5 V 5 EAGLE ' 6 BRICK 6 V 6 DEFAULT ' 7 BRICK 7 V 7 GRATES ' 17 STEEL 1 V 1 DOOR (EAST-WEST) ' 19 STONE 3 V 13 EAGLE ' 21 PANEL 5 V 8 FACES ' 22 FINAL 6* V 0 DOOR (NORTH-SOUTH) ' 23 FINAL 7* V 12 DEFAULT ' 24 MONO 0 - H 0 0 GRID DOTS FLOOR ONLY ' 25 MONO 0 - H 0 1 GRID TILES ' 26 MONO 0 - H 0 2 PUDDLE ' 27 MONO 0 - H 0 3 LIGHT OFF ' 28 MONO 0 - H 0 4 LIGHT ON ' 29 MONO 0 - H 0 5 GRID DOTS FLOOR AND CEILING ' 33 STEEL 1 V 14 DEFAULT ' 37 STONE 5 V 9 FACES ' 38 FINAL 6* V 10 SWITCH LEFT ' 39 FINAL 6* V 11 SWITCH RIGHT '* NEED TO SWAP PALETTES 6 AND 7 WITH SUBSEQUENT COLORS FROM ROM(6). '#3:TILEMAP 'USE LOWRES NX GFX DESIGNER TO EDIT TILE VALUES. 'USER PRESSING ACTION KEY CHECKS PRIO STATUS OF FIVE TILES (N/S/E/W/C) AROUND PLAYER. ' DOOR = OPEN ANIMATION, MAP ARRAY SET TO 0, 5 SECOND COUNTDOWN, WAIT FOR ' CLEAR, CLOSE ANIMATION, MAP ARRAY SET TO ROM TILE ' SWITCH = TOGGLE ANIMATION, MAP ARRAY SET TO ALTERNATE STATE ' OPAQUE/BLOCK = SECRET! DEPTH ANIMATION, MAP ARRAY NEIGHBOR SET PER MAP ARRAY LOCAL, LOCAL ' SET TO 0, LOOPS UNTIL BLOCK LACKS CLEARANCE BEHIND IT. BY DEFAULT, SECRET ' BLOCKS MOVE UP AND LEFT, BUT FLIPPED BASED ON FLIP FX, FY. CLEARANCES ' BASED ON MAP ARRAY PREVENT BOTH MOVEMENTS. ENSURE SECRETS ARE SURROUNDED ' TO PREVENT MORE THAN ONE MOVEMENT. '#4:VERT TEXTURES ' 'FOR BLOCK TEXTURES, LEFT BORDER COLOR=3, AVOID LARGE AREAS OF TRANSPARENCY COLOR=0 '(IMPLIES A TRANSPARENT WINDOW, IT'LL FEEL UNNATURAL), PERHAPS USE SPARINGLY. ' 'FOR OBJECTS, OUTLINE MUST BE A Y-MONOTONE POLYGON (FOR EDGE DETECTION). WHEN AN EDGE BEGINS 'ON THE RIGHT-HALF OF A CELL OR ENDS ON THE LEFT-HALF OF A CELL, JUST DON'T PLOT BLOCK. THIS 'ALLOWS EDGE COLOR<>3, BUT EDGES WILL JIGGLE A BIT SO OUTLINE SHOULD BE THICK. (YOU CAN'T 'REQUIRE EDGE COLOR=3 SINCE OBJECTS COULD BE IN FRONT OF COLOR=3 BLOCKS, IT LOOKS TERRIBLE.) '#5:HORZ TEXTURES 'HORZ TEXTURES ARE MONOCHROME TO AVOID ABSOLUTELY EVERYTHING IN-GAME BEING Y-MIRRORED: ' - FLOOR HORZ TEXTURES ARE SET AS C1 (ON THE CEILING THEY MATCH BACKGROUND) ' - CEILING HORZ TEXTURES ARE SET AS C2 (ON THE FLOOR THEY MATCH BACKGROUND) ' - TEXTURE PIXELS ON BOTH FLOOR AND CEILING ARE SET AS C3 #1:PALETTES 00200A1200010A2A00153F2A00203C2A 0024382A0020242A0001022A0000012A #2:TILES 00000000000000000000000000000000 382424242424241C3C38383838383820 FFBFBFFFF3FFFFFF006B6B606F0F606D FF00FFFFFFFFFFFFFFFF9999A5A59981 0055555555555555FFAAAAAAAAAAAAAA 18FFFF7E24183C7EFFFFFFFFFFE7C381 FFE484FF9C90FFC4007B7B006F6F007B 007E7E7E7E7E7E7EFFFFD5D5D5D5D5D5 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 000000000000000000183C7E18181800 00000000000000000010307E7E301000 0000000000000000001818187E3C1800 000000000000000000080C7E7E0C0800 00000000000000000000000000000000 0000FE81817F00000000FFFEFE800000 00000000000000000000000000000000 E7000081DBFFFFFFFFFFFFFFFFE7C381 00000000000000000000000000000000 00387C7C7C7C7800FFFFFFDFFFFF9FFF 041C1C1C1C1C1C3C3C38383838383820 FFFFDBFFDBFFFFFFFFFFFF00FFFFFFFF 00666600006666000000000000000000 44FF444444FF44440000000000000000 00003C7E7E3C00000000000000000000 00000000000000000000183C3C180000 7EFFFFFFFFFFFF7E0000183C3C180000 00666600006666009900009999000099 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 EE999977EE999977FFEEEE88FFEEEE88 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFC783A38383E7FFFFFFFFDFFFFF9FFF FFDF9F1F9FDFFFFF0F7B7DFA7D7B7F0F FFFBF9F8F9FBFFFFF0DEBE5FBEDEFEF0 #3:TILEMAP 00004040000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000004040404 04040505040404040404040404040505 04040404040400000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 02020202020202020202000000000000 00000000000000000000000000000000 00000000000000000000000004040000 00000000000000000000000000000000 00000000040400000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000202000000000000 00000000000002020202020202020202 02020202030302020202020205050000 00000000000000000000000000000000 00000000050504040404040404040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000202020200000000 00000000000002020000000000000000 00000000000000000000000004040000 00000000000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000000020200000000 000000000000020200001C0000000000 000000001C0000000000000001010000 00000000000000001C00000000000000 00000000010100000000000005050000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000000020200000000 00000000000002020000000000000000 00000000000000000000000004040000 00000000000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 02021303020202022525020202021303 02020202000002020000000000000202 02020202030302020202020215050000 00000000000000000000000000000000 00000000150504040404040404040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000000000000000000 00000202000002020000000000000202 00000000000000000000000004040000 00000000000000000000000000000000 00000000040400000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000303 00000000000000000000000000000000 00000303020202020000000000000202 02020202000000000000000004040404 04040505040404041101040404040505 04040404040400000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000000000000000000 00000202000000000000000000000000 00000202000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000000000000000000 000001010000000000001C0000000000 00000202000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000202 00000000000000000000000000000000 00000202000000000000000000000000 00000202000000000000000000000000 00000000150500001C00000015050000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020202020202020202020303 00000000000000000000000000000000 00000303020202020202130302020202 02020202000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200000000000002020202 00000000000000000000000000000000 00000202000000000000000000000000 00000000000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200001C00000002020202 02021303020202021101020202021303 02020202000000000000000000000000 00000000000000000000040404040404 04040404040400000000000004040404 04040000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200000000000002020000 00000000020200000000000002020000 00000000000000000000000000000000 00000000000000000000040400000000 05250000000000001C00000000000000 04040000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020202021101020202020000 00000000030300001C00000003030000 00000000000000000000000000000000 00000000000000000000040400000000 04040404040400000000000004040404 04040000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200000000000002020202 02020202020200000000000002020000 00000000000000000000000000000000 00000000000000000000040400000000 04040404040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200001C00000002020000 00000000020200000000000002020000 00000000000000000000000000000000 00000000000000000000040400000000 04040404040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200000000000000000000 1C000000030300001C00000003030000 00000000000000000000000000000000 00000000000000000000040404040404 04040404050500001C00000005050000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200000000000002020000 00000000020200000000000002020000 00000000000000000000000000000000 00000000000000000000000000000000 00000000040400000000000004040000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020200000000000002020202 02020202020202021101020202020202 02020202000000000000000000000000 00000000000000000000000000000000 00000202040405051101050504040202 00000000000000000000000000000000 00000000000000000000000000000606 06060606060606060606060606060606 06060000030300001C00000003030202 00000000000000000000000000000000 00000202000000000000000000000000 00000000000000000202020202020202 03030202000000000000000000000202 03030202020202020202000000000000 00000000000000000000000000000606 00000000000000001A00000000000000 06060000020200000000000002020202 00000000000000000000000000000000 00000303000000000000000000000000 00000000000000000202000000000000 00000000000000000000000000000000 00000000000000000202000000000000 00000000000000000000000000000606 00000000000000000000000000000000 06060000020200000000000002020202 000000001C000000000000001C000000 00000202000000000000000000000000 00000000000000001303000000000000 00000000000000000000000000000000 00000000000000001303060606060606 06060606060606060606060606060606 00000000000000000000000000000000 06060000020200000000000000000202 00000000000000000000000000000000 00000202000000000000000000000000 00000000000000000202000000000000 00000000000000000000000000000000 00000000000000000000060600000000 00000000000000000000000000000606 00000000000000000000000000000000 06060000020200000000000000000101 00000000000000000000000000000000 00000303000000000000000000000000 00000000000000000202000000001C00 00000000000000001C00000000000000 00001C00000000000000010100000000 00000000000000000000000000000101 00000000000000000000000000000000 07070000020200000000000000000202 00000000000000000000000000000000 00000202000000000000000000000000 00000000000000000202000000000000 00000000000000000000000000000000 00000000000000000000060600000000 00000000000000000000000000000606 00000000000000000000000000000000 06060000020200000000000002020202 000000001C000000000000001C000000 00000202000000000000000000000000 00000000000000001303000000000000 00000000000000000000000000000000 00000000000000001303060606060606 00000000000000000606060606060606 00000000000000000000000000000000 06060000020200000000000002020202 00000000000000000000000000000000 00000303000000000000000000000000 00000000000000000202000000000000 00000000000000000000000000000000 00000000000000000202000000000606 06060000000006060606000000000606 00000000000000000000000000000000 06060000020200000000000002020202 00000000000000000000000000000000 00000202000000000000000000000000 00000000000000000202020225050202 02020202000000000000000000000202 02022505020202020202000000000000 06060000000006060000000000000606 00000000000000000000000000000000 06060000250500001C00000025050202 02020202020202021101020202020202 02020202000000000000000000000000 00000000000000000000000000000000 00000202060606061101060606060202 00000000000000000000000000000000 06060000000006060000000000000606 06060606000006060606000006060606 06060000020200000000000002020202 02020202020200000000000002020000 00000000000000000000000000000000 00000000000000000000000000000000 00000000060600000000000006060000 00000000000000000000000000000000 06060000000006060000000000000000 00000606060606060606060606060000 00000000020200000000000002020202 02020202020200000000000002020000 00000000000000000000000000000000 00000000000000000000000000000000 00000000060600001C00000006060000 00000000000000000000000000000000 06060000000006060000000000000000 00000000000000000000000000000000 00000000020200000000000002020000 00000000020200000000000002020000 00000000000000000000000000000000 00000000000000000000000000000000 00000000060600000000000006060000 00000000000000000000000000000000 06060000000006060000060606060606 06060606060606060606060600000000 00000000020200000000000000000000 1C000000030300001C00000003030000 00000000000000000000000000000000 00000000000000000000000000000000 00000000060600000000000006060000 00000000000000000000000000000000 06060000000006060606060600000606 00000606000006060000060606060000 00000000020200000000000002020000 00000000020200000000000002020000 00000000000000000000000000000000 00000000000000000000000000000000 00000000060600000000000006060000 00000000000000000000000000000000 06060000000000000606000000000000 00000000000000000000000006060000 00000000020200001C00000002020202 02020202020200000000000002020000 00000000000000000000000000000000 00000000000000000000000000000000 00000000060600001C00000006060000 00000000000000000000000000000000 06060000000000000101000000000000 00000000000000000000000007070000 00000000020200000000000002020202 02020202020200000000000002020202 02020202020202020202020202021303 02020202020200000000000000000000 00000000060600000000000006060000 00000000000000000000000000000000 06060000000000000606000000000000 00000000000000000000000006060000 00000000020200000000000000000000 00000000000000000000000000000000 00000000000002020000000000000000 00000000030317071707000000000000 00000000060600000000000006060000 00000000000000000000000000000000 06060606060606060606060600000606 00000606000006060000060606060000 00000000020200000000000000000000 1C000000000000000000000000000000 1C000000000001010000000000000000 00000000160600002606000000000000 00000000060600000000000006060000 00000000000000000000000000000000 00000000000000000000060606060606 06060606060606060606060600000000 00000000020200000000000000000000 00000000000000000000000000000000 00000000000002020000000000000000 00000000030317071707000000000000 00000000060600001C00000006060000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000020202020202020202020202 02020202020202022505020202020202 02020202020202020232020202021303 02020202020200000000000000000000 00000000060600000000000006060000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000017071707030300000000 02020000000002220000000002020000 00000000000000000000060606060606 06060606060606061101060606060606 06060606060606060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000026060000160600000000 02020000000002020000020202020000 00000000000000000000060618001800 18001800060600000000000006061900 19001900190006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000017071707030300000000 00000000000002020202020200000000 00000000000000000000060618001800 18001800010100001C00000001011900 19001900190006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000020202020232 02020202020202020000000000000000 00000000000000000000060618001B00 18001800060600000000000006061900 19001900190006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000002020000 00000202000000000000000000000000 00000000000000000000060618001800 18001800060600000000000006061900 19001900190006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000002020000 00000202000000000000000000000000 00000000000000000000060606060606 06060606060600000000000006060606 06060606060606060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000002020202 02020202000000000000000000000000 00000000000000000000060600000000 00000000060600000000000006061D00 1D001D001D0006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060600000F00 00000000010100001C00000001011D00 1D001A001D0006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060600000000 00000000060600000000000006061D00 1D001D001D0006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060606060606 06060606060600000000000006060606 06060606060606060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060600000000 00000000000000000000000000000000 00000000000006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060600001C00 00000000000000001C00000000000000 00001C00000006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060600000000 00000000000000000000000000000000 00000000000006060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000060607070606 06060707060606060707060606060707 06060606070706060000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #4:VERT TEXTURES FFFFFFFFFFF6E6C6FFB6FFFFBFFFFFFF FFFFFFFFFFFF7F3FFFDFFFFFFFFFF6F3 FFFFFFFFFFFFFFFFFFFFFF80BFBFDFDF FFFFFFFFFFFFFFFFFFFFFF3BBFBF6D79 80B4A0AF8FAC8C8CFFCBDFD0F7D7F7F7 009500FFFF000000FF6AFF00FFFFFFFF 00D400FFFF000000FF2BFF00FFFFFFFF 009602FAF81A1818FF69FD05F7F5F7F7 FFABD5ABD5ABD5ABFFFFFFFFFFFFFFFF FFFFFFFFFFFFD5EA3C7E7E3C007F7F7F AAD5AAFFFFFFEBF5FFFFFFFF00BFBFBF AB57ABFFFFFFFFFFFEFEFEFE007E7E00 FFBF8C86BFFFFFFFFFE7F3F9FCFCFCFC FFFF0000FFFCF3EEFFFFFFFF00030C11 FFFF0000FF3FCF77FFFFFFFF00C03088 FFFD3060FDFFFFFFFFE7CF9F3F3F3F3F E6F6FFFFFFF0E0E0FFFFFFFFF0EFDFDF 7FFFFFFFFFFF7F7FF3F5F5F6F677B7B7 FFFFFFFFFFFFFFFFEEEEB5F5FB7F6EBF FFFFFFFFFFFFFFFFF9F5B5EDEDDDDDBD AC8C8CAC8C8CAC8CD7F7F7D7F7F7D7F7 0000000000F0F0F0FFFFFFFFFFFF9F9F 0000000000000000FFFFFFFFFFFFFFFF 1A18181A18181A18F5F7F7F5F7F7F5F7 D5ABD5FFFFFFFFFFFFFFFFFF80BEFFFF FFFFFFFFFFFFFFFF7F007D7D7D003F7F EBF5EBF5FFFFFFFFBF3FBFBFBF00E3F7 FFFFFFFFFFFFFFFF267676762600FCFE FFFFFFFFFFFFFFFFF8F8F8F8F0F0F0F0 DFDEBEBFBE7E7F5220214140418180AD FB7B7DFD7D7EFE4A04848202828101B5 FFFFFFFFFFFFFFFF1F1F1F1F0F0F0F0F C081C081C0FFC081BFFEBFFEBF80BFFE E0C1E0C1E0C1E0C11F3E1F3E1F3E1F3E E0C1E0C1E0FFE0C11F3E1F3E1F001F3E E1C3E1C3E1C3E1C31E3C1E3C1E3C1E3C 8080808080808080FFFFFFFFFFFFFFFF 010301FF3F0F0301FEFCFE00C0F0FCFE 80C080FFFCF0C0807F3F7F00030F3F7F 0000000000000000FFFFFFFFFFFFFFFF FFC0808A958A8A9580BFFFFFFFFFFFFF FF0100804080804000FEFFFFFFFFFFFF FFC1808080808080003E7F7F7F7F7F7F FFC3818181818181003C7E7E7E7E7E7E FF80889494889494FFFFF7EBEBF7EBEB FF80889494889494FFFFF7EBEBF7EBEB FF80889494889494FFFFF7EBEBF7EBEB FF80889494889494FFFFF7EBEBF7EBEB C081C081C081C081BFFEBFFEBFFEBFFE E0C1E0FFE0C1E0C11F3E1F001F3E1F3E E0C1E0C1E0C1E0C11F3E1F3E1F3E1F3E E1C3E1FFE1C3E1C31E3C1E001E3C1E3C 8080808080808080FFFFFFFFFFFFFFFF 030F3F3F7F7FFFFFFFFFFEFFFEFEFF92 C0F0FCFCFEFEFFFFFFFF7FFF7F7FFF49 0000000000000000FFFFFFFFFFFFFFFF 8AC0FFC180808080FFBF80BEFFFFFFFF 8001FFC180808080FFFE003E7F7F7F7F 80C1FFC0808A958A7F3E003F7F7F7F7F 81C3FF03018141817E3C00FCFEFEFEFE 8894948894948894F7EBEBF7EBEBF7EB 8894948894948894F7EBEBF7EBEBF7EB 9494889494889494EBEBF7EBEBF7EBEB 9494889494889494EBEBF7EBEBF7EBEB 8080808080808080FFFFFFFFFFFFFFFF 000307070F0B0F0FFFFCF8FFFFFBFFFF 00F0F8F8F8F8F8F8FF0F07E7E7E7E7F7 0000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFF8F0F0F0F0FFFCF8FFFFFBFFFF FFFFFF1F1F1F1F0FFF0F07E7E7E7E7F7 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFBFFFFFBFFFF0 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFE00 FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F3F FFFFFFFFFFFFFFFFFFFFFDFFFFFDFFFF FFFFFFFFFFFFFFFFFFFFBFFFFFBFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFC FFFFFFFFFFFFFFFFFFFFFFFFFFFF7F00 FFFFFFFFFFFFFFFFFFFFFDFFFFFDFF0F 8080808080808080FFFFFFFFFFFFFFFF 0F0F070000000000F1FFFFFFFFFFFFFF F0F0E00000000000FFFFFFFFFFFFFFFF 0000000000000000FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FEF0F8FFFFFFFFFFF1FFFFFFFFFFFFFF 0F0F1FFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFEB0F3F3B3F3F3E3C3 FFFFF3E3C383030300FEFEFEFEFEFEFE FFFFFFFFFFFFFFFF3F7F4F4753595C5E FFFFFFFFFFFFFFFFFDFFFFFDFFFFFD7F FFFFFFFFFFFFFFFFBFFFFFBFFFFFBFFE FFFFFFFFFFFFFFFFFCFEF2E2CA9A3A7A FFFFCFC7C3C1C0C0007F7F7F7F7F7F7F FFFFFFFFFFFFFF7F0DCFCFCDCFCFC7C3 FFFFFFFFFFFFFFFFFFFFBFFFFFBFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFDFFFFFDFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFEFCFE00C0F0FCFE FFFFFFFFFFFFFFFF7F3F7F00030F3F7F FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 80B0A08F8FAC8C8CFFCFDFF0F7D7F7F7 031B0BE3E36B6363FFE7F71FDFD7DFDF E0ECE8E3E3EBE3E3FFF3F7FCFDF5FDFD 000602F8F81A1818FFF9FD07F7F5F7F7 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFF3FFFFBFFFFFBFFFFFC080 FFFFFFFFFFFEFFFFFFFFFFFFFFFF0000 FFFFFFFFFF7FFFFFFFFFFFFFFFFF0000 FFFFFFFFFFCFFFFFFDFFFFFDFFFF0301 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FCF0C1C08181006DFFFFFEFFFEFEFF92 3F0F8303818100B6FFFF7FFF7F7FFF49 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 8C8C8C8C8C8CAC8CF7F7F7F7F7F7D7F7 6363636363636B63DFDFDFDFDFDFD7DF E3E3E3E3E3E3EBE3FDFDFDFDFDFDF5FD 1818181818181A18F7F7F7F7F7F7F5F7 #5:HORZ TEXTURES 00000000000003030000000000000000 000000000000C0C00000000000000000 00000000000003030000000000000000 000000000000C0C00000000000000000 01010101010101FF0000000000000000 80808080808080FF0000000000000000 01010101010101FF0000000000000000 80808080808080FF0000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 03030000000000000000000000000000 C0C00000000000000000000000000000 03030000000000000000000000000000 C0C00000000000000000000000000000 FF010101010101010000000000000000 FF808080808080800000000000000000 FF010101010101010000000000000000 FF808080808080800000000000000000 0000071F3F7FFFFF0000000000000000 0FFFFFFFFFFFFFFF0000000000000000 F0FFFFFFFFFFFFFF0000000000000000 0000E0F8FCFEFFFF0000000000000000 00000000000000000000000000000000 0000000000000000030C132F5F5FBFBF 0000000000000000C030C8F4FAFAFDFD 00000000000000000000000000000000 00000000000003030000000000000000 000000000000C0C00000000000000000 00000000000003030000000000000000 000000000000C0C00000000000000000 01010101010101FF0000000000000000 80808080808080FF0000000000000000 01010101010101FF0000000000000000 80808080808080FF0000000000000000 FFFF7F3F1F0700000000000000000000 FFFFFFFFFFFFFF0F0000000000000000 FFFFFFFFFFFFFFF00000000000000000 FFFFFEFCF8E000000000000000000000 00000000000000000000000000000000 0000000000000000BFBF5F5F2F130C03 0000000000000000FDFDFAFAF4C830C0 00000000000000000000000000000000 03030000000000000000000000000000 C0C00000000000000000000000000000 03030000000000000000000000000000 C0C00000000000000000000000000000 FF010101010101010000000000000000 FF808080808080800000000000000000 FF010101010101010000000000000000 FF808080808080800000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 050A152B57AF5FBF0000000000000000 AF7FFFFFFFFFFFFF0000000000000000 F5FEFFFFFFFFFFFF0000000000000000 A050A8D4EAF5FAFD0000000000000000 0000000000000303C0C0000000000000 000000000000C0C00303000000000000 0000000000000303C0C0000000000000 000000000000C0C00303000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 BF7FFF7FFFFFFFFF0000000000000000 FFFFFFFFFFFFFFFF030C132F5F5FBFBF FFFFFFFFFFFFFFFFC030C8F4FAFAFDFD FDFEFFFEFFFFFFFF0000000000000000 0303000000000000000000000000C0C0 C0C00000000000000000000000000303 0303000000000000000000000000C0C0 C0C00000000000000000000000000303 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFF7FFF7FBF0000000000000000 FFFFFFFFFFFFFFFFBFBF5F5F2F130C03 FFFFFFFFFFFFFFFFFDFDFAFAF4C830C0 FFFFFFFFFEFFFEFD0000000000000000 0000000000000303C0C0000000000000 000000000000C0C00303000000000000 0000000000000303C0C0000000000000 000000000000C0C00303000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 BF5FAF572B150A050000000000000000 FFFFFFFFFFFF7FAF0000000000000000 FFFFFFFFFFFFFEF50000000000000000 FDFAF5EAD4A850A00000000000000000 0303000000000000000000000000C0C0 C0C00000000000000000000000000303 0303000000000000000000000000C0C0 C0C00000000000000000000000000303 #6:PALETTES 000000000001052A0000002A0000002A 0000002A0000002A0000202A00243C2A