WurstRitt.BlitzBasicSourceCode.c

00001 
00002 Global levelName$, remainingTime, addLetterTime, levelIndex
00003 Global scroller, FPS, CurFPS
00004 Global blockX, blockY                           ; nr of blocks left-right / nr of blocks begin-finishline
00005 Global speedZ#, speedX#, gravity#       ; player movement
00006 Global camera, light, sphere, sphereTex, shadow, hudCube, hudTexture, sky, skyTex, logoCube, logoTex, finishLine
00007 Global arrowRightTex, arrowLeftTex, titleInfo, titleInfoTex, speedMeter
00008 Global digit_1, digit_2, digit_3, tolleWurst1, tolleWurst2, timeOver
00009 Global upFlag, downFlag, oldTime, fSin, fZero2One#, doFinishFlag, logoF, scrollerAngle#
00010 Global sndDeath, sndStart, sndCollect, sndFallDown, soundPlayingFlag, sndBounceUp, sndBounceDown
00011 Global chnBackground, chnDeath, hasJoyStick
00012 Const state_isRunning=1, state_intro=2, state_levelFinish=3
00013 Const state_prepareNextLevel=4, state_death=5, state_pause=6
00014 Const TERRAIN_Z_SCALE = 5
00015 Global gameState = state_intro, musicIsPlaying = True
00016 Global START_LEVEL = 1, MAX_LEVEL = 5
00017 
00018 Dim FPS_overTime(99)
00019 Dim terrain(1)  ; two terrains 
00020 
00021 Type block
00022         Field col
00023         Field cube
00024 End Type
00025 
00026 Type letter
00027         Field pivot
00028         Field mesh1
00029         Field mesh2
00030         Field char$
00031         Field collected
00032         Field freq
00033 End Type
00034 
00035 Type wurst
00036         Field pivot
00037 End Type
00038 
00039 DebugLog "prg start"
00040 AppTitle "Wurstritt"
00041 
00042 Include "3DTextLib\GG_3D_Text_Library.bb"
00043 
00044 Graphics3D 800, 600, 0, 3;1
00045 SetBuffer BackBuffer()
00046 FPS = CreateTimer(60)
00047 
00048 loadMedia()
00049 
00050 ; do we got a joystick?
00051 hasJoyStick = JoyType()
00052 If (hasJoyStick)
00053         DebugLog "joystick found. type = " + hasJoyStick
00054 Else
00055         DebugLog "no joystick found."
00056 EndIf
00057 
00058 While Not KeyHit(1)
00059 
00060         FPS_Start = MilliSecs()
00061 
00062         ; DEBUG-------------------------------------------
00063         If (KeyHit(38))         ; l
00064                 loadLevel(4)
00065                 DebugLog "levelName: "+levelName
00066                 DebugLog "remainingTime: "+remainingTime
00067                 DebugLog "blockX: "+blockX
00068                 DebugLog "blockY: "+blockY
00069                 resetLevel()
00070         EndIf
00071 
00072         If (KeyHit(19))         ; r
00073                 resetlevel()
00074         EndIf   
00075 
00076         If (KeyHit(20))         ; t
00077                 displayTitleScreen()
00078         EndIf
00079 
00080         If (KeyDown(17))                ; w
00081                 displayLevelFinish()
00082         EndIf
00083 
00084 
00085         If (False);MouseHit(1))
00086                 pickE = CameraPick(camera, MouseX(), MouseY())
00087                 If (pickE=0)
00088                         DebugLog "cannot pick this"
00089                 Else
00090                         DebugLog "pick: "+EntityX(pickE)+" "+EntityY(pickE)+" "+EntityZ(pickE)
00091                 EndIf
00092         EndIf
00093         
00094         If (KeyHit(2))                  ; "1"
00095                 START_LEVEL = 1
00096                 DebugLog "START_LEVEL = 1"
00097         EndIf
00098         If (KeyHit(3))                  ; "2"
00099                 START_LEVEL = 2
00100                 DebugLog "START_LEVEL = 2"
00101         EndIf
00102         If (KeyHit(4))                  ; "3"
00103                 START_LEVEL = 3
00104                 DebugLog "START_LEVEL = 3"
00105         EndIf
00106         ; END DEBUG-------------------------------------------
00107         
00108         ; global numbers
00109         fSin = (fSin + 1) Mod 359
00110         fZero2One = fZero2One + 0.01
00111         If (fZero2One >= 1) Then fZero2One = 0
00112 
00113         ; check user input
00114         ; keyboard
00115         inputLeft = KeyDown(203)
00116         inputRight = KeyDown(205)
00117         inputUp = KeyDown(200) 
00118         inputDown = KeyDown(208)
00119         inputJump = KeyHit(29)  ; ctrl left
00120         ; joystick
00121         If (hasJoyStick)
00122                 Select JoyYDir(0)
00123                         Case -1; up
00124                                 inputUp = True
00125                         Case 1 ; down
00126                                 inputDown = True
00127                 End Select
00128                 Select JoyXDir(0)
00129                         Case -1; left
00130                                 inputLeft = True
00131                         Case 1 ; right
00132                                 inputRight = True
00133                 End Select
00134                 If ((JoyHit(1, 0)) Or (JoyHit(2, 0))) ; jump
00135                         inputJump = True
00136                 EndIf
00137         EndIf
00138 
00139         If (KeyHit(31))         ; s (background sound on/off)
00140                 If (musicIsPlaying)
00141                         changeScroller("SOUND OFF")
00142                         PauseChannel(chnBackground)
00143                         musicIsPlaying = False
00144                 Else
00145                         Select chnTune
00146                                 Case 0
00147                                         changeScroller("NOW PLAYING: " + "DELTA")
00148                                         chnBackground = PlayMusic("sound\delta.mod")
00149                                 Case 1
00150                                         changeScroller("NOW PLAYING: " + "SANXION")
00151                                         chnBackground = PlayMusic("sound\SANXION.mod")
00152                                 Case 2
00153                                         changeScroller("NOW PLAYING: " + "AUF WIEDERSEHEN MONTY")
00154                                         chnBackground = PlayMusic("sound\aufweidersehnmonty.mod")
00155                                 Case 3
00156                                         changeScroller("NOW PLAYING: " + "BUBBLE BOBBLE")
00157                                         chnBackground = PlayMusic("sound\bubblebobble.mod")
00158                                 Case 4
00159                                         changeScroller("NOW PLAYING: " + "COMMANDO")
00160                                         chnBackground = PlayMusic("sound\commando.mod")
00161                         End Select
00162                         chnTune = (chnTune + 1) Mod 5
00163                         musicIsPlaying = True
00164                         ChannelVolume chnBackground, 0.1
00165                 EndIf
00166         EndIf
00167 
00168         ; main game state machine
00169         Select (gameState)
00170 
00171                 Case state_isRunning
00172                         If (inputJump  And upFlag=False)
00173                                 If (EntityCollided(sphere, 2))                  
00174                                         If (EntityY(sphere) > 0.4)
00175                                                 ; jump up!
00176                                                 upFlag = True
00177                                                 PlaySound sndBounceUp
00178                                         EndIf
00179                                 EndIf
00180                         EndIf
00181                         If (upFlag=True And downFlag=False)
00182                                 If (EntityY(sphere) < 2)
00183                                         gravity = 0.1   
00184                                 Else
00185                                         ; end of jump up
00186                                         downFlag = True
00187                                 EndIf
00188                         EndIf
00189                         If (downFlag=True)
00190                                 gravity = -0.06
00191                                 If (EntityY(sphere) < 0.5)
00192                                         If (EntityCollided(sphere, 2))
00193                                                 ; touching ground
00194                                                 upFlag = False
00195                                                 downFlag = False
00196                                                 PlaySound sndBounceDown
00197                                                 upFlag2 = True
00198                                         EndIf
00199                                 EndIf
00200                         EndIf
00201                         If (upFlag2=True And downFlag2=False)
00202                                 If (EntityY(sphere) < 0.8)
00203                                         ; rebounce
00204                                         gravity = 0.08
00205                                 Else
00206                                         downFlag2 = True
00207                                 EndIf
00208                         EndIf
00209                         If (downFlag2=True)
00210                                 gravity = -0.06
00211                                 If (EntityY(sphere) < 0.5)
00212                                         ; touching ground second
00213                                         upFlag2 = False
00214                                         downFlag2 = False
00215                                         PlaySound sndBounceDown
00216                                 EndIf
00217                         EndIf           
00218                                 
00219                         If (inputUp)    ; up
00220                                 If (speedZ < 0.2) Then speedZ = speedZ + 0.002
00221                         EndIf
00222                         If (inputDown)  ; down
00223                                 If (speedz > 0) Then speedZ = speedZ - 0.002
00224                         EndIf
00225                         If (speedZ > 0)
00226                                 If (inputLeft)  ; left
00227                                         If (speedZ > 0.2)
00228                                                 speedX = speedX - 0.007
00229                                         Else
00230                                                 speedX = speedX - 0.006
00231                                         EndIf
00232                                 EndIf
00233                                 If (inputRight) ; right
00234                                         If (speedZ > 0.2)
00235                                                 speedX = speedX + 0.007
00236                                         Else
00237                                                 speedX = speedX + 0.006
00238                                         EndIf
00239                                 EndIf
00240                         Else
00241                                 speedX = 0
00242                         EndIf
00243                         
00244                         If (KeyHit(25))         ; p (pause)
00245                                 changeScroller("PRESS  P  TO  CONTINUE")
00246                                 gameState = state_pause
00247                         EndIf
00248 
00249                         
00250                         ; slow down left/right
00251                         speedX = speedX * 0.9           
00252                         
00253                         ; move objects
00254                         updateLevel()
00255                         displayHUD()
00256                         displayScroller()
00257                                                 
00258                         ; check death
00259                         If (remainingTime < 0)
00260                                 gameState = state_death
00261                         EndIf
00262                         
00263                         ; check finishline -> change game state
00264                         If (EntityZ(sphere) > EntityZ(finishLine))
00265                                 gameState = state_levelFinish
00266                         EndIf
00267                         
00268                 Case state_pause
00269                         displayScroller()
00270                         If (KeyHit(25))         ; p (un-pause)
00271                                 gameState = state_isRunning
00272                         EndIf
00273                 
00274                 Case state_intro
00275                         If (musicIsPlaying)
00276                                 ResumeChannel chnBackground
00277                                 ChannelVolume chnBackground, 0.3
00278                         EndIf
00279                         ShowEntity logoCube
00280                         ShowEntity titleInfo
00281                         HideEntity finishLine
00282                         HideEntity sphere
00283                         HideEntity sky
00284                         HideEntity speedMeter                   
00285                         deleteTypes()
00286                         displayTitleScreen()
00287                         displayScroller()
00288                         ; hide HUD
00289                         PositionEntity hudCube, EntityX(camera), EntityY(camera), EntityZ(camera)-10
00290                         If (inputJump)
00291                                         levelIndex = START_LEVEL
00292                                         gameState = state_prepareNextLevel                      
00293                                         ChannelVolume chnBackground, 0.1
00294                                         HideEntity logoCube
00295                                         HideEntity titleInfo
00296                                         ShowEntity finishLine
00297                                         ShowEntity sphere
00298                                         ShowEntity sky
00299                                         ShowEntity speedMeter
00300                         EndIf
00301                 
00302                 Case state_levelFinish
00303                         ; move objects and nice text
00304                         displayLevelFinish()
00305                         updateLevel()
00306                         displayHUD()
00307                         ; slow down player
00308                         speedZ = speedZ * 0.97
00309                         speedx = speedX = 0.9
00310                         gravity = -0.06
00311                         ; show at last 3 second nice text
00312                         If (levelFinishedTimer = 0)
00313                                 levelFinishedTimer = MilliSecs()
00314                                 changeScroller("PRESS KEY TO CONTINUE")
00315                         EndIf
00316                         If (levelFinishedTimer + 2900 < MilliSecs())
00317                                 If (levelFinishedTimer + 3000 > MilliSecs())
00318                                         FlushKeys()
00319                                 endif
00320                         endif
00321                         If (levelFinishedTimer + 3000 < MilliSecs())
00322                                 displayScroller()
00323                                 If (0 <> GetKey() Or inputJump)
00324                                         gameState = state_prepareNextLevel
00325                                         levelFinishedTimer = 0
00326                                 EndIf
00327                         EndIf
00328                         
00329                 Case state_prepareNextLevel
00330                         ; after intro or levelFinish load next level
00331                         loadLevel(levelIndex)
00332                         PlaySound(sndStart)
00333                         resetLevel()
00334                         ; 3..2..1
00335                         countDown()
00336                         changeScroller("LEVEL " + levelIndex + ": " + Upper(levelName))
00337                         levelIndex = levelIndex + 1
00338                         If (levelIndex = MAX_LEVEL) Then levelIndex = START_LEVEL
00339                         gameState = state_isRunning
00340 
00341                 Case state_death
00342                         ; listen to death-sound
00343                         PauseChannel chnBackground
00344                         If (Not ChannelPlaying(chnDeath))
00345                                 chnDeath = PlaySound(sndDeath)
00346                         EndIf
00347                         If (deathTimer = 0)
00348                                 deathTimer = MilliSecs()
00349                         EndIf
00350                         displayDeath()
00351                         If (deathTimer + 7000 < MilliSecs())
00352                                 gameState = state_intro
00353                                 HideEntity timeOver
00354                                 deathTimer = 0
00355                         EndIf
00356         End Select
00357 
00358         UpdateWorld
00359         RenderWorld
00360         Color 255,255,255
00361         Text 20,80, "FPS: " + CurFPS    
00362         
00363         ; reset user input
00364         inputLeft = False
00365         inputRight = False
00366         inputUp = False
00367         inputDown = False
00368         inputJump = False
00369         Flip
00370         WaitTimer(FPS)
00371         
00372         FPS_overTime(FPS_overTimeIndex) = 1000.0 / (MilliSecs() - FPS_Start)
00373         FPS_overTimeIndex = (FPS_overTimeIndex + 1) Mod 100
00374         For i=0 To 99
00375                 FPS_overTimeSum = FPS_overTimeSum + FPS_overTime(i)
00376         next
00377         CurFPS = FPS_overTimeSum / 100
00378         FPS_overTimeSum = 0
00379 Wend
00380 
00381 DebugLog "prg end"
00382 End
00383 
00384 Function changeScroller(scrollerText$)
00385         Local myLen = Len(scrollerText)
00386         ShowEntity scroller
00387         scrollerAngle = 360
00388         ; init text
00389         GG_Change_Text(scroller, scrollerText)
00390         RotateEntity scroller, 0, -20, 0
00391 End Function
00392 
00393 Function displayScroller()
00394         If (scrollerAngle <= 0) 
00395                 HideEntity scroller
00396         Else
00397                 PositionEntity scroller, 2, 5, EntityZ(camera) + 26
00398                 scrollerAngle = scrollerAngle - 0.8
00399                 RotateEntity scroller, 0, scrollerAngle, 0
00400         EndIf 
00401 End Function
00402 
00403 Function displayDeath()
00404         ShowEntity timeOver
00405         PositionEntity timeOver, 2, 2, EntityZ(camera)+4
00406 End Function
00407 
00408 Function displayHUD()
00409         ; time + wurst-letter + FPS
00410         PositionEntity hudCube, EntityX(camera), EntityY(camera)+1.42, EntityZ(camera)+2
00411         SetBuffer TextureBuffer(hudTexture)
00412         ClsColor 0, 0, 0
00413         Cls
00414         Color 255, 255, 255
00415         Text 0, 1, "TIME"
00416         Text 40, 1, remainingTime
00417         For l.letter = Each letter
00418                 If (l\collected)
00419                         Select l\char
00420                                 Case "w" Text 75, 1, "W"
00421                                 Case "u" Text 86, 1, "U"
00422                                 Case "r" Text 97, 1, "R"
00423                                 Case "s" Text 108, 1, "S"
00424                                 Case "t" Text 119, 1, "T"
00425                         End Select
00426                 EndIf
00427         Next
00428         SetBuffer BackBuffer()
00429         EntityTexture hudCube, hudTexture
00430         Color 0, 0, 0
00431         If (gameState = state_isRunning)
00432                 If ((MilliSecs() - oldTime) > 1000)
00433                         oldTime = MilliSecs()
00434                         remainingTime = remainingTime - 1
00435                 EndIf
00436         EndIf
00437         ; speedmeter
00438         ScaleSprite speedMeter, speedZ * 12.0 + 0.1, 0.2
00439         PositionEntity speedMeter, -3, 5.2, EntityZ(camera) + 5
00440 End Function
00441 
00442 Function displayTitleScreen()
00443         PositionEntity camera, 0, 3, -6
00444         logoF = (logoF + 5) Mod 359
00445         MoveEntity logoCube, 0, 0, Sin(logoF)*0.1
00446         PositionEntity titleInfo, 0, 2.5, -3
00447 End Function
00448 
00449 Function displayLevelFinish()
00450         ; display nice moving text
00451         ShowEntity tolleWurst1
00452         ShowEntity tolleWurst2
00453         PositionEntity tolleWurst1, 2.25, 3.3-Cos(fSin)/2, EntityZ(camera)+Cos(fSin)*6.3+10
00454         PositionEntity tolleWurst2, 2.1, 2-Cos(fSin)/3, EntityZ(camera)+Sin(fSin)*6.3+10
00455 End Function
00456 
00457 Function countDown()
00458         updateLevel()
00459         c = CreateCube()
00460         ScaleEntity c, 0.5, 0.5, 0.01
00461         PositionEntity c, blockX/2, 2.5, -1
00462         EntityTexture c, digit_3
00463         t = MilliSecs()
00464         While (t+1000 > MilliSecs())
00465                 RenderWorld
00466                 Flip
00467         Wend
00468         EntityTexture c, digit_2
00469         t = MilliSecs()
00470         While (t+1000 > MilliSecs())
00471                 RenderWorld
00472                 Flip
00473         Wend
00474         EntityTexture c, digit_1
00475         t = MilliSecs()
00476         While (t+1000 > MilliSecs())
00477                 RenderWorld
00478                 Flip
00479         Wend
00480         FreeEntity c
00481         FreeTexture cTex
00482 End Function
00483 
00484 Function updateLevel()
00485         ; move cam
00486         PositionEntity camera, blockX/2, 2, EntityZ(sphere)-3
00487         ; move player
00488         TranslateEntity sphere, speedX, gravity, speedZ
00489         TurnEntity sphere, speedZ*100, 0, -speedX*10
00490         ; turn sky
00491         TurnEntity sky, -0.05, 0 ,0
00492         PositionEntity sky, EntityX(camera), EntityY(camera), EntityZ(camera)
00493         ; move letters
00494         For l.letter = Each letter
00495                 dif = EntityZ(l\pivot) - EntityZ(Camera)
00496                 ; letter near enough?
00497                 If (dif < 60)
00498                         MoveEntity l\pivot, Sin(fSin+l\freq)/50, 0, 0
00499                         TurnEntity l\mesh2, 0, 1, 0
00500                         ; letter collected by player?
00501                         If (div < 5)
00502                                 If (l\collected = False)
00503                                         If (MeshesIntersect(sphere, l\mesh1))
00504                                                 ; yes
00505                                                 HideEntity l\pivot
00506                                                 l\collected = True
00507                                                 PlaySound sndCollect
00508                                                 remainingTime = remainingTime + addLetterTime
00509                                                 changeScroller("TIME +" + addLetterTime)
00510                                         EndIf
00511                                 EndIf
00512                         EndIf ;dif 5
00513                 EndIf ;dif 60
00514         Next
00515         ; player fall down?
00516         If (EntityY(sphere) > 0.3)
00517                 ; no, draw shadow
00518                 ShowEntity shadow
00519                 PositionEntity shadow, EntityX(sphere), 0.1, EntityZ(sphere)
00520                 ScaleEntity shadow, 0.1*EntityY(sphere)+0.2, 0.1, 0.1*EntityY(sphere)+0.2
00521         Else
00522                 ; yes, player felt down!
00523                 If (soundPlayingFlag = False)
00524                         PlaySound(sndFallDown)
00525                         DebugLog "playsound"
00526                         soundPlayingFlag = True
00527                 EndIf
00528                 HideEntity shadow
00529                 speedX = 0
00530                 speedZ = 0
00531                 If (EntityY(sphere) < -5)
00532                         ; reset player
00533                         PositionEntity sphere, EntityX(sphere), 0.4, EntityZ(sphere)
00534                         speedZ = 0.1
00535                         upFlag=True
00536                         downFlag=False
00537                         soundPlayingFlag = False
00538                 EndIf
00539         EndIf
00540                 
00541         ; manage texture-rotatoin of arrow-blocks
00542         PositionTexture arrowLeftTex, fZero2One, 0
00543         PositionTexture arrowRightTex, fZero2One, 0
00544         
00545         ; only show next 60 blocks ahead
00546         For visible.block = Each block
00547                 dif = EntityZ(visible\cube) - EntityZ(Camera)
00548                 If (dif < 60)
00549                         ShowEntity visible\cube
00550                         If (dif < 5)
00551                                 ; enable collision
00552                                 EntityType visible\cube, 2
00553 
00554                                 ; do player-drift, if player touch arrow-block
00555                                 If (visible\col = 8 Or visible\col = 9)
00556                                         colCount = CountCollisions(sphere)
00557                                         For i=1 To colCount
00558                                                 If (visible\cube = CollisionEntity(sphere, i))
00559                                                         ; check color of block
00560                                                         Select visible\col
00561                                                                 Case 9
00562                                                                         ; drift left
00563                                                                         speedX = speedX - 0.004
00564                                                                 Case 8
00565                                                                         ; drift right
00566                                                                         speedX = speedX + 0.004
00567                                                         End Select
00568                                                 EndIf
00569                                         Next
00570                                 EndIf ; 8 or 9
00571 
00572                                 ; Delete blocks out of sight
00573                                 If (dif < 0)
00574                                         FreeEntity visible\cube
00575                                         Delete visible
00576                                 EndIf
00577 
00578                         EndIf
00579                 EndIf
00580         Next
00581         
00582         ; also delete sprites behind player
00583         For w.wurst = Each wurst
00584                 dif = EntityZ(w\pivot) - EntityZ(Camera)
00585                         If (dif < 0)
00586                                 FreeEntity w\pivot
00587                                 Delete w
00588                         EndIf
00589         Next
00590 End Function
00591 
00592 Function resetLevel()
00593         DebugLog "resetLevel"
00594         ClearCollisions
00595         HideEntity tolleWurst1
00596         HideEntity tolleWurst2
00597         HideEntity scroller
00598         PositionEntity camera, blockX/2, 2, -5
00599         PositionEntity sphere, blockX/2, 2, 0
00600         RotateEntity sphere, 0, 0, 0
00601         EntityType sphere, 1
00602 ;       For b.block = Each block
00603 ;               EntityBox b\cube, -0.5, 0, -0.5, 1, 0.1, 1
00604 ;       Next
00605         ScaleSprite speedMeter, speedZ * 12.0 + 0.1, 0.2
00606         PositionEntity speedMeter, -3, 5.2, EntityZ(camera) + 5
00607         Collisions 1, 2, 3, 2   ; sphere to cube
00608         speedZ = 0
00609         speedX = 0
00610         gravity = -0.06
00611 End Function
00612 
00613 Function deleteTypes()
00614         For bb.block = Each block
00615                 FreeEntity bb\cube
00616                 Delete bb
00617         Next
00618         For ll.letter = Each letter
00619                 FreeEntity ll\mesh1
00620                 FreeEntity ll\mesh2
00621                 FreeEntity ll\pivot
00622                 Delete ll
00623         Next
00624         For ss.wurst = Each wurst
00625                 FreeEntity ss\pivot
00626                 Delete ss
00627         Next
00628 End Function
00629 
00630 Function makeBlock(blockColor%, xPos%, zPos%)
00631         b.block = New block
00632         b\col = blockColor
00633         b\cube = CreateCube()
00634         PositionEntity b\cube, xPos, 0, zPos
00635         ScaleEntity b\cube, 0.5, 0.1, 0.5
00636         EntityBox b\cube, -0.5, 0, -0.5, 1, 0.1, 1
00637         ;EntityPickMode b\cube, 2                                               ; DEBUG 
00638         Select blockColor
00639         Case 1
00640                 EntityColor b\cube, 255, 0 ,0   ; red
00641         Case 2
00642                 EntityColor b\cube, 0, 255 ,0   ; green
00643         Case 3
00644                 EntityColor b\cube, 0, 0, 255   ; blue
00645         Case 4
00646                 EntityColor b\cube, 255, 0, 255 ; purple
00647         Case 5
00648                 EntityColor b\cube, 0, 255, 255 ; yellow
00649         Case 6
00650                 EntityColor b\cube, 255, 255, 0 ; orange
00651         Case 7
00652                 EntityColor b\cube, 200, 200, 200       ; lite gray
00653         Case 8
00654                 EntityColor b\cube, 255, 255, 255       ; white, arrow_right (player will drift right)
00655                 EntityTexture b\cube, arrowRightTex
00656         Case 9
00657                 EntityColor b\cube, 100, 100, 100       ; dark gray, arrow_left (player will drift left)
00658                 EntityTexture b\cube, arrowLeftTex
00659         Default
00660                 DebugLog "makeBlock: unknown blockColor"
00661         End Select
00662         ; do not show cube (speed up rendering)
00663         HideEntity b\cube
00664 End Function
00665 
00666 Function makeLetter(char$, zPos%)
00667         If (FileType("gfx\balloons.3ds") <> 1)  Then loadMediaError("gfx\balloons.3ds")
00668         If (FileType("gfx\" + char + ".3ds") = 1)                       ; filename valid?
00669                 l.letter = New letter
00670                 l\pivot = CreatePivot()
00671                 l\mesh1 = LoadMesh("gfx\" + char + ".3ds", l\pivot)
00672                 l\mesh2 = LoadMesh("gfx\balloons.3ds", l\pivot)
00673                 l\char = char
00674                 l\collected = False
00675                 l\freq = Rnd(0,359)
00676                 EntityAlpha l\mesh1, 0.5
00677                 PositionEntity l\pivot, 3, 1, zPos
00678                 PositionEntity l\mesh1, 0, -0.6, 0
00679                 ScaleMesh l\mesh1, 0.01, 0.01, 0.005
00680                 PositionEntity l\mesh2, -0.1, 5, 0
00681                 TurnEntity l\mesh2, 0, Rnd(0, 359), 0
00682                 ScaleMesh l\mesh2, 0.01, 0.01, 0.01
00683         Else
00684                 DebugLog "makeLetter: file not found " + "gfx\" + char + ".3ds"
00685                 loadMediaError("gfx\" + char + ".3ds")
00686         EndIf
00687 End Function
00688 
00689 Function makeSprite(file$, amount)
00690         file = "gfx\" + file
00691         If (FileType(file) = 1)                 ; filename valid?
00692                 DebugLog "makeSprite: " + file + ", " + amount
00693                 e = CreateCube()
00694                 EntityTexture e, LoadTexture(file, 4)
00695                 ScaleEntity e, 1, 1, 0.00001
00696                 For i=1 To amount
00697                         s.wurst = New wurst
00698                         s\pivot = CopyEntity(e)
00699                         PositionEntity s\pivot, Rnd(6, 20), Rnd(-2, 10), Rnd(1, blockY)
00700                         s.wurst = New wurst                     
00701                         s\pivot = CopyEntity(e)
00702                         PositionEntity s\pivot, Rnd(-2, -16), Rnd(-2, 10), Rnd(1, blockY)
00703                 Next
00704                 FreeEntity e
00705         Else
00706                 DebugLog "file not found: " + file
00707                 loadMediaError(file)
00708         EndIf
00709 End Function
00710 
00711 Function loadLevel(index)
00712         Local fname$ = "levels\level0"+index+".txt"
00713         Local i%, k%, tmpCol%, block50Col%
00714         Local myLine$, myLineLen%
00715         
00716         DebugLog "loadLevel: "+fname
00717         
00718         deleteTypes()
00719         
00720         blockX = 5
00721         blockY = 0
00722 
00723         If FileType(fname) = 1                  ; filename valid?
00724                 fin = ReadFile(fname)
00725                 While Not Eof(fin)
00726                         myLine = ReadLine(fin)
00727                         If (Mid(myLine, 1, 11) = "level_name:")
00728                                 levelName = Mid(myLine, 12, 255)
00729                         ElseIf (Mid(myLine, 1, 11) = "level_time:")
00730                                 remainingTime = Mid(myLine, 12, 255)
00731                         ElseIf (Mid(myLine, 1, 16) = "add_letter_time:")
00732                                 addLetterTime = Mid(myLine, 17, 255)
00733                         ElseIf (Mid(myLine, 1, 7) = "sprite:")
00734                                 makeSprite(Mid(myLine, 8, 255), 10)
00735                         ElseIf (Mid(myLine, 1, 1) <> ";")       ; delete comments
00736                                 myLineLen = Len(myLine)
00737                                 For k=1 To myLineLen
00738                                         tmpCol = Mid(myLine, k, 1)      ; ascii to int
00739                                         If (tmpCol > 0 And tmpCol < 10)                         ; blockColor found
00740                                                 makeBlock(tmpCol, k-1, blockY)  
00741                                         ElseIf (Asc(Mid(myLine, k, 1)) >= Asc("r"))     ; w/u/r/s/t letter found
00742                                                 makeLetter(Mid(myLine, k, 1), blockY)
00743                                         EndIf
00744                                 Next
00745                                 blockY = blockY + 1
00746                         EndIf
00747                 Wend
00748                 CloseFile(fin)
00749         Else
00750                 DebugLog "loadLevel: file not found " + fname
00751                 loadMediaError(fname)
00752         EndIf
00753 
00754         PositionEntity finishLine, 3.3, 2.9, blockY-2
00755 
00756         ; add 50 lines of blocks after finish-line
00757         For i=0 To 49
00758                 For k=0 To 4
00759                         block50Col = (block50Col + 1) Mod 2                     ; toggle 0,1
00760                         makeBlock(5 + block50Col, k, blockY + i-1)      
00761                 Next
00762         Next
00763 End Function
00764 
00765 Function loadMedia()
00766 
00767         chnBackground = PlayMusic("sound\commando.mod")
00768         ChannelVolume chnBackground, 0.3
00769         If (FileType("sound\commando.mod") <> 1) then   loadMediaError("sound\commando.mod")    
00770         sndCollect = LoadSound("sound\Sfx1.wav")
00771         If (0 = sndCollect) Then loadMediaError("sound\Sfx1.wav")
00772         sndDeath = LoadSound("sound\death.mp3")
00773         If (0 = sndDeath) Then loadMediaError("sound\death.mp3")
00774         sndStart = LoadSound("sound\start.mp3")
00775         If (0 = sndStart) Then loadMediaError("sound\start.mp3")
00776         sndFallDown = LoadSound("sound\hollowstatic.wav")
00777         If (0 = sndFallDown) Then loadMediaError("sound\hollowstatic.wav")
00778         sndBounceUp = LoadSound("sound\bounce1.wav")
00779         If (0 = sndBounceUp) Then loadMediaError("sound\bounce1.wav")
00780         sndBounceDown = LoadSound("sound\bounce2.wav")
00781         If (0 = sndBounceDown) Then loadMediaError("sound\bounce2.wav")
00782 
00783         sphereTex = LoadTexture("gfx\earth.jpg", 1)
00784         If (0 = sphereTex) Then loadMediaError("gfx\earth.jpg")
00785         skyTex = LoadTexture("gfx\univers1024.jpg")
00786         If (0 = skyTex) Then loadMediaError("gfx\stars512.jpg")
00787         arrowLeftTex = LoadTexture("gfx\arrow512.jpg", 4)
00788         If (0 = arrowLeftTex) Then loadMediaError("gfx\arrow512.jpg")
00789         TextureBlend arrowLeftTex, 3
00790         RotateTexture arrowLeftTex, 180
00791         
00792         arrowRightTex = LoadTexture("gfx\arrow512.jpg", 4)
00793         If (0 = arrowRightTex) Then loadMediaError("gfx\arrow512.jpg")
00794         TextureBlend arrowRightTex, 3
00795         logoTex = LoadTexture("gfx\logo501.jpg")
00796         If (0 = logoTex) Then loadMediaError("gfx\logo501.jpg")
00797         titleInfoTex = LoadTexture("gfx\titleInfoTex3.png", 4)
00798         If (0 = titleInfoTex) Then loadMediaError("gfx\titleInfoTex3.png")
00799 
00800         finishLine = LoadMesh("gfx\finishline.3ds")
00801         If (0 = finishLine) Then loadMediaError("gfx\finishline.3ds")
00802         ScaleMesh finishLine, 0.033, 0.04, 0.03
00803 
00804         digit_1 = LoadTexture("gfx\digit_1.png", 4)
00805         If (0 = digit_1) Then loadMediaError("gfx\digit_1.png")
00806         digit_2 = LoadTexture("gfx\digit_2.png", 4)
00807         If (0 = digit_2) Then loadMediaError("gfx\digit_2.png")
00808         digit_3 = LoadTexture("gfx\digit_3.png", 4)
00809         If (0 = digit_3) Then loadMediaError("gfx\digit_3.png")
00810 
00811         tolleWurst1 = LoadSprite("gfx\tollewurst1Tex.png", 4)
00812         If (0 = tolleWurst1) Then loadMediaError("gfx\tollewurst1Tex.png")
00813         ScaleSprite tolleWurst1, 3, 1
00814         HideEntity tolleWurst1
00815         tolleWurst2 = LoadSprite("gfx\tollewurst2Tex.png", 4)
00816         If (0 = tolleWurst2) Then loadMediaError("gfx\tollewurst2Tex.png")
00817         ScaleSprite tolleWurst2, 3, 1
00818         HideEntity tolleWurst2
00819         timeOver = LoadSprite("gfx\timeOverTex.png")
00820         If (0 = timeOver) Then loadMediaError("gfx\timeOverTex.png")
00821         ScaleSprite timeOver, 3, 1
00822         HideEntity timeOver
00823         speedMeter = LoadSprite("gfx\speedmeter.jpg")
00824         If (0 = speedMeter) Then loadMediaError("gfx\speedMeter.jpg")   
00825         HideEntity speedMeter
00826 
00827         terrain(0) = LOADTERRAIN("gfx/heightmap.jpg")
00828         If (0 = terrain(0)) Then loadMediaError("gfx\heightmap.jpg")    
00829         TerrainDetail terrain(0), 500, True
00830         ScaleEntity terrain(0), 1, 30, TERRAIN_Z_SCALE
00831         grass_tex = LOADTEXTURE("gfx\meadow512.jpg")
00832         If (0 = grass_tex) Then loadMediaError("gfx\meadow512.jpg")
00833         EntityTexture terrain(0), grass_tex, 0, 1
00834         PositionEntity terrain(0), -60, -10, 0
00835         
00836         terrain(1) = LOADTERRAIN("gfx/heightmap.jpg")
00837         TerrainDetail terrain(1), 500, True
00838         ScaleEntity terrain(1), 1, 30, TERRAIN_Z_SCALE
00839         PositionEntity terrain(1), -60, -10, 128*TERRAIN_Z_SCALE
00840         EntityTexture terrain(1), grass_tex, 0, 1
00841 
00842         GG_Load_Bitmap_Font("Wurst", "3dTextLib\Wurst5_32.ggfnt")
00843         scroller = GG_Create_Text_Arc(" ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?():+ ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?():+", 20, -45, 1, 3)
00844 
00845         camera = CreateCamera()
00846         light=CreateLight(1, camera)
00847         CameraRange camera, 1, 100
00848                 
00849         sphere = CreateSphere(8)
00850         ScaleEntity sphere, 0.3, 0.3, 0.3
00851         EntityType sphere, 1
00852         EntityRadius sphere, 0.3
00853         EntityTexture sphere, sphereTex
00854         
00855         shadow = CreateSphere(4)
00856         EntityColor shadow, 0, 0, 0
00857         EntityAlpha shadow, 0.5 
00858 
00859         hudCube = CreateCube()
00860         ScaleEntity hudCube, 2, 0.08, 0.0001
00861         hudTexture = CreateTexture(128, 128)
00862         ScaleTexture hudTexture, 1, 8
00863         PositionEntity hudCube, 0, 0 , -100     ; out of sight
00864         
00865         sky = CreateSphere(8)
00866         ScaleEntity sky, 100, 100, 100
00867         RotateTexture skyTex, 180
00868         ScaleTexture skyTex, 0.3, 0.4
00869         EntityTexture sky, skyTex
00870         FlipMesh sky
00871 
00872         logoCube = CreateCube()
00873         FitMesh logoCube, -5,5,0,10,2,0
00874         EntityTexture logoCube, logoTex
00875         
00876         titleInfo = CreateCube()
00877         EntityTexture titleInfo, titleInfoTex
00878         ScaleEntity titleInfo, 1.5, 0.9, 1
00879 End Function
00880 
00881 Function loadMediaError(file$)
00882         RuntimeError "Cannot load media: " + file + " - Please copy all media into the programs folder and run again."
00883         End
00884 End Function

Generated on Sun Jan 6 17:43:19 2008 for WurstRitt by  doxygen 1.5.4