Initial commit
This commit is contained in:
450
Main.pb
Normal file
450
Main.pb
Normal file
@@ -0,0 +1,450 @@
|
||||
;*******************************
|
||||
; Free Loopz
|
||||
;
|
||||
; By Yann LEBRUN (Thyphoon)
|
||||
; Mars 2022
|
||||
;*******************************
|
||||
|
||||
|
||||
#MajorVersion="1"
|
||||
#BuildVersion="2"
|
||||
#GamePlayVersion="2" ;Change when gameplay change
|
||||
#Version=#MajorVersion+"."+#GamePlayVersion+"."+#BuildVersion+"."+#PB_Editor_CompileCount
|
||||
;-Config
|
||||
|
||||
#UsePreProdServer=#False
|
||||
#PreProdServerURL="https://loopzdb.thyphoon.net/LoopzServer-pp.php"
|
||||
#UsePackFile=#True ; True load file From Data.pck / False load file directly
|
||||
#DebugCheckLoopVerbose=#True; see CheckLoop()
|
||||
#DebugPackageVerbose=#False ; see Package.pbi
|
||||
#TestServer=#False ;See >TEST SERVEUR
|
||||
|
||||
|
||||
CompilerSelect #PB_Compiler_OS
|
||||
CompilerCase #PB_OS_Linux
|
||||
CompilerSelect #PB_Compiler_Processor
|
||||
CompilerCase#PB_Processor_x86
|
||||
#CompileVersion="Linuxx86"
|
||||
CompilerCase#PB_Processor_x64
|
||||
#CompileVersion="Linuxx64"
|
||||
CompilerCase#PB_Processor_Arm32
|
||||
#CompileVersion="LinuxArm32"
|
||||
CompilerCase#PB_Processor_Arm64
|
||||
#CompileVersion="LinuxArm64"
|
||||
CompilerEndSelect
|
||||
CompilerCase #PB_OS_MacOS
|
||||
CompilerSelect #PB_Compiler_Processor
|
||||
CompilerCase#PB_Processor_x86
|
||||
#CompileVersion="MacOsx86"
|
||||
CompilerCase#PB_Processor_x64
|
||||
#CompileVersion="MacOsx64"
|
||||
CompilerCase#PB_Processor_Arm32
|
||||
#CompileVersion="MacOsArm32"
|
||||
CompilerCase#PB_Processor_Arm64
|
||||
#CompileVersion="MacOsArm64"
|
||||
CompilerEndSelect
|
||||
CompilerCase #PB_OS_Windows
|
||||
CompilerSelect #PB_Compiler_Processor
|
||||
CompilerCase#PB_Processor_x86
|
||||
#CompileVersion="Windowsx86"
|
||||
CompilerCase#PB_Processor_x64
|
||||
#CompileVersion="Windowsx64"
|
||||
CompilerCase#PB_Processor_Arm32
|
||||
#CompileVersion="WindowsArm32"
|
||||
CompilerCase#PB_Processor_Arm64
|
||||
#CompileVersion="WindowsArm64"
|
||||
CompilerEndSelect
|
||||
CompilerEndSelect
|
||||
|
||||
EnableExplicit
|
||||
UsePNGImageDecoder()
|
||||
UsePNGImageEncoder() ; To Take ScreenShoot
|
||||
UseMD5Fingerprint()
|
||||
|
||||
|
||||
|
||||
;Hide cursor Code from Shardik
|
||||
;src : https://www.purebasic.fr/english/viewtopic.php?f=15&t=71173&start=4
|
||||
CompilerIf #PB_Compiler_OS = #PB_OS_Linux
|
||||
#GDK_BLANK_CURSOR = -2
|
||||
|
||||
;ImportC ""
|
||||
;gtk_widget_get_window(*Widget.GtkWidget)
|
||||
;EndImport
|
||||
CompilerEndIf
|
||||
|
||||
Procedure HideCursor(HideCursor.I = #True)
|
||||
Protected Cursor.I
|
||||
|
||||
CompilerSelect #PB_Compiler_OS
|
||||
CompilerCase #PB_OS_Linux
|
||||
;If HideCursor
|
||||
;; Cursor = gdk_cursor_new_(#GDK_BLANK_CURSOR)
|
||||
;Else
|
||||
; Cursor = 0
|
||||
;EndIf
|
||||
|
||||
;gdk_window_set_cursor_(gtk_widget_get_window(WindowID(0)), Cursor)
|
||||
CompilerCase #PB_OS_MacOS
|
||||
If HideCursor
|
||||
;CocoaMessage(0, 0, "NSCursor hide")
|
||||
Else
|
||||
;CocoaMessage(0, 0, "NSCursor unhide")
|
||||
EndIf
|
||||
CompilerCase #PB_OS_Windows
|
||||
If HideCursor
|
||||
ShowCursor_(#False)
|
||||
Else
|
||||
ShowCursor_(#True)
|
||||
EndIf
|
||||
CompilerEndSelect
|
||||
EndProcedure
|
||||
|
||||
|
||||
Procedure.s GetPDataDirectory(File.s)
|
||||
CompilerSelect #PB_Compiler_OS
|
||||
CompilerCase #PB_OS_Windows
|
||||
ProcedureReturn GetUserDirectory(#PB_Directory_AllUserData)+"LoopzRemix\"+File
|
||||
CompilerCase #PB_OS_MacOS
|
||||
ProcedureReturn GetCurrentDirectory()+File
|
||||
CompilerCase #PB_OS_Linux
|
||||
ProcedureReturn GetCurrentDirectory()+File
|
||||
CompilerEndSelect
|
||||
EndProcedure
|
||||
|
||||
Procedure.b GetLeftMouseClick()
|
||||
Static Mb.l
|
||||
If MouseButton(#PB_MouseButton_Left)
|
||||
If Mb=#False
|
||||
Debug "MOUSE 1"
|
||||
Mb=#True
|
||||
ProcedureReturn #True
|
||||
EndIf
|
||||
Else
|
||||
Mb=#False
|
||||
EndIf
|
||||
ProcedureReturn #False
|
||||
|
||||
EndProcedure
|
||||
CompilerIf #PB_Compiler_OS<>#PB_OS_Windows
|
||||
Procedure.s KeyboardInkeyEx()
|
||||
Protected key.s
|
||||
key = KeyboardInkey()
|
||||
If KeyboardPushed(#PB_Key_LeftShift) Or KeyboardPushed(#PB_Key_RightShift)
|
||||
key = UCase(key)
|
||||
EndIf
|
||||
ProcedureReturn key
|
||||
EndProcedure
|
||||
CompilerEndIf
|
||||
|
||||
|
||||
|
||||
|
||||
;-Event GUI
|
||||
|
||||
Enumeration Event
|
||||
#EventGui_Empty
|
||||
#EventGui_PlayJukeBox
|
||||
#EventGui_ChangeVinyl
|
||||
#EventGui_AddJewelBlue
|
||||
#EventGui_AddJewelRed
|
||||
#EventGui_AddJewelGreen
|
||||
#EventGui_EnableHammer
|
||||
#EventGui_EnableRemover
|
||||
#EventGui_EnableEye
|
||||
#EventGui_AddHealth
|
||||
#EventGui_AddX2
|
||||
#EventGui_Dead
|
||||
#EventGui_EnableFreeze
|
||||
#EventGui_NextHallOfFame
|
||||
#EventGui_NewResolution
|
||||
#EventGui_ChangeMusicVolume
|
||||
#EventGui_ChangeSfxVolume
|
||||
#EventGui_StartCalculBonus
|
||||
EndEnumeration
|
||||
|
||||
Global NewList myEventGUI.l()
|
||||
|
||||
Procedure PostEventGUI(Event.l)
|
||||
AddElement(myEventGUI())
|
||||
myEventGUI()=Event
|
||||
EndProcedure
|
||||
|
||||
Procedure EventGUI()
|
||||
Protected Event.l
|
||||
If ListSize(myEventGUI())>0
|
||||
FirstElement(myEventGUI())
|
||||
Event=myEventGUI()
|
||||
DeleteElement(myEventGUI())
|
||||
Else
|
||||
Event=0
|
||||
EndIf
|
||||
ProcedureReturn Event
|
||||
EndProcedure
|
||||
|
||||
Procedure.s MyFormatNumber(Base.s,Value.l)
|
||||
Protected ValueTxt.s=Str(Value)
|
||||
ProcedureReturn Left(Base,Len(Base)-Len(ValueTxt))+ValueTxt
|
||||
EndProcedure
|
||||
|
||||
|
||||
;- Init Library
|
||||
If InitSprite() = 0 Or InitKeyboard()=0 Or InitMouse()=0 Or InitSound()=0
|
||||
MessageRequester("Erreur", "Can't Init Sprite() Or Keyboard() Or Mouse() Or Sound()", 0)
|
||||
End
|
||||
EndIf
|
||||
Declare InitGameMode(Mode.l)
|
||||
Declare AddmoveToEngine(*Value,ValueType.l,StartTime.l,Duration.l,StartValue.f,EndValue.f,Easing.l,Event.l=-1,*AutoDestroy=0)
|
||||
Declare AddItemToDisplayEngine(*Pointer,Type.l,InsertIndex.l=-1)
|
||||
Declare myDisplaySprite(*Sprite)
|
||||
Declare DisplayText(*Text)
|
||||
Declare DisplayMenu()
|
||||
Declare DisplayTitles()
|
||||
Declare DisplayBench()
|
||||
Declare DisplayCursor()
|
||||
Declare DisplayScore()
|
||||
Declare DisplayMessage()
|
||||
Declare DisplayBonus()
|
||||
Declare DisplayEarthQuakeFall()
|
||||
Declare DisplayTimer()
|
||||
Declare DisplayWarning(Warning.s,BackMode.l=-1)
|
||||
|
||||
|
||||
XIncludeFile("Linux_Screen3DMousePatch.pbi")
|
||||
XIncludeFile("Easing.pbi")
|
||||
XIncludeFile("GUI.pbi")
|
||||
XIncludeFile("Package.pb") ;XIncludeFile("Package.pbi")
|
||||
XIncludeFile("GameStructure.pbi")
|
||||
XIncludeFile("Sprite.pbi")
|
||||
XIncludeFile("SpritesObj.pbi")
|
||||
XIncludeFile("BitmapText.pbi")
|
||||
XIncludeFile("MoveEngine.pbi")
|
||||
XIncludeFile("Sound.pbi")
|
||||
XIncludeFile("Screen.pbi")
|
||||
XIncludeFile("EarthQuake.pbi")
|
||||
XIncludeFile("Bonus.pbi")
|
||||
XIncludeFile("Database.pbi")
|
||||
XIncludeFile("Shape.pbi")
|
||||
XIncludeFile("Menu.pbi")
|
||||
XIncludeFile("Game.pbi")
|
||||
;- TEST SERVEUR
|
||||
CompilerIf #TestServer=#True
|
||||
;to test server
|
||||
LoadPrefs()
|
||||
If OpenWindow(0, 0, 0, 640, 480, "Loopz "+#Version, #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
|
||||
OpenWindowedScreen(WindowID(0), 0, 0, 640, 480)
|
||||
Game\ScoreData\Pseudo="Thy"
|
||||
Game\ScoreData\Difficulty=1
|
||||
Game\ScoreData\Score=Random(10000,800)
|
||||
Game\ScoreData\Duration=168059
|
||||
Game\ScoreData\PiecesPerMinute=27.0539970398
|
||||
Game\ScoreData\LoopsPerMinute=1.440633893
|
||||
Game\ScoreData\AveragePiecesPerLoop=16.33
|
||||
Game\ScoreData\NbLoop=3
|
||||
Game\ScoreData\BigestLoopSize=32
|
||||
Game\ScoreData\Bonus_JewelBlue=13
|
||||
Game\ScoreData\Bonus_JewelRed=1
|
||||
Game\ScoreData\BenchIsEmpty=0
|
||||
Game\ScoreData\Fps_Max=61
|
||||
Game\ScoreData\Fps_Min=60
|
||||
EndIf
|
||||
|
||||
;The function you want to test
|
||||
;LoadHallOfFameFromServer(1)
|
||||
SaveScoreToServerDB()
|
||||
End
|
||||
CompilerEndIf
|
||||
|
||||
Procedure Quit()
|
||||
If IsDatabase(#DB)
|
||||
CloseDatabase(#DB)
|
||||
SavePrefs()
|
||||
HideCursor(#False)
|
||||
EndIf
|
||||
End
|
||||
EndProcedure
|
||||
|
||||
Procedure DisplayWarning(Warning.s,BackMode.l=-1)
|
||||
Debug Warning
|
||||
If BackMode=-1
|
||||
BackMode=#Mode_Menu
|
||||
EndIf
|
||||
Game\Warning=Warning
|
||||
EndProcedure
|
||||
|
||||
Procedure Main()
|
||||
;- Load Sound
|
||||
CompilerIf #UsePackFile=#True
|
||||
CatchSoundFromPackage(#Snd_PutPiece,"mixkit-explainer-video-game-alert-sweep-236.wav")
|
||||
CatchSoundFromPackage(#Snd_CanTPutPiece,"mixkit-video-game-retro-click-237.wav")
|
||||
CatchSoundFromPackage(#Snd_DoALoop,"mixkit-extra-bonus-in-a-video-game-2045.wav")
|
||||
CatchSoundFromPackage(#Snd_GetBonus,"mixkit-bonus-earned-in-video-game-2058.wav")
|
||||
CatchSoundFromPackage(#Snd_GetBonus2,"322897-rhodesmas-connected-01.wav") ; https://freesound.org/people/rhodesmas/sounds/322897/
|
||||
CatchSoundFromPackage(#Snd_DeletePiece,"mixkit-fast-small-sweep-transition-166.wav")
|
||||
CatchSoundFromPackage(#Snd_GetJewel,"mixkit-fairy-magic-sparkle-871.wav")
|
||||
CatchSoundFromPackage(#Snd_EarthQuake,"mixkit-erupting-volcano-lava-2442.wav")
|
||||
CatchSoundFromPackage(#Snd_DeadBonus,"My-Dead-Snd-Effect.wav")
|
||||
CatchSoundFromPackage(#Snd_MetalHammer,"Metal-hammer.wav")
|
||||
CatchSoundFromPackage(#Snd_Woosh,"Woosh 06.wav") ;old moogy73_woosh-medium-short-01.wav
|
||||
CatchSoundFromPackage(#Snd_Collapse,"434897-thebuilder15-collapse.wav")
|
||||
CatchSoundFromPackage(#Snd_Freeze,"446112-justinvoke-freeze.wav")
|
||||
CatchSoundFromPackage(#Snd_Jukebox,"jukebox.wav")
|
||||
CatchSoundFromPackage(#Snd_WaterDrop,"Goutte 03.wav")
|
||||
CompilerElse
|
||||
LoadSound(#Snd_PutPiece,"Datas\mixkit-explainer-video-game-alert-sweep-236.wav") ; Put piece
|
||||
LoadSound(#Snd_CanTPutPiece,"Datas\mixkit-video-game-retro-click-237.wav") ; Can't put Piece
|
||||
LoadSound(#Snd_DoALoop,"Datas\mixkit-extra-bonus-in-a-video-game-2045.wav") ; I Have a Loop
|
||||
LoadSound(#Snd_GetBonus,"Datas\mixkit-bonus-earned-in-video-game-2058.wav") ; Get Bonus
|
||||
LoadSound(#Snd_GetBonus2,"Datas\322897-rhodesmas-connected-01.wav")
|
||||
LoadSound(#Snd_DeletePiece,"Datas\mixkit-fast-small-sweep-transition-166.wav")
|
||||
LoadSound(#Snd_GetJewel,"Datas\mixkit-fairy-magic-sparkle-871.wav") ; Edited
|
||||
LoadSound(#Snd_EarthQuake,"Datas\mixkit-erupting-volcano-lava-2442.wav")
|
||||
LoadSound(#Snd_DeadBonus,"Datas\My-Dead-Snd-Effect.wav")
|
||||
LoadSound(#Snd_MetalHammer,"Datas\Metal-hammer.wav")
|
||||
LoadSound(#Snd_Woosh,"Datas\Woosh 06.wav") ;425706__moogy73__woosh-medium-short-01.wav
|
||||
LoadSound(#Snd_WaterDrop,"Datas\Goutte 03.wav")
|
||||
LoadSound(#Snd_Collapse,"Datas\434897-thebuilder15-collapse.wav")
|
||||
LoadSound(#Snd_Freeze,"Datas\446112-justinvoke-freeze.wav")
|
||||
LoadSound(#Snd_Jukebox,"Datas\jukebox.wav")
|
||||
;271401__ylearkisto__levyautomaatti-kolikko-aukkoon-vanha-jukebox-old-coin-into-the-slot-mechanism-starts-To-buzz.wav
|
||||
|
||||
CompilerEndIf
|
||||
Protected n.l=0
|
||||
For n=0 To #Snd_DeadBonus
|
||||
If Not IsSound(n)
|
||||
MessageRequester("Sound Error","Can't use sound "+Str(n))
|
||||
End
|
||||
EndIf
|
||||
Next
|
||||
;-Load Music
|
||||
Game\CurrentMusic=-1
|
||||
CompilerIf #UsePackFile=#True
|
||||
CatchMusicFromPackage(#Music_Intro,"Loopz03V2.mod")
|
||||
CatchMusicFromPackage(#Music_GameA,"Loopz01.mod")
|
||||
CatchMusicFromPackage(#Music_GameB,"Loopz02.mod")
|
||||
CatchMusicFromPackage(#Music_Missed,"LoopzGameOver01.mod")
|
||||
CatchMusicFromPackage(#Music_GameOver,"LoopzGameOver03.mod")
|
||||
CatchMusicFromPackage(#Music_HighScore,"LoopzHighScore01V2.mod")
|
||||
CatchMusicFromPackage(#Music_Credits,"Loopz10.mod")
|
||||
CompilerElse
|
||||
LoadMusic(#Music_Intro,"Modules/Loopz03V2.mod")
|
||||
LoadMusic(#Music_GameA,"Modules/Loopz01.mod")
|
||||
LoadMusic(#Music_GameB,"Modules/Loopz02.mod")
|
||||
LoadMusic(#Music_Missed,"Modules/LoopzGameOver01.mod")
|
||||
LoadMusic(#Music_GameOver,"Modules/LoopzGameOver03.mod")
|
||||
LoadMusic(#Music_HighScore,"Modules/LoopzHighScore01V2.mod")
|
||||
LoadMusic(#Music_Credits,"Modules/Loopz10.mod")
|
||||
CompilerEndIf
|
||||
|
||||
LoadPrefs()
|
||||
|
||||
;-Init Volume SFX / MUSIC
|
||||
For n=0 To #Music_End-1
|
||||
MusicVolume(n,Game\VolumeMusic*10)
|
||||
Next
|
||||
|
||||
;SoundVolume(#PB_All,Game\VolumeSfx*10)
|
||||
For n=0 To #Snd_End-1
|
||||
SoundVolume(n,Game\VolumeSfx*10)
|
||||
Next
|
||||
|
||||
;-Load Sprite
|
||||
; in InitScreen because you must to reload all sprite when you change resolution in game (Option resolution)
|
||||
InitScreen()
|
||||
Protected Event.i
|
||||
InitDatabase()
|
||||
InitGameMode(#Mode_Intro)
|
||||
;InitGameMode(#Mode_record)
|
||||
HideCursor(#True)
|
||||
MouseLocate(ScreenWidth()/2,(GUI\BenchHeight+GUI\BenchY)/2)
|
||||
Protected MouseOutScreen.b=#False
|
||||
Repeat
|
||||
;Loop for window Mode
|
||||
If GUI\FullScreen=#False And IsWindow(0)
|
||||
Repeat
|
||||
Event = WindowEvent()
|
||||
Select Event
|
||||
Case #PB_Event_CloseWindow
|
||||
Quit()
|
||||
|
||||
Case #PB_Event_MoveWindow
|
||||
GUI\WindowX=WindowX(0)
|
||||
GUI\WindowY=WindowY(0)
|
||||
|
||||
EndSelect
|
||||
Until Event = 0
|
||||
EndIf
|
||||
|
||||
ExamineKeyboard()
|
||||
ExamineMouse()
|
||||
|
||||
;- Mouse IN/OUT
|
||||
If GUI\FullScreen=#False
|
||||
;Debug "MouseOutScreen="+Str(MouseOutScreen)+" WindowMouseX(0)="+Str(WindowMouseX(0))+ " ScreenWidth()="+Str(ScreenWidth())
|
||||
If MouseOutScreen=#True And WindowMouseX(0) > 2 And WindowMouseY(0) > 2 And WindowMouseX(0) < ScreenWidth()-2 And WindowMouseY(0) < ScreenHeight() -2
|
||||
Debug "Mouse IN"
|
||||
ReleaseMouse(0)
|
||||
MouseLocate(WindowMouseX(0), WindowMouseY(0))
|
||||
;MouseLocate(ScreenWidth()/2, ScreenHeight() / 2)
|
||||
HideCursor(#True)
|
||||
MouseOutScreen = #False
|
||||
ElseIf MouseOutScreen=#False And (MouseX() <2 Or MouseY() < 2 Or MouseX() > ScreenWidth() -2 Or MouseY() > ScreenHeight() -2)
|
||||
Debug "Mouse OUT"
|
||||
ReleaseMouse(1)
|
||||
HideCursor(#False)
|
||||
MouseOutScreen = #True
|
||||
EndIf
|
||||
Else
|
||||
MouseOutScreen=#False
|
||||
ReleaseMouse(0)
|
||||
EndIf
|
||||
;- Switch FullScreen / Window
|
||||
If Game\Mode<>#Mode_Game_Run And KeyboardPushed(#PB_Key_LeftAlt) And KeyboardPushed(#PB_Key_Return)
|
||||
DeInitScreen()
|
||||
GUI\FullScreen=1-GUI\FullScreen
|
||||
InitScreen()
|
||||
InitGameMode(#Mode_Menu)
|
||||
EndIf
|
||||
|
||||
;- Quit Game
|
||||
If KeyboardReleased(#PB_Key_Escape)
|
||||
If Game\Mode=#Mode_Menu
|
||||
Quit()
|
||||
Else
|
||||
InitGameMode(#Mode_Menu)
|
||||
EndIf
|
||||
EndIf
|
||||
If KeyboardPushed(#PB_Key_Add)
|
||||
Debug Str(ElapsedMilliseconds())+ " "+Str(ListSize(MoveEngine()))
|
||||
EndIf
|
||||
FlipBuffersAndRetrieveFPS()
|
||||
|
||||
ClearScreen(RGB(32,32,32))
|
||||
|
||||
CheckMusic()
|
||||
GameMode()
|
||||
If MouseOutScreen=#True
|
||||
DisplayClipSprite(#Spr_White,0,0,128,1,ScreenWidth(),ScreenHeight())
|
||||
Else
|
||||
If Game\DisplayCursor=#True
|
||||
DisplayClipSprite(#Spr_Pointer,MouseX(),MouseY(),255,1)
|
||||
EndIf
|
||||
EndIf
|
||||
|
||||
If Game\DisplayFps=#True
|
||||
Debug Str(GUI\fpsValue)+" Fps"
|
||||
EndIf
|
||||
Delay(1)
|
||||
ForEver
|
||||
EndProcedure
|
||||
|
||||
Main()
|
||||
; IDE Options = PureBasic 6.11 LTS (Windows - x64)
|
||||
; CursorPosition = 15
|
||||
; FirstLine = 15
|
||||
; Folding = ---
|
||||
; EnableXP
|
||||
; DisableDebugger
|
||||
; EnableCompileCount = 158
|
||||
; EnableBuildCount = 0
|
||||
; EnableExeConstant
|
Reference in New Issue
Block a user