diff --git a/game/assets/map/stage_01.map b/game/assets/map/stage_01.map index 2b6e000..f2e561d 100644 --- a/game/assets/map/stage_01.map +++ b/game/assets/map/stage_01.map @@ -12,47 +12,47 @@ collision 1760 500 300 28 collision 2180 455 260 28 collision 2650 515 360 28 -tileset graybox_ground assets/stage/stage_01/tiles/graybox_ground.png 10 10 0.62 0.68 0.73 1.0 -tileset graybox_platform assets/stage/stage_01/tiles/graybox_platform.png 10 14 0.62 0.68 0.73 1.0 - layer background_far BackgroundFar 0.25 -rect 0 0 3200 720 0.08 0.10 0.14 1.0 -rect 360 120 420 220 0.13 0.16 0.21 1.0 -rect 1380 90 560 260 0.12 0.15 0.20 1.0 -rect 2440 140 520 210 0.13 0.16 0.21 1.0 +rect 0 0 3200 720 0.04 0.06 0.05 1.0 +rect_sprite_src -140 80 980 620 0.34 0.54 0.36 0.38 assets/stage/stage_01/background/mossy_background_decoration.png 0 0 1030 4096 +rect_sprite_src 860 35 940 620 0.30 0.50 0.34 0.34 assets/stage/stage_01/background/mossy_background_decoration.png 1180 0 900 3500 +rect_sprite_src 2020 100 980 560 0.31 0.52 0.34 0.34 assets/stage/stage_01/background/mossy_background_decoration.png 2680 170 1060 1520 +rect_sprite_src 2660 410 1060 360 0.26 0.44 0.30 0.30 assets/stage/stage_01/background/mossy_background_decoration.png 2460 2920 1180 880 endlayer layer background_mid BackgroundMid 0.55 -rect 80 360 280 240 0.18 0.22 0.27 1.0 -rect 1020 310 340 290 0.18 0.22 0.27 1.0 -rect 2020 330 360 270 0.18 0.22 0.27 1.0 -rect 2860 280 260 320 0.18 0.22 0.27 1.0 +rect_sprite_src -180 390 560 260 0.45 0.70 0.45 0.42 assets/stage/stage_01/background/mossy_hills.png 50 580 420 420 +rect_sprite_src 520 335 760 300 0.46 0.72 0.46 0.36 assets/stage/stage_01/background/mossy_hills.png 720 40 1160 500 +rect_sprite_src 1390 360 720 270 0.42 0.68 0.43 0.36 assets/stage/stage_01/background/mossy_hills.png 760 650 1120 720 +rect_sprite_src 2310 330 760 310 0.40 0.66 0.42 0.36 assets/stage/stage_01/background/mossy_hills.png 645 650 1280 840 +rect_sprite_src 2860 400 560 240 0.43 0.68 0.44 0.34 assets/stage/stage_01/background/mossy_hills.png 1460 1520 520 420 endlayer layer level_visual LevelVisual 1.0 -tile_rect graybox_ground 0 600 320 8 0 0.62 0.68 0.73 -tile_rect graybox_platform 230 500 22 2 0 0.62 0.68 0.73 -tile_rect graybox_platform 560 430 26 2 0 0.62 0.68 0.73 -tile_rect graybox_platform 930 510 26 2 0 0.62 0.68 0.73 -tile_rect graybox_platform 1250 420 23 2 0 0.62 0.68 0.73 -tile_rect graybox_platform 1760 500 30 2 0 0.62 0.68 0.73 -tile_rect graybox_platform 2180 455 26 2 0 0.62 0.68 0.73 -tile_rect graybox_platform 2650 515 36 2 0 0.62 0.68 0.73 +rect_sprite_src -70 520 1680 270 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 420 1120 1560 490 +rect_sprite_src 1520 520 1680 270 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 420 1120 1560 490 +rect_sprite_src 230 460 240 100 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 500 40 1050 420 +rect_sprite_src 540 390 300 105 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 500 540 1060 430 +rect_sprite_src 910 470 310 105 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 500 40 1050 420 +rect_sprite_src 1230 380 270 105 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 500 540 1060 430 +rect_sprite_src 1740 460 340 105 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 500 40 1050 420 +rect_sprite_src 2160 415 300 105 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 500 540 1060 430 +rect_sprite_src 2625 475 400 120 1.0 1.0 1.0 1.0 assets/stage/stage_01/tiles/mossy_floating_platforms.png 420 1120 1560 490 endlayer layer props_back PropsBack 1.0 -rect 118 392 88 208 0.26 0.30 0.34 1.0 -rect 780 250 72 180 0.26 0.30 0.34 1.0 -rect 1440 300 80 300 0.26 0.30 0.34 1.0 -rect 1880 360 110 240 0.26 0.30 0.34 1.0 -rect 2520 390 92 210 0.26 0.30 0.34 1.0 -rect 3040 315 82 285 0.26 0.30 0.34 1.0 +rect_sprite_src 110 120 150 500 0.78 0.94 0.72 0.72 assets/stage/stage_01/props/mossy_hanging_plants.png 70 0 360 1240 +rect_sprite_src 780 80 130 430 0.78 0.94 0.72 0.62 assets/stage/stage_01/props/mossy_hanging_plants.png 550 0 330 1180 +rect_sprite_src 1430 115 150 520 0.78 0.94 0.72 0.68 assets/stage/stage_01/props/mossy_hanging_plants.png 990 0 360 1300 +rect_sprite_src 1880 155 190 420 0.78 0.94 0.72 0.62 assets/stage/stage_01/props/mossy_hanging_plants.png 1340 0 470 1040 +rect_sprite_src 2510 160 170 450 0.78 0.94 0.72 0.64 assets/stage/stage_01/props/mossy_hanging_plants.png 540 1260 420 1040 +rect_sprite_src 3030 110 160 500 0.78 0.94 0.72 0.66 assets/stage/stage_01/props/mossy_hanging_plants.png 1020 1320 420 1120 endlayer layer props_front PropsFront 1.0 -rect 520 580 220 34 0.14 0.17 0.18 0.90 -rect 1510 570 280 42 0.14 0.17 0.18 0.90 -rect 2580 572 260 38 0.14 0.17 0.18 0.90 +rect_sprite_src 510 560 260 80 0.85 1.0 0.82 0.78 assets/stage/stage_01/tiles/mossy_floating_platforms.png 0 540 430 430 +rect_sprite_src 1490 545 330 95 0.85 1.0 0.82 0.78 assets/stage/stage_01/tiles/mossy_floating_platforms.png 0 540 430 430 +rect_sprite_src 2560 550 330 90 0.85 1.0 0.82 0.78 assets/stage/stage_01/tiles/mossy_floating_platforms.png 0 540 430 430 endlayer battle_zone zone_01_intro 520 260 560 340 0 0 1940 720 diff --git a/game/assets/stage/stage_01/ASSETS.md b/game/assets/stage/stage_01/ASSETS.md index 8c6b117..dd19e26 100644 --- a/game/assets/stage/stage_01/ASSETS.md +++ b/game/assets/stage/stage_01/ASSETS.md @@ -6,12 +6,14 @@ This directory is reserved for the first playable side-scrolling ACT stage. | Slot | Expected file | Notes | Source / License | | --- | --- | --- | --- | -| Far background | `background/background_far.png` | Large or horizontally tileable image. | TBD | -| Mid background | `background/background_mid.png` | Parallax midground image or prop sheet. | TBD | -| Tileset | `tiles/stage_01_tileset.png` | Ground, platform, wall, edge tiles. | TBD | +| Far background | `background/mossy_background_decoration.png` | Mossy cave silhouettes used by `BackgroundFar` layer. | Local asset pack: `X:\NS_unknown_game\asset\Mossy Cavern`; license TBD | +| Mid background | `background/mossy_hills.png` | Mossy hill silhouettes used by `BackgroundMid` layer. | Local asset pack: `X:\NS_unknown_game\asset\Mossy Cavern`; license TBD | +| Tileset | `tiles/mossy_tileset.png` | Full Mossy tileset atlas, reserved for later tile-id based editing. | Local asset pack: `X:\NS_unknown_game\asset\Mossy Cavern`; license TBD | +| Floating platforms | `tiles/mossy_floating_platforms.png` | Current `LevelVisual` ground and platform sprites in `stage_01.map`. | Local asset pack: `X:\NS_unknown_game\asset\Mossy Cavern`; license TBD | | Graybox ground tiles | `tiles/graybox_ground.png` | Optional temporary tileset referenced by `stage_01.map`; fallback color is used if missing. | TBD | | Graybox platform tiles | `tiles/graybox_platform.png` | Optional temporary platform tileset referenced by `stage_01.map`; fallback color is used if missing. | TBD | -| Props sheet | `props/stage_01_props.png` | Crates, signs, lamps, blockers, exits. | TBD | +| Props sheet | `props/mossy_hanging_plants.png` | Current hanging plant props used by `PropsBack` layer. | Local asset pack: `X:\NS_unknown_game\asset\Mossy Cavern`; license TBD | +| Decoration / hazards sheet | `props/mossy_decorations_hazards.png` | Reserved for later foreground props and hazards; not used for gameplay yet. | Local asset pack: `X:\NS_unknown_game\asset\Mossy Cavern`; license TBD | | Hit spark | `effects/hit_spark.png` | Small combat impact effect. | TBD | | Dust | `effects/dust.png` | Run, jump, and landing dust. | TBD | | Music / ambience | `../../music/stage_01.ogg` | Optional loopable stage audio cue. | TBD | @@ -23,3 +25,4 @@ This directory is reserved for the first playable side-scrolling ACT stage. - Prefer PNG for visual assets. - Record the original download URL, author, license, and any attribution text before using an asset. - Keep collision data separate from visual tiles; visual alignment should stay within 4 pixels of collision. +- Current Mossy Cavern integration only covers map scene visuals. Character animations, slimes, plant animations, hazards, and combat use are intentionally deferred. diff --git a/game/assets/stage/stage_01/background/mossy_background_decoration.png b/game/assets/stage/stage_01/background/mossy_background_decoration.png new file mode 100644 index 0000000..265b6f3 Binary files /dev/null and b/game/assets/stage/stage_01/background/mossy_background_decoration.png differ diff --git a/game/assets/stage/stage_01/background/mossy_hills.png b/game/assets/stage/stage_01/background/mossy_hills.png new file mode 100644 index 0000000..703a2f4 Binary files /dev/null and b/game/assets/stage/stage_01/background/mossy_hills.png differ diff --git a/game/assets/stage/stage_01/props/mossy_decorations_hazards.png b/game/assets/stage/stage_01/props/mossy_decorations_hazards.png new file mode 100644 index 0000000..c7ae981 Binary files /dev/null and b/game/assets/stage/stage_01/props/mossy_decorations_hazards.png differ diff --git a/game/assets/stage/stage_01/props/mossy_hanging_plants.png b/game/assets/stage/stage_01/props/mossy_hanging_plants.png new file mode 100644 index 0000000..7b4d0e5 Binary files /dev/null and b/game/assets/stage/stage_01/props/mossy_hanging_plants.png differ diff --git a/game/assets/stage/stage_01/tiles/mossy_floating_platforms.png b/game/assets/stage/stage_01/tiles/mossy_floating_platforms.png new file mode 100644 index 0000000..96e9b66 Binary files /dev/null and b/game/assets/stage/stage_01/tiles/mossy_floating_platforms.png differ diff --git a/game/assets/stage/stage_01/tiles/mossy_tileset.png b/game/assets/stage/stage_01/tiles/mossy_tileset.png new file mode 100644 index 0000000..a0b28a9 Binary files /dev/null and b/game/assets/stage/stage_01/tiles/mossy_tileset.png differ diff --git a/game/docs/modules/data_map.md b/game/docs/modules/data_map.md index f8294cd..7b754a7 100644 --- a/game/docs/modules/data_map.md +++ b/game/docs/modules/data_map.md @@ -72,11 +72,18 @@ endbattle_zone - `tile_index` 当前表示 tileset 第一行的横向 tile 序号。 - `r g b` 是该批 tile 的灰盒 fallback 色,alpha 固定为 `1.0`。 -当前 `stage_01.map` 已把 `level_visual` 地面和平台从长色块替换为 `tile_rect`,碰撞仍由 `collision` 独立定义。 +当前 `stage_01.map` 已接入 Mossy Cavern 场景图集: + +- `BackgroundFar` 使用 `mossy_background_decoration.png` 做远景洞穴轮廓。 +- `BackgroundMid` 使用 `mossy_hills.png` 做中景苔藓轮廓。 +- `LevelVisual` 使用 `mossy_floating_platforms.png` 做地面和悬空平台。 +- `PropsBack` / `PropsFront` 使用苔藓悬挂植物和平台边缘装饰。 + +本轮只接入地图场景视觉,碰撞仍由 `collision` 独立定义;角色、怪物、植物动画和 hazard 玩法暂不接入。 ## 下一步 -- 下一阶段开始正式做地图场景,优先建设简易 `.map` 编辑器,详见 `map_editor.md`。 +- 继续用地图编辑器调整 Mossy 场景视觉块和碰撞对齐。 - 把 `tile_rect` 扩展成可表达 tile row/column 或 tile id。 - 增加空 layer、battle zone 无 spawn、tile texture 不存在等更严格错误日志。 - 保留 `whitebox_level.cpp` 作为 fallback,不再把主地图写死在 C++。 diff --git a/game/docs/modules/stage_rendering.md b/game/docs/modules/stage_rendering.md index 12061e1..eadc165 100644 --- a/game/docs/modules/stage_rendering.md +++ b/game/docs/modules/stage_rendering.md @@ -34,6 +34,20 @@ UI - 支持 `.map` tile entry 绘制。 - 支持 tileset 图片缺失时按 tile fallback 色绘制。 - 资源缺失时先检查 `Asset::exists()`,再回退色块,不触发纹理加载错误日志。 +- `LevelVisual` 里的贴图矩形不再叠加灰盒顶边辅助线;只有纯色占位块会显示该辅助线。 + +## 当前素材接入 + +第一关已经通过 `rect_sprite_src` 接入 Mossy Cavern 场景图集: + +- `background/mossy_background_decoration.png` +- `background/mossy_hills.png` +- `tiles/mossy_floating_platforms.png` +- `props/mossy_hanging_plants.png` +- `props/mossy_decorations_hazards.png` +- `tiles/mossy_tileset.png` + +由于当前 `tile_rect` 只能取 tileset 第一行,正式 Mossy 场景暂时优先使用 `rect_sprite_src` 从大图集裁切。`mossy_tileset.png` 已落位,等后续扩展 tile row/column 或 tile id 后再用于精细铺砖。 ## 约束 @@ -44,5 +58,5 @@ UI ## 下一步 - 给 tile entry 增加 tile id 或二维 source index。 -- 把正式 tileset 素材接入 `stage_01.map`。 +- 用地图编辑器继续调整 Mossy 场景块、前后景装饰和碰撞对齐。 - 如果引擎提供统一 Texture cache,再迁移当前局部贴图缓存。 diff --git a/game/docs/planning/scene_build_plan.md b/game/docs/planning/scene_build_plan.md index c6ca6e3..bd48afe 100644 --- a/game/docs/planning/scene_build_plan.md +++ b/game/docs/planning/scene_build_plan.md @@ -319,3 +319,14 @@ game/assets/stage/stage_01/ 3. 把灰盒 `StageLayer` 的色块替换成 sprite/tile 条目。 4. 对齐视觉块和碰撞块,误差控制在 4 像素以内。 5. 更新素材来源和授权记录。 + +### Mossy Cavern 场景接入 + +当前第一关已经先接入 `X:\NS_unknown_game\asset\Mossy Cavern` 的场景图集,范围只包含地图视觉: + +1. 已完成:把 Mossy 背景、平台、悬挂植物和装饰图集复制到 `game/assets/stage/stage_01/`,并统一为小写下划线路径。 +2. 已完成:`stage_01.map` 的 `BackgroundFar`、`BackgroundMid`、`LevelVisual`、`PropsBack`、`PropsFront` 已改用 `rect_sprite_src` 裁切 Mossy 图集。 +3. 已完成:碰撞、玩家出生点、camera bounds、battle zone 和 spawn point 保持原数据,不把视觉块当碰撞使用。 +4. 已完成:贴图 `LevelVisual` 不再叠加灰盒辅助顶线,避免平台素材显示异常。 + +暂不接入 `BlueWizard Animations`、`Plant Animations`、`Slimes` 和 hazard 玩法。下一步围绕地图编辑器继续微调场景块位置和碰撞对齐。 diff --git a/game/src/stage/stage_renderer.cpp b/game/src/stage/stage_renderer.cpp index 4b45e68..aeb99dd 100644 --- a/game/src/stage/stage_renderer.cpp +++ b/game/src/stage/stage_renderer.cpp @@ -107,7 +107,7 @@ void StageRenderer::drawLayer(const LevelDefinition& level, rect.bounds.top() + parallaxOffset.y, rect.bounds.width(), rect.bounds.height()); drawStageRect(rect, bounds); - if (layer.role == StageLayerRole::LevelVisual) { + if (layer.role == StageLayerRole::LevelVisual && !rect.source.hasTexture()) { drawRect(frostbite2D::Rect(bounds.left(), bounds.top(), bounds.width(), 4.0f), frostbite2D::Color(0.91f, 0.95f, 0.98f, 1.0f));