Ship the 0.8.0 first-hour and campaign milestone
Full build / Import + headless tests (push) Successful in 41s
Full build / Full desktop build + optional release (push) Successful in 4m18s

Add the campaign shell, pause-safe checkpoint resume, post-shift campaign
continue, confirmed campaign reset, difficulty presets, searchable Help,
content-matrix validation, recovery events, contextual dialogue, policy/debrief
context and eligible-event previews. Extend persistence with atomic separate
files and add campaign/checkpoint/tutorial smokes. Headless 247/247, Python
94/94, tutorial/campaign/session/scenario smokes green.
This commit is contained in:
zwitschi committed 2026-11-01 21:21:43 +01:00
1 parent 86332cd401
commit aa51ee331e
38 files changed
+1361 -1144

No files matched your search

+42 -375
View File
@@ -1,154 +1,47 @@
[gd_resource type="Resource" script_class="VenueScenario" load_steps=17 format=3]
[gd_resource type="Resource" script_class="VenueScenario" format=3]
[ext_resource type="Script" path="res://src/core/access_policy.gd" id="1_2u28i"]
[ext_resource type="Script" path="res://src/core/npc_profile.gd" id="2_acokf"]
[ext_resource type="Script" path="res://src/core/venue_scenario.gd" id="3_mqiqi"]
[ext_resource type="Script" path="res://src/core/access_policy.gd" id="1_c5x6v"]
[ext_resource type="Script" path="res://src/core/npc_profile.gd" id="2_7qk8j"]
[ext_resource type="Script" path="res://src/core/venue_scenario.gd" id="3_lvgx2"]
[sub_resource type="Resource" id="Resource_i8fga"]
script = ExtResource("1_2u28i")
[sub_resource type="Resource" id="Resource_xf4wh"]
script = ExtResource("1_c5x6v")
required_artifacts = {
1: true
}
grant_if_any_required = false
minimum_age = 0
require_id = false
wand_screening_required = false
policy_summary = "Private property. Entry requires recognition or a valid wristband."
[sub_resource type="Resource" id="Resource_c7lhe"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_cgh52"]
script = ExtResource("2_7qk8j")
id = "tourist"
display_name = "Tourist"
npc_type = 0
temperament = 0.1
base_compliance = 0.9
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Oh sure, sorry, just taking a picture.", "Is there a better spot to stand?", "Understood, moving."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_0t6ar"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_qe635"]
script = ExtResource("2_7qk8j")
id = "confused_visitor"
display_name = "Confused Visitor"
npc_type = 3
temperament = 0.2
base_compliance = 0.85
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Wait, this isn't the entrance?", "Sorry about that, I'm a bit lost."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_wyv8p"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_u5nrp"]
script = ExtResource("2_7qk8j")
id = "delivery"
display_name = "Delivery Worker"
npc_type = 10
temperament = 0.25
base_compliance = 0.8
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Where should I leave this?"])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_v2hc4"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_dsavb"]
script = ExtResource("2_7qk8j")
id = "street_performer"
display_name = "Street Performer"
npc_type = 1
temperament = 0.45
base_compliance = 0.55
return_probability = 0.0
reactions_by_level = {
1: {
0: 55,
@@ -156,47 +49,14 @@ reactions_by_level = {
3: 30
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_lg4td"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_sexiy"]
script = ExtResource("2_7qk8j")
id = "influencer"
display_name = "Influencer"
npc_type = 2
temperament = 0.5
base_compliance = 0.5
return_probability = 0.0
reactions_by_level = {
1: {
0: 40,
@@ -218,47 +78,15 @@ reactions_by_level = {
8: 25
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_ijl2s"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_ghqd8"]
script = ExtResource("2_7qk8j")
id = "intoxicated"
display_name = "Intoxicated Pedestrian"
npc_type = 4
temperament = 0.6
base_compliance = 0.4
return_probability = 0.0
reactions_by_level = {
1: {
0: 30,
@@ -272,41 +100,10 @@ reactions_by_level = {
4: 10
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 1.8
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_eycmk"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_g8peq"]
script = ExtResource("2_7qk8j")
id = "trespasser"
display_name = "Trespasser"
npc_type = 5
@@ -341,41 +138,10 @@ reactions_by_level = {
7: 20
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_ggtpw"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_4xl5p"]
script = ExtResource("2_7qk8j")
id = "mental_crisis"
display_name = "Person in Crisis"
npc_type = 7
@@ -411,47 +177,15 @@ reactions_by_level = {
7: 15
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 2.4
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_oa64f"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_y6282"]
script = ExtResource("2_7qk8j")
id = "violent_threat"
display_name = "Violent Threat"
npc_type = 6
temperament = 0.95
base_compliance = 0.05
return_probability = 0.0
reactions_by_level = {
1: {
2: 25,
@@ -479,41 +213,9 @@ reactions_by_level = {
7: 30
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_7t7dh"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_75a0r"]
script = ExtResource("2_7qk8j")
id = "protester"
display_name = "Protester"
npc_type = 12
@@ -547,66 +249,28 @@ reactions_by_level = {
7: 20
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["I have every right to be on public sidewalk.", "You can't touch me, this is a lawful protest."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_8tj1k"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_ix35t"]
script = ExtResource("2_7qk8j")
id = "authorized_staff"
display_name = "Staff Member"
npc_type = 8
temperament = 0.15
base_compliance = 1.0
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 100
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_tnpxm"]
script = ExtResource("2_acokf")
[sub_resource type="Resource" id="Resource_0mcg3"]
script = ExtResource("2_7qk8j")
id = "authorized_guest"
display_name = "Authorized Guest"
npc_type = 9
temperament = 0.2
base_compliance = 0.95
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 92,
@@ -617,16 +281,13 @@ default_reactions = {
2: 12
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[resource]
script = ExtResource("3_mqiqi")
script = ExtResource("3_lvgx2")
id = "hollywood_building"
display_name = "Hollywood Boulevard Building"
description = "Steps and entrance of a private building off Hollywood Boulevard."
access_policy = SubResource("Resource_i8fga")
access_policy = SubResource("Resource_xf4wh")
equipment = Array[String](["wristband_policy", "flashlight", "radio"])
locations = {
"entrance": Vector3(0, 0, 1),
@@ -635,7 +296,7 @@ locations = {
"sidewalk": Vector3(0, 0, 9),
"steps_end": Vector3(0, 0, 3)
}
npc_profiles = Array[ExtResource("2_acokf")]([SubResource("Resource_c7lhe"), SubResource("Resource_0t6ar"), SubResource("Resource_wyv8p"), SubResource("Resource_v2hc4"), SubResource("Resource_lg4td"), SubResource("Resource_ijl2s"), SubResource("Resource_eycmk"), SubResource("Resource_ggtpw"), SubResource("Resource_oa64f"), SubResource("Resource_7t7dh"), SubResource("Resource_8tj1k"), SubResource("Resource_tnpxm")])
npc_profiles = Array[ExtResource("2_7qk8j")]([SubResource("Resource_cgh52"), SubResource("Resource_qe635"), SubResource("Resource_u5nrp"), SubResource("Resource_dsavb"), SubResource("Resource_sexiy"), SubResource("Resource_ghqd8"), SubResource("Resource_g8peq"), SubResource("Resource_4xl5p"), SubResource("Resource_y6282"), SubResource("Resource_75a0r"), SubResource("Resource_ix35t"), SubResource("Resource_0mcg3")])
event_pool = Array[Dictionary]([{
"base_weight": 1.0,
"id": "tourist_photo",
@@ -774,6 +435,15 @@ event_pool = Array[Dictionary]([{
"probability": 0.28,
"requires_emergency": true,
"time_range_s": Vector2(760, 880)
}, {
"base_weight": 1.0,
"id": "building_apology_return",
"intent": "enter",
"kind": "recovery",
"npc_type": 9,
"phase": 2,
"probability": 0.22,
"time_range_s": Vector2(620, 800)
}])
shift_phases = {
0: {
@@ -789,6 +459,3 @@ shift_phases = {
"start_s": 700.0
}
}
shift_duration_s = 900.0
policy_summary = ""
door_staff_lines = {}
+53 -233
View File
@@ -1,113 +1,59 @@
[gd_resource type="Resource" script_class="VenueScenario" load_steps=13 format=3]
[gd_resource type="Resource" script_class="VenueScenario" format=3]
[ext_resource type="Script" path="res://src/core/access_policy.gd" id="1_lxsgk"]
[ext_resource type="Script" path="res://src/core/npc_profile.gd" id="2_wfc6m"]
[ext_resource type="Script" path="res://src/core/venue_scenario.gd" id="3_8xm7a"]
[ext_resource type="Script" path="res://src/core/access_policy.gd" id="1_3pn5m"]
[ext_resource type="Script" path="res://src/core/npc_profile.gd" id="2_l60ad"]
[ext_resource type="Script" path="res://src/core/venue_scenario.gd" id="3_voh88"]
[sub_resource type="Resource" id="Resource_xha77"]
script = ExtResource("1_lxsgk")
[sub_resource type="Resource" id="Resource_aal3l"]
script = ExtResource("1_3pn5m")
required_artifacts = {
2: true,
3: true
}
grant_if_any_required = false
minimum_age = 21
require_id = true
wand_screening_required = true
policy_summary = "Government ID and a valid ticket or reservation required. Carry items are screened."
[sub_resource type="Resource" id="Resource_8ksyk"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_57xgi"]
script = ExtResource("2_l60ad")
id = "tourist"
display_name = "Tourist"
npc_type = 0
temperament = 0.1
base_compliance = 0.9
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Oh sure, sorry, just taking a picture.", "Is there a better spot to stand?", "Understood, moving."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_wt1op"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_r873e"]
script = ExtResource("2_l60ad")
id = "confused_visitor"
display_name = "Confused Visitor"
npc_type = 3
temperament = 0.2
base_compliance = 0.85
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Wait, this isn't the entrance?", "Sorry about that, I'm a bit lost."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_g1jr2"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_3xy2u"]
script = ExtResource("2_l60ad")
id = "street_performer"
display_name = "Street Performer"
npc_type = 1
temperament = 0.45
base_compliance = 0.55
reactions_by_level = {
1: {
0: 55,
2: 15,
3: 30
}
}
[sub_resource type="Resource" id="Resource_50i1h"]
script = ExtResource("2_l60ad")
id = "influencer"
display_name = "Influencer"
npc_type = 2
temperament = 0.5
base_compliance = 0.5
return_probability = 0.0
reactions_by_level = {
1: {
0: 40,
@@ -129,47 +75,15 @@ reactions_by_level = {
8: 25
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_ys0b0"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_nsw77"]
script = ExtResource("2_l60ad")
id = "intoxicated"
display_name = "Intoxicated Pedestrian"
npc_type = 4
temperament = 0.6
base_compliance = 0.4
return_probability = 0.0
reactions_by_level = {
1: {
0: 30,
@@ -183,41 +97,10 @@ reactions_by_level = {
4: 10
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 1.8
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_bv0jw"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_20knl"]
script = ExtResource("2_l60ad")
id = "trespasser"
display_name = "Trespasser"
npc_type = 5
@@ -252,47 +135,15 @@ reactions_by_level = {
7: 20
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_7vgx3"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_rivis"]
script = ExtResource("2_l60ad")
id = "violent_threat"
display_name = "Violent Threat"
npc_type = 6
temperament = 0.95
base_compliance = 0.05
return_probability = 0.0
reactions_by_level = {
1: {
2: 25,
@@ -320,66 +171,27 @@ reactions_by_level = {
7: 30
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_x43ed"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_1dvkp"]
script = ExtResource("2_l60ad")
id = "authorized_staff"
display_name = "Staff Member"
npc_type = 8
temperament = 0.15
base_compliance = 1.0
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 100
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_07lsg"]
script = ExtResource("2_wfc6m")
[sub_resource type="Resource" id="Resource_7wsm0"]
script = ExtResource("2_l60ad")
id = "authorized_guest"
display_name = "Authorized Guest"
npc_type = 9
temperament = 0.2
base_compliance = 0.95
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 92,
@@ -390,16 +202,13 @@ default_reactions = {
2: 12
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[resource]
script = ExtResource("3_8xm7a")
script = ExtResource("3_voh88")
id = "joke_shop"
display_name = "The Joke Shop"
description = "Comedy club door: IDs, reservations, and wand screening."
access_policy = SubResource("Resource_xha77")
access_policy = SubResource("Resource_aal3l")
equipment = Array[String](["id_check", "guest_list", "wand", "radio"])
locations = {
"door_area": Vector3(0, 0, 3),
@@ -409,7 +218,7 @@ locations = {
"sidewalk": Vector3(0, 0, 9),
"steps_end": Vector3(0, 0, 3)
}
npc_profiles = Array[ExtResource("2_wfc6m")]([SubResource("Resource_8ksyk"), SubResource("Resource_wt1op"), SubResource("Resource_g1jr2"), SubResource("Resource_ys0b0"), SubResource("Resource_bv0jw"), SubResource("Resource_7vgx3"), SubResource("Resource_x43ed"), SubResource("Resource_07lsg")])
npc_profiles = Array[ExtResource("2_l60ad")]([SubResource("Resource_57xgi"), SubResource("Resource_r873e"), SubResource("Resource_3xy2u"), SubResource("Resource_50i1h"), SubResource("Resource_nsw77"), SubResource("Resource_20knl"), SubResource("Resource_rivis"), SubResource("Resource_1dvkp"), SubResource("Resource_7wsm0")])
event_pool = Array[Dictionary]([{
"base_weight": 1.0,
"id": "guest_valid",
@@ -564,6 +373,19 @@ event_pool = Array[Dictionary]([{
"phase": 2,
"probability": 0.5,
"time_range_s": Vector2(650, 830)
}, {
"base_weight": 1.0,
"id": "joke_denied_guest_return",
"intent": "enter",
"kind": "recovery",
"npc_type": 9,
"override_access": {
"has_id": true,
"has_ticket": true
},
"phase": 2,
"probability": 0.2,
"time_range_s": Vector2(650, 830)
}])
shift_phases = {
0: {
@@ -579,8 +401,6 @@ shift_phases = {
"start_s": 700.0
}
}
shift_duration_s = 900.0
policy_summary = ""
door_staff_lines = {
"id_check": ["May I see your ID, please?", "Could you show me some identification?"],
"prohibited_item": ["I can't allow that item inside. Please leave it outside.", "That item isn't permitted in the venue."],
+42 -374
View File
@@ -1,11 +1,11 @@
[gd_resource type="Resource" script_class="VenueScenario" load_steps=17 format=3]
[gd_resource type="Resource" script_class="VenueScenario" format=3]
[ext_resource type="Script" path="res://src/core/access_policy.gd" id="1_xxhx3"]
[ext_resource type="Script" path="res://src/core/npc_profile.gd" id="2_fiebn"]
[ext_resource type="Script" path="res://src/core/venue_scenario.gd" id="3_2dvuq"]
[ext_resource type="Script" path="res://src/core/access_policy.gd" id="1_3vwd0"]
[ext_resource type="Script" path="res://src/core/npc_profile.gd" id="2_g7rkt"]
[ext_resource type="Script" path="res://src/core/venue_scenario.gd" id="3_jd45y"]
[sub_resource type="Resource" id="Resource_blmt0"]
script = ExtResource("1_xxhx3")
[sub_resource type="Resource" id="Resource_c55bb"]
script = ExtResource("1_3vwd0")
required_artifacts = {
1: true,
3: true,
@@ -13,145 +13,39 @@ required_artifacts = {
5: true
}
grant_if_any_required = true
minimum_age = 0
require_id = false
wand_screening_required = false
policy_summary = "Entry requires a wristband, credential, ticket, or guest-list confirmation."
[sub_resource type="Resource" id="Resource_oddac"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_yyxim"]
script = ExtResource("2_g7rkt")
id = "tourist"
display_name = "Tourist"
npc_type = 0
temperament = 0.1
base_compliance = 0.9
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Oh sure, sorry, just taking a picture.", "Is there a better spot to stand?", "Understood, moving."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_byir2"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_lmn2c"]
script = ExtResource("2_g7rkt")
id = "confused_visitor"
display_name = "Confused Visitor"
npc_type = 3
temperament = 0.2
base_compliance = 0.85
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Wait, this isn't the entrance?", "Sorry about that, I'm a bit lost."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_3tt0b"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_if2cj"]
script = ExtResource("2_g7rkt")
id = "delivery"
display_name = "Delivery Worker"
npc_type = 10
temperament = 0.25
base_compliance = 0.8
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["Where should I leave this?"])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_ihxib"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_t47d3"]
script = ExtResource("2_g7rkt")
id = "street_performer"
display_name = "Street Performer"
npc_type = 1
temperament = 0.45
base_compliance = 0.55
return_probability = 0.0
reactions_by_level = {
1: {
0: 55,
@@ -159,47 +53,14 @@ reactions_by_level = {
3: 30
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_c57iy"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_j2mp5"]
script = ExtResource("2_g7rkt")
id = "influencer"
display_name = "Influencer"
npc_type = 2
temperament = 0.5
base_compliance = 0.5
return_probability = 0.0
reactions_by_level = {
1: {
0: 40,
@@ -221,47 +82,15 @@ reactions_by_level = {
8: 25
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_bk410"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_uscqg"]
script = ExtResource("2_g7rkt")
id = "intoxicated"
display_name = "Intoxicated Pedestrian"
npc_type = 4
temperament = 0.6
base_compliance = 0.4
return_probability = 0.0
reactions_by_level = {
1: {
0: 30,
@@ -275,41 +104,10 @@ reactions_by_level = {
4: 10
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 1.8
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_jp52w"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_8aovb"]
script = ExtResource("2_g7rkt")
id = "trespasser"
display_name = "Trespasser"
npc_type = 5
@@ -344,41 +142,10 @@ reactions_by_level = {
7: 20
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_5kplf"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_owl7s"]
script = ExtResource("2_g7rkt")
id = "mental_crisis"
display_name = "Person in Crisis"
npc_type = 7
@@ -414,47 +181,15 @@ reactions_by_level = {
7: 15
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 2.4
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_6bscs"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_rnay4"]
script = ExtResource("2_g7rkt")
id = "violent_threat"
display_name = "Violent Threat"
npc_type = 6
temperament = 0.95
base_compliance = 0.05
return_probability = 0.0
reactions_by_level = {
1: {
2: 25,
@@ -482,41 +217,9 @@ reactions_by_level = {
7: 30
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_n4lxh"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_lhp4m"]
script = ExtResource("2_g7rkt")
id = "protester"
display_name = "Protester"
npc_type = 12
@@ -550,66 +253,28 @@ reactions_by_level = {
7: 20
}
}
default_reactions = {
1: {
0: 80,
2: 8,
3: 12
},
2: {
0: 70,
1: 10,
2: 12,
4: 8
},
3: {
0: 55,
1: 15,
2: 20,
4: 10
},
4: {
1: 65,
2: 15,
7: 20
},
5: {
1: 30,
5: 40,
7: 30
}
}
reaction_delay = 0.6
dialogue_lines = Array[String](["I have every right to be on public sidewalk.", "You can't touch me, this is a lawful protest."])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_6st6l"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_s8tjd"]
script = ExtResource("2_g7rkt")
id = "authorized_staff"
display_name = "Staff Member"
npc_type = 8
temperament = 0.15
base_compliance = 1.0
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 100
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[sub_resource type="Resource" id="Resource_nf2oq"]
script = ExtResource("2_fiebn")
[sub_resource type="Resource" id="Resource_ii8kq"]
script = ExtResource("2_g7rkt")
id = "authorized_guest"
display_name = "Authorized Guest"
npc_type = 9
temperament = 0.2
base_compliance = 0.95
return_probability = 0.0
reactions_by_level = {}
default_reactions = {
1: {
0: 92,
@@ -620,16 +285,13 @@ default_reactions = {
2: 12
}
}
reaction_delay = 0.6
dialogue_lines = Array[String]([])
carried_items = Array[String]([])
[resource]
script = ExtResource("3_2dvuq")
script = ExtResource("3_jd45y")
id = "tv_studio"
display_name = "Hollywood Blvd Late Night TV Studio"
description = "Crowd, celebrities, and staff around a late-night studio."
access_policy = SubResource("Resource_blmt0")
access_policy = SubResource("Resource_c55bb")
equipment = Array[String](["wristband_policy", "guest_list", "radio", "flashlight"])
locations = {
"entrance": Vector3(0, 0, 1),
@@ -639,7 +301,7 @@ locations = {
"stage_door": Vector3(6, 0, -2),
"steps_end": Vector3(0, 0, 3)
}
npc_profiles = Array[ExtResource("2_fiebn")]([SubResource("Resource_oddac"), SubResource("Resource_byir2"), SubResource("Resource_3tt0b"), SubResource("Resource_ihxib"), SubResource("Resource_c57iy"), SubResource("Resource_bk410"), SubResource("Resource_jp52w"), SubResource("Resource_5kplf"), SubResource("Resource_6bscs"), SubResource("Resource_n4lxh"), SubResource("Resource_6st6l"), SubResource("Resource_nf2oq")])
npc_profiles = Array[ExtResource("2_g7rkt")]([SubResource("Resource_yyxim"), SubResource("Resource_lmn2c"), SubResource("Resource_if2cj"), SubResource("Resource_t47d3"), SubResource("Resource_j2mp5"), SubResource("Resource_uscqg"), SubResource("Resource_8aovb"), SubResource("Resource_owl7s"), SubResource("Resource_rnay4"), SubResource("Resource_lhp4m"), SubResource("Resource_s8tjd"), SubResource("Resource_ii8kq")])
event_pool = Array[Dictionary]([{
"base_weight": 1.0,
"id": "audience_ticket",
@@ -790,6 +452,15 @@ event_pool = Array[Dictionary]([{
"phase": 2,
"probability": 0.45,
"time_range_s": Vector2(700, 860)
}, {
"base_weight": 1.0,
"id": "studio_manager_check",
"intent": "enter",
"kind": "recovery",
"npc_type": 8,
"phase": 2,
"probability": 0.2,
"time_range_s": Vector2(620, 820)
}])
shift_phases = {
0: {
@@ -805,6 +476,3 @@ shift_phases = {
"start_s": 700.0
}
}
shift_duration_s = 900.0
policy_summary = ""
door_staff_lines = {}