TGC Codebase Backup



Fun 3D Platformer. by Scarab_13

1st May 2008 20:37
Summary

A basic 3D jump and run platformer with a timer. If anyone has any comments i'd be glad to hear them. Btw, im kind of a self taught coder, i've learned by example mostly so this is



Description



Code
                                    ` This code was downloaded from The Game Creators
                                    ` It is reproduced here with full permission
                                    ` http://www.thegamecreators.com
                                    
                                    `MY CODE IS IN CAPS
sync on
sync rate 40
START:
hide mouse
RANDOMIZE TIMER()
OBJECTS AS INTEGER= 331
MOREOBJECTS AS INTEGER= 179
PNTS AS INTEGER=0
DIM ABLE(MOREOBJECTS)
FOR X=0 TO 179
   ABLE(X)=1
NEXT X
TMR AS INTEGER=3100
ABLE2 AS BYTE=1

`SET FONT STUFF
SET TEXT FONT "Lucida Sans Unicode"
SET TEXT SIZE 16

`make a player pawn
make object sphere 1,5
color object 1,rgb(0,255,255)
set object collision to spheres 1
yrotate object 1,wrapvalue(object angle y(1)+90)

`make the main platform
make object box 2,2200,5,50
position object 2,object position x(2)+1100,object position y(2)-50,object position z(2)
COLOR OBJECT 2, RGB(0,200,25)
set object collision to boxes 2
set object collision on 2

`make lower platforms
for x=3 to 100
   make object box x,7,3,3
   position object x,rnd(2000),object position y(2)+20,object position z(2)
   color object x,rgb(rnd(155)+100,rnd(155)+100,rnd(155)+100)
next x

`make higher platforms
for x=1 to 100
   make object box x+100,7,3,3
   position object x+100,rnd(2000),object position y(2)+40,object position z(2)
   color object x+100,rgb(rnd(155)+100,rnd(155)+100,rnd(155)+100)
next x

`MAKE 3rd LEVEL PLATFORMS
FOR X=1 TO 80
   MAKE OBJECT BOX X+200, 4, 1, 3
   POSITION OBJECT X+200, RND(2000), OBJECT POSITION Y(2)+60, OBJECT POSITION Z(2)
   COLOR OBJECT X+200, RGB(RND(200)+55, RND(200)+55, RND(50)+205)
NEXT X

`MAKE HIGHEST PLATFORMS
FOR X=1 TO 50
   MAKE OBJECT BOX X+280, 8, 1, 3
   POSITION OBJECT X+280, RND(2000), OBJECT POSITION Y(2)+80, OBJECT POSITION Z(2)
NEXT X

`POINTS FOR FIRST LEVEL
FOR X=0 TO 49
   MAKE OBJECT SPHERE OBJECTS+X, 5
   POSITION OBJECT OBJECTS+X, OBJECT POSITION X(3+X), OBJECT POSITION Y(3+X)+6, OBJECT POSITION Z(2)
   COLOR OBJECT OBJECTS+X, RGB(120, 40, 40)
NEXT X

`POINTS FOR 2nd LEVEL
FOR X=50 TO 99
   MAKE OBJECT SPHERE OBJECTS+X, 4
   POSITION OBJECT OBJECTS+X, OBJECT POSITION X(51+X), OBJECT POSITION Y(51+X)+6, OBJECT POSITION Z(2)
   COLOR OBJECT OBJECTS+X, RGB(40,40,120)
NEXT X

`LEVEL 3
FOR X=100 TO 149
   MAKE OBJECT SPHERE OBJECTS+X, 3
   POSITION OBJECT OBJECTS+X, OBJECT POSITION X(101+X), OBJECT POSITION Y(101+X)+4, OBJECT POSITION Z(2)
   COLOR OBJECT OBJECTS+X, RGB (40, 150, 40)
NEXT X

`LEVEL 4
FOR X=150 TO 179
   MAKE OBJECT SPHERE OBJECTS+X, 3
   POSITION OBJECT OBJECTS+X, OBJECT POSITION X(131+X), OBJECT POSITION Y(131+X)+4, OBJECT POSITION Z(2)
NEXT X

jumptime=0

`main loop
do

   `x=object position x(1)

   `determine if object is in the air
   if air=1 then position object 1,object position x(1),object position y(1)-1,object position z(1)
   if object collision(1,0)>0 then air=0
   if object collision(1,0)=0 then air=1

   `determine if it is jumping
   if jump=1 and jumptime<25
      inc jumptime
      air=0
      position object 1,object position x(1),object position y(1)+1,object position z(1)
      if object position y(1)=>object position y(2)+25 and jumptime=25
         jumptime=0
         jump=0
         air=1
      endif
   endif

   `accept keyboard input
   IF ABLE2=1
      if leftkey()=1 then move object 1,-1
      if rightkey()=1 then move object 1,1
      if UPkey()=1 and jump=0 and air=0 then jump=1
   ENDIF

   `set the position of the camera
   position camera OBJECT POSITION X(1),object position y(1)+70,object position z(1)-120

   `POINT SYSTEM
   FOR X=0 TO 179
      IF ABLE(X)=1
         IF OBJECT COLLISION(1,OBJECTS+X)>0
            ABLE(X)=0
            DELETE OBJECT OBJECTS+X
            IF X<50
               INC PNTS, 5
            ENDIF
            IF X>49 AND X<100
               INC PNTS, 10
            ENDIF
            IF X>99 AND X<150
               INC PNTS, 20
            ENDIF
            IF X>149 AND X<180
               INC PNTS, 50
            ENDIF
         ENDIF
      ENDIF
   NEXT X

   `PRINT SCORE
   SET CURSOR 20, 10
   PRINT "Score: ",PNTS, " points.", "Time: ", TMR/100
   IF SPACEKEY()
      SET CURSOR 260, 240
      PRINT "Score: ", PNTS, " points."
   ENDIF

   `DECREASE TIMER
   IF ABLE2>0
      DEC TMR, 1
   ENDIF

   `ENDGAME SEQUENCE
   IF TMR<1
      ABLE2=0
      SET TEXT SIZE 24
      CENTER TEXT 320, 240, "TIME!"
      SET TEXT SIZE 16
      CENTER TEXT 320, 260, "Continue?"
      INK RGB(255,255,255),0
      BOX 280, 280, 315, 290
      BOX 330, 280, 365, 290
      INK RGB (0,0,0),0
      CENTER TEXT 320, 276, "Yes, or No?"
      INK RGB(255,255,255),0
      SHOW MOUSE
      IF MOUSECLICK()
         IF MOUSEX()>279
            IF MOUSEX()<316
               IF MOUSEY()>279
                  IF MOUSEY()<291
                     FOR X=1 TO 510
                        DELETE OBJECT X
                     NEXT X
                     GOTO START
                  ENDIF
               ENDIF
            ENDIF
         ENDIF
         IF MOUSEX()>329
            IF MOUSEX()<366
               IF MOUSEY()>279
                  IF MOUSEY()<291
                     END
                  ENDIF
               ENDIF
            ENDIF
         ENDIF
      ENDIF
      SET TEXT SIZE 24
   ENDIF

   `refresh the screen
   sync

`end the main loop
loop