Skip to content

Commit

Permalink
[Aftershock] Add the Salvor Fabricator to the Shuttlepad Camp (#79437)
Browse files Browse the repository at this point in the history
* Begin implementation of NPC

* Finish off the NPC and apply a small fix to the vehicle merchant

* Add a salvor faction

* Salvor Fabricator sells improvised weapons and armor

* Small Bugfixes

* Nerf Tool Spawns

* Remove Salvor Faction, Candlebury added a better one in a later PR

* More Item Group Nerfs in attempt to deviate the fabricator from the Gadget Trader

* Minor itemgroup fix, also Add some backstory

* Minor Fix

* Re-add Welding Gear

* Lint

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

* Add missing space, re-add welding goggles.

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
  • Loading branch information
QuillInkwell and github-actions[bot] authored Jan 31, 2025
1 parent e020f1c commit 2eaa72c
Show file tree
Hide file tree
Showing 6 changed files with 485 additions and 13 deletions.
28 changes: 21 additions & 7 deletions data/mods/Aftershock/maps/mapgen/shuttlepad_salvors.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
"‘-Ω$$$$$$Ω|‘|℗℗║~╡FoU║-℗ ¦¦-·...h..q.║║ ╡╡###╡℗",
"‘-ΩΩΩΩΩΩΩΩ|‘|ØÙ╡1╡...║║℗℗ ¦ë-·ì--ffύq©║╡╡╡ÂÃÂÂ╡╡",
" -ΩΩΩΩΩΩΩΩ|‘ω‘‘╡..qq.@# ℗ ¦1-·ìì--║║║║║╡∙Å∙∙Ñ∙Ã╡",
"‘-Ω$$$$$$Ω|‘‘‘‘╡kh,..y#℗ Χ¦···ýí4·ýïðð¦╡ÆÇ∙ÂÂ∙∙╡",
"‘-Ω$$$$$$Ω|‘‘‘‘╡kh,..y#℗ Χ¦···ýλ4·ýïðð¦╡ÆÇ∙ÂÂ∙∙╡",
"‘-ΩΩΩΩΩΩΩΩ5‘‘‘Ù╡k±««.h#℗ ¦¦¦¦ñ··ò····ð¦╡∙È∙∙Ñ∙∙╡",
" |ΩΩΩΩΩΩΩΩ|‘‘Ø2╡╡╡╡╡1╡║¦¦¦óó-¦1¦¦¦$$$¦¦╡╡╡Ã∙∙∙Ã╡",
" |ΩΩΩΩΩΩΩΩ|‘‘Ø2╡╡╡╡╡1╡║¦¦¦óó-¦5¦¦¦$$$¦¦╡╡╡Ã∙∙∙Ã╡",
" ||=====|5|‘‘‘Ù╡p.j²..#ôõö·ó-y.o-ß‘‘‘àßÙá╡╡$$$╡╡",
" |ÜÜÝÝÝÞÙΩ|‘‘‘‘$..jj±J#·ý··ó║h.U-ß‘é‘‘‘‘‘‘‘‘é‘ ‘",
"‘$ΩΩéÚϋéΩΩ1‘‘‘‘$..,...#····÷║.,k║‘╡‘‘Ù╡‘‘â╡‘‘Ù╡‘",
Expand Down Expand Up @@ -60,13 +60,25 @@
],
"palettes": [ "afs_habitat_structure", "afs_habitat_exterior", "afs_habitat_residential_furnishing" ],
"place_zones": [
{ "type": "LOOT_ITEM_GROUP", "filter": "NC_UICA_VEHICLE_MERCHANT", "faction": "UICA", "x": 9, "y": [ 13, 16 ] },
{ "type": "LOOT_ITEM_GROUP", "filter": "NC_UICA_VEHICLE_MERCHANT", "faction": "UICA", "x": 3, "y": 11 }
{ "type": "LOOT_ITEM_GROUP", "filter": "afs_vehicle_merchant", "faction": "UICA", "x": 9, "y": [ 13, 16 ] },
{ "type": "LOOT_ITEM_GROUP", "filter": "afs_vehicle_merchant", "faction": "UICA", "x": 3, "y": 11 },
{ "type": "LOOT_UNSORTED", "faction": "UICA", "x": 3, "y": 11 },
{ "type": "LOOT_ITEM_GROUP", "filter": "afs_salvor_fabricator_trade", "faction": "UICA", "x": 29, "y": 8 },
{
"type": "LOOT_ITEM_GROUP",
"filter": "afs_salvor_fabricator_trade",
"faction": "UICA",
"x": 30,
"y": [ 5, 6 ]
},
{ "type": "LOOT_ITEM_GROUP", "filter": "afs_salvor_fabricator_trade", "faction": "UICA", "x": 31, "y": 6 },
{ "type": "LOOT_UNSORTED", "faction": "UICA", "x": 31, "y": 6 }
],
"npcs": {
"ω": { "class": "uica_ground_soldier" },
"χ": { "class": "uica_ground_soldier" },
"ϋ": { "class": "uica_vehicle_merchant" }
"ϋ": { "class": "uica_vehicle_merchant" },
"λ": { "class": "salvor_fabricator" }
},
"monster": {
"ψ": { "monster": "mon_uica_tankbot" },
Expand Down Expand Up @@ -174,7 +186,8 @@
"Ψ": "t_region_groundcover_urban",
"χ": "t_metal_floor",
"ϋ": "t_strconc_floor_heated",
"υ": "t_strconc_floor_heated"
"υ": "t_strconc_floor_heated",
"λ": "t_thconc_floor_no_roof"
},
"furniture": {
"4": "f_console",
Expand Down Expand Up @@ -252,7 +265,8 @@
"Ύ": "f_rack",
"Υ": "f_rack",
"Ϋ": "f_rack",
"υ": "f_sealed_intermodal_crate"
"υ": "f_sealed_intermodal_crate",
"λ": "f_stool"
}
}
},
Expand Down
67 changes: 67 additions & 0 deletions data/mods/Aftershock/npcs/Salvor_Market/salvor_fabricator.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
[
{
"type": "npc_class",
"id": "NC_SALVOR_FABRICATOR",
"name": { "str": "salvage merchant" },
"job_description": "Salvor Fabricator",
"common": false,
"traits": [ { "group": "BG_survival_story_POLICE" }, { "group": "NPC_starting_traits" }, { "group": "Appearance_demographics" } ],
"bonus_str": { "rng": [ 2, 3 ] },
"bonus_dex": { "rng": [ 0, 2 ] },
"bonus_int": { "rng": [ -2, 0 ] },
"bonus_per": { "rng": [ 1, 3 ] },
"worn_override": "NC_SALVOR_FABRICATOR_worn",
"carry_override": "EMPTY_GROUP",
"weapon_override": "EMPTY_GROUP",
"skills": [
{ "skill": "ALL", "level": { "sum": [ { "dice": [ 3, 2 ] }, { "constant": -3 } ] } },
{ "skill": "gun", "bonus": { "rng": [ 4, 6 ] } },
{ "skill": "survival", "bonus": { "rng": [ 4, 6 ] } },
{ "skill": "fabrication", "bonus": { "rng": [ 6, 8 ] } },
{ "skill": "electronics", "bonus": { "rng": [ 4, 6 ] } },
{ "skill": "mechanics", "bonus": { "rng": [ 1, 3 ] } }
],
"shopkeeper_item_group": [ { "group": "afs_salvor_fabricator_trade", "rigid": true } ],
"shopkeeper_price_rules": [
{ "group": "afs_augustmoon_batteries_disposable", "markup": 10 },
{ "group": "afs_augustmoon_batteries_rechargeable", "markup": 20 },
{ "group": "afs_salvor_fabricator_tools", "markup": 80 },
{ "group": "afs_salvor_fabricator_scraps", "markup": 3 },
{ "group": "afs_salvor_fabricator_tools_aftershock", "markup": 3 },
{ "group": "afs_salvor_fabricator_combat_gear", "markup": 3 }
]
},
{
"type": "npc",
"id": "salvor_fabricator",
"name_unique": "Veronica Donaldson",
"name_suffix": "salvor fabricator",
"gender": "female",
"age": 62,
"height": 182,
"class": "NC_SALVOR_FABRICATOR",
"attitude": 0,
"mission": 3,
"chat": "TALK_SALVOR_FABRICATOR",
"faction": "UICA"
},
{
"type": "item_group",
"id": "NC_SALVOR_FABRICATOR_worn",
"subtype": "collection",
"ammo": 100,
"magazine": 100,
"items": [
{ "item": "afs_frontier_cryo" },
{ "item": "afs_frontier_cryomask" },
{ "item": "afs_wrist_computer" },
{ "item": "spacer_cap" },
{ "item": "carbide_cuirass" },
{ "item": "afs_herc_rig" },
{ "item": "boots_combat" },
{ "item": "gloves_tactical" },
{ "item": "spacer_jumpsuit" },
{ "item": "holster" }
]
}
]
189 changes: 189 additions & 0 deletions data/mods/Aftershock/npcs/Salvor_Market/salvor_fabricator_groups.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,189 @@
[
{
"type": "item_group",
"id": "afs_salvor_fabricator_trade",
"ammo": 100,
"magazine": 100,
"subtype": "collection",
"items": [
{ "group": "afs_salvor_fabricator_scraps" },
{ "group": "afs_salvor_fabricator_tools" },
{ "group": "afs_salvor_fabricator_combat_gear" },
{ "item": "afs_40g_plasma_civ", "count": [ 2, 5 ] },
{ "group": "afs_tools_welding_consumable", "count": [ 6, 8 ] },
{ "group": "afs_augustmoon_batteries_disposable", "count": [ 5, 10 ] },
{ "group": "afs_augustmoon_batteries_rechargeable", "count": [ 2, 3 ], "prob": 20 },
{ "group": "augustmoon_shop_money" }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_scraps",
"subtype": "collection",
"items": [
{ "group": "afs_common_biomaterial_scrapgroup", "prob": 30, "count": [ 3, 5 ] },
{ "group": "afs_common_energy_storage_scrapgroup", "prob": 70, "count": [ 5, 8 ] },
{ "group": "afs_common_heat_scrapgroup", "prob": 70, "count": [ 5, 8 ] },
{ "group": "afs_common_magnet_scrapgroup", "prob": 70, "count": [ 5, 8 ] },
{ "group": "afs_common_circuitry_scrapgroup", "prob": 90, "count": [ 6, 15 ] },
{ "group": "afs_common_material_scrapgroup", "prob": 90, "count": [ 8, 15 ] }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_tools",
"subtype": "collection",
"items": [
{ "group": "afs_salvor_fabricator_tools_general" },
{ "group": "afs_salvor_fabricator_tools_cooking" },
{ "group": "afs_salvor_fabricator_tools_electronics" },
{ "group": "afs_salvor_fabricator_tools_appliances" }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_combat_gear",
"subtype": "collection",
"items": [
{ "group": "afs_salvor_fabricator_makeshift_armor" },
{ "group": "afs_salvor_fabricator_makeshift_weapons" },
{ "group": "afs_salvor_fabricator_makeshift_ammo" },
{ "group": "afs_salvor_fabricator_makeshift_grenades" }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_makeshift_armor",
"subtype": "collection",
"items": [
{ "item": "xl_helmet_scrap", "prob": 40 },
{ "item": "helmet_scrap_xs", "prob": 40 },
{ "item": "helmet_scrap", "prob": 70 },
{ "item": "xl_cuirass_scrap", "prob": 40 },
{ "item": "xs_cuirass_scrap", "prob": 40 },
{ "item": "cuirass_scrap", "prob": 70 },
{ "item": "armguard_scrap", "prob": 70 },
{ "item": "legguard_scrap", "prob": 70 },
{ "item": "xl_boots_scrap", "prob": 40 },
{ "item": "xs_boots_scrap", "prob": 40 },
{ "item": "boots_scrap", "prob": 70 },
{ "item": "afs_titanium_vest", "prob": 30 }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_makeshift_weapons",
"subtype": "collection",
"items": [
{ "item": "laser_rifle_cheap", "prob": 60, "count": [ 1, 2 ] },
{ "item": "makeshift_scrambler", "prob": 30 },
{ "item": "afs_launcher_salvaged", "prob": 10 },
{ "item": "afs_makeshift_fusion_gun", "prob": 5 }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_makeshift_ammo",
"subtype": "collection",
"items": [ { "item": "afs_bootleg_cartridge", "prob": 60, "count": [ 1, 3 ] } ]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_makeshift_grenades",
"subtype": "collection",
"items": [
{ "item": "afs_electroshock_grenade_1", "prob": 60, "count": [ 1, 4 ] },
{ "item": "grenade_cryo", "prob": 60, "count": [ 1, 2 ] },
{ "item": "afs_oxygen_bomb", "prob": 30, "count": [ 1, 2 ] }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_tools_general",
"//": "Some general tools that aren't especially hard to find or overly useful.",
"subtype": "collection",
"items": [
{ "item": "flashlight", "prob": 80, "count": [ 1, 3 ] },
{ "item": "heavy_flashlight", "prob": 30 },
{ "item": "hammer", "prob": 80, "count": [ 1, 3 ] },
{ "item": "screwdriver", "prob": 80, "count": [ 1, 3 ] },
{ "item": "screwdriver_set", "prob": 30 },
{ "item": "wrench", "prob": 80, "count": [ 1, 3 ] },
{ "item": "cordless_impact_wrench", "prob": 30 },
{ "item": "wrench_large", "prob": 60 },
{ "item": "wrench_small", "prob": 60 },
{ "item": "socket_wrench_set", "prob": 30 },
{ "item": "multitool", "prob": 60, "count": [ 1, 3 ] },
{ "item": "xacto", "prob": 60, "count": [ 1, 3 ] },
{ "item": "utility_knife_folding", "prob": 80, "count": [ 1, 2 ] },
{ "item": "pipe_cleaner", "prob": 30 },
{ "item": "angle_grinder", "prob": 20 },
{ "item": "crash_axe", "prob": 20 },
{ "item": "crowbar", "prob": 20 },
{ "item": "geiger_off", "prob": 20 },
{ "item": "small_repairkit", "prob": 10 },
{ "item": "hacksaw", "prob": 10 },
{ "item": "chisel", "prob": 5 },
{ "item": "hammer_sledge", "prob": 20 },
{ "item": "hammer_sledge_short", "prob": 20 },
{ "item": "e_tool", "prob": 10 },
{ "item": "afs_plasma_torch", "prob": 40 },
{ "item": "goggles_welding", "prob": 40, "count": [ 1, 2 ] }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_tools_cooking",
"//": "Some tools to assist in cooking while out and about. She makes a point of keeping these sorts of things available.",
"subtype": "collection",
"items": [
{ "item": "hotplate", "prob": 80, "count": [ 1, 3 ] },
{ "item": "pot", "prob": 80, "count": [ 1, 3 ] },
{ "item": "steel_pan", "prob": 80, "count": [ 1, 3 ] },
{ "item": "military_mess_kit", "prob": 30 },
{ "item": "multi_cooker", "prob": 40 }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_tools_electronics",
"//": "Tools for crafting and maintaining electronics. Less available in general since their usefulness in the field is limited.",
"subtype": "collection",
"items": [
{ "item": "soldering_iron", "prob": 20, "count": [ 1, 2 ] },
{ "item": "soldering_iron_portable", "prob": 10, "count": [ 1, 2 ] },
{ "item": "multimeter", "prob": 20 },
{ "item": "voltmeter", "prob": 20 },
{ "item": "solder_wire", "prob": 50, "count": [ 1, 4 ] }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_tools_appliances",
"//": "Appliances to setting up a small little outpost. She stocks these decently well for Salvors lacking the skill to fabricate them on their own.",
"subtype": "collection",
"items": [
{ "item": "afs_battery_charger", "prob": 60, "count": [ 1, 3 ] },
{ "item": "afs_survival_heater", "prob": 40 },
{ "item": "afs_tripod_light", "prob": 80, "count": [ 3, 8 ] },
{ "item": "afs_survival_battery", "prob": 40, "count": [ 1, 2 ] },
{ "item": "foot_locker_recharge_station", "prob": 30, "count": [ 1, 2 ] },
{ "item": "cot", "prob": 80, "count": [ 1, 3 ] },
{ "item": "rollmat", "prob": 80, "count": [ 1, 3 ] }
]
},
{
"type": "item_group",
"id": "afs_salvor_fabricator_tools_aftershock",
"//": "Just a group for all aftershock tools she sells, prevents her marking them up to oblivion.",
"items": [
{ "item": "afs_battery_charger" },
{ "item": "afs_survival_heater" },
{ "item": "afs_tripod_light" },
{ "item": "afs_survival_battery" },
{ "item": "multi_cooker" },
{ "item": "afs_40g_plasma_civ" },
{ "item": "afs_plasma_torch" }
]
}
]
Loading

0 comments on commit 2eaa72c

Please sign in to comment.