home *** CD-ROM | disk | FTP | other *** search
- // --------------------------------- //
- // Project: LoveGame - a 3D sample
- // Start: Sunday, January 26, 2003
-
- // Settings
- MAX_HEARTS = 20
-
- // memory used
- DIM heart_pos[MAX_HEARTS+1][3]
- DIM heart_spd[MAX_HEARTS+1]
- DIM girl_pos[2]
- DIM girl_ani[2]
-
-
- // Start game
- GOSUB InitGame
- GOSUB MainGame
-
- // highscore table...
- PRINT "Enough love", 50, 100
- SHOWSCREEN
- MOUSEWAIT
- END
-
-
- // ------------------------------------------------------------- //
- // -=# INITGAME #=-
- // ------------------------------------------------------------- //
- SUB InitGame:
-
- LOCAL i
- FOR i=0 TO MAX_HEARTS
- heart_pos[i][0] = RND(200) - 100 // X: -1000 <-> +1000
- heart_pos[i][1] = RND(200) - 100 // Y:
- heart_pos[i][2] = RND(1000) + 800 // Z: 800 <-> 1800
- heart_spd[i] = RND(4)+1
- NEXT
-
- X_LOADOBJ "heart.ddd", 0
- X_LOADOBJ "pia.ddd", 1
- LOADSPRITE "pia.bmp", 1 // Texture for obj. 1
-
- // Background
- LOADBMP "sky.bmp"
- love = 0
- gameover = FALSE
-
- WideScroller("text.txt")
- ENDSUB // INITGAME
-
-
-
-
- // ------------------------------------------------------------- //
- // -=# MAINGAME #=-
- // ------------------------------------------------------------- //
- SUB MainGame:
-
- WHILE TRUE
- GOSUB MoveAll
- GOSUB Show3D
- IF gameover THEN RETURN
- WEND
- ENDSUB // MAINGAME
-
-
-
- // ------------------------------------------------------------- //
- // -=# MOVEALL #=-
- // ------------------------------------------------------------- //
- SUB MoveAll:
-
- delta_time = GETTIMER()
- // heartids:
- FOR i=0 TO MAX_HEARTS
- heart_pos[i][2] = heart_pos[i][2] - heart_spd[i]*delta_time/50
- IF heart_pos[i][2] < 0 THEN heart_pos[i][2] = 1000
- NEXT
-
- // Ship
- MOUSESTATE mx, my, b1, b2
- IF mx > 110 THEN mx = 110
- IF mx < 90 THEN mx = 90
- IF my > 110 THEN my = 110
- IF my < 90 THEN my = 90
- SETMOUSE 100, 100
-
- mx = (mx-100)/250
- my = (my-100)/250
-
- limspeed = 2
-
- girl_ani[0]=girl_ani[0]+mx*delta_time/10
- girl_ani[1]=girl_ani[1]+my*delta_time/10
- IF girl_ani[0]>limspeed THEN girl_ani[0]=limspeed
- IF girl_ani[0]<-limspeed THEN girl_ani[0]=-limspeed
- IF girl_ani[1]>limspeed THEN girl_ani[1]=limspeed
- IF girl_ani[1]<-limspeed THEN girl_ani[1]=-limspeed
- girl_pos[0] = girl_pos[0] - girl_ani[0]
- girl_pos[1] = girl_pos[1] - girl_ani[1]
- IF girl_pos[0]<-100 THEN girl_pos[0]=-100
- IF girl_pos[0]> 100 THEN girl_pos[0]= 100
- IF girl_pos[1]<-100 THEN girl_pos[1]=-100
- IF girl_pos[1]> 100 THEN girl_pos[1]= 100
-
- // Collision
- FOR i=0 TO MAX_HEARTS
- dp = DistPt(heart_pos[i][0], heart_pos[i][1], heart_pos[i][2], girl_pos[0], girl_pos[1], 0)
- IF (dp < 13)
- love=love + 2
- ENDIF
- NEXT
-
- // Game over??
- IF love > 100 THEN gameover = TRUE
- ENDSUB // MOVEALL
-
-
-
- // ------------------------------------------------------------- //
- // -=# SHOW3D #=-
- // ------------------------------------------------------------- //
- SUB Show3D:
- X_MAKE3D 1, 1000, 45
- X_CAMERA girl_pos[0],girl_pos[1],0, 0,0,1000
- ALPHAMODE .1
- fc = .5
- X_SCALING fc, fc, fc
- X_SETTEXTURE 0
- FOR i = 0 TO MAX_HEARTS
- X_MOVEMENT heart_pos[i][0], heart_pos[i][1], heart_pos[i][2]
- X_ROTATION heart_pos[i][2], 100, heart_pos[i][0],heart_pos[i][1]
- X_DRAWOBJ 0, 0
- NEXT
- ALPHAMODE 0
-
- X_SETTEXTURE 1
- fc = .1
- X_SCALING fc, fc, fc
- X_MOVEMENT girl_pos[0], girl_pos[1], 10
- X_ROTATION 60*girl_ani[0]/limspeed+90, 1, 0, 0 // Wings up/down
- X_ROTATION -15*girl_ani[0]/limspeed+90, 0, 1, 0 // Pointing of nose
- X_ROTATION 20*girl_ani[1]/limspeed-150, 1, 0, 0
- X_DRAWOBJ 1, 79
-
- X_MAKE2D
-
- // Energy bar
- ALPHAMODE 1
- FILLRECT 10,10,10+love,30,RGB(255, 0, 0)
- ALPHAMODE 0
- DRAWLINE 10,10, 110,10,RGB(255,255,255)
- DRAWLINE 10,30, 110,30,RGB(255,255,255)
- DRAWLINE 10,10, 10,30,RGB(255,255,255)
- DRAWLINE 110,10,110,30,RGB(255,255,255)
- PRINT "Love", 20, 10
- MOUSESTATE mx, my, b1, b2
- SHOWSCREEN
- ENDSUB // SHOW3D
-
-
-
-
- // ------------------------------------------------------------- //
- // -=# DISTPT #=-
- // ------------------------------------------------------------- //
- FUNCTION DistPt: x1, y1, z1, x2, y2, z2
- // LOCAL def:
- // x1, y1, z1, x2, y2, z2,
-
- LOCAL dx, dy, dz
- dx = x1-x2
- dy = y1-y2
- dz = z1-z2
-
- // ( sqr(dx^2+dy^2) )^2 + dz^2
- dist = SQR(dx*dx + dy*dy)
- RETURN SQR(dist*dist + dz*dz)
- ENDFUNCTION // z2
-
-
-
-
-
-
-
-
- // ------------------------------------------------------------- //
- // --- WIDESCROLLER ---
- // ------------------------------------------------------------- //
- FUNCTION WideScroller: filename$
- // Diese Variablen sind als LOCAL definiert:
- // filename$, void
- LOCAL text$[], a$, maxline, z, dz, dx, y, fx, fy
- DIM text$[256]
-
- GETFONTSIZE fx, fy // Neuer, guter Befehl / New and good command (24.10.01)
-
- fy=fy+8 // Platz lassen / Leave space
-
- FOR i=0 TO 255
- GETFILE filename$, i, a$
- IF a$="NO_FILE" THEN RETURN
- IF a$="NO_DATA" THEN GOTO skip
- text$[i]=a$
- maxline=maxline+1
- NEXT
-
- skip:
- FOR zt=480 TO 0-maxline*fy STEP -0.4 // AufwΣrts / Move upwards
- FOR z=0 TO maxline-1
- dz=z*20+zt
- dx=(640-LEN(text$[z])*fx)/2
- IF dz<480 AND dz>-20 THEN PRINT text$[z], dx, dz
- NEXT
- SHOWSCREEN
- MOUSESTATE mx, my, b1, b2
- IF b1 THEN RETURN
- NEXT
- ENDFUNCTION // WIDESCROLLER
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-