diff --git a/.vscode/c_cpp_properties.json b/.vscode/c_cpp_properties.json
new file mode 100644
index 0000000..e2b50ba
--- /dev/null
+++ b/.vscode/c_cpp_properties.json
@@ -0,0 +1,37 @@
+{
+ "configurations": [
+ {
+ "name": "fx-9860G",
+ "compilerPath": "~/.local/bin/sh-elf-gcc",
+ "compilerArgs": [ "-D FX9860G" ],
+
+ "cStandard": "c17",
+ "cppStandard": "gnu++17",
+
+ "includePath": [],
+ "intelliSenseMode": "${default}",
+ "mergeConfigurations": false,
+ "browse": {
+ "path": [],
+ "limitSymbolsToIncludedHeaders": true
+ }
+ },
+ {
+ "name": "fx-CG50",
+ "compilerPath": "~/.local/bin/sh-elf-gcc",
+ "compilerArgs": [ "-D FXCG50" ],
+
+ "cStandard": "c17",
+ "cppStandard": "gnu++17",
+
+ "includePath": [],
+ "intelliSenseMode": "${default}",
+ "mergeConfigurations": false,
+ "browse": {
+ "path": [],
+ "limitSymbolsToIncludedHeaders": true
+ }
+ }
+ ],
+ "version": 4
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
new file mode 100644
index 0000000..3f9ef32
--- /dev/null
+++ b/.vscode/settings.json
@@ -0,0 +1,12 @@
+{
+ "debug.showInStatusBar": "never",
+ "cmake.options.statusBarVisibility": "hidden",
+ "files.associations": {
+ "keyboard.h": "c",
+ "display.h": "c",
+ "stdlib.h": "c",
+ "kmalloc.h": "c",
+ "types.h": "c",
+ "linked_list.h": "c"
+ }
+}
\ No newline at end of file
diff --git a/.vscode/tasks.json b/.vscode/tasks.json
new file mode 100644
index 0000000..b109c07
--- /dev/null
+++ b/.vscode/tasks.json
@@ -0,0 +1,17 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "Build CG",
+ "type": "shell",
+ "command": "fxsdk build-cg",
+ "problemMatcher": []
+ },
+ {
+ "label": "Copy G3A to Calculator",
+ "type": "shell",
+ "command": "cp ${workspaceFolder}/*.g3a /media/$USER/disk/ && udisksctl unmount -b /dev/sdc1 && udisksctl power-off -b /dev/sdc1",
+ "problemMatcher": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..cd8ed46
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,39 @@
+# Configure with [fxsdk build-fx] or [fxsdk build-cg], which provide the
+# toolchain file and module path of the fxSDK
+
+cmake_minimum_required(VERSION 3.15)
+project(2D_Engine)
+
+include(GenerateG1A)
+include(GenerateG3A)
+include(GenerateHH2Bin)
+include(Fxconv)
+find_package(Gint 2.9 REQUIRED)
+
+set(SOURCES
+ src/main.c
+ src/game.c
+ src/linked_list.c
+ src/texture_manager.c
+ src/vector2d.c
+)
+
+# fx-CG-50-only assets
+set(ASSETS_cg
+)
+
+fxconv_declare_assets(${ASSETS_cg} WITH_METADATA)
+
+add_executable(myaddin ${SOURCES} ${ASSETS} ${ASSETS_${FXSDK_PLATFORM}})
+target_compile_options(myaddin PRIVATE -Wall -Wextra -Os -g -flto)
+target_link_libraries(myaddin Gint::Gint)
+
+if("${FXSDK_PLATFORM_LONG}" STREQUAL fxCG50)
+ generate_g3a(TARGET myaddin OUTPUT "2D_Engine.g3a"
+ NAME "2D_Engine" ICONS assets-cg/Icon/icon-uns.png assets-cg/Icon/icon-sel.png)
+elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fx9860G_G3A)
+ generate_g3a(TARGET myaddin OUTPUT "2D_Engine-fx.g3a"
+ NAME "2D_Engine-fx" ICONS assets-cg/Icon/icon-uns.png assets-cg/Icon/icon-sel.png)
+elseif("${FXSDK_PLATFORM_LONG}" STREQUAL fxCP)
+ generate_hh2_bin(TARGET myaddin OUTPUT "2D_Engine-hh2.bin")
+endif()
diff --git a/assets-cg/Entities/Enemies/Orcs/Base/death-sheet.png b/assets-cg/Entities/Enemies/Orcs/Base/death-sheet.png
new file mode 100644
index 0000000..cd32132
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Base/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Base/idle-sheet.png b/assets-cg/Entities/Enemies/Orcs/Base/idle-sheet.png
new file mode 100644
index 0000000..9a6b072
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Base/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Base/run-sheet.png b/assets-cg/Entities/Enemies/Orcs/Base/run-sheet.png
new file mode 100644
index 0000000..2f24a2a
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Base/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Rogue/death-sheet.png b/assets-cg/Entities/Enemies/Orcs/Rogue/death-sheet.png
new file mode 100644
index 0000000..2a10b98
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Rogue/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Rogue/idle-sheet.png b/assets-cg/Entities/Enemies/Orcs/Rogue/idle-sheet.png
new file mode 100644
index 0000000..6902aa4
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Rogue/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Rogue/run-sheet.png b/assets-cg/Entities/Enemies/Orcs/Rogue/run-sheet.png
new file mode 100644
index 0000000..1783b09
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Rogue/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Shaman/death-sheet.png b/assets-cg/Entities/Enemies/Orcs/Shaman/death-sheet.png
new file mode 100644
index 0000000..ec23abb
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Shaman/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Shaman/idle-sheet.png b/assets-cg/Entities/Enemies/Orcs/Shaman/idle-sheet.png
new file mode 100644
index 0000000..897d9b2
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Shaman/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Shaman/run-sheet.png b/assets-cg/Entities/Enemies/Orcs/Shaman/run-sheet.png
new file mode 100644
index 0000000..71fc767
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Shaman/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Warrior/death-sheet.png b/assets-cg/Entities/Enemies/Orcs/Warrior/death-sheet.png
new file mode 100644
index 0000000..2a87d9e
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Warrior/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Warrior/idle-sheet.png b/assets-cg/Entities/Enemies/Orcs/Warrior/idle-sheet.png
new file mode 100644
index 0000000..602efff
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Warrior/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Orcs/Warrior/run-sheet.png b/assets-cg/Entities/Enemies/Orcs/Warrior/run-sheet.png
new file mode 100644
index 0000000..dbeb740
Binary files /dev/null and b/assets-cg/Entities/Enemies/Orcs/Warrior/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Base/death-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Base/death-sheet.png
new file mode 100644
index 0000000..1b5fcd3
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Base/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Base/idle-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Base/idle-sheet.png
new file mode 100644
index 0000000..4c4f552
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Base/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Base/run-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Base/run-sheet.png
new file mode 100644
index 0000000..396eabc
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Base/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Mage/death-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Mage/death-sheet.png
new file mode 100644
index 0000000..02d0832
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Mage/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Mage/idle-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Mage/idle-sheet.png
new file mode 100644
index 0000000..5911e16
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Mage/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Mage/run-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Mage/run-sheet.png
new file mode 100644
index 0000000..85bfb1e
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Mage/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Rogue/death-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Rogue/death-sheet.png
new file mode 100644
index 0000000..70914dc
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Rogue/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Rogue/idle-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Rogue/idle-sheet.png
new file mode 100644
index 0000000..a625ee1
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Rogue/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Rogue/run-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Rogue/run-sheet.png
new file mode 100644
index 0000000..740543b
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Rogue/run-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Warrior/death-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Warrior/death-sheet.png
new file mode 100644
index 0000000..4691ab8
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Warrior/death-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Warrior/idle-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Warrior/idle-sheet.png
new file mode 100644
index 0000000..e61ee1d
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Warrior/idle-sheet.png differ
diff --git a/assets-cg/Entities/Enemies/Skeletons/Warrior/run-sheet.png b/assets-cg/Entities/Enemies/Skeletons/Warrior/run-sheet.png
new file mode 100644
index 0000000..dc4cfcf
Binary files /dev/null and b/assets-cg/Entities/Enemies/Skeletons/Warrior/run-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Knight/death-sheet.png b/assets-cg/Entities/Heroes/Knight/death-sheet.png
new file mode 100644
index 0000000..1f6103a
Binary files /dev/null and b/assets-cg/Entities/Heroes/Knight/death-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Knight/idle-sheet.png b/assets-cg/Entities/Heroes/Knight/idle-sheet.png
new file mode 100644
index 0000000..ca6c29f
Binary files /dev/null and b/assets-cg/Entities/Heroes/Knight/idle-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Knight/run-sheet.png b/assets-cg/Entities/Heroes/Knight/run-sheet.png
new file mode 100644
index 0000000..9564a9e
Binary files /dev/null and b/assets-cg/Entities/Heroes/Knight/run-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Rogue/death-sheet.png b/assets-cg/Entities/Heroes/Rogue/death-sheet.png
new file mode 100644
index 0000000..123942e
Binary files /dev/null and b/assets-cg/Entities/Heroes/Rogue/death-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Rogue/idle-sheet.png b/assets-cg/Entities/Heroes/Rogue/idle-sheet.png
new file mode 100644
index 0000000..b36a641
Binary files /dev/null and b/assets-cg/Entities/Heroes/Rogue/idle-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Rogue/run-sheet.png b/assets-cg/Entities/Heroes/Rogue/run-sheet.png
new file mode 100644
index 0000000..f50017d
Binary files /dev/null and b/assets-cg/Entities/Heroes/Rogue/run-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Wizzard/death-sheet.png b/assets-cg/Entities/Heroes/Wizzard/death-sheet.png
new file mode 100644
index 0000000..66271d1
Binary files /dev/null and b/assets-cg/Entities/Heroes/Wizzard/death-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Wizzard/idle-sheet.png b/assets-cg/Entities/Heroes/Wizzard/idle-sheet.png
new file mode 100644
index 0000000..23fc252
Binary files /dev/null and b/assets-cg/Entities/Heroes/Wizzard/idle-sheet.png differ
diff --git a/assets-cg/Entities/Heroes/Wizzard/run-sheet.png b/assets-cg/Entities/Heroes/Wizzard/run-sheet.png
new file mode 100644
index 0000000..6a3d85e
Binary files /dev/null and b/assets-cg/Entities/Heroes/Wizzard/run-sheet.png differ
diff --git a/assets-cg/Icon/icon-cg.kra b/assets-cg/Icon/icon-cg.kra
new file mode 100644
index 0000000..ffd8333
Binary files /dev/null and b/assets-cg/Icon/icon-cg.kra differ
diff --git a/assets-cg/Icon/icon-sel.png b/assets-cg/Icon/icon-sel.png
new file mode 100644
index 0000000..50371c0
Binary files /dev/null and b/assets-cg/Icon/icon-sel.png differ
diff --git a/assets-cg/Icon/icon-uns.png b/assets-cg/Icon/icon-uns.png
new file mode 100644
index 0000000..3020010
Binary files /dev/null and b/assets-cg/Icon/icon-uns.png differ
diff --git a/assets-cg/Tileset/tileset.png b/assets-cg/Tileset/tileset.png
new file mode 100644
index 0000000..4d36a9c
Binary files /dev/null and b/assets-cg/Tileset/tileset.png differ
diff --git a/assets-cg/fxconv-metadata.txt b/assets-cg/fxconv-metadata.txt
new file mode 100644
index 0000000..6d05532
--- /dev/null
+++ b/assets-cg/fxconv-metadata.txt
@@ -0,0 +1,4 @@
+Tileset/tileset.png:
+ type: bopti-image
+ name: img_tileset
+
diff --git a/assets-cg/ressources/TiledMaps/dungeon entry.tmx b/assets-cg/ressources/TiledMaps/dungeon entry.tmx
new file mode 100644
index 0000000..686f7d1
--- /dev/null
+++ b/assets-cg/ressources/TiledMaps/dungeon entry.tmx
@@ -0,0 +1,82 @@
+
+
diff --git a/assets-cg/ressources/TiledMaps/map dungeon 1.tmx b/assets-cg/ressources/TiledMaps/map dungeon 1.tmx
new file mode 100644
index 0000000..00ac55d
--- /dev/null
+++ b/assets-cg/ressources/TiledMaps/map dungeon 1.tmx
@@ -0,0 +1,118 @@
+
+
diff --git a/assets-cg/ressources/TiledMaps/map dungeon 2.tmx b/assets-cg/ressources/TiledMaps/map dungeon 2.tmx
new file mode 100644
index 0000000..f711184
--- /dev/null
+++ b/assets-cg/ressources/TiledMaps/map dungeon 2.tmx
@@ -0,0 +1,340 @@
+
+
diff --git a/assets-cg/ressources/maps/dungeon entry.json b/assets-cg/ressources/maps/dungeon entry.json
new file mode 100644
index 0000000..2da1ac9
--- /dev/null
+++ b/assets-cg/ressources/maps/dungeon entry.json
@@ -0,0 +1,118 @@
+{
+ "TileMapWidth": 22,
+ "TileMapHeight": 21,
+
+ "Layer 1": [
+ [297, 306, 306, 306, 306, 297, 306, 297, 297, 306, 297, 306, 297, 408, 306, 306, 278, 297, 278, 306, 278, 297],
+ [278, 278, 278, 297, 692, 306, 306, 306, 306, 297, 278, 297, 297, 417, 306, 278, 297, 306, 278, 630, 278, 297],
+ [306, 297, 278, 278, 306, 278, 278, 297, 297, 278, 278, 306, 278, 297, 297, 278, 297, 306, 297, 306, 306, 306],
+ [278, 278, 278, 278, 306, 297, 297, 306, 297, 297, 297, 278, 297, 306, 297, 297, 306, 297, 306, 306, 278, 297],
+ [306, 297, 306, 278, 297, 297, 297, 306, 278, 306, 278, 297, 306, 297, 278, 306, 278, 297, 297, 306, 297, 297],
+ [297, 278, 274, 282, 306, 297, 297, 297, 306, 297, 297, 306, 306, 297, 297, 278, 278, 297, 274, 282, 297, 297],
+ [306, 278, 273, 274, 278, 278, 306, 302, 310, 309, 330, 330, 310, 309, 299, 306, 278, 297, 274, 274, 278, 306],
+ [297, 278, 274, 282, 297, 297, 302, 311, 319, 318, 322, 323, 319, 318, 308, 310, 299, 278, 283, 273, 306, 278],
+ [297, 297, 274, 274, 302, 310, 311, 320, 328, 327, 331, 332, 328, 327, 317, 319, 308, 299, 273, 273, 297, 278],
+ [306, 297, 283, 273, 285, 319, 320, 329, 306, 306, 306, 306, 306, 297, 326, 328, 317, 280, 282, 283, 297, 306],
+ [278, 278, 283, 273, 285, 329, 324, 278, 297, 297, 306, 306, 306, 297, 297, 315, 326, 280, 283, 274, 306, 306],
+ [306, 278, 274, 274, 285, 297, 306, 306, 297, 306, 315, 297, 278, 306, 306, 278, 297, 280, 274, 282, 278, 278],
+ [278, 278, 274, 273, 285, 278, 297, 306, 306, 297, 306, 306, 278, 306, 297, 306, 306, 280, 274, 273, 278, 278],
+ [278, 599, 283, 273, 275, 306, 297, 297, 278, 306, 278, 306, 278, 297, 333, 306, 278, 272, 282, 283, 297, 297],
+ [607, 608, 609, 274, 283, 1, 278, 306, 324, 278, 297, 364, 365, 366, 278, 297, 274, 282, 274, 283, 278, 306],
+ [306, 297, 273, 438, 439, 274, 274, 306, 306, 278, 306, 373, 374, 375, 272, 273, 283, 659, 660, 274, 297, 278],
+ [278, 297, 306, 278, 278, 306, 278, 306, 306, 364, 365, 365, 366, 278, 306, 278, 306, 412, 306, 278, 278, 278],
+ [306, 278, 278, 297, 297, 297, 297, 278, 278, 373, 374, 374, 375, 297, 306, 306, 278, 297, 306, 306, 306, 306],
+ [278, 278, 306, 297, 306, 306, 278, 278, 297, 373, 374, 374, 375, 306, 306, 297, 278, 278, 278, 297, 278, 278],
+ [278, 297, 278, 306, 306, 278, 278, 278, 278, 382, 363, 374, 379, 366, 278, 297, 278, 278, 306, 297, 278, 297],
+ [297, 306, 297, 278, 278, 278, 278, 278, 297, 306, 373, 374, 374, 375, 297, 306, 297, 306, 278, 297, 306, 278]
+ ],
+
+ "Layer 2": [
+ [620, 621, 1, 682, 683, 684, 1, 640, 641, 1, 1, 406, 407, 646, 452, 453, 1, 619, 620, 621, 1, 1],
+ [629, 630, 1, 691, 409, 693, 1, 649, 650, 1, 1, 415, 416, 655, 461, 462, 1, 628, 629, 397, 398, 1],
+ [569, 570, 571, 1, 418, 419, 1, 658, 659, 1, 1, 424, 425, 664, 470, 471, 1, 421, 422, 406, 407, 408],
+ [578, 579, 580, 1, 427, 428, 1, 667, 668, 1, 1, 433, 434, 435, 479, 480, 1, 430, 431, 415, 416, 417],
+ [587, 588, 589, 1, 1, 437, 1, 1, 677, 1, 1, 442, 443, 1, 488, 489, 1, 439, 440, 424, 425, 426],
+ [596, 597, 598, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 508, 509, 510, 511, 512],
+ [605, 606, 607, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 457, 518, 519, 520, 521],
+ [614, 615, 616, 1, 1, 464, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 407, 408, 529, 629],
+ [1, 1, 585, 558, 1, 1, 1, 1, 1, 515, 1, 1, 516, 1, 1, 1, 1, 1, 416, 417, 538, 1],
+ [1, 1, 1, 1, 1, 1, 638, 639, 1, 1, 1, 1, 1, 1, 533, 1, 1, 1, 425, 546, 547, 1],
+ [1, 644, 645, 646, 1, 532, 647, 648, 1, 1, 1, 1, 1, 1, 515, 1, 1, 1, 434, 1, 1, 1],
+ [1, 653, 654, 655, 1, 1, 534, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 586, 587, 588, 589],
+ [1, 662, 663, 664, 1, 1, 514, 1, 714, 1, 1, 1, 1, 1, 1, 525, 514, 1, 595, 596, 597, 598],
+ [670, 418, 419, 420, 1, 276, 1, 1, 1, 1, 1, 1, 697, 1, 1, 1, 640, 641, 642, 605, 606, 607],
+ [1, 427, 428, 429, 567, 275, 265, 266, 1, 516, 1, 1, 1, 1, 271, 264, 649, 650, 651, 614, 615, 616],
+ [1, 436, 493, 494, 1, 440, 460, 461, 264, 265, 265, 265, 264, 264, 400, 401, 402, 403, 404, 662, 662, 663],
+ [1, 1, 502, 503, 1, 1, 469, 470, 471, 1, 1, 1, 1, 1, 409, 410, 411, 404, 669, 1, 671, 672],
+ [1, 1, 511, 512, 570, 571, 572, 573, 480, 1, 1, 715, 1, 1, 418, 419, 420, 413, 678, 1, 680, 681],
+ [1, 1, 520, 521, 579, 580, 581, 582, 583, 1, 1, 1, 1, 1, 427, 428, 429, 422, 687, 1, 689, 690],
+ [1, 1, 529, 530, 588, 589, 590, 591, 592, 1, 1, 1, 1, 1, 1, 1, 1, 431, 1, 1, 1, 1],
+ [1, 1, 538, 1, 597, 598, 599, 600, 1, 1, 1, 1, 1, 1, 1, 1, 1, 440, 1, 1, 1, 1]
+ ],
+
+ "Layer 3": [
+ [551, 552, 553, 554, 400, 401, 402, 403, 404, 642, 643, 644, 645, 451, 400, 401, 402, 403, 404, 388, 389, 390],
+ [560, 561, 562, 563, 564, 410, 411, 412, 413, 651, 652, 653, 654, 460, 409, 410, 411, 412, 473, 474, 475, 399],
+ [474, 475, 0, 572, 573, 574, 420, 421, 422, 660, 661, 662, 663, 469, 418, 419, 420, 481, 482, 483, 484, 485],
+ [483, 484, 485, 581, 582, 583, 429, 430, 431, 669, 670, 671, 672, 478, 427, 428, 429, 490, 491, 492, 493, 494],
+ [492, 493, 494, 590, 591, 592, 438, 439, 440, 678, 679, 680, 681, 487, 436, 437, 438, 499, 500, 501, 502, 503],
+ [501, 502, 503, 599, 600, 446, 447, 448, 686, 687, 688, 689, 690, 496, 497, 498, 447, 388, 389, 390, 610, 611],
+ [510, 511, 512, 608, 609, 455, 456, 457, 1, 1, 313, 314, 1, 505, 506, 455, 456, 397, 398, 399, 619, 620],
+ [519, 520, 521, 617, 618, 464, 465, 466, 1, 1, 1, 1, 1, 1, 1, 464, 465, 406, 550, 551, 552, 553],
+ [625, 626, 627, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 415, 559, 560, 561, 562],
+ [634, 635, 636, 637, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 424, 568, 569, 570, 571],
+ [643, 391, 392, 393, 394, 1, 1, 1, 1, 1, 1, 1, 1, 1, 391, 1, 1, 433, 577, 578, 579, 580],
+ [652, 400, 401, 402, 403, 404, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 622, 623, 624, 625, 626, 1],
+ [661, 409, 410, 411, 412, 413, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 631, 632, 633, 634, 635, 636],
+ [473, 474, 475, 476, 421, 422, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 640, 641, 1, 643, 644, 645],
+ [482, 483, 484, 485, 430, 431, 451, 452, 453, 1, 1, 1, 1, 1, 1, 392, 393, 394, 1, 652, 653, 654],
+ [491, 492, 1, 551, 552, 553, 554, 555, 462, 1, 1, 1, 1, 1, 392, 393, 394, 472, 473, 474, 475, 476],
+ [500, 501, 559, 560, 561, 562, 563, 564, 565, 1, 1, 1, 1, 400, 401, 402, 403, 481, 482, 483, 484, 485],
+ [509, 510, 568, 569, 472, 473, 474, 475, 574, 1, 1, 1, 1, 409, 410, 411, 412, 490, 491, 492, 493, 494],
+ [518, 519, 577, 578, 481, 482, 483, 484, 485, 1, 1, 1, 1, 418, 419, 420, 421, 499, 500, 501, 502, 503],
+ [527, 528, 586, 587, 490, 491, 492, 493, 494, 1, 1, 1, 1, 427, 428, 429, 430, 508, 509, 510, 511, 512],
+ [536, 537, 595, 596, 499, 500, 501, 502, 503, 1, 1, 1, 1, 436, 437, 438, 439, 517, 518, 519, 520, 521]
+ ],
+
+ "Hitboxes": [
+ [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, 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, 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, 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, 0, 0, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 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, 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, 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, 0],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ],
+
+ "NextMaps": [
+ {
+ "Number": 2,
+
+ "Path": "ressources/maps/map dungeon 1.json",
+
+ "PlayerInitPos": {
+ "x": 22,
+ "y": 30
+ }
+ }
+ ],
+
+ "PlayerInitPos": {
+ "x": 10,
+ "y": 11
+ }
+}
diff --git a/assets-cg/ressources/maps/map dungeon 1.json b/assets-cg/ressources/maps/map dungeon 1.json
new file mode 100644
index 0000000..971d4d0
--- /dev/null
+++ b/assets-cg/ressources/maps/map dungeon 1.json
@@ -0,0 +1,434 @@
+{
+ "TileMapWidth": 51,
+ "TileMapHeight": 33,
+
+ "Layer 1": [
+ [19, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 20, 1, 1, 1, 1, 1, 19, 31, 31, 163, 165, 31, 31, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [28, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 29, 1, 1, 1, 1, 1, 28, 3, 2, 163, 165, 2, 4, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [28, 12, 11, 11, 11, 11, 95, 95, 11, 11, 11, 11, 13, 29, 1, 1, 1, 1, 1, 28, 12, 11, 163, 165, 11, 13, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [28, 154, 155, 155, 155, 130, 131, 131, 132, 155, 155, 155, 156, 29, 1, 1, 1, 1, 1, 28, 154, 155, 167, 166, 155, 156, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [28, 163, 164, 164, 164, 139, 140, 140, 141, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 31, 20],
+ [28, 163, 164, 181, 182, 148, 149, 149, 150, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 29],
+ [28, 163, 164, 190, 191, 164, 164, 164, 164, 183, 164, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 12, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 13, 29],
+ [28, 163, 164, 164, 164, 193, 164, 164, 164, 164, 193, 164, 165, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 154, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 156, 29],
+ [28, 172, 173, 173, 173, 173, 158, 157, 173, 173, 173, 173, 174, 29, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 193, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 29],
+ [37, 22, 22, 22, 359, 46, 163, 165, 46, 377, 22, 22, 22, 38, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 158, 157, 173, 173, 174, 29],
+ [1, 1, 1, 1, 28, 3, 163, 165, 4, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 46, 46, 46, 46, 46, 46, 46, 46, 163, 165, 46, 46, 46, 44],
+ [1, 1, 1, 1, 28, 12, 163, 165, 13, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 3, 2, 2, 2, 2, 2, 2, 2, 163, 165, 2, 2, 4, 29],
+ [1, 1, 1, 1, 28, 154, 167, 166, 156, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 12, 11, 11, 11, 11, 11, 11, 11, 163, 165, 11, 11, 13, 29],
+ [1, 1, 1, 1, 28, 163, 164, 164, 165, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 163, 164, 164, 164, 164, 165, 30, 31, 31, 31, 31, 31, 31, 31, 31, 31, 32, 154, 155, 155, 155, 155, 155, 155, 155, 167, 166, 155, 155, 156, 29],
+ [1, 1, 1, 1, 28, 163, 164, 164, 165, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 163, 164, 164, 164, 164, 165, 6, 2, 2, 2, 2, 2, 2, 2, 2, 2, 7, 163, 164, 164, 157, 173, 173, 173, 173, 173, 173, 173, 173, 174, 29],
+ [1, 1, 1, 1, 28, 163, 164, 164, 165, 15, 11, 11, 11, 11, 11, 11, 10, 11, 11, 16, 163, 164, 164, 164, 164, 165, 15, 11, 11, 11, 11, 11, 11, 11, 11, 11, 16, 163, 164, 164, 165, 21, 22, 22, 22, 22, 22, 22, 22, 22, 38],
+ [1, 1, 1, 1, 28, 163, 164, 164, 166, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 167, 164, 164, 164, 164, 166, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 155, 167, 164, 164, 165, 30, 31, 31, 31, 31, 31, 31, 31, 31, 20],
+ [1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 158, 183, 164, 164, 164, 157, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 158, 164, 164, 165, 6, 2, 2, 2, 2, 2, 2, 2, 4, 29],
+ [1, 1, 1, 1, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 163, 164, 164, 164, 164, 165, 21, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 163, 164, 164, 165, 15, 11, 11, 10, 11, 11, 11, 11, 13, 29],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 183, 166, 155, 155, 155, 155, 155, 155, 155, 155, 156, 29],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 29],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 38],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 19, 31, 31, 31, 31, 31, 32, 163, 164, 164, 164, 164, 165, 30, 31, 31, 31, 31, 31, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 19, 31, 31, 31, 31, 31, 360, 3, 2, 2, 2, 2, 7, 163, 164, 164, 164, 164, 165, 6, 2, 2, 2, 2, 4, 386, 31, 31, 31, 31, 31, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 28, 3, 2, 2, 2, 4, 33, 12, 11, 11, 11, 11, 16, 163, 164, 164, 164, 164, 165, 15, 11, 11, 11, 11, 13, 33, 2, 2, 2, 2, 4, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 28, 12, 11, 11, 11, 13, 234, 154, 155, 155, 155, 155, 155, 167, 164, 164, 164, 164, 166, 155, 155, 155, 155, 155, 156, 234, 11, 11, 10, 11, 13, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 28, 154, 155, 155, 155, 156, 243, 163, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 165, 243, 154, 155, 155, 155, 156, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 28, 163, 164, 192, 193, 166, 155, 167, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 164, 166, 155, 167, 164, 164, 164, 165, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 28, 172, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 158, 157, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 173, 174, 29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 37, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
+ ],
+
+ "Layer 2": [
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 161, 162, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 64, 65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 65, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 74, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 701, 1, 1, 701, 698, 1, 1, 188, 189, 1, 1, 698, 701, 1, 1, 701, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 710, 1, 1, 710, 707, 1, 1, 188, 189, 1, 1, 707, 710, 1, 1, 710, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1, 1, 1, 1, 1, 1, 1, 188, 189, 1, 1, 1, 1, 1, 1, 1, 1, 252, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 197, 198, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
+ ],
+
+ "Layer 3": [
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 55, 56, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 341, 342, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 395, 396, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 341, 342, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 395, 396, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 341, 342, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
+ [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 350, 351, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
+ ],
+
+ "Hitboxes": [
+ [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, 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, 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, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 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, 0, 0],
+ [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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],
+ [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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],
+ [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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],
+ [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0],
+ [1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ [0, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0],
+ [0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ [0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1],
+ [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 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, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 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, 0, 0, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 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, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
+ [0, 0, 0, 0, 0, 0, 0, 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, 0, 0, 0, 0, 1, 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, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]
+ ],
+
+ "NextMaps": [
+ {
+ "Number": 2,
+
+ "Path": "ressources/maps/dungeon entry.json",
+
+ "PlayerInitPos": {
+ "x": 10,
+ "y": 7
+ }
+ }
+ ],
+
+ "Entities": [
+ [
+ {
+ "Type": "TransformComponent",
+
+ "Position": {
+ "x": 47,
+ "y": 12
+ },
+
+ "Dimension": {
+ "x": 48,
+ "y": 32
+ },
+
+ "Scale": 2,
+
+ "Speed": 0
+ },
+ {
+ "Type": "SpriteComponent",
+
+ "Path": "ressources/props/lever.png"
+ },
+ {
+ "Type": "AnimationSystem",
+
+ "NbFrames": 3,
+
+ "CurrentFrame": 0,
+
+ "FrameDelay": 10,
+
+ "PlayAnimation": false
+ },
+ {
+ "Type": "HitboxComponent",
+
+ "Scale": {
+ "x": 0.33333,
+ "y": 0.21875
+ },
+
+ "Position": {
+ "x": 0.5,
+ "y": 0.82
+ }
+ },
+ {
+ "Type": "Lever",
+
+ "Channel": 0
+ }
+ ],
+ [
+ {
+ "Type": "TransformComponent",
+
+ "Position": {
+ "x": 47,
+ "y": 18
+ },
+
+ "Dimension": {
+ "x": 48,
+ "y": 32
+ },
+
+ "Scale": 2,
+
+ "Speed": 0
+ },
+ {
+ "Type": "SpriteComponent",
+
+ "Path": "ressources/props/lever.png"
+ },
+ {
+ "Type": "AnimationSystem",
+
+ "NbFrames": 3,
+
+ "CurrentFrame": 0,
+
+ "FrameDelay": 10,
+
+ "PlayAnimation": false
+ },
+ {
+ "Type": "HitboxComponent",
+
+ "Scale": {
+ "x": 0.33333,
+ "y": 0.21875
+ },
+
+ "Position": {
+ "x": 0.5,
+ "y": 0.82
+ }
+ },
+ {
+ "Type": "Lever",
+
+ "Channel": 1
+ }
+ ],
+ [
+ {
+ "Type": "TransformComponent",
+
+ "Position": {
+ "x": 23,
+ "y": 1
+ },
+
+ "Dimension": {
+ "x": 16,
+ "y": 32
+ },
+
+ "Scale": 2,
+
+ "Speed": 0
+ },
+ {
+ "Type": "SpriteComponent",
+
+ "Path": "ressources/props/lock.png"
+ },
+ {
+ "Type": "AnimationSystem",
+
+ "NbFrames": 7,
+
+ "CurrentFrame": 0,
+
+ "FrameDelay": 8,
+
+ "PlayAnimation": false
+ },
+ {
+ "Type": "Lock",
+
+ "Channel": 2
+ }
+ ],
+ [
+ {
+ "Type": "TransformComponent",
+
+ "Position": {
+ "x": 45,
+ "y": 10
+ },
+
+ "Dimension": {
+ "x": 32,
+ "y": 48
+ },
+
+ "Scale": 2,
+
+ "Speed": 0
+ },
+ {
+ "Type": "SpriteComponent",
+
+ "Path": "ressources/props/barred door 2.png"
+ },
+ {
+ "Type": "AnimationSystem",
+
+ "NbFrames": 8,
+
+ "CurrentFrame": 0,
+
+ "FrameDelay": 3,
+
+ "PlayAnimation": false
+ },
+ {
+ "Type": "HitboxComponent",
+
+ "Scale": {
+ "x": 1,
+ "y": 0.6666666666666
+ },
+
+ "Position": {
+ "x": 0,
+ "y": 1
+ }
+ },
+ {
+ "Type": "Door",
+
+ "States": [
+ {
+ "Channel": 0,
+ "State": false
+ },
+ {
+ "Channel": 1,
+ "State": true
+ }
+ ]
+ }
+ ],
+ [
+ {
+ "Type": "TransformComponent",
+
+ "Position": {
+ "x": 6,
+ "y": 9
+ },
+
+ "Dimension": {
+ "x": 32,
+ "y": 48
+ },
+
+ "Scale": 2,
+
+ "Speed": 0
+ },
+ {
+ "Type": "SpriteComponent",
+
+ "Path": "ressources/props/barred door 2.png"
+ },
+ {
+ "Type": "AnimationSystem",
+
+ "NbFrames": 8,
+
+ "CurrentFrame": 0,
+
+ "FrameDelay": 3,
+
+ "PlayAnimation": false
+ },
+ {
+ "Type": "HitboxComponent",
+
+ "Scale": {
+ "x": 1,
+ "y": 0.6666666666666
+ },
+
+ "Position": {
+ "x": 0,
+ "y": 1
+ }
+ },
+ {
+ "Type": "Door",
+
+ "States": [
+ {
+ "Channel": 0,
+ "State": true
+ },
+ {
+ "Channel": 1,
+ "State": true
+ }
+ ]
+ }
+ ]
+ ]
+}
diff --git a/assets-cg/ressources/props/Props/Props 2.png b/assets-cg/ressources/props/Props/Props 2.png
new file mode 100644
index 0000000..a99fab4
Binary files /dev/null and b/assets-cg/ressources/props/Props/Props 2.png differ
diff --git a/assets-cg/ressources/props/Props/Props.png b/assets-cg/ressources/props/Props/Props.png
new file mode 100644
index 0000000..188dcb3
Binary files /dev/null and b/assets-cg/ressources/props/Props/Props.png differ
diff --git a/assets-cg/ressources/props/barred door 2.png b/assets-cg/ressources/props/barred door 2.png
new file mode 100644
index 0000000..9f51a56
Binary files /dev/null and b/assets-cg/ressources/props/barred door 2.png differ
diff --git a/assets-cg/ressources/props/barred door.png b/assets-cg/ressources/props/barred door.png
new file mode 100644
index 0000000..62b0109
Binary files /dev/null and b/assets-cg/ressources/props/barred door.png differ
diff --git a/assets-cg/ressources/props/big chest.png b/assets-cg/ressources/props/big chest.png
new file mode 100644
index 0000000..7e274df
Binary files /dev/null and b/assets-cg/ressources/props/big chest.png differ
diff --git a/assets-cg/ressources/props/key.png b/assets-cg/ressources/props/key.png
new file mode 100644
index 0000000..974f6bd
Binary files /dev/null and b/assets-cg/ressources/props/key.png differ
diff --git a/assets-cg/ressources/props/lever.png b/assets-cg/ressources/props/lever.png
new file mode 100644
index 0000000..25704c0
Binary files /dev/null and b/assets-cg/ressources/props/lever.png differ
diff --git a/assets-cg/ressources/props/lock.png b/assets-cg/ressources/props/lock.png
new file mode 100644
index 0000000..d638470
Binary files /dev/null and b/assets-cg/ressources/props/lock.png differ
diff --git a/assets-cg/ressources/props/small chest.png b/assets-cg/ressources/props/small chest.png
new file mode 100644
index 0000000..7476600
Binary files /dev/null and b/assets-cg/ressources/props/small chest.png differ
diff --git a/assets-cg/ressources/props/small empty jare.png b/assets-cg/ressources/props/small empty jare.png
new file mode 100644
index 0000000..91c683e
Binary files /dev/null and b/assets-cg/ressources/props/small empty jare.png differ
diff --git a/assets-cg/ressources/props/tall empty jare.png b/assets-cg/ressources/props/tall empty jare.png
new file mode 100644
index 0000000..5ac3a28
Binary files /dev/null and b/assets-cg/ressources/props/tall empty jare.png differ
diff --git a/assets-cg/ressources/props/wood barrel.png b/assets-cg/ressources/props/wood barrel.png
new file mode 100644
index 0000000..890ce56
Binary files /dev/null and b/assets-cg/ressources/props/wood barrel.png differ
diff --git a/assets-cg/ressources/props/wood box.png b/assets-cg/ressources/props/wood box.png
new file mode 100644
index 0000000..87a9898
Binary files /dev/null and b/assets-cg/ressources/props/wood box.png differ
diff --git a/assets-cg/ressources/props/wood door.png b/assets-cg/ressources/props/wood door.png
new file mode 100644
index 0000000..d2f3caa
Binary files /dev/null and b/assets-cg/ressources/props/wood door.png differ
diff --git a/assets-cg/ressources/tileset/tileset.png b/assets-cg/ressources/tileset/tileset.png
new file mode 100644
index 0000000..4d36a9c
Binary files /dev/null and b/assets-cg/ressources/tileset/tileset.png differ
diff --git a/assets-cg/ressources/tileset/tileset.tsx b/assets-cg/ressources/tileset/tileset.tsx
new file mode 100644
index 0000000..48bb47d
--- /dev/null
+++ b/assets-cg/ressources/tileset/tileset.tsx
@@ -0,0 +1,4 @@
+
+
+
+
diff --git a/assets-cg/ressources/weapons/Bone/Bone.png b/assets-cg/ressources/weapons/Bone/Bone.png
new file mode 100644
index 0000000..b1e5587
Binary files /dev/null and b/assets-cg/ressources/weapons/Bone/Bone.png differ
diff --git a/assets-cg/ressources/weapons/Hands/Hands.png b/assets-cg/ressources/weapons/Hands/Hands.png
new file mode 100644
index 0000000..a181c2e
Binary files /dev/null and b/assets-cg/ressources/weapons/Hands/Hands.png differ
diff --git a/assets-cg/ressources/weapons/Wood/Wood.png b/assets-cg/ressources/weapons/Wood/Wood.png
new file mode 100644
index 0000000..61ea975
Binary files /dev/null and b/assets-cg/ressources/weapons/Wood/Wood.png differ
diff --git a/src/event.h b/src/event.h
new file mode 100644
index 0000000..7000bc8
--- /dev/null
+++ b/src/event.h
@@ -0,0 +1,10 @@
+#ifndef EVENT_H
+#define EVENT_H
+
+#include
+
+typedef struct {
+ bool keys[0xa6];
+} event_t;
+
+#endif // EVENT_H
\ No newline at end of file
diff --git a/src/game.c b/src/game.c
new file mode 100644
index 0000000..2b6d5bc
--- /dev/null
+++ b/src/game.c
@@ -0,0 +1,11 @@
+#include
+#include "game.h"
+
+int game_init(game_t *game)
+{
+ game = kmalloc(sizeof(game_t), NULL);
+
+ if(game == NULL) return 1;
+
+ return 0;
+}
\ No newline at end of file
diff --git a/src/game.h b/src/game.h
new file mode 100644
index 0000000..141779c
--- /dev/null
+++ b/src/game.h
@@ -0,0 +1,25 @@
+#ifndef GAME_H
+#define GAME_H
+
+#include
+#include "event.h"
+#include "texture_manager.h"
+
+#define WINDOW_WIDTH 396
+#define WINDOW_HEIGHT 224
+
+typedef struct {
+ event_t event;
+ texture_manager_t *texture_manager;
+ bool is_running;
+} game_t;
+
+int game_init(game_t*);
+
+int game_handle_event(game_t*);
+int game_update(game_t*);
+int game_render(game_t*);
+
+int game_exit(game_t*);
+
+#endif // GAME_H
\ No newline at end of file
diff --git a/src/linked_list.c b/src/linked_list.c
new file mode 100644
index 0000000..49504b1
--- /dev/null
+++ b/src/linked_list.c
@@ -0,0 +1,137 @@
+#include
+#include "linked_list.h"
+
+#include
+
+void linked_list_init(linked_list_t *linked_list, const size_t data_size)
+{
+ linked_list->data_size = data_size;
+ linked_list->first = NULL;
+ linked_list->last = NULL;
+}
+
+elem_t *elem_create(linked_list_t *linked_list)
+{
+ elem_t *elem;
+ elem = kmalloc(sizeof(elem_t), NULL);
+ if(!elem) return NULL;
+
+ elem->data = kmalloc(linked_list->data_size, NULL);
+ if(!elem->data)
+ {
+ kfree(elem);
+ return NULL;
+ }
+
+ return elem;
+}
+
+void linked_list_push_back(linked_list_t *linked_list, elem_t *elem)
+{
+ if(!elem) return;
+
+ elem->prev = linked_list->last;
+ elem->next = NULL;
+
+ if(linked_list->last)
+ linked_list->last->next = elem;
+ else
+ linked_list->first = elem;
+
+ linked_list->last = elem;
+}
+
+void linked_list_push_front(linked_list_t *linked_list, elem_t *elem)
+{
+ if(!elem) return;
+
+ elem->next = linked_list->first;
+ elem->prev = NULL;
+
+ if(linked_list->first)
+ linked_list->first->prev = elem;
+ else
+ linked_list->last = elem;
+
+ linked_list->first = elem;
+}
+
+void linked_list_pop_back(linked_list_t *linked_list)
+{
+ elem_t *tmp = linked_list->last;
+ if(!tmp) return;
+
+ linked_list->last = tmp->prev;
+
+ if(linked_list->last)
+ linked_list->last->next = NULL;
+ else
+ linked_list->first = NULL;
+
+ kfree(tmp->data);
+ kfree(tmp);
+ if(tmp != NULL)
+ {
+ dtext(80, 80, C_RED, "WHAT THE HELLL ??");
+ }
+}
+
+void linked_list_pop_front(linked_list_t *linked_list)
+{
+ elem_t *tmp = linked_list->first;
+ if(!tmp) return;
+
+ linked_list->first = tmp->next;
+
+ if(linked_list->first)
+ linked_list->first->prev = NULL;
+ else
+ linked_list->last = NULL;
+
+ kfree(tmp->data);
+ kfree(tmp);
+}
+
+size_t linked_list_get_size(linked_list_t *linked_list)
+{
+ elem_t *actual_elem = linked_list->first;
+ if(!actual_elem) return 0;
+
+ size_t size = 0;
+ while(actual_elem)
+ {
+ actual_elem = actual_elem->next;
+ size++;
+ }
+ return size;
+}
+
+bool linked_list_is_empty(linked_list_t *linked_list)
+{
+ return !linked_list->first;
+}
+
+bool linked_list_is_in_bound(linked_list_t *linked_list, size_t index)
+{
+ return index < linked_list_get_size(linked_list);
+}
+
+elem_t *linked_list_get_elem(linked_list_t *linked_list, size_t index)
+{
+ if(!linked_list_is_in_bound(linked_list, index)) return NULL;
+
+ elem_t *actual_elem = linked_list->first;
+ if(!actual_elem) return NULL;
+
+ for (size_t i = 0; i < index; i++)
+ {
+ actual_elem = actual_elem->next;
+ }
+
+ return actual_elem;
+}
+/*
+void linked_list_insert(linked_list_t *linked_list, elem_t *elem, size_t index)
+{
+
+}*/
\ No newline at end of file
diff --git a/src/linked_list.h b/src/linked_list.h
new file mode 100644
index 0000000..05909a3
--- /dev/null
+++ b/src/linked_list.h
@@ -0,0 +1,95 @@
+#ifndef LINKED_LIST_H
+#define LINKED_LIST_H
+
+#include
+
+/* elem_t: Element base for linked lists
+ This struct is the base for storing data.
+
+ @data Raw pointer to any type of data
+ @prev Pointer to the prev element in the linked list
+ @next Pointer to the next element in the linked list */
+typedef struct elem_t {
+ void *data;
+ struct elem_t *prev;
+ struct elem_t *next;
+} elem_t;
+
+/* linked_list_t: Base of linked lists
+ This struct is the base for creating linked lists.
+
+ @data_size Size of the data stored in the linked list
+ @first Pointer to the first element in the linked list
+ @last Pointer to the last element in the linked list */
+typedef struct {
+ size_t data_size;
+ elem_t *first;
+ elem_t *last;
+} linked_list_t;
+
+/* linked_list_init(): Init a linked_list_t
+ This function is necessary if you create a linked list.
+
+ @linked_list Pointer to an linked_list_t
+ @data_size Data size for the linked list */
+void linked_list_init(linked_list_t *linked_list, const size_t data_size);
+
+/* elem_create(): Create an elem to fill with data and insert in a linked list.
+ This function is usefull when you want to initialise an elem with the proper data_size.
+
+ @linked_list Pointer to an linked_list_t
+ Return adress of initialised elem, NULL on error. */
+elem_t *elem_create(linked_list_t *linked_list);
+
+/* linked_list_push_back(): Insert an elem_t from the back in a linked_list_t.
+
+ @linked_list Pointer to an linked_list_t
+ @elem Pointer to an elem_t
+ Insert elem in the back of the linked list, do nothing on error. */
+void linked_list_push_back(linked_list_t *linked_list, elem_t *elem);
+
+/* linked_list_push_front(): Insert an elem_t from the front in a linked_list_t.
+
+ @linked_list Pointer to an linked_list_t
+ @elem Pointer to an elem_t
+ Insert elem in the front of the linked list, do nothing on error. */
+void linked_list_push_front(linked_list_t *linked_list, elem_t *elem);
+
+/* linked_list_pop_back(): Delete the last elem in the given linked list
+
+ @linked_list Pointer to an linked_list_t
+ Delete last elem of the linked list, do nothing on error. */
+void linked_list_pop_back(linked_list_t *linked_list);
+
+/* linked_list_pop_front(): Delete the first elem in the given linked list
+
+ @linked_list Pointer to an linked_list_t
+ Delete first elem of the linked list, do nothing on error. */
+void linked_list_pop_front(linked_list_t *linked_list);
+
+/* linked_list_get_size(): Get the size of the given linked list
+
+ @linked_list Pointer to an linked_list_t
+ Return size of the given linked list, 0 if it's empty. */
+size_t linked_list_get_size(linked_list_t *linked_list);
+
+/* linked_list_is_empty(): Check if the given linked list is empty
+
+ @linked_list Pointer to an linked_list_t
+ Return true if the given linked list is empty else false. */
+bool linked_list_is_empty(linked_list_t *linked_list);
+
+/* linked_list_is_in_bound(): Check if the given index is whithin the range of the linked list
+
+ @linked_list Pointer to an linked_list_t
+ Return true if the given linked list is empty else false. */
+bool linked_list_is_in_bound(linked_list_t *linked_list, size_t index);
+
+/* linked_list_get_elem(): Get element at the given index in the linked list
+
+ @linked_list Pointer to an linked_list_t
+ @index Index of the wanted element
+ Return the element, NULL on error. */
+elem_t *linked_list_get_elem(linked_list_t *linked_list, size_t index);
+
+#endif // LINKED_LIST_H
\ No newline at end of file
diff --git a/src/main.c b/src/main.c
new file mode 100644
index 0000000..858aa47
--- /dev/null
+++ b/src/main.c
@@ -0,0 +1,83 @@
+//#include "game.h"
+/*
+int main(void)
+{
+ game_t *game;
+
+ game_init(game);
+
+ while(game->is_running)
+ {
+ game_handle_event(game);
+ game_update(game);
+ game_render(game);
+ }
+
+ return game_exit(game);
+}
+*/
+
+#include
+#include
+#include
+#include "linked_list.h"
+
+int main(void)
+{
+ dclear(C_WHITE);
+
+ linked_list_t list;
+ linked_list_init(&list, sizeof(int));
+
+ elem_t *elem = elem_create(&list);
+ if((!elem) || (!elem->data))
+ {
+ dtext(1, 1, C_BLACK, "element is not correctly initialised");
+ goto Exit;
+ }
+ *(int *)elem->data = 42;
+
+ elem_t *elem2 = elem_create(&list);
+ if((!elem2) || (!elem2->data))
+ {
+ dtext(1, 1, C_BLACK, "element 2 is not correctly initialised");
+ goto Exit;
+ }
+
+ linked_list_push_back(&list, elem);
+ linked_list_push_back(&list, elem2);
+
+ if(*(int *)list.first->data == 42)
+ {
+ dtext(1, 1, C_BLACK, "element is correctly initialised");
+ }
+
+ if(list.first == elem && list.last == elem2)
+ {
+ dtext(1, 20, C_BLACK, "elements are correctly putted in the list");
+ }
+
+ linked_list_pop_back(&list);
+ if(list.first == list.last && list.first == elem)
+ {
+ dtext(1, 40, C_BLACK, "element 2 is correctly removed from the back");
+ }
+/*
+ linked_list_pop_back(&list);
+ if(list.first == list.last && list.first == NULL)
+ {
+ dtext(1, 60, C_BLACK, "element is correctly removed from the back");
+ }
+*/
+ Exit:
+ //if(elem) kfree(elem->data);
+ //if(elem) kfree(elem);
+ //if(elem2) kfree(elem2->data);
+ //if(elem2) kfree(elem2);
+
+ dupdate();
+
+ getkey();
+
+ return 1;
+}
\ No newline at end of file
diff --git a/src/texture_manager.c b/src/texture_manager.c
new file mode 100644
index 0000000..e69de29
diff --git a/src/texture_manager.h b/src/texture_manager.h
new file mode 100644
index 0000000..e1988d4
--- /dev/null
+++ b/src/texture_manager.h
@@ -0,0 +1,8 @@
+#ifndef TEXTURE_MANAGER_H
+#define TEXTURE_MANAGER_H
+
+typedef struct {
+
+} texture_manager_t;
+
+#endif // TEXTURE_MANAGER_H
\ No newline at end of file
diff --git a/src/vector2d.c b/src/vector2d.c
new file mode 100644
index 0000000..dcffcf2
--- /dev/null
+++ b/src/vector2d.c
@@ -0,0 +1,82 @@
+#include "vector2d.h"
+
+bool has_intersection(const rect_t * A, const rect_t * B)
+{
+ int Amin, Amax, Bmin, Bmax;
+
+ if (!A || !B) {
+ return false;
+ }
+
+ /* Special cases for empty rects */
+ if (rect_empty(A) || rect_empty(B)) {
+ return false;
+ }
+
+ /* Horizontal intersection */
+ Amin = A->x;
+ Amax = Amin + A->w;
+ Bmin = B->x;
+ Bmax = Bmin + B->w;
+ if (Bmin > Amin)
+ Amin = Bmin;
+ if (Bmax < Amax)
+ Amax = Bmax;
+ if (Amax <= Amin)
+ return false;
+
+ /* Vertical intersection */
+ Amin = A->y;
+ Amax = Amin + A->h;
+ Bmin = B->y;
+ Bmax = Bmin + B->h;
+ if (Bmin > Amin)
+ Amin = Bmin;
+ if (Bmax < Amax)
+ Amax = Bmax;
+ if (Amax <= Amin)
+ return false;
+
+ return true;
+}
+
+bool intersect_rect(const rect_t * A, const rect_t * B, rect_t * result)
+{
+ int Amin, Amax, Bmin, Bmax;
+
+ if (!A || !B || !result) {
+ // TODO error message
+ return false;
+ }
+
+ /* Special cases for empty rects */
+ if (rect_empty(A) || rect_empty(B)) {
+ return false;
+ }
+
+ /* Horizontal intersection */
+ Amin = A->x;
+ Amax = Amin + A->w;
+ Bmin = B->x;
+ Bmax = Bmin + B->w;
+ if (Bmin > Amin)
+ Amin = Bmin;
+ result->x = Amin;
+ if (Bmax < Amax)
+ Amax = Bmax;
+ result->w = Amax - Amin;
+
+ /* Vertical intersection */
+ Amin = A->y;
+ Amax = Amin + A->h;
+ Bmin = B->y;
+ Bmax = Bmin + B->h;
+ if (Bmin > Amin)
+ Amin = Bmin;
+ result->y = Amin;
+ if (Bmax < Amax)
+ Amax = Bmax;
+ result->h = Amax - Amin;
+
+ return !rect_empty(result);
+}
\ No newline at end of file
diff --git a/src/vector2d.h b/src/vector2d.h
new file mode 100644
index 0000000..dc9badb
--- /dev/null
+++ b/src/vector2d.h
@@ -0,0 +1,31 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\
+* All of the functions declared in this file and *
+* defined in vector2d.c are from the SDL2 source code. *
+* They are just renamed. *
+* => https://github.com/libsdl-org/SDL *
+\* * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+
+#ifndef VECTOR2D_H
+#define VECTOR2D_H
+
+#include
+
+typedef struct {
+ int x, y;
+} vector2d_t;
+
+typedef struct {
+ int x, y;
+ int w, h;
+} rect_t;
+
+#define point_in_rect(P, R) (((P)->x >= (R)->x) && ((P)->x < ((R)->x + (R)->w)) && \
+ ((P)->y >= (R)->y) && ((P)->y < ((R)->y + (R)->h)))
+
+#define rect_empty(X) ((!(X)) || ((X)->w <= 0) || ((X)->h <= 0))
+
+bool has_intersection(const rect_t * A, const rect_t * B);
+
+bool intersect_rect(const rect_t * A, const rect_t * B, rect_t * result);
+
+#endif // VECTOR2D_H
\ No newline at end of file