Replace the generic boulevard facade with a stylized 6840 Hollywood Blvd block: six Ionic columns, eight stone steps, Masonic frieze/medallions, event banners, side doors, El Capitan Theatre and retail neighbours, Ovation Hollywood arcade, Walk of Fame and four-lane street markings. Add the Day and Night Hollywood venue-menu rows. Night uses a phase-time offset so a full-length shift stays in LATE while the clock starts at zero; late routine traffic keeps the street populated and the offset round-trips through checkpoint restore. Retune local-light falloff to linear attenuation, add a cool north sky fill, and use the smooth limestone facade texture. Refresh the staged gallery and map references; add geometry-budget, menu, night-offset and late-traffic tests.
488 lines
9.0 KiB
Plaintext
488 lines
9.0 KiB
Plaintext
[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
|
|
}
|
|
}
|