Browse Source

WARNING: REMOVED raylib/games - Moved to raysan5/raylib-games

Move raylib games to another repo. It will reduce repo size for new clones.

I considered also removing the related history with [`git filter-repo`](https://github.com/newren/git-filter-repo) (the current sane alternative to the deprecated `filter-branch`) but it has some implications: It would had made a new repository with distinct history and checksums. If the repo was previously published,
the history of the new one won't have been compatible with the history others have pulled.
raysan5 5 years ago
parent
commit
fd5d1dfcb6
100 changed files with 0 additions and 14601 deletions
  1. 0 43
      games/CMakeLists.txt
  2. 0 398
      games/Makefile
  3. 0 300
      games/Makefile.Android
  4. 0 323
      games/arkanoid.c
  5. 0 565
      games/asteroids.c
  6. 0 375
      games/asteroids_survival.c
  7. 0 20
      games/cat_vs_roomba/LICENSE.txt
  8. 0 406
      games/cat_vs_roomba/Makefile
  9. 0 300
      games/cat_vs_roomba/Makefile.Android
  10. BIN
      games/cat_vs_roomba/libraylib.bc
  11. 0 1378
      games/cat_vs_roomba/raymath.h
  12. BIN
      games/cat_vs_roomba/resources/cat.png
  13. BIN
      games/cat_vs_roomba/resources/cat_mouse.mod
  14. BIN
      games/cat_vs_roomba/resources/catch22.mod
  15. BIN
      games/cat_vs_roomba/resources/coin.wav
  16. 0 16
      games/cat_vs_roomba/resources/collisions.txt
  17. BIN
      games/cat_vs_roomba/resources/dirtiles.png
  18. BIN
      games/cat_vs_roomba/resources/dyson.png
  19. 0 34
      games/cat_vs_roomba/resources/furmap.txt
  20. BIN
      games/cat_vs_roomba/resources/furniture.png
  21. 0 37
      games/cat_vs_roomba/resources/furset.txt
  22. BIN
      games/cat_vs_roomba/resources/fursetid.png
  23. BIN
      games/cat_vs_roomba/resources/fxcat01.wav
  24. BIN
      games/cat_vs_roomba/resources/fxcat02.wav
  25. BIN
      games/cat_vs_roomba/resources/fxrobot01.wav
  26. BIN
      games/cat_vs_roomba/resources/fxrobot02.wav
  27. BIN
      games/cat_vs_roomba/resources/fxrobot03.wav
  28. BIN
      games/cat_vs_roomba/resources/roomba.png
  29. 0 139
      games/cat_vs_roomba/resources/star.fnt
  30. BIN
      games/cat_vs_roomba/resources/star.png
  31. 0 139
      games/cat_vs_roomba/resources/star2.fnt
  32. BIN
      games/cat_vs_roomba/resources/star2.png
  33. BIN
      games/cat_vs_roomba/resources/title_cat.png
  34. BIN
      games/cat_vs_roomba/resources/title_roomba.png
  35. BIN
      games/cat_vs_roomba/resources/title_vs.png
  36. BIN
      games/cat_vs_roomba/resources/tracemap.png
  37. 0 291
      games/cat_vs_roomba/roomba.c
  38. 0 96
      games/cat_vs_roomba/screens/screen_ending.c
  39. 0 652
      games/cat_vs_roomba/screens/screen_gameplay.c
  40. 0 211
      games/cat_vs_roomba/screens/screen_logo.c
  41. 0 154
      games/cat_vs_roomba/screens/screen_title.c
  42. 0 92
      games/cat_vs_roomba/screens/screens.h
  43. 0 126
      games/drturtle/00_drturtle_screens.c
  44. 0 163
      games/drturtle/01_drturtle_scrolling.c
  45. 0 212
      games/drturtle/02_drturtle_player.c
  46. 0 393
      games/drturtle/03_drturtle_enemies.c
  47. 0 447
      games/drturtle/04_drturtle_gui.c
  48. 0 471
      games/drturtle/05_drturtle_audio.c
  49. 0 495
      games/drturtle/06_drturtle_final.c
  50. 0 13
      games/drturtle/CMakeLists.txt
  51. 0 20
      games/drturtle/LICENSE.txt
  52. 0 385
      games/drturtle/Makefile
  53. 0 544
      games/drturtle/drturtle_final_web.c
  54. BIN
      games/drturtle/resources/die.wav
  55. BIN
      games/drturtle/resources/eat.wav
  56. BIN
      games/drturtle/resources/fish.png
  57. BIN
      games/drturtle/resources/gamera.png
  58. BIN
      games/drturtle/resources/gamera.wav
  59. BIN
      games/drturtle/resources/gframe.png
  60. BIN
      games/drturtle/resources/komika.png
  61. BIN
      games/drturtle/resources/mountains.png
  62. BIN
      games/drturtle/resources/orca.png
  63. BIN
      games/drturtle/resources/sea.png
  64. BIN
      games/drturtle/resources/shark.png
  65. BIN
      games/drturtle/resources/sky.png
  66. BIN
      games/drturtle/resources/speeding.ogg
  67. BIN
      games/drturtle/resources/swhale.png
  68. BIN
      games/drturtle/resources/title.png
  69. BIN
      games/drturtle/resources/turtle.png
  70. 0 238
      games/floppy.c
  71. 0 279
      games/gold_fever.c
  72. 0 566
      games/gorilas.c
  73. 0 16
      games/just_do/CMakeLists.txt
  74. 0 20
      games/just_do/LICENSE.txt
  75. 0 413
      games/just_do/Makefile
  76. 0 300
      games/just_do/Makefile.Android
  77. 0 356
      games/just_do/just_do.c
  78. BIN
      games/just_do/resources/ambient.ogg
  79. BIN
      games/just_do/resources/win.wav
  80. 0 167
      games/just_do/screens/screen_level00.c
  81. 0 163
      games/just_do/screens/screen_level01.c
  82. 0 157
      games/just_do/screens/screen_level02.c
  83. 0 134
      games/just_do/screens/screen_level03.c
  84. 0 147
      games/just_do/screens/screen_level04.c
  85. 0 185
      games/just_do/screens/screen_level05.c
  86. 0 156
      games/just_do/screens/screen_level06.c
  87. 0 178
      games/just_do/screens/screen_level07.c
  88. 0 157
      games/just_do/screens/screen_level08.c
  89. 0 199
      games/just_do/screens/screen_level09.c
  90. 0 153
      games/just_do/screens/screen_level10.c
  91. 0 227
      games/just_do/screens/screen_logo.c
  92. 0 150
      games/just_do/screens/screens.h
  93. 0 16
      games/koala_seasons/CMakeLists.txt
  94. 0 20
      games/koala_seasons/LICENSE.txt
  95. 0 406
      games/koala_seasons/Makefile
  96. 0 300
      games/koala_seasons/Makefile.Android
  97. 0 260
      games/koala_seasons/koala_seasons.c
  98. BIN
      games/koala_seasons/resources/audio/dash.ogg
  99. BIN
      games/koala_seasons/resources/audio/dingo_die.ogg
  100. BIN
      games/koala_seasons/resources/audio/eat_leaves.ogg

+ 0 - 43
games/CMakeLists.txt

@@ -1,43 +0,0 @@
-# Setup the project and settings
-project(games)
-
-# Get the source toegher
-file(GLOB sources *.c)
-
-set(OUTPUT_EXT)
-
-if(${PLATFORM} MATCHES "Web")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Os -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -s EMTERPRETIFY=1 -s EMTERPRETIFY_ASYNC=1")
-  set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} --shell-file ${CMAKE_SOURCE_DIR}/src/shell.html")
-  set(OUTPUT_EXT ".html")
-
-  # Remove the -rdynamic flag because otherwise emscripten
-  # does not generate HTML+JS+WASM files, only a non-working
-  # and fat HTML
-  string(REPLACE "-rdynamic" "" CMAKE_SHARED_LIBRARY_LINK_C_FLAGS ${CMAKE_SHARED_LIBRARY_LINK_C_FLAGS})
-endif()
-
-if (NOT TARGET raylib)
-  find_package(raylib 2.0 REQUIRED)
-endif()
-
-# Do each game
-foreach(game_source ${sources})
-  # Create the basename for the game
-  get_filename_component(game_name ${game_source} NAME)
-  string(REPLACE ".c" "${OUTPUT_EXT}" game_name ${game_name})
-
-  # Setup the game
-  add_executable(${game_name} ${game_source})
-
-  # Link the libraries
-  target_link_libraries(${game_name} raylib)
-endforeach()
-
-# Do the games with subdirectories
-add_subdirectory(drturtle)
-add_subdirectory(just_do)
-add_subdirectory(koala_seasons)
-add_subdirectory(light_my_ritual)
-add_subdirectory(skully_escape)
-add_subdirectory(wave_collector)

+ 0 - 398
games/Makefile

@@ -1,398 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
-#
-#   Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
-#
-#   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.
-#
-#**************************************************************************************************
-
-.PHONY: all clean
-
-# Define required raylib variables
-PROJECT_NAME       ?= raylib_examples
-RAYLIB_VERSION     ?= 3.0.0
-RAYLIB_API_VERSION ?= 3
-RAYLIB_PATH        ?= ..
-
-# Define default options
-
-# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
-PLATFORM           ?= PLATFORM_DESKTOP
-
-# Locations of your newly installed library and associated headers. See ../src/Makefile
-# On Linux, if you have installed raylib but cannot compile the examples, check that
-# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
-# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
-# To enable compile-time linking to a special version of libraylib.so, change these variables here.
-# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
-# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
-# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
-# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
-DESTDIR ?= /usr/local
-RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
-# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
-RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE        ?= STATIC
-
-# Build mode for project: DEBUG or RELEASE
-BUILD_MODE            ?= RELEASE
-
-# Use external GLFW library instead of rglfw module
-# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
-USE_EXTERNAL_GLFW     ?= FALSE
-
-# Use Wayland display server protocol on Linux desktop
-# by default it uses X11 windowing system
-USE_WAYLAND_DISPLAY   ?= FALSE
-
-# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    # No uname.exe on MinGW!, but OS=Windows_NT on Windows!
-    # ifeq ($(UNAME),Msys) -> Windows
-    ifeq ($(OS),Windows_NT)
-        PLATFORM_OS=WINDOWS
-    else
-        UNAMEOS=$(shell uname)
-        ifeq ($(UNAMEOS),Linux)
-            PLATFORM_OS=LINUX
-        endif
-        ifeq ($(UNAMEOS),FreeBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),OpenBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),NetBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),DragonFly)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),Darwin)
-            PLATFORM_OS=OSX
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    UNAMEOS=$(shell uname)
-    ifeq ($(UNAMEOS),Linux)
-        PLATFORM_OS=LINUX
-    endif
-endif
-
-# RAYLIB_PATH adjustment for different platforms.
-# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
-# Required for ldconfig or other tools that do not perform path expansion.
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        RAYLIB_PREFIX ?= ..
-        RAYLIB_PATH    = $(realpath $(RAYLIB_PREFIX))
-    endif
-endif
-# Default path for raylib on Raspberry Pi, if installed in different path, update it!
-# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
-# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    RAYLIB_PATH       ?= /home/pi/raylib
-endif
-
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Emscripten required variables
-    EMSDK_PATH         ?= C:/emsdk
-    EMSCRIPTEN_PATH    ?= $(EMSDK_PATH)/fastcomp/emscripten
-    CLANG_PATH          = $(EMSDK_PATH)/fastcomp/bin
-    PYTHON_PATH         = $(EMSDK_PATH)/python/2.7.13.1_64bit/python-2.7.13.amd64
-    NODE_PATH           = $(EMSDK_PATH)/node/12.9.1_64bit/bin
-    export PATH         = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
-endif
-
-# Define raylib release directory for compiled library.
-# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version
-RAYLIB_RELEASE_PATH 	?= $(RAYLIB_PATH)/src
-
-# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
-# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
-# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
-# without formal installation from ../src/Makefile. It aids portability and is useful if you have
-# multiple versions of raylib, have raylib installed to a non-standard location, or want to
-# bundle libraylib.so with your game. Change it to your liking.
-# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
-# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
-# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
-# To see which libraries a built example is linking to, ldd core/core_basic_window;
-# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
-EXAMPLE_RUNTIME_PATH   ?= $(RAYLIB_RELEASE_PATH)
-
-# Define default C compiler: gcc
-# NOTE: define g++ compiler if using C++
-CC = gcc
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),OSX)
-        # OSX default compiler
-        CC = clang
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
-        CC = clang
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
-        # Define RPI cross-compiler
-        #CC = armv6j-hardfloat-linux-gnueabi-gcc
-        CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # HTML5 emscripten compiler
-    # WARNING: To compile to HTML5, code must be redesigned
-    # to use emscripten.h and emscripten_set_main_loop()
-    CC = emcc
-endif
-
-# Define default make program: Mingw32-make
-MAKE = mingw32-make
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        MAKE = make
-    endif
-endif
-
-# Define compiler flags:
-#  -O1                  defines optimization level
-#  -g                   include debug information on compilation
-#  -s                   strip unnecessary data from build
-#  -Wall                turns on most, but not all, compiler warnings
-#  -std=c99             defines C language mode (standard C from 1999 revision)
-#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
-#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
-#  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
-CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
-
-ifeq ($(BUILD_MODE),DEBUG)
-    CFLAGS += -g
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -s ASSERTIONS=1 --profiling
-    endif
-else
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -Os
-    else
-        CFLAGS += -s -O1
-    endif
-endif
-
-# Additional flags for compiler (if desired)
-#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # resource file contains windows executable icon and properties
-        # -Wl,--subsystem,windows hides the console window
-        CFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data 
-        ifeq ($(BUILD_MODE), RELEASE)
-            CFLAGS += -Wl,--subsystem,windows
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        ifeq ($(RAYLIB_LIBTYPE),STATIC)
-            CFLAGS += -D_DEFAULT_SOURCE
-        endif
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            # Explicitly enable runtime link to libraylib.so
-            CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    CFLAGS += -std=gnu99
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # -Os                        # size optimization
-    # -O2                        # optimization level 2, if used, also set --memory-init-file 0
-    # -s USE_GLFW=3              # Use glfw3 library (context/input management)
-    # -s ALLOW_MEMORY_GROWTH=1   # to allow memory resizing -> WARNING: Audio buffers could FAIL!
-    # -s TOTAL_MEMORY=16777216   # to specify heap memory size (default = 16MB)
-    # -s USE_PTHREADS=1          # multithreading support
-    # -s WASM=0                  # disable Web Assembly, emitted by default
-    # -s EMTERPRETIFY=1          # enable emscripten code interpreter (very slow)
-    # -s EMTERPRETIFY_ASYNC=1    # support synchronous loops by emterpreter
-    # -s FORCE_FILESYSTEM=1      # force filesystem to load/save files data
-    # -s ASSERTIONS=1            # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
-    # --profiling                # include information for code profiling
-    # --memory-init-file 0       # to avoid an external memory initialization code file (.mem)
-    # --preload-file resources   # specify a resources folder for data compilation
-    CFLAGS += -s USE_GLFW=3
-
-    # Define a custom shell .html and output extension
-    CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
-    EXT = .html
-endif
-
-# Define include paths for required headers
-# NOTE: Several external required libraries (stb and others)
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
-
-# Define additional directories containing required header files
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # RPI required libraries
-    INCLUDE_PATHS += -I/opt/vc/include
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
-endif
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_H_INSTALL_PATH)
-        INCLUDE_PATHS += -I/usr/local/include
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
-        INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
-    endif
-endif
-
-# Define library paths containing required libs.
-LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_INSTALL_PATH)
-        LDFLAGS += -L. -Lsrc -L/usr/local/lib
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs
-        LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
-    endif
-endif
-
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    LDFLAGS += -L/opt/vc/lib
-endif
-
-# Define any libraries required on linking
-# if you want to link libraries (libname.so or libname.a), use the -lname
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # Libraries for Windows desktop compilation
-        # NOTE: WinMM library required to set high-res timer resolution
-        LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
-        # Required for physac examples
-        LDLIBS += -static -lpthread
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Libraries for Debian GNU/Linux desktop compiling
-        # NOTE: Required packages: libegl1-mesa-dev
-        LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
-
-        # On X11 requires also below libraries
-        LDLIBS += -lX11
-        # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
-        #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-
-        # On Wayland windowing system, additional libraries requires
-        ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
-            LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
-        endif
-        # Explicit link to libc
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            LDLIBS += -lc
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-        # Libraries for OSX 10.9 desktop compiling
-        # NOTE: Required packages: libopenal-dev libegl1-mesa-dev
-        LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo 
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
-        # NOTE: Required packages: mesa-libs
-        LDLIBS = -lraylib -lGL -lpthread -lm
-
-        # On XWindow requires also below libraries
-        LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-    endif
-    ifeq ($(USE_EXTERNAL_GLFW),TRUE)
-        # NOTE: It could require additional packages installed: libglfw3-dev
-        LDLIBS += -lglfw
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # Libraries for Raspberry Pi compiling
-    # NOTE: Required packages: libasound2-dev (ALSA)
-    LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Libraries for web (HTML5) compiling
-    LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
-endif
-
-# Define all source files required
-SAMPLES = \
-    arkanoid \
-    asteroids \
-    asteroids_survival \
-    floppy \
-    gold_fever \
-    gorilas \
-    missile_commander \
-    pang \
-    snake \
-    space_invaders \
-    tetris \
-
-# typing 'make' will invoke the default target entry
-all: $(SAMPLES)
-
-# Generic compilation pattern
-# NOTE: Examples must be ready for Android compilation!
-%: %.c
-ifeq ($(PLATFORM),PLATFORM_ANDROID)
-	$(MAKE) -f Makefile.Android PROJECT_NAME=$@ PROJECT_SOURCE_FILES=$<
-else
-	$(CC) -o $@$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
-endif
-
-# Clean everything
-clean:
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-		del *.o *.exe /s
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-	find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable|x-pie-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-		find . -type f -perm +ugo+x -delete
-		rm -f *.o
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-	find . -type f -executable -delete
-	rm -fv *.o
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-	del *.o *.html *.js
-endif
-	@echo Cleaning done
-

+ 0 - 300
games/Makefile.Android

@@ -1,300 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Android project (APK building)
-#
-#   Copyright (c) 2017 Ramon Santamaria (@raysan5)
-#
-#   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 required raylib variables
-PLATFORM               ?= PLATFORM_ANDROID
-RAYLIB_PATH            ?= ..\..
-
-# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
-ANDROID_ARCH           ?= ARM
-ANDROID_API_VERSION     = 21
-ifeq ($(ANDROID_ARCH),ARM)
-    ANDROID_ARCH_NAME   = armeabi-v7a
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    ANDROID_ARCH_NAME   = arm64-v8a
-endif
-
-# Required path variables
-# NOTE: JAVA_HOME must be set to JDK
-JAVA_HOME              ?= C:/JavaJDK
-ANDROID_HOME            = C:/android-sdk
-ANDROID_TOOLCHAIN       = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION)
-ANDROID_BUILD_TOOLS     = $(ANDROID_HOME)/build-tools/28.0.1
-ANDROID_PLATFORM_TOOLS  = $(ANDROID_HOME)/platform-tools
-
-# Android project configuration variables
-PROJECT_NAME           ?= raylib_game
-PROJECT_LIBRARY_NAME   ?= main
-PROJECT_BUILD_PATH     ?= android.$(PROJECT_NAME)
-PROJECT_RESOURCES_PATH ?= resources
-PROJECT_SOURCE_FILES   ?= raylib_game.c
-
-# Some source files are placed in directories, when compiling to some 
-# output directory other than source, that directory must pre-exist.
-# Here we get a list of required folders that need to be created on
-# code output folder $(PROJECT_BUILD_PATH)\obj to avoid GCC errors.
-PROJECT_SOURCE_DIRS = $(sort $(dir $(PROJECT_SOURCE_FILES)))
-
-# Android app configuration variables
-APP_LABEL_NAME ?= rGame
-APP_COMPANY_NAME ?= raylib
-APP_PRODUCT_NAME ?= rgame
-APP_VERSION_CODE ?= 1
-APP_VERSION_NAME ?= 1.0
-APP_ICON_LDPI ?= $(RAYLIB_PATH)\logo\raylib_36x36.png
-APP_ICON_MDPI ?= $(RAYLIB_PATH)\logo\raylib_48x48.png
-APP_ICON_HDPI ?= $(RAYLIB_PATH)\logo\raylib_72x72.png
-APP_SCREEN_ORIENTATION ?= landscape
-APP_KEYSTORE_PASS ?= raylib
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE ?= STATIC
-
-# Library path for libraylib.a/libraylib.so
-RAYLIB_LIB_PATH = $(RAYLIB_PATH)\src
-
-# Shared libs must be added to APK if required
-# NOTE: Generated NativeLoader.java automatically load those libraries
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-    PROJECT_SHARED_LIBS = lib/$(ANDROID_ARCH_NAME)/libraylib.so 
-endif
-
-# Compiler and archiver
-# NOTE: GCC is being deprecated in Android NDK r16
-ifeq ($(ANDROID_ARCH),ARM)
-    CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
-endif
-
-# Compiler flags for arquitecture
-ifeq ($(ANDROID_ARCH),ARM)
-    CFLAGS = -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CFLAGS = -std=c99 -target aarch64 -mfix-cortex-a53-835769
-endif
-# Compilation functions attributes options
-CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC
-# Compiler options for the linker
-CFLAGS += -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes
-# Preprocessor macro definitions
-CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=$(ANDROID_API_VERSION)
-
-# Paths containing required header files
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external/android/native_app_glue
-
-# Linker options
-LDFLAGS = -Wl,-soname,lib$(PROJECT_LIBRARY_NAME).so -Wl,--exclude-libs,libatomic.a 
-LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings 
-# Force linking of library module to define symbol
-LDFLAGS += -u ANativeActivity_onCreate
-# Library paths containing required libs
-LDFLAGS += -L. -L$(PROJECT_BUILD_PATH)/obj -L$(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME) -L$(ANDROID_TOOLCHAIN)\sysroot\usr\lib
-
-# Define any libraries to link into executable
-# if you want to link libraries (libname.so or libname.a), use the -lname
-LDLIBS = -lm -lc -lraylib -llog -landroid -lEGL -lGLESv2 -lOpenSLES -ldl
-
-# Generate target objects list from PROJECT_SOURCE_FILES
-OBJS = $(patsubst %.c, $(PROJECT_BUILD_PATH)/obj/%.o, $(PROJECT_SOURCE_FILES))
-
-# Android APK building process... some steps required...
-# NOTE: typing 'make' will invoke the default target entry called 'all',
-all: create_temp_project_dirs \
-     copy_project_required_libs \
-     copy_project_resources \
-     generate_loader_script \
-     generate_android_manifest \
-     generate_apk_keystore \
-     config_project_package \
-     compile_project_code \
-     compile_project_class \
-     compile_project_class_dex \
-     create_project_apk_package \
-     sign_project_apk_package \
-     zipalign_project_apk_package
-
-# Create required temp directories for APK building
-create_temp_project_dirs:
-	if not exist $(PROJECT_BUILD_PATH) mkdir $(PROJECT_BUILD_PATH) 
-	if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj
-	if not exist $(PROJECT_BUILD_PATH)\src mkdir $(PROJECT_BUILD_PATH)\src
-	if not exist $(PROJECT_BUILD_PATH)\src\com mkdir $(PROJECT_BUILD_PATH)\src\com
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\lib mkdir $(PROJECT_BUILD_PATH)\lib
-	if not exist $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) mkdir $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\bin mkdir $(PROJECT_BUILD_PATH)\bin
-	if not exist $(PROJECT_BUILD_PATH)\res mkdir $(PROJECT_BUILD_PATH)\res
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-ldpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-ldpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-mdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-mdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-hdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-hdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\values mkdir $(PROJECT_BUILD_PATH)\res\values
-	if not exist $(PROJECT_BUILD_PATH)\assets mkdir $(PROJECT_BUILD_PATH)\assets
-	if not exist $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) mkdir $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH)
-	if not exist $(PROJECT_BUILD_PATH)\obj\screens mkdir $(PROJECT_BUILD_PATH)\obj\screens
-	$(foreach dir, $(PROJECT_SOURCE_DIRS), $(call create_dir, $(dir)))
-
-define create_dir
-    if not exist $(PROJECT_BUILD_PATH)\obj\$(1) mkdir $(PROJECT_BUILD_PATH)\obj\$(1)
-endef
-    
-# Copy required shared libs for integration into APK
-# NOTE: If using shared libs they are loaded by generated NativeLoader.java
-copy_project_required_libs:
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.so $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.so 
-endif
-ifeq ($(RAYLIB_LIBTYPE),STATIC)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.a $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.a 
-endif
-
-# Copy project required resources: strings.xml, icon.png, assets
-# NOTE: Required strings.xml is generated and game resources are copied to assets folder
-# TODO: Review xcopy usage, it can not be found in some systems!
-copy_project_resources:
-	copy $(APP_ICON_LDPI) $(PROJECT_BUILD_PATH)\res\drawable-ldpi\icon.png /Y
-	copy $(APP_ICON_MDPI) $(PROJECT_BUILD_PATH)\res\drawable-mdpi\icon.png /Y
-	copy $(APP_ICON_HDPI) $(PROJECT_BUILD_PATH)\res\drawable-hdpi\icon.png /Y
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	@echo ^<resources^>^<string name="app_name"^>$(APP_LABEL_NAME)^</string^>^</resources^> >> $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	if exist $(PROJECT_RESOURCES_PATH) C:\Windows\System32\xcopy $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) /Y /E /F
-
-# Generate NativeLoader.java to load required shared libraries
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_loader_script:
-	@echo package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME); > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo. >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo public class NativeLoader extends android.app.NativeActivity { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo     static { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	@echo         System.loadLibrary("raylib"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-endif
-	@echo         System.loadLibrary("$(PROJECT_LIBRARY_NAME)"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java 
-	@echo     } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-    
-# Generate AndroidManifest.xml with all the required options
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_android_manifest:
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^<manifest xmlns:android="http://schemas.android.com/apk/res/android" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         package="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)"  >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         android:versionCode="$(APP_VERSION_CODE)" android:versionName="$(APP_VERSION_NAME)" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-sdk android:minSdkVersion="$(ANDROID_API_VERSION)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-feature android:glEsVersion="0x00020000" android:required="true" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<application android:allowBackup="false" android:label="@string/app_name" android:icon="@drawable/icon" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^<activity android:name="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME).NativeLoader" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:configChanges="orientation|keyboardHidden|screenSize" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:screenOrientation="$(APP_SCREEN_ORIENTATION)" android:launchMode="singleTask" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:clearTaskOnLaunch="true"^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<meta-data android:name="android.app.lib_name" android:value="$(PROJECT_LIBRARY_NAME)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<action android:name="android.intent.action.MAIN" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<category android:name="android.intent.category.LAUNCHER" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^</intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^</activity^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^</application^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^</manifest^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-
-# Generate storekey for APK signing: $(PROJECT_NAME).keystore
-# NOTE: Configure here your Distinguished Names (-dname) if required!
-generate_apk_keystore: 
-	if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
-
-# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
-# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
-config_project_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(PROJECT_BUILD_PATH)/res -J $(PROJECT_BUILD_PATH)/src -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar
-
-# Compile native_app_glue code as static library: obj/libnative_app_glue.a
-compile_native_app_glue:
-	$(CC) -c $(RAYLIB_PATH)/src/external/android/native_app_glue/android_native_app_glue.c -o $(PROJECT_BUILD_PATH)/obj/native_app_glue.o $(CFLAGS)
-	$(AR) rcs $(PROJECT_BUILD_PATH)/obj/libnative_app_glue.a $(PROJECT_BUILD_PATH)/obj/native_app_glue.o
-
-# Compile project code into a shared library: lib/lib$(PROJECT_LIBRARY_NAME).so 
-compile_project_code: $(OBJS)
-	$(CC) -o $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(OBJS) -shared $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS)
-
-# Compile all .c files required into object (.o) files
-# NOTE: Those files will be linked into a shared library
-$(PROJECT_BUILD_PATH)/obj/%.o:%.c
-	$(CC) -c $^ -o $@ $(INCLUDE_PATHS) $(CFLAGS) --sysroot=$(ANDROID_TOOLCHAIN)/sysroot 
-    
-# Compile project .java code into .class (Java bytecode) 
-compile_project_class:
-	$(JAVA_HOME)/bin/javac -verbose -source 1.7 -target 1.7 -d $(PROJECT_BUILD_PATH)/obj -bootclasspath $(JAVA_HOME)/jre/lib/rt.jar -classpath $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar;$(PROJECT_BUILD_PATH)/obj -sourcepath $(PROJECT_BUILD_PATH)/src $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-
-# Compile .class files into Dalvik executable bytecode (.dex)
-# NOTE: Since Android 5.0, Dalvik interpreter (JIT) has been replaced by ART (AOT)
-compile_project_class_dex:
-	$(ANDROID_BUILD_TOOLS)/dx --verbose --dex --output=$(PROJECT_BUILD_PATH)/bin/classes.dex $(PROJECT_BUILD_PATH)/obj
-
-# Create Android APK package: bin/$(PROJECT_NAME).unsigned.apk
-# NOTE: Requires compiled classes.dex and lib$(PROJECT_LIBRARY_NAME).so
-# NOTE: Use -A resources to define additional directory in which to find raw asset files
-create_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -S $(PROJECT_BUILD_PATH)/res -A $(PROJECT_BUILD_PATH)/assets -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -F $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_BUILD_PATH)/bin
-	cd $(PROJECT_BUILD_PATH) && $(ANDROID_BUILD_TOOLS)/aapt add bin/$(PROJECT_NAME).unsigned.apk lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(PROJECT_SHARED_LIBS)
-
-# Create signed APK package using generated Key: bin/$(PROJECT_NAME).signed.apk 
-sign_project_apk_package:
-	$(JAVA_HOME)/bin/jarsigner -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -signedjar $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_NAME)Key
-
-# Create zip-aligned APK package: $(PROJECT_NAME).apk 
-zipalign_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_NAME).apk
-
-# Install $(PROJECT_NAME).apk to default emulator/device
-# NOTE: Use -e (emulator) or -d (device) parameters if required
-install:
-	$(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk
-    
-# Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64)
-check_device_abi:
-	$(ANDROID_PLATFORM_TOOLS)/adb shell getprop ro.product.cpu.abi
-
-# Monitorize output log coming from device, only raylib tag
-logcat:
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-    
-# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
-deploy:
-	$(ANDROID_PLATFORM_TOOLS)/adb install -r $(PROJECT_NAME).apk
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-
-#$(ANDROID_PLATFORM_TOOLS)/adb logcat *:W
-
-# Clean everything
-clean:
-	del $(PROJECT_BUILD_PATH)\* /f /s /q
-	rmdir $(PROJECT_BUILD_PATH) /s /q
-	@echo Cleaning done

+ 0 - 323
games/arkanoid.c

@@ -1,323 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib - sample game: arkanoid
-*
-*   Sample game Marc Palau and Ramon Santamaria
-*
-*   This game has been created using raylib v1.3 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <math.h>
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Some Defines
-//----------------------------------------------------------------------------------
-#define PLAYER_MAX_LIFE         5
-#define LINES_OF_BRICKS         5
-#define BRICKS_PER_LINE        20
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef enum GameScreen { LOGO, TITLE, GAMEPLAY, ENDING } GameScreen;
-
-typedef struct Player {
-    Vector2 position;
-    Vector2 size;
-    int life;
-} Player;
-
-typedef struct Ball {
-    Vector2 position;
-    Vector2 speed;
-    int radius;
-    bool active;
-} Ball;
-
-typedef struct Brick {
-    Vector2 position;
-    bool active;
-} Brick;
-
-//------------------------------------------------------------------------------------
-// Global Variables Declaration
-//------------------------------------------------------------------------------------
-static const int screenWidth = 800;
-static const int screenHeight = 450;
-
-static bool gameOver = false;
-static bool pause = false;
-
-static Player player = { 0 };
-static Ball ball = { 0 };
-static Brick brick[LINES_OF_BRICKS][BRICKS_PER_LINE] = { 0 };
-static Vector2 brickSize = { 0 };
-
-//------------------------------------------------------------------------------------
-// Module Functions Declaration (local)
-//------------------------------------------------------------------------------------
-static void InitGame(void);         // Initialize game
-static void UpdateGame(void);       // Update game (one frame)
-static void DrawGame(void);         // Draw game (one frame)
-static void UnloadGame(void);       // Unload game
-static void UpdateDrawFrame(void);  // Update and Draw (one frame)
-
-//------------------------------------------------------------------------------------
-// Program main entry point
-//------------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "sample game: arkanoid");
-
-    InitGame();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update and Draw
-        //----------------------------------------------------------------------------------
-        UpdateDrawFrame();
-        //----------------------------------------------------------------------------------
-    }
-#endif
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadGame();         // Unload loaded data (textures, sounds, models...)
-    
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//------------------------------------------------------------------------------------
-// Module Functions Definitions (local)
-//------------------------------------------------------------------------------------
-
-// Initialize game variables
-void InitGame(void)
-{
-    brickSize = (Vector2){ GetScreenWidth()/BRICKS_PER_LINE, 40 };
-
-    // Initialize player
-    player.position = (Vector2){ screenWidth/2, screenHeight*7/8 };
-    player.size = (Vector2){ screenWidth/10, 20 };
-    player.life = PLAYER_MAX_LIFE;
-    
-    // Initialize ball
-    ball.position = (Vector2){ screenWidth/2, screenHeight*7/8 - 30 };
-    ball.speed = (Vector2){ 0, 0 };
-    ball.radius = 7;
-    ball.active = false;
-    
-    // Initialize bricks
-    int initialDownPosition = 50;
-
-    for (int i = 0; i < LINES_OF_BRICKS; i++)
-    {
-        for (int j = 0; j < BRICKS_PER_LINE; j++)
-        {
-            brick[i][j].position = (Vector2){ j*brickSize.x + brickSize.x/2, i*brickSize.y + initialDownPosition };
-            brick[i][j].active = true;
-        }
-    }
-}
-
-// Update game (one frame)
-void UpdateGame(void)
-{
-    if (!gameOver)
-    {
-        if (IsKeyPressed('P')) pause = !pause;
-
-        if (!pause)
-        {
-            // Player movement logic
-            if (IsKeyDown(KEY_LEFT)) player.position.x -= 5;
-            if ((player.position.x - player.size.x/2) <= 0) player.position.x = player.size.x/2;
-            if (IsKeyDown(KEY_RIGHT)) player.position.x += 5;
-            if ((player.position.x + player.size.x/2) >= screenWidth) player.position.x = screenWidth - player.size.x/2;
-
-            // Ball launching logic
-            if (!ball.active)
-            {
-                if (IsKeyPressed(KEY_SPACE))
-                {
-                    ball.active = true;
-                    ball.speed = (Vector2){ 0, -5 };
-                }
-            }
-            
-            // Ball movement logic
-            if (ball.active)
-            {
-                ball.position.x += ball.speed.x;
-                ball.position.y += ball.speed.y;
-            }
-            else
-            {
-                ball.position = (Vector2){ player.position.x, screenHeight*7/8 - 30 };
-            }
-
-            // Collision logic: ball vs walls 
-            if (((ball.position.x + ball.radius) >= screenWidth) || ((ball.position.x - ball.radius) <= 0)) ball.speed.x *= -1;
-            if ((ball.position.y - ball.radius) <= 0) ball.speed.y *= -1;
-            if ((ball.position.y + ball.radius) >= screenHeight)
-            {
-                ball.speed = (Vector2){ 0, 0 };
-                ball.active = false;
-
-                player.life--;
-            }
-
-            // Collision logic: ball vs player
-            if (CheckCollisionCircleRec(ball.position, ball.radius,
-                (Rectangle){ player.position.x - player.size.x/2, player.position.y - player.size.y/2, player.size.x, player.size.y}))
-            {
-                if (ball.speed.y > 0)
-                {
-                    ball.speed.y *= -1;
-                    ball.speed.x = (ball.position.x - player.position.x)/(player.size.x/2)*5;
-                }
-            }
-
-            // Collision logic: ball vs bricks
-            for (int i = 0; i < LINES_OF_BRICKS; i++)
-            {
-                for (int j = 0; j < BRICKS_PER_LINE; j++)
-                {
-                    if (brick[i][j].active)
-                    {
-                        // Hit below
-                        if (((ball.position.y - ball.radius) <= (brick[i][j].position.y + brickSize.y/2)) &&
-                            ((ball.position.y - ball.radius) > (brick[i][j].position.y + brickSize.y/2 + ball.speed.y)) &&
-                            ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y < 0))
-                        {
-                            brick[i][j].active = false;
-                            ball.speed.y *= -1;
-                        }
-                        // Hit above
-                        else if (((ball.position.y + ball.radius) >= (brick[i][j].position.y - brickSize.y/2)) &&
-                                ((ball.position.y + ball.radius) < (brick[i][j].position.y - brickSize.y/2 + ball.speed.y)) &&
-                                ((fabs(ball.position.x - brick[i][j].position.x)) < (brickSize.x/2 + ball.radius*2/3)) && (ball.speed.y > 0))
-                        {
-                            brick[i][j].active = false;
-                            ball.speed.y *= -1;
-                        }
-                        // Hit left
-                        else if (((ball.position.x + ball.radius) >= (brick[i][j].position.x - brickSize.x/2)) &&
-                                ((ball.position.x + ball.radius) < (brick[i][j].position.x - brickSize.x/2 + ball.speed.x)) &&
-                                ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x > 0))
-                        {
-                            brick[i][j].active = false;
-                            ball.speed.x *= -1;
-                        }
-                        // Hit right
-                        else if (((ball.position.x - ball.radius) <= (brick[i][j].position.x + brickSize.x/2)) &&
-                                ((ball.position.x - ball.radius) > (brick[i][j].position.x + brickSize.x/2 + ball.speed.x)) &&
-                                ((fabs(ball.position.y - brick[i][j].position.y)) < (brickSize.y/2 + ball.radius*2/3)) && (ball.speed.x < 0))
-                        {
-                            brick[i][j].active = false;
-                            ball.speed.x *= -1;
-                        }
-                    }
-                }
-            }
-
-            // Game over logic
-            if (player.life <= 0) gameOver = true;
-            else
-            {
-                gameOver = true;
-                
-                for (int i = 0; i < LINES_OF_BRICKS; i++)
-                {
-                    for (int j = 0; j < BRICKS_PER_LINE; j++)
-                    {
-                        if (brick[i][j].active) gameOver = false;
-                    }
-                }
-            }
-        }
-    }
-    else
-    {
-        if (IsKeyPressed(KEY_ENTER))
-        {
-            InitGame();
-            gameOver = false;
-        }
-    }
-}
-
-// Draw game (one frame)
-void DrawGame(void)
-{
-    BeginDrawing();
-
-        ClearBackground(RAYWHITE);
-
-        if (!gameOver)
-        {
-            // Draw player bar
-            DrawRectangle(player.position.x - player.size.x/2, player.position.y - player.size.y/2, player.size.x, player.size.y, BLACK);
-
-            // Draw player lives
-            for (int i = 0; i < player.life; i++) DrawRectangle(20 + 40*i, screenHeight - 30, 35, 10, LIGHTGRAY);
-            
-            // Draw ball
-            DrawCircleV(ball.position, ball.radius, MAROON);
-            
-            // Draw bricks
-            for (int i = 0; i < LINES_OF_BRICKS; i++)
-            {
-                for (int j = 0; j < BRICKS_PER_LINE; j++)
-                {
-                    if (brick[i][j].active)
-                    {
-                        if ((i + j) % 2 == 0) DrawRectangle(brick[i][j].position.x - brickSize.x/2, brick[i][j].position.y - brickSize.y/2, brickSize.x, brickSize.y, GRAY);
-                        else DrawRectangle(brick[i][j].position.x - brickSize.x/2, brick[i][j].position.y - brickSize.y/2, brickSize.x, brickSize.y, DARKGRAY);
-                    }
-                }
-            }
-            
-            if (pause) DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, GRAY);
-        }
-        else DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
-
-    EndDrawing();
-}
-
-// Unload game variables
-void UnloadGame(void)
-{
-    // TODO: Unload all dynamic loaded data (textures, sounds, models...)
-}
-
-// Update and Draw (one frame)
-void UpdateDrawFrame(void)
-{
-    UpdateGame();
-    DrawGame();
-}

+ 0 - 565
games/asteroids.c

@@ -1,565 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib - sample game: asteroids
-*
-*   Sample game developed by Ian Eito, Albert Martos and Ramon Santamaria
-*
-*   This game has been created using raylib v1.3 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#include <math.h>
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Some Defines
-//----------------------------------------------------------------------------------
-#define PLAYER_BASE_SIZE    20.0f
-#define PLAYER_SPEED        6.0f
-#define PLAYER_MAX_SHOOTS   10
-
-#define METEORS_SPEED       2
-#define MAX_BIG_METEORS     4
-#define MAX_MEDIUM_METEORS  8
-#define MAX_SMALL_METEORS   16
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef struct Player {
-    Vector2 position;
-    Vector2 speed;
-    float acceleration;
-    float rotation;
-    Vector3 collider;
-    Color color;
-} Player;
-
-typedef struct Shoot {
-    Vector2 position;
-    Vector2 speed;
-    float radius;
-    float rotation;
-    int lifeSpawn;
-    bool active;
-    Color color;
-} Shoot;
-
-typedef struct Meteor {
-    Vector2 position;
-    Vector2 speed;
-    float radius;
-    bool active;
-    Color color;
-} Meteor;
-
-//------------------------------------------------------------------------------------
-// Global Variables Declaration
-//------------------------------------------------------------------------------------
-static const int screenWidth = 800;
-static const int screenHeight = 450;
-
-static bool gameOver = false;
-static bool pause = false;
-static bool victory = false;
-
-// NOTE: Defined triangle is isosceles with common angles of 70 degrees.
-static float shipHeight = 0.0f;
-
-static Player player = { 0 };
-static Shoot shoot[PLAYER_MAX_SHOOTS] = { 0 };
-static Meteor bigMeteor[MAX_BIG_METEORS] = { 0 };
-static Meteor mediumMeteor[MAX_MEDIUM_METEORS] = { 0 };
-static Meteor smallMeteor[MAX_SMALL_METEORS] = { 0 };
-
-static int midMeteorsCount = 0;
-static int smallMeteorsCount = 0;
-static int destroyedMeteorsCount = 0;
-
-//------------------------------------------------------------------------------------
-// Module Functions Declaration (local)
-//------------------------------------------------------------------------------------
-static void InitGame(void);         // Initialize game
-static void UpdateGame(void);       // Update game (one frame)
-static void DrawGame(void);         // Draw game (one frame)
-static void UnloadGame(void);       // Unload game
-static void UpdateDrawFrame(void);  // Update and Draw (one frame)
-
-//------------------------------------------------------------------------------------
-// Program main entry point
-//------------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "sample game: asteroids");
-
-    InitGame();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update and Draw
-        //----------------------------------------------------------------------------------
-        UpdateDrawFrame();
-        //----------------------------------------------------------------------------------
-    }
-#endif
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadGame();         // Unload loaded data (textures, sounds, models...)
-    
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//------------------------------------------------------------------------------------
-// Module Functions Definitions (local)
-//------------------------------------------------------------------------------------
-
-// Initialize game variables
-void InitGame(void)
-{
-    int posx, posy;
-    int velx, vely;
-    bool correctRange = false;
-    victory = false;
-    pause = false;
-
-    shipHeight = (PLAYER_BASE_SIZE/2)/tanf(20*DEG2RAD);
-
-    // Initialization player
-    player.position = (Vector2){screenWidth/2, screenHeight/2 - shipHeight/2};
-    player.speed = (Vector2){0, 0};
-    player.acceleration = 0;
-    player.rotation = 0;
-    player.collider = (Vector3){player.position.x + sin(player.rotation*DEG2RAD)*(shipHeight/2.5f), player.position.y - cos(player.rotation*DEG2RAD)*(shipHeight/2.5f), 12};
-    player.color = LIGHTGRAY;
-
-    destroyedMeteorsCount = 0;
-
-    // Initialization shoot
-    for (int i = 0; i < PLAYER_MAX_SHOOTS; i++)
-    {
-        shoot[i].position = (Vector2){0, 0};
-        shoot[i].speed = (Vector2){0, 0};
-        shoot[i].radius = 2;
-        shoot[i].active = false;
-        shoot[i].lifeSpawn = 0;
-        shoot[i].color = WHITE;
-    }
-
-    for (int i = 0; i < MAX_BIG_METEORS; i++)
-    {
-        posx = GetRandomValue(0, screenWidth);
-
-        while(!correctRange)
-        {
-            if (posx > screenWidth/2 - 150 && posx < screenWidth/2 + 150) posx = GetRandomValue(0, screenWidth);
-            else correctRange = true;
-        }
-
-        correctRange = false;
-
-        posy = GetRandomValue(0, screenHeight);
-
-        while(!correctRange)
-        {
-            if (posy > screenHeight/2 - 150 && posy < screenHeight/2 + 150)  posy = GetRandomValue(0, screenHeight);
-            else correctRange = true;
-        }
-
-        bigMeteor[i].position = (Vector2){posx, posy};
-
-        correctRange = false;
-        velx = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-        vely = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-
-        while(!correctRange)
-        {
-            if (velx == 0 && vely == 0)
-            {
-                velx = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-                vely = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-            }
-            else correctRange = true;
-        }
-
-        bigMeteor[i].speed = (Vector2){velx, vely};
-        bigMeteor[i].radius = 40;
-        bigMeteor[i].active = true;
-        bigMeteor[i].color = BLUE;
-    }
-
-    for (int i = 0; i < MAX_MEDIUM_METEORS; i++)
-    {
-        mediumMeteor[i].position = (Vector2){-100, -100};
-        mediumMeteor[i].speed = (Vector2){0,0};
-        mediumMeteor[i].radius = 20;
-        mediumMeteor[i].active = false;
-        mediumMeteor[i].color = BLUE;
-    }
-
-    for (int i = 0; i < MAX_SMALL_METEORS; i++)
-    {
-        smallMeteor[i].position = (Vector2){-100, -100};
-        smallMeteor[i].speed = (Vector2){0,0};
-        smallMeteor[i].radius = 10;
-        smallMeteor[i].active = false;
-        smallMeteor[i].color = BLUE;
-    }
-
-    midMeteorsCount = 0;
-    smallMeteorsCount = 0;
-}
-
-// Update game (one frame)
-void UpdateGame(void)
-{
-    if (!gameOver)
-    {
-        if (IsKeyPressed('P')) pause = !pause;
-
-        if (!pause)
-        {
-            // Player logic: rotation
-            if (IsKeyDown(KEY_LEFT)) player.rotation -= 5;
-            if (IsKeyDown(KEY_RIGHT)) player.rotation += 5;
-
-            // Player logic: speed
-            player.speed.x = sin(player.rotation*DEG2RAD)*PLAYER_SPEED;
-            player.speed.y = cos(player.rotation*DEG2RAD)*PLAYER_SPEED;
-
-            // Player logic: acceleration
-            if (IsKeyDown(KEY_UP))
-            {
-                if (player.acceleration < 1) player.acceleration += 0.04f;
-            }
-            else
-            {
-                if (player.acceleration > 0) player.acceleration -= 0.02f;
-                else if (player.acceleration < 0) player.acceleration = 0;
-            }
-            if (IsKeyDown(KEY_DOWN))
-            {
-                if (player.acceleration > 0) player.acceleration -= 0.04f;
-                else if (player.acceleration < 0) player.acceleration = 0;
-            }
-
-            // Player logic: movement
-            player.position.x += (player.speed.x*player.acceleration);
-            player.position.y -= (player.speed.y*player.acceleration);
-
-            // Collision logic: player vs walls
-            if (player.position.x > screenWidth + shipHeight) player.position.x = -(shipHeight);
-            else if (player.position.x < -(shipHeight)) player.position.x = screenWidth + shipHeight;
-            if (player.position.y > (screenHeight + shipHeight)) player.position.y = -(shipHeight);
-            else if (player.position.y < -(shipHeight)) player.position.y = screenHeight + shipHeight;
-
-            // Player shoot logic
-            if (IsKeyPressed(KEY_SPACE))
-            {
-                for (int i = 0; i < PLAYER_MAX_SHOOTS; i++)
-                {
-                    if (!shoot[i].active)
-                    {
-                        shoot[i].position = (Vector2){ player.position.x + sin(player.rotation*DEG2RAD)*(shipHeight), player.position.y - cos(player.rotation*DEG2RAD)*(shipHeight) };
-                        shoot[i].active = true;
-                        shoot[i].speed.x = 1.5*sin(player.rotation*DEG2RAD)*PLAYER_SPEED;
-                        shoot[i].speed.y = 1.5*cos(player.rotation*DEG2RAD)*PLAYER_SPEED;
-                        shoot[i].rotation = player.rotation;
-                        break;
-                    }
-                }
-            }
-
-            // Shoot life timer
-            for (int i = 0; i < PLAYER_MAX_SHOOTS; i++)
-            {
-                if (shoot[i].active) shoot[i].lifeSpawn++;
-            }
-
-            // Shot logic
-            for (int i = 0; i < PLAYER_MAX_SHOOTS; i++)
-            {
-                if (shoot[i].active)
-                {
-                    // Movement
-                    shoot[i].position.x += shoot[i].speed.x;
-                    shoot[i].position.y -= shoot[i].speed.y;
-
-                    // Collision logic: shoot vs walls
-                    if  (shoot[i].position.x > screenWidth + shoot[i].radius)
-                    {
-                        shoot[i].active = false;
-                        shoot[i].lifeSpawn = 0;
-                    }
-                    else if (shoot[i].position.x < 0 - shoot[i].radius)
-                    {
-                        shoot[i].active = false;
-                        shoot[i].lifeSpawn = 0;
-                    }
-                    if (shoot[i].position.y > screenHeight + shoot[i].radius)
-                    {
-                        shoot[i].active = false;
-                        shoot[i].lifeSpawn = 0;
-                    }
-                    else if (shoot[i].position.y < 0 - shoot[i].radius)
-                    {
-                        shoot[i].active = false;
-                        shoot[i].lifeSpawn = 0;
-                    }
-
-                    // Life of shoot
-                    if (shoot[i].lifeSpawn >= 60)
-                    {
-                        shoot[i].position = (Vector2){0, 0};
-                        shoot[i].speed = (Vector2){0, 0};
-                        shoot[i].lifeSpawn = 0;
-                        shoot[i].active = false;
-                    }
-                }
-            }
-
-            // Collision logic: player vs meteors
-            player.collider = (Vector3){player.position.x + sin(player.rotation*DEG2RAD)*(shipHeight/2.5f), player.position.y - cos(player.rotation*DEG2RAD)*(shipHeight/2.5f), 12};
-
-            for (int a = 0; a < MAX_BIG_METEORS; a++)
-            {
-                if (CheckCollisionCircles((Vector2){player.collider.x, player.collider.y}, player.collider.z, bigMeteor[a].position, bigMeteor[a].radius) && bigMeteor[a].active) gameOver = true;
-            }
-
-            for (int a = 0; a < MAX_MEDIUM_METEORS; a++)
-            {
-                if (CheckCollisionCircles((Vector2){player.collider.x, player.collider.y}, player.collider.z, mediumMeteor[a].position, mediumMeteor[a].radius) && mediumMeteor[a].active) gameOver = true;
-            }
-
-            for (int a = 0; a < MAX_SMALL_METEORS; a++)
-            {
-                if (CheckCollisionCircles((Vector2){player.collider.x, player.collider.y}, player.collider.z, smallMeteor[a].position, smallMeteor[a].radius) && smallMeteor[a].active) gameOver = true;
-            }
-
-            // Meteors logic: big meteors
-            for (int i = 0; i < MAX_BIG_METEORS; i++)
-            {
-                if (bigMeteor[i].active)
-                {
-                    // Movement
-                    bigMeteor[i].position.x += bigMeteor[i].speed.x;
-                    bigMeteor[i].position.y += bigMeteor[i].speed.y;
-
-                    // Collision logic: meteor vs wall
-                    if  (bigMeteor[i].position.x > screenWidth + bigMeteor[i].radius) bigMeteor[i].position.x = -(bigMeteor[i].radius);
-                    else if (bigMeteor[i].position.x < 0 - bigMeteor[i].radius) bigMeteor[i].position.x = screenWidth + bigMeteor[i].radius;
-                    if (bigMeteor[i].position.y > screenHeight + bigMeteor[i].radius) bigMeteor[i].position.y = -(bigMeteor[i].radius);
-                    else if (bigMeteor[i].position.y < 0 - bigMeteor[i].radius) bigMeteor[i].position.y = screenHeight + bigMeteor[i].radius;
-                }
-            }
-
-            // Meteors logic: medium meteors
-            for (int i = 0; i < MAX_MEDIUM_METEORS; i++)
-            {
-                if (mediumMeteor[i].active)
-                {
-                    // Movement
-                    mediumMeteor[i].position.x += mediumMeteor[i].speed.x;
-                    mediumMeteor[i].position.y += mediumMeteor[i].speed.y;
-
-                    // Collision logic: meteor vs wall
-                    if  (mediumMeteor[i].position.x > screenWidth + mediumMeteor[i].radius) mediumMeteor[i].position.x = -(mediumMeteor[i].radius);
-                    else if (mediumMeteor[i].position.x < 0 - mediumMeteor[i].radius) mediumMeteor[i].position.x = screenWidth + mediumMeteor[i].radius;
-                    if (mediumMeteor[i].position.y > screenHeight + mediumMeteor[i].radius) mediumMeteor[i].position.y = -(mediumMeteor[i].radius);
-                    else if (mediumMeteor[i].position.y < 0 - mediumMeteor[i].radius) mediumMeteor[i].position.y = screenHeight + mediumMeteor[i].radius;
-                }
-            }
-
-            // Meteors logic: small meteors
-            for (int i = 0; i < MAX_SMALL_METEORS; i++)
-            {
-                if (smallMeteor[i].active)
-                {
-                    // Movement
-                    smallMeteor[i].position.x += smallMeteor[i].speed.x;
-                    smallMeteor[i].position.y += smallMeteor[i].speed.y;
-
-                    // Collision logic: meteor vs wall
-                    if  (smallMeteor[i].position.x > screenWidth + smallMeteor[i].radius) smallMeteor[i].position.x = -(smallMeteor[i].radius);
-                    else if (smallMeteor[i].position.x < 0 - smallMeteor[i].radius) smallMeteor[i].position.x = screenWidth + smallMeteor[i].radius;
-                    if (smallMeteor[i].position.y > screenHeight + smallMeteor[i].radius) smallMeteor[i].position.y = -(smallMeteor[i].radius);
-                    else if (smallMeteor[i].position.y < 0 - smallMeteor[i].radius) smallMeteor[i].position.y = screenHeight + smallMeteor[i].radius;
-                }
-            }
-
-            // Collision logic: player-shoots vs meteors
-            for (int i = 0; i < PLAYER_MAX_SHOOTS; i++)
-            {
-                if ((shoot[i].active))
-                {
-                    for (int a = 0; a < MAX_BIG_METEORS; a++)
-                    {
-                        if (bigMeteor[a].active && CheckCollisionCircles(shoot[i].position, shoot[i].radius, bigMeteor[a].position, bigMeteor[a].radius))
-                        {
-                            shoot[i].active = false;
-                            shoot[i].lifeSpawn = 0;
-                            bigMeteor[a].active = false;
-                            destroyedMeteorsCount++;
-                            
-                            for (int j = 0; j < 2; j ++)
-                            {
-                                if (midMeteorsCount%2 == 0)
-                                {
-                                    mediumMeteor[midMeteorsCount].position = (Vector2){bigMeteor[a].position.x, bigMeteor[a].position.y};
-                                    mediumMeteor[midMeteorsCount].speed = (Vector2){cos(shoot[i].rotation*DEG2RAD)*METEORS_SPEED*-1, sin(shoot[i].rotation*DEG2RAD)*METEORS_SPEED*-1};
-                                }
-                                else
-                                {
-                                    mediumMeteor[midMeteorsCount].position = (Vector2){bigMeteor[a].position.x, bigMeteor[a].position.y};
-                                    mediumMeteor[midMeteorsCount].speed = (Vector2){cos(shoot[i].rotation*DEG2RAD)*METEORS_SPEED, sin(shoot[i].rotation*DEG2RAD)*METEORS_SPEED};
-                                }
-
-                                mediumMeteor[midMeteorsCount].active = true;
-                                midMeteorsCount ++;
-                            }
-                            //bigMeteor[a].position = (Vector2){-100, -100};
-                            bigMeteor[a].color = RED;
-                            a = MAX_BIG_METEORS;
-                        }
-                    }
-
-                    for (int b = 0; b < MAX_MEDIUM_METEORS; b++)
-                    {
-                        if (mediumMeteor[b].active && CheckCollisionCircles(shoot[i].position, shoot[i].radius, mediumMeteor[b].position, mediumMeteor[b].radius))
-                        {
-                            shoot[i].active = false;
-                            shoot[i].lifeSpawn = 0;
-                            mediumMeteor[b].active = false;
-                            destroyedMeteorsCount++;
-                            
-                            for (int j = 0; j < 2; j ++)
-                            {
-                                 if (smallMeteorsCount%2 == 0)
-                                {
-                                    smallMeteor[smallMeteorsCount].position = (Vector2){mediumMeteor[b].position.x, mediumMeteor[b].position.y};
-                                    smallMeteor[smallMeteorsCount].speed = (Vector2){cos(shoot[i].rotation*DEG2RAD)*METEORS_SPEED*-1, sin(shoot[i].rotation*DEG2RAD)*METEORS_SPEED*-1};
-                                }
-                                else
-                                {
-                                    smallMeteor[smallMeteorsCount].position = (Vector2){mediumMeteor[b].position.x, mediumMeteor[b].position.y};
-                                    smallMeteor[smallMeteorsCount].speed = (Vector2){cos(shoot[i].rotation*DEG2RAD)*METEORS_SPEED, sin(shoot[i].rotation*DEG2RAD)*METEORS_SPEED};
-                                }
-
-                                smallMeteor[smallMeteorsCount].active = true;
-                                smallMeteorsCount ++;
-                            }
-                            //mediumMeteor[b].position = (Vector2){-100, -100};
-                            mediumMeteor[b].color = GREEN;
-                            b = MAX_MEDIUM_METEORS;
-                        }
-                    }
-
-                    for (int c = 0; c < MAX_SMALL_METEORS; c++)
-                    {
-                        if (smallMeteor[c].active && CheckCollisionCircles(shoot[i].position, shoot[i].radius, smallMeteor[c].position, smallMeteor[c].radius))
-                        {
-                            shoot[i].active = false;
-                            shoot[i].lifeSpawn = 0;
-                            smallMeteor[c].active = false;
-                            destroyedMeteorsCount++;
-                            smallMeteor[c].color = YELLOW;
-                           // smallMeteor[c].position = (Vector2){-100, -100};
-                            c = MAX_SMALL_METEORS;
-                        }
-                    }
-                }
-            }
-        }
-
-        if (destroyedMeteorsCount == MAX_BIG_METEORS + MAX_MEDIUM_METEORS + MAX_SMALL_METEORS) victory = true;
-    }
-    else
-    {
-        if (IsKeyPressed(KEY_ENTER))
-        {
-            InitGame();
-            gameOver = false;
-        }
-    }
-}
-
-// Draw game (one frame)
-void DrawGame(void)
-{
-    BeginDrawing();
-
-        ClearBackground(RAYWHITE);
-
-        if (!gameOver)
-        {
-            // Draw spaceship
-            Vector2 v1 = { player.position.x + sinf(player.rotation*DEG2RAD)*(shipHeight), player.position.y - cosf(player.rotation*DEG2RAD)*(shipHeight) };
-            Vector2 v2 = { player.position.x - cosf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2), player.position.y - sinf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2) };
-            Vector2 v3 = { player.position.x + cosf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2), player.position.y + sinf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2) };
-            DrawTriangle(v1, v2, v3, MAROON);
-            
-            // Draw meteors
-            for (int i = 0; i < MAX_BIG_METEORS; i++)
-            {
-                if (bigMeteor[i].active) DrawCircleV(bigMeteor[i].position, bigMeteor[i].radius, DARKGRAY);
-                else DrawCircleV(bigMeteor[i].position, bigMeteor[i].radius, Fade(LIGHTGRAY, 0.3f));
-            }
-
-            for (int i = 0; i < MAX_MEDIUM_METEORS; i++)
-            {
-                if (mediumMeteor[i].active) DrawCircleV(mediumMeteor[i].position, mediumMeteor[i].radius, GRAY);
-                else DrawCircleV(mediumMeteor[i].position, mediumMeteor[i].radius, Fade(LIGHTGRAY, 0.3f));
-            }
-
-            for (int i = 0; i < MAX_SMALL_METEORS; i++)
-            {
-                if (smallMeteor[i].active) DrawCircleV(smallMeteor[i].position, smallMeteor[i].radius, GRAY);
-                else DrawCircleV(smallMeteor[i].position, smallMeteor[i].radius, Fade(LIGHTGRAY, 0.3f));
-            }
-
-            // Draw shoot
-            for (int i = 0; i < PLAYER_MAX_SHOOTS; i++)
-            {
-                if (shoot[i].active) DrawCircleV(shoot[i].position, shoot[i].radius, BLACK);
-            }
-
-            if (victory) DrawText("VICTORY", screenWidth/2 - MeasureText("VICTORY", 20)/2, screenHeight/2, 20, LIGHTGRAY);
-
-            if (pause) DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, GRAY);
-        }
-        else DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
-        
-    EndDrawing();
-}
-
-// Unload game variables
-void UnloadGame(void)
-{
-    // TODO: Unload all dynamic loaded data (textures, sounds, models...)
-}
-
-// Update and Draw (one frame)
-void UpdateDrawFrame(void)
-{
-    UpdateGame();
-    DrawGame();
-}

+ 0 - 375
games/asteroids_survival.c

@@ -1,375 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib - sample game: asteroids survival
-*
-*   Sample game developed by Ian Eito, Albert Martos and Ramon Santamaria
-*
-*   This game has been created using raylib v1.3 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#include <math.h>
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Some Defines
-//----------------------------------------------------------------------------------
-#define PLAYER_BASE_SIZE    20.0f
-#define PLAYER_SPEED        6.0f
-#define PLAYER_MAX_SHOOTS   10
-
-#define METEORS_SPEED       2
-#define MAX_MEDIUM_METEORS  8
-#define MAX_SMALL_METEORS   16
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef struct Player {
-    Vector2 position;
-    Vector2 speed;
-    float acceleration;
-    float rotation;
-    Vector3 collider;
-    Color color;
-} Player;
-
-typedef struct Meteor {
-    Vector2 position;
-    Vector2 speed;
-    float radius;
-    bool active;
-    Color color;
-} Meteor;
-
-//------------------------------------------------------------------------------------
-// Global Variables Declaration
-//------------------------------------------------------------------------------------
-static const int screenWidth = 800;
-static const int screenHeight = 450;
-
-static int framesCounter = 0;
-static bool gameOver = false;
-static bool pause = false;
-
-// NOTE: Defined triangle is isosceles with common angles of 70 degrees.
-static float shipHeight = 0.0f;
-
-static Player player = { 0 };
-static Meteor mediumMeteor[MAX_MEDIUM_METEORS] = { 0 };
-static Meteor smallMeteor[MAX_SMALL_METEORS] = { 0 };
-
-//------------------------------------------------------------------------------------
-// Module Functions Declaration (local)
-//------------------------------------------------------------------------------------
-static void InitGame(void);         // Initialize game
-static void UpdateGame(void);       // Update game (one frame)
-static void DrawGame(void);         // Draw game (one frame)
-static void UnloadGame(void);       // Unload game
-static void UpdateDrawFrame(void);  // Update and Draw (one frame)
-
-//------------------------------------------------------------------------------------
-// Program main entry point
-//------------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "sample game: asteroids survival");
-
-    InitGame();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update and Draw
-        //----------------------------------------------------------------------------------
-        UpdateDrawFrame();
-        //----------------------------------------------------------------------------------
-    }
-#endif
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadGame();         // Unload loaded data (textures, sounds, models...)
-    
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//------------------------------------------------------------------------------------
-// Module Functions Definitions (local)
-//------------------------------------------------------------------------------------
-
-// Initialize game variables
-void InitGame(void)
-{
-    int posx, posy;
-    int velx, vely;
-    bool correctRange = false;
-
-    pause = false;
-
-    framesCounter = 0;
-
-    shipHeight = (PLAYER_BASE_SIZE/2)/tanf(20*DEG2RAD);
-
-    // Initialization player
-    player.position = (Vector2){screenWidth/2, screenHeight/2 - shipHeight/2};
-    player.speed = (Vector2){0, 0};
-    player.acceleration = 0;
-    player.rotation = 0;
-    player.collider = (Vector3){player.position.x + sin(player.rotation*DEG2RAD)*(shipHeight/2.5f), player.position.y - cos(player.rotation*DEG2RAD)*(shipHeight/2.5f), 12};
-    player.color = LIGHTGRAY;
-
-    for (int i = 0; i < MAX_MEDIUM_METEORS; i++)
-    {
-        posx = GetRandomValue(0, screenWidth);
-
-        while(!correctRange)
-        {
-            if (posx > screenWidth/2 - 150 && posx < screenWidth/2 + 150) posx = GetRandomValue(0, screenWidth);
-            else correctRange = true;
-        }
-
-        correctRange = false;
-
-        posy = GetRandomValue(0, screenHeight);
-
-        while(!correctRange)
-        {
-            if (posy > screenHeight/2 - 150 && posy < screenHeight/2 + 150)  posy = GetRandomValue(0, screenHeight);
-            else correctRange = true;
-        }
-
-        correctRange = false;
-        velx = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-        vely = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-
-        while(!correctRange)
-        {
-            if (velx == 0 && vely == 0)
-            {
-                velx = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-                vely = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-            }
-            else correctRange = true;
-        }
-        mediumMeteor[i].position = (Vector2){posx, posy};
-        mediumMeteor[i].speed = (Vector2){velx, vely};
-        mediumMeteor[i].radius = 20;
-        mediumMeteor[i].active = true;
-        mediumMeteor[i].color = GREEN;
-    }
-
-    for (int i = 0; i < MAX_SMALL_METEORS; i++)
-    {
-        posx = GetRandomValue(0, screenWidth);
-
-        while(!correctRange)
-        {
-            if (posx > screenWidth/2 - 150 && posx < screenWidth/2 + 150) posx = GetRandomValue(0, screenWidth);
-            else correctRange = true;
-        }
-
-        correctRange = false;
-
-        posy = GetRandomValue(0, screenHeight);
-
-        while(!correctRange)
-        {
-            if (posy > screenHeight/2 - 150 && posy < screenHeight/2 + 150)  posy = GetRandomValue(0, screenHeight);
-            else correctRange = true;
-        }
-
-        correctRange = false;
-        velx = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-        vely = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-
-        while(!correctRange)
-        {
-            if (velx == 0 && vely == 0)
-            {
-                velx = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-                vely = GetRandomValue(-METEORS_SPEED, METEORS_SPEED);
-            }
-            else correctRange = true;
-        }
-        smallMeteor[i].position = (Vector2){posx, posy};
-        smallMeteor[i].speed = (Vector2){velx, vely};
-        smallMeteor[i].radius = 10;
-        smallMeteor[i].active = true;
-        smallMeteor[i].color = YELLOW;
-    }
-}
-
-// Update game (one frame)
-void UpdateGame(void)
-{
-    if (!gameOver)
-    {
-        if (IsKeyPressed('P')) pause = !pause;
-
-        if (!pause)
-        {
-            framesCounter++;
-
-            // Player logic
-
-            // Rotation
-            if (IsKeyDown(KEY_LEFT)) player.rotation -= 5;
-            if (IsKeyDown(KEY_RIGHT)) player.rotation += 5;
-
-            // Speed
-            player.speed.x = sin(player.rotation*DEG2RAD)*PLAYER_SPEED;
-            player.speed.y = cos(player.rotation*DEG2RAD)*PLAYER_SPEED;
-
-            // Controller
-            if (IsKeyDown(KEY_UP))
-            {
-                if (player.acceleration < 1) player.acceleration += 0.04f;
-            }
-            else
-            {
-                if (player.acceleration > 0) player.acceleration -= 0.02f;
-                else if (player.acceleration < 0) player.acceleration = 0;
-            }
-            if (IsKeyDown(KEY_DOWN))
-            {
-                if (player.acceleration > 0) player.acceleration -= 0.04f;
-                else if (player.acceleration < 0) player.acceleration = 0;
-            }
-
-            // Movement
-            player.position.x += (player.speed.x*player.acceleration);
-            player.position.y -= (player.speed.y*player.acceleration);
-
-            // Wall behaviour for player
-            if (player.position.x > screenWidth + shipHeight) player.position.x = -(shipHeight);
-            else if (player.position.x < -(shipHeight)) player.position.x = screenWidth + shipHeight;
-            if (player.position.y > (screenHeight + shipHeight)) player.position.y = -(shipHeight);
-            else if (player.position.y < -(shipHeight)) player.position.y = screenHeight + shipHeight;
-
-            // Collision Player to meteors
-            player.collider = (Vector3){player.position.x + sin(player.rotation*DEG2RAD)*(shipHeight/2.5f), player.position.y - cos(player.rotation*DEG2RAD)*(shipHeight/2.5f), 12};
-
-            for (int a = 0; a < MAX_MEDIUM_METEORS; a++)
-            {
-                if (CheckCollisionCircles((Vector2){player.collider.x, player.collider.y}, player.collider.z, mediumMeteor[a].position, mediumMeteor[a].radius) && mediumMeteor[a].active) gameOver = true;
-            }
-
-            for (int a = 0; a < MAX_SMALL_METEORS; a++)
-            {
-                if (CheckCollisionCircles((Vector2){player.collider.x, player.collider.y}, player.collider.z, smallMeteor[a].position, smallMeteor[a].radius) && smallMeteor[a].active) gameOver = true;
-            }
-
-            // Meteor logic
-
-            for (int i = 0; i < MAX_MEDIUM_METEORS; i++)
-            {
-                if (mediumMeteor[i].active)
-                {
-                    // movement
-                    mediumMeteor[i].position.x += mediumMeteor[i].speed.x;
-                    mediumMeteor[i].position.y += mediumMeteor[i].speed.y;
-
-                    // wall behaviour
-                    if  (mediumMeteor[i].position.x > screenWidth + mediumMeteor[i].radius) mediumMeteor[i].position.x = -(mediumMeteor[i].radius);
-                    else if (mediumMeteor[i].position.x < 0 - mediumMeteor[i].radius) mediumMeteor[i].position.x = screenWidth + mediumMeteor[i].radius;
-                    if (mediumMeteor[i].position.y > screenHeight + mediumMeteor[i].radius) mediumMeteor[i].position.y = -(mediumMeteor[i].radius);
-                    else if (mediumMeteor[i].position.y < 0 - mediumMeteor[i].radius) mediumMeteor[i].position.y = screenHeight + mediumMeteor[i].radius;
-                }
-            }
-
-            for (int i = 0; i < MAX_SMALL_METEORS; i++)
-            {
-                if (smallMeteor[i].active)
-                {
-                    // movement
-                    smallMeteor[i].position.x += smallMeteor[i].speed.x;
-                    smallMeteor[i].position.y += smallMeteor[i].speed.y;
-
-                    // wall behaviour
-                    if  (smallMeteor[i].position.x > screenWidth + smallMeteor[i].radius) smallMeteor[i].position.x = -(smallMeteor[i].radius);
-                    else if (smallMeteor[i].position.x < 0 - smallMeteor[i].radius) smallMeteor[i].position.x = screenWidth + smallMeteor[i].radius;
-                    if (smallMeteor[i].position.y > screenHeight + smallMeteor[i].radius) smallMeteor[i].position.y = -(smallMeteor[i].radius);
-                    else if (smallMeteor[i].position.y < 0 - smallMeteor[i].radius) smallMeteor[i].position.y = screenHeight + smallMeteor[i].radius;
-                }
-            }
-        }
-    }
-    else
-    {
-        if (IsKeyPressed(KEY_ENTER))
-        {
-            InitGame();
-            gameOver = false;
-        }
-    }
-}
-
-// Draw game (one frame)
-void DrawGame(void)
-{
-    BeginDrawing();
-
-        ClearBackground(RAYWHITE);
-        
-        if (!gameOver)
-        {
-            // Draw spaceship
-            Vector2 v1 = { player.position.x + sinf(player.rotation*DEG2RAD)*(shipHeight), player.position.y - cosf(player.rotation*DEG2RAD)*(shipHeight) };
-            Vector2 v2 = { player.position.x - cosf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2), player.position.y - sinf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2) };
-            Vector2 v3 = { player.position.x + cosf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2), player.position.y + sinf(player.rotation*DEG2RAD)*(PLAYER_BASE_SIZE/2) };
-            DrawTriangle(v1, v2, v3, MAROON);
-
-            // Draw meteor
-            for (int i = 0;i < MAX_MEDIUM_METEORS; i++)
-            {
-                if (mediumMeteor[i].active) DrawCircleV(mediumMeteor[i].position, mediumMeteor[i].radius, GRAY);
-                else DrawCircleV(mediumMeteor[i].position, mediumMeteor[i].radius, Fade(LIGHTGRAY, 0.3f));
-            }
-
-            for (int i = 0;i < MAX_SMALL_METEORS; i++)
-            {
-                if (smallMeteor[i].active) DrawCircleV(smallMeteor[i].position, smallMeteor[i].radius, DARKGRAY);
-                else DrawCircleV(smallMeteor[i].position, smallMeteor[i].radius, Fade(LIGHTGRAY, 0.3f));
-            }
-
-            DrawText(TextFormat("TIME: %.02f", (float)framesCounter/60), 10, 10, 20, BLACK);
-
-            if (pause) DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, GRAY);
-        }
-        else DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
-
-    EndDrawing();
-    //----------------------------------------------------------------------------------
-}
-
-// Unload game variables
-void UnloadGame(void)
-{
-    // TODO: Unload all dynamic loaded data (textures, sounds, models...)
-}
-
-// Update and Draw (one frame)
-void UpdateDrawFrame(void)
-{
-    UpdateGame();
-    DrawGame();
-}

+ 0 - 20
games/cat_vs_roomba/LICENSE.txt

@@ -1,20 +0,0 @@
-
-This game sources are licensed under an unmodified zlib/libpng license, 
-which is an OSI-certified, BSD-like license:
-	
-Copyright (c) 2013-2019 Ramon Santamaria (@raysan5)
-
-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.

+ 0 - 406
games/cat_vs_roomba/Makefile

@@ -1,406 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
-#
-#   Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
-#
-#   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.
-#
-#**************************************************************************************************
-
-.PHONY: all clean
-
-# Define required raylib variables
-PROJECT_NAME       ?= roomba
-RAYLIB_VERSION     ?= 3.0.0
-RAYLIB_API_VERSION ?= 3
-RAYLIB_PATH        ?= C:\GitHub\raylib
-
-# Define default options
-
-# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
-PLATFORM           ?= PLATFORM_DESKTOP
-
-# Locations of your newly installed library and associated headers. See ../src/Makefile
-# On Linux, if you have installed raylib but cannot compile the examples, check that
-# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
-# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
-# To enable compile-time linking to a special version of libraylib.so, change these variables here.
-# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
-# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
-# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
-# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
-DESTDIR ?= /usr/local
-RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
-# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
-RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE        ?= STATIC
-
-# Build mode for project: DEBUG or RELEASE
-BUILD_MODE            ?= RELEASE
-
-# Use external GLFW library instead of rglfw module
-# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
-USE_EXTERNAL_GLFW     ?= FALSE
-
-# Use Wayland display server protocol on Linux desktop
-# by default it uses X11 windowing system
-USE_WAYLAND_DISPLAY   ?= FALSE
-
-# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    # No uname.exe on MinGW!, but OS=Windows_NT on Windows!
-    # ifeq ($(UNAME),Msys) -> Windows
-    ifeq ($(OS),Windows_NT)
-        PLATFORM_OS=WINDOWS
-    else
-        UNAMEOS=$(shell uname)
-        ifeq ($(UNAMEOS),Linux)
-            PLATFORM_OS=LINUX
-        endif
-        ifeq ($(UNAMEOS),FreeBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),OpenBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),NetBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),DragonFly)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),Darwin)
-            PLATFORM_OS=OSX
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    UNAMEOS=$(shell uname)
-    ifeq ($(UNAMEOS),Linux)
-        PLATFORM_OS=LINUX
-    endif
-endif
-
-# RAYLIB_PATH adjustment for different platforms.
-# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
-# Required for ldconfig or other tools that do not perform path expansion.
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        RAYLIB_PREFIX ?= ..
-        RAYLIB_PATH    = $(realpath $(RAYLIB_PREFIX))
-    endif
-endif
-# Default path for raylib on Raspberry Pi, if installed in different path, update it!
-# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
-# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    RAYLIB_PATH       ?= /home/pi/raylib
-endif
-
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Emscripten required variables
-    EMSDK_PATH         ?= C:/emsdk
-    EMSCRIPTEN_PATH    ?= $(EMSDK_PATH)/fastcomp/emscripten
-    CLANG_PATH          = $(EMSDK_PATH)/fastcomp/bin
-    PYTHON_PATH         = $(EMSDK_PATH)/python/2.7.13.1_64bit/python-2.7.13.amd64
-    NODE_PATH           = $(EMSDK_PATH)/node/12.9.1_64bit/bin
-    export PATH         = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
-endif
-
-# Define raylib release directory for compiled library.
-# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version
-RAYLIB_RELEASE_PATH 	?= $(RAYLIB_PATH)/src
-
-# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
-# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
-# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
-# without formal installation from ../src/Makefile. It aids portability and is useful if you have
-# multiple versions of raylib, have raylib installed to a non-standard location, or want to
-# bundle libraylib.so with your game. Change it to your liking.
-# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
-# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
-# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
-# To see which libraries a built example is linking to, ldd core/core_basic_window;
-# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
-EXAMPLE_RUNTIME_PATH   ?= $(RAYLIB_RELEASE_PATH)
-
-# Define default C compiler: gcc
-# NOTE: define g++ compiler if using C++
-CC = gcc
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),OSX)
-        # OSX default compiler
-        CC = clang
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
-        CC = clang
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
-        # Define RPI cross-compiler
-        #CC = armv6j-hardfloat-linux-gnueabi-gcc
-        CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # HTML5 emscripten compiler
-    # WARNING: To compile to HTML5, code must be redesigned
-    # to use emscripten.h and emscripten_set_main_loop()
-    CC = emcc
-endif
-
-# Define default make program: Mingw32-make
-MAKE = mingw32-make
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        MAKE = make
-    endif
-endif
-
-# Define compiler flags:
-#  -O1                  defines optimization level
-#  -g                   include debug information on compilation
-#  -s                   strip unnecessary data from build
-#  -Wall                turns on most, but not all, compiler warnings
-#  -std=c99             defines C language mode (standard C from 1999 revision)
-#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
-#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
-#  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
-CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
-
-ifeq ($(BUILD_MODE),DEBUG)
-    CFLAGS += -g
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -s ASSERTIONS=1 --profiling
-    endif
-else
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -Os
-    else
-        CFLAGS += -s -O1
-    endif
-endif
-
-# Additional flags for compiler (if desired)
-#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        ifeq ($(RAYLIB_LIBTYPE),STATIC)
-            CFLAGS += -D_DEFAULT_SOURCE
-        endif
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            # Explicitly enable runtime link to libraylib.so
-            CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    CFLAGS += -std=gnu99
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # -Os                        # size optimization
-    # -O2                        # optimization level 2, if used, also set --memory-init-file 0
-    # -s USE_GLFW=3              # Use glfw3 library (context/input management)
-    # -s ALLOW_MEMORY_GROWTH=1   # to allow memory resizing -> WARNING: Audio buffers could FAIL!
-    # -s TOTAL_MEMORY=16777216   # to specify heap memory size (default = 16MB)
-    # -s USE_PTHREADS=1          # multithreading support
-    # -s WASM=0                  # disable Web Assembly, emitted by default
-    # -s EMTERPRETIFY=1          # enable emscripten code interpreter (very slow)
-    # -s EMTERPRETIFY_ASYNC=1    # support synchronous loops by emterpreter
-    # -s FORCE_FILESYSTEM=1      # force filesystem to load/save files data
-    # -s ASSERTIONS=1            # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
-    # --profiling                # include information for code profiling
-    # --memory-init-file 0       # to avoid an external memory initialization code file (.mem)
-    # --preload-file resources   # specify a resources folder for data compilation
-    CFLAGS += -s USE_GLFW=3 -s TOTAL_MEMORY=16777216 --preload-file resources
-
-    # Define a custom shell .html and output extension
-    CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
-    EXT = .html
-endif
-
-# Define include paths for required headers
-# NOTE: Several external required libraries (stb and others)
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
-
-# Define additional directories containing required header files
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # RPI required libraries
-    INCLUDE_PATHS += -I/opt/vc/include
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
-endif
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_H_INSTALL_PATH)
-        INCLUDE_PATHS += -I/usr/local/include
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
-        INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
-    endif
-endif
-
-# Define library paths containing required libs.
-LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # resource file contains windows executable icon and properties
-        LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data 
-        # -Wl,--subsystem,windows hides the console window
-        ifeq ($(BUILD_MODE), RELEASE)
-            LDFLAGS += -Wl,--subsystem,windows
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_INSTALL_PATH)
-        LDFLAGS += -L. -Lsrc -L/usr/local/lib
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs
-        LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
-    endif
-endif
-
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    LDFLAGS += -L/opt/vc/lib
-endif
-
-# Define any libraries required on linking
-# if you want to link libraries (libname.so or libname.a), use the -lname
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # Libraries for Windows desktop compilation
-        # NOTE: WinMM library required to set high-res timer resolution
-        LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
-        # Required for physac examples
-        LDLIBS += -static -lpthread
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Libraries for Debian GNU/Linux desktop compiling
-        # NOTE: Required packages: libegl1-mesa-dev
-        LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
-
-        # On X11 requires also below libraries
-        LDLIBS += -lX11
-        # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
-        #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-
-        # On Wayland windowing system, additional libraries requires
-        ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
-            LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
-        endif
-        # Explicit link to libc
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            LDLIBS += -lc
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-        # Libraries for OSX 10.9 desktop compiling
-        # NOTE: Required packages: libopenal-dev libegl1-mesa-dev
-        LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo 
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
-        # NOTE: Required packages: mesa-libs
-        LDLIBS = -lraylib -lGL -lpthread -lm
-
-        # On XWindow requires also below libraries
-        LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-    endif
-    ifeq ($(USE_EXTERNAL_GLFW),TRUE)
-        # NOTE: It could require additional packages installed: libglfw3-dev
-        LDLIBS += -lglfw
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # Libraries for Raspberry Pi compiling
-    # NOTE: Required packages: libasound2-dev (ALSA)
-    LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Libraries for web (HTML5) compiling
-    LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
-endif
-
-# Define all source files required
-PROJECT_SOURCE_FILES ?= \
-    roomba.c \
-    screens/screen_logo.c \
-    screens/screen_title.c \
-    screens/screen_gameplay.c \
-    screens/screen_ending.c
-
-# Define all object files from source files
-OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES))
-
-# For Android platform we call a custom Makefile.Android
-ifeq ($(PLATFORM),PLATFORM_ANDROID)
-    MAKEFILE_PARAMS = -f Makefile.Android 
-    export PROJECT_NAME
-    export PROJECT_SOURCE_FILES
-else
-    MAKEFILE_PARAMS = $(PROJECT_NAME)
-endif
-
-# Default target entry
-# NOTE: We call this Makefile target or Makefile.Android target
-all:
-	$(MAKE) $(MAKEFILE_PARAMS)
-
-# Project target defined by PROJECT_NAME
-$(PROJECT_NAME): $(OBJS)
-	$(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
-
-# Compile source files
-# NOTE: This pattern will compile every module defined on $(OBJS)
-%.o: %.c
-	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)
-
-# Clean everything
-clean:
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-		del *.o *.exe /s
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-	find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable|x-pie-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-		find . -type f -perm +ugo+x -delete
-		rm -f *.o
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-	find . -type f -executable -delete
-	rm -fv *.o
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-	del *.o *.html *.js
-endif
-	@echo Cleaning done
-

+ 0 - 300
games/cat_vs_roomba/Makefile.Android

@@ -1,300 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Android project (APK building)
-#
-#   Copyright (c) 2017 Ramon Santamaria (@raysan5)
-#
-#   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 required raylib variables
-PLATFORM               ?= PLATFORM_ANDROID
-RAYLIB_PATH            ?= ..\..
-
-# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
-ANDROID_ARCH           ?= ARM
-ANDROID_API_VERSION     = 21
-ifeq ($(ANDROID_ARCH),ARM)
-    ANDROID_ARCH_NAME   = armeabi-v7a
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    ANDROID_ARCH_NAME   = arm64-v8a
-endif
-
-# Required path variables
-# NOTE: JAVA_HOME must be set to JDK
-JAVA_HOME              ?= C:/JavaJDK
-ANDROID_HOME            = C:/android-sdk
-ANDROID_TOOLCHAIN       = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION)
-ANDROID_BUILD_TOOLS     = $(ANDROID_HOME)/build-tools/28.0.1
-ANDROID_PLATFORM_TOOLS  = $(ANDROID_HOME)/platform-tools
-
-# Android project configuration variables
-PROJECT_NAME           ?= raylib_game
-PROJECT_LIBRARY_NAME   ?= main
-PROJECT_BUILD_PATH     ?= android.$(PROJECT_NAME)
-PROJECT_RESOURCES_PATH ?= resources
-PROJECT_SOURCE_FILES   ?= raylib_game.c
-
-# Some source files are placed in directories, when compiling to some 
-# output directory other than source, that directory must pre-exist.
-# Here we get a list of required folders that need to be created on
-# code output folder $(PROJECT_BUILD_PATH)\obj to avoid GCC errors.
-PROJECT_SOURCE_DIRS = $(sort $(dir $(PROJECT_SOURCE_FILES)))
-
-# Android app configuration variables
-APP_LABEL_NAME ?= rGame
-APP_COMPANY_NAME ?= raylib
-APP_PRODUCT_NAME ?= rgame
-APP_VERSION_CODE ?= 1
-APP_VERSION_NAME ?= 1.0
-APP_ICON_LDPI ?= $(RAYLIB_PATH)\logo\raylib_36x36.png
-APP_ICON_MDPI ?= $(RAYLIB_PATH)\logo\raylib_48x48.png
-APP_ICON_HDPI ?= $(RAYLIB_PATH)\logo\raylib_72x72.png
-APP_SCREEN_ORIENTATION ?= landscape
-APP_KEYSTORE_PASS ?= raylib
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE ?= STATIC
-
-# Library path for libraylib.a/libraylib.so
-RAYLIB_LIB_PATH = $(RAYLIB_PATH)\src
-
-# Shared libs must be added to APK if required
-# NOTE: Generated NativeLoader.java automatically load those libraries
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-    PROJECT_SHARED_LIBS = lib/$(ANDROID_ARCH_NAME)/libraylib.so 
-endif
-
-# Compiler and archiver
-# NOTE: GCC is being deprecated in Android NDK r16
-ifeq ($(ANDROID_ARCH),ARM)
-    CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
-endif
-
-# Compiler flags for arquitecture
-ifeq ($(ANDROID_ARCH),ARM)
-    CFLAGS = -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CFLAGS = -std=c99 -target aarch64 -mfix-cortex-a53-835769
-endif
-# Compilation functions attributes options
-CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC
-# Compiler options for the linker
-CFLAGS += -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes
-# Preprocessor macro definitions
-CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=$(ANDROID_API_VERSION)
-
-# Paths containing required header files
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external/android/native_app_glue
-
-# Linker options
-LDFLAGS = -Wl,-soname,lib$(PROJECT_LIBRARY_NAME).so -Wl,--exclude-libs,libatomic.a 
-LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings 
-# Force linking of library module to define symbol
-LDFLAGS += -u ANativeActivity_onCreate
-# Library paths containing required libs
-LDFLAGS += -L. -L$(PROJECT_BUILD_PATH)/obj -L$(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME) -L$(ANDROID_TOOLCHAIN)\sysroot\usr\lib
-
-# Define any libraries to link into executable
-# if you want to link libraries (libname.so or libname.a), use the -lname
-LDLIBS = -lm -lc -lraylib -llog -landroid -lEGL -lGLESv2 -lOpenSLES -ldl
-
-# Generate target objects list from PROJECT_SOURCE_FILES
-OBJS = $(patsubst %.c, $(PROJECT_BUILD_PATH)/obj/%.o, $(PROJECT_SOURCE_FILES))
-
-# Android APK building process... some steps required...
-# NOTE: typing 'make' will invoke the default target entry called 'all',
-all: create_temp_project_dirs \
-     copy_project_required_libs \
-     copy_project_resources \
-     generate_loader_script \
-     generate_android_manifest \
-     generate_apk_keystore \
-     config_project_package \
-     compile_project_code \
-     compile_project_class \
-     compile_project_class_dex \
-     create_project_apk_package \
-     sign_project_apk_package \
-     zipalign_project_apk_package
-
-# Create required temp directories for APK building
-create_temp_project_dirs:
-	if not exist $(PROJECT_BUILD_PATH) mkdir $(PROJECT_BUILD_PATH) 
-	if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj
-	if not exist $(PROJECT_BUILD_PATH)\src mkdir $(PROJECT_BUILD_PATH)\src
-	if not exist $(PROJECT_BUILD_PATH)\src\com mkdir $(PROJECT_BUILD_PATH)\src\com
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\lib mkdir $(PROJECT_BUILD_PATH)\lib
-	if not exist $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) mkdir $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\bin mkdir $(PROJECT_BUILD_PATH)\bin
-	if not exist $(PROJECT_BUILD_PATH)\res mkdir $(PROJECT_BUILD_PATH)\res
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-ldpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-ldpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-mdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-mdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-hdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-hdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\values mkdir $(PROJECT_BUILD_PATH)\res\values
-	if not exist $(PROJECT_BUILD_PATH)\assets mkdir $(PROJECT_BUILD_PATH)\assets
-	if not exist $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) mkdir $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH)
-	if not exist $(PROJECT_BUILD_PATH)\obj\screens mkdir $(PROJECT_BUILD_PATH)\obj\screens
-	$(foreach dir, $(PROJECT_SOURCE_DIRS), $(call create_dir, $(dir)))
-
-define create_dir
-    if not exist $(PROJECT_BUILD_PATH)\obj\$(1) mkdir $(PROJECT_BUILD_PATH)\obj\$(1)
-endef
-    
-# Copy required shared libs for integration into APK
-# NOTE: If using shared libs they are loaded by generated NativeLoader.java
-copy_project_required_libs:
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.so $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.so 
-endif
-ifeq ($(RAYLIB_LIBTYPE),STATIC)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.a $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.a 
-endif
-
-# Copy project required resources: strings.xml, icon.png, assets
-# NOTE: Required strings.xml is generated and game resources are copied to assets folder
-# TODO: Review xcopy usage, it can not be found in some systems!
-copy_project_resources:
-	copy $(APP_ICON_LDPI) $(PROJECT_BUILD_PATH)\res\drawable-ldpi\icon.png /Y
-	copy $(APP_ICON_MDPI) $(PROJECT_BUILD_PATH)\res\drawable-mdpi\icon.png /Y
-	copy $(APP_ICON_HDPI) $(PROJECT_BUILD_PATH)\res\drawable-hdpi\icon.png /Y
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	@echo ^<resources^>^<string name="app_name"^>$(APP_LABEL_NAME)^</string^>^</resources^> >> $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	if exist $(PROJECT_RESOURCES_PATH) C:\Windows\System32\xcopy $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) /Y /E /F
-
-# Generate NativeLoader.java to load required shared libraries
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_loader_script:
-	@echo package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME); > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo. >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo public class NativeLoader extends android.app.NativeActivity { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo     static { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	@echo         System.loadLibrary("raylib"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-endif
-	@echo         System.loadLibrary("$(PROJECT_LIBRARY_NAME)"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java 
-	@echo     } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-    
-# Generate AndroidManifest.xml with all the required options
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_android_manifest:
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^<manifest xmlns:android="http://schemas.android.com/apk/res/android" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         package="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)"  >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         android:versionCode="$(APP_VERSION_CODE)" android:versionName="$(APP_VERSION_NAME)" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-sdk android:minSdkVersion="$(ANDROID_API_VERSION)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-feature android:glEsVersion="0x00020000" android:required="true" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<application android:allowBackup="false" android:label="@string/app_name" android:icon="@drawable/icon" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^<activity android:name="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME).NativeLoader" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:configChanges="orientation|keyboardHidden|screenSize" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:screenOrientation="$(APP_SCREEN_ORIENTATION)" android:launchMode="singleTask" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:clearTaskOnLaunch="true"^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<meta-data android:name="android.app.lib_name" android:value="$(PROJECT_LIBRARY_NAME)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<action android:name="android.intent.action.MAIN" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<category android:name="android.intent.category.LAUNCHER" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^</intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^</activity^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^</application^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^</manifest^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-
-# Generate storekey for APK signing: $(PROJECT_NAME).keystore
-# NOTE: Configure here your Distinguished Names (-dname) if required!
-generate_apk_keystore: 
-	if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
-
-# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
-# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
-config_project_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(PROJECT_BUILD_PATH)/res -J $(PROJECT_BUILD_PATH)/src -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar
-
-# Compile native_app_glue code as static library: obj/libnative_app_glue.a
-compile_native_app_glue:
-	$(CC) -c $(RAYLIB_PATH)/src/external/android/native_app_glue/android_native_app_glue.c -o $(PROJECT_BUILD_PATH)/obj/native_app_glue.o $(CFLAGS)
-	$(AR) rcs $(PROJECT_BUILD_PATH)/obj/libnative_app_glue.a $(PROJECT_BUILD_PATH)/obj/native_app_glue.o
-
-# Compile project code into a shared library: lib/lib$(PROJECT_LIBRARY_NAME).so 
-compile_project_code: $(OBJS)
-	$(CC) -o $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(OBJS) -shared $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS)
-
-# Compile all .c files required into object (.o) files
-# NOTE: Those files will be linked into a shared library
-$(PROJECT_BUILD_PATH)/obj/%.o:%.c
-	$(CC) -c $^ -o $@ $(INCLUDE_PATHS) $(CFLAGS) --sysroot=$(ANDROID_TOOLCHAIN)/sysroot 
-    
-# Compile project .java code into .class (Java bytecode) 
-compile_project_class:
-	$(JAVA_HOME)/bin/javac -verbose -source 1.7 -target 1.7 -d $(PROJECT_BUILD_PATH)/obj -bootclasspath $(JAVA_HOME)/jre/lib/rt.jar -classpath $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar;$(PROJECT_BUILD_PATH)/obj -sourcepath $(PROJECT_BUILD_PATH)/src $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-
-# Compile .class files into Dalvik executable bytecode (.dex)
-# NOTE: Since Android 5.0, Dalvik interpreter (JIT) has been replaced by ART (AOT)
-compile_project_class_dex:
-	$(ANDROID_BUILD_TOOLS)/dx --verbose --dex --output=$(PROJECT_BUILD_PATH)/bin/classes.dex $(PROJECT_BUILD_PATH)/obj
-
-# Create Android APK package: bin/$(PROJECT_NAME).unsigned.apk
-# NOTE: Requires compiled classes.dex and lib$(PROJECT_LIBRARY_NAME).so
-# NOTE: Use -A resources to define additional directory in which to find raw asset files
-create_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -S $(PROJECT_BUILD_PATH)/res -A $(PROJECT_BUILD_PATH)/assets -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -F $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_BUILD_PATH)/bin
-	cd $(PROJECT_BUILD_PATH) && $(ANDROID_BUILD_TOOLS)/aapt add bin/$(PROJECT_NAME).unsigned.apk lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(PROJECT_SHARED_LIBS)
-
-# Create signed APK package using generated Key: bin/$(PROJECT_NAME).signed.apk 
-sign_project_apk_package:
-	$(JAVA_HOME)/bin/jarsigner -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -signedjar $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_NAME)Key
-
-# Create zip-aligned APK package: $(PROJECT_NAME).apk 
-zipalign_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_NAME).apk
-
-# Install $(PROJECT_NAME).apk to default emulator/device
-# NOTE: Use -e (emulator) or -d (device) parameters if required
-install:
-	$(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk
-    
-# Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64)
-check_device_abi:
-	$(ANDROID_PLATFORM_TOOLS)/adb shell getprop ro.product.cpu.abi
-
-# Monitorize output log coming from device, only raylib tag
-logcat:
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-    
-# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
-deploy:
-	$(ANDROID_PLATFORM_TOOLS)/adb install -r $(PROJECT_NAME).apk
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-
-#$(ANDROID_PLATFORM_TOOLS)/adb logcat *:W
-
-# Clean everything
-clean:
-	del $(PROJECT_BUILD_PATH)\* /f /s /q
-	rmdir $(PROJECT_BUILD_PATH) /s /q
-	@echo Cleaning done

BIN
games/cat_vs_roomba/libraylib.bc


+ 0 - 1378
games/cat_vs_roomba/raymath.h

@@ -1,1378 +0,0 @@
-/**********************************************************************************************
-*
-*   raymath v1.2 - Math functions to work with Vector3, Matrix and Quaternions
-*
-*   CONFIGURATION:
-*
-*   #define RAYMATH_IMPLEMENTATION
-*       Generates the implementation of the library into the included file.
-*       If not defined, the library is in header only mode and can be included in other headers
-*       or source files without problems. But only ONE file should hold the implementation.
-*
-*   #define RAYMATH_HEADER_ONLY
-*       Define static inline functions code, so #include header suffices for use.
-*       This may use up lots of memory.
-*
-*   #define RAYMATH_STANDALONE
-*       Avoid raylib.h header inclusion in this file.
-*       Vector3 and Matrix data types are defined internally in raymath module.
-*
-*
-*   LICENSE: zlib/libpng
-*
-*   Copyright (c) 2015-2017 Ramon Santamaria (@raysan5)
-*
-*   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 RAYMATH_H
-#define RAYMATH_H
-
-//#define RAYMATH_STANDALONE      // NOTE: To use raymath as standalone lib, just uncomment this line
-//#define RAYMATH_HEADER_ONLY     // NOTE: To compile functions as static inline, uncomment this line
-
-#ifndef RAYMATH_STANDALONE
-    #include "raylib.h"           // Required for structs: Vector3, Matrix
-#endif
-
-#if defined(RAYMATH_IMPLEMENTATION) && defined(RAYMATH_HEADER_ONLY)
-    #error "Specifying both RAYMATH_IMPLEMENTATION and RAYMATH_HEADER_ONLY is contradictory"
-#endif
-
-#if defined(RAYMATH_IMPLEMENTATION)
-    #if defined(_WIN32) && defined(BUILD_LIBTYPE_SHARED)
-        #define RMDEF __declspec(dllexport) extern inline // We are building raylib as a Win32 shared library (.dll).
-    #elif defined(_WIN32) && defined(USE_LIBTYPE_SHARED) 
-        #define RMDEF __declspec(dllimport)         // We are using raylib as a Win32 shared library (.dll)
-    #else
-        #define RMDEF extern inline // Provide external definition
-    #endif
-#elif defined(RAYMATH_HEADER_ONLY)
-    #define RMDEF static inline // Functions may be inlined, no external out-of-line definition
-#else
-    #if defined(__TINYC__)
-        #define RMDEF static inline // plain inline not supported by tinycc (See issue #435)
-    #else
-        #define RMDEF inline        // Functions may be inlined or external definition used
-    #endif
-#endif
-
-//----------------------------------------------------------------------------------
-// Defines and Macros
-//----------------------------------------------------------------------------------
-#ifndef PI
-    #define PI 3.14159265358979323846
-#endif
-
-#ifndef DEG2RAD
-    #define DEG2RAD (PI/180.0f)
-#endif
-
-#ifndef RAD2DEG
-    #define RAD2DEG (180.0f/PI)
-#endif
-
-// Return float vector for Matrix
-#ifndef MatrixToFloat
-    #define MatrixToFloat(mat) (MatrixToFloatV(mat).v)
-#endif
-
-// Return float vector for Vector3
-#ifndef Vector3ToFloat
-    #define Vector3ToFloat(vec) (Vector3ToFloatV(vec).v)
-#endif
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-
-#if defined(RAYMATH_STANDALONE)
-    // Vector2 type
-    typedef struct Vector2 {
-        float x;
-        float y;
-    } Vector2;
-
-    // Vector3 type
-    typedef struct Vector3 {
-        float x;
-        float y;
-        float z;
-    } Vector3;
-    
-    // Quaternion type
-    typedef struct Quaternion {
-        float x;
-        float y;
-        float z;
-        float w;
-    } Quaternion;
-
-    // Matrix type (OpenGL style 4x4 - right handed, column major)
-    typedef struct Matrix {
-        float m0, m4, m8, m12;
-        float m1, m5, m9, m13;
-        float m2, m6, m10, m14;
-        float m3, m7, m11, m15;
-    } Matrix;
-#endif
-
-// NOTE: Helper types to be used instead of array return types for *ToFloat functions
-typedef struct float3 { float v[3]; } float3;
-typedef struct float16 { float v[16]; } float16;
-
-#include <math.h>       // Required for: sinf(), cosf(), tan(), fabs()
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition - Utils math
-//----------------------------------------------------------------------------------
-
-// Clamp float value
-RMDEF float Clamp(float value, float min, float max)
-{
-    const float res = value < min ? min : value;
-    return res > max ? max : res;
-}
-
-// Calculate linear interpolation between two vectors
-RMDEF float Lerp(float start, float end, float amount)
-{
-    return start + amount*(end - start);
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition - Vector2 math
-//----------------------------------------------------------------------------------
-
-// Vector with components value 0.0f
-RMDEF Vector2 Vector2Zero(void)
-{
-    Vector2 result = { 0.0f, 0.0f };
-    return result;
-}
-
-// Vector with components value 1.0f
-RMDEF Vector2 Vector2One(void)
-{
-    Vector2 result = { 1.0f, 1.0f };
-    return result;
-}
-
-// Add two vectors (v1 + v2)
-RMDEF Vector2 Vector2Add(Vector2 v1, Vector2 v2)
-{
-    Vector2 result = { v1.x + v2.x, v1.y + v2.y };
-    return result;
-}
-
-// Subtract two vectors (v1 - v2)
-RMDEF Vector2 Vector2Subtract(Vector2 v1, Vector2 v2)
-{
-    Vector2 result = { v1.x - v2.x, v1.y - v2.y };
-    return result;
-}
-
-// Calculate vector length
-RMDEF float Vector2Length(Vector2 v)
-{
-    float result = sqrtf((v.x*v.x) + (v.y*v.y));
-    return result;
-}
-
-// Calculate two vectors dot product
-RMDEF float Vector2DotProduct(Vector2 v1, Vector2 v2)
-{
-    float result = (v1.x*v2.x + v1.y*v2.y);
-    return result;
-}
-
-// Calculate distance between two vectors
-RMDEF float Vector2Distance(Vector2 v1, Vector2 v2)
-{
-    float result = sqrtf((v1.x - v2.x)*(v1.x - v2.x) + (v1.y - v2.y)*(v1.y - v2.y));
-    return result;
-}
-
-// Calculate angle from two vectors in X-axis
-RMDEF float Vector2Angle(Vector2 v1, Vector2 v2)
-{
-    float result = atan2f(v2.y - v1.y, v2.x - v1.x)*(180.0f/PI);
-    if (result < 0) result += 360.0f;
-    return result;
-}
-
-// Scale vector (multiply by value)
-RMDEF Vector2 Vector2Scale(Vector2 v, float scale)
-{
-    Vector2 result = { v.x*scale, v.y*scale };
-    return result;
-}
-
-// Multiply vector by vector
-RMDEF Vector2 Vector2MultiplyV(Vector2 v1, Vector2 v2)
-{
-	Vector2 result = { v1.x*v2.x, v1.y*v2.y };
-	return result;
-}
-
-// Negate vector
-RMDEF Vector2 Vector2Negate(Vector2 v)
-{
-    Vector2 result = { -v.x, -v.y };
-    return result;
-}
-
-// Divide vector by a float value
-RMDEF Vector2 Vector2Divide(Vector2 v, float div)
-{
-    Vector2 result = { v.x/div, v.y/div };
-    return result;
-}
-
-// Divide vector by vector
-RMDEF Vector2 Vector2DivideV(Vector2 v1, Vector2 v2)
-{
-	Vector2 result = { v1.x/v2.x, v1.y/v2.y };
-	return result;
-}
-
-// Normalize provided vector
-RMDEF Vector2 Vector2Normalize(Vector2 v)
-{
-    Vector2 result = Vector2Divide(v, Vector2Length(v));
-    return result;
-}
-
-// Calculate linear interpolation between two vectors
-RMDEF Vector2 Vector2Lerp(Vector2 v1, Vector2 v2, float amount)
-{
-    Vector2 result = { 0 };
-
-    result.x = v1.x + amount*(v2.x - v1.x);
-    result.y = v1.y + amount*(v2.y - v1.y);
-
-    return result;
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition - Vector3 math
-//----------------------------------------------------------------------------------
-
-// Vector with components value 0.0f
-RMDEF Vector3 Vector3Zero(void)
-{
-    Vector3 result = { 0.0f, 0.0f, 0.0f };
-    return result;
-}
-
-// Vector with components value 1.0f
-RMDEF Vector3 Vector3One(void)
-{
-    Vector3 result = { 1.0f, 1.0f, 1.0f };
-    return result;
-}
-
-// Add two vectors
-RMDEF Vector3 Vector3Add(Vector3 v1, Vector3 v2)
-{
-    Vector3 result = { v1.x + v2.x, v1.y + v2.y, v1.z + v2.z };
-    return result;
-}
-
-// Subtract two vectors
-RMDEF Vector3 Vector3Subtract(Vector3 v1, Vector3 v2)
-{
-    Vector3 result = { v1.x - v2.x, v1.y - v2.y, v1.z - v2.z };
-    return result;
-}
-
-// Multiply vector by scalar
-RMDEF Vector3 Vector3Multiply(Vector3 v, float scalar)
-{
-    Vector3 result = { v.x*scalar, v.y*scalar, v.z*scalar };
-    return result;
-}
-
-// Multiply vector by vector
-RMDEF Vector3 Vector3MultiplyV(Vector3 v1, Vector3 v2)
-{
-    Vector3 result = { v1.x*v2.x, v1.y*v2.y, v1.z*v2.z };
-    return result;
-}
-
-// Calculate two vectors cross product
-RMDEF Vector3 Vector3CrossProduct(Vector3 v1, Vector3 v2)
-{
-    Vector3 result = { v1.y*v2.z - v1.z*v2.y, v1.z*v2.x - v1.x*v2.z, v1.x*v2.y - v1.y*v2.x };
-    return result;
-}
-
-// Calculate one vector perpendicular vector
-RMDEF Vector3 Vector3Perpendicular(Vector3 v)
-{
-    Vector3 result = { 0 };
-
-    float min = (float) fabs(v.x);
-    Vector3 cardinalAxis = {1.0f, 0.0f, 0.0f};
-
-    if (fabs(v.y) < min)
-    {
-        min = (float) fabs(v.y);
-        Vector3 tmp = {0.0f, 1.0f, 0.0f};
-        cardinalAxis = tmp;
-    }
-
-    if (fabs(v.z) < min)
-    {
-        Vector3 tmp = {0.0f, 0.0f, 1.0f};
-        cardinalAxis = tmp;
-    }
-
-    result = Vector3CrossProduct(v, cardinalAxis);
-
-    return result;
-}
-
-// Calculate vector length
-RMDEF float Vector3Length(const Vector3 v)
-{
-    float result = sqrtf(v.x*v.x + v.y*v.y + v.z*v.z);
-    return result;
-}
-
-// Calculate two vectors dot product
-RMDEF float Vector3DotProduct(Vector3 v1, Vector3 v2)
-{
-    float result = (v1.x*v2.x + v1.y*v2.y + v1.z*v2.z);
-    return result;
-}
-
-// Calculate distance between two vectors
-RMDEF float Vector3Distance(Vector3 v1, Vector3 v2)
-{
-    float dx = v2.x - v1.x;
-    float dy = v2.y - v1.y;
-    float dz = v2.z - v1.z;
-    float result = sqrtf(dx*dx + dy*dy + dz*dz);
-    return result;
-}
-
-// Scale provided vector
-RMDEF Vector3 Vector3Scale(Vector3 v, float scale)
-{
-    Vector3 result = { v.x*scale, v.y*scale, v.z*scale };
-    return result;
-}
-
-// Negate provided vector (invert direction)
-RMDEF Vector3 Vector3Negate(Vector3 v)
-{
-    Vector3 result = { -v.x, -v.y, -v.z };
-    return result;
-}
-
-// Divide vector by a float value
-RMDEF Vector3 Vector3Divide(Vector3 v, float div)
-{
-	Vector3 result = { v.x / div, v.y / div, v.z / div };
-	return result;
-}
-
-// Divide vector by vector
-RMDEF Vector3 Vector3DivideV(Vector3 v1, Vector3 v2)
-{
-	Vector3 result = { v1.x/v2.x, v1.y/v2.y, v1.z/v2.z };
-	return result;
-}
-
-// Normalize provided vector
-RMDEF Vector3 Vector3Normalize(Vector3 v)
-{
-    Vector3 result = v;
-
-    float length, ilength;
-    length = Vector3Length(v);
-    if (length == 0.0f) length = 1.0f;
-    ilength = 1.0f/length;
-
-    result.x *= ilength;
-    result.y *= ilength;
-    result.z *= ilength;
-
-    return result;
-}
-
-// Orthonormalize provided vectors
-// Makes vectors normalized and orthogonal to each other
-// Gram-Schmidt function implementation
-RMDEF void Vector3OrthoNormalize(Vector3 *v1, Vector3 *v2)
-{
-    *v1 = Vector3Normalize(*v1);
-    Vector3 vn = Vector3CrossProduct(*v1, *v2);
-    vn = Vector3Normalize(vn);
-    *v2 = Vector3CrossProduct(vn, *v1);
-}
-
-// Transforms a Vector3 by a given Matrix
-RMDEF Vector3 Vector3Transform(Vector3 v, Matrix mat)
-{
-    Vector3 result = { 0 };
-    float x = v.x;
-    float y = v.y;
-    float z = v.z;
-
-    result.x = mat.m0*x + mat.m4*y + mat.m8*z + mat.m12;
-    result.y = mat.m1*x + mat.m5*y + mat.m9*z + mat.m13;
-    result.z = mat.m2*x + mat.m6*y + mat.m10*z + mat.m14;
-
-    return result;
-};
-
-// Transform a vector by quaternion rotation
-RMDEF Vector3 Vector3RotateByQuaternion(Vector3 v, Quaternion q)
-{
-    Vector3 result = { 0 };
-
-    result.x = v.x*(q.x*q.x + q.w*q.w - q.y*q.y - q.z*q.z) + v.y*(2*q.x*q.y - 2*q.w*q.z) + v.z*(2*q.x*q.z + 2*q.w*q.y);
-    result.y = v.x*(2*q.w*q.z + 2*q.x*q.y) + v.y*(q.w*q.w - q.x*q.x + q.y*q.y - q.z*q.z) + v.z*(-2*q.w*q.x + 2*q.y*q.z);
-    result.z = v.x*(-2*q.w*q.y + 2*q.x*q.z) + v.y*(2*q.w*q.x + 2*q.y*q.z)+ v.z*(q.w*q.w - q.x*q.x - q.y*q.y + q.z*q.z);
-
-    return result;
-}
-
-// Calculate linear interpolation between two vectors
-RMDEF Vector3 Vector3Lerp(Vector3 v1, Vector3 v2, float amount)
-{
-    Vector3 result = { 0 };
-
-    result.x = v1.x + amount*(v2.x - v1.x);
-    result.y = v1.y + amount*(v2.y - v1.y);
-    result.z = v1.z + amount*(v2.z - v1.z);
-
-    return result;
-}
-
-// Calculate reflected vector to normal
-RMDEF Vector3 Vector3Reflect(Vector3 v, Vector3 normal)
-{
-    // I is the original vector
-    // N is the normal of the incident plane
-    // R = I - (2*N*( DotProduct[ I,N] ))
-
-    Vector3 result = { 0 };
-
-    float dotProduct = Vector3DotProduct(v, normal);
-
-    result.x = v.x - (2.0f*normal.x)*dotProduct;
-    result.y = v.y - (2.0f*normal.y)*dotProduct;
-    result.z = v.z - (2.0f*normal.z)*dotProduct;
-
-    return result;
-}
-
-// Return min value for each pair of components
-RMDEF Vector3 Vector3Min(Vector3 v1, Vector3 v2)
-{
-    Vector3 result = { 0 };
-
-    result.x = fminf(v1.x, v2.x);
-    result.y = fminf(v1.y, v2.y);
-    result.z = fminf(v1.z, v2.z);
-
-    return result;
-}
-
-// Return max value for each pair of components
-RMDEF Vector3 Vector3Max(Vector3 v1, Vector3 v2)
-{
-    Vector3 result = { 0 };
-
-    result.x = fmaxf(v1.x, v2.x);
-    result.y = fmaxf(v1.y, v2.y);
-    result.z = fmaxf(v1.z, v2.z);
-
-    return result;
-}
-
-// Compute barycenter coordinates (u, v, w) for point p with respect to triangle (a, b, c)
-// NOTE: Assumes P is on the plane of the triangle
-RMDEF Vector3 Vector3Barycenter(Vector3 p, Vector3 a, Vector3 b, Vector3 c)
-{
-    //Vector v0 = b - a, v1 = c - a, v2 = p - a;
-
-    Vector3 v0 = Vector3Subtract(b, a);
-    Vector3 v1 = Vector3Subtract(c, a);
-    Vector3 v2 = Vector3Subtract(p, a);
-    float d00 = Vector3DotProduct(v0, v0);
-    float d01 = Vector3DotProduct(v0, v1);
-    float d11 = Vector3DotProduct(v1, v1);
-    float d20 = Vector3DotProduct(v2, v0);
-    float d21 = Vector3DotProduct(v2, v1);
-
-    float denom = d00*d11 - d01*d01;
-
-    Vector3 result = { 0 };
-
-    result.y = (d11*d20 - d01*d21)/denom;
-    result.z = (d00*d21 - d01*d20)/denom;
-    result.x = 1.0f - (result.z + result.y);
-
-    return result;
-}
-
-// Returns Vector3 as float array
-RMDEF float3 Vector3ToFloatV(Vector3 v)
-{
-    float3 buffer = { 0 };
-
-    buffer.v[0] = v.x;
-    buffer.v[1] = v.y;
-    buffer.v[2] = v.z;
-
-    return buffer;
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition - Matrix math
-//----------------------------------------------------------------------------------
-
-// Compute matrix determinant
-RMDEF float MatrixDeterminant(Matrix mat)
-{
-    float result = { 0 };
-
-    // Cache the matrix values (speed optimization)
-    float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3;
-    float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7;
-    float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11;
-    float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15;
-
-    result = a30*a21*a12*a03 - a20*a31*a12*a03 - a30*a11*a22*a03 + a10*a31*a22*a03 +
-             a20*a11*a32*a03 - a10*a21*a32*a03 - a30*a21*a02*a13 + a20*a31*a02*a13 +
-             a30*a01*a22*a13 - a00*a31*a22*a13 - a20*a01*a32*a13 + a00*a21*a32*a13 +
-             a30*a11*a02*a23 - a10*a31*a02*a23 - a30*a01*a12*a23 + a00*a31*a12*a23 +
-             a10*a01*a32*a23 - a00*a11*a32*a23 - a20*a11*a02*a33 + a10*a21*a02*a33 +
-             a20*a01*a12*a33 - a00*a21*a12*a33 - a10*a01*a22*a33 + a00*a11*a22*a33;
-
-    return result;
-}
-
-// Returns the trace of the matrix (sum of the values along the diagonal)
-RMDEF float MatrixTrace(Matrix mat)
-{
-    float result = (mat.m0 + mat.m5 + mat.m10 + mat.m15);
-    return result;
-}
-
-// Transposes provided matrix
-RMDEF Matrix MatrixTranspose(Matrix mat)
-{
-    Matrix result = { 0 };
-
-    result.m0 = mat.m0;
-    result.m1 = mat.m4;
-    result.m2 = mat.m8;
-    result.m3 = mat.m12;
-    result.m4 = mat.m1;
-    result.m5 = mat.m5;
-    result.m6 = mat.m9;
-    result.m7 = mat.m13;
-    result.m8 = mat.m2;
-    result.m9 = mat.m6;
-    result.m10 = mat.m10;
-    result.m11 = mat.m14;
-    result.m12 = mat.m3;
-    result.m13 = mat.m7;
-    result.m14 = mat.m11;
-    result.m15 = mat.m15;
-
-    return result;
-}
-
-// Invert provided matrix
-RMDEF Matrix MatrixInvert(Matrix mat)
-{
-    Matrix result = { 0 };
-
-    // Cache the matrix values (speed optimization)
-    float a00 = mat.m0, a01 = mat.m1, a02 = mat.m2, a03 = mat.m3;
-    float a10 = mat.m4, a11 = mat.m5, a12 = mat.m6, a13 = mat.m7;
-    float a20 = mat.m8, a21 = mat.m9, a22 = mat.m10, a23 = mat.m11;
-    float a30 = mat.m12, a31 = mat.m13, a32 = mat.m14, a33 = mat.m15;
-
-    float b00 = a00*a11 - a01*a10;
-    float b01 = a00*a12 - a02*a10;
-    float b02 = a00*a13 - a03*a10;
-    float b03 = a01*a12 - a02*a11;
-    float b04 = a01*a13 - a03*a11;
-    float b05 = a02*a13 - a03*a12;
-    float b06 = a20*a31 - a21*a30;
-    float b07 = a20*a32 - a22*a30;
-    float b08 = a20*a33 - a23*a30;
-    float b09 = a21*a32 - a22*a31;
-    float b10 = a21*a33 - a23*a31;
-    float b11 = a22*a33 - a23*a32;
-
-    // Calculate the invert determinant (inlined to avoid double-caching)
-    float invDet = 1.0f/(b00*b11 - b01*b10 + b02*b09 + b03*b08 - b04*b07 + b05*b06);
-
-    result.m0 = (a11*b11 - a12*b10 + a13*b09)*invDet;
-    result.m1 = (-a01*b11 + a02*b10 - a03*b09)*invDet;
-    result.m2 = (a31*b05 - a32*b04 + a33*b03)*invDet;
-    result.m3 = (-a21*b05 + a22*b04 - a23*b03)*invDet;
-    result.m4 = (-a10*b11 + a12*b08 - a13*b07)*invDet;
-    result.m5 = (a00*b11 - a02*b08 + a03*b07)*invDet;
-    result.m6 = (-a30*b05 + a32*b02 - a33*b01)*invDet;
-    result.m7 = (a20*b05 - a22*b02 + a23*b01)*invDet;
-    result.m8 = (a10*b10 - a11*b08 + a13*b06)*invDet;
-    result.m9 = (-a00*b10 + a01*b08 - a03*b06)*invDet;
-    result.m10 = (a30*b04 - a31*b02 + a33*b00)*invDet;
-    result.m11 = (-a20*b04 + a21*b02 - a23*b00)*invDet;
-    result.m12 = (-a10*b09 + a11*b07 - a12*b06)*invDet;
-    result.m13 = (a00*b09 - a01*b07 + a02*b06)*invDet;
-    result.m14 = (-a30*b03 + a31*b01 - a32*b00)*invDet;
-    result.m15 = (a20*b03 - a21*b01 + a22*b00)*invDet;
-
-    return result;
-}
-
-// Normalize provided matrix
-RMDEF Matrix MatrixNormalize(Matrix mat)
-{
-    Matrix result = { 0 };
-
-    float det = MatrixDeterminant(mat);
-
-    result.m0 = mat.m0/det;
-    result.m1 = mat.m1/det;
-    result.m2 = mat.m2/det;
-    result.m3 = mat.m3/det;
-    result.m4 = mat.m4/det;
-    result.m5 = mat.m5/det;
-    result.m6 = mat.m6/det;
-    result.m7 = mat.m7/det;
-    result.m8 = mat.m8/det;
-    result.m9 = mat.m9/det;
-    result.m10 = mat.m10/det;
-    result.m11 = mat.m11/det;
-    result.m12 = mat.m12/det;
-    result.m13 = mat.m13/det;
-    result.m14 = mat.m14/det;
-    result.m15 = mat.m15/det;
-
-    return result;
-}
-
-// Returns identity matrix
-RMDEF Matrix MatrixIdentity(void)
-{
-    Matrix result = { 1.0f, 0.0f, 0.0f, 0.0f,
-                      0.0f, 1.0f, 0.0f, 0.0f,
-                      0.0f, 0.0f, 1.0f, 0.0f,
-                      0.0f, 0.0f, 0.0f, 1.0f };
-
-    return result;
-}
-
-// Add two matrices
-RMDEF Matrix MatrixAdd(Matrix left, Matrix right)
-{
-    Matrix result = MatrixIdentity();
-
-    result.m0 = left.m0 + right.m0;
-    result.m1 = left.m1 + right.m1;
-    result.m2 = left.m2 + right.m2;
-    result.m3 = left.m3 + right.m3;
-    result.m4 = left.m4 + right.m4;
-    result.m5 = left.m5 + right.m5;
-    result.m6 = left.m6 + right.m6;
-    result.m7 = left.m7 + right.m7;
-    result.m8 = left.m8 + right.m8;
-    result.m9 = left.m9 + right.m9;
-    result.m10 = left.m10 + right.m10;
-    result.m11 = left.m11 + right.m11;
-    result.m12 = left.m12 + right.m12;
-    result.m13 = left.m13 + right.m13;
-    result.m14 = left.m14 + right.m14;
-    result.m15 = left.m15 + right.m15;
-
-    return result;
-}
-
-// Subtract two matrices (left - right)
-RMDEF Matrix MatrixSubtract(Matrix left, Matrix right)
-{
-    Matrix result = MatrixIdentity();
-
-    result.m0 = left.m0 - right.m0;
-    result.m1 = left.m1 - right.m1;
-    result.m2 = left.m2 - right.m2;
-    result.m3 = left.m3 - right.m3;
-    result.m4 = left.m4 - right.m4;
-    result.m5 = left.m5 - right.m5;
-    result.m6 = left.m6 - right.m6;
-    result.m7 = left.m7 - right.m7;
-    result.m8 = left.m8 - right.m8;
-    result.m9 = left.m9 - right.m9;
-    result.m10 = left.m10 - right.m10;
-    result.m11 = left.m11 - right.m11;
-    result.m12 = left.m12 - right.m12;
-    result.m13 = left.m13 - right.m13;
-    result.m14 = left.m14 - right.m14;
-    result.m15 = left.m15 - right.m15;
-
-    return result;
-}
-
-// Returns translation matrix
-RMDEF Matrix MatrixTranslate(float x, float y, float z)
-{
-    Matrix result = { 1.0f, 0.0f, 0.0f, x,
-                      0.0f, 1.0f, 0.0f, y,
-                      0.0f, 0.0f, 1.0f, z,
-                      0.0f, 0.0f, 0.0f, 1.0f };
-
-    return result;
-}
-
-// Create rotation matrix from axis and angle
-// NOTE: Angle should be provided in radians
-RMDEF Matrix MatrixRotate(Vector3 axis, float angle)
-{
-    Matrix result = { 0 };
-
-    float x = axis.x, y = axis.y, z = axis.z;
-
-    float length = sqrtf(x*x + y*y + z*z);
-
-    if ((length != 1.0f) && (length != 0.0f))
-    {
-        length = 1.0f/length;
-        x *= length;
-        y *= length;
-        z *= length;
-    }
-
-    float sinres = sinf(angle);
-    float cosres = cosf(angle);
-    float t = 1.0f - cosres;
-
-    result.m0  = x*x*t + cosres;
-    result.m1  = y*x*t + z*sinres;
-    result.m2  = z*x*t - y*sinres;
-    result.m3  = 0.0f;
-
-    result.m4  = x*y*t - z*sinres;
-    result.m5  = y*y*t + cosres;
-    result.m6  = z*y*t + x*sinres;
-    result.m7  = 0.0f;
-
-    result.m8  = x*z*t + y*sinres;
-    result.m9  = y*z*t - x*sinres;
-    result.m10 = z*z*t + cosres;
-    result.m11 = 0.0f;
-
-    result.m12 = 0.0f;
-    result.m13 = 0.0f;
-    result.m14 = 0.0f;
-    result.m15 = 1.0f;
-
-    return result;
-}
-
-// Returns x-rotation matrix (angle in radians)
-RMDEF Matrix MatrixRotateX(float angle)
-{
-    Matrix result = MatrixIdentity();
-
-    float cosres = cosf(angle);
-    float sinres = sinf(angle);
-
-    result.m5 = cosres;
-    result.m6 = -sinres;
-    result.m9 = sinres;
-    result.m10 = cosres;
-
-    return result;
-}
-
-// Returns y-rotation matrix (angle in radians)
-RMDEF Matrix MatrixRotateY(float angle)
-{
-    Matrix result = MatrixIdentity();
-
-    float cosres = cosf(angle);
-    float sinres = sinf(angle);
-
-    result.m0 = cosres;
-    result.m2 = sinres;
-    result.m8 = -sinres;
-    result.m10 = cosres;
-
-    return result;
-}
-
-// Returns z-rotation matrix (angle in radians)
-RMDEF Matrix MatrixRotateZ(float angle)
-{
-    Matrix result = MatrixIdentity();
-
-    float cosres = cosf(angle);
-    float sinres = sinf(angle);
-
-    result.m0 = cosres;
-    result.m1 = -sinres;
-    result.m4 = sinres;
-    result.m5 = cosres;
-
-    return result;
-}
-
-// Returns scaling matrix
-RMDEF Matrix MatrixScale(float x, float y, float z)
-{
-    Matrix result = { x, 0.0f, 0.0f, 0.0f,
-                      0.0f, y, 0.0f, 0.0f,
-                      0.0f, 0.0f, z, 0.0f,
-                      0.0f, 0.0f, 0.0f, 1.0f };
-
-    return result;
-}
-
-// Returns two matrix multiplication
-// NOTE: When multiplying matrices... the order matters!
-RMDEF Matrix MatrixMultiply(Matrix left, Matrix right)
-{
-    Matrix result = { 0 };
-
-    result.m0 = left.m0*right.m0 + left.m1*right.m4 + left.m2*right.m8 + left.m3*right.m12;
-    result.m1 = left.m0*right.m1 + left.m1*right.m5 + left.m2*right.m9 + left.m3*right.m13;
-    result.m2 = left.m0*right.m2 + left.m1*right.m6 + left.m2*right.m10 + left.m3*right.m14;
-    result.m3 = left.m0*right.m3 + left.m1*right.m7 + left.m2*right.m11 + left.m3*right.m15;
-    result.m4 = left.m4*right.m0 + left.m5*right.m4 + left.m6*right.m8 + left.m7*right.m12;
-    result.m5 = left.m4*right.m1 + left.m5*right.m5 + left.m6*right.m9 + left.m7*right.m13;
-    result.m6 = left.m4*right.m2 + left.m5*right.m6 + left.m6*right.m10 + left.m7*right.m14;
-    result.m7 = left.m4*right.m3 + left.m5*right.m7 + left.m6*right.m11 + left.m7*right.m15;
-    result.m8 = left.m8*right.m0 + left.m9*right.m4 + left.m10*right.m8 + left.m11*right.m12;
-    result.m9 = left.m8*right.m1 + left.m9*right.m5 + left.m10*right.m9 + left.m11*right.m13;
-    result.m10 = left.m8*right.m2 + left.m9*right.m6 + left.m10*right.m10 + left.m11*right.m14;
-    result.m11 = left.m8*right.m3 + left.m9*right.m7 + left.m10*right.m11 + left.m11*right.m15;
-    result.m12 = left.m12*right.m0 + left.m13*right.m4 + left.m14*right.m8 + left.m15*right.m12;
-    result.m13 = left.m12*right.m1 + left.m13*right.m5 + left.m14*right.m9 + left.m15*right.m13;
-    result.m14 = left.m12*right.m2 + left.m13*right.m6 + left.m14*right.m10 + left.m15*right.m14;
-    result.m15 = left.m12*right.m3 + left.m13*right.m7 + left.m14*right.m11 + left.m15*right.m15;
-
-    return result;
-}
-
-// Returns perspective projection matrix
-RMDEF Matrix MatrixFrustum(double left, double right, double bottom, double top, double near, double far)
-{
-    Matrix result = { 0 };
-
-    float rl = (float)(right - left);
-    float tb = (float)(top - bottom);
-    float fn = (float)(far - near);
-
-    result.m0 = ((float) near*2.0f)/rl;
-    result.m1 = 0.0f;
-    result.m2 = 0.0f;
-    result.m3 = 0.0f;
-
-    result.m4 = 0.0f;
-    result.m5 = ((float) near*2.0f)/tb;
-    result.m6 = 0.0f;
-    result.m7 = 0.0f;
-
-    result.m8 = ((float)right + (float)left)/rl;
-    result.m9 = ((float)top + (float)bottom)/tb;
-    result.m10 = -((float)far + (float)near)/fn;
-    result.m11 = -1.0f;
-
-    result.m12 = 0.0f;
-    result.m13 = 0.0f;
-    result.m14 = -((float)far*(float)near*2.0f)/fn;
-    result.m15 = 0.0f;
-
-    return result;
-}
-
-// Returns perspective projection matrix
-// NOTE: Angle should be provided in radians
-RMDEF Matrix MatrixPerspective(double fovy, double aspect, double near, double far)
-{
-    double top = near*tan(fovy*0.5);
-    double right = top*aspect;
-    Matrix result = MatrixFrustum(-right, right, -top, top, near, far);
-
-    return result;
-}
-
-// Returns orthographic projection matrix
-RMDEF Matrix MatrixOrtho(double left, double right, double bottom, double top, double near, double far)
-{
-    Matrix result = { 0 };
-
-    float rl = (float)(right - left);
-    float tb = (float)(top - bottom);
-    float fn = (float)(far - near);
-
-    result.m0 = 2.0f/rl;
-    result.m1 = 0.0f;
-    result.m2 = 0.0f;
-    result.m3 = 0.0f;
-    result.m4 = 0.0f;
-    result.m5 = 2.0f/tb;
-    result.m6 = 0.0f;
-    result.m7 = 0.0f;
-    result.m8 = 0.0f;
-    result.m9 = 0.0f;
-    result.m10 = -2.0f/fn;
-    result.m11 = 0.0f;
-    result.m12 = -((float)left + (float)right)/rl;
-    result.m13 = -((float)top + (float)bottom)/tb;
-    result.m14 = -((float)far + (float)near)/fn;
-    result.m15 = 1.0f;
-
-    return result;
-}
-
-// Returns camera look-at matrix (view matrix)
-RMDEF Matrix MatrixLookAt(Vector3 eye, Vector3 target, Vector3 up)
-{
-    Matrix result = { 0 };
-
-    Vector3 z = Vector3Subtract(eye, target);
-    z = Vector3Normalize(z);
-    Vector3 x = Vector3CrossProduct(up, z);
-    x = Vector3Normalize(x);
-    Vector3 y = Vector3CrossProduct(z, x);
-    y = Vector3Normalize(y);
-
-    result.m0 = x.x;
-    result.m1 = x.y;
-    result.m2 = x.z;
-    result.m3 = 0.0f;
-    result.m4 = y.x;
-    result.m5 = y.y;
-    result.m6 = y.z;
-    result.m7 = 0.0f;
-    result.m8 = z.x;
-    result.m9 = z.y;
-    result.m10 = z.z;
-    result.m11 = 0.0f;
-    result.m12 = eye.x;
-    result.m13 = eye.y;
-    result.m14 = eye.z;
-    result.m15 = 1.0f;
-
-    result = MatrixInvert(result);
-
-    return result;
-}
-
-// Returns float array of matrix data
-RMDEF float16 MatrixToFloatV(Matrix mat)
-{
-    float16 buffer = { 0 };
-
-    buffer.v[0] = mat.m0;
-    buffer.v[1] = mat.m1;
-    buffer.v[2] = mat.m2;
-    buffer.v[3] = mat.m3;
-    buffer.v[4] = mat.m4;
-    buffer.v[5] = mat.m5;
-    buffer.v[6] = mat.m6;
-    buffer.v[7] = mat.m7;
-    buffer.v[8] = mat.m8;
-    buffer.v[9] = mat.m9;
-    buffer.v[10] = mat.m10;
-    buffer.v[11] = mat.m11;
-    buffer.v[12] = mat.m12;
-    buffer.v[13] = mat.m13;
-    buffer.v[14] = mat.m14;
-    buffer.v[15] = mat.m15;
-
-    return buffer;
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition - Quaternion math
-//----------------------------------------------------------------------------------
-
-// Returns identity quaternion
-RMDEF Quaternion QuaternionIdentity(void)
-{
-    Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f };
-    return result;
-}
-
-// Computes the length of a quaternion
-RMDEF float QuaternionLength(Quaternion q)
-{
-    float result = (float)sqrt(q.x*q.x + q.y*q.y + q.z*q.z + q.w*q.w);
-    return result;
-}
-
-// Normalize provided quaternion
-RMDEF Quaternion QuaternionNormalize(Quaternion q)
-{
-    Quaternion result = { 0 };
-
-    float length, ilength;
-    length = QuaternionLength(q);
-    if (length == 0.0f) length = 1.0f;
-    ilength = 1.0f/length;
-
-    result.x = q.x*ilength;
-    result.y = q.y*ilength;
-    result.z = q.z*ilength;
-    result.w = q.w*ilength;
-
-    return result;
-}
-
-// Invert provided quaternion
-RMDEF Quaternion QuaternionInvert(Quaternion q)
-{
-    Quaternion result = q;
-    float length = QuaternionLength(q);
-    float lengthSq = length*length;
-
-    if (lengthSq != 0.0)
-    {
-        float i = 1.0f/lengthSq;
-
-        result.x *= -i;
-        result.y *= -i;
-        result.z *= -i;
-        result.w *= i;
-    }
-
-    return result;
-}
-
-// Calculate two quaternion multiplication
-RMDEF Quaternion QuaternionMultiply(Quaternion q1, Quaternion q2)
-{
-    Quaternion result = { 0 };
-
-    float qax = q1.x, qay = q1.y, qaz = q1.z, qaw = q1.w;
-    float qbx = q2.x, qby = q2.y, qbz = q2.z, qbw = q2.w;
-
-    result.x = qax*qbw + qaw*qbx + qay*qbz - qaz*qby;
-    result.y = qay*qbw + qaw*qby + qaz*qbx - qax*qbz;
-    result.z = qaz*qbw + qaw*qbz + qax*qby - qay*qbx;
-    result.w = qaw*qbw - qax*qbx - qay*qby - qaz*qbz;
-
-    return result;
-}
-
-// Calculate linear interpolation between two quaternions
-RMDEF Quaternion QuaternionLerp(Quaternion q1, Quaternion q2, float amount)
-{
-    Quaternion result = { 0 };
-
-    result.x = q1.x + amount*(q2.x - q1.x);
-    result.y = q1.y + amount*(q2.y - q1.y);
-    result.z = q1.z + amount*(q2.z - q1.z);
-    result.w = q1.w + amount*(q2.w - q1.w);
-
-    return result;
-}
-
-// Calculate slerp-optimized interpolation between two quaternions
-RMDEF Quaternion QuaternionNlerp(Quaternion q1, Quaternion q2, float amount)
-{
-    Quaternion result = QuaternionLerp(q1, q2, amount);
-    result = QuaternionNormalize(result);
-
-    return result;
-}
-
-// Calculates spherical linear interpolation between two quaternions
-RMDEF Quaternion QuaternionSlerp(Quaternion q1, Quaternion q2, float amount)
-{
-    Quaternion result = { 0 };
-
-    float cosHalfTheta =  q1.x*q2.x + q1.y*q2.y + q1.z*q2.z + q1.w*q2.w;
-
-    if (fabs(cosHalfTheta) >= 1.0f) result = q1;
-    else if (cosHalfTheta > 0.95f) result = QuaternionNlerp(q1, q2, amount);
-    else
-    {
-        float halfTheta = (float) acos(cosHalfTheta);
-        float sinHalfTheta = (float) sqrt(1.0f - cosHalfTheta*cosHalfTheta);
-
-        if (fabs(sinHalfTheta) < 0.001f)
-        {
-            result.x = (q1.x*0.5f + q2.x*0.5f);
-            result.y = (q1.y*0.5f + q2.y*0.5f);
-            result.z = (q1.z*0.5f + q2.z*0.5f);
-            result.w = (q1.w*0.5f + q2.w*0.5f);
-        }
-        else
-        {
-            float ratioA = sinf((1 - amount)*halfTheta)/sinHalfTheta;
-            float ratioB = sinf(amount*halfTheta)/sinHalfTheta;
-
-            result.x = (q1.x*ratioA + q2.x*ratioB);
-            result.y = (q1.y*ratioA + q2.y*ratioB);
-            result.z = (q1.z*ratioA + q2.z*ratioB);
-            result.w = (q1.w*ratioA + q2.w*ratioB);
-        }
-    }
-
-    return result;
-}
-
-// Calculate quaternion based on the rotation from one vector to another
-RMDEF Quaternion QuaternionFromVector3ToVector3(Vector3 from, Vector3 to)
-{
-    Quaternion result = { 0 };
-
-    float cos2Theta = Vector3DotProduct(from, to);
-    Vector3 cross = Vector3CrossProduct(from, to);
-
-    result.x = cross.x;
-    result.y = cross.y;
-    result.z = cross.y;
-    result.w = 1.0f + cos2Theta;     // NOTE: Added QuaternioIdentity()
-
-    // Normalize to essentially nlerp the original and identity to 0.5
-    result = QuaternionNormalize(result);
-
-    // Above lines are equivalent to:
-    //Quaternion result = QuaternionNlerp(q, QuaternionIdentity(), 0.5f);
-
-	return result;
-}
-
-// Returns a quaternion for a given rotation matrix
-RMDEF Quaternion QuaternionFromMatrix(Matrix mat)
-{
-    Quaternion result = { 0 };
-
-    float trace = MatrixTrace(mat);
-
-    if (trace > 0.0f)
-    {
-        float s = (float)sqrt(trace + 1)*2.0f;
-        float invS = 1.0f/s;
-
-        result.w = s*0.25f;
-        result.x = (mat.m6 - mat.m9)*invS;
-        result.y = (mat.m8 - mat.m2)*invS;
-        result.z = (mat.m1 - mat.m4)*invS;
-    }
-    else
-    {
-        float m00 = mat.m0, m11 = mat.m5, m22 = mat.m10;
-
-        if (m00 > m11 && m00 > m22)
-        {
-            float s = (float)sqrt(1.0f + m00 - m11 - m22)*2.0f;
-            float invS = 1.0f/s;
-
-            result.w = (mat.m6 - mat.m9)*invS;
-            result.x = s*0.25f;
-            result.y = (mat.m4 + mat.m1)*invS;
-            result.z = (mat.m8 + mat.m2)*invS;
-        }
-        else if (m11 > m22)
-        {
-            float s = (float)sqrt(1.0f + m11 - m00 - m22)*2.0f;
-            float invS = 1.0f/s;
-
-            result.w = (mat.m8 - mat.m2)*invS;
-            result.x = (mat.m4 + mat.m1)*invS;
-            result.y = s*0.25f;
-            result.z = (mat.m9 + mat.m6)*invS;
-        }
-        else
-        {
-            float s = (float)sqrt(1.0f + m22 - m00 - m11)*2.0f;
-            float invS = 1.0f/s;
-
-            result.w = (mat.m1 - mat.m4)*invS;
-            result.x = (mat.m8 + mat.m2)*invS;
-            result.y = (mat.m9 + mat.m6)*invS;
-            result.z = s*0.25f;
-        }
-    }
-
-    return result;
-}
-
-// Returns a matrix for a given quaternion
-RMDEF Matrix QuaternionToMatrix(Quaternion q)
-{
-    Matrix result = { 0 };
-
-    float x = q.x, y = q.y, z = q.z, w = q.w;
-
-    float x2 = x + x;
-    float y2 = y + y;
-    float z2 = z + z;
-
-    float length = QuaternionLength(q);
-    float lengthSquared = length*length;
-
-    float xx = x*x2/lengthSquared;
-    float xy = x*y2/lengthSquared;
-    float xz = x*z2/lengthSquared;
-
-    float yy = y*y2/lengthSquared;
-    float yz = y*z2/lengthSquared;
-    float zz = z*z2/lengthSquared;
-
-    float wx = w*x2/lengthSquared;
-    float wy = w*y2/lengthSquared;
-    float wz = w*z2/lengthSquared;
-
-    result.m0 = 1.0f - (yy + zz);
-    result.m1 = xy - wz;
-    result.m2 = xz + wy;
-    result.m3 = 0.0f;
-    result.m4 = xy + wz;
-    result.m5 = 1.0f - (xx + zz);
-    result.m6 = yz - wx;
-    result.m7 = 0.0f;
-    result.m8 = xz - wy;
-    result.m9 = yz + wx;
-    result.m10 = 1.0f - (xx + yy);
-    result.m11 = 0.0f;
-    result.m12 = 0.0f;
-    result.m13 = 0.0f;
-    result.m14 = 0.0f;
-    result.m15 = 1.0f;
-
-    return result;
-}
-
-// Returns rotation quaternion for an angle and axis
-// NOTE: angle must be provided in radians
-RMDEF Quaternion QuaternionFromAxisAngle(Vector3 axis, float angle)
-{
-    Quaternion result = { 0.0f, 0.0f, 0.0f, 1.0f };
-
-    if (Vector3Length(axis) != 0.0f)
-
-    angle *= 0.5f;
-
-    axis = Vector3Normalize(axis);
-
-    float sinres = sinf(angle);
-    float cosres = cosf(angle);
-
-    result.x = axis.x*sinres;
-    result.y = axis.y*sinres;
-    result.z = axis.z*sinres;
-    result.w = cosres;
-
-    result = QuaternionNormalize(result);
-
-    return result;
-}
-
-// Returns the rotation angle and axis for a given quaternion
-RMDEF void QuaternionToAxisAngle(Quaternion q, Vector3 *outAxis, float *outAngle)
-{
-    if (fabs(q.w) > 1.0f) q = QuaternionNormalize(q);
-
-    Vector3 resAxis = { 0.0f, 0.0f, 0.0f };
-    float resAngle = 0.0f;
-
-    resAngle = 2.0f*(float)acos(q.w);
-    float den = (float)sqrt(1.0f - q.w*q.w);
-
-    if (den > 0.0001f)
-    {
-        resAxis.x = q.x/den;
-        resAxis.y = q.y/den;
-        resAxis.z = q.z/den;
-    }
-    else
-    {
-        // This occurs when the angle is zero.
-        // Not a problem: just set an arbitrary normalized axis.
-        resAxis.x = 1.0f;
-    }
-
-    *outAxis = resAxis;
-    *outAngle = resAngle;
-}
-
-// Returns he quaternion equivalent to Euler angles
-RMDEF Quaternion QuaternionFromEuler(float roll, float pitch, float yaw)
-{
-	Quaternion q = { 0 };
-
-	float x0 = cosf(roll*0.5f);
-	float x1 = sinf(roll*0.5f);
-	float y0 = cosf(pitch*0.5f);
-	float y1 = sinf(pitch*0.5f);
-	float z0 = cosf(yaw*0.5f);
-	float z1 = sinf(yaw*0.5f);
-
-	q.x = x1*y0*z0 - x0*y1*z1;
-	q.y = x0*y1*z0 + x1*y0*z1;
-	q.z = x0*y0*z1 - x1*y1*z0;
-	q.w = x0*y0*z0 + x1*y1*z1;
-
-	return q;
-}
-
-// Return the Euler angles equivalent to quaternion (roll, pitch, yaw)
-// NOTE: Angles are returned in a Vector3 struct in degrees
-RMDEF Vector3 QuaternionToEuler(Quaternion q)
-{
-    Vector3 result = { 0 };
-
-	// roll (x-axis rotation)
-	float x0 = 2.0f*(q.w*q.x + q.y*q.z);
-	float x1 = 1.0f - 2.0f*(q.x*q.x + q.y*q.y);
-	result.x = atan2f(x0, x1)*RAD2DEG;
-
-	// pitch (y-axis rotation)
-	float y0 = 2.0f*(q.w*q.y - q.z*q.x);
-	y0 = y0 > 1.0f ? 1.0f : y0;
-	y0 = y0 < -1.0f ? -1.0f : y0;
-	result.y = asinf(y0)*RAD2DEG;
-
-	// yaw (z-axis rotation)
-	float z0 = 2.0f*(q.w*q.z + q.x*q.y);
-	float z1 = 1.0f - 2.0f*(q.y*q.y + q.z*q.z);
-	result.z = atan2f(z0, z1)*RAD2DEG;
-
-    return result;
-}
-
-// Transform a quaternion given a transformation matrix
-RMDEF Quaternion QuaternionTransform(Quaternion q, Matrix mat)
-{
-    Quaternion result = { 0 };
-
-    result.x = mat.m0*q.x + mat.m4*q.y + mat.m8*q.z + mat.m12*q.w;
-    result.y = mat.m1*q.x + mat.m5*q.y + mat.m9*q.z + mat.m13*q.w;
-    result.z = mat.m2*q.x + mat.m6*q.y + mat.m10*q.z + mat.m14*q.w;
-    result.w = mat.m3*q.x + mat.m7*q.y + mat.m11*q.z + mat.m15*q.w;
-
-    return result;
-}
-
-#endif  // RAYMATH_H

BIN
games/cat_vs_roomba/resources/cat.png


BIN
games/cat_vs_roomba/resources/cat_mouse.mod


BIN
games/cat_vs_roomba/resources/catch22.mod


BIN
games/cat_vs_roomba/resources/coin.wav


+ 0 - 16
games/cat_vs_roomba/resources/collisions.txt

@@ -1,16 +0,0 @@
-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,
-1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,0,0,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-0,0,1,1,1,1,2,2,2,1,1,1,0,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-0,0,1,1,1,1,2,2,2,1,1,1,0,0,1,1,1,2,2,2,1,1,1,1,0,0,1,1,1,1,0,0,
-0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,0,0,1,1,1,1,0,0,
-0,0,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,
-1,1,1,1,2,2,2,2,2,2,2,2,0,0,1,1,1,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,
-1,1,1,1,2,2,2,2,2,2,2,2,0,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,1,2,2,2,2,2,2,1,1,
-0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,2,2,2,2,2,2,1,1,
-0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,
-0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,
-0,0,0,0,0,0,0,0,0,0,2,2,2,0,0,0,0,1,1,0,0,1,2,2,2,2,2,2,2,2,0,0

BIN
games/cat_vs_roomba/resources/dirtiles.png


BIN
games/cat_vs_roomba/resources/dyson.png


+ 0 - 34
games/cat_vs_roomba/resources/furmap.txt

@@ -1,34 +0,0 @@
-.furniture
-.state: 0-Block, 1-Alpha, 2-Breakable
-.f setId cellX cellY state counter
-.puff and sits
-f 3 0 4 0 0
-f 3 13 0 0 0
-f 3 22 0 0 0
-f 3 21 11 0 0
-f 2 19 15 0 0
-f 2 30 5 0 0
-f 4 12 4 0 0
-.wood pieces
-f 26 3 0 0 0
-f 27 4 10 0 0
-f 27 24 7 0 0
-f 17 30 15 0 0
-.kitchen
-f 11 0 15 0 0
-f 13 0 12 0 0
-.sofa and bed (alpha)
-f 14 4 7 1 0
-f 10 24 11 1 0
-.glass and tables (alpha)
-f 9 17 4 1 0
-f 16 6 4 1 0
-f 16 10 15 1 0
-f 15 22 15 1 0
-.plants (breakable)
-f 6 0 6 2 1800
-f 6 12 10 2 1800
-f 7 17 0 2 1200
-f 7 15 15 2 1200
-f 8 13 15 2 2000
-f 8 24 5 2 2000

BIN
games/cat_vs_roomba/resources/furniture.png


+ 0 - 37
games/cat_vs_roomba/resources/furset.txt

@@ -1,37 +0,0 @@
-.tileset
-.first line
-f 0 0 0 2 2
-f 1 2 0 2 2
-f 2 4 0 2 2
-f 3 6 0 2 2
-f 4 8 0 2 2
-f 5 10 0 2 2
-f 6 12 0 2 2
-f 7 14 0 2 2
-f 8 16 0 2 2
-f 9 18 0 5 6
-f 10 23 0 6 6
-.second line
-f 11 0 2 10 2
-f 12 10 2 7 3
-.third line
-f 13 0 4 2 3
-f 14 2 4 8 3
-f 15 10 5 2 2
-f 16 12 5 3 2
-f 17 15 5 2 2
-.cups
-f 18 17 6 1 1
-f 19 18 6 1 1
-f 20 19 6 1 1
-f 21 20 6 1 1
-f 22 21 6 1 1
-f 23 22 6 1 1
-f 24 23 6 1 1
-f 25 24 6 1 1
-.four line
-f 26 0 7 10 2
-f 27 10 7 8 2
-f 28 18 7 3 2
-f 29 21 7 3 2
-f 30 24 7 2 2

BIN
games/cat_vs_roomba/resources/fursetid.png


BIN
games/cat_vs_roomba/resources/fxcat01.wav


BIN
games/cat_vs_roomba/resources/fxcat02.wav


BIN
games/cat_vs_roomba/resources/fxrobot01.wav


BIN
games/cat_vs_roomba/resources/fxrobot02.wav


BIN
games/cat_vs_roomba/resources/fxrobot03.wav


BIN
games/cat_vs_roomba/resources/roomba.png


+ 0 - 139
games/cat_vs_roomba/resources/star.fnt

@@ -1,139 +0,0 @@
-info face="Starcatcher" size=-64 bold=0 italic=0 charset="ANSI" unicode=0 stretchH=100 smooth=1 aa=1 padding=4,4,4,4 spacing=1,1 outline=0
-common lineHeight=63 base=50 scaleW=512 scaleH=512 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
-page id=0 file="star.png"
-chars count=135
-char id=32   x=416   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=33   x=347   y=360   width=17    height=71    xoffset=-4    yoffset=-4    xadvance=9     page=0  chnl=15
-char id=35   x=183   y=0     width=48    height=71    xoffset=-4    yoffset=-4    xadvance=40    page=0  chnl=15
-char id=36   x=328   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=37   x=67    y=0     width=62    height=71    xoffset=-4    yoffset=-4    xadvance=55    page=0  chnl=15
-char id=38   x=488   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=39   x=266   y=360   width=21    height=71    xoffset=-4    yoffset=-4    xadvance=13    page=0  chnl=15
-char id=40   x=471   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=41   x=387   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=42   x=415   y=0     width=42    height=71    xoffset=-4    yoffset=-4    xadvance=34    page=0  chnl=15
-char id=43   x=403   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=44   x=309   y=360   width=18    height=71    xoffset=-4    yoffset=-4    xadvance=10    page=0  chnl=15
-char id=45   x=82    y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=46   x=365   y=360   width=16    height=71    xoffset=-4    yoffset=-4    xadvance=7     page=0  chnl=15
-char id=47   x=155   y=288   width=29    height=71    xoffset=-4    yoffset=-4    xadvance=21    page=0  chnl=15
-char id=48   x=38    y=144   width=36    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=49   x=188   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=50   x=339   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=51   x=0     y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=52   x=35    y=216   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=53   x=105   y=216   width=33    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=54   x=207   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=55   x=433   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=56   x=468   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=57   x=0     y=216   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=58   x=399   y=360   width=16    height=71    xoffset=-4    yoffset=-4    xadvance=7     page=0  chnl=15
-char id=59   x=328   y=360   width=18    height=71    xoffset=-4    yoffset=-4    xadvance=10    page=0  chnl=15
-char id=60   x=185   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=61   x=371   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=62   x=221   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=63   x=398   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=25    page=0  chnl=15
-char id=64   x=130   y=0     width=52    height=71    xoffset=-4    yoffset=-4    xadvance=44    page=0  chnl=15
-char id=65   x=445   y=72    width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=66   x=209   y=72    width=40    height=71    xoffset=-4    yoffset=-4    xadvance=32    page=0  chnl=15
-char id=67   x=173   y=216   width=33    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=68   x=250   y=72    width=39    height=71    xoffset=-4    yoffset=-4    xadvance=31    page=0  chnl=15
-char id=69   x=306   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=70   x=149   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=71   x=112   y=144   width=36    height=71    xoffset=-4    yoffset=-4    xadvance=28    page=0  chnl=15
-char id=72   x=458   y=0     width=42    height=71    xoffset=-4    yoffset=-4    xadvance=34    page=0  chnl=15
-char id=73   x=288   y=360   width=20    height=71    xoffset=-4    yoffset=-4    xadvance=12    page=0  chnl=15
-char id=74   x=257   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=75   x=0     y=144   width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=76   x=139   y=216   width=33    height=71    xoffset=-4    yoffset=-4    xadvance=25    page=0  chnl=15
-char id=77   x=85    y=72    width=41    height=71    xoffset=-4    yoffset=-4    xadvance=33    page=0  chnl=15
-char id=78   x=371   y=0     width=43    height=71    xoffset=-4    yoffset=-4    xadvance=35    page=0  chnl=15
-char id=79   x=168   y=72    width=40    height=71    xoffset=-4    yoffset=-4    xadvance=31    page=0  chnl=15
-char id=80   x=75    y=144   width=36    height=71    xoffset=-4    yoffset=-4    xadvance=28    page=0  chnl=15
-char id=81   x=280   y=0     width=45    height=71    xoffset=-4    yoffset=-4    xadvance=37    page=0  chnl=15
-char id=82   x=369   y=72    width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=83   x=70    y=216   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=84   x=43    y=72    width=41    height=71    xoffset=-4    yoffset=-4    xadvance=33    page=0  chnl=15
-char id=85   x=0     y=72    width=42    height=71    xoffset=-4    yoffset=-4    xadvance=34    page=0  chnl=15
-char id=86   x=326   y=0     width=44    height=71    xoffset=-4    yoffset=-4    xadvance=36    page=0  chnl=15
-char id=87   x=232   y=0     width=47    height=71    xoffset=-4    yoffset=-4    xadvance=39    page=0  chnl=15
-char id=88   x=127   y=72    width=40    height=71    xoffset=-4    yoffset=-4    xadvance=33    page=0  chnl=15
-char id=89   x=290   y=72    width=39    height=71    xoffset=-4    yoffset=-4    xadvance=31    page=0  chnl=15
-char id=90   x=330   y=72    width=38    height=71    xoffset=-4    yoffset=-4    xadvance=30    page=0  chnl=15
-char id=91   x=499   y=288   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=92   x=109   y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=93   x=499   y=216   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=97   x=302   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=98   x=415   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=99   x=136   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=100  x=124   y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=101  x=162   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=102  x=443   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=103  x=0     y=360   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=104  x=240   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=105  x=382   y=360   width=16    height=71    xoffset=-4    yoffset=-4    xadvance=8     page=0  chnl=15
-char id=106  x=359   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=107  x=483   y=72    width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=108  x=55    y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=109  x=435   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=110  x=273   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=111  x=31    y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=112  x=331   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=113  x=363   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=114  x=273   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=115  x=28    y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=116  x=62    y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=117  x=93    y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=118  x=467   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=119  x=293   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=120  x=185   y=288   width=29    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=121  x=215   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=122  x=244   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=123  x=428   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=124  x=440   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=125  x=452   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=126  x=0     y=0     width=66    height=71    xoffset=-4    yoffset=-4    xadvance=58    page=0  chnl=15
-char id=162  x=464   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=163  x=407   y=72    width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=167  x=476   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=171  x=214   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=187  x=240   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=191  x=500   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=192  x=0     y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=193  x=12    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=194  x=24    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=196  x=36    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=199  x=48    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=200  x=60    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=201  x=72    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=202  x=84    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=203  x=96    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=206  x=108   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=207  x=120   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=209  x=132   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=211  x=144   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=212  x=156   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=214  x=168   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=217  x=180   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=218  x=192   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=219  x=204   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=220  x=216   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=223  x=228   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=224  x=240   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=225  x=252   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=226  x=264   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=228  x=276   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=231  x=288   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=232  x=300   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=233  x=312   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=234  x=324   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=235  x=336   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=238  x=348   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=239  x=360   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=243  x=372   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=244  x=384   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=246  x=396   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=249  x=408   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=250  x=420   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=251  x=432   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=252  x=444   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15

BIN
games/cat_vs_roomba/resources/star.png


+ 0 - 139
games/cat_vs_roomba/resources/star2.fnt

@@ -1,139 +0,0 @@
-info face="Starcatcher" size=-64 bold=0 italic=0 charset="ANSI" unicode=0 stretchH=100 smooth=1 aa=1 padding=4,4,4,4 spacing=1,1 outline=0
-common lineHeight=63 base=50 scaleW=512 scaleH=512 pages=1 packed=0 alphaChnl=0 redChnl=4 greenChnl=4 blueChnl=4
-page id=0 file="star2.png"
-chars count=135
-char id=32   x=416   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=33   x=347   y=360   width=17    height=71    xoffset=-4    yoffset=-4    xadvance=9     page=0  chnl=15
-char id=35   x=183   y=0     width=48    height=71    xoffset=-4    yoffset=-4    xadvance=40    page=0  chnl=15
-char id=36   x=328   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=37   x=67    y=0     width=62    height=71    xoffset=-4    yoffset=-4    xadvance=55    page=0  chnl=15
-char id=38   x=488   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=39   x=266   y=360   width=21    height=71    xoffset=-4    yoffset=-4    xadvance=13    page=0  chnl=15
-char id=40   x=471   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=41   x=387   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=42   x=415   y=0     width=42    height=71    xoffset=-4    yoffset=-4    xadvance=34    page=0  chnl=15
-char id=43   x=403   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=44   x=309   y=360   width=18    height=71    xoffset=-4    yoffset=-4    xadvance=10    page=0  chnl=15
-char id=45   x=82    y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=46   x=365   y=360   width=16    height=71    xoffset=-4    yoffset=-4    xadvance=7     page=0  chnl=15
-char id=47   x=155   y=288   width=29    height=71    xoffset=-4    yoffset=-4    xadvance=21    page=0  chnl=15
-char id=48   x=38    y=144   width=36    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=49   x=188   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=50   x=339   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=51   x=0     y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=52   x=35    y=216   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=53   x=105   y=216   width=33    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=54   x=207   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=55   x=433   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=56   x=468   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=57   x=0     y=216   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=58   x=399   y=360   width=16    height=71    xoffset=-4    yoffset=-4    xadvance=7     page=0  chnl=15
-char id=59   x=328   y=360   width=18    height=71    xoffset=-4    yoffset=-4    xadvance=10    page=0  chnl=15
-char id=60   x=185   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=61   x=371   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=62   x=221   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=63   x=398   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=25    page=0  chnl=15
-char id=64   x=130   y=0     width=52    height=71    xoffset=-4    yoffset=-4    xadvance=44    page=0  chnl=15
-char id=65   x=445   y=72    width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=66   x=209   y=72    width=40    height=71    xoffset=-4    yoffset=-4    xadvance=32    page=0  chnl=15
-char id=67   x=173   y=216   width=33    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=68   x=250   y=72    width=39    height=71    xoffset=-4    yoffset=-4    xadvance=31    page=0  chnl=15
-char id=69   x=306   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=70   x=149   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=71   x=112   y=144   width=36    height=71    xoffset=-4    yoffset=-4    xadvance=28    page=0  chnl=15
-char id=72   x=458   y=0     width=42    height=71    xoffset=-4    yoffset=-4    xadvance=34    page=0  chnl=15
-char id=73   x=288   y=360   width=20    height=71    xoffset=-4    yoffset=-4    xadvance=12    page=0  chnl=15
-char id=74   x=257   y=144   width=35    height=71    xoffset=-4    yoffset=-4    xadvance=27    page=0  chnl=15
-char id=75   x=0     y=144   width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=76   x=139   y=216   width=33    height=71    xoffset=-4    yoffset=-4    xadvance=25    page=0  chnl=15
-char id=77   x=85    y=72    width=41    height=71    xoffset=-4    yoffset=-4    xadvance=33    page=0  chnl=15
-char id=78   x=371   y=0     width=43    height=71    xoffset=-4    yoffset=-4    xadvance=35    page=0  chnl=15
-char id=79   x=168   y=72    width=40    height=71    xoffset=-4    yoffset=-4    xadvance=31    page=0  chnl=15
-char id=80   x=75    y=144   width=36    height=71    xoffset=-4    yoffset=-4    xadvance=28    page=0  chnl=15
-char id=81   x=280   y=0     width=45    height=71    xoffset=-4    yoffset=-4    xadvance=37    page=0  chnl=15
-char id=82   x=369   y=72    width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=83   x=70    y=216   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=84   x=43    y=72    width=41    height=71    xoffset=-4    yoffset=-4    xadvance=33    page=0  chnl=15
-char id=85   x=0     y=72    width=42    height=71    xoffset=-4    yoffset=-4    xadvance=34    page=0  chnl=15
-char id=86   x=326   y=0     width=44    height=71    xoffset=-4    yoffset=-4    xadvance=36    page=0  chnl=15
-char id=87   x=232   y=0     width=47    height=71    xoffset=-4    yoffset=-4    xadvance=39    page=0  chnl=15
-char id=88   x=127   y=72    width=40    height=71    xoffset=-4    yoffset=-4    xadvance=33    page=0  chnl=15
-char id=89   x=290   y=72    width=39    height=71    xoffset=-4    yoffset=-4    xadvance=31    page=0  chnl=15
-char id=90   x=330   y=72    width=38    height=71    xoffset=-4    yoffset=-4    xadvance=30    page=0  chnl=15
-char id=91   x=499   y=288   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=92   x=109   y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=93   x=499   y=216   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=97   x=302   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=98   x=415   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=99   x=136   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=100  x=124   y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=101  x=162   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=102  x=443   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=103  x=0     y=360   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=104  x=240   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=105  x=382   y=360   width=16    height=71    xoffset=-4    yoffset=-4    xadvance=8     page=0  chnl=15
-char id=106  x=359   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=107  x=483   y=72    width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=108  x=55    y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=109  x=435   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=110  x=273   y=216   width=32    height=71    xoffset=-4    yoffset=-4    xadvance=24    page=0  chnl=15
-char id=111  x=31    y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=112  x=331   y=288   width=27    height=71    xoffset=-4    yoffset=-4    xadvance=19    page=0  chnl=15
-char id=113  x=363   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=114  x=273   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=115  x=28    y=360   width=26    height=71    xoffset=-4    yoffset=-4    xadvance=18    page=0  chnl=15
-char id=116  x=62    y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=117  x=93    y=288   width=30    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=118  x=467   y=216   width=31    height=71    xoffset=-4    yoffset=-4    xadvance=23    page=0  chnl=15
-char id=119  x=293   y=144   width=34    height=71    xoffset=-4    yoffset=-4    xadvance=26    page=0  chnl=15
-char id=120  x=185   y=288   width=29    height=71    xoffset=-4    yoffset=-4    xadvance=22    page=0  chnl=15
-char id=121  x=215   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=122  x=244   y=288   width=28    height=71    xoffset=-4    yoffset=-4    xadvance=20    page=0  chnl=15
-char id=123  x=428   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=124  x=440   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=125  x=452   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=126  x=0     y=0     width=66    height=71    xoffset=-4    yoffset=-4    xadvance=58    page=0  chnl=15
-char id=162  x=464   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=163  x=407   y=72    width=37    height=71    xoffset=-4    yoffset=-4    xadvance=29    page=0  chnl=15
-char id=167  x=476   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=171  x=214   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=187  x=240   y=360   width=25    height=71    xoffset=-4    yoffset=-4    xadvance=17    page=0  chnl=15
-char id=191  x=500   y=360   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=192  x=0     y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=193  x=12    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=194  x=24    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=196  x=36    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=199  x=48    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=200  x=60    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=201  x=72    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=202  x=84    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=203  x=96    y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=206  x=108   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=207  x=120   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=209  x=132   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=211  x=144   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=212  x=156   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=214  x=168   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=217  x=180   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=218  x=192   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=219  x=204   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=220  x=216   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=223  x=228   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=224  x=240   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=225  x=252   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=226  x=264   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=228  x=276   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=231  x=288   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=232  x=300   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=233  x=312   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=234  x=324   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=235  x=336   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=238  x=348   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=239  x=360   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=243  x=372   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=244  x=384   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=246  x=396   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=249  x=408   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=250  x=420   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=251  x=432   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15
-char id=252  x=444   y=432   width=11    height=71    xoffset=-5    yoffset=-4    xadvance=1     page=0  chnl=15

BIN
games/cat_vs_roomba/resources/star2.png


BIN
games/cat_vs_roomba/resources/title_cat.png


BIN
games/cat_vs_roomba/resources/title_roomba.png


BIN
games/cat_vs_roomba/resources/title_vs.png


BIN
games/cat_vs_roomba/resources/tracemap.png


+ 0 - 291
games/cat_vs_roomba/roomba.c

@@ -1,291 +0,0 @@
-/*******************************************************************************************
-*
-*   CAT VS ROOMBA [GLOBAL GAME JAM 2019]
-*
-*   Ah! Home, sweet home! Time for some automatic cleaning... 
-*   if the worst enemy of Roomba allows it... be careful with Cat!
-*
-*   This game has been created using raylib 2.0 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2019 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include "screens/screens.h"    // NOTE: Defines global variable: currentScreen
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-GameScreen currentScreen = 0;
-Font font = { 0 };
-Font font2 = { 0 };
-Music music = { 0 };
-Sound fxCoin = { 0 };
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-const int screenWidth = 1280;
-#if defined(TILE_VIEWER_MODE)
-const int screenHeight = 1080;
-#else
-const int screenHeight = 720;
-#endif
-
-// Required variables to manage screen transitions (fade-in, fade-out)
-static float transAlpha = 0.0f;
-static bool onTransition = false;
-static bool transFadeOut = false;
-static int transFromScreen = -1;
-static int transToScreen = -1;
-
-// NOTE: Some global variables that require to be visible for all screens,
-// are defined in screens.h (i.e. currentScreen)
-    
-//----------------------------------------------------------------------------------
-// Local Functions Declaration
-//----------------------------------------------------------------------------------
-static void ChangeToScreen(int screen);     // No transition effect
-
-static void TransitionToScreen(int screen);
-static void UpdateTransition(void);
-static void DrawTransition(void);
-
-static void UpdateDrawFrame(void);          // Update and Draw one frame
-
-//----------------------------------------------------------------------------------
-// Main entry point
-//----------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "CAT VS ROOMBA [GGJ19]");
-
-    // Global data loading (assets that must be available in all screens, i.e. fonts)
-    InitAudioDevice();
-
-    font = LoadFont("resources/star.fnt");
-    font2 = LoadFont("resources/star2.fnt");
-    music = LoadMusicStream("resources/cat_mouse.mod");
-    fxCoin = LoadSound("resources/coin.wav");
-    
-    SetMusicVolume(music, 1.0f);
-    PlayMusicStream(music);
-
-    // Setup and Init first screen
-    currentScreen = LOGO;
-    InitLogoScreen();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);   // Set our game to run at 60 frames-per-second
-    //--------------------------------------------------------------------------------------
-
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        UpdateDrawFrame();
-    }
-#endif
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload current screen data before closing
-    switch (currentScreen)
-    {
-        case LOGO: UnloadLogoScreen(); break;
-        case TITLE: UnloadTitleScreen(); break;
-        case GAMEPLAY: UnloadGameplayScreen(); break;
-        case ENDING: UnloadEndingScreen(); break;
-        default: break;
-    }
-    
-    // Unload all global loaded data (i.e. fonts) here!
-    UnloadFont(font);
-    UnloadFont(font2);
-    UnloadMusicStream(music);
-    UnloadSound(fxCoin);
-
-    CloseAudioDevice();     // Close audio context
-    
-    CloseWindow();          // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//----------------------------------------------------------------------------------
-// Module specific Functions Definition
-//----------------------------------------------------------------------------------
-
-// Change to next screen, no transition
-static void ChangeToScreen(int screen)
-{
-    // Unload current screen
-    switch (currentScreen)
-    {
-        case LOGO: UnloadLogoScreen(); break;
-        case TITLE: UnloadTitleScreen(); break;
-        case GAMEPLAY: UnloadGameplayScreen(); break;
-        case ENDING: UnloadEndingScreen(); break;
-        default: break;
-    }
-    
-    // Init next screen
-    switch (screen)
-    {
-        case LOGO: InitLogoScreen(); break;
-        case TITLE: InitTitleScreen(); break;
-        case GAMEPLAY: InitGameplayScreen(); break;
-        case ENDING: InitEndingScreen(); break;
-        default: break;
-    }
-    
-    currentScreen = screen;
-}
-
-// Define transition to next screen
-static void TransitionToScreen(int screen)
-{
-    onTransition = true;
-    transFadeOut = false;
-    transFromScreen = currentScreen;
-    transToScreen = screen;
-    transAlpha = 0.0f;
-}
-
-// Update transition effect
-static void UpdateTransition(void)
-{
-    if (!transFadeOut)
-    {
-        transAlpha += 0.02f;
-        
-        // NOTE: Due to float internal representation, condition jumps on 1.0f instead of 1.05f
-        // For that reason we compare against 1.01f, to avoid last frame loading stop
-        if (transAlpha > 1.01f)
-        {
-            transAlpha = 1.0f;
-        
-            // Unload current screen
-            switch (transFromScreen)
-            {
-                case LOGO: UnloadLogoScreen(); break;
-                case TITLE: UnloadTitleScreen(); break;
-                case GAMEPLAY: UnloadGameplayScreen(); break;
-                case ENDING: UnloadEndingScreen(); break;
-                default: break;
-            }
-            
-            // Load next screen
-            switch (transToScreen)
-            {
-                case LOGO: InitLogoScreen(); break;
-                case TITLE: InitTitleScreen(); break;
-                case GAMEPLAY: InitGameplayScreen(); break;
-                case ENDING: InitEndingScreen(); break;
-                default: break;
-            }
-            
-            currentScreen = transToScreen;
-            
-            // Activate fade out effect to next loaded screen
-            transFadeOut = true;
-        }
-    }
-    else  // Transition fade out logic
-    {
-        transAlpha -= 0.02f;
-        
-        if (transAlpha < -0.01f)
-        {
-            transAlpha = 0.0f;
-            transFadeOut = false;
-            onTransition = false;
-            transFromScreen = -1;
-            transToScreen = -1;
-        }
-    }
-}
-
-// Draw transition effect (full-screen rectangle)
-static void DrawTransition(void)
-{
-    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha));
-}
-
-// Update and draw game frame
-static void UpdateDrawFrame(void)
-{
-    // Update
-    //----------------------------------------------------------------------------------
-    UpdateMusicStream(music);       // NOTE: Music keeps playing between screens
-    
-    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 GAMEPLAY:
-            {
-                UpdateGameplayScreen();
-                
-                if (FinishGameplayScreen() == 1) TransitionToScreen(ENDING);
-                //else if (FinishGameplayScreen() == 2) TransitionToScreen(TITLE);
-
-            } break;
-            case ENDING:
-            { 
-                UpdateEndingScreen();
-                
-                if (FinishEndingScreen() == 1) TransitionToScreen(TITLE);
-
-            } break;
-            default: break;
-        }
-    }
-    else UpdateTransition();    // Update transition (fade-in, fade-out)
-    //----------------------------------------------------------------------------------
-    
-    // Draw
-    //----------------------------------------------------------------------------------
-    BeginDrawing();
-        
-        ClearBackground(RAYWHITE);
-            
-        switch(currentScreen) 
-        {
-            case LOGO: DrawLogoScreen(); break;
-            case TITLE: DrawTitleScreen(); break;
-            case GAMEPLAY: DrawGameplayScreen(); break;
-            case ENDING: DrawEndingScreen(); break;
-            default: break;
-        }
-         
-        // Draw full screen rectangle in front of everything
-        if (onTransition) DrawTransition();
-        
-        //DrawFPS(10, 10);
-        
-    EndDrawing();
-    //----------------------------------------------------------------------------------
-}

+ 0 - 96
games/cat_vs_roomba/screens/screen_ending.c

@@ -1,96 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Advance Game template
-*
-*   Ending Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
-*
-*   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;
-
-static int scrollPositionX;
-
-//----------------------------------------------------------------------------------
-// Ending Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Ending Screen Initialization logic
-void InitEndingScreen(void)
-{
-    // TODO: Initialize ENDING screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    PlayMusicStream(music);
-}
-
-// Ending Screen Update logic
-void UpdateEndingScreen(void)
-{
-    framesCounter++;
-    
-    scrollPositionX -= 5;
-    if (scrollPositionX < -GetScreenWidth()) scrollPositionX = 0;
-
-    // Press enter or tap to return to TITLE screen
-    if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
-    {
-        finishScreen = 1;
-        PlaySound(fxCoin);
-    }
-}
-
-// Ending Screen Draw logic
-void DrawEndingScreen(void)
-{
-    for (int i = 0; i < 64*2*2; i++)
-    {
-        DrawRectangle(64*i + scrollPositionX, 0, 64, GetScreenHeight(), (i%2 == 0)? GetColor(0xf3726dff) : GetColor(0xffcf6bff));
-    }
-    
-    if (result == 0) DrawTextEx(font2, "YOU LOOSE...", (Vector2){ 350, 200 }, font2.baseSize*2, 2, WHITE);
-    else if (result == 1) DrawTextEx(font, "YOU WIN!!!", (Vector2){ 380, 200 }, font.baseSize*2, 2, WHITE);
-    
-    // Draw score
-    DrawTextEx(font, FormatText("FINAL SCORE: %i", score), (Vector2){ 400, 360 }, font2.baseSize, 2, WHITE);
-    
-    if ((framesCounter/30)%2) DrawTextEx(font2, "PRESS ENTER to TITLE", (Vector2){ 340, 550 }, font2.baseSize, 2, WHITE);
-}
-
-// Ending Screen Unload logic
-void UnloadEndingScreen(void)
-{
-    // TODO: Unload ENDING screen variables here!
-}
-
-// Ending Screen should finish?
-int FinishEndingScreen(void)
-{
-    return finishScreen;
-}

+ 0 - 652
games/cat_vs_roomba/screens/screen_gameplay.c

@@ -1,652 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Advance Game template
-*
-*   Gameplay Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
-*
-*   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"
-
-#include "raymath.h"
-
-#include <stdio.h>
-
-#define TILE_REQUIRED_CLEAN_TIME        2           // Frames it takes to clean a dirt level
-#define TILE_SCORE_BY_CLEANED_LEVEL     100         // Score by cleanied dirt level
-#define TILE_REQUIRED_CLEAN_AREA        28*28       // Required are for actually cleaning tile
-
-#define TILE_SIZE               36      // Tile size, it should match texture
-#define MAX_TILES_X             32
-#define MAX_TILES_Y             17
-
-#define CAT_TARGET_RADIUS       3       // Target proximity radius
-#define CAT_DIRT_CELL_RADIUS    2       // Cells around cat for dirt spreading
-
-#define TIME_LIMIT_SECONDS      180     // Time to complete the level in seconds
-
-#define MAX_SCORE_POPUPS        60      // Maximum simultaneous score pop-ups!
-
-//----------------------------------------------------------------------------------
-// Module types
-//----------------------------------------------------------------------------------
-// One dirt tile type
-typedef struct {
-    Vector2 position;       // Relative to top-left corner
-    int level;              // Dirtiness: 0-Clean, 1-2-3-Dirt levels
-    int state;              // Current dirtiness state
-    int counter;            // Frames counter for cleaning
-    //int time;               // Time it takes to make it clean --> Depends on level
-    //int score;              // It depends on the dirt level
-    bool cleaned;           // If it was cleaned (not clean by default)
-} Dirtile;
-
-// Score poping-up type
-typedef struct {
-    Vector2 position;
-    int value;
-    float alpha;
-    bool enabled;
-} ScorePopup;
-
-// Furniture tile set
-typedef struct {
-    int id;             // Furniture tile id
-    int posX;           // Position X on tileset
-    int posY;           // Position Y on tileset
-    int width;          // Furniture piece width
-    int height;         // Furniture piece height
-} FurSet;
-
-// Furniture type
-typedef struct {
-    int furId;          // Tileset id
-    int cellX;          // Cell position X
-    int cellY;          // Cell position Y
-    int state;          // 0-Block, 1-Alpha, 2-Breakable
-    int counter;        // Counter in case of break
-} Furniture;
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-
-// Gameplay screen global variables
-static int framesCounter;
-static int timeLevelSeconds;
-static bool levelFinished;
-static int finishScreen;
-
-const Vector2 roomOffset = { 70, 70 };
-
-static Texture2D roomba;
-static Texture2D cat;
-static Texture2D dirtiles;
-static Texture2D furniture;
-
-#if defined(TILE_VIEWER_MODE)
-static Texture2D tracemap;
-static Texture2D fursetid;
-#endif
-
-static Music catch;
-
-static Sound fxCat[2];
-static Sound fxRoomba[3];
-
-static Vector2 roombaPosition = { 100, 100 };
-static Vector2 roombaSpeed = { 4, 4 };
-static int roombaTilePosX = 0, roombaTilePosY = 0;
-
-static Vector2 catPosition = { 0, 0 };
-static Vector2 catTargetPosition = { 0, 0 };
-static Vector2 catSpeed = { 3, 3 };
-static int catTilePosX = 0, catTilePosY = 0;
-static bool catShouldMove = false;
-
-static Vector2 mousePosition = { 0, 0 };
-static int mouseTileX = -1, mouseTileY = -1;
-
-static Dirtile tiles[MAX_TILES_X*MAX_TILES_Y] = { 0 };
-
-static ScorePopup popup[MAX_SCORE_POPUPS] = { 0 };
-
-static FurSet furset[32] = { -1 };
-static Furniture furmap[40] = { -1 };
-static int furnitureCount = 0;
-
-// Furniture collisions map
-// 0-block, 1-normal, 2-alpha, 3-breakable
-static int furcolmap[MAX_TILES_X*MAX_TILES_Y] = {
-    1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,3,3,1,1,1,0,0,1,1,1,1,1,1,1,1,
-    1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,1,1,3,3,1,1,1,0,0,1,1,1,1,1,1,1,1,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    0,0,1,1,1,1,2,2,2,1,1,1,0,0,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-    0,0,1,1,1,1,2,2,2,1,1,1,0,0,1,1,1,2,2,2,1,1,1,1,3,3,1,1,1,1,0,0,
-    3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,1,1,1,3,3,1,1,1,1,0,0,
-    3,3,1,1,2,2,2,2,2,2,2,2,1,1,1,1,2,2,2,2,2,1,1,1,0,0,0,0,0,0,0,0,
-    1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,1,1,1,1,0,0,0,0,0,0,0,0,
-    1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,2,2,2,1,1,1,1,1,1,1,1,1,1,1,1,
-    1,1,1,1,0,0,0,0,0,0,0,0,3,3,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
-    1,1,1,1,0,0,0,0,0,0,0,0,3,3,1,1,1,1,1,1,1,0,0,1,2,2,2,2,2,2,1,1,
-    0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,1,2,2,2,2,2,2,1,1,
-    0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,
-    0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,1,1,
-    0,0,0,0,0,0,0,0,0,0,2,2,2,3,3,3,3,1,1,0,0,1,2,2,2,2,2,2,2,2,0,0,
-    0,0,0,0,0,0,0,0,0,0,2,2,2,3,3,3,3,1,1,0,0,1,2,2,2,2,2,2,2,2,0,0 };
-    
-static bool showObjective = false;
-    
-//----------------------------------------------------------------------------------
-// Module Functions Definition
-//----------------------------------------------------------------------------------
-static float GetTileCleanPercent(void);
-
-//----------------------------------------------------------------------------------
-// Gameplay Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Gameplay Screen Initialization logic
-void InitGameplayScreen(void)
-{
-    // Initialize GAMEPLAY screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    timeLevelSeconds = TIME_LIMIT_SECONDS;
-    levelFinished = false;
-
-    roomba = LoadTexture("resources/roomba.png");
-    cat = LoadTexture("resources/cat.png");
-    dirtiles = LoadTexture("resources/dirtiles.png");
-    furniture = LoadTexture("resources/furniture.png");
-
-#if defined(TILE_VIEWER_MODE)
-    tracemap = LoadTexture("resources/tracemap.png");
-    fursetid = LoadTexture("resources/fursetid.png");
-#endif
-    
-    int furCount = 0;
-    FILE *fursetFile = fopen("resources/furset.txt", "rt");
-    
-    if (fursetFile != NULL)
-    {
-        char buffer[512] = { 0 };
-        
-        while (!feof(fursetFile))
-        {
-            fgets(buffer, 512, fursetFile);
-            
-            switch (buffer[0])
-            {
-                case 'f': 
-                {
-                    sscanf(buffer, "f %i %i %i %i %i", 
-                                    &furset[furCount].id, 
-                                    &furset[furCount].posX, 
-                                    &furset[furCount].posY, 
-                                    &furset[furCount].width, 
-                                    &furset[furCount].height); 
-                    furCount++;
-                } break;
-                case '.': // This is a comment
-                default: break;
-            }
-        }
-
-        fclose(fursetFile);
-    }
-    
-    // Position and size come in cell form, not pixels
-    for (int i = 0; i < furCount; i++)
-    {
-        furset[i].posX *= TILE_SIZE;
-        furset[i].posY *= TILE_SIZE;
-        furset[i].width *= TILE_SIZE;
-        furset[i].height *= TILE_SIZE;
-    }
-    
-    printf("Furniture SET elements read: %i\n", furCount);
-    
-    // Init furniture elements
-    FILE *furnitureFile = fopen("resources/furmap.txt", "rt");
-    
-    if (furnitureFile != NULL)
-    {
-        char buffer[512] = { 0 };
-        
-        while (!feof(furnitureFile))
-        {
-            fgets(buffer, 512, furnitureFile);
-            
-            switch (buffer[0])
-            {
-                case 'f': 
-                {
-                    sscanf(buffer, "f %i %i %i %i %i", 
-                                   &furmap[furnitureCount].furId, 
-                                   &furmap[furnitureCount].cellX, 
-                                   &furmap[furnitureCount].cellY, 
-                                   &furmap[furnitureCount].state, 
-                                   &furmap[furnitureCount].counter); 
-                    furnitureCount++;
-                } break;
-                case '.': // This is a comment
-                default: break;
-            }
-        }
-
-        fclose(furnitureFile);
-    }
-    
-    printf("Furniture MAP elements read: %i\n", furnitureCount);
-    
-    // Init dirt tiles
-    for (int y = 0; y < MAX_TILES_Y; y++)
-    {
-        for (int x = 0; x < MAX_TILES_X; x++)
-        {
-            tiles[y*MAX_TILES_X + x].position = (Vector2){ roomOffset.x + TILE_SIZE*x, roomOffset.y + TILE_SIZE*y };
-            
-            if ((furcolmap[y*MAX_TILES_X + x] != 0) &&
-                (furcolmap[y*MAX_TILES_X + x] != 3))
-            {
-                // TODO: Level of dirtiness depends on difficulty level
-                // Adjust probability of every tile dirt level
-                int dirt = GetRandomValue(0, 100);
-                
-                if (dirt < 50) tiles[y*MAX_TILES_X + x].level = 0;          // 50% probability
-                else if (dirt < 70) tiles[y*MAX_TILES_X + x].level = 1;     // 20% probability
-                else if (dirt < 90) tiles[y*MAX_TILES_X + x].level = 2;     // 10% probability
-                else if (dirt < 100) tiles[y*MAX_TILES_X + x].level = 3;    // 10% probability
-            }
-            else tiles[y*MAX_TILES_X + x].level = 0;
-            
-            tiles[y*MAX_TILES_X + x].state = tiles[y*MAX_TILES_X + x].level;
-            tiles[y*MAX_TILES_X + x].counter = (tiles[y*MAX_TILES_X + x].level == 0)? 0 : TILE_REQUIRED_CLEAN_TIME;
-            tiles[y*MAX_TILES_X + x].cleaned = (tiles[y*MAX_TILES_X + x].level == 0)? true : false;
-        }
-    }
-    
-    // Init score popups
-    for (int i = 0; i < MAX_SCORE_POPUPS; i++)
-    {
-        popup[i].position = (Vector2){ 0, 0 };
-        popup[i].value = TILE_SCORE_BY_CLEANED_LEVEL;
-        popup[i].enabled = false;
-        popup[i].alpha = 1.0f;
-    }
-    
-    // Init cat position
-    catPosition = (Vector2){ 30*TILE_SIZE + roomOffset.x, TILE_SIZE + roomOffset.y };
-    catTargetPosition = catPosition;
-    
-    showObjective = true;
-    
-    // Load music and sounds
-    fxCat[0] = LoadSound("resources/fxcat01.wav");
-    fxCat[1] = LoadSound("resources/fxcat02.wav");
-    fxRoomba[0] = LoadSound("resources/fxrobot01.wav");
-    fxRoomba[1] = LoadSound("resources/fxrobot02.wav");
-    fxRoomba[2] = LoadSound("resources/fxrobot03.wav");
-    
-    catch = LoadMusicStream("resources/catch22.mod");
-    
-    StopMusicStream(music);
-    SetMusicVolume(catch, 0.6f);
-    PlayMusicStream(catch);
-
-    result = 0;     // Global variable: screens.h
-}
-
-// Gameplay Screen Update logic
-void UpdateGameplayScreen(void)
-{
-    UpdateMusicStream(catch);
-    
-    if (showObjective)
-    {
-        if (IsKeyPressed(KEY_ENTER)) 
-        {
-            showObjective = false;
-            PlaySound(fxCoin);
-        }
-        
-        return;
-    }
-    
-    framesCounter++;
-    
-    if (framesCounter == 60)
-    {
-        timeLevelSeconds--;
-        
-        if (timeLevelSeconds == 0)
-        {
-            levelFinished = true;
-            finishScreen = 1;
-            PlaySound(fxCoin);
-
-            if (GetTileCleanPercent() >= 80) result = 1;
-        }
-        
-        framesCounter = 0;
-    }
-    
-    mousePosition = GetMousePosition();
-    mouseTileX = (int)floorf((mousePosition.x - roomOffset.x)/TILE_SIZE);
-    mouseTileY = (int)floorf((mousePosition.y - roomOffset.y)/TILE_SIZE);
-
-    // Roomba movement logic
-    Vector2 prevPosition = roombaPosition;
-    
-    if (IsKeyDown(KEY_D)) roombaPosition.x += roombaSpeed.x;
-    else if (IsKeyDown(KEY_A)) roombaPosition.x -= roombaSpeed.x;
-    if (IsKeyDown(KEY_W)) roombaPosition.y -= roombaSpeed.y;
-    else if (IsKeyDown(KEY_S)) roombaPosition.y += roombaSpeed.y;
-    
-    // Verify current player position is valid or reset
-    roombaTilePosX = (int)(floorf(roombaPosition.x - roomOffset.x)/TILE_SIZE);
-    roombaTilePosY = (int)(floorf(roombaPosition.y - roomOffset.y)/TILE_SIZE);
-    if ((roombaPosition.x - roomba.width/2 < roomOffset.x) || 
-        ((roombaPosition.x + roomba.width/2) >= (roomOffset.x + MAX_TILES_X*TILE_SIZE)) ||
-        (roombaPosition.y - roomba.height/2 < roomOffset.y) || 
-        ((roombaPosition.y + roomba.height/2) >= (roomOffset.y + MAX_TILES_Y*TILE_SIZE)) ||
-        (furcolmap[roombaTilePosY*MAX_TILES_X + roombaTilePosX] == 0) || 
-        (furcolmap[roombaTilePosY*MAX_TILES_X + roombaTilePosX] == 3)) roombaPosition = prevPosition;
-    
-    // Dyson movement logic
-    // if (IsKeyDown(KEY_RIGHT)) dysonPosition.x += dysonSpeed.x;
-    // else if (IsKeyDown(KEY_LEFT)) dysonPosition.x -= dysonSpeed.x;
-    // if (IsKeyDown(KEY_UP)) dysonPosition.y -= dysonSpeed.y;
-    // else if (IsKeyDown(KEY_DOWN)) dysonPosition.y += dysonSpeed.y;
-    
-    // Check collision area between Roomba and dirt tiles to verify it's beeing cleaned
-    // TODO: OPTIMIZATION: Check only Roomba surrounding tiles
-    for (int y = 0; y < MAX_TILES_Y; y++)
-    {
-        for (int x = 0; x < MAX_TILES_X; x++)
-        {
-            // Check if tile requires cleaning
-            if (tiles[y*MAX_TILES_X + x].state > 0)
-            {
-                // TODO: Get better collision area measure, considering round roomba
-                Rectangle cleanRec = GetCollisionRec((Rectangle){ tiles[y*MAX_TILES_X + x].position.x, tiles[y*MAX_TILES_X + x].position.y, 36, 36 },
-                                                      (Rectangle){ roombaPosition.x - roomba.width/2, roombaPosition.y - roomba.height/2, roomba.width, roomba.height });
-                
-                // Check Roomba is covering at least half of the tile
-                if ((cleanRec.width*cleanRec.height) > TILE_REQUIRED_CLEAN_AREA)
-                {
-                    // Start cleaning tile
-                    tiles[y*MAX_TILES_X + x].counter--;
-                    
-                    if (tiles[y*MAX_TILES_X + x].counter < 0)
-                    {
-                        tiles[y*MAX_TILES_X + x].state--;
-                        
-                        if (tiles[y*MAX_TILES_X + x].state == 0) 
-                        {
-                            tiles[y*MAX_TILES_X + x].counter = 0;
-                            score += tiles[y*MAX_TILES_X + x].level*TILE_SCORE_BY_CLEANED_LEVEL;
-                            
-                            // Show scoring popup, enable first ready!
-                            for (int i = 0; i < MAX_SCORE_POPUPS; i++)
-                            {
-                                if (!popup[i].enabled)
-                                {
-                                    popup[i].position = tiles[y*MAX_TILES_X + x].position;
-                                    popup[i].value = TILE_SCORE_BY_CLEANED_LEVEL*tiles[y*MAX_TILES_X + x].level;
-                                    popup[i].enabled = true;
-                                    popup[i].alpha = 1.0f;
-                                    break;
-                                }
-                            }
-                        }
-                        else tiles[y*MAX_TILES_X + x].counter = TILE_REQUIRED_CLEAN_TIME;
-                    }
-                }
-            }
-        }
-    }
-    
-    // Update enabled popups!
-    for (int i = 0; i < MAX_SCORE_POPUPS; i++)
-    {
-        if (popup[i].enabled)
-        {
-            popup[i].position.y -= 2;
-            popup[i].alpha -= 0.015f;
-            
-            if (popup[i].alpha < 0.0f) popup[i].enabled = false;
-        }
-    }
-
-    // Cat movement logic
-    if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-    {
-        // Check for a valid cell to move on
-        if ((mousePosition.x > roomOffset.x) && (mousePosition.x < (roomOffset.x + MAX_TILES_X*TILE_SIZE)) && 
-            (mousePosition.y > roomOffset.y) && (mousePosition.y < (roomOffset.y + MAX_TILES_Y*TILE_SIZE)) && 
-            furcolmap[mouseTileY*MAX_TILES_X + mouseTileX] != 0)
-        {
-            catTargetPosition = GetMousePosition();
-            catShouldMove = true;
-        }
-    }
-    
-    if (IsMouseButtonPressed(MOUSE_RIGHT_BUTTON)) PlaySound(fxCat[GetRandomValue(0,1)]);
-    if (IsKeyPressed(KEY_SPACE)) PlaySound(fxRoomba[GetRandomValue(0,2)]);
-
-    // Check if cat should move
-    if (catShouldMove)
-    {
-        if (CheckCollisionPointCircle(catPosition, catTargetPosition, CAT_TARGET_RADIUS))
-        {
-            catShouldMove = false;
-            
-            // Spread dirt all around selected cell!
-            // NOTE: We consider cat drawing offset
-            catTilePosX = (int)floorf((catPosition.x - cat.width/2 - roomOffset.x)/TILE_SIZE) + 1;
-            catTilePosY = (int)floorf((catPosition.y - cat.height/2 - 10 - roomOffset.y)/TILE_SIZE) + 1;
-            
-            // Check if tile includes a dirt element
-            if (furcolmap[mouseTileY*MAX_TILES_X + mouseTileX] == 3)
-            {
-                for (int y = (catTilePosY - CAT_DIRT_CELL_RADIUS); y < (catTilePosY + CAT_DIRT_CELL_RADIUS + 1); y++)
-                {
-                    for (int x = (catTilePosX - CAT_DIRT_CELL_RADIUS); x < (catTilePosX + CAT_DIRT_CELL_RADIUS + 1); x++)
-                    {
-                        if (((y >= 0) && (y < MAX_TILES_Y) && (x >= 0) && (x < MAX_TILES_X)) && 
-                            (tiles[y*MAX_TILES_X + x].state == 0) && 
-                            (furcolmap[y*MAX_TILES_X + x] != 0) &&
-                            (furcolmap[y*MAX_TILES_X + x] != 3))
-                        {
-                            int dirt = GetRandomValue(0, 100);
-                            
-                            if (dirt < 50) tiles[y*MAX_TILES_X + x].level = 0;          // 50% probability
-                            else if (dirt < 70) tiles[y*MAX_TILES_X + x].level = 1;     // 20% probability
-                            else if (dirt < 90) tiles[y*MAX_TILES_X + x].level = 2;     // 10% probability
-                            else if (dirt < 100) tiles[y*MAX_TILES_X + x].level = 3;    // 10% probability
-
-                            tiles[y*MAX_TILES_X + x].state = tiles[y*MAX_TILES_X + x].level;
-                            tiles[y*MAX_TILES_X + x].counter = (tiles[y*MAX_TILES_X + x].level == 0)? 0 : TILE_REQUIRED_CLEAN_TIME;
-                            tiles[y*MAX_TILES_X + x].cleaned = (tiles[y*MAX_TILES_X + x].level == 0)? true : false;
-                        }
-                    }
-                }
-            }
-        }
-        else
-        {
-            Vector2 dir = Vector2Subtract(catTargetPosition, catPosition);
-            Vector2 dirnorm = Vector2Normalize(dir);
-            
-            catPosition.x += catSpeed.x*dirnorm.x;
-            catPosition.y += catSpeed.y*dirnorm.y;
-        }
-    }
-
-    if (levelFinished)
-    {
-        // TODO: Check level finished
-    }
-}
-
-// Gameplay Screen Draw logic
-void DrawGameplayScreen(void)
-{
-    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), GetColor(0x57374cff));
-    
-    // Draw tiles
-    for (int y = 0; y < MAX_TILES_Y; y++)
-    {
-        for (int x = 0; x < MAX_TILES_X; x++)
-        {
-            // Draw dirty tiles
-            DrawTextureRec(dirtiles, (Rectangle){ tiles[y*MAX_TILES_X + x].state*TILE_SIZE, 0, TILE_SIZE, TILE_SIZE }, 
-                           (Vector2){ roomOffset.x + TILE_SIZE*x, roomOffset.y + TILE_SIZE*y }, WHITE);
-                           
-            // TODO: Draw possible walls
-        }
-    }
-    
-    // Draw starting point for roomba and cat
-    DrawTextureRec(furniture, (Rectangle){ furset[30].posX, furset[30].posY, furset[30].width, furset[30].height }, roomOffset, WHITE);
-    DrawTextureRec(furniture, (Rectangle){ furset[29].posX, furset[29].posY, furset[29].width, furset[29].height }, (Vector2){ roomOffset.x + 29*36, roomOffset.y }, WHITE);
-    
-    DrawTexture(roomba, roombaPosition.x - roomba.width/2, roombaPosition.y - roomba.height/2, WHITE);
-    DrawTexture(cat, catPosition.x - cat.width/2, catPosition.y - cat.height/2 - 10, WHITE);
-    
-    float furAlpha = 1.0f;
-    
-    // Draw home objects
-    for (int i = 0; i < furnitureCount; i++)
-    {
-        if (CheckCollisionCircleRec((Vector2){ roombaPosition.x - roomba.width/2, roombaPosition.y - roomba.height/2 }, roomba.width,
-                                    (Rectangle){ roomOffset.x + furmap[i].cellX*TILE_SIZE, roomOffset.y + furmap[i].cellY*TILE_SIZE,
-                                                 furset[furmap[i].furId].width, furset[furmap[i].furId].height}) && (furmap[i].state == 1))
-        {
-            DrawTextureRec(furniture, (Rectangle){ furset[furmap[i].furId].posX, furset[furmap[i].furId].posY, furset[furmap[i].furId].width, furset[furmap[i].furId].height }, 
-                           (Vector2){ roomOffset.x + furmap[i].cellX*TILE_SIZE, roomOffset.y + furmap[i].cellY*TILE_SIZE }, Fade(WHITE, 0.5f));
-        }
-        else
-        {
-            DrawTextureRec(furniture, (Rectangle){ furset[furmap[i].furId].posX, furset[furmap[i].furId].posY, furset[furmap[i].furId].width, furset[furmap[i].furId].height }, 
-                           (Vector2){ roomOffset.x + furmap[i].cellX*TILE_SIZE, roomOffset.y + furmap[i].cellY*TILE_SIZE }, Fade(WHITE, furAlpha));
-        }
-    }
-    
-#if defined(TILE_VIEWER_MODE)
-    DrawTexture(tracemap, roomOffset.x, roomOffset.y, Fade(WHITE, 0.5f));
-    DrawTexture(fursetid, 0, 720, WHITE);
-#endif
-    
-    // TODO: If an object has been used by cat, draw it in gray
-    // Maybe add a tempo bar for reusing?
-    
-    // Draw UI
-    DrawTextEx(font2, "SCORE:", (Vector2){ 80, 10 }, font2.baseSize, 2, WHITE);
-    DrawTextEx(font, FormatText("%i", score), (Vector2){ 260, 10 }, font.baseSize, 2, WHITE);
-    DrawTextEx(font2, "CLEAN:", (Vector2){ 500, 10 }, font2.baseSize, 2, WHITE);
-    DrawTextEx(font, FormatText("%.2f%%", GetTileCleanPercent()), (Vector2){ 690, 10 }, font.baseSize, 2, WHITE);
-    DrawTextEx(font2, "TIME:", (Vector2){ 950, 10 }, font2.baseSize, 2, WHITE);
-    DrawTextEx(font, FormatText("%i:%02is", timeLevelSeconds/60, timeLevelSeconds%60), (Vector2){ 1100, 10 }, font.baseSize, 2, WHITE);
-    
-    // Debug information
-    //DrawText(FormatText("CatTilePos: [ %i, %i ]", catTilePosX, catTilePosY), roomOffset.x, 690, 20, RAYWHITE);
-    //DrawText(FormatText("MousePos: [ %i, %i ]", mouseTileX, mouseTileY), 400, 690, 20, RED);
-    //DrawText(FormatText("RoombaPos: [ %i, %i ]", roombaTilePosX, roombaTilePosY), 600, 690, 20, GREEN);
-    
-    if ((mouseTileY >= 0) && (mouseTileY < MAX_TILES_Y) && (mouseTileX >= 0) && (mouseTileX < MAX_TILES_X))
-    {
-        DrawRectangleLinesEx((Rectangle){ tiles[mouseTileY*MAX_TILES_X + mouseTileX].position.x, 
-                                          tiles[mouseTileY*MAX_TILES_X + mouseTileX].position.y, TILE_SIZE, TILE_SIZE }, 2, RED);
-    }
-    
-    // Draw enabled popups!
-    for (int i = 0; i < MAX_SCORE_POPUPS; i++)
-    {
-        if (popup[i].enabled) DrawText(FormatText("+%i", popup[i].value), popup[i].position.x, popup[i].position.y, 20, Fade(RED, popup[i].alpha)); 
-    }
-    
-    // Show objective
-    if (showObjective)
-    {
-        DrawRectangle(0, 150, GetScreenWidth(), GetScreenHeight() - 300, Fade(DARKGRAY, 0.7f));
-        DrawTextEx(font2, "OBJECTIVE:", (Vector2){ 500, 240 }, font2.baseSize, 2, WHITE);
-        DrawTextEx(font, "CLEAN 80% OF THE ROOM", (Vector2){ 300, 320 }, font.baseSize, 2, WHITE);
-    }
-   
-}
-
-// Gameplay Screen Unload logic
-void UnloadGameplayScreen(void)
-{
-    // Unload GAMEPLAY screen variables here!
-    UnloadTexture(roomba);
-    UnloadTexture(cat);
-    UnloadTexture(dirtiles);
-    UnloadTexture(furniture);
-    
-    UnloadSound(fxCat[0]);
-    UnloadSound(fxCat[1]);
-    UnloadSound(fxRoomba[0]);
-    UnloadSound(fxRoomba[1]);
-    UnloadSound(fxRoomba[2]);
-    
-    StopMusicStream(catch);
-    UnloadMusicStream(catch);
-}
-
-// Gameplay Screen should finish?
-int FinishGameplayScreen(void)
-{
-    return finishScreen;
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Declaration
-//----------------------------------------------------------------------------------
-
-// Check how much cleaning we have done
-static float GetTileCleanPercent(void)
-{
-    float value = 0;
-    
-    int tileLevelsToClean = 0;
-    int tileLevelsCleaned = 0;
-    
-    for (int y = 0; y < MAX_TILES_Y; y++)
-    {
-        for (int x = 0; x < MAX_TILES_X; x++)
-        {
-            if (tiles[y*MAX_TILES_X + x].level > 0)
-            {
-                tileLevelsToClean += tiles[y*MAX_TILES_X + x].level;
-                tileLevelsCleaned += tiles[y*MAX_TILES_X + x].state;
-            }
-        }
-    }
-    
-    value = ((float)(tileLevelsToClean - tileLevelsCleaned)/tileLevelsToClean)*100.0f;
-    
-    return value;
-}

+ 0 - 211
games/cat_vs_roomba/screens/screen_logo.c

@@ -1,211 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Advance Game template
-*
-*   Logo Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
-*
-*   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"
-
-#define LOGO_RECS_SIDE  16
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-
-// Logo screen global variables
-static int framesCounter = 0;
-static int finishScreen = 0;
-
-static int logoPositionX = 0;
-static int logoPositionY = 0;
-
-static int lettersCount = 0;
-
-static int topSideRecWidth = 0;
-static int leftSideRecHeight = 0;
-
-static int bottomSideRecWidth = 0;
-static int rightSideRecHeight = 0;
-
-static char raylib[8] = { 0 };  // raylib text array, max 8 letters
-static int state = 0;           // Tracking animation states (State Machine)
-static float alpha = 1.0f;      // Useful for fading
-
-//----------------------------------------------------------------------------------
-// Logo Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Logo Screen Initialization logic
-void InitLogoScreen(void)
-{
-    // Initialize LOGO screen variables here!
-    finishScreen = 0;
-    framesCounter = 0;
-    lettersCount = 0;
-    
-    logoPositionX = GetScreenWidth()/2 - 128;
-    logoPositionY = GetScreenHeight()/2 - 128;
-    
-    topSideRecWidth = LOGO_RECS_SIDE;
-    leftSideRecHeight = LOGO_RECS_SIDE;
-    bottomSideRecWidth = LOGO_RECS_SIDE;
-    rightSideRecHeight = LOGO_RECS_SIDE;
-    
-    for (int i = 0; i < 8; i++) raylib[i] = '\0';
-    
-    state = 0;
-    alpha = 1.0f;
-}
-
-// Logo Screen Update logic
-void UpdateLogoScreen(void)
-{
-    // Update LOGO screen variables here!
-    if (state == 0)                 // State 0: Small box blinking
-    {
-        framesCounter++;
-
-        if (framesCounter == 80)
-        {
-            state = 1;
-            framesCounter = 0;      // Reset counter... will be used later...
-        }
-    }
-    else if (state == 1)            // State 1: Top and left bars growing
-    {
-        topSideRecWidth += 8;
-        leftSideRecHeight += 8;
-
-        if (topSideRecWidth == 256) state = 2;
-    }
-    else if (state == 2)            // State 2: Bottom and right bars growing
-    {
-        bottomSideRecWidth += 8;
-        rightSideRecHeight += 8;
-
-        if (bottomSideRecWidth == 256) state = 3;
-    }
-    else if (state == 3)            // State 3: Letters appearing (one by one)
-    {
-        framesCounter++;
-
-        if (framesCounter/10)       // Every 12 frames, one more letter!
-        {
-            lettersCount++;
-            framesCounter = 0;
-        }
-
-        switch (lettersCount)
-        {
-            case 1: raylib[0] = 'r'; break;
-            case 2: raylib[1] = 'a'; break;
-            case 3: raylib[2] = 'y'; break;
-            case 4: raylib[3] = 'l'; break;
-            case 5: raylib[4] = 'i'; break;
-            case 6: raylib[5] = 'b'; break;
-            default: break;
-        }
-
-        // When all letters have appeared...
-        if (lettersCount >= 10)
-        {
-            state = 4;
-            framesCounter = 0;
-        }
-    }
-    else if (state == 4)
-    {
-        framesCounter++;
-        
-        if (framesCounter > 100)
-        {
-            alpha -= 0.02f;
-
-            if (alpha <= 0.0f)
-            {
-                alpha = 0.0f;
-                finishScreen = 1;
-            }
-        }
-    }
-}
-
-// Logo Screen Draw logic
-void DrawLogoScreen(void)
-{
-    if (state == 0)
-    {
-        if ((framesCounter/10)%2) DrawRectangle(logoPositionX, logoPositionY, 16, 16, BLACK);
-    }
-    else if (state == 1)
-    {
-        DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK);
-    }
-    else if (state == 2)
-    {
-        DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY, 16, leftSideRecHeight, BLACK);
-
-        DrawRectangle(logoPositionX + 240, logoPositionY, 16, rightSideRecHeight, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, BLACK);
-    }
-    else if (state == 3)
-    {
-        DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, Fade(BLACK, alpha));
-        DrawRectangle(logoPositionX, logoPositionY + 16, 16, leftSideRecHeight - 32, Fade(BLACK, alpha));
-
-        DrawRectangle(logoPositionX + 240, logoPositionY + 16, 16, rightSideRecHeight - 32, Fade(BLACK, alpha));
-        DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, Fade(BLACK, alpha));
-
-        DrawRectangle(GetScreenWidth()/2 - 112, GetScreenHeight()/2 - 112, 224, 224, Fade(RAYWHITE, alpha));
-
-        DrawText(raylib, GetScreenWidth()/2 - 44, GetScreenHeight()/2 + 48, 50, Fade(BLACK, alpha));
-    }
-    else if (state == 4)
-    {
-        DrawRectangle(logoPositionX, logoPositionY, topSideRecWidth, 16, Fade(BLACK, alpha));
-        DrawRectangle(logoPositionX, logoPositionY + 16, 16, leftSideRecHeight - 32, Fade(BLACK, alpha));
-
-        DrawRectangle(logoPositionX + 240, logoPositionY + 16, 16, rightSideRecHeight - 32, Fade(BLACK, alpha));
-        DrawRectangle(logoPositionX, logoPositionY + 240, bottomSideRecWidth, 16, Fade(BLACK, alpha));
-
-        DrawRectangle(GetScreenWidth()/2 - 112, GetScreenHeight()/2 - 112, 224, 224, Fade(RAYWHITE, alpha));
-
-        DrawText(raylib, GetScreenWidth()/2 - 44, GetScreenHeight()/2 + 48, 50, Fade(BLACK, alpha));
-        
-        if (framesCounter > 20) DrawText("powered by", logoPositionX, logoPositionY - 27, 20, Fade(DARKGRAY, alpha));
-    }
-}
-
-// Logo Screen Unload logic
-void UnloadLogoScreen(void)
-{
-    // Unload LOGO screen variables here!
-}
-
-// Logo Screen should finish?
-int FinishLogoScreen(void)
-{
-    return finishScreen;
-}

+ 0 - 154
games/cat_vs_roomba/screens/screen_title.c

@@ -1,154 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Advance Game template
-*
-*   Title Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
-*
-*   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;
-static int state;
-
-static int scrollPositionX;
-
-static int catPosX;
-static int roombaPosX;
-
-static float vsAlpha;
-static float vsScale;
-
-static Texture2D cat;
-static Texture2D vs;
-static Texture2D roomba;
-
-//----------------------------------------------------------------------------------
-// Title Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Title Screen Initialization logic
-void InitTitleScreen(void)
-{
-    // TODO: Initialize TITLE screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    cat = LoadTexture("resources/title_cat.png");
-    vs = LoadTexture("resources/title_vs.png");
-    roomba = LoadTexture("resources/title_roomba.png");
-    
-    state = 0;
-    catPosX = 1760;
-    roombaPosX = -700;
-    scrollPositionX = 0;
-    
-    vsAlpha = 0.0f;
-    vsScale = 10.0f;
-    
-    PlayMusicStream(music);
-}
-
-// Title Screen Update logic
-void UpdateTitleScreen(void)
-{
-    scrollPositionX -= 5;
-    if (scrollPositionX < -GetScreenWidth()) scrollPositionX = 0;
-
-    if (state == 0)
-    {
-        catPosX -= 4;
-        roombaPosX += 3;
-        
-        if (catPosX < (GetScreenWidth()/2 - cat.width/2)) catPosX = (GetScreenWidth()/2 - cat.width/2);
-        if (roombaPosX > (GetScreenWidth()/2 - roomba.width/2)) roombaPosX = (GetScreenWidth()/2 - roomba.width/2);
-        
-        if ((catPosX == (GetScreenWidth()/2 - cat.width/2)) && (roombaPosX == (GetScreenWidth()/2 - roomba.width/2))) 
-        {
-            state = 1;
-            framesCounter = 0;
-        }
-    }
-    else if (state == 1)
-    {
-        framesCounter++;
-        
-        vsScale -= 0.1f;
-        vsAlpha += 0.01f;
-        
-        if (vsScale < 1.0f) vsScale = 1.0f;
-        if (vsAlpha > 1.0f) vsAlpha = 1.0f;
-        
-        if (framesCounter > 160)
-        {
-            state = 2;
-            framesCounter = 0;
-        }
-    }
-    else if (state == 2) framesCounter++;
-
-    // Press enter or tap to change to GAMEPLAY screen
-    if (IsKeyPressed(KEY_ENTER) || IsGestureDetected(GESTURE_TAP))
-    {
-        //finishScreen = 1;   // OPTIONS
-        finishScreen = 2;   // GAMEPLAY
-        PlaySound(fxCoin);
-    }
-}
-
-// Title Screen Draw logic
-void DrawTitleScreen(void)
-{
-    for (int i = 0; i < 64*2*2; i++)
-    {
-        DrawRectangle(64*i + scrollPositionX, 0, 64, GetScreenHeight(), (i%2 == 0)? GetColor(0xf3726dff) : GetColor(0xffcf6bff));
-    }
-    
-    DrawTexture(cat, catPosX, 80, WHITE);
-    DrawTexture(roomba, roombaPosX, 320, WHITE);
-    
-    if (state > 0)
-    {
-        DrawTexturePro(vs, (Rectangle){ 0, 0, vs.width, vs.height }, (Rectangle){ GetScreenWidth()/2, 300, vs.width*vsScale, vs.height*vsScale }, (Vector2){ vs.width/2*vsScale, vs.height/2*vsScale }, 0.0f, Fade(WHITE, vsAlpha));
-    }
-
-    if ((state == 2) && ((framesCounter/30)%2)) DrawTextEx(font2, "PRESS ENTER to START", (Vector2){ 340, 550 }, font2.baseSize, 2, WHITE);
-}
-
-// Title Screen Unload logic
-void UnloadTitleScreen(void)
-{
-    UnloadTexture(cat);
-    UnloadTexture(vs);
-    UnloadTexture(roomba);
-}
-
-// Title Screen should finish?
-int FinishTitleScreen(void)
-{
-    return finishScreen;
-}

+ 0 - 92
games/cat_vs_roomba/screens/screens.h

@@ -1,92 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Advance Game template
-*
-*   Screens Functions Declarations (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014-2019 Ramon Santamaria (@raysan5)
-*
-*   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
-
-//#define TILE_VIEWER_MODE
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef enum GameScreen { LOGO = 0, TITLE, OPTIONS, GAMEPLAY, ENDING } GameScreen;
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition
-//----------------------------------------------------------------------------------
-extern GameScreen currentScreen;
-extern Font font;
-extern Font font2;
-extern Music music;
-extern Sound fxCoin;
-
-int score;
-int result;             // 0-Loose, 1-Win
-
-#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);
-
-//----------------------------------------------------------------------------------
-// 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

+ 0 - 126
games/drturtle/00_drturtle_screens.c

@@ -1,126 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.1 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Press enter to change to ending screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = ENDING;
-                }
-            
-            } break;
-            case ENDING:
-            {
-                // Press enter to change to title screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = TITLE;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, GREEN);
-                    DrawText("TITLE SCREEN", 20, 20, 40, DARKGREEN);
-                
-                } break;
-                case GAMEPLAY:
-                {
-                    // Draw gameplay screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, RED);
-                    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
-                
-                } break;
-                case ENDING:
-                {
-                    // Draw ending screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, BLUE);
-                    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    CloseWindow();          // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 163
games/drturtle/01_drturtle_scrolling.c

@@ -1,163 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.1 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Load game resources: textures
-    Texture2D sky = LoadTexture("resources/sky.png");
-    Texture2D mountains = LoadTexture("resources/mountains.png");
-    Texture2D sea = LoadTexture("resources/sea.png");
-
-    // Define scrolling variables
-    int backScrolling = 0;
-    int seaScrolling = 0;
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Sea scrolling
-                seaScrolling -= 2;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Background scrolling logic
-                backScrolling--;
-                if (backScrolling <= -screenWidth) backScrolling = 0; 
-                
-                // Sea scrolling logic
-                seaScrolling -= 8;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0;
-                
-                // Press enter to change to ending screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = ENDING;
-                }
-                
-            } break;
-            case ENDING:
-            {
-                // Press enter to change to title screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = TITLE;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            // Draw background (common to all screens)
-            DrawTexture(sky, 0, 0, WHITE);
-            
-            DrawTexture(mountains, backScrolling, 0, WHITE);
-            DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-            
-            DrawTexture(sea, seaScrolling, 0, BLUE);
-            DrawTexture(sea, screenWidth + seaScrolling, 0, BLUE);
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title screen
-                    DrawText("PRESS ENTER", 450, 420, 40, BLACK);
-                
-                } break;
-                case GAMEPLAY:
-                {
-                    // Draw gameplay screen
-                    DrawText("GAMEPLAY SCREEN", 20, 20, 40, MAROON);
-                
-                } break;
-                case ENDING:
-                {
-                    // Draw ending screen
-                    
-                    // Draw a transparent black rectangle that covers all screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-                    
-                    DrawText("ENDING SCREEN", 20, 20, 40, DARKBLUE);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-
-    CloseWindow();          // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 212
games/drturtle/02_drturtle_player.c

@@ -1,212 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.1 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Load game resources: textures
-    Texture2D sky = LoadTexture("resources/sky.png");
-    Texture2D mountains = LoadTexture("resources/mountains.png");
-    Texture2D sea = LoadTexture("resources/sea.png");
-    Texture2D title = LoadTexture("resources/title.png");
-    Texture2D turtle = LoadTexture("resources/turtle.png");
-    Texture2D gamera = LoadTexture("resources/gamera.png");
-    
-    // Define scrolling variables
-    int backScrolling = 0;
-    int seaScrolling = 0;
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    // Define player variables
-    int playerRail = 1;
-    Rectangle playerBounds = { 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-    bool gameraMode = false;
-    
-    // Define additional game variables
-    int framesCounter = 0;
-    
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-        framesCounter++;
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Sea scrolling
-                seaScrolling -= 2;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    framesCounter = 0;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Background scrolling logic
-                backScrolling--;
-                if (backScrolling <= -screenWidth) backScrolling = 0; 
-                
-                // Sea scrolling logic
-                seaScrolling -= 8;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Player movement logic
-                if (IsKeyPressed(KEY_DOWN)) playerRail++;
-                else if (IsKeyPressed(KEY_UP)) playerRail--;
-                
-                // Check player not out of rails
-                if (playerRail > 4) playerRail = 4;
-                else if (playerRail < 0) playerRail = 0;
-            
-                // Update player bounds
-                playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                
-                if (IsKeyPressed(KEY_SPACE)) gameraMode = !gameraMode;
-                if (IsKeyPressed(KEY_ENTER)) currentScreen = ENDING;
-                
-            } break;
-            case ENDING:
-            {
-                // Press enter to play again
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    
-                    // Reset player
-                    playerRail = 1;
-                    playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                    
-                    gameraMode = false;
-                    framesCounter = 0;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            // Draw background (common to all screens)
-            DrawTexture(sky, 0, 0, WHITE);
-            
-            DrawTexture(mountains, backScrolling, 0, WHITE);
-            DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-            
-            if (!gameraMode)
-            {
-                DrawTexture(sea, seaScrolling, 0, BLUE);
-                DrawTexture(sea, screenWidth + seaScrolling, 0, BLUE);
-            }
-            else
-            {
-                DrawTexture(sea, seaScrolling, 0, RED);
-                DrawTexture(sea, screenWidth + seaScrolling, 0, RED);
-            }
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title
-                    //DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE);
-                    DrawRectangle(380, 140, 500, 300, GRAY);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawText("PRESS ENTER", 480, 480, 40, BLACK);
-                
-                } break;
-                case GAMEPLAY:
-                {                    
-                    // Draw player
-                    //if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE);
-                    //else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE);
-                    
-                    // Draw player bounding box
-                    if (!gameraMode) DrawRectangleRec(playerBounds, GREEN);
-                    else DrawRectangleRec(playerBounds, ORANGE);
-            
-                } break;
-                case ENDING:
-                {
-                    // Draw a transparent black rectangle that covers all screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-                
-                    DrawText("GAME OVER", 300, 200, 100, MAROON);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawText("PRESS ENTER to REPLAY", 400, 420, 30, LIGHTGRAY);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-    UnloadTexture(title);
-    UnloadTexture(turtle);
-    UnloadTexture(gamera);
-    
-    CloseWindow();          // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 393
games/drturtle/03_drturtle_enemies.c

@@ -1,393 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.1 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");    
-    
-    // Load game resources: textures
-    Texture2D sky = LoadTexture("resources/sky.png");
-    Texture2D mountains = LoadTexture("resources/mountains.png");
-    Texture2D sea = LoadTexture("resources/sea.png");
-    Texture2D title = LoadTexture("resources/title.png");
-    Texture2D turtle = LoadTexture("resources/turtle.png");
-    Texture2D gamera = LoadTexture("resources/gamera.png");
-    Texture2D shark = LoadTexture("resources/shark.png");
-    Texture2D orca = LoadTexture("resources/orca.png");
-    Texture2D swhale = LoadTexture("resources/swhale.png");
-    Texture2D fish = LoadTexture("resources/fish.png");
-
-    // Define scrolling variables
-    int backScrolling = 0;
-    int seaScrolling = 0;
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    // Define player variables
-    int playerRail = 1;
-    Rectangle playerBounds = { 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-    bool gameraMode = false;
-    
-    // Define enemies variables
-    Rectangle enemyBounds[MAX_ENEMIES];
-    int enemyRail[MAX_ENEMIES];
-    int enemyType[MAX_ENEMIES];
-    bool enemyActive[MAX_ENEMIES];
-    float enemySpeed = 10;
-    
-    // Init enemies variables
-    for (int i = 0; i < MAX_ENEMIES; i++)
-    {
-        // Define enemy type (all same probability)
-        enemyType[i] = GetRandomValue(0, 3);
-
-        // Define enemy rail
-        enemyRail[i] = GetRandomValue(0, 4);
-        
-        // Define enemy bounding box
-        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-        enemyActive[i] = false;
-    }
-    
-    // Define additional game variables
-    int foodBar = 0;
-    int framesCounter = 0;
-
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-        framesCounter++;
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Sea scrolling
-                seaScrolling -= 2;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    framesCounter = 0;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Background scrolling logic
-                backScrolling--;
-                if (backScrolling <= -screenWidth) backScrolling = 0; 
-                
-                // Sea scrolling logic
-                seaScrolling -= (enemySpeed - 2);
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Player movement logic
-                if (IsKeyPressed(KEY_DOWN)) playerRail++;
-                else if (IsKeyPressed(KEY_UP)) playerRail--;
-                
-                // Check player not out of rails
-                if (playerRail > 4) playerRail = 4;
-                else if (playerRail < 0) playerRail = 0;
-            
-                // Update player bounds
-                playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                
-                // Enemies activation logic (every 40 frames)        
-                if (framesCounter > 40)
-                {
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i] == false)
-                        {
-                            enemyActive[i] = true;
-                            i = MAX_ENEMIES;
-                        }
-                    }
-                    
-                    framesCounter = 0;
-                }
-                
-                // Enemies logic
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        enemyBounds[i].x -= enemySpeed;
-                    }
-                    
-                    // Check enemies out of screen
-                    if (enemyBounds[i].x <= 0 - 128)
-                    {
-                        enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);    
-                        
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                        enemyActive[i] = false;
-                    }
-                }
-                
-                // Enemies speed increase every frame
-                if (!gameraMode) enemySpeed += 0.005;
-                
-                // Check collision player vs enemies
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        if (CheckCollisionRecs(playerBounds, enemyBounds[i]))
-                        {                       
-                            if (enemyType[i] < 3)   // Bad enemies
-                            {
-                                if (gameraMode)
-                                {
-                                    foodBar += 15;
-                                    
-                                    // After enemy deactivation, reset enemy parameters to be reused
-                                    enemyType[i] = GetRandomValue(0, 3);
-                                    enemyRail[i] = GetRandomValue(0, 4);
-                                    
-                                    enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                    enemyActive[i] = false;
-                                }
-                                else
-                                {
-                                    // Player die logic
-                                    currentScreen = ENDING;
-                                    framesCounter = 0;
-                                }
-                            }
-                            else    // Sweet fish
-                            {
-                                enemyActive[i] = false;
-                                enemyType[i] = GetRandomValue(0, 3);
-                                enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                
-                                if (!gameraMode) foodBar += 80;
-                                else foodBar += 25;
-                                
-                                if (foodBar == 400)
-                                {
-                                    gameraMode = true;
-                                }
-                            }
-                        }
-                    }
-                }
-                
-                // Gamera mode logic
-                if (gameraMode)
-                {
-                    foodBar--;
-                    
-                    if (foodBar <= 0) 
-                    {
-                        gameraMode = false;
-                        enemySpeed -= 2;
-                        if (enemySpeed < 10) enemySpeed = 10;
-                    }
-                }
-            
-            } break;
-            case ENDING:
-            {
-                // Press enter to play again
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    
-                    // Reset player
-                    playerRail = 1;
-                    playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                    gameraMode = false;
-                    
-                    // Reset enemies data
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {                       
-                        enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-                        
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                        enemyActive[i] = false;
-                    }
-                    
-                    enemySpeed = 10;
-                    
-                    // Reset game variables
-                    foodBar = 0;
-                    framesCounter = 0;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            // Draw background (common to all screens)
-            DrawTexture(sky, 0, 0, WHITE);
-            
-            DrawTexture(mountains, backScrolling, 0, WHITE);
-            DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-            
-            if (!gameraMode)
-            {
-                DrawTexture(sea, seaScrolling, 0, BLUE);
-                DrawTexture(sea, screenWidth + seaScrolling, 0, BLUE);
-            }
-            else
-            {
-                DrawTexture(sea, seaScrolling, 0, RED);
-                DrawTexture(sea, screenWidth + seaScrolling, 0, RED);
-            }
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title
-                    DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawText("PRESS ENTER", 480, 480, 40, BLACK);
-                
-                } break;
-                case GAMEPLAY:
-                {
-                    // Draw water lines
-                    for (int i = 0; i < 5; i++) DrawRectangle(0, i*120 + 120, screenWidth, 110, Fade(SKYBLUE, 0.1f));
-                    
-                    // Draw player
-                    if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE);
-                    else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE);
-                    
-                    // Draw player bounding box
-                    //if (!gameraMode) DrawRectangleRec(playerBounds, Fade(GREEN, 0.4f));
-                    //else DrawRectangleRec(playerBounds, Fade(ORANGE, 0.4f));
-                    
-                    // Draw enemies
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i]) 
-                        {
-                            // Draw enemies
-                            /*
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawTexture(shark, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 1: DrawTexture(orca, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 2: DrawTexture(swhale, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 3: DrawTexture(fish, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                default: break;
-                            }
-                            */
-                            
-                            // Draw enemies bounding boxes
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawRectangleRec(enemyBounds[i], RED); break;
-                                case 1: DrawRectangleRec(enemyBounds[i], RED); break;
-                                case 2: DrawRectangleRec(enemyBounds[i], RED); break;
-                                case 3: DrawRectangleRec(enemyBounds[i], GREEN); break;
-                                default: break;
-                            }
-                        }
-                    }
-                    
-                    // Draw gameplay interface
-                    
-                    // Draw food bar
-                    DrawRectangle(20, 20, 400, 40, Fade(GRAY, 0.4f));
-                    DrawRectangle(20, 20, foodBar, 40, ORANGE);
-                    DrawRectangleLines(20, 20, 400, 40, BLACK);
-                    
-                    if (gameraMode)
-                    {
-                        DrawText("GAMERA MODE", 60, 22, 40, GRAY);
-                    }
-            
-                } break;
-                case ENDING:
-                {
-                    // Draw a transparent black rectangle that covers all screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-                
-                    DrawText("GAME OVER", 300, 200, 100, MAROON);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawText("PRESS ENTER to REPLAY", 400, 420, 30, LIGHTGRAY);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-    UnloadTexture(title);
-    UnloadTexture(turtle);
-    UnloadTexture(gamera);
-    UnloadTexture(shark);
-    UnloadTexture(orca);
-    UnloadTexture(swhale);
-    UnloadTexture(fish);
-    
-    CloseWindow();          // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 447
games/drturtle/04_drturtle_gui.c

@@ -1,447 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.1 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Load game resources: textures
-    Texture2D sky = LoadTexture("resources/sky.png");
-    Texture2D mountains = LoadTexture("resources/mountains.png");
-    Texture2D sea = LoadTexture("resources/sea.png");
-    Texture2D title = LoadTexture("resources/title.png");
-    Texture2D turtle = LoadTexture("resources/turtle.png");
-    Texture2D gamera = LoadTexture("resources/gamera.png");
-    Texture2D shark = LoadTexture("resources/shark.png");
-    Texture2D orca = LoadTexture("resources/orca.png");
-    Texture2D swhale = LoadTexture("resources/swhale.png");
-    Texture2D fish = LoadTexture("resources/fish.png");
-    Texture2D gframe = LoadTexture("resources/gframe.png");
-    
-    // Load game resources: fonts
-    Font font = LoadFont("resources/komika.png");
-
-    // Define scrolling variables
-    int backScrolling = 0;
-    int seaScrolling = 0;
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    // Define player variables
-    int playerRail = 1;
-    Rectangle playerBounds = { 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-    bool gameraMode = false;
-    
-    // Define enemies variables
-    Rectangle enemyBounds[MAX_ENEMIES];
-    int enemyRail[MAX_ENEMIES];
-    int enemyType[MAX_ENEMIES];
-    bool enemyActive[MAX_ENEMIES];
-    float enemySpeed = 10;
-    
-    // Init enemies variables
-    for (int i = 0; i < MAX_ENEMIES; i++)
-    {
-        // Define enemy type (all same probability)
-        //enemyType[i] = GetRandomValue(0, 3);
-    
-        // Probability system for enemies type
-        int enemyProb = GetRandomValue(0, 100);
-        
-        if (enemyProb < 30) enemyType[i] = 0;
-        else if (enemyProb < 60) enemyType[i] = 1;
-        else if (enemyProb < 90) enemyType[i] = 2;
-        else enemyType[i] = 3;
-
-        // Define enemy rail
-        enemyRail[i] = GetRandomValue(0, 4);
-
-        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-        enemyActive[i] = false;
-    }
-    
-    // Define additional game variables
-    int score = 0;
-    float distance = 0.0f;
-    int hiscore = 0;
-    float hidistance = 0.0f;
-    int foodBar = 0;
-    int framesCounter = 0;
-    
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-        framesCounter++;
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Sea scrolling
-                seaScrolling -= 2;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    framesCounter = 0;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Background scrolling logic
-                backScrolling--;
-                if (backScrolling <= -screenWidth) backScrolling = 0; 
-                
-                // Sea scrolling logic
-                seaScrolling -= (enemySpeed - 2);
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Player movement logic
-                if (IsKeyPressed(KEY_DOWN)) playerRail++;
-                else if (IsKeyPressed(KEY_UP)) playerRail--;
-                
-                // Check player not out of rails
-                if (playerRail > 4) playerRail = 4;
-                else if (playerRail < 0) playerRail = 0;
-            
-                // Update player bounds
-                playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                
-                // Enemies activation logic (every 40 frames)        
-                if (framesCounter > 40)
-                {
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i] == false)
-                        {
-                            enemyActive[i] = true;
-                            i = MAX_ENEMIES;
-                        }
-                    }
-                    
-                    framesCounter = 0;
-                }
-                
-                // Enemies logic
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        enemyBounds[i].x -= enemySpeed;
-                    }
-                    
-                    // Check enemies out of screen
-                    if (enemyBounds[i].x <= 0 - 128)
-                    {
-                        enemyActive[i] = false;
-                        enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-                   
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                    }
-                }
-                
-                if (!gameraMode) enemySpeed += 0.005;
-                
-                // Check collision player vs enemies
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        if (CheckCollisionRecs(playerBounds, enemyBounds[i]))
-                        {                       
-                            if (enemyType[i] < 3)   // Bad enemies
-                            {
-                                if (gameraMode)
-                                {
-                                    if (enemyType[i] == 0) score += 50;
-                                    else if (enemyType[i] == 1) score += 150;
-                                    else if (enemyType[i] == 2) score += 300;
-                                    
-                                    foodBar += 15;
-                                
-                                    enemyActive[i] = false;
-                                    
-                                    // After enemy deactivation, reset enemy parameters to be reused
-                                    enemyType[i] = GetRandomValue(0, 3);
-                                    enemyRail[i] = GetRandomValue(0, 4);
-                                    
-                                    // Make sure not two consecutive enemies in the same row
-                                    if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                                    
-                                    enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                }
-                                else
-                                {
-                                    // Player die logic                               
-                                    currentScreen = ENDING;
-                                    framesCounter = 0;
-                                    
-                                    // Save hiscore and hidistance for next game
-                                    if (score > hiscore) hiscore = score;
-                                    if (distance > hidistance) hidistance = distance;
-                                }
-                            }
-                            else    // Sweet fish
-                            {
-                                enemyActive[i] = false;
-                                enemyType[i] = GetRandomValue(0, 3);
-                                enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                // Make sure not two consecutive enemies in the same row
-                                if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                
-                                if (!gameraMode) foodBar += 80;
-                                else foodBar += 25;
-                                
-                                score += 10;
-                                
-                                if (foodBar == 400)
-                                {
-                                    gameraMode = true;
-                                }
-                            }
-                        }
-                    }
-                }
-                
-                // Gamera mode logic
-                if (gameraMode)
-                {
-                    foodBar--;
-                    
-                    if (foodBar <= 0) 
-                    {
-                        gameraMode = false;
-                        enemySpeed -= 2;
-                        if (enemySpeed < 10) enemySpeed = 10;
-                    }
-                }
-        
-                // Update distance counter
-                distance += 0.5f;
-            
-            } break;
-            case ENDING:
-            {
-                // Press enter to play again
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    
-                    // Reset player
-                    playerRail = 1;
-                    playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                    gameraMode = false;
-                    
-                    // Reset enemies data
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        int enemyProb = GetRandomValue(0, 100);
-                        
-                        if (enemyProb < 30) enemyType[i] = 0;
-                        else if (enemyProb < 60) enemyType[i] = 1;
-                        else if (enemyProb < 90) enemyType[i] = 2;
-                        else enemyType[i] = 3;
-                        
-                        //enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-                        
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                        enemyActive[i] = false;
-                    }
-                    
-                    enemySpeed = 10;
-                    
-                    // Reset game variables
-                    score = 0;
-                    distance = 0.0;
-                    foodBar = 0;
-                    framesCounter = 0;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            // Draw background (common to all screens)
-            DrawTexture(sky, 0, 0, WHITE);
-            
-            DrawTexture(mountains, backScrolling, 0, WHITE);
-            DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-            
-            if (!gameraMode)
-            {
-                DrawTexture(sea, seaScrolling, 0, (Color){ 16, 189, 227, 255});
-                DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 16, 189, 227, 255});
-            }
-            else
-            {
-                DrawTexture(sea, seaScrolling, 0, (Color){ 255, 113, 66, 255});
-                DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 255, 113, 66, 255});
-            }
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title
-                    DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER", (Vector2){ screenWidth/2 - 150, 480 }, font.baseSize, 0, WHITE);
-                
-                } break;
-                case GAMEPLAY:
-                {
-                    // Draw water lines
-                    for (int i = 0; i < 5; i++) DrawRectangle(0, i*120 + 120, screenWidth, 110, Fade(SKYBLUE, 0.1f));
-                    
-                    // Draw player
-                    if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE);
-                    else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE);
-                    
-                    // Draw player bounding box
-                    //if (!gameraMode) DrawRectangleRec(playerBounds, Fade(GREEN, 0.4f));
-                    //else DrawRectangleRec(playerBounds, Fade(ORANGE, 0.4f));
-                    
-                    // Draw enemies
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i]) 
-                        {
-                            // Draw enemies
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawTexture(shark, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 1: DrawTexture(orca, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 2: DrawTexture(swhale, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 3: DrawTexture(fish, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                default: break;
-                            }
-                            
-                            // Draw enemies bounding boxes
-                            /*
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 1: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 2: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 3: DrawRectangleRec(enemyBounds[i], Fade(GREEN, 0.5f)); break;
-                                default: break;
-                            }
-                            */
-                        }
-                    }
-                    
-                    // Draw gameplay interface
-                    DrawRectangle(20, 20, 400, 40, Fade(GRAY, 0.4f));
-                    DrawRectangle(20, 20, foodBar, 40, ORANGE);
-                    DrawRectangleLines(20, 20, 400, 40, BLACK);
-                    
-                    DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ screenWidth - 300, 20 }, font.baseSize, -2, ORANGE);
-                    DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 550, 20 }, font.baseSize, -2, ORANGE);
-                    
-                    if (gameraMode)
-                    {
-                        DrawText("GAMERA MODE", 60, 22, 40, GRAY);
-                        DrawTexture(gframe, 0, 0, Fade(WHITE, 0.5f));
-                    }
-            
-                } break;
-                case ENDING:
-                {
-                    // Draw a transparent black rectangle that covers all screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-                
-                    DrawTextEx(font, "GAME OVER", (Vector2){ 300, 160 }, font.baseSize*3, -2, MAROON);
-                    
-                    DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ 680, 350 }, font.baseSize, -2, GOLD);
-                    DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 290, 350 }, font.baseSize, -2, GOLD);
-                    DrawTextEx(font, FormatText("HISCORE: %04i", hiscore), (Vector2){ 665, 400 }, font.baseSize, -2, ORANGE);
-                    DrawTextEx(font, FormatText("HIDISTANCE: %04i", (int)hidistance), (Vector2){ 270, 400 }, font.baseSize, -2, ORANGE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER to REPLAY", (Vector2){ screenWidth/2 - 250, 520 }, font.baseSize, -2, LIGHTGRAY);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-    UnloadTexture(gframe);
-    UnloadTexture(title);
-    UnloadTexture(turtle);
-    UnloadTexture(shark);
-    UnloadTexture(orca);
-    UnloadTexture(swhale);
-    UnloadTexture(fish);
-    UnloadTexture(gamera);
-    
-    // Unload font texture
-    UnloadFont(font);
-    
-    CloseWindow();          // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 471
games/drturtle/05_drturtle_audio.c

@@ -1,471 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.6 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Initialize audio device
-    InitAudioDevice();      
-    
-    // Load game resources: textures
-    Texture2D sky = LoadTexture("resources/sky.png");
-    Texture2D mountains = LoadTexture("resources/mountains.png");
-    Texture2D sea = LoadTexture("resources/sea.png");
-    Texture2D title = LoadTexture("resources/title.png");
-    Texture2D turtle = LoadTexture("resources/turtle.png");
-    Texture2D shark = LoadTexture("resources/shark.png");
-    Texture2D orca = LoadTexture("resources/orca.png");
-    Texture2D swhale = LoadTexture("resources/swhale.png");
-    Texture2D fish = LoadTexture("resources/fish.png");
-    Texture2D gamera = LoadTexture("resources/gamera.png");
-    Texture2D gframe = LoadTexture("resources/gframe.png");
-    
-    // Load game resources: fonts
-    Font font = LoadFont("resources/komika.png");
-    
-    // Load game resources: sounds
-    Sound eat = LoadSound("resources/eat.wav");
-    Sound die = LoadSound("resources/die.wav");
-    Sound growl = LoadSound("resources/gamera.wav");
-    
-    // Load music stream and start playing music
-    Music music = LoadMusicStream("resources/speeding.ogg");
-    PlayMusicStream(music);
-
-    // Define scrolling variables
-    int backScrolling = 0;
-    int seaScrolling = 0;
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    // Define player variables
-    int playerRail = 1;
-    Rectangle playerBounds = { 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-    bool gameraMode = false;
-    
-    // Define enemies variables
-    Rectangle enemyBounds[MAX_ENEMIES];
-    int enemyRail[MAX_ENEMIES];
-    int enemyType[MAX_ENEMIES];
-    bool enemyActive[MAX_ENEMIES];
-    float enemySpeed = 10;
-    
-    // Init enemies variables
-    for (int i = 0; i < MAX_ENEMIES; i++)
-    {
-        // Define enemy type (all same probability)
-        //enemyType[i] = GetRandomValue(0, 3);
-    
-        // Probability system for enemies type
-        int enemyProb = GetRandomValue(0, 100);
-        
-        if (enemyProb < 30) enemyType[i] = 0;
-        else if (enemyProb < 60) enemyType[i] = 1;
-        else if (enemyProb < 90) enemyType[i] = 2;
-        else enemyType[i] = 3;
-
-        // Define enemy rail
-        enemyRail[i] = GetRandomValue(0, 4);
-
-        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-        enemyActive[i] = false;
-    }
-    
-    // Define additional game variables
-    int score = 0;
-    float distance = 0.0f;
-    int hiscore = 0;
-    float hidistance = 0.0f;
-    int foodBar = 0;
-    int framesCounter = 0;
-    
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-        UpdateMusicStream(music);   // Refill music stream buffers (if required)
-        
-        framesCounter++;
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Sea scrolling
-                seaScrolling -= 2;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    framesCounter = 0;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Background scrolling logic
-                backScrolling--;
-                if (backScrolling <= -screenWidth) backScrolling = 0; 
-                
-                // Sea scrolling logic
-                seaScrolling -= (enemySpeed - 2);
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Player movement logic
-                if (IsKeyPressed(KEY_DOWN)) playerRail++;
-                else if (IsKeyPressed(KEY_UP)) playerRail--;
-                
-                // Check player not out of rails
-                if (playerRail > 4) playerRail = 4;
-                else if (playerRail < 0) playerRail = 0;
-            
-                // Update player bounds
-                playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                
-                // Enemies activation logic (every 40 frames)        
-                if (framesCounter > 40)
-                {
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i] == false)
-                        {
-                            enemyActive[i] = true;
-                            i = MAX_ENEMIES;
-                        }
-                    }
-                    
-                    framesCounter = 0;
-                }
-                
-                // Enemies logic
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        enemyBounds[i].x -= enemySpeed;
-                    }
-                    
-                    // Check enemies out of screen
-                    if (enemyBounds[i].x <= 0 - 128)
-                    {
-                        enemyActive[i] = false;
-                        enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-                        
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                    }
-                }
-                
-                if (!gameraMode) enemySpeed += 0.005;
-                
-                // Check collision player vs enemies
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        if (CheckCollisionRecs(playerBounds, enemyBounds[i]))
-                        {                       
-                            if (enemyType[i] < 3)   // Bad enemies
-                            {
-                                if (gameraMode)
-                                {
-                                    if (enemyType[i] == 0) score += 50;
-                                    else if (enemyType[i] == 1) score += 150;
-                                    else if (enemyType[i] == 2) score += 300;
-                                    
-                                    foodBar += 15;
-                                
-                                    enemyActive[i] = false;
-                                    
-                                    // After enemy deactivation, reset enemy parameters to be reused
-                                    enemyType[i] = GetRandomValue(0, 3);
-                                    enemyRail[i] = GetRandomValue(0, 4);
-                                    
-                                    enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                    
-                                    PlaySound(eat);
-                                }
-                                else
-                                {
-                                    // Player die logic
-                                    PlaySound(die);
-                                
-                                    currentScreen = ENDING;
-                                    framesCounter = 0;
-                                    
-                                    // Save hiscore and hidistance for next game
-                                    if (score > hiscore) hiscore = score;
-                                    if (distance > hidistance) hidistance = distance;
-                                }
-                            }
-                            else    // Sweet fish
-                            {
-                                enemyActive[i] = false;
-                                enemyType[i] = GetRandomValue(0, 3);
-                                enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                
-                                if (!gameraMode) foodBar += 80;
-                                else foodBar += 25;
-                                
-                                score += 10;
-                                
-                                if (foodBar == 400)
-                                {
-                                    gameraMode = true;
-                                    
-                                    PlaySound(growl);
-                                }
-                                
-                                PlaySound(eat);
-                            }
-                        }
-                    }
-                }
-                
-                // Gamera mode logic
-                if (gameraMode)
-                {
-                    foodBar--;
-                    
-                    if (foodBar <= 0) 
-                    {
-                        gameraMode = false;
-                        enemySpeed -= 2;
-                        if (enemySpeed < 10) enemySpeed = 10;
-                    }
-                }
-        
-                // Update distance counter
-                distance += 0.5f;
-            
-            } break;
-            case ENDING:
-            {
-                // Press enter to play again
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    
-                    // Reset player
-                    playerRail = 1;
-                    playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                    
-                    // Reset enemies data
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        int enemyProb = GetRandomValue(0, 100);
-                        
-                        if (enemyProb < 30) enemyType[i] = 0;
-                        else if (enemyProb < 60) enemyType[i] = 1;
-                        else if (enemyProb < 90) enemyType[i] = 2;
-                        else enemyType[i] = 3;
-                        
-                        //enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                        enemyActive[i] = false;
-                    }
-                    
-                    enemySpeed = 10;
-                    
-                    // Reset game variables
-                    score = 0;
-                    distance = 0.0;
-                    foodBar = 0;
-                    gameraMode = false;
-                    framesCounter = 0;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            // Draw background (common to all screens)
-            DrawTexture(sky, 0, 0, WHITE);
-            
-            DrawTexture(mountains, backScrolling, 0, WHITE);
-            DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-            
-            if (!gameraMode)
-            {
-                DrawTexture(sea, seaScrolling, 0, (Color){ 16, 189, 227, 255});
-                DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 16, 189, 227, 255});
-            }
-            else
-            {
-                DrawTexture(sea, seaScrolling, 0, (Color){ 255, 113, 66, 255});
-                DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 255, 113, 66, 255});
-            }
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title
-                    DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER", (Vector2){ screenWidth/2 - 150, 480 }, font.baseSize, 0, WHITE);
-                
-                } break;
-                case GAMEPLAY:
-                {
-                    // Draw water lines
-                    for (int i = 0; i < 5; i++) DrawRectangle(0, i*120 + 120, screenWidth, 110, Fade(SKYBLUE, 0.1f));
-                    
-                    // Draw player
-                    if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE);
-                    else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE);
-                    
-                    // Draw player bounding box
-                    //if (!gameraMode) DrawRectangleRec(playerBounds, Fade(GREEN, 0.4f));
-                    //else DrawRectangleRec(playerBounds, Fade(ORANGE, 0.4f));
-                    
-                    // Draw enemies
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i]) 
-                        {
-                            // Draw enemies
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawTexture(shark, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 1: DrawTexture(orca, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 2: DrawTexture(swhale, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 3: DrawTexture(fish, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                default: break;
-                            }
-                            
-                            // Draw enemies bounding boxes
-                            /*
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 1: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 2: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 3: DrawRectangleRec(enemyBounds[i], Fade(GREEN, 0.5f)); break;
-                                default: break;
-                            }
-                            */
-                        }
-                    }
-                    
-                    // Draw gameplay interface
-                    DrawRectangle(20, 20, 400, 40, Fade(GRAY, 0.4f));
-                    DrawRectangle(20, 20, foodBar, 40, ORANGE);
-                    DrawRectangleLines(20, 20, 400, 40, BLACK);
-                    
-                    DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ screenWidth - 300, 20 }, font.baseSize, -2, ORANGE);
-                    DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 550, 20 }, font.baseSize, -2, ORANGE);
-                    
-                    if (gameraMode)
-                    {
-                        DrawText("GAMERA MODE", 60, 22, 40, GRAY);
-                        DrawTexture(gframe, 0, 0, Fade(WHITE, 0.5f));
-                    }
-            
-                } break;
-                case ENDING:
-                {
-                    // Draw a transparent black rectangle that covers all screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-                
-                    DrawTextEx(font, "GAME OVER", (Vector2){ 300, 160 }, font.baseSize*3, -2, MAROON);
-                    
-                    DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ 680, 350 }, font.baseSize, -2, GOLD);
-                    DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 290, 350 }, font.baseSize, -2, GOLD);
-                    DrawTextEx(font, FormatText("HISCORE: %04i", hiscore), (Vector2){ 665, 400 }, font.baseSize, -2, ORANGE);
-                    DrawTextEx(font, FormatText("HIDISTANCE: %04i", (int)hidistance), (Vector2){ 270, 400 }, font.baseSize, -2, ORANGE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER to REPLAY", (Vector2){ screenWidth/2 - 250, 520 }, font.baseSize, -2, LIGHTGRAY);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-    UnloadTexture(gframe);
-    UnloadTexture(title);
-    UnloadTexture(turtle);
-    UnloadTexture(shark);
-    UnloadTexture(orca);
-    UnloadTexture(swhale);
-    UnloadTexture(fish);
-    UnloadTexture(gamera);
-    
-    // Unload font texture
-    UnloadFont(font);
-    
-    // Unload sounds
-    UnloadSound(eat);
-    UnloadSound(die);
-    UnloadSound(growl);
-    
-    UnloadMusicStream(music);   // Unload music
-    CloseAudioDevice();         // Close audio device
-    
-    CloseWindow();              // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 495
games/drturtle/06_drturtle_final.c

@@ -1,495 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.6 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#include <math.h>        // Used for sinf()
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE, GAMEPLAY, ENDING } GameScreen;
-
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    const int screenWidth = 1280;
-    const int screenHeight = 720;
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Initialize audio device
-    InitAudioDevice();    
-    
-    // Load game resources: textures
-    Texture2D sky = LoadTexture("resources/sky.png");
-    Texture2D mountains = LoadTexture("resources/mountains.png");
-    Texture2D sea = LoadTexture("resources/sea.png");
-    Texture2D title = LoadTexture("resources/title.png");
-    Texture2D turtle = LoadTexture("resources/turtle.png");
-    Texture2D gamera = LoadTexture("resources/gamera.png");
-    Texture2D shark = LoadTexture("resources/shark.png");
-    Texture2D orca = LoadTexture("resources/orca.png");
-    Texture2D swhale = LoadTexture("resources/swhale.png");
-    Texture2D fish = LoadTexture("resources/fish.png");
-    Texture2D gframe = LoadTexture("resources/gframe.png");
-    
-    // Load game resources: fonts
-    Font font = LoadFont("resources/komika.png");
-    
-    // Load game resources: sounds
-    Sound eat = LoadSound("resources/eat.wav");
-    Sound die = LoadSound("resources/die.wav");
-    Sound growl = LoadSound("resources/gamera.wav");
-    
-    // Load music stream and start playing music
-    Music music = LoadMusicStream("resources/speeding.ogg");
-    PlayMusicStream(music);
-
-    // Define scrolling variables
-    int backScrolling = 0;
-    int seaScrolling = 0;
-    
-    // Define current screen
-    GameScreen currentScreen = TITLE;
-    
-    // Define player variables
-    int playerRail = 1;
-    Rectangle playerBounds = { 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-    bool gameraMode = false;
-    
-    // Define enemies variables
-    Rectangle enemyBounds[MAX_ENEMIES];
-    int enemyRail[MAX_ENEMIES];
-    int enemyType[MAX_ENEMIES];
-    bool enemyActive[MAX_ENEMIES];
-    float enemySpeed = 10;
-    
-    // Init enemies variables
-    for (int i = 0; i < MAX_ENEMIES; i++)
-    {
-        // Define enemy type (all same probability)
-        //enemyType[i] = GetRandomValue(0, 3);
-    
-        // Probability system for enemies type
-        int enemyProb = GetRandomValue(0, 100);
-        
-        if (enemyProb < 30) enemyType[i] = 0;
-        else if (enemyProb < 60) enemyType[i] = 1;
-        else if (enemyProb < 90) enemyType[i] = 2;
-        else enemyType[i] = 3;
-
-        // define enemy rail
-        enemyRail[i] = GetRandomValue(0, 4);
-
-        // Make sure not two consecutive enemies in the same row
-        if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-        
-        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-        enemyActive[i] = false;
-    }
-    
-    // Define additional game variables
-    int score = 0;
-    float distance = 0.0f;
-    int hiscore = 0;
-    float hidistance = 0.0f;
-    int foodBar = 0;
-    int framesCounter = 0;
-    
-    unsigned char blue = 200;
-    float timeCounter = 0;
-    
-    SetTargetFPS(60);       // Setup game frames per second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update
-        //----------------------------------------------------------------------------------
-        UpdateMusicStream(music);   // Refill music stream buffers (if required)
-        
-        framesCounter++;
-        
-        // Sea color tint effect
-        blue = 210 + 25 * sinf(timeCounter);
-        timeCounter += 0.01;
-
-        // Game screens management
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Sea scrolling
-                seaScrolling -= 2;
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Press enter to change to gameplay screen
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    framesCounter = 0;
-                }
-                
-            } break;
-            case GAMEPLAY:
-            {
-                // Background scrolling logic
-                backScrolling--;
-                if (backScrolling <= -screenWidth) backScrolling = 0; 
-                
-                // Sea scrolling logic
-                seaScrolling -= (enemySpeed - 2);
-                if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-            
-                // Player movement logic
-                if (IsKeyPressed(KEY_DOWN)) playerRail++;
-                else if (IsKeyPressed(KEY_UP)) playerRail--;
-                
-                // Check player not out of rails
-                if (playerRail > 4) playerRail = 4;
-                else if (playerRail < 0) playerRail = 0;
-            
-                // Update player bounds
-                playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                
-                // Enemies activation logic (every 40 frames)        
-                if (framesCounter > 40)
-                {
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i] == false)
-                        {
-                            enemyActive[i] = true;
-                            i = MAX_ENEMIES;
-                        }
-                    }
-                    
-                    framesCounter = 0;
-                }
-                
-                // Enemies logic
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        enemyBounds[i].x -= enemySpeed;
-                    }
-                    
-                    // Check enemies out of screen
-                    if (enemyBounds[i].x <= 0 - 128)
-                    {
-                        enemyActive[i] = false;
-                        enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-                        
-                        // Make sure not two consecutive enemies in the same row
-                        if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                        
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                    }
-                }
-                
-                if (!gameraMode) enemySpeed += 0.005;
-                
-                // Check collision player vs enemies
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i])
-                    {
-                        if (CheckCollisionRecs(playerBounds, enemyBounds[i]))
-                        {                       
-                            if (enemyType[i] < 3)   // Bad enemies
-                            {
-                                if (gameraMode)
-                                {
-                                    if (enemyType[i] == 0) score += 50;
-                                    else if (enemyType[i] == 1) score += 150;
-                                    else if (enemyType[i] == 2) score += 300;
-                                    
-                                    foodBar += 15;
-                                
-                                    enemyActive[i] = false;
-                                    
-                                    // After enemy deactivation, reset enemy parameters to be reused
-                                    enemyType[i] = GetRandomValue(0, 3);
-                                    enemyRail[i] = GetRandomValue(0, 4);
-                                    
-                                    // Make sure not two consecutive enemies in the same row
-                                    if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                                    
-                                    enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                    
-                                    PlaySound(eat);
-                                }
-                                else
-                                {
-                                    // Player die logic
-                                    PlaySound(die);
-                                
-                                    currentScreen = ENDING;
-                                    framesCounter = 0;
-                                    
-                                    // Save hiscore and hidistance for next game
-                                    if (score > hiscore) hiscore = score;
-                                    if (distance > hidistance) hidistance = distance;
-                                }
-                            }
-                            else    // Sweet fish
-                            {
-                                enemyActive[i] = false;
-                                enemyType[i] = GetRandomValue(0, 3);
-                                enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                // Make sure not two consecutive enemies in the same row
-                                if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                
-                                if (!gameraMode) foodBar += 80;
-                                else foodBar += 25;
-                                
-                                score += 10;
-                                
-                                if (foodBar == 400)
-                                {
-                                    gameraMode = true;
-                                    
-                                    PlaySound(growl);
-                                }
-                                
-                                PlaySound(eat);
-                            }
-                        }
-                    }
-                }
-                
-                // Gamera mode logic
-                if (gameraMode)
-                {
-                    foodBar--;
-                    
-                    if (foodBar <= 0) 
-                    {
-                        gameraMode = false;
-                        enemySpeed -= 2;
-                        if (enemySpeed < 10) enemySpeed = 10;
-                    }
-                }
-        
-                // Update distance counter
-                distance += 0.5f;
-            
-            } break;
-            case ENDING:
-            {
-                // Press enter to play again
-                if (IsKeyPressed(KEY_ENTER))
-                {
-                    currentScreen = GAMEPLAY;
-                    
-                    // Reset player
-                    playerRail = 1;
-                    playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                    gameraMode = false;
-                    
-                    // Reset enemies data
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        int enemyProb = GetRandomValue(0, 100);
-                        
-                        if (enemyProb < 30) enemyType[i] = 0;
-                        else if (enemyProb < 60) enemyType[i] = 1;
-                        else if (enemyProb < 90) enemyType[i] = 2;
-                        else enemyType[i] = 3;
-                        
-                        //enemyType[i] = GetRandomValue(0, 3);
-                        enemyRail[i] = GetRandomValue(0, 4);
-
-                        // Make sure not two consecutive enemies in the same row
-                        if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                        
-                        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                        enemyActive[i] = false;
-                    }
-                    
-                    enemySpeed = 10;
-                    
-                    // Reset game variables
-                    score = 0;
-                    distance = 0.0;
-                    foodBar = 0;
-                    framesCounter = 0;
-                }
-      
-            } break;
-            default: break;
-        }
-        //----------------------------------------------------------------------------------
-        
-        // Draw
-        //----------------------------------------------------------------------------------
-        BeginDrawing();
-        
-            ClearBackground(RAYWHITE);
-            
-            // Draw background (common to all screens)
-            DrawTexture(sky, 0, 0, WHITE);
-            
-            DrawTexture(mountains, backScrolling, 0, WHITE);
-            DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-            
-            if (!gameraMode)
-            {
-                DrawTexture(sea, seaScrolling, 0, (Color){ 16, 189, blue, 255});
-                DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 16, 189, blue, 255});
-            }
-            else
-            {
-                DrawTexture(sea, seaScrolling, 0, (Color){ 255, 113, 66, 255});
-                DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 255, 113, 66, 255});
-            }
-            
-            switch (currentScreen)
-            {
-                case TITLE:
-                {
-                    // Draw title
-                    DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER", (Vector2){ screenWidth/2 - 150, 480 }, font.baseSize, 0, WHITE);
-                
-                } break;
-                case GAMEPLAY:
-                {
-                    // Draw water lines
-                    for (int i = 0; i < 5; i++) DrawRectangle(0, i*120 + 120, screenWidth, 110, Fade(SKYBLUE, 0.1f));
-                    
-                    // Draw player
-                    if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE);
-                    else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE);
-                    
-                    // Draw player bounding box
-                    //if (!gameraMode) DrawRectangleRec(playerBounds, Fade(GREEN, 0.4f));
-                    //else DrawRectangleRec(playerBounds, Fade(ORANGE, 0.4f));
-                    
-                    // Draw enemies
-                    for (int i = 0; i < MAX_ENEMIES; i++)
-                    {
-                        if (enemyActive[i]) 
-                        {
-                            // Draw enemies
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawTexture(shark, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 1: DrawTexture(orca, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 2: DrawTexture(swhale, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                case 3: DrawTexture(fish, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                                default: break;
-                            }
-                            
-                            // Draw enemies bounding boxes
-                            /*
-                            switch(enemyType[i])
-                            {
-                                case 0: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 1: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 2: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                                case 3: DrawRectangleRec(enemyBounds[i], Fade(GREEN, 0.5f)); break;
-                                default: break;
-                            }
-                            */
-                        }
-                    }
-                    
-                    // Draw gameplay interface
-                    DrawRectangle(20, 20, 400, 40, Fade(GRAY, 0.4f));
-                    DrawRectangle(20, 20, foodBar, 40, ORANGE);
-                    DrawRectangleLines(20, 20, 400, 40, BLACK);
-                    
-                    DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ screenWidth - 300, 20 }, font.baseSize, -2, ORANGE);
-                    DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 550, 20 }, font.baseSize, -2, ORANGE);
-                    
-                    if (gameraMode)
-                    {
-                        DrawText("GAMERA MODE", 60, 22, 40, GRAY);
-                        DrawTexture(gframe, 0, 0, Fade(WHITE, 0.5f));
-                    }
-            
-                } break;
-                case ENDING:
-                {
-                    // Draw a transparent black rectangle that covers all screen
-                    DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-                
-                    DrawTextEx(font, "GAME OVER", (Vector2){ 300, 160 }, font.baseSize*3, -2, MAROON);
-                    
-                    DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ 680, 350 }, font.baseSize, -2, GOLD);
-                    DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 290, 350 }, font.baseSize, -2, GOLD);
-                    DrawTextEx(font, FormatText("HISCORE: %04i", hiscore), (Vector2){ 665, 400 }, font.baseSize, -2, ORANGE);
-                    DrawTextEx(font, FormatText("HIDISTANCE: %04i", (int)hidistance), (Vector2){ 270, 400 }, font.baseSize, -2, ORANGE);
-                    
-                    // Draw blinking text
-                    if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER to REPLAY", (Vector2){ screenWidth/2 - 250, 520 }, font.baseSize, -2, LIGHTGRAY);
-                    
-                } break;
-                default: break;
-            }
-
-        EndDrawing();
-        //----------------------------------------------------------------------------------
-    }
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-    UnloadTexture(gframe);
-    UnloadTexture(title);
-    UnloadTexture(turtle);
-    UnloadTexture(shark);
-    UnloadTexture(orca);
-    UnloadTexture(swhale);
-    UnloadTexture(fish);
-    UnloadTexture(gamera);
-    
-    // Unload font texture
-    UnloadFont(font);
-    
-    // Unload sounds
-    UnloadSound(eat);
-    UnloadSound(die);
-    UnloadSound(growl);
-    
-    UnloadMusicStream(music);   // Unload music
-    CloseAudioDevice();         // Close audio device
-    
-    CloseWindow();              // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}

+ 0 - 13
games/drturtle/CMakeLists.txt

@@ -1,13 +0,0 @@
-cmake_minimum_required(VERSION 2.6)
-project(drturtle)
-
-# Executable & linking
-add_executable(${PROJECT_NAME} 06_drturtle_final.c)
-if (NOT TARGET raylib)
-  find_package(raylib 2.0 REQUIRED)
-endif()
-target_link_libraries(${PROJECT_NAME} raylib)
-
-# Resources
-# Copy all of the resource files to the destination
-file(COPY "resources/"  DESTINATION "resources/")

+ 0 - 20
games/drturtle/LICENSE.txt

@@ -1,20 +0,0 @@
-
-This game sources are licensed under an unmodified zlib/libpng license, 
-which is an OSI-certified, BSD-like license:
-	
-Copyright (c) 2013-2017 Ramon Santamaria (@raysan5)
-
-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.

+ 0 - 385
games/drturtle/Makefile

@@ -1,385 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
-#
-#   Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
-#
-#   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.
-#
-#**************************************************************************************************
-
-.PHONY: all clean
-
-# Define required raylib variables
-PROJECT_NAME       ?= drturtle
-RAYLIB_VERSION     ?= 3.0.0
-RAYLIB_API_VERSION ?= 3
-RAYLIB_PATH        ?= C:\GitHub\raylib
-
-# Define default options
-
-# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
-PLATFORM           ?= PLATFORM_DESKTOP
-
-# Locations of your newly installed library and associated headers. See ../src/Makefile
-# On Linux, if you have installed raylib but cannot compile the examples, check that
-# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
-# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
-# To enable compile-time linking to a special version of libraylib.so, change these variables here.
-# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
-# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
-# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
-# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
-DESTDIR ?= /usr/local
-RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
-# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
-RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE        ?= STATIC
-
-# Build mode for project: DEBUG or RELEASE
-BUILD_MODE            ?= RELEASE
-
-# Use external GLFW library instead of rglfw module
-# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
-USE_EXTERNAL_GLFW     ?= FALSE
-
-# Use Wayland display server protocol on Linux desktop
-# by default it uses X11 windowing system
-USE_WAYLAND_DISPLAY   ?= FALSE
-
-# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    # No uname.exe on MinGW!, but OS=Windows_NT on Windows!
-    # ifeq ($(UNAME),Msys) -> Windows
-    ifeq ($(OS),Windows_NT)
-        PLATFORM_OS=WINDOWS
-    else
-        UNAMEOS=$(shell uname)
-        ifeq ($(UNAMEOS),Linux)
-            PLATFORM_OS=LINUX
-        endif
-        ifeq ($(UNAMEOS),FreeBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),OpenBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),NetBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),DragonFly)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),Darwin)
-            PLATFORM_OS=OSX
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    UNAMEOS=$(shell uname)
-    ifeq ($(UNAMEOS),Linux)
-        PLATFORM_OS=LINUX
-    endif
-endif
-
-# RAYLIB_PATH adjustment for different platforms.
-# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
-# Required for ldconfig or other tools that do not perform path expansion.
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        RAYLIB_PREFIX ?= ..
-        RAYLIB_PATH    = $(realpath $(RAYLIB_PREFIX))
-    endif
-endif
-# Default path for raylib on Raspberry Pi, if installed in different path, update it!
-# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
-# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    RAYLIB_PATH       ?= /home/pi/raylib
-endif
-
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Emscripten required variables
-    EMSDK_PATH         ?= C:/emsdk
-    EMSCRIPTEN_PATH    ?= $(EMSDK_PATH)/fastcomp/emscripten
-    CLANG_PATH          = $(EMSDK_PATH)/fastcomp/bin
-    PYTHON_PATH         = $(EMSDK_PATH)/python/2.7.13.1_64bit/python-2.7.13.amd64
-    NODE_PATH           = $(EMSDK_PATH)/node/12.9.1_64bit/bin
-    export PATH         = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
-endif
-
-# Define raylib release directory for compiled library.
-# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version
-RAYLIB_RELEASE_PATH 	?= $(RAYLIB_PATH)/src
-
-# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
-# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
-# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
-# without formal installation from ../src/Makefile. It aids portability and is useful if you have
-# multiple versions of raylib, have raylib installed to a non-standard location, or want to
-# bundle libraylib.so with your game. Change it to your liking.
-# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
-# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
-# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
-# To see which libraries a built example is linking to, ldd core/core_basic_window;
-# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
-EXAMPLE_RUNTIME_PATH   ?= $(RAYLIB_RELEASE_PATH)
-
-# Define default C compiler: gcc
-# NOTE: define g++ compiler if using C++
-CC = gcc
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),OSX)
-        # OSX default compiler
-        CC = clang
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
-        CC = clang
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
-        # Define RPI cross-compiler
-        #CC = armv6j-hardfloat-linux-gnueabi-gcc
-        CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # HTML5 emscripten compiler
-    # WARNING: To compile to HTML5, code must be redesigned
-    # to use emscripten.h and emscripten_set_main_loop()
-    CC = emcc
-endif
-
-# Define default make program: Mingw32-make
-MAKE = mingw32-make
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        MAKE = make
-    endif
-endif
-
-# Define compiler flags:
-#  -O1                  defines optimization level
-#  -g                   include debug information on compilation
-#  -s                   strip unnecessary data from build
-#  -Wall                turns on most, but not all, compiler warnings
-#  -std=c99             defines C language mode (standard C from 1999 revision)
-#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
-#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
-#  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
-CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
-
-ifeq ($(BUILD_MODE),DEBUG)
-    CFLAGS += -g
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -s ASSERTIONS=1 --profiling
-    endif
-else
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -Os
-    else
-        CFLAGS += -s -O1
-    endif
-endif
-
-# Additional flags for compiler (if desired)
-#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        ifeq ($(RAYLIB_LIBTYPE),STATIC)
-            CFLAGS += -D_DEFAULT_SOURCE
-        endif
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            # Explicitly enable runtime link to libraylib.so
-            CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    CFLAGS += -std=gnu99
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # -Os                        # size optimization
-    # -O2                        # optimization level 2, if used, also set --memory-init-file 0
-    # -s USE_GLFW=3              # Use glfw3 library (context/input management)
-    # -s ALLOW_MEMORY_GROWTH=1   # to allow memory resizing -> WARNING: Audio buffers could FAIL!
-    # -s TOTAL_MEMORY=16777216   # to specify heap memory size (default = 16MB)
-    # -s USE_PTHREADS=1          # multithreading support
-    # -s WASM=0                  # disable Web Assembly, emitted by default
-    # -s EMTERPRETIFY=1          # enable emscripten code interpreter (very slow)
-    # -s EMTERPRETIFY_ASYNC=1    # support synchronous loops by emterpreter
-    # -s FORCE_FILESYSTEM=1      # force filesystem to load/save files data
-    # -s ASSERTIONS=1            # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
-    # --profiling                # include information for code profiling
-    # --memory-init-file 0       # to avoid an external memory initialization code file (.mem)
-    # --preload-file resources   # specify a resources folder for data compilation
-    CFLAGS += -s USE_GLFW=3 -s TOTAL_MEMORY=67108864 --preload-file resources
-
-    # Define a custom shell .html and output extension
-    CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
-    EXT = .html
-endif
-
-# Define include paths for required headers
-# NOTE: Several external required libraries (stb and others)
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
-
-# Define additional directories containing required header files
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # RPI required libraries
-    INCLUDE_PATHS += -I/opt/vc/include
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
-endif
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_H_INSTALL_PATH)
-        INCLUDE_PATHS += -I/usr/local/include
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
-        INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
-    endif
-endif
-
-# Define library paths containing required libs.
-LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # resource file contains windows executable icon and properties
-        LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data 
-        # -Wl,--subsystem,windows hides the console window
-        ifeq ($(BUILD_MODE), RELEASE)
-            LDFLAGS += -Wl,--subsystem,windows
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_INSTALL_PATH)
-        LDFLAGS += -L. -Lsrc -L/usr/local/lib
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs
-        LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
-    endif
-endif
-
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    LDFLAGS += -L/opt/vc/lib
-endif
-
-# Define any libraries required on linking
-# if you want to link libraries (libname.so or libname.a), use the -lname
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # Libraries for Windows desktop compilation
-        # NOTE: WinMM library required to set high-res timer resolution
-        LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
-        # Required for physac examples
-        LDLIBS += -static -lpthread
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Libraries for Debian GNU/Linux desktop compiling
-        # NOTE: Required packages: libegl1-mesa-dev
-        LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
-
-        # On X11 requires also below libraries
-        LDLIBS += -lX11
-        # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
-        #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-
-        # On Wayland windowing system, additional libraries requires
-        ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
-            LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
-        endif
-        # Explicit link to libc
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            LDLIBS += -lc
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-        # Libraries for OSX 10.9 desktop compiling
-        # NOTE: Required packages: libopenal-dev libegl1-mesa-dev
-        LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo 
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
-        # NOTE: Required packages: mesa-libs
-        LDLIBS = -lraylib -lGL -lpthread -lm
-
-        # On XWindow requires also below libraries
-        LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-    endif
-    ifeq ($(USE_EXTERNAL_GLFW),TRUE)
-        # NOTE: It could require additional packages installed: libglfw3-dev
-        LDLIBS += -lglfw
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # Libraries for Raspberry Pi compiling
-    # NOTE: Required packages: libasound2-dev (ALSA)
-    LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Libraries for web (HTML5) compiling
-    LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
-endif
-
-# Define all source files required
-SCREENS = drturtle_final_web \
-
-# typing 'make' will invoke the default target entry
-all: $(SCREENS)
-
-%: %.c
-ifeq ($(PLATFORM),PLATFORM_ANDROID)
-	$(MAKE) -f Makefile.Android PROJECT_NAME=$@ PROJECT_SOURCE_FILES=$<
-else
-	$(CC) -o $(PROJECT_NAME)$(EXT) $< $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
-endif
-
-# Clean everything
-clean:
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-		del *.o *.exe /s
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-	find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable|x-pie-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-		find . -type f -perm +ugo+x -delete
-		rm -f *.o
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-	find . -type f -executable -delete
-	rm -fv *.o
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-	del *.o *.html *.js
-endif
-	@echo Cleaning done
-

+ 0 - 544
games/drturtle/drturtle_final_web.c

@@ -1,544 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib game - Dr. Turtle & Mr. Gamera
-*
-*   Welcome to raylib!
-*
-*   To test examples, just press F6 and execute raylib_compile_execute script
-*   Note that compiled executable is placed in the same folder as .c file
-*
-*   You can find all basic examples on C:\raylib\raylib\examples folder or
-*   raylib official webpage: www.raylib.com
-*
-*   Enjoy using raylib. :)
-*
-*   This game has been created using raylib 1.6 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include <math.h>        // Used for sinf()
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-#define MAX_ENEMIES 10
-
-typedef enum { TITLE = 0, GAMEPLAY, ENDING } GameScreen;
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition
-//----------------------------------------------------------------------------------
-const int screenWidth = 1280;
-const int screenHeight = 720;
-    
-Texture2D sky;
-Texture2D mountains;
-Texture2D sea;
-Texture2D title;
-Texture2D turtle;
-Texture2D gamera;
-Texture2D shark;
-Texture2D orca;
-Texture2D swhale;
-Texture2D fish;
-Texture2D gframe;
-
-Font font;
-
-Sound eat;
-Sound die;
-Sound growl;
-
-Music music;
-
-// Define scrolling variables
-int backScrolling = 0;
-int seaScrolling = 0;
-
-// Define current screen
-GameScreen currentScreen = 0;
-
-// Define player variables
-int playerRail = 1;
-Rectangle playerBounds;
-bool gameraMode = false;
-
-// Define enemies variables
-Rectangle enemyBounds[MAX_ENEMIES];
-int enemyRail[MAX_ENEMIES];
-int enemyType[MAX_ENEMIES];
-bool enemyActive[MAX_ENEMIES];
-float enemySpeed = 10;
-    
-// Define additional game variables
-int score = 0;
-float distance = 0.0f;
-int hiscore = 0;
-float hidistance = 0.0f;
-int foodBar = 0;
-int framesCounter = 0;
-
-unsigned char blue = 200;
-float timeCounter = 0;
-    
-//----------------------------------------------------------------------------------
-// Module Functions Declaration
-//----------------------------------------------------------------------------------
-void UpdateDrawFrame(void);     // Update and Draw one frame
-
-//----------------------------------------------------------------------------------
-// Main Enry Point
-//----------------------------------------------------------------------------------
-int main()
-{
-    // Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Init window
-    InitWindow(screenWidth, screenHeight, "Dr. Turtle & Mr. GAMERA");
-    
-    // Initialize audio device
-    InitAudioDevice();      
-    
-    // Load game resources: textures
-    sky = LoadTexture("resources/sky.png");
-    mountains = LoadTexture("resources/mountains.png");
-    sea = LoadTexture("resources/sea.png");
-    title = LoadTexture("resources/title.png");
-    turtle = LoadTexture("resources/turtle.png");
-    gamera = LoadTexture("resources/gamera.png");
-    shark = LoadTexture("resources/shark.png");
-    orca = LoadTexture("resources/orca.png");
-    swhale = LoadTexture("resources/swhale.png");
-    fish = LoadTexture("resources/fish.png");
-    gframe = LoadTexture("resources/gframe.png");
-    
-    // Load game resources: fonts
-    font = LoadFont("resources/komika.png");
-    
-    // Load game resources: sounds
-    eat = LoadSound("resources/eat.wav");
-    die = LoadSound("resources/die.wav");
-    growl = LoadSound("resources/gamera.wav");
-    
-    // Load music stream and start playing music
-    music = LoadMusicStream("resources/speeding.ogg");
-    PlayMusicStream(music);
-    
-    playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-    
-    // Init enemies variables
-    for (int i = 0; i < MAX_ENEMIES; i++)
-    {
-        // Define enemy type (all same probability)
-        //enemyType[i] = GetRandomValue(0, 3);
-    
-        // Probability system for enemies type
-        int enemyProb = GetRandomValue(0, 100);
-        
-        if (enemyProb < 30) enemyType[i] = 0;
-        else if (enemyProb < 60) enemyType[i] = 1;
-        else if (enemyProb < 90) enemyType[i] = 2;
-        else enemyType[i] = 3;
-
-        // define enemy rail
-        enemyRail[i] = GetRandomValue(0, 4);
-
-        // Make sure not two consecutive enemies in the same row
-        if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-        
-        enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-        enemyActive[i] = false;
-    }
-    
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);   // Set our game to run at 60 frames-per-second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        UpdateDrawFrame();
-    }
-#endif
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload textures
-    UnloadTexture(sky);
-    UnloadTexture(mountains);
-    UnloadTexture(sea);
-    UnloadTexture(gframe);
-    UnloadTexture(title);
-    UnloadTexture(turtle);
-    UnloadTexture(shark);
-    UnloadTexture(orca);
-    UnloadTexture(swhale);
-    UnloadTexture(fish);
-    UnloadTexture(gamera);
-    
-    // Unload font texture
-    UnloadFont(font);
-    
-    // Unload sounds
-    UnloadSound(eat);
-    UnloadSound(die);
-    UnloadSound(growl);
-    
-    UnloadMusicStream(music);   // Unload music
-    CloseAudioDevice();         // Close audio device
-    
-    CloseWindow();              // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-    
-    return 0;
-}
-
-//----------------------------------------------------------------------------------
-// Module Functions Definition
-//----------------------------------------------------------------------------------
-void UpdateDrawFrame(void)
-{
-    // Update
-    //----------------------------------------------------------------------------------
-    UpdateMusicStream(music);   // Refill music stream buffers (if required)
-        
-    framesCounter++;
-    
-    // Sea color tint effect
-    blue = 210 + 25 * sinf(timeCounter);
-    timeCounter += 0.01;
-
-    // Game screens management
-    switch (currentScreen)
-    {
-        case TITLE:
-        {
-            // Sea scrolling
-            seaScrolling -= 2;
-            if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-        
-            // Press enter to change to gameplay screen
-            if (IsKeyPressed(KEY_ENTER))
-            {
-                currentScreen = GAMEPLAY;
-                framesCounter = 0;
-            }
-            
-        } break;
-        case GAMEPLAY:
-        {
-            // Background scrolling logic
-            backScrolling--;
-            if (backScrolling <= -screenWidth) backScrolling = 0; 
-            
-            // Sea scrolling logic
-            seaScrolling -= (enemySpeed - 2);
-            if (seaScrolling <= -screenWidth) seaScrolling = 0; 
-        
-            // Player movement logic
-            if (IsKeyPressed(KEY_DOWN)) playerRail++;
-            else if (IsKeyPressed(KEY_UP)) playerRail--;
-            
-            // Check player not out of rails
-            if (playerRail > 4) playerRail = 4;
-            else if (playerRail < 0) playerRail = 0;
-        
-            // Update player bounds
-            playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-            
-            // Enemies activation logic (every 40 frames)        
-            if (framesCounter > 40)
-            {
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i] == false)
-                    {
-                        enemyActive[i] = true;
-                        i = MAX_ENEMIES;
-                    }
-                }
-                
-                framesCounter = 0;
-            }
-            
-            // Enemies logic
-            for (int i = 0; i < MAX_ENEMIES; i++)
-            {
-                if (enemyActive[i])
-                {
-                    enemyBounds[i].x -= enemySpeed;
-                }
-                
-                // Check enemies out of screen
-                if (enemyBounds[i].x <= 0 - 128)
-                {
-                    enemyActive[i] = false;
-                    enemyType[i] = GetRandomValue(0, 3);
-                    enemyRail[i] = GetRandomValue(0, 4);
-                    
-                    // Make sure not two consecutive enemies in the same row
-                    if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                    
-                    enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                }
-            }
-            
-            if (!gameraMode) enemySpeed += 0.005;
-            
-            // Check collision player vs enemies
-            for (int i = 0; i < MAX_ENEMIES; i++)
-            {
-                if (enemyActive[i])
-                {
-                    if (CheckCollisionRecs(playerBounds, enemyBounds[i]))
-                    {                       
-                        if (enemyType[i] < 3)   // Bad enemies
-                        {
-                            if (gameraMode)
-                            {
-                                if (enemyType[i] == 0) score += 50;
-                                else if (enemyType[i] == 1) score += 150;
-                                else if (enemyType[i] == 2) score += 300;
-                                
-                                foodBar += 15;
-                            
-                                enemyActive[i] = false;
-                                
-                                // After enemy deactivation, reset enemy parameters to be reused
-                                enemyType[i] = GetRandomValue(0, 3);
-                                enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                // Make sure not two consecutive enemies in the same row
-                                if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                                
-                                enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                                
-                                PlaySound(eat);
-                            }
-                            else
-                            {
-                                // Player die logic
-                                PlaySound(die);
-                            
-                                currentScreen = ENDING;
-                                framesCounter = 0;
-                                
-                                // Save hiscore and hidistance for next game
-                                if (score > hiscore) hiscore = score;
-                                if (distance > hidistance) hidistance = distance;
-                            }
-                        }
-                        else    // Sweet fish
-                        {
-                            enemyActive[i] = false;
-                            enemyType[i] = GetRandomValue(0, 3);
-                            enemyRail[i] = GetRandomValue(0, 4);
-                            
-                            // Make sure not two consecutive enemies in the same row
-                            if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                            
-                            enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                            
-                            if (!gameraMode) foodBar += 80;
-                            else foodBar += 25;
-                            
-                            score += 10;
-                            
-                            if (foodBar == 400)
-                            {
-                                gameraMode = true;
-                                
-                                PlaySound(growl);
-                            }
-                            
-                            PlaySound(eat);
-                        }
-                    }
-                }
-            }
-            
-            // Gamera mode logic
-            if (gameraMode)
-            {
-                foodBar--;
-                
-                if (foodBar <= 0) 
-                {
-                    gameraMode = false;
-                    enemySpeed -= 2;
-                    if (enemySpeed < 10) enemySpeed = 10;
-                }
-            }
-    
-            // Update distance counter
-            distance += 0.5f;
-        
-        } break;
-        case ENDING:
-        {
-            // Press enter to play again
-            if (IsKeyPressed(KEY_ENTER))
-            {
-                currentScreen = GAMEPLAY;
-                
-                // Reset player
-                playerRail = 1;
-                playerBounds = (Rectangle){ 30 + 14, playerRail*120 + 90 + 14, 100, 100 };
-                gameraMode = false;
-                
-                // Reset enemies data
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    int enemyProb = GetRandomValue(0, 100);
-                    
-                    if (enemyProb < 30) enemyType[i] = 0;
-                    else if (enemyProb < 60) enemyType[i] = 1;
-                    else if (enemyProb < 90) enemyType[i] = 2;
-                    else enemyType[i] = 3;
-                    
-                    //enemyType[i] = GetRandomValue(0, 3);
-                    enemyRail[i] = GetRandomValue(0, 4);
-
-                    // Make sure not two consecutive enemies in the same row
-                    if (i > 0) while (enemyRail[i] == enemyRail[i - 1]) enemyRail[i] = GetRandomValue(0, 4);
-                    
-                    enemyBounds[i] = (Rectangle){ screenWidth + 14, 120*enemyRail[i] + 90 + 14, 100, 100 };
-                    enemyActive[i] = false;
-                }
-                
-                enemySpeed = 10;
-                
-                // Reset game variables
-                score = 0;
-                distance = 0.0;
-                foodBar = 0;
-                framesCounter = 0;
-            }
-  
-        } break;
-        default: break;
-    }
-    //----------------------------------------------------------------------------------
-    
-    // Draw
-    //----------------------------------------------------------------------------------
-    BeginDrawing();
-    
-        ClearBackground(RAYWHITE);
-        
-        // Draw background (common to all screens)
-        DrawTexture(sky, 0, 0, WHITE);
-        
-        DrawTexture(mountains, backScrolling, 0, WHITE);
-        DrawTexture(mountains, screenWidth + backScrolling, 0, WHITE);
-        
-        if (!gameraMode)
-        {
-            DrawTexture(sea, seaScrolling, 0, (Color){ 16, 189, blue, 255});
-            DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 16, 189, blue, 255});
-        }
-        else
-        {
-            DrawTexture(sea, seaScrolling, 0, (Color){ 255, 113, 66, 255});
-            DrawTexture(sea, screenWidth + seaScrolling, 0, (Color){ 255, 113, 66, 255});
-        }
-        
-        switch (currentScreen)
-        {
-            case TITLE:
-            {
-                // Draw title
-                DrawTexture(title, screenWidth/2 - title.width/2, screenHeight/2 - title.height/2 - 80, WHITE);
-                
-                // Draw blinking text
-                if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER", (Vector2){ screenWidth/2 - 150, 480 }, font.baseSize, 1, WHITE);
-            
-            } break;
-            case GAMEPLAY:
-            {
-                // Draw water lines
-                for (int i = 0; i < 5; i++) DrawRectangle(0, i*120 + 120, screenWidth, 110, Fade(SKYBLUE, 0.1f));
-                
-                // Draw player
-                if (!gameraMode) DrawTexture(turtle, playerBounds.x - 14, playerBounds.y - 14, WHITE);
-                else DrawTexture(gamera, playerBounds.x - 64, playerBounds.y - 64, WHITE);
-                
-                // Draw player bounding box
-                //if (!gameraMode) DrawRectangleRec(playerBounds, Fade(GREEN, 0.4f));
-                //else DrawRectangleRec(playerBounds, Fade(ORANGE, 0.4f));
-                
-                // Draw enemies
-                for (int i = 0; i < MAX_ENEMIES; i++)
-                {
-                    if (enemyActive[i]) 
-                    {
-                        // Draw enemies
-                        switch(enemyType[i])
-                        {
-                            case 0: DrawTexture(shark, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                            case 1: DrawTexture(orca, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                            case 2: DrawTexture(swhale, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                            case 3: DrawTexture(fish, enemyBounds[i].x - 14, enemyBounds[i].y - 14, WHITE); break;
-                            default: break;
-                        }
-                        
-                        // Draw enemies bounding boxes
-                        /*
-                        switch(enemyType[i])
-                        {
-                            case 0: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                            case 1: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                            case 2: DrawRectangleRec(enemyBounds[i], Fade(RED, 0.5f)); break;
-                            case 3: DrawRectangleRec(enemyBounds[i], Fade(GREEN, 0.5f)); break;
-                            default: break;
-                        }
-                        */
-                    }
-                }
-                
-                // Draw gameplay interface
-                DrawRectangle(20, 20, 400, 40, Fade(GRAY, 0.4f));
-                DrawRectangle(20, 20, foodBar, 40, ORANGE);
-                DrawRectangleLines(20, 20, 400, 40, BLACK);
-                
-                DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ screenWidth - 300, 20 }, font.baseSize, -2, ORANGE);
-                DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 550, 20 }, font.baseSize, -2, ORANGE);
-                
-                if (gameraMode)
-                {
-                    DrawText("GAMERA MODE", 60, 22, 40, GRAY);
-                    DrawTexture(gframe, 0, 0, Fade(WHITE, 0.5f));
-                }
-        
-            } break;
-            case ENDING:
-            {
-                // Draw a transparent black rectangle that covers all screen
-                DrawRectangle(0, 0, screenWidth, screenHeight, Fade(BLACK, 0.4f));
-            
-                DrawTextEx(font, "GAME OVER", (Vector2){ 300, 160 }, font.baseSize*3, -2, MAROON);
-                
-                DrawTextEx(font, FormatText("SCORE: %04i", score), (Vector2){ 680, 350 }, font.baseSize, -2, GOLD);
-                DrawTextEx(font, FormatText("DISTANCE: %04i", (int)distance), (Vector2){ 290, 350 }, font.baseSize, -2, GOLD);
-                DrawTextEx(font, FormatText("HISCORE: %04i", hiscore), (Vector2){ 665, 400 }, font.baseSize, -2, ORANGE);
-                DrawTextEx(font, FormatText("HIDISTANCE: %04i", (int)hidistance), (Vector2){ 270, 400 }, font.baseSize, -2, ORANGE);
-                
-                // Draw blinking text
-                if ((framesCounter/30) % 2) DrawTextEx(font, "PRESS ENTER to REPLAY", (Vector2){ screenWidth/2 - 250, 520 }, font.baseSize, -2, LIGHTGRAY);
-                
-            } break;
-            default: break;
-        }
-
-    EndDrawing();
-    //----------------------------------------------------------------------------------
-}

BIN
games/drturtle/resources/die.wav


BIN
games/drturtle/resources/eat.wav


BIN
games/drturtle/resources/fish.png


BIN
games/drturtle/resources/gamera.png


BIN
games/drturtle/resources/gamera.wav


BIN
games/drturtle/resources/gframe.png


BIN
games/drturtle/resources/komika.png


BIN
games/drturtle/resources/mountains.png


BIN
games/drturtle/resources/orca.png


BIN
games/drturtle/resources/sea.png


BIN
games/drturtle/resources/shark.png


BIN
games/drturtle/resources/sky.png


BIN
games/drturtle/resources/speeding.ogg


BIN
games/drturtle/resources/swhale.png


BIN
games/drturtle/resources/title.png


BIN
games/drturtle/resources/turtle.png


+ 0 - 238
games/floppy.c

@@ -1,238 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib - sample game: floppy
-*
-*   Sample game developed by Ian Eito, Albert Martos and Ramon Santamaria
-*
-*   This game has been created using raylib v1.3 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Some Defines
-//----------------------------------------------------------------------------------
-#define MAX_TUBES 100
-#define FLOPPY_RADIUS 24
-#define TUBES_WIDTH 80
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef struct Floppy {
-    Vector2 position;
-    int radius;
-    Color color;
-} Floppy;
-
-typedef struct Tubes {
-    Rectangle rec;
-    Color color;
-    bool active;
-} Tubes;
-
-//------------------------------------------------------------------------------------
-// Global Variables Declaration
-//------------------------------------------------------------------------------------
-static const int screenWidth = 800;
-static const int screenHeight = 450;
-
-static bool gameOver = false;
-static bool pause = false;
-static int score = 0;
-static int hiScore = 0;
-
-static Floppy floppy = { 0 };
-static Tubes tubes[MAX_TUBES*2] = { 0 };
-static Vector2 tubesPos[MAX_TUBES] = { 0 };
-static int tubesSpeedX = 0;
-static bool superfx = false;
-
-//------------------------------------------------------------------------------------
-// Module Functions Declaration (local)
-//------------------------------------------------------------------------------------
-static void InitGame(void);         // Initialize game
-static void UpdateGame(void);       // Update game (one frame)
-static void DrawGame(void);         // Draw game (one frame)
-static void UnloadGame(void);       // Unload game
-static void UpdateDrawFrame(void);  // Update and Draw (one frame)
-
-//------------------------------------------------------------------------------------
-// Program main entry point
-//------------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "sample game: floppy");
-
-    InitGame();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update and Draw
-        //----------------------------------------------------------------------------------
-        UpdateDrawFrame();
-        //----------------------------------------------------------------------------------
-    }
-#endif
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadGame();         // Unload loaded data (textures, sounds, models...)
-    
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-//------------------------------------------------------------------------------------
-// Module Functions Definitions (local)
-//------------------------------------------------------------------------------------
-
-// Initialize game variables
-void InitGame(void)
-{
-    floppy.radius = FLOPPY_RADIUS;
-    floppy.position = (Vector2){80, screenHeight/2 - floppy.radius};
-    tubesSpeedX = 2;
-
-    for (int i = 0; i < MAX_TUBES; i++)
-    {
-        tubesPos[i].x = 400 + 280*i;
-        tubesPos[i].y = -GetRandomValue(0, 120);
-    }
-
-    for (int i = 0; i < MAX_TUBES*2; i += 2)
-    {
-        tubes[i].rec.x = tubesPos[i/2].x;
-        tubes[i].rec.y = tubesPos[i/2].y;
-        tubes[i].rec.width = TUBES_WIDTH;
-        tubes[i].rec.height = 255;
-
-        tubes[i+1].rec.x = tubesPos[i/2].x;
-        tubes[i+1].rec.y = 600 + tubesPos[i/2].y - 255;
-        tubes[i+1].rec.width = TUBES_WIDTH;
-        tubes[i+1].rec.height = 255;
-
-        tubes[i/2].active = true;
-    }
-
-    score = 0;
-
-    gameOver = false;
-    superfx = false;
-    pause = false;
-}
-
-// Update game (one frame)
-void UpdateGame(void)
-{
-    if (!gameOver)
-    {
-        if (IsKeyPressed('P')) pause = !pause;
-
-        if (!pause)
-        {
-            for (int i = 0; i < MAX_TUBES; i++) tubesPos[i].x -= tubesSpeedX;
-
-            for (int i = 0; i < MAX_TUBES*2; i += 2)
-            {
-                tubes[i].rec.x = tubesPos[i/2].x;
-                tubes[i+1].rec.x = tubesPos[i/2].x;
-            }
-
-            if (IsKeyDown(KEY_SPACE) && !gameOver) floppy.position.y -= 3;
-            else floppy.position.y += 1;
-
-            // Check Collisions
-            for (int i = 0; i < MAX_TUBES*2; i++)
-            {
-                if (CheckCollisionCircleRec(floppy.position, floppy.radius, tubes[i].rec))
-                {
-                    gameOver = true;
-                    pause = false;
-                }
-                else if ((tubesPos[i/2].x < floppy.position.x) && tubes[i/2].active && !gameOver)
-                {
-                    score += 100;
-                    tubes[i/2].active = false;
-
-                    superfx = true;
-
-                    if (score > hiScore) hiScore = score;
-                }
-            }
-        }
-    }
-    else
-    {
-        if (IsKeyPressed(KEY_ENTER))
-        {
-            InitGame();
-            gameOver = false;
-        }
-    }
-}
-
-// Draw game (one frame)
-void DrawGame(void)
-{
-    BeginDrawing();
-
-        ClearBackground(RAYWHITE);
-
-        if (!gameOver) 
-        {
-            DrawCircle(floppy.position.x, floppy.position.y, floppy.radius, DARKGRAY);
-
-            // Draw tubes
-            for (int i = 0; i < MAX_TUBES; i++)
-            {
-                DrawRectangle(tubes[i*2].rec.x, tubes[i*2].rec.y, tubes[i*2].rec.width, tubes[i*2].rec.height, GRAY);
-                DrawRectangle(tubes[i*2 + 1].rec.x, tubes[i*2 + 1].rec.y, tubes[i*2 + 1].rec.width, tubes[i*2 + 1].rec.height, GRAY);
-            }
-            
-            // Draw flashing fx (one frame only)
-            if (superfx)
-            {
-                DrawRectangle(0, 0, screenWidth, screenHeight, WHITE);
-                superfx = false;
-            }
-
-            DrawText(TextFormat("%04i", score), 20, 20, 40, GRAY);
-            DrawText(TextFormat("HI-SCORE: %04i", hiScore), 20, 70, 20, LIGHTGRAY);
-
-            if (pause) DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, GRAY);
-        }
-        else DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
-
-    EndDrawing();
-}
-
-// Unload game variables
-void UnloadGame(void)
-{
-    // TODO: Unload all dynamic loaded data (textures, sounds, models...)
-}
-
-// Update and Draw (one frame)
-void UpdateDrawFrame(void)
-{
-    UpdateGame();
-    DrawGame();
-}

+ 0 - 279
games/gold_fever.c

@@ -1,279 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib - sample game: gold fever
-*
-*   Sample game developed by Ian Eito, Albert Martos and Ramon Santamaria
-*
-*   This game has been created using raylib v1.3 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef struct Player {
-    Vector2 position;
-    Vector2 speed;
-    int radius;
-} Player;
-
-typedef struct Enemy {
-    Vector2 position;
-    Vector2 speed;
-    int radius;
-    int radiusBounds;
-    bool moveRight;
-} Enemy;
-
-typedef struct Points {
-    Vector2 position;
-    int radius;
-    int value;
-    bool active;
-} Points;
-
-typedef struct Home {
-    Rectangle rec;
-    bool active;
-    bool save;
-    Color color;
-} Home;
-
-//------------------------------------------------------------------------------------
-// Global Variables Declaration
-//------------------------------------------------------------------------------------
-static const int screenWidth = 800;
-static const int screenHeight = 450;
-
-static bool gameOver = false;
-static bool pause = false;
-static int score = 0;
-static int hiScore = 0;
-
-static Player player = { 0 };
-static Enemy enemy = { 0 };
-static Points points = { 0 };
-static Home home = { 0 };
-static bool follow = false;
-
-//------------------------------------------------------------------------------------
-// Module Functions Declaration (local)
-//------------------------------------------------------------------------------------
-static void InitGame(void);         // Initialize game
-static void UpdateGame(void);       // Update game (one frame)
-static void DrawGame(void);         // Draw game (one frame)
-static void UnloadGame(void);       // Unload game
-static void UpdateDrawFrame(void);  // Update and Draw (one frame)
-
-//------------------------------------------------------------------------------------
-// Program main entry point
-//------------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "sample game: gold fever");
-
-    InitGame();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);
-    //--------------------------------------------------------------------------------------
-
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update and Draw
-        //----------------------------------------------------------------------------------
-        UpdateDrawFrame();
-        //----------------------------------------------------------------------------------
-    }
-#endif
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadGame();         // Unload loaded data (textures, sounds, models...)
-
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//------------------------------------------------------------------------------------
-// Module Functions Definitions (local)
-//------------------------------------------------------------------------------------
-
-// Initialize game variables
-void InitGame(void)
-{
-    pause = false;
-    score = 0;
-
-    player.position = (Vector2){50, 50};
-    player.radius = 20;
-    player.speed = (Vector2){5, 5};
-
-    enemy.position = (Vector2){screenWidth - 50, screenHeight/2};
-    enemy.radius = 20;
-    enemy.radiusBounds = 150;
-    enemy.speed = (Vector2){3, 3};
-    enemy.moveRight = true;
-    follow = false;
-
-    points.radius = 10;
-    points.position = (Vector2){GetRandomValue(points.radius, screenWidth - points.radius), GetRandomValue(points.radius, screenHeight - points.radius)};
-    points.value = 100;
-    points.active = true;
-
-    home.rec.width = 50;
-    home.rec.height = 50;
-    home.rec.x = GetRandomValue(0, screenWidth - home.rec.width);
-    home.rec.y = GetRandomValue(0, screenHeight - home.rec.height);
-    home.active = false;
-    home.save = false;
-}
-
-// Update game (one frame)
-void UpdateGame(void)
-{
-    if (!gameOver)
-    {
-        if (IsKeyPressed('P')) pause = !pause;
-
-        if (!pause)
-        {
-            // Control player
-            if (IsKeyDown(KEY_RIGHT)) player.position.x += player.speed.x;
-            if (IsKeyDown(KEY_LEFT)) player.position.x -= player.speed.x;
-            if (IsKeyDown(KEY_UP)) player.position.y -= player.speed.y;
-            if (IsKeyDown(KEY_DOWN)) player.position.y += player.speed.y;
-
-            // Wall behaviour player
-            if (player.position.x - player.radius <= 0) player.position.x = player.radius;
-            if (player.position.x + player.radius >= screenWidth) player.position.x = screenWidth - player.radius;
-            if (player.position.y - player.radius <= 0) player.position.y = player.radius;
-            if (player.position.y + player.radius >= screenHeight) player.position.y = screenHeight - player.radius;
-
-            // IA Enemy
-            if ( (follow || CheckCollisionCircles(player.position, player.radius, enemy.position, enemy.radiusBounds)) && !home.save)
-            {
-                if (player.position.x > enemy.position.x) enemy.position.x += enemy.speed.x;
-                if (player.position.x < enemy.position.x) enemy.position.x -= enemy.speed.x;
-
-                if (player.position.y > enemy.position.y) enemy.position.y += enemy.speed.y;
-                if (player.position.y < enemy.position.y) enemy.position.y -= enemy.speed.y;
-            }
-            else
-            {
-                if (enemy.moveRight) enemy.position.x += enemy.speed.x;
-                else enemy.position.x -= enemy.speed.x;
-            }
-
-            // Wall behaviour enemy
-            if (enemy.position.x - enemy.radius <= 0) enemy.moveRight = true;
-            if (enemy.position.x + enemy.radius >= screenWidth) enemy.moveRight = false;
-
-            if (enemy.position.x - enemy.radius <= 0) enemy.position.x = enemy.radius;
-            if (enemy.position.x + enemy.radius >= screenWidth) enemy.position.x = screenWidth - enemy.radius;
-            if (enemy.position.y - enemy.radius <= 0) enemy.position.y = enemy.radius;
-            if (enemy.position.y + enemy.radius >= screenHeight) enemy.position.y = screenHeight - enemy.radius;
-
-            // Collisions
-            if (CheckCollisionCircles(player.position, player.radius, points.position, points.radius) && points.active)
-            {
-                follow = true;
-                points.active = false;
-                home.active = true;
-            }
-
-            if (CheckCollisionCircles(player.position, player.radius, enemy.position, enemy.radius) && !home.save)
-            {
-                gameOver = true;
-                
-                if (hiScore < score) hiScore = score;
-            }
-
-            if (CheckCollisionCircleRec(player.position, player.radius, home.rec))
-            {
-               follow = false;
-               
-               if (!points.active)
-               {
-                    score += points.value;
-                    points.active = true;
-                    enemy.speed.x += 0.5;
-                    enemy.speed.y += 0.5;
-                    points.position = (Vector2){GetRandomValue(points.radius, screenWidth - points.radius), GetRandomValue(points.radius, screenHeight - points.radius)};
-               }
-               
-               home.save = true;
-            }
-            else home.save = false;
-        }
-    }
-    else
-    {
-        if (IsKeyPressed(KEY_ENTER))
-        {
-            InitGame();
-            gameOver = false;
-        }
-    }
-}
-
-// Draw game (one frame)
-void DrawGame(void)
-{
-    BeginDrawing();
-    
-        ClearBackground(RAYWHITE);
-    
-        if (!gameOver)
-        {
-            if (follow)
-            {
-                DrawRectangle(0, 0, screenWidth, screenHeight, RED);
-                DrawRectangle(10, 10, screenWidth - 20, screenHeight - 20, RAYWHITE);
-            }
-            
-            DrawRectangleLines(home.rec.x, home.rec.y, home.rec.width, home.rec.height, BLUE);
-
-            DrawCircleLines(enemy.position.x, enemy.position.y, enemy.radiusBounds, RED);
-            DrawCircleV(enemy.position, enemy.radius, MAROON);
-            
-            DrawCircleV(player.position, player.radius, GRAY);
-            if (points.active) DrawCircleV(points.position, points.radius, GOLD);
-
-            DrawText(TextFormat("SCORE: %04i", score), 20, 15, 20, GRAY);
-            DrawText(TextFormat("HI-SCORE: %04i", hiScore), 300, 15, 20, GRAY);
-
-            if (pause) DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, GRAY);
-        }
-        else DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
-
-    EndDrawing();
-}
-
-// Unload game variables
-void UnloadGame(void)
-{
-    // TODO: Unload all dynamic loaded data (textures, sounds, models...)
-}
-
-// Update and Draw (one frame)
-void UpdateDrawFrame(void)
-{
-    UpdateGame();
-    DrawGame();
-}

+ 0 - 566
games/gorilas.c

@@ -1,566 +0,0 @@
-/*******************************************************************************************
-*
-*   raylib - sample game: gorilas
-*
-*   Sample game Marc Palau and Ramon Santamaria
-*
-*   This game has been created using raylib v1.3 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <time.h>
-#include <math.h>
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Some Defines
-//----------------------------------------------------------------------------------
-#define MAX_BUILDINGS                    15
-#define MAX_EXPLOSIONS                  200
-#define MAX_PLAYERS                       2
-
-#define BUILDING_RELATIVE_ERROR          30        // Building size random range %
-#define BUILDING_MIN_RELATIVE_HEIGHT     20        // Minimum height in % of the screenHeight
-#define BUILDING_MAX_RELATIVE_HEIGHT     60        // Maximum height in % of the screenHeight
-#define BUILDING_MIN_GRAYSCALE_COLOR    120        // Minimum gray color for the buildings
-#define BUILDING_MAX_GRAYSCALE_COLOR    200        // Maximum gray color for the buildings
-
-#define MIN_PLAYER_POSITION               5        // Minimum x position %
-#define MAX_PLAYER_POSITION              20        // Maximum x position %
-
-#define GRAVITY                       9.81f
-#define DELTA_FPS                        60
-
-//----------------------------------------------------------------------------------
-// Types and Structures Definition
-//----------------------------------------------------------------------------------
-typedef struct Player {
-    Vector2 position;
-    Vector2 size;
-
-    Vector2 aimingPoint;
-    int aimingAngle;
-    int aimingPower;
-
-    Vector2 previousPoint;
-    int previousAngle;
-    int previousPower;
-
-    Vector2 impactPoint;
-
-    bool isLeftTeam;                // This player belongs to the left or to the right team
-    bool isPlayer;                  // If is a player or an AI
-    bool isAlive;
-} Player;
-
-typedef struct Building {
-    Rectangle rectangle;
-    Color color;
-} Building;
-
-typedef struct Explosion {
-    Vector2 position;
-    int radius;
-    bool active;
-} Explosion;
-
-typedef struct Ball {
-    Vector2 position;
-    Vector2 speed;
-    int radius;
-    bool active;
-} Ball;
-
-//------------------------------------------------------------------------------------
-// Global Variables Declaration
-//------------------------------------------------------------------------------------
-static const int screenWidth = 800;
-static const int screenHeight = 450;
-
-static bool gameOver = false;
-static bool pause = false;
-
-static Player player[MAX_PLAYERS] = { 0 };
-static Building building[MAX_BUILDINGS] = { 0 };
-static Explosion explosion[MAX_EXPLOSIONS] = { 0 };
-static Ball ball = { 0 };
-
-static int playerTurn = 0;
-static bool ballOnAir = false;
-
-//------------------------------------------------------------------------------------
-// Module Functions Declaration (local)
-//------------------------------------------------------------------------------------
-static void InitGame(void);         // Initialize game
-static void UpdateGame(void);       // Update game (one frame)
-static void DrawGame(void);         // Draw game (one frame)
-static void UnloadGame(void);       // Unload game
-static void UpdateDrawFrame(void);  // Update and Draw (one frame)
-
-// Additional module functions
-static void InitBuildings(void);
-static void InitPlayers(void);
-static bool UpdatePlayer(int playerTurn);
-static bool UpdateBall(int playerTurn);
-
-//------------------------------------------------------------------------------------
-// Program main entry point
-//------------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "sample game: gorilas");
-
-    InitGame();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-
-    SetTargetFPS(60);
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        // Update and Draw
-        //----------------------------------------------------------------------------------
-        UpdateDrawFrame();
-        //----------------------------------------------------------------------------------
-    }
-#endif
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadGame();         // Unload loaded data (textures, sounds, models...)
-    
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//------------------------------------------------------------------------------------
-// Module Functions Definitions (local)
-//------------------------------------------------------------------------------------
-
-// Initialize game variables
-void InitGame(void)
-{
-    // Init shoot
-    ball.radius = 10;
-    ballOnAir = false;
-    ball.active = false;
-
-    InitBuildings();
-    InitPlayers();
-    
-    // Init explosions
-    for (int i = 0; i < MAX_EXPLOSIONS; i++)
-    {
-        explosion[i].position = (Vector2){ 0.0f, 0.0f };
-        explosion[i].radius = 30;
-        explosion[i].active = false;
-    }
-}
-
-// Update game (one frame)
-void UpdateGame(void)
-{
-    if (!gameOver)
-    {
-        if (IsKeyPressed('P')) pause = !pause;
-
-        if (!pause)
-        {
-            if (!ballOnAir) ballOnAir = UpdatePlayer(playerTurn); // If we are aiming
-            else
-            {
-                if (UpdateBall(playerTurn))                       // If collision
-                {
-                    // Game over logic
-                    bool leftTeamAlive = false;
-                    bool rightTeamAlive = false;
-
-                    for (int i = 0; i < MAX_PLAYERS; i++)
-                    {
-                        if (player[i].isAlive)
-                        {
-                            if (player[i].isLeftTeam) leftTeamAlive = true;
-                            if (!player[i].isLeftTeam) rightTeamAlive = true;
-                        }
-                    }
-                    
-                    if (leftTeamAlive && rightTeamAlive)
-                    {
-                        ballOnAir = false;
-                        ball.active = false;
-
-                        playerTurn++;
-
-                        if (playerTurn == MAX_PLAYERS) playerTurn = 0;
-                    }
-                    else
-                    {
-                        gameOver = true;
-                        
-                        // if (leftTeamAlive) left team wins
-                        // if (rightTeamAlive) right team wins
-                    }
-                }
-            }
-        }
-    }
-    else
-    {
-        if (IsKeyPressed(KEY_ENTER))
-        {
-            InitGame();
-            gameOver = false;
-        }
-    }
-}
-
-// Draw game (one frame)
-void DrawGame(void)
-{
-    BeginDrawing();
-
-        ClearBackground(RAYWHITE);
-
-        if (!gameOver)
-        {
-            // Draw buildings
-            for (int i = 0; i < MAX_BUILDINGS; i++) DrawRectangleRec(building[i].rectangle, building[i].color);
-
-            // Draw explosions
-            for (int i = 0; i < MAX_EXPLOSIONS; i++)
-            {
-                if (explosion[i].active) DrawCircle(explosion[i].position.x, explosion[i].position.y, explosion[i].radius, RAYWHITE);
-            }
-            
-            // Draw players
-            for (int i = 0; i < MAX_PLAYERS; i++)
-            {
-                if (player[i].isAlive)
-                {
-                    if (player[i].isLeftTeam) DrawRectangle(player[i].position.x - player[i].size.x/2, player[i].position.y - player[i].size.y/2,
-                                                             player[i].size.x, player[i].size.y, BLUE);
-                    else DrawRectangle(player[i].position.x - player[i].size.x/2, player[i].position.y - player[i].size.y/2,
-                                                             player[i].size.x, player[i].size.y, RED);
-                }
-            }
-
-            // Draw ball
-            if (ball.active) DrawCircle(ball.position.x, ball.position.y, ball.radius, MAROON);
-
-            // Draw the angle and the power of the aim, and the previous ones
-            if (!ballOnAir)
-            {
-                // Draw shot information
-                /*
-                if (player[playerTurn].isLeftTeam)
-                {
-                    DrawText(TextFormat("Previous Point %i, %i", (int)player[playerTurn].previousPoint.x, (int)player[playerTurn].previousPoint.y), 20, 20, 20, DARKBLUE);
-                    DrawText(TextFormat("Previous Angle %i", player[playerTurn].previousAngle), 20, 50, 20, DARKBLUE);
-                    DrawText(TextFormat("Previous Power %i", player[playerTurn].previousPower), 20, 80, 20, DARKBLUE);
-                    DrawText(TextFormat("Aiming Point %i, %i", (int)player[playerTurn].aimingPoint.x, (int)player[playerTurn].aimingPoint.y), 20, 110, 20, DARKBLUE);
-                    DrawText(TextFormat("Aiming Angle %i", player[playerTurn].aimingAngle), 20, 140, 20, DARKBLUE);
-                    DrawText(TextFormat("Aiming Power %i", player[playerTurn].aimingPower), 20, 170, 20, DARKBLUE);
-                }
-                else
-                {
-                    DrawText(TextFormat("Previous Point %i, %i", (int)player[playerTurn].previousPoint.x, (int)player[playerTurn].previousPoint.y), screenWidth*3/4, 20, 20, DARKBLUE);
-                    DrawText(TextFormat("Previous Angle %i", player[playerTurn].previousAngle), screenWidth*3/4, 50, 20, DARKBLUE);
-                    DrawText(TextFormat("Previous Power %i", player[playerTurn].previousPower), screenWidth*3/4, 80, 20, DARKBLUE);
-                    DrawText(TextFormat("Aiming Point %i, %i", (int)player[playerTurn].aimingPoint.x, (int)player[playerTurn].aimingPoint.y), screenWidth*3/4, 110, 20, DARKBLUE);
-                    DrawText(TextFormat("Aiming Angle %i", player[playerTurn].aimingAngle), screenWidth*3/4, 140, 20, DARKBLUE);
-                    DrawText(TextFormat("Aiming Power %i", player[playerTurn].aimingPower), screenWidth*3/4, 170, 20, DARKBLUE);
-                }
-                */
-                
-                // Draw aim
-                if (player[playerTurn].isLeftTeam)
-                {
-                    // Previous aiming
-                    DrawTriangle((Vector2){ player[playerTurn].position.x - player[playerTurn].size.x/4, player[playerTurn].position.y - player[playerTurn].size.y/4 },
-                                 (Vector2){ player[playerTurn].position.x + player[playerTurn].size.x/4, player[playerTurn].position.y + player[playerTurn].size.y/4 },
-                                 player[playerTurn].previousPoint, GRAY);
-
-                    // Actual aiming
-                    DrawTriangle((Vector2){ player[playerTurn].position.x - player[playerTurn].size.x/4, player[playerTurn].position.y - player[playerTurn].size.y/4 },
-                                 (Vector2){ player[playerTurn].position.x + player[playerTurn].size.x/4, player[playerTurn].position.y + player[playerTurn].size.y/4 },
-                                 player[playerTurn].aimingPoint, DARKBLUE);
-                }
-                else
-                {
-                    // Previous aiming
-                    DrawTriangle((Vector2){ player[playerTurn].position.x - player[playerTurn].size.x/4, player[playerTurn].position.y + player[playerTurn].size.y/4 },
-                                 (Vector2){ player[playerTurn].position.x + player[playerTurn].size.x/4, player[playerTurn].position.y - player[playerTurn].size.y/4 },
-                                 player[playerTurn].previousPoint, GRAY);
-
-                    // Actual aiming
-                    DrawTriangle((Vector2){ player[playerTurn].position.x - player[playerTurn].size.x/4, player[playerTurn].position.y + player[playerTurn].size.y/4 },
-                                 (Vector2){ player[playerTurn].position.x + player[playerTurn].size.x/4, player[playerTurn].position.y - player[playerTurn].size.y/4 },
-                                 player[playerTurn].aimingPoint, MAROON);
-                }
-            }
-
-            if (pause) DrawText("GAME PAUSED", screenWidth/2 - MeasureText("GAME PAUSED", 40)/2, screenHeight/2 - 40, 40, GRAY);
-        }
-        else DrawText("PRESS [ENTER] TO PLAY AGAIN", GetScreenWidth()/2 - MeasureText("PRESS [ENTER] TO PLAY AGAIN", 20)/2, GetScreenHeight()/2 - 50, 20, GRAY);
-
-    EndDrawing();
-}
-
-// Unload game variables
-void UnloadGame(void)
-{
-    // TODO: Unload all dynamic loaded data (textures, sounds, models...)
-}
-
-// Update and Draw (one frame)
-void UpdateDrawFrame(void)
-{
-    UpdateGame();
-    DrawGame();
-}
-
-//--------------------------------------------------------------------------------------
-// Additional module functions
-//--------------------------------------------------------------------------------------
-static void InitBuildings(void)
-{
-    // Horizontal generation
-    int currentWidth = 0;
-
-    // We make sure the absolute error randomly generated for each building, has as a minimum value the screenWidth.
-    // This way all the screen will be filled with buildings. Each building will have a different, random width.
-
-    float relativeWidth = 100/(100 - BUILDING_RELATIVE_ERROR);
-    float buildingWidthMean = (screenWidth*relativeWidth/MAX_BUILDINGS) + 1;        // We add one to make sure we will cover the whole screen.
-
-    // Vertical generation
-    int currentHeighth = 0;
-    int grayLevel;
-
-    // Creation
-    for (int i = 0; i < MAX_BUILDINGS; i++)
-    {
-        // Horizontal
-        building[i].rectangle.x = currentWidth;
-        building[i].rectangle.width = GetRandomValue(buildingWidthMean*(100 - BUILDING_RELATIVE_ERROR/2)/100 + 1, buildingWidthMean*(100 + BUILDING_RELATIVE_ERROR)/100);
-
-        currentWidth += building[i].rectangle.width;
-
-        // Vertical
-        currentHeighth = GetRandomValue(BUILDING_MIN_RELATIVE_HEIGHT, BUILDING_MAX_RELATIVE_HEIGHT);
-        building[i].rectangle.y = screenHeight - (screenHeight*currentHeighth/100);
-        building[i].rectangle.height = screenHeight*currentHeighth/100 + 1;
-
-        // Color
-        grayLevel = GetRandomValue(BUILDING_MIN_GRAYSCALE_COLOR, BUILDING_MAX_GRAYSCALE_COLOR);
-        building[i].color = (Color){ grayLevel, grayLevel, grayLevel, 255 };
-    }
-}
-
-static void InitPlayers(void)
-{
-    for (int i = 0; i < MAX_PLAYERS; i++)
-    {
-        player[i].isAlive = true;
-
-        // Decide the team of this player
-        if (i % 2 == 0) player[i].isLeftTeam = true;
-        else player[i].isLeftTeam = false;
-
-        // Now there is no AI
-        player[i].isPlayer = true;
-
-        // Set size, by default by now
-        player[i].size = (Vector2){ 40, 40 };
-
-        // Set position
-        if (player[i].isLeftTeam) player[i].position.x = GetRandomValue(screenWidth*MIN_PLAYER_POSITION/100, screenWidth*MAX_PLAYER_POSITION/100);
-        else player[i].position.x = screenWidth - GetRandomValue(screenWidth*MIN_PLAYER_POSITION/100, screenWidth*MAX_PLAYER_POSITION/100);
-
-        for (int j = 0; j < MAX_BUILDINGS; j++)
-        {
-            if (building[j].rectangle.x > player[i].position.x)
-            {
-                // Set the player in the center of the building
-                player[i].position.x = building[j-1].rectangle.x + building[j-1].rectangle.width/2;
-                // Set the player at the top of the building
-                player[i].position.y = building[j-1].rectangle.y - player[i].size.y/2;
-                break;
-            }
-        }
-
-        // Set statistics to 0
-        player[i].aimingPoint = player[i].position;
-        player[i].previousAngle = 0;
-        player[i].previousPower = 0;
-        player[i].previousPoint = player[i].position;
-        player[i].aimingAngle = 0;
-        player[i].aimingPower = 0;
-
-        player[i].impactPoint = (Vector2){ -100, -100 };
-    }
-}
-
-static bool UpdatePlayer(int playerTurn)
-{
-    // If we are aiming at the firing quadrant, we calculate the angle
-    if (GetMousePosition().y <= player[playerTurn].position.y)
-    {
-        // Left team
-        if (player[playerTurn].isLeftTeam && GetMousePosition().x >= player[playerTurn].position.x)
-        {
-            // Distance (calculating the fire power)
-            player[playerTurn].aimingPower = sqrt(pow(player[playerTurn].position.x - GetMousePosition().x, 2) + pow(player[playerTurn].position.y - GetMousePosition().y, 2));
-            // Calculates the angle via arcsin
-            player[playerTurn].aimingAngle = asin((player[playerTurn].position.y - GetMousePosition().y)/player[playerTurn].aimingPower)*RAD2DEG;
-            // Point of the screen we are aiming at
-            player[playerTurn].aimingPoint = GetMousePosition();
-
-            // Ball fired
-            if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-            {
-                player[playerTurn].previousPoint = player[playerTurn].aimingPoint;
-                player[playerTurn].previousPower = player[playerTurn].aimingPower;
-                player[playerTurn].previousAngle = player[playerTurn].aimingAngle;
-                ball.position = player[playerTurn].position;
-
-                return true;
-            }
-        }
-        // Right team
-        else if (!player[playerTurn].isLeftTeam && GetMousePosition().x <= player[playerTurn].position.x)
-        {
-            // Distance (calculating the fire power)
-            player[playerTurn].aimingPower = sqrt(pow(player[playerTurn].position.x - GetMousePosition().x, 2) + pow(player[playerTurn].position.y - GetMousePosition().y, 2));
-            // Calculates the angle via arcsin
-            player[playerTurn].aimingAngle = asin((player[playerTurn].position.y - GetMousePosition().y)/player[playerTurn].aimingPower)*RAD2DEG;
-            // Point of the screen we are aiming at
-            player[playerTurn].aimingPoint = GetMousePosition();
-
-            // Ball fired
-            if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-            {
-                player[playerTurn].previousPoint = player[playerTurn].aimingPoint;
-                player[playerTurn].previousPower = player[playerTurn].aimingPower;
-                player[playerTurn].previousAngle = player[playerTurn].aimingAngle;
-                ball.position = player[playerTurn].position;
-
-                return true;
-            }
-        }
-        else
-        {
-            player[playerTurn].aimingPoint = player[playerTurn].position;
-            player[playerTurn].aimingPower = 0;
-            player[playerTurn].aimingAngle = 0;
-        }
-    }
-    else
-    {
-        player[playerTurn].aimingPoint = player[playerTurn].position;
-        player[playerTurn].aimingPower = 0;
-        player[playerTurn].aimingAngle = 0;
-    }
-
-    return false;
-}
-
-static bool UpdateBall(int playerTurn)
-{
-    static int explosionNumber = 0;
-
-    // Activate ball
-    if (!ball.active)
-    {
-        if (player[playerTurn].isLeftTeam)
-        {
-            ball.speed.x = cos(player[playerTurn].previousAngle*DEG2RAD)*player[playerTurn].previousPower*3/DELTA_FPS;
-            ball.speed.y = -sin(player[playerTurn].previousAngle*DEG2RAD)*player[playerTurn].previousPower*3/DELTA_FPS;
-            ball.active = true;
-        }
-        else
-        {
-            ball.speed.x = -cos(player[playerTurn].previousAngle*DEG2RAD)*player[playerTurn].previousPower*3/DELTA_FPS;
-            ball.speed.y = -sin(player[playerTurn].previousAngle*DEG2RAD)*player[playerTurn].previousPower*3/DELTA_FPS;
-            ball.active = true;
-        }
-    }
-
-    ball.position.x += ball.speed.x;
-    ball.position.y += ball.speed.y;
-    ball.speed.y += GRAVITY/DELTA_FPS;
-
-    // Collision
-    if (ball.position.x + ball.radius < 0) return true;
-    else if (ball.position.x - ball.radius > screenWidth) return true;
-    else
-    {
-        // Player collision
-        for (int i = 0; i < MAX_PLAYERS; i++)
-        {
-            if (CheckCollisionCircleRec(ball.position, ball.radius,  (Rectangle){ player[i].position.x - player[i].size.x/2, player[i].position.y - player[i].size.y/2,
-                                                                                  player[i].size.x, player[i].size.y }))
-            {
-                // We can't hit ourselves
-                if (i == playerTurn) return false;
-                else
-                {
-                    // We set the impact point
-                    player[playerTurn].impactPoint.x = ball.position.x;
-                    player[playerTurn].impactPoint.y = ball.position.y + ball.radius;
-
-                    // We destroy the player
-                    player[i].isAlive = false;
-                    return true;
-                }
-            }
-        }
-
-        // Building collision
-        // NOTE: We only check building collision if we are not inside an explosion
-        for (int i = 0; i < MAX_BUILDINGS; i++)
-        {
-            if (CheckCollisionCircles(ball.position, ball.radius, explosion[i].position, explosion[i].radius - ball.radius))
-            {
-                return false;
-            }
-        }
-
-        for (int i = 0; i < MAX_BUILDINGS; i++)
-        {
-            if (CheckCollisionCircleRec(ball.position, ball.radius, building[i].rectangle))
-            {
-                // We set the impact point
-                player[playerTurn].impactPoint.x = ball.position.x;
-                player[playerTurn].impactPoint.y = ball.position.y + ball.radius;
-
-                // We create an explosion
-                explosion[explosionNumber].position = player[playerTurn].impactPoint;
-                explosion[explosionNumber].active = true;
-                explosionNumber++;
-
-                return true;
-            }
-        }
-    }
-
-    return false;
-}

+ 0 - 16
games/just_do/CMakeLists.txt

@@ -1,16 +0,0 @@
-cmake_minimum_required(VERSION 2.6)
-project(just_do)
-
-# Grab the screens
-file(GLOB screen_sources "screens/*.c")
-
-# Executable & linking
-add_executable(${PROJECT_NAME} ${PROJECT_NAME}.c ${screen_sources})
-if (NOT TARGET raylib)
-  find_package(raylib 2.0 REQUIRED)
-endif()
-target_link_libraries(${PROJECT_NAME} raylib)
-
-# Resources
-# Copy all of the resource files to the destination
-file(COPY "resources/"  DESTINATION "resources/")

+ 0 - 20
games/just_do/LICENSE.txt

@@ -1,20 +0,0 @@
-
-This game sources are licensed under an unmodified zlib/libpng license, 
-which is an OSI-certified, BSD-like license:
-	
-Copyright (c) 2013-2017 Ramon Santamaria (@raysan5)
-
-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.

+ 0 - 413
games/just_do/Makefile

@@ -1,413 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
-#
-#   Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
-#
-#   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.
-#
-#**************************************************************************************************
-
-.PHONY: all clean
-
-# Define required raylib variables
-PROJECT_NAME       ?= just_do
-RAYLIB_VERSION     ?= 3.0.0
-RAYLIB_API_VERSION ?= 3
-RAYLIB_PATH        ?= C:\GitHub\raylib
-
-# Define default options
-
-# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
-PLATFORM           ?= PLATFORM_DESKTOP
-
-# Locations of your newly installed library and associated headers. See ../src/Makefile
-# On Linux, if you have installed raylib but cannot compile the examples, check that
-# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
-# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
-# To enable compile-time linking to a special version of libraylib.so, change these variables here.
-# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
-# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
-# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
-# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
-DESTDIR ?= /usr/local
-RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
-# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
-RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE        ?= STATIC
-
-# Build mode for project: DEBUG or RELEASE
-BUILD_MODE            ?= RELEASE
-
-# Use external GLFW library instead of rglfw module
-# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
-USE_EXTERNAL_GLFW     ?= FALSE
-
-# Use Wayland display server protocol on Linux desktop
-# by default it uses X11 windowing system
-USE_WAYLAND_DISPLAY   ?= FALSE
-
-# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    # No uname.exe on MinGW!, but OS=Windows_NT on Windows!
-    # ifeq ($(UNAME),Msys) -> Windows
-    ifeq ($(OS),Windows_NT)
-        PLATFORM_OS=WINDOWS
-    else
-        UNAMEOS=$(shell uname)
-        ifeq ($(UNAMEOS),Linux)
-            PLATFORM_OS=LINUX
-        endif
-        ifeq ($(UNAMEOS),FreeBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),OpenBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),NetBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),DragonFly)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),Darwin)
-            PLATFORM_OS=OSX
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    UNAMEOS=$(shell uname)
-    ifeq ($(UNAMEOS),Linux)
-        PLATFORM_OS=LINUX
-    endif
-endif
-
-# RAYLIB_PATH adjustment for different platforms.
-# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
-# Required for ldconfig or other tools that do not perform path expansion.
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        RAYLIB_PREFIX ?= ..
-        RAYLIB_PATH    = $(realpath $(RAYLIB_PREFIX))
-    endif
-endif
-# Default path for raylib on Raspberry Pi, if installed in different path, update it!
-# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
-# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    RAYLIB_PATH       ?= /home/pi/raylib
-endif
-
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Emscripten required variables
-    EMSDK_PATH         ?= C:/emsdk
-    EMSCRIPTEN_PATH    ?= $(EMSDK_PATH)/fastcomp/emscripten
-    CLANG_PATH          = $(EMSDK_PATH)/fastcomp/bin
-    PYTHON_PATH         = $(EMSDK_PATH)/python/2.7.13.1_64bit/python-2.7.13.amd64
-    NODE_PATH           = $(EMSDK_PATH)/node/12.9.1_64bit/bin
-    export PATH         = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
-endif
-
-# Define raylib release directory for compiled library.
-# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version
-RAYLIB_RELEASE_PATH 	?= $(RAYLIB_PATH)/src
-
-# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
-# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
-# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
-# without formal installation from ../src/Makefile. It aids portability and is useful if you have
-# multiple versions of raylib, have raylib installed to a non-standard location, or want to
-# bundle libraylib.so with your game. Change it to your liking.
-# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
-# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
-# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
-# To see which libraries a built example is linking to, ldd core/core_basic_window;
-# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
-EXAMPLE_RUNTIME_PATH   ?= $(RAYLIB_RELEASE_PATH)
-
-# Define default C compiler: gcc
-# NOTE: define g++ compiler if using C++
-CC = gcc
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),OSX)
-        # OSX default compiler
-        CC = clang
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
-        CC = clang
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
-        # Define RPI cross-compiler
-        #CC = armv6j-hardfloat-linux-gnueabi-gcc
-        CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # HTML5 emscripten compiler
-    # WARNING: To compile to HTML5, code must be redesigned
-    # to use emscripten.h and emscripten_set_main_loop()
-    CC = emcc
-endif
-
-# Define default make program: Mingw32-make
-MAKE = mingw32-make
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        MAKE = make
-    endif
-endif
-
-# Define compiler flags:
-#  -O1                  defines optimization level
-#  -g                   include debug information on compilation
-#  -s                   strip unnecessary data from build
-#  -Wall                turns on most, but not all, compiler warnings
-#  -std=c99             defines C language mode (standard C from 1999 revision)
-#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
-#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
-#  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
-CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
-
-ifeq ($(BUILD_MODE),DEBUG)
-    CFLAGS += -g
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -s ASSERTIONS=1 --profiling
-    endif
-else
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -Os
-    else
-        CFLAGS += -s -O1
-    endif
-endif
-
-# Additional flags for compiler (if desired)
-#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        ifeq ($(RAYLIB_LIBTYPE),STATIC)
-            CFLAGS += -D_DEFAULT_SOURCE
-        endif
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            # Explicitly enable runtime link to libraylib.so
-            CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    CFLAGS += -std=gnu99
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # -Os                        # size optimization
-    # -O2                        # optimization level 2, if used, also set --memory-init-file 0
-    # -s USE_GLFW=3              # Use glfw3 library (context/input management)
-    # -s ALLOW_MEMORY_GROWTH=1   # to allow memory resizing -> WARNING: Audio buffers could FAIL!
-    # -s TOTAL_MEMORY=16777216   # to specify heap memory size (default = 16MB)
-    # -s USE_PTHREADS=1          # multithreading support
-    # -s WASM=0                  # disable Web Assembly, emitted by default
-    # -s EMTERPRETIFY=1          # enable emscripten code interpreter (very slow)
-    # -s EMTERPRETIFY_ASYNC=1    # support synchronous loops by emterpreter
-    # -s FORCE_FILESYSTEM=1      # force filesystem to load/save files data
-    # -s ASSERTIONS=1            # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
-    # --profiling                # include information for code profiling
-    # --memory-init-file 0       # to avoid an external memory initialization code file (.mem)
-    # --preload-file resources   # specify a resources folder for data compilation
-    CFLAGS += -s USE_GLFW=3 -s TOTAL_MEMORY=67108864 --preload-file resources
-
-    # Define a custom shell .html and output extension
-    CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
-    EXT = .html
-endif
-
-# Define include paths for required headers
-# NOTE: Several external required libraries (stb and others)
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
-
-# Define additional directories containing required header files
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # RPI required libraries
-    INCLUDE_PATHS += -I/opt/vc/include
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
-endif
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_H_INSTALL_PATH)
-        INCLUDE_PATHS += -I/usr/local/include
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
-        INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
-    endif
-endif
-
-# Define library paths containing required libs.
-LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # resource file contains windows executable icon and properties
-        LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data 
-        # -Wl,--subsystem,windows hides the console window
-        ifeq ($(BUILD_MODE), RELEASE)
-            LDFLAGS += -Wl,--subsystem,windows
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_INSTALL_PATH)
-        LDFLAGS += -L. -Lsrc -L/usr/local/lib
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs
-        LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
-    endif
-endif
-
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    LDFLAGS += -L/opt/vc/lib
-endif
-
-# Define any libraries required on linking
-# if you want to link libraries (libname.so or libname.a), use the -lname
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # Libraries for Windows desktop compilation
-        # NOTE: WinMM library required to set high-res timer resolution
-        LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
-        # Required for physac examples
-        LDLIBS += -static -lpthread
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Libraries for Debian GNU/Linux desktop compiling
-        # NOTE: Required packages: libegl1-mesa-dev
-        LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
-
-        # On X11 requires also below libraries
-        LDLIBS += -lX11
-        # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
-        #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-
-        # On Wayland windowing system, additional libraries requires
-        ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
-            LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
-        endif
-        # Explicit link to libc
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            LDLIBS += -lc
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-        # Libraries for OSX 10.9 desktop compiling
-        # NOTE: Required packages: libopenal-dev libegl1-mesa-dev
-        LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo 
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
-        # NOTE: Required packages: mesa-libs
-        LDLIBS = -lraylib -lGL -lpthread -lm
-
-        # On XWindow requires also below libraries
-        LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-    endif
-    ifeq ($(USE_EXTERNAL_GLFW),TRUE)
-        # NOTE: It could require additional packages installed: libglfw3-dev
-        LDLIBS += -lglfw
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # Libraries for Raspberry Pi compiling
-    # NOTE: Required packages: libasound2-dev (ALSA)
-    LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Libraries for web (HTML5) compiling
-    LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
-endif
-
-# Define all source files required
-PROJECT_SOURCE_FILES ?= \
-    just_do.c \
-    screens/screen_logo.c \
-    screens/screen_level00.c \
-    screens/screen_level01.c \
-    screens/screen_level02.c \
-    screens/screen_level03.c \
-    screens/screen_level04.c \
-    screens/screen_level05.c \
-    screens/screen_level06.c \
-    screens/screen_level07.c \
-    screens/screen_level08.c \
-    screens/screen_level09.c
-
-# Define all object files from source files
-OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES))
-
-# For Android platform we call a custom Makefile.Android
-ifeq ($(PLATFORM),PLATFORM_ANDROID)
-    MAKEFILE_PARAMS = -f Makefile.Android 
-    export PROJECT_NAME
-    export PROJECT_SOURCE_FILES
-else
-    MAKEFILE_PARAMS = $(PROJECT_NAME)
-endif
-
-# Default target entry
-# NOTE: We call this Makefile target or Makefile.Android target
-all:
-	$(MAKE) $(MAKEFILE_PARAMS)
-
-# Project target defined by PROJECT_NAME
-$(PROJECT_NAME): $(OBJS)
-	$(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
-
-# Compile source files
-# NOTE: This pattern will compile every module defined on $(OBJS)
-%.o: %.c
-	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)
-
-# Clean everything
-clean:
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-		del *.o *.exe /s
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-	find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable|x-pie-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-		find . -type f -perm +ugo+x -delete
-		rm -f *.o
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-	find . -type f -executable -delete
-	rm -fv *.o
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-	del *.o *.html *.js
-endif
-	@echo Cleaning done
-

+ 0 - 300
games/just_do/Makefile.Android

@@ -1,300 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Android project (APK building)
-#
-#   Copyright (c) 2017 Ramon Santamaria (@raysan5)
-#
-#   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 required raylib variables
-PLATFORM               ?= PLATFORM_ANDROID
-RAYLIB_PATH            ?= ..\..
-
-# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
-ANDROID_ARCH           ?= ARM
-ANDROID_API_VERSION     = 21
-ifeq ($(ANDROID_ARCH),ARM)
-    ANDROID_ARCH_NAME   = armeabi-v7a
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    ANDROID_ARCH_NAME   = arm64-v8a
-endif
-
-# Required path variables
-# NOTE: JAVA_HOME must be set to JDK
-JAVA_HOME              ?= C:/JavaJDK
-ANDROID_HOME            = C:/android-sdk
-ANDROID_TOOLCHAIN       = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION)
-ANDROID_BUILD_TOOLS     = $(ANDROID_HOME)/build-tools/28.0.1
-ANDROID_PLATFORM_TOOLS  = $(ANDROID_HOME)/platform-tools
-
-# Android project configuration variables
-PROJECT_NAME           ?= raylib_game
-PROJECT_LIBRARY_NAME   ?= main
-PROJECT_BUILD_PATH     ?= android.$(PROJECT_NAME)
-PROJECT_RESOURCES_PATH ?= resources
-PROJECT_SOURCE_FILES   ?= raylib_game.c
-
-# Some source files are placed in directories, when compiling to some 
-# output directory other than source, that directory must pre-exist.
-# Here we get a list of required folders that need to be created on
-# code output folder $(PROJECT_BUILD_PATH)\obj to avoid GCC errors.
-PROJECT_SOURCE_DIRS = $(sort $(dir $(PROJECT_SOURCE_FILES)))
-
-# Android app configuration variables
-APP_LABEL_NAME ?= rGame
-APP_COMPANY_NAME ?= raylib
-APP_PRODUCT_NAME ?= rgame
-APP_VERSION_CODE ?= 1
-APP_VERSION_NAME ?= 1.0
-APP_ICON_LDPI ?= $(RAYLIB_PATH)\logo\raylib_36x36.png
-APP_ICON_MDPI ?= $(RAYLIB_PATH)\logo\raylib_48x48.png
-APP_ICON_HDPI ?= $(RAYLIB_PATH)\logo\raylib_72x72.png
-APP_SCREEN_ORIENTATION ?= landscape
-APP_KEYSTORE_PASS ?= raylib
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE ?= STATIC
-
-# Library path for libraylib.a/libraylib.so
-RAYLIB_LIB_PATH = $(RAYLIB_PATH)\src
-
-# Shared libs must be added to APK if required
-# NOTE: Generated NativeLoader.java automatically load those libraries
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-    PROJECT_SHARED_LIBS = lib/$(ANDROID_ARCH_NAME)/libraylib.so 
-endif
-
-# Compiler and archiver
-# NOTE: GCC is being deprecated in Android NDK r16
-ifeq ($(ANDROID_ARCH),ARM)
-    CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
-endif
-
-# Compiler flags for arquitecture
-ifeq ($(ANDROID_ARCH),ARM)
-    CFLAGS = -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CFLAGS = -std=c99 -target aarch64 -mfix-cortex-a53-835769
-endif
-# Compilation functions attributes options
-CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC
-# Compiler options for the linker
-CFLAGS += -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes
-# Preprocessor macro definitions
-CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=$(ANDROID_API_VERSION)
-
-# Paths containing required header files
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external/android/native_app_glue
-
-# Linker options
-LDFLAGS = -Wl,-soname,lib$(PROJECT_LIBRARY_NAME).so -Wl,--exclude-libs,libatomic.a 
-LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings 
-# Force linking of library module to define symbol
-LDFLAGS += -u ANativeActivity_onCreate
-# Library paths containing required libs
-LDFLAGS += -L. -L$(PROJECT_BUILD_PATH)/obj -L$(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME) -L$(ANDROID_TOOLCHAIN)\sysroot\usr\lib
-
-# Define any libraries to link into executable
-# if you want to link libraries (libname.so or libname.a), use the -lname
-LDLIBS = -lm -lc -lraylib -llog -landroid -lEGL -lGLESv2 -lOpenSLES -ldl
-
-# Generate target objects list from PROJECT_SOURCE_FILES
-OBJS = $(patsubst %.c, $(PROJECT_BUILD_PATH)/obj/%.o, $(PROJECT_SOURCE_FILES))
-
-# Android APK building process... some steps required...
-# NOTE: typing 'make' will invoke the default target entry called 'all',
-all: create_temp_project_dirs \
-     copy_project_required_libs \
-     copy_project_resources \
-     generate_loader_script \
-     generate_android_manifest \
-     generate_apk_keystore \
-     config_project_package \
-     compile_project_code \
-     compile_project_class \
-     compile_project_class_dex \
-     create_project_apk_package \
-     sign_project_apk_package \
-     zipalign_project_apk_package
-
-# Create required temp directories for APK building
-create_temp_project_dirs:
-	if not exist $(PROJECT_BUILD_PATH) mkdir $(PROJECT_BUILD_PATH) 
-	if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj
-	if not exist $(PROJECT_BUILD_PATH)\src mkdir $(PROJECT_BUILD_PATH)\src
-	if not exist $(PROJECT_BUILD_PATH)\src\com mkdir $(PROJECT_BUILD_PATH)\src\com
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\lib mkdir $(PROJECT_BUILD_PATH)\lib
-	if not exist $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) mkdir $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\bin mkdir $(PROJECT_BUILD_PATH)\bin
-	if not exist $(PROJECT_BUILD_PATH)\res mkdir $(PROJECT_BUILD_PATH)\res
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-ldpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-ldpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-mdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-mdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-hdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-hdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\values mkdir $(PROJECT_BUILD_PATH)\res\values
-	if not exist $(PROJECT_BUILD_PATH)\assets mkdir $(PROJECT_BUILD_PATH)\assets
-	if not exist $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) mkdir $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH)
-	if not exist $(PROJECT_BUILD_PATH)\obj\screens mkdir $(PROJECT_BUILD_PATH)\obj\screens
-	$(foreach dir, $(PROJECT_SOURCE_DIRS), $(call create_dir, $(dir)))
-
-define create_dir
-    if not exist $(PROJECT_BUILD_PATH)\obj\$(1) mkdir $(PROJECT_BUILD_PATH)\obj\$(1)
-endef
-    
-# Copy required shared libs for integration into APK
-# NOTE: If using shared libs they are loaded by generated NativeLoader.java
-copy_project_required_libs:
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.so $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.so 
-endif
-ifeq ($(RAYLIB_LIBTYPE),STATIC)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.a $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.a 
-endif
-
-# Copy project required resources: strings.xml, icon.png, assets
-# NOTE: Required strings.xml is generated and game resources are copied to assets folder
-# TODO: Review xcopy usage, it can not be found in some systems!
-copy_project_resources:
-	copy $(APP_ICON_LDPI) $(PROJECT_BUILD_PATH)\res\drawable-ldpi\icon.png /Y
-	copy $(APP_ICON_MDPI) $(PROJECT_BUILD_PATH)\res\drawable-mdpi\icon.png /Y
-	copy $(APP_ICON_HDPI) $(PROJECT_BUILD_PATH)\res\drawable-hdpi\icon.png /Y
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	@echo ^<resources^>^<string name="app_name"^>$(APP_LABEL_NAME)^</string^>^</resources^> >> $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	if exist $(PROJECT_RESOURCES_PATH) C:\Windows\System32\xcopy $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) /Y /E /F
-
-# Generate NativeLoader.java to load required shared libraries
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_loader_script:
-	@echo package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME); > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo. >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo public class NativeLoader extends android.app.NativeActivity { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo     static { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	@echo         System.loadLibrary("raylib"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-endif
-	@echo         System.loadLibrary("$(PROJECT_LIBRARY_NAME)"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java 
-	@echo     } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-    
-# Generate AndroidManifest.xml with all the required options
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_android_manifest:
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^<manifest xmlns:android="http://schemas.android.com/apk/res/android" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         package="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)"  >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         android:versionCode="$(APP_VERSION_CODE)" android:versionName="$(APP_VERSION_NAME)" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-sdk android:minSdkVersion="$(ANDROID_API_VERSION)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-feature android:glEsVersion="0x00020000" android:required="true" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<application android:allowBackup="false" android:label="@string/app_name" android:icon="@drawable/icon" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^<activity android:name="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME).NativeLoader" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:configChanges="orientation|keyboardHidden|screenSize" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:screenOrientation="$(APP_SCREEN_ORIENTATION)" android:launchMode="singleTask" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:clearTaskOnLaunch="true"^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<meta-data android:name="android.app.lib_name" android:value="$(PROJECT_LIBRARY_NAME)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<action android:name="android.intent.action.MAIN" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<category android:name="android.intent.category.LAUNCHER" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^</intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^</activity^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^</application^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^</manifest^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-
-# Generate storekey for APK signing: $(PROJECT_NAME).keystore
-# NOTE: Configure here your Distinguished Names (-dname) if required!
-generate_apk_keystore: 
-	if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
-
-# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
-# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
-config_project_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(PROJECT_BUILD_PATH)/res -J $(PROJECT_BUILD_PATH)/src -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar
-
-# Compile native_app_glue code as static library: obj/libnative_app_glue.a
-compile_native_app_glue:
-	$(CC) -c $(RAYLIB_PATH)/src/external/android/native_app_glue/android_native_app_glue.c -o $(PROJECT_BUILD_PATH)/obj/native_app_glue.o $(CFLAGS)
-	$(AR) rcs $(PROJECT_BUILD_PATH)/obj/libnative_app_glue.a $(PROJECT_BUILD_PATH)/obj/native_app_glue.o
-
-# Compile project code into a shared library: lib/lib$(PROJECT_LIBRARY_NAME).so 
-compile_project_code: $(OBJS)
-	$(CC) -o $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(OBJS) -shared $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS)
-
-# Compile all .c files required into object (.o) files
-# NOTE: Those files will be linked into a shared library
-$(PROJECT_BUILD_PATH)/obj/%.o:%.c
-	$(CC) -c $^ -o $@ $(INCLUDE_PATHS) $(CFLAGS) --sysroot=$(ANDROID_TOOLCHAIN)/sysroot 
-    
-# Compile project .java code into .class (Java bytecode) 
-compile_project_class:
-	$(JAVA_HOME)/bin/javac -verbose -source 1.7 -target 1.7 -d $(PROJECT_BUILD_PATH)/obj -bootclasspath $(JAVA_HOME)/jre/lib/rt.jar -classpath $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar;$(PROJECT_BUILD_PATH)/obj -sourcepath $(PROJECT_BUILD_PATH)/src $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-
-# Compile .class files into Dalvik executable bytecode (.dex)
-# NOTE: Since Android 5.0, Dalvik interpreter (JIT) has been replaced by ART (AOT)
-compile_project_class_dex:
-	$(ANDROID_BUILD_TOOLS)/dx --verbose --dex --output=$(PROJECT_BUILD_PATH)/bin/classes.dex $(PROJECT_BUILD_PATH)/obj
-
-# Create Android APK package: bin/$(PROJECT_NAME).unsigned.apk
-# NOTE: Requires compiled classes.dex and lib$(PROJECT_LIBRARY_NAME).so
-# NOTE: Use -A resources to define additional directory in which to find raw asset files
-create_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -S $(PROJECT_BUILD_PATH)/res -A $(PROJECT_BUILD_PATH)/assets -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -F $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_BUILD_PATH)/bin
-	cd $(PROJECT_BUILD_PATH) && $(ANDROID_BUILD_TOOLS)/aapt add bin/$(PROJECT_NAME).unsigned.apk lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(PROJECT_SHARED_LIBS)
-
-# Create signed APK package using generated Key: bin/$(PROJECT_NAME).signed.apk 
-sign_project_apk_package:
-	$(JAVA_HOME)/bin/jarsigner -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -signedjar $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_NAME)Key
-
-# Create zip-aligned APK package: $(PROJECT_NAME).apk 
-zipalign_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_NAME).apk
-
-# Install $(PROJECT_NAME).apk to default emulator/device
-# NOTE: Use -e (emulator) or -d (device) parameters if required
-install:
-	$(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk
-    
-# Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64)
-check_device_abi:
-	$(ANDROID_PLATFORM_TOOLS)/adb shell getprop ro.product.cpu.abi
-
-# Monitorize output log coming from device, only raylib tag
-logcat:
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-    
-# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
-deploy:
-	$(ANDROID_PLATFORM_TOOLS)/adb install -r $(PROJECT_NAME).apk
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-
-#$(ANDROID_PLATFORM_TOOLS)/adb logcat *:W
-
-# Clean everything
-clean:
-	del $(PROJECT_BUILD_PATH)\* /f /s /q
-	rmdir $(PROJECT_BUILD_PATH) /s /q
-	@echo Cleaning done

+ 0 - 356
games/just_do/just_do.c

@@ -1,356 +0,0 @@
-/*******************************************************************************************
-*
-*   JUST DO [GLOBAL GAME JAM 2015]
-*
-*   Experimental puzzle game that lets the user try to find a logic 
-*   solution to different shape-color-based situations.
-*
-*   This game has been created using raylib 1.6 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2015 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include "screens/screens.h"    // NOTE: Defines global variable: currentScreen
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-const int screenWidth = 1280;     // Moved to screens.h
-const int screenHeight = 720;     // Moved to screens.h
-
-// 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;
-int framesCounter = 0;
-
-//static Sound levelWin;
-Music music;
-
-//----------------------------------------------------------------------------------
-// Local Functions Declaration
-//----------------------------------------------------------------------------------
-void TransitionToScreen(int screen);
-void UpdateTransition(void);
-void DrawTransition(void);
-
-void UpdateDrawFrame(void);     // Update and Draw one frame
-
-//----------------------------------------------------------------------------------
-// Main entry point
-//----------------------------------------------------------------------------------
-int main(void)
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "JUST DO [GGJ15]");
-
-    // Load global data here (assets that must be available in all screens, i.e. fonts)
-    InitAudioDevice();
-    
-    levelWin = LoadSound("resources/win.wav");
-    music = LoadMusicStream("resources/ambient.ogg");
-    
-    // Setup and Init first screen
-    currentScreen = LOGO;
-    InitLogoScreen();
-    
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);   // Set our game to run at 60 frames-per-second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose())    // Detect window close button or ESC key
-    {
-        UpdateDrawFrame();
-    }
-#endif
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    
-    // Unload all global loaded data (i.e. fonts) here!
-    UnloadSound(levelWin);
-    UnloadMusicStream(music);
-    
-    CloseAudioDevice();
-    
-    CloseWindow();        // Close window and OpenGL context
-    //--------------------------------------------------------------------------------------
-
-    return 0;
-}
-
-//----------------------------------------------------------------------------------
-// Local Functions Definition
-//----------------------------------------------------------------------------------
-void TransitionToScreen(int screen)
-{
-    onTransition = true;
-    transFromScreen = currentScreen;
-    transToScreen = screen;
-}
-
-void UpdateTransition(void)
-{
-    if (!transFadeOut)
-    {
-        transAlpha += 0.02f;
-
-        if (transAlpha >= 1.0)
-        {
-            transAlpha = 1.0;
-            currentScreen = transToScreen;
-            transFadeOut = true;
-            framesCounter = 0;
-        }
-    }
-    else  // Transition fade out logic
-    {
-        transAlpha -= 0.02f;
-
-        if (transAlpha <= 0)
-        {
-            transAlpha = 0;
-            transFadeOut = false;
-            onTransition = false;
-            transFromScreen = -1;
-            transToScreen = -1;
-        }
-    }
-}
-
-void DrawTransition(void)
-{
-    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(RAYWHITE, transAlpha));
-}
-
-void UpdateDrawFrame(void)
-{
-    // Update
-    //----------------------------------------------------------------------------------
-    if (currentScreen != LOGO) UpdateMusicStream(music);
-    
-    if (!onTransition)
-    {
-        if (IsKeyPressed('0'))
-        {
-            TransitionToScreen(LEVEL00);
-            InitLevel00Screen();
-        }
-        else if (IsKeyPressed('1'))
-        {
-            TransitionToScreen(LEVEL01);
-            InitLevel01Screen();
-        }
-        else if (IsKeyPressed('2'))
-        {
-            TransitionToScreen(LEVEL02);
-            InitLevel02Screen();
-        }
-        else if (IsKeyPressed('3'))
-        {
-            TransitionToScreen(LEVEL03);
-            InitLevel03Screen();
-        }
-        else if (IsKeyPressed('4'))
-        {
-            TransitionToScreen(LEVEL04);
-            InitLevel04Screen();
-        }
-        else if (IsKeyPressed('5'))
-        {
-            TransitionToScreen(LEVEL05);
-            InitLevel05Screen();
-        }
-        else if (IsKeyPressed('6'))
-        {
-            TransitionToScreen(LEVEL06);
-            InitLevel06Screen();
-        }
-        else if (IsKeyPressed('7'))
-        {
-            TransitionToScreen(LEVEL07);
-            InitLevel07Screen();
-        }
-        else if (IsKeyPressed('8'))
-        {
-            TransitionToScreen(LEVEL08);
-            InitLevel08Screen();
-        }
-        else if (IsKeyPressed('9'))
-        {
-            TransitionToScreen(LEVEL09);
-            InitLevel08Screen();
-        }
-        
-        switch(currentScreen) 
-        {
-            case LOGO: 
-            {
-                UpdateLogoScreen();
-                
-                if (FinishLogoScreen())
-                {
-                    UnloadLogoScreen();
-                    TransitionToScreen(LEVEL00);
-                    InitLevel00Screen();
-                    
-                    PlayMusicStream(music);
-                    SetMusicVolume(music, 0.6f);
-                }
-            } break;
-            case LEVEL00: 
-            {
-                UpdateLevel00Screen();
-                
-                if (FinishLevel00Screen())
-                {
-                    UnloadLevel00Screen();
-                    TransitionToScreen(LEVEL01);
-                    InitLevel01Screen();
-                }
-            } break;
-            case LEVEL01: 
-            {
-                UpdateLevel01Screen();
-                
-                if (FinishLevel01Screen())
-                {
-                    UnloadLevel01Screen();
-                    TransitionToScreen(LEVEL02);
-                    InitLevel02Screen();
-                }
-            } break;
-            case LEVEL02: 
-            {
-                UpdateLevel02Screen();
-                
-                if (FinishLevel02Screen())
-                {
-                    UnloadLevel02Screen();
-                    TransitionToScreen(LEVEL03);
-                    InitLevel03Screen();
-                }
-            } break;
-            case LEVEL03: 
-            {
-                UpdateLevel03Screen();
-                
-                if (FinishLevel03Screen())
-                {
-                    UnloadLevel03Screen();
-                    TransitionToScreen(LEVEL04);
-                    InitLevel04Screen();
-                }
-            } break;
-            case LEVEL04: 
-            {
-                UpdateLevel04Screen();
-                
-                if (FinishLevel04Screen())
-                {
-                    UnloadLevel04Screen();
-                    TransitionToScreen(LEVEL05);
-                    InitLevel05Screen();
-                }
-            } break;
-            case LEVEL05: 
-            {
-                UpdateLevel05Screen();
-                
-                if (FinishLevel05Screen())
-                {
-                    UnloadLevel05Screen();
-                    TransitionToScreen(LEVEL06);
-                    InitLevel06Screen();
-                }
-            } break;
-            case LEVEL06: 
-            {
-                UpdateLevel06Screen();
-                
-                if (FinishLevel06Screen())
-                {
-                    UnloadLevel06Screen();
-                    TransitionToScreen(LEVEL07);
-                    InitLevel07Screen();
-                }
-            } break;
-            case LEVEL07: 
-            {
-                UpdateLevel07Screen();
-                
-                if (FinishLevel07Screen())
-                {
-                    UnloadLevel07Screen();
-                    TransitionToScreen(LEVEL08);
-                    InitLevel08Screen();
-                }
-            } break;
-            case LEVEL08: 
-            {
-                UpdateLevel08Screen();
-                
-                if (FinishLevel08Screen())
-                {
-                    UnloadLevel08Screen();
-                    TransitionToScreen(LEVEL09);
-                    InitLevel09Screen();
-                }
-            } break;
-            case LEVEL09: 
-            {
-                UpdateLevel09Screen();
-                
-                if (FinishLevel09Screen())
-                {
-                    UnloadLevel09Screen();
-                    TransitionToScreen(LEVEL00);
-                    InitLevel00Screen();
-                }
-            } break;
-            default: break;
-        }
-    }
-    else UpdateTransition(); // Update transition (fade-in, fade-out)
-    //----------------------------------------------------------------------------------
-    
-    // Draw
-    //----------------------------------------------------------------------------------
-    BeginDrawing();
-    
-        ClearBackground(RAYWHITE);
-        
-        switch(currentScreen) 
-        {
-            case LOGO: DrawLogoScreen(); break;
-            case LEVEL00: DrawLevel00Screen(); break;
-            case LEVEL01: DrawLevel01Screen(); break;
-            case LEVEL02: DrawLevel02Screen(); break;
-            case LEVEL03: DrawLevel03Screen(); break;
-            case LEVEL04: DrawLevel04Screen(); break;
-            case LEVEL05: DrawLevel05Screen(); break;
-            case LEVEL06: DrawLevel06Screen(); break;
-            case LEVEL07: DrawLevel07Screen(); break;
-            case LEVEL08: DrawLevel08Screen(); break;
-            case LEVEL09: DrawLevel09Screen(); break;
-            default: break;
-        }
-    
-        if (onTransition) DrawTransition();
-    
-    EndDrawing();
-    //----------------------------------------------------------------------------------
-}

BIN
games/just_do/resources/ambient.ogg


BIN
games/just_do/resources/win.wav


+ 0 - 167
games/just_do/screens/screen_level00.c

@@ -1,167 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level00 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level00 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle boundsU, boundsO;
-
-static bool mouseOverU = false;
-static bool mouseOverO = false;
-static bool placedU = false;
-static bool placedO = false;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level00 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level00 Screen Initialization logic
-void InitLevel00Screen(void)
-{
-    // Initialize Level00 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    boundsU = (Rectangle){GetScreenWidth()/2 - 265, -200, MeasureText("U", 160) + 40, 160 };
-    boundsO = (Rectangle){GetScreenWidth() - 370, -30, MeasureText("O", 160) + 40, 160 };
-}
-
-// Level00 Screen Update logic
-void UpdateLevel00Screen(void)
-{
-    // Update Level00 screen variables here!
-    if (!done) framesCounter++;
-    
-    if (!done)
-    {
-        if (!placedU) boundsU.y += 2;
-        
-        if (boundsU.y >= GetScreenHeight()) boundsU.y = -boundsU.height;
-        
-        Vector2 mousePos = GetMousePosition();
-
-        if (CheckCollisionPointRec(mousePos, boundsU))
-        {
-            mouseOverU = true;
-            
-            if (!placedU && IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-            {
-                if ((boundsU.y > GetScreenHeight()/2 - 110) && ((boundsU.y + boundsU.height) < (GetScreenHeight()/2 + 100)))
-                {
-                    placedU = true;
-                }
-            }
-        }
-        else mouseOverU = false;
-        
-        if (CheckCollisionPointRec(mousePos, boundsO))
-        {
-            mouseOverO = true;
-            
-            if (!placedO && IsMouseButtonPressed(MOUSE_LEFT_BUTTON)) boundsO.y += 100;
-            
-            if (boundsO.y >= (GetScreenHeight()/2 - 130)) placedO = true;
-        }
-        else mouseOverO = false;
-        
-        if (placedO && placedU)
-        {
-            done = true;
-            PlaySound(levelWin);
-        }
-    }
-    
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 30) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level00 Screen Draw logic
-void DrawLevel00Screen(void)
-{
-    // Draw Level00 screen
-    DrawText("U", boundsU.x, boundsU.y + 10, 160, GRAY);
-    DrawText("J", GetScreenWidth()/2 - MeasureText("JUST DO", 160)/2, GetScreenHeight()/2 - 80, 160, GRAY);
-    DrawText("ST D", GetScreenWidth()/2 - MeasureText("JUST DO", 160)/2 + 210, GetScreenHeight()/2 - 80, 160, GRAY);
-    DrawText("O", boundsO.x, boundsO.y + 10, 160, GRAY);
-    
-    DrawText("by RAMON SANTAMARIA (@raysan5)", 370, GetScreenHeight()/2 + 100, 30, Fade(LIGHTGRAY, 0.4f));
-    
-    if (mouseOverU && !placedU) DrawRectangleLines(boundsU.x - 20, boundsU.y, boundsU.width, boundsU.height, Fade(LIGHTGRAY, 0.8f));
-    //DrawRectangleBordersRec(boundsU, -20, 0, 20, Fade(RED, 0.3f));
-    
-    if (mouseOverO && !placedO) DrawRectangleLines(boundsO.x - 20, boundsO.y, boundsO.width, boundsO.height, Fade(LIGHTGRAY, 0.8f));
-    //DrawRectangleBordersRec(boundsO, -20, 0, 20, Fade(RED, 0.3f));
-        
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 00", GetScreenWidth()/2 - MeasureText("LEVEL 00", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 00", GetScreenWidth()/2 - MeasureText("LEVEL 00", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level00 Screen Unload logic
-void UnloadLevel00Screen(void)
-{
-    // TODO: Unload Level00 screen variables here!
-}
-
-// Level00 Screen should finish?
-int FinishLevel00Screen(void)
-{
-    return finishScreen;
-}
-
-void DrawRectangleBordersRec(Rectangle rec, int offsetX, int offsetY, int borderSize, Color col)
-{
-    DrawRectangle(rec.x + offsetX, rec.y + offsetY, rec.width, borderSize, col);
-    DrawRectangle(rec.x + offsetX, rec.y + borderSize + offsetY, borderSize, rec.height - borderSize*2, col);
-    DrawRectangle(rec.x + rec.width - borderSize + offsetX, rec.y + borderSize + offsetY, borderSize, rec.height - borderSize*2, col);
-    DrawRectangle(rec.x + offsetX, rec.y + rec.height - borderSize + offsetY, rec.width, borderSize, col);
-}

+ 0 - 163
games/just_do/screens/screen_level01.c

@@ -1,163 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level01 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level01 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle innerLeftRec, outerLeftRec;
-static Rectangle innerRightRec, outerRightRec;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level01 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level01 Screen Initialization logic
-void InitLevel01Screen(void)
-{
-    // Initialize Level01 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    outerLeftRec = (Rectangle){ 0, 0, GetScreenWidth()/2, GetScreenHeight() };
-    outerRightRec = (Rectangle){ GetScreenWidth()/2, 0, GetScreenWidth()/2, GetScreenHeight() };
-    
-    innerLeftRec = (Rectangle){ GetScreenWidth()/4 - 200, GetScreenHeight()/2 - 200, 400, 400};
-    innerRightRec = (Rectangle){ GetScreenWidth()/2 + GetScreenWidth()/4 - 200, GetScreenHeight()/2 - 200, 400, 400};
-}
-
-// Level01 Screen Update logic
-void UpdateLevel01Screen(void)
-{
-    // Update Level01 screen
-    framesCounter++;
-    
-    if (!done)
-    {
-        if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-        {
-            if (CheckCollisionPointRec(GetMousePosition(), innerLeftRec))
-            {
-                if (innerRightRec.width > 0)
-                {
-                    innerRightRec.x += 20;
-                    innerRightRec.y += 20;
-                    innerRightRec.width -= 40;
-                    innerRightRec.height -= 40;
-                }
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), innerRightRec))
-            {
-                if (innerLeftRec.width > 0)
-                {
-                    innerLeftRec.x += 20;
-                    innerLeftRec.y += 20;
-                    innerLeftRec.width -= 40;
-                    innerLeftRec.height -= 40;
-                }
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), outerLeftRec))
-            {
-                innerLeftRec.x -= 20;
-                innerLeftRec.y -= 20;
-                innerLeftRec.width += 40;
-                innerLeftRec.height += 40;
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), outerRightRec))
-            {
-                innerRightRec.x -= 20;
-                innerRightRec.y -= 20;
-                innerRightRec.width += 40;
-                innerRightRec.height += 40;
-            }
-        }
-    
-    
-        if (((innerRightRec.width == 0) && (innerLeftRec.height >= GetScreenHeight())) ||
-            ((innerLeftRec.width == 0) && (innerRightRec.height >= GetScreenHeight())))
-            {
-                done = true;
-                PlaySound(levelWin);
-            }
-    }
-    
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level01 Screen Draw logic
-void DrawLevel01Screen(void)
-{
-    // Draw Level01 screen
-    if (!levelFinished) DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), LIGHTGRAY);
-    else DrawRectangle(60, 60, GetScreenWidth() - 120, GetScreenHeight() - 120, LIGHTGRAY);
-    
-    DrawRectangleRec(outerLeftRec, GRAY);
-    DrawRectangleRec(innerLeftRec, RAYWHITE);
-    DrawRectangleRec(outerRightRec, RAYWHITE);
-    DrawRectangleRec(innerRightRec, GRAY);
-    
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 01", GetScreenWidth()/2 - MeasureText("LEVEL 01", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 01", GetScreenWidth()/2 - MeasureText("LEVEL 01", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level01 Screen Unload logic
-void UnloadLevel01Screen(void)
-{
-    // TODO: Unload Level01 screen variables here!
-}
-
-// Level01 Screen should finish?
-int FinishLevel01Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 157
games/just_do/screens/screen_level02.c

@@ -1,157 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level02 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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"
-
-#include <math.h>
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-
-// Level02 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Vector2 bouncingBallPos;
-static float bouncingBallRadius = 40;
-static Vector2 bouncingBallSpeed;
-
-static Vector2 holeCirclePos;
-static float holeCircleRadius = 50;
-
-static bool ballOnHole = false;
-
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level02 Screen Functions Definition
-//----------------------------------------------------------------------------------
-float Vector2Distance(Vector2 v1, Vector2 v2);
-
-// Level02 Screen Initialization logic
-void InitLevel02Screen(void)
-{
-    // TODO: Initialize Level02 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    bouncingBallPos = (Vector2){ 120, 80 };
-    bouncingBallSpeed = (Vector2){ 6, 8 };
-    holeCirclePos = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 };
-}
-
-// Level02 Screen Update logic
-void UpdateLevel02Screen(void)
-{
-    // Update Level02 screen
-    framesCounter++;
-    
-    if (!ballOnHole)
-    {
-        bouncingBallPos.x += bouncingBallSpeed.x;
-        bouncingBallPos.y += bouncingBallSpeed.y;
-
-        if (((bouncingBallPos.x - bouncingBallRadius) <= 0) || ((bouncingBallPos.x + bouncingBallRadius) >= GetScreenWidth())) bouncingBallSpeed.x *= -1;
-        if (((bouncingBallPos.y - bouncingBallRadius) <= 0) || ((bouncingBallPos.y + bouncingBallRadius) >= GetScreenHeight())) bouncingBallSpeed.y *= -1;
-        
-        Vector2 mousePos = GetMousePosition();
-        
-        if (CheckCollisionPointCircle(mousePos, bouncingBallPos, 120))
-        {
-            bouncingBallPos.x = GetRandomValue(80, 1200);
-            bouncingBallPos.y = GetRandomValue(80, 650);
-        }
-        
-        if (CheckCollisionPointCircle(mousePos, holeCirclePos, 120))
-        {
-            if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
-            {
-                holeCirclePos = mousePos;
-                
-                if ((holeCirclePos.x - holeCircleRadius) <= 0) holeCirclePos.x = holeCircleRadius;
-                else if ((holeCirclePos.x + holeCircleRadius) >= GetScreenWidth()) holeCirclePos.x = GetScreenWidth() - holeCircleRadius;
-                
-                if ((holeCirclePos.y - holeCircleRadius) <= 0) holeCirclePos.y = holeCircleRadius;
-                else if ((holeCirclePos.y + holeCircleRadius) >= GetScreenHeight()) holeCirclePos.y = GetScreenHeight() - holeCircleRadius;
-            }
-        }
-        
-        if (Vector2Distance(bouncingBallPos, holeCirclePos) < 20)
-        {
-            ballOnHole = true;
-            PlaySound(levelWin);
-        }
-    }
-    
-    if (ballOnHole && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level02 Screen Draw logic
-void DrawLevel02Screen(void)
-{
-    // Draw Level02 screen
-
-    DrawCircleV(holeCirclePos, holeCircleRadius, LIGHTGRAY);
-    DrawCircleV(bouncingBallPos, bouncingBallRadius, DARKGRAY);
-
-    DrawCircleLines(bouncingBallPos.x, bouncingBallPos.y, 120, Fade(LIGHTGRAY, 0.8f));
-    
-    
-    
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 02", GetScreenWidth()/2 - MeasureText("LEVEL 02", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 02", GetScreenWidth()/2 - MeasureText("LEVEL 02", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level02 Screen Unload logic
-void UnloadLevel02Screen(void)
-{
-    // TODO: Unload Level02 screen variables here!
-}
-
-// Level02 Screen should finish?
-int FinishLevel02Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 134
games/just_do/screens/screen_level03.c

@@ -1,134 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level03 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level03 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle holeRec, pieceRec;
-static bool showPiece = false;
-static bool pieceSelected = false;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level03 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level03 Screen Initialization logic
-void InitLevel03Screen(void)
-{
-    // Initialize Level03 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    holeRec = (Rectangle){ GetScreenWidth()/2 - 50, GetScreenHeight()/2 - 50, 100, 100 };
-    pieceRec = (Rectangle){ 200, 400, 100, 100 };
-}
-
-// Level03 Screen Update logic
-void UpdateLevel03Screen(void)
-{
-    // Update Level03 screen variables here!
-    framesCounter++;
-    
-    Vector2 mousePos = GetMousePosition();
-        
-    if (!done)
-    {
-        if (CheckCollisionPointRec(mousePos, holeRec)) showPiece = true;
-        else showPiece = false;
-            
-        if (IsMouseButtonDown(MOUSE_LEFT_BUTTON))
-        {
-            if (CheckCollisionPointRec(mousePos, pieceRec))
-            {
-                pieceSelected = true;
-                
-                pieceRec.x = ((int)mousePos.x - 50);
-                pieceRec.y = ((int)mousePos.y - 50);
-            }
-        }
-    
-        if ((pieceRec.x == holeRec.x) && !(CheckCollisionPointRec(mousePos, holeRec)))
-        {
-            done = true;
-            PlaySound(levelWin);
-        }
-    }
-    
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level03 Screen Draw logic
-void DrawLevel03Screen(void)
-{
-    // Draw Level03 screen
-    DrawRectangleRec(holeRec, GRAY);
-    DrawRectangleRec(pieceRec, RAYWHITE);
-    
-    if (showPiece) DrawRectangleLines(pieceRec.x, pieceRec.y, pieceRec.width, pieceRec.height, Fade(LIGHTGRAY, 0.8f));
-    
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 03", GetScreenWidth()/2 - MeasureText("LEVEL 03", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 03", GetScreenWidth()/2 - MeasureText("LEVEL 03", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level03 Screen Unload logic
-void UnloadLevel03Screen(void)
-{
-    // TODO: Unload Level03 screen variables here!
-}
-
-// Level03 Screen should finish?
-int FinishLevel03Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 147
games/just_do/screens/screen_level04.c

@@ -1,147 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level04 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level04 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Vector2 circlesCenter;
-static float innerCircleRadius = 40;
-static float outerCircleRadius = 300;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level04 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level04 Screen Initialization logic
-void InitLevel04Screen(void)
-{
-    // Initialize Level04 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    circlesCenter = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 };
-}
-
-// Level04 Screen Update logic
-void UpdateLevel04Screen(void)
-{
-    // Update Level04 screen variables here!
-    framesCounter++;
-
-    if (!done)
-    {
-        if (IsMouseButtonDown(MOUSE_LEFT_BUTTON)) 
-        {
-            if (CheckCollisionPointCircle(GetMousePosition(), circlesCenter, innerCircleRadius))
-            {
-                innerCircleRadius += 2;
-            }
-            else if (CheckCollisionPointCircle(GetMousePosition(), circlesCenter, outerCircleRadius))
-            {
-                outerCircleRadius += 2;
-            }
-            else
-            {
-                outerCircleRadius -= 2;
-                
-                if (outerCircleRadius <= 260) outerCircleRadius = 260;  
-            }
-        }
-        else
-        {
-            if (!done)
-            {
-                innerCircleRadius -= 2;
-                if (outerCircleRadius > 300) outerCircleRadius -= 2;
-            }
-        }
-
-        if (innerCircleRadius >= 270) innerCircleRadius = 270;
-        else if (innerCircleRadius <= 40) innerCircleRadius = 40;
-        
-        if (outerCircleRadius >= 600) outerCircleRadius = 600;
-
-        if (innerCircleRadius >= outerCircleRadius)
-        {
-            done = true;
-            PlaySound(levelWin);
-        }
-    }
-    
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level04 Screen Draw logic
-void DrawLevel04Screen(void)
-{
-    // Draw Level04 screen here!
-    //DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), GRAY);
-    DrawCircleV(circlesCenter, outerCircleRadius, GRAY);
-    DrawCircleV(circlesCenter, innerCircleRadius, RAYWHITE);
-
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 04", GetScreenWidth()/2 - MeasureText("LEVEL 04", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 04", GetScreenWidth()/2 - MeasureText("LEVEL 04", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level04 Screen Unload logic
-void UnloadLevel04Screen(void)
-{
-    // TODO: Unload Level04 screen variables here!
-}
-
-// Level04 Screen should finish?
-int FinishLevel04Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 185
games/just_do/screens/screen_level05.c

@@ -1,185 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level05 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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"
-
-#define NUM_CIRCLES 10
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-
-// Level05 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Vector2 circleCenter;
-static float circleRadius[NUM_CIRCLES];
-static bool circleLocked[NUM_CIRCLES];
-static Color circleColor[NUM_CIRCLES];
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level05 Screen Functions Definition
-//----------------------------------------------------------------------------------
-static bool CheckColor(Color col1, Color col2);
-
-// Level05 Screen Initialization logic
-void InitLevel05Screen(void)
-{
-    // Initialize Level05 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    circleCenter = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 };
-    
-    for (int i = 0; i < NUM_CIRCLES; i++)
-    {
-        circleRadius[i] = 760/NUM_CIRCLES*(NUM_CIRCLES - i);
-        circleLocked[i] = false;
-    }
-    
-    // That's a dirty hack to give sonme coherence to this puzzle...
-    circleColor[9] = GRAY;
-    circleColor[8] = RAYWHITE;
-    circleColor[7] = RAYWHITE;
-    circleColor[6] = GRAY;
-    circleColor[5] = RAYWHITE;
-    circleColor[4] = GRAY;
-    circleColor[3] = GRAY;
-    circleColor[2] = GRAY;
-    circleColor[1] = RAYWHITE;
-    circleColor[0] = GRAY;
-}
-
-// Level05 Screen Update logic
-void UpdateLevel05Screen(void)
-{
-    // Update Level05 screen variables here!
-    framesCounter++;
-
-    if (!done)
-    {
-        if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-        {
-            for (int i = NUM_CIRCLES - 1; i >= 0; i--)
-            {
-                if (CheckCollisionPointCircle(GetMousePosition(), circleCenter, circleRadius[i]))
-                {
-                    if (i == 0)
-                    {
-                        if (CheckColor(circleColor[8], GRAY)) circleColor[8] = RAYWHITE;
-                        else circleColor[8] = GRAY;
-                    }
-                    else if (i == 2)
-                    {
-                        if (CheckColor(circleColor[5], GRAY)) circleColor[5] = RAYWHITE;
-                        else circleColor[5] = GRAY;
-                    }
-                    else if (i == 3)
-                    {
-                        if (CheckColor(circleColor[6], GRAY)) circleColor[6] = RAYWHITE;
-                        else circleColor[6] = GRAY;
-                    }
-                    else
-                    {
-                        if (CheckColor(circleColor[i], GRAY)) circleColor[i] = RAYWHITE;
-                        else circleColor[i] = GRAY;
-                    }
-                    return;
-                }
-            }
-        }
-    
-        // Check all cicles done
-        for (int i = 0; i < NUM_CIRCLES; i++)
-        {
-            done = true;
-            
-            if (CheckColor(circleColor[i], RAYWHITE))
-            {
-                done = false;
-                return;
-            }
-            
-            //if (done) PlaySound(levelWin);
-        }
-    }
-
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level05 Screen Draw logic
-void DrawLevel05Screen(void)
-{
-    // Draw Level05 screen
-    for (int i = 0; i < NUM_CIRCLES; i++)
-    {
-        DrawPoly(circleCenter, 64, circleRadius[i], 0.0f, circleColor[i]);
-    }
-    
-    
-    
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 05", GetScreenWidth()/2 - MeasureText("LEVEL 05", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 05", GetScreenWidth()/2 - MeasureText("LEVEL 05", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level05 Screen Unload logic
-void UnloadLevel05Screen(void)
-{
-    // TODO: Unload Level05 screen variables here!
-}
-
-// Level05 Screen should finish?
-int FinishLevel05Screen(void)
-{
-    return finishScreen;
-}
-
-static bool CheckColor(Color col1, Color col2)
-{
-    return ((col1.r == col2.r) && (col1.g == col2.g) && (col1.b == col2.b) && (col1.a == col2.a));
-}

+ 0 - 156
games/just_do/screens/screen_level06.c

@@ -1,156 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level06 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level06 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle centerRec;
-
-static Rectangle movingRecs[4];
-static int speedRecs[4];
-static bool stoppedRec[4];
-static int mouseOverNum = -1;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level06 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level06 Screen Initialization logic
-void InitLevel06Screen(void)
-{
-    // Initialize Level06 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    centerRec = (Rectangle){ GetScreenWidth()/2 - 100, 0, 200, GetScreenHeight() };
-    
-    for (int i = 0; i < 4; i++)
-    {
-        movingRecs[i] = (Rectangle){ GetRandomValue(0, 5)*150, (i*150) + 90, 100, 100 };
-        stoppedRec[i] = false;
-        speedRecs[i] = GetRandomValue(4, 8);
-    }
-}
-
-// Level06 Screen Update logic
-void UpdateLevel06Screen(void)
-{
-    // Update Level06 screen variables here!
-    framesCounter++;
-
-    if (!done)
-    {
-        for (int i = 0; i < 4; i++)
-        {
-            if (!stoppedRec[i]) movingRecs[i].x += speedRecs[i];
-            
-            if (movingRecs[i].x >= GetScreenWidth()) movingRecs[i].x = -movingRecs[i].width;
-            
-            if (CheckCollisionPointRec(GetMousePosition(), movingRecs[i]))
-            {
-                mouseOverNum = i;
-                
-                if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-                {
-                    if (i == 0) stoppedRec[3] = !stoppedRec[3];
-                    else if (i == 1) stoppedRec[2] = !stoppedRec[2];
-                    else if (i == 2) stoppedRec[0] = !stoppedRec[0];
-                    else if (i == 3) stoppedRec[1] = !stoppedRec[1];
-                }
-            }
-        }
-
-        // Check if all boxes are aligned
-        if (((movingRecs[0].x > centerRec.x) && ((movingRecs[0].x + movingRecs[0].width) < (centerRec.x + centerRec.width))) &&
-            ((movingRecs[1].x > centerRec.x) && ((movingRecs[1].x + movingRecs[1].width) < (centerRec.x + centerRec.width))) &&
-            ((movingRecs[2].x > centerRec.x) && ((movingRecs[2].x + movingRecs[2].width) < (centerRec.x + centerRec.width))) &&
-            ((movingRecs[3].x > centerRec.x) && ((movingRecs[3].x + movingRecs[3].width) < (centerRec.x + centerRec.width))))
-        {
-            done = true;
-            PlaySound(levelWin);
-        }
-    }
-
-    
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level06 Screen Draw logic
-void DrawLevel06Screen(void)
-{
-    // Draw Level06 screen
-    DrawRectangleRec(centerRec, LIGHTGRAY);
-    
-    for (int i = 0; i < 4; i++)
-    {
-        DrawRectangleRec(movingRecs[i], GRAY);
-    }
-    
-    if (!done && (mouseOverNum >= 0)) DrawRectangleLines(movingRecs[mouseOverNum].x - 5, movingRecs[mouseOverNum].y - 5, movingRecs[mouseOverNum].width + 10, movingRecs[mouseOverNum].height + 10, Fade(LIGHTGRAY, 0.8f));
-        
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 06", GetScreenWidth()/2 - MeasureText("LEVEL 06", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 06", GetScreenWidth()/2 - MeasureText("LEVEL 06", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level06 Screen Unload logic
-void UnloadLevel06Screen(void)
-{
-    // TODO: Unload Level06 screen variables here!
-}
-
-// Level06 Screen should finish?
-int FinishLevel06Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 178
games/just_do/screens/screen_level07.c

@@ -1,178 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level07 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level07 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Vector2 leftCirclePos, middleCirclePos, rightCirclePos;
-static Vector2 leftBtnPos, middleBtnPos, rightBtnPos;
-static float circleRadius = 100;
-static float btnRadius = 80;
-
-static bool leftCircleActive, middleCircleActive, rightCircleActive;
-static Color leftCircleColor, middleCircleColor, rightCircleColor;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level07 Screen Functions Definition
-//----------------------------------------------------------------------------------
-static bool CheckColor(Color col1, Color col2);
-
-// Level07 Screen Initialization logic
-void InitLevel07Screen(void)
-{
-    // Initialize Level07 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    leftCirclePos = (Vector2){ GetScreenWidth()/2 - 340, GetScreenHeight()/2 - 100 };
-    middleCirclePos = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 - 100 };
-    rightCirclePos = (Vector2){ GetScreenWidth()/2 + 340, GetScreenHeight()/2 - 100 };
-
-    leftBtnPos = (Vector2){ GetScreenWidth()/2 - 340, GetScreenHeight()/2 + 120 };
-    middleBtnPos = (Vector2){ GetScreenWidth()/2, GetScreenHeight()/2 + 120 };
-    rightBtnPos = (Vector2){ GetScreenWidth()/2 + 340, GetScreenHeight()/2 + 120 };
-    
-    leftCircleActive = false;
-    middleCircleActive = true;
-    rightCircleActive = false;
-    
-    leftCircleColor = GRAY;
-    middleCircleColor = GRAY;
-    rightCircleColor = GRAY;
-}
-
-// Level07 Screen Update logic
-void UpdateLevel07Screen(void)
-{
-    // Update Level07 screen variables here!
-    framesCounter++;
-    
-    if (!done)
-    {
-        if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-        {
-            if (CheckCollisionPointCircle(GetMousePosition(), leftBtnPos, btnRadius)) leftCircleActive = !leftCircleActive;
-            else if (CheckCollisionPointCircle(GetMousePosition(), middleBtnPos, btnRadius)) middleCircleActive = !middleCircleActive;
-            else if (CheckCollisionPointCircle(GetMousePosition(), rightBtnPos, btnRadius)) rightCircleActive = !rightCircleActive;
-            
-            if (rightCircleActive && CheckCollisionPointCircle(GetMousePosition(), leftCirclePos, circleRadius))
-            {
-                if (CheckColor(leftCircleColor, GRAY)) leftCircleColor = LIGHTGRAY;
-                else leftCircleColor = GRAY;
-            }
-            
-            if (middleCircleActive && CheckCollisionPointCircle(GetMousePosition(), middleCirclePos, circleRadius))
-            {
-                if (CheckColor(middleCircleColor, GRAY)) middleCircleColor = LIGHTGRAY;
-                else middleCircleColor = GRAY;
-            }
-            
-            if (rightCircleActive && leftCircleActive && CheckCollisionPointCircle(GetMousePosition(), rightCirclePos, circleRadius))
-            {
-                if (CheckColor(rightCircleColor, GRAY)) rightCircleColor = LIGHTGRAY;
-                else rightCircleColor = GRAY;
-            }
-        }
-    
-        // Check all cicles done
-        if (CheckColor(leftCircleColor, LIGHTGRAY) && CheckColor(middleCircleColor, LIGHTGRAY) && CheckColor(rightCircleColor, LIGHTGRAY) &&
-            !leftCircleActive && !middleCircleActive && !rightCircleActive)
-        {
-            done = true;
-            PlaySound(levelWin);
-        }
-    }
-    
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level07 Screen Draw logic
-void DrawLevel07Screen(void)
-{
-    // Draw Level07 screen here!
-    DrawCircleV(leftCirclePos, circleRadius, leftCircleColor);
-    DrawCircleV(middleCirclePos, circleRadius, middleCircleColor);
-    DrawCircleV(rightCirclePos, circleRadius, rightCircleColor);
-    
-    if (leftCircleActive) DrawCircleV(leftBtnPos, btnRadius, GRAY);
-    else DrawCircleV(leftBtnPos, btnRadius, LIGHTGRAY);
-    
-    if (middleCircleActive) DrawCircleV(middleBtnPos, btnRadius, GRAY);
-    else DrawCircleV(middleBtnPos, btnRadius, LIGHTGRAY);
-    
-    if (rightCircleActive) DrawCircleV(rightBtnPos, btnRadius, GRAY);
-    else DrawCircleV(rightBtnPos, btnRadius, LIGHTGRAY);
-    
-    
-    
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 07", GetScreenWidth()/2 - MeasureText("LEVEL 07", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 07", GetScreenWidth()/2 - MeasureText("LEVEL 07", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level07 Screen Unload logic
-void UnloadLevel07Screen(void)
-{
-    // TODO: Unload Level07 screen variables here!
-}
-
-// Level07 Screen should finish?
-int FinishLevel07Screen(void)
-{
-    return finishScreen;
-}
-
-static bool CheckColor(Color col1, Color col2)
-{
-    return ((col1.r == col2.r) && (col1.g == col2.g) && (col1.b == col2.b) && (col1.a == col2.a));
-}

+ 0 - 157
games/just_do/screens/screen_level08.c

@@ -1,157 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level08 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level08 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle leftColumnRec, middleColumnRec, rightColumnRec;
-static Rectangle movingBox;
-static int moveSpeed = 4;
-
-static bool leftColumnActive, middleColumnActive, rightColumnActive;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level08 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level08 Screen Initialization logic
-void InitLevel08Screen(void)
-{
-    // TODO: Initialize Level08 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    movingBox = (Rectangle){ 20, GetScreenHeight()/2 - 20, 40, 40 };
-    
-    leftColumnRec = (Rectangle){ 240, 0, 100, GetScreenHeight() };
-    middleColumnRec = (Rectangle){ GetScreenWidth()/2 - 50, 0, 100, GetScreenHeight() };
-    rightColumnRec = (Rectangle){ 920, 0, 100, GetScreenHeight() };
-    
-    leftColumnActive = true;
-    middleColumnActive = false;
-    rightColumnActive = true;
-}
-
-// Level08 Screen Update logic
-void UpdateLevel08Screen(void)
-{
-    // Update Level08 screen variables here!
-    framesCounter++;
-    
-    if (!done)
-    {
-        movingBox.x += moveSpeed;
-        
-        if (movingBox.x <= 0) moveSpeed *= -1;
-            
-        if ((leftColumnActive && (CheckCollisionRecs(leftColumnRec, movingBox))) ||
-            (middleColumnActive && (CheckCollisionRecs(middleColumnRec, movingBox))) ||
-            (rightColumnActive && (CheckCollisionRecs(rightColumnRec, movingBox)))) moveSpeed *= -1;
-
-        if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-        {
-            if (CheckCollisionPointRec(GetMousePosition(), leftColumnRec))
-            {
-                middleColumnActive = false;
-                rightColumnActive = true;
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), middleColumnRec))
-            {
-                rightColumnActive = false;
-                leftColumnActive = true;
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), rightColumnRec))
-            {
-                leftColumnActive = false;
-                middleColumnActive = true;
-            }
-        }
-    
-        if (movingBox.x >= 1100)
-        {
-            done = true;
-            PlaySound(levelWin);
-        }
-    }
-        
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level08 Screen Draw logic
-void DrawLevel08Screen(void)
-{
-    // Draw Level08 screen
-    DrawRectangle(1100, GetScreenHeight()/2 - 20, 40, 40, GRAY);
-
-    DrawRectangleRec(movingBox, LIGHTGRAY);
-    
-    if (leftColumnActive) DrawRectangleRec(leftColumnRec, GRAY);
-    if (middleColumnActive) DrawRectangleRec(middleColumnRec, GRAY);
-    if (rightColumnActive) DrawRectangleRec(rightColumnRec, GRAY);
-
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 08", GetScreenWidth()/2 - MeasureText("LEVEL 08", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 08", GetScreenWidth()/2 - MeasureText("LEVEL 08", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level08 Screen Unload logic
-void UnloadLevel08Screen(void)
-{
-    // TODO: Unload Level08 screen variables here!
-}
-
-// Level08 Screen should finish?
-int FinishLevel08Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 199
games/just_do/screens/screen_level09.c

@@ -1,199 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level09 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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"
-
-#define NUM_BOXES   21
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-
-// Level09 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle bwRecs[NUM_BOXES];
-static Color bwColors[NUM_BOXES];
-static bool activated[NUM_BOXES];
-static int resetCounter = 0;
-static bool enableCounter = 0;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level09 Screen Functions Definition
-//----------------------------------------------------------------------------------
-static bool CheckColor(Color col1, Color col2);
-
-// Level09 Screen Initialization logic
-void InitLevel09Screen(void)
-{
-    // Initialize Level09 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    for (int i = 0; i < NUM_BOXES; i++)
-    {
-        bwRecs[i].x = GetScreenWidth()/7*(i%7);
-        bwRecs[i].y = GetScreenHeight()/3*(i/7);
-        bwRecs[i].width = GetScreenWidth()/7;
-        bwRecs[i].height = GetScreenHeight()/3;
-        
-        activated[i] = false;
-        
-        if (i%2 == 0) bwColors[i] = LIGHTGRAY;
-        else bwColors[i] = GRAY;
-    }
-    
-    bwColors[10] = RAYWHITE;
-}
-
-// Level09 Screen Update logic
-void UpdateLevel09Screen(void)
-{
-    // Update Level09 screen variables here!
-    framesCounter++;
-    if (enableCounter) resetCounter++;
-    
-    if (!done)
-    {
-        if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-        {
-            for (int i = 0; i < NUM_BOXES; i++)
-            {
-                if (CheckCollisionPointRec(GetMousePosition(), bwRecs[i]))
-                {               
-                    if (i == 10)
-                    {
-                        if (CheckColor(bwColors[i], RAYWHITE))
-                        {
-                            bwColors[i] = LIGHTGRAY;
-                            enableCounter = true;
-                            resetCounter = 0;
-                            activated[1] = true;
-                        }
-                        else
-                        {
-                            bwColors[i] = RAYWHITE;
-                            enableCounter = false;
-                            resetCounter = 5*60;
-                            
-                            for (int i = 0; i < NUM_BOXES; i++) activated[i] = false;
-                        }
-                    }
-                    else if ((i%2 == 1) && enableCounter)
-                    {
-                        if (activated[i])
-                        {
-                            bwColors[i] = LIGHTGRAY;
-                            if (i != 19) activated[i + 2] = true;
-                        }
-                    }
-                }
-            }
-        }
-        
-        if (resetCounter > (4*60 + 10))
-        {
-            for (int i = 0; i < NUM_BOXES; i++)
-            {
-                if (i%2 == 0) bwColors[i] = LIGHTGRAY;
-                else bwColors[i] = GRAY;
-                
-                activated[i] = false;
-            }
-        
-            bwColors[10] = RAYWHITE;
-            enableCounter = false;
-            resetCounter = 0;
-        }
-    
-        for (int i = 0; i < NUM_BOXES; i++)
-        {
-            done = true;
-            
-            if (!CheckColor(bwColors[i], LIGHTGRAY))
-            {
-                done = false;
-                return;
-            }
-            
-            //if (done) PlaySound(levelWin);
-        }
-    }
-
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level09 Screen Draw logic
-void DrawLevel09Screen(void)
-{
-    // Draw Level09 screen
-    for (int i = 0; i < NUM_BOXES; i++) 
-    {
-        DrawRectangleRec(bwRecs[i], bwColors[i]);
-    }
-    
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(RAYWHITE, 0.6f));
-        DrawText("LEVEL 09", GetScreenWidth()/2 - MeasureText("LEVEL 09", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 09", GetScreenWidth()/2 - MeasureText("LEVEL 09", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level09 Screen Unload logic
-void UnloadLevel09Screen(void)
-{
-    // TODO: Unload Level09 screen variables here!
-}
-
-// Level09 Screen should finish?
-int FinishLevel09Screen(void)
-{
-    return finishScreen;
-}
-
-static bool CheckColor(Color col1, Color col2)
-{
-    return ((col1.r == col2.r) && (col1.g == col2.g) && (col1.b == col2.b) && (col1.a == col2.a));
-}

+ 0 - 153
games/just_do/screens/screen_level10.c

@@ -1,153 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Level10 Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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)
-//----------------------------------------------------------------------------------
-
-// Level10 screen global variables
-static int framesCounter;
-static int finishScreen;
-
-static Rectangle leftColumnRec, middleColumnRec, rightColumnRec;
-static Rectangle movingBox;
-static int moveSpeed = 4;
-
-static bool leftColumnActive, middleColumnActive, rightColumnActive;
-
-static bool done = false;
-static int levelTimeSec = 0;
-static bool levelFinished = false;
-
-//----------------------------------------------------------------------------------
-// Level10 Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Level10 Screen Initialization logic
-void InitLevel10Screen(void)
-{
-    // TODO: Initialize Level10 screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    movingBox = (Rectangle){ 20, GetScreenHeight()/2 - 20, 40, 40 };
-    
-    leftColumnRec = (Rectangle){ 240, 0, 100, GetScreenHeight() };
-    middleColumnRec = (Rectangle){ GetScreenWidth()/2 - 50, 0, 100, GetScreenHeight() };
-    rightColumnRec = (Rectangle){ 920, 0, 100, GetScreenHeight() };
-    
-    leftColumnActive = true;
-    middleColumnActive = false;
-    rightColumnActive = true;
-}
-
-// Level10 Screen Update logic
-void UpdateLevel10Screen(void)
-{
-    // Update Level10 screen variables here!
-    framesCounter++;
-    
-    if (!done)
-    {
-        movingBox.x += moveSpeed;
-        
-        if (movingBox.x <= 0) moveSpeed *= -1;
-            
-        if ((leftColumnActive && (CheckCollisionRecs(leftColumnRec, movingBox))) ||
-            (middleColumnActive && (CheckCollisionRecs(middleColumnRec, movingBox))) ||
-            (rightColumnActive && (CheckCollisionRecs(rightColumnRec, movingBox)))) moveSpeed *= -1;
-
-        if (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))
-        {
-            if (CheckCollisionPointRec(GetMousePosition(), leftColumnRec))
-            {
-                middleColumnActive = false;
-                rightColumnActive = true;
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), middleColumnRec))
-            {
-                rightColumnActive = false;
-                leftColumnActive = true;
-            }
-            else if (CheckCollisionPointRec(GetMousePosition(), rightColumnRec))
-            {
-                leftColumnActive = false;
-                middleColumnActive = true;
-            }
-        }
-    }
-    
-    if (movingBox.x >= 1100) done = true;
-        
-    if (done && !levelFinished)
-    {
-        levelTimeSec = framesCounter/60;
-        levelFinished = true;
-        framesCounter = 0;
-    }
-    
-    if (levelFinished)
-    {
-        framesCounter++;
-        
-        if ((framesCounter > 90) && (IsMouseButtonPressed(MOUSE_LEFT_BUTTON))) finishScreen = true;
-    }
-}
-
-// Level10 Screen Draw logic
-void DrawLevel10Screen(void)
-{
-    // Draw Level10 screen
-    DrawRectangle(1100, GetScreenHeight()/2 - 20, 40, 40, GRAY);
-
-    DrawRectangleRec(movingBox, LIGHTGRAY);
-    
-    if (leftColumnActive) DrawRectangleRec(leftColumnRec, GRAY);
-    if (middleColumnActive) DrawRectangleRec(middleColumnRec, GRAY);
-    if (rightColumnActive) DrawRectangleRec(rightColumnRec, GRAY);
-
-    if (levelFinished)
-    {
-        DrawRectangleBordersRec((Rectangle){0, 0, GetScreenWidth(), GetScreenHeight()}, 0, 0, 60, Fade(LIGHTGRAY, 0.6f));
-        DrawText("LEVEL 08", GetScreenWidth()/2 - MeasureText("LEVEL 08", 30)/2, 20, 30, GRAY);
-        DrawText(FormatText("DONE! (Seconds: %03i)", levelTimeSec), GetScreenWidth()/2 - MeasureText("DONE! (Seconds: 000)", 30)/2, GetScreenHeight() - 40, 30, GRAY);
-    }
-    else DrawText("LEVEL 08", GetScreenWidth()/2 - MeasureText("LEVEL 08", 30)/2, 20, 30, LIGHTGRAY);
-}
-
-// Level10 Screen Unload logic
-void UnloadLevel10Screen(void)
-{
-    // TODO: Unload Level10 screen variables here!
-}
-
-// Level10 Screen should finish?
-int FinishLevel10Screen(void)
-{
-    return finishScreen;
-}

+ 0 - 227
games/just_do/screens/screen_logo.c

@@ -1,227 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Logo Screen Functions Definitions (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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"
-
-#include <string.h>
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-
-// Logo screen global variables
-static int framesCounter;
-static int finishScreen;
-
-const char msgLogoA[64] = "A simple and easy-to-use library";
-const char msgLogoB[64] = "to enjoy videogames programming";
-
-int logoPositionX;
-int logoPositionY;
-
-int raylibLettersCount = 0;
-
-int topSideRecWidth = 16;
-int leftSideRecHeight = 16;
-
-int bottomSideRecWidth = 16;
-int rightSideRecHeight = 16;
-
-char raylib[8] = "       \0";   // raylib text array, max 8 letters
-
-int logoScreenState = 0;        // Tracking animation states (State Machine)
-bool msgLogoADone = false;
-bool msgLogoBDone = false;
-
-int lettersCounter = 0;
-char msgBuffer[128] = { ' ' };
-
-//----------------------------------------------------------------------------------
-// Logo Screen Functions Definition
-//----------------------------------------------------------------------------------
-
-// Logo Screen Initialization logic
-void InitLogoScreen(void)
-{
-    // Initialize LOGO screen variables here!
-    framesCounter = 0;
-    finishScreen = 0;
-    
-    logoPositionX = GetScreenWidth()/2 - 128;
-    logoPositionY = GetScreenHeight()/2 - 128;
-}
-
-// Logo Screen Update logic
-void UpdateLogoScreen(void)
-{
-    // Update LOGO screen
-    framesCounter++;    // Count frames
-    
-    // Update LOGO screen variables
-    if (logoScreenState == 0)                 // State 0: Small box blinking
-    {
-        framesCounter++;
-
-        if (framesCounter == 120)
-        {
-            logoScreenState = 1;
-            framesCounter = 0;      // Reset counter... will be used later...
-        }
-    }
-    else if (logoScreenState == 1)            // State 1: Top and left bars growing
-    {
-        topSideRecWidth += 4;
-        leftSideRecHeight += 4;
-
-        if (topSideRecWidth == 256) logoScreenState = 2;
-    }
-    else if (logoScreenState == 2)            // State 2: Bottom and right bars growing
-    {
-        bottomSideRecWidth += 4;
-        rightSideRecHeight += 4;
-
-        if (bottomSideRecWidth == 256)
-        {
-            lettersCounter = 0;
-            for (int i = 0; i < strlen(msgBuffer); i++) msgBuffer[i] = ' ';
-
-            logoScreenState = 3;
-        }
-    }
-    else if (logoScreenState == 3)            // State 3: Letters appearing (one by one)
-    {
-        framesCounter++;
-
-        // Every 12 frames, one more letter!
-        if ((framesCounter%12) == 0) raylibLettersCount++;
-
-        switch (raylibLettersCount)
-        {
-            case 1: raylib[0] = 'r'; break;
-            case 2: raylib[1] = 'a'; break;
-            case 3: raylib[2] = 'y'; break;
-            case 4: raylib[3] = 'l'; break;
-            case 5: raylib[4] = 'i'; break;
-            case 6: raylib[5] = 'b'; break;
-            default: break;
-        }
-
-        if (raylibLettersCount >= 10)
-        {
-            // Write raylib description messages
-            if ((framesCounter%2) == 0) lettersCounter++;
-
-            if (!msgLogoADone)
-            {
-                if (lettersCounter <= strlen(msgLogoA)) strncpy(msgBuffer, msgLogoA, lettersCounter);
-                else
-                {
-                    for (int i = 0; i < strlen(msgBuffer); i++) msgBuffer[i] = ' ';
-
-                    lettersCounter = 0;
-                    msgLogoADone = true;
-                }
-            }
-            else if (!msgLogoBDone)
-            {
-                if (lettersCounter <= strlen(msgLogoB)) strncpy(msgBuffer, msgLogoB, lettersCounter);
-                else
-                {
-                    msgLogoBDone = true;
-                    framesCounter = 0;
-                    PlaySound(levelWin);
-                }
-            }
-        }
-    }
-
-    // Wait for 2 seconds (60 frames) before jumping to TITLE screen
-    if (msgLogoBDone)
-    {
-        framesCounter++;
-        
-        if (framesCounter > 90) finishScreen = true;
-    }
-}
-
-// Logo Screen Draw logic
-void DrawLogoScreen(void)
-{
-    // Draw LOGO screen
-    if (logoScreenState == 0)
-    {
-        if ((framesCounter/15)%2) DrawRectangle(logoPositionX, logoPositionY - 60, 16, 16, BLACK);
-    }
-    else if (logoScreenState == 1)
-    {
-        DrawRectangle(logoPositionX, logoPositionY - 60, topSideRecWidth, 16, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY - 60, 16, leftSideRecHeight, BLACK);
-    }
-    else if (logoScreenState == 2)
-    {
-        DrawRectangle(logoPositionX, logoPositionY - 60, topSideRecWidth, 16, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY - 60, 16, leftSideRecHeight, BLACK);
-
-        DrawRectangle(logoPositionX + 240, logoPositionY - 60, 16, rightSideRecHeight, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY + 240 - 60, bottomSideRecWidth, 16, BLACK);
-    }
-    else if (logoScreenState == 3)
-    {         
-        DrawRectangle(logoPositionX, logoPositionY - 60, topSideRecWidth, 16, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY + 16 - 60, 16, leftSideRecHeight - 32, BLACK);
-
-        DrawRectangle(logoPositionX + 240, logoPositionY + 16 - 60, 16, rightSideRecHeight - 32, BLACK);
-        DrawRectangle(logoPositionX, logoPositionY + 240 - 60, bottomSideRecWidth, 16, BLACK);
-
-        DrawRectangle(GetScreenWidth()/2 - 112, GetScreenHeight()/2 - 112 - 60, 224, 224, RAYWHITE);
-
-        DrawText(raylib, GetScreenWidth()/2 - 44, GetScreenHeight()/2 + 48 - 60, 50, BLACK);
-
-        if (!msgLogoADone) DrawText(msgBuffer, GetScreenWidth()/2 - MeasureText(msgLogoA, 30)/2, logoPositionY + 230, 30, GRAY);
-        else
-        {
-            DrawText(msgLogoA, GetScreenWidth()/2 - MeasureText(msgLogoA, 30)/2, logoPositionY + 230, 30, GRAY);
-
-            if (!msgLogoBDone) DrawText(msgBuffer, GetScreenWidth()/2 - MeasureText(msgLogoB, 30)/2, logoPositionY + 280, 30, GRAY);
-            else
-            {
-                DrawText(msgLogoB, GetScreenWidth()/2 - MeasureText(msgLogoA, 30)/2, logoPositionY + 280, 30, GRAY);
-            }
-        }
-    }
-}
-
-// Logo Screen Unload logic
-void UnloadLogoScreen(void)
-{
-    // TODO: Unload LOGO screen variables here!
-}
-
-// Logo Screen should finish?
-int FinishLogoScreen(void)
-{
-    return finishScreen;
-}

+ 0 - 150
games/just_do/screens/screens.h

@@ -1,150 +0,0 @@
-/**********************************************************************************************
-*
-*   raylib - Standard Game template
-*
-*   Screens Functions Declarations (Init, Update, Draw, Unload)
-*
-*   Copyright (c) 2014 Ramon Santamaria (@raysan5)
-*
-*   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, LEVEL00, LEVEL01, LEVEL02, LEVEL03, LEVEL04, LEVEL05, LEVEL06, LEVEL07, LEVEL08, LEVEL09 } GameScreen;
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition
-//----------------------------------------------------------------------------------
-GameScreen currentScreen;
-Sound levelWin;
-
-#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);
-
-//----------------------------------------------------------------------------------
-// Level00 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel00Screen(void);
-void UpdateLevel00Screen(void);
-void DrawLevel00Screen(void);
-void UnloadLevel00Screen(void);
-int FinishLevel00Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level01 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel01Screen(void);
-void UpdateLevel01Screen(void);
-void DrawLevel01Screen(void);
-void UnloadLevel01Screen(void);
-int FinishLevel01Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level02 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel02Screen(void);
-void UpdateLevel02Screen(void);
-void DrawLevel02Screen(void);
-void UnloadLevel02Screen(void);
-int FinishLevel02Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level03 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel03Screen(void);
-void UpdateLevel03Screen(void);
-void DrawLevel03Screen(void);
-void UnloadLevel03Screen(void);
-int FinishLevel03Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level04 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel04Screen(void);
-void UpdateLevel04Screen(void);
-void DrawLevel04Screen(void);
-void UnloadLevel04Screen(void);
-int FinishLevel04Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level05 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel05Screen(void);
-void UpdateLevel05Screen(void);
-void DrawLevel05Screen(void);
-void UnloadLevel05Screen(void);
-int FinishLevel05Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level06 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel06Screen(void);
-void UpdateLevel06Screen(void);
-void DrawLevel06Screen(void);
-void UnloadLevel06Screen(void);
-int FinishLevel06Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level07 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel07Screen(void);
-void UpdateLevel07Screen(void);
-void DrawLevel07Screen(void);
-void UnloadLevel07Screen(void);
-int FinishLevel07Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level08 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel08Screen(void);
-void UpdateLevel08Screen(void);
-void DrawLevel08Screen(void);
-void UnloadLevel08Screen(void);
-int FinishLevel08Screen(void);
-
-//----------------------------------------------------------------------------------
-// Level09 Screen Functions Declaration
-//----------------------------------------------------------------------------------
-void InitLevel09Screen(void);
-void UpdateLevel09Screen(void);
-void DrawLevel09Screen(void);
-void UnloadLevel09Screen(void);
-int FinishLevel09Screen(void);
-
-
-void DrawRectangleBordersRec(Rectangle rec, int offsetX, int offsetY, int borderSize, Color col);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // SCREENS_H

+ 0 - 16
games/koala_seasons/CMakeLists.txt

@@ -1,16 +0,0 @@
-cmake_minimum_required(VERSION 2.6)
-project(koala_seasons)
-
-# Grab the screens
-file(GLOB screen_sources "screens/*.c")
-
-# Executable & linking
-add_executable(${PROJECT_NAME} ${PROJECT_NAME}.c ${screen_sources})
-if (NOT TARGET raylib)
-  find_package(raylib 2.0 REQUIRED)
-endif()
-target_link_libraries(${PROJECT_NAME} raylib)
-
-# Resources
-# Copy all of the resource files to the destination
-file(COPY "resources/"  DESTINATION "resources/")

+ 0 - 20
games/koala_seasons/LICENSE.txt

@@ -1,20 +0,0 @@
-
-This game sources are licensed under an unmodified zlib/libpng license, 
-which is an OSI-certified, BSD-like license:
-	
-Copyright (c) 2013-2017 Ramon Santamaria (@raysan5)
-
-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.

+ 0 - 406
games/koala_seasons/Makefile

@@ -1,406 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
-#
-#   Copyright (c) 2013-2020 Ramon Santamaria (@raysan5)
-#
-#   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.
-#
-#**************************************************************************************************
-
-.PHONY: all clean
-
-# Define required raylib variables
-PROJECT_NAME       ?= koala_seasons
-RAYLIB_VERSION     ?= 3.0.0
-RAYLIB_API_VERSION ?= 3
-RAYLIB_PATH        ?= C:\GitHub\raylib
-
-# Define default options
-
-# One of PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_ANDROID, PLATFORM_WEB
-PLATFORM           ?= PLATFORM_DESKTOP
-
-# Locations of your newly installed library and associated headers. See ../src/Makefile
-# On Linux, if you have installed raylib but cannot compile the examples, check that
-# the *_INSTALL_PATH values here are the same as those in src/Makefile or point to known locations.
-# To enable system-wide compile-time and runtime linking to libraylib.so, run ../src/$ sudo make install RAYLIB_LIBTYPE_SHARED.
-# To enable compile-time linking to a special version of libraylib.so, change these variables here.
-# To enable runtime linking to a special version of libraylib.so, see EXAMPLE_RUNTIME_PATH below.
-# If there is a libraylib in both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH, at runtime,
-# the library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over the one at RAYLIB_INSTALL_PATH.
-# RAYLIB_INSTALL_PATH should be the desired full path to libraylib. No relative paths.
-DESTDIR ?= /usr/local
-RAYLIB_INSTALL_PATH ?= $(DESTDIR)/lib
-# RAYLIB_H_INSTALL_PATH locates the installed raylib header and associated source files.
-RAYLIB_H_INSTALL_PATH ?= $(DESTDIR)/include
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE        ?= STATIC
-
-# Build mode for project: DEBUG or RELEASE
-BUILD_MODE            ?= RELEASE
-
-# Use external GLFW library instead of rglfw module
-# TODO: Review usage on Linux. Target version of choice. Switch on -lglfw or -lglfw3
-USE_EXTERNAL_GLFW     ?= FALSE
-
-# Use Wayland display server protocol on Linux desktop
-# by default it uses X11 windowing system
-USE_WAYLAND_DISPLAY   ?= FALSE
-
-# Determine PLATFORM_OS in case PLATFORM_DESKTOP selected
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    # No uname.exe on MinGW!, but OS=Windows_NT on Windows!
-    # ifeq ($(UNAME),Msys) -> Windows
-    ifeq ($(OS),Windows_NT)
-        PLATFORM_OS=WINDOWS
-    else
-        UNAMEOS=$(shell uname)
-        ifeq ($(UNAMEOS),Linux)
-            PLATFORM_OS=LINUX
-        endif
-        ifeq ($(UNAMEOS),FreeBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),OpenBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),NetBSD)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),DragonFly)
-            PLATFORM_OS=BSD
-        endif
-        ifeq ($(UNAMEOS),Darwin)
-            PLATFORM_OS=OSX
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    UNAMEOS=$(shell uname)
-    ifeq ($(UNAMEOS),Linux)
-        PLATFORM_OS=LINUX
-    endif
-endif
-
-# RAYLIB_PATH adjustment for different platforms.
-# If using GNU make, we can get the full path to the top of the tree. Windows? BSD?
-# Required for ldconfig or other tools that do not perform path expansion.
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        RAYLIB_PREFIX ?= ..
-        RAYLIB_PATH    = $(realpath $(RAYLIB_PREFIX))
-    endif
-endif
-# Default path for raylib on Raspberry Pi, if installed in different path, update it!
-# This is not currently used by src/Makefile. Not sure of its origin or usage. Refer to wiki.
-# TODO: update install: target in src/Makefile for RPI, consider relation to LINUX.
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    RAYLIB_PATH       ?= /home/pi/raylib
-endif
-
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Emscripten required variables
-    EMSDK_PATH         ?= C:/emsdk
-    EMSCRIPTEN_PATH    ?= $(EMSDK_PATH)/fastcomp/emscripten
-    CLANG_PATH          = $(EMSDK_PATH)/fastcomp/bin
-    PYTHON_PATH         = $(EMSDK_PATH)/python/2.7.13.1_64bit/python-2.7.13.amd64
-    NODE_PATH           = $(EMSDK_PATH)/node/12.9.1_64bit/bin
-    export PATH         = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH);C:\raylib\MinGW\bin:$$(PATH)
-endif
-
-# Define raylib release directory for compiled library.
-# RAYLIB_RELEASE_PATH points to provided binaries or your freshly built version
-RAYLIB_RELEASE_PATH 	?= $(RAYLIB_PATH)/src
-
-# EXAMPLE_RUNTIME_PATH embeds a custom runtime location of libraylib.so or other desired libraries
-# into each example binary compiled with RAYLIB_LIBTYPE=SHARED. It defaults to RAYLIB_RELEASE_PATH
-# so that these examples link at runtime with your version of libraylib.so in ../release/libs/linux
-# without formal installation from ../src/Makefile. It aids portability and is useful if you have
-# multiple versions of raylib, have raylib installed to a non-standard location, or want to
-# bundle libraylib.so with your game. Change it to your liking.
-# NOTE: If, at runtime, there is a libraylib.so at both EXAMPLE_RUNTIME_PATH and RAYLIB_INSTALL_PATH,
-# The library at EXAMPLE_RUNTIME_PATH, if present, will take precedence over RAYLIB_INSTALL_PATH,
-# Implemented for LINUX below with CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-# To see the result, run readelf -d core/core_basic_window; looking at the RPATH or RUNPATH attribute.
-# To see which libraries a built example is linking to, ldd core/core_basic_window;
-# Look for libraylib.so.1 => $(RAYLIB_INSTALL_PATH)/libraylib.so.1 or similar listing.
-EXAMPLE_RUNTIME_PATH   ?= $(RAYLIB_RELEASE_PATH)
-
-# Define default C compiler: gcc
-# NOTE: define g++ compiler if using C++
-CC = gcc
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),OSX)
-        # OSX default compiler
-        CC = clang
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # FreeBSD, OpenBSD, NetBSD, DragonFly default compiler
-        CC = clang
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    ifeq ($(USE_RPI_CROSS_COMPILER),TRUE)
-        # Define RPI cross-compiler
-        #CC = armv6j-hardfloat-linux-gnueabi-gcc
-        CC = $(RPI_TOOLCHAIN)/bin/arm-linux-gnueabihf-gcc
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # HTML5 emscripten compiler
-    # WARNING: To compile to HTML5, code must be redesigned
-    # to use emscripten.h and emscripten_set_main_loop()
-    CC = emcc
-endif
-
-# Define default make program: Mingw32-make
-MAKE = mingw32-make
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        MAKE = make
-    endif
-endif
-
-# Define compiler flags:
-#  -O1                  defines optimization level
-#  -g                   include debug information on compilation
-#  -s                   strip unnecessary data from build
-#  -Wall                turns on most, but not all, compiler warnings
-#  -std=c99             defines C language mode (standard C from 1999 revision)
-#  -std=gnu99           defines C language mode (GNU C from 1999 revision)
-#  -Wno-missing-braces  ignore invalid warning (GCC bug 53119)
-#  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
-CFLAGS += -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces
-
-ifeq ($(BUILD_MODE),DEBUG)
-    CFLAGS += -g
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -s ASSERTIONS=1 --profiling
-    endif
-else
-    ifeq ($(PLATFORM),PLATFORM_WEB)
-        CFLAGS += -Os
-    else
-        CFLAGS += -s -O1
-    endif
-endif
-
-# Additional flags for compiler (if desired)
-#CFLAGS += -Wextra -Wmissing-prototypes -Wstrict-prototypes
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),LINUX)
-        ifeq ($(RAYLIB_LIBTYPE),STATIC)
-            CFLAGS += -D_DEFAULT_SOURCE
-        endif
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            # Explicitly enable runtime link to libraylib.so
-            CFLAGS += -Wl,-rpath,$(EXAMPLE_RUNTIME_PATH)
-        endif
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    CFLAGS += -std=gnu99
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # -Os                        # size optimization
-    # -O2                        # optimization level 2, if used, also set --memory-init-file 0
-    # -s USE_GLFW=3              # Use glfw3 library (context/input management)
-    # -s ALLOW_MEMORY_GROWTH=1   # to allow memory resizing -> WARNING: Audio buffers could FAIL!
-    # -s TOTAL_MEMORY=16777216   # to specify heap memory size (default = 16MB)
-    # -s USE_PTHREADS=1          # multithreading support
-    # -s WASM=0                  # disable Web Assembly, emitted by default
-    # -s EMTERPRETIFY=1          # enable emscripten code interpreter (very slow)
-    # -s EMTERPRETIFY_ASYNC=1    # support synchronous loops by emterpreter
-    # -s FORCE_FILESYSTEM=1      # force filesystem to load/save files data
-    # -s ASSERTIONS=1            # enable runtime checks for common memory allocation errors (-O1 and above turn it off)
-    # --profiling                # include information for code profiling
-    # --memory-init-file 0       # to avoid an external memory initialization code file (.mem)
-    # --preload-file resources   # specify a resources folder for data compilation
-    CFLAGS += -s USE_GLFW=3 -s TOTAL_MEMORY=67108864 --preload-file resources
-
-    # Define a custom shell .html and output extension
-    CFLAGS += --shell-file $(RAYLIB_PATH)/src/shell.html
-    EXT = .html
-endif
-
-# Define include paths for required headers
-# NOTE: Several external required libraries (stb and others)
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
-
-# Define additional directories containing required header files
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # RPI required libraries
-    INCLUDE_PATHS += -I/opt/vc/include
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vmcs_host/linux
-    INCLUDE_PATHS += -I/opt/vc/include/interface/vcos/pthreads
-endif
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_H_INSTALL_PATH)
-        INCLUDE_PATHS += -I/usr/local/include
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs -I$(RAYLIB_H_INSTALL_PATH) -I$(RAYLIB_PATH)/release/include
-        INCLUDE_PATHS = -I$(RAYLIB_H_INSTALL_PATH) -isystem. -isystem$(RAYLIB_PATH)/src -isystem$(RAYLIB_PATH)/release/include -isystem$(RAYLIB_PATH)/src/external
-    endif
-endif
-
-# Define library paths containing required libs.
-LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src
-
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # resource file contains windows executable icon and properties
-        LDFLAGS += $(RAYLIB_PATH)/src/raylib.rc.data 
-        # -Wl,--subsystem,windows hides the console window
-        ifeq ($(BUILD_MODE), RELEASE)
-            LDFLAGS += -Wl,--subsystem,windows
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Consider -L$(RAYLIB_INSTALL_PATH)
-        LDFLAGS += -L. -Lsrc -L/usr/local/lib
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Reset everything.
-        # Precedence: immediately local, installed version, raysan5 provided libs
-        LDFLAGS = -L. -L$(RAYLIB_INSTALL_PATH) -L$(RAYLIB_RELEASE_PATH)
-    endif
-endif
-
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    LDFLAGS += -L/opt/vc/lib
-endif
-
-# Define any libraries required on linking
-# if you want to link libraries (libname.so or libname.a), use the -lname
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-        # Libraries for Windows desktop compilation
-        # NOTE: WinMM library required to set high-res timer resolution
-        LDLIBS = -lraylib -lopengl32 -lgdi32 -lwinmm
-        # Required for physac examples
-        LDLIBS += -static -lpthread
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-        # Libraries for Debian GNU/Linux desktop compiling
-        # NOTE: Required packages: libegl1-mesa-dev
-        LDLIBS = -lraylib -lGL -lm -lpthread -ldl -lrt
-
-        # On X11 requires also below libraries
-        LDLIBS += -lX11
-        # NOTE: It seems additional libraries are not required any more, latest GLFW just dlopen them
-        #LDLIBS += -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-
-        # On Wayland windowing system, additional libraries requires
-        ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
-            LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
-        endif
-        # Explicit link to libc
-        ifeq ($(RAYLIB_LIBTYPE),SHARED)
-            LDLIBS += -lc
-        endif
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-        # Libraries for OSX 10.9 desktop compiling
-        # NOTE: Required packages: libopenal-dev libegl1-mesa-dev
-        LDLIBS = -lraylib -framework OpenGL -framework Cocoa -framework IOKit -framework CoreAudio -framework CoreVideo 
-    endif
-    ifeq ($(PLATFORM_OS),BSD)
-        # Libraries for FreeBSD, OpenBSD, NetBSD, DragonFly desktop compiling
-        # NOTE: Required packages: mesa-libs
-        LDLIBS = -lraylib -lGL -lpthread -lm
-
-        # On XWindow requires also below libraries
-        LDLIBS += -lX11 -lXrandr -lXinerama -lXi -lXxf86vm -lXcursor
-    endif
-    ifeq ($(USE_EXTERNAL_GLFW),TRUE)
-        # NOTE: It could require additional packages installed: libglfw3-dev
-        LDLIBS += -lglfw
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-    # Libraries for Raspberry Pi compiling
-    # NOTE: Required packages: libasound2-dev (ALSA)
-    LDLIBS = -lraylib -lbrcmGLESv2 -lbrcmEGL -lpthread -lrt -lm -lbcm_host -ldl
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-    # Libraries for web (HTML5) compiling
-    LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.bc
-endif
-
-# Define all source files required
-PROJECT_SOURCE_FILES ?= \
-    koala_seasons.c \
-    screens/screen_logo.c \
-    screens/screen_title.c \
-    screens/screen_gameplay.c \
-    screens/screen_ending.c
-
-# Define all object files from source files
-OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES))
-
-# For Android platform we call a custom Makefile.Android
-ifeq ($(PLATFORM),PLATFORM_ANDROID)
-    MAKEFILE_PARAMS = -f Makefile.Android 
-    export PROJECT_NAME
-    export PROJECT_SOURCE_FILES
-else
-    MAKEFILE_PARAMS = $(PROJECT_NAME)
-endif
-
-# Default target entry
-# NOTE: We call this Makefile target or Makefile.Android target
-all:
-	$(MAKE) $(MAKEFILE_PARAMS)
-
-# Project target defined by PROJECT_NAME
-$(PROJECT_NAME): $(OBJS)
-	$(CC) -o $(PROJECT_NAME)$(EXT) $(OBJS) $(CFLAGS) $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS) -D$(PLATFORM)
-
-# Compile source files
-# NOTE: This pattern will compile every module defined on $(OBJS)
-%.o: %.c
-	$(CC) -c $< -o $@ $(CFLAGS) $(INCLUDE_PATHS) -D$(PLATFORM)
-
-# Clean everything
-clean:
-ifeq ($(PLATFORM),PLATFORM_DESKTOP)
-    ifeq ($(PLATFORM_OS),WINDOWS)
-		del *.o *.exe /s
-    endif
-    ifeq ($(PLATFORM_OS),LINUX)
-	find -type f -executable | xargs file -i | grep -E 'x-object|x-archive|x-sharedlib|x-executable|x-pie-executable' | rev | cut -d ':' -f 2- | rev | xargs rm -fv
-    endif
-    ifeq ($(PLATFORM_OS),OSX)
-		find . -type f -perm +ugo+x -delete
-		rm -f *.o
-    endif
-endif
-ifeq ($(PLATFORM),PLATFORM_RPI)
-	find . -type f -executable -delete
-	rm -fv *.o
-endif
-ifeq ($(PLATFORM),PLATFORM_WEB)
-	del *.o *.html *.js
-endif
-	@echo Cleaning done
-

+ 0 - 300
games/koala_seasons/Makefile.Android

@@ -1,300 +0,0 @@
-#**************************************************************************************************
-#
-#   raylib makefile for Android project (APK building)
-#
-#   Copyright (c) 2017 Ramon Santamaria (@raysan5)
-#
-#   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 required raylib variables
-PLATFORM               ?= PLATFORM_ANDROID
-RAYLIB_PATH            ?= ..\..
-
-# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
-ANDROID_ARCH           ?= ARM
-ANDROID_API_VERSION     = 21
-ifeq ($(ANDROID_ARCH),ARM)
-    ANDROID_ARCH_NAME   = armeabi-v7a
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    ANDROID_ARCH_NAME   = arm64-v8a
-endif
-
-# Required path variables
-# NOTE: JAVA_HOME must be set to JDK
-JAVA_HOME              ?= C:/JavaJDK
-ANDROID_HOME            = C:/android-sdk
-ANDROID_TOOLCHAIN       = C:/android_toolchain_$(ANDROID_ARCH)_API$(ANDROID_API_VERSION)
-ANDROID_BUILD_TOOLS     = $(ANDROID_HOME)/build-tools/28.0.1
-ANDROID_PLATFORM_TOOLS  = $(ANDROID_HOME)/platform-tools
-
-# Android project configuration variables
-PROJECT_NAME           ?= raylib_game
-PROJECT_LIBRARY_NAME   ?= main
-PROJECT_BUILD_PATH     ?= android.$(PROJECT_NAME)
-PROJECT_RESOURCES_PATH ?= resources
-PROJECT_SOURCE_FILES   ?= raylib_game.c
-
-# Some source files are placed in directories, when compiling to some 
-# output directory other than source, that directory must pre-exist.
-# Here we get a list of required folders that need to be created on
-# code output folder $(PROJECT_BUILD_PATH)\obj to avoid GCC errors.
-PROJECT_SOURCE_DIRS = $(sort $(dir $(PROJECT_SOURCE_FILES)))
-
-# Android app configuration variables
-APP_LABEL_NAME ?= rGame
-APP_COMPANY_NAME ?= raylib
-APP_PRODUCT_NAME ?= rgame
-APP_VERSION_CODE ?= 1
-APP_VERSION_NAME ?= 1.0
-APP_ICON_LDPI ?= $(RAYLIB_PATH)\logo\raylib_36x36.png
-APP_ICON_MDPI ?= $(RAYLIB_PATH)\logo\raylib_48x48.png
-APP_ICON_HDPI ?= $(RAYLIB_PATH)\logo\raylib_72x72.png
-APP_SCREEN_ORIENTATION ?= landscape
-APP_KEYSTORE_PASS ?= raylib
-
-# Library type used for raylib: STATIC (.a) or SHARED (.so/.dll)
-RAYLIB_LIBTYPE ?= STATIC
-
-# Library path for libraylib.a/libraylib.so
-RAYLIB_LIB_PATH = $(RAYLIB_PATH)\src
-
-# Shared libs must be added to APK if required
-# NOTE: Generated NativeLoader.java automatically load those libraries
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-    PROJECT_SHARED_LIBS = lib/$(ANDROID_ARCH_NAME)/libraylib.so 
-endif
-
-# Compiler and archiver
-# NOTE: GCC is being deprecated in Android NDK r16
-ifeq ($(ANDROID_ARCH),ARM)
-    CC = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-clang
-    AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
-endif
-
-# Compiler flags for arquitecture
-ifeq ($(ANDROID_ARCH),ARM)
-    CFLAGS = -std=c99 -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16
-endif
-ifeq ($(ANDROID_ARCH),ARM64)
-    CFLAGS = -std=c99 -target aarch64 -mfix-cortex-a53-835769
-endif
-# Compilation functions attributes options
-CFLAGS += -ffunction-sections -funwind-tables -fstack-protector-strong -fPIC
-# Compiler options for the linker
-CFLAGS += -Wall -Wa,--noexecstack -Wformat -Werror=format-security -no-canonical-prefixes
-# Preprocessor macro definitions
-CFLAGS += -DANDROID -DPLATFORM_ANDROID -D__ANDROID_API__=$(ANDROID_API_VERSION)
-
-# Paths containing required header files
-INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external/android/native_app_glue
-
-# Linker options
-LDFLAGS = -Wl,-soname,lib$(PROJECT_LIBRARY_NAME).so -Wl,--exclude-libs,libatomic.a 
-LDFLAGS += -Wl,--build-id -Wl,--no-undefined -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--warn-shared-textrel -Wl,--fatal-warnings 
-# Force linking of library module to define symbol
-LDFLAGS += -u ANativeActivity_onCreate
-# Library paths containing required libs
-LDFLAGS += -L. -L$(PROJECT_BUILD_PATH)/obj -L$(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME) -L$(ANDROID_TOOLCHAIN)\sysroot\usr\lib
-
-# Define any libraries to link into executable
-# if you want to link libraries (libname.so or libname.a), use the -lname
-LDLIBS = -lm -lc -lraylib -llog -landroid -lEGL -lGLESv2 -lOpenSLES -ldl
-
-# Generate target objects list from PROJECT_SOURCE_FILES
-OBJS = $(patsubst %.c, $(PROJECT_BUILD_PATH)/obj/%.o, $(PROJECT_SOURCE_FILES))
-
-# Android APK building process... some steps required...
-# NOTE: typing 'make' will invoke the default target entry called 'all',
-all: create_temp_project_dirs \
-     copy_project_required_libs \
-     copy_project_resources \
-     generate_loader_script \
-     generate_android_manifest \
-     generate_apk_keystore \
-     config_project_package \
-     compile_project_code \
-     compile_project_class \
-     compile_project_class_dex \
-     create_project_apk_package \
-     sign_project_apk_package \
-     zipalign_project_apk_package
-
-# Create required temp directories for APK building
-create_temp_project_dirs:
-	if not exist $(PROJECT_BUILD_PATH) mkdir $(PROJECT_BUILD_PATH) 
-	if not exist $(PROJECT_BUILD_PATH)\obj mkdir $(PROJECT_BUILD_PATH)\obj
-	if not exist $(PROJECT_BUILD_PATH)\src mkdir $(PROJECT_BUILD_PATH)\src
-	if not exist $(PROJECT_BUILD_PATH)\src\com mkdir $(PROJECT_BUILD_PATH)\src\com
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME) mkdir $(PROJECT_BUILD_PATH)\src\com\$(APP_COMPANY_NAME)\$(APP_PRODUCT_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\lib mkdir $(PROJECT_BUILD_PATH)\lib
-	if not exist $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME) mkdir $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)
-	if not exist $(PROJECT_BUILD_PATH)\bin mkdir $(PROJECT_BUILD_PATH)\bin
-	if not exist $(PROJECT_BUILD_PATH)\res mkdir $(PROJECT_BUILD_PATH)\res
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-ldpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-ldpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-mdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-mdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\drawable-hdpi mkdir $(PROJECT_BUILD_PATH)\res\drawable-hdpi
-	if not exist $(PROJECT_BUILD_PATH)\res\values mkdir $(PROJECT_BUILD_PATH)\res\values
-	if not exist $(PROJECT_BUILD_PATH)\assets mkdir $(PROJECT_BUILD_PATH)\assets
-	if not exist $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) mkdir $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH)
-	if not exist $(PROJECT_BUILD_PATH)\obj\screens mkdir $(PROJECT_BUILD_PATH)\obj\screens
-	$(foreach dir, $(PROJECT_SOURCE_DIRS), $(call create_dir, $(dir)))
-
-define create_dir
-    if not exist $(PROJECT_BUILD_PATH)\obj\$(1) mkdir $(PROJECT_BUILD_PATH)\obj\$(1)
-endef
-    
-# Copy required shared libs for integration into APK
-# NOTE: If using shared libs they are loaded by generated NativeLoader.java
-copy_project_required_libs:
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.so $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.so 
-endif
-ifeq ($(RAYLIB_LIBTYPE),STATIC)
-	copy /Y $(RAYLIB_LIB_PATH)\libraylib.a $(PROJECT_BUILD_PATH)\lib\$(ANDROID_ARCH_NAME)\libraylib.a 
-endif
-
-# Copy project required resources: strings.xml, icon.png, assets
-# NOTE: Required strings.xml is generated and game resources are copied to assets folder
-# TODO: Review xcopy usage, it can not be found in some systems!
-copy_project_resources:
-	copy $(APP_ICON_LDPI) $(PROJECT_BUILD_PATH)\res\drawable-ldpi\icon.png /Y
-	copy $(APP_ICON_MDPI) $(PROJECT_BUILD_PATH)\res\drawable-mdpi\icon.png /Y
-	copy $(APP_ICON_HDPI) $(PROJECT_BUILD_PATH)\res\drawable-hdpi\icon.png /Y
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	@echo ^<resources^>^<string name="app_name"^>$(APP_LABEL_NAME)^</string^>^</resources^> >> $(PROJECT_BUILD_PATH)/res/values/strings.xml
-	if exist $(PROJECT_RESOURCES_PATH) C:\Windows\System32\xcopy $(PROJECT_RESOURCES_PATH) $(PROJECT_BUILD_PATH)\assets\$(PROJECT_RESOURCES_PATH) /Y /E /F
-
-# Generate NativeLoader.java to load required shared libraries
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_loader_script:
-	@echo package com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME); > $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo. >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo public class NativeLoader extends android.app.NativeActivity { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo     static { >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-ifeq ($(RAYLIB_LIBTYPE),SHARED)
-	@echo         System.loadLibrary("raylib"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-endif
-	@echo         System.loadLibrary("$(PROJECT_LIBRARY_NAME)"); >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java 
-	@echo     } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-	@echo } >> $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-    
-# Generate AndroidManifest.xml with all the required options
-# NOTE: Probably not the bet way to generate this file... but it works.
-generate_android_manifest:
-	@echo ^<?xml version="1.0" encoding="utf-8"^?^> > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^<manifest xmlns:android="http://schemas.android.com/apk/res/android" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         package="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME)"  >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         android:versionCode="$(APP_VERSION_CODE)" android:versionName="$(APP_VERSION_NAME)" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-sdk android:minSdkVersion="$(ANDROID_API_VERSION)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<uses-feature android:glEsVersion="0x00020000" android:required="true" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^<application android:allowBackup="false" android:label="@string/app_name" android:icon="@drawable/icon" ^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^<activity android:name="com.$(APP_COMPANY_NAME).$(APP_PRODUCT_NAME).NativeLoader" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:theme="@android:style/Theme.NoTitleBar.Fullscreen" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:configChanges="orientation|keyboardHidden|screenSize" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:screenOrientation="$(APP_SCREEN_ORIENTATION)" android:launchMode="singleTask" >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             android:clearTaskOnLaunch="true"^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<meta-data android:name="android.app.lib_name" android:value="$(PROJECT_LIBRARY_NAME)" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^<intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<action android:name="android.intent.action.MAIN" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo                 ^<category android:name="android.intent.category.LAUNCHER" /^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo             ^</intent-filter^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo         ^</activity^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo     ^</application^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-	@echo ^</manifest^> >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
-
-# Generate storekey for APK signing: $(PROJECT_NAME).keystore
-# NOTE: Configure here your Distinguished Names (-dname) if required!
-generate_apk_keystore: 
-	if not exist $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore $(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=$(APP_COMPANY_NAME),O=Android,C=ES" -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -alias $(PROJECT_NAME)Key -keyalg RSA
-
-# Config project package and resource using AndroidManifest.xml and res/values/strings.xml
-# NOTE: Generates resources file: src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java
-config_project_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -m -S $(PROJECT_BUILD_PATH)/res -J $(PROJECT_BUILD_PATH)/src -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar
-
-# Compile native_app_glue code as static library: obj/libnative_app_glue.a
-compile_native_app_glue:
-	$(CC) -c $(RAYLIB_PATH)/src/external/android/native_app_glue/android_native_app_glue.c -o $(PROJECT_BUILD_PATH)/obj/native_app_glue.o $(CFLAGS)
-	$(AR) rcs $(PROJECT_BUILD_PATH)/obj/libnative_app_glue.a $(PROJECT_BUILD_PATH)/obj/native_app_glue.o
-
-# Compile project code into a shared library: lib/lib$(PROJECT_LIBRARY_NAME).so 
-compile_project_code: $(OBJS)
-	$(CC) -o $(PROJECT_BUILD_PATH)/lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(OBJS) -shared $(INCLUDE_PATHS) $(LDFLAGS) $(LDLIBS)
-
-# Compile all .c files required into object (.o) files
-# NOTE: Those files will be linked into a shared library
-$(PROJECT_BUILD_PATH)/obj/%.o:%.c
-	$(CC) -c $^ -o $@ $(INCLUDE_PATHS) $(CFLAGS) --sysroot=$(ANDROID_TOOLCHAIN)/sysroot 
-    
-# Compile project .java code into .class (Java bytecode) 
-compile_project_class:
-	$(JAVA_HOME)/bin/javac -verbose -source 1.7 -target 1.7 -d $(PROJECT_BUILD_PATH)/obj -bootclasspath $(JAVA_HOME)/jre/lib/rt.jar -classpath $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar;$(PROJECT_BUILD_PATH)/obj -sourcepath $(PROJECT_BUILD_PATH)/src $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/R.java $(PROJECT_BUILD_PATH)/src/com/$(APP_COMPANY_NAME)/$(APP_PRODUCT_NAME)/NativeLoader.java
-
-# Compile .class files into Dalvik executable bytecode (.dex)
-# NOTE: Since Android 5.0, Dalvik interpreter (JIT) has been replaced by ART (AOT)
-compile_project_class_dex:
-	$(ANDROID_BUILD_TOOLS)/dx --verbose --dex --output=$(PROJECT_BUILD_PATH)/bin/classes.dex $(PROJECT_BUILD_PATH)/obj
-
-# Create Android APK package: bin/$(PROJECT_NAME).unsigned.apk
-# NOTE: Requires compiled classes.dex and lib$(PROJECT_LIBRARY_NAME).so
-# NOTE: Use -A resources to define additional directory in which to find raw asset files
-create_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/aapt package -f -M $(PROJECT_BUILD_PATH)/AndroidManifest.xml -S $(PROJECT_BUILD_PATH)/res -A $(PROJECT_BUILD_PATH)/assets -I $(ANDROID_HOME)/platforms/android-$(ANDROID_API_VERSION)/android.jar -F $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_BUILD_PATH)/bin
-	cd $(PROJECT_BUILD_PATH) && $(ANDROID_BUILD_TOOLS)/aapt add bin/$(PROJECT_NAME).unsigned.apk lib/$(ANDROID_ARCH_NAME)/lib$(PROJECT_LIBRARY_NAME).so $(PROJECT_SHARED_LIBS)
-
-# Create signed APK package using generated Key: bin/$(PROJECT_NAME).signed.apk 
-sign_project_apk_package:
-	$(JAVA_HOME)/bin/jarsigner -keystore $(PROJECT_BUILD_PATH)/$(PROJECT_NAME).keystore -storepass $(APP_KEYSTORE_PASS) -keypass $(APP_KEYSTORE_PASS) -signedjar $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).unsigned.apk $(PROJECT_NAME)Key
-
-# Create zip-aligned APK package: $(PROJECT_NAME).apk 
-zipalign_project_apk_package:
-	$(ANDROID_BUILD_TOOLS)/zipalign -f 4 $(PROJECT_BUILD_PATH)/bin/$(PROJECT_NAME).signed.apk $(PROJECT_NAME).apk
-
-# Install $(PROJECT_NAME).apk to default emulator/device
-# NOTE: Use -e (emulator) or -d (device) parameters if required
-install:
-	$(ANDROID_PLATFORM_TOOLS)/adb install --abi $(ANDROID_ARCH_NAME) -rds $(PROJECT_NAME).apk
-    
-# Check supported ABI for the device (armeabi-v7a, arm64-v8a, x86, x86_64)
-check_device_abi:
-	$(ANDROID_PLATFORM_TOOLS)/adb shell getprop ro.product.cpu.abi
-
-# Monitorize output log coming from device, only raylib tag
-logcat:
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-    
-# Install and monitorize $(PROJECT_NAME).apk to default emulator/device
-deploy:
-	$(ANDROID_PLATFORM_TOOLS)/adb install -r $(PROJECT_NAME).apk
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat -c
-	$(ANDROID_PLATFORM_TOOLS)/adb logcat raylib:V *:S
-
-#$(ANDROID_PLATFORM_TOOLS)/adb logcat *:W
-
-# Clean everything
-clean:
-	del $(PROJECT_BUILD_PATH)\* /f /s /q
-	rmdir $(PROJECT_BUILD_PATH) /s /q
-	@echo Cleaning done

+ 0 - 260
games/koala_seasons/koala_seasons.c

@@ -1,260 +0,0 @@
-/*******************************************************************************************
-*
-*   Koala Seasons [emegeme 2015]
-*
-*   Koala Seasons is a runner, you must survive as long as possible jumping from tree to tree
-*   Ready to start the adventure? How long can you survive?
-*
-*   This game has been created using raylib 1.5 (www.raylib.com)
-*   raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details)
-*
-*   Copyright (c) 2014-2016 Ramon Santamaria (@raysan5)
-*
-********************************************************************************************/
-
-#include "raylib.h"
-#include "screens/screens.h"    // NOTE: Defines global variable: currentScreen
-
-#if defined(PLATFORM_WEB)
-    #include <emscripten/emscripten.h>
-#endif
-
-//----------------------------------------------------------------------------------
-// Global Variables Definition (local to this module)
-//----------------------------------------------------------------------------------
-static const int screenWidth = 1280;
-static const int screenHeight = 720;
-
-static float transAlpha = 0;
-static bool onTransition = false;
-static bool transFadeOut = false;
-static int transFromScreen = -1;
-static int transToScreen = -1;
-static int framesCounter = 0;
-
-static Music music;
-
-//----------------------------------------------------------------------------------
-// Local Functions Declaration
-//----------------------------------------------------------------------------------
-void TransitionToScreen(int screen);
-void UpdateTransition(void);
-void DrawTransition(void);
-
-void UpdateDrawFrame(void);     // Update and Draw one frame
-
-//----------------------------------------------------------------------------------
-// Main entry point
-//----------------------------------------------------------------------------------
-int main(void) 
-{
-    // Initialization (Note windowTitle is unused on Android)
-    //---------------------------------------------------------
-    InitWindow(screenWidth, screenHeight, "KOALA SEASONS");
-
-    // Load global data here (assets that must be available in all screens, i.e. fonts)
-    font = LoadFont("resources/graphics/mainfont.png");
-
-    atlas01 = LoadTexture("resources/graphics/atlas01.png");
-    atlas02 = LoadTexture("resources/graphics/atlas02.png");
-    
-#if defined(PLATFORM_WEB) || defined(PLATFORM_RPI) || defined(PLATFORM_ANDROID)
-    colorBlend = LoadShader(0, "resources/shaders/glsl100/blend_color.fs");
-#else
-    colorBlend = LoadShader(0, "resources/shaders/glsl330/blend_color.fs");
-#endif
-
-    InitAudioDevice();
-    
-    // Load sounds data
-    fxJump = LoadSound("resources/audio/jump.ogg");
-    fxDash = LoadSound("resources/audio/dash.ogg");
-    fxEatLeaves = LoadSound("resources/audio/eat_leaves.ogg");
-    fxHitResin = LoadSound("resources/audio/resin_hit.ogg");
-    fxWind = LoadSound("resources/audio/wind_sound.ogg");
-    fxDieSnake = LoadSound("resources/audio/snake_die.ogg");
-    fxDieDingo = LoadSound("resources/audio/dingo_die.ogg");
-    fxDieOwl = LoadSound("resources/audio/owl_die.ogg");
-    
-    music = LoadMusicStream("resources/audio/jngl.xm");
-    PlayMusicStream(music);
-    SetMusicVolume(music, 2.0f);
-
-    // Define and init first screen
-    // NOTE: currentScreen is defined in screens.h as a global variable
-    currentScreen = TITLE;
-    InitTitleScreen();
-
-#if defined(PLATFORM_WEB)
-    emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
-#else
-    SetTargetFPS(60);   // Set our game to run at 60 frames-per-second
-    //--------------------------------------------------------------------------------------
-    
-    // Main game loop
-    while (!WindowShouldClose()) UpdateDrawFrame();
-#endif
-
-    // De-Initialization
-    //--------------------------------------------------------------------------------------
-    UnloadEndingScreen();
-    UnloadTitleScreen();
-    UnloadGameplayScreen();
-    UnloadLogoScreen();
-    
-    UnloadTexture(atlas01);
-    UnloadTexture(atlas02);
-    UnloadFont(font);
-    
-    UnloadShader(colorBlend);   // Unload color overlay blending shader
-    
-    UnloadSound(fxJump);
-    UnloadSound(fxDash);
-    UnloadSound(fxEatLeaves);
-    UnloadSound(fxHitResin);
-    UnloadSound(fxWind);
-    UnloadSound(fxDieSnake);
-    UnloadSound(fxDieDingo);
-    UnloadSound(fxDieOwl);
-    
-    UnloadMusicStream(music);
-    
-    CloseAudioDevice();         // Close audio device
-
-    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.05f;
-
-        if (transAlpha >= 1.0)
-        {
-            transAlpha = 1.0;
-            currentScreen = transToScreen;
-            transFadeOut = true;
-            framesCounter = 0;
-        }
-    }
-    else  // Transition fade out logic
-    {
-        transAlpha -= 0.05f;
-
-        if (transAlpha <= 0)
-        {
-            transAlpha = 0;
-            transFadeOut = false;
-            onTransition = false;
-            transFromScreen = -1;
-            transToScreen = -1;
-        }
-    }
-}
-
-void DrawTransition(void)
-{
-    DrawRectangle(0, 0, GetScreenWidth(), GetScreenHeight(), Fade(BLACK, transAlpha));
-}
-
-// Update and Draw one frame
-void UpdateDrawFrame(void)
-{
-    // Update
-    //----------------------------------------------------------------------------------
-    if (!onTransition)
-    {
-        switch (currentScreen)
-        {
-            case LOGO:
-            {
-                UpdateLogoScreen();
-
-                if (FinishLogoScreen()) TransitionToScreen(TITLE);
-
-            } 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();
-                    
-                    InitGameplayScreen();
-                    TransitionToScreen(GAMEPLAY);
-                }
-            } break;
-            case GAMEPLAY:
-            {
-                UpdateGameplayScreen();
-
-                if (FinishGameplayScreen())
-                {
-                    UnloadGameplayScreen();
-                    
-                    InitEndingScreen();
-                    TransitionToScreen(ENDING); 
-                }
-            } break;
-            case ENDING:
-            {
-                UpdateEndingScreen();
-
-                if (FinishEndingScreen())
-                {
-                    UnloadEndingScreen();
-                    
-                    InitGameplayScreen();
-                    TransitionToScreen(GAMEPLAY); 
-                }
-            } break;
-            default: break;
-        }
-    }
-    else UpdateTransition();
-    
-    UpdateMusicStream(music);
-    //----------------------------------------------------------------------------------
-
-    // Draw
-    //----------------------------------------------------------------------------------
-    BeginDrawing();
-
-        ClearBackground(WHITE);
-        
-        switch (currentScreen)
-        {
-            case LOGO: DrawLogoScreen(); break;
-            case TITLE: DrawTitleScreen(); break;
-            case GAMEPLAY: DrawGameplayScreen(); break;
-            case ENDING: DrawEndingScreen(); break;
-            default: break;
-        }
-
-        if (onTransition) DrawTransition();
-
-        DrawRectangle(GetScreenWidth() - 200, GetScreenHeight() - 50, 200, 40, Fade(WHITE, 0.6f));
-        DrawText("ALPHA VERSION", GetScreenWidth() - 180, GetScreenHeight() - 40, 20, DARKGRAY);
-
-    EndDrawing();
-    //----------------------------------------------------------------------------------
-}

BIN
games/koala_seasons/resources/audio/dash.ogg


BIN
games/koala_seasons/resources/audio/dingo_die.ogg


BIN
games/koala_seasons/resources/audio/eat_leaves.ogg


Some files were not shown because too many files changed in this diff