'ADVENTURE ENGINE '- PROCEDURAL TERRAIN '- STRUCTURES '- PLAYER CAN MINE THE TERRAIN, EDITS CAN BE STORED IN PERSISTENT RAM 'TO DO '- GENERATE Y LIMIT FOR PLAYER WHEN IT STANDS ON A WEDGE '- IMPROVE THE CHUNKS LOADING '- MAKE MORE STRUCTURES '- SAVE THE TERRAIN EDITS TO PERSISTENT RAM '- INTEGRATE THE STRUCTURES IN BG 0 (WITH SPECIAL CHARACTERS) 'MORE IDEAS 'CRAFT VEHICLES '- OFFROAD CRUISER '- AIROPLANES AND HELICOPTERS '- ROCKETS 'CRAFT WEAPONS 'MAKE 'BG REFRESH CHUNK SIZE IS 8X8 (CAN REFRESH UNNOTICED) 'BASED ON A CHUNK-BASED BG-SCROLL REFRESH SYSTEM 'PROCEDURAL TERRAIN 'SPECIAL BG FILE TYPE: '- STRUCTURES FILE ' - FOR EACH STRUCTURE: ' - DEFINE THE SIZE OF THE STRUCTURE WITH THE FIRST 2 OR MORE BYTES ' (OR 1 BYTE: (0 TO 15)*16) ' - DEFINE THE CHARACTERS AND ATTRIBUTES OF EACH PIXEL IN THE STRUCTURE '- BG FILE ' - COORDINATES TO SPAWN STRUCTURES 'STRUCTURES 'STORED LIKE BG DATA (BUT WITH A HEADER THAT CONTAINS THE SIZE) 'A PROCEDURAL FUNCTION GENERATES COORDINATES TO SPAWN STRUCTURES 'POSSIBLE STRUCTURES (MAKE IT FEEL ALIVE, NOT EMPTY AND LONELY: I CAN SPAWN MANY STRUCTURES) '- VILLAGE HOUSES (MULTIPLE HOUSES IN ONE STRUCTURE), MAKE A FEW TYPES THAT CAN BE REPEATED '- CITY HOUSES (MULTIPLE HOUSES IN ONE STRUCTURE), MAKE A FEW TYPES THAT CAN BE REPEATED '- AN INDUSTRIAL SITE (WITH FACTORY BUILDINGS AND POWER PLANTS) '- TREE (VERY IMPORTANT) '- FOREST (MULTIPLE TREES IN ONE CHARACTER '- A SPACESHIP 'REUSE CHARACTERS TO MAKE MORE BUILDINGS 'ADD BIOMES, LINK IT WITH THE STRUCTURE GENERATION 'BIOMES: 'CITY 'RURAL 'MOUNTAIN 'COLD 'HOT 'RADIOACTIVE 'OCEAN 'FUNCTION TO GENERATE TERRAIN 'CHARACTERS '- SURFACE TERRAIN CHARACTERS (USE FLAT ANGLES AND 45 DEG ANGLES, OR USE MORE ANGLES) '- GROUND TERRAIN CHARACTERS 'SEED -> FUNCTION 'DETECT THE SLOPE, TO GET THE RIGHT CHARACTER(S) 'PLAYER-CAUSED TERRAIN MODIFICATIONS: 'MINING: NO DEFINED CHARACTER NEEDED: IT'S MINED 'BLOCK OF DATA COVERS 4X4 CELLS 'BLOCK OF DATA STARTS WITH 3 BYTE COORDINATES (X IS 16-BIT), IT COULD ALSO DEFINE THE CHARACTER (BUILDING MATERIAL OR CHAR 0) 'IT THEN USES ONE BIT PER PIXEL IN THIS BLOCK (LIKE CHARACTER DATA) 'THE NEXT BLOCK OF DATA COULD USE THE HEADER FROM THE PREVIOUS BLOCK (ROLLING STATUS), WITH AN OFFSET VALUE:X+1,Y+1,X-1,Y-1,NULL TO END THE HEADER, I HAVE SPACE LEFT INSIDE THIS BYTE 'GET THE MINE-COORDINATES AND TURN THEM INTO CHUNK COORDINATES 'FIND THE CHUNK IN MEMORY, IF NOT FOUND IT'LL MAKE A NEW CHUNK, 'THE CURRENT CHUNK ADDRESS WILL BE STORED 'MAKE AN INDEX TABLE SO THAT THE GAME CAN QUICKLY FIND THE CHUNK TO WRITE THE MODIFICATIONS TO 'ORE/TEXTURE-ELEMENTS DISTRIBUTION 'THIS IS A PROCEDURAL FUNCTION WITH DEFINED CHARACTERS GAMEPAD 2 SEED=20 RANDOMIZE SEED LASTY=4 GLOBAL LASTY CALL GENERATECHUNK(0) CALL GENERATECHUNK(1) CALL GENERATECHUNK(2) CALL GENERATECHUNK(3) 'LOADED CHUNK LC=0 'CALL SPAWNSTRUCTURE(2,2,0) X=16 Y=0 Y1=0 MX=0 VY=0 VY1=0 SPEED=2 TOOL=2 DO ADD SPEED,BUTTON TAP(0,1)-BUTTON TAP(0,0) DX=LEFT(0)-RIGHT(0) XB=(DX=(X<30)-(X>130)) ADD X,DX*-(NOT(XB))*SPEED IF XB THEN ADD MX,DX*SPEED 'MAKE A REVERSE CHUNK GENERATOR 'CHECKS IF MAP REFRESH IS NECCESSARY 'TRACE MX\8,LC,MX\8>LC MX1=MX\64 S=(1-SGN(MX1))\2 IF MX1>LC THEN MX2=MX1 CALL GENERATECHUNK(MX2+3-S) LC=MX1 ELSE IF MX12 THEN SPRITE 0,X-4,Y,15 SPRITE 0 PAL 2 FLIP (1-DX)\2,0 ELSE SPRITE 0,X,Y,190 SPRITE 1,X+16,Y1,190 SPRITE 2,X+4,0.5*(Y+Y1)-10,163 SPRITE 0 PAL 7 SPRITE 1 PAL 7 SPRITE 2 PAL 6 SIZE 1 FLIP (1-DX)\2,0 END IF SCROLL 0,MX,0 SCROLL 1,MX,0 WAIT VBL LOOP SUB MINE(X,Y) CELL X,Y,0 END SUB SUB GRAVITY(X,MX,Y,VY,SPEED) 'GRAVITY TEX=(X+MX)\8 IF CELL.C(TEX,(Y+8)\8)=0 THEN 'FALL ADD VY,0.1-0.01*(VY*VY) ADD Y,VY*SPEED ELSE IF CELL.C(TEX,(Y+7)\8)=2 OR CELL.C(TEX,(Y+7)\8+1)=2 THEN 'WEDGE CY=(Y\8+(CELL.C(TEX,Y\8)=2))*8 AT=CELL.A(TEX,CY\8+1) \8 MOD 2 CO=CY+((X+MX) MOD 8)*(AT*2-1)+(1-AT)*8 IF INT(Y)CO THEN 'CLIP WEDGE ADD Y,-1*SPEED VY=0 ELSE 'STATIC WEDGE VY=0 END IF ELSE IF CELL.C(TEX,(Y+7)\8)<>0 THEN 'CLIP ADD Y,-1*SPEED VY=0 ELSE 'STATIC VY=0 END IF END SUB SUB SPAWNSTRUCTURE(X,Y,N) BG 1 IF N=0 THEN 'SPRUCE TREE 'CHARACTERS 43,59, FLIP X FLIP 0,0 CELL X,Y,43 CELL X,Y+1,59 FLIP 1,0 CELL X+1,Y,43 CELL X+1,Y+1,59 FLIP 0,0 END IF BG 0 END SUB SUB RANDOM(S,V) V=SIN(S*SIN(S)) V=INT(V*5)\3 'V=INT(V*7-3)\3 'V=SIN(S)MOD 1 'V=RND 'V=INT(V*3-1) 'IF ABS(V)>1 THEN TRACE V ' 'INPUTS: V1,V2,Q1,Q2 'Q1=Q1*V1 'Q2=Q2*V2 'N=((Q1^Q2)*V1)/$FFFFFFFF END SUB SUB GENERATECHUNK(D) 'TRACE D D=D*8 X=D-1 Y=LASTY V=0 R1=0 CALL RANDOM(X,R1) BG FILL D,0 TO D+7,15 CHAR 0 BG 1 BG FILL D,0 TO D+7,15 CHAR 0 BG 0 FOR X=D TO D+7 R2=R1 CALL RANDOM(X,R1) 'TRACE Y,(Y+4)\8,(Y+4)\8<>1 IF (Y+4)\8<>1 THEN R1=ABS(R1)*-SGN(Y-8) 'TRACE -SGN(Y-8) END IF 'TRACE R1,INT(V*7-3) IF R1=R2 OR (R1=-1 AND R2=0) THEN ADD Y,R1 ELSE IF R1=0 AND R2=1 THEN ADD Y,R2 END IF 'ADD Y,-R1*(R1=R2 OR (R1=-1 AND R2=0))-R2*(R1=0 AND R2=1) IF X MOD 4=0 THEN CALL SPAWNSTRUCTURE(X,Y-2,0) 'TRACE X,Y BG FILL X,Y TO X,15 CHAR 3 FOR I=Y TO 15 TINT X,I FLIP INT(RND*2),INT(RND*2) NEXT I FLIP -(R1>0),0 CELL X,Y,-(R1=0)-2*(R1<>0) 'TRACE Y 'WAIT 10 NEXT X LASTY=Y END SUB SUB DEBUG(N) SPRITE 63,150,N,189 SPRITE 63 PAL 7 END SUB SUB TRASH IF 0 THEN X=0 R2=INT(RND*12)+2 FOR X=0 TO 5 R1=R2 R2=INT(RND*12)+2 DY=R2-R1 'TRACE ABS(DY),ABS(DY)<3 C=-(ABS(DY)<3)-2*(ABS(DY)>=3) FLIP -(ABS(DY)>=3 AND DY>0),0 'CELL X*4,R,1 FOR I=0 TO 3 X1=X*4+I Y1=R1+I*DY*0.25 BG FILL X1,Y1 TO X1,15 CHAR 3 CELL X1,Y1,C NEXT I FLIP 0,0 NEXT X END IF IF 0 THEN TEX=(X+MX+2)\8 TEY=((Y+8)\8) CH=CELL.C(TEX,TEY) CH2=CELL.C(TEX,TEY+1) AT=CELL.A(TEX,((Y+4)\8)) \8 MOD 2 IF CH=0 THEN ADD VY,0.1-0.01*(VY*VY) ADD Y,VY*SPEED 'ADD VY,(5-VY) TRACE "FALL" ELSE IF CH=1 THEN TRACE "FLAT" VY=0 ELSE IF CH=2 THEN VY=0 TRACE "WEDGE" 'FIGURE OUT IF THE CURRENT X AND Y ARE FREE C1=AT*-8+AT*2-1 CO=((Y)\8)*8+C1*((X+MX+4) MOD 8) 'TRACE C1,Y,CO IF Y0 THEN ADD Y,-1*SPEED VY=0 END IF END IF END SUB #1:MAIN PALETTES 0F1814240038340000152A1F002F1A05 1F2A2410003F2A15003F151B003F2A15 #2:MAIN CHARACTERS 00000000000000000000000000000000 7FCC3F8DE7F067A80033C07F9FFFDCF7 0103050F172B0C270000020109177FDF 5E70EBF7A928BB62FFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000001030000000000000103 070F1F3E7CF8F0E0070F1F3F7FFFFFFF 003C3C3C3C000000FFC3C3C3C3FFFFFF 001E1E1E1E000000FFE1E1E1E1FFFFFF 3C3C3C3C3C3C3C3CFFFFFFFFFBFFFFFF AA80AA80AA80AA80D5FFD5FFD5FFD5FF 000000000000008000000000000000FF 18183838381818180008000000000000 00000000000000000000000000000000 FFCDFFB0400020000032004FBFFFDFFF 0103070E1C3870E00000000103070F1F 0086440000500200FFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFCDFFBFF7F3FDFF0032004F9FFFDFFF 00000000000000000000000000000000 FFFDDFDBFFFFBDFFFFFFFFFFFFFFFFFF FFFFFB7FFFCFFF7EFFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000204010104080103050B1E060B17 01000E031A032E23060F111C253C111C 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 102456D873460C24FFFFFFFFFFFFFFFF 912556C863468825FFFFFFFFFFFFFFFF 5E70EBF7A928BB62FFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 0103050F172B0C270000020109177FDF 0040500800808080FCB0A8F4FE808080 00020A10000101013F0D152F7F010101 0F14020700010101300B1D0807010101 00000000000000000000000000000000 00000000000000000000000000000000 FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF 00000204010104080103050B1E060B17 000040208080201080C0A0D07860D0E8 01000E031A032E23060F111C253C111C 800070C058C074C460F08838A43C8838 000103060103060D010204091E040912 80C1E3F6E1E3F7EF010204091E040810 80C0E0F0F8E0F0F80000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00020A10000101013F0D152F7F010101 0040500800808080FCB0A8F4FE808080 0F14020700010101300B1D0807010101 F02840E0008080800CD0B810E0808080 03070D1B000101013C0812247F010101 C3F7EFDF038181813C081020FC818181 FCF0B8DCFE8080800000402000808080 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 0000000000000F3F0000000000000F3F 000000000000FFFF000000000000FFFF 0000000E1E3EFCFC0000000E1E3EFCFC 00003070E000000000043E7FFFFF7E00 00000000000000000000060EFC800000 00000000000000000000000000000000 000000000000031F000000000000031F 000000000000FFF8000000000000FFFF 000000000000FE1C000000000000FEFC 00000000000000000000000000000000 000038787100000000013F7FFFFF7F00 00001F00FE00000000FFFFFFFFFFFE00 003D38327C00000000C0C0C080000000 000010C0000000000000000000000000 000000000000000000000000000103FF 00000000000000000000000000E0F0F8 7FFFFF7F000000007FFFFF7F00000000 8F0787C200000000FFFFFFFE1C0C0000 F8F0C00000000000F8F0C00000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 7FFFFFFF3F0000007FFFFFFF3F000000 F0FFE1C3FF000000FFFFFFFFFF000000 3860C08000000000F8E0C08000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 007F40201F000000077F7F3F1F000000 00FF0102FC000000F8FFFFFEFC000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 003D38327C00000000C0C0C080000000 000010C0000000000000000000000000 060E0070F8D8F870070F1F77FCF8F870 0000000E1F1B1F0EF0F0F8EE3F1F1F0E 00000000000000000000000000000000 0003000000000000003F3F1F07000000 00C0F0780000000000C0F0F8F8000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FF818181818181FF00818181818181FF 3C7EE7C3C3E77E3C3C7EFFFFFFFF7E3C 0000000000000000FF00000000000000 #3:MAIN BG 00001410000000000000000000000000 00000000000000000000000000000A07 0A070A0700000E070000000000002B00 2B0800002C002C080000000008040904 090C080C00000A070A070A0700000D07 0000000000003B003B0800003C003C08 0000000009040B040B0C090C00000A07 0A070A0700000D070000000000000000 0000000000000000000000000B040B04 0C040B0C00000A070C070A0700000D07 00000000000000000000000000000000 00000000000000000000000000000000 00000A070A070A070A070A0700000000 00000000000000000000000000000000 000000000000000000000A070A070A07 0A070A07000000000000000000000000 00000000000000000000000000000000 00000A070A070A070A070A0700000000 00000000000000000000000000000000 000000000000000000000A070A070A07 0A070A07000000000000000000000000 00000000000000000000000000000000 00000A070A070A070A070A0700000000 00000000000000000000000000000000 000000000000000000000A070A070A07 0A070A07000000000000000000000000 00000000000000000000000000000000 00000A070A070A070A070A0700000000 00000000000000000000000000000000 000000000000000000000A070A070A07 0A070A07000000000000000000000000 00000000000000000000000000000000 00000A070A070A070A070A0700000000 00000000000000000000000000000000 000000000000000000000A070A070C07 0A070A07000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000