Browse Source

Multiple templates to start a game

Some basic to advance templates are provided to be use as base code for
new games
raysan5 11 years ago
parent
commit
1ef1f3d7ea
35 changed files with 2432 additions and 0 deletions
  1. 226 0
      templates/advance_game/advance_game.c
  2. 118 0
      templates/advance_game/makefile
  3. 80 0
      templates/advance_game/screens/screen_ending.c
  4. BIN
      templates/advance_game/screens/screen_ending.o
  5. 80 0
      templates/advance_game/screens/screen_gameplay.c
  6. BIN
      templates/advance_game/screens/screen_gameplay.o
  7. 81 0
      templates/advance_game/screens/screen_logo.c
  8. BIN
      templates/advance_game/screens/screen_logo.o
  9. 71 0
      templates/advance_game/screens/screen_options.c
  10. BIN
      templates/advance_game/screens/screen_options.o
  11. 81 0
      templates/advance_game/screens/screen_title.c
  12. BIN
      templates/advance_game/screens/screen_title.o
  13. 92 0
      templates/advance_game/screens/screens.h
  14. 152 0
      templates/basic_game/basic_game.c
  15. 90 0
      templates/basic_game/makefile
  16. 59 0
      templates/basic_test/basic_test.c
  17. 90 0
      templates/basic_test/makefile
  18. 98 0
      templates/simple_game/makefile
  19. 195 0
      templates/simple_game/screens.c
  20. 74 0
      templates/simple_game/screens.h
  21. BIN
      templates/simple_game/screens.o
  22. 98 0
      templates/simple_game/simple_game.c
  23. 118 0
      templates/standard_game/makefile
  24. 80 0
      templates/standard_game/screens/screen_ending.c
  25. BIN
      templates/standard_game/screens/screen_ending.o
  26. 80 0
      templates/standard_game/screens/screen_gameplay.c
  27. BIN
      templates/standard_game/screens/screen_gameplay.o
  28. 81 0
      templates/standard_game/screens/screen_logo.c
  29. BIN
      templates/standard_game/screens/screen_logo.o
  30. 71 0
      templates/standard_game/screens/screen_options.c
  31. BIN
      templates/standard_game/screens/screen_options.o
  32. 81 0
      templates/standard_game/screens/screen_title.c
  33. BIN
      templates/standard_game/screens/screen_title.o
  34. 92 0
      templates/standard_game/screens/screens.h
  35. 144 0
      templates/standard_game/standard_game.c

+ 226 - 0
templates/advance_game/advance_game.c

@@ -0,0 +1,226 @@
+/*******************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   <Game title>
+*   <Game description>
+*
+*   This game has been created using raylib (www.raylib.com)
+*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+********************************************************************************************/
+
+#include "raylib.h"
+#include "screens/screens.h"    // NOTE: Defines global variable: currentScreen
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Required variables to manage screen transitions (fade-in, fade-out)
+float transAlpha = 0;
+bool onTransition = false;
+bool transFadeOut = false;
+int transFromScreen = -1;
+int transToScreen = -1;
+    
+//----------------------------------------------------------------------------------
+// Local Functions Declaration
+//----------------------------------------------------------------------------------
+void TransitionToScreen(int screen);
+void UpdateTransition(void);
+void DrawTransition(void);
+
+//----------------------------------------------------------------------------------
+// Main entry point
+//----------------------------------------------------------------------------------
+int main(void)
+{
+	// Initialization
+	//---------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+	const char windowTitle[30] = "<game name goes here>";
+    
+    InitWindow(screenWidth, screenHeight, windowTitle);
+
+    // TODO: Load global data here (assets that must be available in all screens, i.e. fonts)
+    
+    // Setup and Init first screen
+    currentScreen = LOGO;
+    InitLogoScreen();
+    
+	SetTargetFPS(60);
+	//----------------------------------------------------------
+
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        if (!onTransition)
+        {
+            switch(currentScreen) 
+            {
+                case LOGO: 
+                {
+                    UpdateLogoScreen();
+                    
+                    if (FinishLogoScreen()) TransitionToScreen(TITLE);
+                    
+                } break;
+                case TITLE: 
+                {
+                    UpdateTitleScreen();
+                    
+                    if (FinishTitleScreen() == 1) TransitionToScreen(OPTIONS);
+                    else if (FinishTitleScreen() == 2) TransitionToScreen(GAMEPLAY);
+
+                } break;
+                case OPTIONS:
+                {
+                    UpdateOptionsScreen();
+                    
+                    if (FinishOptionsScreen()) TransitionToScreen(TITLE);
+
+                } break;
+                case GAMEPLAY:
+                { 
+                    UpdateGameplayScreen();
+                    
+                    if (FinishGameplayScreen()) TransitionToScreen(ENDING);
+  
+                } break;
+                case ENDING: 
+                {
+                    UpdateEndingScreen();
+                    
+                    if (FinishEndingScreen()) TransitionToScreen(TITLE);
+
+                } break;
+                default: break;
+            }
+        }
+        else
+        {
+            // Update transition (fade-in, fade-out)
+            UpdateTransition();
+        }
+        //----------------------------------------------------------------------------------
+        
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+        
+            ClearBackground(RAYWHITE);
+            
+            switch(currentScreen) 
+            {
+                case LOGO: DrawLogoScreen(); break;
+                case TITLE: DrawTitleScreen(); break;
+                case OPTIONS: DrawOptionsScreen(); break;
+                case GAMEPLAY: DrawGameplayScreen(); break;
+                case ENDING: DrawEndingScreen(); break;
+                default: break;
+            }
+            
+            if (onTransition) DrawTransition();
+        
+            //DrawFPS(10, 10);
+        
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    
+    // TODO: Unload all global loaded data (i.e. fonts) here!
+    
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+	
+    return 0;
+}
+
+void TransitionToScreen(int screen)
+{
+    onTransition = true;
+    transFromScreen = currentScreen;
+    transToScreen = screen;
+}
+
+void UpdateTransition(void)
+{
+    if (!transFadeOut)
+    {
+        transAlpha += 0.01;
+
+        if (transAlpha >= 1.0)
+        {
+            transAlpha = 1.0;
+        
+            switch (transFromScreen)
+            {
+                case LOGO: UnloadLogoScreen(); break;
+                case TITLE: UnloadTitleScreen(); break;
+                case OPTIONS: UnloadOptionsScreen(); break;
+                case GAMEPLAY: UnloadGameplayScreen(); break;
+                case ENDING: UnloadEndingScreen(); break;
+                default: break;
+            }
+            
+            switch (transToScreen)
+            {
+                case LOGO:
+                {
+                    InitLogoScreen(); 
+                    currentScreen = LOGO; 
+                } break;
+                case TITLE: 
+                {
+                    InitTitleScreen();
+                    currentScreen = TITLE;                  
+                } break;
+                case OPTIONS:
+                {
+                    InitOptionsScreen(); 
+                    currentScreen = OPTIONS;
+                } break;
+                case GAMEPLAY:
+                {
+                    InitGameplayScreen(); 
+                    currentScreen = GAMEPLAY;
+                } break;
+                case ENDING:
+                {
+                    InitEndingScreen(); 
+                    currentScreen = ENDING;
+                } break;
+                default: break;
+            }
+            
+            transFadeOut = true;
+        }
+    }
+    else  // Transition fade out logic
+    {
+        transAlpha -= 0.01f;
+        
+        if (transAlpha <= 0)
+        {
+            transAlpha = 0;
+            transFadeOut = false;
+            onTransition = false;
+            transFromScreen = -1;
+            transToScreen = -1;
+        }
+    }
+}
+
+void DrawTransition(void)
+{
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha));
+}

+ 118 - 0
templates/advance_game/makefile

@@ -0,0 +1,118 @@
+#**************************************************************************************************
+#
+#   raylib - Advance Game
+#
+#   makefile to compile advance game
+#
+#   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+#    
+#   This software is provided "as-is", without any express or implied warranty. In no event 
+#   will the authors be held liable for any damages arising from the use of this software.
+#
+#   Permission is granted to anyone to use this software for any purpose, including commercial 
+#   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+#
+#     1. The origin of this software must not be misrepresented; you must not claim that you 
+#     wrote the original software. If you use this software in a product, an acknowledgment 
+#     in the product documentation would be appreciated but is not required.
+#
+#     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+#     as being the original software.
+#
+#     3. This notice may not be removed or altered from any source distribution.
+#
+#**************************************************************************************************
+
+# define raylib platform if not defined (by default, compile for RPI)
+# Other possible platform: PLATFORM_DESKTOP
+PLATFORM ?= PLATFORM_RPI
+
+# define compiler: gcc for C program, define as g++ for C++
+CC = gcc
+
+# define compiler flags:
+#  -O2         defines optimization level
+#  -Wall       turns on most, but not all, compiler warnings
+#  -std=c99    use standard C from 1999 revision
+CFLAGS = -O2 -Wall -std=c99
+#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
+
+# define any directories containing required header files
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    INCLUDES = -I. -I./screens -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
+else
+    INCLUDES = -I. -I./screens -I../../src
+endif
+
+# define library paths containing required libs
+LFLAGS = -L. -L../../src -L/opt/vc/lib
+
+# define any libraries to link into executable
+# if you want to link libraries (libname.so or libname.a), use the -lname
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    # libraries for Raspberry Pi compiling
+    # NOTE: OpenAL Soft library should be installed (libopenal1 package)
+    LIBS = -lraylib -lGLESv2 -lEGL -lm -lbcm_host -lopenal
+else
+    # libraries for Windows desktop compiling
+    # NOTE: GLFW3 and OpenAL Soft libraries should be installed
+    LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32
+endif
+
+# define additional parameters and flags for windows
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+    # resources file contains windows exe icon
+    # -Wl,--subsystem,windows hides the console window
+    WINFLAGS = ../../src/resources -Wl,--subsystem,windows
+endif
+
+# define all screen object files required
+SCREENS = \
+	screens/screen_logo.o \
+	screens/screen_title.o \
+	screens/screen_options.o \
+	screens/screen_gameplay.o \
+	screens/screen_ending.o \
+
+# typing 'make' will invoke the first target entry in the file,
+# in this case, the 'default' target entry is advance_game
+default: advance_game
+
+# compile template - advance_game
+advance_game: advance_game.c $(SCREENS)
+	$(CC) -o $@ $< $(SCREENS) $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+
+# compile screen LOGO
+screens/screen_logo.o: screens/screen_logo.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen TITLE
+screens/screen_title.o: screens/screen_title.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen OPTIONS
+screens/screen_options.o: screens/screen_options.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen GAMEPLAY
+screens/screen_gameplay.o: screens/screen_gameplay.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen ENDING
+screens/screen_ending.o: screens/screen_ending.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# clean everything
+clean:
+ifeq ($(PLATFORM),PLATFORM_RPI)
+	rm -f screens/*.o
+#	find . -executable -delete
+else
+	del screens/*.o *.exe
+endif
+	@echo Cleaning done
+
+# instead of defining every module one by one, we can define a pattern
+# this pattern below will automatically compile every module defined on $(OBJS)
+#%.exe : %.c
+#	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM)

+ 80 - 0
templates/advance_game/screens/screen_ending.c

@@ -0,0 +1,80 @@
+/**********************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   Ending Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Ending screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Ending Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Ending Screen Initialization logic
+void InitEndingScreen(void)
+{
+    // TODO: Initialize ENDING screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Ending Screen Update logic
+void UpdateEndingScreen(void)
+{
+    // TODO: Update ENDING screen variables here!
+
+    // Press enter to return to TITLE screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        finishScreen = 1;
+    }
+}
+
+// Ending Screen Draw logic
+void DrawEndingScreen(void)
+{
+    // TODO: Draw ENDING screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLUE);
+    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
+    DrawText("PRESS ENTER to RETURN to TITLE SCREEN", 160, 220, 20, DARKBLUE);
+}
+
+// Ending Screen Unload logic
+void UnloadEndingScreen(void)
+{
+    // TODO: Unload ENDING screen variables here!
+}
+
+// Ending Screen should finish?
+int FinishEndingScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/advance_game/screens/screen_ending.o


+ 80 - 0
templates/advance_game/screens/screen_gameplay.c

@@ -0,0 +1,80 @@
+/**********************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   Gameplay Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Gameplay screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Gameplay Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Gameplay Screen Initialization logic
+void InitGameplayScreen(void)
+{
+    // TODO: Initialize GAMEPLAY screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Gameplay Screen Update logic
+void UpdateGameplayScreen(void)
+{
+    // TODO: Update GAMEPLAY screen variables here!
+
+    // Press enter to change to ENDING screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        finishScreen = 1;
+    }
+}
+
+// Gameplay Screen Draw logic
+void DrawGameplayScreen(void)
+{
+    // TODO: Draw GAMEPLAY screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), PURPLE);
+    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
+    DrawText("PRESS ENTER to JUMP to ENDING SCREEN", 170, 220, 20, MAROON);
+}
+
+// Gameplay Screen Unload logic
+void UnloadGameplayScreen(void)
+{
+    // TODO: Unload GAMEPLAY screen variables here!
+}
+
+// Gameplay Screen should finish?
+int FinishGameplayScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/advance_game/screens/screen_gameplay.o


+ 81 - 0
templates/advance_game/screens/screen_logo.c

@@ -0,0 +1,81 @@
+/**********************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   Logo Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Logo screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Logo Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Logo Screen Initialization logic
+void InitLogoScreen(void)
+{
+    // TODO: Initialize LOGO screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Logo Screen Update logic
+void UpdateLogoScreen(void)
+{
+    // TODO: Update LOGO screen variables here!
+
+    framesCounter++;    // Count frames
+
+    // Wait for 2 seconds (120 frames) before jumping to TITLE screen
+    if (framesCounter > 120)
+    {
+        finishScreen = true;
+    }
+}
+
+// Logo Screen Draw logic
+void DrawLogoScreen(void)
+{
+    // TODO: Draw LOGO screen here!
+    DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
+    DrawText("WAIT for 2 SECONDS...", 290, 220, 20, GRAY);
+}
+
+// Logo Screen Unload logic
+void UnloadLogoScreen(void)
+{
+    // TODO: Unload LOGO screen variables here!
+}
+
+// Logo Screen should finish?
+int FinishLogoScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/advance_game/screens/screen_logo.o


+ 71 - 0
templates/advance_game/screens/screen_options.c

@@ -0,0 +1,71 @@
+/**********************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   Options Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Options screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Options Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Options Screen Initialization logic
+void InitOptionsScreen(void)
+{
+    // TODO: Initialize OPTIONS screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Options Screen Update logic
+void UpdateOptionsScreen(void)
+{
+    // TODO: Update OPTIONS screen variables here!
+}
+
+// Options Screen Draw logic
+void DrawOptionsScreen(void)
+{
+    // TODO: Draw OPTIONS screen here!
+}
+
+// Options Screen Unload logic
+void UnloadOptionsScreen(void)
+{
+    // TODO: Unload OPTIONS screen variables here!
+}
+
+// Options Screen should finish?
+int FinishOptionsScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/advance_game/screens/screen_options.o


+ 81 - 0
templates/advance_game/screens/screen_title.c

@@ -0,0 +1,81 @@
+/**********************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   Title Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Title screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Title Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Title Screen Initialization logic
+void InitTitleScreen(void)
+{
+    // TODO: Initialize TITLE screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Title Screen Update logic
+void UpdateTitleScreen(void)
+{
+    // TODO: Update TITLE screen variables here!
+
+    // Press enter to change to GAMEPLAY screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        //finishScreen = 1;   // OPTIONS
+        finishScreen = 2;   // GAMEPLAY
+    }
+}
+
+// Title Screen Draw logic
+void DrawTitleScreen(void)
+{
+    // TODO: Draw TITLE screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), GREEN);
+    DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
+    DrawText("PRESS ENTER to JUMP to GAMEPLAY SCREEN", 160, 220, 20, DARKGREEN);
+}
+
+// Title Screen Unload logic
+void UnloadTitleScreen(void)
+{
+    // TODO: Unload TITLE screen variables here!
+}
+
+// Title Screen should finish?
+int FinishTitleScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/advance_game/screens/screen_title.o


+ 92 - 0
templates/advance_game/screens/screens.h

@@ -0,0 +1,92 @@
+/**********************************************************************************************
+*
+*   raylib - Advance Game template
+*
+*   Screens Functions Declarations (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#ifndef SCREENS_H
+#define SCREENS_H
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef enum GameScreen { LOGO, TITLE, OPTIONS, GAMEPLAY, ENDING } GameScreen;
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+GameScreen currentScreen;
+
+#ifdef __cplusplus
+extern "C" {            // Prevents name mangling of functions
+#endif
+
+//----------------------------------------------------------------------------------
+// Logo Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitLogoScreen(void);
+void UpdateLogoScreen(void);
+void DrawLogoScreen(void);
+void UnloadLogoScreen(void);
+int FinishLogoScreen(void);
+
+//----------------------------------------------------------------------------------
+// Title Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitTitleScreen(void);
+void UpdateTitleScreen(void);
+void DrawTitleScreen(void);
+void UnloadTitleScreen(void);
+int FinishTitleScreen(void);
+
+//----------------------------------------------------------------------------------
+// Options Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitOptionsScreen(void);
+void UpdateOptionsScreen(void);
+void DrawOptionsScreen(void);
+void UnloadOptionsScreen(void);
+int FinishOptionsScreen(void);
+
+//----------------------------------------------------------------------------------
+// Gameplay Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitGameplayScreen(void);
+void UpdateGameplayScreen(void);
+void DrawGameplayScreen(void);
+void UnloadGameplayScreen(void);
+int FinishGameplayScreen(void);
+
+//----------------------------------------------------------------------------------
+// Ending Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitEndingScreen(void);
+void UpdateEndingScreen(void);
+void DrawEndingScreen(void);
+void UnloadEndingScreen(void);
+int FinishEndingScreen(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // SCREENS_H

+ 152 - 0
templates/basic_game/basic_game.c

@@ -0,0 +1,152 @@
+/*******************************************************************************************
+*
+*   raylib - Basic Game template
+*
+*   <Game title>
+*   <Game description>
+*
+*   This game has been created using raylib v1.2 (www.raylib.com)
+*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef enum GameScreen { LOGO, TITLE, GAMEPLAY, ENDING } GameScreen;
+
+//----------------------------------------------------------------------------------
+// Main entry point
+//----------------------------------------------------------------------------------
+int main()
+{
+    // Initialization
+    //--------------------------------------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+	const char windowTitle[30] = "<game name goes here>";
+    
+    GameScreen currentScreen = LOGO;
+    
+    InitWindow(screenWidth, screenHeight, windowTitle);
+    
+    // TODO: Initialize all required variables and load all required data here!
+
+    int framesCounter = 0;          // Used to count frames
+    
+    SetTargetFPS(60);
+    //--------------------------------------------------------------------------------------
+    
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        switch(currentScreen) 
+        {
+            case LOGO: 
+            {
+                // TODO: Update LOGO screen variables here!
+
+                framesCounter++;    // Count frames
+
+                // Wait for 2 seconds (120 frames) before jumping to TITLE screen
+                if (framesCounter > 120)
+                {
+                    currentScreen = TITLE;
+                }
+            } break;
+            case TITLE: 
+            {
+                // TODO: Update TITLE screen variables here!
+
+                // Press enter to change to GAMEPLAY screen
+                if (IsKeyPressed(KEY_ENTER))
+                {
+                    currentScreen = GAMEPLAY;
+                }
+            } break;
+            case GAMEPLAY:
+            { 
+                // TODO: Update GAMEPLAY screen variables here!
+
+                // Press enter to change to ENDING screen
+                if (IsKeyPressed(KEY_ENTER))
+                {
+                    currentScreen = ENDING;
+                } 
+            } break;
+            case ENDING: 
+            {
+                // TODO: Update ENDING screen variables here!
+
+                // Press enter to return to TITLE screen
+                if (IsKeyPressed(KEY_ENTER))
+                {
+                    currentScreen = TITLE;
+                }  
+            } break;
+            default: break;
+        }
+        //----------------------------------------------------------------------------------
+        
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+        
+            ClearBackground(RAYWHITE);
+            
+            switch(currentScreen) 
+            {
+                case LOGO: 
+                {
+                    // TODO: Draw LOGO screen here!
+                    DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
+                    DrawText("WAIT for 2 SECONDS...", 290, 220, 20, GRAY);
+                    
+                } break;
+                case TITLE: 
+                {
+                    // TODO: Draw TITLE screen here!
+                    DrawRectangle(0, 0, screenWidth, screenHeight, GREEN);
+                    DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
+                    DrawText("PRESS ENTER to JUMP to GAMEPLAY SCREEN", 160, 220, 20, DARKGREEN);
+                    
+                } break;
+                case GAMEPLAY:
+                { 
+                    // TODO: Draw GAMEPLAY screen here!
+                    DrawRectangle(0, 0, screenWidth, screenHeight, PURPLE);
+                    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
+                    DrawText("PRESS ENTER to JUMP to ENDING SCREEN", 170, 220, 20, MAROON);
+
+                } break;
+                case ENDING: 
+                {
+                    // TODO: Draw ENDING screen here!
+                    DrawRectangle(0, 0, screenWidth, screenHeight, BLUE);
+                    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
+                    DrawText("PRESS ENTER to RETURN to TITLE SCREEN", 160, 220, 20, DARKBLUE);
+                    
+                } break;
+                default: break;
+            }
+        
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    
+    // TODO: Unload all loaded data (textures, fonts, audio) here!
+    
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+    
+    return 0;
+}

+ 90 - 0
templates/basic_game/makefile

@@ -0,0 +1,90 @@
+#**************************************************************************************************
+#
+#   raylib - Basic Game
+#
+#   makefile to compile basic game
+#
+#   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+#    
+#   This software is provided "as-is", without any express or implied warranty. In no event 
+#   will the authors be held liable for any damages arising from the use of this software.
+#
+#   Permission is granted to anyone to use this software for any purpose, including commercial 
+#   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+#
+#     1. The origin of this software must not be misrepresented; you must not claim that you 
+#     wrote the original software. If you use this software in a product, an acknowledgment 
+#     in the product documentation would be appreciated but is not required.
+#
+#     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+#     as being the original software.
+#
+#     3. This notice may not be removed or altered from any source distribution.
+#
+#**************************************************************************************************
+
+# define raylib platform (by default, compile for RPI)
+# Other possible platform: PLATFORM_DESKTOP
+PLATFORM ?= PLATFORM_RPI
+
+# define compiler: gcc for C program, define as g++ for C++
+CC = gcc
+
+# define compiler flags:
+#  -O2         defines optimization level
+#  -Wall       turns on most, but not all, compiler warnings
+#  -std=c99    use standard C from 1999 revision
+CFLAGS = -O2 -Wall -std=c99
+#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
+
+# define any directories containing required header files
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    INCLUDES = -I. -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
+else
+    INCLUDES = -I. -I../../src
+endif
+
+# define library paths containing required libs
+LFLAGS = -L. -L../../src -L/opt/vc/lib
+
+# define any libraries to link into executable
+# if you want to link libraries (libname.so or libname.a), use the -lname
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    # libraries for Raspberry Pi compiling
+    # NOTE: OpenAL Soft library should be installed (libopenal1 package)
+    LIBS = -lraylib -lGLESv2 -lEGL -lm -lbcm_host -lopenal
+else
+    # libraries for Windows desktop compiling
+    # NOTE: GLFW3 and OpenAL Soft libraries should be installed
+    LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32
+endif
+
+# define additional parameters and flags for windows
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+    # resources file contains windows exe icon
+    # -Wl,--subsystem,windows hides the console window
+    WINFLAGS = ../../src/resources -Wl,--subsystem,windows
+endif
+
+# typing 'make' will invoke the first target entry in the file,
+# in this case, the 'default' target entry is basic_game
+default: basic_game
+
+# compile template - basic_game
+basic_game: basic_game.c
+	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+
+# clean everything
+clean:
+ifeq ($(PLATFORM),PLATFORM_RPI)
+	rm -f *.o
+#	find . -executable -delete
+else
+	del *.o *.exe
+endif
+	@echo Cleaning done
+
+# instead of defining every module one by one, we can define a pattern
+# this pattern below will automatically compile every module defined on $(OBJS)
+#%.exe : %.c
+#	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM)

+ 59 - 0
templates/basic_test/basic_test.c

@@ -0,0 +1,59 @@
+/*******************************************************************************************
+*
+*   raylib - Template for basic test
+*
+*   <Test description>
+*
+*   This example has been created using raylib v1.2 (www.raylib.com)
+*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+int main()
+{
+    // Initialization
+    //--------------------------------------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+    
+    InitWindow(screenWidth, screenHeight, "raylib basic test - <test description>");
+    
+    // TODO: Initialize all required variables and load all required data here!
+    
+    SetTargetFPS(60);
+    //--------------------------------------------------------------------------------------
+    
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        // TODO: Update your variables here
+        //----------------------------------------------------------------------------------
+        
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+        
+            ClearBackground(RAYWHITE);
+            
+            DrawText("BASIC TEST TEMPLATE", 270, 180, 20, LIGHTGRAY);
+        
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    
+    // TODO: Unload all loaded data (textures, fonts, audio) here!
+    
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+    
+    return 0;
+}

+ 90 - 0
templates/basic_test/makefile

@@ -0,0 +1,90 @@
+#**************************************************************************************************
+#
+#   raylib - Basic Test
+#
+#   makefile to compile basic test
+#
+#   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+#    
+#   This software is provided "as-is", without any express or implied warranty. In no event 
+#   will the authors be held liable for any damages arising from the use of this software.
+#
+#   Permission is granted to anyone to use this software for any purpose, including commercial 
+#   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+#
+#     1. The origin of this software must not be misrepresented; you must not claim that you 
+#     wrote the original software. If you use this software in a product, an acknowledgment 
+#     in the product documentation would be appreciated but is not required.
+#
+#     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+#     as being the original software.
+#
+#     3. This notice may not be removed or altered from any source distribution.
+#
+#**************************************************************************************************
+
+# define raylib platform if not defined (by default, compile for RPI)
+# Other possible platform: PLATFORM_DESKTOP
+PLATFORM ?= PLATFORM_RPI
+
+# define compiler: gcc for C program, define as g++ for C++
+CC = gcc
+
+# define compiler flags:
+#  -O2         defines optimization level
+#  -Wall       turns on most, but not all, compiler warnings
+#  -std=c99    use standard C from 1999 revision
+CFLAGS = -O2 -Wall -std=c99
+#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
+
+# define any directories containing required header files
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    INCLUDES = -I. -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
+else
+    INCLUDES = -I. -I../../src
+endif
+
+# define library paths containing required libs
+LFLAGS = -L. -L../../src -L/opt/vc/lib
+
+# define any libraries to link into executable
+# if you want to link libraries (libname.so or libname.a), use the -lname
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    # libraries for Raspberry Pi compiling
+    # NOTE: OpenAL Soft library should be installed (libopenal1 package)
+    LIBS = -lraylib -lGLESv2 -lEGL -lm -lbcm_host -lopenal
+else
+    # libraries for Windows desktop compiling
+    # NOTE: GLFW3 and OpenAL Soft libraries should be installed
+    LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32
+endif
+
+# define additional parameters and flags for windows
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+    # resources file contains windows exe icon
+    # -Wl,--subsystem,windows hides the console window
+    WINFLAGS = ../../src/resources -Wl,--subsystem,windows
+endif
+
+# typing 'make' will invoke the first target entry in the file,
+# in this case, the 'default' target entry is basic_test
+default: basic_test
+
+# compile template - basic_test
+basic_test: basic_test.c
+	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+
+# clean everything
+clean:
+ifeq ($(PLATFORM),PLATFORM_RPI)
+	rm -f *.o
+#	find . -executable -delete
+else
+	del *.o *.exe
+endif
+	@echo Cleaning done
+
+# instead of defining every module one by one, we can define a pattern
+# this pattern below will automatically compile every module defined on $(OBJS)
+#%.exe : %.c
+#	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM)

+ 98 - 0
templates/simple_game/makefile

@@ -0,0 +1,98 @@
+#**************************************************************************************************
+#
+#   raylib - Simple Game
+#
+#   makefile to compile simple game
+#
+#   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+#    
+#   This software is provided "as-is", without any express or implied warranty. In no event 
+#   will the authors be held liable for any damages arising from the use of this software.
+#
+#   Permission is granted to anyone to use this software for any purpose, including commercial 
+#   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+#
+#     1. The origin of this software must not be misrepresented; you must not claim that you 
+#     wrote the original software. If you use this software in a product, an acknowledgment 
+#     in the product documentation would be appreciated but is not required.
+#
+#     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+#     as being the original software.
+#
+#     3. This notice may not be removed or altered from any source distribution.
+#
+#**************************************************************************************************
+
+# define raylib platform (by default, compile for RPI)
+# Other possible platform: PLATFORM_DESKTOP
+PLATFORM ?= PLATFORM_RPI
+
+# define compiler: gcc for C program, define as g++ for C++
+CC = gcc
+
+# define compiler flags:
+#  -O2         defines optimization level
+#  -Wall       turns on most, but not all, compiler warnings
+#  -std=c99    use standard C from 1999 revision
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    CFLAGS = -O2 -Wall -std=gnu99 -fgnu89-inline
+else
+    CFLAGS = -O2 -Wall -std=c99
+endif
+#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
+
+# define any directories containing required header files
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    INCLUDES = -I. -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
+else
+    INCLUDES = -I. -I../../src
+endif
+
+# define library paths containing required libs
+LFLAGS = -L. -L../../src -L/opt/vc/lib
+
+# define any libraries to link into executable
+# if you want to link libraries (libname.so or libname.a), use the -lname
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    # libraries for Raspberry Pi compiling
+    # NOTE: OpenAL Soft library should be installed (libopenal1 package)
+    LIBS = -lraylib -lGLESv2 -lEGL -lm -lbcm_host -lopenal
+else
+    # libraries for Windows desktop compiling
+    # NOTE: GLFW3 and OpenAL Soft libraries should be installed
+    LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32
+endif
+
+# define additional parameters and flags for windows
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+    # resources file contains windows exe icon
+    # -Wl,--subsystem,windows hides the console window
+    WINFLAGS = ../../src/resources -Wl,--subsystem,windows
+endif
+
+# typing 'make' will invoke the first target entry in the file,
+# in this case, the 'default' target entry is simple_game
+default: simple_game
+
+# compile template - simple_game
+simple_game: simple_game.c screens.o
+	$(CC) -o $@ $< screens.o $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+
+# compile screens
+screens.o: screens.c
+	$(CC) -c $< $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# clean everything
+clean:
+ifeq ($(PLATFORM),PLATFORM_RPI)
+	rm -f *.o
+#	find . -executable -delete
+else
+	del *.o *.exe
+endif
+	@echo Cleaning done
+
+# instead of defining every module one by one, we can define a pattern
+# this pattern below will automatically compile every module defined on $(OBJS)
+#%.exe : %.c
+#	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM)

+ 195 - 0
templates/simple_game/screens.c

@@ -0,0 +1,195 @@
+/**********************************************************************************************
+*
+*   raylib - Simple Game template
+*
+*   Screens Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (visible to other modules)
+//----------------------------------------------------------------------------------
+GameScreen currentScreen = LOGO;
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Logo screen global variables
+static int framesCounter;
+
+// Title screen global variables
+
+// Gameplay screen global variables
+
+// Ending screen global variables
+
+//----------------------------------------------------------------------------------
+// Logo Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Logo Screen Initialization logic
+void InitLogoScreen(void)
+{
+    // TODO: Initialize LOGO screen variables here!
+    framesCounter = 0;
+}
+
+// Logo Screen Update logic
+void UpdateLogoScreen(void)
+{
+    // TODO: Update LOGO screen variables here!
+
+    framesCounter++;    // Count frames
+
+    // Wait for 2 seconds (120 frames) before jumping to TITLE screen
+    if (framesCounter > 120)
+    {
+        currentScreen = TITLE;
+    }
+}
+
+// Logo Screen Draw logic
+void DrawLogoScreen(void)
+{
+    // TODO: Draw LOGO screen here!
+    DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
+    DrawText("WAIT for 2 SECONDS...", 290, 220, 20, GRAY);
+}
+
+// Logo Screen Unload logic
+void UnloadLogoScreen(void)
+{
+    // TODO: Unload LOGO screen variables here!
+}
+
+//----------------------------------------------------------------------------------
+// Title Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Title Screen Initialization logic
+void InitTitleScreen(void)
+{
+    // TODO: Initialize TITLE screen variables here!
+}
+
+// Title Screen Update logic
+void UpdateTitleScreen(void)
+{
+    // TODO: Update TITLE screen variables here!
+
+    // Press enter to change to GAMEPLAY screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        currentScreen = GAMEPLAY;
+    }
+}
+
+// Title Screen Draw logic
+void DrawTitleScreen(void)
+{
+    // TODO: Draw TITLE screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), GREEN);
+    DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
+    DrawText("PRESS ENTER to JUMP to GAMEPLAY SCREEN", 160, 220, 20, DARKGREEN);
+}
+
+// Title Screen Unload logic
+void UnloadTitleScreen(void)
+{
+    // TODO: Unload TITLE screen variables here!
+}
+
+//----------------------------------------------------------------------------------
+// Gameplay Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Gameplay Screen Initialization logic
+void InitGameplayScreen(void)
+{
+    // TODO: Initialize GAMEPLAY screen variables here!
+}
+
+// Gameplay Screen Update logic
+void UpdateGameplayScreen(void)
+{
+    // TODO: Update GAMEPLAY screen variables here!
+
+    // Press enter to change to ENDING screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        currentScreen = ENDING;
+    }
+}
+
+// Gameplay Screen Draw logic
+void DrawGameplayScreen(void)
+{
+    // TODO: Draw GAMEPLAY screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), PURPLE);
+    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
+    DrawText("PRESS ENTER to JUMP to ENDING SCREEN", 170, 220, 20, MAROON);
+}
+
+// Gameplay Screen Unload logic
+void UnloadGameplayScreen(void)
+{
+    // TODO: Unload GAMEPLAY screen variables here!
+}
+
+//----------------------------------------------------------------------------------
+// Ending Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Ending Screen Initialization logic
+void InitEndingScreen(void)
+{
+    // TODO: Initialize ENDING screen variables here!
+}
+
+// Ending Screen Update logic
+void UpdateEndingScreen(void)
+{
+    // TODO: Update ENDING screen variables here!
+
+    // Press enter to return to TITLE screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        currentScreen = TITLE;
+    }
+}
+
+// Ending Screen Draw logic
+void DrawEndingScreen(void)
+{
+    // TODO: Draw ENDING screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLUE);
+    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
+    DrawText("PRESS ENTER to RETURN to TITLE SCREEN", 160, 220, 20, DARKBLUE);
+}
+
+// Ending Screen Unload logic
+void UnloadEndingScreen(void)
+{
+    // TODO: Unload ENDING screen variables here!
+}

+ 74 - 0
templates/simple_game/screens.h

@@ -0,0 +1,74 @@
+/**********************************************************************************************
+*
+*   raylib - Simple Game template
+*
+*   Screens Functions Declarations (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#ifndef SCREENS_H
+#define SCREENS_H
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef enum GameScreen { LOGO, TITLE, GAMEPLAY, ENDING } GameScreen;
+
+#ifdef __cplusplus
+extern "C" {            // Prevents name mangling of functions
+#endif
+
+//----------------------------------------------------------------------------------
+// Logo Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitLogoScreen(void);
+void UpdateLogoScreen(void);
+void DrawLogoScreen(void);
+void UnloadLogoScreen(void);
+
+//----------------------------------------------------------------------------------
+// Title Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitTitleScreen(void);
+void UpdateTitleScreen(void);
+void DrawTitleScreen(void);
+void UnloadTitleScreen(void);
+
+//----------------------------------------------------------------------------------
+// Gameplay Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitGameplayScreen(void);
+void UpdateGameplayScreen(void);
+void DrawGameplayScreen(void);
+void UnloadGameplayScreen(void);
+
+//----------------------------------------------------------------------------------
+// Ending Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitEndingScreen(void);
+void UpdateEndingScreen(void);
+void DrawEndingScreen(void);
+void UnloadEndingScreen(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // SCREENS_H

BIN
templates/simple_game/screens.o


+ 98 - 0
templates/simple_game/simple_game.c

@@ -0,0 +1,98 @@
+/*******************************************************************************************
+*
+*   raylib - Simple Game template
+*
+*   <Game title>
+*   <Game description>
+*
+*   This game has been created using raylib (www.raylib.com)
+*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+*   raylib - Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Defined in other modules
+//----------------------------------------------------------------------------------
+extern GameScreen currentScreen;    // Defined in screens.c
+
+//----------------------------------------------------------------------------------
+// Main entry point
+//----------------------------------------------------------------------------------
+int main(void)
+{
+	// Initialization
+	//---------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+	const char windowTitle[30] = "<game name goes here>";
+
+    InitWindow(screenWidth, screenHeight, windowTitle);
+
+    // Initialize all screens
+    InitLogoScreen();
+    InitTitleScreen();
+    InitGameplayScreen();
+    InitEndingScreen();
+
+    // Define first screen
+    currentScreen = LOGO;
+    
+	SetTargetFPS(60);
+	//----------------------------------------------------------
+
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        switch(currentScreen) 
+        {
+            case LOGO:      UpdateLogoScreen(); break;      // Update LOGO currentScreen
+            case TITLE:     UpdateTitleScreen(); break;     // Update TITLE currentScreen
+            case GAMEPLAY:  UpdateGameplayScreen(); break;  // Update GAMEPLAY currentScreen
+            case ENDING:    UpdateEndingScreen(); break;       // Update END currentScreen
+            default: break;
+        }
+        //----------------------------------------------------------------------------------
+        
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+        
+            ClearBackground(RAYWHITE);
+            
+            switch(currentScreen) 
+            {
+                case LOGO:      DrawLogoScreen(); break;        // Draw LOGO currentScreen
+                case TITLE:     DrawTitleScreen(); break;       // Draw TITLE currentScreen
+                case GAMEPLAY:  DrawGameplayScreen(); break;    // Draw GAMEPLAY currentScreen
+                case ENDING:    DrawEndingScreen(); break;         // Draw END currentScreen
+                default: break;
+            }
+        
+            DrawFPS(screenWidth - 100, 20);
+        
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    
+    // Unload all loaded data (textures, fonts, audio)
+    UnloadLogoScreen();
+    UnloadTitleScreen();
+    UnloadGameplayScreen();
+    UnloadEndingScreen();
+    
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+	
+    return 0;
+}

+ 118 - 0
templates/standard_game/makefile

@@ -0,0 +1,118 @@
+#**************************************************************************************************
+#
+#   raylib - Standard Game
+#
+#   makefile to compile standard game
+#
+#   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+#    
+#   This software is provided "as-is", without any express or implied warranty. In no event 
+#   will the authors be held liable for any damages arising from the use of this software.
+#
+#   Permission is granted to anyone to use this software for any purpose, including commercial 
+#   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+#
+#     1. The origin of this software must not be misrepresented; you must not claim that you 
+#     wrote the original software. If you use this software in a product, an acknowledgment 
+#     in the product documentation would be appreciated but is not required.
+#
+#     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+#     as being the original software.
+#
+#     3. This notice may not be removed or altered from any source distribution.
+#
+#**************************************************************************************************
+
+# define raylib platform if not defined (by default, compile for RPI)
+# Other possible platform: PLATFORM_DESKTOP
+PLATFORM ?= PLATFORM_RPI
+
+# define compiler: gcc for C program, define as g++ for C++
+CC = gcc
+
+# define compiler flags:
+#  -O2         defines optimization level
+#  -Wall       turns on most, but not all, compiler warnings
+#  -std=c99    use standard C from 1999 revision
+CFLAGS = -O2 -Wall -std=c99
+#CFLAGSEXTRA = -Wextra -Wmissing-prototypes -Wstrict-prototypes
+
+# define any directories containing required header files
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    INCLUDES = -I. -I./screens -I../../src -I/opt/vc/include -I/opt/vc/include/interface/vcos/pthreads
+else
+    INCLUDES = -I. -I./screens -I../../src
+endif
+
+# define library paths containing required libs
+LFLAGS = -L. -L../../src -L/opt/vc/lib
+
+# define any libraries to link into executable
+# if you want to link libraries (libname.so or libname.a), use the -lname
+ifeq ($(PLATFORM),PLATFORM_RPI)
+    # libraries for Raspberry Pi compiling
+    # NOTE: OpenAL Soft library should be installed (libopenal1 package)
+    LIBS = -lraylib -lGLESv2 -lEGL -lm -lbcm_host -lopenal
+else
+    # libraries for Windows desktop compiling
+    # NOTE: GLFW3 and OpenAL Soft libraries should be installed
+    LIBS = -lraylib -lglfw3 -lglew32 -lopengl32 -lopenal32 -lgdi32
+endif
+
+# define additional parameters and flags for windows
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+    # resources file contains windows exe icon
+    # -Wl,--subsystem,windows hides the console window
+    WINFLAGS = ../../src/resources -Wl,--subsystem,windows
+endif
+
+# define all screen object files required
+SCREENS = \
+	screens/screen_logo.o \
+	screens/screen_title.o \
+	screens/screen_options.o \
+	screens/screen_gameplay.o \
+	screens/screen_ending.o \
+
+# typing 'make' will invoke the first target entry in the file,
+# in this case, the 'default' target entry is standard_game
+default: standard_game
+
+# compile template - standard_game
+standard_game: standard_game.c $(SCREENS)
+	$(CC) -o $@ $< $(SCREENS) $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM) $(WINFLAGS)
+
+# compile screen LOGO
+screens/screen_logo.o: screens/screen_logo.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen TITLE
+screens/screen_title.o: screens/screen_title.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen OPTIONS
+screens/screen_options.o: screens/screen_options.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen GAMEPLAY
+screens/screen_gameplay.o: screens/screen_gameplay.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# compile screen ENDING
+screens/screen_ending.o: screens/screen_ending.c
+	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDES) -D$(PLATFORM)
+
+# clean everything
+clean:
+ifeq ($(PLATFORM),PLATFORM_RPI)
+	rm -f screens/*.o
+#	find . -executable -delete
+else
+	del screens/*.o *.exe
+endif
+	@echo Cleaning done
+
+# instead of defining every module one by one, we can define a pattern
+# this pattern below will automatically compile every module defined on $(OBJS)
+#%.exe : %.c
+#	$(CC) -o $@ $< $(CFLAGS) $(INCLUDES) $(LFLAGS) $(LIBS) -D$(PLATFORM)

+ 80 - 0
templates/standard_game/screens/screen_ending.c

@@ -0,0 +1,80 @@
+/**********************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   Ending Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Ending screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Ending Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Ending Screen Initialization logic
+void InitEndingScreen(void)
+{
+    // TODO: Initialize ENDING screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Ending Screen Update logic
+void UpdateEndingScreen(void)
+{
+    // TODO: Update ENDING screen variables here!
+
+    // Press enter to return to TITLE screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        finishScreen = 1;
+    }
+}
+
+// Ending Screen Draw logic
+void DrawEndingScreen(void)
+{
+    // TODO: Draw ENDING screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), BLUE);
+    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
+    DrawText("PRESS ENTER to RETURN to TITLE SCREEN", 160, 220, 20, DARKBLUE);
+}
+
+// Ending Screen Unload logic
+void UnloadEndingScreen(void)
+{
+    // TODO: Unload ENDING screen variables here!
+}
+
+// Ending Screen should finish?
+int FinishEndingScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/standard_game/screens/screen_ending.o


+ 80 - 0
templates/standard_game/screens/screen_gameplay.c

@@ -0,0 +1,80 @@
+/**********************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   Gameplay Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Gameplay screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Gameplay Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Gameplay Screen Initialization logic
+void InitGameplayScreen(void)
+{
+    // TODO: Initialize GAMEPLAY screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Gameplay Screen Update logic
+void UpdateGameplayScreen(void)
+{
+    // TODO: Update GAMEPLAY screen variables here!
+
+    // Press enter to change to ENDING screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        finishScreen = 1;
+    }
+}
+
+// Gameplay Screen Draw logic
+void DrawGameplayScreen(void)
+{
+    // TODO: Draw GAMEPLAY screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), PURPLE);
+    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
+    DrawText("PRESS ENTER to JUMP to ENDING SCREEN", 170, 220, 20, MAROON);
+}
+
+// Gameplay Screen Unload logic
+void UnloadGameplayScreen(void)
+{
+    // TODO: Unload GAMEPLAY screen variables here!
+}
+
+// Gameplay Screen should finish?
+int FinishGameplayScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/standard_game/screens/screen_gameplay.o


+ 81 - 0
templates/standard_game/screens/screen_logo.c

@@ -0,0 +1,81 @@
+/**********************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   Logo Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Logo screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Logo Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Logo Screen Initialization logic
+void InitLogoScreen(void)
+{
+    // TODO: Initialize LOGO screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Logo Screen Update logic
+void UpdateLogoScreen(void)
+{
+    // TODO: Update LOGO screen variables here!
+
+    framesCounter++;    // Count frames
+
+    // Wait for 2 seconds (120 frames) before jumping to TITLE screen
+    if (framesCounter > 120)
+    {
+        finishScreen = true;
+    }
+}
+
+// Logo Screen Draw logic
+void DrawLogoScreen(void)
+{
+    // TODO: Draw LOGO screen here!
+    DrawText("LOGO SCREEN", 20, 20, 40, LIGHTGRAY);
+    DrawText("WAIT for 2 SECONDS...", 290, 220, 20, GRAY);
+}
+
+// Logo Screen Unload logic
+void UnloadLogoScreen(void)
+{
+    // TODO: Unload LOGO screen variables here!
+}
+
+// Logo Screen should finish?
+int FinishLogoScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/standard_game/screens/screen_logo.o


+ 71 - 0
templates/standard_game/screens/screen_options.c

@@ -0,0 +1,71 @@
+/**********************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   Options Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Options screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Options Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Options Screen Initialization logic
+void InitOptionsScreen(void)
+{
+    // TODO: Initialize OPTIONS screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Options Screen Update logic
+void UpdateOptionsScreen(void)
+{
+    // TODO: Update OPTIONS screen variables here!
+}
+
+// Options Screen Draw logic
+void DrawOptionsScreen(void)
+{
+    // TODO: Draw OPTIONS screen here!
+}
+
+// Options Screen Unload logic
+void UnloadOptionsScreen(void)
+{
+    // TODO: Unload OPTIONS screen variables here!
+}
+
+// Options Screen should finish?
+int FinishOptionsScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/standard_game/screens/screen_options.o


+ 81 - 0
templates/standard_game/screens/screen_title.c

@@ -0,0 +1,81 @@
+/**********************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   Title Screen Functions Definitions (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#include "raylib.h"
+#include "screens.h"
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition (local to this module)
+//----------------------------------------------------------------------------------
+
+// Title screen global variables
+static int framesCounter;
+static int finishScreen;
+
+//----------------------------------------------------------------------------------
+// Title Screen Functions Definition
+//----------------------------------------------------------------------------------
+
+// Title Screen Initialization logic
+void InitTitleScreen(void)
+{
+    // TODO: Initialize TITLE screen variables here!
+    framesCounter = 0;
+    finishScreen = 0;
+}
+
+// Title Screen Update logic
+void UpdateTitleScreen(void)
+{
+    // TODO: Update TITLE screen variables here!
+
+    // Press enter to change to GAMEPLAY screen
+    if (IsKeyPressed(KEY_ENTER))
+    {
+        //finishScreen = 1;   // OPTIONS
+        finishScreen = 2;   // GAMEPLAY
+    }
+}
+
+// Title Screen Draw logic
+void DrawTitleScreen(void)
+{
+    // TODO: Draw TITLE screen here!
+    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), GREEN);
+    DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
+    DrawText("PRESS ENTER to JUMP to GAMEPLAY SCREEN", 160, 220, 20, DARKGREEN);
+}
+
+// Title Screen Unload logic
+void UnloadTitleScreen(void)
+{
+    // TODO: Unload TITLE screen variables here!
+}
+
+// Title Screen should finish?
+int FinishTitleScreen(void)
+{
+    return finishScreen;
+}

BIN
templates/standard_game/screens/screen_title.o


+ 92 - 0
templates/standard_game/screens/screens.h

@@ -0,0 +1,92 @@
+/**********************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   Screens Functions Declarations (Init, Update, Draw, Unload)
+*
+*   Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+*   This software is provided "as-is", without any express or implied warranty. In no event
+*   will the authors be held liable for any damages arising from the use of this software.
+*
+*   Permission is granted to anyone to use this software for any purpose, including commercial
+*   applications, and to alter it and redistribute it freely, subject to the following restrictions:
+*
+*     1. The origin of this software must not be misrepresented; you must not claim that you
+*     wrote the original software. If you use this software in a product, an acknowledgment
+*     in the product documentation would be appreciated but is not required.
+*
+*     2. Altered source versions must be plainly marked as such, and must not be misrepresented
+*     as being the original software.
+*
+*     3. This notice may not be removed or altered from any source distribution.
+*
+**********************************************************************************************/
+
+#ifndef SCREENS_H
+#define SCREENS_H
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef enum GameScreen { LOGO, TITLE, OPTIONS, GAMEPLAY, ENDING } GameScreen;
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+GameScreen currentScreen;
+
+#ifdef __cplusplus
+extern "C" {            // Prevents name mangling of functions
+#endif
+
+//----------------------------------------------------------------------------------
+// Logo Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitLogoScreen(void);
+void UpdateLogoScreen(void);
+void DrawLogoScreen(void);
+void UnloadLogoScreen(void);
+int FinishLogoScreen(void);
+
+//----------------------------------------------------------------------------------
+// Title Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitTitleScreen(void);
+void UpdateTitleScreen(void);
+void DrawTitleScreen(void);
+void UnloadTitleScreen(void);
+int FinishTitleScreen(void);
+
+//----------------------------------------------------------------------------------
+// Options Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitOptionsScreen(void);
+void UpdateOptionsScreen(void);
+void DrawOptionsScreen(void);
+void UnloadOptionsScreen(void);
+int FinishOptionsScreen(void);
+
+//----------------------------------------------------------------------------------
+// Gameplay Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitGameplayScreen(void);
+void UpdateGameplayScreen(void);
+void DrawGameplayScreen(void);
+void UnloadGameplayScreen(void);
+int FinishGameplayScreen(void);
+
+//----------------------------------------------------------------------------------
+// Ending Screen Functions Declaration
+//----------------------------------------------------------------------------------
+void InitEndingScreen(void);
+void UpdateEndingScreen(void);
+void DrawEndingScreen(void);
+void UnloadEndingScreen(void);
+int FinishEndingScreen(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // SCREENS_H

+ 144 - 0
templates/standard_game/standard_game.c

@@ -0,0 +1,144 @@
+/*******************************************************************************************
+*
+*   raylib - Standard Game template
+*
+*   <Game title>
+*   <Game description>
+*
+*   This game has been created using raylib (www.raylib.com)
+*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
+*
+*   raylib - Copyright (c) 2014 Ramon Santamaria (Ray San - [email protected])
+*
+********************************************************************************************/
+
+#include "raylib.h"
+#include "screens/screens.h"    // NOTE: Defines currentScreen
+
+//----------------------------------------------------------------------------------
+// Main entry point
+//----------------------------------------------------------------------------------
+int main(void)
+{
+	// Initialization
+	//---------------------------------------------------------
+    const int screenWidth = 800;
+    const int screenHeight = 450;
+	const char windowTitle[30] = "<game name goes here>";
+    
+    InitWindow(screenWidth, screenHeight, windowTitle);
+
+    // TODO: Load global data here (assets that must be available in all screens, i.e. fonts)
+    
+    // Define and init first screen
+    currentScreen = LOGO;   // NOTE: currentScreen is defined in screens.h as a global variable
+    InitLogoScreen();
+    
+	SetTargetFPS(60);
+	//----------------------------------------------------------
+
+    // Main game loop
+    while (!WindowShouldClose())    // Detect window close button or ESC key
+    {
+        // Update
+        //----------------------------------------------------------------------------------
+        switch(currentScreen) 
+        {
+            case LOGO: 
+            {
+                UpdateLogoScreen();
+                
+                if (FinishLogoScreen())
+                {
+                    UnloadLogoScreen();
+                    currentScreen = TITLE;
+                    InitTitleScreen();
+                }
+            } break;
+            case TITLE: 
+            {
+                UpdateTitleScreen();
+                
+                // NOTE: FinishTitleScreen() return an int defining the screen to jump to
+                if (FinishTitleScreen() == 1)
+                {
+                    UnloadTitleScreen();
+                    currentScreen = OPTIONS;
+                    InitOptionsScreen();
+                }
+                else if (FinishTitleScreen() == 2)
+                {
+                    UnloadTitleScreen();
+                    currentScreen = GAMEPLAY;
+                    InitGameplayScreen();
+                }
+            } break;
+            case OPTIONS:
+            {
+                UpdateOptionsScreen();
+                
+                if (FinishOptionsScreen())
+                {
+                    UnloadOptionsScreen();
+                    currentScreen = TITLE;
+                    InitTitleScreen();
+                } 
+            } break;
+            case GAMEPLAY:
+            { 
+                UpdateGameplayScreen();
+                
+                if (FinishGameplayScreen())
+                {
+                    UnloadGameplayScreen();
+                    currentScreen = ENDING;
+                    InitEndingScreen();
+                }   
+            } break;
+            case ENDING: 
+            {
+                UpdateEndingScreen();
+                
+                if (FinishEndingScreen())
+                {
+                    UnloadEndingScreen();
+                    currentScreen = TITLE;
+                    InitTitleScreen();
+                } 
+            } break;
+            default: break;
+        }
+        //----------------------------------------------------------------------------------
+        
+        // Draw
+        //----------------------------------------------------------------------------------
+        BeginDrawing();
+        
+            ClearBackground(RAYWHITE);
+            
+            switch(currentScreen) 
+            {
+                case LOGO: DrawLogoScreen(); break;
+                case TITLE: DrawTitleScreen(); break;
+                case OPTIONS: DrawOptionsScreen(); break;
+                case GAMEPLAY: DrawGameplayScreen(); break;
+                case ENDING: DrawEndingScreen(); break;
+                default: break;
+            }
+        
+            //DrawFPS(10, 10);
+        
+        EndDrawing();
+        //----------------------------------------------------------------------------------
+    }
+
+    // De-Initialization
+    //--------------------------------------------------------------------------------------
+    
+    // TODO: Unload all global loaded data (i.e. fonts) here!
+    
+    CloseWindow();        // Close window and OpenGL context
+    //--------------------------------------------------------------------------------------
+	
+    return 0;
+}