'P L A N E T A R I U M - S P 4 C E B A R 'S A T E L L I T E C O N S T A N T S DIM GLOBAL SATELLITES(15,4),PALETTES(15) FOR I=0 TO 9 READ PALETTES(I) NEXT I 'PALETTES DATA 6,5,1,0,4,3,3,2,2,7 'SATELLITES(ID,TYPE) 'TYPE: X,Y,RADIUS (*10^6 M) (MAY BE OBSOLETE), RADIUS OF ORBIT (*10^12 M), MASS (*10^24 KG) 'WRITE DATA TO ARRAY FOR I=0 TO 15 FOR J=0 TO 2 READ V IF V<0 THEN EXIT V=V*10^(6*2^J) SATELLITES(I,J+2)=V NEXT J IF V=-2 THEN EXIT NEXT I 'SATELLITE DATA: RADIUS,RADIUS OF ORBIT,MASS 'STARS DATA 696.3, 0, 1988400 'PLANETS DATA 2.440, 0.0579, 0.330 DATA 6.052, 0.1082, 4.87 DATA 6.371, 0.1496, 5.972 DATA 3.390, 0.228 , 0.642 DATA 69.91, 0.7883, 1900 DATA 58.2 , 1.427 , 568 DATA 25.4 , 2.871 , 86.8 DATA 24.6 , 4.498 , 102.4 'MOONS DATA 1.738, 0.0003844, 0.0735 'MANMADE SPACE OBJECTS DATA -2 'V A R I A B L E S 'GRAVITATIONAL CONSTANT GLOBAL G G=6.67384*10^(-11) 'ZOOM Z=32 'SCROLL X=-80 Y=-66 'FOCUS (ID) F=0 'S E T U P PALETTE 0,0,,, PAUSE OFF GAMEPAD 1 'M A I N L O O P DO CALL CAM(X,Y,Z,F) CALL SPACE(X,Y,2^Z,F) WAIT VBL LOOP 'S P A C E P R O C E S S O R SUB SPACE(X,Y,Z,F) X1=0 Y1=0 X2=0 Y2=0 'SUN CALL SAT(X,Y,Z,F,0,0,0) FOR I=1 TO 8 'PLANETS CALL ORB(I,X1,Y1,0,0) CALL SAT(X,Y,Z,F,I,X1,Y1) IF I=3 THEN 'EARTH'S MOON CALL ORB(9,X2,Y2,X1,Y1) CALL SAT(X,Y,Z,F,9,X2,Y2) END IF NEXT I CALL Z_SORT END SUB 'O R B I T C A L C U L A T I O N S SUB ORB(I,X1,Y1,X2,Y2) IF SATELLITES(I,3)>0 THEN 'ORBIT ROTATIONAL VELOCITY VRO=0.000001*SQR(G*SATELLITES(0,4)/SATELLITES(I,3)) ELSE VRO=0 END IF 'MAIN POSITION CALCULATION X1=X2+SATELLITES(I,3)*COS(TIMER*VRO) Y1=Y2+SATELLITES(I,3)*SIN(TIMER*VRO) SATELLITES(I,0)=X1 SATELLITES(I,1)=Y1 END SUB 'S A T E L L I T E S P R I T E D R A W I N G SUB SAT(X,Y,Z,F,I,X1,Y1) 'APPLY SCROLL AND ZOOM TO SPRITE COORDINATES SX=(X1-SATELLITES(F,0))/Z-X-4-2*(I=9) SY=(Y1-SATELLITES(F,1))/Z-Y-4-2*(I=9) 'IF THE SPRITE IS IN FRAME THEN IF SX>=-8 AND SX<=168 AND SY>=-8 AND SY<=137 THEN 'DRAW THE SPRITE WITH ITS PALETTE SCALE=INT(MIN(MAX( INT(SY/40) ,0),2)) SPRITE I,SX,SY,73+INT(SCALE*1.5) SPRITE I PAL PALETTES(I) SIZE INT(SCALE*1.5) ELSE 'REMOVE SPRITE SPRITE OFF I END IF END SUB 'C A M E R A P A R A M E T E R S SUB CAM(X,Y,Z,F) ADD X,LEFT(0)-RIGHT(0) ADD Y,UP(0)-DOWN(0) ADD Z,(BUTTON(0,1)-BUTTON(0,0))*0.125 ADD F,-PAUSE,0 TO 9 NUMBER 0,0,2^Z,20 NUMBER 0,1,X,8 NUMBER 10,1,Y,8 NUMBER 19,1,F,1 END SUB 'S P R I T E O V E R L A Y ( D E P T H S O R T E R ) SUB Z_SORT COPY $FE00,36 TO $A000 NEW=0 FOR I0=0 TO 8 HIGHEST=-1 ID=-1 FOR I1=0 TO 8 V=PEEK($A001+I1*4) IF V>=HIGHEST THEN HIGHEST=MAX(HIGHEST,V) ID=I1 END IF NEXT I1 SP=ID*4 COPY $A000+SP,4 TO $FE00+NEW FILL $A000+SP,4 ADD NEW,4 NEXT I0 END SUB #1:MAIN PALETTES 003F0906003438200007070300383434 00383834003E3E39003E3E3C002A152A #2:MAIN CHARACTERS 00000000000000000000000000000000 187E7EFFFF7E7E18187E7EFFFF7E7E18 00000000000000000000000000000000 18000EF2421C2018247EF10DBDE35E24 00000000000000000000000000000000 18000EF2421C2018247EF10DBDE35E24 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 80000000000000008000000000000000 180067CFCE8400183C7E9830317B7E3C 108848987000000070F8F8F870000000 18000EF2421C2018247EF10DBDE35E24 180067CFCE8400183C7E9830317B7E3C 108848987000000070F8F8F870000000 181C3E7EFE3C1C003C7EE3C3C3C36E3C 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 187C327FE7763C1818227C81FE186618 030F3F3F1F1FFFFE020F3E006F710001 C0F0F0F4FEE41DFF40F01C0CE01EE706 00000103070F1F0300000103060F1E3F 0F7FFFFFFFFFFFFF0860F8E7089F7FFF F0FEFFFFFCFFF8F8301E3FFFC318FFFF 000080406070F8FC000080C0E0F0388C 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FFFE3F1F3F1F0F033CC17F7E003F0C02 DF1F7CFAF8FCF0C032F582062CFC7040 3F1F0F0F1F7FFFFF0060707FE48F0300 FFFFFFFEF0FFD3FE000004814FC0EC01 FFFFFE0007FF8307800001FFF8007FFE FCEEEEFEFFFFFFFF0CFEFC8073EF8F3F 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3F3F3FFF7F7F7F3FFFFFEFE17C7F7700 CFE0F0F8FCFFFFFFF0FFFFFF3F80F860 FF07070F7FFF7F1F00FCFCF0800780E0 FFFFF3E3EFFECEDC7FFFFFFFF0863EEC 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3F1F05000000000000000A0703010000 FFFFFF0F0707070F000000FFFFFF780C FFFFFFFFFFFFFEF0031FFEFCFFFF3E10 FCF8F0E0C0800000CC1870E0C0800000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 18783263E7763C18087E7EFFFF7E7E10 030F3F3F1F1F3CFC020F3F3F7F7FFFFF C0F0F0E4E604050F40F0FCFCFEFEFFFF 00000103070F1F0300000103070F1F3F 0F7FFFFFFFFFFFFF0860F8FFFFFFFFFF F0FEFFFFFCF8F8F8301E3FFFFFFFFFFF 00008040607078FC000080C0E0F0F8FC 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 FEFE3F1F0F1F0F03FFFF7F7F3F3F0F02 1F1F0C9AF8FCF0C0FFFFFEFEFCFCF040 0303070F0F1F3F3F3F7F7F7FFFFFFFFF FFFFFFF8E0C0C0C0FFFFFFFFFFFFFFFF F8F0000000010307FFFFFFFFFFFFFFFF ECEEEEF6FFFFFFFFFCFEFEFEFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3F3F3FFF7F7F7F00FFFFFFFF7F7F7F3F C0E0F0F8FCFEFFFFFFFFFFFFFFFFFFFF 070707070F0F1F1FFFFFFFFFFFFFFFFF FFFFF3E3E6E6CEDCFFFFFFFFFEFEFEFC 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000003F1F0F0703010000 7F1F0F0F0707070FFFFFFFFFFFFF780C FFFFFFFFFFFFFEF0FFFFFFFFFFFF3E10 DCF8F0E0C0800000FCF8F0E0C0800000