π ISMS Alignment: This document follows Hack23 Secure Development Policy asset management requirements.
Below is a focused breakdown of exactly which artβ and animationβrelated assets youβll need for:
- Backgrounds (especially the Intro/Main Menu & Dojang/Training Hall),
- UI Icons (stances, trigrams, HUD elements), and
- Technique Animations (attack, hit, finisher sequences)
Additionally, we call out the Pixi.js modules (dependencies) youβll actually use when wiring everything together in code. Think of this as a βshopping listβ for your 2D combat gameβs art and animation pipeline, paired with the Pixi features youβll need to load, display, and animate them.
Run npm run audit:assets to verify all visual asset references in the codebase point to existing files. This ensures no broken asset links and helps maintain asset integrity.
public/assets/visual
public/assets/visual/archetypes
public/assets/visual/archetypes/amsalja.png
public/assets/visual/archetypes/hacker.png
public/assets/visual/archetypes/jeongbo_yowon.png
public/assets/visual/archetypes/jojik_pokryeokbae.png
public/assets/visual/archetypes/musa.png
public/assets/visual/bg
public/assets/visual/bg/archetyples
public/assets/visual/bg/archetyples/CyberpunkTeamDynamics.png
public/assets/visual/bg/archetyples/PlayerArchetypesExplained.png
public/assets/visual/bg/archetyples/PlayerArchetypesOverview.png
public/assets/visual/bg/dojang
public/assets/visual/bg/dojang/dojang_floor_tex.png
public/assets/visual/bg/dojang/dojang_wall_tex.png
public/assets/visual/bg/intro
public/assets/visual/bg/intro/intro_bg_loop.png
public/assets/visual/logo
public/assets/visual/logo/black-trigram-256.png
public/assets/visual/logo/black-trigram.png
---
## 1. Backgrounds & Environments
### 1.1 Intro / Main Menu Background
- **Asset Name:** `intro_bg_loop.png`
- **Description:** A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
- **File Format:** PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
- **Folder:** `assets/visual/bg/intro/`
- **Visual Style Notes:**
- Base color: Obsidian (`#0A0F12`) with subtle filmβgrain overlay.
- Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- **Asset Name:** `mainmenu_foreground_overlay.png`
- **Description:** A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- **File Format:** PNG (alpha)
- **Folder:** `assets/visual/overlays/`
- **Usage:** Placed above `intro_bg_loop` to darken corners.
### 1.2 Dojang / Training Hall Background
- **Asset Name:** `dojang_floor_tex.png`
- **Description:** 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
- **File Format:** PNG (or PNG + normal/roughness if desired)
- **Folder:** `assets/visual/bg/dojang/`
- **Style Notes:**
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
- **Asset Name:** `dojang_wall_tex.png`
- **Description:** 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
- **File Format:** PNG (with separate emissive mask channel if you plan to animate neon flicker).
- **Folder:** `assets/visual/bg/dojang/`
- **Style Notes:**
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
- **Asset Name:** `dojang_wall_neon_flicker.png` (optional flipbook)
- **Description:** A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- **File Format:** PNG sprite sheet
- **Folder:** `assets/vfx/animations/`
- **Asset Name:** `training_console_model.png`
- **Description:** 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- **File Format:** PNG
- **Folder:** `assets/visual/props/`
- **Notes:** Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
- **Asset Name:** `stance_pad_circle.png`
- **Description:** 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- **File Format:** PNG (alpha)
- **Folder:** `assets/visual/props/`
---
## 2. UI Icons & HUD Elements
### 2.1 Stance Icons
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
1. **`icon_stance_defensive.svg`**
- Outline style in Slate Gray (`#2E3538`) when inactive.
- Filled with Teal Neon (`#00FFC8`) + soft glow when active.
2. **`icon_stance_balanced.svg`**
- Outline in Slate Gray; filled with Teal Neon on hover/active.
3. **`icon_stance_aggressive.svg`**
- Outline in Slate Gray; filled with Crimson (`#FF0044`) on βchargedβ or βreadyβ state, or Teal Neon when selected.
**Folder:** `assets/ui/icons/stances/`
### 2.2 Trigram Icons
- **File Names:**
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg
- **Each icon:** 48Γ48 px, dark background (Gunmetal `#424A50`) with the trigram glyph in Teal Neon.
- **States:**
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
**Folder:** `assets/ui/icons/trigrams/`
### 2.3 HUD Bars & Overlays
- **`hud_health_bar.png`** (800Γ32 px PNG)
- 10 segmented blocks. Each filled segment is Cyan Glow (`#1BE7FF`); empty is Slate Gray.
- **Folder:** `assets/ui/hud/`
- **`hud_pain_bar.png`** (800Γ16 px PNG)
- 10 segments. Filled segments are Crimson (`#FF0044`); empty Slate Gray.
- **Folder:** `assets/ui/hud/`
- **`ui_button_start_idle.png` & `ui_button_start_hover.png`** (256Γ64 px each)
- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- **Folder:** `assets/ui/buttons/`
- **`ui_panel_slate.png`** (1024Γ512 px)
- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- **Folder:** `assets/ui/panels/`
- **`tooltip_arrow.png`** (32Γ32 px PNG)
- Small triangle arrow in Cyan Glow for tooltips.
- **Folder:** `assets/ui/tooltips/`
---
## 3. Technique Animations (AnimatedSprite Sprite Sheets)
Any time you see code like:
```js
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);
β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
β
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
β
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
β
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
β
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG
- Folder:
assets/visual/props/ - Notes: Use this as a static background element; you can overlay bitmaps of gauge bars, or simply let the console glow.
-
Asset Name:
stance_pad_circle.png- Description: 256Γ256 semiβtransparent PNG of a glowing floor circle. Pulses from 0 β 100% opacity in a 1s loop.
- File Format: PNG (alpha)
- Folder:
assets/visual/props/
Each icon is a 64Γ64 px SVG (so it scales crisply). Weβll load them as textures in Pixi and tint/animate as needed.
-
icon_stance_defensive.svg- Outline style in Slate Gray (
#2E3538) when inactive. - Filled with Teal Neon (
#00FFC8) + soft glow when active.
- Outline style in Slate Gray (
-
icon_stance_balanced.svg- Outline in Slate Gray; filled with Teal Neon on hover/active.
-
icon_stance_aggressive.svg- Outline in Slate Gray; filled with Crimson (
#FF0044) on βchargedβ or βreadyβ state, or Teal Neon when selected.
Folder:
assets/ui/icons/stances/ - Outline in Slate Gray; filled with Crimson (
-
File Names:
icon_trigram_1.svg icon_trigram_2.svg β¦ icon_trigram_8.svg -
Each icon: 48Γ48 px, dark background (Gunmetal
#424A50) with the trigram glyph in Teal Neon. -
States:
- Inactive: no glow, just basic fill.
- Active: slight outer glow + subtle 1.1Γ scale βpulse.β
- Hover: 1.05Γ scale + quick glow (0.2 s).
Folder:
assets/ui/icons/trigrams/
-
hud_health_bar.png(800Γ32 px PNG)- 10 segmented blocks. Each filled segment is Cyan Glow (
#1BE7FF); empty is Slate Gray. - Folder:
assets/ui/hud/
- 10 segmented blocks. Each filled segment is Cyan Glow (
-
hud_pain_bar.png(800Γ16 px PNG)- 10 segments. Filled segments are Crimson (
#FF0044); empty Slate Gray. - Folder:
assets/ui/hud/
- 10 segments. Filled segments are Crimson (
-
ui_button_start_idle.png&ui_button_start_hover.png(256Γ64 px each)- Idle: Slate Gray panel with ββΆ Start Combatβ in Hangul+English.
- Hover: Underline in Teal Neon + icon (ββΆβ) glows.
- Folder:
assets/ui/buttons/
-
ui_panel_slate.png(1024Γ512 px)- A semi-opaque Slate Gray panel (70% opacity) with a subtle noise texture.
- Folder:
assets/ui/panels/
-
tooltip_arrow.png(32Γ32 px PNG)- Small triangle arrow in Cyan Glow for tooltips.
- Folder:
assets/ui/tooltips/
Any time you see code like:
await Assets.load("path/to/spritesheet.json");
const frames = [];
for (let i = 0; i < N; i++) {
frames.push(Texture.from(`frame${i}.png`));
}
const anim = new AnimatedSprite(frames);β¦you need a sprite sheet JSON + corresponding PNG atlas for each βtechnique.β Below is a minimal required set of technique animations:
- Sprite Sheet JSON:
strike_light_spritesheet.json - Texture Atlas:
strike_light_spritesheet.png(e.g., 512Γ512 containing all 6 frames laid out in a grid). - Frame Count: 6 frames, each ~128Γ256 (portrait orientation).
- Animation Speed: 0.6 (adjust per archetype).
- Visual Content: Character winds up β quick punch/kick β recoil. No background in atlas (transparent).
- Folder:
assets/characters/animations/techniques/light/
- Sprite Sheet JSON:
strike_medium_spritesheet.json - Texture Atlas:
strike_medium_spritesheet.png(6β8 frames, ~128Γ256 each). - Description: More wind-up, more impact frames, a small dust puff frame integrated (see VFX).
- Folder:
assets/characters/animations/techniques/medium/
- Sprite Sheet JSON:
strike_heavy_spritesheet.json - Texture Atlas:
strike_heavy_spritesheet.png(8 frames, ~256Γ256 each). - Description: Big wind-up, slow-mo pause on impact, splash of embedded VFX dust/blood.
- Folder:
assets/characters/animations/techniques/heavy/
- Sprite Sheet JSON:
strike_critical_spritesheet.json - Texture Atlas:
strike_critical_spritesheet.png(10β12 frames, ~256Γ256). - Description: Slow-mo bone-breaking blow β flash frame β slowdown.
- Folder:
assets/characters/animations/techniques/critical/
- Sprite Sheet JSON:
dodge_spritesheet.json - Texture Atlas:
dodge_spritesheet.png(4β6 frames, ~128Γ256). - Description: Quick sidestep/backflip frames, subtle afterimage.
- Folder:
assets/characters/animations/techniques/dodge/
- Sprite Sheet JSON:
block_spritesheet.json - Texture Atlas:
block_spritesheet.png(5 frames, ~128Γ256). - Description: Character raises arm/weapon to block β recoil if successful.
- Folder:
assets/characters/animations/techniques/block/
- Sprite Sheet JSON:
hit_reaction_spritesheet.json - Texture Atlas:
hit_reaction_spritesheet.png(4 frames, ~128Γ256). - Description: Character flinches backwards, tinted red on final frame.
- Folder:
assets/characters/animations/techniques/hit/
- Sprite Sheet JSON:
finisher_musa_spritesheet.json,finisher_amsalja_spritesheet.json, etc. - Texture Atlas:
finisher_musa_spritesheet.png(12 frames, ~256Γ256), etc. - Description: A multi-stage βcinematicβ finisher (pause β bone crushing β slow fade).
- Folder:
assets/characters/animations/finisher/
Below is a minimal list of Pixi.js modules (from pixi.js/lib) that you will rely on to load, animate, and render everything above. In your package.json, youβve already installed pixi.js. At runtime, youβll import exactly the pieces you use:
import {
Application,
TickerPlugin, // core ticker
ResizePlugin, // auto resizes to window
Assets, // for loading JSON/PNG atlases
Texture,
Sprite,
AnimatedSprite,
Container,
TilingSprite, // if you want parallax/tiled backgrounds
Loader, // older API if you prefer Loader instead of Assets
} from "pixi.js";-
Application(fromapp/Application.mjs)- Creates the Pixi canvas, WebGL context, stage, etc.
-
TickerPlugin&ResizePlugin- Ensures your appβs ticker (main game loop) and auto-resize functionality.
-
Assets(fromassets/Assets.mjs)-
The new recommended loader for JSON sprite sheets, PNGs, audio, etc.
-
Example:
await Assets.load( "assets/characters/animations/techniques/light/strike_light_spritesheet.json" );
-
-
Texture(fromrendering/texture/Texture.mjs)-
Create textures from loaded assets:
const frameTex = Texture.from("strike_light_000.png");
-
-
Sprite&AnimatedSprite(fromscene/sprite/Sprite.mjs&scene/sprite-animated/AnimatedSprite.mjs)Spritefor static images (UI icons, backgrounds).AnimatedSpritefor flipbook animations (techniques, VFX).
-
Container(fromscene/container/Container.mjs)-
Use a parent
Containerfor grouping layers:backgroundContainercharacterContaineruiContainervfxContainer
-
-
TilingSprite(fromscene/sprite-tiling/TilingSprite.mjs)- If you want to scroll/loop the
intro_bg_loop.pngor tiledojang_floor_tex.pngseamlessly across a larger stage.
- If you want to scroll/loop the
-
Loader(fromassets/loader/Loader.mjs)- If you prefer the older PIXI.Loader API to Assets. Both are possible;
Assetsis recommended for newer Pixi versions.
- If you prefer the older PIXI.Loader API to Assets. Both are possible;
-
Filter/BlurFilter/DisplacementFilter(fromfilters/defaults/*)- Useful for adding real-time blur afterimages (for
dodge), screen shakes, or ripples when powering up Ki (ki_charge).
- Useful for adding real-time blur afterimages (for
Below is a consolidated folder structure showing where each of the above assets live. This is what your repo (or build pipeline) needs before you start coding the Pixi setup:
/assets
ββ characters/
β ββ animations/
β β ββ techniques/
β β β ββ light/
β β β β ββ strike_light_spritesheet.json
β β β β ββ strike_light_spritesheet.png
β β β ββ medium/
β β β β ββ strike_medium_spritesheet.json
β β β β ββ strike_medium_spritesheet.png
β β β ββ heavy/
β β β β ββ strike_heavy_spritesheet.json
β β β β ββ strike_heavy_spritesheet.png
β β β ββ critical/
β β β β ββ strike_critical_spritesheet.json
β β β β ββ strike_critical_spritesheet.png
β β β ββ dodge/
β β β β ββ dodge_spritesheet.json
β β β β ββ dodge_spritesheet.png
β β β ββ block/
β β β β ββ block_spritesheet.json
β β β β ββ block_spritesheet.png
β β β ββ hit/
β β β ββ hit_reaction_spritesheet.json
β β β ββ hit_reaction_spritesheet.png
β β ββ finisher/
β β ββ musa_finisher_spritesheet.json
β β ββ musa_finisher_spritesheet.png
β β ββ amsalja_finisher_spritesheet.json
β β ββ amsalja_finisher_spritesheet.png
β β ββ β¦ (one per archetype)
β ββ portraits/
β ββ portrait_musa.png
β ββ portrait_amsalja.png
β ββ β¦ (other archetypes)
β
ββ fonts/
β ββ BlackTrigram-Hangul.woff2
β ββ NotoSansKR-Regular.woff2
β ββ Roboto-Regular.woff2
β
ββ i18n/
β ββ ko.json
β ββ en.json
β
ββ props/
β ββ training_console_model.png
β ββ stance_pad_circle.png
β ββ dummy_target_overlay.svg
β
ββ shaders/
β ββ rim_light.shader
β ββ blood_decal.shader
β ββ neon_flicker.shader
β
ββ ui/
β ββ buttons/
β β ββ ui_button_start_idle.png
β β ββ ui_button_start_hover.png
β ββ icons/
β β ββ stances/
β β β ββ icon_stance_defensive.svg
β β β ββ icon_stance_balanced.svg
β β β ββ icon_stance_aggressive.svg
β β ββ trigrams/
β β β ββ icon_trigram_1.svg
β β β ββ icon_trigram_2.svg
β β β ββ β¦ up to icon_trigram_8.svg
β β ββ tooltip_arrow.png
β ββ hud/
β ββ hud_health_bar.png
β ββ hud_pain_bar.png
β
ββ vfx/
β ββ animations/
β β ββ anim_logo_pulse.json
β β ββ anim_menu_slide_0.png β¦ anim_menu_slide_7.png
β β ββ anim_strike_impact_0.png β¦ anim_strike_impact_15.png
β β ββ anim_finisher_musa_0.png β¦ anim_finisher_musa_11.png
β ββ particles/
β β ββ vfx_dust_puff.png
β β ββ vfx_blood_splatter.png
β β ββ confetti_sprites.png
β ββ shaders/
β ββ vfx_impact_ring.png
β ββ vfx_neon_glow.png
β ββ vfx_critical_flash.png
β
ββ visual/
β ββ bg/
β β ββ intro/
β β β ββ intro_bg_loop.png
β β β ββ mainmenu_foreground_overlay.png
β β ββ dojang/
β β ββ dojang_floor_tex.png
β β ββ dojang_wall_tex.png
β ββ overlays/
β ββ vital_region_head.png
β ββ vital_region_neck.png
β ββ vital_region_torso.png
β ββ vital_region_arms.png
β ββ vital_region_chest.png
β ββ vital_region_legs.png
β
ββ public/
ββ assets/
ββ audio/
ββ music/
β ββ intro_theme.webm
β ββ combat_theme.webm
β ββ combat_theme_geon.webm
β ββ training_theme.webm
β ββ meditation_theme.webm
β ββ victory_theme.webm
β ββ underground_rave_theme.webm
β ββ ambient_loop.webm
ββ sfx/
ββ ambient/
β ββ dojang_ambience.webm
β ββ wind_effect.webm
β ββ dojo_crowd.webm
ββ attacks/
β ββ attack_punch_light.webm
β ββ attack_punch_medium.webm
β ββ attack_kick_heavy.webm
β ββ attack_light.webm
β ββ attack_medium.webm
β ββ attack_critical.webm
β ββ attack_special_geon.webm
β ββ dodge.webm
β ββ block_success.webm
β ββ block_break.webm
β ββ perfect_strike.webm
ββ hit/
β ββ hit_light.webm
β ββ hit_medium.webm
β ββ hit_heavy.webm
β ββ hit_critical.webm
β ββ hit_flesh.webm
β ββ hit_block.webm
ββ combo/
β ββ combo_buildup.webm
β ββ combo_finish.webm
β ββ energy_pulse.webm
ββ match/
β ββ match_start.webm
β ββ countdown.webm
β ββ match_end.webm
β ββ victory.webm
β ββ defeat.webm
ββ movement/
β ββ footstep.webm
β ββ stance_change.webm
ββ ki/
β ββ ki_charge.webm
β ββ ki_release.webm
ββ stamina/
β ββ stamina_depleted.webm
ββ health/
β ββ health_low.webm
ββ ui/
ββ menu_click.webm
ββ menu_navigate.webm
ββ menu_select.webm
ββ menu_hover.webm
ββ menu_back.webm
-
Asset Name:
intro_bg_loop.png-
Description: A seamless 1920Γ1080 loopable tile of a rainβslicked concrete floor with neon pipes and drifting dataβline grid.
-
File Format: PNG (plus normal/roughness if you want subtle 3D lighting on flat sprites, but PNG is usually enough).
-
Folder:
assets/visual/bg/intro/ -
Visual Style Notes:
- Base color: Obsidian (
#0A0F12) with subtle filmβgrain overlay. - Neon accents: teal/cyan reflections on puddles, flickering Hangul glyphs on pipes.
- Animation: small βrain dripβ loop in shader or flipbook.
- Base color: Obsidian (
-
-
Asset Name:
mainmenu_foreground_overlay.png- Description: A semiβtransparent obsidian vignette (20px βsoft edgeβ) to darken screen edges, helping text/logo pop.
- File Format: PNG (alpha)
- Folder:
assets/visual/overlays/ - Usage: Placed above
intro_bg_loopto darken corners.
-
Asset Name:
dojang_floor_tex.png-
Description: 2048Γ2048 PBRβstyle image of matteβblack tatami mats, with subtle water puddle normals (if you want dynamic reflections).
-
File Format: PNG (or PNG + normal/roughness if desired)
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- Tileable so it can fill any resolution.
- Slight neon cyan reflections at edges where wall meets floor.
-
-
Asset Name:
dojang_wall_tex.png-
Description: 1024Γ1024 tile of corrugated metal with pipelines and emissive Hangul trigrams (β°, β², etc.) behind semiβopaque panels.
-
File Format: PNG (with separate emissive mask channel if you plan to animate neon flicker).
-
Folder:
assets/visual/bg/dojang/ -
Style Notes:
- The emissive mask will let you βpulseβ each trigram glyph via a simple shader or a flicker sprite.
-
-
Asset Name:
dojang_wall_neon_flicker.png(optional flipbook)- Description: A small flipbook (e.g. 4 frames at 256Γ256) showing a neon glyph flicker (cycle through 0%, 50%, 100% brightness).
- File Format: PNG sprite sheet
- Folder:
assets/vfx/animations/
-
Asset Name:
training_console_model.png- Description: 512Γ512 stylized grayscale sprite of a holoβconsole (flat sprite) with cyan emissive accents (for realβtime data display).
- File Format: PNG