Preserve approved pixel tower prototype as development baseline

This commit is contained in:
Codex
2026-09-09 07:51:16 +09:00
commit 423fd6dd2e
915 changed files with 95193 additions and 0 deletions
+142
View File
@@ -0,0 +1,142 @@
{
"schema_version": 1,
"content_type": "guest_classes",
"entries": [
{
"id": "warrior",
"display_name": "戦士",
"base_patience": 65,
"risk_tolerance": 75,
"legal_sensitivity": 35,
"quality_sensitivity": 35,
"wealth_min": 300,
"wealth_max": 900,
"credit_limit_gold": 100,
"minimum_quality": 25,
"schedule_profile": "evening",
"tags": ["combatant"],
"preferences": {"food": 18, "security": 4, "tavern": 15},
"need_rates": {"hunger": 10, "hygiene": 0, "intimacy": 0, "leisure": 5, "medical": 0, "sleep": 6},
"group_size_weights": {"1": 35, "2": 45, "3": 20}
},
{
"id": "mage",
"display_name": "魔法使い",
"base_patience": 45,
"risk_tolerance": 45,
"legal_sensitivity": 50,
"quality_sensitivity": 60,
"wealth_min": 450,
"wealth_max": 1200,
"credit_limit_gold": 200,
"minimum_quality": 40,
"schedule_profile": "day",
"tags": ["mana_sensitive", "noise_sensitive"],
"preferences": {"mana": 20, "quiet": 14, "tavern": -10},
"need_rates": {"hunger": 7, "hygiene": 0, "intimacy": 0, "leisure": 4, "medical": 0, "sleep": 7},
"group_size_weights": {"1": 60, "2": 35, "3": 5}
},
{
"id": "rogue",
"display_name": "盗賊",
"base_patience": 50,
"risk_tolerance": 85,
"legal_sensitivity": 15,
"quality_sensitivity": 30,
"wealth_min": 250,
"wealth_max": 1000,
"credit_limit_gold": 80,
"minimum_quality": 20,
"schedule_profile": "night",
"tags": ["stealthy", "underworld"],
"preferences": {"security": -12, "tavern": 10, "underground": 24},
"need_rates": {"hunger": 7, "hygiene": 0, "intimacy": 0, "leisure": 7, "medical": 0, "sleep": 5},
"group_size_weights": {"1": 70, "2": 25, "3": 5}
},
{
"id": "cleric",
"display_name": "聖職者",
"base_patience": 55,
"risk_tolerance": 20,
"legal_sensitivity": 90,
"quality_sensitivity": 55,
"wealth_min": 220,
"wealth_max": 750,
"credit_limit_gold": 50,
"minimum_quality": 45,
"schedule_profile": "day",
"tags": ["faith_aligned"],
"preferences": {"faith": 24, "quiet": 8, "underground": -25},
"need_rates": {"hunger": 7, "hygiene": 0, "intimacy": 0, "leisure": 3, "medical": 0, "sleep": 6},
"group_size_weights": {"1": 45, "2": 35, "3": 20}
},
{
"id": "noble",
"display_name": "貴族",
"base_patience": 30,
"risk_tolerance": 35,
"legal_sensitivity": 65,
"quality_sensitivity": 95,
"wealth_min": 1800,
"wealth_max": 5000,
"credit_limit_gold": 1500,
"minimum_quality": 70,
"schedule_profile": "evening",
"tags": ["vip"],
"preferences": {"luxury": 28, "quiet": 10, "vip": 25},
"need_rates": {"hunger": 6, "hygiene": 0, "intimacy": 0, "leisure": 6, "medical": 0, "sleep": 6},
"group_size_weights": {"1": 20, "2": 50, "3": 30}
},
{
"id": "merchant",
"display_name": "商人",
"base_patience": 45,
"risk_tolerance": 50,
"legal_sensitivity": 55,
"quality_sensitivity": 60,
"wealth_min": 900,
"wealth_max": 3200,
"credit_limit_gold": 900,
"minimum_quality": 50,
"schedule_profile": "day",
"tags": ["trade_focused"],
"preferences": {"food": 7, "trade": 25, "underground": 3},
"need_rates": {"hunger": 8, "hygiene": 0, "intimacy": 0, "leisure": 4, "medical": 0, "sleep": 7},
"group_size_weights": {"1": 35, "2": 45, "3": 20}
},
{
"id": "outsider",
"display_name": "亜人・魔族客",
"base_patience": 55,
"risk_tolerance": 65,
"legal_sensitivity": 35,
"quality_sensitivity": 45,
"wealth_min": 350,
"wealth_max": 1400,
"credit_limit_gold": 250,
"minimum_quality": 35,
"schedule_profile": "night",
"tags": ["nocturnal"],
"preferences": {"nightlife": 18, "service": 7, "underground": 12},
"need_rates": {"hunger": 7, "hygiene": 0, "intimacy": 0, "leisure": 7, "medical": 0, "sleep": 5},
"group_size_weights": {"1": 40, "2": 40, "3": 20}
},
{
"id": "diplomat",
"display_name": "外交官",
"base_patience": 35,
"risk_tolerance": 30,
"legal_sensitivity": 80,
"quality_sensitivity": 90,
"wealth_min": 1500,
"wealth_max": 4200,
"credit_limit_gold": 1800,
"minimum_quality": 75,
"schedule_profile": "day",
"tags": ["diplomatic", "vip"],
"preferences": {"luxury": 20, "quiet": 12, "security": 15, "vip": 30},
"need_rates": {"hunger": 6, "hygiene": 0, "intimacy": 0, "leisure": 4, "medical": 0, "sleep": 7},
"group_size_weights": {"1": 15, "2": 55, "3": 30}
}
]
}
+50
View File
@@ -0,0 +1,50 @@
{
"schema_version": 1,
"content_type": "species",
"entries": [
{
"id": "human",
"display_name": "人間",
"adult_age": 18,
"wealth_multiplier_bp": 10000,
"patience_bonus": 0,
"risk_bonus": 0,
"tags": ["human"],
"preference_modifiers": {},
"need_rate_modifiers": {}
},
{
"id": "elf",
"display_name": "エルフ",
"adult_age": 20,
"wealth_multiplier_bp": 11000,
"patience_bonus": 5,
"risk_bonus": -5,
"tags": ["elf", "mana_affinity", "noise_sensitive"],
"preference_modifiers": {"mana": 10, "quiet": 8},
"need_rate_modifiers": {"sleep": -1}
},
{
"id": "beastfolk",
"display_name": "獣人",
"adult_age": 18,
"wealth_multiplier_bp": 9500,
"patience_bonus": 10,
"risk_bonus": 10,
"tags": ["beastfolk"],
"preference_modifiers": {"food": 8, "security": 3},
"need_rate_modifiers": {"hunger": 1}
},
{
"id": "demonfolk",
"display_name": "魔族",
"adult_age": 20,
"wealth_multiplier_bp": 10500,
"patience_bonus": 0,
"risk_bonus": 15,
"tags": ["demonfolk", "night_affinity"],
"preference_modifiers": {"nightlife": 10, "underground": 8},
"need_rate_modifiers": {"leisure": 1}
}
]
}
+26
View File
@@ -0,0 +1,26 @@
{
"schema_version": 1,
"content_type": "staff_candidates",
"entries": [
{"id":"staff_akane","display_name":"アカネ","age":24,"adult_verified":true,"role_id":"receptionist","daily_wage":120,"signing_cost":180,"preferred_shift":"day","traits":["friendly"],"skills":{"combat":15,"operation":42,"service":68,"underworld":5},"permitted_task_tags":["reception","service"]},
{"id":"staff_bardo","display_name":"バルド","age":38,"adult_verified":true,"role_id":"receptionist","daily_wage":135,"signing_cost":220,"preferred_shift":"night","traits":["calm"],"skills":{"combat":22,"operation":55,"service":62,"underworld":18},"permitted_task_tags":["reception","service"]},
{"id":"staff_chika","display_name":"チカ","age":27,"adult_verified":true,"role_id":"cook","daily_wage":145,"signing_cost":250,"preferred_shift":"day","traits":["cleanly"],"skills":{"combat":8,"operation":76,"service":32,"underworld":4},"permitted_task_tags":["cooking","supply"]},
{"id":"staff_doran","display_name":"ドラン","age":44,"adult_verified":true,"role_id":"cook","daily_wage":160,"signing_cost":300,"preferred_shift":"night","traits":["mentor"],"skills":{"combat":20,"operation":82,"service":28,"underworld":12},"permitted_task_tags":["cooking","supply"]},
{"id":"staff_eri","display_name":"エリ","age":22,"adult_verified":true,"role_id":"cleaner","daily_wage":90,"signing_cost":100,"preferred_shift":"day","traits":["cleanly"],"skills":{"combat":6,"operation":61,"service":35,"underworld":3},"permitted_task_tags":["cleaning","maintenance"]},
{"id":"staff_fugo","display_name":"フゴ","age":31,"adult_verified":true,"role_id":"cleaner","daily_wage":100,"signing_cost":130,"preferred_shift":"night","traits":["night_owl"],"skills":{"combat":18,"operation":65,"service":22,"underworld":20},"permitted_task_tags":["cleaning","maintenance"]},
{"id":"staff_gina","display_name":"ジーナ","age":29,"adult_verified":true,"role_id":"porter","daily_wage":110,"signing_cost":150,"preferred_shift":"day","traits":["careful"],"skills":{"combat":28,"operation":70,"service":20,"underworld":10},"permitted_task_tags":["logistics","rescue","supply"]},
{"id":"staff_haru","display_name":"ハル","age":21,"adult_verified":true,"role_id":"porter","daily_wage":95,"signing_cost":100,"preferred_shift":"night","traits":["night_owl"],"skills":{"combat":24,"operation":58,"service":25,"underworld":28},"permitted_task_tags":["logistics","rescue","supply"]},
{"id":"staff_iris","display_name":"イリス","age":26,"adult_verified":true,"role_id":"attendant","daily_wage":130,"signing_cost":210,"preferred_shift":"day","traits":["friendly"],"skills":{"combat":10,"operation":38,"service":74,"underworld":8},"permitted_task_tags":["bath","room_service","service"]},
{"id":"staff_juno","display_name":"ユノ","age":33,"adult_verified":true,"role_id":"attendant","daily_wage":140,"signing_cost":240,"preferred_shift":"night","traits":["calm"],"skills":{"combat":12,"operation":45,"service":78,"underworld":22},"permitted_task_tags":["bath","room_service","service"]},
{"id":"staff_klaus","display_name":"クラウス","age":36,"adult_verified":true,"role_id":"guard","daily_wage":155,"signing_cost":280,"preferred_shift":"day","traits":["short_tempered"],"skills":{"combat":82,"operation":34,"service":18,"underworld":16},"permitted_task_tags":["defense","escort","security"]},
{"id":"staff_lina","display_name":"リナ","age":30,"adult_verified":true,"role_id":"guard","daily_wage":150,"signing_cost":260,"preferred_shift":"night","traits":["night_owl"],"skills":{"combat":77,"operation":38,"service":25,"underworld":30},"permitted_task_tags":["defense","escort","security"]},
{"id":"staff_marc","display_name":"マルク","age":41,"adult_verified":true,"role_id":"guard","daily_wage":170,"signing_cost":330,"preferred_shift":"any","traits":["mentor"],"skills":{"combat":88,"operation":46,"service":20,"underworld":25},"permitted_task_tags":["defense","escort","security"]},
{"id":"staff_nadia","display_name":"ナディア","age":28,"adult_verified":true,"role_id":"bartender","daily_wage":145,"signing_cost":240,"preferred_shift":"night","traits":["merchant_minded"],"skills":{"combat":20,"operation":48,"service":76,"underworld":35},"permitted_task_tags":["bar","service","supply"]},
{"id":"staff_otto","display_name":"オットー","age":35,"adult_verified":true,"role_id":"bartender","daily_wage":150,"signing_cost":270,"preferred_shift":"night","traits":["friendly"],"skills":{"combat":26,"operation":52,"service":79,"underworld":32},"permitted_task_tags":["bar","service","supply"]},
{"id":"staff_petra","display_name":"ペトラ","age":25,"adult_verified":true,"role_id":"masseur","daily_wage":145,"signing_cost":260,"preferred_shift":"day","traits":["careful"],"skills":{"combat":8,"operation":35,"service":81,"underworld":18},"permitted_task_tags":["adult_service","massage","service"]},
{"id":"staff_quinn","display_name":"クイン","age":32,"adult_verified":true,"role_id":"masseur","daily_wage":160,"signing_cost":320,"preferred_shift":"night","traits":["underworld_savvy"],"skills":{"combat":18,"operation":40,"service":84,"underworld":55},"permitted_task_tags":["adult_service","massage","service"]},
{"id":"staff_rika","display_name":"リカ","age":23,"adult_verified":true,"role_id":"clerk","daily_wage":105,"signing_cost":140,"preferred_shift":"day","traits":["merchant_minded"],"skills":{"combat":5,"operation":67,"service":58,"underworld":7},"permitted_task_tags":["accounting","reception","trade"]},
{"id":"staff_sven","display_name":"スヴェン","age":39,"adult_verified":true,"role_id":"maintenance","daily_wage":125,"signing_cost":190,"preferred_shift":"any","traits":["careful"],"skills":{"combat":32,"operation":74,"service":16,"underworld":15},"permitted_task_tags":["construction","maintenance","repair"]},
{"id":"staff_tessa","display_name":"テッサ","age":34,"adult_verified":true,"role_id":"medic","daily_wage":165,"signing_cost":340,"preferred_shift":"any","traits":["calm"],"skills":{"combat":14,"operation":69,"service":63,"underworld":12},"permitted_task_tags":["medical","rescue","service"]}
]
}
@@ -0,0 +1,32 @@
{
"schema_version": 1,
"content_type": "unique_characters",
"entries": [
{
"id": "heroine_anri",
"display_name": "アンリ",
"character_kind": "heroine",
"age": 25,
"adult_verified": true,
"role_id": "innkeeper",
"counterpart_id": "rival_rai",
"preferred_shift": "day",
"traits": ["friendly", "unique", "unsellable"],
"skills": {"combat": 24, "operation": 66, "service": 82, "underworld": 18},
"mechanical_effects": {"assigned_floor_patience_loss_multiplier_bp": 9000}
},
{
"id": "rival_rai",
"display_name": "ライ",
"character_kind": "rival",
"age": 29,
"adult_verified": true,
"role_id": "influencer",
"counterpart_id": "heroine_anri",
"preferred_shift": "night",
"traits": ["diplomatic", "unique", "unsellable"],
"skills": {"combat": 45, "operation": 38, "service": 72, "underworld": 68},
"mechanical_effects": {"base_shield_attack": 8, "night_shield_attack_bonus": 4}
}
]
}
+52
View File
@@ -0,0 +1,52 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
definition_schema_version = 2
id = &"adult_private_room"
display_name = "成人向け個室"
description = "年齢確認済みの成人だけが利用・担当できる予約制の限定サービス区画。"
category = &"restricted_service"
service_types = Array[StringName]([&"private_adult_service"])
default_service_type = &"private_adult_service"
service_profiles = {&"private_adult_service": {&"duration_minutes": 90, &"base_quality": 60, &"base_price": 250, &"capacity_units": 1, &"need_effects": {&"intimacy": -70, &"leisure": -20}}}
zone = 3
layer = 0
footprint = Vector2i(2, 1)
guest_access_offsets = Array[Vector2i]([Vector2i(0, 0)])
staff_access_offsets = Array[Vector2i]([Vector2i(1, 0)])
required_connection_tags = Array[StringName]([&"guest_access"])
preferred_adjacency_tags = Array[StringName]([&"concealment", &"security"])
forbidden_adjacency_tags = Array[StringName]([&"entrance"])
construction_cost = {&"gold": 1500, &"materials": 14}
build_minutes = 240
weight_per_cell = 2
upgrade_costs = Array[Dictionary]([{&"gold": 750, &"materials": 8}, {&"gold": 1500, &"materials": 14}])
maintenance_mana = 3
power_priority = 45
staff_min = 1
staff_max = 1
required_roles = Array[StringName]([&"service_attendant"])
primary_skill = &"service"
capacity = 2
queue_capacity = 4
base_service_minutes = 90
base_quality = 60
base_price = 250
opening_schedule = {&"morning": false, &"day": false, &"night": true}
policy_schema = {&"age_verification": {&"type": &"bool", &"default": true}, &"price_mode": {&"type": &"enum", &"default": &"standard"}, &"reservation_only": {&"type": &"bool", &"default": true}}
cleanliness_decay_per_service = 4
noise_per_service = 2
concealment_effect = 8
heat_per_service = 3
incident_weights = {&"audit_discovery": 4, &"privacy_breach": 3, &"underage_access": 100}
allowed_guest_tags = Array[StringName]([&"adult_verified"])
forbidden_guest_tags = Array[StringName]([&"underage"])
adult_content = true
content_replacement_id = &"massage_room"
unlock_rank = 3
research_requirements = Array[StringName]([&"discreet_hospitality"])
statistics_keys = Array[StringName]([&"adult_verification_failures", &"average_wait_minutes", &"revenue", &"services_completed"])
tags = Array[StringName]([&"adult_only", &"restricted_service", &"service", &"underground"])
+27
View File
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"cafeteria"
display_name = "大衆食堂"
description = "低価格で多くの客の食欲を満たす。裏層の厨房から料理を受け取る。"
zone = 0
layer = 0
footprint = Vector2i(4, 2)
construction_cost = {&"gold": 800, &"materials": 12}
build_minutes = 180
weight_per_cell = 2
maintenance_mana = 2
staff_min = 2
staff_max = 4
required_roles = Array[StringName]([&"cook", &"server"])
primary_skill = &"cooking"
capacity = 12
queue_capacity = 24
base_service_minutes = 15
base_quality = 55
base_price = 35
inventory_inputs = {&"ingredient/basic_meal": 1}
tags = Array[StringName]([&"dining", &"social"])
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"black_market"
display_name = "闇市取引所"
description = "希少品を高値で扱う地下取引施設。収益と引き換えに警戒と監査リスクを持つ。"
zone = 3
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 1600, &"materials": 12}
build_minutes = 270
weight_per_cell = 2
maintenance_mana = 2
power_priority = 40
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"clerk"])
primary_skill = &"underworld"
capacity = 8
queue_capacity = 12
base_service_minutes = 20
base_quality = 60
base_price = 50
tags = Array[StringName]([&"authority_risk", &"expansion", &"restricted_service", &"trade", &"underground", &"underworld"])
+28
View File
@@ -0,0 +1,28 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"clinic"
display_name = "診療所"
description = "客と従業員の軽傷や体調不良を治療する、一般利用可能な医療施設。"
zone = 0
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 1000, &"materials": 12}
build_minutes = 180
weight_per_cell = 2
maintenance_mana = 3
power_priority = 90
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"medic"])
primary_skill = &"service"
capacity = 4
queue_capacity = 8
base_service_minutes = 45
base_quality = 65
base_price = 80
inventory_inputs = {&"medical/basic_supply": 1}
tags = Array[StringName]([&"expansion", &"medical", &"recovery", &"service"])
@@ -0,0 +1,25 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"cold_storage"
display_name = "魔法冷蔵庫"
description = "食材の劣化を抑え、厨房と酒場の在庫損失を減らすBACK保管施設。"
zone = 0
layer = 1
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 900, &"materials": 12}
build_minutes = 180
weight_per_cell = 2
maintenance_mana = 4
power_priority = 75
staff_min = 0
staff_max = 1
capacity = 160
queue_capacity = 4
base_service_minutes = 10
base_quality = 65
base_price = 0
tags = Array[StringName]([&"back_of_house", &"expansion", &"food", &"preservation", &"storage"])
@@ -0,0 +1,25 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"general_store"
display_name = "売店"
description = "旅用品、薬、土産を販売し、宿泊以外の客単価を高める一般向け店舗。"
zone = 2
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 750, &"materials": 10}
build_minutes = 150
weight_per_cell = 1
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"clerk"])
primary_skill = &"operation"
capacity = 6
queue_capacity = 10
base_service_minutes = 10
base_quality = 55
base_price = 25
tags = Array[StringName]([&"expansion", &"retail", &"service", &"trade"])
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"guild_counter"
display_name = "冒険者窓口"
description = "依頼、探索情報、護衛紹介を扱い、冒険者客と探索Systemを接続する窓口。"
zone = 2
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 800, &"materials": 8}
build_minutes = 150
weight_per_cell = 1
maintenance_mana = 1
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"clerk"])
primary_skill = &"operation"
capacity = 8
queue_capacity = 16
base_service_minutes = 15
base_quality = 60
base_price = 20
tags = Array[StringName]([&"adventure", &"entrance", &"expansion", &"information", &"service"])
+29
View File
@@ -0,0 +1,29 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"laundry"
display_name = "洗濯室"
description = "客室と浴場から回収した布類を洗浄し、清潔なリネンを供給するBACK施設。"
zone = 0
layer = 1
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 700, &"materials": 10}
build_minutes = 150
weight_per_cell = 2
maintenance_mana = 3
power_priority = 65
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"cleaner"])
primary_skill = &"operation"
capacity = 20
queue_capacity = 8
base_service_minutes = 20
base_quality = 58
base_price = 0
inventory_inputs = {&"linen/used": 4}
inventory_outputs = {&"linen/clean": 4}
tags = Array[StringName]([&"back_of_house", &"cleaning", &"expansion", &"production"])
@@ -0,0 +1,28 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"maintenance_workshop"
display_name = "整備工房"
description = "設備修理、建築補助、交換部品の準備を行うBACK作業施設。"
zone = 0
layer = 1
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 1000, &"materials": 14}
build_minutes = 210
weight_per_cell = 2
maintenance_mana = 2
power_priority = 85
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"maintenance"])
primary_skill = &"operation"
capacity = 6
queue_capacity = 8
base_service_minutes = 30
base_quality = 62
base_price = 0
inventory_inputs = {&"material/repair_part": 1}
tags = Array[StringName]([&"back_of_house", &"construction", &"expansion", &"maintenance", &"repair"])
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"mana_control_room"
display_name = "魔力制御室"
description = "地下の魔力供給、蓄積、優先配電を管理する高重要度のBACK設備。"
zone = 3
layer = 1
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 1800, &"materials": 18}
build_minutes = 300
weight_per_cell = 3
maintenance_mana = 1
power_priority = 100
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"maintenance"])
primary_skill = &"operation"
capacity = 40
queue_capacity = 2
base_service_minutes = 1
base_quality = 65
base_price = 0
tags = Array[StringName]([&"back_of_house", &"expansion", &"mana_infrastructure", &"staff_only", &"underground"])
@@ -0,0 +1,24 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"premium_room"
display_name = "上級客室"
description = "富裕客と長期滞在客向けの静かな地上客室。一般客室より高い品質と料金を持つ。"
zone = 1
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 900, &"materials": 10}
build_minutes = 150
weight_per_cell = 2
maintenance_mana = 1
staff_min = 0
staff_max = 0
capacity = 2
queue_capacity = 2
base_service_minutes = 720
base_quality = 70
base_price = 220
tags = Array[StringName]([&"expansion", &"lodging", &"premium", &"quiet"])
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"private_bath"
display_name = "地下貸切浴室"
description = "少人数で利用できる予約制の貸切浴室。静けさと高品質を重視する。"
zone = 3
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 1100, &"materials": 14}
build_minutes = 210
weight_per_cell = 2
maintenance_mana = 4
power_priority = 70
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"attendant"])
primary_skill = &"service"
capacity = 4
queue_capacity = 8
base_service_minutes = 60
base_quality = 70
base_price = 80
tags = Array[StringName]([&"expansion", &"hygiene", &"premium", &"service", &"underground", &"wellness"])
@@ -0,0 +1,28 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"secret_tavern"
display_name = "地下酒場"
description = "夜間客と裏社会に通じた客が集う、地下FRONTの高単価な交流施設。"
zone = 3
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 1300, &"materials": 14}
build_minutes = 240
weight_per_cell = 2
maintenance_mana = 3
power_priority = 60
staff_min = 2
staff_max = 4
required_roles = Array[StringName]([&"bartender", &"attendant"])
primary_skill = &"service"
capacity = 10
queue_capacity = 18
base_service_minutes = 60
base_quality = 62
base_price = 90
inventory_inputs = {&"beverage/rare": 1}
tags = Array[StringName]([&"expansion", &"leisure", &"night_service", &"social", &"underground", &"underworld"])
@@ -0,0 +1,25 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"staff_dormitory"
display_name = "従業員宿舎"
description = "勤務の合間に従業員が睡眠と長時間休息を取るBACK居住区画。"
zone = 1
layer = 1
footprint = Vector2i(4, 2)
construction_cost = {&"gold": 650, &"materials": 8}
build_minutes = 150
weight_per_cell = 1
maintenance_mana = 1
power_priority = 35
staff_min = 0
staff_max = 0
capacity = 12
queue_capacity = 0
base_service_minutes = 360
base_quality = 58
base_price = 0
tags = Array[StringName]([&"back_of_house", &"expansion", &"recovery", &"staff_only", &"staff_support"])
+27
View File
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"tea_lounge"
display_name = "喫茶ラウンジ"
description = "昼の休息と軽い交流を提供する、一般客向けの落ち着いた接客施設。"
zone = 1
layer = 0
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 650, &"materials": 8}
build_minutes = 120
weight_per_cell = 1
maintenance_mana = 1
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"attendant"])
primary_skill = &"service"
capacity = 8
queue_capacity = 12
base_service_minutes = 30
base_quality = 60
base_price = 55
inventory_inputs = {&"beverage/tea": 1}
tags = Array[StringName]([&"day_service", &"dining", &"expansion", &"leisure", &"social"])
@@ -0,0 +1,24 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"underground_guest_room"
display_name = "地下客室"
description = "静けさと遮光を好む客や夜行性種族向けの、地下FRONT宿泊区画。"
zone = 3
layer = 0
footprint = Vector2i(2, 1)
construction_cost = {&"gold": 600, &"materials": 7}
build_minutes = 90
weight_per_cell = 1
maintenance_mana = 1
staff_min = 0
staff_max = 0
capacity = 2
queue_capacity = 4
base_service_minutes = 720
base_quality = 58
base_price = 140
tags = Array[StringName]([&"expansion", &"lodging", &"night_service", &"quiet", &"underground"])
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"vip_private_salon"
display_name = "地下VIPサロン"
description = "年齢確認済みの富裕な成人客へ、夜間の限定サービスを提供する高級区画。"
zone = 3
layer = 0
footprint = Vector2i(4, 2)
construction_cost = {&"gold": 2200, &"materials": 20}
build_minutes = 360
weight_per_cell = 3
maintenance_mana = 5
power_priority = 50
staff_min = 2
staff_max = 4
required_roles = Array[StringName]([&"attendant", &"masseur"])
primary_skill = &"service"
capacity = 6
queue_capacity = 8
base_service_minutes = 120
base_quality = 78
base_price = 400
tags = Array[StringName]([&"adult_only", &"expansion", &"night_service", &"premium", &"restricted_service", &"underground"])
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"waste_processing"
display_name = "廃棄物処理室"
description = "厨房、浴場、客室から出る廃棄物を処理し、汚れと事故リスクを抑える地下BACK施設。"
zone = 3
layer = 1
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 800, &"materials": 10}
build_minutes = 180
weight_per_cell = 2
maintenance_mana = 2
power_priority = 55
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"cleaner"])
primary_skill = &"operation"
capacity = 20
queue_capacity = 8
base_service_minutes = 15
base_quality = 55
base_price = 0
tags = Array[StringName]([&"back_of_house", &"cleaning", &"expansion", &"risk_control", &"underground"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"guest_corridor"
display_name = "客用通路"
description = "客と接客中の従業員が利用する、表層の移動用サブスロット。"
zone = 0
layer = 0
footprint = Vector2i(1, 1)
construction_cost = {&"gold": 20, &"materials": 0}
build_minutes = 10
weight_per_cell = 1
pass_through = true
maintenance_mana = 0
power_priority = 10
staff_min = 0
staff_max = 0
capacity = 3
queue_capacity = 0
base_service_minutes = 1
base_quality = 50
base_price = 0
tags = Array[StringName]([&"corridor", &"guest_access", &"movement", &"route_subslot", &"schema_facility_proxy"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"guest_elevator"
display_name = "客用昇降機"
description = "客と接客中の従業員を上下階へ運ぶ、低速の表層用昇降設備。"
zone = 0
layer = 0
footprint = Vector2i(2, 2)
construction_cost = {&"gold": 1500, &"materials": 15}
build_minutes = 300
weight_per_cell = 3
pass_through = true
maintenance_mana = 5
power_priority = 85
staff_min = 0
staff_max = 0
capacity = 4
queue_capacity = 8
base_service_minutes = 10
base_quality = 50
base_price = 0
tags = Array[StringName]([&"guest_access", &"movement", &"schema_facility_proxy", &"vertical_connector"])
+46
View File
@@ -0,0 +1,46 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
definition_schema_version = 2
id = &"kitchen"
display_name = "厨房"
description = "食材を調理し、食堂や酒場へ料理を供給する裏方施設。"
category = &"production"
service_types = Array[StringName]([&"meal_batch"])
default_service_type = &"meal_batch"
service_profiles = {&"meal_batch": {&"duration_minutes": 15, &"base_quality": 55, &"base_price": 0, &"capacity_units": 4, &"need_effects": {&"hunger": 0}}}
zone = 0
layer = 1
footprint = Vector2i(4, 2)
staff_access_offsets = Array[Vector2i]([Vector2i(0, 1), Vector2i(3, 1)])
required_connection_tags = Array[StringName]([&"staff_only"])
preferred_adjacency_tags = Array[StringName]([&"dining", &"storage"])
forbidden_adjacency_tags = Array[StringName]([&"quiet"])
construction_cost = {&"gold": 700, &"materials": 10}
build_minutes = 180
weight_per_cell = 2
upgrade_costs = Array[Dictionary]([{&"gold": 350, &"materials": 6}, {&"gold": 700, &"materials": 12}])
maintenance_mana = 2
power_priority = 80
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"cook"])
primary_skill = &"cooking"
capacity = 20
queue_capacity = 4
base_service_minutes = 15
base_quality = 55
base_price = 0
inventory_inputs = {&"ingredient/raw_food": 4}
inventory_outputs = {&"ingredient/basic_meal": 4}
opening_schedule = {&"morning": true, &"day": true, &"night": true}
policy_schema = {&"batch_priority": {&"type": &"enum", &"default": &"fifo"}, &"quality_target": {&"type": &"int", &"default": 55}}
cleanliness_decay_per_service = 3
noise_per_service = 4
incident_weights = {&"contamination": 2, &"fire": 2}
unlock_rank = 1
statistics_keys = Array[StringName]([&"batches_completed", &"downtime_minutes", &"output_quantity", &"spoilage_quantity"])
tags = Array[StringName]([&"back_of_house", &"food", &"production"])
+27
View File
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"massage_room"
display_name = "マッサージ室"
description = "予約客へ施術を提供し、疲労とストレスの回復を支援する個室。"
zone = 0
layer = 0
footprint = Vector2i(2, 1)
construction_cost = {&"gold": 800, &"materials": 8}
build_minutes = 120
weight_per_cell = 1
maintenance_mana = 2
power_priority = 50
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"therapist"])
primary_skill = &"service"
capacity = 2
queue_capacity = 6
base_service_minutes = 60
base_quality = 60
base_price = 100
tags = Array[StringName]([&"leisure", &"service", &"wellness"])
+27
View File
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"public_bath"
display_name = "大浴場"
description = "多人数を受け入れ、清潔と休息の欲求を満たす共同浴場。"
zone = 0
layer = 0
footprint = Vector2i(6, 2)
construction_cost = {&"gold": 1200, &"materials": 16}
build_minutes = 240
weight_per_cell = 2
maintenance_mana = 4
power_priority = 65
staff_min = 1
staff_max = 2
required_roles = Array[StringName]([&"bath_attendant"])
primary_skill = &"service"
capacity = 12
queue_capacity = 24
base_service_minutes = 60
base_quality = 55
base_price = 20
tags = Array[StringName]([&"hygiene", &"service", &"wellness"])
+45
View File
@@ -0,0 +1,45 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
definition_schema_version = 2
id = &"reception"
display_name = "受付"
description = "全ての客のチェックインと精算を処理する、境界階の中核施設。"
category = &"guest_service"
service_types = Array[StringName]([&"check_in", &"check_out"])
default_service_type = &"check_in"
service_profiles = {&"check_in": {&"duration_minutes": 8, &"base_quality": 60, &"base_price": 20, &"capacity_units": 1, &"need_effects": {&"sleep": 0}}, &"check_out": {&"duration_minutes": 6, &"base_quality": 60, &"base_price": 0, &"capacity_units": 1, &"need_effects": {&"sleep": 0}}}
zone = 2
layer = 0
footprint = Vector2i(4, 2)
guest_access_offsets = Array[Vector2i]([Vector2i(0, 1), Vector2i(1, 1)])
staff_access_offsets = Array[Vector2i]([Vector2i(3, 1)])
required_connection_tags = Array[StringName]([&"guest_access"])
preferred_adjacency_tags = Array[StringName]([&"entrance", &"lodging"])
construction_cost = {&"gold": 500, &"materials": 8}
build_minutes = 120
weight_per_cell = 2
upgrade_costs = Array[Dictionary]([{&"gold": 250, &"materials": 4}, {&"gold": 500, &"materials": 8}])
maintenance_mana = 1
power_priority = 100
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"receptionist"])
capacity = 8
queue_capacity = 16
base_service_minutes = 8
base_quality = 60
base_price = 20
opening_schedule = {&"morning": true, &"day": true, &"night": true}
policy_schema = {&"price_mode": {&"type": &"enum", &"default": &"standard"}, &"vip_priority": {&"type": &"bool", &"default": false}}
cleanliness_decay_per_service = 1
noise_per_service = 1
beauty_effect = 4
security_effect = 5
incident_weights = {&"queue_dispute": 1, &"theft": 1}
unlock_rank = 1
statistics_keys = Array[StringName]([&"average_wait_minutes", &"guest_processed", &"revenue", &"satisfaction_delta"])
tags = Array[StringName]([&"service", &"entrance"])
+27
View File
@@ -0,0 +1,27 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"security_station"
display_name = "警備詰所"
description = "警備員が待機し、事故・喧嘩・侵入などの現場へ出動する拠点。"
zone = 0
layer = 1
footprint = Vector2i(2, 2)
construction_cost = {&"gold": 900, &"materials": 10}
build_minutes = 180
weight_per_cell = 2
maintenance_mana = 2
power_priority = 90
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"security"])
primary_skill = &"combat"
capacity = 3
queue_capacity = 8
base_service_minutes = 1
base_quality = 55
base_price = 0
tags = Array[StringName]([&"incident_response", &"security", &"staff_support"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"service_corridor"
display_name = "裏通路"
description = "従業員・物資・清掃・警備・救護が利用する、裏層の移動用サブスロット。"
zone = 0
layer = 1
footprint = Vector2i(1, 1)
construction_cost = {&"gold": 25, &"materials": 0}
build_minutes = 10
weight_per_cell = 1
pass_through = true
maintenance_mana = 0
power_priority = 10
staff_min = 0
staff_max = 0
capacity = 2
queue_capacity = 0
base_service_minutes = 1
base_quality = 50
base_price = 0
tags = Array[StringName]([&"corridor", &"movement", &"route_subslot", &"schema_facility_proxy", &"staff_only"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"service_elevator"
display_name = "業務用昇降機"
description = "従業員・物資・救護搬送を上下階へ運ぶ、高速の裏層用昇降設備。"
zone = 0
layer = 1
footprint = Vector2i(3, 2)
construction_cost = {&"gold": 2200, &"materials": 20}
build_minutes = 360
weight_per_cell = 3
pass_through = true
maintenance_mana = 6
power_priority = 95
staff_min = 0
staff_max = 0
capacity = 8
queue_capacity = 16
base_service_minutes = 5
base_quality = 50
base_price = 0
tags = Array[StringName]([&"movement", &"schema_facility_proxy", &"staff_only", &"vertical_connector"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"staff_door"
display_name = "従業員ドア"
description = "従業員だけが表層と裏層を行き来できる、管理された接続設備。"
zone = 0
layer = 1
footprint = Vector2i(1, 1)
construction_cost = {&"gold": 100, &"materials": 1}
build_minutes = 30
weight_per_cell = 1
pass_through = true
maintenance_mana = 0
power_priority = 95
staff_min = 0
staff_max = 0
capacity = 1
queue_capacity = 1
base_service_minutes = 1
base_quality = 50
base_price = 0
tags = Array[StringName]([&"cross_layer_connector", &"movement", &"schema_facility_proxy", &"staff_only"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"staff_waiting_room"
display_name = "待機室"
description = "非番または待機中の従業員が休憩し、呼び出しに備える裏方区画。"
zone = 0
layer = 1
footprint = Vector2i(4, 2)
construction_cost = {&"gold": 400, &"materials": 6}
build_minutes = 120
weight_per_cell = 1
maintenance_mana = 0
power_priority = 30
staff_min = 0
staff_max = 0
primary_skill = &"operation"
capacity = 8
queue_capacity = 0
base_service_minutes = 1
base_quality = 50
base_price = 0
tags = Array[StringName]([&"continuous_support", &"recovery", &"staff_support"])
+24
View File
@@ -0,0 +1,24 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"standard_room"
display_name = "一般客室"
description = "冒険者と一般市民向けの基本的な宿泊施設。"
zone = 1
layer = 0
footprint = Vector2i(2, 1)
construction_cost = {&"gold": 350, &"materials": 5}
build_minutes = 60
weight_per_cell = 1
maintenance_mana = 0
staff_min = 0
staff_max = 0
capacity = 2
queue_capacity = 4
base_service_minutes = 720
base_quality = 50
base_price = 80
tags = Array[StringName]([&"lodging", &"quiet"])
+28
View File
@@ -0,0 +1,28 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"tavern"
display_name = "酒場"
description = "飲食と交流を提供し、夜間の娯楽需要にも応える接客施設。"
zone = 0
layer = 0
footprint = Vector2i(4, 2)
construction_cost = {&"gold": 1000, &"materials": 12}
build_minutes = 240
weight_per_cell = 2
maintenance_mana = 2
power_priority = 55
staff_min = 2
staff_max = 4
required_roles = Array[StringName]([&"bartender", &"server"])
primary_skill = &"service"
capacity = 14
queue_capacity = 28
base_service_minutes = 50
base_quality = 55
base_price = 40
inventory_inputs = {&"beverage/basic": 1}
tags = Array[StringName]([&"dining", &"leisure", &"service", &"social"])
+26
View File
@@ -0,0 +1,26 @@
[gd_resource type="Resource" script_class="FacilityDefinition" load_steps=2 format=3]
[ext_resource type="Script" path="res://scripts/data/facility_definition.gd" id="1"]
[resource]
script = ExtResource("1")
id = &"warehouse"
display_name = "倉庫"
description = "食材、資材、装備を保管し、裏動線を通じて各施設へ供給する。"
zone = 0
layer = 1
footprint = Vector2i(4, 2)
construction_cost = {&"gold": 450, &"materials": 10}
build_minutes = 180
weight_per_cell = 2
maintenance_mana = 0
staff_min = 1
staff_max = 3
required_roles = Array[StringName]([&"logistics"])
primary_skill = &"operation"
capacity = 100
queue_capacity = 4
base_service_minutes = 10
base_quality = 50
base_price = 0
tags = Array[StringName]([&"logistics", &"storage"])