1447 lines
41 KiB
JSON
1447 lines
41 KiB
JSON
{
|
|
"locations": [
|
|
{
|
|
"id": "start_point",
|
|
"name": "\ud83c\udf06 Ruined Downtown Core",
|
|
"description": "The wind howls through skeletal skyscrapers. Debris litters the cracked asphalt. You sense danger, but also opportunity.",
|
|
"image_path": "images/locations/downtown.webp",
|
|
"x": 0,
|
|
"y": 0,
|
|
"interactables": {
|
|
"start_point_dumpster": {
|
|
"outcomes": {
|
|
"search_dumpster": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 8,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 3
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 2
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "You disturb a nest of rats! They bite you! (-8 HP)",
|
|
"crit_success": "",
|
|
"failure": "Just rotting garbage. Nothing useful.",
|
|
"success": "Despite the smell, you find some [Plastic Bottles] and [Cloth Scraps]."
|
|
}
|
|
}
|
|
},
|
|
"template_id": "dumpster"
|
|
},
|
|
"start_point_sedan": {
|
|
"outcomes": {
|
|
"pop_trunk": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 0,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "tire_iron",
|
|
"quantity": 1
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 3,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "",
|
|
"crit_success": "",
|
|
"failure": "The trunk is rusted shut. You can't get it open.",
|
|
"success": "With a great heave, you pry the trunk open and find a [Tire Iron]!"
|
|
}
|
|
},
|
|
"search_glovebox": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 0,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "stale_chocolate_bar",
|
|
"quantity": 1
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 1,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "",
|
|
"crit_success": "",
|
|
"failure": "The glovebox is empty except for dust and old receipts.",
|
|
"success": "You find a half-eaten [Stale Chocolate Bar]."
|
|
}
|
|
}
|
|
},
|
|
"template_id": "sedan"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "gas_station",
|
|
"name": "\u26fd\ufe0f Abandoned Gas Station",
|
|
"description": "The smell of stale gasoline hangs in the air. A rusty sedan sits by the pumps, its door ajar. Behind the station, you spot a small tool shed with a workbench.",
|
|
"image_path": "images/locations/gas_station.webp",
|
|
"x": 0,
|
|
"y": 2,
|
|
"tags": [
|
|
"workbench",
|
|
"repair_station"
|
|
],
|
|
"interactables": {
|
|
"gas_station_sedan": {
|
|
"template_id": "sedan",
|
|
"outcomes": {
|
|
"search_glovebox": {
|
|
"stamina_cost": 1,
|
|
"success_rate": 0.6,
|
|
"crit_success_chance": 0.15,
|
|
"crit_failure_chance": 0.05,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 0,
|
|
"items": [
|
|
{
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 1,
|
|
"chance": 0.8
|
|
},
|
|
{
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 1,
|
|
"chance": 0.5
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 2,
|
|
"chance": 1.0
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You find some cloth scraps and plastic in the glovebox.",
|
|
"failure": "The glovebox is empty except for old papers.",
|
|
"crit_success": "You find scrap metal from the dashboard!",
|
|
"crit_failure": "The glovebox is jammed shut."
|
|
}
|
|
},
|
|
"pop_trunk": {
|
|
"stamina_cost": 3,
|
|
"success_rate": 0.5,
|
|
"crit_success_chance": 0.2,
|
|
"crit_failure_chance": 0.1,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 5,
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 3,
|
|
"chance": 0.7
|
|
},
|
|
{
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 2,
|
|
"chance": 0.6
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "tools",
|
|
"quantity": 1,
|
|
"chance": 0.3
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You force the trunk open and find scrap metal and plastic.",
|
|
"failure": "The trunk is rusted shut.",
|
|
"crit_success": "The trunk contains tools!",
|
|
"crit_failure": "You cut your hand on rusty metal! (-5 HP)"
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"gas_station_storage": {
|
|
"template_id": "storage_box",
|
|
"outcomes": {
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.55,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.1,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 0,
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 2,
|
|
"chance": 0.7
|
|
},
|
|
{
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 2,
|
|
"chance": 0.5
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "tools",
|
|
"quantity": 1,
|
|
"chance": 0.4
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You find scrap metal and cloth in the storage box.",
|
|
"failure": "The storage box is mostly empty.",
|
|
"crit_success": "You discover tools inside!",
|
|
"crit_failure": "Just oil stains and rust."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "residential",
|
|
"name": "\ud83c\udfd8\ufe0f Residential Street",
|
|
"description": "A quiet suburban street lined with abandoned homes. Most are boarded up, but a few doors hang open, creaking in the wind.",
|
|
"image_path": "images/locations/residential.webp",
|
|
"x": 3,
|
|
"y": 0,
|
|
"interactables": {
|
|
"residential_house1": {
|
|
"outcomes": {
|
|
"search_house": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 10,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "canned_beans",
|
|
"quantity": 1
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "bottled_water",
|
|
"quantity": 1
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 3
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 3,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "The floor collapses beneath you! (-10 HP)",
|
|
"crit_success": "",
|
|
"failure": "The house has already been thoroughly looted. Nothing remains.",
|
|
"success": "You find some useful supplies: [Canned Beans], [Bottled Water], and [Cloth Scraps]!"
|
|
}
|
|
}
|
|
},
|
|
"template_id": "house"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "clinic",
|
|
"name": "\ud83c\udfe5 Old Clinic",
|
|
"description": "A small medical clinic, its windows shattered. The waiting room is a mess of overturned chairs and scattered papers. The examination rooms might still have supplies.",
|
|
"image_path": "images/locations/clinic.webp",
|
|
"x": 2,
|
|
"y": 3,
|
|
"interactables": {
|
|
"clinic_medkit": {
|
|
"outcomes": {
|
|
"search_medkit": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 0,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "first_aid_kit",
|
|
"quantity": 1
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "bandage",
|
|
"quantity": 2
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "",
|
|
"crit_success": "",
|
|
"failure": "The cabinet is empty. Someone got here first.",
|
|
"success": "Jackpot! You find a [First Aid Kit] and some [Bandages]!"
|
|
}
|
|
}
|
|
},
|
|
"template_id": "medkit"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "plaza",
|
|
"name": "\ud83c\udfec Shopping Plaza",
|
|
"description": "A strip mall with broken storefronts. Most shops have been thoroughly ransacked, but you might find something if you search carefully.",
|
|
"image_path": "images/locations/plaza.webp",
|
|
"x": -2.5,
|
|
"y": 0,
|
|
"interactables": {
|
|
"plaza_vending": {
|
|
"template_id": "vending_machine",
|
|
"outcomes": {
|
|
"break": {
|
|
"stamina_cost": 5,
|
|
"success_rate": 0.7,
|
|
"crit_success_chance": 0.15,
|
|
"crit_failure_chance": 0.15,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 10,
|
|
"items": [
|
|
{
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 4,
|
|
"chance": 0.8
|
|
},
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 2,
|
|
"chance": 0.6
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "food",
|
|
"quantity": 3,
|
|
"chance": 0.5
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You smash the vending machine and grab bottles and scrap.",
|
|
"failure": "The machine is too sturdy to break.",
|
|
"crit_success": "Packaged food falls out!",
|
|
"crit_failure": "Glass cuts your arm! (-10 HP)"
|
|
}
|
|
},
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.05,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 0,
|
|
"items": [
|
|
{
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 1,
|
|
"chance": 0.7
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "food",
|
|
"quantity": 1,
|
|
"chance": 0.8
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You find a plastic bottle at the bottom.",
|
|
"failure": "Nothing left to scavenge.",
|
|
"crit_success": "A snack is wedged in the dispenser!",
|
|
"crit_failure": "Already picked clean."
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"plaza_rubble": {
|
|
"template_id": "rubble",
|
|
"outcomes": {
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.15,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 5,
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 3,
|
|
"chance": 0.7
|
|
},
|
|
{
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 2,
|
|
"chance": 0.5
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "tools",
|
|
"quantity": 1,
|
|
"chance": 0.2
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You dig through rubble and find scrap metal and cloth.",
|
|
"failure": "Just broken concrete and dust.",
|
|
"crit_success": "A tool was buried in the debris!",
|
|
"crit_failure": "Sharp debris cuts you! (-5 HP)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "park",
|
|
"name": "\ud83c\udf33 Suburban Park",
|
|
"description": "An overgrown park with rusted playground equipment. Nature is slowly reclaiming this space. A maintenance shed sits at the far end.",
|
|
"image_path": "images/locations/park.webp",
|
|
"x": -1,
|
|
"y": -2,
|
|
"interactables": {
|
|
"park_shed": {
|
|
"outcomes": {
|
|
"search_shed": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 0,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "rusty_nails",
|
|
"quantity": 5
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "wood_planks",
|
|
"quantity": 2
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "flashlight",
|
|
"quantity": 1
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "knife",
|
|
"quantity": 1
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "",
|
|
"crit_success": "",
|
|
"failure": "The shed has been picked clean. Only empty shelves remain.",
|
|
"success": "You find some tools: [Rusty Nails], [Wood Planks], and a [Flashlight]!"
|
|
}
|
|
}
|
|
},
|
|
"template_id": "toolshed"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "overpass",
|
|
"name": "\ud83d\udee3\ufe0f Highway Overpass",
|
|
"description": "A concrete overpass spanning the cracked highway below. Abandoned vehicles litter the road. This is a good vantage point to survey the area.",
|
|
"x": 1.0,
|
|
"y": 4.5,
|
|
"image_path": "images/locations/overpass.webp",
|
|
"interactables": {
|
|
"overpass_sedan1": {
|
|
"template_id": "sedan",
|
|
"outcomes": {
|
|
"search_glovebox": {
|
|
"success_rate": 0.5,
|
|
"stamina_cost": 1,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.1,
|
|
"text": {
|
|
"success": "You find a half-eaten [Stale Chocolate Bar].",
|
|
"failure": "The glovebox is empty except for dust and old receipts.",
|
|
"crit_success": "",
|
|
"crit_failure": ""
|
|
},
|
|
"rewards": {
|
|
"items": [
|
|
{
|
|
"item_id": "stale_chocolate_bar",
|
|
"quantity": 1,
|
|
"chance": 1.0
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"crit_items": [],
|
|
"crit_damage": 0
|
|
}
|
|
},
|
|
"pop_trunk": {
|
|
"success_rate": 0.5,
|
|
"stamina_cost": 3,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.1,
|
|
"text": {
|
|
"success": "With a great heave, you pry the trunk open and find a [Tire Iron]!",
|
|
"failure": "The trunk is rusted shut. You can't get it open.",
|
|
"crit_success": "",
|
|
"crit_failure": ""
|
|
},
|
|
"rewards": {
|
|
"items": [
|
|
{
|
|
"item_id": "tire_iron",
|
|
"quantity": 1,
|
|
"chance": 1.0
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"crit_items": [],
|
|
"crit_damage": 0
|
|
}
|
|
}
|
|
}
|
|
},
|
|
"overpass_sedan2": {
|
|
"template_id": "sedan",
|
|
"outcomes": {
|
|
"search_glovebox": {
|
|
"success_rate": 0.5,
|
|
"stamina_cost": 1,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.1,
|
|
"text": {
|
|
"success": "You find a half-eaten [Stale Chocolate Bar].",
|
|
"failure": "The glovebox is empty except for dust and old receipts.",
|
|
"crit_success": "",
|
|
"crit_failure": ""
|
|
},
|
|
"rewards": {
|
|
"items": [
|
|
{
|
|
"item_id": "stale_chocolate_bar",
|
|
"quantity": 1,
|
|
"chance": 1.0
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"crit_items": [],
|
|
"crit_damage": 0
|
|
}
|
|
},
|
|
"pop_trunk": {
|
|
"success_rate": 0.5,
|
|
"stamina_cost": 3,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.1,
|
|
"text": {
|
|
"success": "With a great heave, you pry the trunk open and find a [Tire Iron]!",
|
|
"failure": "The trunk is rusted shut. You can't get it open.",
|
|
"crit_success": "",
|
|
"crit_failure": ""
|
|
},
|
|
"rewards": {
|
|
"items": [
|
|
{
|
|
"item_id": "tire_iron",
|
|
"quantity": 1,
|
|
"chance": 1.0
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"crit_items": [],
|
|
"crit_damage": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "warehouse",
|
|
"name": "\ud83c\udfed Warehouse District",
|
|
"description": "Rows of industrial warehouses stretch before you. Metal doors creak in the wind. The loading docks are littered with debris and abandoned cargo.",
|
|
"image_path": "images/locations/warehouse.webp",
|
|
"x": 4,
|
|
"y": -1.5,
|
|
"interactables": {
|
|
"warehouse_dumpster": {
|
|
"outcomes": {
|
|
"search_dumpster": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 8,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 3
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 2
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "You disturb a nest of rats! They bite you! (-8 HP)",
|
|
"crit_success": "",
|
|
"failure": "Just rotting garbage. Nothing useful.",
|
|
"success": "Despite the smell, you find some [Plastic Bottles] and [Cloth Scraps]."
|
|
}
|
|
}
|
|
},
|
|
"template_id": "dumpster"
|
|
},
|
|
"warehouse_toolshed": {
|
|
"outcomes": {
|
|
"search_shed": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 0,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 1,
|
|
"item_id": "rusty_nails",
|
|
"quantity": 5
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "wood_planks",
|
|
"quantity": 2
|
|
},
|
|
{
|
|
"chance": 1,
|
|
"item_id": "flashlight",
|
|
"quantity": 1
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"text": {
|
|
"crit_failure": "",
|
|
"crit_success": "",
|
|
"failure": "The shed has been picked clean. Only empty shelves remain.",
|
|
"success": "You find some tools: [Rusty Nails], [Wood Planks], and a [Flashlight]!"
|
|
}
|
|
}
|
|
},
|
|
"template_id": "toolshed"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "warehouse_interior",
|
|
"name": "\ud83d\udce6 Warehouse Interior",
|
|
"description": "Inside the warehouse, towering shelves cast long shadows. Scattered crates and pallets suggest this was once a distribution center. The back office door hangs open.",
|
|
"image_path": "images/locations/warehouse_interior.webp",
|
|
"x": 4.5,
|
|
"y": -2,
|
|
"interactables": {
|
|
"storage_box_1762510181363": {
|
|
"template_id": "storage_box",
|
|
"outcomes": {
|
|
"search": {
|
|
"success_rate": 0.5,
|
|
"stamina_cost": 2,
|
|
"crit_success_chance": 0,
|
|
"crit_failure_chance": 0,
|
|
"text": {
|
|
"success": "You successfully \ud83d\udd0e search box.",
|
|
"failure": "You failed to \ud83d\udd0e search box.",
|
|
"crit_success": "",
|
|
"crit_failure": ""
|
|
},
|
|
"rewards": {
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 2,
|
|
"chance": 0.5
|
|
},
|
|
{
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 1,
|
|
"chance": 0.3
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"crit_items": [],
|
|
"crit_damage": 0
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "subway",
|
|
"name": "\ud83d\ude87 Subway Station Entrance",
|
|
"description": "Stairs descend into darkness. The entrance to an abandoned subway station yawns before you. Emergency lighting flickers somewhere below.",
|
|
"image_path": "images/locations/subway.webp",
|
|
"x": -4,
|
|
"y": -0.5,
|
|
"interactables": {
|
|
"subway_rubble": {
|
|
"outcomes": {
|
|
"search": {
|
|
"crit_failure_chance": 0.1,
|
|
"crit_success_chance": 0.15,
|
|
"rewards": {
|
|
"crit_damage": 4,
|
|
"crit_items": [
|
|
{
|
|
"chance": 0.25,
|
|
"item_id": "tools",
|
|
"quantity": 1
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 0.8,
|
|
"item_id": "scrap_metal",
|
|
"quantity": 4
|
|
},
|
|
{
|
|
"chance": 0.4,
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 1
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.55,
|
|
"text": {
|
|
"crit_failure": "Debris shifts and hits your leg! (-4 HP)",
|
|
"crit_success": "You uncover a tool buried deep!",
|
|
"failure": "Just concrete chunks.",
|
|
"success": "You sift through rubble and find scrap metal."
|
|
}
|
|
}
|
|
},
|
|
"template_id": "rubble"
|
|
},
|
|
"subway_vending": {
|
|
"outcomes": {
|
|
"break": {
|
|
"crit_failure_chance": 0.2,
|
|
"crit_success_chance": 0.1,
|
|
"rewards": {
|
|
"crit_damage": 12,
|
|
"crit_items": [
|
|
{
|
|
"chance": 0.6,
|
|
"item_id": "food",
|
|
"quantity": 2
|
|
}
|
|
],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 0.8,
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 3
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 5,
|
|
"success_rate": 0.6,
|
|
"text": {
|
|
"crit_failure": "The machine topples on you! (-12 HP)",
|
|
"crit_success": "Food packages tumble out!",
|
|
"failure": "The machine won't budge.",
|
|
"success": "You bash open the vending machine and grab bottles."
|
|
}
|
|
},
|
|
"search": {
|
|
"crit_failure_chance": 0.05,
|
|
"crit_success_chance": 0.05,
|
|
"rewards": {
|
|
"crit_damage": 0,
|
|
"crit_items": [],
|
|
"damage": 0,
|
|
"items": [
|
|
{
|
|
"chance": 0.6,
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 1
|
|
}
|
|
]
|
|
},
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.4,
|
|
"text": {
|
|
"crit_failure": "Nothing here.",
|
|
"crit_success": "A bottle still rolls out!",
|
|
"failure": "Completely empty.",
|
|
"success": "You find a bottle in the machine's slot."
|
|
}
|
|
}
|
|
},
|
|
"template_id": "vending_machine"
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "subway_tunnels",
|
|
"name": "\ud83d\ude8a Subway Tunnels",
|
|
"description": "Dark subway tunnels stretch into blackness. Flickering emergency lights cast eerie shadows. The third rail is dead, but you should still watch your step.",
|
|
"image_path": "images/locations/subway_tunnels.webp",
|
|
"x": -4.5,
|
|
"y": -1,
|
|
"interactables": {
|
|
"tunnel_rubble": {
|
|
"template_id": "rubble",
|
|
"outcomes": {
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.15,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 6,
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 3,
|
|
"chance": 0.8
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "tools",
|
|
"quantity": 1,
|
|
"chance": 0.2
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You find scrap metal in the tunnel debris.",
|
|
"failure": "Just rocks and dirt.",
|
|
"crit_success": "A maintenance tool was left behind!",
|
|
"crit_failure": "You stumble and hit the wall! (-6 HP)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "office_building",
|
|
"name": "\ud83c\udfe2 Office Building",
|
|
"description": "A five-story office building with shattered windows. The lobby is trashed, but the stairs appear intact. You can hear the wind whistling through the upper floors.",
|
|
"image_path": "images/locations/office_building.webp",
|
|
"x": 3.5,
|
|
"y": 4,
|
|
"interactables": {
|
|
"office_rubble": {
|
|
"template_id": "rubble",
|
|
"outcomes": {
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.55,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.1,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 5,
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 2,
|
|
"chance": 0.7
|
|
},
|
|
{
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 2,
|
|
"chance": 0.5
|
|
}
|
|
],
|
|
"crit_items": []
|
|
},
|
|
"text": {
|
|
"success": "You find scrap metal and cloth in the lobby debris.",
|
|
"failure": "Just broken furniture and papers.",
|
|
"crit_success": "You discover useful materials!",
|
|
"crit_failure": "Glass cuts your hand! (-5 HP)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "office_interior",
|
|
"name": "\ud83d\udcbc Office Floors",
|
|
"description": "Cubicles stretch across the floor. Papers scatter in the breeze from broken windows. Filing cabinets stand open, already ransacked. A corner office looks promising.",
|
|
"image_path": "images/locations/office_interior.webp",
|
|
"x": 4,
|
|
"y": 4.5,
|
|
"interactables": {
|
|
"office_storage": {
|
|
"template_id": "storage_box",
|
|
"outcomes": {
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.6,
|
|
"crit_success_chance": 0.15,
|
|
"crit_failure_chance": 0.05,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 0,
|
|
"items": [
|
|
{
|
|
"item_id": "cloth_scraps",
|
|
"quantity": 3,
|
|
"chance": 0.8
|
|
},
|
|
{
|
|
"item_id": "plastic_bottles",
|
|
"quantity": 1,
|
|
"chance": 0.5
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "food",
|
|
"quantity": 1,
|
|
"chance": 0.5
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You find cloth and bottles in desk drawers.",
|
|
"failure": "Everything's been picked through already.",
|
|
"crit_success": "Someone left food in their desk!",
|
|
"crit_failure": "Just old paperwork."
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
},
|
|
{
|
|
"id": "location_1760791397492",
|
|
"name": "Subway Section A",
|
|
"description": "A shady dimly lit subway section. All you can see are abandoned train tracks and some garbage lying around. ",
|
|
"image_path": "images/locations/subway_section_a.jpg",
|
|
"x": -5,
|
|
"y": -2,
|
|
"interactables": {
|
|
"subway_a_rubble": {
|
|
"template_id": "rubble",
|
|
"outcomes": {
|
|
"search": {
|
|
"stamina_cost": 2,
|
|
"success_rate": 0.5,
|
|
"crit_success_chance": 0.1,
|
|
"crit_failure_chance": 0.15,
|
|
"rewards": {
|
|
"damage": 0,
|
|
"crit_damage": 5,
|
|
"items": [
|
|
{
|
|
"item_id": "scrap_metal",
|
|
"quantity": 3,
|
|
"chance": 0.75
|
|
}
|
|
],
|
|
"crit_items": [
|
|
{
|
|
"item_id": "tools",
|
|
"quantity": 1,
|
|
"chance": 0.2
|
|
}
|
|
]
|
|
},
|
|
"text": {
|
|
"success": "You dig through the garbage and find scrap metal.",
|
|
"failure": "Just rotting trash.",
|
|
"crit_success": "A tool was discarded here!",
|
|
"crit_failure": "You step on sharp debris! (-5 HP)"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
],
|
|
"connections": [
|
|
{
|
|
"from": "start_point",
|
|
"to": "gas_station",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "start_point",
|
|
"to": "residential",
|
|
"direction": "east"
|
|
},
|
|
{
|
|
"from": "start_point",
|
|
"to": "plaza",
|
|
"direction": "west"
|
|
},
|
|
{
|
|
"from": "gas_station",
|
|
"to": "start_point",
|
|
"direction": "south"
|
|
},
|
|
{
|
|
"from": "residential",
|
|
"to": "start_point",
|
|
"direction": "west"
|
|
},
|
|
{
|
|
"from": "residential",
|
|
"to": "clinic",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "residential",
|
|
"to": "warehouse",
|
|
"direction": "southeast"
|
|
},
|
|
{
|
|
"from": "clinic",
|
|
"to": "residential",
|
|
"direction": "south"
|
|
},
|
|
{
|
|
"from": "plaza",
|
|
"to": "start_point",
|
|
"direction": "east"
|
|
},
|
|
{
|
|
"from": "plaza",
|
|
"to": "subway",
|
|
"direction": "west"
|
|
},
|
|
{
|
|
"from": "warehouse",
|
|
"to": "residential",
|
|
"direction": "northwest"
|
|
},
|
|
{
|
|
"from": "warehouse",
|
|
"to": "warehouse_interior",
|
|
"direction": "inside"
|
|
},
|
|
{
|
|
"from": "warehouse_interior",
|
|
"to": "warehouse",
|
|
"direction": "outside"
|
|
},
|
|
{
|
|
"from": "subway",
|
|
"to": "plaza",
|
|
"direction": "east"
|
|
},
|
|
{
|
|
"from": "subway",
|
|
"to": "subway_tunnels",
|
|
"direction": "down"
|
|
},
|
|
{
|
|
"from": "subway_tunnels",
|
|
"to": "subway",
|
|
"direction": "up"
|
|
},
|
|
{
|
|
"from": "office_building",
|
|
"to": "office_interior",
|
|
"direction": "inside"
|
|
},
|
|
{
|
|
"from": "office_interior",
|
|
"to": "office_building",
|
|
"direction": "outside"
|
|
},
|
|
{
|
|
"from": "location_1760789845933",
|
|
"to": "subway_tunnels",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "location_1760791397492",
|
|
"to": "subway_tunnels",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "location_1760791397492",
|
|
"to": "subway_tunnels",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "location_1760799315918",
|
|
"to": "gas_station",
|
|
"direction": "southeast"
|
|
},
|
|
{
|
|
"from": "subway_tunnels",
|
|
"to": "location_1760791397492",
|
|
"direction": "south"
|
|
},
|
|
{
|
|
"from": "park",
|
|
"to": "start_point",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "start_point",
|
|
"to": "park",
|
|
"direction": "south"
|
|
},
|
|
{
|
|
"from": "clinic",
|
|
"to": "office_building",
|
|
"direction": "northeast"
|
|
},
|
|
{
|
|
"from": "office_building",
|
|
"to": "clinic",
|
|
"direction": "southwest"
|
|
},
|
|
{
|
|
"from": "clinic",
|
|
"to": "gas_station",
|
|
"direction": "southwest"
|
|
},
|
|
{
|
|
"from": "gas_station",
|
|
"to": "clinic",
|
|
"direction": "northeast"
|
|
},
|
|
{
|
|
"from": "gas_station",
|
|
"to": "overpass",
|
|
"direction": "north"
|
|
},
|
|
{
|
|
"from": "overpass",
|
|
"to": "gas_station",
|
|
"direction": "south"
|
|
},
|
|
{
|
|
"from": "clinic",
|
|
"to": "overpass",
|
|
"direction": "northwest"
|
|
},
|
|
{
|
|
"from": "overpass",
|
|
"to": "clinic",
|
|
"direction": "southeast"
|
|
},
|
|
{
|
|
"from": "park",
|
|
"to": "warehouse",
|
|
"direction": "east"
|
|
},
|
|
{
|
|
"from": "warehouse",
|
|
"to": "park",
|
|
"direction": "west"
|
|
},
|
|
{
|
|
"from": "park",
|
|
"to": "residential",
|
|
"direction": "northeast"
|
|
},
|
|
{
|
|
"from": "residential",
|
|
"to": "park",
|
|
"direction": "southwest"
|
|
},
|
|
{
|
|
"from": "plaza",
|
|
"to": "park",
|
|
"direction": "southeast"
|
|
},
|
|
{
|
|
"from": "park",
|
|
"to": "plaza",
|
|
"direction": "northwest"
|
|
}
|
|
],
|
|
"danger_config": {
|
|
"start_point": {
|
|
"danger_level": 0,
|
|
"encounter_rate": 0,
|
|
"wandering_chance": 0
|
|
},
|
|
"gas_station": {
|
|
"danger_level": 0,
|
|
"encounter_rate": 0,
|
|
"wandering_chance": 0
|
|
},
|
|
"residential": {
|
|
"danger_level": 1,
|
|
"encounter_rate": 0.1,
|
|
"wandering_chance": 0.2
|
|
},
|
|
"park": {
|
|
"danger_level": 1,
|
|
"encounter_rate": 0.1,
|
|
"wandering_chance": 0.2
|
|
},
|
|
"clinic": {
|
|
"danger_level": 2,
|
|
"encounter_rate": 0.2,
|
|
"wandering_chance": 0.35
|
|
},
|
|
"plaza": {
|
|
"danger_level": 2,
|
|
"encounter_rate": 0.15,
|
|
"wandering_chance": 0.3
|
|
},
|
|
"warehouse": {
|
|
"danger_level": 2,
|
|
"encounter_rate": 0.18,
|
|
"wandering_chance": 0.32
|
|
},
|
|
"warehouse_interior": {
|
|
"danger_level": 2,
|
|
"encounter_rate": 0.22,
|
|
"wandering_chance": 0.4
|
|
},
|
|
"overpass": {
|
|
"danger_level": 3,
|
|
"encounter_rate": 0.3,
|
|
"wandering_chance": 0.45
|
|
},
|
|
"office_building": {
|
|
"danger_level": 3,
|
|
"encounter_rate": 0.25,
|
|
"wandering_chance": 0.4
|
|
},
|
|
"office_interior": {
|
|
"danger_level": 3,
|
|
"encounter_rate": 0.35,
|
|
"wandering_chance": 0.5
|
|
},
|
|
"subway": {
|
|
"danger_level": 4,
|
|
"encounter_rate": 0.35,
|
|
"wandering_chance": 0.5
|
|
},
|
|
"subway_tunnels": {
|
|
"danger_level": 4,
|
|
"encounter_rate": 0.45,
|
|
"wandering_chance": 0.65
|
|
}
|
|
},
|
|
"spawn_config": {
|
|
"start_point": [],
|
|
"gas_station": [],
|
|
"residential": [
|
|
{
|
|
"npc_id": "feral_dog",
|
|
"weight": 60
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 40
|
|
}
|
|
],
|
|
"park": [
|
|
{
|
|
"npc_id": "feral_dog",
|
|
"weight": 50
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 50
|
|
}
|
|
],
|
|
"clinic": [
|
|
{
|
|
"npc_id": "infected_human",
|
|
"weight": 40
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 30
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 30
|
|
}
|
|
],
|
|
"plaza": [
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 40
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 35
|
|
},
|
|
{
|
|
"npc_id": "feral_dog",
|
|
"weight": 25
|
|
}
|
|
],
|
|
"warehouse": [
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 45
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 35
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 20
|
|
}
|
|
],
|
|
"warehouse_interior": [
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 50
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 30
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 20
|
|
}
|
|
],
|
|
"overpass": [
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 50
|
|
},
|
|
{
|
|
"npc_id": "infected_human",
|
|
"weight": 30
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 20
|
|
}
|
|
],
|
|
"office_building": [
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 45
|
|
},
|
|
{
|
|
"npc_id": "infected_human",
|
|
"weight": 35
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 20
|
|
}
|
|
],
|
|
"office_interior": [
|
|
{
|
|
"npc_id": "infected_human",
|
|
"weight": 50
|
|
},
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 30
|
|
},
|
|
{
|
|
"npc_id": "scavenger",
|
|
"weight": 20
|
|
}
|
|
],
|
|
"subway": [
|
|
{
|
|
"npc_id": "infected_human",
|
|
"weight": 50
|
|
},
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 30
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 20
|
|
}
|
|
],
|
|
"subway_tunnels": [
|
|
{
|
|
"npc_id": "infected_human",
|
|
"weight": 60
|
|
},
|
|
{
|
|
"npc_id": "raider_scout",
|
|
"weight": 25
|
|
},
|
|
{
|
|
"npc_id": "mutant_rat",
|
|
"weight": 15
|
|
}
|
|
]
|
|
}
|
|
} |