Skip to content
Closed
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
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -94,3 +94,5 @@ firebase.cfg
# .mcp.json holds per-machine server credentials. Keep it local; each tool
# reads its own user-level config instead.
.mcp.json
# Playwright MCP screenshots, console logs, and evaluation files.
.playwright-mcp/
58 changes: 36 additions & 22 deletions apps/docs/docs/assets/manifest.md
Original file line number Diff line number Diff line change
Expand Up @@ -577,11 +577,14 @@ Project path: res://assets/custom/ui/
Used: heart.png, panel_moonlit.png, nine_path_panel_moonlit.png,
button_normal_moonlit.png, button_hover_moonlit.png,
button_pressed_moonlit.png, button_disabled_moonlit.png,
button_focus_moonlit.png
button_focus_moonlit.png, relic_card_*.png (4 states),
icons/*.png (16 relic emblems)
Modification: tools/build_world_assets.py builds the 5-step moonlight heart;
tools/build_custom_ui_panels.py generates ink-navy, moon-silver,
teal, vermilion panels and button states that keep the existing
5px and 6px nine-patch margins
5px and 6px nine-patch margins; batch 3 drew the relic-pick
cards (168x112, carved corner moons) and 16 48x48 relic
emblems as ChatGPT grid drops via tools/slice_gpt_cells.py
```

| File | Size | Use |
Expand All @@ -594,6 +597,11 @@ Modification: tools/build_world_assets.py builds the 5-step moonlight heart;
| `button_pressed_moonlit.png` | 16×16 | darkened face and lower vermilion rivets |
| `button_disabled_moonlit.png` | 16×16 | desaturated disabled state |
| `button_focus_moonlit.png` | 16×16 | transparent focus ring stacked on the default state |
| `relic_card_normal.png` | 168×112 | relic-pick card, resting state. navy face, amber border |
| `relic_card_hover.png` | 168×112 | brightened border with amber shimmer |
| `relic_card_pressed.png` | 168×112 | pressed in, darker, dimmed border |
| `relic_card_disabled.png` | 168×112 | grayed, faded |
| `icons/dew_hunter.png` … `icons/wide_arc.png` | 48×48 ×16 | one emblem per relic, named by relic id |

The heart has 5 steps but **we only use the one full frame.** Empty slots
lower that one frame's opacity to 0.24. Swapping two pictures makes the
Expand Down Expand Up @@ -790,39 +798,45 @@ Source: original (AI-assisted concept, deterministic pixel production)
Creator: Moonlit Beacon
License: follows the project license
Project path: res://assets/custom/actors/spirits/, res://assets/custom/actors/guardians/
Used: 4-facing float motion for 7 normal enemies
Used: facing-less float motion for 7 normal enemies
idle, wind-up, charge, recover motion for forest, field, and camp guardians
Modification: generation-model concepts used only for material and silhouette comparison.
tools/build_spirit_guardian_assets.py regenerated 18 final
binary-alpha RGBA PNGs at 1x with integer coordinates and a
limited palette
limited palette; batch G re-cut all 22 guardian sheets to
6-frame ChatGPT grid drops via tools/slice_gpt_grid.py;
batch 2 re-cut all 7 normal-enemy sheets the same way
```

| Normal enemy | Silhouette that reads in combat | Behavior cue |
| --- | --- | --- |
| Wisp | crescent core and long smoke tail | default chase |
| Stalker | low four-legged body and backward spike horns | straight charge |
| Swarm | three moon-embers swapping places | weak and fast cluster |
| Ember | charcoal body and a large swaying flame crown | fast chase |
| Drifter | wide asymmetric moon-moth wings and a thin tail | high-inertia float |
| Weaver | broken orbit ring and four tentacles | orbit around the player |
| Caster | moon mask, long robe, and a forward staff | keep-distance fire |

Normal-enemy sheets are all `96×96` with `24×24` cells in four columns
down·up·left·right and four frame rows. They are not recolors. Asset
regression checks that all 7 alpha silhouettes and all 7 full-image
hashes differ.
| Wisp | round glowing body, sleepy face, light tail | default chase |
| Stalker | sleek shadow-cat, crescent marks, tail sway | straight charge |
| Swarm | tattered bat wings, glowing eyes | weak and fast cluster |
| Ember | cracked coal body, glowing seams, top flame | fast chase |
| Drifter | translucent bell head, trailing tentacles | high-inertia float |
| Weaver | round silver body, thin skitter legs | orbit around the player |
| Caster | wide-brim hat, tattered cloak, raised staff | keep-distance fire |

Normal-enemy sheets are all `288×48` with six `48×48` frames in one
facing-less row. They are not recolors. Asset regression checks that
all 7 alpha silhouettes and all 7 full-image hashes differ.

| Guardian | Idle | State sheets | Combat silhouette |
| --- | --- | --- | --- |
| Forest | `forest.png` 6 frames | wind-up, charge, recover 4 frames each | horns, long tree-arms, roots in the ground |
| Field | `field.png` 6 frames | cross wind-up, radial wind-up, recover 4 frames each | wide crescent wings, mask, cloud tentacles |
| Camp | `camp.png` 6 frames | wind-up, recover 4 frames each | beacon brazier, hammer, gate shield |

Guardian cells are `64×64`. Idle is `384×64`, state sheets `256×64`,
| Forest | `forest.png` 6 frames | wind-up, charge, recover 6 frames each | horns, long tree-arms, roots in the ground |
| Forest Thorn | `forest_thorn.png` 6 frames | wind-up, charge, recover 6 frames each | thorn crown, deeper bark, heavier arms |
| Field | `field.png` 6 frames | cross wind-up, radial wind-up, recover 6 frames each | wide crescent wings, mask, cloud tentacles |
| Field Storm | `field_storm.png` 6 frames | cross wind-up, radial wind-up, recover 6 frames each | lightning veins, torn wings, crackling tips |
| Camp | `camp.png` 6 frames | wind-up, recover 6 frames each | brazier helm, hammer, gate shield |
| Camp Siege | `camp_siege.png` 6 frames | wind-up, recover 6 frames each | siege plates, siege hammer, cracked shield |

Guardian cells are `64×64`. Idle and state sheets are all `384×64`,
horizontal layout with no facing. Every `SpiritKind` state slot is filled
with a custom sheet so mid-states do not fall back to the old free boss
picture.
picture. State sheets were re-cut to 6 frames (batch G) because 4-frame
combat motion reads choppy; the runtime stretches each sheet over its
state duration, so frame count only changes smoothness.

---

Expand Down
Binary file modified apps/game/assets/custom/actors/guardians/camp.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 modified apps/game/assets/custom/actors/guardians/camp_recover.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 modified apps/game/assets/custom/actors/guardians/camp_siege.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 modified apps/game/assets/custom/actors/guardians/camp_siege_recover.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 modified apps/game/assets/custom/actors/guardians/camp_siege_windup.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 modified apps/game/assets/custom/actors/guardians/camp_windup.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 modified apps/game/assets/custom/actors/guardians/field.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 modified apps/game/assets/custom/actors/guardians/field_recover.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 modified apps/game/assets/custom/actors/guardians/field_storm.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 modified apps/game/assets/custom/actors/guardians/field_storm_recover.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/game/assets/custom/actors/guardians/field_windup_cross.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 modified apps/game/assets/custom/actors/guardians/field_windup_radial.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 modified apps/game/assets/custom/actors/guardians/forest.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 modified apps/game/assets/custom/actors/guardians/forest_charge.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 modified apps/game/assets/custom/actors/guardians/forest_recover.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 modified apps/game/assets/custom/actors/guardians/forest_thorn.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 modified apps/game/assets/custom/actors/guardians/forest_thorn_charge.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified apps/game/assets/custom/actors/guardians/forest_thorn_windup.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 modified apps/game/assets/custom/actors/guardians/forest_windup.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 modified apps/game/assets/custom/actors/spirits/caster.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 modified apps/game/assets/custom/actors/spirits/drifter.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 modified apps/game/assets/custom/actors/spirits/ember.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 modified apps/game/assets/custom/actors/spirits/stalker.png
Binary file modified apps/game/assets/custom/actors/spirits/swarm.png
Binary file modified apps/game/assets/custom/actors/spirits/weaver.png
Binary file modified apps/game/assets/custom/actors/spirits/wisp.png
Binary file added apps/game/assets/custom/ui/icons/dew_hunter.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/dew_hunter.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://dudjmqtxdfpub"
path="res://.godot/imported/dew_hunter.png-dd9bc6d34a3b14c60f77f545365b324a.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/dew_hunter.png"
dest_files=["res://.godot/imported/dew_hunter.png-dd9bc6d34a3b14c60f77f545365b324a.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/heavy_arrow.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/heavy_arrow.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://c8ef0j143rfjp"
path="res://.godot/imported/heavy_arrow.png-72ed2eedc0f0f829bc8e72b35b437a16.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/heavy_arrow.png"
dest_files=["res://.godot/imported/heavy_arrow.png-72ed2eedc0f0f829bc8e72b35b437a16.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/light_step.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/light_step.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://bg83i6kw80t4r"
path="res://.godot/imported/light_step.png-6de2d923c74626340e71bfccc4040054.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/light_step.png"
dest_files=["res://.godot/imported/light_step.png-6de2d923c74626340e71bfccc4040054.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/long_blade.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/long_blade.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://c0xcqm1tcwggq"
path="res://.godot/imported/long_blade.png-c4e6db1ddec969881b40966871e57c2b.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/long_blade.png"
dest_files=["res://.godot/imported/long_blade.png-c4e6db1ddec969881b40966871e57c2b.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/moon_dash.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/moon_dash.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://bkw3rmxc8lt38"
path="res://.godot/imported/moon_dash.png-219ae3933e491a7902d969e88f163f17.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/moon_dash.png"
dest_files=["res://.godot/imported/moon_dash.png-219ae3933e491a7902d969e88f163f17.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/moon_ring.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/moon_ring.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://cbox4vq4l0dr1"
path="res://.godot/imported/moon_ring.png-5162da45887f6d122b7a88f458e7b855.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/moon_ring.png"
dest_files=["res://.godot/imported/moon_ring.png-5162da45887f6d122b7a88f458e7b855.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/moon_ripple.png
40 changes: 40 additions & 0 deletions apps/game/assets/custom/ui/icons/moon_ripple.png.import
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
[remap]

importer="texture"
type="CompressedTexture2D"
uid="uid://0wqdprf4tp54"
path="res://.godot/imported/moon_ripple.png-c5bceab477ceeb0f1860416a31f12bc6.ctex"
metadata={
"vram_texture": false
}

[deps]

source_file="res://assets/custom/ui/icons/moon_ripple.png"
dest_files=["res://.godot/imported/moon_ripple.png-c5bceab477ceeb0f1860416a31f12bc6.ctex"]

[params]

compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
compress/uastc_level=0
compress/rdo_quality_loss=0.0
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
process/channel_remap/red=0
process/channel_remap/green=1
process/channel_remap/blue=2
process/channel_remap/alpha=3
process/fix_alpha_border=true
process/premult_alpha=false
process/normal_map_invert_y=false
process/hdr_as_srgb=false
process/hdr_clamp_exposure=false
process/size_limit=0
detect_3d/compress_to=1
Binary file added apps/game/assets/custom/ui/icons/pierce_arrow.png
Loading
Loading