From f55f9f4a7a1536d5886c4892e85301af26b83744 Mon Sep 17 00:00:00 2001 From: michi Date: Fri, 1 Aug 2025 18:40:40 +0200 Subject: [PATCH] Initial commit: Browser Survival Game --- .gitignore | 85 ++ README.md | 77 ++ assets/1 Tiles/SwampTile_01.png | Bin 0 -> 491 bytes assets/1 Tiles/SwampTile_02.png | Bin 0 -> 535 bytes assets/1 Tiles/SwampTile_03.png | Bin 0 -> 524 bytes assets/1 Tiles/SwampTile_04.png | Bin 0 -> 502 bytes assets/1 Tiles/SwampTile_05.png | Bin 0 -> 513 bytes assets/1 Tiles/SwampTile_06.png | Bin 0 -> 564 bytes assets/1 Tiles/SwampTile_07.png | Bin 0 -> 555 bytes assets/1 Tiles/SwampTile_08.png | Bin 0 -> 616 bytes assets/1 Tiles/SwampTile_09.png | Bin 0 -> 552 bytes assets/1 Tiles/SwampTile_10.png | Bin 0 -> 538 bytes assets/1 Tiles/SwampTile_12.png | Bin 0 -> 607 bytes assets/1 Tiles/SwampTile_13.png | Bin 0 -> 524 bytes assets/1 Tiles/SwampTile_14.png | Bin 0 -> 527 bytes assets/1 Tiles/SwampTile_15.png | Bin 0 -> 594 bytes assets/1 Tiles/SwampTile_16.png | Bin 0 -> 498 bytes assets/1 Tiles/SwampTile_17.png | Bin 0 -> 562 bytes assets/1 Tiles/SwampTile_18.png | Bin 0 -> 467 bytes assets/1 Tiles/SwampTile_19.png | Bin 0 -> 598 bytes assets/1 Tiles/SwampTile_20.png | Bin 0 -> 461 bytes assets/1 Tiles/SwampTile_21.png | Bin 0 -> 528 bytes assets/1 Tiles/SwampTile_22.png | Bin 0 -> 574 bytes assets/1 Tiles/SwampTile_23.png | Bin 0 -> 508 bytes assets/1 Tiles/SwampTile_24.png | Bin 0 -> 567 bytes assets/1 Tiles/SwampTile_25.png | Bin 0 -> 516 bytes assets/1 Tiles/SwampTile_26.png | Bin 0 -> 534 bytes assets/1 Tiles/SwampTile_27.png | Bin 0 -> 464 bytes assets/1 Tiles/SwampTile_28.png | Bin 0 -> 573 bytes assets/1 Tiles/SwampTile_29.png | Bin 0 -> 548 bytes assets/1 Tiles/SwampTile_30.png | Bin 0 -> 587 bytes assets/1 Tiles/SwampTile_31.png | Bin 0 -> 537 bytes assets/1 Tiles/SwampTile_32.png | Bin 0 -> 583 bytes assets/1 Tiles/SwampTile_33.png | Bin 0 -> 487 bytes assets/1 Tiles/SwampTile_34.png | Bin 0 -> 536 bytes assets/1 Tiles/SwampTile_35.png | Bin 0 -> 518 bytes assets/1 Tiles/SwampTile_36.png | Bin 0 -> 502 bytes assets/1 Tiles/SwampTile_37.png | Bin 0 -> 522 bytes assets/1 Tiles/SwampTile_39.png | Bin 0 -> 531 bytes assets/1 Tiles/SwampTile_40.png | Bin 0 -> 591 bytes assets/1 Tiles/SwampTile_41.png | Bin 0 -> 568 bytes assets/1 Tiles/SwampTile_42.png | Bin 0 -> 560 bytes assets/1 Tiles/SwampTile_43.png | Bin 0 -> 579 bytes assets/1 Tiles/SwampTile_44.png | Bin 0 -> 578 bytes assets/1 Tiles/SwampTile_45.png | Bin 0 -> 509 bytes assets/1 Tiles/SwampTile_46.png | Bin 0 -> 545 bytes assets/1 Tiles/SwampTile_47.png | Bin 0 -> 563 bytes assets/1 Tiles/SwampTile_48.png | Bin 0 -> 582 bytes assets/1 Tiles/SwampTile_49.png | Bin 0 -> 567 bytes assets/1 Tiles/SwampTile_50.png | Bin 0 -> 570 bytes assets/1 Tiles/SwampTile_51.png | Bin 0 -> 548 bytes assets/1 Tiles/SwampTile_52.png | Bin 0 -> 581 bytes assets/1 Tiles/SwampTile_53.png | Bin 0 -> 598 bytes assets/1 Tiles/SwampTile_54.png | Bin 0 -> 561 bytes assets/1 Tiles/SwampTile_55.png | Bin 0 -> 540 bytes assets/1 Tiles/SwampTile_56.png | Bin 0 -> 556 bytes assets/1 Tiles/SwampTile_57.png | Bin 0 -> 507 bytes assets/1 Tiles/SwampTile_58.png | Bin 0 -> 550 bytes assets/1 Tiles/SwampTile_59.png | Bin 0 -> 541 bytes assets/1 Tiles/SwampTile_60.png | Bin 0 -> 535 bytes assets/1 Tiles/SwampTile_61.png | Bin 0 -> 549 bytes assets/1 Tiles/SwampTile_62.png | Bin 0 -> 578 bytes assets/1 Tiles/SwampTile_63.png | Bin 0 -> 552 bytes assets/1 Tiles/SwampTile_64.png | Bin 0 -> 567 bytes assets/1 Tiles/gras.png | Bin 0 -> 140 bytes assets/1 Tiles/weg.png | Bin 0 -> 456 bytes assets/2 Objects/1 Shadow/1.png | Bin 0 -> 2906 bytes assets/2 Objects/1 Shadow/2.png | Bin 0 -> 2975 bytes assets/2 Objects/1 Shadow/3.png | Bin 0 -> 3014 bytes assets/2 Objects/1 Shadow/4.png | Bin 0 -> 3051 bytes assets/2 Objects/1 Shadow/5.png | Bin 0 -> 3146 bytes assets/2 Objects/1 Shadow/6.png | Bin 0 -> 3281 bytes assets/2 Objects/2 Tree/1.png | Bin 0 -> 1752 bytes assets/2 Objects/2 Tree/10.png | Bin 0 -> 1045 bytes assets/2 Objects/2 Tree/11.png | Bin 0 -> 1043 bytes assets/2 Objects/2 Tree/12.png | Bin 0 -> 1025 bytes assets/2 Objects/2 Tree/2.png | Bin 0 -> 1570 bytes assets/2 Objects/2 Tree/3.png | Bin 0 -> 1546 bytes assets/2 Objects/2 Tree/4.png | Bin 0 -> 1463 bytes assets/2 Objects/2 Tree/5.png | Bin 0 -> 1059 bytes assets/2 Objects/2 Tree/6.png | Bin 0 -> 1040 bytes assets/2 Objects/2 Tree/7.png | Bin 0 -> 1030 bytes assets/2 Objects/2 Tree/8.png | Bin 0 -> 1005 bytes assets/2 Objects/2 Tree/9.png | Bin 0 -> 1008 bytes assets/2 Objects/3 Grass/1.png | Bin 0 -> 973 bytes assets/2 Objects/3 Grass/10.png | Bin 0 -> 970 bytes assets/2 Objects/3 Grass/11.png | Bin 0 -> 967 bytes assets/2 Objects/3 Grass/12.png | Bin 0 -> 968 bytes assets/2 Objects/3 Grass/2.png | Bin 0 -> 965 bytes assets/2 Objects/3 Grass/3.png | Bin 0 -> 965 bytes assets/2 Objects/3 Grass/4.png | Bin 0 -> 962 bytes assets/2 Objects/3 Grass/5.png | Bin 0 -> 964 bytes assets/2 Objects/3 Grass/6.png | Bin 0 -> 969 bytes assets/2 Objects/3 Grass/7.png | Bin 0 -> 966 bytes assets/2 Objects/3 Grass/8.png | Bin 0 -> 966 bytes assets/2 Objects/3 Grass/9.png | Bin 0 -> 965 bytes assets/2 Objects/4 Stone/1.png | Bin 0 -> 997 bytes assets/2 Objects/4 Stone/10.png | Bin 0 -> 1057 bytes assets/2 Objects/4 Stone/2.png | Bin 0 -> 994 bytes assets/2 Objects/4 Stone/3.png | Bin 0 -> 997 bytes assets/2 Objects/4 Stone/4.png | Bin 0 -> 985 bytes assets/2 Objects/4 Stone/5.png | Bin 0 -> 980 bytes assets/2 Objects/4 Stone/6.png | Bin 0 -> 1002 bytes assets/2 Objects/4 Stone/7.png | Bin 0 -> 1037 bytes assets/2 Objects/4 Stone/8.png | Bin 0 -> 1012 bytes assets/2 Objects/4 Stone/9.png | Bin 0 -> 1097 bytes assets/2 Objects/5 Pointer/1.png | Bin 0 -> 1079 bytes assets/2 Objects/5 Pointer/2.png | Bin 0 -> 1089 bytes assets/2 Objects/5 Pointer/3.png | Bin 0 -> 1107 bytes assets/2 Objects/5 Pointer/4.png | Bin 0 -> 1046 bytes assets/2 Objects/5 Pointer/5.png | Bin 0 -> 1029 bytes assets/2 Objects/5 Pointer/6.png | Bin 0 -> 1036 bytes assets/2 Objects/6 Decor/1.png | Bin 0 -> 1026 bytes assets/2 Objects/6 Decor/10.png | Bin 0 -> 1010 bytes assets/2 Objects/6 Decor/11.png | Bin 0 -> 979 bytes assets/2 Objects/6 Decor/12.png | Bin 0 -> 975 bytes assets/2 Objects/6 Decor/13.png | Bin 0 -> 1336 bytes assets/2 Objects/6 Decor/14.png | Bin 0 -> 1610 bytes assets/2 Objects/6 Decor/2.png | Bin 0 -> 1029 bytes assets/2 Objects/6 Decor/3.png | Bin 0 -> 1025 bytes assets/2 Objects/6 Decor/4.png | Bin 0 -> 997 bytes assets/2 Objects/6 Decor/5.png | Bin 0 -> 1020 bytes assets/2 Objects/6 Decor/6.png | Bin 0 -> 1037 bytes assets/2 Objects/6 Decor/7.png | Bin 0 -> 1039 bytes assets/2 Objects/6 Decor/8.png | Bin 0 -> 1048 bytes assets/2 Objects/6 Decor/9.png | Bin 0 -> 1020 bytes assets/2 Objects/6 Decor/Dirt1.png | Bin 0 -> 980 bytes assets/2 Objects/6 Decor/Dirt2.png | Bin 0 -> 1001 bytes assets/2 Objects/6 Decor/Dirt3.png | Bin 0 -> 976 bytes assets/2 Objects/6 Decor/Dirt4.png | Bin 0 -> 976 bytes assets/2 Objects/6 Decor/Dirt5.png | Bin 0 -> 971 bytes assets/2 Objects/6 Decor/Dirt6.png | Bin 0 -> 997 bytes assets/2 Objects/7 Water/1.png | Bin 0 -> 1034 bytes assets/2 Objects/7 Water/2.png | Bin 0 -> 1071 bytes assets/2 Objects/7 Water/3.png | Bin 0 -> 1098 bytes assets/2 Objects/7 Water/4.png | Bin 0 -> 1153 bytes assets/2 Objects/7 Water/5.png | Bin 0 -> 1167 bytes assets/2 Objects/7 Water/6.png | Bin 0 -> 1274 bytes assets/2 Objects/PlaceForTower1.png | Bin 0 -> 1568 bytes assets/2 Objects/PlaceForTower2.png | Bin 0 -> 4133 bytes assets/3 Animated Objects/1 Flag/1.png | Bin 0 -> 1321 bytes assets/3 Animated Objects/1 Flag/2.png | Bin 0 -> 1355 bytes assets/3 Animated Objects/1 Flag/3.png | Bin 0 -> 1272 bytes assets/3 Animated Objects/2 Torch/1.png | Bin 0 -> 1155 bytes assets/3 Animated Objects/2 Torch/2.png | Bin 0 -> 1130 bytes assets/3 Animated Objects/2 Torch/3.png | Bin 0 -> 999 bytes assets/3 Animated Objects/2 Torch/4.png | Bin 0 -> 977 bytes game.js | 1607 +++++++++++++++++++++++ index.html | 57 + 149 files changed, 1826 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 assets/1 Tiles/SwampTile_01.png create mode 100644 assets/1 Tiles/SwampTile_02.png create mode 100644 assets/1 Tiles/SwampTile_03.png create mode 100644 assets/1 Tiles/SwampTile_04.png create mode 100644 assets/1 Tiles/SwampTile_05.png create mode 100644 assets/1 Tiles/SwampTile_06.png create mode 100644 assets/1 Tiles/SwampTile_07.png create mode 100644 assets/1 Tiles/SwampTile_08.png create mode 100644 assets/1 Tiles/SwampTile_09.png create mode 100644 assets/1 Tiles/SwampTile_10.png create mode 100644 assets/1 Tiles/SwampTile_12.png create mode 100644 assets/1 Tiles/SwampTile_13.png create mode 100644 assets/1 Tiles/SwampTile_14.png create mode 100644 assets/1 Tiles/SwampTile_15.png create mode 100644 assets/1 Tiles/SwampTile_16.png create mode 100644 assets/1 Tiles/SwampTile_17.png create mode 100644 assets/1 Tiles/SwampTile_18.png create mode 100644 assets/1 Tiles/SwampTile_19.png create mode 100644 assets/1 Tiles/SwampTile_20.png create mode 100644 assets/1 Tiles/SwampTile_21.png create mode 100644 assets/1 Tiles/SwampTile_22.png create mode 100644 assets/1 Tiles/SwampTile_23.png create mode 100644 assets/1 Tiles/SwampTile_24.png create mode 100644 assets/1 Tiles/SwampTile_25.png create mode 100644 assets/1 Tiles/SwampTile_26.png create mode 100644 assets/1 Tiles/SwampTile_27.png create mode 100644 assets/1 Tiles/SwampTile_28.png create mode 100644 assets/1 Tiles/SwampTile_29.png create mode 100644 assets/1 Tiles/SwampTile_30.png create mode 100644 assets/1 Tiles/SwampTile_31.png create mode 100644 assets/1 Tiles/SwampTile_32.png create mode 100644 assets/1 Tiles/SwampTile_33.png create mode 100644 assets/1 Tiles/SwampTile_34.png create mode 100644 assets/1 Tiles/SwampTile_35.png create mode 100644 assets/1 Tiles/SwampTile_36.png create mode 100644 assets/1 Tiles/SwampTile_37.png create mode 100644 assets/1 Tiles/SwampTile_39.png create mode 100644 assets/1 Tiles/SwampTile_40.png create mode 100644 assets/1 Tiles/SwampTile_41.png create mode 100644 assets/1 Tiles/SwampTile_42.png create mode 100644 assets/1 Tiles/SwampTile_43.png create mode 100644 assets/1 Tiles/SwampTile_44.png create mode 100644 assets/1 Tiles/SwampTile_45.png create mode 100644 assets/1 Tiles/SwampTile_46.png create mode 100644 assets/1 Tiles/SwampTile_47.png create mode 100644 assets/1 Tiles/SwampTile_48.png create mode 100644 assets/1 Tiles/SwampTile_49.png create mode 100644 assets/1 Tiles/SwampTile_50.png create mode 100644 assets/1 Tiles/SwampTile_51.png create mode 100644 assets/1 Tiles/SwampTile_52.png create mode 100644 assets/1 Tiles/SwampTile_53.png create mode 100644 assets/1 Tiles/SwampTile_54.png create mode 100644 assets/1 Tiles/SwampTile_55.png create mode 100644 assets/1 Tiles/SwampTile_56.png create mode 100644 assets/1 Tiles/SwampTile_57.png create mode 100644 assets/1 Tiles/SwampTile_58.png create mode 100644 assets/1 Tiles/SwampTile_59.png create mode 100644 assets/1 Tiles/SwampTile_60.png create mode 100644 assets/1 Tiles/SwampTile_61.png create mode 100644 assets/1 Tiles/SwampTile_62.png create mode 100644 assets/1 Tiles/SwampTile_63.png create mode 100644 assets/1 Tiles/SwampTile_64.png create mode 100644 assets/1 Tiles/gras.png create mode 100644 assets/1 Tiles/weg.png create mode 100644 assets/2 Objects/1 Shadow/1.png create mode 100644 assets/2 Objects/1 Shadow/2.png create mode 100644 assets/2 Objects/1 Shadow/3.png create mode 100644 assets/2 Objects/1 Shadow/4.png create mode 100644 assets/2 Objects/1 Shadow/5.png create mode 100644 assets/2 Objects/1 Shadow/6.png create mode 100644 assets/2 Objects/2 Tree/1.png create mode 100644 assets/2 Objects/2 Tree/10.png create mode 100644 assets/2 Objects/2 Tree/11.png create mode 100644 assets/2 Objects/2 Tree/12.png create mode 100644 assets/2 Objects/2 Tree/2.png create mode 100644 assets/2 Objects/2 Tree/3.png create mode 100644 assets/2 Objects/2 Tree/4.png create mode 100644 assets/2 Objects/2 Tree/5.png create mode 100644 assets/2 Objects/2 Tree/6.png create mode 100644 assets/2 Objects/2 Tree/7.png create mode 100644 assets/2 Objects/2 Tree/8.png create mode 100644 assets/2 Objects/2 Tree/9.png create mode 100644 assets/2 Objects/3 Grass/1.png create mode 100644 assets/2 Objects/3 Grass/10.png create mode 100644 assets/2 Objects/3 Grass/11.png create mode 100644 assets/2 Objects/3 Grass/12.png create mode 100644 assets/2 Objects/3 Grass/2.png create mode 100644 assets/2 Objects/3 Grass/3.png create mode 100644 assets/2 Objects/3 Grass/4.png create mode 100644 assets/2 Objects/3 Grass/5.png create mode 100644 assets/2 Objects/3 Grass/6.png create mode 100644 assets/2 Objects/3 Grass/7.png create mode 100644 assets/2 Objects/3 Grass/8.png create mode 100644 assets/2 Objects/3 Grass/9.png create mode 100644 assets/2 Objects/4 Stone/1.png create mode 100644 assets/2 Objects/4 Stone/10.png create mode 100644 assets/2 Objects/4 Stone/2.png create mode 100644 assets/2 Objects/4 Stone/3.png create mode 100644 assets/2 Objects/4 Stone/4.png create mode 100644 assets/2 Objects/4 Stone/5.png create mode 100644 assets/2 Objects/4 Stone/6.png create mode 100644 assets/2 Objects/4 Stone/7.png create mode 100644 assets/2 Objects/4 Stone/8.png create mode 100644 assets/2 Objects/4 Stone/9.png create mode 100644 assets/2 Objects/5 Pointer/1.png create mode 100644 assets/2 Objects/5 Pointer/2.png create mode 100644 assets/2 Objects/5 Pointer/3.png create mode 100644 assets/2 Objects/5 Pointer/4.png create mode 100644 assets/2 Objects/5 Pointer/5.png create mode 100644 assets/2 Objects/5 Pointer/6.png create mode 100644 assets/2 Objects/6 Decor/1.png create mode 100644 assets/2 Objects/6 Decor/10.png create mode 100644 assets/2 Objects/6 Decor/11.png create mode 100644 assets/2 Objects/6 Decor/12.png create mode 100644 assets/2 Objects/6 Decor/13.png create mode 100644 assets/2 Objects/6 Decor/14.png create mode 100644 assets/2 Objects/6 Decor/2.png create mode 100644 assets/2 Objects/6 Decor/3.png create mode 100644 assets/2 Objects/6 Decor/4.png create mode 100644 assets/2 Objects/6 Decor/5.png create mode 100644 assets/2 Objects/6 Decor/6.png create mode 100644 assets/2 Objects/6 Decor/7.png create mode 100644 assets/2 Objects/6 Decor/8.png create mode 100644 assets/2 Objects/6 Decor/9.png create mode 100644 assets/2 Objects/6 Decor/Dirt1.png create mode 100644 assets/2 Objects/6 Decor/Dirt2.png create mode 100644 assets/2 Objects/6 Decor/Dirt3.png create mode 100644 assets/2 Objects/6 Decor/Dirt4.png create mode 100644 assets/2 Objects/6 Decor/Dirt5.png create mode 100644 assets/2 Objects/6 Decor/Dirt6.png create mode 100644 assets/2 Objects/7 Water/1.png create mode 100644 assets/2 Objects/7 Water/2.png create mode 100644 assets/2 Objects/7 Water/3.png create mode 100644 assets/2 Objects/7 Water/4.png create mode 100644 assets/2 Objects/7 Water/5.png create mode 100644 assets/2 Objects/7 Water/6.png create mode 100644 assets/2 Objects/PlaceForTower1.png create mode 100644 assets/2 Objects/PlaceForTower2.png create mode 100644 assets/3 Animated Objects/1 Flag/1.png create mode 100644 assets/3 Animated Objects/1 Flag/2.png create mode 100644 assets/3 Animated Objects/1 Flag/3.png create mode 100644 assets/3 Animated Objects/2 Torch/1.png create mode 100644 assets/3 Animated Objects/2 Torch/2.png create mode 100644 assets/3 Animated Objects/2 Torch/3.png create mode 100644 assets/3 Animated Objects/2 Torch/4.png create mode 100644 game.js create mode 100644 index.html diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..138f9c7 --- /dev/null +++ b/.gitignore @@ -0,0 +1,85 @@ +# Node modules +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Coverage directory used by tools like istanbul +coverage/ + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage +.grunt + +# Bower dependency directory +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# IDE files +.vscode/ +.idea/ +*.swp +*.swo +*~ + +# OS generated files +.DS_Store +.DS_Store? +._* +.Spotlight-V100 +.Trashes +ehthumbs.db +Thumbs.db + +# Logs +logs +*.log + +# Temporary files +tmp/ +temp/ + +# Build outputs +dist/ +build/ + +# Cache +.cache/ \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..d84432d --- /dev/null +++ b/README.md @@ -0,0 +1,77 @@ +# Browser Survival Game + +Ein 2D-Survival-Spiel im Browser mit prozeduraler Weltgenerierung. + +## Features + +- **Prozedurale Weltgenerierung**: Unendliche Welt mit Perlin Noise-basierten Biomen +- **Chunk-System**: Optimierte Performance durch dynamisches Laden/Entladen von Weltabschnitten +- **Ressourcen-Management**: Sammle Stöcker, Holz und Steine +- **Crafting-System**: Erstelle Werkzeuge (Axt, Spitzhacke) und Gebäude (Lagerfeuer) +- **2D-Grafiken**: Vollständiges Sprite-System mit animierten Objekten +- **Kamera-System**: Sanftes Spieler-Tracking und Koordinatentransformation + +## Steuerung + +- **WASD / Pfeiltasten**: Spieler bewegen +- **Tab**: Inventar anzeigen/verstecken +- **Q**: Axt craften (benötigt 2 Stöcker) +- **R**: Spitzhacke craften (benötigt 1 Stock + 2 Holz) +- **E**: Lagerfeuer craften (benötigt 5 Holz) + +## Spielmechaniken + +### Ressourcen sammeln +- **Stöcker**: Können ohne Werkzeug gesammelt werden +- **Bäume**: Benötigen eine Axt zum Fällen +- **Steine**: Benötigen eine Spitzhacke zum Abbauen + +### Gesundheitssystem +- Gesundheit regeneriert sich in der Nähe von Lagerfeuern +- Gesundheitsanzeige immer sichtbar + +## Technische Details + +### Weltgenerierung +- **Perlin Noise**: Für natürliche Biom-Verteilung +- **Chunk-Größe**: 400x400 Pixel +- **Render-Distanz**: 2 Chunks um den Spieler +- **Tile-Größe**: 32x32 Pixel + +### Assets +- Vollständiges Tileset mit 64+ Sumpf-Varianten +- Verschiedene Baum-, Stein- und Stick-Sprites +- Animierte Fackeln für Lagerfeuer +- Schatten-System für Tiefeneffekt + +## Installation + +1. Repository klonen +2. `index.html` in einem modernen Browser öffnen +3. Spielen! + +## Entwicklung + +Das Spiel ist in reinem JavaScript geschrieben und benötigt keine Build-Tools oder Dependencies. + +### Dateistruktur +``` +├── index.html # Haupt-HTML-Datei +├── game.js # Gesamte Spiellogik +└── assets/ # Grafik-Assets + ├── 1 Tiles/ # Boden-Tiles + ├── 2 Objects/ # Spielobjekte + └── 3 Animated Objects/ # Animierte Objekte +``` + +## Geplante Features + +- Weitere Biome und Ressourcen +- Feinde und Kampfsystem +- Erweiterte Gebäude +- Multiplayer-Unterstützung +- Sound-Effekte und Musik + +## Lizenz + +MIT License - Siehe LICENSE-Datei für Details. \ No newline at end of file diff --git a/assets/1 Tiles/SwampTile_01.png b/assets/1 Tiles/SwampTile_01.png new file mode 100644 index 0000000000000000000000000000000000000000..9777869d2c13ec1d85ad92474ad5e5c523e6ded2 GIT binary patch literal 491 zcmVCceZPgA(OrM0YOlv*D$IqQDmA5fgmd+k0Oth`2F?mWqTSTcNOYmC&*&x(Hn^fPFT&ky9HAMlwZstZ|oY4#*E` z-C}GV-NgrIsaG+mn^ix-s`Wt+DOzRl8iOC=dr>9u?1!c~z0_!nk#>tMRPcGLgS-X) z-Fh=b&al7_6s_I+IFwlJbYfavwtZqxhKmlm?ru0o6^RWp)-cc4! z0K322clbKt6m_%vZ-GJ4`?f0p501O%IzTtdo(mb)F^69jW3RGgJbmnS4g;j@)n;SB z4~jl@xNgU$7`E| hIk5{2jn$U`0|3vu6r3`YDmnlF002ovPDHLkV1jn#(LMkG literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_02.png b/assets/1 Tiles/SwampTile_02.png new file mode 100644 index 0000000000000000000000000000000000000000..964cd5202c8251c1864f709b1608e7712a85f2aa GIT binary patch literal 535 zcmV+y0_gpTP)NS4hV@bRQ;Q9FjwFy<)_4O>DFc9gr7u#aTaY( zGk(GrArA~2zQj}nC(rsMmdFR5eqt(kst`ucq71c79LB+H7+qhHW?T@xq1I!^(>)j< zZi7z953ulvyfE^JEHRdU3cilSN2Epe4PxsCIxqd)hdPW{I-YdW51<*&iV+*-X-sW5 za~B_gbbo}WsREpEU9eMi5uB_CJtMg(4X`?U&gN2pzOw8J_Hf=d^=3J@h#|5z0s*At z^aZ}Uy)p(>`@I4#^3_d;L0>tIFu9BxKF_SJsm%yY zM=1gXs$wpTMxtGy^cZ6^u@W?fQbY5BVz{2QuCI<0V9_YpK5M-?vKcS=v_gN+aan!@ Z7yxRF7n-UoDw+TQ002ovPDHLkV1mgE>d62A literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_03.png b/assets/1 Tiles/SwampTile_03.png new file mode 100644 index 0000000000000000000000000000000000000000..b6000896a56f2d606183302f7bf78f1ca454fa3e GIT binary patch literal 524 zcmV+n0`vWeP)vHTA3W#RRo*06;$me<)!XL#_8J z6M{|Wt^~ZJ&Qemte6Q!h;7~N>V8UQ}FL>Bf_jm56VAvo_Xcn?9Ql}LlCxaWB+AuJR z$;$H_cZ1CVeqc7)jHRo)_~2~yEJm2Ds-Ixl{s<>&T48XCK_`hl>JmiuOH)lRaav-e zJz^sh9QS>oN8s_^iz#xZ1#zHh?b%0Fg_TLit|eqUCh}A`nxN@)!#%P{WROAEM&{K} za8%LB*IM;)Ha^Xr00RIwZY*^dd&9;6 O0000f{}6nK(-&MlfR3VFCB@c3dc%7h0124TO-2ePwQBIIFAf@#!ekXvt-P>46Oq`8 z7go3q0BNeyX-Sc`R7rU;0Xhfe0HLrwluH5aaU9MLX>e`Jnp?0Kn_#hU8o)|Wlj+X5 zY28Y~i1pfOs@=j(Ws$74z}`sWH*6}K0H_OlBiTs91v7}ykE?>I7*3&Cn17jYaZA`W zVnd2t=s(GcSA3sZ`VH^WnJ&I0S6YL_93&e<8$kml-k25y*xaGYBljE*QEv6#j!tOX z(wPdm!IY};X%I_9@P2#E^J@Dxwr5m~0{DL3t*zE?1Q6xVv6Tx=i)x+Vf!3Xi;xsMW zA!W!~S4A3;F$TM0zS-g4f$?vw;_hcJPxmgUjC35?m?Bj|-ZTgi?EeO8a|o`>kCO?t s`E?1zSSdC9! zCDL5YFZt*2;L9kmcx|MZ%!4V22dTIvv+TZx97GsYnimLwuOIKPb!H1@SRe;z!RX*X z)F>LO*3f1uvu4s}`5bJ_SpK2NQI> za1ck*QYe5y*9JT+B^5b3Ik|FoXp5|YoOXHZYG(4fIr(;AgS`88^1#3YTF%e-vS-=5 z!<)PFZIl6n8ACwDjpiZdH`5QL7SoB>M^QjA|mjW$}>hZie7d3yPeFT0;khT|}! z`Ms literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_06.png b/assets/1 Tiles/SwampTile_06.png new file mode 100644 index 0000000000000000000000000000000000000000..3f531b9ee08b6b38ed89b931eee8c11466039fb7 GIT binary patch literal 564 zcmV-40?Yl0P)^ z{|46YpZIhG;>^~vP{gY;{li^O>9BL-&aF31tTz@BvVM8sw1D=Tr`vv7@87;KhxV{) z58^VLIYOkmzzE<+d~pAM^TVgGge^?QBG=n4-kwCj2XXlEZSquL2phw;qu~C`w@n`z z^Xy=X2K-e~QaymKFavcwZD)w$471p30vD3Ny2vh(hAfN79icA9-N?Uc!{zA3q|CXN z4gu*gf}9N_aCMB60U?r2qw3BQ8^iQr{n2?Wyoix(;LOH79jORyod5(V(N%g`XKU9X zB8_1(lgkRnN(dCe^eUtKJWnW-aDrX7iQv^F<8ggIZbSv;YiV`EHb-cm@`uO}wjB$s zW{qS?RaAb-j5rEI>LY6zE9vXfWTFTgum%(HG~p-xU`fBUQ%cFOXo~dOW{NMIJWx6s zH7_DhvEbN)wA1X2WA&AV1cY1xr}-oY#Rt5cNYGAx_+lHWB@(wRO2#=g*&vd@0JE!g zzqVDlTJ1z6Dy7_8jK7DzR=eP9n9CePFa8Jp3NQeR{7Dr9svh5dcNh0-Mhfp59921Vb-Ms{d#qd3C4soA00+3== zQDaPSMLcBPL^JrKnaF5zczv{(Ud(9eQ=j6&r$2ZSKCqn-FbY)cW3{Og zQVB(fgNh-k?)_>L)P^s_5@`N&C)2N+<&LArH3ZJJNRg_&R~|S}g3%DV5v$b)nju=E zwv`Tuet7&3C_ZH`N{93;QF{2G+xu_|qrAN`*pONCKf7Fh8V`)H7ycM;F zOsxrD%e6`Lkz*rzAE=>G3(@gq1x2P@y4XjSRT1l*5+4+PT7fdS%^U+U5u5hRHjoTv zZJ_;$qlj#l(*ILs`re_A|FtUbeBmS>MCU{)`!32J0r^|7;kF1k05c6&O^K96g7^P9 tDjH5Vem4XGF%Y$BCD&ENAVek_s$TrgGdLuotFAwK&C6D| zeI99O9LyHW~XZgTF${g1Ee~@aXJ_k;aZuA2CtDdG?8CEdP$6~OC^NBp*I@A zq?Vtva-b+~*kys(&}he&J9otVzu-bz-Xbx^HN;v^wBhI+ zX2bEyMst7;0E%Y4uWSFWU7`bGMu|yZM5dQN0t^7%C_xfhVj3W$r_;wN3SxD?NL3Uqo|rpC;q+XH*@v+{PM8-=~~9ep=>wD zesk1|!$kZ$PIU8hr`PALUE}c9d0^%Hac9=4yWIHN-}}Wi4#tU+)@KLd?hB3reEKvJ zyxG83i~W=V?`};Z+<*K2DHEB`86ftMc|P`VU7O}?%(eoC@xyRWz*wyqDCKqVSJQK6B##1*B~+X@V-N@p;mDpB4F$2dZkK z)__-~BI5($%O?`G_E*Bs@Qq;Z1xnfz^^uUpH2N-fFsk166T=9dr709%i@#Kb_b{oL zIfZJi7t8gql*SOA?eZ+r)$?7p$RKmKIE%d3JCe%ekDA&w0G%9YQLXOl?v2I=txz|_ qgz$%R*GOtTDLtFvqbAqC0t^5&^EF8}%DSuo00003Uax-3ucpccDN^uswg{)v1*ypyV2l0oP*stS z*$gvC*KVKI=O&cAdf&Z0Z%P+T)T{R`tkbzg~dg`KY$08`~P^JkF3i~s-t07*qoM6N<$f`{(ySpWb4 literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_12.png b/assets/1 Tiles/SwampTile_12.png new file mode 100644 index 0000000000000000000000000000000000000000..11495533b8a9b68ab8ec8b888d9970ed76079e61 GIT binary patch literal 607 zcmV-l0-*hgP)6e25TZO9re8cKGbE&GEOm=wUei~`U!Ae8B^$i2u z>1+qcI%zCdpZyUQoC`o$`OUgEBf&E2tQN^&IL_LLf;RCtVai`{2d8xNR~dl4^WIK% zx(&?T>TS18E1>!LRXLfzfj6JrVMc6Y4GFL`hq~{>JW5o zpU{8x4f#i((kG;Ak)e~bWG)J$gb!gDN~ENOLm(*99Vs4ZKI}f;hs>V#--B;ohcs@M zX|w3f`9%DCTz~mrEZ9;J;^*}_;KW;luh8?BnMlRw`d8dJ0PB<^#Nz zGuXdG@cXtk=vvxx!Am9|9!uJ#pvtB-SX>LxW9^awg+`5ps^|d+X~%U1V8MYmmX%i@ zWaNKa(Taj|4)PLUMAgMHpKE0{y$BD&9IN1#E@)^p&)ii6tW=Tno#<{QH$FN#5{fqN zeW@$4(&-plT#kK8#jlNN6{dsc-3@URnUdFh^o8k+2&N)XrINMp!G*4}un`D4S3m$X zh8+1rQPEAWu&Y7jqDsXKclj85KsPjluJg8=RtK-KR#~RAx*r^mV^ULFOEO6JPK;bZ zhFgSG9=s$o)g<>;Lu$uu7t&pW7ld?FGeq1R%jt@TUriH?s%TvQ0t^7CASK!pF0$wV O0000?Td!#*s;e6qsX!xd*1wKZl3o~8%4LTZ<`t&-eb2t z_1lv^96kfq@v`DCH=t-(A0O_p!CC-Ixr2Bj=hy%eFfn~k?(2zQ!SJQjSm(rtT&eg4 zjL<5V7}rVR>*Yf$@n81&1AxagMm3N+w|%B4n!N9bPBBs6f^jzJ_v6lE8Mqf2z&vQs zz!@I=D;F5!*xc`a>Hsjh=FXhdU@5kMrI+&>=o|71cX$*kpL1JUbrD$v3YJ%$LQX!@oFRE#nVFh>V11Z8L5Eq!ps6H7dE%AM>=rLRVuq&lS#Zq-P<66N zpeq1RoAii3cPFwz7Mg))jHr}rYH-YTV^0Q@B?yI)OSgo@1`M1Pjk{Q4g?mAds)|9+ zboej;;A4qp>=P!-$fIJ^_Ax%_lPoo5quP;%boebyUAoKbNqx@A)bCe-0RUKMG+~TS RjGX`g002ovPDHLkV1f$`><|C| literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_15.png b/assets/1 Tiles/SwampTile_15.png new file mode 100644 index 0000000000000000000000000000000000000000..1c8bb6c5c7346324b43d0f3a57661094db85df10 GIT binary patch literal 594 zcmV-Y0*s)`$qsVfc_|43l8GBA1pB^Sc zmd~$~A$civvDll%UM^N23S(`@`TdI5wFCWjbBPJYh%z4?LMzRBivUsne*QL2u$`=Q z6-cWwMz|s#2Gs;TI8xX$nw;KFSF@`*Eq$2_JeZtU@1gw&=Gp8QPecc{69Ptsh<$E$ zS&5WF5$vE~Xo`Ei+4bgzpNJ{Y^7W9W-*@W+N81t!E_0DAEn2P8aG>;BL+G5WojNcA zv6Ix@Ob0}5AO8okujnpnhx9?BjQyc%bvS`3yuG@&AP2?&?Rx#gEJ*^Da|Wd6dy^d& zOX_1LT?I12Svo?g3_z&SKATwrrvW7S;W#xOV200GkTiRkzN!BsQstVOkiVia0WO*Q~ytb!GubRph zYQ%iLleOQW)S|ZiiIWk%>Isv23+-HxvhE$~WNQ@9*`empbUClc9?D z799t1caApFf@ljJ3U>zD?RF{$ZARXe0H3WZ5;vXP;e4!n9ddO g#;!{yAb$c30KJ_<6`)!9zyJUM07*qoM6N<$f<5R6pa1{> literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_16.png b/assets/1 Tiles/SwampTile_16.png new file mode 100644 index 0000000000000000000000000000000000000000..9fa70db178aa9d982ef95008e2eb4eea3fb03b3c GIT binary patch literal 498 zcmV$ysiUq4?(*vLi!)u+GMLUY@W{Lwro8O`=+!?e4H10N$|2a)S9pQSG*f z+KvfBW^zXY+7V~W%aEiP%RUc=n37TsA_A7q6%StG>H2-_!H95`(6T79a9z294Q`~= zh9ZMkvU#jIiflT{1F>#0wvO(ikTcb*7}SlbpJ3Jep#LOo$>0)$Z(@6vC9n*X<&<8k zw8cof#AYJ+T=GEKR;6=Pd(%Zux4;f0tzG*#6j-fvqFPP1ZDLP^vkF>PH=Lu2#0DAC z*l4|)8;Sy%T)lEvq(u{;rCtAql9{4rcK>D=6uob|8`9gR0?_sH?7s2w4tEt}FSGQj z>0dZ44|onC+F=LzTOB8n(0Hl0X$8TJ%^F(`18LuJ+sJ}sq1(=iCuM6jV6inp5y0FZ$94MpXa|-WPPve z``NLX9p%mKF45lZ(%tJL9rm9;w9~mWt%6ITZ(g2ge^{<)KP=|BNlp{xp{nZYdJ9bI z93~*YRB+(CM3*bI|FQG0sC{C6uC?fc@J&4dDHd|7loS$FUUmTuC6eh42|zznj80_Y z$fYyo1v=G%Svt&NXVEwZp0WXxfr)S#k;?*yGl6_rUYguY#>Pqmd=2fjLgzF4$ZncT zx@86+Nw3wLz;$*iM!)@9Ymt!~CVwcw&P{2#B9AwV?lRGdvZ7RO{t{6lbJwdO7jZC_ zQv2er2icQq!YUE{A>u4j>C^`&A0SP3XVPC)$vEhgFI8En*%?_h&H<4)jN74FvOOsD z*udd}07rWg2{Z^uK6dKMy0l**Z*VCPgL#)gfX89`{Q&Y0^hej&frtid<@T z9(33+v?{kWf+a`7WN>nMb(*%r<|Cm;rYRl)9V5&b`sSZmRZS)b3}m6n;oK9T2bd13 zYU1(BZ6hy09>s$!a`xnA*ofMbLby}X;7@=70A9^ffRu8LoB#j-07*qoM6N<$f(s?~ A-v9sr literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_18.png b/assets/1 Tiles/SwampTile_18.png new file mode 100644 index 0000000000000000000000000000000000000000..8b2cf4d9f450a6e19006703736a2046d0a28f958 GIT binary patch literal 467 zcmV;^0WAKBP)HYQX<@tMCv5!wapRW7qYF}Qy2+!m8 z#I7u0zel%4^WI_dM&DxrNWk#+Zzf<=_)^o)U{L;a%}D!`G#p-P8`+LOutbOhWW$rC z6(RHdH^~%bA?#;qg|G@RmWxViA2<$&(TI1u#kS+>u_3jkov{0Gj-(7WpcY^-L=B7% zk#CIeKZnzi93pF~H^8<9q$d2;K|OB1ES^@f1+X1n!st=?PE%jaRpEmpTOaMyJp-(; zUC>mUgaq5T{?p{W3NYm!`B)0xCt_F7;WagFxV)Og(UFY+KvT{O_*A_qY}cN~m{yf~ zvy;J)@W%|~@H3Tx9*K24rvt=c*6P|X8b(aBWPhm&?_pZ8WZ-cR;9_vglR}-{1uF}1 z8Pd6|D5RAs{Aw~(ra|2wBNYX8v-&(v0=sLJ2-)1jkXiW=U;qf~0lM5vrK&R9>%>b+RC$vNDM?jvafPi|5Cu_42!!Gv0Rb zdU3p29QEYKXTW!V`eKy=Mz7k;94R^mXJj4%Ou|fT{%z1$@Rhpz6@DfZ+?g(AZ3GEc z7CjZdHcO3Lv=QWfienb;U_jrv8Mm+RA{az2;VU{*BkFu0irzyxdtR~X+X#|UQ|@Qc zQ=O@x1)U!HEX5?LIsV81V}%WuFFSDvC=LXcpy^u*8eL@lFNmR7O-?FCQ$Fb(f~mTi zC@qE=#6Zx_X7}SumYq;7ro8BjCW;X!hU@qSO5&rbUa0<>i{N@s75F1v!wC~d@xxCQ zU5`c>Wf4hO))1Wf!)j>CLqA|}fZns1(&#p;dfLfmD*I9}Ia*&qMdITf#37v(?bMT{ zAuARpLLzPWuN{pAq}@eibd!(8Llt|L4k=P&y*%c*D9x~%_?Ws$9|OVfktyP=6J$Ja zSUQE)Tw7pMsbNzxS`$CA z5csaWdbmq%&${P0^_V?BF1PK82Qvjl!-s9_znvqSK{hz1cQO$$!!7jHe>?XLr>JD? kNxm_pPB-T3`bU5P0Bf>*bbjDr@&Et;07*qoM6N<$f;6}X$^ZZW literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_20.png b/assets/1 Tiles/SwampTile_20.png new file mode 100644 index 0000000000000000000000000000000000000000..ac85094b7da4217049554e133484872ff5f8110d GIT binary patch literal 461 zcmV;;0W$uHP)A_#cfjN$s>5vvfTj{w5>#+r_clH6aheS%b2WjfGTo}?>n@HX_ zs8kwB?^c8xF8+d2=>i~}gc~lA+8r~9qhF*#O3|)I(=h)s;bcVE5OJYI=IFo0=_S5; zqQ7u2O;~(St+)ry9Js__BJe>4Z!ZcCLhh2v$Xti5t1YkV(J5;xJ?M}bOiGQYGh-2BO!$1*H*n1qW0IJ<32&)@FTzg7)TLF7o?*c00000NkvXXu0mjf DW1Pj~ literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_21.png b/assets/1 Tiles/SwampTile_21.png new file mode 100644 index 0000000000000000000000000000000000000000..e211165a979455c7e8018340de7456996de02e4b GIT binary patch literal 528 zcmV+r0`L8aP)!g>rJ#Bu}Ei*?xmlDAIkKp@dv;U87Y50R2 zT?Q{QF|ID(fc2!xAJ+o(ytMIwlT6+`m1>t9am|-t@tK3}*Dl$tTBatt!$HlW49cpe zkCe+QKYJ}2XCPbZK%~?QTv33d=NbnpO0=@Zi)t3DQiY#nU7EK#Y6zn19ONALBQ>ER zD~L8^71~5A=;Cw?El2jtEEO$URi|=L+i(y^ktr1&R2AHOMFdk3sG(%r6xse(_cD** zoaB$412nlDHsQ%80C!cZB0mV5j6z5A)!S^yo>fF-)zy%11o^3bnyIBM6)0J!Yu-R4 z2vIn7{UeGLQs|GD&(Wm@o#aTKm!3SY=?90al{N#?4M%A$Qm<3p=3rdE0t^5#rzqtI SMqNh$0000S->P);s`)~&C!4WtDM=0B>slw|I?q6RGFKcM892WmB#V*h zlFQgx56&{TZ6t^hfIZHZaX$`qK29NNUb>QE}`ap9#1nRWika7Ez36DX4a^ z;pFbx3(Jl&cYnagDc!=yM`ML;2GBU}Pd5qQhGZ1mQzWlXQ`Qx$YT*eUTTY&oLi0HT zw~UYS^cMkMcXg4enuE{=UIj@`$33fohnpRIk$#({ed6uNfOLSz;50-wTtVAimvCj0`xzWC`ru=h265lP$H@_!(%gNBRmCixHa7X7@kxlFy`kG; zHW8dswaz=aYD9$`Z79LuFE<|?XbZ!D{C-0HczpU~_=X931ke$RD&o>{<_R(5-h%9o zu4RzHqhtj6_Xk5PESGT;AE9(??XXIiw^B#P#A!9J4wjXFH}E6C0Ml6_6$kDLZU6uP M07*qoM6N<$f>@jZ!vFvP literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_23.png b/assets/1 Tiles/SwampTile_23.png new file mode 100644 index 0000000000000000000000000000000000000000..b39b1f1785454ef8a4a8934d12d713f54d72ae4c GIT binary patch literal 508 zcmV!aQ5 z4+-Ob81a`A$mwVklrcJlJGzevC_y7p^!}pStdJ}%K;K6=lJhj6X)@3I?GT>srXoQ^ zdOUM6;%t{S0vmCSj0UrmVAuzT(w97mzhdLABmT|iE)JAT$0q2BkSsdIgKjM@r7|Ze zL+{<_s!b(F|D-ANq>I;GJ)_bjZK$dzjZoIq+(X7jT<;>A@=*)uQs#_abBfM8QEcKz z(XCFcNq4KL*tI6_EG~|9gZFh=yDB`jqmH%;QR})+QYk{Ka^?qr;z{YAvArd$#O!tn z6I9xk1$9=XgwQjmc?gyyC~=+5JeA7FN%Jojc+~%TemoOkrVG~E?dlVdV|sZ1#AiG0 z?Lt6~V$Ep}yJh!Mi6f7}_shnU8}$y8`TP_EWn0#BCS$8%xVnfmc3$bjem&Bd-1)#} y56|4CnqfjfDFw&*o@j@c3k*`zttTMA0t^7=x-eTMvBDt$0000LuTR{*K7 z?q?{@_4H&6ub+~2S$-rsRP+HAlQt%SRGa*;MprOWyqf}arc$JgsT>U8Ey)bZ ziw>YZNC62;#SshPLH{xXK2PV)+BLt{jEo~tTvu-gDNJpdv5ilt#*)m^ciu-9kiybO z*G`h1ruA@2nwUAE?ayt1ltEL*Z~AAvecSt*^KE%D!WDcKiUGmBUby-&6sSK=tJLhnJnQeSLWZ7t)^q0|5FENP%UpAa?)&002ovPDHLk FV1mF=_>KSo literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_25.png b/assets/1 Tiles/SwampTile_25.png new file mode 100644 index 0000000000000000000000000000000000000000..f4f2fe6226f20f2006848258ddd9efbb2079a3a6 GIT binary patch literal 516 zcmV+f0{i`mP)4lgFbpkG#g$!}6G9W$ z@dJV24zBo*Qp5qj*9&Y&hackoo+B*%beBQ6cdT9J37Gm1p-Ri|90LTXSn_OSN?j*oC z1+Vv#3A_u87BVL5xT*`>uEIWmQ>I(-##7mO?wiU_bwZR-nvuWgD!Fc5wE0no#j8`syTXIc56r95Z zZZmzTb3lM+ra36pxs0xwvJS@=t>}GH& z-v>#qmwnj@7+{>G!s{JGf|OcLA1XPuz@!6ZZ+sfx0t^5(&;;r{k``6~00003oeB ztz>YGksWh}wCgINWlYl<;QjsuQHJe;zwC@@XO7nCn>B}Xwk>%XWYy9BBSbpx!LYC+ zv1t9?XK--1-s~DJk9ygEwBHUuYNe2t*#_{mx|`!i_S01EQ=`+XTYea@NTFZOvJMAx z1l)n_lV2E-Op=R+5qAP#i;KfUpEin$?j-Mb(?SQ7|91U5z^4EM Y03m=ZCOK+e^8f$<07*qoM6N<$f?$5~R{#J2 literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_27.png b/assets/1 Tiles/SwampTile_27.png new file mode 100644 index 0000000000000000000000000000000000000000..5a2260d29ff1a39a0a9d9d2e64b543da2762772c GIT binary patch literal 464 zcmV;>0WbcEP)Q0|`BDnUeMJfs+P z_K!URUvaC96|*HUtb@boTbaaL^>w!^-VL>j4Xx0z2znxjN2g`beZ(y(^F{*tl14Xg zIvTx`DRnZ}&s|?pvPxSz)vG}mt4w>?V-SD6$VtUS6=a%^x-^$0H1v7z zAS4tv^G8)`?-~l5jDW*r_zB$o8AF`-rPznRk?bf}0R{kLq7ib3Oacu60000b@?P)6icIYN%$v=*|caO1R5WaTZ3hhb)cZ-zXnWepKUDotgBZolDIELZEex%`Cbd?eyyzt65 zIT!lotKfV!oX8Z>Z5AQiBSN3*OFKA2bl!&vIYc6jYgbIdJ{HIA?oME3^!|`JYqv&k z_6Ovyq830S$`9uf_0d#)r4ZIpd#O({pKy2%!o&e$LkkvZG}ko?7T`Hr804Fu&mG9(6 z4mOQ~rNbie2PniPmw%H1jlKgfO5{WCK!kp`ySz^fqND*GZIRsTccie*$J_Jhr-z6F ztf;f$jkbeP4=pb=6+Ypi@1oJ8KTw4CQ^ljE^9&R!mv^wx{skBSy3HLvMIL&HiwD ze88j%%SUIMdUW+D7yC~`<1mf1iwTL9KS4Vt5e%)J1S`Bw6M`fdTm72=%&>FfZjr*~ zr(k$2NJmN$!%mk3L=KQ=8%01wN;n`Fxg`uR+<09SIg|C|pz#6d?hTB{2>-i9)gDrXTt%#w>O<|MpKB zcSky$QZ2N9*jB=p4m7jt$757uAfhB5d$K%CrLIs`4>C+ScnXr4R1mk)Kg`pw1++~Y zm!diWBe;M&FUjeC&nn;^k`c?YE+uMTE_RU1uGNpvI@Od#QoTy;^8^`{imVD4caimH z(EjifaCOr4GdPgmN5M(CzRR^hzr9)o7rVvR&4xOk8HO$i$lgUO?d-Y7Q-fHNS~l`44rE(r=OSua2m&RSYo8K0sh`}#rDgTb#@dBxPIIS m+BL;}Bli{|4CKnU00RK>PZ$lGCT1W200004toDizG z(kJu@TzLz8fq%dc`h-4#UQtx_lw88KLKRMiIF5HWaf*r+Rojhs#vbpkGk<-1o?X+D z*_Ev$xc&H~=U+3BltykpO2?z)`d+!l2K(IIJl+M-dBA9i|Jpb5#zW(xO48-oE@mQ8 z-3ue zjp+3xar`6@tb*%TuhmbGf93 zxEv`ni@%mgGRMA@NE2#`$Cj*auJP}Wz&0H)aW!nGqHZbU(FFPE zXo#fd@V}y6a2=d bM}PqU7;rPkBY(a%00000NkvXXu0mjfbWZy) literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_32.png b/assets/1 Tiles/SwampTile_32.png new file mode 100644 index 0000000000000000000000000000000000000000..1f45bd60bc39b203174342ee2cc7cc315b40d142 GIT binary patch literal 583 zcmV-N0=WH&P)NgfIKaCE7>oA?nS_P zC=a^!zQc=*LqTI|vs7e2`3pqKIKeR}c;;zLSc>gGE`PF~VjZ?&hAH82@pAjV%@|O` zVj3p_HYhkN4f$i8Wht%$DNRL&6-b&|Wok%80a{7pYCvX?zALw(Dnr@0?tvK@V4)4r zus1vt+JJ*UxGBj|K@bycqi;&tI^ZBmm>}HKW_dzoynRzZcw%L-_6x0$WGX{o(G+bC zY2j(qi$-x}87tL}S8~uSu|+vSi7~@Wrqp57i|{`jWC%_LBWAo7h&H_$4v@{Rs*eAp zwZr2@mafW4RvooxJbP?OP_JW0twQbvosM|kJ8W^|qnBjSRloIukbEewCE+RSAmltM zSsNmIE&r`2-6teNS(ojJThD7gCG^sCaH5ekrydDjqO^*3m-Ai9U~EBa>T@ZHMI}IxFvNQPS5`PM3{?LZS3}?fO@M0RRKO VPXc0aR0IG3002ovPDHLkV1n~6{yoSD5xe42UsCI7>r3gi4(BU2nEN_pXWDBcAM>b_21Rl;pFDCtDjxvVSfR9 zhWm5+x8(D|wX3u=IvSlk&iBXj?+=|r_ie+__*v|ajR4pRZz%dz0d>u8MSsqnzBqeQ zc9R&xkV6fCofOoiA#@dyYFp}vTb3@N4@Jj4u&mB&1{QkIuk65JMI;w(3h$%@OR*U& zb=Co-2jAp&XVR2usW2e3j&4$1qf$vE8O<>_RQv{|k`2J?0~)eIEuw*x(y(*{18zmQ zmnLEQ%NL{&A`y;=IB%5@F8$G*RN}oR`VH@;0*gQC70p1|1C&^G`8 literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_34.png b/assets/1 Tiles/SwampTile_34.png new file mode 100644 index 0000000000000000000000000000000000000000..6ed789a60df87396cb9e7855f4ec8e47d26eccdc GIT binary patch literal 536 zcmV+z0_XjSP)1Nm>G{UVl#&zs`3KLb8)x_`FFSfgSc)V+lxmOx#X=Z^e~OT-S&=+7zP`F#GMk8u#08zoA?;r3UI?i2WC-p2D-WsVwkWvAKKxNpA!mJt=x0C<5`hKVRpP`+V6XyucFFxxf@WUXscA~FEI=6^+mtTZfev* zbU0Zd5nWeb%#l^qS-n%jf#Ihs(5r4V2CO2c_RKbrSF;s`)~&C!4Y}{jzG7ls#v+3bc;~MYbKeD#`!o=f|Z5s#P7WsKaX?s_Wqi!*<7}A zYYFZ@zwrEP1e!9DJ61{3`+j;fpXyF1-R;NWRMvv-ULHEpr6XvhUmFg90@3G}pXUwF zY#WIE?%2sOlp>((=$LG~`4x2iiqX%zBf^SvpoNkVjv)&Nbe4B#KpJQYO!jXNmRwT= z6-9oLSw?5pPHSmRP@~t1e8IdD=r00mPjE}U86_D4ZZb(4TE9p?6DA0=&~?(LH+W3E zYgm^o6(QmfR??QA8UZH<&;CG+=qm*7V-iDR=y|HOCf{_JvONcS49-yt$tfwS?6-%e zr;#4uyU?E~v6)dltcha(nmBY0eZ)PwZ4^%d9UOvaa;ig2F$E16eE5ilG}qB2bd$6c zf;k3dT%UGm+-PkXrdjK+!Y7}3O91~YDBlu@J6HK_3Dy0+I04OwI!vj%&J^@w=^&ih z*pN`VCzW?H8=DvbUnZkVAh*7TLRHx(#eQlEM&ClND1QPB092h3k9f?UcmMzZ07*qo IM6N<$g0*MfX8-^I literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_36.png b/assets/1 Tiles/SwampTile_36.png new file mode 100644 index 0000000000000000000000000000000000000000..038a07d553637a1aee652aa0d805d54a968a6c8a GIT binary patch literal 502 zcmVDb+lVp!YOMQ%Hy&t{(vg0JCZbn#-)2bpQYW07*qoM6N<$g0Q>c^8f$< literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_37.png b/assets/1 Tiles/SwampTile_37.png new file mode 100644 index 0000000000000000000000000000000000000000..8b22ca7649b49eb8569207ed30298a58cd71b256 GIT binary patch literal 522 zcmV+l0`>igP)`?ZxxUQzPv9{j*uJ zk3Dtmsc%nma`*{o4^xX(?!ZVvf8XDtgSJAJqQiJ5&Z7fL&``Rc(MvX*U0XCJ3ksLL zMw@kC=E2B8##a?IhG~|vM#tB$tH+ycayW^cag}16vmDk4#uFDDFi;++!^hIy?k~Fy z^Wcc|rEsxI^YYt1zIWM#s6j7zb} zg|3ojAy`wOjN92RP4H@qS65a_MQ6VAA^qps(0xr1t8+sOGWDHbt{r7+k9zRvZcu{W zZyiKX2W$B=bjdrZgEdCLACtu`aCiO;4U@9FVn3V(qqLC~XP)-OavDSQ;o0zSGsqdi(ql z#-b_Zp}PLzSH21m9%RsP?dQMe>goBhG3(~-qlwr1 zHn+=Dw>-&@`$M8(XITExb zZ&t7%b;HX6pgN!|bn^m?(D)2+{km<_tj6iJ3pqdEbouU{e!d zT)=czMzb~a%wUkrQb(xiE@@Ne#Xl>%@Z)QZ;)mI04Vl0X3?awJSTCvtCi zb)?FI^nxAyOC}!A{V>Q-1eZ&OaWSNc_C7ID$+ns>e$h5;0b&&U7Qi~!q20I<^?&M1 dFWL1YzyOk!Vq>}M{P)9#@@kC+()I=d{f2AU}*^SXcwc?j?W zoudeKrAv%5PV0kD9hvbw8FV<5C{@-hS~3J|GD*6n`a}7KFi9B4|0biEyw0n;$DlFM zu3?Q;R1O`&i3uxRatv^B@GMruh^eaqk1>f?Vo{pSS<(RBhEn}>95Cg{KKPY9iqmm6 zlVu4mT&7+1)OlAMBRfP^Z?GX#dOG~4qop?1b`M?jM1Ca#j8n9b|CnhkR$fe~YFzOihS7DBjltK3^sUJ=s z{iD_tr-ew$MO0000^~+o#^kj-*PdAWRPpY&HAShd_4iAuhbOIsJjjum(hT=m7Zx%C7$;x z@k`}57Ks|r2}d%B!n8H6Yv(YCm1auC(u+|KD2O^a3v?O|BpO^qb_|B2Ts+}ZVK)Tr z*lDJyq)Bw*29cpwbEpu_*xPGBal)X~!JDb*Eb{qb%jkU`FcvyE1D2|68f+jW^I0ZM zX`Q|q!JX_Ti|N;kv@}UrvJV}QU@PI175+@BX7WG+S-yA}-ICxfqoRm_q&Czi3lw^f zxc*PBfdjxa%aKkxp2|t}C$ri^=h?YMKhA()Hv1_{Rx3nBw)m(Fx7E}wnbL9Xy32a0 zY7vPnV==gSv@Ws}wz??|8l!V?w@CIT5tL}s0AaTKTWPl_gOVKEikLlkbE@Jy*@Xpz yE3Bgs1+@qpkJhNG;~0*!?xyq4Ui^0bE5HC?9!-F9Zws{m0000GO+^`6Bai0B&$Um-ffv@uN8$uY{(n=fwZJ<-!8U&}*2V*4uJ+{(hPBOWpC< zthYf7ve6jMx2s1z|M8dbWx8x92A)d;9$*>KKqz23$W9M9QQ>1}k){nH7Ytvm_V{)+ zN3f}8=NNsfqI_+LyjtAUi>PKTSx%5hNL*ff09Rxc8J|Avf-feF313aoXo(l5 zZsDNc>BKZ+BIe2q247>GY$e0NUH>N?in7b34B(lP)cFf1x$R|*6N^k^P%xE;mr{|z zFZ*^iWrHN{1|{cW<OhN9A0UYqGNwYBz{e_x!8Ro_hvVU z5xcE$uikExEX^)4f=3wb`hFDS;33u~`uX1%_7d41mWwmTfF zhkJV1jN3=yv-Gk}FMP0W9qvu*lBYX9?)VFN=MSc7@33t*D7?!6zch1ME`T!)3%90~ zc?Z|piIKsgU}B<<;dOR+o(KRkvmpV~t69T=fJks4nDFs_>(;H{c@W_AR^kq+LFpto zj08aV!Vyd>)ilqcJaw;SO42UU8z0v#t zzM{nBm}()`etygosx;Fo%6jiHMll*j#?($;XPN_hCqpWvpUAxmZJt7D{hT~_S?P}_8Ik1P@#XPJTCDKWKA z;KPF%G8HnIt$@6GYmInY-G}3~cBWCw&s1p%&4Zl*eFGn}G|=+JpMq*P>%u$+$O{+6 zm@fQS=YzsWD*){kJ1w*jI5;y0PQZ>_(9DVn4E*ydjUVcb(*m_2+I7Tg8Hf>pj#Pr9 zfYMkm;zcuIwiiD$)9;gcjQ<&k%xU5L315@wwr*ZUk=^Pa_eK9Jz?T3609Fzj?myuI Q!vFvP07*qoM6N<$f*dOXga7~l literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_45.png b/assets/1 Tiles/SwampTile_45.png new file mode 100644 index 0000000000000000000000000000000000000000..2ad332fb9ca366059e9d36e2618cb29912a96f52 GIT binary patch literal 509 zcmV96;QAu5(k~4J!!#W zYz2#j(*RaNZ)&(RW?Hk7Fl4O`ZbGkfQduOcjkPwC_zjcF20*S)Xi^nPCmM>tZ~ho>)ppJ)A!rm zC4LS^U}`OjsD0q@l8lDE>sLWnTs#_4YuT~7qjSUuPzUr4ph+(hHB29jUl^t^zWyP3 zIw}v5HfEet)C7|00j&o$PQEmrFlhmFg_|&zq&&;iv)N=w8jdtSQl~is?C`pY9G?US zYh3>*@~{@5s6Fzrtni-eMeF)-L$mW*ZcQRCw2cISq&!xqQtaN8EZ0ztQDl{t&Q1*m zhd(rBpig<6x=Ip;?~_dUax;cx)=^Yn1NSeuSygzdsjsHfIz$S+FujP*h^9Q4nPgE8nmWwOWACKxanPWU zLaA};-8SSH8$^E`qo6IOvDraRsF1QZb1T``*HiEEg%;aB$s2Tnxum!bF~g*UVyB6V z6UzeqAWkE3hw8!6wX;Hm=rTB5F-Z6A=9`yJ*KNq0*nGrAd#M6=iHK$-a0Uuc4joJt z8e&mQ7|!2x&@yF{t^;)N5DLjq`0!ScmCOdIf&lXxp&$? zB(H}!XOJqN;qFTil!GQMNOcG>Z=T~QeVbeLddt7D+mx06Uh%majsqBXR^8F)8xd*z zD)oXqW^V0QMXD{+RBRq^+FAj9W_Ffzf>fKdn?4Dxccl$Sb~^Jp!~0NTmqH;Hm?{0w z(=qm7V8LHj)YmvAFe$!M^HKVAoTGd3*Y%G80|0kLN28RuOJe{4002ovPDHLkV1n0m B{#yV5 literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_48.png b/assets/1 Tiles/SwampTile_48.png new file mode 100644 index 0000000000000000000000000000000000000000..56d3155edb31856bc837f6e550ad81a1d76305e8 GIT binary patch literal 582 zcmV-M0=fN(P);zf<&b#}PV0D#PLOh7)GH5`Z%2@V7k-tM<<-3p#Z0JpCTJ|Q(Iodk!I zSP&jKz_e16=6NY^;qmdiIv%=fI6NMHxzfpX6Rvn-1rSX%MIAL%Jz$K8sV=(F{HT1@ z1ut8sg^2zBdf3vW$*ZUwyjzSg8b(I0lh>K%Al=E33hBq#J0fXFF8&_eKqHa^NCjWq z7rKr~pi2D!Z>v6`BGgI%*z3M%fTuY?EPOf|z3Z`>27ub~!`(O}c%5Yix>GE(Pt=El zC1fgOFgpSH^wt{jX?35@{p>7E;g@Q(#6J(|4Cp%=IF|6iT!t{0kFE|^(lzv^m$T-; zPyO=|J3wzSn&d#@#hF<+_$jR#(h`3&R*aBJ+qM~%Xdj40T$xP}T}NHc?ws@%Bn+Kz z-klJV1c+^%?_rL?`KLKC(+5-SzGz@j6Xg29;u>0@@Mn9)t?(X&+c1o&7ykqp01%-m U6-&Ym=>Px#07*qoM6N<$femI+AI3(QVN_+j z*?|l*In**Dd1(QWLX&joV|XD(qLQV;MHulE2V@gnS9s@5qb>VIZ`bER*FjLU{7v{Z z#BLsz4Yey*R^+~f{mcfgHJ}w0Ty;WZt25*@nbN~RO1<%TfBdP~gg0$Nf0>wJK_hPQqdv33`_pbka$w;sBu9dTIOIYo+`SbXTlv(Ncfv6X7~w zo#|FueRbrkt)w05uB4a?6n?T+!19>M7-utK>{%A_P)4lgFbpk`#dW=`Cxj-h z>=XC|{)cbiKllVbVV^LrQ-wHnmvNoY#9Pgb=QwFv)vBT>P5f-<+0M=D+e>wkyY234 z{lJqdEgvl{>r+#o^kR1i82A0Sc)pkQpf|C0J#i)04r%(u$JGx$ZC|M778r+5FoFap z9~K>o*nAfz=|LWhqnr^r%M*%&t{t2v8iU3jUKYeh8$J4x2Sa3pV%HcsP6%8tYeyb{ zi-m#u2e{p|Rb8dBjL9SX5wJld(wU-j(%5dODPX)gLtKid&&`yvq|^e}8wQXd02W*l?cHI9Qb-*4#kw+N z5Fe-M-CypUQYj8UnyK1#U-BD{nNN!q-vOm)YKQ@Iq?ZX^%0+CDdkvXl>slmw5oMqn z=emAT15>`BrxK#^+OnJWA=B;LL@mtcaZP{ll1+IS=*iQ}*L!qF32wXRr$;$QjRmZP z$B=prlxuhQ*msfHCw}b5o3FjU0zjW(UgLMn?n3j;;}hdm9^lb>6r;Ag{_tPPa~l>H z#5@Hk6F!qo(tf3E#0jY1=RBdpI-y&Y?nUC9=+$o@$gcnc0Ma5t8H#wU!2kdN07*qo IM6N<$f)n5arvLx| literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_51.png b/assets/1 Tiles/SwampTile_51.png new file mode 100644 index 0000000000000000000000000000000000000000..7fff06ee2063a457c4663bec5867101ccc5acf4e GIT binary patch literal 548 zcmV+<0^9wGP)mR6(+-r?kN^ZxMa z`l2B@sZPJ}i6^6i5$j%|PJWD$)@}n-Qle57Sy|rSUdycM)m%|hBr;+hi)1O~$6)MZ zAo{M?ScC`konV5L&!s(pR@R@iuGI*Z3i|+Bf|@QNW@xuun4rBjny{O(K8B>N#j)Jb zNjYg~0z|z-liG1N0pQuaM7AzqfmF2p)-+7B4S(59t3EMIBF>=5Y<(c7Ql?EJ&K|;i z7lV8j|As5Xz^MZ_F^~w@DDlR$M1aX1CwWA>h)|nwi*;Q(r2tiNgiK+EN#!#`tO(#> zkWB&U9v<9-X@>h+=EsqVqdDVaNsby1cz_Q<9ss@bsKmP4sA(!>t|9tJD0km*-o-#W z-h8(_sVrJAC(ztNfI>f>r94_Yj8A22RP$rhsqH!-M_Dm85*EkJ!y!z7LcCv#Nk mhFtY+gI6BjFv-~y3LVg|aMyFRCSThR?2t~Dv`vTCgl*QaO|HM>wpT-4uose>&;%6gez z44TSF`-)W}_}$lm$hK%YcSTRSDAO&l14V1!eZEs*`KBXiHrckx=R{cDpkc$oIii}p zkqk06m_t((D0L2(*>e9;7D)vubYAUL%q>CY&d2wap&Og)r&8{5nf;bEwQks4F5~?G zW|DIGs+fxh2*A7UU`i%o^JzQM4f5o+2i+Y=j!q4p;5MYd234c zI{3aj&by=D-0mHoyS;1gul2q+(3{l_e&CsL7NWzrbGTcYeHWf5dde7S)S?HS`I}MW z84X|ZP#>0W>dZi68D=T&;N$sSXfaU$1&GWz;RF;s%QBzR(|P#NTUg>eA#RtS(MYim z-*`tTk(A=cY(4zk;Cy~P2+*uM1rCV(-SNUXQ3{&3!RAJDaMsrNUJbfP(~u!Pk}};^ zqf0beNGv1kfT9F+y*4tHVSKo-8ZR2S^X48phkbMmD8#S_`)ChfBa+#o$=9`FL=hcRJ|pm`sAMx$m4#N3M;B;ZF{M2- zvZe@>zBL~vYE8Jylx2+@gDYPSg%s7aplHZ!sM?1&)YsHnsx6vCap|?HM4f*zlO?Yg z{eGC%mr~=*a)4IVSJ0bjC-m`)WHW#!%$)Mb6rMx>#W@@@oE(`&T=Rj==DIC?M!Hn7 k)O=6yD)fp^zMt07b`$$Et zzH@!C1;nzmSa21&p-EDfPPz>j1J6lKallcFJv@dLm@3CWa>?j;9c z9$+j+h$;Y%?>DJyo~Gbo-5G2a30OK_CiU@qOa%{hXfhZjutOT~1$kNO=&LDhGGPiQ zOX}Y**Q=Dach3>J6_WggI~3AO00000NkvXXu0mjf;v@M- literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_55.png b/assets/1 Tiles/SwampTile_55.png new file mode 100644 index 0000000000000000000000000000000000000000..6c6ed4a1dc06ffe2e10d8f674a5cf3d63073bc80 GIT binary patch literal 540 zcmV+%0^|LOP)V=R0{4I$a0HG3TT~%d=_YI|R58gUqru~EX@ylqcI|oZd1h?S;^FbGI%k9G z%q>B1`TCB(|Jgw%H}Goj^ykf*vGf|6jVmy6tPS{2LdWmhb~0Hu@b&zG9oroCo0T@9 zuUWoqcRf_?S__nv*ui1f!}aQ$hWo0jXUcju87SLdD&e9zppBNV`49*fYgg3m6{8b9 zH&nlPy1&&vC3Mt_U)sJl_C`X>G7;6Jw;O#JLYG#9pysGFji75mWdtb7YZh8uOpuR` z4Lzwj%t^FM4pxR)heyO95XX=~aW2#EGKn1%8V;$=O0gsP{(>HKQKnl+haJUvV;hS> zgoAMD{$a^+O(rM8j7!Z5uS(x~nM@=ZWNfBWJu-QLLi+%3#I(jEjzy3lgwC@?hZ#y` zCTATE$hl977LWqI!vTBpLQi^m*QYOF`D8+AVPaD!OFrO}i)a(^5DfqTFWI08q2EgB(KGn-+HP=#l#F~*5A>6AuQl}X~~=U<%V{lo3zlmiwg z9+=-ge|e+-kL{(my@2X7qGtJccSDCn2OXl%wu7t9 zchWM0F2==&`8=2q(VmAMCk)Z@5{w+ffV~34!l37qm;)XU!31rusP$4lxl4kjg_d+^ zz9vGoZ&Q(w@chqJ5gXBtD<~&gCnfT@BtpN}8W}MR2t21n`b37F$69j=}b|=+}T`=aEDA zebnZJuAX-gM00RIT>`CQ|z+|Za0000JNRCwB~R!dI9KnxAm?CB<1RS2<# zqi_JY3g>LM6$@6)rUyV3F0Xa0`FQNMqbQn8#{cKf!`H{>>+|mrS=;Y4u8z~{s1NrC z;`jXjetdtD^V8KKxJvH4aB@E1?0()}a85&fO{PxFnxFM%cfA03!(NL8^MRt=Z4%KP zn*^H49SLwpoUt!MqGc@iJTh1n4LOjoFufOf@KTyC-}{~zCawaS51AIOD=#Di8yebR zWZ;S~k2Ob;4M%=J)=kEi=`IL4Q@tvKx>5B5tePKmOVXAIE@h;<=$>T>Gy`OlhL1;T+}Obdl37&;veFyZj9$Gey@}iwBL3w=x%cofFZ!|<=Nfw@g{By(n6g> zQP&7CTpA9H(014!@EF0|p$AomnXVDt!ArbNdJ4OJvJ(|03`ss9M(^*^Dk$n70Ex35 xqe>QVJ#wArqSoN&Y+mD~%!%pR6TJQe7yy$^CZXsXl`H@N002ovPDHLkV1lpY-ktye literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_58.png b/assets/1 Tiles/SwampTile_58.png new file mode 100644 index 0000000000000000000000000000000000000000..dac0f4e238a62f523e1ae1787a326a4bf79c331e GIT binary patch literal 550 zcmV+>0@?kEP)_#M90)3^V?2gbT;o-MlyR=Ht0|e0mtfx_*8gYU^e6 z+s!F#PV(XO?y$#s$6GpJc?JD;cY_1=0+~g}q9^+y4{#`HRS$!X>M*7qnvc zTR7bC&&z%6kJ5>%K2UaR0#G8r*OH?pky<2z9Y{9poCNz>2! z-4%WgBRFL)a#CBvfs(X_(B&&HBhH8_sb$(xc1Ht51t<;rC6J<5g$nZr(+`IVjE%of zR!3tI$wi8ji&8+RdO&ZX#u-cUv67lVM!1V3m&!|;S~a^CoCc88hvT$(fD>MKiDR80 zV-@tDAcwUC)!cK|mKErwUbLh_r%O&t5OqD9*PFf@n3tC_Amm7diqx<*p&&&mn5j3;QH o3r=GVQ(u8@?7CC}>sx>U0LcYADZYb)FaQ7m07*qoM6N<$f+5`aW&i*H literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_59.png b/assets/1 Tiles/SwampTile_59.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0e6faef7bc846dbbf6d0bbdd8f56b21e4b13a0 GIT binary patch literal 541 zcmV+&0^F@`>y3;CpTzWzw(sD500000NkvXXu0mjfRMzq- literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_60.png b/assets/1 Tiles/SwampTile_60.png new file mode 100644 index 0000000000000000000000000000000000000000..07f99f19045e3b93e39a890c6ad61ee33388927c GIT binary patch literal 535 zcmV+y0_gpTP)v$&iILX<=L=7GDeBW0qfEbUH`_!9 zaCuPx?t|;icQR3wln4HbgMiH<5ukK*^rQy!*aGIA0|4V8D@BnNnwnM!Q#5O{5^*!> zHb^=e)wR*J2*xLXm;a)%D#A@<`nF=cbp|Vvis7&|4YOMi-PS-3VI#y7Qe?J1CdVJ~ zeRSwI8SbSS6)(vZY7q26C=3Vz8x_2%RqP<*rY1%b7Zn;@ZZWT0CkxP}D`Xn8G_}tO zZYhA-BAW(kzLPWbwGX0WEVCRl8Z`{$Y4Q&+b>?KEhd#l($ouIlAx|H7eIV1}`0yEy zPrXV{`RwZ_C`~sM0hUyPmO=tC!d3PT1}+bT#`J z({^*|Hy1g1ngO5F3^z}=ay}{Oe@aZ_S=x8+a^|)8_VD}TcV;0@n2Ilqg8TXArH`(#?G$srn%@XU5}gevaW8FG=zlUTiISzwK#s0X1!7V}j?+3brNzhGJXA&L z$6oCMsVYi`6;(sm@1s{}O+}kE+b28+CDMFDnQ8|JL_(IJIMWn6XCK+pmE4QgNNS5{ zCQ~Ba5Rz#yaEgQawx7(@L@akYgyz5G_1S_=5p}8#Y7ZQ0M3NGIO-{>{+|ZajRnsV) zLGZ{8G88&+O6dHx1ikxj$l&=HknM%C+AHI;s`)~&C!4WtDM}RG=P*&-t-6B-+$O}_v9FOe^Mp4w}GjHb2^K&j9pB|bhu3q1p zbi8f-YI$sz$M9mmcR25c^X2`uTz9i6y4xEAAkL0xhl`u_7mlz#rwZpiy8}B=91h9g z;=*yy?tnaGVdg0!ewHO8q;~%BweMq?t7rfQhCic5P}JryP{-%pdP33SWos)H@AL)i ztH(|q5Rh?r{#Yy>hbe@Fv+Wa2F!gvVH3PJ=Sszc&1xja%-G0PY4`2a?1x-2-X(BsX z>C#Jq3#$LcP}+^>??TeSj1XnZ6c{QO*RXV{0Vw~h{$j?csE{j#;p}Bnf{~IkMgkaL zYo)RAArZ(?DiZ8T2cc4{h+?rSwPn|}F>B!S0Mv4AcH^!~8G7?a;ni#p_5KRM$dEG~ zoKbkzy}io*Gp?bPzQB`Ne%%b16kw2S)|^>>Ti8L&lGs_CLd-5zzU=!x%Rp+Q=U`{M zlwEzYWfCy_un4t5i#BXonT>Sd;{7P~X+)x!T1ZO`Kz|qEKeuUur}SE)EA_e)hYn+a literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/SwampTile_63.png b/assets/1 Tiles/SwampTile_63.png new file mode 100644 index 0000000000000000000000000000000000000000..4cd4a082d5c0c5cb7b311cb20b38c57f4b74a06d GIT binary patch literal 552 zcmV+@0@wYCP)@i0k&Ud#X^y z6`sHoxbhbG0{?&?@C2R!S5%>%b}w*6sKTw6k!xoY@2;?_Xq&_yXKcq=K0MwngsflR z7bSVy#(K4HR(mTOpfLkxt&{LfKmTWeBv^f{O%qaQFExPl zn#Ljbi3;m}#>+6)L1sB4@Qgp=*YgKrGLxJnMxclhhCh*N2R||xv5&qZJ3&$7#^}@Z z`+Bo;Q~-sS13-0fx%qJt6`kq9tJnarB2r{1X`O3Qf>~^U+06+6wF8>S$c&rPtt3p4 zUMo$u>!DjANoz5m8}*oku>_F%0gbXEc?eJ4W`vGTU;$Kg$D>J@c7}Bw16;x?5hqZj zj^2}FulOc)>5mfbONA_+!xhIMQ3uJy;6&hq0&hr*HXymr%1$R5s7p=;l^tbo?TKiko0^3X6&yD9$S1J;#`!S-Rytle!+ zT4%-dt3oayE6!fF_7x-Bdh)4&`Q_97ZSg&!tVpmSMX1E$Q-w~@o*qwl780R{j_9W-bIol@@r00009^ga> z;owEjo_GY`$7k?8d;}f^uY?c|hCTRmBnJItU@}g(vt8H8rfIt~-~6{ddwhB*6pa?k zqK=+dH0bY#{k`7Yz6FfsVeH+HWuFZ6=5~q+Mn_qU4&t5T{s{pTVtM(Oq8QzXvz1nX zwi=@oD~^Uwo(Dbwy>u0bWjyKJosYZMJ>L2lUg5*!a{HQ+U%hlBnV9qBqWh(JAkGLF zf9j!}uXW!2;M`0;O)^kadM+ivQKBKQ7fX(;lRyY-bRld)mO~dakV$WC{$D=-g! z8^?gbFGqYV=AiqvOF7+Ji|*(MwMFT-Rc(KSHce}&JfylJMD1a(AS<>Ytps9-V zk60tZ%TphyYO5^grs&BKWrl_A;HLG@K5CR$Iq3i`Ci^x~PKM118ecf;q2t@5cN&12Yx1fup!9tRE zvq{dKd{kiKpqGY~A0x=YE_zB8RXg^=8L8J&{5a52exI)e$Pqc-$-F>hH?wJ`*8`P< z*hTFVCX{-|8E)fW?R(36n^tn?pyxK){}Q#g(Wh?#1^}6mMZIS6x5@wj002ovPDHLk FV1iZR22=n5 literal 0 HcmV?d00001 diff --git a/assets/1 Tiles/gras.png b/assets/1 Tiles/gras.png new file mode 100644 index 0000000000000000000000000000000000000000..156a79ceec7fd81f2c4506ce7c1e64c926d54e5a GIT binary patch literal 140 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 IM6N<$g4`Fr9RL6T literal 0 HcmV?d00001 diff --git a/assets/2 Objects/1 Shadow/4.png b/assets/2 Objects/1 Shadow/4.png new file mode 100644 index 0000000000000000000000000000000000000000..17d66277654d9e7a99cdeddd589f8ca1aff0e84c GIT binary patch literal 3051 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 literal 0 HcmV?d00001 diff --git a/assets/2 Objects/1 Shadow/6.png b/assets/2 Objects/1 Shadow/6.png new file mode 100644 index 0000000000000000000000000000000000000000..fee12e5f94c87ff47dd735022854fe1bca172205 GIT binary patch literal 3281 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 P00000NkvXXu0mjfkV84I literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/1.png b/assets/2 Objects/2 Tree/1.png new file mode 100644 index 0000000000000000000000000000000000000000..b1c4977869843055edadc9fb22b6a08a022ccc96 GIT binary patch literal 1752 zcmaJ=Yfuwc6prZdFsQYI!?PGeK?L&-2?<1vNx(QHLI@ZYl#nbWLb6M;kOzu9M5@wJ zKoLc)1wu zngN6{7poLYV2L1zDFan_sTqUUt007p2(H#cQdt}TW1@jrrJ98ux_SePQOa4^jXnaR z0O9}&h4I%j5djqdOEG#?yjsiDv#^u8Ok{4}CSWm>5IBy7 z{T!4;5RBn~8UW*ir{H8n5(z`2;Ym~<8jZ9PLne~Q1S0a#a3m_zhsGq+F;fGJc+<#Z zm?Cb#lrLn(!YW`GViE{Coer;~;6Y6+fy7`i%o=1e4ng3w1~n|z1Q0}k7EIL0kix~dnO#9ljs}pzphgUW@zbXmtN>w9s{kPkCzOWq+^AH`L7jHR zBwiq3^3_^cs+IwKE(?n&;FU@_lT2aI$s{g?M5p_c12;L!to14vXNg+0yX zg0e&vpoXWp@-JNKtXy*|s362M7tkn^0C|80RADAlW-4cog*2<)6jwfbEaX|a1SA-O zxv>8#^z;_eJ?805+aimZ#s}0$w`-8Leq<>nBUi#9I7rOX260&wiU-}(!`IVxk(Yl2 zJu;1p{ABd&>=9!Pi-e&Qp9iWdAXJ?`77!0o1FB2|brP9H8s- zck$*6MEKr1l~sKoo7)YoX(%0?h$`KcYPvv7s4E`&_28bi*UnDS`Mc6p+e$wWe^LD| zXE%`VTYW-R_6+qLJ5wm;6uey8BZuU^$LX!0{C3okXGc2rp4X^F_<_uu*DSulWmVoe z+Z<4o=gK|^pq~|{hM-3xw>7d;97vsyE5ag*Tn5!2KZ=$67)2Qh?<{r>``dZPR4+|k zi?hRH#$9N%WrKcb3)XJuEhTI2zfm?Am)mOxYqI843iJ0w#|Yg?Fr(|9Ia@;$+CY~j;J^!u-JA5_Gy@8{w z;SSxhrj;L$sr;d@Hpkat4Z%B}n7Z_3ZFO<)@=N1~yr}L2^_0$1uSA<;m+?DyqPMW3 z?NiXt6@KvYniK=vm28hJ7ovhSbx9{nVf^OVe<;-8=*FM%!s< z!=u)YpWo+hy4z|H3c@TT`S?7eL2}k^VN!m`^|!c?lPl+6Nj{Zv&h1RfW8cE;R%%)9 z+qip|tFzrshcv6m#@eb$lv)#As! zXBQT9@SlvgRCK^w3sZH3_7t<_bgYTQd6H$9>4V z*4xIlxi)oM7FNACmfQY)QCw5Kr#t-VO?H**r2{=i>qR%lZHOpCt-ibwdz*>e85Ex< KiaD*Ydi%(NK* literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/10.png b/assets/2 Objects/2 Tree/10.png new file mode 100644 index 0000000000000000000000000000000000000000..c0e1fe753622efe7c5d1b00421c9ae5519e63044 GIT binary patch literal 1045 zcmaJ=&ui0A9FI;!_M^j-&Wq0shmJLA`XgQA>TH|T)vcwrh4vs~n!K)YOI}RgY`3F_ z;SMs9$wb|KBJ3n8i0GyWg8#t02p*g_6$gq4^`&b&57v<6z3=1m`Fy|ceLrs@ojTjo zd8Ct~sGh`_m?7gK^0^LlkpFjgWt|LtSSsKwD&dN3K`Nr6A_NIto`e}FtFu?$!V!w< zptW297m^c#f^XzS!QWahv2C&y;D>nnFcXrK@ebk zZpFiKfae*`AK-az2zWi5m-UdBcXNIrzzg0WXgoB@W~n71BgPxKNED{a7@GpiRw@;y z;$x6C$#S7k$kFh6-2~ybXALY@-G<%YR1l%9Sel77WB^A|E}|J6rb(qcThPsxtYJ5f zi5wVPl}(moJkFMyz-03OP+f1KZJdF-_5M@X&dr*T%|IK?SPE%esozOu3NZ`H7+E=l zrkkgjE+dTWGBQCd%Yzen%}`OrK3T^nlS0Cie8eA*27|+rSLB0Du85Qw9U8dFRd>1Zwp_;wx=AvN(9*6#HEtmt)VC~X?Q4m( z)oXCo_O*y@xhyG$bsGCuqnk^_JO$Bhr38^}M!{7kiqg* z)S~V!9NWA*xhxGlT3T2h=QpF@?hI5ex*p!zp1-^nTItKLemYp(x__Z`9K0Ieupj>@ mo%;Io`s?1U+l#)Vd-hWs=k|WitUhs(WK=>*iEGhI*Zu%9woY3B literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/11.png b/assets/2 Objects/2 Tree/11.png new file mode 100644 index 0000000000000000000000000000000000000000..23ae997a7a0983d87284264fb62d835589d05ca4 GIT binary patch literal 1043 zcmaJ=PiWIn7!PjZ7#m|A1U-e!gN`--)@EyH+}fmb)uoiSu!_Q#CU0%%k{6R#n+=C^ zpx{Xl9u=ksWr`jZ6j5Xs56TW6M7+3*2!bMlx7C-f?L1gR$osyJ-|zSRd0(z&(kJ_S zkMt4*(Vv=DviLk4*gakNTX70QG=Q|LB@O$3s?YYq;DJ`uqRPvgdCA!YPA|&8>OLJ zVz_8D8ffr*2qQw?l8rP!WP3v`1qFDzYdXk;HW?^tMOZ}=g)7}{!E)NNw$~gJ9vI_m z4#UxG&{7Mis{e;tRvYc1EZD2}pTb^#$pK6jc(Cf~_~I6Zf>e$uyFf$G%|p1@nqsC5 z5%kK?A?2Jv9-B371J=Cb4ZNy~DceJut%H;zQCNXCO+ySTk#J%(p>SiuIL9TE8*OnFs8=muqZZfL<0d`c>x$xF0{x-%c9x2mPALrCfDd( zi`Hr{p@ul0QK;t%{w^kru9NpD8!8yLQsOX9$Y zdG$0tx=}WrtJmwqfWiBWRcCkRi9oScCVZp_^^8E z&icekoK`+J!)Tkp4{r`8WpFP>cIAFOOL+?rTDYHN>T{KGFhhgNQ%E!^06cJH+W e>JxL@gY(4i`}^K~o7}vMQxU0TT6vt9U;6_RWlYEb literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/12.png b/assets/2 Objects/2 Tree/12.png new file mode 100644 index 0000000000000000000000000000000000000000..2249dac1a9d12b9df97fc849c156a0f9159fcacc GIT binary patch literal 1025 zcmaJ=&ui0A9FJ`HV{8Z>6ve|MJLpE6G+C3{usYW!b;YIBw6Nk~m?m#)?2;FgH=FJ- zbcn+r;Kk`*px{LiZwl&37>F=DZ770=p$z85dwuEJ&Vw~1dGGu9d_Ldrd*9EyTgYD= z8aOpTQPfawO4i7DoO}a^`^bNFdG;q6PGY5ui)aqlbq`XLCaOS?v-NqXLEUUzUx(uq z)kj;UGA^srl7VbS4>3$&yM#?q;}e0a8#RbQ1HbcN_+yeADU$I%sEMuv+Z0YO3_t}U5RDu^*U1@ zV~{t`a>-;e)ZqCjK}7wAgY_Wl_`@9q8Ty82x!6Ju2o?1TTEr=uRJykX+wICae*2in zfw6(^vK$i&x6}cu>i?m(-9`IYgZuUVQ`j#xT*zwBM~j|88aFo_rgEi>2X&0R5<&}| zQ!G>wMt&8!AX5~<*%`|*QQaSD;Z;@2IX>1M1LouuO%xc*G9`iI(}{Rm|0P4wi3RKh_zZ%_HBJK&NUE7kNYkcSsw|m6a8#}u!xe|kg>5}44%Y#Qp9~Bj{ z5V7uDB11pc^2KJeNnIFy{+q;VPM$0UTjs;d$KDtE`)0m0KdoJBeBNGN_;B-qwyYe~ zPH%qwe&v>YM!fwpyM~{R{3uoKJ&8nWA79-+ADSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC*(J3ovn(~mttdZN0qkX~Oq_0Ub;W5O zRBsASx463D)TknMZjczy60pXFiVIA_=LC? z`?%N|8>?Ap@bGKd#F)o6x&UQXC#~NHq}WS>{DS|30fUq`vl{~gQkJ`k<~`QnXlKV&9=9LQkFd9o%+&N$!TS$-z9L$*TN@f_V}O2TLNJ zwN*Lz{Rk3TC%=3~P=lPvaj$C;cQz_}w#=58*}Zg0LsM$mV$~IU5)QrLu07r&lUOk2 zUel?w5rQmxOjUJb&g?P$%;anw{(ARxXRp&4FB-xp?jb~=lPK(QaTJ%K0 zlD71)8k?x~wH>KR%W+bx<74l-&RVjs%xAahv6K+I`Te>!5jC4H%@LozajArURNu3{ zlbsu?xFW93ZgWzWf8ED8x9sP+!tTlD8%4J9?i4cKd!6^O%L<80`|{$Zn9Y#n__X+h z@{9h=u7j2@4dva98GX;S@6X^d{pK5clvU1RmXqz<7**Ci`X{eFFp>71edu6W|KY06 zp0v{&wIXXhlUM34Ond&(-ZNv}!=5+N4-6$T=Gk6Lp1kS&F3vPjOOfkWeN)8l8nDQ; zX6_8yZSErBet6HJgf&%W12WznwR@3CI(x^$ZD)Wy2{_FVos{n`0% hd!MxY`Xijc;KCHF6@GE)O<)3K@O1TaS?83{1ORCIP>28k literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/3.png b/assets/2 Objects/2 Tree/3.png new file mode 100644 index 0000000000000000000000000000000000000000..c180f102cd708c1a4bed2aee88e0ea67d1fce320 GIT binary patch literal 1546 zcmeAS@N?(olHy`uVBq!ia0vp^CP3`Q!3-p~__zxLDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC^b#!&Lbh9vWGPH2C zbarzyg6Vb1PcF?(%`1WFO+n~2#;F&S6mkoIHoK%2WtOF;xE1B+DuBIgm5JLe1~|=w z>P^Az7DJqR^?{Dj2SqGWM8kxDsRzV_CtDx~p72xifT_I*n5^%o=n4R{glK?Ih^wu! zaj}n!nuP`rzm`pmd2FK#P)6^C^$sA#UJ~RN{2vS$q`aBk7#NtmJY5_^DsG*bez)kT z0!Pcr-QWJo?{xdq$YD9NI5fTL@)Pb2dM_s4PhmVE_t%T-YS({W!FY$S+8T?EIM!II z`Zwxv#XBsNnv{Ng$|ReBnKJhrZFf3NlM3PwNY?AnR}5_o-|(&cSL`QSDXTpqOjmXH z2_~sd51OQMe0hY>H_=ldoAiLs?12@S>dzyIFIpHvm=uy^>hM0;d%d*2$&4O?|fYq>k;3TU(iv?|WUVF8x;J;Hgr! z($wgvme096X&mpPtYdMrCD`eb2N&FgrjiGTLl+gJyl_nj7dS~f=Z|_|Zk0f8+ zD~c$qTl`HndYQoMwuJ=`Zzz;a`K9l}Cl<9k$Z~GU(a_V|mp7>GUT|75Elan?Pqb|3 zRTJ(@8+X0k{Cv9L;|!+vbZ(->_{MpWkbzgYw5go^uZB1`;o>|58TU`l%o_50G$OfUZ zY=-I;N)r4st&=QruJlX%xM>iz{=%yCb(${k1(`d0xYG4j&D&f1C`-ruq)Uor&7JxT ztL{%Bowg*@BC6w#kc^jpjeW4=UxBVaE5%Xz_ zrrvyiV28U}fi7AzZCsS=07?_nZLn2Bde0{8v^Kf6`()~Xj@TAnpKdC8`Lf!&sHg;q@=(~U%$M( zT(8_%FTW^V-_X+15@d#vkuFe$ZgFK^Nn(X=Ua>OF1ees}+T7#d8#0MoBXEYLU9GXQxBrqI_HztY@Xxa#7Ppj3o=u^L<)Qdy9y zACy|0Us{w5jJPyqkW~d%&PAz-CHX}m`T04pPz=b(FUc>?$S+WE4mMNJ2+zz*$uBR~ z1grP;werj>E=kNwPW5!LRRWrzmzkMjWo+o`=;-KTY-ny~VQA>;>S*j{X5r}M=;mhO z>SW~V0@Le~pIn-onpXnTn}X15f>SRjDdZLaZFWg5$}CGwaVyHtRRDY0DigO`3~`zV z)tiFbEk-!?>H{644~kf%h=vIPQxAv-PaE_L3mK;QwI2Amz>M#=yY%-P6S}q~g|@X*Z`a zD{{E3UU=qz{ihWg@AmHD)wlFqXX5SHeg9lY>F?kC(N-<>&F;Un>mC#?h=1JqEc;H) z{5#3spPA(%EqC63;8fYadeW5OFWIYn8c!?!IlBA8q^bTD0{aex%1od8qHw|Da=WEc zna6*|%xq~t_eC&$$5VG3@ww(U&*ZL7d-wBVb&*fix|##Adn4H$r(a5*%d@ifR*2kd zna=N?c|ljDIQ}Y6EA3*7bMBsfbnV;|o8I^za9hMSiCZ(y@3qv`VmI-U&|TJk%a611 zSnLkDd9~!|O|L_O>H7Xt?sZ@8Ub-inJ>dEMCtIIK7aHU>Xg+XFmw2-EkxZqJ(2UsP zFa0Mix8Iw4e2u<5|GNsG=-5vs#YcOOYq+QFebPDgLfQ7uFXmJ$ybOrrO47>yxkz5Q zeuGG27jI~{{A-EOjfUDm88+;9jwQXEvX*Vt)5jGh3)N4i+&i<}lYN%){u0wWH`kn~ zu9`N(&*)+2afj=jlPA~fl)U&QWZ@~X`qI+)o3-A?_m)IA{Nmbp;?_-_jjN7s+HmQA zOo6=PVcR=5CUpPx3gDY`red44$rjF6*2UngG&qE#3eC literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/5.png b/assets/2 Objects/2 Tree/5.png new file mode 100644 index 0000000000000000000000000000000000000000..32f5157fe620cc3d3d3e0794c944b15260abd837 GIT binary patch literal 1059 zcmaJ=PiWIn7|)!@m>WaAs32q+h>kUB+9qAYvaM@6*Rht;R##EPG=x!AX!@!j%KNOAtjC0V&RiW6%jH8hAEXw zbjeRctH7|KP{`Hr`8*imvF8jVJ08RCsVhjpRxHg#8Z<~(QO>~`BvLrjjS_UTA#2#R zYr+@CII_vGwAU@E4vfeD57qSs+D0j`neRV^?aZ7Bm=v(#jHTel<$K&vrVz1!jG&c) zaJqhr$s$D1E<%%xqUr6$YBV0c>66yB`>RbsbGdeI(ovUtggH5^aDCj1RECEZK1?s2;b+THrpf%4W z&{VI+Rh#F+HRUom8OCkwUyZK2@btLb#@OORWAK52r`^J1ef!q*Z~RN_OipB?*V56B zu3pjae{?izPe|B(qGk0AHrr4tkzRKf@vw5Yf<1+p6wWvwkH6pEPIR|zO>#@?*X@^G zSNbk9YhzFMtvpZc7dt$!GrNad4zHXa?!Ni?!n?%}+T-$_!MESXe;k`1f59(+wx-kV1IRVO+BT-+Uu2Q6BO4K;7MpZWrD%M!d1BF_y zXw;^Rq)81QC5HkL3)leZWMEG_z8FYUU01|@7-lH44nb2AwNX?_&68>90g|U<5hKd7 zq#)32oEHRkfaIbq$3*cbMA*2<3nDj2HWr1mdFG_3$)k;2cqdU6gj|tfs?{o8jnU96 zGi)-M3^h0|f)Npa)&cjV#e{2?ie5=OB7b1Ez1;RDJ~IHc!3=h5-h7I$&my* z8Xrl;QYk*3j3=6085%P-a8Q$LZgL0Pa>G%uU7T44o^=tJqaL)$dds5KzLt1fy$088 zUkl%s%iv;|@M8bE=w=8{Pw2MB7H?XE4;(!09veE^6ghIzDKp5m+p~UdikOJ_T4$IHa!1}9r$p^f`<#& bKJR}{++FL?cP;Fl!}>%<$;ppL&R_lmCRt26 literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/7.png b/assets/2 Objects/2 Tree/7.png new file mode 100644 index 0000000000000000000000000000000000000000..907485bbb6190d469eec9cf65242c91923ec9258 GIT binary patch literal 1030 zcmaJ=J#5oJ6gCu9&>t#QDiW|>mbMJ@P%~=xc43^N zx@fal!X-5$>BwTV0K@o}L)a7*pYk0|Ux64b!DZ8y>2Gg#XkZ#Ly%1F+s*`{fb9Tdp zg^g@c-&oOO20b+i;=V)#EQmGWTdTGw`7+(mmB>DDvovTx@QO?yB~?;$Ac0&6qKpvM zBOC`rk>SRoqR3qZe1zlK2zkUXHzq|zi5~~eMU!Z*QI_&bsu_!%WV(W}Be86?T4kyN zgWP47i^XDr2G55HBJ9;{todQv3$+v!=;^NMU=!IOP}G*t8kT92=}`%m)0VZp<~5NE zV|~qGIVKX6)B>vN|Dl%EMte99kMsSfuve@(kj+C6t+_gBTsahka-@U{HH_RMLaVJ? z%vBIZUIjTIQ4qnU1=BWA)w|rltE!Z?J*?R}Oe-=?6d2PqBtaPyVkw^E#>EMaOC~2K zVl&fGQBZ_PDk|_?i>n}g&4M;=agAdx-;o=Pg5{9N3UtkNXrx?Zfkw%a*)bO`)lsj> zH9F@K>BwbCGHlS;zZ%_gk?9Gx?Xe|?_TWRCOuI|Qx@_#-BEQ67E>lcCDI~XVCS^hB z8@S?S6ylyYU(|`|#`$dFcd)4X&dVL*xt><0i~gth=G-7Pck12GtzUO)XX=N;M)%O} z*+=JYk3POQve@@|`0aCfegDJ3*U;w2k@-DvKeS~Jm0~}7Uwyx^eQ;QxJkd?P&zxM; SzVsG}DwR%VmDe+OAN&EUUPJ%@ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/8.png b/assets/2 Objects/2 Tree/8.png new file mode 100644 index 0000000000000000000000000000000000000000..1a04c852136204d95f59180b81538b946618cdb8 GIT binary patch literal 1005 zcmaJ=zi-n(6h2W2wG|Zt7JdyU7sL+{+n2;nZPl&P*rAc?C`ybPHeCDCSgn1=z7V$y zQahk7On?{}7?406sF)ZkBnH@+7+_(71qtyNlyjP-41|;IclY#t-+TAo^G>aLb87PZ zBmiKlvZ&XYonY_y_!#?MJahR0Gv}z$qz%%dT|2^{=#mu-E55yo>)3WT?ta9x0E}^- z)uc^xNp*aAUJ- zIh$*a;&StIa5hnyfRCvS6MsF3)kNcZx+>eJZh?b62wl^-!=##K4VFlRp~UAhj))MH zWgg`vSw=TtRzz7rWRILdc~z3tYytKc$D&1UORekWek^voRO48thga~!p==QM%ft#MBz7nu zUQDkv0Gj6ip}s#v$Fz=*^8Kf9Y;A;CsNBy2ddD-t$~FkFticFe9UaJcE#76lF%9xxFW4_}y0&B)Z*Cip8itn3oj7?tUecLc zYF0lpbDY+zje~T7z5VC=%!4X=(MrBt`ta@)5XX-dt=)qs+u!GY!lzU37jH=~U(wfJ jA8tMVL3i$V^ef*cL@@mc{07g?LPiD^qpI&N+}ZjAxS2QH literal 0 HcmV?d00001 diff --git a/assets/2 Objects/2 Tree/9.png b/assets/2 Objects/2 Tree/9.png new file mode 100644 index 0000000000000000000000000000000000000000..dc06674aa907c065ddae737b5117879953a73c4d GIT binary patch literal 1008 zcmaJ=zi-n(6h4s-rL=_w37AeUm7r?;D~VH^n$pG&HN;VxL^LC=eQB)LK4V{r8>tHt zNDK@`@DHFaEDYVC17c+8KfutDg@FM!kit1lQU-!$``tZ#-}m0T_wIS6e0OT%+5`Y# z%2?H^iKXB9@f7`^96V@HbCu`~Qo~Kswn7A!9lU{{;aQugiY#aM(Py*>K#Fne4bm`6 zij6(iN-%8f1(XfI;!+$~_7);=18us#%6vci$UxUonf08>n?V7!+|^EqYMpZ3?rhnz z!z|r~i?KolJVY!Qd)t1b#46L%Rp>f#a}4Z3$d<~SCe<)2uz*7Zb8IGU^MU{+i50Rr zNfPFv$O|IJ(^pChStTbaVjlJ%hDHmWrc%|4{aAFTGA%*^h2z@oHrvjyINam}S(XzG zQA|@rI@vLygfL@N(&PlwQv9n zH3{BWcYO!9qnkavX)1;v5zDucp{Wd2U|rWyvRPTwc`YO4r3FFI^#v`L*Ke%%2kx!>Rq+`8u&`i@SF-0bJi7eh^|#_l=5Xu^kY~ZybH86gssjwYti4-#_~Z{(ur??F literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/1.png b/assets/2 Objects/3 Grass/1.png new file mode 100644 index 0000000000000000000000000000000000000000..55d5f704e2cc8a541e3a64852d53a7e712f287bb GIT binary patch literal 973 zcmaJ=zi-n(6h5UWMO8ah0+s3NE=3}C&TX8;s;QDVp+R*NC6Ssjj_;CKt$oJ65;qe< zNT@RtLQF8j$iTqF01M3Q%=`)PoF*v)!LohtoxbmTKknUSv+-bK?amrPXrq2)wqRX_ zFMV?b{)O+tgk?)qyQ0kpVr+*Dl_>8sT=(oDYcZQ%Jo>^85L%JkPFHlTW8LANY$q5w z_5xrdbZ{64wsXn^?z5rm8`7_jpCs&3LpsS>Su3cpk$W@=S$opxIFnPSNTtL3_#oCn zz+=M3v3KT2dTdBjT^;OXTaoY-B2EqIDygp3#1$SgoRjx5PL>d?X)@W*X&SkQ)htn! zEWBEV?CUvASMzxGNDwWg1HEO|X0gCCq>&JTt|;U2SRU`mJRB;dSS%(Qs+s{rCc5y2 z9cTP#XRctf$O+v*xZKByqTT1`!jK@-s}j6mA?ru8HbKLb*bWpTXOoiVK+F0+)bkeT zNVM2>zW)@CIu`*`S}fw{p#uju*hxYKdL?AG;9-aJvw0VrBQAI};sLI-HN1P``jn5O zyHmVn>2*I6w(qdIX-J?TyDrtsm8zNBFBM5%D-cqxmdYeoQ_E_;P$&~Z%sJQO&bh~Y zG3U~2ZfPku83iwZ$R-Qj$BfoO?%`?4y1P7={8GIcmoCqxu#~GnGD>o=e;xFE3#KPA z7h?;~V(^&{(;mWDzqsTRxDx5+ai{wB^LsEiZ$JA6OG>mF?ceCfgc5M5ePP(>vK5)vHHYI^~R__J||Ra4s7p@BMzl1R-lj=gED#9m`>vC~T> z1P3a93qo8ta6lZ(PpG(Zh8xE)PLsfaVA%lPeJ0rV402GkB|9q9zQ1=I)8=ul$fZ8+uXGl}$W-2t4VOu?jy8~YLWS%`B*r^}AGK_JtMBLvZ0HcX~vf`W;e6N$1QO(4|$=AfO=lzNf3QqN=J@kvDfOS+=Z)B}FQ!+J>eTRZFvWXIzuHM*$7_ zjO)$06=@+iAB7--$R>^b7u2i7EWnc^>;B?g%!PVWuD383%UZ}4AsI1m>|c$ZxnO$o z?R;#(m=8V;VcKID>+_S-TW}>->iaD#eBB$5$3KU?ui#nYjaqYzzJHXSf_1lQ?zFP= rZpZTwS;1#$>23YmjaTo#e0YqmchIF%bhG{J#04a(S~c_CZs+B10Lduq literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/11.png b/assets/2 Objects/3 Grass/11.png new file mode 100644 index 0000000000000000000000000000000000000000..83e006ee1da38880815f483a02aba65eb4ef6287 GIT binary patch literal 967 zcmaJ=O>fgc5VfeNP^EI?09;mERRW3F-h8;VRZ}&wOM~htN+LDKINnWTwf36zmN-2X zB#=1rA2=f+4n1(-3_pQ8XDa?c7^g|ffncroWAxsenVs2p&Bn9!wFhg8qO8{soEEIN z;a|P80`t!1hcPVorQ4NlK9D0{FlCSOK121$KV~iF)A5UMY)4U6aM?T_5RPbR%^F5ih&-|Jbx>WeiE3OhR8dQXKqmwlhDyp6!yr#kQ71)B zhhY>**{T>;aSP2p4BiACSS@FN<_k_X9!i;5nl>7Z)KN+0;#ec5Y33TmVgV3^bR0`R zE5zx>T)|;!Ai_k3JVv>q-{)u2#t`Xs3Q@9KI-H-*Z?QS#lBYwSpjz8NkB-8a@=^MD ziuXLL9;ece16Frz3<_!(Qma&UE3R4EBU@FM5ZA4e(w1A>cJ#7Yam%DO=Q=z%i&!k@ zTzbQ;F6HK}5GCN*VIq9V=)T|)nx<@p%VXJIsyE}(<*}Gcxf%qc<%RvL&~p=XPrhBW zEgTk&&tm9y0d4*H6T5&XvD!TBxbd68WHPxr9efANE!k?cC(6%D{W+W-)}6gh_M_kH jQA&F-EAMsX-Ya~ez`MLs?q0qXzX7Jy-G=kA+I#&68&4@e literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/12.png b/assets/2 Objects/3 Grass/12.png new file mode 100644 index 0000000000000000000000000000000000000000..35b085192aa825aca4ee7a66c780a18e719a30f2 GIT binary patch literal 968 zcmaJ=&x_MQ6wdByk%a|W*n_f%A&aPB^P@jf8yc5wle(2nDQ#eTY?@5l&?Xa;sY!bj zJP3R7?$NVX4<1}Z5d9N83ZC^ps4v~7da#BhGw<bo+}MGC<<6TKEVroEr5!S$kr`m-#3p@=8m>9SZEV`Jr(bY|VRl%@=+dr!CR@bi z%ml;5t`BUGIgWkP8e@w3c<6Wv`}6$=7CE-Uo)>jN_iK3MoX!K>nKund;ADh zVi^QnOidKK6EBowgxDL3LZ(+oaQ(Hc7p}?#1>@1ic?}R5{9X8Yx tBmUO!^{#DaGWE>OtxvuEi_4E_A6+tAGv+}5{QVW+n1nPj4CfSqrP1WzFR$RsC8b({vaSVFNXY!p37ma(P@@}{b3@(rv= zvLZ_GYDIa|P&Gr@!qbO9w8ZZjO}jdc1)fRzoX3VJ4u?ZwxFN9QP?U9D&ovaK2#8`j zinyBOyFrLds>9kGIFfnsuQ5K}Uq#4k0{tpeq zIXdM{dYbP)h12#Zrec$(Y>;?xaJ}_BRBTuYbvaAgj2+Lq*yuCP(mso^)za|Q{UGw$ zFugXxJC0F{Qtn0`t=T341tAE0!;(t6s%%u`Ev+QWl}bs`m6B?ys-HuDA{ zjrfe~pK_}Ux%nuBF+{d$65OYLHDMv1lxzfxbFmicO}YN!TG`?M^QX^@E`~tJP97Xd-hMzmu}njU=2y;z2W=5_ha6?ZZ@9oY(Ll*1YxIsOj@ws zf-iG>3;yMY^9d}wyxQe$*5_k8qQa5OdKA@tdq7*%b|)8KX;~1qu-EDGu63e2%optx zBPM+ujLfaWpj(T+91qS~0@e@X#Yv9v@C0k*I4!z@PMBCFw$C-|tl8X-yP&v^- zz^B|siGLo%dSc*(t`2s(En&2P@R5P9lImJbRACWC1u>U(WJN)mCMx-YrYTR5Dl4ia z!>eVLyk5|BbssGs4ACODueV5T84ElE4>=EYNg9vG;y5R=Xdo%2QYqC?)hr;g@g(4O zk`3a$l>(u$6L}%`Sb$PRyT>lMfg#hY68vy28^p^tLBpiP4kbmD(~?#|%lbdm_t)r{ zx9D}g{}hfplaNX+8nesDfrIPsrJ+K-5>cD8sKeO#s*BAb<18Ms5LMb5dUWaqE*r;> z7kJCk>p{%zz@c?wU{DY}&($lrT1hU-N6NldRFrDftf)moOfzqiqO9h~ic6St>C=F( zxb8LA+{jHw!4Dxap^^8Ty0wV;Xi>86ZO)~*QE$n0H|J8?$dw=&DLvS~4tli()03L( zu?1&6_%wiNk6^6l_by(*mB=(tI@S4?cVOPV|LPkoH+iek{w@6cAU^|dw@!{a$&cQd k>&|c{BllHP2rD0m?okZvX%Q literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/4.png b/assets/2 Objects/3 Grass/4.png new file mode 100644 index 0000000000000000000000000000000000000000..87b7e4853d853d023ecf7d80fc60a2e4ba93eae6 GIT binary patch literal 962 zcmaJ=zi-n(6t*aos!}E-eo06tcL9mmx%_YvE2c{0lp57h~26W{5n)vJEClR?s6HiKJ&I}rK>>e#b+F7)^&SK(JiMam=)nXL{ zJj!hpd#8S+#+ta)Rl!fTWf3hQe4>dLN%hP&YOs)^l2ph#IgF8_NVr&16#Nk7b2u;O z;8n7?sFoBpUq-7(glHids+NAZiUli89CIG1vOJs3q**~?;Yh~SYBkZw=d*ywMsuIr zan_IaQU#qxPUr^QWj;z2?E#x|O@vG@O7McUtRJn82@Xt-?Lfv-E-5Jmn&$tZp0`Fv z+@hEH{!=*W&I2l2G-A`xfyNE@l2C!#2&v6k*k$ZAJ;nBzaTbkPfEpbI-9K@C!e-Hf zCEheu!;iS_JJirM5fmiXC2FIrRLZzmz+f?MHV=w*rBc)j^~zygFO=&kS7*-Dqdrf$ zZ$F=bd*jxtuVAiltJV1}{5a1&fz?ezuXp2bgFYes gzF=?fWWH}*y)6iqaNT_I^aCISquJ8mAM{`T0m~sGy8r+H literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/5.png b/assets/2 Objects/3 Grass/5.png new file mode 100644 index 0000000000000000000000000000000000000000..666f550eb86c0011a2b3683a2ba9ca40e358e6d6 GIT binary patch literal 964 zcmaJ=zi-n(6h2WAp^CCF@MAh%7m$eUiyNo0VyZe$+Mqg$l1R-M$G$dJYM-&M#La{d z3nTvnD`&#Z#b3h}!=(X;n-mj{xQ zVWc#OfQ?XPD~%j?!~`C&Lq9agulFAa_C15_7j4Cks%+@*PGZ)XG`sF(4g%WJp`h~-htk>>a$qj8DuC#q|5SnJeJ0)#N$JmmdoW#qfp2LBA=Xu z!b$UCvOZU^SmMThBzzv?Owk$eV_^`;^t^;1TF8dUtWD4`IdvkLN=jDJ9BAABhX%m{ zorpHO$oHSZN%tgTa+@XmICkOS4%V|!kzS3NBY529{Ak|A){qOH40(jB9Sz^v_d}15 zle<&AZR?FN5l-l`hGh^?kbK|MtEQ@$b)`T{+9sv7npvu;X5Cbaw6v|3isqbaarZc2 zp_p^M3$D79n~g#cL1c@?{v+nqV;|X~x--7AM z%*EJ(vlx69!nDUQ)~9UeCtQhKYp+{-@#!^~*Ka)i0?Q@QZg$SlkGIML@NPD&?QZ&g l(D%H@B$rci&-+^ID*lMjZ**<_^yL{~P@~qgUYY$Te*k8?CV2n= literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/6.png b/assets/2 Objects/3 Grass/6.png new file mode 100644 index 0000000000000000000000000000000000000000..5c337a017344b0333b5102b22f6c8cbe5cd8beff GIT binary patch literal 969 zcmaJ=zi-n(6gI6|s)`~Zgb+wbCs!blh<_z<5-X-^W0wZ%C`uwVV;tWlu~PfY`9hp5 zNQi}z{tcaBWME)oV1b>TnLh!Z(ebOK zQW8YK2ARDia=jtps7v~OXo|l+eHM|AP4Oh}C{9!%1OI5sNOM|idDEd+!s6Z&R89;K z2ncsk5}byyk(lC4*8o2~mPIs!@S!PQB-M86s6rV*c`2Lm6jepKE~&Y^uB(rcrl^{% zz^iA}oRQZJt$^l_2+Y8Z1j^hnh*MNp7@9~%|>Kr7m%yjswUs%ocRv0@jsd^T6e+6To2*P`AiAR%9H z@g-MZ$xTNgh#;~>nE#UCLq-EME7|Z@=aOBiH|OHjx#U)IWk^O&8~azI7e_EXskljA6h5ekN~MaKPN(ZqBx3uL*om!}(8ehZs-wt>)QolPOJXJV8T*3WP6&yC zfq}ok4?r*>fdpcN9{>_NGf0RzoYN#_AXv8V-qZJe@7;Uvp0-=}wzqb+007&~Bg5kB zwd~v6;QzO;zkKD(P1fkK4jr(>jtJOyX`jHRZx4w@Z1?QJCsGAq19{yZ>zT)zLw&){ zFhc5woDD#=mWH-7CJgq;&8gLt&a9cY$uxQN9q9gP?ZHBn5GL`aGPjfNstRW;Kn6!ILAkIw>T zr}-e>T`CwPb|Noi9t~ioX!q%q>4;}~aRfhH$p-PFOuS%XYKI~gr0hsbplSXe>ia8n z%q()5?>~j(?pa7gi^OyqIlOU$-7Hk7)gxjv8g(h1EUVZaQAXnt4Pm{bz`YYMaA^|X zn&VAVYX&j11BWyX9dQN0^IWYUm*o=PS8(~DfpMduDw29oF^n=UDpIMUF1ZGEralSS zlIvb_%WJvWDEJ|dY>>!%NZiAS`fz?^&0C*KX|3LZ>#om5Udt7EGGf-)zZ$)C@#)F7 ztFh(AYVb+Gr#<3hU3>rRIlmIQ_HnlnJQ>Vpv!9c}XYRSmtX5|RzQ2*~b8Dw*?03^| o{ZrQkD7Sh2#m7l5_o{OD(G>uGfg9oPWXw^Z*=QLr4^AKd0g!Ge$^ZZW literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/8.png b/assets/2 Objects/3 Grass/8.png new file mode 100644 index 0000000000000000000000000000000000000000..53eec15a327887a983db097e96fefae13ca0b691 GIT binary patch literal 966 zcmaJ=zi-n(6uyGgqM}F)EOa`#OOc3wHFg^-rlhe$gX$=9EHz^s`;u6ReeU@}oJ0yL-C;fI{QUu-ST> zeLHuu|L?)hTedu)W{0+MpH5wZK-I@R1RJ3{KsIvy+2t2hVI(eaI<#Y*YaR}HH^cC0 z7&A5im6J4fy%D0YhXz5Ub3Z?R;$YzG+=XI^R$N2F;A~D%d){=s`N%8#+{t5DNi`-A zBI?3497lfBOSWBbf4aBvBsBb~cWs$;ca4HELKv@QqhwVkRxlxTV?pA@>_|D#vi=VZ!!?Ld9B*AeUm|U_8#N*cxJrlOc{_t*yd?iy-pxGZYtpN2jJFnP#;t*Q>I4TrZi&YRNQnu7SNth$5PE z{TuGlMs79=Vay^Mhy>4(Une+(%Oh*S=3Gh}^;TSeb1uq8uE3HJvc~?^=-kDoC)=*a zmKp28M-iKL!p8dDYx09#iS5?8V@9v~i^byCxc`-TZc)40UV!f(#AnRfYZz50{nqRH kezyzU?SsO7aJ3~pd9ek+8*sOM?{lUC8fMdYf7*Td2Q>dEPXGV_ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/3 Grass/9.png b/assets/2 Objects/3 Grass/9.png new file mode 100644 index 0000000000000000000000000000000000000000..36365a19910e1afae4a37fb3dd02187656556c2e GIT binary patch literal 965 zcmaJ=!EVz)5Z$(-sw!3DNI9*xQU!w8v6DE871JiROO5I%B$1k99ea~liM__&U?(S3 z#DUM?2aq@+!GUv;xPrtTuJ8w8oyI8#f@OPmM(@3uotb^zY&_oEy}Jtl*fUPG7F%zn z-_92Me|Y!x8(a3N-lc8Qr?C}cP;*ERL&LKMxP>ie`s@l<0oX!rr%Su$nQRk}vr-I~ zcmZPrP(4Zl%N}70dwAgb3i|c&6N0Xzp!1TMHv<(9-P2i!+p|W;o{j8^gN`1-Y9ccM z4^s;!-q?@iL_rH(ne9_IkKh7AM+&-5s%ti(NDQGydLpPu<@nNcH^~i)Oh-G?x1TR?0`q8pXtYCa%1-!uJ(<5a-)BHcw^H%7H zw(w29{}hfo(*W}=9Fa+Av&Qug(olh{hS;Jc><}`}s@NP7N}?eNpxTz;y>r)hNF3c? z;7wCD{D@k)ddQYq{wtcma#7;n01Kos*DwaB*bWU7w4vR&U95*5@LwKK=55U5V}HSx5I@_2={X?{WV#^K8;qqdf;d-shh%Yv0gno#cD( l!f^oF-njzy%R9%1$1gU(#wNJ^vsiz_K)}!&+S~fYIz(r6(-5MF+ zMJS0#5=8dNDU?<+vLa<+Z*eSJ=romzzTV5lb}HARG*ASg)9LV?C7y)a0?Oy}iH0Pl z7$Ozz`_zh4el*`#&~apkZa`h)!$i?)kUgq$tkRPfykH>fN4;ZW2PVW;ARt~$TIvH$ z^Z!uK8=xav!Kd~9Q#h*a2Uw`!i0p+nySV0jk}6ONA+{(9YlQ6dPqEx0lte8Oz(Q4q zSGQc>A)V-27jK%1;YZZ+ZEWZ&#}s(ibrdzs0>q1N|&U#2Z*lk&Hht{I457p~&o#C~JL%9MgMo2F9 zuZ!-7*z_dsU~JiDF!zh1lh;14D`Fi-#h literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/10.png b/assets/2 Objects/4 Stone/10.png new file mode 100644 index 0000000000000000000000000000000000000000..68ade4b89dfa07c294832aabe83b580a0302ed05 GIT binary patch literal 1057 zcmaJ=U1-x#6wWNd819D+1r;@9h(Fk*$=YlUtD|kQt+1A^EvzaNv*fOgTXJJ^YqK%O z5M&OY#D}RMf`|`-`ZQ6dbKrv$5hp(Bqdp0Og81Mc^QLP%AFP)o=ibBjednBePUez{ zzQ%?f4Fo|n#`?t+wyo}4@4;WWWg1|!9Z6Y~hNGw`TYw0wa0HMsUCx0NkkyG(&p|gq zcqlECMcMd(pg^6LT@3B$CT0^vcaLMr${0Z82*_zhi2A(vgd#OHL=6SvzPK3$d98oa z0_n*_MwuK_f-2Q>nCx~0ET97>>-l#u^i*W5AS9DLVy>zPO`ix9L-Wkg_PJ^j)hMlDvyvUFif#n zq>CLiv~mm^38~ru9u*jRawI> zUlYDC#*s~irG0Km6<|F6f2gik(KbqfjeP$pY-c7+z@&f;3zmW#H`?xoGKHuGWCX1Y zgyWT4Oy(hib{?8!G|iLyhcrWlMf*SrACC($!$z{9fS4GfumY`Vs?Ze-NSvP)*-pNT zWhE&X4n#$s<3&FgmBInB!WE%X(1C#}Ty=vh)#SRPpqn_d2rTV1P^2N+r^3co9GEH>I&di;3Zk^A4>JHZ7C&p4Dv+)~*cQe)^ql zZJUZ@lDpJvGkY&}#+G>WY4!5?i}Sx*j^Ehh*(x8Ke{=KYNojgzv9P@9^^ukLEs?r= z7mi+yB-0CRgAbSHZhd>U)O_Y~{?&`&j=8>>I%4*NC%2RM_!b8xVp2l98#!_I4~IQf Aod5s; literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/2.png b/assets/2 Objects/4 Stone/2.png new file mode 100644 index 0000000000000000000000000000000000000000..9147e69709f6d0a9ce0dc5619be97872bb62577c GIT binary patch literal 994 zcmaJ=Uu)A)6wjE-7;bymlRjOtJ?OAWZvSL$ST@@xbA_dpwy^rPEV*67mfS44v)K?7 zVGITJBlrm%DyR<%3i`16Ao$|L{1AQs5k2YJZV%Q=l5_9j_xqi5?m2l_Dc_nHzdFuw z+(cO$C-%AY3HFe<1>1A;O_Dq%?&BUu)3 zIwQ;Y21-geDN69j37l3kvXY!fy~RVcz-}s4ZMhcjgW;tfM7c_A}Bi3TeG4;dwcWv99OSDV&w_*<>cG zb2V!1y2N9Bu6@SEL%H!NxIRSINZ{Nd_Hsa7)Gb+YhUQYxhwAmX_Rw4k%R{*$ zBqPR+J=f^I3#KRD4#pM^gTW^rOnU%h{p9fLP533IDywzfYFdW}cP~%Py?_1;d^@ie zC%{}})pG3*EbiBv$r?E3N?N`ioy>lDJHkn0pFd8W+-r^=l@Bh=jy!f#FTa1g{rko1 cr`w;V*SX1K?tbUd^f9owl3v!13hNL40>;uc_5c6? literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/3.png b/assets/2 Objects/4 Stone/3.png new file mode 100644 index 0000000000000000000000000000000000000000..3c8edb61b4c2622e0d38b21727c5cb9b1f38daa0 GIT binary patch literal 997 zcmaJ=&ui2`6dtWDwOR{;2Zh2g75sslY_gkdH#9BjCbbLAvg`)B;6c-5wj0}I(q!tU zMGyrM{R2D+{sB@C9=ufWC_Q-eV(}vC)r%*4sFUsP)`RO1^4>hY?|bjfym?x!+#Daf zGzI_|FE8pfW>bG;bcp>wa)-Z|xk!x$t&=8g+YttuOI9!}`}QiXVcXr>*uygb3?a{I z(1y9BIK=1d6vHKc$k+hP%q5}itYHdQ@TwQ6=;!Wx1U*+p%aWNj!xCFh33R2zDTJO+`mVHOwk3kqASH%VnIbAV68> zguEon!VM^91(DCPPtFK=MUoY<0J{sZY?0ekYWhMq7u%_*MQNz;e7oJ|+BuFytGrMw z7E=vT%rHbI-U_IlWP*6Ar=a85iM)_{B!H=+y+SsriddybE%;$yHi)~#4?2s3@ zY}!%}Xqx|r`hFiB(;7am_n*SCwH0E%hGViBIqc$^Q)#MDDMi?(B(exu@10_`MJS0| zB!s2946iPGflJ!)wGQ4im2wbMJ8*DWR}oX-JkM1M*<4W&rzN2vPYZ%!6bqVUXw#Y~ zX!Ch#-so|4;%xdjpgpd8%#{an(^2q4mRZMh{N$ZTf?c12*ju8|yLpe4jmuiRzMNI8EotGG$$}lFyevJUk7+=t=GNmj^$do%(Lw+TZfgc5M2~NsOrZVgv8=rN=5vY*h#FKs*N3Lsg9x~&>V5?O=Gq8y7rd16(=f$ z_z7?T{s15@2nhriIB@0IAHWrf6R3wW4oS*^u(Cb7qxas-?2I2Z>NjVmE=?hXW~?=% z3HCg^XD{U7`{d}uE|`nV?64N?vc3}&wBpfCf~~;WB2D6W`@3Jr5<)r7Z+BS7Ue{b2 z@J@!|(;xyiLQBhOvlhTpUD;y{^_YYQtD?(zzaEktPWJexL6bcp7gBQl(PKG-Nps zhtInDQ}VxvbHO?ouK)s~7E zHvG_|{p8vJZ`+y`Cd>(4Vi`II3cT-oTB)#FD^=u@R8q^5WSV8gtgXtGnp`ZK1yd=E zxCV9i0ur(j*E{8wCvvk<2qK7Vkl4RVyjn~HJSbW7C+DI})EjcW$+@T#xdJ33WR3l+ z(IXd3PqrP8EgZ&!PePdX7{>azxOfYGiMhsl+jP6`!w2`?zj!u1w+Oz+@f91)Io7PV zPGF(qH?u8pT(yjqc6v1Z>Gc^TP9KVwf1Z51eYl|fnEge+K7WdGDEArZ)~niE03*w+ K8!uPy-2V;7aWK>X literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/5.png b/assets/2 Objects/4 Stone/5.png new file mode 100644 index 0000000000000000000000000000000000000000..5f0a59fa9e798e275be346daf57469416c457dc9 GIT binary patch literal 980 zcmaJ=&2G~`5O!2rp^CO=5Qmj3BtXQDlg4RQF;!waG*TT!Nu=h8Yi|-OvDere;sh>K zAjA`ZxF8+?j&J}8ailx|5>J4{p%-q5pK+R`JrGv5XLt7dzM0t_KdDu3t*u^KF2lQYehI$)Z`mU-7n$B-4ccZyGay{irUwL7T(d*!#I#3uK9K?tc&FK7En^Q` z)D_GaBSfwbY>q4JM80YD2tx;?<9G^x{O$vf99!Y{vqsABRnm2K#{p@Kt4(X%v+_2- za}yOJ3<54;CW_p?7vf0aC%PEsv0LQP1j2d>f09(os3DaG1Z9Ox(n?7Zl4U{K%F42I z1Eo_^T1>$sC#5Z%m2o+PsBP2=^(J+;@X>WC?Bf_lajHsIG55wy(!mToQt}UD?&12e6eRP zdgg-eiKp|ng~hz_i3i;tKwEz~ZvTK^VxzX#)Zf2)VYRKtkM3XCxDLLj{kOlsEVFvG z@dpO?^UZn#9G5Fvu^D|m_c4)x)gk))o31~@509Qli4`t!kGrz+{pADL;VODndtJJH F_!n?TFU5MTTY6r3;+6=gmNK8lFogO5J>qJsFKH(lHLV7-K#a}U4Y@0@e*xm)GZ<>AEH z1j8`H#d)s`pAj4W;dxIt!W{9@hF>NCZ{9MFjo)(4YX{#3j6ihOBUFc!Y*d?l?eLJA6eihfcOrsa$z3t7-zEY0RyO}V1Zb#u|3!nO$UWS$ShkPAf)`^!Ac z<#MrxAS5Xw8LYd+h>~tF+EY+bVEVR4Z0v$q(P-c{QCM2(UJH)bmvw{gG0_9#Bg5k% zmx^2J0d@WVP{-+`15!cz_5M>hsI7a5ub=?8eUn~Xb2Lun$ps%71p76NS9_;eZefCh z7WP1)DuJ;@+qG~QT*6b2+&M=qUqpN=&;y`85|Vx+uK)6AxM=l0E`BbS~(d_ZGs z+f&2T93+)e^*3G2ubpF68W4)=Y%ThD;qBuSuV#+#&K&r5{mIjCcXjjK`yV^^PySrH od#|0?x+OHekG=lHT>E@#i8+6jd2ufN;R|ImMXjVh$}esH0gx6s&j0`b literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/7.png b/assets/2 Objects/4 Stone/7.png new file mode 100644 index 0000000000000000000000000000000000000000..af9b964e0551a37531e585adbd0e02bc74361a31 GIT binary patch literal 1037 zcmaJ=PiWIn7!MO=%>6lxA?oFk9sGk$ns!asusFIVb(N*7X=Oza%#znOY{`qso6V+p z5d3#gym%48lX!B&!#qrJ6PzFuk2?tSI>CYLBq%apy0-IReI)tb`}qBS-}k=n%iUb| zOjpN|4vM0>GNY18Y#(_Kw(ld~XMOxQF^92S#CcT0Rn3J|(m<0CWGt-=Rj3)Wmp{NE zirPn;g(5C0V}gz>Mhh^EZ#jfbQA5MNqv=x+gGpF6ZIS-|YMBP6A<`2uC9F6pSTRTE zT$rEB7WBC(Jz>zpr@@df5CIEf4fxiy?Fqg}*K`H458NybY7jgn(z{6&l^jSR7lIfQ z4e4Qy13b@g12LZGPJu|6i?Ctx@F8wMi19)s4(f|0(Ojb>s8YHfi=0Hdg0Um8Y_(ct zs!;~HWtK}M5`jh}5+aC@H)~_f57}OSLqUR`?wSrZkqrVxZ4%93ktUh$UcqvjvbI+* z6Db($YYxjX;owRQprZUAYFSORhgG~jT!mI;X6?$mK)k)(@{Xr;4NV!nM$Soi= z-Kb)&f-v$b$N{N54~|cmwt=eNi5gx}gpBQB&DLQ?5^18qn5H4brF1ei!Y8;mKge;i zoRImXOllRAlTkhzOE?5^itHJ@~Tov3FqO{rL9N z7ps}CkB@eq9ob$;KYX`vp!dyEaed?d)#%cXw-=;CTaVVAMPYucD|*i^FW(xw6A^YS cS6$oeU!f$mtvs>$dyNF3GICa$AGvhn4>P7vCjbBd literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/8.png b/assets/2 Objects/4 Stone/8.png new file mode 100644 index 0000000000000000000000000000000000000000..0d101fe56b6cb7904fc5547db098f602bed122a2 GIT binary patch literal 1012 zcmaJ=J#5oJ6gIR7s3?^{46tx=h4>M%b4lzprly40p+R+&CV{3%mFn1+#%k>|_LaDS z2?-D@3ldAE3c&K)CLbbdP7<|3O1MTEx`&vwiK__YY<&(Dk!~*CUPGe{)5lun z3aMxll7Veb4>4R|yOhl^qho=q8}o>ODw?w#nf>+tBMU53W~T%#s<|0dx5k?uDmC+E zqd9M+Om^%t7!4#UU?ZY~z+P~CDUjKgu0+?Nn`c1_Lgr<5H>rwN02%BdAaL=B5rq(l zA_o(KD8h>%7KJfBN?O1dtvvopTiRT-Q2G@vl*qh^F zDwPT~VzCHCMEoU(=t0EshdT-i@(s^&iG>{yD(Y3dNMx2~x?6(nc4ZyEeN6Pg_&|4g z$VJ1FIzUbPKh(CnXrC0(UcUbn_RC8y;)}?~i=II*t~MNoa;1!ibb`Gy#tWTOEYvZ< zejU3YQxd_sDa$c&!$04`YnqgEe4;xB$|*8S6*$W>r4g7&j${P^CdCm5RW+TAs%jz& zW9hgM7qY1iSHZ@jjU3Y9ntNQaCpT;b+oh2eaq09XeG)^3iLz?cj3YxA9zD4C;ngzr zot=5RMa=I=0 zzMk2?{qD`$^PdO5eV<+5%Cs1B1;^UCY1v-kf1H!nZ+ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/4 Stone/9.png b/assets/2 Objects/4 Stone/9.png new file mode 100644 index 0000000000000000000000000000000000000000..957210717d8a58237af9b90e46a9f622733818c8 GIT binary patch literal 1097 zcmaJ=ZAcVB7~T>?(hMRptsm1WQQ__0UUz$Uo2Q(&XC8RRd3UH3k?Zc9x9IL{yQ6nn zV2CAA6hRjLh(IccD2k*X6;!{s$?5siZo zG9mCVTOG2K;{eYyoZG|mTrF@pIT!0B5AWdIf`=DeUa&A|lFd}oLPBg>$VGMmI)kwx zuxvJ)WwKitWOlQh-|x3ITrLMeIIIC3OF4&bRp%8%XvwB(U=``WR+PF>9}dvO>F*MUbwurWH0{-#)Phl%HU_dqjE!1bqq;TnKJCz}X zOekSwrV#4Q-(oz2FtRep0HGugHnpp|g0j};d3-b~M05*Fx(p*?fF=rzsw#rdUigAsmY8Af!v0n0e28?9y2q-I>p8WEo z`_;+#&S%e$J*gb4s|9byN5`L3ADwymvGfQ=cTb;MEsian+F$>n;%v+8(4E#p#aG=E zyEjOsZR5+n;0!V&G?qlS;2!w(($f+YMrliiBh0<;Kq8UkS8nO#lD@ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/5 Pointer/1.png b/assets/2 Objects/5 Pointer/1.png new file mode 100644 index 0000000000000000000000000000000000000000..73f3a51038c59497bf1c26373c9c0e0c06193991 GIT binary patch literal 1079 zcmaJ=Urf_L9Ijacgg`(NH4vgr;X%}`>&6PJ41~3lDP5Lr3F8Ir+JjYSue3MTk@(`1 znrJjJf(FC8iTDRiP&9@_ABe^n6OF+aAAHaUqlr0z_QE%(&uG-v==|Do9W~NEa&SYHyeesnaUWK;3J#4@GL}S5i&TM z&gb) zf@TWB$}8;$-X>S6>?K^0OJg&%bFqJ2bSZ?Z#~GH(7Ej8B4|H7ZCNAqnlevX|i5>Bwl<@Gz z!o3k8#FD>@jc7UQir`Q_%J--2_2;ivn~3c-Rqq!* z{Mu94fB9VNkGt=-eFIId*TTh@&7;X9^xT!|+2)2fxrVEgwNTy?sAzX~cHP;W+-%+1&4r!Cc30GhaGbfjPC9d^nQOcH zk_aJ!&`bFc{XqC?3Q-hRN)J*=ArS;oq6B48)KgD}-C5nWhqlYi+M zN@Je^VttXg)Ym1|%2fSvvM$YG0Tm#TOsn0R$)&wiMwi2DD@;>l279%b;_$Gcd*!BrD*dwd=y*pTJ&Q0h^EhO%6Fo$JcWwOT>dab_ME$^{??4XBct zBXdfAFOIx=Yg{?M7bY*4#%5@%uzwXg8^YaVEpu&)H@U_K8t!%jxAo-Bk5%}W*xnS5 z2Of>xGQ<46w!qeHhp)r}I9xQZt>9@Bibi59)*$XqjZWdnr4a9nr{8^heX4A_yu4@* z%={idGd$M(eQ+gmyMh+KoK}27n>29U^{RjW%*fo6f^$p0{`g>}`fSJWxITM-*T&h! zp~a=W3zsKG_UubMUikd-qJDxa8l@MG^;aw>wo^@aSI(O|sc>2R+&yB)2#RC)b k1z04}w2n8biord;-KcSmyw*UYD literal 0 HcmV?d00001 diff --git a/assets/2 Objects/5 Pointer/3.png b/assets/2 Objects/5 Pointer/3.png new file mode 100644 index 0000000000000000000000000000000000000000..37527e91b1b7935b704bc2afaf3e89496692ee5c GIT binary patch literal 1107 zcmaJ=Uq}=|99~c=EDd@Ig=knIGrIkA=dIo1Y3J>p9(i)yUEM`Ot-GUcx;xwM*sZ1o z1wjx+VFeXL5Y$V(L_|~?5rtw&5kWx(MGrv~)kF2-HLITW&^7Gt%>4Mi@Au98etRU@ z*;ZLmQ$bNwWxQQVk$E+FYnPRgZ~I!Mo=nwP&fzrb!Fk1oR76AF5X23o7p9=14egnP zO%zo|>zN$RB|1bE8I0m#7}u}}o1&UpTuV{=AqL&BS2x4-m)jFG(6um~4JNpR6@`6z z`>+ku!<`v*xL*xvbW1a6az!FwK&$}Q7%&~t4byYFB3XN3mIiYW+#jarP300v5Jffw zK_=i+Ii3fC!0-)0LEtw6Kgau7jy!^oZxDlm=x+oIgC^N*tw&5rv4vb@7pD6#wnUcA z=krWHz#zMqFswyc z(^#8L}Xof({zARZ_T~S}&C)Ms28I zWM>c>DBfbS4`Jl=Aqzy)0$88bO%3Ip`Z;_eA;wJyE2awLQkW(RjIL{9OyFXza?H;+ z3Y&OdmRm!OT&zKsgP{n=ML40zm5@4UKob|a+8=J9B-d*N!y=g_XzP2S7PFB7=8i1t zrM++^^%l5VX)k<9E=$a?USa<#bTLG_$6GG8E!iwKJ~TWL8f;Xt^6PG4PVbD_?t{Zgh0%?13B8 z)+oJohyM0KSvM-=CfA+N&7Ftto^i+OXO2^4)NW9Dv1Z%*4a6c9mpi3vt-B8X1{*YR ASpWb4 literal 0 HcmV?d00001 diff --git a/assets/2 Objects/5 Pointer/4.png b/assets/2 Objects/5 Pointer/4.png new file mode 100644 index 0000000000000000000000000000000000000000..760abe7e75cac7cf70281c7fb399d3ba76a1e001 GIT binary patch literal 1046 zcmaJ=J#5oJ6gIS#+NwW-fxiJ+PKDa4vEwvx6RV*=wnHQ0$VyTgB#P?T*Tf|D8T(4o zGJu$1LX{Yb)B%J0Kr^=fODFp41|;IclY#t-+TAo^9?0+ zs<-=CH$f1+i5W4C?E(A_cedegzHf2^o1;j|p$uF^71aU6ln(QNOqgl`q=Bk0UwjV6 z38IZMvN@EKle`8^TJR90IlX;Gb;I7yCIc`RT8q>@#$Y`J_jM%8qAy!YG;Mb;pw6r*;N%E<~TKnIXv zdepB4SeE2Cnhk|HjvXO`0XE14@Wc7p5Fh6F;22q76prTTi+oy)*JI&Rj4C2z^9)m| zROrem4V?nRMx#+rBN+5!gx_7ZkXrRyuCJjW0#|bk8yV0dJw-JSmr#ttneJY}w41V) zTQ3tX7*kbkhNT1El^Q@<{y)?-n`jrM!Ct=q6n3-AHek}gg-ecx8@K55LfO3F02M(e z3t_oYMWqN4bc@g?g$zdy&KZ^tEACJYFUx$wa*=9jAR)#mtUw!v&c~zia3mBMW5>7% z%SzI8R1o44E_`S@B27hv23LgIk_jx-;OcwaNK39a3Z{)Ci@-510X^aBC(T5=hj4C6KSuSPdqczV2Tb8PXUIrzZB)9&E0{!;$bgMW#BC7G4nr1;>h z)YCtFDmbo!lB6I5@Qaab6kt nwte{Fv%A+5sGxtFvn|S6oVI3abpkEO}c)m%Ny~+O#0T zZcYX&1I3dE^`IbLl!1ro!Nbs@hY8|ke}cn<;5^KiuI)TnA4$INeffMo-|zQ*zqwV& zUmP459iS*`FgGI>eM{a`{Q>fQ_HuoLnA2D)V+AeZy6QkGqoV}~a;CZji%``Y*S6pU zMFnW1RK{g_R?v{is6K}AOq;MNYGTr}Rjmp!Sb$50m8QSH*`$G?r|G%49G2}YtQa#* z2P(~cNo!WMlul2c2NRw^1Wbrk;F-&oD|l(Tr7MuV?`CPxg5YYJK1`}C7eE#{5X6~i zNDFfu;CY6N#d)4P2O?oE!iLGihq#y!=Y>cDv=>dHIr^ed6sOy<$SF-%Ft!Djt=H>J zJ<1?wiRDtMl&=wqga{(!HY}`qAD2UM29K*&2vVgCsE}$At(M^X0zTD z5oCDq1H26M;y`5LNf-)K@Ze4Z@#JB6@#ElBQ1Bwum#*zRSVNNc{*T}9_y525|Gn#( z^x4k#Bkcr1bf!j?EFKTxud6MD|KC@ZTkvogB?~AAXHZFV0U;Z38jvYVn*~{*8H*P; zz#u_{C^KI`1$9i+p+#!}hW0H7vk78w$age-4j^(G%$l}DeS5Y}k)|P0lTnpbodhVF zqh%N5%IUmbp3~z7HFTOB^hGRS0i=<>HE(;OFHu!p5zm8Vh9avFG$&CzMHSQxnSd@J zqx3*nXE}}(1e%LP1%c})d6wfD7QaH6i-=J{Q_Wm=UweNG%tRB&vvzBQi{> zRH91*G<0VfE*_5u8ayAyh_JV4Bh3%nUQb;?0iN!f4l;IxE!Bal`hTcpHP9Z)g57%mDeUDJ9l&IP2Nzr&H*TgUNactL7ib8& zc?jq0r3#a^8Q3HsyUpcU$Pi)8CcNCCYAjvy|#x zX+PP$HvV?vz+UB1PjU6rR&o2;2xV5mpYpDz_ee gIr60I+?Rt>ME~c|_U(zaTQ~=iN~V>^!&6uO0OK1;U;qFB literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/1.png b/assets/2 Objects/6 Decor/1.png new file mode 100644 index 0000000000000000000000000000000000000000..4c749bd91d369815595cd4b52c2c2411c707090e GIT binary patch literal 1026 zcmaJ=J#5oJ7_|sPRkfl61F&$o3lw7e(!^1$m^QJUHc&@V5~)EI5{`XMOlzO9FO6HF z3Uz{^BQp|+0VIAT#DExp4J5>m#DtJoI`bnT)^bjhl!0K`zWYw^z3;pG-rXpd=Eg^l zjWP@~UYu7e(MUgbBu4*F-rspZhoeNRlPX>&9m7XV&cY1@ijL7l6=YcJSKgp3!^Bv- zRws3RK{Bz!84-pH9gngZCOZ>)hPi?WXrQL;%Ix>&FIZq(GP{`41>I9n%bwrxQFWtK zGdEVujK$8J1=&!d0uCYu2%S|okV2X5>PmDTE%PksLdc5D?iE$n%Rs?C0x51fZVC_r zQRHAUC5rG2NC+^&3-lG^Fe#-(DUk-fho#wkYgwwOgRt8ZV8zZAv}%wGQe^;yno%;kSPZfBXBP3`!t`{(rY z+Qjzem;A)`yVr-eTAwDBk=q}S*e9+Rf}N2ZVXrNnUXqp`F)`+DKDKi)^=*?XGexbW JKFnX*`UCDiK^Xu5 literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/10.png b/assets/2 Objects/6 Decor/10.png new file mode 100644 index 0000000000000000000000000000000000000000..4f99493d58ba3c18303aa174617632df396f0cfd GIT binary patch literal 1010 zcmaJ=y>HV%6gRDes(z>fB)*YO*M*|SA8F#$CT^9+4viE?krSz@)S<3@X{^>h*S=u4 z3`H<8upq?5*aZd{5CdYU5ED$y@FyU|1Z#UvlfXbY*?xCVzu)h@cklU8t$Jr_{OUNv zFjM6f)u48az7u1k^xM($m#Dcyv?i(J7KzLNF$EiMB2aeCEo30m-rN0z@(eQyoko*1 z^@?m^mo*a%8@oPbGfaLd_DyRW5wMB298ZBi-ycEX*a}?D>b&k3QQKMB4^Vx-+OYPw zEy;#Uiy$A%RKP{V1hKp0g>tOGuC7e?iJOC<3nAMIJWZ;p*FX^m2xQs$l*J1I5JgtV zWJOV!18H7Jb3A>-l#r3LqMXiw-hwn*V7FvLE%jp2lLFg>_%g>uQN%{`EDp9fL6W3I zBb`oBL@M0#h#9B6aHg-IqRJ-32`rzK z)CcPN|DmosK!?OYfAamOaM;-M5oe$fcLIwxt~HZ{^5tTHOoD?3#ykC6thF)0VH^9P zSQo*~RmZb&6wY?>x-OT!keHr@%BljX0_!-ooGxW@QnpYMa-t*%nzpV|$L%GQ)xIT@nqQJR}>{5VT&@EYZhUcOV)$4KXp}7>apTIot|Vn7+ZQ63_kMcvb98t_Jz`lcG~%z7&mYb)U~;4Y*N;=z9#0?KzCQBpzW?Oex-s># pwf4?keE4hT;_DmFUtGv+Oz@1dduHV~cX^H~FlDW(zFOXRZ~|o?IHmvq literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/11.png b/assets/2 Objects/6 Decor/11.png new file mode 100644 index 0000000000000000000000000000000000000000..79b3ba116a211cc82d54d89279f2798c0605a487 GIT binary patch literal 979 zcmaJ=zi-n(6h0`Rv}%RajSlGKE`W&ba}rmvVk#$gXrwxdl1L3({o~qLt$oJ661Nj# zV}z;f%!q}FfvHF!F)&r)A7Er;EYE3@G7v1=@80SAzW3g}cP~5b$16)~O9-Kr)|S}? zdlSAwVFCWPq_agZcepj+J+{Y3PC}94Gne94=W_k&0metrBT;K0{~or*2naf1$nt&@cIPTGC%B3l7gLS?w33v?Q2fA>X)WGiG21_Weh^3+@6M|J$B;|^#l80E4 zi6Y7Hszp-PDypVz;K?IEw8Y=jx@L0{3p`yIavp1vG#ZV>QAuRUzC^0kYObLuML-nO zUnI7^2t#*Lne@9hMU z&qnF}G2XVdR+Mrl@@UJ{1yB%!z}HHORaQv7K{nJXA(my7WTn|KnufIjMlMgeCi9L$ z8u2ODzv7y6x%nuBF+?_L5fgc5M4DwDpe!SaA9#J1c>-6i4$8fC5;^#sg8mZso_?~-ZoZhud%n-?Fn(~ zPvFQOK;nRq;J^(DZd|CuAK=KD11jS*NjVTKduM0$-kX`7@oBI7sJM1x4IxzQY#TP% zEBUutfc5>GZ)aexGjquLbf2Y8Oil8t_hz z;jswG-ci;Vs4lbG~Rx&!xQ;;J6E`2aUE z4Fm$h9GnG*VWMR^H`Uc(pC1bxo7TyjN8!ivI6m8zmh_pvNW zvLM2%l%$GQRW!MVXAcL_VsBrwjrJ@Scse&`EYbuaO;bKC^E5sXBvn;&4OuP$qLdtm z%*je&vN2aMNaDtR#C#g!T+tcPBc^kZ=|u@aw2%#x*)_q137HcK5-;W@&4HHne`pXa z&EZkqdt=IIGNuu3^%Z<)*AG3K zCU>WJ%hEbw!ko}09Yg0pf%kn+D_6~0xhB@7nxaaQX>L{8qN>XEYSU;{>Sb}xHK=pOVOSowt?-+qn?Xk``MI(^rE1yIy6yTLAR)3?z5gE@TH%k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+n3Xa^B1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`f(~1RD^r68eAMwS&*t9 zlvv ztM~P_^2{qPNz6-5^>ndS0-B(gnVDi`?Br}|;Ob~#Xl`a{Xz1!{X>4I=VPfLyXlZF^ zZfR@;)9aF-T$-DjR|3xa;!LoH4Iw zPgxxwzUKOEpI=M&dY{u%dK8myF*{wWk*WB`zsXluzfLr_mNC)~-|zbAtkSN1bH1u3 s&3(A;^of6b7Qe60^glQAFNXnx^=@T$wv3w1zzAXRboFyt=akR{0F&hArT_o{ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/14.png b/assets/2 Objects/6 Decor/14.png new file mode 100644 index 0000000000000000000000000000000000000000..b61382d0e60deba0f0468ed1b4aa7c2f0a89a2b4 GIT binary patch literal 1610 zcmaJ=ZBP?O7(R7M6=RtSR;f(qJVvTilDh;#auPuEQB!j!n9o70`u);`Z6QJ5+ zFcYbS!C08zK_mdc42aaHv+0-y#c2!Q5Ww)A7AwaFfP^Hc)qrmzSTLI~lavhVKYb1Y zNuvx}8;8M|RZirPtBM#Rtw^iKi#Fj>Bb1Z~COA<}z(TMF&}qq|Y^YNPjp?G?IIt{$ zz%dBBNd~KFyc~h*T;KXb6Qd93sY6NU;WI3}uU)P*4yy zoFT0&NmF1z(U48sSsBDt`f>{v>!d7Y8$TxQzywZ%Re zwxwfu3`5nFjWtj>p;pKsPJvI7Ml@EUQb<)&1c?`Ool?0{Dpg1nDxp*^mndVE$_cK5 z#_bk@Vkfx9S6tzg+<+AHRt{6e! zV*ho~6HAeq$a+68p6BOrmhO_m)A!iBqBo^s3dS#a*4L9LM>FYizEw*VCypZVT z&$Kd;sBxXL&iNsSlGrmlxiFhe)uxS3HsFIb)1Cmp^dhxlh2Gh7z1v-}732ZBx{jdd zqahm?T_lnf`2~Bc3c{AsEp?W|!v(kAsYI`oWWOj*?2D@yvHsZP7rnVp;;8C|TC3{q z+2)#d;ZS1Y=zatj**w+c&GWh)&E0-}ZBlENqsFz9H4GA;R=JxKY&==qx41r6RmS2r(r_2zxr zSltvn3=h^6K-Mh_5AYos{(IUeST5uF=54%$lSamh2M?YK= zTJH}-u??&Hwk?X*o?Pp_uU2(T-*6+>C+w{Vzxb@SG~B+kBVw-Cw?4vW_F%aWtFtb9 z9xvbTU(g4yIur6*nWmq4Xbv*T`-PW;MR`~2%`K`vs#uD*^5TJkkHWgi`xQypX0PUK zL+#O1vW!+25_0|Z)zOW_p;^mD`B`TpBvB)=`CC&4Nd1>r^Rhk;-`D0cv{z<;K5}n! zbnW7xH+Y4aN4lGmBjvuZJGm)`8{w{|uJZ49l~Jad6x&l%Tykh+a2Bug)blX=or6hi zskE!2to1Q-qtg%;%75VE+vW_f6rY~!9s0fe^l`Cx<53}ohkDzp=GH|n zbWJOF?>3{D>DpJ$sJ{e3mpr=9|CZplX{h%`{b<>5xxcn|&mRqjf%ocwpJ(4c5yF`h NP%E_x-^#2l{{RWbZ1?~G literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/2.png b/assets/2 Objects/6 Decor/2.png new file mode 100644 index 0000000000000000000000000000000000000000..c64dd1bc3d18b118cf27d6b23031a450a03d7521 GIT binary patch literal 1029 zcmaJ=PiWIn9FEM5IX83)f}--s5Zts$)2>+?R%e%_uCSEaR#rXevgEA|Yx1(>&1O>& zWE1AWgQDQsgD6gh;$euW$DI_#i>IA-^3O%|B=x0hI}g^7m-pU}@B4ng_kLfNGwCxu zU5C0Tit0&?Nm(-QC*w$G8~I*ae0YmY2eDkhIW&zcsspKnj;0_;nQ9Scp{mc%uESx9 zYNL&O0T+~UK|>~^`WVJDZNjFg;StYPwHb)P6f7E6oc{juH4O|sPESOXpkj-#WQ;91 zFt?D-YYQ`4Os7XqfniS|0w%;N@XWI13SOM9=?Y}+hgllbAb2KDZxvNgGC)KQ1Q8}2 z(1IKXc%I<~BRtQY1fd`oVuR%61Kgkx;f2r;s6RBx=IGNxR!Y`$kzJfFVQdR5Td7o- zN|-@Tk>z5sn6D8E1qdSG&RbaZ0+!p?P>`UjIfji5WC34MokDXsPLoQvj$qnNS<9_o z6S*+fQ*D-Gg8q>jKt=gK)HIuD7iZyiz5f(;^Yb=jv(QCzjz$_c-RGyW1<`>jMou1~ za^n^=C4`Y%LN*X{JUBjKSURe>{WZLz2r0|Os-?k{6sL&-V;H&+Oh)CH$j7)LGB{a| zMiSwK7?r|eG8RdOM;lxTX>%sDaD%IFa}zDOz7~T!wnmK_;jjSuk4HGSpJ9 z&edDj5^c$4NinS7*uNUx2od-A%cgC~rfGa=5w|WbT=~gl@#e~|pZ8{07w^c20~_U$i(kZWxGKBzHDYJcIph63?(YyAYy>fS#bj?l-Z`PMCZ{m&w?g|EX(XcQB}PNve-vJ;KmYW z5<(z~983$M2v37l5~lbheZ>S!OM)n+#zE_0X*STW7@}#Vf41)a%#w+bp zEY>i=K@EE#TNc5|dE2#cJvi0G>$;S817f%)%BwO<6*$|rBsew!m9&tA<6;IvO;a*r zZd#aDlpIvVlp?gbDmGUgDI)x33^8=VJ#nw=CIRYe{Qe^;%r3 zYc1(qS1wPB;iJa>)#&yTbx$zz<0F^4-KVx5d1BAeD-kcwRkZlA(MK1wxAihz z7}>plgAP5UR46wZ4d(3Vy&p8z^Quw_Ka+iB;5mrLUQGOM+_qyQy}M6$w$Ar_W$$d? z-QVC}KAzw%zIy%h!>8?@6MN@2ufOk8W}KTlU*5T!+ssw<+SJC!<45Amyc8Sk{oeRR Og_*ooP#;WR+WZ5%uSEC& literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/4.png b/assets/2 Objects/6 Decor/4.png new file mode 100644 index 0000000000000000000000000000000000000000..2f1667260eb079aca254f6e05b5077a5cc34b7fc GIT binary patch literal 997 zcmaJ=zi-n(7e%PRO6@b}YwcDH z2(d8n2QVTbF@RW@7%D~>5JLyV$__$eFXuE#83>l`yZiLs`+nZjM*V(v{@OgpaoO6s z-el_q_T4x)$Nn#lzNdz()acL_c4=%8#FZV~MWE(eJ=8>&v;W{DTH&}k-fMSg$J|hD z>r!5O+w2aAPTyu=LH)7^Zg+YJV)aRqsss7$~|)B=gW6GUpF@k3pe?NhVJgCT?tH2x&0j@bZJOc0QTLe9=Z2oyzt%d(=t z+d#@gNzAiX$-!k+R#d47Mi0-t5yw@V`r61BJ868M(ohw}IF5z5AYjrHVX0I~H6$s= z5V>eSpjMI#qQ$X-jv||QA@y(oQbntacd5p+NKaDm!-;GVjmpFdCMH%WLLr}~GzOaH z|DnD=K}WQSPUHQjaMa!pk=R5L-X%6`oV%F13e_q>7R98E@y@u4jXtJ0>f;bpTMD?j z=>-msqgz9~X{xm#qE=v|ny&FoLGV0Bg+*B|N|h=sDkTUFqg<}u(F+AbDl=ogB9FN` zws(CL&@tCJ^)qR=w%5l&9*AxX$!gDpR>43r0*E`&XmK zCN@3kb~3i?Fd2LluxTf3tRMa$zuA?@G&b7CyDcMgY3WPcVun2r{$k4++N`&ZkB_-~ zORrKKtm)-;@~yk=x=&`#g6HRF*HNMMENe>(AKaJO>(*sUDZKugS$Oo>U3)t-o8gW= U%?a}1#Vd@=)r`9Srn3F`4~zdXsQ>@~ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/5.png b/assets/2 Objects/6 Decor/5.png new file mode 100644 index 0000000000000000000000000000000000000000..a61289eea51dbd20ef3580fb8cfd444af3860139 GIT binary patch literal 1020 zcmaJ=O=#3W6pq%PQfw{W)XR|epyDPw+itcAjb(R}whPU&?gqOal%~nF8`@-IGHtR& zQKT0S9*Wmu4|=lDgJ25^dJQ)*21$06dYq7m62i9uf0a24AaHh zdX-eQDaphRXT%sTay-grn9;GwGt31;(&KOJ=9jT2k}!sAf;D_^7f{ z)XkLzQ?%Hz3t%*osDOir0U~G74WvkB8@dwp<1o*H281lg>|Rk-tpxJeMqsT=uT#9gm@CqhhfNtLmc+! zc_@lvtdUA3C?XNmU1CHDHyCIsC@3&}+aor1L9A%Z;w2)pw9>s69Iq|w2F+ul2gXN+ z$3rd|x6}e^+W(=B(?$oRjP~pOr*NRxJ;aw$fR}ueUfkS3oXV5(J~9aQb&MBVr&y|C zf`c0NK)xb?Gt;(f;V?Mcz-yXRa06nvCMqa0OBFcVwj`Jv5r;Ek9%cj)LRA&V#k8ts z(@J(k&E=D+7FWUMl7n2*;#&J$r6V^U1;?YA73AB?$Qt*t0~#$$cIR5M9rc=At8*>6 zj$ED=!^ao<*G0ENbb4a9J+^ey9(?4|Y4_<^?>ztdmOhE&r72wvrj%pH&po-Uz6&cf zcJ=7=Q)&*Aa-0PtiOkSOtL$7QU7-H^Y(+gYhO0%r)M^9to7e} zB^$pUo`7#I9n3%OUj_F!S9h*tcL%o)z5KM<|Iwbfb%0r0Kl14M;8;ZUn1WhVwsJGK F{{TmqLwNuI literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/6.png b/assets/2 Objects/6 Decor/6.png new file mode 100644 index 0000000000000000000000000000000000000000..e306c25a82f81269d524ff27bbe265ab359e7e8e GIT binary patch literal 1037 zcmaJ=J#5oJ6gIR~qpCl^fB>n|;Z~v`;=eX7wh}5Qc4(wJijtrPA)z|>xT>IL% z9osG)k&u`fVPFCV5CXAPFd#Nqm>3a=fdM4SIZXls;bi;WJ$>Kz-n;j_U&vn@8#y;Z zQPfy&Q7sZXP2Q8S0rK6ke?21REY>Qxglf2D_>fX8RD~et7$aPszdUmu8CY28yX(V zGh9?s7pUw1hdNFV9pEDTlkY!;gYuRK*&+M$0=EUUX*xV)1+B0tEzLE zjF?uk>9p46s>s}Mpo_a)tH(`qeYw#nI39_tLf_tmR@O%jXqPP8{c}UFqQ-&_=} zFPA0Buu)_GYIN5{rYG9=#+DpG2KiZL36l zw}zLW5;KI0`O+a-)Xyj5k^g#5Rm$Oqy?4s^OD;B`T=;Z|m>7NU!P@uaw*z5StEIn& zQ}T*BdFRwF`(x-nKDK{)_p?+z@qTaf_3bmNz|Tw%?)$5Q!{=wLnEdMI^W&q`D=a0ph1G*&S@O1qEqO6{GgQWL1E|A*Rk3+>|qJk0l>!hUJVg=_)(XwfrB<7Nk<73@1U`|fcM1ip^Q{odzMO3b&xIsbWI7JZ! zUKF$0F(t(%_`y`N$(50@XhR1#x#l5PXv>X8!FEYx8G6<&Xl6ZRgL=u5)jpR*TfGL? zY@bWAEte(9uu)_GYIM^@rYG9A#+DpfgAW}t?H(EHyHD90(0xQ(__jBBF81vAm!I0y zL#uCd^}c{#uV#O&KGEg9mGft}t1G+tjg9r)kEdST-qNP=j+VJ}Row4t~ ZI^&e~x#P{NwVek>Qy1GTo87${<7ER%jVnZsbp-Bi5hB6H^P|?b_w_%u~ zT4+6&$NA)_pdy1&JPhL+7GYCVc*wOBbp~QE38!^4LVtg=NdsMr(Br|RKWT}uppR5+ zn60F8YGpe-AjtIl zR6oZ7o@cm$AkTAGK)}xhSU-7qA2%Qbc_AOQjN1 z>SvHW&2pho$kPY}d<5Zh$|hD^pXv0}6(s1Wwr*h^nZQ$2CebX8&?M7?D;QQo)^uuR zA_Zez#bP~i|T-kzb20CcgR!QTgdc07UAlgvD$j%{D ztXDBzKo~g%WC1bDgNx(3siBf{sfte~g@ox~#Z+NJiqJ%X(RGcKG8B`piV`=-hd54_ zqd_?umqLTQ7?WkGKVIibNS!sHiR)bLkSjOkdZS=iB(el;eGY1I8yTQ_WkGMAORTA0 zjjJ`!MQqAtNiwY0*uNTGcaiDwwvDkRhsNMTlT5o!#(H~bOeeoYS9&xj@07C6sC44g z<@;HA{f123Apm-bIf^r>?7p|CSDP!F#50kQqB-}=#K*CdTmJSV=_Px=@5S8fufOgb z?|yu4xohFUwPW+ew>OtRNK3sBU#^TTKHGagJiZiuveGAiTNPUu+JCO^>^_~p5S`om m-O*OQx3TePE%D=grL~*-^tr9r@@{RH#Gw*$N?MEEy88!De^P${ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/9.png b/assets/2 Objects/6 Decor/9.png new file mode 100644 index 0000000000000000000000000000000000000000..eeb817f27a99dc135988677d659f7fd196a7dffb GIT binary patch literal 1020 zcmaJ=J#5oJ6gE_9tJ11!H<(VYgeWEcOYACEO`F6njZ{Zb9B5zx$G#?3YoD>N*p0*h z6I~Gl3ruXFN~J;|F$8sk0U-nn6FURUNKnpck}?oZw%^^;_kHiZd(S)N(xr*9Gh-A* zO%zwu3bEtKJ32(Z=F?}Ni8+n68aB{6j?4g3IUCg>D7t0?R-kEb-+T)fC~Amysx@5G zS7i&ijG17V*!2mUq81io-?TO$26fnQJca)Lx=jPeR_HZR=XAdSo6brrfJUoSwOSii z)}|LPf`wQn0xrZRh}}&ulw*bN=*ncDxLF!>Ab3NekCLkCWl%r?1R|48Ssc#;Nn-en zC`tSUAaK0Ea^#Uxd`1=}S(pdiMU!ZOy)IYOw6fsenK|zD%v)OE- zAqXjgNQK)THsh2R&h!*i7+QhjV+VO4Q8epl3oA6q^r!^a@5_2&_nOFsv9am1Ji{d= z^?g8s1;%k~S;%wq`LrtV^HP@QH7%Rg#C(R+BtFL# z_*|~XRgtyjLJ#-2_Axg-keiHx>yyYT44hlgUJj58Iwi}_;9R(YdR?wPI2V2(mnF%t zNn`(Nbk9YmC)xJLmK^$n4?QyN0U2vU+Ul-Kw#6e4@igDczXPWlmS>nuGM2bb5C=qC)f!_ zh`oTb0Vr4Ez;+G^g9CEl`a1e``W`_S>uA4dN@h?aBX{>CB;Avi<(wQkDn^yNupDb# zz$46tv3KN0TCAg)uEzc3SVV9JVTU?8FREv@VU30a7KMD)kz^SviXaz?iXz{EIZ4im z5`UGfT+oV&mMg*egLt+O54DcbnCIe=jz)|HnkY^t6Je4UXm}vXs;VX$xm=bbveDFM zcAWL2%tFB+krTQBbEyv#MSDQUOh>%Z^A@~dDeFh`G4X+ku^ouAASEp=fTsC>sOK%w z5$lkPdjBaLS<`@s9TL%T=Y}nG=R0P0=M>EAJa*6 zdxkent?5V1_8rnRbi@?|*TtGzkQ>EDsVJ9}ZCS3@w-r^YN;RpJQ+M(W!&q<)>Wn?& zvjrDlaFvzZWEH%CXEsRaJ|?&kQV-5r*4)*#JtchrFU~$a-At9P!ZUCkfpY!(s|@FWX1!&++37#|0}vo7 AQ~&?~ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/Dirt2.png b/assets/2 Objects/6 Decor/Dirt2.png new file mode 100644 index 0000000000000000000000000000000000000000..495de51be4111e32436cbbe5ab9de244b4228b82 GIT binary patch literal 1001 zcmaJ=J#5oJ7(Lp8szO^(ClEr1t0F29|0Qu^tEOsWw>7GxC<#hNT>IKsjeW+xHf|=w z#?nem42&R^1x64Iup!u3kYHeA00|)`#&AxPl!0K`{_aliz3;pG-rXw|S0^VfOaK5T zjWw-I<5~JmjgQj*xnIo}G@K`TomB89X;~oxOAg*Z(D1A+R7RGwcl#Y$0AQ4Ht94R0 z*A*Lktd(Hc*b68dfQ7|4uNNvhM`dbRlQ)9`YPf6d5LMd6s@>kU zWrtb34i{pD3V4WEF!q{$q{J%I)m7*?S>_nng^+EPIV!4dmS6#g2xi%I%H{gM6PLO3e z(GbNHMWmuVpIC9qk7oM{8j9@D4Ty_#ha#L_z|&u8yT9)PzBa?9Yxl%c|F7Dg`AWZ1YMW&Vp^9A+HyLl z@v~2|chu0zv)$4Jc;kD$3ayeQI zmo)aTM)#Mfdy?V6wsbNuKJuyCLu%`Xg(r{bl{i&euj-HEn{@c;t#^io5mGKzI^gSb z{sx_?hPG6VKR5S3OaVAPa?t5~`}n|^ literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/Dirt3.png b/assets/2 Objects/6 Decor/Dirt3.png new file mode 100644 index 0000000000000000000000000000000000000000..7e99b2b44add9b4819c7df9b9b01f760373beb2d GIT binary patch literal 976 zcmaJ=J8#oa6t4*trEH@9KALCr4hkO3V#F=lEW>0{IgoFQ&w$D2I45Itg+`wb*&cCNsLj2D-~Tq6p<`*V!0yA;yok@ zqQndE%0;oPR%BJ$LbHd3Xt6g?+eUpB3p|Y-Q5vZ{KOT>{afu`GkQb}fYNjDcML-mj zNl2Zv7$%!@1p_B;>_^lmA<7h;J~^ct3z?pm5JU^vFqyRp8pfwi#EYDel{5!h*8ibF zus|oYjW6>3r*L9VBFwjOLQZ2B4sNiSg^E-?#ttR1O~}c-i>(o%BpHzi=^Yu}J@iA5 zjFZ9?Z&_+1OsEsOxM654C~&^-sWnMbbhET2Zpn%$nx>-E1ifC9O|xw1CB>X`4dR{# zIHYr~cfnPbaD;4B@`g+qssvH|$&cuddchE34O;e1R$a{BraZ@Jz#O8t)$Tp8Wx)Bqfyq literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/Dirt4.png b/assets/2 Objects/6 Decor/Dirt4.png new file mode 100644 index 0000000000000000000000000000000000000000..6190956eab48cedc3a9732d6e795d64358ab572c GIT binary patch literal 976 zcmaJ=zi-+=6gH$H5h7C7WI8z+TB-O41OpasL~PTz!UzFX*ov_au)sdYz7!{8Td9iF zf1_)c4jnpltokRkd*^PQDz(o9NQY9(_PuxdzVH3GcQ@_UyPy1$5wu#4C35JWk z0N4yuJBb6!o??oIc9jF>#1FJ*po-77Rw;u zVQQh+oB5F(E9^p720Pj2S+s!AslwhS)i>KnB_T#7u9&w4QACo&iN_^L5+9<1AQpH5 zUMVjg%Oy!Jl+p5GAzJ8+k1W4^l=>ECuJ7gX` zSl~@lHvEWMzKsn{VL^d&T}Q4S6q$Qmmc=% zitF5QD;v4VD0l%x)^O-P$4(<89$J(vyPI<aERU{?= literal 0 HcmV?d00001 diff --git a/assets/2 Objects/6 Decor/Dirt5.png b/assets/2 Objects/6 Decor/Dirt5.png new file mode 100644 index 0000000000000000000000000000000000000000..ff79fa5330f6d4afbfc428392760882823411c61 GIT binary patch literal 971 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 bUFq$Wgm-+~Kzog9{0@kqKg>;fyH5WB4?kvk literal 0 HcmV?d00001 diff --git a/assets/2 Objects/7 Water/3.png b/assets/2 Objects/7 Water/3.png new file mode 100644 index 0000000000000000000000000000000000000000..d08556c863f05f107c23a70ee483731844aa4ab6 GIT binary patch literal 1098 zcmaJ=TSyd97#_63q{?m8zL+40m4P}Tj7JClN{b5dfBEAzOYu;G#2AXeHk6c1K-4I(6_5cvN>f`%U? z)VhobBAJG$oN1Rm3RS&>tV;1%Km$l3Q(A{^@hLAgugl}Py-ZW&JOs6Sso$nz!4T<( zCLrC;a)->YEXi?Bw!+PEY#HfdSQpLUmvgWcyqn`)mE^)h;cTYT#)pO4gwK1n4082Ji1F29aZAGaSb|No@o&Mf} zW-Q9;*1|F21EW)tL9zD+%_xK&xl;@!Ac9r`8l*qMkz1NnU4cn!>pVUfZJE$JY2n zmJ!%W-*%Q2#Tt*N)>m1utGB>a@_X^;<;{zRcyNTQSOiMI@uf(!Y zeN=4h9?WL5GrgY*@Jay+H$<|;#6xB`j&25onrQ0%?JFazddMR2&0Mzk{ykraX|9@V zJax9Or~fGToX$+|Jn?$zq4CkR@A|*reR{n9$H;;G56Xwj2I6}sOX790YZoVW?-~Aj z_fh?(Z&a+}!>iHKSUNKnI5O0-dDYtSt6lCp`!06@{W^^{SD(BwFg7*w^BLc~dg|k? zxeFV%X>;O8-|UILp|j~Q>UOXAa(;Yt_AS3;9Wn5-z&Lj)@EJQL0%C)3-*@oXFX@4D A%m4rY literal 0 HcmV?d00001 diff --git a/assets/2 Objects/7 Water/4.png b/assets/2 Objects/7 Water/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5e75424842049df91a7e98e96fd5fc5069f3164d GIT binary patch literal 1153 zcmaJ=TWHfz7|vEUuiJwnq7M?H=!UjQ+BIwAvbiqpR$a?zt4HnVm?zsheXxck=lnn4_x+dipPssS zb-~oRQwf47h}MV+yfXM(IN62&SCa31c$tI3^(YCOQCczqQK`TtKt?sG1tfr^bhh6C zWdz}()KopHkJa)r)I5@d@z|Py*#uEmVH=X%1`ycTceTkug{mkg%WNJCXaGs1t!>aP-WI4)T^{cpH%*bF5Y#46V@cJ=>c}c+ z0@CmCxn+iBNsjZdC4P=$mylkD_0kM}IX7Fv`#IiQN{&Aij%F&&d_s(j$HJCCwIXEj zG@VYTJ!zi@nk_UN3=EHg{@Sl0q6v(l=5wu#NK~^O>vS_ucD==*pkK$u7KB`+t(q#}81qv&8R8`?Qj`4Zf zAj_790xTO2ha#1%$ofM}pfpfY!Y~=G2;~k9=qSTg{&2lnxy~qP297KOQ{4!ZhzT`v zv}9h*noA&(Rd1ZDWY2}k%B68Kv~#e39dyQpr^ne&j4d`M1|R5n+D$yxiG@?j@s-H0 zt4)PhZMi-&GV=B0>s;)~MTvNFgm`m}S&prTQL!>*Kf7>vP2mn^y4dn*t6FsT)r+3g z)@3Vy4t#l%!%W_$zNDAkCVMy0!{J`Oae@46J<z}*#?26~{OK^ZWv*L_ce&f>0 zRWr_g7HXGX&b$A5(RZP5XJmVxeQ3Y^%WWOFP&jb^K~MkiJL34;bwsNA+to>X4mEVD z-J5qkIfAkUA(`$Y+g=2aqqpWdZ>0Ug$pF2;kbA) H)VTdO&lZAr literal 0 HcmV?d00001 diff --git a/assets/2 Objects/7 Water/5.png b/assets/2 Objects/7 Water/5.png new file mode 100644 index 0000000000000000000000000000000000000000..ef918e65be6a19a35dc6ec44b667f9504bcf4b25 GIT binary patch literal 1167 zcmaJ=TWAzl7@j8e7P_LKDV4??Mv++Ex$I?hhfHO&v(XVJEW4w-wN2|}<|LWKnKPL= zaVKdF7zikMK_Q5~XtkiG*e9WC9wMe7r4_+K!P44-6>6!9_QB$X^i0ggK6D*s=A8fM z`@a8j{kU<^b*v zNv1DLu-#c%$De5vX&4*mF3U4qSW*S3s;`II_AJ`RdH5>d{}uMN0T;4)=%aqmAP3jE zA`In<84v0hc^X1HD_zWWBaHlRML(ayFh$3-MGuEAthujEsI8I=I3$UvZOFx#1|-E{QBd&)Nme zRu9==x@6I+o=dE%-VE2Qo=dzcmnF%t;lcjrpersiJ>hnCY>6>D_|PHK?vb&+eyy;S zT#324En0Tl(D>BU)ZZuW)DTY%&bJk&sJmZtn~8Ntk<(i6(-)&3Ec}L>pSk{mmGYwc zR$qNn%#cn_D^Z!mls>3rxpFZT?_6vY-`=4 zUB+7E`!zrO@ugOGZ?fTy#$}V>!%^p8!}jvXgJl2F_}Ijg@p`GLc+MUgoA7UcJ~YSu z(?7NQuzuV9>)oE;SB)IUAE76g+mA4h?v3; Y_57dOqt_;HG?H>DCEF%{)v{ywU%hIJN&o-= literal 0 HcmV?d00001 diff --git a/assets/2 Objects/7 Water/6.png b/assets/2 Objects/7 Water/6.png new file mode 100644 index 0000000000000000000000000000000000000000..3175d7f92795f6db2d45d42c65713ef3ef90035c GIT binary patch literal 1274 zcmeAS@N?(olHy`uVBq!ia0vp^en4!&!3-o*`0YLeDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_cg49rTIArU1JzCKpT`MG+DAT@dwxdlMo3=B5*6$OdO*{LN8 zNvY|XdA3ULckfqH$V{%1*XSQL?vFu&J;D8jzb> zlBiITo0C^;Rbi_HHrEQs1_|pcDS(xfWZNo192Makpx~Tel&WB=XRMoSU}&gdW~OIo zVrph)sH0$HU}&Uo07PcGh9*{~W>!Y#3Q(W~w5=#5%__*n4QdyVXRDM^Qc_^0uU}qX zu2*iXmtT~wZ)j<02{OaTNEfI=x41H|B(Xv_uUHvof=g;~a#3bMNoIbY0?5R~r2Ntn zTP2`NAzsKWfE$}v3=Jk=fazBx7U&!58GyV5Q|Rl9UukYGTy=3tP%6T`SPd=?sVqp< z4@xc0FD*(2MqHXQ$f^P>=c3falKi5O{QMkPC^b#gQ_vvhVbF?4Y> zF?4k{h3R$4PcF?(%`1WFO+n~&!l@UO6mkoIHoK%2WtOF;xE1B+DuBIgm5JLe7C6m= z>P^Az7E7FZ^?{Dj2SqGWM8kxDsRzV_CtDx~p72xifT_I*n5@+fGHeHC3AO;A5ZAD} z-T(jp|2+RO6HtVyB*-uLKf}}Q23`ydjDDUjjv*Ddj?B0%bjX0irTqW@<+8`)I22hl zvgXY(lS|}eVY$p*aPP0|bHPBzhkKnY61;a$+i2O{9Q8{3gs1I8yLr+(K2M*vE5brc zR+UdgPhwlrGu^_;?2kTf{P>5#*@4+T`FyYNu{Q+I zCntHb<(jMTP0kB`F^BzDWJUJpsLwHt>y;0&dQ@2 zUt7d9^KX@2Ex+2etIRscXoBB$_bIx6Sl5ZgtT%VtS5`S!&1>m}e~v3HWagc$D%^XnPFdty&GPCMJIbDIS<$}ZO@&Ty{*HJr3uDi-orca+ j%HvMki*`qS5lUd#6v6IRvpJ#%R2q4@`njxgN@xNAhugS; literal 0 HcmV?d00001 diff --git a/assets/2 Objects/PlaceForTower1.png b/assets/2 Objects/PlaceForTower1.png new file mode 100644 index 0000000000000000000000000000000000000000..aa7b221fc37cd236eb20eaee6ca5dc6467def225 GIT binary patch literal 1568 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 Nc)I$ztaD0e0su)G(HQ^$ literal 0 HcmV?d00001 diff --git a/assets/3 Animated Objects/1 Flag/2.png b/assets/3 Animated Objects/1 Flag/2.png new file mode 100644 index 0000000000000000000000000000000000000000..10d5b0e0ae5108660d8ff1e523457194ffb0e363 GIT binary patch literal 1355 zcmeAS@N?(olHy`uVBq!ia0vp^2Y}dtgBeIxZ|Zmpq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1+hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb5uTZsl3!k| z30CjxYvq|&T#}fVoa*Ufs{}MbFEca6%Ei*y(A2`z#n2oW)P}CEjwWV~ZWab^CI-eX zZmvd7FugAM$)&lec_lEtDG0r;IQ4>(LT&-jW|!2W%(B!Jx1#)91+bT`GI6`b38#5b zy(zfe;*3+TKF~4xpom3^XqXT%^?;c0WDDfL6MkwQFtrx}lXY**LkVD(kPGk$aScfi z%WF+5_Hp@pvGPKBFb}`hz4`9)hRRzbU4cp#=`A<_q_|3g{DS|(0K=v;I_DV}80$S< z978H@y_tD?TC)O=tFckrumAQj0eVV|tG8X=Qv9hUyM03J(RD$y>})ug1R5AvL^ykj zw`>;u)O%okcN}BwpW7^XdR44n3bp2~Q+2Eox?03_VTQcCU80=C!WW=fzjoE}7ZBeS&|7kV=H z#6CzCN9=6yisQI(rDg)V__o*wI{iObzus5bF!P@cf*m~x88ndWa#a{R7 z&(*JkXDXR%aJKNU%RT$rX+pDJ*Ps1p y#iGE#$l<^M4mlX}M@HjGb)UHxj=yK(VK{T4>ha4x3%!96#Ng@b=d#Wzp$PzIecLer literal 0 HcmV?d00001 diff --git a/assets/3 Animated Objects/1 Flag/3.png b/assets/3 Animated Objects/1 Flag/3.png new file mode 100644 index 0000000000000000000000000000000000000000..88220d1c22ad80814b488d9338ce895c9d7e00cc GIT binary patch literal 1272 zcmeAS@N?(olHy`uVBq!ia0vp^2Y}dtgBeIxZ|Zmpq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~;1Ffc1+hD4M^`1)8S=jZArg4F0$^BXQ!4Z zB&DWj=GiK}-@RW+Av48RDcsc8z_-9TH6zobswg$M$}c3jDm&RSMakYy!KT6rXh3di zNuokUZcbjYRfVk**jy_h8zii+qySb@l5ML5aa4qFfP!;=QL2Kep0RGSfuW&-nVFuU ziK&^Hp^k!)fuWJU0T7w#8k$&{npqi{D?ot~(6*wKG^-#NH>h1eo~=?wNlAf~zJ7Um zxn8-kUVc%!zM-Y1CCCgTBVC{h-Qvo;lEez#ykcdT2`;I{$wiq3C7Jno3Lp~`lk!VT zY?Xj6g?J&i0B&qvF*KNf0j6J(SfFpHX8`gNOrftYexnUy@&(kzb(T9Bihb5uTZsl3!k| z30CjxYvq|&T#}fVoa*Ufs{}MbFEca6%EiUl)Y#I@$(LT&-jW|!2W%(B!Jx1#)91+bT`GI6`b5~q1k zy(zfe;)qkPKF~4xpom3^XqXT%^?;c0WDDfL6MkwQFtrx}ll6}+GVH)CAsyfo;+of* zR_x<)p*;BS#mbQMuzT~}dHA)qM!Ev!XB^AT0#ckML4Lvip@1RSze0$CfziOz#WAGf z)|=}G`C1fsSOQ!${`?o$-=)smx8~^9Ne`_qd{gzh^7QPaO-2#liniZ=V5^s)cb_R` zUV6xZgnf)2I?|5{S-XGoJ($zX`sQi0gN8JdMuLI*0f__ECH;|S+?khb3Sg}Mnb8m( z@5Fg5f8l1vt(J@|HoQBk56Crq+Q}uI@k!|QtMKQ)pVm7xY3YA{`D*(gewX)&%)a{= zLcXs4{FYJEcSEC6JmaiiSASYDonup3z-i#SgYm?5#{SPwg@UfGKmT3L!Sug&Lht%{ z`78_Ge|&E|i{-fI1MP-$?c9Gk6&8H0;cv)lU}P}lVr1drJ-{sV!D7LYMHco<3$D#) zV7kXFa8g2H5!)OQfx8TruRmqgUf+078R$d-2L?ECK%rqz&WVJZr|p?|7(xY;eg78C RRs;qpgQu&X%Q~loCIDj_vIPJD literal 0 HcmV?d00001 diff --git a/assets/3 Animated Objects/2 Torch/1.png b/assets/3 Animated Objects/2 Torch/1.png new file mode 100644 index 0000000000000000000000000000000000000000..e47e91b701c546b5423fe057856c229a8f7a0f56 GIT binary patch literal 1155 zcmaJ=UuYCZ9Nr{GL(l}Z5&sYvHk3x=?cQGQHr^)J0oMyvucj8qfWV1WTExFxU zcPHLn`d|!d5n57;4*?&vZ;B#)X;duKJf+e?Z7B^zBt}6L6$PI}B+kZM^ucqO-I@9E zec$iT{N_xuzh_hJ&RUA1HYIw+6j^VP57bnVzZ3uN8d-K=DT~u+7#9>9Qc(>JL69(% z5txFCRy=wec2HCmt!J`0EB6U1G8o0fFs@+{Hbr%Gx|X7jLJWrBh;Byc7dL;Wfv!d9 zLm}BOTQQi^d&g~<9`DbnY#}?TN@TqVtmyX zIYsCk#+Jacg+hTTv@*yZVYzTP>}do7K7#N$MH4Ho&vcqf3L~ zXcFoB6bx%k)^t|OL<+{bip6q_-%F_kl;zJu4Py=M;1v82?{Q; zH+ilsA!b7bBRhjozEs6z4q@cvkOg9C9yA})O$`;C-79!m780g|6;p)?F+vjsM%Oh# z3Woe~zZB!zNU1qVit=sII3I8Ii(yF&i}4ayMCzCUOh~#AwD{cs4z|bCYb|T4?T7RJxcdhhy5=6bFKTPHW$#u7sm+xSTC5$-XV*{lG)%Y8%;#9@)op>{=bL}X zQ{nd4TPu_U_rH41)m`7WtK$4`oqtP9|83~1Xgut<8 literal 0 HcmV?d00001 diff --git a/assets/3 Animated Objects/2 Torch/2.png b/assets/3 Animated Objects/2 Torch/2.png new file mode 100644 index 0000000000000000000000000000000000000000..ad5aada030889c931f444529968a9b9e4537f1c7 GIT binary patch literal 1130 zcmaJ=+iTNM9L_E>*<9xZ9~99;_Tt1QO}2J6teacYZG~l&wqgavWyx6^W^!V3wzd;t z8-fZxh#(>;{sU7{yunb%6sA6?dr-VErY~Mlbco<(%zCn|(+BGz$vNl8_kF+b{LU{& zBb{xP2yj zrL_-OFgDN`R|a|&ze+bXf`*Jh1aydHkkR)UwvY+X^ST0AJ7Jav^AOw{pchOfqzDKi z3j!}w>sCA*2Yfz;tMmGN+*ZJQIG**8$LHqi1g}rv>%ronNj6LE5u#%2VlJ`^&?$^f zfo0R_G?T7nkdi}g)p-RG+KQ!_SVIPI6y>1YmY89ki~Z}O^C8kb&T^@3$!4kXp+UOcB5i%%oaiCHL{+3C z9c6;)fV?h4IKW=ZVHl-fw9WjNXy%aK9NUUS7r;Br`Oj%QwceEQOL2&^o5JoF_u zJu-W3QffQ&`h@%9lgB0PS1$kX6qP=!pi*VsMelCiRf_J+=B8JTfA@YWA3GL{md(tb zcO^!;=2nfrp?;lwII-u$^P7z|{+w%kM_1ENn;LF1(QrTY;6PXQ_~@D&gR9GCHg2ze zHCZ||_oC?j)=O)@S~DAxuD1uv+s~buYN<)Ojy!trnws8Q6**l22C3rZVC>ty)47k# bsZGTzD0yP{*<$|PAaPHHL!IJwJ(X)*k|l3al66B zg2Vy~3j;zdY;*w$ff(q>%FK?KIuwaMr%B2{IN5%8Pv7^w_wGGEu2pZ&q%Wo!hM6g^ z=ykBC;5|E)g75C9%o>;r)M(KLY16(HVy5Jfb&SfM)xmXaIa~L4@dCr7Shv}tEwiH7 z#N(_4!^K_zY=&7_j04Nwz!a_Hj_a%J&-Wi$=QT7q5*_%sO(`iY697MxVJOKG6+e81o4`tuwKJG>yva-xyT zWdMfvvXJRv30^Rk^`qf6!G-a$74QO=O-dR8 zP4oXy&l{s7TE|EE{!=(=ZUvaH0 zy0Yr}4(Uf%2YAy|%6>#G-^OKKWkG>+T}Kf$Jzo+GNhnA~K`@MxE*1?@URqw#3X+_c zM_irQn;!P*i0d423lq7?D0l%x)^X@Qz|L|=JTxd-aVO`JpQtzFI+Jq|Cvtg6hEE#% zSEENRn4V-i9$Pq!2Os+|?IDcyiF41tz%Madt2B+MqW2!Ye79ztp1lUXz3Q!}U{2C{ zwebfQv%hnu0S>;bmzweS7hg+h2Aw~Cdw+g!G1{5Bd-=1LN?YHa{djfh&WGuCvGXg{ aq0?EW`1{!OnU;g&-lF+zwC?JC_e9v0_S_bEr`rMM3S}(i(k;z^rul!U z@6XXOZ_}%K|0x`I&q6A zxNIChn&3@SHG-I1fkO?ViJ%~Po~xD`bNXgP { + const img = new Image(); + img.onload = () => { + this.images.set(key, img); + this.loadedCount++; + console.log(`✅ Bild geladen: ${key} (${this.loadedCount}/${this.totalCount})`); + resolve(img); + }; + img.onerror = () => { + console.error(`❌ Fehler beim Laden: ${key} von ${path}`); + reject(new Error(`Failed to load ${path}`)); + }; + img.src = path; + }); + } + + /** + * Lädt alle benötigten Assets + */ + async loadAllAssets() { + const assetsToLoad = [ + // Boden-Tiles + { key: 'grass', path: 'assets/1 Tiles/gras.png' }, + { key: 'path', path: 'assets/1 Tiles/weg.png' }, + { key: 'swamp1', path: 'assets/1 Tiles/SwampTile_01.png' }, + { key: 'swamp2', path: 'assets/1 Tiles/SwampTile_02.png' }, + { key: 'swamp3', path: 'assets/1 Tiles/SwampTile_03.png' }, + + // Bäume + { key: 'tree1', path: 'assets/2 Objects/2 Tree/1.png' }, + { key: 'tree2', path: 'assets/2 Objects/2 Tree/2.png' }, + { key: 'tree3', path: 'assets/2 Objects/2 Tree/3.png' }, + { key: 'tree4', path: 'assets/2 Objects/2 Tree/4.png' }, + + // Steine + { key: 'stone1', path: 'assets/2 Objects/4 Stone/1.png' }, + { key: 'stone2', path: 'assets/2 Objects/4 Stone/2.png' }, + { key: 'stone3', path: 'assets/2 Objects/4 Stone/3.png' }, + + // Gras/Stöcker + { key: 'stick1', path: 'assets/2 Objects/3 Grass/1.png' }, + { key: 'stick2', path: 'assets/2 Objects/3 Grass/2.png' }, + { key: 'stick3', path: 'assets/2 Objects/3 Grass/3.png' }, + + // Schatten + { key: 'shadow1', path: 'assets/2 Objects/1 Shadow/1.png' }, + { key: 'shadow2', path: 'assets/2 Objects/1 Shadow/2.png' }, + + // Spieler-Sprite + { key: 'pointer1', path: 'assets/2 Objects/5 Pointer/1.png' }, + + // Animierte Objekte (Lagerfeuer) + { key: 'torch1', path: 'assets/3 Animated Objects/2 Torch/1.png' }, + { key: 'torch2', path: 'assets/3 Animated Objects/2 Torch/2.png' }, + { key: 'torch3', path: 'assets/3 Animated Objects/2 Torch/3.png' }, + { key: 'torch4', path: 'assets/3 Animated Objects/2 Torch/4.png' } + ]; + + this.totalCount = assetsToLoad.length; + console.log(`🎨 Lade ${this.totalCount} Assets...`); + + try { + await Promise.all(assetsToLoad.map(asset => + this.loadImage(asset.key, asset.path) + )); + + this.isLoaded = true; + console.log('🎉 Alle Assets erfolgreich geladen!'); + return true; + } catch (error) { + console.error('❌ Fehler beim Laden der Assets:', error); + return false; + } + } + + /** + * Gibt ein geladenes Bild zurück + * @param {string} key - Schlüssel des Bildes + * @returns {Image|null} Das Bild oder null falls nicht gefunden + */ + getImage(key) { + return this.images.get(key) || null; + } + + /** + * Zeichnet ein Sprite auf das Canvas + * @param {CanvasRenderingContext2D} ctx - Canvas-Kontext + * @param {string} key - Sprite-Schlüssel + * @param {number} x - X-Position + * @param {number} y - Y-Position + * @param {number} width - Breite (optional) + * @param {number} height - Höhe (optional) + */ + drawSprite(ctx, key, x, y, width = null, height = null) { + const img = this.getImage(key); + if (!img) { + // Fallback: Zeichne ein farbiges Rechteck + ctx.fillStyle = '#FF0000'; + ctx.fillRect(x, y, width || 32, height || 32); + return; + } + + if (width && height) { + ctx.drawImage(img, x, y, width, height); + } else { + ctx.drawImage(img, x, y); + } + } +} + +// Globaler Asset Manager +let assetManager = new AssetManager(); + +// ===== WELT-SYSTEM ===== + +// Welt-Konfiguration +const WORLD_CONFIG = { + CHUNK_SIZE: 400, // Größe eines Chunks in Pixeln + RENDER_DISTANCE: 2, // Wie viele Chunks um den Spieler geladen werden + WORLD_SEED: 12345, // Seed für prozedurale Generierung + RESOURCE_DENSITY: { + stick: 0.8, // Stöcker pro 100x100 Pixel Bereich + tree: 0.4, // Bäume pro 100x100 Pixel Bereich + rock: 0.3 // Felsen pro 100x100 Pixel Bereich + } +}; + +/** + * Kamera-System für die scrollende Welt + */ +class Camera { + constructor() { + this.x = 0; // Kamera-Position in Weltkoordinaten + this.y = 0; + this.targetX = 0; // Ziel-Position (für smooth following) + this.targetY = 0; + this.smoothing = 0.1; // Wie sanft die Kamera folgt (0-1) + } + + /** + * Aktualisiert die Kamera-Position um dem Spieler zu folgen + * @param {Player} player - Der Spieler + */ + update(player) { + // Kamera soll auf den Spieler zentriert sein + this.targetX = player.x - CANVAS_WIDTH / 2; + this.targetY = player.y - CANVAS_HEIGHT / 2; + + // Sanfte Kamera-Bewegung (Lerp) + this.x += (this.targetX - this.x) * this.smoothing; + this.y += (this.targetY - this.y) * this.smoothing; + } + + /** + * Konvertiert Weltkoordinaten zu Bildschirmkoordinaten + * @param {number} worldX - X in Weltkoordinaten + * @param {number} worldY - Y in Weltkoordinaten + * @returns {Object} - {x, y} in Bildschirmkoordinaten + */ + worldToScreen(worldX, worldY) { + return { + x: worldX - this.x, + y: worldY - this.y + }; + } + + /** + * Konvertiert Bildschirmkoordinaten zu Weltkoordinaten + * @param {number} screenX - X in Bildschirmkoordinaten + * @param {number} screenY - Y in Bildschirmkoordinaten + * @returns {Object} - {x, y} in Weltkoordinaten + */ + screenToWorld(screenX, screenY) { + return { + x: screenX + this.x, + y: screenY + this.y + }; + } +} + +/** + * Chunk-System für Performance und prozedurale Generierung + */ +class Chunk { + constructor(chunkX, chunkY) { + this.chunkX = chunkX; // Chunk-Koordinaten + this.chunkY = chunkY; + this.worldX = chunkX * WORLD_CONFIG.CHUNK_SIZE; // Welt-Position + this.worldY = chunkY * WORLD_CONFIG.CHUNK_SIZE; + this.resources = []; // Ressourcen in diesem Chunk + this.tiles = []; // Boden-Tiles für diesen Chunk + this.generated = false; // Ob der Chunk bereits generiert wurde + + // Perlin Noise Permutation Table initialisieren + this.initPerlinNoise(); + } + + /** + * Generiert Ressourcen für diesen Chunk prozedural + */ + generate() { + if (this.generated) return; + + this.resources = []; + this.tiles = []; + + // Pseudo-Zufallsgenerator basierend auf Chunk-Position und Seed + const random = this.seededRandom(this.chunkX, this.chunkY, WORLD_CONFIG.WORLD_SEED); + + // Berechne wie viele Ressourcen basierend auf Chunk-Größe + const area = (WORLD_CONFIG.CHUNK_SIZE / 100) ** 2; // Normalisiert auf 100x100 Bereiche + const tileSize = 32; // Größe eines Tiles in Pixeln + + // Boden-Tiles generieren mit Perlin Noise + for (let x = 0; x < WORLD_CONFIG.CHUNK_SIZE; x += tileSize) { + for (let y = 0; y < WORLD_CONFIG.CHUNK_SIZE; y += tileSize) { + const worldX = this.worldX + x; + const worldY = this.worldY + y; + + // Perlin Noise für natürlichere Boden-Verteilung + const noiseScale = 0.05; // Skalierung des Noise + const noiseValue = this.noise(worldX * noiseScale, worldY * noiseScale); + + // Normalisiere Noise-Wert von [-1,1] zu [0,1] + const normalizedNoise = (noiseValue + 1) / 2; + + let tileType; + if (normalizedNoise < 0.3) { + // Sumpfgebiete in niedrigen Bereichen + const swampNoise = this.noise(worldX * 0.1, worldY * 0.1); + const swampVariant = Math.floor(((swampNoise + 1) / 2) * 64) + 1; + tileType = `SwampTile_${swampVariant.toString().padStart(2, '0')}`; + } else if (normalizedNoise < 0.6) { + // Übergangsbereich - gemischte Tiles + const mixNoise = this.noise(worldX * 0.08, worldY * 0.08); + if (mixNoise > 0) { + tileType = 'grass'; + } else { + const swampVariant = Math.floor(((mixNoise + 1) / 2) * 20) + 1; + tileType = `SwampTile_${swampVariant.toString().padStart(2, '0')}`; + } + } else { + // Höhere Bereiche - hauptsächlich Gras + tileType = 'grass'; + } + + this.tiles.push({ + x: worldX, + y: worldY, + type: tileType, + size: tileSize + }); + } + } + + // Ressourcen mit Perlin Noise-basierten Clustern generieren + const resourceDensity = 8; // Anzahl Versuche pro 64x64 Bereich + + for (let attempts = 0; attempts < resourceDensity * area; attempts++) { + const x = this.worldX + random() * WORLD_CONFIG.CHUNK_SIZE; + const y = this.worldY + random() * WORLD_CONFIG.CHUNK_SIZE; + + // Verschiedene Noise-Frequenzen für verschiedene Ressourcen + const stickNoise = this.noise(x * 0.02, y * 0.02); + const treeNoise = this.noise(x * 0.015, y * 0.015 + 100); // Offset für Variation + const rockNoise = this.noise(x * 0.01, y * 0.01 + 200); + + // Normalisiere zu [0,1] + const stickDensity = (stickNoise + 1) / 2; + const treeDensity = (treeNoise + 1) / 2; + const rockDensity = (rockNoise + 1) / 2; + + // Stöcker in Bereichen mit hoher Stick-Dichte + if (stickDensity > 0.6 && random() < WORLD_CONFIG.RESOURCE_DENSITY.stick * stickDensity) { + const stickVariant = Math.floor(random() * 3) + 1; + this.resources.push(new Resource(x, y, 'stick', `stick${stickVariant}`)); + } + + // Bäume in Clustern + if (treeDensity > 0.5 && random() < WORLD_CONFIG.RESOURCE_DENSITY.tree * treeDensity) { + const treeVariant = Math.floor(random() * 4) + 1; + this.resources.push(new Resource(x, y, 'tree', `tree${treeVariant}`)); + } + + // Felsen in spezifischen Gebieten + if (rockDensity > 0.7 && random() < WORLD_CONFIG.RESOURCE_DENSITY.rock * rockDensity) { + const stoneVariant = Math.floor(random() * 3) + 1; + this.resources.push(new Resource(x, y, 'rock', `stone${stoneVariant}`)); + } + } + + this.generated = true; + console.log(`🗺️ Chunk (${this.chunkX}, ${this.chunkY}) generiert: ${this.resources.length} Ressourcen`); + } + + /** + * Seeded Random Number Generator für konsistente prozedurale Generierung + */ + seededRandom(x, y, seed) { + let counter = 0; + const hash = (x * 374761393 + y * 668265263 + seed) % 2147483647; + + return function() { + counter++; + const x = Math.sin(hash + counter) * 43758.5453; + return x - Math.floor(x); + }; + } + + /** + * Initialisiert Perlin Noise Permutation Table + */ + initPerlinNoise() { + this.p = new Array(512); + const permutation = []; + + // Generiere Permutation basierend auf Chunk-Position und Seed + for (let i = 0; i < 256; i++) { + permutation[i] = i; + } + + // Shuffle basierend auf Seed und Chunk-Position + for (let i = 255; i > 0; i--) { + const seed = this.chunkX * 73856093 + this.chunkY * 19349663 + WORLD_CONFIG.WORLD_SEED; + const hash = Math.sin(seed + i) * 43758.5453; + const j = Math.floor((hash - Math.floor(hash)) * (i + 1)); + [permutation[i], permutation[j]] = [permutation[j], permutation[i]]; + } + + for (let i = 0; i < 512; i++) { + this.p[i] = permutation[i & 255]; + } + } + + /** + * Perlin Noise Implementation für natürlichere Generierung + */ + noise(x, y) { + const X = Math.floor(x) & 255; + const Y = Math.floor(y) & 255; + + x -= Math.floor(x); + y -= Math.floor(y); + + const u = this.fade(x); + const v = this.fade(y); + + const A = this.p[X] + Y; + const B = this.p[X + 1] + Y; + + return this.lerp(v, + this.lerp(u, this.grad(this.p[A], x, y), this.grad(this.p[B], x - 1, y)), + this.lerp(u, this.grad(this.p[A + 1], x, y - 1), this.grad(this.p[B + 1], x - 1, y - 1)) + ); + } + + fade(t) { + return t * t * t * (t * (t * 6 - 15) + 10); + } + + lerp(t, a, b) { + return a + t * (b - a); + } + + grad(hash, x, y) { + const h = hash & 15; + const u = h < 8 ? x : y; + const v = h < 4 ? y : h === 12 || h === 14 ? x : 0; + return ((h & 1) === 0 ? u : -u) + ((h & 2) === 0 ? v : -v); + } + + /** + * Prüft ob dieser Chunk im sichtbaren Bereich ist + * @param {Camera} camera - Die Kamera + * @returns {boolean} - True wenn sichtbar + */ + isVisible(camera) { + const screenPos = camera.worldToScreen(this.worldX, this.worldY); + return screenPos.x < CANVAS_WIDTH + WORLD_CONFIG.CHUNK_SIZE && + screenPos.x + WORLD_CONFIG.CHUNK_SIZE > 0 && + screenPos.y < CANVAS_HEIGHT + WORLD_CONFIG.CHUNK_SIZE && + screenPos.y + WORLD_CONFIG.CHUNK_SIZE > 0; + } + + /** + * Rendert alle Boden-Tiles dieses Chunks + * @param {CanvasRenderingContext2D} ctx - Canvas-Kontext + * @param {Camera} camera - Kamera für Koordinaten-Transformation + */ + renderTiles(ctx, camera) { + if (!assetManager.isLoaded) return; + + this.tiles.forEach(tile => { + const screenPos = camera.worldToScreen(tile.x, tile.y); + + // Nur zeichnen wenn im sichtbaren Bereich + if (screenPos.x + tile.size < 0 || screenPos.x > CANVAS_WIDTH || + screenPos.y + tile.size < 0 || screenPos.y > CANVAS_HEIGHT) { + return; + } + + assetManager.drawSprite(ctx, tile.type, screenPos.x, screenPos.y, tile.size, tile.size); + }); + } +} + +/** + * Welt-Manager für Chunk-Loading und -Unloading + */ +class World { + constructor() { + this.chunks = new Map(); // Geladene Chunks (key: "x,y") + this.camera = new Camera(); + } + + /** + * Aktualisiert die Welt (lädt/entlädt Chunks basierend auf Spielerposition) + * @param {Player} player - Der Spieler + */ + update(player) { + // Kamera aktualisieren + this.camera.update(player); + + // Berechne welche Chunks geladen werden müssen + const playerChunkX = Math.floor(player.x / WORLD_CONFIG.CHUNK_SIZE); + const playerChunkY = Math.floor(player.y / WORLD_CONFIG.CHUNK_SIZE); + + const neededChunks = new Set(); + + // Chunks um den Spieler laden + for (let dx = -WORLD_CONFIG.RENDER_DISTANCE; dx <= WORLD_CONFIG.RENDER_DISTANCE; dx++) { + for (let dy = -WORLD_CONFIG.RENDER_DISTANCE; dy <= WORLD_CONFIG.RENDER_DISTANCE; dy++) { + const chunkX = playerChunkX + dx; + const chunkY = playerChunkY + dy; + const key = `${chunkX},${chunkY}`; + neededChunks.add(key); + + // Chunk laden falls nicht vorhanden + if (!this.chunks.has(key)) { + const chunk = new Chunk(chunkX, chunkY); + chunk.generate(); + this.chunks.set(key, chunk); + } + } + } + + // Entfernte Chunks entladen (Performance) + for (const [key, chunk] of this.chunks) { + if (!neededChunks.has(key)) { + this.chunks.delete(key); + console.log(`🗑️ Chunk (${chunk.chunkX}, ${chunk.chunkY}) entladen`); + } + } + } + + /** + * Gibt alle Ressourcen in geladenen Chunks zurück + * @returns {Array} - Array aller Ressourcen + */ + getAllResources() { + const allResources = []; + for (const chunk of this.chunks.values()) { + allResources.push(...chunk.resources); + } + return allResources; + } + + /** + * Zeichnet Chunk-Grenzen für Debugging + * @param {CanvasRenderingContext2D} ctx - Canvas-Kontext + */ + renderChunkBorders(ctx) { + ctx.strokeStyle = 'rgba(255, 255, 0, 0.3)'; + ctx.lineWidth = 1; + + for (const chunk of this.chunks.values()) { + if (chunk.isVisible(this.camera)) { + const screenPos = this.camera.worldToScreen(chunk.worldX, chunk.worldY); + ctx.strokeRect(screenPos.x, screenPos.y, WORLD_CONFIG.CHUNK_SIZE, WORLD_CONFIG.CHUNK_SIZE); + } + } + } +} + +// ===== SPIELER-KLASSE ===== + +/** + * Die Player-Klasse repräsentiert unseren Spielcharakter + * + * Warum eine Klasse? + * - Organisiert alle spielerbezogenen Daten und Funktionen + * - Macht den Code wiederverwendbar und erweiterbar + * - Trennt Spielerlogik vom Rest des Spiels (Separation of Concerns) + */ +class Player { + /** + * Konstruktor - wird beim Erstellen eines neuen Spielers aufgerufen + * @param {number} x - Startposition X + * @param {number} y - Startposition Y + */ + constructor(x, y) { + // Position des Spielers (Mittelpunkt) + this.x = x; + this.y = y; + + // Größe des Spielers (Quadrat) + this.width = 20; + this.height = 20; + + // Bewegungsgeschwindigkeit (Pixel pro Frame) + this.speed = 3; + + // Farbe des Spielers + this.color = '#FF6B6B'; // Rot + + // Gesundheit (Survival-Aspekt) + this.health = 100; + this.maxHealth = 100; + + // Gesundheits-Timer (für langsame Abnahme) + this.healthTimer = 0; + this.healthDecayRate = 300; // Alle 5 Sekunden (300 Frames bei 60 FPS) + + // Inventar + this.inventory = { + stick: 0, // Stöcker (für Werkzeuge) + wood: 0, // Holz (von Bäumen mit Axt) + stone: 0 // Stein (von Felsen mit Pickaxe) + }; + + // Werkzeug-System + this.tools = { + axe: false, // Kann Bäume abbauen + pickaxe: false // Kann Steine abbauen + }; + } + + /** + * Update-Methode - wird jeden Frame aufgerufen + * Hier wird die Spielerbewegung basierend auf Eingaben berechnet + */ + update() { + // Bewegungsvektor berechnen (Richtung der Bewegung) + let moveX = 0; + let moveY = 0; + + // Eingaben in Bewegungsvektor umwandeln + if (keys.left || keys.a) { + moveX -= 1; + } + if (keys.right || keys.d) { + moveX += 1; + } + if (keys.up || keys.w) { + moveY -= 1; + } + if (keys.down || keys.s) { + moveY += 1; + } + + // Vektornormalisierung für gleichmäßige Geschwindigkeit + // Problem: Bei diagonaler Bewegung ist die Geschwindigkeit √2 ≈ 1.41x schneller + // Lösung: Vektor normalisieren (Länge = 1) und dann mit Geschwindigkeit multiplizieren + if (moveX !== 0 || moveY !== 0) { + // Länge des Vektors berechnen (Pythagoras: √(x² + y²)) + const length = Math.sqrt(moveX * moveX + moveY * moveY); + + // Vektor normalisieren (durch Länge teilen) + moveX = moveX / length; + moveY = moveY / length; + + // Mit gewünschter Geschwindigkeit multiplizieren + this.x += moveX * this.speed; + this.y += moveY * this.speed; + } + + // In der unendlichen Welt gibt es keine Grenzen! + // Der Spieler kann sich frei bewegen, die Kamera folgt ihm + + // Gesundheits-System aktualisieren + this.updateHealth(); + } + + /** + * Aktualisiert das Gesundheitssystem + * Gesundheit nimmt langsam ab, regeneriert sich am Lagerfeuer + */ + updateHealth() { + this.healthTimer++; + + // Prüfen ob Spieler in der Nähe eines Lagerfeuers ist + let nearCampfire = false; + campfires.forEach(campfire => { + const distance = Math.sqrt( + (this.x - campfire.x) ** 2 + (this.y - campfire.y) ** 2 + ); + if (distance < 50) { // 50 Pixel Radius + nearCampfire = true; + } + }); + + if (nearCampfire) { + // Gesundheit regenerieren am Lagerfeuer + if (this.healthTimer >= 60) { // Jede Sekunde + this.health = Math.min(this.maxHealth, this.health + 2); + this.healthTimer = 0; + } + } else { + // Gesundheit nimmt langsam ab + if (this.healthTimer >= this.healthDecayRate) { + this.health = Math.max(0, this.health - 5); + this.healthTimer = 0; + + if (this.health <= 0) { + console.log('💀 Game Over! Deine Gesundheit ist auf 0 gefallen.'); + // Hier könnte später ein Game Over Screen kommen + } + } + } + } + + /** + * Render-Methode - zeichnet den Spieler auf das Canvas + * @param {CanvasRenderingContext2D} ctx - Der Canvas-Kontext + * @param {Camera} camera - Die Kamera für Koordinaten-Transformation + */ + render(ctx, camera) { + // Weltkoordinaten zu Bildschirmkoordinaten konvertieren + const screenPos = camera.worldToScreen(this.x, this.y); + + // Spieler zeichnen + if (assetManager.isLoaded) { + // Verwende ein Pointer-Sprite für den Spieler + assetManager.drawSprite( + ctx, + 'pointer1', // Verwende das erste Pointer-Sprite + screenPos.x - this.width / 2, + screenPos.y - this.height / 2, + this.width, + this.height + ); + } else { + // Fallback: Einfaches Rechteck + ctx.fillStyle = this.color; + ctx.fillRect( + screenPos.x - this.width/2, // X-Position (links) + screenPos.y - this.height/2, // Y-Position (oben) + this.width, // Breite + this.height // Höhe + ); + + // Schwarzer Rand für bessere Sichtbarkeit + ctx.strokeStyle = '#000000'; + ctx.lineWidth = 2; + ctx.strokeRect( + screenPos.x - this.width/2, + screenPos.y - this.height/2, + this.width, + this.height + ); + } + } +} + +// ===== EINGABE-SYSTEM ===== + +/** + * Das keys-Objekt speichert den Zustand aller Tasten + * + * Warum so? + * - Ermöglicht gleichzeitiges Drücken mehrerer Tasten (z.B. diagonal laufen) + * - Saubere Trennung zwischen Eingabe-Erkennung und Spiellogik + * - Einfach erweiterbar für neue Tasten + */ +const keys = { + left: false, + right: false, + up: false, + down: false, + w: false, + a: false, + s: false, + d: false, + e: false, // Lagerfeuer + q: false, // Axt + r: false, // Pickaxe + tab: false // Inventar toggle +}; + +// UI-Zustand +let showInventory = false; // Inventar standardmäßig ausgeblendet + +/** + * Event-Listener für Tastendruck (keydown) + * Wird aufgerufen, wenn eine Taste gedrückt wird + */ +window.addEventListener('keydown', (event) => { + // event.code gibt uns den physischen Tastencode + switch(event.code) { + case 'ArrowLeft': + keys.left = true; + break; + case 'ArrowRight': + keys.right = true; + break; + case 'ArrowUp': + keys.up = true; + break; + case 'ArrowDown': + keys.down = true; + break; + case 'KeyW': + keys.w = true; + break; + case 'KeyA': + keys.a = true; + break; + case 'KeyS': + keys.s = true; + break; + case 'KeyD': + keys.d = true; + break; + case 'KeyE': + keys.e = true; + break; + case 'KeyQ': + keys.q = true; + break; + case 'KeyR': + keys.r = true; + break; + case 'Tab': + keys.tab = true; + break; + } + + // Verhindert Standard-Browser-Verhalten (z.B. Scrollen mit Pfeiltasten) + event.preventDefault(); +}); + +/** + * Event-Listener für Taste loslassen (keyup) + * Wird aufgerufen, wenn eine Taste losgelassen wird + */ +window.addEventListener('keyup', (event) => { + switch(event.code) { + case 'ArrowLeft': + keys.left = false; + break; + case 'ArrowRight': + keys.right = false; + break; + case 'ArrowUp': + keys.up = false; + break; + case 'ArrowDown': + keys.down = false; + break; + case 'KeyW': + keys.w = false; + break; + case 'KeyA': + keys.a = false; + break; + case 'KeyS': + keys.s = false; + break; + case 'KeyD': + keys.d = false; + break; + case 'KeyE': + keys.e = false; + break; + case 'KeyQ': + keys.q = false; + break; + case 'KeyR': + keys.r = false; + break; + case 'Tab': + keys.tab = false; + break; + } +}); + +// ===== RESSOURCEN-KLASSE ===== + +/** + * Die Resource-Klasse repräsentiert sammelbare Objekte in der Spielwelt + * + * Verschiedene Ressourcentypen: + * - 'tree': Bäume für Holz + * - 'rock': Felsen für Stein + */ +class Resource { + /** + * Konstruktor für eine neue Ressource + * @param {number} x - X-Position + * @param {number} y - Y-Position + * @param {string} type - Typ der Ressource ('tree', 'rock', 'stick') + * @param {string} spriteKey - Schlüssel für das Sprite im AssetManager + */ + constructor(x, y, type, spriteKey = null) { + this.x = x; + this.y = y; + this.type = type; + this.spriteKey = spriteKey; + + // Eigenschaften basierend auf Typ setzen + if (type === 'tree') { + this.width = 64; + this.height = 64; + this.color = '#228B22'; // Waldgrün (Fallback) + this.resource = 'wood'; // Was der Spieler erhält + this.amount = 3; // Wie viel er erhält + this.spriteKey = spriteKey || 'tree1'; + } else if (type === 'rock') { + this.width = 48; + this.height = 48; + this.color = '#696969'; // Dunkelgrau (Fallback) + this.resource = 'stone'; // Was der Spieler erhält + this.amount = 2; // Wie viel er erhält + this.spriteKey = spriteKey || 'stone1'; + } else if (type === 'stick') { + this.width = 32; + this.height = 32; + this.color = '#8B4513'; // Braun (Fallback) + this.resource = 'stick'; // Was der Spieler erhält + this.amount = 1; // Wie viel er erhält + this.spriteKey = spriteKey || 'stick1'; + } + + // Ob die Ressource noch sammelbar ist + this.collected = false; + } + + /** + * Prüft, ob der Spieler diese Ressource berührt (Kollisionserkennung) + * @param {Player} player - Der Spieler + * @returns {boolean} - True wenn Kollision + */ + checkCollision(player) { + // AABB (Axis-Aligned Bounding Box) Kollisionserkennung + // Zwei Rechtecke überlappen sich, wenn sie sich in beiden Achsen überlappen + + // Grenzen der Ressource + const resLeft = this.x - this.width / 2; + const resRight = this.x + this.width / 2; + const resTop = this.y - this.height / 2; + const resBottom = this.y + this.height / 2; + + // Grenzen des Spielers + const playerLeft = player.x - player.width / 2; + const playerRight = player.x + player.width / 2; + const playerTop = player.y - player.height / 2; + const playerBottom = player.y + player.height / 2; + + // Kollision prüfen + return resLeft < playerRight && + resRight > playerLeft && + resTop < playerBottom && + resBottom > playerTop; + } + + /** + * Sammelt die Ressource und gibt sie an das Inventar weiter + * @param {Object} inventory - Das Spieler-Inventar + * @param {Player} player - Der Spieler (für Werkzeug-Überprüfung) + */ + collect(player) { + if (!this.collected) { + // Prüfen ob das richtige Werkzeug vorhanden ist + if (this.type === 'tree' && !player.tools.axe) { + console.log('🪓 Du brauchst eine Axt um Bäume zu fällen!'); + return false; + } + if (this.type === 'rock' && !player.tools.pickaxe) { + console.log('⛏️ Du brauchst eine Spitzhacke um Steine abzubauen!'); + return false; + } + + this.collected = true; + + // Ressource zum Spieler-Inventar hinzufügen + if (!player.inventory[this.resource]) { + player.inventory[this.resource] = 0; + } + player.inventory[this.resource] += this.amount; + + console.log(`📦 ${this.amount} ${this.resource} gesammelt! Gesamt: ${player.inventory[this.resource]}`); + return true; + } + return false; + } + + /** + * Zeichnet die Ressource auf das Canvas + * @param {CanvasRenderingContext2D} ctx - Der Canvas-Kontext + * @param {Camera} camera - Die Kamera für Koordinaten-Transformation + */ + render(ctx, camera) { + if (!this.collected) { + // Weltkoordinaten zu Bildschirmkoordinaten konvertieren + const screenPos = camera.worldToScreen(this.x, this.y); + + // Nur zeichnen wenn im sichtbaren Bereich + if (screenPos.x + this.width/2 < 0 || screenPos.x - this.width/2 > CANVAS_WIDTH || + screenPos.y + this.height/2 < 0 || screenPos.y - this.height/2 > CANVAS_HEIGHT) { + return; // Außerhalb des Bildschirms + } + + // Schatten zeichnen (für 3D-Effekt) + if (assetManager.isLoaded && (this.type === 'tree' || this.type === 'rock')) { + const shadowKey = this.type === 'tree' ? 'shadow2' : 'shadow1'; + assetManager.drawSprite( + ctx, + shadowKey, + screenPos.x - this.width/2 + 5, + screenPos.y - this.height/2 + this.height - 10, + this.width, + 16 + ); + } + + // Sprite zeichnen falls Assets geladen sind + if (assetManager.isLoaded && this.spriteKey) { + assetManager.drawSprite( + ctx, + this.spriteKey, + screenPos.x - this.width/2, + screenPos.y - this.height/2, + this.width, + this.height + ); + } else { + // Fallback: Einfache Rechtecke + ctx.fillStyle = this.color; + ctx.fillRect( + screenPos.x - this.width / 2, + screenPos.y - this.height / 2, + this.width, + this.height + ); + + // Schwarzer Rand + ctx.strokeStyle = '#000000'; + ctx.lineWidth = 1; + ctx.strokeRect( + screenPos.x - this.width / 2, + screenPos.y - this.height / 2, + this.width, + this.height + ); + + // Spezielle Darstellung für Bäume (Krone) + if (this.type === 'tree') { + // Baumkrone (Kreis oben) + ctx.fillStyle = '#006400'; // Dunkelgrün + ctx.beginPath(); + ctx.arc(screenPos.x, screenPos.y - this.height/3, this.width/2, 0, Math.PI * 2); + ctx.fill(); + ctx.stroke(); + } + } + } + } +} + +// ===== LAGERFEUER-KLASSE ===== + +/** + * Die Campfire-Klasse repräsentiert ein gebautes Lagerfeuer + * + * Funktionen: + * - Regeneriert Spieler-Gesundheit in der Nähe + * - Kann mit Holz gebaut werden + * - Visueller Indikator für sichere Zonen + */ +class Campfire { + /** + * Konstruktor für ein neues Lagerfeuer + * @param {number} x - X-Position + * @param {number} y - Y-Position + */ + constructor(x, y) { + this.x = x; + this.y = y; + this.width = 48; + this.height = 48; + + // Animation für Torch-Sprites + this.animationTimer = 0; + this.animationSpeed = 0.15; // Geschwindigkeit der Animation + this.currentFrame = 0; + this.totalFrames = 4; // torch1, torch2, torch3, torch4 + } + + /** + * Aktualisiert die Lagerfeuer-Animation + */ + update() { + // Torch-Sprite Animation + this.animationTimer += this.animationSpeed; + + if (this.animationTimer >= 1) { + this.currentFrame = (this.currentFrame + 1) % this.totalFrames; + this.animationTimer = 0; + } + } + + /** + * Zeichnet das Lagerfeuer + * @param {CanvasRenderingContext2D} ctx - Der Canvas-Kontext + * @param {Camera} camera - Die Kamera für Koordinaten-Transformation + */ + render(ctx, camera) { + // Weltkoordinaten zu Bildschirmkoordinaten konvertieren + const screenPos = camera.worldToScreen(this.x, this.y); + + // Nur zeichnen wenn im sichtbaren Bereich + if (screenPos.x + 50 < 0 || screenPos.x - 50 > CANVAS_WIDTH || + screenPos.y + 50 < 0 || screenPos.y - 50 > CANVAS_HEIGHT) { + return; // Außerhalb des Bildschirms + } + + // Heilungsradius anzeigen (halbtransparent) + ctx.fillStyle = 'rgba(0, 255, 0, 0.1)'; + ctx.beginPath(); + ctx.arc(screenPos.x, screenPos.y, 50, 0, Math.PI * 2); + ctx.fill(); + + // Rand um Heilungsradius + ctx.strokeStyle = 'rgba(0, 255, 0, 0.3)'; + ctx.lineWidth = 2; + ctx.stroke(); + + // Animiertes Torch-Sprite zeichnen + if (assetManager.isLoaded) { + const torchKey = `torch${this.currentFrame + 1}`; + assetManager.drawSprite( + ctx, + torchKey, + screenPos.x - this.width/2, + screenPos.y - this.height/2, + this.width, + this.height + ); + } else { + // Fallback: Einfaches Lagerfeuer + ctx.fillStyle = '#8B4513'; // Braun + ctx.fillRect( + screenPos.x - this.width/2, + screenPos.y - this.height/2, + this.width, + this.height + ); + + // Flammen (animiert) + ctx.fillStyle = '#FF4500'; // Orange-Rot + ctx.fillRect( + screenPos.x - this.width/3, + screenPos.y - this.height/2 - 15, + this.width/1.5, + 15 + ); + } + } +} + +// ===== SPIEL-OBJEKTE ===== + +// Welt-Instanz erstellen +let world; + +// Spieler-Instanz erstellen (Startposition in der Weltmitte) +let player; + +// Array für alle Lagerfeuer (bleiben global, da sie vom Spieler gebaut werden) +let campfires = []; + +// Crafting-Rezepte +const recipes = { + axe: { + name: 'Axt', + cost: { stick: 2 }, + description: 'Ermöglicht das Fällen von Bäumen', + tool: true + }, + pickaxe: { + name: 'Spitzhacke', + cost: { stick: 1, wood: 2 }, + description: 'Ermöglicht das Abbauen von Steinen', + tool: true + }, + campfire: { + name: 'Lagerfeuer', + cost: { wood: 5 }, + description: 'Regeneriert Gesundheit in der Nähe' + } +}; + +/** + * Versucht ein Item zu craften + * @param {string} itemType - Der Typ des Items (z.B. 'axe', 'pickaxe', 'campfire') + */ +function craftItem(itemType) { + const recipe = recipes[itemType]; + if (!recipe) { + console.log(`❌ Unbekanntes Rezept: ${itemType}`); + return false; + } + + // Prüfen ob genügend Ressourcen vorhanden sind + for (const [resource, amount] of Object.entries(recipe.cost)) { + if (!player.inventory[resource] || player.inventory[resource] < amount) { + console.log(`❌ Nicht genügend ${resource}! Benötigt: ${amount}, Vorhanden: ${player.inventory[resource] || 0}`); + return false; + } + } + + // Spezielle Überprüfungen für Werkzeuge + if (itemType === 'axe' && player.tools.axe) { + console.log('🪓 Du hast bereits eine Axt!'); + return false; + } + if (itemType === 'pickaxe' && player.tools.pickaxe) { + console.log('⛏️ Du hast bereits eine Spitzhacke!'); + return false; + } + + // Ressourcen abziehen + for (const [resource, amount] of Object.entries(recipe.cost)) { + player.inventory[resource] -= amount; + } + + // Item erstellen + if (itemType === 'axe') { + player.tools.axe = true; + console.log(`🪓 ${recipe.name} erfolgreich hergestellt!`); + } else if (itemType === 'pickaxe') { + player.tools.pickaxe = true; + console.log(`⛏️ ${recipe.name} erfolgreich hergestellt!`); + } else if (itemType === 'campfire') { + // Lagerfeuer an Spielerposition erstellen + campfires.push(new Campfire(player.x, player.y)); + console.log(`🔥 ${recipe.name} erfolgreich gebaut!`); + } + + return true; +} + +// Die Ressourcen-Generierung wird jetzt von den Chunks übernommen! +// Jeder Chunk generiert automatisch Ressourcen basierend auf seiner Position + +// ===== GRUNDLEGENDE ZEICHENFUNKTIONEN ===== + +/** + * Diese Funktion löscht das gesamte Canvas und zeichnet einen blauen Hintergrund + * + * Warum brauchen wir das? + * - In jedem Frame müssen wir das Canvas "sauber machen" + * - Sonst würden sich die gezeichneten Objekte überlagern + * - Der blaue Hintergrund simuliert einen Himmel oder Wasser + */ +function clearCanvas() { + // Schritt 1: Das gesamte Canvas löschen (transparent machen) + ctx.clearRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); + + // Schritt 2: Einen blauen Hintergrund zeichnen + ctx.fillStyle = '#87CEEB'; // Himmelblau (Sky Blue) + ctx.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); +} + +/** + * Die Render-Funktion - hier wird alles gezeichnet + * + * Das ist das Herzstück unseres Spiels: + * - Wird in jedem Frame aufgerufen + * - Zeichnet alle Spielobjekte in der richtigen Reihenfolge + * - Reihenfolge: Hintergrund → Boden-Tiles → Schatten → Objekte (Y-sortiert) → UI + */ +function render() { + // Canvas leeren und Hintergrund zeichnen + clearCanvas(); + + if (!world || !player) return; + + // 1. Boden-Tiles zeichnen (unterste Ebene) + for (const chunk of world.chunks.values()) { + if (chunk.isVisible(world.camera)) { + chunk.renderTiles(ctx, world.camera); + } + } + + // 2. Alle sichtbaren Objekte sammeln und nach Y-Position sortieren + const allObjects = []; + + // Ressourcen hinzufügen (nur sichtbare) + const allResources = world.getAllResources(); + allResources.forEach(resource => { + if (!resource.collected) { + const screenPos = world.camera.worldToScreen(resource.x, resource.y); + // Nur hinzufügen wenn im sichtbaren Bereich + if (screenPos.x + resource.width >= -50 && screenPos.x <= CANVAS_WIDTH + 50 && + screenPos.y + resource.height >= -50 && screenPos.y <= CANVAS_HEIGHT + 50) { + allObjects.push({ + type: 'resource', + object: resource, + // Sortierung nach Fußpunkt für korrekte Tiefe + y: resource.y + resource.height, + zIndex: resource.type === 'stick' ? 1 : (resource.type === 'tree' ? 3 : 2) + }); + } + } + }); + + // Lagerfeuer hinzufügen (nur sichtbare) + campfires.forEach(campfire => { + const screenPos = world.camera.worldToScreen(campfire.x, campfire.y); + if (screenPos.x + 50 >= -50 && screenPos.x <= CANVAS_WIDTH + 50 && + screenPos.y + 50 >= -50 && screenPos.y <= CANVAS_HEIGHT + 50) { + allObjects.push({ + type: 'campfire', + object: campfire, + y: campfire.y + campfire.height, + zIndex: 2 + }); + } + }); + + // Spieler hinzufügen + allObjects.push({ + type: 'player', + object: player, + y: player.y + player.height, + zIndex: 4 // Spieler immer über allem anderen + }); + + // 3. Nach Z-Index und dann Y-Position sortieren + allObjects.sort((a, b) => { + // Erst nach Z-Index sortieren + if (a.zIndex !== b.zIndex) { + return a.zIndex - b.zIndex; + } + // Dann nach Y-Position (Tiefe) + return a.y - b.y; + }); + + // 4. Alle Objekte in der sortierten Reihenfolge zeichnen + allObjects.forEach(item => { + switch(item.type) { + case 'resource': + item.object.render(ctx, world.camera); + break; + case 'campfire': + item.object.render(ctx, world.camera); + break; + case 'player': + item.object.render(ctx, world.camera); + break; + } + }); + + // 5. UI zeichnen (immer ganz oben) + renderUI(); + + // Hier werden später weitere Spielobjekte gezeichnet: + // - Feinde + // - Partikeleffekte + // - Weitere Gebäude +} + +/** + * Zeichnet die Benutzeroberfläche (UI) + * Zeigt Gesundheit immer an, Inventar nur bei Tab-Taste + */ +function renderUI() { + // Gesundheitsbalken (immer sichtbar, oben links) + const healthBarWidth = 200; + const healthBarHeight = 20; + const healthBarX = 10; + const healthBarY = 10; + + // Hintergrund der Gesundheitsleiste + ctx.fillStyle = 'rgba(0, 0, 0, 0.7)'; + ctx.fillRect(healthBarX, healthBarY, healthBarWidth, healthBarHeight + 30); + + ctx.strokeStyle = '#FFFFFF'; + ctx.lineWidth = 2; + ctx.strokeRect(healthBarX, healthBarY, healthBarWidth, healthBarHeight + 30); + + // Gesundheits-Text + ctx.fillStyle = '#FFFFFF'; + ctx.font = '16px Arial'; + ctx.fillText('❤️ Gesundheit:', healthBarX + 10, healthBarY + 20); + + // Gesundheitsbalken-Hintergrund + ctx.fillStyle = '#333333'; + ctx.fillRect(healthBarX + 10, healthBarY + 25, healthBarWidth - 20, 15); + + // Gesundheitsbalken (rot bis grün je nach Gesundheit) + const healthPercent = player ? player.health / player.maxHealth : 0; + const healthColor = healthPercent > 0.6 ? '#00FF00' : + healthPercent > 0.3 ? '#FFFF00' : '#FF0000'; + + ctx.fillStyle = healthColor; + ctx.fillRect(healthBarX + 10, healthBarY + 25, (healthBarWidth - 20) * healthPercent, 15); + + // Gesundheits-Zahlen + ctx.fillStyle = '#FFFFFF'; + ctx.font = '12px Arial'; + const healthText = player ? `${Math.round(player.health)}/${player.maxHealth}` : '0/100'; + ctx.fillText(healthText, healthBarX + healthBarWidth/2 - 15, healthBarY + 36); + + // Tab-Hinweis (klein, unten rechts) + ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; + ctx.fillRect(CANVAS_WIDTH - 120, CANVAS_HEIGHT - 30, 110, 20); + + ctx.strokeStyle = '#FFFFFF'; + ctx.lineWidth = 1; + ctx.strokeRect(CANVAS_WIDTH - 120, CANVAS_HEIGHT - 30, 110, 20); + + ctx.fillStyle = '#FFFFFF'; + ctx.font = '12px Arial'; + ctx.fillText('Tab = Inventar', CANVAS_WIDTH - 115, CANVAS_HEIGHT - 15); + + // Inventar nur anzeigen wenn Tab gedrückt wurde + if (showInventory) { + renderInventoryPanel(); + } +} + +/** + * Zeichnet das Inventar-Panel (nur wenn sichtbar) + */ +function renderInventoryPanel() { + // Inventar-Panel (zentriert) + const panelWidth = 500; + const panelHeight = 300; + const panelX = (CANVAS_WIDTH - panelWidth) / 2; + const panelY = (CANVAS_HEIGHT - panelHeight) / 2; + + // Halbtransparenter Hintergrund über dem ganzen Bildschirm + ctx.fillStyle = 'rgba(0, 0, 0, 0.5)'; + ctx.fillRect(0, 0, CANVAS_WIDTH, CANVAS_HEIGHT); + + // Inventar-Panel + ctx.fillStyle = 'rgba(20, 20, 20, 0.95)'; + ctx.fillRect(panelX, panelY, panelWidth, panelHeight); + + ctx.strokeStyle = '#FFFFFF'; + ctx.lineWidth = 3; + ctx.strokeRect(panelX, panelY, panelWidth, panelHeight); + + // Titel + ctx.fillStyle = '#FFFFFF'; + ctx.font = 'bold 24px Arial'; + ctx.fillText('📦 INVENTAR', panelX + 20, panelY + 40); + + // Schließen-Hinweis + ctx.font = '14px Arial'; + ctx.fillText('Tab drücken zum Schließen', panelX + panelWidth - 180, panelY + 40); + + // Ressourcen (linke Spalte) + ctx.font = '18px Arial'; + ctx.fillText('🎒 Ressourcen:', panelX + 30, panelY + 80); + + ctx.font = '16px Arial'; + ctx.fillText(`🪵 Stöcker: ${player.inventory.stick}`, panelX + 50, panelY + 110); + ctx.fillText(`🌳 Holz: ${player.inventory.wood}`, panelX + 50, panelY + 140); + ctx.fillText(`🪨 Stein: ${player.inventory.stone}`, panelX + 50, panelY + 170); + + // Werkzeuge (rechte Spalte) + ctx.font = '18px Arial'; + ctx.fillText('🔧 Werkzeuge:', panelX + 280, panelY + 80); + + ctx.font = '16px Arial'; + ctx.fillText(`🪓 Axt: ${player.tools.axe ? '✅ Vorhanden' : '❌ Nicht vorhanden'}`, panelX + 300, panelY + 110); + ctx.fillText(`⛏️ Pickaxe: ${player.tools.pickaxe ? '✅ Vorhanden' : '❌ Nicht vorhanden'}`, panelX + 300, panelY + 140); + + // Crafting-Rezepte (unten) + ctx.font = '18px Arial'; + ctx.fillText('🔨 Crafting-Rezepte:', panelX + 30, panelY + 220); + + ctx.font = '14px Arial'; + ctx.fillText('Q = Axt (2 Stöcker)', panelX + 50, panelY + 250); + ctx.fillText('R = Pickaxe (1 Stock + 2 Holz)', panelX + 220, panelY + 250); + ctx.fillText('E = Lagerfeuer (5 Holz)', panelX + 50, panelY + 275); +} + +/** + * Die Update-Funktion - hier wird die Spiellogik berechnet + * + * Trennung von Logik und Darstellung: + * - update() = Was passiert (Bewegung, Kollisionen, Spielregeln) + * - render() = Wie es aussieht (Zeichnen auf das Canvas) + */ +function update() { + // Spieler aktualisieren (Bewegung basierend auf Eingaben) + if (player) { + player.update(); + } + + // Welt aktualisieren (Chunks laden/entladen basierend auf Spielerposition) + if (world) { + world.update(player); + } + + // Lagerfeuer aktualisieren (Animation) + campfires.forEach(campfire => { + campfire.update(); + }); + + // Kollisionserkennung: Spieler mit Ressourcen aus allen geladenen Chunks + if (world) { + const allResources = world.getAllResources(); + allResources.forEach(resource => { + if (!resource.collected && resource.checkCollision(player)) { + resource.collect(player); + } + }); + } + + // Tab-Taste für Inventar-Toggle + if (keys.tab) { + showInventory = !showInventory; + keys.tab = false; // Verhindert mehrfaches Umschalten + } + + // Crafting-Eingaben prüfen + if (keys.q) { + craftItem('axe'); + keys.q = false; // Verhindert mehrfaches Crafting + } + if (keys.r) { + craftItem('pickaxe'); + keys.r = false; + } + if (keys.e) { + craftItem('campfire'); + keys.e = false; + } + + // Hier wird später weitere Spiellogik stehen: + // - Feinde bewegen + // - Weitere Crafting-Rezepte + // - Wetter-System +} + +/** + * Der Game Loop - das Herz jedes Spiels + * + * Was ist ein Game Loop? + * - Eine endlose Schleife, die das Spiel am Leben hält + * - Läuft idealerweise 60 mal pro Sekunde (60 FPS) + * - In jedem Durchlauf: Update → Render → Warten → Wiederholen + * + * requestAnimationFrame(): + * - Browser-optimierte Funktion für Animationen + * - Synchronisiert sich automatisch mit der Bildschirmfrequenz + * - Pausiert automatisch, wenn der Tab nicht sichtbar ist (Energiesparen) + */ +function gameLoop() { + // 1. Spiellogik aktualisieren + update(); + + // 2. Alles neu zeichnen + render(); + + // 3. Nächsten Frame anfordern (rekursiver Aufruf) + requestAnimationFrame(gameLoop); +} + +// ===== SPIEL STARTEN ===== + +/** + * Initialisierungsfunktion - wird einmal beim Laden der Seite aufgerufen + */ +async function init() { + console.log('🎮 Pixel-Überlebender wird gestartet...'); + console.log(`📐 Canvas-Größe: ${CANVAS_WIDTH}x${CANVAS_HEIGHT} Pixel`); + + // Assets laden + console.log('🎨 Lade Grafiken...'); + const assetsLoaded = await assetManager.loadAllAssets(); + + if (!assetsLoaded) { + console.error('❌ Fehler beim Laden der Assets! Spiel startet mit Fallback-Grafiken.'); + } + + // Welt erstellen + world = new World(); + console.log('🌍 Unendliche prozedurale Welt erstellt!'); + + // Spieler in der Weltmitte erstellen (0, 0 in Weltkoordinaten) + player = new Player(0, 0); + console.log(`👤 Spieler erstellt an Position (${player.x}, ${player.y})`); + + // Ersten Frame zeichnen + render(); + + // Game Loop starten + gameLoop(); + + console.log('✅ Spiel erfolgreich gestartet!'); + console.log('🎯 Verwende Pfeiltasten oder WASD zum Bewegen!'); + console.log('📦 Berühre Bäume und Felsen zum Sammeln!'); + console.log('📋 Tab = Inventar öffnen/schließen'); + console.log('🔨 Crafting: Q=Axt, R=Pickaxe, E=Lagerfeuer'); + console.log('🪵 Sammle zuerst Stöcker für eine Axt!'); + console.log('🪓 Mit Axt kannst du Bäume fällen'); + console.log('⛏️ Mit Pickaxe kannst du Steine abbauen'); + console.log('❤️ Deine Gesundheit nimmt langsam ab - bleibe am Lagerfeuer!'); + console.log('🗺️ Erkunde die unendliche Welt - neue Chunks werden automatisch geladen!'); + + if (assetsLoaded) { + console.log('✨ Alle Grafiken geladen! Genieße das verbesserte Spielerlebnis!'); + } +} + +// Warten bis die HTML-Seite vollständig geladen ist, dann das Spiel starten +// Das ist wichtig, damit das Canvas-Element bereits existiert +window.addEventListener('load', init); + +// ===== ERKLÄRUNG DER CANVAS-GRUNDLAGEN ===== +/* + +WAS IST DAS CANVAS-ELEMENT? +============================ + +Das -Element ist ein HTML5-Element, das uns eine programmierbare +Zeichenfläche zur Verfügung stellt. Stell dir vor, es ist wie ein digitales +Blatt Papier, auf das wir mit JavaScript zeichnen können. + +Wichtige Eigenschaften: +- Pixelbasiert: Jeder Punkt auf dem Canvas ist ein Pixel +- Koordinatensystem: (0,0) ist oben links, X geht nach rechts, Y nach unten +- Sofortiger Modus: Was gezeichnet wird, bleibt bis zum nächsten Löschen + +WIE GREIFEN WIR DARAUF ZU? +========================== + +1. Element holen: document.getElementById('gameCanvas') +2. Kontext erhalten: canvas.getContext('2d') +3. Mit dem Kontext zeichnen: ctx.fillRect(), ctx.drawImage(), etc. + +DER 2D-KONTEXT: +=============== + +Der Kontext ist unser "Werkzeugkasten" zum Zeichnen: +- fillRect(): Gefüllte Rechtecke +- strokeRect(): Rechteck-Umrisse +- fillStyle: Füllfarbe setzen +- clearRect(): Bereich löschen +- drawImage(): Bilder zeichnen + +KOORDINATENSYSTEM: +================== + +(0,0) -----> X (800) + | + | + | + v + Y (600) + +Das ist anders als in der Mathematik - hier ist Y=0 oben! + +*/ \ No newline at end of file diff --git a/index.html b/index.html new file mode 100644 index 0000000..4c6def2 --- /dev/null +++ b/index.html @@ -0,0 +1,57 @@ + + + + + + Pixel-Überlebender - 2D Survival Game + + + +
+

Pixel-Überlebender

+ + + + +
+

Steuerung: Pfeiltasten oder WASD zum Bewegen

+

Sammle Ressourcen und überlebe!

+
+
+ + + + + \ No newline at end of file