[gd_resource type="Resource" script_class="VenueScenario" format=3] [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_c55bb"] script = ExtResource("1_3vwd0") required_artifacts = { 1: true, 3: true, 4: true, 5: true } grant_if_any_required = true policy_summary = "Entry requires a wristband, credential, ticket, or guest-list confirmation." [sub_resource type="Resource" id="Resource_yyxim"] script = ExtResource("2_g7rkt") id = "tourist" display_name = "Tourist" temperament = 0.1 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."], "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."] } [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 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."], "refusal": ["I'm sure the event is here. Let me check my phone."] } [sub_resource type="Resource" id="Resource_if2cj"] script = ExtResource("2_g7rkt") id = "delivery" display_name = "Delivery Worker" npc_type = 10 dialogue_lines = Array[String](["Where should I leave this?"]) [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 reactions_by_level = { 1: { 0: 55, 2: 15, 3: 30 } } [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 reactions_by_level = { 1: { 0: 40, 2: 10, 3: 30, 4: 20 }, 2: { 0: 30, 2: 20, 4: 35, 8: 15 }, 3: { 0: 10, 1: 15, 2: 20, 4: 30, 8: 25 } } dialogue_lines = Array[String](["This is public sidewalk, you can't stop me from filming."]) [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 reactions_by_level = { 1: { 0: 30, 2: 20, 3: 50 }, 2: { 0: 40, 2: 35, 3: 15, 4: 10 } } reaction_delay = 1.8 [sub_resource type="Resource" id="Resource_8aovb"] script = ExtResource("2_g7rkt") id = "trespasser" display_name = "Trespasser" npc_type = 5 temperament = 0.55 base_compliance = 0.35 return_probability = 0.6 reactions_by_level = { 1: { 0: 30, 2: 25, 3: 45 }, 2: { 0: 40, 2: 35, 6: 25 }, 3: { 1: 35, 2: 25, 6: 15, 7: 10, 8: 15 }, 4: { 1: 70, 7: 30 }, 5: { 1: 30, 5: 50, 7: 20 } } dialogue_lines = Array[String](["I'm just here to see a friend, come on.", "I'll be inside for ten seconds."]) [sub_resource type="Resource" id="Resource_owl7s"] script = ExtResource("2_g7rkt") id = "mental_crisis" display_name = "Person in Crisis" npc_type = 7 temperament = 0.7 base_compliance = 0.3 return_probability = 0.4 reactions_by_level = { 1: { 0: 25, 2: 20, 3: 55 }, 2: { 0: 25, 2: 35, 3: 30, 5: 10 }, 3: { 0: 25, 1: 15, 2: 30, 5: 30 }, 4: { 1: 40, 5: 35, 7: 25 }, 5: { 1: 25, 5: 60, 7: 15 } } reaction_delay = 2.4 [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 reactions_by_level = { 1: { 2: 25, 3: 45, 5: 30 }, 2: { 2: 30, 5: 45, 7: 25 }, 3: { 1: 20, 5: 45, 7: 35 }, 4: { 1: 15, 5: 30, 7: 55 }, 5: { 1: 30, 5: 40, 7: 30 } } [sub_resource type="Resource" id="Resource_lhp4m"] script = ExtResource("2_g7rkt") id = "protester" display_name = "Protester" npc_type = 12 temperament = 0.5 base_compliance = 0.4 return_probability = 0.25 reactions_by_level = { 1: { 0: 25, 2: 35, 3: 25, 4: 15 }, 2: { 0: 15, 2: 40, 3: 15, 4: 25, 8: 5 }, 3: { 0: 10, 1: 25, 2: 25, 4: 25, 8: 15 }, 4: { 1: 60, 2: 20, 7: 20 } } dialogue_lines = Array[String](["I have every right to be on public sidewalk.", "You can't touch me, this is a lawful protest."]) [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 default_reactions = { 1: { 0: 100 } } [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 default_reactions = { 1: { 0: 92, 2: 8 }, 2: { 0: 88, 2: 12 } } [resource] 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_c55bb") equipment = Array[String](["wristband_policy", "guest_list", "radio", "flashlight"]) locations = { "entrance": Vector3(0, 0, 1), "guard_post": Vector3(0, 0, -3), "queue_area": Vector3(0, 0, 9), "sidewalk": Vector3(0, 0, 9), "stage_door": Vector3(6, 0, -2), "steps_end": Vector3(0, 0, 3) } 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", "intent": "enter", "kind": "routine", "npc_type": 9, "override_access": { "has_ticket": true }, "phase": 0, "probability": 0.35, "time_range_s": Vector2(0, 900) }, { "base_weight": 1.0, "id": "protest_outside", "intent": "protest", "kind": "routine", "npc_type": 12, "phase": 0, "probability": 0.18, "time_range_s": Vector2(300, 900) }, { "base_weight": 1.0, "id": "celebrity_arrival", "intent": "arrive", "kind": "routine", "npc_type": 9, "override_access": { "has_guest_list": true }, "phase": 0, "probability": 0.2, "time_range_s": Vector2(300, 700) }, { "base_weight": 1.0, "id": "crew_shift", "intent": "enter", "kind": "routine", "npc_type": 8, "phase": 0, "probability": 0.3, "time_range_s": Vector2(0, 700) }, { "base_weight": 1.0, "id": "tourist_photo", "intent": "photo", "kind": "routine", "npc_type": 0, "phase": 0, "probability": 0.35, "time_range_s": Vector2(0, 900) }, { "base_weight": 1.0, "id": "confused_enter", "intent": "enter", "kind": "routine", "npc_type": 3, "phase": 0, "probability": 0.25, "time_range_s": Vector2(0, 900) }, { "base_weight": 1.0, "id": "influencer_film", "intent": "film", "kind": "routine", "npc_type": 2, "phase": 0, "probability": 0.28, "time_range_s": Vector2(0, 900) }, { "base_weight": 1.0, "id": "trespass_blend", "intent": "blend_in", "kind": "routine", "npc_type": 5, "phase": 0, "probability": 0.15, "time_range_s": Vector2(300, 900) }, { "base_weight": 1.0, "id": "studio_counterfeit", "intent": "counterfeit_credential", "kind": "scripted", "npc_type": 5, "override_access": { "credential_status": 2, "wristband_status": 2 }, "phase": 2, "probability": 0.55, "time_range_s": Vector2(620, 780) }, { "base_weight": 1.0, "hint": "hint.film_boundary", "id": "studio_film_boundary", "intent": "film_boundary", "kind": "scripted", "npc_type": 2, "phase": 1, "probability": 0.5, "time_range_s": Vector2(330, 560) }, { "base_weight": 1.0, "hint": "hint.film_boundary_repeat", "id": "studio_film_boundary_repeat", "intent": "film_boundary", "kind": "scripted", "npc_type": 2, "phase": 2, "probability": 0.45, "time_range_s": Vector2(640, 830) }, { "base_weight": 1.0, "extra_spawns": [{ "intent": "photo", "npc_type": 0 }, { "intent": "photo", "npc_type": 0 }, { "intent": "film", "npc_type": 2 }], "hint": "hint.celebrity_arrival", "id": "studio_celebrity_arrival", "intent": "arrive", "kind": "scripted", "npc_type": 9, "override_access": { "guest_list_status": 0, "has_guest_list": true }, "phase": 2, "probability": 0.5, "time_range_s": Vector2(620, 760) }, { "base_weight": 1.0, "id": "studio_follow_through", "intent": "follow_authorized", "kind": "scripted", "npc_type": 5, "override_access": { "has_credential": false, "has_guest_list": false, "has_ticket": false, "has_wristband": false }, "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: { "start_s": 0.0 }, 1: { "start_s": 300.0 }, 2: { "start_s": 600.0 }, 3: { "start_s": 700.0 } }