adding fireworks
This commit is contained in:
		
							parent
							
								
									b002fba1d3
								
							
						
					
					
						commit
						968b06fbbc
					
				
					 11 changed files with 527 additions and 53 deletions
				
			
		
							
								
								
									
										445
									
								
								Makefile
									
										
									
									
									
								
							
							
						
						
									
										445
									
								
								Makefile
									
										
									
									
									
								
							|  | @ -1,8 +1,441 @@ | |||
| clang : | ||||
| 	clang src/Main.c src/Title.c src/Credits.c src/Gameover.c src/Gameplay.c -std=c99 -Wall -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -o Avoid | ||||
| #**************************************************************************************************
 | ||||
| #
 | ||||
| #   raylib makefile for Desktop platforms, Raspberry Pi, Android and HTML5
 | ||||
| #
 | ||||
| #   Copyright (c) 2013-2022 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.
 | ||||
| #
 | ||||
| #**************************************************************************************************
 | ||||
| 
 | ||||
| tcc : | ||||
| 	tcc src/Main.c src/Title.c src/Credits.c src/Gameover.c src/Gameplay.c -std=c99 -Wall -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -o Avoid | ||||
| .PHONY: all clean | ||||
| 
 | ||||
| gcc : | ||||
| 	gcc src/Main.c src/Title.c src/Credits.c src/Gameover.c src/Gameplay.c -std=c99 -Wall -lraylib -lGL -lm -lpthread -ldl -lrt -lX11 -o Avoid | ||||
| # Define required environment variables
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| # Define target platform: PLATFORM_DESKTOP, PLATFORM_RPI, PLATFORM_DRM, PLATFORM_ANDROID, PLATFORM_WEB
 | ||||
| PLATFORM              ?= PLATFORM_DESKTOP | ||||
| 
 | ||||
| # Define project variables
 | ||||
| PROJECT_NAME          ?= Avoid | ||||
| PROJECT_VERSION       ?= 1.0 | ||||
| PROJECT_BUILD_PATH    ?= . | ||||
| 
 | ||||
| RAYLIB_PATH           ?= ~/raylib | ||||
| 
 | ||||
| # Locations of raylib.h and libraylib.a/libraylib.so
 | ||||
| # NOTE: Those variables are only used for PLATFORM_OS: LINUX, BSD
 | ||||
| RAYLIB_INCLUDE_PATH   ?= /usr/local/include | ||||
| RAYLIB_LIB_PATH       ?= /usr/local/lib | ||||
| 
 | ||||
| # Library type compilation: STATIC (.a) or SHARED (.so/.dll)
 | ||||
| RAYLIB_LIBTYPE        ?= STATIC | ||||
| 
 | ||||
| # Build mode for project: DEBUG or RELEASE
 | ||||
| BUILD_MODE            ?= RELEASE | ||||
| 
 | ||||
| # Use Wayland display server protocol on Linux desktop (by default it uses X11 windowing system)
 | ||||
| # NOTE: This variable is only used for PLATFORM_OS: LINUX
 | ||||
| USE_WAYLAND_DISPLAY   ?= FALSE | ||||
| 
 | ||||
| # PLATFORM_WEB: Default properties
 | ||||
| BUILD_WEB_ASYNCIFY    ?= FALSE | ||||
| BUILD_WEB_SHELL       ?= html5/shell.html | ||||
| BUILD_WEB_HEAP_SIZE   ?= 134217728 | ||||
| BUILD_WEB_RESOURCES   ?= TRUE | ||||
| BUILD_WEB_RESOURCES_PATH  ?= assets | ||||
| 
 | ||||
| # Use cross-compiler for PLATFORM_RPI
 | ||||
| ifeq ($(PLATFORM),PLATFORM_RPI) | ||||
|     USE_RPI_CROSS_COMPILER ?= FALSE | ||||
|     ifeq ($(USE_RPI_CROSS_COMPILER),TRUE) | ||||
|         RPI_TOOLCHAIN ?= C:/SysGCC/Raspberry | ||||
|         RPI_TOOLCHAIN_SYSROOT ?= $(RPI_TOOLCHAIN)/arm-linux-gnueabihf/sysroot | ||||
|     endif | ||||
| endif | ||||
| 
 | ||||
| # 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 | ||||
| ifeq ($(PLATFORM),PLATFORM_DRM) | ||||
|     UNAMEOS = $(shell uname) | ||||
|     ifeq ($(UNAMEOS),Linux) | ||||
|         PLATFORM_OS = LINUX | ||||
|     endif | ||||
| endif | ||||
| 
 | ||||
| # RAYLIB_PATH adjustment for LINUX platform
 | ||||
| # TODO: Do we really need this?
 | ||||
| ifeq ($(PLATFORM),PLATFORM_DESKTOP) | ||||
|     ifeq ($(PLATFORM_OS),LINUX) | ||||
|         RAYLIB_PREFIX  ?= .. | ||||
|         RAYLIB_PATH     = $(realpath $(RAYLIB_PREFIX)) | ||||
|     endif | ||||
| endif | ||||
| 
 | ||||
| # Default path for raylib on Raspberry Pi
 | ||||
| ifeq ($(PLATFORM),PLATFORM_RPI) | ||||
|     RAYLIB_PATH        ?= /home/pi/raylib | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_DRM) | ||||
|     RAYLIB_PATH        ?= /home/pi/raylib | ||||
| endif | ||||
| 
 | ||||
| # Define raylib release directory for compiled library
 | ||||
| RAYLIB_RELEASE_PATH 	?= $(RAYLIB_PATH)/src | ||||
| 
 | ||||
| ifeq ($(PLATFORM),PLATFORM_WEB) | ||||
|     # Emscripten required variables | ||||
|     EMSDK_PATH         ?= ~/emsdk | ||||
|     EMSCRIPTEN_PATH    ?= $(EMSDK_PATH)/upstream/emscripten | ||||
|     CLANG_PATH          = $(EMSDK_PATH)/upstream/bin | ||||
|     PYTHON_PATH         = $(EMSDK_PATH)/python/3.9.2-1_64bit | ||||
|     NODE_PATH           = $(EMSDK_PATH)/node/14.18.2_64bit/bin | ||||
|     export PATH         = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH):$$(PATH) | ||||
| endif | ||||
| 
 | ||||
| # Define default C compiler: CC
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| CC = clang | ||||
| 
 | ||||
| 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: MAKE
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| MAKE ?= make | ||||
| 
 | ||||
| ifeq ($(PLATFORM),PLATFORM_DESKTOP) | ||||
|     ifeq ($(PLATFORM_OS),WINDOWS) | ||||
|         MAKE = mingw32-make | ||||
|     endif | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_ANDROID) | ||||
|     MAKE = mingw32-make | ||||
| endif | ||||
| 
 | ||||
| # Define compiler flags: CFLAGS
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| #  -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)
 | ||||
| #  -Wno-unused-value    ignore unused return values of some functions (i.e. fread())
 | ||||
| #  -D_DEFAULT_SOURCE    use with -std=c99 on Linux and PLATFORM_WEB, required for timespec
 | ||||
| CFLAGS = -std=c99 -Wall -Wno-missing-braces -Wunused-result -D_DEFAULT_SOURCE | ||||
| 
 | ||||
| ifeq ($(BUILD_MODE),DEBUG) | ||||
|     CFLAGS += -g -D_DEBUG | ||||
| else | ||||
|     ifeq ($(PLATFORM),PLATFORM_WEB) | ||||
|         ifeq ($(BUILD_WEB_ASYNCIFY),TRUE) | ||||
|             CFLAGS += -O3 | ||||
|         else | ||||
|             CFLAGS += -Os | ||||
|         endif | ||||
|     else | ||||
|         CFLAGS += -s -O2 | ||||
|     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,$(RAYLIB_RELEASE_PATH) | ||||
|         endif | ||||
|     endif | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_RPI) | ||||
|     CFLAGS += -std=gnu99 | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_DRM) | ||||
|     CFLAGS += -std=gnu99 -DEGL_NO_X11 | ||||
| endif | ||||
| 
 | ||||
| # Define include paths for required headers: INCLUDE_PATHS
 | ||||
| # NOTE: Some external/extras libraries could be required (stb, physac, easings...)
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external -I$(RAYLIB_PATH)/src/extras | ||||
| 
 | ||||
| # Define additional directories containing required header files
 | ||||
| ifeq ($(PLATFORM),PLATFORM_DESKTOP) | ||||
|     ifeq ($(PLATFORM_OS),BSD) | ||||
|         INCLUDE_PATHS += -I$(RAYLIB_INCLUDE_PATH) | ||||
|     endif | ||||
|     ifeq ($(PLATFORM_OS),LINUX) | ||||
|         INCLUDE_PATHS += -I$(RAYLIB_INCLUDE_PATH) | ||||
|     endif | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_RPI) | ||||
|     INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include | ||||
|     INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include/interface/vmcs_host/linux | ||||
|     INCLUDE_PATHS += -I$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/include/interface/vcos/pthreads | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_DRM) | ||||
|     INCLUDE_PATHS += -I/usr/include/libdrm | ||||
| endif | ||||
| 
 | ||||
| # Define library paths containing required libs: LDFLAGS
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| LDFLAGS = -L. -L$(RAYLIB_RELEASE_PATH) -L$(RAYLIB_PATH)/src | ||||
| 
 | ||||
| ifeq ($(PLATFORM),PLATFORM_DESKTOP) | ||||
|     ifeq ($(PLATFORM_OS),WINDOWS) | ||||
|         # NOTE: The resource .rc 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),LINUX) | ||||
|         LDFLAGS += -L$(RAYLIB_LIB_PATH) | ||||
|     endif | ||||
|     ifeq ($(PLATFORM_OS),BSD) | ||||
|         LDFLAGS += -Lsrc -L$(RAYLIB_LIB_PATH) | ||||
|     endif | ||||
| 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) (67108864 = 64MB) | ||||
|     # -s USE_PTHREADS=1          # multithreading support | ||||
|     # -s WASM=0                  # disable Web Assembly, emitted by default | ||||
|     # -s ASYNCIFY                # lets synchronous C/C++ code interact with asynchronous JS | ||||
|     # -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 | ||||
|     # --source-map-base          # allow debugging in browser with source map | ||||
|     LDFLAGS += -s USE_GLFW=3 -s TOTAL_MEMORY=$(BUILD_WEB_HEAP_SIZE) -s FORCE_FILESYSTEM=1 | ||||
| 
 | ||||
|     # Build using asyncify | ||||
|     ifeq ($(BUILD_WEB_ASYNCIFY),TRUE) | ||||
|         LDFLAGS += -s ASYNCIFY | ||||
|     endif | ||||
| 
 | ||||
|     # Add resources building if required | ||||
|     ifeq ($(BUILD_WEB_RESOURCES),TRUE) | ||||
|         LDFLAGS += --preload-file $(BUILD_WEB_RESOURCES_PATH) | ||||
|     endif | ||||
| 
 | ||||
|     # Add debug mode flags if required | ||||
|     ifeq ($(BUILD_MODE),DEBUG) | ||||
|         LDFLAGS += -s ASSERTIONS=1 --profiling | ||||
|     endif | ||||
| 
 | ||||
| 		PROJECT_NAME ?= index | ||||
| 
 | ||||
|     # Define a custom shell .html and output extension | ||||
|     LDFLAGS += --shell-file $(BUILD_WEB_SHELL) | ||||
|     EXT = .html | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_RPI) | ||||
|     LDFLAGS += -L$(RPI_TOOLCHAIN_SYSROOT)/opt/vc/lib | ||||
| endif | ||||
| 
 | ||||
| # Define libraries required on linking: LDLIBS
 | ||||
| # NOTE: To link libraries (lib<name>.so or lib<name>.a), use -l<name>
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| 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 | ||||
| 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 | ||||
|     ifeq ($(USE_RPI_CROSS_COMPILER),TRUE) | ||||
|         LDLIBS += -lvchiq_arm -lvcos | ||||
|     endif | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_DRM) | ||||
|     # Libraries for DRM compiling | ||||
|     # NOTE: Required packages: libasound2-dev (ALSA) | ||||
|     LDLIBS = -lraylib -lGLESv2 -lEGL -lpthread -lrt -lm -lgbm -ldrm -ldl | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_WEB) | ||||
|     # Libraries for web (HTML5) compiling | ||||
|     LDLIBS = $(RAYLIB_RELEASE_PATH)/libraylib.a | ||||
| endif | ||||
| 
 | ||||
| # Define source code object files required
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| PROJECT_SOURCE_PATH = src | ||||
| 
 | ||||
| PROJECT_SOURCE_FILES ?= \
 | ||||
|     $(PROJECT_SOURCE_PATH)/Main.c \
 | ||||
|     $(PROJECT_SOURCE_PATH)/Gameplay.c \
 | ||||
|     $(PROJECT_SOURCE_PATH)/Title.c \
 | ||||
|     $(PROJECT_SOURCE_PATH)/Credits.c \
 | ||||
|     $(PROJECT_SOURCE_PATH)/Gameover.c | ||||
| 
 | ||||
| # Define all object files from source files
 | ||||
| OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES)) | ||||
| 
 | ||||
| 
 | ||||
| # Define processes to execute
 | ||||
| #------------------------------------------------------------------------------------------------
 | ||||
| # 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 -delete | ||||
| 		rm -fv $(PROJECT_SOURCE_PATH)/*.o | ||||
|     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_DRM) | ||||
| 	find . -type f -executable -delete | ||||
| 	rm -fv *.o | ||||
| endif | ||||
| ifeq ($(PLATFORM),PLATFORM_WEB) | ||||
| 	del *.o *.html *.js | ||||
| endif | ||||
| 	@echo Cleaning done | ||||
|  |  | |||
|  | @ -1,9 +0,0 @@ | |||
| GIMP Palette | ||||
| Name: Avoid_bg | ||||
| Columns: 0 | ||||
| # | ||||
| 248 248 248 Untitled | ||||
| 166 166 166 Untitled | ||||
|  30 142  20 Untitled | ||||
|  22  85  93 Untitled | ||||
| 
 | ||||
							
								
								
									
										1
									
								
								asset-src/gfx/firework.piskel
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								asset-src/gfx/firework.piskel
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| {"modelVersion":2,"piskel":{"name":"firework","description":"","fps":12,"height":10,"width":40,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":1,\"chunks\":[{\"layout\":[[0]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAKCAYAAADGmhxQAAAAhklEQVQ4jdXTsQ2AIBAF0F/YULqFu1AyuWM4xbcgkONEQMGoP7mCkHAvBwA/Dt8GlMLNGMIjR9R4XACS5LwwiVyX9khGoLOgs/3YiJPAHiTgYbJCM70Wfes4DSyhWoAaJXHO+t5cp+qEm4GtSGTe4Nl11yZ4QGrgnSnmgCPy6V8ckU8dfCU7mL+YWpQapCIAAAAASUVORK5CYII=\"}]}"],"hiddenFrames":[""]}} | ||||
|  | @ -1 +1 @@ | |||
| {"modelVersion":2,"piskel":{"name":"birbis3","description":"","fps":1,"height":70,"width":70,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":3,\"chunks\":[{\"layout\":[[0],[1],[2]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAABGCAYAAAC5bsoXAAADj0lEQVR4nO2YTW7jMAxGtexter25UA4zq56nwACeRdDCcWRbPxRJie8BAgZtJxLJ70VxUgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABW2lDb364ZnGenn3wD6mEtSsNJOFESyYvvcZlungdm+X5dEexyIUipSysh0/J1ET0RwkKPsWq4gROoWKfdziZ50oyPEcyESIhWv/M3TJdKf7d92t9oaqpSTff2IhEgtIh3X4ZYqYnqRWmVqxoEYiNQv0plMbz2yxCIvNTJNVxwiDRHp6iOduUiWmSmVadoCEWn4jZTeRdPHQWZyvXhmBpFuEcmAtSQCIqXXv9HFeU5kJDIuFJHkREp5aWxFcpqT108uiIRINyLtf17bE5Fv7Zzm5E0kERyIgUgyH+0ke9ItkuOcIFLl+rul7Kpqj7UkwksmNHdNs5996Rtuay7cFo1Ii4jkYO6tIvXJ5KBgRFpEJAczl8hImOIRqX3JvQPPn6OzfLT1xUFBiGQnkphMDuYtKVJ9XxwUhEi2IuV6UvWNnYNZS0tUnxUHRQ1bAlgHX0ukY2iKRbKe8WCRymVyUBQi+RCp+uOM9XwRCZGsVkopiYhkPVuBbCASInWJdBWiEJnZwTMSInWJdBaiEJk5gEiI1CVSLkQh8nICX38jUrNI4bJyAyIh0liRrGfpKBNrNwiREAmR/DbNOvhuRHKYlcfXx/b4+kCkkiZVNwqRxolUyO/cFtmnm5cwB9p7j3XwZxNJa25e8lEEIiFSLdxGGRBpDZH2vRzZT82ZechGMdFF8nAGCY4ijapHW6Jp5oJI9meQICdSrqaeOrmNLkAk+zNIUSJTa53afZpuJohkfwZJrmTqqVO7R9PNJLJIWg/oFpwJ1VKn1W001UyiiqT1cG6JhEgW/ZlyHl7CbLn3dEMrRFKkUWf0smc3XsJste+UQ6ugp1bL22i6maws0tm3VlEk+qFXpJFn87CnCBFEOn5rFUmiPaU1W/Vo6tlEEUnieWFmSmu26NESs4kq0oj9PFJae+5vNPplta84EUUasZdXSuq/+v2ovtWcSXLfYawsUm6faQYjQO1tVPI6WmeS3ncolu/YmvtGvJWka5Z4nZbzuJ/X1fODxsG1944m04h6pURq+T9u5xVNpNyeo/bxwEq1uq7h7sFS+2aw2HvEHl6IUqcZNQ+fIwZx9boatxMBAxGiiwQgQmlILUQavTfAFf8BsIa/63/h/PcAAAAASUVORK5CYII=\"}]}"],"hiddenFrames":[null]}} | ||||
| {"modelVersion":2,"piskel":{"name":"birbis4","description":"","fps":1,"height":55,"width":70,"layers":["{\"name\":\"Layer 1\",\"opacity\":1,\"frameCount\":3,\"chunks\":[{\"layout\":[[0],[1],[2]],\"base64PNG\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANIAAAA3CAYAAAB5EBRzAAADb0lEQVR4nO2YUY7bMAxE9dnb9Hq9UA/Tr56nQAH3I9jCcSRbokjNSJoBCCx2s6HJmRfFTkmSJAmtI6WDvh70GiN9/SyF6Ph+zFbFwBx/3stjPWhIKiqdQBFIKBGAIZB8QEoZmK5/89iJmwiylK2lhhFI3SDlfu+xExeNAeJVAkkgVVX+5OkG6cfx93gq21IHZeW8A4EkkFpButbllKrW9CBZYaIfSiCFgVSC6WNHaCEy0wLTVIMJpBCQ7r7SUYCEzE0tTFMO5wxSRGjgkHSeSOkTNIwIcpPbx+sDWCAJpAqQ0vtrxos8K/0QgYcUSH4gpTw0eJBIs/J+GyCQBNINSOffW3bi8tSONCsfIHWLAIyo+nWkbDWtBw1JJUgRHy7dIBFkQCAJpJDqD0zt4vD+34F0ljUblAMLpIVAIvDeCpIdJoJhBdJCIBH47pGTLQYXSPby+fRdJ0uljLTvhmAYgYQDyRUmAs89QWrbDcEwYeWRDYLwR4NUCkzTEzu01wEQtcFEMJBAwoOUC0w1SGifg0Gqg4lgIIHEAZLpax7aY4EkkBCVUkpuIKH9dciHQBJIZpDuAlS/GAJ/nbKheySBZAapFKD6xRD465gNgSSQzCDlArRNZgrS42+BZAKpfSEEvgbnQiAJpFiQ0H4S5WLd5QgkgSSQPuvn72//SyCRgJQSXV5MGRmttzBv1PssdPDpQKrUKO8YMvIogSSQLBrlHUtGHiWQBJJFOo0uEkhrgHTe5UqnBEM+qrQ7SAzX4KErSJHzjIZoCm8EEv4aPJQDKTdT75w6jQoSSPhr8FINTD1zjt7VVL4IJPw1eOoOpt45R+9pKl92BmnkDfpolYCyzok6jabxZVeQRt6co+QFEmJH03nCEmZk76kMa5A3SBHXyNSzSyxhRvWdzrBG9c6KPI2m8mVlkEpPrXaB6EseIEVdG0vPbu0A0vWp1U4QndUyM2pP0/qzC0he9wuzqmVmxJ6m92dXkCL6Mapl9tzrRuwM1ddVO4IU0YtVtfPfvSZqd0/XNY1nyKCN7LsrSJbTqOa9ENdF6xv63mFk7x1PpYiZPd7Lck3Unu0EUqlfRB8WRc3rBZLlfyg9e/ouPDrQiN4RPVi02qx0c9QsONKEu/eNPjVWC9eddpkTpp1BeuovSdWqDRICpOjekiRJUrD+ATYPv+scnnHKAAAAAElFTkSuQmCC\"}]}"],"hiddenFrames":[]}} | ||||
							
								
								
									
										
											BIN
										
									
								
								assets/gfx/firework.png
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								assets/gfx/firework.png
									
										
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							| After Width: | Height: | Size: 288 B | 
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 969 B After Width: | Height: | Size: 936 B | 
|  | @ -1,2 +0,0 @@ | |||
| #!/bin/sh | ||||
| emcc -o html5/index.html src/Main.c src/Title.c src/Credits.c src/Gameover.c src/Gameplay.c -Os -Wall /usr/local/lib/libraylib.a -I. -I/usr/local/include/raylib.h -L. -L/usr/local/lib/libraylib.a -s USE_GLFW=3 -DPLATFORM_WEB --preload-file ./assets --shell-file html5/shell.html | ||||
							
								
								
									
										105
									
								
								src/Gameplay.c
									
										
									
									
									
								
							
							
						
						
									
										105
									
								
								src/Gameplay.c
									
										
									
									
									
								
							|  | @ -22,44 +22,57 @@ void InitGameplayScreen(void) | |||
| 
 | ||||
|   SetMasterVolume(0.2); | ||||
| 
 | ||||
|   player.sprite = LoadTexture("assets/gfx/player.png"); | ||||
|   player_sprite = LoadTexture("assets/gfx/player.png"); | ||||
|   player.currentframe = 0; | ||||
|   player.speed = 300.0f; | ||||
|   player.hp = 30; | ||||
|   player.frameRec = (Rectangle) { | ||||
|     player.hitbox.x, | ||||
|     player.hitbox.y, | ||||
|    (float) player.sprite.width/3, | ||||
|    (float) player.sprite.height | ||||
|    (float) player_sprite.width/3, | ||||
|    (float) player_sprite.height | ||||
|   }; | ||||
|   player.hitbox = (Rectangle) { | ||||
|     GetScreenWidth()/2.0f - 30, | ||||
|     GetScreenHeight()/2.0f - 30, | ||||
|     (float) player.sprite.width/3, | ||||
|     (float) player.sprite.height | ||||
|     (float) player_sprite.width/3, | ||||
|     (float) player_sprite.height | ||||
|   }; | ||||
| 
 | ||||
|   enemy.sprite = LoadTexture("assets/gfx/enemy.png"); | ||||
|   enemy_sprite = LoadTexture("assets/gfx/enemy.png"); | ||||
|   enemy.currentframe = 0; | ||||
|   enemy.speed = 100.0f; | ||||
|   enemy.hp = 30; | ||||
|   enemy.hitbox = (Rectangle) { | ||||
|     740, | ||||
|     10, | ||||
|     (float) enemy.sprite.width, | ||||
|     (float) enemy.sprite.height | ||||
|     (float) enemy_sprite.width, | ||||
|     (float) enemy_sprite.height | ||||
|   }; | ||||
| 
 | ||||
| 
 | ||||
|   heart.sprite = LoadTexture("assets/gfx/health.png"); | ||||
|   heart_sprite = LoadTexture("assets/gfx/health.png"); | ||||
|   heart.hitbox = (Rectangle) { | ||||
|     GetRandomValue(0, GetScreenWidth() - heart.sprite.width), | ||||
|     GetRandomValue(0, GetScreenHeight() - heart.sprite.height), | ||||
|     (float) heart.sprite.width, | ||||
|     (float) heart.sprite.height | ||||
|     GetRandomValue(0, GetScreenWidth() - heart_sprite.width), | ||||
|     GetRandomValue(0, GetScreenHeight() - heart_sprite.height), | ||||
|     (float) heart_sprite.width, | ||||
|     (float) heart_sprite.height | ||||
|   }; | ||||
|   heart.active = true; | ||||
| 
 | ||||
|   firework_sprite = LoadTexture("assets/gfx/firework.png"); | ||||
|   for (int i = 0; i < MAX_FIREWORKS; i++) { | ||||
|     fireworks[i].currentframe = 0; | ||||
|     fireworks[i].speed = 200.0f; | ||||
|     fireworks[i].hp = 1; | ||||
|     fireworks[i].hitbox = (Rectangle) { | ||||
|       50 * i, | ||||
|       100 * i, | ||||
|       (float) firework_sprite.width, | ||||
|       (float) firework_sprite.height | ||||
|     }; | ||||
|   } | ||||
| 
 | ||||
|   pause = 0; | ||||
|   mute = true; | ||||
|   DebugMode = 0; | ||||
|  | @ -75,8 +88,8 @@ void ResetGameplayScreen(void) | |||
|    player.hitbox = (Rectangle) { | ||||
|      GetScreenWidth()/2.0f - 30, | ||||
|      GetScreenHeight()/2.0f - 30, | ||||
|      (float) player.sprite.width/3, | ||||
|      (float) player.sprite.height | ||||
|      (float) player_sprite.width/3, | ||||
|      (float) player_sprite.height | ||||
|    }; | ||||
| 
 | ||||
|    enemy.currentframe = 0; | ||||
|  | @ -85,18 +98,29 @@ void ResetGameplayScreen(void) | |||
|    enemy.hitbox = (Rectangle) { | ||||
|      740, | ||||
|      10, | ||||
|      (float) enemy.sprite.width, | ||||
|      (float) enemy.sprite.height | ||||
|      (float) enemy_sprite.width, | ||||
|      (float) enemy_sprite.height | ||||
|    }; | ||||
| 
 | ||||
|    heart.hitbox = (Rectangle) { | ||||
|      GetRandomValue(0, GetScreenWidth() - heart.sprite.width), | ||||
|      GetRandomValue(0, GetScreenHeight() - heart.sprite.height), | ||||
|      (float) heart.sprite.width, | ||||
|      (float) heart.sprite.height | ||||
|      GetRandomValue(0, GetScreenWidth() - heart_sprite.width), | ||||
|      GetRandomValue(0, GetScreenHeight() - heart_sprite.height), | ||||
|      (float) heart_sprite.width, | ||||
|      (float) heart_sprite.height | ||||
|    }; | ||||
|    heart.active = true; | ||||
| 
 | ||||
|    for (int i = 0; i < MAX_FIREWORKS; i++) { | ||||
|      fireworks[i].currentframe = 0; | ||||
|      fireworks[i].speed = 200.0f; | ||||
|      fireworks[i].hp = 1; | ||||
|      fireworks[i].hitbox = (Rectangle) { | ||||
|        50 * i, | ||||
|        100 * i, | ||||
|        (float) firework_sprite.width, | ||||
|        (float) firework_sprite.height | ||||
|      }; | ||||
|    } | ||||
| 
 | ||||
|    DebugMode = 0; | ||||
| 
 | ||||
|  | @ -122,11 +146,15 @@ void UpdateGameplayScreen(void) | |||
|        } else player.speed = 300.0f; | ||||
| 
 | ||||
|          player.sprite_pos = (Vector2){ player.hitbox.x, player.hitbox.y }; | ||||
|          player.frameRec.x = (float)player.currentframe*(float)player.sprite.width/3; | ||||
|          player.frameRec.x = (float)player.currentframe*(float)player_sprite.width/3; | ||||
| 
 | ||||
|          heart.sprite_pos = (Vector2){ heart.hitbox.x, heart.hitbox.y }; | ||||
|          enemy.sprite_pos = (Vector2){ enemy.hitbox.x, enemy.hitbox.y }; | ||||
| 
 | ||||
|          for (int i = 0; i < MAX_FIREWORKS; i++) { | ||||
|            fireworks[i].sprite_pos = (Vector2){ fireworks[i].hitbox.x, fireworks[i].hitbox.y }; | ||||
|          } | ||||
| 
 | ||||
|          if (score % 1000 == 0) heart.active = true; | ||||
| 
 | ||||
|          // Player to da wallz collies
 | ||||
|  | @ -151,8 +179,8 @@ void UpdateGameplayScreen(void) | |||
|          if (heart.active) { | ||||
|              if (CheckCollisionRecs(player.hitbox,  heart.hitbox)) { | ||||
|                  player.hp = 30; | ||||
|                  heart.hitbox.x = GetRandomValue(0, GetScreenWidth() - heart.sprite.width); | ||||
|                  heart.hitbox.y = GetRandomValue(0, GetScreenHeight() - heart.sprite.height); | ||||
|                  heart.hitbox.x = GetRandomValue(0, GetScreenWidth() - heart_sprite.width); | ||||
|                  heart.hitbox.y = GetRandomValue(0, GetScreenHeight() - heart_sprite.height); | ||||
|                  heart.active = false; | ||||
|              } | ||||
|          } | ||||
|  | @ -172,6 +200,12 @@ void UpdateGameplayScreen(void) | |||
|            } else player.currentframe = 0; | ||||
|          } | ||||
| 
 | ||||
|          for (int i = 0; i <= MAX_FIREWORKS; i++) { | ||||
|            if (CheckCollisionRecs(player.hitbox, fireworks[i].hitbox)) { | ||||
|              player.hp -= GetFrameTime() * 3.0f; | ||||
|              player.currentframe = 1; | ||||
|            } | ||||
|          } | ||||
| 
 | ||||
|        } | ||||
|        else pauseTimer++; | ||||
|  | @ -181,25 +215,32 @@ void DrawGameplayScreen(void) | |||
| { | ||||
|   DrawTexture(background, 0, 0, RAYWHITE); | ||||
|   DrawFPS(10, 430); | ||||
|   DrawText(TextFormat("HP: %i", player.hp), 10, 10, 20, RED); | ||||
|   DrawText(TextFormat("SCORE: %i", score), 10, 30, 20, BLUE); | ||||
|   if (DebugMode) { | ||||
|     DrawRectangleRec(player.hitbox, BLUE); | ||||
|     DrawRectangleRec(heart.hitbox, GREEN); | ||||
|     DrawRectangleRec(enemy.hitbox, BLACK); | ||||
|     for (int i = 0; i < MAX_FIREWORKS; i++) { | ||||
|       DrawRectangleRec(fireworks[i].hitbox, BLACK); | ||||
|     } | ||||
|   } | ||||
|   if (heart.active) DrawTexture(heart.sprite, heart.sprite_pos.x, heart.sprite_pos.y, RAYWHITE); | ||||
|   DrawTexture(enemy.sprite, enemy.sprite_pos.x, enemy.sprite_pos.y, RAYWHITE); | ||||
|   DrawTextureRec(player.sprite, player.frameRec, player.sprite_pos, RAYWHITE); | ||||
|   if (heart.active) DrawTexture(heart_sprite, heart.sprite_pos.x, heart.sprite_pos.y, RAYWHITE); | ||||
|   DrawTexture(enemy_sprite, enemy.sprite_pos.x, enemy.sprite_pos.y, RAYWHITE); | ||||
|   for (int i = 0; i < MAX_FIREWORKS; i++) { | ||||
|     DrawTexture(firework_sprite, fireworks[i].sprite_pos.x, fireworks[i].sprite_pos.y, RAYWHITE); | ||||
|   } | ||||
|   DrawTextureRec(player_sprite, player.frameRec, player.sprite_pos, RAYWHITE); | ||||
|   DrawText(TextFormat("HP: %i", player.hp), 10, 10, 20, RED); | ||||
|   DrawText(TextFormat("SCORE: %i", score), 10, 30, 20, BLUE); | ||||
|   if (pause && ((pauseTimer/30)%2)) DrawText("PAUSED", 330, 190, 30, PURPLE); | ||||
| } | ||||
| 
 | ||||
| void UnloadGameplayScreen() | ||||
| { | ||||
|   UnloadSound(fxbounce); | ||||
|   UnloadTexture(player.sprite); | ||||
|   UnloadTexture(heart.sprite); | ||||
|   UnloadTexture(enemy.sprite); | ||||
|   UnloadTexture(player_sprite); | ||||
|   UnloadTexture(heart_sprite); | ||||
|   UnloadTexture(enemy_sprite); | ||||
|   UnloadTexture(firework_sprite); | ||||
| } | ||||
| 
 | ||||
| void gameReset(void) | ||||
|  |  | |||
|  | @ -9,8 +9,9 @@ | |||
| #ifndef GAMEPLAY_HEADER | ||||
| #define GAMEPLAY_HEADER | ||||
| 
 | ||||
| #define MAX_FIREWORKS 5 | ||||
| 
 | ||||
| struct Actor { | ||||
|     Texture2D sprite; | ||||
|     float speed; | ||||
|     int hp; | ||||
|     int currentframe; | ||||
|  | @ -20,7 +21,6 @@ struct Actor { | |||
| }; | ||||
| 
 | ||||
| struct Item { | ||||
|     Texture2D sprite; | ||||
|     Vector2 sprite_pos; | ||||
|     Rectangle hitbox; | ||||
|     bool active; | ||||
|  | @ -28,6 +28,7 @@ struct Item { | |||
| 
 | ||||
| struct Actor player = { 0 }; | ||||
| struct Actor enemy = { 0 }; | ||||
| struct Actor fireworks[MAX_FIREWORKS] = { 0 }; | ||||
| struct Item heart = { 0 }; | ||||
| int pauseTimer; | ||||
| Sound fxbounce = { 0 }; | ||||
|  |  | |||
|  | @ -19,7 +19,12 @@ static const int screenWidth  = 800; | |||
| static const int screenHeight = 450; | ||||
| 
 | ||||
| GameScreen currentScreen = 0; | ||||
| Texture2D background = { 0 }; | ||||
| 
 | ||||
| Texture2D background; | ||||
| Texture2D player_sprite; | ||||
| Texture2D heart_sprite; | ||||
| Texture2D enemy_sprite; | ||||
| Texture2D firework_sprite; | ||||
| 
 | ||||
| // Game functions
 | ||||
| static void gameSetup(void); | ||||
|  |  | |||
|  | @ -10,5 +10,9 @@ | |||
| #define TEXTURES_HEADER | ||||
| 
 | ||||
| extern Texture2D background; | ||||
| extern Texture2D player_sprite; | ||||
| extern Texture2D heart_sprite; | ||||
| extern Texture2D enemy_sprite; | ||||
| extern Texture2D firework_sprite; | ||||
| 
 | ||||
| #endif | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue