Space Shooter 2 by Quantum Universe10th Apr 2005 9:20
|
---|
Summary This game is like it's predecessor, but with a different style of programming. Description Instead of writing most of the code inside the main loop, or by using subroutines, I created a lot of functions. This forced me to make a lot of arrays, but the code should be easier to follow and easier to improve. (You must take into account that the program is 3 times longer than the original version). Code ` This code was downloaded from The Game Creators ` It is reproduced here with full permission ` http://www.thegamecreators.com RemStart The media files can be found in: C:/.../Dark Basic/SoftwareDark/Basicmedia/sounds/explode/explode3 C:/.../Dark Basic/SoftwareDark/Basicmedia/sounds/explode/explode4 C:/.../Dark Basic/SoftwareDark/Basicmedia/sounds/weapons/phaser C:/.../Dark Basic/SoftwareDark/Basicmedia/sounds/weapons/voidhum I've created a main menu and HUD to make the game more user friendly. I haven't been able to use light or make the camera shake in this version, but hopefully this won't affect the gameplay. I don't think the game slows down (at least nowhere near as much as the first version). Again, if you have any comments, feel free to contact me. Thanks for playing. RemEnd Rem Button Arrays Dim ButtonTop(100) Dim ButtonBottom(100) Dim ButtonLeft(100) Dim ButtonRight(100) Dim ButtonName$(100) Dim ButtonIndex(100) Dim MaxButtonIndex(1) Rem Laser Arrays Dim SlotNumber(1) Dim Weapon(1) Dim LaserIndex(200) Dim MaxLaserIndex(10) Dim LaserXPos#(200) Dim LaserYPos#(200) Dim LaserZPos#(200) Dim LaserAngleX#(200) Dim LaserAngleY#(200) Dim LaserAngleZ#(200) Dim LaserReload(10) Dim Ammo(10) Dim LaserDamage(200) Dim LaserEnergy(1) Dim LaserSoundIndex(200) Rem Asteroid Arrays Dim AsteroidIndex(200) Dim MaxAsteroidIndex(1) Dim AsteroidHealth(200) Dim AsteroidType(200) Dim AsteroidXPos#(200) Dim AsteroidYPos#(200) Dim AsteroidZPos#(200) Dim Spin#(200) Dim AsteroidSoundIndex(200) Rem Powerup Arrays Dim MaxPowerUpIndex(1) Dim PowerUpIndex(200) Dim PowerUpXPos#(200) Dim PowerUpYPos#(200) Dim PowerUpZPos#(200) Rem Explosion Arrays Dim MaxExplosionIndex(1) Dim ExplosionIndex(200,5) Dim ExplosionScale(200) Dim MaxPlainNumber(1) Dim ExplosionDelay(200) Dim ExplosionSoundIndex(200) Rem Sounds Dim MaxAsteroidSoundIndex(1) Dim MaxLaserSoundIndex(1) Dim MaxExplosionSoundIndex(1) Dim MaxDeathSoundIndex(1) Dim DeathSoundIndex(200) Dim DeathSoundTimer(200) Rem Game Distance Limits Dim MaxDistance#(1) Dim MinDistance#(1) Rem Game Data Dim Level(1) Dim PlayerScore(1) Dim HighestScore(10) Dim HighScores(10) Dim HighScoreNames$(10) Dim ScoreOrder(10) Dim Health(1) Dim Speed#(1) MinTimeDelay = 100 BackDropBitmap() MainMenu() Rem Main Loop Do Rem Position Camera Position Camera 250,0,250 Point Camera 250,250,250 Position Listener 250,0,250 Rem Move onto next level If PlayerScore(1) >= Level(1)*50 NextLevel() If MinDelay > 50 Then MinTimeDelay = MinTimeDelay - 10 EndIf Rem Print HUD HUD() Rem Aim Aim() If Type < 5 Then Type = rnd((Level(1)-1))+1 Rem Make Asteroids If TimeDelay <= 0 MakeAsteroid(1,Type) TimeDelay = rnd(150) + MinTimeDelay Else TimeDelay = TimeDelay - (Speed#(1)/2) - 1 EndIf MoveAsteroid() DeathSound() Rem Shoot Weapon If Mouseclick() = 1 Weapon(1) = 1 MakeLaser(1) EndIf If Mouseclick() = 2 Weapon(1) = SlotNumber(1) MakeLaser(1) EndIf If Controlkey() = 1 If Delay = 0 Delay = 20 SlotNumber(1) = SlotNumber(1) + 1 If SlotNumber(1) = 4 Then SlotNumber(1) = 2 EndIf EndIf If Upkey() = 1 If Speed#(1) < 5 Then Speed#(1) = Speed#(1) + 0.01 EndIf If Downkey() = 1 If Speed#(1) > 1 Then Speed#(1) = Speed#(1) - 0.01 EndIf If Escapekey() = 1 Then Quit("Game") If Delay > 0 Then Dec Delay MoveLaser() Rem Destroy Asteroid and Laser LaserCollision() DeleteLaser() DeleteAsteroid() Rem Scale or delete explosion FinishExplosion() Rem Move or destroy power ups MovePowerUp() DeletePowerUp() If Health(1) <=0 Then Death() Rem Position Camera Again Position Camera 250,0,250 Point Camera 250,250,250 Sync Loop Rem This is a glossary of all the functions in order RemStart MakeAsteroid(Index,Type) Aim() MakeLaser(Index) MoveLaser() MoveAsteroid() LaserCollision() DeleteLaser() MainMenu() HUD() LoadGame() NextLevel() DeleteAsteroid() Death() WriteData(Mode) SaveScore() Button(Left,Top,Right,Bottom,Name$) DeleteButton() ShowHighScores() Quit(PreviousPage$) PowerUp(AsteroidNumber) MovePowerUp() DeletePowerUp() DestroyAsteroid(Index) MakeExplosion(Number) FinishExplosion() ExplosionBitmap() BackDropBitmap() AsteroidBitmap() PowerUpBitmap() DeathBitmap() Instructions() DeathSound() RemEnd Rem ------------------------- Create Asteroids ---------------------------- Function MakeAsteroid(Index,Type) SoundIndex = 1 GetIndexNumber: If Object Exist(Index) = 1 Inc Index Goto GetIndexNumber Else Size = Type*10 Make Object Box Index,Size,Size,Size Make Object Collision Box Index,0-(Size/2),0-(Size/2),0-(Size/2),(Size/2),(Size/2),(Size/2),0 Show Object Index Texture Object Index,3 AsteroidHealth(Index) = 100+(Type*50) AsteroidType(Index) = Type AsteroidXPos#(Index) = rnd(300)+100 AsteroidYPos#(Index) = (MaxDistance#(1)+(50*Type)) AsteroidZPos#(Index) = rnd(200)+150 Spin#(Index)=rnd(30) Position Object Index,AsteroidXPos#(Index),AsteroidYPos#(Index),AsteroidZPos#(Index) AsteroidIndex(Index) = 1 If MaxAsteroidIndex(1) < Index Then MaxAsteroidIndex(1) = Index GetSoundIndex: If Sound Exist(SoundIndex) = 1 Inc SoundIndex Goto GetSoundIndex Else Load 3DSound "voidhum.wav",SoundIndex Play Sound SoundIndex Loop Sound SoundIndex Set Sound Volume SoundIndex,100 Position Sound SoundIndex,AsteroidXpos#(Index),AsteroidYpos#(Index),AsteroidZpos#(Index) AsteroidSoundIndex(SoundIndex) = Index If MaxAsteroidSoundIndex(1) < SoundIndex Then MaxAsteroidSoundIndex(1) = SoundIndex EndIf EndIf EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Move Cursor ------------------------------ Function Aim() For x = 1 to 8 Angle = 360/8 Top = MouseX()+(12*cos(wrapvalue(Angle*x))) Bottom = MouseX()+(5*cos(wrapvalue(Angle*x))) Left = MouseY()+(12*sin(wrapvalue(Angle*x))) Right = MouseY()+(5*sin(wrapvalue(Angle*x))) Line Top,Left,Bottom,Right Next x EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Make Laser ------------------------------- Function MakeLaser(Index) SoundIndex = 1 GetIndexNumber: If Object Exist(Index) = 1 Inc Index Goto GetIndexNumber Else If LaserReload(Weapon(1)) = 0 MakeWeaponData = 0 If Weapon(1) = 1 and LaserEnergy(1) > 0 Make Object Cylinder Index,2 Make Object Collision Box Index,-1,-2,-1,1,2,1,0 Show Object Index Scale Object Index,100,500,100 Set Object Index,0,90,0,0 Ghost Object On Index Color Object Index,rgb(20,50,250) LaserReload(Weapon(1)) = 10 LaserDamage(Index) = 50 LaserEnergy(1) = LaserEnergy(1) - 5 MakeWeaponData = 1 EndIf If Weapon(1) = 2 and Ammo(Weapon(1)) > 0 Make Object Cylinder Index,2 Make Object Collision Box Index,-1,-2,-1,1,2,1,0 Show Object Index Scale Object Index,200,500,200 Set Object Index,0,90,0,0 Ghost Object On Index Color Object Index,rgb(150,50,250) LaserReload(Weapon(1)) = 100 LaserDamage(Index) = 200 Ammo(Weapon(1)) = Ammo(Weapon(1)) - 1 MakeWeaponData = 1 EndIf If Weapon(1) = 3 and Ammo(Weapon(1)) > 0 Make Object Cylinder Index,2 Make Object Collision Box Index,-1,-2,-1,1,2,1,0 Show Object Index Scale Object Index,200,500,200 Set Object Index,0,90,0,0 Ghost Object On Index Color Object Index,rgb(150,250,150) LaserReload(Weapon(1)) = 50 LaserDamage(Index) = 100 Ammo(Weapon(1)) = Ammo(Weapon(1)) - 1 MakeWeaponData = 1 EndIf If MakeWeaponData = 1 XScaleDist# = 82.5 ZScaleDist# = 60.0 XMouseScale# = MouseX()/(640/XScaleDist#) ZMouseScale# = MouseY()/(480/ZScaleDist#) circum# = 3.14159*50 LaserAngleX#(Index) = wrapvalue((((ZScaleDist#/2)-ZMouseScale#)/circum#)*180) LaserAngleY#(Index) = 0 LaserAngleZ#(Index) = wrapvalue(0-((((XScaleDist#/2)-XMouseScale#)/circum#)*180)) LaserXpos#(Index) = 250+(XScaleDist#/2)-XMouseScale# LaserYPos#(Index) = 50 LaserZpos#(Index) = 250+(ZScaleDist#/2)-ZMouseScale# Position Object Index,LaserXpos#(Index),LaserYpos#(Index),LaserZpos#(Index) Rotate Object Index,LaserAngleX#(Index),LaserAngleY#(Index),LaserAngleZ#(Index) LaserIndex(Index) = 1 If MaxLaserIndex(1) < Index Then MaxLaserIndex(1) = Index GetSoundIndex: If Sound Exist(SoundIndex) = 1 Inc SoundIndex Goto GetSoundIndex Else Load 3DSound "phaser.wav",SoundIndex Play Sound SoundIndex Set Sound Volume SoundIndex,80 Position Sound SoundIndex,LaserXpos#(Index),LaserYpos#(Index),LaserZpos#(Index) LaserSoundIndex(SoundIndex) = Index If MaxLaserSoundIndex(1) < SoundIndex Then MaxLaserSoundIndex(1) = SoundIndex EndIf EndIf EndIf EndIf EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Move Laser ------------------------------- Function MoveLaser() For x = 1 to MaxLaserIndex(1) If LaserIndex(x) = 1 LaserXpos#(x) = LaserXpos#(x)-(10*sin(LaserAngleZ#(x))) LaserYPos#(x) = LaserYPos#(x)+10 LaserZpos#(x) = LaserZpos#(x)+(10*sin(LaserAngleX#(x))) Position Object x,LaserXpos#(x),LaserYpos#(x),LaserZpos#(x) EndIf Next x For y = 1 to 10 If LaserReload(y) > 0 Then LaserReload(y) = LaserReload(y) - 1 Next y If LaserEnergy(1) < 0 Then LaserEnergy(1) = 0 EndFunction Rem ----------------------------------------------------------------------- Rem -------------------------- Move Asteroid ------------------------------ Function MoveAsteroid() For x = 1 to MaxAsteroidIndex(1) If AsteroidIndex(x) = 1 AsteroidYPos#(x) = AsteroidYPos#(x) - speed#(1) Position Object x,AsteroidXPos#(x),AsteroidYPos#(x),AsteroidZPos#(x) XRotate Object x,Wrapvalue(Object Angle X(x)+Spin#(x)) YRotate Object x,Wrapvalue(Object Angle Y(x)+Spin#(x)) ZRotate Object x,Wrapvalue(Object Angle Z(x)+Spin#(x)) EndIf For y = 1 to MaxAsteroidSoundIndex(y) If AsteroidSoundIndex(y) > 0 Position Sound y,AsteroidXPos#(x),AsteroidYPos#(x),AsteroidZPos#(x) EndIf Next y Next x EndFunction Rem ----------------------------------------------------------------------- Rem -------------------------- Laser Collision ---------------------------- Function LaserCollision() For x = 1 to MaxAsteroidIndex(1) If AsteroidIndex(x) = 1 For y = 1 to MaxLaserIndex(1) If LaserIndex(y) = 1 If AsteroidIndex(x) = 1 If Object Collision(x,y)>0 AsteroidHealth(x) = AsteroidHealth(x) - (LaserDamage(y)*((90+rnd(20))/100.0)) LaserIndex(y) = 0 Hide Object y Delete Object y For n = 1 to MaxLaserIndex(1) If LaserIndex(n) = 1 Then MaxLaserIndex = n Next n MaxLaserIndex(1) = MaxLaserIndex For m = 1 to MaxLaserSoundIndex(1) If LaserSoundIndex(m) = y LaserSoundIndex(m) = 0 Delete Sound m For n = 1 to MaxLaserSoundIndex(1) If LaserSoundIndex(n) > 0 Then MaxLaserSoundIndex = n Next n MaxLaserSoundIndex(1) = MaxLaserSoundIndex EndIf Next m EndIf EndIf EndIf Next y DestroyAsteroid(x) EndIf Next x For y = 1 to MaxLaserIndex(1) If LaserIndex(y) = 1 For z = 1 to MaxPowerUpIndex(1) If PowerUpIndex(z) > 0 If Object Collision(y,z) > 0 Select PowerUpIndex(z) Case 1 : LaserEnergy(1) = 10000 : EndCase Case 2 : Ammo(2) = Ammo(2) + 5 : EndCase Case 3 : Ammo(3) = Ammo(3) + 10 : EndCase Case 4 : Health(1) = 100 : EndCase EndSelect PowerUpIndex(z) = 0 Hide Object z Delete Object z For o = 1 to MaxPowerUpIndex(1) If PowerUpIndex(o) = 1 Then MaxPowerUpIndex = o Next o MaxPowerUpIndex(1) = MaxPowerUpIndex LaserIndex(y) = 0 Hide Object y Delete Object y For n = 1 to MaxLaserIndex(1) If LaserIndex(n) = 1 Then MaxLaserIndex = n Next n MaxLaserIndex(1) = MaxLaserIndex EndIf EndIf Next z EndIf Next y EndFunction Rem ----------------------------------------------------------------------- Rem --------------------------- Delete Laser ------------------------------ Function DeleteLaser() For x = 1 to MaxLaserIndex(1) If LaserIndex(x) = 1 If LaserYPos#(x) > (MaxDistance#(1)+250) LaserIndex(x) = 0 Hide Object x Delete Object x For y = 1 to MaxLaserIndex(1) If LaserIndex(y) = 1 Then MaxLaserIndex = y Next y MaxLaserIndex(1) = MaxLaserIndex For m = 1 to MaxLaserSoundIndex(1) If LaserSoundIndex(m) = x LaserSoundIndex(m) = 0 Delete Sound m For n = 1 to MaxLaserSoundIndex(1) If LaserSoundIndex(n) > 0 Then MaxLaserSoundIndex = n Next n MaxLaserSoundIndex(1) = MaxLaserSoundIndex EndIf Next m EndIf EndIf Next x EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Main Menu ------------------------------- Function MainMenu() MainMenu: Sync On Sync Rate 60 BackDrop On Texture BackDrop 2 WriteData(1) PlayGame = 0 rem WriteData(1) Show Mouse Repeat DeleteButton() Ink rgb(50,50,200),0 Button(250,120,390,170,"Play") Button(250,190,390,240,"Instructions") Button(250,260,390,310,"HighScores") Button(250,330,390,380,"QuitGame") For x = 1 to MaxButtonIndex(1) If ButtonIndex(x) = 1 If MouseX() > ButtonLeft(x) and MouseX() < ButtonRight(x) If MouseY() > ButtonTop(x) and MouseY() < ButtonBottom(x) Ink rgb(0,0,0),0 If MouseClick() = 1 If ButtonName$(x) = "Play" Repeat Until MouseClick() = 0 PlayGame = 1 EndIf If ButtonName$(x) = "Instructions" Repeat Until MouseClick() = 0 Instructions() Goto MainMenu EndIf If ButtonName$(x) = "HighScores" Repeat Until MouseClick() = 0 ShowHighScores() Goto MainMenu EndIf If ButtonName$(x) = "QuitGame" Repeat Until MouseClick() = 0 Quit("MainMenu") EndIf EndIf Else Ink rgb(255,255,255),0 EndIf Else Ink rgb(255,255,255),0 EndIf Set Text Font "Comic Sans MS" Set Text To Bold Set Text Size 25 If ButtonName$(x) = "Play" Then Center Text 320,135,"Play Game" If ButtonName$(x) = "Instructions" Then Center Text 320,205,"Instructions" If ButtonName$(x) = "HighScores" Then Center Text 320,275,"High Scores" If ButtonName$(x) = "QuitGame" Then Center Text 320,345,"Quit" EndIf Next x sync Until PlayGame=1 DeleteButton() cls BackDrop Off Center Text 320,240,"Loading" LoadGame() EndFunction Rem ----------------------------------------------------------------------- Rem -------------------------------- HUD ---------------------------------- Function HUD() Ink rgb(50,50,200),0 Box 0,0,639,30 Rem Draw player score Ink rgb(255,255,255),0 Set Text Font "Comic Sans MS" Set Text Size 20 Text 10,5,"PlayerScore:" Set Cursor 110,8 Print PlayerScore(1) Rem Draw health Text 140,5,"Health:" Set Cursor 200,8 Print Health(1) Rem Draw laser energy Text 240,5,"Energy:" Set Cursor 300,8 Print LaserEnergy(1) Rem Draw secondary weapon Text 350,5,"Secondary Weapon:" Set Cursor 515,8 Print Ammo(SlotNumber(1)) If SlotNumber(1) = 2 Ink rgb(150,50,250),0 Box 490,5,510,25 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 10 Center Text 500,8,"N" EndIf If SlotNumber(1) = 3 Ink rgb(150,250,150),0 Box 490,5,510,25 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 10 Center Text 500,8,"P" EndIf Rem Draw Radar Ink rgb(50,50,200),0 Box 0,400,50,479 Ink rgb(200,100,50),0 For x = 1 To MaxAsteroidIndex(1) If AsteroidIndex(x) = 1 Left = 25+((250-AsteroidXPos#(x))*(39.0/300)) Top = 440+((((250+MaxDistance#(1))/2)-AsteroidYPos#(x))*(79.0/(250+MaxDistance#(1)))) Circle Left,Top,2 EndIf Next x Ink rgb(255,255,255),0 For x = 1 to 50 Dot x,459+(20*sin(x*3.6)) Next x Rem Draw Speed Bar Ink rgb(50,50,200),0 Box 580,460-(speed#(1)*19),610,441 Ink rgb(255,255,255),0 Line 580,365,610,365 Line 610,365,610,441 Line 580,365,580,441 Line 580,441,610,441 Set Text Font "Comic Sans MS" Set Text Size 20 Center Text 595,450,"Throttle" Rem Limit Mouse Movement If MouseY() < 30 Then Position Mouse MouseX(),30 EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Load Game ------------------------------- Function LoadGame() Rem Set Arrays For x = 1 to 200 LaserIndex(x) = 0 LaserXPos#(x) = 0 LaserYPos#(x) = 0 LaserZPos#(x) = 0 LaserAngleX#(x) = 0 LaserAngleY#(x) = 0 LaserAngleZ#(x) = 0 LaserDamage(x) = 0 LaserSoundIndex(x) = 0 AsteroidIndex(x) = 0 AsteroidHealth(x) = 0 AsteroidType(x) = 0 AsteroidXPos#(x) = 0 AsteroidYPos#(x) = 0 AsteroidZPos#(x) = 0 AsteroidSoundIndex(x) = 0 Spin#(x) = 0 DeathSoundIndex(x) = 0 DeathSoundTimer(x) = 0 PowerUpIndex(x) = 0 ExplosionSoundIndex(x) = 0 ExplosionScale(x) = 0 ExplosionDelay(x) = 0 For z = 1 to 5 ExplosionIndex(x,z) = 0 Next z Next x For y = 1 to 10 LaserReload(y) = 0 MaxLaserIndex(y) = 0 Next y SlotNumber(1) = 2 Weapon(1) = 0 MaxAsteroidIndex(1) = 0 MaxExplosionIndex(1) = 0 MaxPlainNumber(1) = 0 MaxPowerUpIndex(1) = 0 LaserEnergy(1) = 10000 Ammo(2) = 5 Ammo(3) = 10 MaxDistance#(1) = 700 MinDistance#(1) = 0 MaxDeathSoundIndex(1) = 0 Rem Game Data Level(1) = 0 PlayerScore(1) = 0 Health(1) = 100 Rem Initialise Score Names For x = 1 to 10 If HighScoreNames$(x) = "" HighScoreNames$(x) = ".........." EndIf Next x Rem Create Bitmaps ExplosionBitmap() AsteroidBitmap() PowerUpBitmap() DeathBitmap() Sync On Sync Rate 60 BackDrop On Texture BackDrop 2 Hide Mouse Make Matrix 1,500,500,20,20 cls EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Next Level ------------------------------ Function NextLevel() Level(1) = Level(1) + 1 Rem Reset some variables For x = 1 to 200 LaserIndex(x) = 0 LaserXPos#(x) = 0 LaserYPos#(x) = 0 LaserZPos#(x) = 0 LaserAngleX#(x) = 0 LaserAngleY#(x) = 0 LaserAngleZ#(x) = 0 LaserDamage(x) = 0 LaserSoundIndex(x) = 0 Rem Asteroid Arrays AsteroidIndex(x) = 0 AsteroidHealth(x) = 0 AsteroidType(x) = 0 AsteroidXPos#(x) = 0 AsteroidYPos#(x) = 0 AsteroidZPos#(x) = 0 Spin#(x) = 0 AsteroidSoundIndex(x) = 0 Rem Power up arrays PowerUpIndex(x) = 0 PowerUpXPos#(x) = 0 PowerUpYPos#(x) = 0 PowerUpZPos#(x) = 0 Rem Explosion Arrays For z = 1 to 5 ExplosionIndex(x,z) = 0 Next z ExplosionScale(x) = 0 ExplosionDelay(x) = 0 ExplosionSoundIndex(x) = 0 Rem Other Sounds DeathSoundTimer(x) = 0 DeathSoundIndex(x) = 0 Rem Delete Laser and Asteroids If Object Exist(x) = 1 Then Delete Object x Next x For y = 1 to 10 LaserReload(y) = 0 MaxLaserIndex(y) = 0 Next y MaxAsteroidIndex(1) = 0 MaxPowerUpIndex(1) = 0 MaxExplosionIndex(1) = 0 MaxPlainNumber(1) = 0 speed#(1) = 1 MaxAsteroidSoundIndex(1) = 0 MaxLaserSoundIndex(1) = 0 MaxExplosionSoundIndex(1) = 0 MaxDeathSoundIndex(1) = 0 While Spacekey() = 0 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 10 Center Text 310,240,"Level" Set Cursor 330,240 Print " ";Level(1) Center Text 320,260,"Press the spacebar to continue" EndWhile EndFunction Rem ----------------------------------------------------------------------- Rem -------------------------- Delete Asteroid ---------------------------- Function DeleteAsteroid() SoundIndex = 1 For x = 1 to MaxAsteroidIndex(1) If AsteroidIndex(x) = 1 If AsteroidYPos#(x) < MinDistance#(1) AsteroidIndex(x) = 0 Hide Object x Delete Object x Health(1) = Health(1) - (10*AsteroidType(x)*((90+rnd(20))/100.0)) For y = 1 to MaxAsteroidIndex(1) If AsteroidIndex(y) = 1 Then MaxAsteroidIndex = y Next y MaxAsteroidIndex(1) = MaxAsteroidIndex For m = 1 to MaxAsteroidSoundIndex(1) If AsteroidSoundIndex(m) = y AsteroidSoundIndex(m) = 0 Delete Sound m For n = 1 to MaxAsteroidSoundIndex(1) If AsteroidSoundIndex(n) > 0 Then MaxAsteroidSoundIndex = n Next n MaxAsteroidSoundIndex(1) = MaxAsteroidSoundIndex EndIf Next m GetSoundIndex: If Sound Exist(SoundIndex) = 1 Inc SoundIndex Goto GetSoundIndex Else Load Sound "explode4.wav",SoundIndex Play Sound SoundIndex Position Sound SoundIndex,AsteroidXpos#(x),AsteroidYpos#(x),AsteroidZpos#(x) DeathSoundIndex(SoundIndex) = x DeathSoundTimer(SoundIndex) = 50 Texture BackDrop 8 If MaxDeathSoundIndex(1) < SoundIndex Then MaxDeathSoundIndex(1) = SoundIndex EndIf EndIf EndIf Next x EndFunction Rem ----------------------------------------------------------------------- Rem ------------------------------- Death --------------------------------- Function Death() Rem Delete Laser and Asteroids For x = 1 to 200 If Object Exist(x) = 1 Then Delete Object x If Sound Exist(x) = 1 Then Delete Sound x Next x For y = 1 to 10 Ammo(y) = 0 LaserReload(y) = 0 MaxLaserIndex(y) = 0 Next y While Spacekey() = 0 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 10 Center Text 320,220,"Your spaceship blow up" Center Text 320,260,"Press the spacebar to start again" EndWhile SaveScore() Rem Reset some variables For x = 1 to 200 LaserIndex(x) = 0 LaserXPos#(x) = 0 LaserYPos#(x) = 0 LaserZPos#(x) = 0 LaserAngleX#(x) = 0 LaserAngleY#(x) = 0 LaserAngleZ#(x) = 0 LaserDamage(x) = 0 LaserSoundIndex(x) = 0 Rem Asteroid Arrays AsteroidIndex(x) = 0 AsteroidHealth(x) = 0 AsteroidType(x) = 0 AsteroidXPos#(x) = 0 AsteroidYPos#(x) = 0 AsteroidZPos#(x) = 0 Spin#(x) = 0 AsteroidSoundIndex(x) = 0 Rem Power up Arrays PowerUpIndex(x) = 0 PowerUpXPos#(x) = 0 PowerUpYPos#(x) = 0 PowerUpZPos#(x) = 0 Rem Explosion Arrays For z = 1 to 5 ExplosionIndex(x,z) = 0 Next z ExplosionScale(x) = 0 ExplosionDelay(x) = 0 ExplosionSoundIndex(x) = 0 Rem Other Sounds DeathSoundIndex(x) = 0 DeathSoundTimer(x) = 0 Next x MaxDistance#(1) = 0 MinDistance#(1) = 0 SlotNumber(1) = 0 Weapon(1) = 0 LaserEnergy(1) = 0 Level(1) = 0 PlayerScore(1) = 0 Health(1) = 0 MinTimeDelay = 200 MaxAsteroidIndex(1) = 0 MaxPowerUpIndex(1) = 0 MaxAsteroidSoundIndex(1) = 0 MaxLaserSoundIndex(1) = 0 MaxExplosionSoundIndex(1) = 0 MaxDeathSoundIndex(1) = 0 speed#(1) = 1 Delete Matrix 1 cls MainMenu() EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Write Data ------------------------------- Function WriteData(Mode) Data$ = "High Scores.dat" If Mode = 1 Rem Open data If File Exist(Data$) = 1 Open to Read 2,Data$ For y = 1 to 10 Read String 2,HighScoreNames$(y) Read Byte 2,HighScores(y) Next y Close File 2 EndIf EndIf If Mode = 2 If File Exist(Data$) = 1 Then Delete File Data$ Open to Write 1,Data$ For y = 1 to 10 Write String 1,HighScoreNames$(y) Write Byte 1,HighScores(y) Next y Close File 1 EndIf EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Save Scores ------------------------------ Function SaveScore() FullList = 0 BackDrop off cls Ink rgb(50,50,200),0 Box 200,200,470,240 Box 220,30,420,80 Ink rgb(255,255,255),rgb(50,50,200) Set Text Font "Comic Sans MS" Set Text Size 20 Center Text 320,45,"High Scores" Set Cursor 220,215 For y = 1 to 10 If HighScores(y)=0 Rem Get Name for Scores List GetScores: Input "Please enter your name: ";HighScoreNames$ HighScoreNames$(y) = HighScoreNames$ HighScores(y) = PlayerScore(1) FullList = 1 y = 10 EndIf Next y If FullList = 0 For y = 1 to 10 If PlayerScore(1) > HighScores(y) For x = 1 to 10 HighScores(11-x)=HighScores(10-x) HighScoreNames$(11-x)=HighScoreNames$(10-x) If y+x=10 x=10 y = 10 EndIf Next x Goto GetScores: EndIf Next y EndIf Ink rgb(255,255,255),0 BackDrop On WriteData(2) EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Make Button ------------------------------ Function Button(Left,Top,Right,Bottom,Name$) Index = 1 GetIndexNumber: If ButtonIndex(Index) = 1 Inc Index Goto GetIndexNumber Else Ink rgb(50,50,200),0 ButtonTop(Index) = Top ButtonBottom(Index) = Bottom ButtonLeft(Index) = Left ButtonRight(Index) = Right ButtonName$(Index) = Name$ ButtonIndex(Index) = 1 Box ButtonLeft(Index),ButtonTop(Index),ButtonRight(Index),ButtonBottom(Index) Ink rgb(20,20,20),0 Line ButtonLeft(Index),ButtonBottom(Index),ButtonRight(Index),ButtonBottom(Index) Line ButtonRight(Index),ButtonTop(Index),ButtonRight(Index),ButtonBottom(Index) Ink rgb(255,255,255),0 Line ButtonLeft(Index),ButtonTop(Index),ButtonRight(Index),ButtonTop(Index) Line ButtonLeft(Index),ButtonTop(Index),ButtonLeft(Index),ButtonBottom(Index) If MaxButtonIndex(1) < Index Then MaxButtonIndex(1) = Index EndIf EndFunction Rem ----------------------------------------------------------------------- Rem --------------------------- Delete Button ----------------------------- Function DeleteButton() For x = 1 to MaxButtonIndex(1) ButtonIndex(x) = 0 ButtonName$(x) = "" Next x MaxButtonIndex(1) = 1 EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- High Scores ------------------------------ Function ShowHighScores() WriteData(1) DeleteButton() cls For z = 1 to 10 HighestScore(z) = 0 ScoreOrder(z) = -1 Next z For x = 1 to 10 Score = -1 For y = 1 to 10 If Score < HighScores(y) If HighestScore(y) <> 1 Score = HighScores(y) ScoreOrder(x) = y EndIf EndIf Next y For y = 1 to 10 If ScoreOrder(y) <> -1 Then HighestScore(ScoreOrder(y)) = 1 Next y Next x Repeat DeleteButton() Button(250,350,390,400,"Back") Ink rgb(50,50,200),0 Box 220,30,420,80 Box 200,100,450,300 Ink rgb(255,255,255),0 Line 200,100,450,100 Line 450,100,450,300 Line 200,100,200,300 Line 200,300,450,300 Line 370,100,370,300 Line 220,30,420,30 Line 420,30,420,80 Line 220,30,220,80 Line 220,80,420,80 Set Text Font "Comic Sans MS" Set Text Size 20 Center Text 320,45,"High Scores" Set Text Font "System" Set Text To Normal Set Text Size 10 For m = 1 to 10 If ScoreOrder(m) <> -1 Line 200,100+(m*20),450,100+(m*20) Center Text 250,85+(m*20),HighScoreNames$(ScoreOrder(m)) Set Cursor 400,85+(m*20) Print HighScores(ScoreOrder(m)) EndIf Next m Back = 0 For x = 1 to MaxButtonIndex(1) If ButtonIndex(x) = 1 If MouseX() > ButtonLeft(x) and MouseX() < ButtonRight(x) If MouseY() > ButtonTop(x) and MouseY() < ButtonBottom(x) Ink rgb(0,0,0),0 If MouseClick() = 1 If ButtonName$(x) = "Back" Repeat Until MouseClick() = 0 Back = 1 EndIf EndIf Else Ink rgb(255,255,255),0 EndIf Else Ink rgb(255,255,255),0 EndIf Set Text Font "Comic Sans MS" Set Text To Bold Set Text Size 25 If ButtonName$(x) = "Back" Then Center Text 320,365,"Back" EndIf Next x sync Until Back = 1 DeleteButton() cls EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Quit Game ------------------------------- Function Quit(PreviousPage$) Click$ = "" cls Repeat DeleteButton() Button(225,270,275,320,"Yes") Button(325,270,375,320,"No") Ink rgb(255,255,255),0 Center Text 320,220,"Are you sure you want to quit?" For x = 1 to MaxButtonIndex(1) If ButtonIndex(x) = 1 If MouseX() > ButtonLeft(x) and MouseX() < ButtonRight(x) If MouseY() > ButtonTop(x) and MouseY() < ButtonBottom(x) Ink rgb(0,0,0),0 If MouseClick() = 1 If ButtonName$(x) = "Yes" Repeat Until MouseClick() = 0 WriteData(2) Click$ = "Yes" EndIf If ButtonName$(x) = "No" Repeat Until MouseClick() = 0 Click$ = "No" EndIf EndIf Else Ink rgb(255,255,255),0 EndIf Else Ink rgb(255,255,255),0 EndIf Set Text Font "Comic Sans MS" Set Text To Bold Set Text Size 25 If ButtonName$(x) = "Yes" Then Center Text 250,280,"Yes" If ButtonName$(x) = "No" Then Center Text 350,280,"No" EndIf Next x sync Until Click$ <> "" DeleteButton() cls If Click$ = "Yes" If PreviousPage$ = "MainMenu" Then End If PreviousPage$ = "Game" Then MainMenu() EndIf If Click$ = "No" If PreviousPage$ = "MainMenu" Then MainMenu() Rem do nothing if PreviousPage$ = "Game" EndIf EndFunction Rem ----------------------------------------------------------------------- Rem ------------------------------ Power Up ------------------------------- Function PowerUp(AsteroidNumber) Index = 1 GetIndexNumber: If Object Exist(Index) = 1 Inc Index Goto GetIndexNumber Else Make Object Sphere Index,20 Make Object Collision Box Index,-10,-10,-10,10,10,10,0 Show Object Index PowerUp = rnd(99)+1 If PowerUp <= 5 Then PowerUpItem = 4 If PowerUp > 5 and PowerUp <= 15 Then PowerUpItem = 1 If PowerUp > 15 and PowerUp <= 40 Then PowerUpItem = 2 If PowerUp > 40 and PowerUp <= 100 Then PowerUpItem = 3 Select PowerUpItem Case 1 : Texture Object Index,4 : EndCase Case 2 : Texture Object Index,5 : EndCase Case 3 : Texture Object Index,6 : EndCase Case 4 : Texture Object Index,7 : EndCase Case Default : Color Object Index,rgb(255,255,255) : EndCase EndSelect PowerUpXPos#(Index) = AsteroidXPos#(AsteroidNumber) PowerUpYPos#(Index) = AsteroidYPos#(AsteroidNumber) PowerUpZPos#(Index) = AsteroidZPos#(AsteroidNumber) PowerUpIndex(Index) = PowerUpItem If MaxPowerUpIndex(1) < Index Then MaxPowerUpIndex(1) = Index EndIf EndFunction Rem ----------------------------------------------------------------------- Rem ---------------------------- Move Power Up ---------------------------- Function MovePowerUp() For x = 1 to MaxPowerUpIndex(1) If PowerUpIndex(x) > 0 PowerUpXpos#(x) = PowerUpXpos#(x) PowerUpYPos#(x) = PowerUpYPos#(x)-1 PowerUpZpos#(x) = PowerUpZpos#(x) Position Object x,PowerUpXpos#(x),PowerUpYpos#(x),PowerUpZpos#(x) EndIf Next x EndFunction Rem ----------------------------------------------------------------------- Rem -------------------------- Delete Power up ---------------------------- Function DeletePowerUp() For x = 1 to MaxPowerUpIndex(1) If PowerUpIndex(x) > 0 If PowerUpYPos#(x) < MinDistance#(1) PowerUpIndex(x) = 0 Hide Object x Delete Object x For y = 1 to MaxPowerUpIndex(1) If PowerUpIndex(y) = 1 Then MaxPowerUpIndex = y Next y MaxPowerUpIndex(1) = MaxPowerUpIndex EndIf EndIf Next x EndFunction Rem ----------------------------------------------------------------------- Rem -------------------------- Destroy Asteroid --------------------------- Function DestroyAsteroid(Index) SoundIndex = 1 If AsteroidHealth(Index) <= 0 MakeExplosion(Index) AsteroidHealth(Index) = 0 AsteroidIndex(Index) = 0 PlayerScore(1) = PlayerScore(1) + AsteroidType(Index) Hide Object Index Delete Object Index For m = 1 to MaxAsteroidIndex(1) If AsteroidIndex(m) = 1 Then MaxAsteroidIndex = m Next m MaxAsteroidIndex(1) = MaxAsteroidIndex PowerUp = rnd(9) If PowerUp = 9 Then PowerUp(Index) For m = 1 to MaxAsteroidSoundIndex(1) If AsteroidSoundIndex(m) = Index AsteroidSoundIndex(m) = 0 Delete Sound m For n = 1 to MaxAsteroidSoundIndex(1) If AsteroidSoundIndex(n) > 0 Then MaxAsteroidSoundIndex = n Next n MaxAsteroidSoundIndex(1) = MaxAsteroidSoundIndex EndIf Next m GetSoundIndex: If Sound Exist(SoundIndex) = 1 Inc SoundIndex Goto GetSoundIndex Else Load 3DSound "explode3.wav",SoundIndex Play Sound SoundIndex Position Sound SoundIndex,AsteroidXpos#(Index),AsteroidYpos#(Index),AsteroidZpos#(Index) ExplosionSoundIndex(SoundIndex) = Index If MaxExplosionSoundIndex(1) < SoundIndex Then MaxExplosionSoundIndex(1) = SoundIndex EndIf EndIf EndFunction Rem ----------------------------------------------------------------------- Rem ------------------------------ Explosion ------------------------------ Function MakeExplosion(Number) Index = 1 GetIndexNumber: If Object Exist(Index) = 1 Inc Index Goto GetIndexNumber Else Make Object Sphere Index,3 ExplosionIndex(Index,1) = Index Ghost Object On Index ExplosionScale(Index) = 100 ExplosionDelay(Index) = 2 Texture Object Index,1 Position Object Index,AsteroidXPos#(Number),AsteroidYPos#(Number),AsteroidZPos#(Number) If MaxExplosionIndex(1) < Index Then MaxExplosionIndex(1) = Index Plain = 1 PlainNumber = 2 GetPlain: If Object Exist(Plain) = 1 Inc Plain Goto GetPlain Else If PlainNumber <= 5 Make Object Plain Plain,rnd(1)+2,rnd(1)+2 ExplosionIndex(Index,PlainNumber) = Plain Ghost Object On Plain Texture Object Plain,1 XRotate Object Plain,rnd(180) YRotate Object Plain,rnd(180) ZRotate Object Plain,rnd(180) Position Object Plain,AsteroidXPos#(Number),AsteroidYPos#(Number),AsteroidZPos#(Number) If MaxPlainNumber(1) < Plain Then MaxPlainNumber(1) = Plain Inc PlainNumber Goto GetPlain EndIf EndIf EndIf EndFunction Rem ----------------------------------------------------------------------- Rem --------------------------- Finish Explosion --------------------------- Function FinishExplosion() For x = 1 to MaxExplosionIndex(1) If ExplosionDelay(x) = 0 If ExplosionIndex(x,1) > 0 ExplosionScale(x) = ExplosionScale(x) + 100 ExplosionDelay(x) = 2 For y = 1 to 5 Scale Object ExplosionIndex(x,y),ExplosionScale(x),ExplosionScale(x),ExplosionScale(x) Scroll Object Texture ExplosionIndex(x,y),0.1,0.1 Next y EndIf If ExplosionScale(x) > 2000 If ExplosionIndex(x,1) > 0 For y = 1 to 5 Delete Object ExplosionIndex(x,y) ExplosionIndex(x,y) = 0 For z = 1 to MaxExplosionIndex(1) If ExplosionIndex(z,1) > 0 Then MaxExplosionIndex = z Next z MaxExplosionIndex(1) = MaxExplosionIndex Next y For m = 1 to MaxExplosionSoundIndex(1) If ExplosionSoundIndex(m) = x ExplosionSoundIndex(m) = 0 Delete Sound m For n = 1 to MaxExplosionSoundIndex(1) If ExplosionSoundIndex(n) > 0 Then MaxExplosionSoundIndex = n Next n MaxExplosionSoundIndex(1) = MaxExplosionSoundIndex EndIf Next m EndIf EndIf Else ExplosionDelay(x) = ExplosionDelay(x) - 1 EndIf Next x EndFunction Rem ----------------------------------------------------------------------- Rem ------------------------ Make Explosion Bitmap ------------------------ Function ExplosionBitmap() Create Bitmap 1,256,256 Ink rgb(250,40,50),0 Box 0,0,255,255 For x = 0 to 100 Ink rgb(250,40+(2*x),50),0 Box x+20,x+20,230-x,230-x Next x Get Image 1,0,0,255,255 Delete Bitmap 1 Ink rgb(255,255,255),0 EndFunction Rem ----------------------------------------------------------------------- Rem --------------------------- BackDrop Bitmap --------------------------- Function BackDropBitmap() Rem This needs be a small texture, or the game runs too slow Create Bitmap 2,128,128 Ink rgb(250,230,50),0 For x = 1 to 200 Dot rnd(127),rnd(127) Next x Get Image 2,0,0,127,127 Delete Bitmap 2 Ink rgb(255,255,255),0 EndFunction Rem ----------------------------------------------------------------------- Rem --------------------------- Asteroid Bitmap --------------------------- Function AsteroidBitmap() Create Bitmap 3,16,16 Ink rgb(200,100,0),0 Box 0,0,15,15 Ink rgb(100,50,0),0 For x = 1 to 3 Top = rnd(10)+1 Left = rnd(10)+1 Box Left,Top,Left+1,Top+1 Next x Get Image 3,0,0,15,15 Delete Bitmap 3 Ink rgb(255,255,255),0 EndFunction Rem ----------------------------------------------------------------------- Rem --------------------------- Power up Bitmap --------------------------- Function PowerUpBitmap() Create Bitmap 4,16,16 Ink rgb(20,50,150),0 Box 0,0,15,15 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 20 Center Text 8,8,"L" Get Image 4,0,0,15,15 Delete Bitmap 4 Create Bitmap 5,16,16 Ink rgb(150,50,250),0 Box 0,0,15,15 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 20 Center Text 8,8,"N" Get Image 5,0,0,15,15 Delete Bitmap 5 Create Bitmap 6,16,16 Ink rgb(150,250,150),0 Box 0,0,15,15 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 20 Center Text 8,8,"P" Get Image 6,0,0,15,15 Delete Bitmap 6 Create Bitmap 7,16,16 Ink rgb(255,255,255),0 Box 0,0,15,15 Ink rgb(255,0,0),0 Box 0,8,15,8 Box 8,0,8,15 Get Image 7,0,0,15,15 Delete Bitmap 7 EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Death Bitmap ---------------------------- Function DeathBitmap() Create Bitmap 8,16,16 Ink rgb(255,0,0),0 Box 0,0,15,15 Get Image 8,0,0,15,15 Delete Bitmap 8 Ink rgb(255,255,255),0 EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Instructions ---------------------------- Function Instructions() PageOne: PageOne = 0 PageTwo = 0 cls repeat DeleteButton() Ink rgb(50,50,200),0 Box 280,50,390,100 Box 100,150,540,360 Ink rgb(255,255,255),0 Line 100,150,540,150 Line 540,150,540,360 Line 100,150,100,360 Line 100,360,540,360 Line 280,50,390,50 Line 390,50,390,100 Line 280,50,280,100 Line 280,100,390,100 Set Text Font "Comic Sans MS" Set Text Size 20 Text 120,160,"Mouse" Text 120,190,"Left Mouse Button" Text 120,220,"Right Mouse Button" Text 120,250,"Upkey" Text 120,280,"Downkey" Text 120,310,"Ctrl" Text 120,340,"Escape" Text 300,160,"Move cursor" Text 300,190,"Fire laser" Text 300,220,"Fire secondary weapon" Text 300,250,"Speed up" Text 300,280,"Slow down" Text 300,310,"Change secondary weapon" Text 300,340,"Quit" Center Text 335,65,"Instructions" Button(170,400,300,450,"Back") Button(370,400,500,450,"Next") For x = 1 to MaxButtonIndex(1) If ButtonIndex(x) = 1 If MouseX() > ButtonLeft(x) and MouseX() < ButtonRight(x) If MouseY() > ButtonTop(x) and MouseY() < ButtonBottom(x) Ink rgb(0,0,0),0 If MouseClick() = 1 If ButtonName$(x) = "Next" Repeat Until MouseClick() = 0 PageOne = 1 EndIf If ButtonName$(x) = "Back" PageTwo = 1 PageOne = 1 Repeat Until MouseClick() = 0 EndIf EndIf Else Ink rgb(255,255,255),0 EndIf Else Ink rgb(255,255,255),0 EndIf Set Text Font "Comic Sans MS" Set Text To Bold Set Text Size 25 If ButtonName$(x) = "Back" Then Center Text 235,415,"Back" If ButtonName$(x) = "Next" Then Center Text 435,415,"Next Page" EndIf Next x sync Until PageOne = 1 cls repeat DeleteButton() Ink rgb(50,50,200),0 Box 280,50,390,100 Box 150,150,510,360 Ink rgb(255,255,255),0 Line 150,150,510,150 Line 510,150,510,360 Line 150,150,150,360 Line 150,360,510,360 Line 280,50,390,50 Line 390,50,390,100 Line 280,50,280,100 Line 280,100,390,100 Set Text Font "Comic Sans MS" Set Text Size 20 Center Text 320,170,"Power Ups" Center Text 335,65,"Instructions" Ink rgb(20,50,150),0 Box 280,200,300,220 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 20 Center Text 290,205,"L" Ink rgb(150,50,250),0 Box 280,230,300,250 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 20 Center Text 290,235,"N" Ink rgb(150,250,150),0 Box 280,260,300,280 Ink rgb(255,255,255),0 Set Text Font "System" Set Text Size 20 Center Text 290,265,"P" Ink rgb(255,255,255),0 Box 280,290,300,310 Ink rgb(255,0,0),0 Box 280,297,300,303 Box 287,290,293,310 Ink rgb(255,255,255),0 Text 350,200,"Laser" Text 350,230,"Pulsar" Text 350,260,"Nuclear Bomb" Text 350,290,"Health" Button(170,400,300,450,"Back") Button(370,400,500,450,"Previous") For x = 1 to MaxButtonIndex(1) If ButtonIndex(x) = 1 If MouseX() > ButtonLeft(x) and MouseX() < ButtonRight(x) If MouseY() > ButtonTop(x) and MouseY() < ButtonBottom(x) Ink rgb(0,0,0),0 If MouseClick() = 1 If ButtonName$(x) = "Back" Repeat Until MouseClick() = 0 PageTwo = 1 EndIf If ButtonName$(x) = "Previous" Repeat Until MouseClick() = 0 Goto PageOne EndIf EndIf Else Ink rgb(255,255,255),0 EndIf Else Ink rgb(255,255,255),0 EndIf Set Text Font "Comic Sans MS" Set Text To Bold Set Text Size 25 If ButtonName$(x) = "Back" Then Center Text 235,415,"Back" If ButtonName$(x) = "Previous" Then Center Text 435,415,"Previous Page" EndIf Next x sync Until PageTwo = 1 EndFunction Rem ----------------------------------------------------------------------- Rem ----------------------------- Death Sound ----------------------------- Function DeathSound() For x = 1 to MaxDeathSoundIndex(1) If DeathSoundTimer(x) > 0 DeathSoundTimer(x) = DeathSoundTimer(x) - 1 Else If DeathSoundIndex(x) > 0 Delete Sound x DeathSoundIndex(x) = 0 For n = 1 to MaxDeathSoundIndex(1) If DeathSoundIndex(n) > 0 Then MaxDeathSoundIndex = n Next n MaxDeathSoundIndex(1) = MaxDeathSoundIndex EndIf If DeathSoundTimer(x) <= 48 Texture BackDrop 2 EndIf EndIf Next x EndFunction Rem ----------------------------------------------------------------------- |