Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions assets/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# assets/ — Art Resource Directory

This directory contains all visual art assets for the 九幽 (Nine Nether) prototype.

## Structure

| Directory | Contents | Count |
|-----------|----------|-------|
| `player/` | Player character sprite sheets | 6 sheets |
| `enemy/` | Enemy sprite sheets (3 enemy types) | 15 sheets |
| `boss/` | Boss sprite sheets | 5 sheets |
| `icons/weapons/` | 32×32 weapon icons | 6 icons |
| `icons/ui/` | 32×32 UI stat icons | 11 icons |
| `tiles/` | 32×32 tilemap tiles | 7 tiles |
| `effects/` | 48×48 VFX sprites | 4 effects |
| `background/` | Parallax background elements | 4 elements |
| `ui/` | UI elements (bars, frames) | 4 elements |

## Key Documents
- **Master spec:** `docs/ART_SPEC.md`
- **Concept docs:** `docs/art/CONCEPT_*.md`
- **Import guide:** `docs/art/GODOT_IMPORT_GUIDE.md`
- **Naming rules:** `docs/art/NAMING_CONVENTION.md`

## Placeholder Status
All PNGs are currently **placeholders** (marked with magenta border). Replace each with final pixel art using the same filename and dimensions. See `docs/ART_SPEC.md` Section 5 for replacement workflow.

## Regenerating Placeholders
```bash
python3 tools/generate_placeholders.py
```
17 changes: 17 additions & 0 deletions assets/background/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# assets/background/ — Parallax Background Elements

## Files
| File | Name | Size | Parallax | Purpose |
|------|------|------|----------|---------|
| bg_deep.png | 深景背景 | 320×180 | 0.2x | Underworld vista — distant mountains, mist |
| bg_tree.png | 背景树 | 64×128 | 0.5x | Dead skeletal tree — mid decoration |
| bg_broken_flag.png | 残破旗帜 | 48×96 | 0.5x | Broken flag pole — mid decoration |
| bg_chains.png | 锁链 | 32×96 | 0.7x | Hanging chains — close decoration |

## Notes
- `bg_deep.png` is the only full-frame background — tiles horizontally
- Other elements are sprite props placed at intervals
- All have transparent backgrounds except `bg_deep.png` (full opaque)

## Concept Reference
See `docs/art/CONCEPT_BACKGROUND.md` for full design descriptions.
Binary file added assets/background/bg_broken_flag.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/background/bg_chains.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/background/bg_deep.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/background/bg_tree.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
40 changes: 40 additions & 0 deletions assets/background/metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# assets/background/ — Metadata

## Background Element Specifications

### bg_deep.png
- Size: 320 × 180 px
- Type: Full-frame parallax background
- Parallax: 0.2x (deepest layer)
- Tiling: Horizontal (left/right edges match)
- Purpose: Underworld vista — jagged mountains, low mist, distant ghost fires

### bg_tree.png
- Size: 64 × 128 px
- Type: Sprite prop (transparent background)
- Parallax: 0.5x (mid-background)
- Tiling: Non-tileable, placed at intervals
- Purpose: Dead, skeletal tree — bare twisted branches

### bg_broken_flag.png
- Size: 48 × 96 px
- Type: Sprite prop (transparent background)
- Parallax: 0.5x (mid-background)
- Tiling: Non-tileable, placed at intervals
- Purpose: Broken flag pole with tattered battle flag

### bg_chains.png
- Size: 32 × 96 px
- Type: Sprite prop (transparent background)
- Parallax: 0.7x (close background)
- Tiling: Non-tileable, placed at intervals
- Purpose: Hanging rusted iron chains from above

## Godot Import Settings
- Filter: Off (Nearest)
- Mipmaps: Off
- Compression: Lossless
- Format: RGBA

## Parallax Layer Setup
See `docs/art/CONCEPT_BACKGROUND.md` — Parallax Layer Structure section.
25 changes: 25 additions & 0 deletions assets/boss/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# assets/boss/ — Boss Sprites

## Boss
**镇关鬼将** (Gate Guardian Ghost General) — a towering underworld general with ghost fire and a massive blade.

## Files
| File | Animation | Frames | Sheet Size | Frame Size | FPS |
|------|-----------|--------|------------|------------|-----|
| boss_idle.png | Idle | 4 | 384×96 | 96×96 | 6 |
| boss_run.png | Run | 6 | 576×96 | 96×96 | 8 |
| boss_attack.png | Attack | 5 | 480×96 | 96×96 | 10 |
| boss_hurt.png | Hurt | 2 | 192×96 | 96×96 | 8 |
| boss_death.png | Death | 8 | 768×96 | 96×96 | 6 |

## Notes
- Boss is **3× the player's size** (96×96 vs 48×48)
- Ghost fire (blue-green) appears in every animation
- Death animation is the longest (8 frames) for dramatic effect
- Attack is 5 frames — wind-up → strike → impact → follow-through → recovery

## Concept Reference
See `docs/art/CONCEPT_BOSS.md` for full visual design description.

## Color Palette
Underworld purple `#321E37`, ghost fire `#1EB464` / `#4AE68A`, bone `#A0987A`, void `#0F0C12`
Binary file added assets/boss/boss_attack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/boss/boss_death.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/boss/boss_hurt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/boss/boss_idle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/boss/boss_run.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
54 changes: 54 additions & 0 deletions assets/boss/metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# assets/boss/ — Metadata

## Sprite Sheet Specifications

### boss_idle.png
- **Size:** 384 × 96 px
- **Frame size:** 96 × 96 px
- **Frame count:** 4
- **Layout:** Horizontal strip
- **FPS:** 6
- **Loop:** Yes
- **Purpose:** Boss idle — blade resting on ground, ghost fire flickering on shoulders

### boss_run.png
- **Size:** 576 × 96 px
- **Frame size:** 96 × 96 px
- **Frame count:** 6
- **Layout:** Horizontal strip
- **FPS:** 8
- **Loop:** Yes
- **Purpose:** Boss run — earth-shaking charge, blade dragging

### boss_attack.png
- **Size:** 480 × 96 px
- **Frame size:** 96 × 96 px
- **Frame count:** 5
- **Layout:** Horizontal strip
- **FPS:** 10
- **Loop:** No
- **Purpose:** Boss attack — overhead blade strike with ghost fire shockwave

### boss_hurt.png
- **Size:** 192 × 96 px
- **Frame size:** 96 × 96 px
- **Frame count:** 2
- **Layout:** Horizontal strip
- **FPS:** 8
- **Loop:** No
- **Purpose:** Boss hurt — stagger + defensive fire flare

### boss_death.png
- **Size:** 768 × 96 px
- **Frame size:** 96 × 96 px
- **Frame count:** 8
- **Layout:** Horizontal strip
- **FPS:** 6
- **Loop:** No
- **Purpose:** Boss death — blade drops, armor cracks, fire erupts, collapses, dissolves, blade remains

## Godot Import Settings
- Filter: Off (Nearest)
- Mipmaps: Off
- Compression: Lossless
- Format: RGBA
19 changes: 19 additions & 0 deletions assets/effects/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# assets/effects/ — Visual Effects

All 48×48 px. Transparent background. Centered origin.

## Files
| File | Name | Frames | FPS | Loop |
|------|------|--------|-----|------|
| effect_hit_slash.png | 斩击特效 | 2 | 20 | No |
| effect_blood_splash.png | 鲜血飞溅 | 4 | 15 | No |
| effect_ghost_fire.png | 鬼火特效 | 4 | 10 | Yes |
| effect_death_fade.png | 死亡消散 | 4 | 8 | No |

## Notes
- `effect_ghost_fire.png` is the only looping effect — use for ambient fire, boss aura
- `effect_hit_slash.png` and `effect_blood_splash.png` are short bursts — destroy after playing
- `effect_death_fade.png` plays after a character's death animation

## Concept Reference
See `docs/art/CONCEPT_EFFECTS.md` for full design descriptions.
Binary file added assets/effects/effect_blood_splash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/effects/effect_death_fade.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/effects/effect_ghost_fire.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/effects/effect_hit_slash.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
29 changes: 29 additions & 0 deletions assets/effects/metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# assets/effects/ — Metadata

## Effect Specifications (all 48×48 px)

### effect_hit_slash.png
- Size: 96×48 (2 frames × 48px) | FPS: 20 | Loop: No
- Frame size: 48×48
- Purpose: Melee hit impact — white/silver slash arc

### effect_blood_splash.png
- Size: 192×48 (4 frames × 48px) | FPS: 15 | Loop: No
- Frame size: 48×48
- Purpose: Dark crimson blood particle burst on damage

### effect_ghost_fire.png
- Size: 192×48 (4 frames × 48px) | FPS: 10 | Loop: Yes
- Frame size: 48×48
- Purpose: Blue-green flame — brazier light, boss aura, projectile trail

### effect_death_fade.png
- Size: 192×48 (4 frames × 48px) | FPS: 8 | Loop: No
- Frame size: 48×48
- Purpose: Character body dissolving into dark particles on death

## Godot Import Settings
- Filter: Off (Nearest)
- Mipmaps: Off
- Compression: Lossless
- Format: RGBA
39 changes: 39 additions & 0 deletions assets/enemy/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# assets/enemy/ — Enemy Sprites

## Enemies
| Enemy | Prefix | Type | Frame Size |
|-------|--------|------|------------|
| 鬼卒 (Ghost Soldier) | `ghost_melee_` | Melee | 48×48 |
| 鬼弓手 (Ghost Archer) | `ghost_archer_` | Ranged | 48×48 |
| 尸兽 (Corpse Beast) | `corpse_beast_` | Charge | 64×48 |

## Files
### Ghost Soldier (鬼卒)
| File | Frames | Sheet Size | FPS |
|------|--------|------------|-----|
| ghost_melee_idle.png | 4 | 192×48 | 8 |
| ghost_melee_run.png | 6 | 288×48 | 10 |
| ghost_melee_attack.png | 4 | 192×48 | 12 |
| ghost_melee_hurt.png | 2 | 96×48 | 10 |
| ghost_melee_death.png | 4 | 192×48 | 8 |

### Ghost Archer (鬼弓手)
| File | Frames | Sheet Size | FPS |
|------|--------|------------|-----|
| ghost_archer_idle.png | 4 | 192×48 | 8 |
| ghost_archer_run.png | 6 | 288×48 | 10 |
| ghost_archer_attack.png | 4 | 192×48 | 12 |
| ghost_archer_hurt.png | 2 | 96×48 | 10 |
| ghost_archer_death.png | 4 | 192×48 | 8 |

### Corpse Beast (尸兽)
| File | Frames | Sheet Size | FPS |
|------|--------|------------|-----|
| corpse_beast_idle.png | 4 | 256×48 | 8 |
| corpse_beast_run.png | 6 | 384×48 | 14 |
| corpse_beast_attack.png | 4 | 256×48 | 12 |
| corpse_beast_hurt.png | 2 | 128×48 | 10 |
| corpse_beast_death.png | 4 | 256×48 | 8 |

## Concept Reference
See `docs/art/CONCEPT_ENEMIES.md` for full visual design descriptions.
Binary file added assets/enemy/corpse_beast_attack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/corpse_beast_death.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/corpse_beast_hurt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/corpse_beast_idle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/corpse_beast_run.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_archer_attack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_archer_death.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_archer_hurt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_archer_idle.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_archer_run.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_melee_attack.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_melee_death.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/enemy/ghost_melee_hurt.png
Binary file added assets/enemy/ghost_melee_idle.png
Binary file added assets/enemy/ghost_melee_run.png
79 changes: 79 additions & 0 deletions assets/enemy/metadata.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# assets/enemy/ — Metadata

## Ghost Soldier (鬼卒) — Melee

### ghost_melee_idle.png
- Size: 192×48 | Frames: 4 | Frame: 48×48 | FPS: 8 | Loop: Yes
- Purpose: Ghost soldier idle — swaying, weapon dragging

### ghost_melee_run.png
- Size: 288×48 | Frames: 6 | Frame: 48×48 | FPS: 10 | Loop: Yes
- Purpose: Lurching forward, uneven gait

### ghost_melee_attack.png
- Size: 192×48 | Frames: 4 | Frame: 48×48 | FPS: 12 | Loop: No
- Purpose: Wild overhead chop

### ghost_melee_hurt.png
- Size: 96×48 | Frames: 2 | Frame: 48×48 | FPS: 10 | Loop: No
- Purpose: Recoil, body flickers

### ghost_melee_death.png
- Size: 192×48 | Frames: 4 | Frame: 48×48 | FPS: 8 | Loop: No
- Purpose: Dissolves into blue mist

---

## Ghost Archer (鬼弓手) — Ranged

### ghost_archer_idle.png
- Size: 192×48 | Frames: 4 | Frame: 48×48 | FPS: 8 | Loop: Yes
- Purpose: Hovering, bow held loosely

### ghost_archer_run.png
- Size: 288×48 | Frames: 6 | Frame: 48×48 | FPS: 10 | Loop: Yes
- Purpose: Gliding forward, feet not touching ground

### ghost_archer_attack.png
- Size: 192×48 | Frames: 4 | Frame: 48×48 | FPS: 12 | Loop: No
- Purpose: Draw bow → release ghost arrow → lower bow

### ghost_archer_hurt.png
- Size: 96×48 | Frames: 2 | Frame: 48×48 | FPS: 10 | Loop: No
- Purpose: Flickers, body becomes semi-transparent

### ghost_archer_death.png
- Size: 192×48 | Frames: 4 | Frame: 48×48 | FPS: 8 | Loop: No
- Purpose: Bow shatters, body disperses into green wisps

---

## Corpse Beast (尸兽) — Charge

### corpse_beast_idle.png
- Size: 256×48 | Frames: 4 | Frame: 64×48 | FPS: 8 | Loop: Yes
- Purpose: Low growl, body heaving, limbs twitching

### corpse_beast_run.png
- Size: 384×48 | Frames: 6 | Frame: 64×48 | FPS: 14 | Loop: Yes
- Purpose: Fast charge — all four legs, mouth open

### corpse_beast_attack.png
- Size: 256×48 | Frames: 4 | Frame: 64×48 | FPS: 12 | Loop: No
- Purpose: Lunge forward, jaws snapping

### corpse_beast_hurt.png
- Size: 128×48 | Frames: 2 | Frame: 64×48 | FPS: 10 | Loop: No
- Purpose: Recoils, limbs spasm

### corpse_beast_death.png
- Size: 256×48 | Frames: 4 | Frame: 64×48 | FPS: 8 | Loop: No
- Purpose: Collapses, flesh sloughing off bones

---

## Godot Import Settings (all enemy sprites)
- Filter: Off (Nearest)
- Mipmaps: Off
- Compression: Lossless
- Format: RGBA
10 changes: 10 additions & 0 deletions assets/icons/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# assets/icons/ — Icon Assets

## Structure
- `weapons/` — 32×32 weapon icons (6 total)
- `ui/` — 32×32 UI stat icons (11 total)

All icons are unified at 32×32 px, transparent background, nearest-neighbor filtering.

## Concept Reference
See `docs/art/CONCEPT_ICONS.md` for full design descriptions.
21 changes: 21 additions & 0 deletions assets/icons/ui/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# assets/icons/ui/ — UI Stat Icons

All 32×32 px. Transparent background. 1px dark outline.

## Files
| File | Name | Description |
|------|------|-------------|
| icon_hp.png | 生命值 | HP — heart shape, dark red |
| icon_stamina.png | 体力 | Stamina — circular gauge, green |
| icon_attack.png | 攻击 | Attack — downward sword, iron |
| icon_armor.png | 护甲 | Armor — shield, dark steel |
| icon_crit.png | 暴击 | Critical — starburst, orange |
| icon_speed.png | 速度 | Speed — chevron, grey |
| icon_sacrifice.png | 献祭 | Sacrifice — chalice/blood, purple |
| icon_ghostfire.png | 鬼火 | Ghost fire — flame orb, blue-green |
| icon_boss.png | Boss | Skull with horns, bone |
| icon_key.png | 钥匙 | Key — skeleton key, bronze |
| icon_coin.png | 阴钱 | Yin coin — round coin with square hole |

## Concept Reference
See `docs/art/CONCEPT_ICONS.md` — UI Stat Icons section.
Binary file added assets/icons/ui/icon_armor.png
Binary file added assets/icons/ui/icon_attack.png
Binary file added assets/icons/ui/icon_boss.png
Binary file added assets/icons/ui/icon_coin.png
Binary file added assets/icons/ui/icon_crit.png
Binary file added assets/icons/ui/icon_ghostfire.png
Binary file added assets/icons/ui/icon_hp.png
Binary file added assets/icons/ui/icon_key.png
Binary file added assets/icons/ui/icon_sacrifice.png
Binary file added assets/icons/ui/icon_speed.png
Binary file added assets/icons/ui/icon_stamina.png
16 changes: 16 additions & 0 deletions assets/icons/weapons/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
# assets/icons/weapons/ — Weapon Icons

All 32×32 px. Transparent background. 1px dark outline.

## Files
| File | Name | Description |
|------|------|-------------|
| weapon_songdao.png | 宋刀 | Song dynasty straight-backed sword |
| weapon_spear.png | 长枪 | Military spear with red tassel |
| weapon_ghostfire.png | 鬼火 | Ghost fire orb (element/power) |
| weapon_talisman.png | 护符 | Paper talisman with red seal |
| weapon_gourd.png | 酒葫芦 | Wine gourd (healing item) |
| weapon_flag.png | 残破军旗 | Broken battle flag on snapped pole |

## Concept Reference
See `docs/art/CONCEPT_ICONS.md` — Weapon Icons section.
Binary file added assets/icons/weapons/weapon_flag.png
Binary file added assets/icons/weapons/weapon_ghostfire.png
Binary file added assets/icons/weapons/weapon_gourd.png
Binary file added assets/icons/weapons/weapon_songdao.png
Binary file added assets/icons/weapons/weapon_spear.png
Binary file added assets/icons/weapons/weapon_talisman.png
Loading
Loading