Force-spawn the requested portrait role and close the hooded close-up
Full build / Import + headless tests (push) Successful in 46s
Full build / Full desktop build + optional release (push) Skipped

This commit is contained in:
zwitschi committed 2026-11-04 09:09:44 +01:00
1 parent 3084145031
commit 60f389c16b
2 files changed
+14 -2

No files matched your search

+6 -2
View File
@@ -242,8 +242,12 @@ licence-free zone only.
- [ ] Use the generated concept lighting and palette as the target for the `lighting`/`lookdev`
pass, and record the deviations that stay accepted.
- [ ] After the pass, regenerate the venue captures and update README plus both venue documents.
- [ ] Hooded/winter portrait: close the deferred close-up by staging a types 5–7 capture
(`--portrait-type`) or adding a scenario spawn that provides one.
- [x] Hooded/winter portrait: `capture_realism.gd` now force-spawns the requested `--portrait-type`
when the role is event-driven (types 5–7 do not appear in the routine day crowd), so the
deferred close-up can be staged. Captured `--portrait-type=5` and vision-reviewed: the hood
reads as a hoodie (drawstrings + face opening) but is snug — no slack volume behind the
head/drape at the neck — and the face stays fully lit with no inner-rim shadow. Acceptable;
the snug hood is a minor scorecard note, not a P0/P1.
### F. Reference images, concept boards and screenshots
+8
View File
@@ -208,6 +208,14 @@ func _begin_stage() -> void:
_apply(night_swaps)
_queue = (stage["shots"] as Array).duplicate()
_shot_frames = 0
# An explicit --portrait-type asks for one role up close, but trespasser/
# threat/crisis roles are event-driven and do not appear in the routine day
# crowd. Spawn one directly so the hooded/winter close-up can be staged.
if _portrait_type >= 0:
var portrait_profile = gm.selected_scenario.profile_for(_portrait_type)
if portrait_profile != null:
gm.call("_spawn_npc", portrait_profile, "roam", "portrait_subject",
{"kind": "authored"})
print("capture_realism: stage %s at %d ms" % [stage["name"], Time.get_ticks_msec()])
func _run_queue(delta: float) -> void: