From 66e9ea82829bf06b8d59495eeaf5730b0170ea29 Mon Sep 17 00:00:00 2001
From: bit69tream <43259894+bit69tream@users.noreply.github.com>
Date: Tue, 26 Dec 2023 03:08:28 +0300
Subject: [PATCH] Initial commit
---
.github/workflows/linux.yml | 86 +++++
.github/workflows/macos.yml | 138 +++++++
.github/workflows/webassembly.yml | 93 +++++
.github/workflows/windows.yml | 87 +++++
.gitignore | 64 ++++
CONVENTIONS.md | 89 +++++
LICENSE | 16 +
README.md | 70 ++++
projects/VS2022/raylib-game.sln | 61 +++
projects/VS2022/raylib/raylib.vcxproj | 342 +++++++++++++++++
.../VS2022/raylib_game/raylib_game.vcxproj | 362 ++++++++++++++++++
screenshots/screenshot000.png | Bin 0 -> 7707 bytes
src/Info.plist | 30 ++
src/Makefile | 344 +++++++++++++++++
src/Makefile.Android | 321 ++++++++++++++++
src/minshell.html | 85 ++++
src/raylib.icns | Bin 0 -> 12242 bytes
src/raylib.ico | Bin 0 -> 9752 bytes
src/raylib_game.c | 143 +++++++
src/raylib_game.rc | 27 ++
src/resources/README.txt | 2 +
21 files changed, 2360 insertions(+)
create mode 100644 .github/workflows/linux.yml
create mode 100644 .github/workflows/macos.yml
create mode 100644 .github/workflows/webassembly.yml
create mode 100644 .github/workflows/windows.yml
create mode 100644 .gitignore
create mode 100644 CONVENTIONS.md
create mode 100644 LICENSE
create mode 100644 README.md
create mode 100644 projects/VS2022/raylib-game.sln
create mode 100644 projects/VS2022/raylib/raylib.vcxproj
create mode 100644 projects/VS2022/raylib_game/raylib_game.vcxproj
create mode 100644 screenshots/screenshot000.png
create mode 100644 src/Info.plist
create mode 100644 src/Makefile
create mode 100644 src/Makefile.Android
create mode 100644 src/minshell.html
create mode 100644 src/raylib.icns
create mode 100644 src/raylib.ico
create mode 100644 src/raylib_game.c
create mode 100644 src/raylib_game.rc
create mode 100644 src/resources/README.txt
diff --git a/.github/workflows/linux.yml b/.github/workflows/linux.yml
new file mode 100644
index 0000000..ca78dd5
--- /dev/null
+++ b/.github/workflows/linux.yml
@@ -0,0 +1,86 @@
+name: Linux
+
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - 'src/**'
+ - '.github/workflows/linux.yml'
+ release:
+ types: [published]
+
+jobs:
+ build:
+ runs-on: ubuntu-20.04
+
+ env:
+ PROJECT_NAME: ${{ github.event.repository.name }}
+ PROJECT_BUILD_PATH: ${{ github.event.repository.name }}/src
+ PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_linux_x64
+ PROJECT_SOURCES: "raylib_game.c"
+ PROJECT_CUSTOM_FLAGS: ""
+
+ steps:
+ - name: Checkout this repo
+ uses: actions/checkout@master
+ with:
+ path: ${{ env.PROJECT_NAME }}
+
+ - name: Checkout raylib repo
+ uses: actions/checkout@v3
+ with:
+ repository: raysan5/raylib
+ path: raylib
+
+ - name: Setup Release Paths
+ run: |
+ echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_linux_x64" >> $GITHUB_ENV
+ shell: bash
+ if: github.event_name == 'release' && github.event.action == 'published'
+
+ - name: Setup Environment
+ run: |
+ sudo apt-get update -qq
+ sudo apt-get install -y --no-install-recommends libglfw3 libglfw3-dev libx11-dev libxcursor-dev libxrandr-dev libxinerama-dev libxi-dev libxext-dev libxfixes-dev
+ mkdir ${{ env.PROJECT_RELEASE_PATH }}
+ ls
+ shell: bash
+
+ - name: Build raylib Library
+ run: |
+ cd raylib/src
+ gcc --version
+ make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE RAYLIB_LIBTYPE=STATIC RAYLIB_PROJECT_RELEASE_PATH=. -B
+
+ - name: Build Product
+ run: |
+ cd ${{ env.PROJECT_NAME }}/src
+ make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_CUSTOM_FLAGS=${{ env.PROJECT_CUSTOM_FLAGS }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib
+
+ - name: Generate Artifacts
+ run: |
+ ls ${{ env.PROJECT_BUILD_PATH }}
+ cp ${{ env.PROJECT_BUILD_PATH }}/${{ env.PROJECT_NAME }} ${{ env.PROJECT_RELEASE_PATH }}
+ cp ${{ env.PROJECT_NAME }}/README.md ${{ env.PROJECT_RELEASE_PATH }}
+ cp ${{ env.PROJECT_NAME }}/LICENSE ${{ env.PROJECT_RELEASE_PATH }}
+ ls ${{ env.PROJECT_RELEASE_PATH }}
+ 7z a ./${{ env.PROJECT_RELEASE_PATH }}.zip ./${{ env.PROJECT_RELEASE_PATH }}
+
+ # Issue: Double zip: https://github.com/actions/upload-artifact/issues/39
+ - name: Upload Artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+
+ # Alternative: https://github.com/marketplace/actions/gh-release
+ - name: Upload Artifact to Release
+ uses: actions/upload-release-asset@v1.0.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ github.event.release.upload_url }}
+ asset_name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_content_type: application/zip
+ if: github.event_name == 'release' && github.event.action == 'published'
diff --git a/.github/workflows/macos.yml b/.github/workflows/macos.yml
new file mode 100644
index 0000000..01a82e8
--- /dev/null
+++ b/.github/workflows/macos.yml
@@ -0,0 +1,138 @@
+name: macOS
+
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - 'src/**'
+ - '.github/workflows/linux.yml'
+ release:
+ types: [published]
+
+permissions:
+ contents: read
+
+jobs:
+ build:
+ permissions:
+ contents: write # for actions/upload-release-asset to upload release asset
+ runs-on: macos-latest
+
+ env:
+ PROJECT_NAME: ${{ github.event.repository.name }}
+ PROJECT_FILE_NAME: raylib_game
+ PROJECT_BUILD_PATH: ${{ github.event.repository.name }}/src
+ PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_macos
+ PROJECT_SOURCES: "raylib_game.c"
+ PROJECT_CUSTOM_FLAGS: ""
+ RAYLIB_CONFIG_FLAGS: "-DSUPPORT_MODULE_RSHAPES -DSUPPORT_MODULE_RTEXTURES -DSUPPORT_MODULE_RTEXT -DSUPPORT_MODULE_RAUDIO -DSUPPORT_COMPRESSION_API -DSUPPORT_QUADS_DRAW_MODE -DSUPPORT_IMAGE_MANIPULATION -DSUPPORT_DEFAULT_FONT -DSUPPORT_TEXT_MANIPULATION -DSUPPORT_FILEFORMAT_WAV -DSUPPORT_FILEFORMAT_QOA -DSUPPORT_FILEFORMAT_MP3 -DSUPPORT_FILEFORMAT_OGG -DSUPPORT_FILEFORMAT_FLAC -DSUPPORT_STANDARD_FILEIO -DSUPPORT_TRACELOG"
+
+ steps:
+ - name: Checkout this repo
+ uses: actions/checkout@master
+ with:
+ path: ${{ env.PROJECT_NAME }}
+
+ - name: Checkout raylib repo
+ uses: actions/checkout@v3
+ with:
+ repository: raysan5/raylib
+ path: raylib
+
+ - name: Setup Release Paths
+ run: |
+ echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_macos" >> $GITHUB_ENV
+ shell: bash
+ if: github.event_name == 'release' && github.event.action == 'published'
+
+ - name: Setup Environment
+ run: |
+ mkdir ${{ env.PROJECT_RELEASE_PATH }}
+ cd ${{ env.PROJECT_RELEASE_PATH }}
+ mkdir ${{ env.PROJECT_FILE_NAME }}.app
+ cd ${{ env.PROJECT_FILE_NAME }}.app
+ mkdir Contents
+ cd Contents
+ mkdir MacOS
+ mkdir Resources
+ cd ../../..
+ ls
+ shell: bash
+
+ # Generating static library, note that i386 architecture is deprecated
+ # Defining GL_SILENCE_DEPRECATION because OpenGL is deprecated on macOS
+ - name: Build raylib Library
+ run: |
+ cd raylib/src
+ clang --version
+
+ # Extract version numbers from Makefile
+ brew install grep
+ RAYLIB_API_VERSION=`ggrep -Po 'RAYLIB_API_VERSION\s*=\s\K(.*)' Makefile`
+ RAYLIB_VERSION=`ggrep -Po 'RAYLIB_VERSION\s*=\s\K(.*)' Makefile`
+
+ # Build raylib x86_64 static
+ make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC CUSTOM_CFLAGS="-target x86_64-apple-macos10.12 -DGL_SILENCE_DEPRECATION"
+ mv -v -f libraylib.a libraylib_x86_64.a
+ make clean
+
+ # Build raylib arm64 static
+ make PLATFORM=PLATFORM_DESKTOP RAYLIB_LIBTYPE=STATIC CUSTOM_CFLAGS="-target arm64-apple-macos11 -DGL_SILENCE_DEPRECATION" -B
+ mv -v -f libraylib.a libraylib_arm64.a
+ make clean
+
+ # Join x86_64 and arm64 static
+ lipo -create -output libraylib.a libraylib_x86_64.a libraylib_arm64.a
+ lipo libraylib.a -detailed_info
+ cd ../..
+
+ - name: Build Product
+ run: |
+ cd ${{ env.PROJECT_NAME }}/src
+
+ # Build project x86_64 binary
+ # TODO: Link with x86_64 raylib library: libraylib_x86_64.a
+ make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_CUSTOM_FLAGS=${{ env.PROJECT_CUSTOM_FLAGS }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib PROJECT_CUSTOM_FLAGS="-target x86_64-apple-macos10.12"
+ mv -v -f ${{ env.PROJECT_FILE_NAME }} ${{ env.PROJECT_FILE_NAME }}_x86_64
+ make clean
+
+ # Build project arm64 binary
+ # TODO: Link with arm64 raylib library: libraylib_arm.a
+ make PLATFORM=PLATFORM_DESKTOP BUILD_MODE=RELEASE PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_CUSTOM_FLAGS=${{ env.PROJECT_CUSTOM_FLAGS }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib PROJECT_CUSTOM_FLAGS="-target arm64-apple-macos11"
+ mv -v -f ${{ env.PROJECT_FILE_NAME }} ${{ env.PROJECT_FILE_NAME }}_arm64
+ make clean
+
+ # Join x86_64 and arm64 binaries
+ lipo -create -output ${{ env.PROJECT_FILE_NAME }} ${{ env.PROJECT_FILE_NAME }}_x86_64 ${{ env.PROJECT_FILE_NAME }}_arm64
+ lipo ${{ env.PROJECT_FILE_NAME }} -detailed_info
+ cd ..
+
+ - name: Generate Artifacts
+ run: |
+ ls ${{ env.PROJECT_BUILD_PATH }}
+ cp ${{ env.PROJECT_BUILD_PATH }}/${{ env.PROJECT_FILE_NAME }} ${{ env.PROJECT_RELEASE_PATH }}/${{ env.PROJECT_FILE_NAME }}.app/Contents/MacOS
+ cp ${{ env.PROJECT_NAME }}/src/raylib.icns ${{ env.PROJECT_RELEASE_PATH }}/${{ env.PROJECT_FILE_NAME }}.app/Contents/Resources
+ cp ${{ env.PROJECT_NAME }}/src/Info.plist ${{ env.PROJECT_RELEASE_PATH }}/${{ env.PROJECT_FILE_NAME }}.app/Contents
+ cp ${{ env.PROJECT_NAME }}/README.md ${{ env.PROJECT_RELEASE_PATH }}
+ cp ${{ env.PROJECT_NAME }}/LICENSE ${{ env.PROJECT_RELEASE_PATH }}
+ ls ${{ env.PROJECT_RELEASE_PATH }}
+ 7z a ./${{ env.PROJECT_RELEASE_PATH }}.zip ./${{ env.PROJECT_RELEASE_PATH }}
+
+ # Issue: Double zip: https://github.com/actions/upload-artifact/issues/39
+ - name: Upload Artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+
+ # Alternative: https://github.com/marketplace/actions/gh-release
+ - name: Upload Artifact to Release
+ uses: actions/upload-release-asset@v1.0.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ github.event.release.upload_url }}
+ asset_name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_content_type: application/zip
+ if: github.event_name == 'release' && github.event.action == 'published'
diff --git a/.github/workflows/webassembly.yml b/.github/workflows/webassembly.yml
new file mode 100644
index 0000000..8ead4ae
--- /dev/null
+++ b/.github/workflows/webassembly.yml
@@ -0,0 +1,93 @@
+name: WebAssembly
+
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - 'src/**'
+ - '.github/workflows/webassembly.yml'
+ release:
+ types: [published]
+
+jobs:
+ build:
+ runs-on: windows-latest
+
+ env:
+ PROJECT_NAME: ${{ github.event.repository.name }}
+ PROJECT_BUILD_PATH: ${{ github.event.repository.name }}\\src
+ PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_wasm
+ PROJECT_SOURCES: raylib_game.c
+ BUILD_WEB_SHELL: minshell.html
+
+ steps:
+ - name: Checkout this repo
+ uses: actions/checkout@master
+ with:
+ path: ${{ env.PROJECT_NAME }}
+
+ - name: Checkout raylib repo
+ uses: actions/checkout@v3
+ with:
+ repository: raysan5/raylib
+ path: raylib
+
+ - name: Setup emsdk
+ uses: mymindstorm/setup-emsdk@v12
+ with:
+ version: 3.1.30
+ actions-cache-folder: 'emsdk-cache'
+
+ - name: Setup Release Paths
+ run: |
+ echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_wasm" >> $GITHUB_ENV
+ shell: bash
+ if: github.event_name == 'release' && github.event.action == 'published'
+
+ - name: Setup Environment
+ run: |
+ mkdir ${{ env.PROJECT_RELEASE_PATH }}
+ dir
+
+ - name: Build raylib Library
+ run: |
+ cd raylib/src
+ emcc -v
+ make PLATFORM=PLATFORM_WEB RAYLIB_BUILD_MODE=RELEASE RAYLIB_LIBTYPE=STATIC EMSDK_PATH="D:/a/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}/emsdk-cache/emsdk-main" RAYLIB_PROJECT_RELEASE_PATH=. -B
+
+ - name: Build Product
+ run: |
+ cd ${{ env.PROJECT_NAME }}/src
+ make PLATFORM=PLATFORM_WEB BUILD_MODE=RELEASE EMSDK_PATH="D:/a/${{ env.PROJECT_NAME }}/${{ env.PROJECT_NAME }}/emsdk-cache/emsdk-main" PROJECT_SOURCE_FILES=${{ env.PROJECT_SOURCES }} PROJECT_BUILD_PATH=. RAYLIB_PATH=../../raylib -B
+
+ - name: Generate Artifacts
+ run: |
+ dir ${{ env.PROJECT_BUILD_PATH }}
+ copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.data ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.data
+ copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.wasm ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.wasm
+ copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.js ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.js
+ copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.html ${{ env.PROJECT_RELEASE_PATH }}\index.html
+ copy /Y ${{ env.PROJECT_NAME }}\README.md ${{ env.PROJECT_RELEASE_PATH }}\README.md
+ copy /Y ${{ env.PROJECT_NAME }}\LICENSE ${{ env.PROJECT_RELEASE_PATH }}\LICENSE
+ dir ${{ env.PROJECT_RELEASE_PATH }}
+ 7z a -tzip -r .\${{ env.PROJECT_RELEASE_PATH }}.zip .\${{ env.PROJECT_RELEASE_PATH }}\*
+ shell: cmd
+
+ # Issue: Double zip: https://github.com/actions/upload-artifact/issues/39
+ - name: Upload Artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+
+ # Alternative: https://github.com/marketplace/actions/gh-release
+ - name: Upload Artifact to Release
+ uses: actions/upload-release-asset@v1.0.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ github.event.release.upload_url }}
+ asset_name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_content_type: application/zip
+ if: github.event_name == 'release' && github.event.action == 'published'
diff --git a/.github/workflows/windows.yml b/.github/workflows/windows.yml
new file mode 100644
index 0000000..5e82ac5
--- /dev/null
+++ b/.github/workflows/windows.yml
@@ -0,0 +1,87 @@
+name: Windows
+
+on:
+ workflow_dispatch:
+ push:
+ paths:
+ - 'src/**'
+ - '.github/workflows/windows.yml'
+ release:
+ types: [published]
+
+# A workflow run is made up of one or more jobs that can run sequentially or in parallel
+jobs:
+ build:
+ runs-on: windows-latest
+
+ env:
+ PROJECT_NAME: ${{ github.event.repository.name }}
+ PROJECT_BUILD_PATH: "${{ github.event.repository.name }}\\projects\\VS2022\\build\\${{ github.event.repository.name }}\\bin\\x64\\Release"
+ PROJECT_RELEASE_PATH: ${{ github.event.repository.name }}_dev_win_x64
+
+ steps:
+ - name: Checkout this repo
+ uses: actions/checkout@master
+ with:
+ path: ${{ env.PROJECT_NAME }}
+
+ - name: Checkout raylib repo
+ uses: actions/checkout@v3
+ with:
+ repository: raysan5/raylib
+ path: raylib
+
+ # NOTE: Visual Studio project build configuration already defines all required directories where project is generated:
+ # $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ - name: Setup Release Paths
+ run: |
+ echo "PROJECT_RELEASE_PATH=${{ env.PROJECT_NAME }}_v${{ github.event.release.tag_name }}_win_x64" >> $GITHUB_ENV
+ shell: bash
+ if: github.event_name == 'release' && github.event.action == 'published'
+
+ - name: Setup Environment
+ run: |
+ mkdir ${{ env.PROJECT_RELEASE_PATH }}
+ dir
+ shell: cmd
+
+ # Setup MSBuild.exe path if required
+ - name: Setup MSBuild path
+ uses: microsoft/setup-msbuild@v1.1
+
+ - name: Build raylib Library + Product (VS2022 solution)
+ run: |
+ dir
+ cd ${{ env.PROJECT_NAME }}/projects/VS2022
+ msbuild.exe ${{ env.PROJECT_NAME }}.sln /target:${{ env.PROJECT_NAME }} /property:Configuration=Release /property:Platform=x64
+ cd ../..
+ shell: cmd
+
+ - name: Generate Artifacts
+ run: |
+ dir ${{ env.PROJECT_BUILD_PATH }}
+ copy /Y ${{ env.PROJECT_BUILD_PATH }}\${{ env.PROJECT_NAME }}.exe ${{ env.PROJECT_RELEASE_PATH }}\${{ env.PROJECT_NAME }}.exe
+ copy /Y ${{ env.PROJECT_NAME }}\README.md ${{ env.PROJECT_RELEASE_PATH }}\README.md
+ copy /Y ${{ env.PROJECT_NAME }}\LICENSE ${{ env.PROJECT_RELEASE_PATH }}\LICENSE
+ dir ${{ env.PROJECT_RELEASE_PATH }}
+ 7z a .\${{ env.PROJECT_RELEASE_PATH }}.zip .\${{ env.PROJECT_RELEASE_PATH }}
+ shell: cmd
+
+ # Issue: Double zip: https://github.com/actions/upload-artifact/issues/39
+ - name: Upload Artifacts
+ uses: actions/upload-artifact@v3
+ with:
+ name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+
+ # Alternative: https://github.com/marketplace/actions/gh-release
+ - name: Upload Artifact to Release
+ uses: actions/upload-release-asset@v1.0.1
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ upload_url: ${{ github.event.release.upload_url }}
+ asset_name: ${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_path: ./${{ env.PROJECT_RELEASE_PATH }}.zip
+ asset_content_type: application/zip
+ if: github.event_name == 'release' && github.event.action == 'published'
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..2ad640d
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,64 @@
+# Prerequisites
+*.d
+
+# Object files
+*.o
+*.ko
+*.obj
+*.elf
+
+# Linker output
+*.ilk
+*.map
+*.exp
+
+# Precompiled Headers
+*.gch
+*.pch
+
+# Libraries
+*.lib
+*.a
+*.la
+*.lo
+
+# Shared objects (inc. Windows DLLs)
+*.dll
+*.so
+*.so.*
+*.dylib
+
+# Executables
+*.exe
+*.out
+*.app
+*.i*86
+*.x86_64
+*.hex
+
+# Debug files
+*.dSYM/
+*.su
+*.idb
+*.pdb
+
+# Kernel Module Compile Results
+*.mod*
+*.cmd
+.tmp_versions/
+modules.order
+Module.symvers
+Mkfile.old
+dkms.conf
+
+# Visual Studio files
+[Dd]ebug/
+[Dd]ebug.DLL/
+[R]elease/
+[Rr]elease.DLL/
+*.user
+*.aps
+.vs
+
+# Build folder
+[Bb]uild
diff --git a/CONVENTIONS.md b/CONVENTIONS.md
new file mode 100644
index 0000000..17b290c
--- /dev/null
+++ b/CONVENTIONS.md
@@ -0,0 +1,89 @@
+## C Coding Style Conventions
+
+Code element | Convention | Example
+--- | :---: | ---
+Defines | ALL_CAPS | `#define PLATFORM_DESKTOP`
+Macros | ALL_CAPS | `#define MIN(a,b) (((a)<(b))?(a):(b))`
+Variables | lowerCase | `int screenWidth = 0;`, `float targetFrameTime = 0.016f;`
+Local variables | lowerCase | `Vector2 playerPosition = { 0 };`
+Global variables | lowerCase | `bool fullscreen = false;`
+Constants | lowerCase | `const int maxValue = 8;`
+Pointers | MyType *pointer | `Texture2D *array = NULL;`
+float values | always x.xf | `float gravity = 10.0f`
+Operators | value1*value2 | `int product = value*6;`
+Operators | value1/value2 | `int division = value/4;`
+Operators | value1 + value2 | `int sum = value + 10;`
+Operators | value1 - value2 | `int res = value - 5;`
+Enum | TitleCase | `enum TextureFormat`
+Enum members | ALL_CAPS | `PIXELFORMAT_UNCOMPRESSED_R8G8B8`
+Struct | TitleCase | `struct Texture2D`, `struct Material`
+Struct typedef | TitleCase | `typedef struct Texture { ... } Texture;`
+Struct members | lowerCase | `texture.width`, `color.r`
+Functions | TitleCase | `InitWindow()`, `LoadImageFromMemory()`
+Functions params | lowerCase | `width`, `height`
+Ternary Operator | (condition)? result1 : result2 | `printf("Value is 0: %s", (value == 0)? "yes" : "no");`
+
+Other conventions:
+ - All defined variables are ALWAYS initialized
+ - Four spaces are used, instead of TABS
+ - Trailing spaces are always avoided
+ - Control flow statements are followed **by a space**:
+```c
+if (condition) value = 0;
+
+while (!WindowShouldClose())
+{
+
+}
+
+for (int i = 0; i < NUM_VALUES; i++) printf("%i", i);
+
+switch (value)
+{
+ case 0:
+ {
+
+ } break;
+ case 2: break;
+ default: break;
+}
+```
+ - All conditions are always between parenthesis, but not boolean values:
+```c
+if ((value > 1) && (value < 50) && valueActive)
+{
+
+}
+```
+ - Braces and curly brackets always open-close in aligned mode:
+```c
+void SomeFunction()
+{
+ // TODO: Do something here!
+}
+```
+
+## Files and Directories Naming Conventions
+
+ - Directories are named using `snake_case`: `resources/models`, `resources/fonts`
+ - Files are named using `snake_case`: `main_title.png`, `cubicmap.png`, `sound.wav`
+
+_NOTE: Spaces and special characters are always avoided in the files/dir naming!_
+
+## Games/Examples Directories Organization Conventions
+
+ - Resource files are organized by context and usage in the game. Loading requirements for data are also considered (grouping data when required).
+ - Descriptive names are used for the files, just reading the name of the file it should be possible to know what is that file and where fits in the game.
+
+```
+resources/audio/fx/long_jump.wav
+resources/audio/music/main_theme.ogg
+resources/screens/logo/logo.png
+resources/screens/title/title.png
+resources/screens/gameplay/background.png
+resources/characters/player.png
+resources/characters/enemy_slime.png
+resources/common/font_arial.ttf
+resources/common/gui.png
+```
+_NOTE: Some resources require to be loaded all at once while other require to be loaded only at initialization (gui, font)._
diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..e6803d2
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,16 @@
+Copyright (c) 2021-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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..03a8549
--- /dev/null
+++ b/README.md
@@ -0,0 +1,70 @@
+-----------------------------------
+
+_DISCLAIMER:_
+
+Welcome to the **raylib gamejam template**!
+
+This template provides a base structure to start developing a small raylib game in plain C for any of the proposed **raylib gamejams**!
+
+Please, considering the following usual gamejam restrictions:
+
+ - Game must be made with raylib
+ - Game must be compiled for web
+ - _Specific gamejam restrictions if defined_
+
+NOTE: Several GitHub Actions workflows have been preconfigured to automatically build your game for Windows, Linux and WebAssembly on each commit. Those workflows automatically sync with latest version of raylib available to build.
+
+The repo is also pre-configured with a default `LICENSE` (zlib/libpng) and a `README.md` (this one) to be properly filled by users. Feel free to change the LICENSE as required.
+
+All the sections defined by `$(Data to Fill)` are expected to be edited and filled properly. It's recommended to delete this disclaimer message after editing this `README.md` file.
+
+This template has been created to be used with raylib (www.raylib.com) and it's licensed under an unmodified zlib/libpng license.
+
+_Copyright (c) 2022-2023 Ramon Santamaria ([@raysan5](https://twitter.com/raysan5))_
+
+-----------------------------------
+
+## $(Game Title)
+
+![$(Game Title)](screenshots/screenshot000.png "$(Game Title)")
+
+### Description
+
+$(Your Game Description)
+
+### Features
+
+ - $(Game Feature 01)
+ - $(Game Feature 02)
+ - $(Game Feature 03)
+
+### Controls
+
+Keyboard:
+ - $(Game Control 01)
+ - $(Game Control 02)
+ - $(Game Control 03)
+
+### Screenshots
+
+_TODO: Show your game to the world, animated GIFs recommended!._
+
+### Developers
+
+ - $(Developer 01) - $(Role/Tasks Developed)
+ - $(Developer 02) - $(Role/Tasks Developed)
+ - $(Developer 03) - $(Role/Tasks Developed)
+
+### Links
+
+ - YouTube Gameplay: $(YouTube Link)
+ - itch.io Release: $(itch.io Game Page)
+ - Steam Release: $(Steam Game Page)
+
+### License
+
+This game sources are licensed under an unmodified zlib/libpng license, which is an OSI-certified, BSD-like license that allows static linking with closed source software. Check [LICENSE](LICENSE) for further details.
+
+$(Additional Licenses)
+
+*Copyright (c) $(Year) $(User Name) ($(User Twitter/GitHub Name))*
diff --git a/projects/VS2022/raylib-game.sln b/projects/VS2022/raylib-game.sln
new file mode 100644
index 0000000..84cee94
--- /dev/null
+++ b/projects/VS2022/raylib-game.sln
@@ -0,0 +1,61 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 17
+VisualStudioVersion = 17.0.31912.275
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raylib", "raylib\raylib.vcxproj", "{E89D61AC-55DE-4482-AFD4-DF7242EBC859}"
+EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "raylib_game", "raylib_game\raylib_game.vcxproj", "{0981CA98-E4A5-4DF1-987F-A41D09131EFC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug.DLL|x64 = Debug.DLL|x64
+ Debug.DLL|x86 = Debug.DLL|x86
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release.DLL|x64 = Release.DLL|x64
+ Release.DLL|x86 = Release.DLL|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x64.Build.0 = Debug.DLL|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x64.ActiveCfg = Debug|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x64.Build.0 = Debug|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x86.ActiveCfg = Debug|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Debug|x86.Build.0 = Debug|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.ActiveCfg = Release.DLL|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x64.Build.0 = Release.DLL|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release.DLL|x86.Build.0 = Release.DLL|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x64.ActiveCfg = Release|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x64.Build.0 = Release|x64
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x86.ActiveCfg = Release|Win32
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}.Release|x86.Build.0 = Release|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x64.ActiveCfg = Debug.DLL|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x64.Build.0 = Debug.DLL|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x86.ActiveCfg = Debug.DLL|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug.DLL|x86.Build.0 = Debug.DLL|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x64.ActiveCfg = Debug|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x64.Build.0 = Debug|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x86.ActiveCfg = Debug|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Debug|x86.Build.0 = Debug|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x64.ActiveCfg = Release.DLL|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x64.Build.0 = Release.DLL|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x86.ActiveCfg = Release.DLL|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release.DLL|x86.Build.0 = Release.DLL|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x64.ActiveCfg = Release|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x64.Build.0 = Release|x64
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x86.ActiveCfg = Release|Win32
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {E926C768-6307-4423-A1EC-57E95B1FAB29}
+ EndGlobalSection
+EndGlobal
diff --git a/projects/VS2022/raylib/raylib.vcxproj b/projects/VS2022/raylib/raylib.vcxproj
new file mode 100644
index 0000000..492eb1d
--- /dev/null
+++ b/projects/VS2022/raylib/raylib.vcxproj
@@ -0,0 +1,342 @@
+
+
+
+
+ Debug.DLL
+ Win32
+
+
+ Debug.DLL
+ x64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release.DLL
+ Win32
+
+
+ Release.DLL
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {E89D61AC-55DE-4482-AFD4-DF7242EBC859}
+ Win32Proj
+ raylib
+ 10.0
+
+
+
+ StaticLibrary
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ StaticLibrary
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ DynamicLibrary
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ DynamicLibrary
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ StaticLibrary
+ false
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ StaticLibrary
+ false
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ DynamicLibrary
+ false
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ DynamicLibrary
+ false
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+
+
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP
+ CompileAsC
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+
+
+ Windows
+
+
+ %(AdditionalLibraryDirectories)
+
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP
+ CompileAsC
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+
+
+ Windows
+
+
+ %(AdditionalLibraryDirectories)
+
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED
+ CompileAsC
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+ MultiThreadedDebug
+
+
+ Windows
+ kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+ %(AdditionalLibraryDirectories)
+
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;_DEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED
+ CompileAsC
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+ MultiThreadedDebug
+
+
+ Windows
+ kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+ %(AdditionalLibraryDirectories)
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+ CompileAsC
+ MultiThreaded
+
+
+ Windows
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+ CompileAsC
+
+ MultiThreaded
+
+
+ Windows
+ true
+ true
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+ CompileAsC
+ MultiThreaded
+
+
+ Windows
+ true
+ true
+ kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_DEPRECATE;WIN32;NDEBUG;_LIB;%(PreprocessorDefinitions);GRAPHICS_API_OPENGL_33;PLATFORM_DESKTOP;BUILD_LIBTYPE_SHARED
+ $(ProjectDir)..\..\..\..\raylib\src\external\glfw\include
+ CompileAsC
+ MultiThreaded
+
+
+
+ Windows
+ true
+ true
+ kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/projects/VS2022/raylib_game/raylib_game.vcxproj b/projects/VS2022/raylib_game/raylib_game.vcxproj
new file mode 100644
index 0000000..3e7536c
--- /dev/null
+++ b/projects/VS2022/raylib_game/raylib_game.vcxproj
@@ -0,0 +1,362 @@
+
+
+
+
+ Debug.DLL
+ Win32
+
+
+ Debug.DLL
+ x64
+
+
+ Debug
+ Win32
+
+
+ Debug
+ x64
+
+
+ Release.DLL
+ Win32
+
+
+ Release.DLL
+ x64
+
+
+ Release
+ Win32
+
+
+ Release
+ x64
+
+
+
+ {0981CA98-E4A5-4DF1-987F-A41D09131EFC}
+ Win32Proj
+ raylib_game
+ raylib_game
+ 10.0
+
+
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ Application
+ true
+ $(DefaultPlatformToolset)
+ Unicode
+
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
+
+ Application
+ false
+ $(DefaultPlatformToolset)
+ true
+ Unicode
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ true
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ true
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ true
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ true
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ false
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ false
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ false
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+ false
+ $(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)\
+ $(SolutionDir)\build\$(ProjectName)\obj\$(Platform)\$(Configuration)\
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ CompileAsC
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ CompileAsC
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+ /FS %(AdditionalOptions)
+
+
+ Console
+ true
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ CompileAsC
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+ xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
+ Copy Debug DLL to output directory
+
+
+
+
+
+
+ Level3
+ Disabled
+ _CRT_SECURE_NO_WARNINGS;WIN32;_DEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ CompileAsC
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+
+
+ Console
+ true
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+
+
+ xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
+ Copy Debug DLL to output directory
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+ CompileAsC
+ true
+ MultiThreaded
+ Speed
+
+
+ Console
+ true
+ true
+ true
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+ CompileAsC
+ true
+ MultiThreaded
+ Speed
+
+
+ Console
+ true
+ true
+ true
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+ CompileAsC
+ true
+
+
+ Console
+ true
+ true
+ true
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+
+
+ xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
+
+
+ Copy Release DLL to output directory
+
+
+
+
+ Level3
+
+
+ MaxSpeed
+ true
+ true
+ _CRT_SECURE_NO_WARNINGS;WIN32;NDEBUG;_CONSOLE;PLATFORM_DESKTOP;%(PreprocessorDefinitions)
+ $(SolutionDir)..\..\src;$(SolutionDir)..\..\src\external;$(SolutionDir)..\..\..\raylib\src;%(AdditionalIncludeDirectories)
+ CompileAsC
+ true
+
+
+ Console
+ true
+ true
+ true
+ raylib.lib;opengl32.lib;kernel32.lib;user32.lib;gdi32.lib;winmm.lib;winspool.lib;comdlg32.lib;advapi32.lib;shell32.lib;ole32.lib;oleaut32.lib;uuid.lib;odbc32.lib;odbccp32.lib;%(AdditionalDependencies)
+ $(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\
+
+
+ xcopy /y /d "$(SolutionDir)\build\raylib\bin\$(Platform)\$(Configuration)\raylib.dll" "$(SolutionDir)\build\$(ProjectName)\bin\$(Platform)\$(Configuration)"
+
+
+ Copy Release DLL to output directory
+
+
+
+
+ {e89d61ac-55de-4482-afd4-df7242ebc859}
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/screenshots/screenshot000.png b/screenshots/screenshot000.png
new file mode 100644
index 0000000000000000000000000000000000000000..ce3205bd7583b0b66ad50d967f4bf68855962832
GIT binary patch
literal 7707
zcmeHMdpwkB`+uG>G2_(CNGmx^<+QR=2&D|QBodo!q+*i_X`)!QW}cAMSw}fkv+GTo
zuueHFHB*v9VM{{9kg`ioNh`@J|XslZH#lVBJp`rrvJ9+S>K|=Wkvt4q9Ll!Et#VZCUZy
zy(@58RIl64GYc9m9(df|()`m}d!vDYD~)%%=Cjz#U(e(O#68?0f+!efKlzf0uADfG
zhOXWeHo8R733OrTU=+A;F8#ZQ4Ylcu#>U3p<)SYnT3fen4LtawHgw`zQ(jm$y4UYD
zdZ%^F!;ZjVz;?u_a3PFv26}dn%0U;J688DwXAnL!;d42FCS0)u)gj7;$45r$`S0t?
zew3k!*S+~K>&BtCG>J-0P0elVJ)nkW`J4EYRrU38A7E;yhl(7Pz{Jk<-U=6Y{@o!N
z3=Vzek5IE-x)EOAPA51vZ&|TNcfq=`P88Qe0sb}Cc+L(>-V@E43I4NrMQF|V)0*%OOZNpU6R#}iE?kazTeQY3$_O#l@1BWa
zUI!7T+O0y&^kHfUd1o=Y)B5V#>DMeqAC76Y^J$fUS%lGTZ$L`UX~Q7fLDQO~^LG;ReV6*vykoap~410^(jW6wV
z&8t&?RbN(izHju;?wg%?l3;#E@%a8Xr^kxIYtlY6S7n*DFJ~6WEXUf|`DIpkM^-|o
zP~953zC;ygL~kBv#rkXvrk9%}pOwWiVu(g?eJST%yi;H^yfp|N!KFyVS)+uH*f4$m
zg3Z}DLTkN429F+d15&){Bv8j*xt1X~hM1J824GNA%ihjC0nw5!U^FJhb#F>SniZtt
zF%_6ya@H|>BG(3ns}QQj;zFYafyM`y$FLSGLkaUP7&lxLp1Y^VdYy^Tmk6P1z`B>=
zjOu_PtS;b)Jw*>d4Wko`tU0qbI9^cy9_C425k}>n=wUg|9o1H8I~$p>%eAR%LuuqV
zFMNn0?wk=UpQ$#5hUnQltVfi3mLRIQ3$W3+e%8@m^uen+ZOaH(Su_7AYI
zS8FZu=H}S{)|(ESmDd4o|n!f@e^x90IUN=h4>~b9zcq3C5BE
zH3VnVGs80Kc5i`A53;a%_ohC9g{yI}s8_=Z#qF-{d>DEz!0vGk@pxZn%6SAXje&Wa
z#}SUJ2z{qdb(#O0YMmCk|n)i2W$&l$eh}BiEqVj>1)dH
z+!Jb&TQpE(^G_UNxYYd#s652ZkfZ?V(phgVfG<>8hebtdZNA{PU8wQFJ_{AJ;y?#e
zycjCFX-7hK8!LAAmAiTG1-`0v-aOHrk@lhHy9Y&)+cY(GT2=A#EGb5GPWo=uiYh-~
z&@`caO3PRRM^F>7I}mT+_5wk_-Y4~V=swPh_O07TodZz$L$wDEy6v3vG*Ia4odewc
zDEyNKOLJ6{kRZJR2|Qy-NeDQCvWCQ!aYo+xrlz$Mi-XbzC17EQFP>63?J0(?CK7hI
zh9IcYY(Y}r7ZtyI>^9T60s{r(L}0X?I-D7HuV~rVU~F^|p!GNspRnCk>6(qm8sJ||
zBg6+Frm&=t3LtrzfD8oFW2{#Mxf*R<3@O=!?_jT)0%+oL~ymb-$ncaS-2$~p2%o6>45*9)H
z1f1D4KKpsQBgt$vYsgDLX{fNy3vtMCJq(*$^b_I;gOxWnA?{z-h8zo@m;|^1J=jne
zF)sufmA<#w=O7$xfN`cc%9@}*zYQIUxC=^B-PP%lxN&Db%5i}WYBX^K&Do9YeM#ql
zeLbOJezQaE{e@ndP*;A04V&h4qIkVyhZ(8q?7G
z_bTY=@Ff#kMY-D#*F6-FLWtj?VNd#ZKdXB=buXzHF^1h>^>o6hnHLwQQ#QGa;<`@=
zw=RMb#A{2r<_H@N=pgmO2v^Vr7RExjHgh#C(t{7wyi>99J%0DX9!dFUog5J@MvvFXE3
zTPWYT{uKz2!diL#LiZ<%NYLt#q1m&pc1@nmpEH04i0riM2Q>XRA4(w=Pe}>XllhxO
zfJT@i$g8y{Wr-aAl$4y~(608;*KnOFsR(-{=SVeR4tNG@@%
zd33bsN10*6cUyM#;sx=r^Lby!->_&{2&qH4^6X?Wl9wd~*FmskNH%y02JUy!rEmsl
zhLe8jM&``I6M}^w`v{lvD#v)&w%~q
zT|!sXV@Mb=V}&>Zq5%pv_XC}0?vMd7!ggw7HmjF#_W0MhoUOOOSJ01Xs9bU62tZ-TZ#V9?(Uz@3880FCp~`WHu~
z<}>J|`&eF3L>84Y>{=^~zUE2S@_x6;G2nli9SA_k%d1D^B9DKPZE(1xiV{{#)O6)Z
zof$g{JI?yHDwVV(7c9f5M$bdCMcuhXn_Ws;p;I8d6$=CvZhEL`kvg1cJ?H5x
zlDc4iB)`58oaowBy%AtRU6i}|ZMrNd7W&v+7evQDMHZJu&O(wzazNuDN!@?7QRd~Z
zFFOIR$x`wl4Pp=OThuUPXie*wx9BS~A^-cZun+ZCqhn*1?`kGG`XKj`PGrZScbHgA
z*yXr`gP+1ZOfDT<1Ef~G22xu<{fF5G6c@AWp9`4`<2BY4KKnV0my!8l?uq2vBGDn5
zl2u%Oe*U|`v8I8O6QgO59~hhR{i};66-Q3tcaXG$5-qzi;K1Rv_kIz!>j(txKRxnL>FqD<9b3n1gYdtBHl6Cv(
z8VvP3H<&IS<9AHHgO%wZWlv~)E*4t^5?eqbfz(3HRCCEhGwb~wJ81KpgC;$=E
ziso^Ke1#QgmB?_BonxAeC`*M@pFHc6zm~t8TvppUdhWP$waHRon{p%mu`81{gv84{
zr$e#WA;>xKr<1&i^Dk}`BYqKmDWZ4p-}`2#nX(@#LZjMB`B^xlr$ry8_k!97F=%TT
z(iNk|caQ0XI_kZ`dz;n5|G2+x{I=9-wpG{JlUK)X=T9`+RcXTxCdmUiWTpXiQx0;Y
zgFdEqoODskH$Z%IV-TFBkzMwI7x&XabHmbhDx)da5Z62k
znmL_Y%awa;qN$wD0CK_+E4r!g?URmS%{@b{UIEj@0&IllQ!bAoN$yrieRtlm%P2wO*vM$#f%7==9gEbiFaX9|W>#>T
z)eTsLSFY}9>{Qkk-o>R?u3lZS8nz+fnwcF3l0M99+)k};*68OY$m&imIV>3&9T{0d
z&x{2j5{(3dRBLEp+)JO_DAP-2l6ial+U9+(6Q`qglhRKI6V!NT7>;AU#v4~6BL{gw
z0wd5^2Gqi&m7wj1aH^K*Z$#pF3pKJjexxH-ikMC+bkoUW7LY4&sMZ)&rE;&4Dw3v6
z6n3nHmhD37)Kz44sstKq(eEyV6^ePY)uubQ!@$!9!epW|xWAieoY5ve34sN??|XAH
zGXc&lh
NQ&L|n(`ta3t&~?awv2PQY!NIma^fIk+*;qM%2P#1+M?~pTIMFf(qZ{
z7xxbi4rcF3)P>&-Fl=UC-{>p&OR0a3BX<3Ne&_$U{|WHs#Qy
+
+
+
+ CFBundleDevelopmentRegion
+ en
+ CFBundleExecutable
+ gamejam_template
+ CFBundleIconFile
+ raylib.icns
+ CFBundleIdentifier
+ com.raylibtech.gamejam_template
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ gamejam_template
+ CFBundlePackageType
+ APPL
+ CFBundleVersion
+ 1.0
+ CFBundleShortVersionString
+ 1.0.0
+ LSMinimumSystemVersion
+ 10.12
+ NSHumanReadableCopyright
+ Copyright (c) 2023 raylib technologies (@raylibtech)
+ CFBundleSignature
+ ????
+
+
diff --git a/src/Makefile b/src/Makefile
new file mode 100644
index 0000000..e7d416e
--- /dev/null
+++ b/src/Makefile
@@ -0,0 +1,344 @@
+#**************************************************************************************************
+#
+# raylib makefile for Desktop platforms, Raspberry Pi and Web Assembly
+#
+# Copyright (c) 2013-2023 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 environment variables
+#------------------------------------------------------------------------------------------------
+# Define target platform: PLATFORM_DESKTOP, PLATFORM_WEB, PLATFORM_DRM
+PLATFORM ?= PLATFORM_DESKTOP
+
+# Define project variables
+PROJECT_NAME ?= raylib_game
+PROJECT_VERSION ?= 1.0
+PROJECT_BUILD_PATH ?= .
+
+RAYLIB_PATH ?= ../../raylib
+RAYLIB_INCLUDE_PATH ?= $(RAYLIB_PATH)/src
+RAYLIB_LIB_PATH ?= $(RAYLIB_PATH)/src
+
+# Build mode for project: DEBUG or RELEASE
+BUILD_MODE ?= DEBUG
+
+# PLATFORM_WEB: Default properties
+BUILD_WEB_ASYNCIFY ?= FALSE
+BUILD_WEB_SHELL ?= minshell.html
+BUILD_WEB_HEAP_SIZE ?= 128MB
+BUILD_WEB_RESOURCES ?= TRUE
+BUILD_WEB_RESOURCES_PATH ?= resources
+
+# 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_DRM)
+ UNAMEOS = $(shell uname)
+ ifeq ($(UNAMEOS),Linux)
+ PLATFORM_OS = LINUX
+ endif
+endif
+
+ifeq ($(PLATFORM),PLATFORM_WEB)
+ # Emscripten required variables
+ EMSDK_PATH ?= C:/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.15.5_64bit/bin
+ export PATH = $(EMSDK_PATH);$(EMSCRIPTEN_PATH);$(CLANG_PATH);$(NODE_PATH);$(PYTHON_PATH):$$(PATH)
+endif
+
+# Define default C compiler: CC
+#------------------------------------------------------------------------------------------------
+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_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
+ifeq ($(PLATFORM),PLATFORM_DRM)
+ 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
+
+
+# Define default make program: MAKE
+#------------------------------------------------------------------------------------------------
+MAKE ?= make
+
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),WINDOWS)
+ MAKE = mingw32-make
+ endif
+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 = -Wall -std=c99 -D_DEFAULT_SOURCE -Wno-missing-braces -Wunused-result
+
+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
+ ifeq ($(PLATFORM_OS),OSX)
+ CFLAGS += -O2
+ else
+ CFLAGS += -s -O2
+ endif
+ endif
+endif
+ifeq ($(PLATFORM),PLATFORM_DRM)
+ CFLAGS += -std=gnu99 -DEGL_NO_X11
+endif
+
+# Define include paths for required headers: INCLUDE_PATHS
+#------------------------------------------------------------------------------------------------
+INCLUDE_PATHS = -I. -I$(RAYLIB_PATH)/src -I$(RAYLIB_PATH)/src/external
+
+# Define additional directories containing required header files
+ifeq ($(PLATFORM),PLATFORM_DRM)
+ # DRM required libraries
+ INCLUDE_PATHS += -I/usr/include/libdrm
+endif
+ifeq ($(PLATFORM),PLATFORM_DESKTOP)
+ ifeq ($(PLATFORM_OS),BSD)
+ # Consider -L$(RAYLIB_H_INSTALL_PATH)
+ INCLUDE_PATHS += -I/usr/local/include
+ endif
+endif
+
+# Define library paths containing required libs: LDFLAGS
+#------------------------------------------------------------------------------------------------
+LDFLAGS = -L. -L$(RAYLIB_LIB_PATH)
+
+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 += -Lsrc -L/usr/local/lib
+ endif
+ ifeq ($(PLATFORM_OS),LINUX)
+ # Reset everything.
+ # Precedence: immediately local, installed version, raysan5 provided libs
+ #LDFLAGS += -L$(RAYLIB_RELEASE_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
+
+ # Define a custom shell .html and output extension
+ LDFLAGS += --shell-file $(BUILD_WEB_SHELL)
+ EXT = .html
+endif
+
+# Define libraries required on linking: LDLIBS
+# NOTE: To link libraries (lib.so or lib.a), use -l
+#------------------------------------------------------------------------------------------------
+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 -lcomdlg32 -lole32
+ # 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 Wayland windowing system, additional libraries requires
+ ifeq ($(USE_WAYLAND_DISPLAY),TRUE)
+ LDLIBS += -lwayland-client -lwayland-cursor -lwayland-egl -lxkbcommon
+ else
+ # 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
+ 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_WEB)
+ # Libraries for web (HTML5) compiling
+ LDLIBS = $(RAYLIB_LIB_PATH)/libraylib.a
+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
+
+
+# Define source code files required
+#------------------------------------------------------------------------------------------------
+PROJECT_SOURCE_FILES ?= raylib_game.c
+
+# Define all object files from source files
+OBJS = $(patsubst %.c, %.o, $(PROJECT_SOURCE_FILES))
+
+# Define processes to execute
+#------------------------------------------------------------------------------------------------
+# Default target entry
+# NOTE: We call this Makefile target or Makefile.Android target
+all:
+ $(MAKE) $(PROJECT_NAME)
+
+# Project target defined by PROJECT_NAME
+$(PROJECT_NAME): $(OBJS)
+ $(CC) -o $(PROJECT_BUILD_PATH)/$(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 *.o
+ endif
+ ifeq ($(PLATFORM_OS),OSX)
+ rm -f *.o external/*.o $(PROJECT_NAME)
+ endif
+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
+
diff --git a/src/Makefile.Android b/src/Makefile.Android
new file mode 100644
index 0000000..370be9d
--- /dev/null
+++ b/src/Makefile.Android
@@ -0,0 +1,321 @@
+#**************************************************************************************************
+#
+# raylib makefile for Android project (APK building)
+#
+# Copyright (c) 2017-2023 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.
+#
+#**************************************************************************************************
+
+SHELL=cmd
+
+# Define required raylib variables
+PLATFORM ?= PLATFORM_ANDROID
+RAYLIB_PATH ?= C:\GitHub\raylib
+
+# Define Android architecture (armeabi-v7a, arm64-v8a, x86, x86-64) and API version
+# Starting in 2019 using ARM64 is mandatory for published apps,
+# Starting on August 2020, minimum required target API is Android 10 (API level 29)
+ANDROID_ARCH ?= ARM64
+ANDROID_API_VERSION = 29
+
+ifeq ($(ANDROID_ARCH),ARM)
+ ANDROID_ARCH_NAME = armeabi-v7a
+endif
+ifeq ($(ANDROID_ARCH),ARM64)
+ ANDROID_ARCH_NAME = arm64-v8a
+endif
+ifeq ($(ANDROID_ARCH),x86)
+ ANDROID_ARCH_NAME = i686
+endif
+ifeq ($(ANDROID_ARCH),x86_64)
+ ANDROID_ARCH_NAME = x86_64
+endif
+
+# Required path variables
+# NOTE: JAVA_HOME must be set to JDK (using OpenJDK 13)
+JAVA_HOME ?= C:/open-jdk
+ANDROID_HOME ?= C:/android-sdk
+ANDROID_NDK ?= C:/android-ndk
+ANDROID_TOOLCHAIN ?= $(ANDROID_NDK)/toolchains/llvm/prebuilt/windows-x86_64
+ANDROID_BUILD_TOOLS ?= $(ANDROID_HOME)/build-tools/29.0.3
+ANDROID_PLATFORM_TOOLS = $(ANDROID_HOME)/platform-tools
+
+# Android project configuration variables
+PROJECT_NAME ?= raylib_game
+PROJECT_LIBRARY_NAME ?= main
+PROJECT_BUILD_ID ?= android
+PROJECT_BUILD_PATH ?= $(PROJECT_BUILD_ID).$(PROJECT_NAME)
+PROJECT_RESOURCES_PATH ?= resources
+PROJECT_SOURCE_FILES ?= simple_game.c
+NATIVE_APP_GLUE_PATH = $(ANDROID_NDK)/sources/android/native_app_glue
+
+# 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
+ifeq ($(ANDROID_ARCH),ARM)
+ CC = $(ANDROID_TOOLCHAIN)/bin/armv7a-linux-androideabi$(ANDROID_API_VERSION)-clang
+ AR = $(ANDROID_TOOLCHAIN)/bin/arm-linux-androideabi-ar
+endif
+ifeq ($(ANDROID_ARCH),ARM64)
+ CC = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android$(ANDROID_API_VERSION)-clang
+ AR = $(ANDROID_TOOLCHAIN)/bin/aarch64-linux-android-ar
+endif
+ifeq ($(ANDROID_ARCH),x86)
+ CC = $(ANDROID_TOOLCHAIN)/bin/i686-linux-android$(ANDROID_API_VERSION)-clang
+ AR = $(ANDROID_TOOLCHAIN)/bin/i686-linux-android-ar
+endif
+ifeq ($(ANDROID_ARCH),x86_64)
+ CC = $(ANDROID_TOOLCHAIN)/bin/x86_64-linux-android$(ANDROID_API_VERSION)-clang
+ AR = $(ANDROID_TOOLCHAIN)/bin/x86_64-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$(NATIVE_APP_GLUE_PATH)
+
+# 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 ^ > $(PROJECT_BUILD_PATH)/res/values/strings.xml
+ @echo ^^$(APP_LABEL_NAME)^^ >> $(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 ^ > $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^> $(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 ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^> $(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 ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(PROJECT_BUILD_PATH)/AndroidManifest.xml
+ @echo ^ >> $(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 10000 -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 $(NATIVE_APP_GLUE_PATH)/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 $(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 $(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
diff --git a/src/minshell.html b/src/minshell.html
new file mode 100644
index 0000000..38f3672
--- /dev/null
+++ b/src/minshell.html
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+ raylib web game
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{{ SCRIPT }}}
+
+
diff --git a/src/raylib.icns b/src/raylib.icns
new file mode 100644
index 0000000000000000000000000000000000000000..5adad08cb88e692d188c7ef638473f5c98c51837
GIT binary patch
literal 12242
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
HeT4i!*pH{L
literal 0
HcmV?d00001
diff --git a/src/raylib.ico b/src/raylib.ico
new file mode 100644
index 0000000000000000000000000000000000000000..0cedcc55cee7da0e5784256078a93f2901e5d734
GIT binary patch
literal 9752
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
AR{#J2
literal 0
HcmV?d00001
diff --git a/src/raylib_game.c b/src/raylib_game.c
new file mode 100644
index 0000000..a3cf651
--- /dev/null
+++ b/src/raylib_game.c
@@ -0,0 +1,143 @@
+/*******************************************************************************************
+*
+* raylib gamejam template
+*
+* Template originally created with raylib 4.5-dev, last time updated with raylib 5.0
+*
+* Template licensed under an unmodified zlib/libpng license, which is an OSI-certified,
+* BSD-like license that allows static linking with closed source software
+*
+* Copyright (c) 2022-2023 Ramon Santamaria (@raysan5)
+*
+********************************************************************************************/
+
+#include "raylib.h"
+
+#if defined(PLATFORM_WEB)
+ #define CUSTOM_MODAL_DIALOGS // Force custom modal dialogs usage
+ #include // Emscripten library - LLVM to JavaScript compiler
+#endif
+
+#include // Required for: printf()
+#include // Required for:
+#include // Required for:
+
+//----------------------------------------------------------------------------------
+// Defines and Macros
+//----------------------------------------------------------------------------------
+// Simple log system to avoid printf() calls if required
+// NOTE: Avoiding those calls, also avoids const strings memory usage
+#define SUPPORT_LOG_INFO
+#if defined(SUPPORT_LOG_INFO)
+ #define LOG(...) printf(__VA_ARGS__)
+#else
+ #define LOG(...)
+#endif
+
+//----------------------------------------------------------------------------------
+// Types and Structures Definition
+//----------------------------------------------------------------------------------
+typedef enum {
+ SCREEN_LOGO = 0,
+ SCREEN_TITLE,
+ SCREEN_GAMEPLAY,
+ SCREEN_ENDING
+} GameScreen;
+
+// TODO: Define your custom data types here
+
+//----------------------------------------------------------------------------------
+// Global Variables Definition
+//----------------------------------------------------------------------------------
+static const int screenWidth = 1280;
+static const int screenHeight = 720;
+
+static RenderTexture2D target = { 0 }; // Render texture to render our game
+
+// TODO: Define global variables here, recommended to make them static
+
+//----------------------------------------------------------------------------------
+// Module Functions Declaration
+//----------------------------------------------------------------------------------
+static void UpdateDrawFrame(void); // Update and Draw one frame
+
+//------------------------------------------------------------------------------------
+// Program main entry point
+//------------------------------------------------------------------------------------
+int main(void)
+{
+#if !defined(_DEBUG)
+ SetTraceLogLevel(LOG_NONE); // Disable raylib trace log messsages
+#endif
+
+ // Initialization
+ //--------------------------------------------------------------------------------------
+ InitWindow(screenWidth, screenHeight, "raylib gamejam template");
+
+ // TODO: Load resources / Initialize variables at this point
+
+ // Render texture to draw full screen, enables screen scaling
+ // NOTE: If screen is scaled, mouse input should be scaled proportionally
+ target = LoadRenderTexture(screenWidth, screenHeight);
+ SetTextureFilter(target.texture, TEXTURE_FILTER_BILINEAR);
+
+#if defined(PLATFORM_WEB)
+ emscripten_set_main_loop(UpdateDrawFrame, 60, 1);
+#else
+ SetTargetFPS(60); // Set our game frames-per-second
+ //--------------------------------------------------------------------------------------
+
+ // Main game loop
+ while (!WindowShouldClose()) // Detect window close button
+ {
+ UpdateDrawFrame();
+ }
+#endif
+
+ // De-Initialization
+ //--------------------------------------------------------------------------------------
+ UnloadRenderTexture(target);
+
+ // TODO: Unload all loaded resources at this point
+
+ CloseWindow(); // Close window and OpenGL context
+ //--------------------------------------------------------------------------------------
+
+ return 0;
+}
+
+//--------------------------------------------------------------------------------------------
+// Module functions definition
+//--------------------------------------------------------------------------------------------
+// Update and draw frame
+void UpdateDrawFrame(void)
+{
+ // Update
+ //----------------------------------------------------------------------------------
+ // TODO: Update variables / Implement example logic at this point
+ //----------------------------------------------------------------------------------
+
+ // Draw
+ //----------------------------------------------------------------------------------
+ // Render game screen to a texture,
+ // it could be useful for scaling or further sahder postprocessing
+ BeginTextureMode(target);
+ ClearBackground(RAYWHITE);
+
+ // TODO: Draw your game screen here
+ DrawRectangle(10, 10, screenWidth - 20, screenHeight - 20, SKYBLUE);
+
+ EndTextureMode();
+
+ // Render to screen (main framebuffer)
+ BeginDrawing();
+ ClearBackground(RAYWHITE);
+
+ // Draw render texture to screen, scaled if required
+ DrawTexturePro(target.texture, (Rectangle){ 0, 0, (float)target.texture.width, -(float)target.texture.height }, (Rectangle){ 0, 0, (float)target.texture.width, (float)target.texture.height }, (Vector2){ 0, 0 }, 0.0f, WHITE);
+
+ // TODO: Draw everything that requires to be drawn at this point, maybe UI?
+
+ EndDrawing();
+ //----------------------------------------------------------------------------------
+}
\ No newline at end of file
diff --git a/src/raylib_game.rc b/src/raylib_game.rc
new file mode 100644
index 0000000..5e0caa8
--- /dev/null
+++ b/src/raylib_game.rc
@@ -0,0 +1,27 @@
+GLFW_ICON ICON "raylib.ico"
+
+1 VERSIONINFO
+FILEVERSION 1,0,0,0
+PRODUCTVERSION 1,0,0,0
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ //BLOCK "080904E4" // English UK
+ BLOCK "040904E4" // English US
+ BEGIN
+ VALUE "CompanyName", "raylib technologies"
+ VALUE "FileDescription", "raylib gamejam template"
+ VALUE "FileVersion", "1.0"
+ VALUE "InternalName", "raylib-game"
+ VALUE "LegalCopyright", "(c) 2023 raylib technologies (@raylibtech)"
+ //VALUE "OriginalFilename", "raylib_app.exe"
+ VALUE "ProductName", "raylib-game"
+ VALUE "ProductVersion", "1.0"
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ //VALUE "Translation", 0x809, 1252 // English UK
+ VALUE "Translation", 0x409, 1252 // English US
+ END
+END
diff --git a/src/resources/README.txt b/src/resources/README.txt
new file mode 100644
index 0000000..c33fc1a
--- /dev/null
+++ b/src/resources/README.txt
@@ -0,0 +1,2 @@
+Place in this folder your game assets/resources!
+