Procedure ResetGame() MouseLocate(ScreenWidth()/2,(GUI\BenchHeight+GUI\BenchY)/2) Game\Life=Game\Difficulty(Game\ScoreData\Difficulty)\NbLife Game\ScoreData\Score=0 Game\ScoreData\NbLoop=0 Game\ScoreData\BenchIsEmpty=0 Game\Combo=0 Game\UnfinishedLoopCount=0 Game\Timer=Game\Difficulty(Game\ScoreData\Difficulty)\Timer Game\WaitTimer=0 EarthQuake\StartTime=0 Game\LittlePieceCounter=0 ;If Game\NbPiecesOnBench>70 count little piece and when Game\LittlePieceCounter>Game\Difficulty(#Level_Hard)\NbLittlePiece a bigger piece see: Shape.Pbi RandomShape() Game\NbPiecesOnBench=0 EarthQuake\WaitStartTime=ElapsedMilliseconds() Game\NextTime=ElapsedMilliseconds()+Game\Timer Game\ScoreData\BigestLoopSize=0 ClearList(LoopPath()) ;ClearList(Game\Bonus\DisplayedBonus()) Protected.l Bx,By,n For By=0 To #MaxTableHeight For Bx=0 To #MaxTableWidth Game\GameTable(Bx,By)\Sprite=0 Game\GameTable(Bx,By)\Selected=#False Game\GameTable(Bx,By)\BonusOnThisCase=#False Next Next Game\ScoreData\Bonus_JewelRed=0 Game\ScoreData\Bonus_JewelBlue=0 Game\ScoreData\Bonus_JewelGreen=0 ;reset State For n=0 To 5 Stats\NbItemByGroup(n)=0 Next For n=0 To #Bonus_End Stats\NbBonus(n)=0 Next ClearList(Stats\PieceTime()) ClearList(Stats\LoopTime()) ClearList(Stats\NbPieces()) ClearList(Bonus\DisplayedBonus()) Stats\StartGameTimer=ElapsedMilliseconds() Stats\StartLoopTimer=ElapsedMilliseconds() Stats\BigestLoopSize=0 Stats\NbLoop=0 Stats\Bonus_JewelBlue=0 Stats\Bonus_JewelRed=0 Stats\Bonus_JewelGreen=0 Stats\BenchIsEmpty=0 Bonus\Dead_StartTimer=ElapsedMilliseconds() Bonus\Random_StartTime=ElapsedMilliseconds() Bonus\Random_Duration=5000 Bonus\HammerEnable=#False Bonus\RemoveEnable=#False Bonus\X2Enable=#False Bonus\FreezeEnable=#False Select Game\ScoreData\Difficulty Case #Level_Novice Bonus\EyeEnable=#True Case #Level_Normal Bonus\EyeEnable=#True Case #Level_Hard Bonus\EyeEnable=#False Case #Level_Madness Bonus\EyeEnable=#False EndSelect Game\ScoreData\Fps_Max=0 Game\ScoreData\Fps_Min=99999 EndProcedure Procedure InitGameMode(Mode.l) Game\ComeFromMode=Game\Mode Game\Mode=Mode Game\ToggleMode=0 Protected *Obj_Sprite.SpriteData Protected *Obj_Text.TextData Protected Text.s ;Protected *Step Protected n.l Debug "InitGameMode="+Str(Mode) Select Mode Case #Mode_record ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() If IsMusic(Game\CurrentMusic):StopMusic(Game\CurrentMusic):EndIf Game\CurrentMusic=-1 Game\DisplayCursor=#False ;-Init Mode Intro Case #Mode_Intro ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() StartMusic(#Music_Intro,#True) *Obj_Sprite=NewSprite(#Spr_Thy,10,(GUI\ScreenHeight/2),-1,-1,0,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,500,2000,0,255,0) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,2000,1000,255,255,0) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,3000,1000,255,0,0) ;*Obj_Sprite=NewSprite(#Spr_Presente,10,(GUI\ScreenHeight/2),-1,-1,0,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) *Obj_Text=NewText(0,"Presents",ScreenWidth()/2,ScreenHeight()/2,0,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,3000,2000,0,255,0) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,5000,1000,255,255,0) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,6000,2000,255,0,0) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,12000,2000,0,2,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,12000,2000,0,2,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_Logo,10,(GUI\ScreenHeight/2),-1,-1,0,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,7000,4000,0,255,0) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,11000,1000,255,255,0) AddmoveToEngine(@*Obj_Sprite\y,#PB_Float,12000,2000,(GUI\ScreenHeight/2),1,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_Remix,10,(GUI\ScreenHeight/2),-1,-1,0,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,9500,1000,0,255,0) AddmoveToEngine(@*Obj_Sprite\y,#PB_Float,12100,2000,(GUI\ScreenHeight/2),1,#Easing_ElasticEaseOut,1000+#Mode_Menu) Game\DisplayCursor=#False ;-Init Mode Menu Case #Mode_Menu ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() StartMusic(#Music_Intro) ;TO DO TEST Server connection ;If Game\ConnectToServer=#True ; DisplayWarning("No Web Connection") ;EndIf Protected *MenuOption.MenuOption NewMenu("Game Menu") *MenuOption=AddMenuOption("Start Game",#Mode_Game_Init) *MenuOption=AddMenuOption("Difficulty",-1,-1,"Novice|Normal|Hard|Madness",@Game\ScoreData\Difficulty) *MenuOption=AddMenuOption("Options",#Mode_Options) *MenuOption=AddMenuOption("JukeBox",#Mode_JukeBox) If Game\ConnectToServer=#False *MenuOption=AddMenuOption("Hall Of Fame",#Mode_HallOfFame) Else *MenuOption=AddMenuOption("World Hall Of Fame",#Mode_HallOfFame) EndIf *MenuOption=AddMenuOption("Credits",#Mode_Credits) FinalizeMenu() AddItemToDisplayEngine(0,#Type_DisplayMenu) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) Game\DisplayCursor=#True ;-Init Mode Options Case #Mode_Options ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() NewMenu("Options") *MenuOption=AddMenuOption("Score On Internet",-1,-1,"No|Yes",@Game\ConnectToServer) *MenuOption=AddMenuOption("Fluid Cursor",-1,-1,"No|Yes",@Game\FluidCursor) *MenuOption=AddMenuOption("Graphics",#Mode_Graphics) *MenuOption=AddMenuOption("Audios",#Mode_Audios) *MenuOption=AddMenuOption("Return",#Mode_Menu) FinalizeMenu() AddItemToDisplayEngine(0,#Type_DisplayMenu) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) ;-Init Mode Graphics Case #Mode_Graphics ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() Protected txt.s="" NewMenu("Graphics") *MenuOption=AddMenuOption("FullScreen",-1,-1,"No|Yes",@GUI\FullScreen) ForEach GUI\ScreenResolution() Txt+GUI\ScreenResolution()+"|" Next Txt=Left(Txt,Len(Txt)-1) ; Delete Last "|" *MenuOption=AddMenuOption("Screen Resolution",-1,-1,Txt,@GUI\ScreenResolutionIndex) txt="" ForEach GUI\WindowResolution() Txt+GUI\WindowResolution()+"|" Next Txt=Left(Txt,Len(Txt)-1) ; Delete Last "|" *MenuOption=AddMenuOption("Window Resolution",-1,-1,Txt,@GUI\WindowResolutionIndex) *MenuOption=AddMenuOption("Save",-1,#EventGui_NewResolution) FinalizeMenu() AddItemToDisplayEngine(0,#Type_DisplayMenu) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) ;-Init Mode Audios Case #Mode_Audios ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() NewMenu("Audio") *MenuOption=AddMenuOption("Music",-1,#EventGui_ChangeMusicVolume,"0%|10%|20%|30%|40%|50%|60%|70%|80%|90%|100%",@Game\VolumeMusic) *MenuOption=AddMenuOption("Sfx",-1,#EventGui_ChangeSfxVolume,"0%|10%|20%|30%|40%|50%|60%|70%|80%|90%|100%",@Game\VolumeSfx) *MenuOption=AddMenuOption("Return",#Mode_Options) FinalizeMenu() AddItemToDisplayEngine(0,#Type_DisplayMenu) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) ;-Init JukeBox Case #Mode_JukeBox ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() NewMenu("JukeBox") *MenuOption=AddMenuOption("Select Music",-1,#EventGui_ChangeVinyl,"Intro|Game Novice/Normal|Game Hard/Madness|GameMissed|GameOver|HighScore|Credits",@Game\JukeBoxIndex) *MenuOption=AddMenuOption("Return",#Mode_Menu) FinalizeMenu() StopMusic(game\CurrentMusic) Game\CurrentMusic =-1 ; To force To play if play same music played before PlaySound(#Snd_Jukebox) Game\ObjetVinyl=NewSprite(#Spr_Vinyl,22,GUI\ScreenHeight/2,-1,-1,255,2,#Spr_Depth_Front,#Align_Hor_Right|#Align_Ver_Middle) AddItemToDisplayEngine(Game\ObjetVinyl,#Type_Sprite) AddmoveToEngine(@Game\ObjetVinyl\X,#PB_Float,0,2000,24,20,0,#EventGui_PlayJukeBox) AddItemToDisplayEngine(0,#Type_DisplayMenu) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) ;-Init Mode Credits Case #Mode_Credits ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() StartMusic(#Music_Credits,#True) AddTitle("Credits",1) TitlesCenter(#True) AddTitle("Original Concept By Ian Upton",0) AddTitle("Graphics by Yann Lebrun",0) AddTitle("Code by Yann Lebrun",0) AddTitle("Music by Alex Menchi",0) AddTitle("SFX by mixkit.co - freesound.org",0) AddTitle("",0) AddTitle("Mindphazer MacOs Test",0) AddTitle("",0) AddTitle("Musical Themes inspired by",1) AddTitle("David Wittaker",0) AddTitle("Alexandre Ekian",0) AddTitle("Stephane Picq",0) AddTitle("",0) AddTitle("Thanks",1) AddTitle("Delphine Le Philippe",0) AddTitle("",0) AddTitle("Other Thanks",1) Addtitle("Frederic Laboureur",0) Addtitle("Alain (Poum) Massoumipour",0) Addtitle("Jay Miner",0) AddTitle("",0) AddTitle("Big Up!",1) AddTitle("Purebasic community",0) AddTitle("Amiga and Amstrad community",0) AddTitle("Roller Skating Family",0) AddTitle("St Joseph Team",0) AddTitle("Frederic (scr33tch) Boisdron",0) AddTitle("Walid (Hybrid) Moghrabi",0) AddTitle("Eric (Titan) Cubizolle",0) AddTitle("Pascal (Deckard) Visa",0) AddTitle("Jesahel (Djes) Benoist",0) AddTitle("",0) AddTitle("",0) AddTitle("",0) AddTitle("",0) AddTitle("",0) AddTitle("",0) AddTitle("",0) AddTitle("",0) AddTitle("Don't Forget, there is a worm in Apple !") Titles\LineSpacing=0 Titles\Alpha=255 Titles\Speed=10000 Titles\ScrollY=0 AddItemToDisplayEngine(0,#Type_DisplayTitle) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) ;-Init Mode Game Init Case #Mode_Game_Init RandomSeed(ElapsedMilliseconds()) ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() If Game\ScoreData\Difficulty<2 StartMusic(#Music_GameA,#True) Else StartMusic(#Music_GameB,#True) EndIf ResetGame() *Obj_Sprite=NewSprite(#Spr_Sc,1,8,3,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,2000,-3,1,#Easing_ElasticEaseIn) *Obj_Sprite=NewSprite(#Spr_Sc,GUI\ScreenWidth-4,8,3,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,2000,GUI\ScreenWidth,GUI\ScreenWidth-4,#Easing_ElasticEaseIn) Protected.l Bx,By Protected.f SX,SY,EX,EY Protected.l Angle For By=0 To #MaxTableHeight For Bx=0 To #MaxTableWidth SX=GUI\ScreenWidth/2+#MaxTableWidth*Cos(Angle) SY=GUI\ScreenHeight/2+#MaxTableWidth*Sin(Angle) Angle=Angle+2 If (Bx+(By*#MaxTableWidth))%2 *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) Else *Obj_Sprite=NewSprite(#Spr_BenchB,0,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) EndIf Protected time.l=Random(3000,2000) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,1000,time,SX,BX+1,#Easing_ElasticEaseOut) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,1000,time,SY,BY+1,#Easing_ElasticEaseOut) Next Next AddmoveToEngine(0,0,0,3000,0,0,0,1000+#Mode_Game_Run) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,0,2000,2,0,#Easing_ElasticEaseIn) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,0,2000,2,0,#Easing_ElasticEaseIn) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,0,2000,255,0,0) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,0,1000,1,-2,#Easing_ElasticEaseIn) ;-Init Mode Game Run Case #Mode_Game_Run ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayBench) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayCursor) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayTimer) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayScore) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayMessage) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayBonus) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayEarthQuakeFall) Game\ObjetBlueJewel=NewSprite(#Spr_JewelBlue,8,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetBlueJewel,#Type_Sprite) AddmoveToEngine(@Game\ObjetBlueJewel\Opacity,#PB_Float,0,2000,0,255,0) Game\ObjetBlueJewelValue=NewText(0,"x"+Str(Game\ScoreData\Bonus_JewelBlue),(8+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetBlueJewelValue,#Type_BitmapText) AddmoveToEngine(@Game\ObjetBlueJewelValue\Opacity,#PB_Long,0,2000,0,255,0) Game\ObjetRedJewel=NewSprite(#Spr_JewelRed,11,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetRedJewel,#Type_Sprite) AddmoveToEngine(@Game\ObjetRedJewel\Opacity,#PB_Float,0,2000,0,255,0) Game\ObjetRedJewelValue=NewText(0,"x"+Str(Game\ScoreData\Bonus_JewelRed),(11+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetRedJewelValue,#Type_BitmapText) AddmoveToEngine(@Game\ObjetRedJewelValue\Opacity,#PB_Long,0,2000,0,255,0) Game\ObjetGreenJewel=NewSprite(#Spr_JewelGreen,14,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetGreenJewel,#Type_Sprite) AddmoveToEngine(@Game\ObjetGreenJewel\Opacity,#PB_Float,0,2000,0,255,0) Game\ObjetGreenJewelValue=NewText(0,"x"+Str(Game\ScoreData\Bonus_JewelGreen),(14+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetGreenJewelValue,#Type_BitmapText) AddmoveToEngine(@Game\ObjetGreenJewelValue\Opacity,#PB_Long,0,2000,0,255,0) ResetGame() RunEarthQuake() NewMessage("Let's Go !!!") ;-Init Mode GameOver Case #Mode_GameOver ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() StartMusic(#Music_GameOver,#True) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayBench) ;AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayCursor) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayScore) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayMessage) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayBonus) AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayEarthQuakeFall) ;AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayTimer) Game\ObjetBlueJewel=NewSprite(#Spr_JewelBlue,8,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetBlueJewel,#Type_Sprite) Game\ObjetBlueJewelValue=NewText(0,"x"+Str(Game\ScoreData\Bonus_JewelBlue),(8+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetBlueJewelValue,#Type_BitmapText) Game\ObjetRedJewel=NewSprite(#Spr_JewelRed,11,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetRedJewel,#Type_Sprite) Game\ObjetRedJewelValue=NewText(0,"x"+Str(Game\ScoreData\Bonus_JewelRed),(11+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetRedJewelValue,#Type_BitmapText) Game\ObjetGreenJewel=NewSprite(#Spr_JewelGreen,14,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetGreenJewel,#Type_Sprite) Game\ObjetGreenJewelValue=NewText(0,"x"+Str(Game\ScoreData\Bonus_JewelGreen),(14+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetGreenJewelValue,#Type_BitmapText) *Obj_Text=NewText(1,"GAME OVER",ScreenWidth()/2,GUI\BenchHeight/2+GUI\BlockSize,0,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,0,2000,0,255,0) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,5000,2000,255,0,0,-1,@*Obj_Text\Autodestroy) Game\ScoreData\Duration=ElapsedMilliseconds()-Stats\StartGameTimer ; End Game i record party duration ;-Init Mode GameOver End Case #Mode_GameOver_End Debug ("Init Mode GameOver End") ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() StartMusic(#Music_GameOver,#True) Game\StartCalculBonus=#False ; Wait End Animation Before Start Calcul Protected TmpX.l ;Blue Jewel Game\ObjetBlueJewel=NewSprite(#Spr_JewelBlue,8,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetBlueJewel,#Type_Sprite) Game\ObjetBlueJewelValue=NewText(0,Str(Stats\Bonus_JewelBlue)+"x10",(9+1) * GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetBlueJewelValue,#Type_BitmapText) TmpX=20/5 AddmoveToEngine(@Game\ObjetBlueJewel\X,#PB_Float,0,2000,8,TmpX,0) AddmoveToEngine(@Game\ObjetBlueJewel\Y,#PB_Float,0,2000,0,3,0) AddmoveToEngine(@Game\ObjetBlueJewelValue\X,#PB_Long,0,2000,(8+1) * GUI\BlockSize,(TmpX+1)* GUI\BlockSize,0) AddmoveToEngine(@Game\ObjetBlueJewelValue\Y,#PB_Long,0,2000,0,3 * GUI\BlockSize,0) ;Red Jewel Game\ObjetRedJewel=NewSprite(#Spr_JewelRed,11.5,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetRedJewel,#Type_Sprite) Game\ObjetRedJewelValue=NewText(0,Str(Stats\Bonus_JewelRed)+"x20",(11+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetRedJewelValue,#Type_BitmapText) AddmoveToEngine(@Game\ObjetRedJewelValue\Opacity,#PB_Long,0,2000,0,255,0) TmpX=20/5*2 AddmoveToEngine(@Game\ObjetRedJewel\X,#PB_Float,0,2000,11,TmpX,0) AddmoveToEngine(@Game\ObjetRedJewel\Y,#PB_Float,0,2000,0,3,0) AddmoveToEngine(@Game\ObjetRedJewelValue\X,#PB_Long,0,2000,(11+1) * GUI\BlockSize,(TmpX+1)* GUI\BlockSize,0) AddmoveToEngine(@Game\ObjetRedJewelValue\Y,#PB_Long,0,2000,0,3 * GUI\BlockSize,0) ;Green Jewel Game\ObjetGreenJewel=NewSprite(#Spr_JewelGreen,14,0,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetGreenJewel,#Type_Sprite) Game\ObjetGreenJewelValue=NewText(0,Str(Stats\Bonus_JewelGreen)+"x40",(14+1)*GUI\BlockSize,0,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetGreenJewelValue,#Type_BitmapText) TmpX=20/5*3 AddmoveToEngine(@Game\ObjetGreenJewel\X,#PB_Float,0,2000,14,TmpX,0) AddmoveToEngine(@Game\ObjetGreenJewel\Y,#PB_Float,0,2000,0,3,0) AddmoveToEngine(@Game\ObjetGreenJewelValue\X,#PB_Long,0,2000,(14+1) * GUI\BlockSize,(TmpX+1)* GUI\BlockSize,0) AddmoveToEngine(@Game\ObjetGreenJewelValue\Y,#PB_Long,0,2000,0,3 * GUI\BlockSize,0) ;Jewel Score TmpX=20/5*4 Game\ObjetText[0]=NewText(0,"= 00000",TmpX * GUI\BlockSize,3 * GUI\BlockSize,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetText[0],#Type_BitmapText) AddmoveToEngine(@Game\ObjetText[0]\X,#PB_Long,0,2000,ScreenWidth(),TmpX* GUI\BlockSize,#Easing_ElasticEaseOut) ;Biggest Loop Game\ObjetText[1]=NewText(0,"Biggest Loop "+MyFormatNumber("00",Stats\BigestLoopSize)+" x 5",(TmpX-1)* GUI\BlockSize,4*GUI\BlockSize,255,#Spr_Depth_Front,#Align_Hor_Right|#Align_Ver_Top) AddItemToDisplayEngine(Game\ObjetText[1],#Type_BitmapText) ;AddmoveToEngine(@*Obj_Text\X,#PB_Long,1000,4000,-*Obj_Text\Width,6*GUI\BlockSize,0) Game\ObjetText[2]=NewText(0,"= 00000",TmpX * GUI\BlockSize,4 * GUI\BlockSize,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetText[2],#Type_BitmapText) AddmoveToEngine(@Game\ObjetText[2]\X,#PB_Long,0,2000,ScreenWidth(),TmpX* GUI\BlockSize,#Easing_ElasticEaseOut) ;Number of Loops Game\ObjetText[3]=NewText(0,"Number of Loops "+MyFormatNumber("00",Stats\NbLoop)+" x 10",(TmpX-1)* GUI\BlockSize,5 * GUI\BlockSize,255,#Spr_Depth_Front,#Align_Hor_Right|#Align_Ver_Top) AddItemToDisplayEngine(Game\ObjetText[3],#Type_BitmapText) Game\ObjetText[4]=NewText(0,"= 00000",TmpX * GUI\BlockSize,5 * GUI\BlockSize,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetText[4],#Type_BitmapText) AddmoveToEngine(@Game\ObjetText[4]\X,#PB_Long,0,2000,ScreenWidth(),TmpX* GUI\BlockSize,#Easing_ElasticEaseOut) ;Cleaned Bench Game\ObjetText[5]=NewText(0,Str(Stats\BenchIsEmpty)+" Cleaned Bench x 500",(TmpX-1)* GUI\BlockSize,6 * GUI\BlockSize,255,#Spr_Depth_Front,#Align_Hor_Right|#Align_Ver_Top) AddItemToDisplayEngine(Game\ObjetText[5],#Type_BitmapText) Game\ObjetText[6]=NewText(0,"= 00000",TmpX * GUI\BlockSize,6 * GUI\BlockSize,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetText[6],#Type_BitmapText) AddmoveToEngine(@Game\ObjetText[6]\X,#PB_Long,0,2000,ScreenWidth(),TmpX* GUI\BlockSize,#Easing_ElasticEaseOut) ;Bonus Score *Obj_Text=NewText(1,"Bonus",(TmpX-1)* GUI\BlockSize,7 * GUI\BlockSize,255,#Spr_Depth_Front,#Align_Hor_Right|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) Game\ObjetText[7]=NewText(1,"= 00000",TmpX * GUI\BlockSize,7 * GUI\BlockSize,255,#Spr_Depth_Front) AddItemToDisplayEngine(Game\ObjetText[7],#Type_BitmapText) AddmoveToEngine(@Game\ObjetText[7]\X,#PB_Long,0,2000,ScreenWidth(),TmpX* GUI\BlockSize,#Easing_ElasticEaseOut) Game\ObjetText[8]=NewText(0,"",ScreenWidth()/2,8 * GUI\BlockSize,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(Game\ObjetText[8],#Type_BitmapText) ; Bench For By=0 To #MaxTableHeight For Bx=0 To #MaxTableWidth SX=GUI\ScreenWidth/2+#MaxTableWidth*Cos(Angle) SY=GUI\ScreenHeight/2+#MaxTableWidth*Sin(Angle) Angle=Angle+2 If (Bx+(By*#MaxTableWidth))%2 *Obj_Sprite=NewSprite(#Spr_BenchA,BX+1,BY+1,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) Else *Obj_Sprite=NewSprite(#Spr_BenchB,BX+1,BY+1,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) EndIf time.l=Random(2000,1000) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,time,BX+1,SX,#Easing_ElasticEaseIn,-1,@*Obj_Sprite\AutoDestroy) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,0,time,BY+1,SY,#Easing_ElasticEaseIn,-1,@*Obj_Sprite\AutoDestroy) Next Next AddmoveToEngine(0,0,0,2000,0,0,0,#EventGui_StartCalculBonus) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,0,2000,0,2,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,0,2000,0,2,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,0,2000,0,255,0) *Obj_Sprite=NewSprite(#Spr_Remix,10,-2,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,0,1000,-2,1,#Easing_ElasticEaseOut) Case -1 ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() StartMusic(#Music_GameOver,#True) Game\StartCalculBonus=#False ; Wait End Animation Before Start Calcul *Obj_Text=NewText(1,"Bonus",(ScreenWidth()- TextBitmapWidth("Bonus")) / 2,GUI\BlockSize*2,255,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) Protected.f Y=3*GUI\BlockSize: Protected.l X=13*GUI\BlockSize ;CalculBonus\BonusA=NewText(0,"Biggest "+MyFormatNumber("00",Stats\BigestLoopSize)+" x 1",6*GUI\BlockSize,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusA,#Type_BitmapText) ;AddmoveToEngine(@*Obj_Text\X,#PB_Long,1000,4000,-*Obj_Text\Width,6*GUI\BlockSize,0) ;CalculBonus\BonusAResult=NewText(0,"= "+Str(Stats\BigestLoopSize*10),X,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusAResult,#Type_BitmapText) Y=Y+GUI\BlockSize ;CalculBonus\BonusB=NewText(0,MyFormatNumber("000",Stats\NbLoop)+" Loops x 10",6*GUI\BlockSize,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusB,#Type_BitmapText) ; CalculBonus\BonusBResult=NewText(0,"= "+Str(Stats\NbLoop*10),X,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusBResult,#Type_BitmapText) Y=Y+GUI\BlockSize ;CalculBonus\BonusC=NewText(0,MyFormatNumber("00",Stats\Bonus_JewelBlue)+" x 20",9*GUI\BlockSize,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusC,#Type_BitmapText) *Obj_Sprite=NewSprite(#Spr_JewelBlue,8,Y/GUI\BlockSize,-1,-1,255,1) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,1000,1500,GUI\JewelBlue_X / GUI\BlockSize,8,0) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,1000,1500,0,Y/GUI\BlockSize,0) ; CalculBonus\BonusCResult=NewText(0,"= "+Str(Stats\Bonus_JewelBlue*20),X,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusCResult,#Type_BitmapText) Y=Y+GUI\BlockSize ;CalculBonus\BonusD=NewText(0,MyFormatNumber("00",Stats\Bonus_JewelRed)+" x 20",9*GUI\BlockSize,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusD,#Type_BitmapText) *Obj_Sprite=NewSprite(#Spr_JewelRed,8,Y/GUI\BlockSize,-1,-1,255,1) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,1000,1500,GUI\JewelRed_X / GUI\BlockSize,8,0) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,1000,1500,0,Y/GUI\BlockSize,0) ;CalculBonus\BonusDResult=NewText(0,"= "+Str(Stats\Bonus_JewelRed*20),X,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusDResult,#Type_BitmapText) Y=Y+GUI\BlockSize ;CalculBonus\BonusE=NewText(0,Str(Stats\BenchIsEmpty)+" Cleaned Bench x 500",3*GUI\BlockSize,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusE,#Type_BitmapText) ;CalculBonus\BonusEResult=NewText(0,"= "+Str(Stats\BenchIsEmpty*500),X,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusEResult,#Type_BitmapText) Y=Y+GUI\BlockSize*1 ;CalculBonus\BonusF=NewText(1,"Score",9*GUI\BlockSize,Y,255,#Spr_Depth_Front) ; AddItemToDisplayEngine(CalculBonus\BonusF,#Type_BitmapText) ;CalculBonus\BonusFResult=NewText(1,"= "+MyFormatNumber("00000",Game\ScoreData\Score),X,Y,255,#Spr_Depth_Front) ;AddItemToDisplayEngine(CalculBonus\BonusFResult,#Type_BitmapText) *Obj_Sprite=NewSprite(#Spr_Sc,1,8,3,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,2000,1,-3,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_Sc,GUI\ScreenWidth-4,8,3,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,2000,GUI\ScreenWidth-4,GUI\ScreenWidth,#Easing_ElasticEaseOut) For By=0 To #MaxTableHeight For Bx=0 To #MaxTableWidth SX=GUI\ScreenWidth/2+#MaxTableWidth*Cos(Angle) SY=GUI\ScreenHeight/2+#MaxTableWidth*Sin(Angle) Angle=Angle+2 If (Bx+(By*#MaxTableWidth))%2 *Obj_Sprite=NewSprite(#Spr_BenchA,BX+1,BY+1,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) Else *Obj_Sprite=NewSprite(#Spr_BenchB,BX+1,BY+1,-1,-1,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) EndIf time.l=Random(2000,1000) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,time,BX+1,SX,#Easing_ElasticEaseIn) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,0,time,BY+1,SY,#Easing_ElasticEaseIn) Next Next AddmoveToEngine(0,0,0,2000,0,0,0,#EventGui_StartCalculBonus) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,0,2000,0,2,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,0,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Height,#PB_Float,0,2000,0,2,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Opacity,#PB_Float,0,2000,0,255,0) *Obj_Sprite=NewSprite(#Spr_Remix,10,-2,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,0,1000,-2,1,#Easing_ElasticEaseOut) *Obj_Text=NewText(0,"Press Space to SpeedUp",ScreenWidth()/2,ScreenHeight()-GUI\BlockSize,0,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,2000,2000,0,255,0) ;-Init Mode Enter Your Name Case #Mode_EnterYourName Debug ("Init Mode Enter Your Name") ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() ClearMoveEngine() *Obj_Text=NewText(1,"Score "+MyFormatNumber("00000",Game\ScoreData\Score),ScreenWidth()/2,GUI\DoubleBlockSize,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Y,#PB_Long,0,1000,ScreenHeight(),GUI\DoubleBlockSize,#Easing_ElasticEaseOut) *Obj_Text=NewText(0,"Enter your name",ScreenWidth()/4,GUI\BlockSize*3.5,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,0,1000,0,255,0) Game\ObjetText[0]=NewText(1,Game\ScoreData\Pseudo,ScreenWidth()/4,GUI\BlockSize*5,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(Game\ObjetText[0],#Type_BitmapText) AddmoveToEngine(@Game\ObjetText[0]\X,#PB_Long,0,1000,-Game\ObjetText[0]\X,ScreenWidth()/4,#Easing_ElasticEaseOut) Game\ObjetText[8]=NewText(0,"Return to Continue",ScreenWidth()/2,8 * GUI\BlockSize,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(Game\ObjetText[8],#Type_BitmapText) ;Calcul Rythme n=0 Protected PieceTime.f,LoopTime.f If ListSize(Stats\PieceTime())>0 ;If No Piece = Infiny ForEach Stats\PieceTime() n=n+Stats\PieceTime() Next PieceTime=n/ListSize(Stats\PieceTime()) Game\ScoreData\PiecesPerMinute=60/(PieceTime/1000) Else Game\ScoreData\PiecesPerMinute=-1 EndIf n=0; ForEach Stats\LoopTime() n=n+Stats\LoopTime() Next If ListSize(Stats\LoopTime())>0 ; If No Loop = Infiny LoopTime=n/ListSize(Stats\LoopTime()) Game\ScoreData\LoopsPerMinute=60/(LoopTime/1000) Else Game\ScoreData\LoopsPerMinute=-1 EndIf n=0; ForEach Stats\NbPieces() n=n+Stats\NbPieces() Next If ListSize(Stats\NbPieces())>0 Game\ScoreData\AveragePiecesPerLoop=n/ListSize(Stats\NbPieces()) EndIf *Obj_Text=NewText(0,"Your Rythme",ScreenWidth()*3/4,GUI\BlockSize*3.5,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Opacity,#PB_Long,0,1000,0,255,0) *Obj_Text=NewText(0,StrF(Game\ScoreData\PiecesPerMinute,2)+" Pieces/Min",ScreenWidth()*3/4,GUI\BlockSize*5,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Y,#PB_Long,0,1800,ScreenHeight(),GUI\BlockSize*5,#Easing_ElasticEaseOut) *Obj_Text=NewText(0,StrF(Game\ScoreData\LoopsPerMinute,2)+" Loops/Min",ScreenWidth()*3/4,GUI\BlockSize*6,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Y,#PB_Long,0,1900,ScreenHeight(),GUI\BlockSize*6,#Easing_ElasticEaseOut) *Obj_Text=NewText(0,StrF(Game\ScoreData\AveragePiecesPerLoop,2)+" Pieces/Loop",ScreenWidth()*3/4,GUI\BlockSize*7,255,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) AddmoveToEngine(@*Obj_Text\Y,#PB_Long,0,2000,ScreenHeight(),GUI\BlockSize*7,#Easing_ElasticEaseOut) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) ;-Init Mode HallOfFame Case #Mode_HallOfFame Debug ("Init Mode HallOfFame") ClearAllSprite() ClearTitles() ClearAllText() ClearDisplayEngine() StartMusic(#Music_HighScore) DrawingBitmapFont(0) BitmapFont()\Tab(0)=1.5* GUI\BlockSize ;Pseudo BitmapFont()\Tab(1)=6* GUI\BlockSize ;Score BitmapFont()\Tab(2)=9* GUI\BlockSize ;piece time BitmapFont()\Tab(3)=13.5* GUI\BlockSize; Lop/min BitmapFont()\Tab(4)=18 * GUI\BlockSize ; Duration TitlesCenter(#False) If Game\ComeFromMode=#Mode_HallOfFame Or Game\ComeFromMode=#Mode_Menu If Game\ConnectToServer=#True LoadHallOfFameFromServer(Game\HallOfFameDifficultyMode) HallofFamelistToTitle(Game\LastInsertIdServer) Else LoadHallOfFame(Game\HallOfFameDifficultyMode) EndIf TitlesEvent(#EventGui_NextHallOfFame) Else If Game\ConnectToServer=#True LoadHallOfFameFromServer(Game\ScoreData\Difficulty) HallofFamelistToTitle(Game\LastInsertIdServer) Else LoadHallOfFame(Game\ScoreData\Difficulty) ;<- Database.pbi EndIf EndIf Titles\LineSpacing=0.5 Titles\Alpha=255 AddItemToDisplayEngine(*Obj_Sprite,#Type_DisplayTitle) *Obj_Sprite=NewSprite(#Spr_BckgrndFadeUp,0,2,GUI\ScreenWidth,3,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BckgrndFadeDown,0,GUI\ScreenHeight-2,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) text="Hall Of Fame" DrawingBitmapFont(1) ;Used by TextBitmapWidth() next line *Obj_Text=NewText(1,text,(ScreenWidth()- TextBitmapWidth(text)) / 2,GUI\DoubleBlockSize,255) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) Protected D.l If Game\ComeFromMode=#Mode_HallOfFame Or Game\ComeFromMode=#Mode_Menu D=Game\HallOfFameDifficultyMode Else D=Game\ScoreData\Difficulty EndIf Select D Case 0 ;Novice Text="Novice" Case 1 ;Normal Text="Normal" Case 2 ;Hard Text="Hard" Case 3 ;Madness Text="Madness" EndSelect If Game\ConnectToServer=#True text="World "+Text EndIf DrawingBitmapFont(0) ;Used by TextBitmapWidth() next line *Obj_Text=NewText(0,text,(ScreenWidth()- TextBitmapWidth(text)) / 2,GUI\DoubleBlockSize+GUI\BlockSize,255) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) *Obj_Sprite=NewSprite(#Spr_BenchA,0,0,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_BenchC,0,GUI\ScreenHeight,GUI\ScreenWidth,2,255,1,#Spr_Depth_Front,#Align_Hor_Left|#Align_Ver_Bottom) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Logo,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) *Obj_Sprite=NewSprite(#Spr_Remix,10,1,-1,-1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Top) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) EndSelect EndProcedure Procedure ScreenShoot() Protected File.s Protected n.l=-1 If KeyboardReleased(#PB_Key_F10) Debug "Screenshoot" GrabSprite(100,0,0,ScreenWidth(),ScreenHeight()) Repeat n=n+1 File=Str(n) File=Left("1000",4-Len(File))+File File=GetUserDirectory(#PB_Directory_Desktop)+"Loopz-"+File+".png" Until FileSize(File)=-1 SaveSprite(100,File,#PB_ImagePlugin_PNG ) FreeSprite(100) EndIf EndProcedure Procedure DisplayBench() Protected Bx.l Protected By.l Protected Tmpx.l Protected Tmpy.l Protected Spr.l Protected Selected.l DisplayClipSprite(#Spr_SelectedBackground,GUI\BenchX+ EarthQuake\DeltaX,GUI\BenchY+ EarthQuake\DeltaY,255,1,GUI\BenchWidth,GUI\BenchHeight) Game\NbPiecesOnBench=0 For By=0 To #MaxTableHeight For Bx=0 To #MaxTableWidth TmpX=Bx * GUI\BlockSize + GUI\BenchX+ EarthQuake\DeltaX TmpY=By * GUI\BlockSize + GUI\BenchY+ EarthQuake\DeltaY Spr=Game\GameTable(Bx,By)\Sprite Selected=Game\GameTable(Bx,By)\Selected If Spr>0 Game\NbPiecesOnBench=Game\NbPiecesOnBench+1 If Selected=#False DisplayClipSprite(#Spr_Black,TmpX,TmpY,255) EndIf ;If Game\GameTable(Bx,By)\BonusOnThisCase=#True ; Spr=#Spr_Black ;EndIf DisplayClipSprite(Spr,TmpX,TmpY,255) Else If (Bx+(By*#MaxTableWidth))%2 Spr=#Spr_BenchA Else Spr=#Spr_BenchB EndIf DisplayClipSprite(Spr,TmpX,TmpY,255) EndIf Next Next EndProcedure Procedure DisplayTimer() ;-Timer If Bonus\FreezeEnable=#True If (ElapsedMilliseconds()-Bonus\FreezeStartTime)/1000>10 Bonus\FreezeAlpha=Bonus\FreezeAlpha-1 Bonus\FreezeTimer=Bonus\FreezeTimer-1 If Bonus\FreezeAlpha=0 Bonus\FreezeEnable=#False EndIf Else Bonus\FreezeAlpha=255 EndIf Game\NextTime=ElapsedMilliseconds()+Bonus\FreezeTimer-1 EndIf If Game\WaitTimer=0 And Game\Timer>0 Protected Width.l= GUI\TimerWidth * (Game\NextTime-ElapsedMilliseconds()) / Game\Timer DisplayClipSprite(#Spr_Black,GUI\TimerX,GUI\TimerY,255,1,GUI\TimerWidth,GUI\BlockSize) DisplayClipSprite(#Spr_White,GUI\TimerX,GUI\TimerY,255,1,Width,GUI\BlockSize) Protected TimerTxt.s TimerTxt=StrF(Game\Timer/1000,1)+" Sec" DrawBitmapText((ScreenWidth()-TextBitmapWidth(TimerTxt))/2,GUI\TimerY,TimerTxt) If Bonus\FreezeEnable=#True DisplayClipSprite(#Spr_Frozen,GUI\TimerX,GUI\TimerY,Bonus\FreezeAlpha) EndIf If ElapsedMilliseconds()>Game\NextTime RandomShape() Game\Life=Game\Life-1 If Game\Life>0 StartMusic(#Music_Missed,#True) NewMessage("Missed",0) NewBonus(#Bonus_Time) Game\WaitTimer=ElapsedMilliseconds()+Game\Difficulty(Game\ScoreData\Difficulty)\WaitMissed Else Debug "Game Over : End Timer" Game\Mode=#Mode_GameOver InitGameMode(#Mode_GameOver) EndIf EndIf EndIf EndProcedure Procedure DisplayScore() Protected Score.s=Str(Game\ScoreData\Score) Score=Left("0000",4-Len(Score))+Score Protected Width.l=TextBitmapWidth(Score) DisplayClipSprite(#Spr_Sc,GUI\BlockSize,GUI\BenchY+GUI\BenchHeight,255,1) DrawingBitmapFont(0) DrawBitmapText(GUI\BenchX+((GUI\BlockSize*3)-Width)/2,GUI\BenchY+GUI\BenchHeight+GUI\HalfBlockSize, Score); Protected.l Minutes,Seconds,Duration Duration=ElapsedMilliseconds()-Stats\StartGameTimer Minutes=(Duration/1000)/60 Seconds=(Duration/1000)%60 DisplayClipSprite(#Spr_Sc,ScreenWidth()-GUI\BlockSize*4,GUI\BenchY+GUI\BenchHeight,255,1) DrawBitmapText(ScreenWidth()-GUI\BlockSize*3.5,GUI\BenchY+GUI\BenchHeight+GUI\HalfBlockSize, MyFormatNumber("00",Minutes)+":"+MyFormatNumber("00",Seconds)); ;-Display DIfficulty Protected Text.s Select Game\ScoreData\Difficulty Case 0 ;Novice Text="Novice" Case 1 ;Normal Text="Normal" Case 2 ;Hard Text="Hard" Case 3 ;Madness Text="Madness" EndSelect DrawBitmapText(0,0,Text) If Bonus\EyeEnable=#True DrawShape(GUI\TimerX+GUI\TimerWidth+GUI\BlockSize-GUI\QuarterBlockSize,GUI\TimerY-GUI\QuarterBlockSize,Game\NextShape,128,0.5) EndIf ;-Display Life Protected n.l Protected lifeSpace.l If Game\Life<4 lifeSpace=GUI\BlockSize Else lifeSpace=4*GUI\BlockSize/Game\Life EndIf For n=1 To Game\Life DisplayClipSprite(#Spr_Health,ScreenWidth()-lifeSpace*n,0,255,1,GUI\BlockSize,GUI\BlockSize) Next ;Display Jewel Game\ObjetBlueJewelValue\String="x"+Str(Game\ScoreData\Bonus_JewelBlue); Game\ObjetRedJewelValue\String="x"+Str(Game\ScoreData\Bonus_JewelRed); Game\ObjetGreenJewelValue\String="x"+Str(Game\ScoreData\Bonus_JewelGreen); If Bonus\RemoveEnable=#True DisplayClipSprite(#Spr_Remove,GUI\BlockSize*3,0) ;Duration=(ElapsedMilliseconds()-Bonus\Remove_StartTime) ;If Duration>Game\Difficulty(Game\ScoreData\Difficulty)\BonusRemoveDuration ; Bonus\RemoveEnable=#False ; Bonus\Remove_StartTime=0 ;Else ; DrawBitmapText(GUI\BlockSize*4,0,MyFormatNumber("00",(Game\Difficulty(Game\ScoreData\Difficulty)\BonusRemoveDuration-Duration)/1000)); ;EndIf EndIf If Bonus\HammerEnable=#True DisplayClipSprite(#Spr_Hammer,GUI\BlockSize*3,0) Duration=(ElapsedMilliseconds()-Bonus\Hammer_StartTime) If Duration>Game\Difficulty(Game\ScoreData\Difficulty)\BonusHammerDuration Bonus\HammerEnable=#False Bonus\Hammer_StartTime=0 Else DrawBitmapText(GUI\BlockSize*4,0,MyFormatNumber("00",(Game\Difficulty(Game\ScoreData\Difficulty)\BonusHammerDuration-Duration)/1000)); EndIf EndIf ; Bonus X2 If Bonus\X2Enable>3 Bonus\X2Enable=3 EndIf Select Bonus\X2Enable Case 1 DisplayClipSprite(#Spr_X2,GUI\BlockSize*5,0) Case 2 DisplayClipSprite(#Spr_X4,GUI\BlockSize*5,0) Case 3 DisplayClipSprite(#Spr_X8,GUI\BlockSize*5,0) EndSelect EndProcedure Procedure DisplayCursor() Protected MX.l Protected MY.l Protected Bx.l Protected By.l Protected TmpX.l Protected TmpY.l Static MouseBL.l Static MouseBR.l MX=MouseX()-GUI\BlockSize MY=MouseY()-GUI\BlockSize Bx=Int(MX / GUI\BlockSize) By=Int(MY / GUI\BlockSize) If Bx<0:Bx=0:EndIf If By<0:Bx=0:EndIf If Bx>#MaxTableWidth Bx=#MaxTableWidth EndIf If By>#MaxTableHeight By=#MaxTableHeight EndIf Game\BlockMouseX=Bx Game\BlockMouseY=By TmpX=Bx * GUI\BlockSize + GUI\BenchX TmpY=By * GUI\BlockSize + GUI\BenchY If Game\WaitTimer>0 ;DisplayClipSprite(#Spr_Cursor,TmpX,TmpY,255) If ElapsedMilliseconds()>Game\WaitTimer Game\NextTime=ElapsedMilliseconds()+Game\Timer Game\WaitTimer=0 EraseSelectedPieceOnBench() EndIf Else EndIf ;Display Cursor If Game\FluidCursor=#True If Not Game\WaitTimer>0 And Bonus\RemoveEnable=#False DrawShape(MX+GUI\HalfBlockSize,MY+GUI\HalfBlockSize,Game\SelectedShape,200) EndIf DisplayClipSprite(#Spr_Cursor,MX+GUI\HalfBlockSize,MY+GUI\HalfBlockSize,255) Else If Not Game\WaitTimer>0 And Bonus\RemoveEnable=#False DrawShape(TmpX,TmpY,Game\SelectedShape,200) EndIf DisplayClipSprite(#Spr_Cursor,TmpX,TmpY,255) EndIf If ListSize(Bonus\DisplayedBonus())>0 TakeBonus(Bx.l,By.l) EndIf If Game\WaitTimer=0 And MouseButton(#PB_MouseButton_Left) If MouseBL=0 MouseBL=#PB_MouseButton_Left If Bonus\RemoveEnable=#True CheckLoop(Bx,By,#False) PlaySound(#Snd_DoALoop) ClearList(LoopPath()) ; Don't Add Jewel when no Loop Bonus\RemoveEnable=#False Game\WaitTimer=ElapsedMilliseconds()+1000 ; <-Wait before next piece If Game\NbPiecesOnBench=0:Bonus\RemoveEnable=#False:EndIf ElseIf TestShapeToBench(Bx,By,Game\SelectedShape) Or Bonus\HammerEnable=#True Game\Timer=Game\Timer-Game\Difficulty(Game\ScoreData\Difficulty)\TimerDownValue ;Add Stats To time to put a piece AddElement(Stats\PieceTime()) Stats\PieceTime()=Game\Timer-(Game\NextTime-ElapsedMilliseconds()) Debug "PieceTime="+StrF(Stats\PieceTime()/1000)+"sec" If Bonus\HammerEnable=#True PlaySound(#Snd_MetalHammer) Else PlaySound(#Snd_PutPiece) EndIf InsertShapeToBench(Bx,By,Game\SelectedShape) RandomShape() Protected LoopSize=CheckLoop(Bx,By) ;-Do a Loop If LoopSize>1 PlaySound(#Snd_DoALoop) Bonus\Dead_StartTimer=ElapsedMilliseconds() ; reset Dead Bonus Time ;Add Stats To time to put a piece EarthQuake\WaitStartTime=ElapsedMilliseconds() ; Reset EarthQuake Timer AddElement(Stats\NbPieces()) Stats\NbPieces()=LoopSize AddElement(Stats\LoopTime()) Stats\LoopTime()=ElapsedMilliseconds()-Stats\StartLoopTimer Stats\StartLoopTimer=ElapsedMilliseconds() Debug "LoopTime="+Str(Stats\LoopTime()/1000)+"Sec" If LoopSize>Game\ScoreData\BigestLoopSize Game\ScoreData\BigestLoopSize=LoopSize If Game\ScoreData\NbLoop>1 NewMessage("Biggest Loop",0) EndIf EndIf Game\WaitTimer=ElapsedMilliseconds()+1000 ; <-Wait before next piece Game\ScoreData\NbLoop=Game\ScoreData\NbLoop+1 NewMessage("Loops "+Str(Game\ScoreData\NbLoop)+" With "+Str(LoopSize)+" pieces",0 ) Protected n.l ;Add Jewel If Bonus\X2Enable>0 Debug "A Bonus\X2Enable="+Str(Bonus\X2Enable) LoopSize=LoopSize*Pow(2,Bonus\X2Enable) NewMessage("Loop Score X"+Str(Pow(2,Bonus\X2Enable)),0 ) Protected *Obj_Sprite.SpriteData Protected Sprite.l Select Bonus\X2Enable Case 1 Sprite=#Spr_X2 Case 2 Sprite=#Spr_X4 Case 3 Sprite=#Spr_X8 EndSelect *Obj_Sprite=NewSprite(Sprite,5,0,1,1,255,1,#Spr_Depth_Front,#Align_Hor_Middle|#Align_Ver_Middle) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) AddmoveToEngine(@*Obj_Sprite\Size,#PB_Float,0,1000,1,75,#Easing_Linear,-1,@*Obj_Sprite\AutoDestroy) AddmoveToEngine(@*Obj_Sprite\X,#PB_Float,0,1000,5,GUI\ScreenWidth/2,#Easing_QuintEaseOut) AddmoveToEngine(@*Obj_Sprite\Y,#PB_Float,0,1000,0,GUI\ScreenHeight/2,#Easing_QuintEaseOut) Bonus\X2Enable=#False Debug "B Bonus\X2Enable="+Str(Bonus\X2Enable) EndIf If Game\NbCross>0 NewMessage("Cross X "+Str(Game\NbCross)+" Bonus",0) EndIf If LoopSize>=18 For n=0 To LoopSize/8 NewBonus(#Bonus_JewelRed) Next For n=0 To LoopSize/15 NewBonus(#Bonus_JewelGreen) Next EndIf If LoopSize>=40 NewBonus(#Bonus_Eye) EndIf Game\Timer=Game\Timer-100 If Game\Timer<2500:Game\Timer=2500:EndIf If Game\Timer<=3900 NewBonus(#Bonus_Time) EndIf If LoopSize>=40 NewBonus(#Bonus_Health) EndIf Game\Combo=Game\Combo+1 If (Game\Combo>1) NewMessage("Combo X"+Str(Game\Combo),0 ) EndIf Game\ScoreData\Score=Game\ScoreData\Score+LoopSize*10*Game\Combo If CheckBenchIsEmpty()=#True Game\ScoreData\BenchIsEmpty=Game\ScoreData\BenchIsEmpty+1 NewMessage("Empty Bench ",0 ) Else Debug "CheckBenchIsEmpty()=#False" EndIf Else Game\Combo=0 EndIf ;reset Timer Game\NextTime=ElapsedMilliseconds()+Game\Timer Else PlaySound(#Snd_CanTPutPiece) Debug "NON" EndIf EndIf Else MouseBL=0 EndIf ; Turn Piece If Game\WaitTimer=0 And (MouseButton(#PB_MouseButton_Right) Or KeyboardPushed(#PB_Key_LeftControl) ) If MouseBR=0 MouseBR=#PB_MouseButton_Left Game\SelectedShape=SP(Game\SelectedShape)\NextId EndIf Else MouseBR=0 EndIf EndProcedure Procedure KeyboardOrMouseClick() Static Mb.l If KeyboardReleased(#PB_Key_Space) Or GetLeftMouseClick() Mb=#True ProcedureReturn #True Else Mb=#False ProcedureReturn #False EndIf EndProcedure Procedure GameMode() Protected Event.i Protected n.l Protected MB.l ;-EVentGUI Repeat Event=EventGUI() If Event>0 ;Enumeration Event in Main.Pbi Select Event Case #EventGui_ChangeVinyl ClearMoveEngine() StopMusic(Game\CurrentMusic) Game\CurrentMusic =-1 ; To force To play if play same music played before PlaySound(#Snd_Jukebox) AddmoveToEngine(@Game\ObjetVinyl\X,#PB_Float,0,1000,Game\ObjetVinyl\X,24,0) AddmoveToEngine(@Game\ObjetVinyl\X,#PB_Float,1000,1000,24,20,0,#EventGui_PlayJukeBox) Case #EventGui_PlayJukeBox StartMusic(Game\JukeBoxIndex,#True) Case #EventGui_AddHealth Game\Life=Game\Life+1 Case #EventGui_AddJewelBlue Game\ScoreData\Bonus_JewelBlue=Game\ScoreData\Bonus_JewelBlue+1 Case #EventGui_AddJewelRed Game\ScoreData\Bonus_JewelRed=Game\ScoreData\Bonus_JewelRed+1 Case #EventGui_AddJewelGreen Game\ScoreData\Bonus_JewelGreen=Game\ScoreData\Bonus_JewelGreen+1 Case #EventGui_AddX2 Bonus\X2Enable=Bonus\X2Enable+1 Case #EventGui_Dead Game\Life=Game\Life-1 If Game\Life>0 NewMessage("DEAD",0) Game\WaitTimer=ElapsedMilliseconds()+Game\Difficulty(Game\ScoreData\Difficulty)\WaitMissed Else Debug "Game Over : Get Dead Penalty" InitGameMode(#Mode_GameOver) EndIf Case #EventGui_EnableHammer Bonus\Hammer_StartTime=ElapsedMilliseconds() Bonus\HammerEnable=#True Bonus\RemoveEnable=#False Case #EventGui_EnableRemover Bonus\Remove_StartTime=ElapsedMilliseconds() Bonus\RemoveEnable=#True Bonus\HammerEnable=#False Case #EventGui_EnableEye Bonus\EyeEnable=#True Case #EventGui_EnableFreeze Bonus\FreezeEnable=#True Bonus\FreezeStartTime=ElapsedMilliseconds() Bonus\FreezeTimer=Game\NextTime-ElapsedMilliseconds() PlaySound(#Snd_Freeze) Case #EventGui_NextHallOfFame Game\HallOfFameDifficultyMode=Game\HallOfFameDifficultyMode+1 If Game\HallOfFameDifficultyMode>=3:Game\HallOfFameDifficultyMode=0:EndIf InitGameMode(#Mode_HallOfFame) Case #EventGui_NewResolution DeInitScreen() InitNewResolution() InitScreen() InitGameMode(#Mode_Menu) Case #EventGui_ChangeMusicVolume For n=0 To #Music_End-1 MusicVolume(n,Game\VolumeMusic*10) Next Case #EventGui_ChangeSfxVolume ;SoundVolume(#PB_All,Game\VolumeSfx*10) For n=0 To #Snd_End-1 SoundVolume(n,Game\VolumeSfx*10) Next PlaySound(#Snd_GetBonus) Case #EventGui_StartCalculBonus Game\StartCalculBonus=#True StartMusic(#Music_HighScore,#True) EndSelect If Event>999 InitGameMode(Event-1000) EndIf EndIf Until Event=0 ;DrawTitles() Select Game\Mode Case #Mode_record If KeyboardOrMouseClick() InitGameMode(#Mode_Intro) EndIf ;-Mode Intro Case #Mode_Intro If KeyboardOrMouseClick() InitGameMode(#Mode_Menu) EndIf ; DisplaySprites() ;-Mode Menu Case #Mode_Menu,#Mode_Options,#Mode_Graphics,#Mode_Audios If KeyboardReleased(#PB_Key_F9) InitGameMode(#Mode_record) EndIf ;-Init JukeBox Case #Mode_JukeBox ;-Mode Credits Case #Mode_Credits If KeyboardOrMouseClick() InitGameMode(#Mode_Menu) EndIf ;-Mode Game Init Case #Mode_Game_Init Stats\StartGameTimer=ElapsedMilliseconds() ; Always 00:00 when Game Init ;-Mode Game Run Case #Mode_Game_Run If KeyboardReleased(#PB_Key_Grave) ;NewBonus(#Bonus_Time) EndIf If KeyboardReleased(#PB_Key_Tab) ;game\SelectedShape=8 EndIf If KeyboardReleased(#PB_Key_F1) Game\FluidCursor=1-Game\FluidCursor EndIf ;Juste to test ! CompilerIf #UsePreProdServer=#True If KeyboardReleased(#PB_Key_1) ;game\SelectedShape=1 EndIf If KeyboardReleased(#PB_Key_2) ;game\SelectedShape=1 EndIf If KeyboardReleased(#PB_Key_Grave) ;PlaySound(#Snd_GetBonus) ;NewBonus(#Bonus_Gravity) ;game\SelectedShape=25 ;DrawBitmapText(GUI\BlockSize*4,0,Str(Game\NbPiecesOnBench)) ;Debug "C Bonus\X2Enable="+Str(Bonus\X2Enable) EndIf If KeyboardReleased(#PB_Key_4) Bonus\Remove_StartTime=ElapsedMilliseconds() Bonus\RemoveEnable=#True Bonus\HammerEnable=#False EndIf CompilerEndIf RunEarthQuake() ;Random Bonus If ElapsedMilliseconds()-Bonus\Random_StartTime>Bonus\Random_Duration Protected TmpBonus.l Protected BonusValid.b=#True Repeat TmpBonus=Random(#Bonus_End-1,0) Select TmpBonus Case #Bonus_X2 If Bonus\X2Enable>=3 BonusValid=#False EndIf Case #Bonus_Eye If Bonus\EyeEnable=#True TmpBonus=#Bonus_Time EndIf Default BonusValid=#True EndSelect Until BonusValid=#True NewBonus(TmpBonus) Bonus\Random_StartTime=ElapsedMilliseconds() Bonus\Random_Duration=Random(20000,10000) EndIf ;Add bonnus after Loop Static DeadCounter Static NexTimeToPutJewel.q If LastElement(LoopPath()) And NexTimeToPutJewelGame\Difficulty(Game\ScoreData\Difficulty)\DeadBonusWaitTimer Debug "New DEAD" NewBonus(#Bonus_Dead) EndIf ;Scroll Bonus If Game\NbPiecesOnBench>70 And Bonus\BonusScrollDisplayed=#False NewBonus(#Bonus_Gravity) EndIf ;-Mode GameOver Case #Mode_GameOver ;Remove the remaining pieces from the bench If ElapsedMilliseconds()>Game\WaitTimer Game\WaitTimer=ElapsedMilliseconds()+500 Game\ToggleMode=1-Game\ToggleMode If Game\ToggleMode=1 Protected Length.l Length=SelectNextElementOnBench() Debug "Remove Length="+Str(Length) If Length>0 Game\ScoreData\Score=Game\ScoreData\Score-10 Game\UnfinishedLoopCount=Game\UnfinishedLoopCount+1 NewMessage(Str(Game\UnfinishedLoopCount)+" Unfinished x -10 ="+Str(Game\UnfinishedLoopCount*-10),0,1000,0) ElseIf ListSize(MoveEngine())=0 ; IF GameOver FadeIn / FadeOut ended ! Debug "MODE SCORE" Game\UnfinishedLoopCount=0 InitGameMode(#Mode_GameOver_End) ;TODO before its #Mode_CalculBonus EndIf Else EraseSelectedPieceOnBench() EndIf EndIf ;-Mode GameOver End Case #Mode_GameOver_End Protected TmpOpacity.l=Int(ElapsedMilliseconds()/500)%255 Game\ObjetText[8]\Opacity=TmpOpacity If Game\StartCalculBonus=#True And (ElapsedMilliseconds()>Game\NextTime Or KeyboardPushed(#PB_Key_Space) Or MouseButton(#PB_MouseButton_Left) ) Game\NextTime=ElapsedMilliseconds()+200 ChangeText(Game\ObjetText[8],"Left Click or Espace to Speed Up") If Stats\Bonus_JewelBlue0 InitGameMode(#Mode_EnterYourName) Else InitGameMode(#Mode_HallOfFame) EndIf EndIf EndIf EndIf ;-Mode Enter Your Name Case #Mode_EnterYourName If KeyboardReleased(#PB_Key_Back) Game\ScoreData\Pseudo= Left(Game\ScoreData\Pseudo, Len(Game\ScoreData\Pseudo)-1) ChangeText(Game\ObjetText[0],Game\ScoreData\Pseudo) Else If Len(Game\ScoreData\Pseudo)<8 Protected text.s CompilerIf #PB_Compiler_OS=#PB_OS_Windows text=KeyboardInkey() CompilerElse text=KeyboardInkeyEx() ;Function define in Main.pb CompilerEndIf If FindString("1234567890'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", text) ; Ajouter vos propres caractères valides ici Game\ScoreData\Pseudo + text ChangeText(Game\ObjetText[0],Game\ScoreData\Pseudo) EndIf ; Ajouter le nouveau texte à l'actuel (le cas échéant) EndIf EndIf If ElapsedMilliseconds()>Game\NextTime Game\NextTime=ElapsedMilliseconds()+500 Game\ObjetText[0]\String=Game\ScoreData\Pseudo+"_" Else Game\ObjetText[0]\String=Game\ScoreData\Pseudo EndIf If KeyboardReleased(#PB_Key_Return) If Game\ScoreData\Pseudo<>"" SaveScoreToLocalDB() If Game\ConnectToServer=#True SaveScoreToServerDB() EndIf EndIf InitGameMode(#Mode_HallOfFame) EndIf ;-Mode HallOfFame Case #Mode_HallOfFame If KeyboardOrMouseClick() InitGameMode(#Mode_Menu) EndIf EndSelect If Game\ScoreData\Score<0:Game\ScoreData\Score=0:EndIf ;-WARNING SCREEN If Game\Warning<>"" Debug "WARNIIIIIIIIIIIINNNNNNNNNG!!!" Protected *Obj_Sprite Protected *Obj_Text *Obj_Sprite=NewSprite(#Spr_BenchB,0,0,GUI\ScreenWidth,GUI\ScreenHeight,220,1,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Sprite,#Type_Sprite) DrawingBitmapFont(1) *Obj_Text=NewText(1,"Warning !",(ScreenWidth()- TextBitmapWidth("Warning")) / 2,GUI\BlockSize*2,255,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) DrawingBitmapFont(0) For n=1 To CountString(Game\Warning,Chr(13))+1 text=StringField(Game\Warning,n,Chr(13)) *Obj_Text=NewText(0,text,(ScreenWidth()- TextBitmapWidth(text)) / 2,GUI\BlockSize*3+n*GUI\BlockSize,255,#Spr_Depth_Front) AddItemToDisplayEngine(*Obj_Text,#Type_BitmapText) Next Game\Warning="" EndIf RunMoveEngine() RenderingDisplayEngine() ScreenShoot() EndProcedure ; IDE Options = PureBasic 6.00 LTS (Windows - x64) ; CursorPosition = 319 ; FirstLine = 302 ; Folding = -- ; EnableXP ; DPIAware