From 84748f2cde7497365cafd73c0fec7a599f2ede61 Mon Sep 17 00:00:00 2001 From: Jernej Habjan Date: Thu, 1 Feb 2024 20:47:41 +0100 Subject: [PATCH] Dungeon crawler --- apps/client/src/app/app-routing.module.ts | 15 + apps/client/src/app/app.component.ts | 10 +- .../src/app/dungeon-crawler/game/assets.ts | 48 + .../game/dungeonCrawlerScenes.ts | 5 + .../app/dungeon-crawler/game/game-config.ts | 23 + .../src/app/home/page/home-page.component.ts | 10 +- .../dungeon-crawler/character/fauna.json | 670 +++++++ .../dungeon-crawler/character/fauna.png | Bin 0 -> 6453 bytes .../dungeon-crawler/enemies/lizard.json | 231 +++ .../assets/dungeon-crawler/enemies/lizard.png | Bin 0 -> 1214 bytes .../dungeon-crawler/items/treasure.json | 183 ++ .../assets/dungeon-crawler/items/treasure.png | Bin 0 -> 726 bytes .../dungeon-crawler/tiles/dungeon-01.json | 1574 +++++++++++++++++ .../dungeon-crawler/tiles/dungeon_tiles.png | Bin 0 -> 8586 bytes .../dungeon-crawler/ui/ui_heart_empty.png | Bin 0 -> 204 bytes .../dungeon-crawler/ui/ui_heart_full.png | Bin 0 -> 214 bytes .../dungeon-crawler/weapons/weapon_knife.png | Bin 0 -> 621 bytes .../games/images/dungeon-crawler-banner.webp | Bin 0 -> 3632 bytes .../assets/games/images/dungeon-crawler.webp | Bin 0 -> 2784 bytes .../metadata/dungeon-crawler/dungeon-01.tmx | 884 +++++++++ 20 files changed, 3646 insertions(+), 7 deletions(-) create mode 100644 apps/client/src/app/dungeon-crawler/game/assets.ts create mode 100644 apps/client/src/app/dungeon-crawler/game/dungeonCrawlerScenes.ts create mode 100644 apps/client/src/app/dungeon-crawler/game/game-config.ts create mode 100644 apps/client/src/assets/dungeon-crawler/character/fauna.json create mode 100644 apps/client/src/assets/dungeon-crawler/character/fauna.png create mode 100644 apps/client/src/assets/dungeon-crawler/enemies/lizard.json create mode 100644 apps/client/src/assets/dungeon-crawler/enemies/lizard.png create mode 100644 apps/client/src/assets/dungeon-crawler/items/treasure.json create mode 100644 apps/client/src/assets/dungeon-crawler/items/treasure.png create mode 100644 apps/client/src/assets/dungeon-crawler/tiles/dungeon-01.json create mode 100644 apps/client/src/assets/dungeon-crawler/tiles/dungeon_tiles.png create mode 100644 apps/client/src/assets/dungeon-crawler/ui/ui_heart_empty.png create mode 100644 apps/client/src/assets/dungeon-crawler/ui/ui_heart_full.png create mode 100644 apps/client/src/assets/dungeon-crawler/weapons/weapon_knife.png create mode 100644 apps/client/src/assets/games/images/dungeon-crawler-banner.webp create mode 100644 apps/client/src/assets/games/images/dungeon-crawler.webp create mode 100644 apps/client/src/metadata/dungeon-crawler/dungeon-01.tmx diff --git a/apps/client/src/app/app-routing.module.ts b/apps/client/src/app/app-routing.module.ts index 2bbdbc09..586b8d89 100644 --- a/apps/client/src/app/app-routing.module.ts +++ b/apps/client/src/app/app-routing.module.ts @@ -126,6 +126,20 @@ const flySquasherRoutes = [ } ] satisfies Routes; +const dungeonCrawlerRoutes = [ + { + path: "dungeon-crawler", + children: [ + { + path: "", + loadComponent: () => + import("./dungeon-crawler/dungeon-crawler.component").then((m) => m.DungeonCrawlerComponent) + }, + { path: "**", redirectTo: "" } + ] + } +] satisfies Routes; + const routes = [ { path: "", @@ -139,6 +153,7 @@ const routes = [ ...littleMuncherRoutes, ...probableWaffleRoutes, ...flySquasherRoutes, + ...dungeonCrawlerRoutes, { path: "**", redirectTo: "" diff --git a/apps/client/src/app/app.component.ts b/apps/client/src/app/app.component.ts index 215aec33..c6b82d78 100644 --- a/apps/client/src/app/app.component.ts +++ b/apps/client/src/app/app.component.ts @@ -5,11 +5,11 @@ import { SwRefreshComponent } from "./shared/components/sw-refresh/sw-refresh.co import { RouterOutlet } from "@angular/router"; @Component({ - selector: "fuzzy-waddle-root", - templateUrl: "./app.component.html", - styleUrls: ["./app.component.scss"], - standalone: true, - imports: [RouterOutlet, SwRefreshComponent] + selector: "fuzzy-waddle-root", + templateUrl: "./app.component.html", + styleUrls: ["./app.component.scss"], + standalone: true, + imports: [RouterOutlet, SwRefreshComponent] }) export class AppComponent implements OnInit { protected readonly authService = inject(AuthService); diff --git a/apps/client/src/app/dungeon-crawler/game/assets.ts b/apps/client/src/app/dungeon-crawler/game/assets.ts new file mode 100644 index 00000000..22dc86fd --- /dev/null +++ b/apps/client/src/app/dungeon-crawler/game/assets.ts @@ -0,0 +1,48 @@ +export enum AssetsDungeon { + "tiles" = "tiles", + "dungeon" = "dungeon", + "faune" = "faune", + "lizard" = "lizard", + "treasure" = "treasure", + "heartEmpty" = "heartEmpty", + "heartFull" = "heartFull", + "knife" = "knife" +} + +// visible in tiled (tileset name) +export enum DungeonTilesetNames { + "dungeion" = "dungeion" +} + +// layers of tile map (visible in tiled) +export enum DungeonTilesetLayers { + "Walls" = "Walls", + "Ground" = "Ground" +} + +// custom names for animations +export enum AnimationsFaune { + "default" = "walk-down-3.png", + "idleDown" = "faune-idle-down", + "idleUp" = "faune-idle-up", + "idleSide" = "faune-idle-side", + "runDown" = "faune-run-down", + "runUp" = "faune-run-up", + "runSide" = "faune-run-side", + "faint" = "faune-faint" +} + +export enum AnimationsChest { + "open" = "chest-open", + "close" = "chest-close" +} + +export enum AnimationsLizard { + "default" = "lizard_m_idle_anim_f0.png", + "idle" = "idle", + "run" = "run" +} + +export enum DungeonCrawlerSceneEventTypes { + "playerHealthChanged" = "playerHealthChanged" +} diff --git a/apps/client/src/app/dungeon-crawler/game/dungeonCrawlerScenes.ts b/apps/client/src/app/dungeon-crawler/game/dungeonCrawlerScenes.ts new file mode 100644 index 00000000..6c176279 --- /dev/null +++ b/apps/client/src/app/dungeon-crawler/game/dungeonCrawlerScenes.ts @@ -0,0 +1,5 @@ +export enum DungeonCrawlerScenes { + "PreloadSceneDungeon" = "PreloadSceneDungeon", + "MainSceneDungeon" = "MainSceneDungeon", + "DungeonUi" = "DungeonUi" +} diff --git a/apps/client/src/app/dungeon-crawler/game/game-config.ts b/apps/client/src/app/dungeon-crawler/game/game-config.ts new file mode 100644 index 00000000..bc359b85 --- /dev/null +++ b/apps/client/src/app/dungeon-crawler/game/game-config.ts @@ -0,0 +1,23 @@ +import DungeonPreloader from "./scenes/DungeonPreloader"; +import Dungeon from "./scenes/Dungeon"; +import DungeonUi from "./scenes/DungeonUi"; +import { baseGameConfig } from "../../shared/game/base-game.config"; + +export const dungeonCrawlerGameConfig: Phaser.Types.Core.GameConfig = { + ...baseGameConfig, + width: window.innerWidth / 2, + height: window.innerHeight / 2, + physics: { + default: "arcade", + arcade: { + gravity: { y: 0 }, + debug: false + } + }, + pixelArt: true, + scale: { + zoom: 2, + mode: Phaser.Scale.CENTER_BOTH + }, + scene: [DungeonPreloader, Dungeon, DungeonUi] +}; diff --git a/apps/client/src/app/home/page/home-page.component.ts b/apps/client/src/app/home/page/home-page.component.ts index 53295956..90ba977c 100644 --- a/apps/client/src/app/home/page/home-page.component.ts +++ b/apps/client/src/app/home/page/home-page.component.ts @@ -27,7 +27,7 @@ export type DisplayGame = { }) export class HomePageComponent { protected readonly environment = environment; - private readonly currentlyFeaturedGame = "fly-squasher"; + private readonly currentlyFeaturedGame = "dungeon-crawler"; displayGames: DisplayGame[] = [ { name: "Probable Waffle", @@ -42,7 +42,6 @@ export class HomePageComponent { description: "Infinite scroller", image: "little-muncher.webp", bannerImage: "probable-waffle-banner.webp", - route: "little-muncher" }, { @@ -51,6 +50,13 @@ export class HomePageComponent { image: "fly-squasher.webp", bannerImage: "fly-squasher-banner.webp", route: "fly-squasher" + }, + { + name: "Dungeon Crawler", + description: "Creepy crawlies", + image: "dungeon-crawler.webp", + bannerImage: "dungeon-crawler-banner.webp", + route: "dungeon-crawler" } ]; diff --git a/apps/client/src/assets/dungeon-crawler/character/fauna.json b/apps/client/src/assets/dungeon-crawler/character/fauna.json new file mode 100644 index 00000000..42a4230f --- /dev/null +++ b/apps/client/src/assets/dungeon-crawler/character/fauna.json @@ -0,0 +1,670 @@ +{ + "textures": [ + { + "image": "fauna.png", + "format": "RGBA8888", + "size": { + "w": 130, + "h": 147 + }, + "scale": 1, + "frames": [ + { + "filename": "run-side-4.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 22 + }, + "frame": { + "x": 2, + "y": 2, + "w": 17, + "h": 22 + } + }, + { + "filename": "walk-side-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 22 + }, + "frame": { + "x": 23, + "y": 2, + "w": 17, + "h": 22 + } + }, + { + "filename": "run-down-1.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 8, + "w": 18, + "h": 22 + }, + "frame": { + "x": 2, + "y": 28, + "w": 18, + "h": 22 + } + }, + { + "filename": "walk-down-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 16, + "h": 22 + }, + "frame": { + "x": 24, + "y": 28, + "w": 16, + "h": 22 + } + }, + { + "filename": "run-down-5.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 8, + "w": 18, + "h": 22 + }, + "frame": { + "x": 44, + "y": 2, + "w": 18, + "h": 22 + } + }, + { + "filename": "run-side-1.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 44, + "y": 28, + "w": 18, + "h": 22 + } + }, + { + "filename": "run-side-2.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 18, + "h": 22 + }, + "frame": { + "x": 2, + "y": 54, + "w": 18, + "h": 22 + } + }, + { + "filename": "run-side-5.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 24, + "y": 54, + "w": 18, + "h": 22 + } + }, + { + "filename": "run-side-6.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 18, + "h": 22 + }, + "frame": { + "x": 46, + "y": 54, + "w": 18, + "h": 22 + } + }, + { + "filename": "run-side-8.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 22 + }, + "frame": { + "x": 66, + "y": 2, + "w": 17, + "h": 22 + } + }, + { + "filename": "run-up-6.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 17, + "h": 21 + }, + "frame": { + "x": 66, + "y": 28, + "w": 17, + "h": 21 + } + }, + { + "filename": "run-down-8.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 17, + "h": 21 + }, + "frame": { + "x": 2, + "y": 80, + "w": 17, + "h": 21 + } + }, + { + "filename": "run-down-2.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 16, + "h": 21 + }, + "frame": { + "x": 68, + "y": 53, + "w": 16, + "h": 21 + } + }, + { + "filename": "faint-1.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 17, + "h": 21 + }, + "frame": { + "x": 23, + "y": 80, + "w": 17, + "h": 21 + } + }, + { + "filename": "run-side-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 18, + "h": 21 + }, + "frame": { + "x": 44, + "y": 80, + "w": 18, + "h": 21 + } + }, + { + "filename": "faint-2.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 21 + }, + "frame": { + "x": 66, + "y": 80, + "w": 20, + "h": 21 + } + }, + { + "filename": "run-down-4.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 21 + }, + "frame": { + "x": 90, + "y": 2, + "w": 17, + "h": 21 + } + }, + { + "filename": "faint-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 14, + "w": 21, + "h": 15 + }, + "frame": { + "x": 87, + "y": 27, + "w": 21, + "h": 15 + } + }, + { + "filename": "run-side-7.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 18, + "h": 21 + }, + "frame": { + "x": 90, + "y": 46, + "w": 18, + "h": 21 + } + }, + { + "filename": "run-down-6.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 16, + "h": 21 + }, + "frame": { + "x": 90, + "y": 71, + "w": 16, + "h": 21 + } + }, + { + "filename": "run-up-1.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 19, + "h": 21 + }, + "frame": { + "x": 2, + "y": 105, + "w": 19, + "h": 21 + } + }, + { + "filename": "run-up-2.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 21 + }, + "frame": { + "x": 25, + "y": 105, + "w": 17, + "h": 21 + } + }, + { + "filename": "run-up-5.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 8, + "w": 19, + "h": 21 + }, + "frame": { + "x": 46, + "y": 105, + "w": 19, + "h": 21 + } + }, + { + "filename": "walk-up-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 6, + "w": 16, + "h": 21 + }, + "frame": { + "x": 69, + "y": 105, + "w": 16, + "h": 21 + } + }, + { + "filename": "run-up-4.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 20 + }, + "frame": { + "x": 90, + "y": 96, + "w": 17, + "h": 20 + } + }, + { + "filename": "run-up-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 16, + "h": 20 + }, + "frame": { + "x": 112, + "y": 2, + "w": 16, + "h": 20 + } + }, + { + "filename": "run-down-7.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 17, + "h": 20 + }, + "frame": { + "x": 111, + "y": 71, + "w": 17, + "h": 20 + } + }, + { + "filename": "run-up-7.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 17, + "h": 20 + }, + "frame": { + "x": 111, + "y": 95, + "w": 17, + "h": 20 + } + }, + { + "filename": "run-up-8.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 9, + "w": 17, + "h": 20 + }, + "frame": { + "x": 111, + "y": 119, + "w": 17, + "h": 20 + } + }, + { + "filename": "run-down-3.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 10, + "w": 16, + "h": 20 + }, + "frame": { + "x": 112, + "y": 26, + "w": 16, + "h": 20 + } + }, + { + "filename": "faint-4.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 14, + "w": 20, + "h": 15 + }, + "frame": { + "x": 2, + "y": 130, + "w": 20, + "h": 15 + } + } + ] + } + ], + "meta": { + "app": "http://free-tex-packer.com", + "version": "0.6.5" + } +} \ No newline at end of file diff --git a/apps/client/src/assets/dungeon-crawler/character/fauna.png b/apps/client/src/assets/dungeon-crawler/character/fauna.png new file mode 100644 index 0000000000000000000000000000000000000000..e2532b37612b826da0347ee91c4507c1f7e8395b GIT binary patch literal 6453 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 literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/dungeon-crawler/items/treasure.json b/apps/client/src/assets/dungeon-crawler/items/treasure.json new file mode 100644 index 00000000..fbab5c83 --- /dev/null +++ b/apps/client/src/assets/dungeon-crawler/items/treasure.json @@ -0,0 +1,183 @@ +{ + "frames": { + "chest_empty_open_anim_f0.png": { + "frame": { + "x": 2, + "y": 2, + "w": 16, + "h": 14 + }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 16, + "h": 14 + }, + "sourceSize": { + "w": 16, + "h": 16 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "chest_empty_open_anim_f1.png": { + "frame": { + "x": 2, + "y": 20, + "w": 16, + "h": 15 + }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 16, + "h": 15 + }, + "sourceSize": { + "w": 16, + "h": 16 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "chest_empty_open_anim_f2.png": { + "frame": { + "x": 22, + "y": 2, + "w": 16, + "h": 16 + }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 16, + "h": 16 + }, + "sourceSize": { + "w": 16, + "h": 16 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "coin_anim_f0.png": { + "frame": { + "x": 22, + "y": 22, + "w": 6, + "h": 7 + }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 6, + "h": 7 + }, + "sourceSize": { + "w": 8, + "h": 8 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "coin_anim_f1.png": { + "frame": { + "x": 32, + "y": 22, + "w": 4, + "h": 7 + }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 4, + "h": 7 + }, + "sourceSize": { + "w": 8, + "h": 8 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "coin_anim_f2.png": { + "frame": { + "x": 2, + "y": 39, + "w": 2, + "h": 7 + }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { + "x": 3, + "y": 1, + "w": 2, + "h": 7 + }, + "sourceSize": { + "w": 8, + "h": 8 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + }, + "coin_anim_f3.png": { + "frame": { + "x": 8, + "y": 39, + "w": 4, + "h": 7 + }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { + "x": 2, + "y": 1, + "w": 4, + "h": 7 + }, + "sourceSize": { + "w": 8, + "h": 8 + }, + "pivot": { + "x": 0.5, + "y": 0.5 + } + } + }, + "meta": { + "app": "http://free-tex-packer.com", + "version": "0.6.5", + "image": "treasure.png", + "format": "RGBA8888", + "size": { + "w": 40, + "h": 48 + }, + "scale": 1 + } +} \ No newline at end of file diff --git a/apps/client/src/assets/dungeon-crawler/items/treasure.png b/apps/client/src/assets/dungeon-crawler/items/treasure.png new file mode 100644 index 0000000000000000000000000000000000000000..5e2340efaa08285c671c7e55ac3b8784636882b1 GIT binary patch literal 726 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 z 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 literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/dungeon-crawler/ui/ui_heart_empty.png b/apps/client/src/assets/dungeon-crawler/ui/ui_heart_empty.png new file mode 100644 index 0000000000000000000000000000000000000000..d56cfae92ac4a9b6a134bf45da567c7d97f4eaa8 GIT binary patch literal 204 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`lRaG=Ln`JZCrD%*=s5H9_usem z60>Ip&zLyDf*A<7Hz~y?$BP`EVc9BK*tuAOAy`Gd!yxkd4e|9BX9Uz@>Lv@fXt-VL z;eBAjkjA0daGfEEL716YB}IS!-7_Cv*w!8Gzh`U^W4BvURqcVELJEi3Sq-)a#w^p* zc$haxHu)RJefa+S_W!7;u>TW-6;C!Ooh@NzkenUS?OZJX6X-k!Pgg&ebxsLQ0Czk{ A4FCWD literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/dungeon-crawler/ui/ui_heart_full.png b/apps/client/src/assets/dungeon-crawler/ui/ui_heart_full.png new file mode 100644 index 0000000000000000000000000000000000000000..60612b86a89d09279df7e2c982fc0fb306e98f48 GIT binary patch literal 214 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`b3I)gLn`JZCrD%*=s5H9_usem z60>Ip&zLyDf*A<7Hz~y?$BP`EVc9BK*tuAOA$W`9Q~8*M>o)4g70yuf+3{x^kk7m; zEr($_qk%IA;~q8v<{1(a3X0V~-=wuQSpPW7z2oqa0w8C~jE2_=DI8{JHP{{)vrJE$ z^WgpW?fcEAo6t64spL(8O{SN585l~%6Q@7i&YKQ&D1)b~ KpUXO@geCyYA5;(k literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/dungeon-crawler/weapons/weapon_knife.png b/apps/client/src/assets/dungeon-crawler/weapons/weapon_knife.png new file mode 100644 index 0000000000000000000000000000000000000000..b4daa4ed03ac76b268770323771fd720a2af65ba GIT binary patch literal 621 zcmeAS@N?(olHy`uVBq!ia0vp@K+ML$1|%hPMD_zI#^NA%Cx&(BWL^R}0jUw5X}-P; zT0k}j0~4bV12aeo5Hhr9GO&Qz3=C>Ont_3N0V6_o0TW!7cL6h;4YG&f%yIUGKtm!k zLn2Bde0{8v^K1^l#~=$>Fbx5m+O@q z>*W`v>l<2HTIw4Z=^Gj80#)c1SLT%@R_NvxD?a z#8ycOWDy)d+*y*DhOjBG80syc2lYWR`i6Q2`f#&>T5Uk0R{lkqsX&`S=Gz(CfK{T1 zLG7{82U(8f7>G~7qCl_OaoOm@gUyc1=a70NFeKAFT^vIsB$HDbm{e7l{x|rxxB9z8 zVor{U@}{K9{UvSfv(u7-+m((nJxYCX(%{UFFD!b38&Y}a^q#x%K==^DwHCdLYc=}y zSe~uUnr+lDhwoZT4!4JxN+<7uKV07pHr-E{bi<_S2t!k=^tnT`&o2Pl$l&Sf=d#Wz Gp$Pyok+TH= literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/games/images/dungeon-crawler-banner.webp b/apps/client/src/assets/games/images/dungeon-crawler-banner.webp new file mode 100644 index 0000000000000000000000000000000000000000..b7a19c7031e3cabc90a874321a8b9ab5dd283ab1 GIT binary patch literal 3632 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 C&?zYZ literal 0 HcmV?d00001 diff --git a/apps/client/src/assets/games/images/dungeon-crawler.webp b/apps/client/src/assets/games/images/dungeon-crawler.webp new file mode 100644 index 0000000000000000000000000000000000000000..ce16eeb2a236f7484344be0b8cfcfd9c5782350e GIT binary patch literal 2784 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 literal 0 HcmV?d00001 diff --git a/apps/client/src/metadata/dungeon-crawler/dungeon-01.tmx b/apps/client/src/metadata/dungeon-crawler/dungeon-01.tmx new file mode 100644 index 00000000..79fc2e56 --- /dev/null +++ b/apps/client/src/metadata/dungeon-crawler/dungeon-01.tmx @@ -0,0 +1,884 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0,0,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,19,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,121,122,123,124,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,73,2,3,3,3,3,3,132,133,134,135,3,3,3,3,3,5,3,3,3,3,3,3,74,0,0,0,0, +0,0,83,12,13,13,13,13,13,142,143,144,145,13,13,13,13,13,15,13,13,13,13,13,13,84,0,0,0,0, +0,0,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,25,0,0,0,0,0,0,81,0,0,0,0, +0,0,82,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0, +0,0,82,0,0,0,0,0,0,0,0,0,0,0,19,0,0,0,0,0,0,0,56,0,0,81,0,0,0,0, +0,0,82,0,0,19,0,0,0,56,0,0,0,0,19,0,0,19,0,0,0,0,66,0,0,81,0,0,0,0, +0,0,82,0,0,0,0,0,0,66,0,0,39,39,19,39,39,39,0,0,0,0,76,0,0,81,0,0,0,0, +0,0,82,0,0,0,0,0,0,76,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0, +0,0,82,0,0,0,42,42,42,42,42,42,39,39,39,39,39,0,0,0,0,2,3,3,3,85,0,0,0,0, +0,0,82,0,0,0,0,0,0,0,0,0,0,0,43,43,0,0,0,0,0,12,13,13,13,95,0,0,0,0, +0,0,82,0,19,0,0,0,0,0,0,0,43,43,43,0,19,52,0,0,0,0,0,0,0,81,0,0,0,0, +0,0,82,0,0,0,0,62,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0, +0,0,82,0,0,0,62,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,81,0,0,0,0, +0,0,93,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,94,0,0,0,0, +0,0,103,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,12,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + + + +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,59,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,79,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 + + +