REM ********************************************************************* REM * LOWRESNX COMUNITY GAME PROJECT * REM * REM * STARTED ON 05.JUN.2021 * REM * REM * CODE BY: * REM * DAN, * REM * MUSIC BY: * REM * DAN, * REM * SOUND BY: * REM * * REM * SPRITES BY: * REM * * REM * LEVELS BY: * REM * * REM * REM ******************************************************************** GAMEPAD 1 GLOBAL ACT_ACTIVE, ACT_TIMER, ACT_ANIM, ACT_FLIP, ACT_MOVING, ACT_X, ACT_Y, ACT_DX, ACT_DY, ACT_CPU, ACT_SIZEX, ACT_SIZEY, ACT_NR REM DEFINITIONS. THE ACT_VARIABLES SHOULD BE CONSTANTS AND NOT CHANGE ! USED TO DETERMINE THE PLACE IN ARRAY ACT_ACTIVE=0 ACT_TIMER=1 ACT_ANIM=2 ACT_FLIP=3 ACT_MOVING=4 ACT_X=5 ACT_Y=6 ACT_DX=7 ACT_DY=8 ACT_CPU=9 ACT_SIZEX=10 ACT_SIZEY=11 ACT_DIR=12 ACT_NR=13 DIM GLOBAL ACTORS(11,14) REM ACTORS(0,0) CONTAINS NUMBER OF ACTORS. USE (1+,ACT_VAR) IN A LOOP REM ACT_CPU: SET TO 1 IF CONTROLLED BY THE SCRIPT, OR SET TO 0 IF CONTROLLED BY THE JOYPAD REM ACT_MOVING - USE THIS TO DETERMINE IF ACTOR IS MOVING, FLYING, JUMPING, FALLING, ETC ETC REM ACT_MOVING 0= STANDING, 1=MOVING LEFT/RIGHT, 2=FALLING REM ACT_SIZEX _SIZEY - WHEN MULTI-SIZED SPRITES ARE USED, DO THE CORRECT COLLISION DETECTION REM ACT_NR = USED FOR E.G. IDENTIFY THE ACTOR NR (MULTIPLE PLAYERS OR MONSTERS) ACTORS(0,0)=10 for x=1 to 10 ACTORS(x,ACT_ACTIVE)=1 ACTORS(x,ACT_CPU)=0 ACTORS(x,ACT_X)=x*8 ACTORS(x,ACT_Y)=0 ACTORS(x,ACT_DIR)=0 ACTORS(x,ACT_MOVING)=0 ACTORS(x,ACT_FLIP)=0 ACTORS(x,ACT_SIZEX)=8 ACTORS(x,ACT_SIZEY)=8 ACTORS(x,ACT_DY)=0.05*x ACTORS(x,ACT_DIR)=0 ACTORS(x,ACT_ANIM)=0 ACTORS(x,ACT_TIMER)=TIMER next x MAINLOOP: MAINGAMEINIT: BG COPY 0,0,32,32 TO 0,0 MAINGAMELOOP: FOR ACT=1 TO ACTORS(0,0) ACTORS(ACT,ACT_DIR)=0 TEXT 0,0,STR$(ACTORS(ACT,ACT_MOVING)) X=ACTORS(ACT,ACT_X) Y=ACTORS(ACT,ACT_Y) SX=ACTORS(ACT,ACT_SIZEX) SY=ACTORS(ACT,ACT_SIZEY) IF ACTORS(ACT,ACT_CPU)=0 THEN TMP=ACTORS(ACT,ACT_TIMER) IF TIMER-TMP>=10 THEN ACTORS(ACT,ACT_TIMER)=TIMER ACTORS(ACT,ACT_ANIM)=(ACTORS(ACT,ACT_ANIM)+1) MOD 2 END IF REM IF ACTOR IS STANDING OR MOVING THEN ALLOW LEFT/RIGHT MOVEMENT IF ACTORS(ACT,ACT_MOVING)=0 OR ACTORS(ACT,ACT_MOVING)=1 THEN ACTORS(ACT,ACT_MOVING)=0 IF RIGHT(0) THEN COL1=CELL.C(INT((X+SX)/8),INT(Y/8)) COL2=CELL.C(INT((X+SX)/8),INT((Y+(SY-1))/8)) IF COL1=0 AND COL2=0 THEN ACTORS(ACT,ACT_X)=ACTORS(ACT,ACT_X)+1 ACTORS(ACT,ACT_MOVING)=1 ACTORS(ACT,ACT_FLIP)=0 ACTORS(ACT,ACT_DIR)=1 END IF ELSE IF LEFT(0) THEN COL1=CELL.C(INT((X-1)/8),INT(Y/8)) COL2=CELL.C(INT((X-1)/8),INT((Y+(SY-1))/8)) IF COL1=0 AND COL2=0 THEN ACTORS(ACT,ACT_X)=ACTORS(ACT,ACT_X)-1 ACTORS(ACT,ACT_MOVING)=1 ACTORS(ACT,ACT_FLIP)=1 ACTORS(ACT,ACT_DIR)=1 END IF END IF END IF ELSE REM CODE FOR THE CPU MOVEMENT - REUSE THE COL1 AND COL2 FOR LEFT/RIGHT MOVEMENT FROM THE PLAYER CODE END IF REM IF UP(0) THEN REM IF CELL.C(INT((X)/8),INT((Y-1)/8))=0 AND CELL.C(INT((X+7)/8),INT((Y-1)/8))=0 THEN REM Y=Y-1 REM END IF REM END IF REM USE GRAVITY IF THE CELL IS EMPTY - ACT_MOVING=2: IF ACTORS(ACT,ACT_MOVING)=2 THEN COL1=CELL.C(INT(X/8),INT((Y+SY)/8)) COL2=CELL.C(INT((X+(SX-1))/8),INT((Y+SY)/8)) IF COL1=0 AND COL2=0 THEN ACTORS(ACT,ACT_Y)=ACTORS(ACT,ACT_Y)+ACTORS(ACT,ACT_DY) ACTORS(ACT,ACT_DIR)=2 ELSE REM TURN OFF FALLING WHEN A TILE IS UNDER THE CHAR ACTORS(ACT,ACT_MOVING)=0 ACTORS(ACT,ACT_DIR)=0 END IF END IF REM CHECK THE TILES UNDER THE PLAYER COL1=CELL.C(INT(X/8),INT((Y+(SY+1))/8)) COL2=CELL.C(INT((X+(SX-1))/8),INT((Y+SY+1)/8)) IF COL1=0 AND COL2=0 THEN ACTORS(ACT,ACT_MOVING)=2 IF ACT>=1 THEN CALL MAINSPRITE(X, Y, ACTORS(ACT,ACT_DIR), ACTORS(ACT,ACT_ANIM), ACTORS(ACT,ACT_FLIP) , act) NEXT ACT WAIT VBL GOTO MAINGAMELOOP SUB MAINSPRITE(X,Y,SET, AN, FL, NR) REM SET = DEFINE SPRITE ANIMATION NUMBERS REM AN = ANIMATION FRAME IN THE SET (IF ANY) REM FL = DOES THE SPRITE NEED TO BE FLIPPED ? 'USING SPRITES 1,2,3,4 'SET DEFAULT PICTURE FRAMES SP3=0 SP4=0 REM: STANDING, 1 FRAME - UP/DOWN IF SET=0 THEN SP1=64 REM RUNNING 2 FRAME IF SET=1 THEN IF AN=0 THEN SP1=65 ELSE SP1=66 END IF END IF REM - FALLING DOWN IF SET=2 THEN SP1=67 REM SPRITE IS COMPOSED BY UP+DOWN IMAGES IF FL=0 THEN SPRITE NR FLIP 0,0 SPRITE NR,X,Y,SP1 ELSE SPRITE NR FLIP 1,0 SPRITE NR,X,Y,SP1 END IF END SUB #1:MAIN PALETTES 053F2F0000383400003C0C00003F3C00 003F2A15003F2A15003F2A15003F2A15 #2:MAIN CHARACTERS 607C781E7E7E3030607C781E7E7E3030 FFABD5ABD5ABD5FF0000000000000000 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 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3838107C923828280010000000000000 38381070903824440008000000000000 38389070103844820008000000000000 0000107C923828283838000000000000 #3:MAIN BG 00001410010000000000000000000000 00000000000000000000000000000000 00000000000000000000010001000100 01000100010001000100010001000100 01000100010001000100010001000100 00000100010000000000000000000000 00000000000000000000000000000000 00000000000000000000010001000000 01000100010001000100010001000100 01000100010001000100010001000100 01000100010000000000000000000000 00000000000000000000000000000000 00000000000000000000010001000100 01000100010001000100010001000100 01000100010001000100010001000100 00000100010000000000000000000000 00000000000000000000000000000000 00000000000000000000010001000100 01000100010001000100000001000100 01000100010001000100010001000100 01000100000000000000000000000000 00000000000000000000000000000000 00000000000000000000010000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000100000000000000000000000000 01000100010000000000000000000000 00000000000000000000010000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000100000000000000000001000000 01000000000001000000000000000000 00000000000000000000010001000100 01000100010001000100010001000100 01000100010001000100010001000100 01000100000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000