Skip to content
Open
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
10 changes: 10 additions & 0 deletions scripts/levels/chapter_layout.gd
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,16 @@ const DECOR := {
"altar": "res://assets/env/bg_altar.png", # 祭坛墙板(背景,接地)
"window": "res://assets/env/bg_wall_window.png", # 尖窗墙板(背景,接地)
"skull_column": "res://assets/env/bg_column_skulls.png", # 骷髅柱(背景,接地)
# 工业/熔炉:Kenney Request pack + 干石渣(避免苔拱/教堂柱串味)
"beam": "res://assets/external/kenney/Art (5190 files)/Platformer assets (1330 assets)/Request pack (100 assets)/PNG/beam.png",
"beam_bolts": "res://assets/external/kenney/Art (5190 files)/Platformer assets (1330 assets)/Request pack (100 assets)/PNG/beamBolts.png",
"beam_narrow": "res://assets/external/kenney/Art (5190 files)/Platformer assets (1330 assets)/Request pack (100 assets)/PNG/beamNarrow.png",
"metal_panel": "res://assets/external/kenney/Art (5190 files)/Platformer assets (1330 assets)/Request pack (100 assets)/PNG/metal.png",
"rubble_dry": "res://assets/env/rubble_a.png",
"rubble_dry_b": "res://assets/env/rubble_b.png",
"rubble_dry_c": "res://assets/env/rubble_c.png",
"slab": "res://assets/env/slab_a.png",
"plate": "res://assets/env/plate_stone.png",
"statue": "res://assets/env/statue_keeper.png", # 守墓者石像,接地
"grave_cross": "res://assets/env/grave_cross.png", # 十字墓碑,接地
"door_arch": "res://assets/env/door_arch.png", # 32×64 石门洞(装饰),接地
Expand Down
38 changes: 19 additions & 19 deletions scripts/levels/chapters/level05_layout.gd
Original file line number Diff line number Diff line change
Expand Up @@ -222,27 +222,27 @@ func _build_enemies(host: Node2D) -> void:
## -------------------------------------------------------------------- decor --

func _build_decor(host: Node2D) -> void:
# A 入口车间:来路的门洞、壁炬、碎石
prop(host, "door_arch", Vector2(96, FLOOR_Y))
# A 入口车间:金属梁、壁炬、干石渣(不再用苔门拱/教堂柱)
prop(host, "beam_bolts", Vector2(96, FLOOR_Y), 1.0, Color(0.75, 0.7, 0.65))
torch(host, 440.0, FLOOR_Y, TORCH_TINT)
prop(host, "rubble", Vector2(456, FLOOR_Y))
# B 淬火槽:坑沿石栏,走道下的壁炬(火焰在走道底下 16px),台阶靠着一根大柱
prop(host, "balustrade", Vector2(728, FLOOR_Y))
prop(host, "rubble_dry", Vector2(456, FLOOR_Y))
# B 淬火槽:坑沿钢板,走道栏改短梁;支柱用带螺栓的工字梁
prop(host, "plate", Vector2(728, FLOOR_Y), 1.0, Color(0.7, 0.62, 0.55))
torch(host, 760.0, FLOOR_Y, TORCH_TINT)
prop(host, "balustrade", Vector2(840, WALK_Y))
prop(host, "rubble", Vector2(900, FLOOR_Y))
prop(host, "column", Vector2(990, FLOOR_Y))
# D 压板塔:巢边壁炬、盲门洞、碎石;压板台上一段石栏;走廊尽头一根大柱
prop(host, "beam_narrow", Vector2(840, WALK_Y), 1.0, Color(0.72, 0.66, 0.58))
prop(host, "rubble_dry_b", Vector2(900, FLOOR_Y))
prop(host, "beam", Vector2(990, FLOOR_Y), 1.15, Color(0.68, 0.58, 0.5))
# D 压板塔:巢边壁炬、金属门板、干渣;走廊尽头工字梁
torch(host, 1688.0, FLOOR_Y, TORCH_TINT)
prop(host, "balustrade", Vector2(1736, DECK_Y))
prop(host, "door_arch", Vector2(1760, FLOOR_Y))
prop(host, "rubble", Vector2(1808, FLOOR_Y))
prop(host, "column", Vector2(1990, FLOOR_Y))
# F 锈门与运渣道:落点碎石、台阶靠柱、走道西端石栏、锈门前壁炬
prop(host, "rubble", Vector2(2536, FLOOR_Y))
prop(host, "column", Vector2(2672, FLOOR_Y))
prop(host, "balustrade", Vector2(2856, WALK_Y))
prop(host, "beam_narrow", Vector2(1736, DECK_Y), 1.0, Color(0.72, 0.66, 0.58))
prop(host, "metal_panel", Vector2(1760, FLOOR_Y), 1.2, Color(0.7, 0.6, 0.52))
prop(host, "rubble_dry_c", Vector2(1808, FLOOR_Y))
prop(host, "beam_bolts", Vector2(1990, FLOOR_Y), 1.1, Color(0.68, 0.58, 0.5))
# F 锈门与运渣道。
prop(host, "rubble_dry", Vector2(2536, FLOOR_Y))
prop(host, "beam", Vector2(2672, FLOOR_Y), 1.15, Color(0.68, 0.58, 0.5))
prop(host, "plate", Vector2(2856, WALK_Y), 1.0, Color(0.7, 0.62, 0.55))
torch(host, 2832.0, FLOOR_Y, TORCH_TINT)
# 顶板垂下的旧缆:少量,避开吊台链子扫过的范围
for x in [300.0, 600.0, 1560.0, 2090.0, 2596.0]:
# 顶板垂下的旧缆:仍用窄藤条资源,但染成锈缆色,数量更少
for x in [300.0, 1560.0, 2596.0]:
hanging(host, "vine", Vector2(x, 0), CABLE_TINT)
26 changes: 16 additions & 10 deletions scripts/levels/chapters/level08_layout.gd
Original file line number Diff line number Diff line change
Expand Up @@ -164,16 +164,16 @@ func _build_terrain(host: Node2D) -> void:
for f in FLOORS:
var x0: float = f[1]
var x1: float = f[2]
floor_strip(host, String(f[0]), x0, x1, "moss", x0 > 0.0, x1 < float(EAST_LIMIT), FLOOR_Y, GROUND_TONE)
floor_strip(host, String(f[0]), x0, x1, "stone", x0 > 0.0, x1 < float(EAST_LIMIT), FLOOR_Y, GROUND_TONE)
for p in PITS:
_slag_pit(host, String(p[0]), p[1], p[2])
for s in STEPS:
step(host, String(s[0]), s[1], s[2], "moss_float", GROUND_TONE)
platform(host, "SlagPillar", PILLAR_POS, PILLAR_SIZE, "moss", true, true, GROUND_TONE)
step(host, String(s[0]), s[1], s[2], "floating", GROUND_TONE)
platform(host, "SlagPillar", PILLAR_POS, PILLAR_SIZE, "stone", true, true, GROUND_TONE)
for g in GEARS:
var octagon := gear(host, String(g[0]), g[1], g[2])
octagon.modulate = LIFT_TONE
enclose(host, "moss", CEILING_Y, -1.0, 0.0, GROUND_TONE)
enclose(host, "stone", CEILING_Y, -1.0, 0.0, GROUND_TONE)
var lift_a := lift(host, "LiftA", LIFT_A_POS, LIFT_A_TRAVEL, LIFT_PERIOD, LIFT_WIDTH, 0.0)
lift_a.modulate = LIFT_TONE
var lift_b := lift(host, "LiftB", LIFT_B_POS, LIFT_B_TRAVEL, LIFT_PERIOD, LIFT_WIDTH, LIFT_B_PHASE)
Expand All @@ -185,7 +185,7 @@ func _build_terrain(host: Node2D) -> void:
func _slag_pit(host: Node2D, pit_name: String, x0: float, x1: float) -> ToxinPool:
var bed_y := FLOOR_Y + PIT_DEPTH
platform(host, pit_name + "Bed", Vector2(x0, bed_y), Vector2(x1 - x0, FLOOR_Y + 80.0 - bed_y),
"moss", false, false, GROUND_TONE)
"stone", false, false, GROUND_TONE)
return toxin(host, pit_name + "Pool", Vector2(x0, bed_y - 16.0), Vector2(x1 - x0, 32.0), SLAG_TINT)


Expand All @@ -210,11 +210,17 @@ func _build_enemies(host: Node2D) -> void:
func _build_decor(host: Node2D) -> void:
for x in TORCHES:
torch(host, x, FLOOR_Y, TORCH_TINT)
for x in VINES:
# 旧缆减半,染成炉渣锈色;地面用干石/石板,支柱用工字梁。
var cable_xs: Array = []
for i in range(VINES.size()):
if i % 2 == 0:
cable_xs.append(VINES[i])
for x in cable_xs:
hanging(host, "vine", Vector2(x, CEILING_Y + 32.0), VINE_TINT)
for x in ARCHES:
prop(host, "arch", Vector2(x, FLOOR_Y), 1.0, ARCH_TINT)
for x in RUBBLE:
prop(host, "rubble", Vector2(x, FLOOR_Y), 1.0, RUBBLE_TINT)
prop(host, "slab", Vector2(x, FLOOR_Y), 1.15, ARCH_TINT)
var rubble_keys := ["rubble_dry", "rubble_dry_b", "rubble_dry_c"]
for i in range(RUBBLE.size()):
prop(host, rubble_keys[i % rubble_keys.size()], Vector2(RUBBLE[i], FLOOR_Y), 1.0, RUBBLE_TINT)
for x in COLUMNS:
prop(host, "column", Vector2(x, FLOOR_Y), 1.0, COLUMN_TINT)
prop(host, "beam_bolts", Vector2(x, FLOOR_Y), 1.2, COLUMN_TINT)
22 changes: 12 additions & 10 deletions scripts/levels/chapters/level10_layout.gd
Original file line number Diff line number Diff line change
Expand Up @@ -116,18 +116,18 @@ func build(host: Node2D) -> void:


func _build_terrain(host: Node2D) -> void:
floor_strip(host, "FloorEntry", 0.0, SLAG_X0, "moss", false, true, FLOOR_Y, TONE)
floor_strip(host, "FloorEntry", 0.0, SLAG_X0, "stone", false, true, FLOOR_Y, TONE)
# 熔渣河手工铺(toxin_pit 不吃 tone,坑底会露出一截青苔色)。
platform(host, "SlagBed", Vector2(SLAG_X0, SLAG_BED_Y),
Vector2(SLAG_X1 - SLAG_X0, FLOOR_Y + 80.0 - SLAG_BED_Y), "moss", false, false, TONE)
Vector2(SLAG_X1 - SLAG_X0, FLOOR_Y + 80.0 - SLAG_BED_Y), "stone", false, false, TONE)
toxin(host, "SlagPool", Vector2(SLAG_X0, SLAG_BED_Y - 16.0), Vector2(SLAG_X1 - SLAG_X0, 32.0), SLAG_TINT)
for s in SLAG_STONES:
step(host, String(s[0]), s[1], float(s[2]), "moss_float", STONE_TONE)
step(host, String(s[0]), s[1], float(s[2]), "floating", STONE_TONE)
# 门前厅 + 竞技场 + 终局门共用一块地:竞技场必须是连续平地,Boss 来回冲锋。
floor_strip(host, "FloorHall", SLAG_X1, float(EAST_LIMIT), "moss", true, false, FLOOR_Y, TONE)
platform(host, "PerchWest", PERCH_WEST_POS, PERCH_SIZE, "moss", true, true, STONE_TONE)
platform(host, "PerchEast", PERCH_EAST_POS, PERCH_SIZE, "moss", true, true, STONE_TONE)
enclose(host, "moss", CEILING_Y, -1.0, 0.0, TONE)
floor_strip(host, "FloorHall", SLAG_X1, float(EAST_LIMIT), "stone", true, false, FLOOR_Y, TONE)
platform(host, "PerchWest", PERCH_WEST_POS, PERCH_SIZE, "stone", true, true, STONE_TONE)
platform(host, "PerchEast", PERCH_EAST_POS, PERCH_SIZE, "stone", true, true, STONE_TONE)
enclose(host, "stone", CEILING_Y, -1.0, 0.0, TONE)


func _build_props(host: Node2D) -> void:
Expand Down Expand Up @@ -155,12 +155,14 @@ func _build_enemies(host: Node2D) -> void:
func _build_decor(host: Node2D) -> void:
for x in TORCHES:
torch(host, float(x), FLOOR_Y, TORCH_TINT)
# 炉心支柱改工字梁;骷髅柱与祭坛保留作为终关符号。
for x in COLUMNS:
prop(host, "column", Vector2(float(x), FLOOR_Y), 1.0, PLATE_TINT)
prop(host, "beam", Vector2(float(x), FLOOR_Y), 1.25, PLATE_TINT)
prop(host, "skull_column", Vector2(SKULL_COLUMN_X, FLOOR_Y), 1.0, PLATE_TINT)
_altar(host, ALTAR_FEET, ALTAR_TINT)
for x in RUBBLE:
prop(host, "rubble", Vector2(float(x), FLOOR_Y), 1.0, TONE)
var rubble_keys := ["rubble_dry", "rubble_dry_b", "rubble_dry_c"]
for i in range(RUBBLE.size()):
prop(host, rubble_keys[i % rubble_keys.size()], Vector2(float(RUBBLE[i]), FLOOR_Y), 1.0, TONE)


## 炉心祭坛:终局门旁的背景墙板,残芯的所在。顶 64px 是素墙,走 RuinPlate 塌成残垣,
Expand Down
8 changes: 5 additions & 3 deletions scripts/levels/theme_backdrop.gd
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,16 @@ const THEMES := {
{"path": COLUMN_PATH, "scroll": Vector2(0.66, 0.3), "pos": Vector2(96, 336 - 171), "scale": 0.9, "tint": Color(0.16, 0.24, 0.25, 0.9), "repeat": 352.0},
],
},
# 熔炉:同一套地窟墙,压成琥珀色;底色偏赭
# 熔炉:工业剪影压成琥珀色(不再用城堡尖窗内景,避免和圣殿撞脸)
"forge": {
"indoors": true,
"void": Color(0.09, 0.04, 0.025),
"mood": Color(0.95, 0.74, 0.56),
"layers": [
{"path": CASTLE_INTERIOR, "scroll": Vector2(0.42, 0.18), "pos": Vector2(0, 48), "scale": 1.0, "tint": Color(1.0, 0.78, 0.6)},
{"path": COLUMN_PATH, "scroll": Vector2(0.66, 0.3), "pos": Vector2(96, 336 - 171), "scale": 0.9, "tint": Color(0.28, 0.16, 0.1, 0.9), "repeat": 352.0},
{"path": INDUSTRIAL_DIR + "skill-desc_0003_bg.png", "scroll": Vector2(0.04, 0.02), "pos": Vector2(0, 0), "scale": 2.25, "tint": Color(1.0, 0.78, 0.62)},
{"path": INDUSTRIAL_DIR + "skill-desc_0002_far-buildings.png", "scroll": Vector2(0.18, 0.06), "pos": Vector2(0, 40), "scale": 2.25, "tint": Color(0.92, 0.62, 0.48)},
{"path": INDUSTRIAL_DIR + "skill-desc_0001_buildings.png", "scroll": Vector2(0.4, 0.1), "pos": Vector2(0, 8), "scale": 2.25, "tint": Color(0.78, 0.48, 0.36)},
{"path": INDUSTRIAL_DIR + "skill-desc_0000_foreground.png", "scroll": Vector2(0.62, 0.14), "pos": Vector2(0, 120), "scale": 2.1, "tint": Color(0.55, 0.28, 0.18, 0.85)},
],
},
# 圣殿:哥特城堡大厅面板(楼梯、尖窗、石像鬼、烛龛)拼成一条重复的殿墙。
Expand Down