├── .gitignore
├── .vscode
├── launch.json
└── tasks.json
├── CMakeLists.txt
├── CppProperties.json
├── Justfile
├── README.md
├── assets
├── Pixel Adventure 1
│ ├── Background
│ │ ├── Blue.png
│ │ ├── Brown.png
│ │ ├── Gray.png
│ │ ├── Green.png
│ │ ├── Pink.png
│ │ ├── Purple.png
│ │ └── Yellow.png
│ ├── Items
│ │ ├── Boxes
│ │ │ ├── Box1
│ │ │ │ ├── Break.png
│ │ │ │ ├── Hit (28x24).png
│ │ │ │ └── Idle.png
│ │ │ ├── Box2
│ │ │ │ ├── Break.png
│ │ │ │ ├── Hit (28x24).png
│ │ │ │ └── Idle.png
│ │ │ └── Box3
│ │ │ │ ├── Break.png
│ │ │ │ ├── Hit (28x24).png
│ │ │ │ └── Idle.png
│ │ ├── Checkpoints
│ │ │ ├── Checkpoint
│ │ │ │ ├── Checkpoint (Flag Idle)(64x64).png
│ │ │ │ ├── Checkpoint (Flag Out) (64x64).png
│ │ │ │ └── Checkpoint (No Flag).png
│ │ │ ├── End
│ │ │ │ ├── End (Idle).png
│ │ │ │ └── End (Pressed) (64x64).png
│ │ │ └── Start
│ │ │ │ ├── Start (Idle).png
│ │ │ │ └── Start (Moving) (64x64).png
│ │ └── Fruits
│ │ │ ├── Apple.png
│ │ │ ├── Bananas.png
│ │ │ ├── Cherries.png
│ │ │ ├── Collected.png
│ │ │ ├── Kiwi.png
│ │ │ ├── Melon.png
│ │ │ ├── Orange.png
│ │ │ ├── Pineapple.png
│ │ │ └── Strawberry.png
│ ├── Main Characters
│ │ ├── Appearing (96x96).png
│ │ ├── Desappearing (96x96).png
│ │ ├── Mask Dude
│ │ │ ├── Double Jump (32x32).png
│ │ │ ├── Fall (32x32).png
│ │ │ ├── Hit (32x32).png
│ │ │ ├── Idle (32x32).png
│ │ │ ├── Jump (32x32).png
│ │ │ ├── Run (32x32).png
│ │ │ └── Wall Jump (32x32).png
│ │ ├── Ninja Frog
│ │ │ ├── Double Jump (32x32).png
│ │ │ ├── Fall (32x32).png
│ │ │ ├── Hit (32x32).png
│ │ │ ├── Idle (32x32).png
│ │ │ ├── Jump (32x32).png
│ │ │ ├── Run (32x32).png
│ │ │ └── Wall Jump (32x32).png
│ │ ├── Pink Man
│ │ │ ├── Double Jump (32x32).png
│ │ │ ├── Fall (32x32).png
│ │ │ ├── Hit (32x32).png
│ │ │ ├── Idle (32x32).png
│ │ │ ├── Jump (32x32).png
│ │ │ ├── Run (32x32).png
│ │ │ └── Wall Jump (32x32).png
│ │ └── Virtual Guy
│ │ │ ├── Double Jump (32x32).png
│ │ │ ├── Fall (32x32).png
│ │ │ ├── Hit (32x32).png
│ │ │ ├── Idle (32x32).png
│ │ │ ├── Jump (32x32).png
│ │ │ ├── Run (32x32).png
│ │ │ └── Wall Jump (32x32).png
│ ├── Menu
│ │ ├── Buttons
│ │ │ ├── Achievements.png
│ │ │ ├── Back.png
│ │ │ ├── Close.png
│ │ │ ├── Leaderboard.png
│ │ │ ├── Levels.png
│ │ │ ├── Next.png
│ │ │ ├── Play.png
│ │ │ ├── Previous.png
│ │ │ ├── Restart.png
│ │ │ ├── Settings.png
│ │ │ └── Volume.png
│ │ ├── Levels
│ │ │ ├── 01.png
│ │ │ ├── 02.png
│ │ │ ├── 03.png
│ │ │ ├── 04.png
│ │ │ ├── 05.png
│ │ │ ├── 06.png
│ │ │ ├── 07.png
│ │ │ ├── 08.png
│ │ │ ├── 09.png
│ │ │ ├── 10.png
│ │ │ ├── 11.png
│ │ │ ├── 12.png
│ │ │ ├── 13.png
│ │ │ ├── 14.png
│ │ │ ├── 15.png
│ │ │ ├── 16.png
│ │ │ ├── 17.png
│ │ │ ├── 18.png
│ │ │ ├── 19.png
│ │ │ ├── 20.png
│ │ │ ├── 21.png
│ │ │ ├── 22.png
│ │ │ ├── 23.png
│ │ │ ├── 24.png
│ │ │ ├── 25.png
│ │ │ ├── 26.png
│ │ │ ├── 27.png
│ │ │ ├── 28.png
│ │ │ ├── 29.png
│ │ │ ├── 30.png
│ │ │ ├── 31.png
│ │ │ ├── 32.png
│ │ │ ├── 33.png
│ │ │ ├── 34.png
│ │ │ ├── 35.png
│ │ │ ├── 36.png
│ │ │ ├── 37.png
│ │ │ ├── 38.png
│ │ │ ├── 39.png
│ │ │ ├── 40.png
│ │ │ ├── 41.png
│ │ │ ├── 42.png
│ │ │ ├── 43.png
│ │ │ ├── 44.png
│ │ │ ├── 45.png
│ │ │ ├── 46.png
│ │ │ ├── 47.png
│ │ │ ├── 48.png
│ │ │ ├── 49.png
│ │ │ └── 50.png
│ │ └── Text
│ │ │ ├── Text (Black) (8x10).png
│ │ │ └── Text (White) (8x10).png
│ ├── Other
│ │ ├── Confetti (16x16).png
│ │ ├── Dust Particle.png
│ │ ├── Shadow.png
│ │ └── Transition.png
│ ├── Terrain
│ │ └── Terrain (16x16).png
│ └── Traps
│ │ ├── Arrow
│ │ ├── Hit (18x18).png
│ │ └── Idle (18x18).png
│ │ ├── Blocks
│ │ ├── HitSide (22x22).png
│ │ ├── HitTop (22x22).png
│ │ ├── Idle.png
│ │ ├── Part 1 (22x22).png
│ │ └── Part 2 (22x22).png
│ │ ├── Falling Platforms
│ │ ├── Off.png
│ │ └── On (32x10).png
│ │ ├── Fan
│ │ ├── Off.png
│ │ └── On (24x8).png
│ │ ├── Fire
│ │ ├── Hit (16x32).png
│ │ ├── Off.png
│ │ └── On (16x32).png
│ │ ├── Platforms
│ │ ├── Brown Off.png
│ │ ├── Brown On (32x8).png
│ │ ├── Chain.png
│ │ ├── Grey Off.png
│ │ └── Grey On (32x8).png
│ │ ├── Rock Head
│ │ ├── Blink (42x42).png
│ │ ├── Bottom Hit (42x42).png
│ │ ├── Idle.png
│ │ ├── Left Hit (42x42).png
│ │ ├── Right Hit (42x42).png
│ │ └── Top Hit (42x42).png
│ │ ├── Sand Mud Ice
│ │ ├── Ice Particle.png
│ │ ├── Mud Particle.png
│ │ ├── Sand Mud Ice (16x6).png
│ │ └── Sand Particle.png
│ │ ├── Saw
│ │ ├── Chain.png
│ │ ├── Off.png
│ │ └── On (38x38).png
│ │ ├── Spike Head
│ │ ├── Blink (54x52).png
│ │ ├── Bottom Hit (54x52).png
│ │ ├── Idle.png
│ │ ├── Left Hit (54x52).png
│ │ ├── Right Hit (54x52).png
│ │ └── Top Hit (54x52).png
│ │ ├── Spiked Ball
│ │ ├── Chain.png
│ │ └── Spiked Ball.png
│ │ ├── Spikes
│ │ └── Idle.png
│ │ └── Trampoline
│ │ ├── Idle.png
│ │ └── Jump (28x28).png
├── dinoCharactersVersion1.1
│ ├── aseprite
│ │ ├── DinoSprites.ase
│ │ └── dinoCharacters-display.ase
│ ├── changelog.txt
│ └── sheets
│ │ ├── DinoSprites - doux.png
│ │ ├── DinoSprites - mort.png
│ │ ├── DinoSprites - tard.png
│ │ └── DinoSprites - vita.png
├── test.png
└── world.ldtk
└── sources
├── Constants.hpp
├── entities
├── BaseEntity.hpp
├── Player
│ ├── Player.cpp
│ └── Player.hpp
└── Portal
│ └── Portal.hpp
├── main.cpp
├── minshell.html
├── physics
├── PhysicsTypes.hpp
└── RaycastUtils.hpp
├── scenes
├── BaseScene.hpp
├── GameScene
│ ├── GameScene.cpp
│ └── GameScene.hpp
├── SceneManager.hpp
├── Scenes.hpp
└── TitleScene
│ ├── TitleScene.cpp
│ └── TitleScene.hpp
└── utils
└── DebugUtils.hpp
/.gitignore:
--------------------------------------------------------------------------------
1 | build
2 | .vs
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "(gdb) Launch",
9 | "type": "cppdbg",
10 | "request": "launch",
11 | "program": "${workspaceRoot}/build/raylib-cpp-cmake-template",
12 | "args": [],
13 | "stopAtEntry": false,
14 | "cwd": "${fileDirname}",
15 | "environment": [],
16 | "externalConsole": false,
17 | "MIMode": "gdb",
18 | "preLaunchTask": "CMake: build",
19 | "setupCommands": [
20 | {
21 | "description": "Enable pretty-printing for gdb",
22 | "text": "-enable-pretty-printing",
23 | "ignoreFailures": true
24 | },
25 | {
26 | "description": "Set Disassembly Flavor to Intel",
27 | "text": "-gdb-set disassembly-flavor intel",
28 | "ignoreFailures": true
29 | }
30 | ]
31 | }
32 | ]
33 | }
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "2.0.0",
3 | "tasks": [
4 | {
5 | "type": "cmake",
6 | "label": "CMake: build",
7 | "command": "build",
8 | "targets": [
9 | "raylib-cpp-cmake-template"
10 | ],
11 | "group": {
12 | "kind": "build",
13 | "isDefault": true
14 | },
15 | "problemMatcher": [],
16 | "detail": "CMake template build task"
17 | }
18 | ]
19 | }
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.22)
2 | project(raylib-cpp-cmake-template CXX)
3 |
4 | set(CMAKE_CXX_STANDARD 20)
5 | set(CMAKE_CXX_STANDARD_REQUIRED ON)
6 |
7 | include(FetchContent)
8 |
9 | ##########################################################################################
10 | # Add dependencies with FetchContent
11 | ##########################################################################################
12 |
13 | function(add_git_dependency libName gitURL gitTag)
14 | FetchContent_Declare(${libName}
15 | GIT_REPOSITORY ${gitURL}
16 | GIT_TAG ${gitTag}
17 | GIT_SHALLOW TRUE
18 | GIT_PROGRESS TRUE
19 | )
20 | FetchContent_MakeAvailable(${libName})
21 | target_compile_options(${libName} PRIVATE "-w")
22 | endfunction()
23 |
24 | # Add Raylib
25 | set(BUILD_EXAMPLES OFF CACHE BOOL "" FORCE) # don't build the supplied examples
26 | set(BUILD_GAMES OFF CACHE BOOL "" FORCE) # don't build the supplied example games
27 | add_git_dependency(
28 | raylib
29 | https://github.com/raysan5/raylib.git
30 | 5.5
31 | )
32 | # Special handling for raygui since its CMakeLists.txt is not at the root of the repo
33 | set(BUILD_RAYGUI_EXAMPLES OFF CACHE BOOL "" FORCE)
34 | FetchContent_Declare(raygui
35 | GIT_REPOSITORY https://github.com/raysan5/raygui.git
36 | GIT_TAG 4.0
37 | GIT_SHALLOW TRUE
38 | GIT_PROGRESS TRUE
39 | )
40 | FetchContent_GetProperties(raygui)
41 | if(NOT raygui_POPULATED)
42 | FetchContent_Populate(raygui)
43 | add_subdirectory(${raygui_SOURCE_DIR}/projects/CMake raygui)
44 | target_compile_options(raygui INTERFACE "-w")
45 | endif()
46 |
47 | # Add LDtkLoader
48 | add_git_dependency(
49 | LDtkLoader
50 | https://github.com/Madour/LDtkLoader.git
51 | 1.5.3.1
52 | )
53 |
54 | # Add Box2d
55 | set(BOX2D_BUILD_UNIT_TESTS OFF CACHE BOOL "" FORCE)
56 | set(BOX2D_BUILD_TESTBED OFF CACHE BOOL "" FORCE)
57 | add_git_dependency(
58 | box2d
59 | https://github.com/erincatto/box2d.git
60 | v2.4.1
61 | )
62 |
63 | # Add {fmt} library
64 | add_git_dependency(
65 | fmt
66 | https://github.com/fmtlib/fmt.git
67 | 11.1.2
68 | )
69 |
70 | ##########################################################################################
71 | # Project executable setup
72 | ##########################################################################################
73 |
74 | # Adding our source files
75 | # Define PROJECT_SOURCES as a list of all source files
76 | file(GLOB_RECURSE PROJECT_SOURCES CONFIGURE_DEPENDS "${CMAKE_CURRENT_LIST_DIR}/sources/*.cpp")
77 |
78 | # Define PROJECT_INCLUDE to be the path to the include directory of the project
79 | set(PROJECT_INCLUDE "${CMAKE_CURRENT_LIST_DIR}/sources/")
80 |
81 | # Declaring our executable
82 | add_executable(${PROJECT_NAME})
83 | target_sources(${PROJECT_NAME} PRIVATE ${PROJECT_SOURCES})
84 | target_include_directories(${PROJECT_NAME} PRIVATE ${PROJECT_INCLUDE})
85 |
86 | target_link_libraries(${PROJECT_NAME} PRIVATE raylib)
87 | target_link_libraries(${PROJECT_NAME} PRIVATE raygui)
88 | target_link_libraries(${PROJECT_NAME} PRIVATE LDtkLoader::LDtkLoader)
89 | target_link_libraries(${PROJECT_NAME} PRIVATE box2d)
90 | target_link_libraries(${PROJECT_NAME} PRIVATE fmt)
91 |
92 | ##########################################################################################
93 | # Project build settings
94 | ##########################################################################################
95 |
96 | add_definitions(-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE})
97 |
98 | # Setting ASSETS_PATH
99 | if (CMAKE_BUILD_TYPE MATCHES "Debug")
100 | SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -O0 -DDEBUG")
101 |
102 | # Set the asset path macro to the absolute path on the dev machine
103 | target_compile_definitions(${PROJECT_NAME} PUBLIC ASSETS_PATH="${CMAKE_CURRENT_SOURCE_DIR}/assets/")
104 | else()
105 | # Set the asset path macro in release mode to a relative path that assumes the assets folder is in the same directory as the game executable
106 | target_compile_definitions(${PROJECT_NAME} PUBLIC ASSETS_PATH="./assets/")
107 | endif()
108 |
109 | # Set common compiler flags
110 | # SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wswitch")
111 | SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
112 |
113 | if (${PLATFORM} STREQUAL "Web")
114 | # Tell Emscripten to build an .html file.
115 | set(CMAKE_EXECUTABLE_SUFFIX ".html")
116 | SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Os")
117 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -s USE_GLFW=3 -s ASSERTIONS=1 -s WASM=1 -Os -Wall -s TOTAL_MEMORY=67108864 -s FORCE_FILESYSTEM=1 --preload-file assets/ --shell-file ../sources/minshell.html")
118 | set(CMAKE_EXECUTABLE_SUFFIX ".html") # This line is used to set your executable to build with the emscripten html template so that you can directly open it.
119 | set_target_properties(${PROJECT_NAME} PROPERTIES SUFFIX ".html")
120 | target_compile_definitions(${PROJECT_NAME} PUBLIC ASSETS_PATH="/assets/") # Set the asset path macro in release mode to a relative path that assumes the assets folder is in the same directory as the game executable
121 | endif()
122 |
123 | # Ensure that hot-reload is enabled for VS
124 | if(CMAKE_CXX_COMPILER_ID MATCHES "MSVC")
125 | set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /ZI")
126 | set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /SAFESEH:NO")
127 | set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /SAFESEH:NO")
128 | endif()
129 |
--------------------------------------------------------------------------------
/CppProperties.json:
--------------------------------------------------------------------------------
1 | {
2 | "configurations": [
3 | {
4 | "inheritEnvironments": [
5 | "msvc_x64"
6 | ],
7 | "name": "x64-Debug",
8 | "includePath": [
9 | "${env.INCLUDE}",
10 | "${workspaceRoot}\\**"
11 | ],
12 | "defines": [
13 | "WIN32",
14 | "_DEBUG",
15 | "UNICODE",
16 | "_UNICODE"
17 | ],
18 | "intelliSenseMode": "windows-msvc-x64"
19 | }
20 | ]
21 | }
--------------------------------------------------------------------------------
/Justfile:
--------------------------------------------------------------------------------
1 | help:
2 | @just --list
3 |
4 | build-with-config config:
5 | @mkdir -p build
6 | @cd build && cmake ..
7 | @cmake --build ./build --config {{config}} --target raylib-cpp-cmake-template -j 10 --
8 |
9 | build-debug:
10 | @just build-with-config Debug
11 |
12 | build-release:
13 | @just build-with-config Release
14 |
15 | clean:
16 | @rm -rf build || true
17 | @rm -rf out || true
18 |
19 | build-web:
20 | #!/usr/bin/env bash
21 | sudo emsdk activate latest
22 | source "/usr/lib/emsdk/emsdk_env.sh"
23 | mkdir -p build-emc
24 |
25 | # Ensure asset folder is copied
26 | rm -rf build-emc/assets || true
27 | cp -R assets build-emc/assets
28 |
29 | cd build-emc
30 | emcmake cmake .. -DPLATFORM=Web -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXE_LINKER_FLAGS="-s USE_GLFW=3" -DCMAKE_EXECUTABLE_SUFFIX=".html"
31 | emmake make
32 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Raylib C++ CMake Template
2 |
3 |
4 |
8 |
9 |
10 |
11 | This repo constains a small game that you can use as a template for your Raylib
12 | games if you wish to use C++ and CMake.
13 |
14 | CMake is configured to automatically download the dependencies of your game
15 | through git, and pin them to a specific commit version (for example, [see how
16 | we're importing the raylib
17 | dependency](https://github.com/tupini07/raylib-cpp-cmake-template/blob/11af0880cf10ecc31fc0d5d63e79650d205024a2/CMakeLists.txt#L25-L31)).
18 | This provides a very flexible mechanism to include new dependencies, or update
19 | the existing ones, without having to muck about with your system's package
20 | manager, or worrying about linking external libraries at all. It is a bit slower
21 | on the first build though, since CMake will need to build everything.
22 |
23 | For the moment, the project is using the following dependencies which should be
24 | useful in many games:
25 |
26 | - [LDtkLoader](https://github.com/Madour/LDtkLoader) - used to load and help
27 | with drawing a map made with the awesome [LDtk](https://ldtk.io/).
28 | - [box2d](https://github.com/erincatto/box2d) - ubuquitous and easy to use 2D
29 | physics engine.
30 | - [fmt](https://github.com/fmtlib/fmt) - logging and string formatting library
31 | that makes your life much easier.
32 | - [raygui](https://github.com/raysan5/raygui) - a simple and easy to use
33 | immediate mode GUI library that is built on top of raylib. Good for building
34 | UIs and debugging tools.
35 |
36 | If you don't know where to start or how to use this template then check out [the wiki](https://github.com/tupini07/raylib-cpp-cmake-template/wiki)!
37 |
38 | ## Important files
39 |
40 | You can get a good understanding of how things work by reading through the
41 | following files:
42 |
43 | - [[main.cpp](https://github.com/tupini07/raylib-cpp-cmake-template/blob/11af0880cf10ecc31fc0d5d63e79650d205024a2/sources/main.cpp)]
44 | this is, of course, the entrpoint of the game. It maintains a top-level frame
45 | buffer to which all draw operations are done, and then this buffer is drawn to
46 | the screen, with a specific scale (meaning you can easily scale and/or
47 | translate your game without having to worry about the actual screen
48 | resolution). It also calls the SceneManager's update and draw methods.
49 | - [[SceneManager](https://github.com/tupini07/raylib-cpp-cmake-template/blob/11af0880cf10ecc31fc0d5d63e79650d205024a2/sources/scenes/SceneManager.hpp)]
50 | Implements an extremly simple scene manager. It updates and draws the current
51 | scene or switches to a new scene if necessary.
52 | - [[TitleScene](https://github.com/tupini07/raylib-cpp-cmake-template/blob/11af0880cf10ecc31fc0d5d63e79650d205024a2/sources/scenes/TitleScene/TitleScene.cpp)]
53 | This is the main screen that is shown when the game starts. It contains some examples
54 | of raygui components.
55 | - [[GameScene](https://github.com/tupini07/raylib-cpp-cmake-template/blob/11af0880cf10ecc31fc0d5d63e79650d205024a2/sources/scenes/GameScene/GameScene.cpp)]
56 | This is the scene where the main _game_ happens. It's not really a game per
57 | se, just a showcase of how you would set up a
58 | [Player](https://github.com/tupini07/raylib-cpp-cmake-template/blob/11af0880cf10ecc31fc0d5d63e79650d205024a2/sources/entities/Player/Player.cpp),
59 | draw an LDtk map, and add some physics to everything using Box2D.
60 |
61 |
62 | # Questions and comments
63 |
64 | If you have any question then feel free to [create a new discussion](https://github.com/tupini07/raylib-cpp-cmake-template/discussions/new), or if you see any issue then go ahead and [open a new issue](https://github.com/tupini07/raylib-cpp-cmake-template/issues/new).
65 |
66 | If you see anything that can be improved then feel free to make a PR! Those are always welcome 🙂 Another welcomed contribution is that of going through the wiki and clarifying content or adding new things you think might be helpful for others.
67 |
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Blue.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Blue.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Brown.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Brown.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Gray.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Gray.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Green.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Green.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Pink.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Pink.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Purple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Purple.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Background/Yellow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Background/Yellow.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box1/Break.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box1/Break.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box1/Hit (28x24).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box1/Hit (28x24).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box1/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box1/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box2/Break.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box2/Break.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box2/Hit (28x24).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box2/Hit (28x24).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box2/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box2/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box3/Break.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box3/Break.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box3/Hit (28x24).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box3/Hit (28x24).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Boxes/Box3/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Boxes/Box3/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/Checkpoint/Checkpoint (Flag Idle)(64x64).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/Checkpoint/Checkpoint (Flag Idle)(64x64).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/Checkpoint/Checkpoint (Flag Out) (64x64).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/Checkpoint/Checkpoint (Flag Out) (64x64).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/Checkpoint/Checkpoint (No Flag).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/Checkpoint/Checkpoint (No Flag).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/End/End (Idle).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/End/End (Idle).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/End/End (Pressed) (64x64).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/End/End (Pressed) (64x64).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/Start/Start (Idle).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/Start/Start (Idle).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Checkpoints/Start/Start (Moving) (64x64).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Checkpoints/Start/Start (Moving) (64x64).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Apple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Apple.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Bananas.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Bananas.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Cherries.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Cherries.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Collected.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Collected.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Kiwi.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Kiwi.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Melon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Melon.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Orange.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Orange.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Pineapple.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Pineapple.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Items/Fruits/Strawberry.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Items/Fruits/Strawberry.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Appearing (96x96).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Appearing (96x96).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Desappearing (96x96).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Desappearing (96x96).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Double Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Double Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Fall (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Fall (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Hit (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Hit (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Idle (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Idle (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Run (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Run (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Mask Dude/Wall Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Mask Dude/Wall Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Double Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Double Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Fall (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Fall (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Hit (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Hit (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Idle (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Idle (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Run (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Run (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Wall Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Ninja Frog/Wall Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Double Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Double Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Fall (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Fall (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Hit (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Hit (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Idle (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Idle (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Run (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Run (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Pink Man/Wall Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Pink Man/Wall Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Double Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Double Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Fall (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Fall (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Hit (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Hit (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Idle (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Idle (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Run (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Run (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Wall Jump (32x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Main Characters/Virtual Guy/Wall Jump (32x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Achievements.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Achievements.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Back.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Close.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Leaderboard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Leaderboard.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Levels.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Levels.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Next.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Play.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Previous.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Previous.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Restart.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Restart.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Settings.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Settings.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Buttons/Volume.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Buttons/Volume.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/01.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/01.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/02.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/02.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/03.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/03.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/04.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/04.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/05.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/05.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/06.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/06.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/07.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/07.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/08.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/08.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/09.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/09.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/10.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/10.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/11.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/11.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/12.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/12.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/13.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/13.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/14.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/14.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/15.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/15.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/16.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/17.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/17.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/18.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/18.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/19.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/19.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/20.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/21.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/21.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/22.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/22.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/23.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/23.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/24.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/24.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/25.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/25.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/26.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/26.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/27.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/27.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/28.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/28.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/29.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/30.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/31.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/31.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/32.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/33.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/33.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/34.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/34.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/35.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/35.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/36.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/36.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/37.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/37.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/38.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/38.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/39.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/39.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/40.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/41.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/41.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/42.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/42.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/43.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/43.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/44.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/44.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/45.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/45.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/46.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/46.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/47.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/47.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/48.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/49.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/49.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Levels/50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Levels/50.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Text/Text (Black) (8x10).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Text/Text (Black) (8x10).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Menu/Text/Text (White) (8x10).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Menu/Text/Text (White) (8x10).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Other/Confetti (16x16).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Other/Confetti (16x16).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Other/Dust Particle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Other/Dust Particle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Other/Shadow.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Other/Shadow.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Other/Transition.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Other/Transition.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Terrain/Terrain (16x16).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Terrain/Terrain (16x16).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Arrow/Hit (18x18).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Arrow/Hit (18x18).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Arrow/Idle (18x18).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Arrow/Idle (18x18).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Blocks/HitSide (22x22).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Blocks/HitSide (22x22).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Blocks/HitTop (22x22).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Blocks/HitTop (22x22).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Blocks/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Blocks/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Blocks/Part 1 (22x22).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Blocks/Part 1 (22x22).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Blocks/Part 2 (22x22).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Blocks/Part 2 (22x22).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Falling Platforms/Off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Falling Platforms/Off.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Falling Platforms/On (32x10).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Falling Platforms/On (32x10).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Fan/Off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Fan/Off.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Fan/On (24x8).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Fan/On (24x8).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Fire/Hit (16x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Fire/Hit (16x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Fire/Off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Fire/Off.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Fire/On (16x32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Fire/On (16x32).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Platforms/Brown Off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Platforms/Brown Off.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Platforms/Brown On (32x8).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Platforms/Brown On (32x8).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Platforms/Chain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Platforms/Chain.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Platforms/Grey Off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Platforms/Grey Off.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Platforms/Grey On (32x8).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Platforms/Grey On (32x8).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Rock Head/Blink (42x42).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Rock Head/Blink (42x42).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Rock Head/Bottom Hit (42x42).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Rock Head/Bottom Hit (42x42).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Rock Head/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Rock Head/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Rock Head/Left Hit (42x42).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Rock Head/Left Hit (42x42).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Rock Head/Right Hit (42x42).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Rock Head/Right Hit (42x42).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Rock Head/Top Hit (42x42).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Rock Head/Top Hit (42x42).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Ice Particle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Ice Particle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Mud Particle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Mud Particle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Sand Mud Ice (16x6).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Sand Mud Ice (16x6).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Sand Particle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Sand Mud Ice/Sand Particle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Saw/Chain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Saw/Chain.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Saw/Off.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Saw/Off.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Saw/On (38x38).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Saw/On (38x38).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spike Head/Blink (54x52).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spike Head/Blink (54x52).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spike Head/Bottom Hit (54x52).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spike Head/Bottom Hit (54x52).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spike Head/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spike Head/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spike Head/Left Hit (54x52).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spike Head/Left Hit (54x52).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spike Head/Right Hit (54x52).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spike Head/Right Hit (54x52).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spike Head/Top Hit (54x52).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spike Head/Top Hit (54x52).png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spiked Ball/Chain.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spiked Ball/Chain.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spiked Ball/Spiked Ball.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spiked Ball/Spiked Ball.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Spikes/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Spikes/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Trampoline/Idle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Trampoline/Idle.png
--------------------------------------------------------------------------------
/assets/Pixel Adventure 1/Traps/Trampoline/Jump (28x28).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/Pixel Adventure 1/Traps/Trampoline/Jump (28x28).png
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/aseprite/DinoSprites.ase:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/dinoCharactersVersion1.1/aseprite/DinoSprites.ase
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/aseprite/dinoCharacters-display.ase:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/dinoCharactersVersion1.1/aseprite/dinoCharacters-display.ase
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/changelog.txt:
--------------------------------------------------------------------------------
1 | Dino Characters changes
2 | - 2017-10-08
3 | Added a crouch and a walk animation for it.
4 |
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/sheets/DinoSprites - doux.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/dinoCharactersVersion1.1/sheets/DinoSprites - doux.png
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/sheets/DinoSprites - mort.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/dinoCharactersVersion1.1/sheets/DinoSprites - mort.png
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/sheets/DinoSprites - tard.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/dinoCharactersVersion1.1/sheets/DinoSprites - tard.png
--------------------------------------------------------------------------------
/assets/dinoCharactersVersion1.1/sheets/DinoSprites - vita.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/dinoCharactersVersion1.1/sheets/DinoSprites - vita.png
--------------------------------------------------------------------------------
/assets/test.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tupini07/raylib-cpp-cmake-template/e219b6e7a382abab87b3b45aaf0e15dbcea282b7/assets/test.png
--------------------------------------------------------------------------------
/assets/world.ldtk:
--------------------------------------------------------------------------------
1 | {
2 | "__header__": {
3 | "fileType": "LDtk Project JSON",
4 | "app": "LDtk",
5 | "doc": "https://ldtk.io/json",
6 | "schema": "https://ldtk.io/files/JSON_SCHEMA.json",
7 | "appAuthor": "Sebastien 'deepnight' Benard",
8 | "appVersion": "1.5.3",
9 | "url": "https://ldtk.io"
10 | },
11 | "iid": "7515a7a0-b0a0-11ee-9cfd-e9a75585f2a3",
12 | "jsonVersion": "1.5.3",
13 | "appBuildId": 473703,
14 | "nextUid": 38,
15 | "identifierStyle": "Capitalize",
16 | "toc": [],
17 | "worldLayout": "Free",
18 | "worldGridWidth": 256,
19 | "worldGridHeight": 256,
20 | "defaultLevelWidth": 400,
21 | "defaultLevelHeight": 400,
22 | "defaultPivotX": 0,
23 | "defaultPivotY": 0,
24 | "defaultGridSize": 16,
25 | "defaultEntityWidth": 16,
26 | "defaultEntityHeight": 16,
27 | "bgColor": "#40465B",
28 | "defaultLevelBgColor": "#696A79",
29 | "minifyJson": false,
30 | "externalLevels": false,
31 | "exportTiled": false,
32 | "simplifiedExport": false,
33 | "imageExportMode": "None",
34 | "exportLevelBg": true,
35 | "pngFilePattern": null,
36 | "backupOnSave": false,
37 | "backupLimit": 10,
38 | "backupRelPath": null,
39 | "levelNamePattern": "Level_%idx",
40 | "tutorialDesc": null,
41 | "customCommands": [],
42 | "flags": [ "ExportOldTableOfContentData", "PrependIndexToLevelFileNames" ],
43 | "defs": { "layers": [
44 | {
45 | "__type": "Entities",
46 | "identifier": "PhysicsEntities",
47 | "type": "Entities",
48 | "uid": 34,
49 | "doc": null,
50 | "uiColor": null,
51 | "gridSize": 16,
52 | "guideGridWid": 0,
53 | "guideGridHei": 0,
54 | "displayOpacity": 1,
55 | "inactiveOpacity": 0.6,
56 | "hideInList": false,
57 | "hideFieldsWhenInactive": true,
58 | "canSelectWhenInactive": true,
59 | "renderInWorldView": true,
60 | "pxOffsetX": 0,
61 | "pxOffsetY": 0,
62 | "parallaxFactorX": 0,
63 | "parallaxFactorY": 0,
64 | "parallaxScaling": true,
65 | "requiredTags": [],
66 | "excludedTags": [],
67 | "autoTilesKilledByOtherLayerUid": null,
68 | "uiFilterTags": [],
69 | "useAsyncRender": false,
70 | "intGridValues": [],
71 | "intGridValuesGroups": [],
72 | "autoRuleGroups": [],
73 | "autoSourceLayerDefUid": null,
74 | "tilesetDefUid": null,
75 | "tilePivotX": 0,
76 | "tilePivotY": 0,
77 | "biomeFieldUid": null
78 | },
79 | {
80 | "__type": "Entities",
81 | "identifier": "Entities",
82 | "type": "Entities",
83 | "uid": 27,
84 | "doc": null,
85 | "uiColor": null,
86 | "gridSize": 16,
87 | "guideGridWid": 0,
88 | "guideGridHei": 0,
89 | "displayOpacity": 1,
90 | "inactiveOpacity": 0.6,
91 | "hideInList": false,
92 | "hideFieldsWhenInactive": true,
93 | "canSelectWhenInactive": true,
94 | "renderInWorldView": true,
95 | "pxOffsetX": 0,
96 | "pxOffsetY": 0,
97 | "parallaxFactorX": 0,
98 | "parallaxFactorY": 0,
99 | "parallaxScaling": true,
100 | "requiredTags": [],
101 | "excludedTags": [],
102 | "autoTilesKilledByOtherLayerUid": null,
103 | "uiFilterTags": [],
104 | "useAsyncRender": false,
105 | "intGridValues": [],
106 | "intGridValuesGroups": [],
107 | "autoRuleGroups": [],
108 | "autoSourceLayerDefUid": null,
109 | "tilesetDefUid": null,
110 | "tilePivotX": 0,
111 | "tilePivotY": 0,
112 | "biomeFieldUid": null
113 | },
114 | {
115 | "__type": "IntGrid",
116 | "identifier": "TileLayer",
117 | "type": "IntGrid",
118 | "uid": 6,
119 | "doc": null,
120 | "uiColor": null,
121 | "gridSize": 16,
122 | "guideGridWid": 0,
123 | "guideGridHei": 0,
124 | "displayOpacity": 1,
125 | "inactiveOpacity": 1,
126 | "hideInList": false,
127 | "hideFieldsWhenInactive": true,
128 | "canSelectWhenInactive": true,
129 | "renderInWorldView": true,
130 | "pxOffsetX": 0,
131 | "pxOffsetY": 0,
132 | "parallaxFactorX": 0,
133 | "parallaxFactorY": 0,
134 | "parallaxScaling": true,
135 | "requiredTags": [],
136 | "excludedTags": [],
137 | "autoTilesKilledByOtherLayerUid": null,
138 | "uiFilterTags": [],
139 | "useAsyncRender": false,
140 | "intGridValues": [
141 | { "value": 1, "identifier": "Floor", "color": "#000000", "tile": null, "groupUid": 0 },
142 | { "value": 2, "identifier": "NW", "color": "#FF0000", "tile": null, "groupUid": 0 }
143 | ],
144 | "intGridValuesGroups": [],
145 | "autoRuleGroups": [
146 | {
147 | "uid": 17,
148 | "name": "New group",
149 | "color": null,
150 | "icon": null,
151 | "active": true,
152 | "isOptional": false,
153 | "rules": [
154 | {
155 | "uid": 19,
156 | "active": true,
157 | "size": 3,
158 | "tileRectsIds": [[7]],
159 | "alpha": 1,
160 | "chance": 1,
161 | "breakOnMatch": true,
162 | "pattern": [0,-1,0,1,1,1,0,0,0],
163 | "flipX": false,
164 | "flipY": false,
165 | "xModulo": 1,
166 | "yModulo": 1,
167 | "xOffset": 0,
168 | "yOffset": 0,
169 | "tileXOffset": 0,
170 | "tileYOffset": 0,
171 | "tileRandomXMin": 0,
172 | "tileRandomXMax": 0,
173 | "tileRandomYMin": 0,
174 | "tileRandomYMax": 0,
175 | "checker": "None",
176 | "tileMode": "Single",
177 | "pivotX": 0,
178 | "pivotY": 0,
179 | "outOfBoundsValue": null,
180 | "invalidated": false,
181 | "perlinActive": false,
182 | "perlinSeed": 6847286,
183 | "perlinScale": 0.2,
184 | "perlinOctaves": 2
185 | },
186 | {
187 | "uid": 20,
188 | "active": true,
189 | "size": 3,
190 | "tileRectsIds": [[8]],
191 | "alpha": 1,
192 | "chance": 1,
193 | "breakOnMatch": true,
194 | "pattern": [0,-1,0,1,1,0,0,0,0],
195 | "flipX": false,
196 | "flipY": false,
197 | "xModulo": 1,
198 | "yModulo": 1,
199 | "xOffset": 0,
200 | "yOffset": 0,
201 | "tileXOffset": 0,
202 | "tileYOffset": 0,
203 | "tileRandomXMin": 0,
204 | "tileRandomXMax": 0,
205 | "tileRandomYMin": 0,
206 | "tileRandomYMax": 0,
207 | "checker": "None",
208 | "tileMode": "Single",
209 | "pivotX": 0,
210 | "pivotY": 0,
211 | "outOfBoundsValue": null,
212 | "invalidated": false,
213 | "perlinActive": false,
214 | "perlinSeed": 9621389,
215 | "perlinScale": 0.2,
216 | "perlinOctaves": 2
217 | },
218 | {
219 | "uid": 18,
220 | "active": true,
221 | "size": 3,
222 | "tileRectsIds": [[6]],
223 | "alpha": 1,
224 | "chance": 1,
225 | "breakOnMatch": true,
226 | "pattern": [0,-1,0,0,1,1,0,0,0],
227 | "flipX": false,
228 | "flipY": false,
229 | "xModulo": 1,
230 | "yModulo": 1,
231 | "xOffset": 0,
232 | "yOffset": 0,
233 | "tileXOffset": 0,
234 | "tileYOffset": 0,
235 | "tileRandomXMin": 0,
236 | "tileRandomXMax": 0,
237 | "tileRandomYMin": 0,
238 | "tileRandomYMax": 0,
239 | "checker": "None",
240 | "tileMode": "Single",
241 | "pivotX": 0,
242 | "pivotY": 0,
243 | "outOfBoundsValue": null,
244 | "invalidated": false,
245 | "perlinActive": false,
246 | "perlinSeed": 2308090,
247 | "perlinScale": 0.2,
248 | "perlinOctaves": 2
249 | },
250 | {
251 | "uid": 21,
252 | "active": true,
253 | "size": 3,
254 | "tileRectsIds": [[29]],
255 | "alpha": 1,
256 | "chance": 1,
257 | "breakOnMatch": true,
258 | "pattern": [0,1,0,1,1,1,0,1,0],
259 | "flipX": false,
260 | "flipY": false,
261 | "xModulo": 1,
262 | "yModulo": 1,
263 | "xOffset": 0,
264 | "yOffset": 0,
265 | "tileXOffset": 0,
266 | "tileYOffset": 0,
267 | "tileRandomXMin": 0,
268 | "tileRandomXMax": 0,
269 | "tileRandomYMin": 0,
270 | "tileRandomYMax": 0,
271 | "checker": "None",
272 | "tileMode": "Single",
273 | "pivotX": 0,
274 | "pivotY": 0,
275 | "outOfBoundsValue": null,
276 | "invalidated": false,
277 | "perlinActive": false,
278 | "perlinSeed": 5982468,
279 | "perlinScale": 0.2,
280 | "perlinOctaves": 2
281 | },
282 | {
283 | "uid": 26,
284 | "active": true,
285 | "size": 3,
286 | "tileRectsIds": [[52]],
287 | "alpha": 1,
288 | "chance": 1,
289 | "breakOnMatch": true,
290 | "pattern": [0,0,0,0,1,-1,0,-1,0],
291 | "flipX": false,
292 | "flipY": false,
293 | "xModulo": 1,
294 | "yModulo": 1,
295 | "xOffset": 0,
296 | "yOffset": 0,
297 | "tileXOffset": 0,
298 | "tileYOffset": 0,
299 | "tileRandomXMin": 0,
300 | "tileRandomXMax": 0,
301 | "tileRandomYMin": 0,
302 | "tileRandomYMax": 0,
303 | "checker": "None",
304 | "tileMode": "Single",
305 | "pivotX": 0,
306 | "pivotY": 0,
307 | "outOfBoundsValue": null,
308 | "invalidated": false,
309 | "perlinActive": false,
310 | "perlinSeed": 3335057,
311 | "perlinScale": 0.2,
312 | "perlinOctaves": 2
313 | },
314 | {
315 | "uid": 24,
316 | "active": true,
317 | "size": 3,
318 | "tileRectsIds": [[50]],
319 | "alpha": 1,
320 | "chance": 1,
321 | "breakOnMatch": true,
322 | "pattern": [0,1,0,-1,1,0,0,-1,0],
323 | "flipX": false,
324 | "flipY": false,
325 | "xModulo": 1,
326 | "yModulo": 1,
327 | "xOffset": 0,
328 | "yOffset": 0,
329 | "tileXOffset": 0,
330 | "tileYOffset": 0,
331 | "tileRandomXMin": 0,
332 | "tileRandomXMax": 0,
333 | "tileRandomYMin": 0,
334 | "tileRandomYMax": 0,
335 | "checker": "None",
336 | "tileMode": "Single",
337 | "pivotX": 0,
338 | "pivotY": 0,
339 | "outOfBoundsValue": null,
340 | "invalidated": false,
341 | "perlinActive": false,
342 | "perlinSeed": 5986500,
343 | "perlinScale": 0.2,
344 | "perlinOctaves": 2
345 | },
346 | {
347 | "uid": 25,
348 | "active": true,
349 | "size": 3,
350 | "tileRectsIds": [[51]],
351 | "alpha": 1,
352 | "chance": 1,
353 | "breakOnMatch": true,
354 | "pattern": [0,1,0,0,1,0,0,-1,0],
355 | "flipX": false,
356 | "flipY": false,
357 | "xModulo": 1,
358 | "yModulo": 1,
359 | "xOffset": 0,
360 | "yOffset": 0,
361 | "tileXOffset": 0,
362 | "tileYOffset": 0,
363 | "tileRandomXMin": 0,
364 | "tileRandomXMax": 0,
365 | "tileRandomYMin": 0,
366 | "tileRandomYMax": 0,
367 | "checker": "None",
368 | "tileMode": "Single",
369 | "pivotX": 0,
370 | "pivotY": 0,
371 | "outOfBoundsValue": null,
372 | "invalidated": false,
373 | "perlinActive": false,
374 | "perlinSeed": 6668951,
375 | "perlinScale": 0.2,
376 | "perlinOctaves": 2
377 | },
378 | {
379 | "uid": 23,
380 | "active": true,
381 | "size": 3,
382 | "tileRectsIds": [[30]],
383 | "alpha": 1,
384 | "chance": 1,
385 | "breakOnMatch": true,
386 | "pattern": [0,0,0,1,1,-1,0,0,0],
387 | "flipX": false,
388 | "flipY": false,
389 | "xModulo": 1,
390 | "yModulo": 1,
391 | "xOffset": 0,
392 | "yOffset": 0,
393 | "tileXOffset": 0,
394 | "tileYOffset": 0,
395 | "tileRandomXMin": 0,
396 | "tileRandomXMax": 0,
397 | "tileRandomYMin": 0,
398 | "tileRandomYMax": 0,
399 | "checker": "None",
400 | "tileMode": "Single",
401 | "pivotX": 0,
402 | "pivotY": 0,
403 | "outOfBoundsValue": null,
404 | "invalidated": false,
405 | "perlinActive": false,
406 | "perlinSeed": 488321,
407 | "perlinScale": 0.2,
408 | "perlinOctaves": 2
409 | },
410 | {
411 | "uid": 22,
412 | "active": true,
413 | "size": 3,
414 | "tileRectsIds": [[28]],
415 | "alpha": 1,
416 | "chance": 1,
417 | "breakOnMatch": true,
418 | "pattern": [0,0,0,-1,1,1,0,0,0],
419 | "flipX": false,
420 | "flipY": false,
421 | "xModulo": 1,
422 | "yModulo": 1,
423 | "xOffset": 0,
424 | "yOffset": 0,
425 | "tileXOffset": 0,
426 | "tileYOffset": 0,
427 | "tileRandomXMin": 0,
428 | "tileRandomXMax": 0,
429 | "tileRandomYMin": 0,
430 | "tileRandomYMax": 0,
431 | "checker": "None",
432 | "tileMode": "Single",
433 | "pivotX": 0,
434 | "pivotY": 0,
435 | "outOfBoundsValue": null,
436 | "invalidated": false,
437 | "perlinActive": false,
438 | "perlinSeed": 5709801,
439 | "perlinScale": 0.2,
440 | "perlinOctaves": 2
441 | }
442 | ],
443 | "usesWizard": false,
444 | "requiredBiomeValues": [],
445 | "biomeRequirementMode": 0
446 | }
447 | ],
448 | "autoSourceLayerDefUid": null,
449 | "tilesetDefUid": 1,
450 | "tilePivotX": 0,
451 | "tilePivotY": 0,
452 | "biomeFieldUid": null
453 | }
454 | ], "entities": [
455 | {
456 | "identifier": "Player",
457 | "uid": 4,
458 | "tags": [],
459 | "exportToToc": false,
460 | "allowOutOfBounds": false,
461 | "doc": null,
462 | "width": 16,
463 | "height": 16,
464 | "resizableX": false,
465 | "resizableY": false,
466 | "minWidth": null,
467 | "maxWidth": null,
468 | "minHeight": null,
469 | "maxHeight": null,
470 | "keepAspectRatio": false,
471 | "tileOpacity": 1,
472 | "fillOpacity": 1,
473 | "lineOpacity": 1,
474 | "hollow": false,
475 | "color": "#94D9B3",
476 | "renderMode": "Rectangle",
477 | "showName": true,
478 | "tilesetId": null,
479 | "tileRenderMode": "FitInside",
480 | "tileRect": null,
481 | "uiTileRect": null,
482 | "nineSliceBorders": [],
483 | "maxCount": 0,
484 | "limitScope": "PerLevel",
485 | "limitBehavior": "MoveLastOne",
486 | "pivotX": 0,
487 | "pivotY": 0,
488 | "fieldDefs": []
489 | },
490 | {
491 | "identifier": "SolidBlock",
492 | "uid": 33,
493 | "tags": [],
494 | "exportToToc": false,
495 | "allowOutOfBounds": false,
496 | "doc": null,
497 | "width": 16,
498 | "height": 16,
499 | "resizableX": true,
500 | "resizableY": true,
501 | "minWidth": null,
502 | "maxWidth": null,
503 | "minHeight": null,
504 | "maxHeight": null,
505 | "keepAspectRatio": false,
506 | "tileOpacity": 1,
507 | "fillOpacity": 0.56,
508 | "lineOpacity": 1,
509 | "hollow": false,
510 | "color": "#9D94D9",
511 | "renderMode": "Rectangle",
512 | "showName": true,
513 | "tilesetId": null,
514 | "tileRenderMode": "FitInside",
515 | "tileRect": null,
516 | "uiTileRect": null,
517 | "nineSliceBorders": [],
518 | "maxCount": 0,
519 | "limitScope": "PerLevel",
520 | "limitBehavior": "MoveLastOne",
521 | "pivotX": 0,
522 | "pivotY": 0,
523 | "fieldDefs": []
524 | },
525 | {
526 | "identifier": "Portal",
527 | "uid": 35,
528 | "tags": [],
529 | "exportToToc": false,
530 | "allowOutOfBounds": false,
531 | "doc": null,
532 | "width": 32,
533 | "height": 32,
534 | "resizableX": false,
535 | "resizableY": false,
536 | "minWidth": null,
537 | "maxWidth": null,
538 | "minHeight": null,
539 | "maxHeight": null,
540 | "keepAspectRatio": false,
541 | "tileOpacity": 1,
542 | "fillOpacity": 1,
543 | "lineOpacity": 1,
544 | "hollow": false,
545 | "color": "#D994B3",
546 | "renderMode": "Rectangle",
547 | "showName": true,
548 | "tilesetId": null,
549 | "tileRenderMode": "FitInside",
550 | "tileRect": null,
551 | "uiTileRect": null,
552 | "nineSliceBorders": [],
553 | "maxCount": 0,
554 | "limitScope": "PerLevel",
555 | "limitBehavior": "MoveLastOne",
556 | "pivotX": 0,
557 | "pivotY": 0,
558 | "fieldDefs": [
559 | {
560 | "identifier": "level_destination",
561 | "doc": null,
562 | "__type": "Float",
563 | "uid": 36,
564 | "type": "F_Float",
565 | "isArray": false,
566 | "canBeNull": false,
567 | "arrayMinLength": null,
568 | "arrayMaxLength": null,
569 | "editorDisplayMode": "NameAndValue",
570 | "editorDisplayScale": 1,
571 | "editorDisplayPos": "Center",
572 | "editorLinkStyle": "StraightArrow",
573 | "editorDisplayColor": null,
574 | "editorAlwaysShow": false,
575 | "editorShowInWorld": true,
576 | "editorCutLongValues": true,
577 | "editorTextSuffix": null,
578 | "editorTextPrefix": null,
579 | "useForSmartColor": false,
580 | "exportToToc": false,
581 | "searchable": false,
582 | "min": 0,
583 | "max": null,
584 | "regex": null,
585 | "acceptFileTypes": null,
586 | "defaultOverride": { "id": "V_Float", "params": [0] },
587 | "textLanguageMode": null,
588 | "symmetricalRef": false,
589 | "autoChainRef": true,
590 | "allowOutOfLevelRef": true,
591 | "allowedRefs": "OnlySame",
592 | "allowedRefsEntityUid": null,
593 | "allowedRefTags": [],
594 | "tilesetUid": null
595 | }
596 | ]
597 | }
598 | ], "tilesets": [
599 | {
600 | "__cWid": 22,
601 | "__cHei": 11,
602 | "identifier": "Terrain_16x16_2",
603 | "uid": 1,
604 | "relPath": "Pixel Adventure 1/Terrain/Terrain (16x16).png",
605 | "embedAtlas": null,
606 | "pxWid": 352,
607 | "pxHei": 176,
608 | "tileGridSize": 16,
609 | "spacing": 0,
610 | "padding": 0,
611 | "tags": [],
612 | "tagsSourceEnumUid": null,
613 | "enumTags": [],
614 | "customData": [],
615 | "savedSelections": [],
616 | "cachedPixelData": {
617 | "opaqueTiles": "11111011111011110000001111101111101111000000111000111000011100000000000000000000000000001111101111101111011111111110111110111101111111100011100001110111000000000000000000000000111110111110111101111011111011111011110111101110001110000111001110",
618 | "averageColors": "f677f566f778f445f5560000f682f782f783fb65fb650000f965fa75f965fa6500004a954984498500000000f566f223f566f556f4450000fa65fb65fb65f974f9740000f965fa75fb86fa54000058655965586500000000f778f566f677000000000000fa65fa65fa650000000000000000f834f954f9440000456645664566000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f854f744f854f644f6440000fb74fc74fb74f944f9440000f889f899f889f8890000fb44fc44fc44fc44fc44f744f223f744f644f6440000f944f944f944fa54fa540000f778f899f89af89a0000fb34fc44fc44fc44fc44f854f744f854000000000000f944f944f9440000000000000000f788f889f8890000fa34fb34fb44000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f376f265f376f244f2440000fc69fc79fc79fc96fc960000fc74fc74fc74fc740000fcb4fcb3fcb5fcb50000f265f223f265f244f2440000fb96fc96fc96fc88fc880000fc74fc74fc74fc740000fca5fcb5fcb5fcb30000f376f265f376000000000000fb86fb96fb860000000000000000fc74fc74fc7400000000fcb4fdb5fcb50000"
619 | }
620 | }
621 | ], "enums": [], "externalEnums": [], "levelFields": [] },
622 | "levels": [
623 | {
624 | "identifier": "Level_0",
625 | "iid": "04136c90-dbe0-11ec-b8ad-075c3ca01c42",
626 | "uid": 0,
627 | "worldX": 0,
628 | "worldY": 0,
629 | "worldDepth": 0,
630 | "pxWid": 400,
631 | "pxHei": 400,
632 | "__bgColor": "#696A79",
633 | "bgColor": null,
634 | "useAutoIdentifier": true,
635 | "bgRelPath": "Pixel Adventure 1/Background/Blue.png",
636 | "bgPos": "Unscaled",
637 | "bgPivotX": 0,
638 | "bgPivotY": 0,
639 | "__smartColor": "#ADADB5",
640 | "__bgPos": { "topLeftPx": [0,0], "scale": [1,1], "cropRect": [0,0,64,64] },
641 | "externalRelPath": null,
642 | "fieldInstances": [],
643 | "layerInstances": [
644 | {
645 | "__identifier": "PhysicsEntities",
646 | "__type": "Entities",
647 | "__cWid": 25,
648 | "__cHei": 25,
649 | "__gridSize": 16,
650 | "__opacity": 1,
651 | "__pxTotalOffsetX": 0,
652 | "__pxTotalOffsetY": 0,
653 | "__tilesetDefUid": null,
654 | "__tilesetRelPath": null,
655 | "iid": "0416c7f0-dbe0-11ec-b8ad-81067b49ee31",
656 | "levelId": 0,
657 | "layerDefUid": 34,
658 | "pxOffsetX": 0,
659 | "pxOffsetY": 0,
660 | "visible": true,
661 | "optionalRules": [],
662 | "intGridCsv": [],
663 | "autoLayerTiles": [],
664 | "seed": 5039726,
665 | "overrideTilesetUid": null,
666 | "gridTiles": [],
667 | "entityInstances": [
668 | {
669 | "__identifier": "SolidBlock",
670 | "__grid": [2,2],
671 | "__pivot": [0,0],
672 | "__tags": [],
673 | "__tile": null,
674 | "__smartColor": "#9D94D9",
675 | "iid": "0416ef00-dbe0-11ec-b8ad-b3a867546897",
676 | "width": 160,
677 | "height": 16,
678 | "defUid": 33,
679 | "px": [32,32],
680 | "fieldInstances": [],
681 | "__worldX": 32,
682 | "__worldY": 32
683 | },
684 | {
685 | "__identifier": "SolidBlock",
686 | "__grid": [0,12],
687 | "__pivot": [0,0],
688 | "__tags": [],
689 | "__tile": null,
690 | "__smartColor": "#9D94D9",
691 | "iid": "04171610-dbe0-11ec-b8ad-ab09a013ddf0",
692 | "width": 96,
693 | "height": 32,
694 | "defUid": 33,
695 | "px": [0,192],
696 | "fieldInstances": [],
697 | "__worldX": 0,
698 | "__worldY": 192
699 | },
700 | {
701 | "__identifier": "SolidBlock",
702 | "__grid": [8,12],
703 | "__pivot": [0,0],
704 | "__tags": [],
705 | "__tile": null,
706 | "__smartColor": "#9D94D9",
707 | "iid": "04171611-dbe0-11ec-b8ad-c300c8a66563",
708 | "width": 48,
709 | "height": 32,
710 | "defUid": 33,
711 | "px": [128,192],
712 | "fieldInstances": [],
713 | "__worldX": 128,
714 | "__worldY": 192
715 | },
716 | {
717 | "__identifier": "SolidBlock",
718 | "__grid": [15,15],
719 | "__pivot": [0,0],
720 | "__tags": [],
721 | "__tile": null,
722 | "__smartColor": "#9D94D9",
723 | "iid": "04173d20-dbe0-11ec-b8ad-9b20773778e9",
724 | "width": 64,
725 | "height": 32,
726 | "defUid": 33,
727 | "px": [240,240],
728 | "fieldInstances": [],
729 | "__worldX": 240,
730 | "__worldY": 240
731 | },
732 | {
733 | "__identifier": "SolidBlock",
734 | "__grid": [14,22],
735 | "__pivot": [0,0],
736 | "__tags": [],
737 | "__tile": null,
738 | "__smartColor": "#9D94D9",
739 | "iid": "0417d960-dbe0-11ec-b8ad-f7abc2c1fe2d",
740 | "width": 160,
741 | "height": 32,
742 | "defUid": 33,
743 | "px": [224,352],
744 | "fieldInstances": [],
745 | "__worldX": 224,
746 | "__worldY": 352
747 | },
748 | {
749 | "__identifier": "SolidBlock",
750 | "__grid": [12,6],
751 | "__pivot": [0,0],
752 | "__tags": [],
753 | "__tile": null,
754 | "__smartColor": "#9D94D9",
755 | "iid": "04182780-dbe0-11ec-b8ad-ab7e0099493d",
756 | "width": 32,
757 | "height": 32,
758 | "defUid": 33,
759 | "px": [192,96],
760 | "fieldInstances": [],
761 | "__worldX": 192,
762 | "__worldY": 96
763 | },
764 | {
765 | "__identifier": "SolidBlock",
766 | "__grid": [16,8],
767 | "__pivot": [0,0],
768 | "__tags": [],
769 | "__tile": null,
770 | "__smartColor": "#9D94D9",
771 | "iid": "041938f0-dbe0-11ec-b8ad-dda7cc99410b",
772 | "width": 32,
773 | "height": 32,
774 | "defUid": 33,
775 | "px": [256,128],
776 | "fieldInstances": [],
777 | "__worldX": 256,
778 | "__worldY": 128
779 | },
780 | {
781 | "__identifier": "SolidBlock",
782 | "__grid": [21,11],
783 | "__pivot": [0,0],
784 | "__tags": [],
785 | "__tile": null,
786 | "__smartColor": "#9D94D9",
787 | "iid": "041938f1-dbe0-11ec-b8ad-9b6f4f29ef3a",
788 | "width": 32,
789 | "height": 32,
790 | "defUid": 33,
791 | "px": [336,176],
792 | "fieldInstances": [],
793 | "__worldX": 336,
794 | "__worldY": 176
795 | },
796 | {
797 | "__identifier": "SolidBlock",
798 | "__grid": [10,3],
799 | "__pivot": [0,0],
800 | "__tags": [],
801 | "__tile": null,
802 | "__smartColor": "#9D94D9",
803 | "iid": "041938f2-dbe0-11ec-b8ad-d1158d248a58",
804 | "width": 32,
805 | "height": 64,
806 | "defUid": 33,
807 | "px": [160,48],
808 | "fieldInstances": [],
809 | "__worldX": 160,
810 | "__worldY": 48
811 | },
812 | {
813 | "__identifier": "SolidBlock",
814 | "__grid": [2,3],
815 | "__pivot": [0,0],
816 | "__tags": [],
817 | "__tile": null,
818 | "__smartColor": "#9D94D9",
819 | "iid": "041938f3-dbe0-11ec-b8ad-131fe06e28e2",
820 | "width": 32,
821 | "height": 96,
822 | "defUid": 33,
823 | "px": [32,48],
824 | "fieldInstances": [],
825 | "__worldX": 32,
826 | "__worldY": 48
827 | },
828 | {
829 | "__identifier": "SolidBlock",
830 | "__grid": [3,14],
831 | "__pivot": [0,0],
832 | "__tags": [],
833 | "__tile": null,
834 | "__smartColor": "#9D94D9",
835 | "iid": "04196000-dbe0-11ec-b8ad-afb2a22ecb81",
836 | "width": 32,
837 | "height": 160,
838 | "defUid": 33,
839 | "px": [48,224],
840 | "fieldInstances": [],
841 | "__worldX": 48,
842 | "__worldY": 224
843 | },
844 | {
845 | "__identifier": "SolidBlock",
846 | "__grid": [5,22],
847 | "__pivot": [0,0],
848 | "__tags": [],
849 | "__tile": null,
850 | "__smartColor": "#9D94D9",
851 | "iid": "04196001-dbe0-11ec-b8ad-1718342157ed",
852 | "width": 112,
853 | "height": 32,
854 | "defUid": 33,
855 | "px": [80,352],
856 | "fieldInstances": [],
857 | "__worldX": 80,
858 | "__worldY": 352
859 | }
860 | ]
861 | },
862 | {
863 | "__identifier": "Entities",
864 | "__type": "Entities",
865 | "__cWid": 25,
866 | "__cHei": 25,
867 | "__gridSize": 16,
868 | "__opacity": 1,
869 | "__pxTotalOffsetX": 0,
870 | "__pxTotalOffsetY": 0,
871 | "__tilesetDefUid": null,
872 | "__tilesetRelPath": null,
873 | "iid": "04196002-dbe0-11ec-b8ad-1bb4db858b61",
874 | "levelId": 0,
875 | "layerDefUid": 27,
876 | "pxOffsetX": 0,
877 | "pxOffsetY": 0,
878 | "visible": true,
879 | "optionalRules": [],
880 | "intGridCsv": [],
881 | "autoLayerTiles": [],
882 | "seed": 8579488,
883 | "overrideTilesetUid": null,
884 | "gridTiles": [],
885 | "entityInstances": [
886 | {
887 | "__identifier": "Player",
888 | "__grid": [4,9],
889 | "__pivot": [0,0],
890 | "__tags": [],
891 | "__tile": null,
892 | "__smartColor": "#94D9B3",
893 | "iid": "04198710-dbe0-11ec-b8ad-7bb730785413",
894 | "width": 16,
895 | "height": 16,
896 | "defUid": 4,
897 | "px": [64,144],
898 | "fieldInstances": [],
899 | "__worldX": 64,
900 | "__worldY": 144
901 | },
902 | {
903 | "__identifier": "Portal",
904 | "__grid": [21,20],
905 | "__pivot": [0,0],
906 | "__tags": [],
907 | "__tile": null,
908 | "__smartColor": "#D994B3",
909 | "iid": "04198711-dbe0-11ec-b8ad-8748414d1201",
910 | "width": 32,
911 | "height": 32,
912 | "defUid": 35,
913 | "px": [336,320],
914 | "fieldInstances": [{ "__identifier": "level_destination", "__type": "Float", "__value": 1, "__tile": null, "defUid": 36, "realEditorValues": [{ "id": "V_Float", "params": [1] }] }],
915 | "__worldX": 336,
916 | "__worldY": 320
917 | }
918 | ]
919 | },
920 | {
921 | "__identifier": "TileLayer",
922 | "__type": "IntGrid",
923 | "__cWid": 25,
924 | "__cHei": 25,
925 | "__gridSize": 16,
926 | "__opacity": 1,
927 | "__pxTotalOffsetX": 0,
928 | "__pxTotalOffsetY": 0,
929 | "__tilesetDefUid": 1,
930 | "__tilesetRelPath": "Pixel Adventure 1/Terrain/Terrain (16x16).png",
931 | "iid": "0419ae20-dbe0-11ec-b8ad-956c0d70eaaf",
932 | "levelId": 0,
933 | "layerDefUid": 6,
934 | "pxOffsetX": 0,
935 | "pxOffsetY": 0,
936 | "visible": true,
937 | "optionalRules": [],
938 | "intGridCsv": [
939 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
940 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
941 | 0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,
942 | 0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,0,0,0,
943 | 0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
944 | 0,0,1,1,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,
945 | 0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,
946 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
947 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,
948 | 0,0,0,0,0,0,1,1,0,0,1,1,1,1,1,1,0,0,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
949 | 0,1,1,1,1,1,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,
950 | 0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,1,1,1,1,0,0,0,0,0,0,0,0,0,0,1,1,1,1,0,
951 | 0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,1,1,
952 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,
953 | 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
954 | 0,0,0,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,
955 | 1,1,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,1,1,1,1,1,1,1,1,1,0,0,1,1,1,1,1,1,
956 | 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
957 | ],
958 | "autoLayerTiles": [
959 | { "px": [32,48], "src": [96,16], "f": 0, "t": 28, "d": [22,77], "a": 1 },
960 | { "px": [32,64], "src": [96,16], "f": 0, "t": 28, "d": [22,102], "a": 1 },
961 | { "px": [160,64], "src": [96,16], "f": 0, "t": 28, "d": [22,110], "a": 1 },
962 | { "px": [32,80], "src": [96,16], "f": 0, "t": 28, "d": [22,127], "a": 1 },
963 | { "px": [160,80], "src": [96,16], "f": 0, "t": 28, "d": [22,135], "a": 1 },
964 | { "px": [32,96], "src": [96,16], "f": 0, "t": 28, "d": [22,152], "a": 1 },
965 | { "px": [32,112], "src": [96,16], "f": 0, "t": 28, "d": [22,177], "a": 1 },
966 | { "px": [128,208], "src": [96,16], "f": 0, "t": 28, "d": [22,333], "a": 1 },
967 | { "px": [16,224], "src": [96,16], "f": 0, "t": 28, "d": [22,351], "a": 1 },
968 | { "px": [16,240], "src": [96,16], "f": 0, "t": 28, "d": [22,376], "a": 1 },
969 | { "px": [48,272], "src": [96,16], "f": 0, "t": 28, "d": [22,428], "a": 1 },
970 | { "px": [48,288], "src": [96,16], "f": 0, "t": 28, "d": [22,453], "a": 1 },
971 | { "px": [48,304], "src": [96,16], "f": 0, "t": 28, "d": [22,478], "a": 1 },
972 | { "px": [48,320], "src": [96,16], "f": 0, "t": 28, "d": [22,503], "a": 1 },
973 | { "px": [48,336], "src": [96,16], "f": 0, "t": 28, "d": [22,528], "a": 1 },
974 | { "px": [48,352], "src": [96,16], "f": 0, "t": 28, "d": [22,553], "a": 1 },
975 | { "px": [176,48], "src": [128,16], "f": 0, "t": 30, "d": [23,86], "a": 1 },
976 | { "px": [48,64], "src": [128,16], "f": 0, "t": 30, "d": [23,103], "a": 1 },
977 | { "px": [176,64], "src": [128,16], "f": 0, "t": 30, "d": [23,111], "a": 1 },
978 | { "px": [48,80], "src": [128,16], "f": 0, "t": 30, "d": [23,128], "a": 1 },
979 | { "px": [176,80], "src": [128,16], "f": 0, "t": 30, "d": [23,136], "a": 1 },
980 | { "px": [48,96], "src": [128,16], "f": 0, "t": 30, "d": [23,153], "a": 1 },
981 | { "px": [48,112], "src": [128,16], "f": 0, "t": 30, "d": [23,178], "a": 1 },
982 | { "px": [80,208], "src": [128,16], "f": 0, "t": 30, "d": [23,330], "a": 1 },
983 | { "px": [64,240], "src": [128,16], "f": 0, "t": 30, "d": [23,379], "a": 1 },
984 | { "px": [64,256], "src": [128,16], "f": 0, "t": 30, "d": [23,404], "a": 1 },
985 | { "px": [64,272], "src": [128,16], "f": 0, "t": 30, "d": [23,429], "a": 1 },
986 | { "px": [64,288], "src": [128,16], "f": 0, "t": 30, "d": [23,454], "a": 1 },
987 | { "px": [64,304], "src": [128,16], "f": 0, "t": 30, "d": [23,479], "a": 1 },
988 | { "px": [64,320], "src": [128,16], "f": 0, "t": 30, "d": [23,504], "a": 1 },
989 | { "px": [64,336], "src": [128,16], "f": 0, "t": 30, "d": [23,529], "a": 1 },
990 | { "px": [64,48], "src": [112,32], "f": 0, "t": 51, "d": [25,79], "a": 1 },
991 | { "px": [80,48], "src": [112,32], "f": 0, "t": 51, "d": [25,80], "a": 1 },
992 | { "px": [96,48], "src": [112,32], "f": 0, "t": 51, "d": [25,81], "a": 1 },
993 | { "px": [112,48], "src": [112,32], "f": 0, "t": 51, "d": [25,82], "a": 1 },
994 | { "px": [128,48], "src": [112,32], "f": 0, "t": 51, "d": [25,83], "a": 1 },
995 | { "px": [144,48], "src": [112,32], "f": 0, "t": 51, "d": [25,84], "a": 1 },
996 | { "px": [192,112], "src": [112,32], "f": 0, "t": 51, "d": [25,187], "a": 1 },
997 | { "px": [0,208], "src": [112,32], "f": 0, "t": 51, "d": [25,325], "a": 1 },
998 | { "px": [32,256], "src": [112,32], "f": 0, "t": 51, "d": [25,402], "a": 1 },
999 | { "px": [64,368], "src": [112,32], "f": 0, "t": 51, "d": [25,579], "a": 1 },
1000 | { "px": [80,368], "src": [112,32], "f": 0, "t": 51, "d": [25,580], "a": 1 },
1001 | { "px": [96,368], "src": [112,32], "f": 0, "t": 51, "d": [25,581], "a": 1 },
1002 | { "px": [112,368], "src": [112,32], "f": 0, "t": 51, "d": [25,582], "a": 1 },
1003 | { "px": [128,368], "src": [112,32], "f": 0, "t": 51, "d": [25,583], "a": 1 },
1004 | { "px": [144,368], "src": [112,32], "f": 0, "t": 51, "d": [25,584], "a": 1 },
1005 | { "px": [160,368], "src": [112,32], "f": 0, "t": 51, "d": [25,585], "a": 1 },
1006 | { "px": [240,368], "src": [112,32], "f": 0, "t": 51, "d": [25,590], "a": 1 },
1007 | { "px": [256,368], "src": [112,32], "f": 0, "t": 51, "d": [25,591], "a": 1 },
1008 | { "px": [272,368], "src": [112,32], "f": 0, "t": 51, "d": [25,592], "a": 1 },
1009 | { "px": [288,368], "src": [112,32], "f": 0, "t": 51, "d": [25,593], "a": 1 },
1010 | { "px": [304,368], "src": [112,32], "f": 0, "t": 51, "d": [25,594], "a": 1 },
1011 | { "px": [320,368], "src": [112,32], "f": 0, "t": 51, "d": [25,595], "a": 1 },
1012 | { "px": [336,368], "src": [112,32], "f": 0, "t": 51, "d": [25,596], "a": 1 },
1013 | { "px": [352,368], "src": [112,32], "f": 0, "t": 51, "d": [25,597], "a": 1 },
1014 | { "px": [160,96], "src": [96,32], "f": 0, "t": 50, "d": [24,160], "a": 1 },
1015 | { "px": [176,112], "src": [96,32], "f": 0, "t": 50, "d": [24,186], "a": 1 },
1016 | { "px": [32,128], "src": [96,32], "f": 0, "t": 50, "d": [24,202], "a": 1 },
1017 | { "px": [256,144], "src": [96,32], "f": 0, "t": 50, "d": [24,241], "a": 1 },
1018 | { "px": [336,192], "src": [96,32], "f": 0, "t": 50, "d": [24,321], "a": 1 },
1019 | { "px": [128,224], "src": [96,32], "f": 0, "t": 50, "d": [24,358], "a": 1 },
1020 | { "px": [16,256], "src": [96,32], "f": 0, "t": 50, "d": [24,401], "a": 1 },
1021 | { "px": [240,256], "src": [96,32], "f": 0, "t": 50, "d": [24,415], "a": 1 },
1022 | { "px": [256,272], "src": [96,32], "f": 0, "t": 50, "d": [24,441], "a": 1 },
1023 | { "px": [48,368], "src": [96,32], "f": 0, "t": 50, "d": [24,578], "a": 1 },
1024 | { "px": [224,368], "src": [96,32], "f": 0, "t": 50, "d": [24,589], "a": 1 },
1025 | { "px": [208,112], "src": [128,32], "f": 0, "t": 52, "d": [26,188], "a": 1 },
1026 | { "px": [48,128], "src": [128,32], "f": 0, "t": 52, "d": [26,203], "a": 1 },
1027 | { "px": [272,144], "src": [128,32], "f": 0, "t": 52, "d": [26,242], "a": 1 },
1028 | { "px": [352,192], "src": [128,32], "f": 0, "t": 52, "d": [26,322], "a": 1 },
1029 | { "px": [160,208], "src": [128,32], "f": 0, "t": 52, "d": [26,335], "a": 1 },
1030 | { "px": [80,224], "src": [128,32], "f": 0, "t": 52, "d": [26,355], "a": 1 },
1031 | { "px": [144,224], "src": [128,32], "f": 0, "t": 52, "d": [26,359], "a": 1 },
1032 | { "px": [288,256], "src": [128,32], "f": 0, "t": 52, "d": [26,418], "a": 1 },
1033 | { "px": [272,272], "src": [128,32], "f": 0, "t": 52, "d": [26,442], "a": 1 },
1034 | { "px": [176,368], "src": [128,32], "f": 0, "t": 52, "d": [26,586], "a": 1 },
1035 | { "px": [368,368], "src": [128,32], "f": 0, "t": 52, "d": [26,598], "a": 1 },
1036 | { "px": [48,48], "src": [112,16], "f": 0, "t": 29, "d": [21,78], "a": 1 },
1037 | { "px": [160,48], "src": [112,16], "f": 0, "t": 29, "d": [21,85], "a": 1 },
1038 | { "px": [176,96], "src": [112,16], "f": 0, "t": 29, "d": [21,161], "a": 1 },
1039 | { "px": [16,208], "src": [112,16], "f": 0, "t": 29, "d": [21,326], "a": 1 },
1040 | { "px": [32,208], "src": [112,16], "f": 0, "t": 29, "d": [21,327], "a": 1 },
1041 | { "px": [48,208], "src": [112,16], "f": 0, "t": 29, "d": [21,328], "a": 1 },
1042 | { "px": [64,208], "src": [112,16], "f": 0, "t": 29, "d": [21,329], "a": 1 },
1043 | { "px": [144,208], "src": [112,16], "f": 0, "t": 29, "d": [21,334], "a": 1 },
1044 | { "px": [32,224], "src": [112,16], "f": 0, "t": 29, "d": [21,352], "a": 1 },
1045 | { "px": [48,224], "src": [112,16], "f": 0, "t": 29, "d": [21,353], "a": 1 },
1046 | { "px": [64,224], "src": [112,16], "f": 0, "t": 29, "d": [21,354], "a": 1 },
1047 | { "px": [32,240], "src": [112,16], "f": 0, "t": 29, "d": [21,377], "a": 1 },
1048 | { "px": [48,240], "src": [112,16], "f": 0, "t": 29, "d": [21,378], "a": 1 },
1049 | { "px": [48,256], "src": [112,16], "f": 0, "t": 29, "d": [21,403], "a": 1 },
1050 | { "px": [256,256], "src": [112,16], "f": 0, "t": 29, "d": [21,416], "a": 1 },
1051 | { "px": [272,256], "src": [112,16], "f": 0, "t": 29, "d": [21,417], "a": 1 },
1052 | { "px": [64,352], "src": [112,16], "f": 0, "t": 29, "d": [21,554], "a": 1 },
1053 | { "px": [32,32], "src": [96,0], "f": 0, "t": 6, "d": [18,52], "a": 1 },
1054 | { "px": [256,128], "src": [96,0], "f": 0, "t": 6, "d": [18,216], "a": 1 },
1055 | { "px": [336,176], "src": [96,0], "f": 0, "t": 6, "d": [18,296], "a": 1 },
1056 | { "px": [0,192], "src": [96,0], "f": 0, "t": 6, "d": [18,300], "a": 1 },
1057 | { "px": [128,192], "src": [96,0], "f": 0, "t": 6, "d": [18,308], "a": 1 },
1058 | { "px": [240,240], "src": [96,0], "f": 0, "t": 6, "d": [18,390], "a": 1 },
1059 | { "px": [224,352], "src": [96,0], "f": 0, "t": 6, "d": [18,564], "a": 1 },
1060 | { "px": [176,32], "src": [128,0], "f": 0, "t": 8, "d": [20,61], "a": 1 },
1061 | { "px": [208,96], "src": [128,0], "f": 0, "t": 8, "d": [20,163], "a": 1 },
1062 | { "px": [272,128], "src": [128,0], "f": 0, "t": 8, "d": [20,217], "a": 1 },
1063 | { "px": [352,176], "src": [128,0], "f": 0, "t": 8, "d": [20,297], "a": 1 },
1064 | { "px": [80,192], "src": [128,0], "f": 0, "t": 8, "d": [20,305], "a": 1 },
1065 | { "px": [160,192], "src": [128,0], "f": 0, "t": 8, "d": [20,310], "a": 1 },
1066 | { "px": [288,240], "src": [128,0], "f": 0, "t": 8, "d": [20,393], "a": 1 },
1067 | { "px": [176,352], "src": [128,0], "f": 0, "t": 8, "d": [20,561], "a": 1 },
1068 | { "px": [368,352], "src": [128,0], "f": 0, "t": 8, "d": [20,573], "a": 1 },
1069 | { "px": [48,32], "src": [112,0], "f": 0, "t": 7, "d": [19,53], "a": 1 },
1070 | { "px": [64,32], "src": [112,0], "f": 0, "t": 7, "d": [19,54], "a": 1 },
1071 | { "px": [80,32], "src": [112,0], "f": 0, "t": 7, "d": [19,55], "a": 1 },
1072 | { "px": [96,32], "src": [112,0], "f": 0, "t": 7, "d": [19,56], "a": 1 },
1073 | { "px": [112,32], "src": [112,0], "f": 0, "t": 7, "d": [19,57], "a": 1 },
1074 | { "px": [128,32], "src": [112,0], "f": 0, "t": 7, "d": [19,58], "a": 1 },
1075 | { "px": [144,32], "src": [112,0], "f": 0, "t": 7, "d": [19,59], "a": 1 },
1076 | { "px": [160,32], "src": [112,0], "f": 0, "t": 7, "d": [19,60], "a": 1 },
1077 | { "px": [192,96], "src": [112,0], "f": 0, "t": 7, "d": [19,162], "a": 1 },
1078 | { "px": [16,192], "src": [112,0], "f": 0, "t": 7, "d": [19,301], "a": 1 },
1079 | { "px": [32,192], "src": [112,0], "f": 0, "t": 7, "d": [19,302], "a": 1 },
1080 | { "px": [48,192], "src": [112,0], "f": 0, "t": 7, "d": [19,303], "a": 1 },
1081 | { "px": [64,192], "src": [112,0], "f": 0, "t": 7, "d": [19,304], "a": 1 },
1082 | { "px": [144,192], "src": [112,0], "f": 0, "t": 7, "d": [19,309], "a": 1 },
1083 | { "px": [256,240], "src": [112,0], "f": 0, "t": 7, "d": [19,391], "a": 1 },
1084 | { "px": [272,240], "src": [112,0], "f": 0, "t": 7, "d": [19,392], "a": 1 },
1085 | { "px": [80,352], "src": [112,0], "f": 0, "t": 7, "d": [19,555], "a": 1 },
1086 | { "px": [96,352], "src": [112,0], "f": 0, "t": 7, "d": [19,556], "a": 1 },
1087 | { "px": [112,352], "src": [112,0], "f": 0, "t": 7, "d": [19,557], "a": 1 },
1088 | { "px": [128,352], "src": [112,0], "f": 0, "t": 7, "d": [19,558], "a": 1 },
1089 | { "px": [144,352], "src": [112,0], "f": 0, "t": 7, "d": [19,559], "a": 1 },
1090 | { "px": [160,352], "src": [112,0], "f": 0, "t": 7, "d": [19,560], "a": 1 },
1091 | { "px": [240,352], "src": [112,0], "f": 0, "t": 7, "d": [19,565], "a": 1 },
1092 | { "px": [256,352], "src": [112,0], "f": 0, "t": 7, "d": [19,566], "a": 1 },
1093 | { "px": [272,352], "src": [112,0], "f": 0, "t": 7, "d": [19,567], "a": 1 },
1094 | { "px": [288,352], "src": [112,0], "f": 0, "t": 7, "d": [19,568], "a": 1 },
1095 | { "px": [304,352], "src": [112,0], "f": 0, "t": 7, "d": [19,569], "a": 1 },
1096 | { "px": [320,352], "src": [112,0], "f": 0, "t": 7, "d": [19,570], "a": 1 },
1097 | { "px": [336,352], "src": [112,0], "f": 0, "t": 7, "d": [19,571], "a": 1 },
1098 | { "px": [352,352], "src": [112,0], "f": 0, "t": 7, "d": [19,572], "a": 1 }
1099 | ],
1100 | "seed": 2340657,
1101 | "overrideTilesetUid": null,
1102 | "gridTiles": [],
1103 | "entityInstances": []
1104 | }
1105 | ],
1106 | "__neighbours": []
1107 | },
1108 | {
1109 | "identifier": "Level_1",
1110 | "iid": "041fc8a0-dbe0-11ec-b8ad-15b7387d9f44",
1111 | "uid": 37,
1112 | "worldX": 464,
1113 | "worldY": 0,
1114 | "worldDepth": 0,
1115 | "pxWid": 400,
1116 | "pxHei": 400,
1117 | "__bgColor": "#696A79",
1118 | "bgColor": null,
1119 | "useAutoIdentifier": true,
1120 | "bgRelPath": null,
1121 | "bgPos": null,
1122 | "bgPivotX": 0.5,
1123 | "bgPivotY": 0.5,
1124 | "__smartColor": "#ADADB5",
1125 | "__bgPos": null,
1126 | "externalRelPath": null,
1127 | "fieldInstances": [],
1128 | "layerInstances": [
1129 | {
1130 | "__identifier": "PhysicsEntities",
1131 | "__type": "Entities",
1132 | "__cWid": 25,
1133 | "__cHei": 25,
1134 | "__gridSize": 16,
1135 | "__opacity": 1,
1136 | "__pxTotalOffsetX": 0,
1137 | "__pxTotalOffsetY": 0,
1138 | "__tilesetDefUid": null,
1139 | "__tilesetRelPath": null,
1140 | "iid": "042016c2-dbe0-11ec-b8ad-67356a2ca124",
1141 | "levelId": 37,
1142 | "layerDefUid": 34,
1143 | "pxOffsetX": 0,
1144 | "pxOffsetY": 0,
1145 | "visible": true,
1146 | "optionalRules": [],
1147 | "intGridCsv": [],
1148 | "autoLayerTiles": [],
1149 | "seed": 9416022,
1150 | "overrideTilesetUid": null,
1151 | "gridTiles": [],
1152 | "entityInstances": []
1153 | },
1154 | {
1155 | "__identifier": "Entities",
1156 | "__type": "Entities",
1157 | "__cWid": 25,
1158 | "__cHei": 25,
1159 | "__gridSize": 16,
1160 | "__opacity": 1,
1161 | "__pxTotalOffsetX": 0,
1162 | "__pxTotalOffsetY": 0,
1163 | "__tilesetDefUid": null,
1164 | "__tilesetRelPath": null,
1165 | "iid": "04203dd0-dbe0-11ec-b8ad-6d27b1fc9158",
1166 | "levelId": 37,
1167 | "layerDefUid": 27,
1168 | "pxOffsetX": 0,
1169 | "pxOffsetY": 0,
1170 | "visible": true,
1171 | "optionalRules": [],
1172 | "intGridCsv": [],
1173 | "autoLayerTiles": [],
1174 | "seed": 9266113,
1175 | "overrideTilesetUid": null,
1176 | "gridTiles": [],
1177 | "entityInstances": [
1178 | {
1179 | "__identifier": "Player",
1180 | "__grid": [5,4],
1181 | "__pivot": [0,0],
1182 | "__tags": [],
1183 | "__tile": null,
1184 | "__smartColor": "#94D9B3",
1185 | "iid": "04203dd1-dbe0-11ec-b8ad-9b594b880889",
1186 | "width": 16,
1187 | "height": 16,
1188 | "defUid": 4,
1189 | "px": [80,64],
1190 | "fieldInstances": [],
1191 | "__worldX": 544,
1192 | "__worldY": 64
1193 | },
1194 | {
1195 | "__identifier": "SolidBlock",
1196 | "__grid": [3,6],
1197 | "__pivot": [0,0],
1198 | "__tags": [],
1199 | "__tile": null,
1200 | "__smartColor": "#9D94D9",
1201 | "iid": "04203dd2-dbe0-11ec-b8ad-97634c654fc8",
1202 | "width": 112,
1203 | "height": 32,
1204 | "defUid": 33,
1205 | "px": [48,96],
1206 | "fieldInstances": [],
1207 | "__worldX": 512,
1208 | "__worldY": 96
1209 | },
1210 | {
1211 | "__identifier": "Portal",
1212 | "__grid": [8,4],
1213 | "__pivot": [0,0],
1214 | "__tags": [],
1215 | "__tile": null,
1216 | "__smartColor": "#D994B3",
1217 | "iid": "04203dd3-dbe0-11ec-b8ad-b104c0258e93",
1218 | "width": 32,
1219 | "height": 32,
1220 | "defUid": 35,
1221 | "px": [128,64],
1222 | "fieldInstances": [{ "__identifier": "level_destination", "__type": "Float", "__value": 0, "__tile": null, "defUid": 36, "realEditorValues": [{ "id": "V_Float", "params": [0] }] }],
1223 | "__worldX": 592,
1224 | "__worldY": 64
1225 | }
1226 | ]
1227 | },
1228 | {
1229 | "__identifier": "TileLayer",
1230 | "__type": "IntGrid",
1231 | "__cWid": 25,
1232 | "__cHei": 25,
1233 | "__gridSize": 16,
1234 | "__opacity": 1,
1235 | "__pxTotalOffsetX": 0,
1236 | "__pxTotalOffsetY": 0,
1237 | "__tilesetDefUid": 1,
1238 | "__tilesetRelPath": "Pixel Adventure 1/Terrain/Terrain (16x16).png",
1239 | "iid": "04203dd4-dbe0-11ec-b8ad-97c9493bdc55",
1240 | "levelId": 37,
1241 | "layerDefUid": 6,
1242 | "pxOffsetX": 0,
1243 | "pxOffsetY": 0,
1244 | "visible": true,
1245 | "optionalRules": [],
1246 | "intGridCsv": [
1247 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1248 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1249 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1250 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1251 | 0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1252 | 0,0,0,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1253 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1254 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1255 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1256 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1257 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1258 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1259 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1260 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1261 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1262 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1263 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1264 | 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
1265 | ],
1266 | "autoLayerTiles": [
1267 | { "px": [64,112], "src": [112,32], "f": 0, "t": 51, "d": [25,179], "a": 1 },
1268 | { "px": [80,112], "src": [112,32], "f": 0, "t": 51, "d": [25,180], "a": 1 },
1269 | { "px": [96,112], "src": [112,32], "f": 0, "t": 51, "d": [25,181], "a": 1 },
1270 | { "px": [112,112], "src": [112,32], "f": 0, "t": 51, "d": [25,182], "a": 1 },
1271 | { "px": [128,112], "src": [112,32], "f": 0, "t": 51, "d": [25,183], "a": 1 },
1272 | { "px": [48,112], "src": [96,32], "f": 0, "t": 50, "d": [24,178], "a": 1 },
1273 | { "px": [144,112], "src": [128,32], "f": 0, "t": 52, "d": [26,184], "a": 1 },
1274 | { "px": [48,96], "src": [96,0], "f": 0, "t": 6, "d": [18,153], "a": 1 },
1275 | { "px": [144,96], "src": [128,0], "f": 0, "t": 8, "d": [20,159], "a": 1 },
1276 | { "px": [64,96], "src": [112,0], "f": 0, "t": 7, "d": [19,154], "a": 1 },
1277 | { "px": [80,96], "src": [112,0], "f": 0, "t": 7, "d": [19,155], "a": 1 },
1278 | { "px": [96,96], "src": [112,0], "f": 0, "t": 7, "d": [19,156], "a": 1 },
1279 | { "px": [112,96], "src": [112,0], "f": 0, "t": 7, "d": [19,157], "a": 1 },
1280 | { "px": [128,96], "src": [112,0], "f": 0, "t": 7, "d": [19,158], "a": 1 }
1281 | ],
1282 | "seed": 9137189,
1283 | "overrideTilesetUid": null,
1284 | "gridTiles": [],
1285 | "entityInstances": []
1286 | }
1287 | ],
1288 | "__neighbours": []
1289 | }
1290 | ],
1291 | "worlds": [],
1292 | "dummyWorldIid": "75175550-b0a0-11ee-9cfd-132231b8d3df"
1293 | }
--------------------------------------------------------------------------------
/sources/Constants.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | const int ScreenScale = 2;
8 | namespace GameConstants
9 | {
10 | const int WorldWidth = 400;
11 | const int WorldHeight = 400;
12 |
13 | const int CellSize = 16;
14 | const float PhysicsWorldScale = 16.0f / ScreenScale; // everything is this times bigger than what physics world says
15 | }
16 |
17 | namespace AppConstants
18 | {
19 | const string WindowTitle = "Window Title";
20 |
21 | const int ScreenWidth = GameConstants::WorldWidth * ScreenScale;
22 | const int ScreenHeight = GameConstants::WorldHeight * ScreenScale;
23 |
24 | inline string GetAssetPath(string assetName)
25 | {
26 | return ASSETS_PATH "" + assetName;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/sources/entities/BaseEntity.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | class BaseEntity
4 | {
5 | public:
6 | virtual ~BaseEntity() = default;
7 | virtual void draw() = 0;
8 | virtual void update(float dt) = 0;
9 | };
10 |
--------------------------------------------------------------------------------
/sources/entities/Player/Player.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 |
9 | #include
10 |
11 | #include
12 | #include
13 |
14 | #include "Player.hpp"
15 | #include "../../physics/PhysicsTypes.hpp"
16 | #include "../../scenes/GameScene/GameScene.hpp"
17 | #include "../../physics/RaycastUtils.hpp"
18 |
19 | using namespace std;
20 |
21 | Player::Player()
22 | {
23 | this->sprite = LoadTexture(AppConstants::GetAssetPath("dinoCharactersVersion1.1/sheets/DinoSprites - vita.png").c_str());
24 |
25 | auto make_player_frame_rect = [](float frame_num) -> Rectangle
26 | {
27 | return {
28 | .x = frame_num * 24.0f,
29 | .y = 0.0f,
30 | .width = 24.0f,
31 | .height = 24.0f};
32 | };
33 |
34 | animation_map[IDLE] = {
35 | make_player_frame_rect(0),
36 | make_player_frame_rect(1),
37 | make_player_frame_rect(2),
38 | };
39 |
40 | animation_map[WALK] = {
41 | make_player_frame_rect(3),
42 | make_player_frame_rect(4),
43 | make_player_frame_rect(5),
44 | };
45 |
46 | animation_map[JUMP_START] = {
47 | make_player_frame_rect(6),
48 | };
49 |
50 | animation_map[JUMP_APEX] = {
51 | make_player_frame_rect(7),
52 | };
53 |
54 | animation_map[JUMP_FALL] = {
55 | make_player_frame_rect(8),
56 | };
57 | }
58 |
59 | Player::~Player()
60 | {
61 | UnloadTexture(this->sprite);
62 | }
63 |
64 | void Player::update(float dt)
65 | {
66 | const float horizontalDampeningFactor = 1;
67 |
68 | animation_ticker -= dt;
69 | if (animation_ticker <= 0)
70 | {
71 | animation_ticker = animation_frame_duration;
72 | current_anim_frame += 1;
73 | }
74 |
75 | // dampen horizontal movement
76 | set_velocity_x(body->GetLinearVelocity().x * (1 - dt * horizontalDampeningFactor));
77 |
78 | check_if_on_floor();
79 | check_if_move();
80 | check_if_jump();
81 |
82 | check_if_should_respawn();
83 | }
84 |
85 | void Player::draw()
86 | {
87 | auto spritePosX = (body->GetPosition().x * GameConstants::PhysicsWorldScale) - 12;
88 | auto spritePosY = (body->GetPosition().y * GameConstants::PhysicsWorldScale) - 13;
89 |
90 | auto current_anim_states = animation_map[anim_state];
91 | auto current_anim_rect = current_anim_states[current_anim_frame % current_anim_states.size()];
92 |
93 | if (!looking_right)
94 | {
95 | current_anim_rect.width *= -1;
96 | }
97 |
98 | DrawTexturePro(sprite,
99 | current_anim_rect,
100 | {spritePosX, spritePosY, 24, 24},
101 | {0, 0},
102 | 0.0f,
103 | WHITE);
104 | }
105 |
106 | void Player::init_for_level(const ldtk::Entity *entity, b2World *physicsWorld)
107 | {
108 | auto pos = entity->getPosition();
109 |
110 | DebugUtils::println("Setting player position to x:{} and y:{}", pos.x, pos.y);
111 |
112 | level_spawn_position = {(float)pos.x / GameConstants::PhysicsWorldScale,
113 | (float)pos.y / GameConstants::PhysicsWorldScale};
114 |
115 | b2BodyDef bodyDef;
116 | bodyDef.type = b2_dynamicBody;
117 | bodyDef.fixedRotation = true;
118 | bodyDef.position.Set(level_spawn_position.x, level_spawn_position.y);
119 |
120 | this->body = physicsWorld->CreateBody(&bodyDef);
121 |
122 | b2PolygonShape dynamicBox;
123 | dynamicBox.SetAsBox(0.9, 1);
124 |
125 | b2FixtureDef fixtureDef;
126 | fixtureDef.shape = &dynamicBox;
127 | fixtureDef.density = 1.0f;
128 | fixtureDef.friction = 10.0f;
129 |
130 | body->CreateFixture(&fixtureDef);
131 | }
132 |
133 | void Player::set_velocity_x(float vx)
134 | {
135 | body->SetLinearVelocity({
136 | vx,
137 | body->GetLinearVelocity().y,
138 | });
139 | }
140 |
141 | void Player::set_velocity_y(float vy)
142 | {
143 | body->SetLinearVelocity({
144 | body->GetLinearVelocity().x,
145 | vy,
146 | });
147 | }
148 |
149 | void Player::set_velocity_xy(float vx, float vy)
150 | {
151 | body->SetLinearVelocity({vx, vy});
152 | }
153 |
154 | void Player::check_if_on_floor()
155 | {
156 | // first, reset whether we're touching floor
157 | is_touching_floor = false;
158 |
159 | // check left, center, and right touch points
160 | float x_deviations[] = {-1.0f, 0.0f, 1.0f};
161 |
162 | for (auto x_dev : x_deviations)
163 | {
164 | // query raylib to see if we're touching floor
165 | auto source = body->GetPosition();
166 | source.x += x_dev;
167 |
168 | auto target = body->GetPosition();
169 | target.x += x_dev;
170 | target.y += 1.1;
171 |
172 | is_touching_floor = RaycastCheckCollisionWithUserData(
173 | GameScene::world.get(),
174 | source,
175 | target,
176 | PhysicsTypes::SolidBlock);
177 |
178 | if (is_touching_floor)
179 | {
180 | break;
181 | }
182 | }
183 | }
184 |
185 | bool Player::can_move_in_x_direction(bool moving_right)
186 | {
187 | float y_deviations[] = {-1.0f, 0.0f, 1.0f};
188 | for (auto y_dev : y_deviations)
189 | {
190 | // query raylib to see if we're touching floor
191 | auto source = body->GetPosition();
192 | source.y += y_dev;
193 |
194 | auto target = body->GetPosition();
195 | target.y += y_dev;
196 |
197 | // check left side if necessary
198 | target.x += (moving_right ? 1 : -1) * 1.1;
199 |
200 | auto is_agains_wall = RaycastCheckCollisionWithUserData(
201 | GameScene::world.get(),
202 | source,
203 | target,
204 | PhysicsTypes::SolidBlock);
205 |
206 | if (is_agains_wall)
207 | {
208 | return false;
209 | }
210 | }
211 |
212 | return true;
213 | }
214 |
215 | void Player::check_if_jump()
216 | {
217 | if (is_touching_floor && (IsKeyPressed(KEY_UP) || IsKeyPressed(KEY_SPACE)))
218 | {
219 | set_velocity_y(-25);
220 | }
221 |
222 | if (abs(body->GetLinearVelocity().x) > 0)
223 | {
224 | anim_state = WALK;
225 | }
226 | else
227 | {
228 | anim_state = IDLE;
229 | }
230 |
231 | if (!is_touching_floor)
232 | {
233 | auto vel = body->GetLinearVelocity().y;
234 | const int jump_threshold = 5;
235 |
236 | if (vel > jump_threshold)
237 | {
238 | anim_state = JUMP_FALL;
239 | }
240 | else if (vel < -jump_threshold)
241 | {
242 | anim_state = JUMP_START;
243 | }
244 | else
245 | {
246 | anim_state = JUMP_APEX;
247 | }
248 | }
249 | }
250 |
251 | void Player::check_if_move()
252 | {
253 | const auto effective_speed = 15.0f;
254 | if (IsKeyDown(KEY_LEFT) && can_move_in_x_direction(false))
255 | {
256 | looking_right = false;
257 | set_velocity_x(-effective_speed);
258 | }
259 |
260 | if (IsKeyDown(KEY_RIGHT) && can_move_in_x_direction(true))
261 | {
262 | looking_right = true;
263 | set_velocity_x(effective_speed);
264 | }
265 | }
266 |
267 | void Player::check_if_should_respawn()
268 | {
269 | auto body_pos = body->GetPosition();
270 | auto is_out_of_x = body_pos.x < 0 || body_pos.x * GameConstants::PhysicsWorldScale > GameConstants::WorldWidth;
271 | auto is_out_of_y = body_pos.y < 0 || body_pos.y * GameConstants::PhysicsWorldScale > GameConstants::WorldHeight;
272 |
273 | if (is_out_of_x || is_out_of_y)
274 | {
275 | set_velocity_xy(0, 0);
276 | body->SetTransform(level_spawn_position, 0);
277 | }
278 | }
--------------------------------------------------------------------------------
/sources/entities/Player/Player.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "../BaseEntity.hpp"
4 |
5 | #include
6 | #include
7 | #include
8 |
9 | #include
10 | #include
11 | #include
12 |
13 | using namespace std;
14 |
15 | enum PlayerAnimationState
16 | {
17 | IDLE,
18 | WALK,
19 | JUMP_START,
20 | JUMP_APEX,
21 | JUMP_FALL
22 | };
23 |
24 | class Player : public BaseEntity
25 | {
26 | private:
27 | Texture2D sprite;
28 | b2Body *body{};
29 | b2Vec2 level_spawn_position;
30 |
31 | bool is_touching_floor = true;
32 | bool looking_right = true;
33 |
34 | const float animation_frame_duration = 0.2f;
35 | float animation_ticker = animation_frame_duration;
36 |
37 | size_t current_anim_frame = 0;
38 | PlayerAnimationState anim_state = PlayerAnimationState::IDLE;
39 | unordered_map> animation_map;
40 |
41 | void set_velocity_x(float vx);
42 | void set_velocity_y(float vy);
43 | void set_velocity_xy(float vx, float vy);
44 |
45 | bool can_move_in_x_direction(bool moving_right);
46 | void check_if_on_floor();
47 | void check_if_jump();
48 | void check_if_move();
49 |
50 | void check_if_should_respawn();
51 |
52 | public:
53 | Player();
54 | ~Player();
55 |
56 | void update(float dt) override;
57 | void draw() override;
58 |
59 | void init_for_level(const ldtk::Entity *entity, b2World *physicsWorld);
60 | };
61 |
--------------------------------------------------------------------------------
/sources/entities/Portal/Portal.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | class Portal
7 | {
8 | private:
9 | Texture2D sprite;
10 | b2Body *body{};
11 |
12 | public:
13 | Portal(const ldtk::Entity *entity, b2World *physicsWorld);
14 | ~Portal();
15 | };
16 |
17 |
--------------------------------------------------------------------------------
/sources/main.cpp:
--------------------------------------------------------------------------------
1 | #if defined(PLATFORM_WEB)
2 | #include
3 | #endif
4 |
5 | #define RAYGUI_IMPLEMENTATION
6 |
7 | #include
8 | #include
9 |
10 | #include
11 |
12 | #include "entities/Player/Player.hpp"
13 | #include "scenes/SceneManager.hpp"
14 | #include "scenes/Scenes.hpp"
15 |
16 | void UpdateDrawFrame();
17 | RenderTexture2D gameRenderTexture; // Render texture for the game world
18 |
19 | int main()
20 | {
21 | InitWindow(
22 | AppConstants::ScreenWidth,
23 | AppConstants::ScreenHeight,
24 | AppConstants::WindowTitle.c_str());
25 |
26 | GuiLoadStyleDefault();
27 |
28 | // Create render texture at game resolution (not screen resolution)
29 | gameRenderTexture = LoadRenderTexture(GameConstants::WorldWidth, GameConstants::WorldHeight);
30 |
31 | SceneManager::initialize();
32 | SceneManager::set_current_screen(Scenes::TITLE);
33 |
34 | #if defined(PLATFORM_WEB)
35 | emscripten_set_main_loop(UpdateDrawFrame, 0, 1);
36 | #else
37 | SetTargetFPS(60); // Set our game to run at 60 frames-per-second
38 | //--------------------------------------------------------------------------------------
39 |
40 | // Main game loop
41 | while (!WindowShouldClose()) // Detect window close button or ESC key
42 | {
43 | UpdateDrawFrame();
44 | }
45 | #endif
46 |
47 | SceneManager::cleanup();
48 | UnloadRenderTexture(gameRenderTexture);
49 | CloseWindow();
50 | return 0;
51 | }
52 |
53 | void UpdateDrawFrame()
54 | {
55 | float dt = GetFrameTime();
56 |
57 | if (IsKeyDown(KEY_Q))
58 | {
59 | CloseWindow();
60 | return;
61 | }
62 |
63 | BeginTextureMode(gameRenderTexture);
64 | ClearBackground(RAYWHITE);
65 |
66 | SceneManager::tick(dt);
67 |
68 | EndTextureMode();
69 |
70 | BeginDrawing();
71 | ClearBackground(BLACK);
72 |
73 | Rectangle source = { 0.0f, 0.0f, (float)gameRenderTexture.texture.width, (float)-gameRenderTexture.texture.height };
74 | Rectangle dest = { 0.0f, 0.0f, AppConstants::ScreenWidth, AppConstants::ScreenHeight };
75 | DrawTexturePro(gameRenderTexture.texture, source, dest, Vector2{ 0, 0 }, 0.0f, WHITE);
76 |
77 | EndDrawing();
78 | }
--------------------------------------------------------------------------------
/sources/minshell.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 | raylib web game
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
40 |
41 |
59 |
60 |
61 |
62 |
63 |
83 | {{{ SCRIPT }}}
84 |
85 |
--------------------------------------------------------------------------------
/sources/physics/PhysicsTypes.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 |
5 | using namespace std;
6 |
7 | namespace PhysicsTypes {
8 | const string SolidBlock = "SOLID_BLOCK";
9 | }
--------------------------------------------------------------------------------
/sources/physics/RaycastUtils.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | using namespace std;
7 |
8 | class RaysCastGetNearestCallback : public b2RayCastCallback
9 | {
10 | public:
11 | RaysCastGetNearestCallback() : m_fixture(NULL)
12 | {
13 | }
14 |
15 | float ReportFixture(b2Fixture *fixture, const b2Vec2 &point, const b2Vec2 &normal, float fraction)
16 | {
17 | m_fixture = fixture;
18 | m_point = point;
19 | m_normal = normal;
20 | m_fraction = fraction;
21 | return fraction;
22 | }
23 |
24 | b2Fixture *m_fixture;
25 | b2Vec2 m_point;
26 | b2Vec2 m_normal;
27 | float m_fraction;
28 | };
29 |
30 | b2Fixture *RaycastGetFirstFixtureFromSourceToTarget(b2World *world, b2Vec2 source, b2Vec2 target)
31 | {
32 | // query raylib to see if we're touching floor
33 | RaysCastGetNearestCallback raycastCallback;
34 |
35 | GameScene::world->RayCast(&raycastCallback,
36 | source,
37 | target);
38 |
39 | return raycastCallback.m_fixture;
40 | }
41 |
42 | /**
43 | * Tries to get a collision, via raycast, that goes from the source to the target point. If there is a collision
44 | * then it checks if the body we detected has the specified `expected_user_data`
45 | *
46 | * @param world
47 | * @param source
48 | * @param target
49 | * @param user_data
50 | * @return true
51 | * @return false
52 | */
53 | bool RaycastCheckCollisionWithUserData(b2World *world, b2Vec2 source, b2Vec2 target, string expected_user_data)
54 | {
55 | auto fixture = RaycastGetFirstFixtureFromSourceToTarget(world, source, target);
56 | if (fixture)
57 | {
58 | auto collision_body = fixture->GetBody();
59 |
60 | if (collision_body->GetUserData().pointer)
61 | {
62 | string body_user_data = (char *)collision_body->GetUserData().pointer;
63 | return body_user_data == expected_user_data;
64 | }
65 | }
66 |
67 | return false;
68 | }
--------------------------------------------------------------------------------
/sources/scenes/BaseScene.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "Scenes.hpp"
4 |
5 | class BaseScene
6 | {
7 | public:
8 | virtual ~BaseScene() = default;
9 |
10 | virtual Scenes tick(float dt) = 0;
11 | };
--------------------------------------------------------------------------------
/sources/scenes/GameScene/GameScene.cpp:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 |
8 | #include
9 | #include
10 |
11 | #include "GameScene.hpp"
12 | #include "../../physics/PhysicsTypes.hpp"
13 | #include "../Scenes.hpp"
14 |
15 | #include "./entities/BaseEntity.hpp"
16 |
17 | using namespace std;
18 |
19 | std::unique_ptr GameScene::player = nullptr;
20 | std::unique_ptr GameScene::world = nullptr;
21 |
22 | GameScene::GameScene()
23 | {
24 | player = std::make_unique();
25 | ldtkProject = std::make_unique();
26 |
27 | ldtkProject->loadFromFile(AppConstants::GetAssetPath("world.ldtk"));
28 |
29 | ldtkWorld = &ldtkProject->getWorld();
30 |
31 | current_level = -1;
32 | set_selected_level(0);
33 | }
34 |
35 | GameScene::~GameScene()
36 | {
37 | UnloadTexture(renderedLevelTexture);
38 | UnloadTexture(currentTilesetTexture);
39 | }
40 |
41 | Scenes GameScene::tick(float dt)
42 | {
43 | const float timeStep = 1.0f / 60.0f;
44 | const int32 velocityIterations = 6;
45 | const int32 positionIterations = 2;
46 |
47 | world->Step(timeStep, velocityIterations, positionIterations);
48 | player->update(dt);
49 |
50 | ClearBackground(RAYWHITE);
51 |
52 | DrawTextureRec(renderedLevelTexture,
53 | {0, 0, (float)renderedLevelTexture.width, (float)-renderedLevelTexture.height},
54 | {0, 0}, WHITE);
55 |
56 | player->draw();
57 |
58 | // DEBUG stuff
59 | DebugUtils::draw_physics_objects_bounding_boxes(world.get());
60 |
61 | return Scenes::NONE;
62 | }
63 |
64 | void GameScene::set_selected_level(int lvl)
65 | {
66 | // unload current tileset texture if necessary
67 | if (current_level >= 0)
68 | {
69 | UnloadTexture(currentTilesetTexture);
70 | }
71 |
72 | if (world != nullptr)
73 | {
74 | // if we had an old world then delete it and recreate
75 | // a new one for the new level
76 | world = nullptr;
77 | }
78 |
79 | b2Vec2 gravity(0.0f, 60.0f);
80 | world = std::make_unique(gravity);
81 |
82 | current_level = lvl;
83 |
84 | currentLdtkLevel = &ldtkWorld->getLevel(current_level);
85 |
86 | DebugUtils::println("----------------------------------------------");
87 | DebugUtils::println("Loaded LDTK map with {} levels in it", ldtkWorld->allLevels().size());
88 | DebugUtils::println("The loaded level is {} and it has {} layers", current_level, currentLdtkLevel->allLayers().size());
89 | for (auto &&layer : currentLdtkLevel->allLayers())
90 | {
91 | DebugUtils::print(" - {}", layer.getName());
92 | }
93 |
94 | auto testTileLayerTileset = currentLdtkLevel->getLayer("TileLayer").getTileset();
95 |
96 | DebugUtils::println("The path to the tile layer tileset is: {}", testTileLayerTileset.path);
97 | DebugUtils::println("----------------------------------------------");
98 |
99 | auto levelSize = currentLdtkLevel->size;
100 | auto renderTexture = LoadRenderTexture(levelSize.x, levelSize.y);
101 |
102 | BeginTextureMode(renderTexture);
103 |
104 | if (currentLdtkLevel->hasBgImage())
105 | {
106 | DebugUtils::println("Drawing background image");
107 | auto backgroundPath = currentLdtkLevel->getBgImage();
108 | auto backgroundTexture = LoadTexture(AppConstants::GetAssetPath(backgroundPath.path.c_str()).c_str());
109 | SetTextureFilter(backgroundTexture, TEXTURE_FILTER_TRILINEAR);
110 |
111 | // tile background texture to cover the whole frame buffer
112 | for (int i = 0; i <= (GameConstants::WorldWidth / backgroundTexture.width); i++)
113 | {
114 | for (int j = 0; j <= (GameConstants::WorldHeight / backgroundTexture.height); j++)
115 | {
116 | DrawTextureV(backgroundTexture, {float(i * backgroundTexture.width), float(j * backgroundTexture.height)}, WHITE);
117 | }
118 | }
119 | }
120 |
121 | // draw all tileset layers
122 | for (auto &&layer : currentLdtkLevel->allLayers())
123 | {
124 | if (layer.hasTileset())
125 | {
126 | currentTilesetTexture = LoadTexture(AppConstants::GetAssetPath(layer.getTileset().path).c_str());
127 | // if it is a tile layer then draw every tile to the frame buffer
128 | for (auto &&tile : layer.allTiles())
129 | {
130 | auto source_pos = tile.getTextureRect();
131 | auto tile_size = float(layer.getTileset().tile_size);
132 |
133 | Rectangle source_rect = {
134 | .x = float(source_pos.x),
135 | .y = float(source_pos.y),
136 | .width = tile.flipX ? -tile_size : tile_size,
137 | .height = tile.flipY ? -tile_size : tile_size,
138 | };
139 |
140 | Vector2 target_pos = {
141 | (float)tile.getPosition().x,
142 | (float)tile.getPosition().y,
143 | };
144 |
145 | DrawTextureRec(currentTilesetTexture, source_rect, target_pos, WHITE);
146 | }
147 | }
148 | }
149 |
150 | EndTextureMode();
151 | renderedLevelTexture = renderTexture.texture;
152 |
153 | // get entity positions
154 | DebugUtils::println("Entities in level:");
155 | for (auto &&entity : currentLdtkLevel->getLayer("Entities").allEntities())
156 | {
157 | DebugUtils::println(" - {}", entity.getName());
158 | if (entity.getName() == "Player")
159 | {
160 | player->init_for_level(&entity, world.get());
161 | }
162 |
163 | if (entity.getName() == "Portal")
164 | {
165 | float target_lvl = entity.getField("level_destination").value();
166 | DebugUtils::println("Portal goes to level: {}", target_lvl);
167 | }
168 | }
169 |
170 | // create solid blocks on level
171 | DebugUtils::println("Loading solid blocks in level:");
172 | for (auto &&entity : currentLdtkLevel->getLayer("PhysicsEntities").allEntities())
173 | {
174 | // box2d width and height start from the center of the box
175 | auto b2width = entity.getSize().x / 2.0f;
176 | auto b2height = entity.getSize().y / 2.0f;
177 |
178 | auto centerX = entity.getPosition().x + b2width;
179 | auto centerY = entity.getPosition().y + b2height;
180 |
181 | b2BodyDef bodyDef;
182 | bodyDef.userData.pointer = (uintptr_t)PhysicsTypes::SolidBlock.c_str();
183 | bodyDef.position.Set(centerX / GameConstants::PhysicsWorldScale,
184 | centerY / GameConstants::PhysicsWorldScale);
185 |
186 | b2Body *body = world->CreateBody(&bodyDef);
187 |
188 | b2PolygonShape groundBox;
189 | groundBox.SetAsBox(b2width / GameConstants::PhysicsWorldScale,
190 | b2height / GameConstants::PhysicsWorldScale);
191 |
192 | body->CreateFixture(&groundBox, 0.0f);
193 |
194 | DebugUtils::println(" - x:{} y:{} width:{} height:{}",
195 | centerX,
196 | centerY,
197 | b2width,
198 | b2height);
199 | }
200 | }
201 |
--------------------------------------------------------------------------------
/sources/scenes/GameScene/GameScene.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 |
9 | #include "../BaseScene.hpp"
10 | #include "../Scenes.hpp"
11 |
12 | #include "../../entities/Player/Player.hpp"
13 | #include "./entities/BaseEntity.hpp"
14 |
15 | class GameScene : public BaseScene
16 | {
17 | private:
18 | int current_level;
19 |
20 | std::unique_ptr ldtkProject;
21 | const ldtk::World *ldtkWorld{};
22 | const ldtk::Level *currentLdtkLevel{};
23 |
24 | Texture2D currentTilesetTexture;
25 | Texture2D renderedLevelTexture;
26 |
27 | public:
28 | GameScene();
29 | ~GameScene();
30 |
31 | static std::unique_ptr world;
32 | static std::unique_ptr player;
33 |
34 | Scenes tick(float dt) override;
35 |
36 | void set_selected_level(int lvl);
37 | };
38 |
--------------------------------------------------------------------------------
/sources/scenes/SceneManager.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include "BaseScene.hpp"
4 | #include "TitleScene/TitleScene.hpp"
5 | #include "GameScene/GameScene.hpp"
6 | #include "Scenes.hpp"
7 |
8 | #include
9 |
10 | class SceneManager
11 | {
12 | private:
13 | static std::unique_ptr current_screen;
14 |
15 | public:
16 | static void set_current_screen(Scenes screen);
17 | static void initialize();
18 | static void tick(float dt);
19 | static void cleanup();
20 | };
21 |
22 | std::unique_ptr SceneManager::current_screen = nullptr;
23 |
24 | void SceneManager::initialize()
25 | {
26 | SceneManager::set_current_screen(UNSET);
27 | }
28 |
29 | void SceneManager::set_current_screen(Scenes screen)
30 | {
31 | if (screen == NONE)
32 | {
33 | return;
34 | }
35 |
36 | SceneManager::current_screen.reset();
37 |
38 | switch (screen)
39 | {
40 | case UNSET:
41 | SceneManager::current_screen = nullptr;
42 | break;
43 | case TITLE:
44 | SceneManager::current_screen = std::make_unique();
45 | break;
46 | case GAME:
47 | SceneManager::current_screen = std::make_unique();
48 | break;
49 | case NONE:
50 | std::cerr << "Landed in NONE case for switch. This should never happen!" << std::endl;
51 | exit(1);
52 | }
53 | }
54 |
55 | void SceneManager::tick(float dt)
56 | {
57 | if (SceneManager::current_screen != nullptr)
58 | {
59 | Scenes result = SceneManager::current_screen->tick(dt);
60 | if (result != NONE)
61 | {
62 | SceneManager::set_current_screen(result);
63 | }
64 | }
65 | }
66 |
67 | void SceneManager::cleanup()
68 | {
69 | if (SceneManager::current_screen != nullptr)
70 | {
71 | SceneManager::current_screen = nullptr;
72 | }
73 | }
--------------------------------------------------------------------------------
/sources/scenes/Scenes.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | enum Scenes
4 | {
5 | NONE,
6 | UNSET,
7 | TITLE,
8 | GAME,
9 | };
10 |
--------------------------------------------------------------------------------
/sources/scenes/TitleScene/TitleScene.cpp:
--------------------------------------------------------------------------------
1 | #include
2 |
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 |
9 | #include "TitleScene.hpp"
10 | #include "../Scenes.hpp"
11 |
12 | using namespace std;
13 |
14 | TitleScene::TitleScene()
15 | {
16 | // Load assets
17 | texture = LoadTexture(AppConstants::GetAssetPath("test.png").c_str());
18 |
19 | // Initialize GUI component states
20 | checkboxState = false;
21 | dropdownIndex = 0;
22 | dropdownEditMode = false;
23 | strcpy(textBoxText, "Edit me!");
24 | textBoxFocused = false;
25 | colorPickerValue = RED;
26 | showMessageBox = false;
27 | messageBoxOkClicked = false;
28 |
29 | // Initialize virtual mouse (scaled for GUI components)
30 | SetMouseScale(1.0f / (float)ScreenScale, 1.0f / (float)ScreenScale);
31 | HideCursor(); // Hide OS cursor since we'll draw our own
32 | }
33 |
34 | TitleScene::~TitleScene()
35 | {
36 | // Restore default mouse settings when exiting the scene
37 | SetMouseScale(1.0f, 1.0f);
38 | SetMouseOffset(0, 0);
39 | ShowCursor();
40 |
41 | // Unload assets
42 | UnloadTexture(texture);
43 | }
44 |
45 | Scenes TitleScene::tick(float dt)
46 | {
47 | // Clear background and prepare for drawing
48 | ClearBackground(RAYWHITE);
49 | virtualMousePosition = GetMousePosition();
50 |
51 | auto draw_with_backdrop = [](const string &text, int x, int y, int fontSize, Color color, Color backdropColor)
52 | {
53 | DrawText(text.c_str(), x + 1, y + 1, fontSize, backdropColor);
54 | DrawText(text.c_str(), x, y, fontSize, color);
55 | };
56 |
57 | draw_with_backdrop("This is the Title Scene", 10, 10, 25, GOLD, BLACK);
58 |
59 | // Draw centered texture
60 | const int texture_x = (GameConstants::WorldWidth / 2) - (texture.width / 2);
61 | const int texture_y = (GameConstants::WorldHeight / 2) - (texture.height / 2) + 30;
62 | DrawTextureEx(texture, Vector2{(float)texture_x, (float)texture_y}, 0, 1, WHITE);
63 |
64 | // Set smaller text size for GUI components
65 | GuiSetStyle(DEFAULT, TEXT_SIZE, 10);
66 |
67 | // Define panel positions
68 | const int leftPanel = 10;
69 | const int rightPanel = GameConstants::WorldWidth - 160;
70 |
71 | // Save initial style properties
72 | const int defaultTextSize = GuiGetStyle(DEFAULT, TEXT_SIZE);
73 | const int defaultColorPickerSize = GuiGetStyle(COLORPICKER, COLOR_SELECTOR_SIZE);
74 |
75 | //=================================================================
76 | // LEFT PANEL - BASIC GUI COMPONENTS
77 | //=================================================================
78 | draw_with_backdrop("RayGUI Examples", leftPanel, 70, 15, BLACK, WHITE);
79 |
80 | if( GuiButton(Rectangle{leftPanel, 95, 120, 30}, "Start Game")){
81 | // Transition to the game scene
82 | return Scenes::GAME;
83 | }
84 |
85 | GuiCheckBox(Rectangle{leftPanel, 135, 20, 20}, "Enable Feature", &checkboxState);
86 |
87 | Rectangle textBoxRect = {leftPanel, 165, 120, 25};
88 | if (IsMouseButtonPressed(MOUSE_BUTTON_LEFT))
89 | {
90 | // Update focus state when mouse is clicked
91 | textBoxFocused = CheckCollisionPointRec(GetMousePosition(), textBoxRect);
92 | }
93 | GuiTextBox(textBoxRect, textBoxText, 64, textBoxFocused);
94 |
95 | Rectangle dropdownRect = {leftPanel, 200, 120, 25};
96 | if (GuiDropdownBox(dropdownRect, "Option 1;Option 2;Option 3", &dropdownIndex, dropdownEditMode))
97 | {
98 | dropdownEditMode = !dropdownEditMode;
99 | }
100 |
101 | //=================================================================
102 | // RIGHT PANEL - INTERACTIVE GUI COMPONENTS
103 | //=================================================================
104 | draw_with_backdrop("Interactive Examples", rightPanel, 70, 15, BLACK, WHITE);
105 |
106 | if (GuiButton(Rectangle{rightPanel, 95, 140, 30}, "Show Message Box"))
107 | {
108 | showMessageBox = true;
109 | }
110 |
111 | draw_with_backdrop("Color Picker:", rightPanel, 135, 10, BLACK, WHITE);
112 | GuiSetStyle(COLORPICKER, COLOR_SELECTOR_SIZE, 6); // Smaller selector
113 | GuiColorPicker(Rectangle{rightPanel, 155, 120, 120}, NULL, &colorPickerValue);
114 |
115 | // Display selected color
116 | DrawRectangle(rightPanel + 30, 285, 80, 30, colorPickerValue);
117 | DrawRectangleLines(rightPanel + 30, 285, 80, 30, BLACK);
118 |
119 | // Restore original style properties
120 | GuiSetStyle(DEFAULT, TEXT_SIZE, defaultTextSize);
121 | GuiSetStyle(COLORPICKER, COLOR_SELECTOR_SIZE, defaultColorPickerSize);
122 |
123 | //=================================================================
124 | // MODAL DIALOG HANDLING
125 | //=================================================================
126 | if (showMessageBox)
127 | {
128 | // Semi-transparent overlay
129 | DrawRectangle(0, 0, GameConstants::WorldWidth, GameConstants::WorldHeight, Fade(RAYWHITE, 0.8f));
130 |
131 | int result = GuiMessageBox(
132 | Rectangle{GameConstants::WorldWidth / 2 - 125, GameConstants::WorldHeight / 2 - 50, 250, 100},
133 | "Message Box",
134 | "This is an example message.\nClick OK to continue.",
135 | "OK");
136 |
137 | if (result >= 0)
138 | {
139 | showMessageBox = false;
140 | }
141 | }
142 |
143 | //=================================================================
144 | // CUSTOM MOUSE CURSOR
145 | //=================================================================
146 |
147 | // here you could use a custom cursor texture but since we're lazy we'll
148 | // just draw a rectangle
149 |
150 | int rectSize = GameConstants::WorldWidth / 40;
151 | DrawRectangle(virtualMousePosition.x - rectSize / 2, virtualMousePosition.y - rectSize / 2,
152 | rectSize, rectSize, Fade(DARKPURPLE, 0.3f));
153 |
154 | // Scene transition logic
155 | return Scenes::NONE;
156 | }
--------------------------------------------------------------------------------
/sources/scenes/TitleScene/TitleScene.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 | #include
3 | #include
4 |
5 | #include "../BaseScene.hpp"
6 |
7 | class TitleScene : public BaseScene
8 | {
9 | private:
10 | // Assets
11 | Texture2D texture;
12 |
13 | // Virtual mouse handling
14 | Vector2 virtualMousePosition;
15 |
16 | // RayGUI component states
17 | // Button component: Uses return value, no state variable needed
18 |
19 | // Checkbox component
20 | bool checkboxState;
21 |
22 | // Dropdown component
23 | int dropdownIndex;
24 | bool dropdownEditMode;
25 |
26 | // Text input component
27 | char textBoxText[64];
28 | bool textBoxFocused;
29 |
30 | // Color picker component
31 | Color colorPickerValue;
32 |
33 | // Message box component
34 | bool showMessageBox;
35 | bool messageBoxOkClicked;
36 |
37 | public:
38 | TitleScene();
39 | ~TitleScene();
40 |
41 | Scenes tick(float dt) override;
42 | };
43 |
--------------------------------------------------------------------------------
/sources/utils/DebugUtils.hpp:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include
4 | #include
5 |
6 | #include
7 | #include
8 | #include
9 |
10 | #include
11 |
12 | using namespace std;
13 |
14 | namespace DebugUtils
15 | {
16 | inline void draw_physics_objects_bounding_boxes(b2World *const world)
17 | {
18 | #ifdef DEBUG
19 | auto currentBody = world->GetBodyList();
20 | while (currentBody != nullptr)
21 | {
22 | auto pos = currentBody->GetPosition();
23 | DrawCircle(pos.x * GameConstants::PhysicsWorldScale,
24 | pos.y * GameConstants::PhysicsWorldScale,
25 | 2,
26 | PURPLE);
27 |
28 | auto fixture = currentBody->GetFixtureList();
29 | while (fixture != nullptr)
30 | {
31 | auto shape = fixture->GetShape();
32 | // Note, right now supposing all shapes are polygons, use to determine shape->GetType();
33 |
34 | auto polygonShape = (b2PolygonShape *)shape;
35 | int vertexCount = 4; // since we're assuming they're squares
36 | for (int j = 0; j < vertexCount; j++)
37 | {
38 | b2Vec2 vertexA = polygonShape->m_vertices[j];
39 |
40 | int jj = (((j + 1) < vertexCount) ? (j + 1) : 0); // Get next vertex or first to close the shape
41 | b2Vec2 vertexB = polygonShape->m_vertices[jj];
42 |
43 | DrawLineV({(pos.x + vertexA.x) * GameConstants::PhysicsWorldScale, (pos.y + vertexA.y) * GameConstants::PhysicsWorldScale},
44 | {(pos.x + vertexB.x) * GameConstants::PhysicsWorldScale, (pos.y + vertexB.y) * GameConstants::PhysicsWorldScale},
45 | GREEN); // Draw a line between two vertex positions
46 | }
47 |
48 | fixture = fixture->GetNext();
49 | }
50 |
51 | currentBody = currentBody->GetNext();
52 | }
53 |
54 | #endif
55 | }
56 |
57 | template
58 | inline void print(fmt::format_string fmt, T &&...args)
59 | {
60 | #ifdef DEBUG
61 | fmt::print(fmt::runtime(fmt), args...);
62 | #endif
63 | }
64 |
65 | template
66 | inline void println(fmt::format_string fmt, T &&...args)
67 | {
68 | #ifdef DEBUG
69 | auto formatted = fmt::format(fmt::runtime(fmt), args...);
70 | cout << formatted << endl;
71 | #endif
72 | }
73 | }
--------------------------------------------------------------------------------