1824 lines
72 KiB
Plaintext
1824 lines
72 KiB
Plaintext
|
|
|
|
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 NexTimeToPutJewel<ElapsedMilliseconds()
|
|
DeadCounter=DeadCounter+1
|
|
Select Game\ScoreData\Difficulty
|
|
Case 0 ;Novice
|
|
If DeadCounter=Game\Difficulty(Game\ScoreData\Difficulty)\DeadCounter
|
|
DeadCounter=0
|
|
NewBonus(#Bonus_Dead,LoopPath()\BX,LoopPath()\BY)
|
|
Else
|
|
Select Game\NbCross
|
|
Case 0
|
|
NewBonus(#Bonus_JewelBlue,LoopPath()\BX,LoopPath()\BY)
|
|
Case 1
|
|
NewBonus(#Bonus_JewelRed,LoopPath()\BX,LoopPath()\BY)
|
|
Case 2
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
Case 3
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelRed)
|
|
Case 4
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelGreen)
|
|
EndSelect
|
|
|
|
EndIf
|
|
Case 1 ;Normal
|
|
If DeadCounter=15
|
|
DeadCounter=0
|
|
NewBonus(#Bonus_Dead,LoopPath()\BX,LoopPath()\BY)
|
|
Else
|
|
Select Game\NbCross
|
|
Case 0
|
|
NewBonus(#Bonus_JewelBlue,LoopPath()\BX,LoopPath()\BY)
|
|
Case 1
|
|
NewBonus(#Bonus_JewelRed,LoopPath()\BX,LoopPath()\BY)
|
|
Case 2
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
Case 3
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelRed)
|
|
Case 4
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelGreen)
|
|
EndSelect
|
|
EndIf
|
|
Case 2 ;Hard
|
|
If ListSize(LoopPath())%20=1
|
|
NewBonus(#Bonus_Dead,LoopPath()\BX,LoopPath()\BY)
|
|
Else
|
|
Select Game\NbCross
|
|
Case 0
|
|
NewBonus(#Bonus_JewelBlue,LoopPath()\BX,LoopPath()\BY)
|
|
Case 1
|
|
NewBonus(#Bonus_JewelRed,LoopPath()\BX,LoopPath()\BY)
|
|
Case 2
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
Case 3
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelRed)
|
|
Case 4
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelGreen)
|
|
EndSelect
|
|
EndIf
|
|
Case 3 ;madnesse
|
|
If ListSize(LoopPath())%10=1
|
|
NewBonus(#Bonus_Dead,LoopPath()\BX,LoopPath()\BY)
|
|
Else
|
|
Select Game\NbCross
|
|
Case 0
|
|
NewBonus(#Bonus_JewelBlue,LoopPath()\BX,LoopPath()\BY)
|
|
Case 1
|
|
NewBonus(#Bonus_JewelRed,LoopPath()\BX,LoopPath()\BY)
|
|
Case 2
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
Case 3
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelRed)
|
|
Case 4
|
|
NewBonus(#Bonus_JewelGreen,LoopPath()\BX,LoopPath()\BY)
|
|
NewBonus(#Bonus_JewelGreen)
|
|
EndSelect
|
|
EndIf
|
|
EndSelect
|
|
|
|
DeleteElement(LoopPath())
|
|
NexTimeToPutJewel=ElapsedMilliseconds()+50
|
|
EndIf
|
|
|
|
;Dead Bonus
|
|
If ElapsedMilliseconds()-Bonus\Dead_StartTimer>Game\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_JewelBlue<Game\ScoreData\Bonus_JewelBlue
|
|
Game\ScoreData\Score=Game\ScoreData\Score+20
|
|
Stats\Bonus_JewelBlue=Stats\Bonus_JewelBlue+1
|
|
PlaySound(#Snd_GetJewel)
|
|
Game\ObjetBlueJewelValue\String=Str(Stats\Bonus_JewelBlue)+"x10"
|
|
Game\ObjetText[0]\String="= "+MyFormatNumber("00000",(Stats\Bonus_JewelBlue*10 + Stats\Bonus_JewelRed*20 +Stats\Bonus_JewelGreen*40))
|
|
|
|
ElseIf Stats\Bonus_JewelRed<Game\ScoreData\Bonus_JewelRed
|
|
Game\ScoreData\Score=Game\ScoreData\Score+40
|
|
Stats\Bonus_JewelRed=Stats\Bonus_JewelRed+1
|
|
PlaySound(#Snd_GetJewel)
|
|
Game\ObjetRedJewelValue\String=Str(Stats\Bonus_JewelRed)+"x20"
|
|
Game\ObjetText[0]\String="= "+MyFormatNumber("00000",Stats\Bonus_JewelBlue*10 + Stats\Bonus_JewelRed*20 +Stats\Bonus_JewelGreen*40)
|
|
|
|
ElseIf Stats\Bonus_JewelGreen<Game\ScoreData\Bonus_JewelGreen
|
|
Game\ScoreData\Score=Game\ScoreData\Score+40
|
|
Stats\Bonus_JewelGreen=Stats\Bonus_JewelGreen+1
|
|
PlaySound(#Snd_GetJewel)
|
|
Game\ObjetGreenJewelValue\String=Str(Stats\Bonus_JewelGreen)+"x40"
|
|
Game\ObjetText[0]\String="= "+MyFormatNumber("00000",Stats\Bonus_JewelBlue*10 + Stats\Bonus_JewelRed*20 +Stats\Bonus_JewelGreen*40)
|
|
|
|
ElseIf Stats\BigestLoopSize<Game\ScoreData\BigestLoopSize
|
|
Game\ScoreData\Score=Game\ScoreData\Score+5
|
|
Stats\BigestLoopSize=Stats\BigestLoopSize+1
|
|
Game\ObjetText[1]\String="Biggest Loop "+MyFormatNumber("00",Stats\BigestLoopSize)+" x 5"
|
|
Game\ObjetText[2]\String="= "+MyFormatNumber("00000",Stats\BigestLoopSize*5)
|
|
ElseIf Stats\NbLoop<Game\ScoreData\NbLoop
|
|
Game\ScoreData\Score=Game\ScoreData\Score+10
|
|
Stats\NbLoop=Stats\NbLoop+1
|
|
|
|
Game\ObjetText[3]\String="Number of Loops "+MyFormatNumber("00",Stats\NbLoop)+" x 10"
|
|
Game\ObjetText[4]\String="= "+MyFormatNumber("00000",Stats\NbLoop*10)
|
|
|
|
ElseIf Stats\BenchIsEmpty<Game\ScoreData\BenchIsEmpty
|
|
Game\ScoreData\Score=Game\ScoreData\Score+500
|
|
Stats\BenchIsEmpty=Stats\BenchIsEmpty+1
|
|
Game\ObjetText[5]\String=Str(Stats\BenchIsEmpty)+" Cleaned Bench x 500"
|
|
Game\ObjetText[6]\String="= "+MyFormatNumber("00000",Stats\BenchIsEmpty*500)
|
|
Else
|
|
|
|
ChangeText(Game\ObjetText[8],"Left Click or Espace to Continue")
|
|
Game\ObjetText[7]\String="= "+MyFormatNumber("00000",Game\ScoreData\Score)
|
|
If KeyboardOrMouseClick()
|
|
Stats\BigestLoopSize=Game\ScoreData\BigestLoopSize
|
|
Stats\NbLoop=Game\ScoreData\NbLoop
|
|
Stats\Bonus_JewelBlue=Game\ScoreData\Bonus_JewelBlue
|
|
Stats\Bonus_JewelRed=Game\ScoreData\Bonus_JewelRed
|
|
Stats\BenchIsEmpty=Game\ScoreData\BenchIsEmpty
|
|
If Game\ScoreData\Score>0
|
|
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 |