diff --git a/.gitea/workflows/build.yml b/.gitea/workflows/build.yml index bf0980a..3ed8fb5 100644 --- a/.gitea/workflows/build.yml +++ b/.gitea/workflows/build.yml @@ -83,6 +83,7 @@ jobs: VERSION="$(sed -n 's/.*config\/version="\([^"]*\)".*/\1/p' project.godot)" # NOTE: on Linux, makensis uses -D defines (the /D form is Windows-only # and is rejected as a script path). + cp assets/textures/icon.ico packaging/windows/step-line.ico makensis \ -DVERSION="$VERSION" \ -DARTIFACT="build/step-line-windows-$VERSION.exe" \ diff --git a/TODO.md b/TODO.md index f118e82..5964272 100644 --- a/TODO.md +++ b/TODO.md @@ -68,3 +68,7 @@ performance hardening only. - [ ] Profile the crowd: ensure textured materials and props hold target frame rate around a busy entrance. - [ ] Add LOD or culling for distant NPCs/props if the crowd grows. + +## Screenshot Refresh + +- [ ] Regenerate and verify the six README screenshots from the current build. diff --git a/assets/textures/icon.ico b/assets/textures/icon.ico index f6b33a2..6e3ed3d 100644 Binary files a/assets/textures/icon.ico and b/assets/textures/icon.ico differ diff --git a/docs/screenshots/03-access-inspection.png b/docs/screenshots/03-access-inspection.png index 79f79bf..74de4fb 100644 Binary files a/docs/screenshots/03-access-inspection.png and b/docs/screenshots/03-access-inspection.png differ diff --git a/docs/screenshots/04-radio-report.png b/docs/screenshots/04-radio-report.png index 10c424f..f3b3fbf 100644 Binary files a/docs/screenshots/04-radio-report.png and b/docs/screenshots/04-radio-report.png differ diff --git a/docs/screenshots/05-late-night-avenue.png b/docs/screenshots/05-late-night-avenue.png index 870df87..63b70d0 100644 Binary files a/docs/screenshots/05-late-night-avenue.png and b/docs/screenshots/05-late-night-avenue.png differ diff --git a/docs/screenshots/06-night-flashlight.png b/docs/screenshots/06-night-flashlight.png index ebcb280..1683483 100644 Binary files a/docs/screenshots/06-night-flashlight.png and b/docs/screenshots/06-night-flashlight.png differ diff --git a/packaging/windows/step-line.ico b/packaging/windows/step-line.ico index f6b33a2..6e3ed3d 100644 Binary files a/packaging/windows/step-line.ico and b/packaging/windows/step-line.ico differ diff --git a/src/game/ui/hud.gd b/src/game/ui/hud.gd index 96156d2..24629e3 100644 --- a/src/game/ui/hud.gd +++ b/src/game/ui/hud.gd @@ -180,9 +180,12 @@ func _init() -> void: icon_row.add_child(wand_icon) # --- inspect panel (popup center) --- + var inspect_center := CenterContainer.new() + inspect_center.set_anchors_preset(Control.PRESET_FULL_RECT) + inspect_center.mouse_filter = Control.MOUSE_FILTER_IGNORE + add_child(inspect_center) inspect_panel = PanelContainer.new() inspect_panel.visible = false - inspect_panel.set_anchors_preset(Control.PRESET_CENTER) inspect_panel.modulate.a = 1.0 var ivbox := VBoxContainer.new() inspect_panel.add_child(ivbox) @@ -197,12 +200,15 @@ func _init() -> void: insp_hint.text = "A = allow entry D = deny entry" insp_hint.add_theme_font_size_override("font_size", 12) ivbox.add_child(insp_hint) - add_child(inspect_panel) + inspect_center.add_child(inspect_panel) # --- wand screening panel (popup center) --- + var wand_center := CenterContainer.new() + wand_center.set_anchors_preset(Control.PRESET_FULL_RECT) + wand_center.mouse_filter = Control.MOUSE_FILTER_IGNORE + add_child(wand_center) wand_panel = PanelContainer.new() wand_panel.visible = false - wand_panel.set_anchors_preset(Control.PRESET_CENTER) var wvbox := VBoxContainer.new() wand_panel.add_child(wvbox) wand_text = Label.new() @@ -216,7 +222,7 @@ func _init() -> void: wand_hint.text = "A = admit D = refuse entry" wand_hint.add_theme_font_size_override("font_size", 12) wvbox.add_child(wand_hint) - add_child(wand_panel) + wand_center.add_child(wand_panel) # --- debug overlay --- debug_label = Label.new() diff --git a/src/game/ui/radio_panel.gd b/src/game/ui/radio_panel.gd index 69047fc..5c30598 100644 --- a/src/game/ui/radio_panel.gd +++ b/src/game/ui/radio_panel.gd @@ -34,9 +34,12 @@ func _init() -> void: dim.set_anchors_preset(Control.PRESET_FULL_RECT) add_child(dim) + var center := CenterContainer.new() + center.set_anchors_preset(Control.PRESET_FULL_RECT) + center.mouse_filter = Control.MOUSE_FILTER_IGNORE + add_child(center) panel = PanelContainer.new() - panel.set_anchors_preset(Control.PRESET_CENTER) - add_child(panel) + center.add_child(panel) var vbox := VBoxContainer.new() panel.add_child(vbox) diff --git a/src/test/capture_screenshots.gd b/src/test/capture_screenshots.gd index 9a45482..2d9148e 100644 --- a/src/test/capture_screenshots.gd +++ b/src/test/capture_screenshots.gd @@ -12,9 +12,10 @@ var gm: Node = null var state := 0 var state_frames := 0 var targeted := false +var camera_staged := false func _initialize() -> void: - root.size = Vector2i(1600, 900) + root.size = Vector2i(1280, 720) var packed: PackedScene = load("res://scenes/main.tscn") var inst: Node = packed.instantiate() root.add_child(inst) @@ -29,6 +30,10 @@ func _process(_delta: float) -> bool: push_error("GameManager not found") quit(1) return true + if gm != null and not camera_staged: + gm.guard.global_position = Vector3(0, 1.6, 5.0) + gm.guard.head.rotation.x = deg_to_rad(-8.0) + camera_staged = true if frames > MAX_FRAMES: print("timeout reached") quit(0) diff --git a/tools/generate_textures.py b/tools/generate_textures.py index 9d98c06..f9a5e6d 100644 --- a/tools/generate_textures.py +++ b/tools/generate_textures.py @@ -306,12 +306,12 @@ def app_icon(): icon("icon.png", badge, size=1024) icon("icon.ico", badge, size=256) - # multi-size ICO for Windows (from the 256 render) - src = Image.open(os.path.join(ASSETS, "icon.png")) + # ICO for Windows. Sizes stay at 16/32/48 so every entry uses classic BMP + # (PNG-compressed entries, used by PIL at >=256px, break some NSIS builds). + src = Image.open(os.path.join(ASSETS, "icon.png")).convert("RGBA") ico_path = os.path.join(ASSETS, "icon.ico") - src.save(ico_path, format="ICO", sizes=[ - (256, 256), (128, 128), (64, 64), (48, 48), (32, 32), (16, 16)]) - print("wrote assets/textures/icon.ico (multi-size)") + src.save(ico_path, format="ICO", sizes=[(48, 48), (32, 32), (16, 16)]) + print("wrote assets/textures/icon.ico (BMP 16/32/48)") def cards():