Audit and fix NPC, door-staff and UI dialogue
Full build / Import + headless tests (push) Successful in 40s
Full build / Full desktop build + optional release (push) Skipped

- Route the Reason verb through authored reason contexts and give every shared archetype an in-character answer.
- Add Hollywood wristband and TV Studio ticket/credential door-staff lines.
- Clarify radio cancellation, Ask terminology, start hints and campaign-reset copy.
- Record the dialogue audit and length findings in docs/ui-copy.md; add regression tests.
This commit is contained in:
Gig Line Dev committed 2026-11-02 14:44:01 +01:00
1 parent daf0926d91
commit 98c31fe44c
15 files changed
+232 -30

No files matched your search

+6 -6
View File
@@ -1,5 +1,5 @@
{
"hud.controls": "LMB/Space wheel · A/D step · Space confirm · Esc cancel · R emergency · E inspect · C wand · Q polite · B camera · Tab/wheel cycle · Shift slow · G light · L lock · F debug",
"hud.controls": "LMB/Space wheel · A/D step · Space confirm · Esc cancel · R emergency · E inspect · C wand · Q ask · B camera · Tab/wheel cycle · Shift slow · G light · L lock · F debug",
"radial.raise_hand": "Stop",
"radial.eye_contact": "Look",
"radial.point": "Point",
@@ -105,7 +105,7 @@
"ui.radio_send_assist": "Send request",
"ui.radio_send_emergency": "Send emergency",
"ui.radio_hold_hint": "Hold the button for %.1fs",
"ui.radio_cancelled": "Call cancelled — hold the button.",
"ui.radio_cancelled": "Call not sent — hold the button to confirm.",
"ui.radio_holding": "Holding… %.0f%%",
"ui.review_return_menu": "Return to menu",
"ui.quit_game": "Quit game",
@@ -121,7 +121,7 @@
"ui.settings_reset_campaign": "Reset campaign",
"ui.settings_controls_help": "Controls (click a binding, then press a key or pad button)",
"ui.settings_cancel": "Cancel",
"ui.settings_reset_confirm": "Clear campaign progress and start again from the Hollywood shift?",
"ui.settings_reset_confirm": "Clear campaign progress and restart from the Hollywood Boulevard shift?",
"ui.settings_press": "Press…",
"ui.pause_title": "Paused",
"ui.pause_resume": "Resume",
@@ -135,7 +135,7 @@
"help.control_move": "Movement: W/A/S/D · mouse look · Shift precision walk",
"help.control_focus": "Focus: crosshair cone · Tab / mouse wheel cycles nearby people",
"help.control_wheel": "Action wheel: Space or left click · A/D or arrows step · Space confirms",
"help.control_access": "Inspect access: E · Wand: C · Polite direction: Q",
"help.control_access": "Inspect access: E · Wand: C · Ask: Q",
"help.control_escalate": "Warning: 4 · Blocking: 5 · Security radio: 6",
"help.control_emergency": "Emergency radio: R, hold the on-screen button to confirm",
"help.control_tools": "Body camera: B · Flashlight: G · Door lock: L",
@@ -144,14 +144,14 @@
"ui.start_subtitle": "Pick a venue to start your shift.",
"ui.start_help": "Help",
"ui.start_settings": "Settings",
"ui.start_hint": "Up/Down to choose, Enter to start, Esc to quit",
"ui.start_hint": "Up/Down to choose · Enter to start · Esc to quit",
"ui.campaign_complete": "Campaign complete — pick any venue for a free shift.",
"ui.campaign_status": "Campaign shift %d · next: %s",
"ui.continue_shift": "Continue shift — %s",
"ui.campaign_complete_short": "Campaign complete",
"ui.radio_location_placeholder": "Location (e.g. front steps)",
"ui.radio_location_default": "front entrance",
"ui.radio_description_placeholder": "Describe the person and behavior",
"ui.radio_description_placeholder": "Describe the person and their behavior",
"ui.radio_weapon": "Weapon seen",
"ui.radio_danger": "Danger level: ",
"ui.radio_cancel": "Cancel",
+35
View File
@@ -20,6 +20,7 @@ base_compliance = 0.9
dialogue_lines = Array[String](["Oh sure, sorry, just taking a picture.", "Is there a better spot to stand?", "Understood, moving."])
context_lines = {
"deescalation": ["Okay, I'll move to the sidewalk.", "Sorry, I'll put the camera away."],
"reason": ["Just getting a photo of the entrance.", "I'm meeting friends here."],
"recognition": ["You remember me from the tour, right?"],
"refusal": ["I just want a photo, I'm not staying.", "I didn't know this entrance was restricted."]
}
@@ -34,6 +35,7 @@ base_compliance = 0.85
dialogue_lines = Array[String](["Wait, this isn't the entrance?", "Sorry about that, I'm a bit lost."])
context_lines = {
"deescalation": ["Oh, I understand. I'll check with the box office."],
"reason": ["I thought this was the box office.", "I'm looking for the event entrance."],
"refusal": ["I'm sure the event is here. Let me check my phone."]
}
@@ -43,6 +45,9 @@ id = "delivery"
display_name = "Delivery Worker"
npc_type = 10
dialogue_lines = Array[String](["Where should I leave this?"])
context_lines = {
"reason": ["Drop-off for the venue. Where should I leave it?"]
}
[sub_resource type="Resource" id="Resource_dsavb"]
script = ExtResource("2_7qk8j")
@@ -58,6 +63,9 @@ reactions_by_level = {
3: 30
}
}
context_lines = {
"reason": ["Just doing my act; I'll keep the sidewalk clear."]
}
[sub_resource type="Resource" id="Resource_sexiy"]
script = ExtResource("2_7qk8j")
@@ -88,6 +96,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."])
context_lines = {
"reason": ["Filming a quick clip for my channel."]
}
[sub_resource type="Resource" id="Resource_ghqd8"]
script = ExtResource("2_7qk8j")
@@ -110,6 +121,9 @@ reactions_by_level = {
}
}
reaction_delay = 1.8
context_lines = {
"reason": ["Looking for my friends. I think they went inside."]
}
[sub_resource type="Resource" id="Resource_g8peq"]
script = ExtResource("2_7qk8j")
@@ -148,6 +162,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."])
context_lines = {
"reason": ["Meeting a friend inside. I'll only be a minute.", "Just cutting through."]
}
[sub_resource type="Resource" id="Resource_4xl5p"]
script = ExtResource("2_7qk8j")
@@ -187,6 +204,9 @@ reactions_by_level = {
}
}
reaction_delay = 2.4
context_lines = {
"reason": ["I just need a quiet minute.", "I'm waiting for someone."]
}
[sub_resource type="Resource" id="Resource_y6282"]
script = ExtResource("2_7qk8j")
@@ -222,6 +242,9 @@ reactions_by_level = {
7: 30
}
}
context_lines = {
"reason": ["Back off. This doesn't concern you."]
}
[sub_resource type="Resource" id="Resource_75a0r"]
script = ExtResource("2_7qk8j")
@@ -259,6 +282,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["I have every right to be on public sidewalk.", "You can't touch me, this is a lawful protest."])
context_lines = {
"reason": ["We're demonstrating on the public sidewalk.", "This is a peaceful protest."]
}
[sub_resource type="Resource" id="Resource_ix35t"]
script = ExtResource("2_7qk8j")
@@ -272,6 +298,9 @@ default_reactions = {
0: 100
}
}
context_lines = {
"reason": ["I'm on staff. I'm checking the entrance.", "Crew check-in; I'm working tonight."]
}
[sub_resource type="Resource" id="Resource_0mcg3"]
script = ExtResource("2_7qk8j")
@@ -290,6 +319,9 @@ default_reactions = {
2: 12
}
}
context_lines = {
"reason": ["I'm on the guest list. Here's my ID.", "A friend invited me; I have a ticket."]
}
[resource]
script = ExtResource("3_lvgx2")
@@ -495,3 +527,6 @@ shift_phases = {
"start_s": 700.0
}
}
door_staff_lines = {
"wristband_check": ["Wristband, please.", "I need to see your event wristband."]
}
+23
View File
@@ -24,6 +24,7 @@ base_compliance = 0.9
dialogue_lines = Array[String](["Oh sure, sorry, just taking a picture.", "Is there a better spot to stand?", "Understood, moving."])
context_lines = {
"deescalation": ["Okay, I'll move to the sidewalk.", "Sorry, I'll put the camera away."],
"reason": ["Just getting a photo of the entrance.", "I'm meeting friends here."],
"recognition": ["You remember me from the tour, right?"],
"refusal": ["I just want a photo, I'm not staying.", "I didn't know this entrance was restricted."]
}
@@ -38,6 +39,7 @@ base_compliance = 0.85
dialogue_lines = Array[String](["Wait, this isn't the entrance?", "Sorry about that, I'm a bit lost."])
context_lines = {
"deescalation": ["Oh, I understand. I'll check with the box office."],
"reason": ["I thought this was the box office.", "I'm looking for the event entrance."],
"refusal": ["I'm sure the event is here. Let me check my phone."]
}
@@ -55,6 +57,9 @@ reactions_by_level = {
3: 30
}
}
context_lines = {
"reason": ["Just doing my act; I'll keep the sidewalk clear."]
}
[sub_resource type="Resource" id="Resource_50i1h"]
script = ExtResource("2_l60ad")
@@ -85,6 +90,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."])
context_lines = {
"reason": ["Filming a quick clip for my channel."]
}
[sub_resource type="Resource" id="Resource_nsw77"]
script = ExtResource("2_l60ad")
@@ -107,6 +115,9 @@ reactions_by_level = {
}
}
reaction_delay = 1.8
context_lines = {
"reason": ["Looking for my friends. I think they went inside."]
}
[sub_resource type="Resource" id="Resource_20knl"]
script = ExtResource("2_l60ad")
@@ -145,6 +156,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."])
context_lines = {
"reason": ["Meeting a friend inside. I'll only be a minute.", "Just cutting through."]
}
[sub_resource type="Resource" id="Resource_rivis"]
script = ExtResource("2_l60ad")
@@ -180,6 +194,9 @@ reactions_by_level = {
7: 30
}
}
context_lines = {
"reason": ["Back off. This doesn't concern you."]
}
[sub_resource type="Resource" id="Resource_1dvkp"]
script = ExtResource("2_l60ad")
@@ -193,6 +210,9 @@ default_reactions = {
0: 100
}
}
context_lines = {
"reason": ["I'm on staff. I'm checking the entrance.", "Crew check-in; I'm working tonight."]
}
[sub_resource type="Resource" id="Resource_7wsm0"]
script = ExtResource("2_l60ad")
@@ -211,6 +231,9 @@ default_reactions = {
2: 12
}
}
context_lines = {
"reason": ["I'm on the guest list. Here's my ID.", "A friend invited me; I have a ticket."]
}
[resource]
script = ExtResource("3_voh88")
+35
View File
@@ -24,6 +24,7 @@ base_compliance = 0.9
dialogue_lines = Array[String](["Oh sure, sorry, just taking a picture.", "Is there a better spot to stand?", "Understood, moving."])
context_lines = {
"deescalation": ["Okay, I'll move to the sidewalk.", "Sorry, I'll put the camera away."],
"reason": ["Just getting a photo of the entrance.", "I'm meeting friends here."],
"recognition": ["You remember me from the tour, right?"],
"refusal": ["I just want a photo, I'm not staying.", "I didn't know this entrance was restricted."]
}
@@ -38,6 +39,7 @@ base_compliance = 0.85
dialogue_lines = Array[String](["Wait, this isn't the entrance?", "Sorry about that, I'm a bit lost."])
context_lines = {
"deescalation": ["Oh, I understand. I'll check with the box office."],
"reason": ["I thought this was the box office.", "I'm looking for the event entrance."],
"refusal": ["I'm sure the event is here. Let me check my phone."]
}
@@ -47,6 +49,9 @@ id = "delivery"
display_name = "Delivery Worker"
npc_type = 10
dialogue_lines = Array[String](["Where should I leave this?"])
context_lines = {
"reason": ["Drop-off for the venue. Where should I leave it?"]
}
[sub_resource type="Resource" id="Resource_t47d3"]
script = ExtResource("2_g7rkt")
@@ -62,6 +67,9 @@ reactions_by_level = {
3: 30
}
}
context_lines = {
"reason": ["Just doing my act; I'll keep the sidewalk clear."]
}
[sub_resource type="Resource" id="Resource_j2mp5"]
script = ExtResource("2_g7rkt")
@@ -92,6 +100,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."])
context_lines = {
"reason": ["Filming a quick clip for my channel."]
}
[sub_resource type="Resource" id="Resource_uscqg"]
script = ExtResource("2_g7rkt")
@@ -114,6 +125,9 @@ reactions_by_level = {
}
}
reaction_delay = 1.8
context_lines = {
"reason": ["Looking for my friends. I think they went inside."]
}
[sub_resource type="Resource" id="Resource_8aovb"]
script = ExtResource("2_g7rkt")
@@ -152,6 +166,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."])
context_lines = {
"reason": ["Meeting a friend inside. I'll only be a minute.", "Just cutting through."]
}
[sub_resource type="Resource" id="Resource_owl7s"]
script = ExtResource("2_g7rkt")
@@ -191,6 +208,9 @@ reactions_by_level = {
}
}
reaction_delay = 2.4
context_lines = {
"reason": ["I just need a quiet minute.", "I'm waiting for someone."]
}
[sub_resource type="Resource" id="Resource_rnay4"]
script = ExtResource("2_g7rkt")
@@ -226,6 +246,9 @@ reactions_by_level = {
7: 30
}
}
context_lines = {
"reason": ["Back off. This doesn't concern you."]
}
[sub_resource type="Resource" id="Resource_lhp4m"]
script = ExtResource("2_g7rkt")
@@ -263,6 +286,9 @@ reactions_by_level = {
}
}
dialogue_lines = Array[String](["I have every right to be on public sidewalk.", "You can't touch me, this is a lawful protest."])
context_lines = {
"reason": ["We're demonstrating on the public sidewalk.", "This is a peaceful protest."]
}
[sub_resource type="Resource" id="Resource_s8tjd"]
script = ExtResource("2_g7rkt")
@@ -276,6 +302,9 @@ default_reactions = {
0: 100
}
}
context_lines = {
"reason": ["I'm on staff. I'm checking the entrance.", "Crew check-in; I'm working tonight."]
}
[sub_resource type="Resource" id="Resource_ii8kq"]
script = ExtResource("2_g7rkt")
@@ -294,6 +323,9 @@ default_reactions = {
2: 12
}
}
context_lines = {
"reason": ["I'm on the guest list. Here's my ID.", "A friend invited me; I have a ticket."]
}
[resource]
script = ExtResource("3_jd45y")
@@ -485,3 +517,6 @@ shift_phases = {
"start_s": 700.0
}
}
door_staff_lines = {
"ticket_check": ["Ticket, credential, or guest-list confirmation, please.", "I need your ticket or guest-list confirmation."]
}