diff --git a/code/datums/outfits/outfit_admin.dm b/code/datums/outfits/outfit_admin.dm index 0f650e2bd0d..5dcf5d0b247 100644 --- a/code/datums/outfits/outfit_admin.dm +++ b/code/datums/outfits/outfit_admin.dm @@ -708,7 +708,8 @@ id = /obj/item/card/id/supply pda = /obj/item/pda backpack_contents = list( - /obj/item/storage/box/survival = 1 + /obj/item/storage/box/survival = 1, + /obj/item/hand_labeler = 1 ) /datum/outfit/admin/sol_trader/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 51fc6ed8030..a50d3efac6a 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -724,51 +724,18 @@ var/list/potential_theft_objectives = subtypesof(/datum/theft_objective) - /datu if(vox_total_kills > vox_allowed_kills) return 0 return 1 -// Traders -/datum/objective/trade // Yes, I know there's no check_completion. The objectives exist only to tell the traders what to get. -/datum/objective/trade/proc/choose_target(var/station) +// Traders +// These objectives have no check_completion, they exist only to tell Sol Traders what to aim for. + +/datum/objective/trade/proc/choose_target() return -/datum/objective/trade/stock // Stock or spare parts. - var/target_rating = 1 -/datum/objective/trade/stock/choose_target(var/station) - var/itemname - switch(rand(1,8)) - if(1) - target = /obj/item/stock_parts/cell - target_amount = 10 - target_rating = 3 - itemname = "ten high-capacity power cells" - if(2) - target = /obj/item/stock_parts/manipulator - target_amount = 20 - itemname = "twenty micro manipulators" - if(3) - target = /obj/item/stock_parts/matter_bin - target_amount = 20 - itemname = "twenty matter bins" - if(4) - target = /obj/item/stock_parts/micro_laser - target_amount = 15 - itemname = "fifteen micro-lasers" - if(5) - target = /obj/item/stock_parts/capacitor - target_amount = 15 - itemname = "fifteen capacitors" - if(6) - target = /obj/item/stock_parts/subspace/filter - target_amount = 4 - itemname = "four hyperwave filters" - if(7) - target = /obj/item/solar_assembly - target_amount = 10 - itemname = "ten solar panel assemblies" - if(8) - target = /obj/item/flash - target_amount = 6 - itemname = "six flashes" - explanation_text = "We are running low on spare parts. Trade for [itemname]." +/datum/objective/trade/plasma/choose_target() + explanation_text = "Acquire at least 15 sheets of plasma through trade." + +/datum/objective/trade/credits/choose_target() + explanation_text = "Acquire at least 10,000 credits through trade." //wizard diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index ce9becd5a6e..057c52a2a4c 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -189,26 +189,25 @@ /obj/item/soap/syndie = 50, /obj/item/lighter/zippo/gonzofist = 50, /obj/item/stack/nanopaste = 50, - /obj/item/clothing/under/psyjump = 50 + /obj/item/clothing/under/psyjump = 50, + /obj/item/immortality_talisman = 50, + /obj/item/grenade/clusterbuster/smoke = 50 ) - /obj/effect/spawner/lootdrop/trade_sol/minerals name = "2. minerals" lootdoubles = 1 loot = list( // Common stuff you get from mining which isn't already present on the station + // Note that plasma and derived hybrid materials are NOT included in this list because plasma is the trader's objective! /obj/item/stack/sheet/mineral/silver = 50, /obj/item/stack/sheet/mineral/gold = 50, - /obj/item/stack/sheet/mineral/plasma = 50, /obj/item/stack/sheet/mineral/uranium = 50, /obj/item/stack/sheet/mineral/diamond = 50, /obj/item/stack/sheet/mineral/titanium = 50, /obj/item/stack/sheet/plasteel = 50, // Hybrid stuff you could in theory get from mining - /obj/item/stack/sheet/plasmaglass = 50, - /obj/item/stack/sheet/plasmarglass = 50, /obj/item/stack/sheet/titaniumglass = 50, // Rare stuff you can't get from mining @@ -216,8 +215,7 @@ /obj/item/stack/sheet/mineral/bananium = 50, /obj/item/stack/sheet/wood = 50, /obj/item/stack/sheet/plastic = 50, - /obj/item/stack/sheet/mineral/sandstone = 50, - + /obj/item/stack/sheet/mineral/sandstone = 50 ) /obj/effect/spawner/lootdrop/trade_sol/minerals/New() @@ -244,7 +242,7 @@ /obj/item/gun/projectile/automatic/toy/pistol/enforcer = 50, /obj/item/gun/projectile/shotgun/toy = 50, /obj/item/gun/projectile/shotgun/toy/crossbow = 50, - /obj/item/gun/projectile/shotgun/toy/tommygun = 50, + /obj/item/gun/projectile/shotgun/toy/tommygun = 50 ) @@ -259,13 +257,11 @@ /obj/item/autoimplanter = 50, // Research / Experimentor - /obj/item/relic = 150, // strange object /obj/item/paper/researchnotes = 150, // papers that give random R&D levels // Xenobio /obj/item/slimepotion/sentience = 50, // Low-value, but we want to encourage getting more players back in the round. - /obj/item/slimepotion/transference = 50, - /obj/item/slimepotion/speed = 50, + /obj/item/slimepotion/transference = 50 ) /obj/effect/spawner/lootdrop/trade_sol/med @@ -279,16 +275,16 @@ // Surgery /obj/item/scalpel/laser/manager = 100, /obj/item/organ/internal/heart/gland/ventcrawling = 50, + /obj/item/organ/internal/heart/gland/heals = 50, // Genetics Research (should really be under science, but I was stuck for items to put in medical) /obj/item/dnainjector/regenerate = 50, // regeneration /obj/item/dnainjector/nobreath = 50, - /obj/item/dnainjector/midgit = 50, /obj/item/dnainjector/telemut = 50, // Virology /obj/item/reagent_containers/glass/bottle/regeneration = 50, - /obj/item/reagent_containers/glass/bottle/sensory_restoration = 50, + /obj/item/reagent_containers/glass/bottle/sensory_restoration = 50 ) /obj/effect/spawner/lootdrop/trade_sol/sec @@ -301,17 +297,31 @@ // Utility /obj/item/storage/belt/military/assault = 50, /obj/item/clothing/mask/gas/sechailer/swat = 50, + /obj/item/clothing/glasses/thermal = 50, // see heat-source mobs through walls. Less powerful than already-available xray. // Ranged weapons + /obj/item/storage/box/enforcer_rubber = 50, + /obj/item/storage/box/enforcer_lethal = 50, /obj/item/gun/projectile/shotgun/automatic/combat = 50, // combat shotgun, between riot and bulldog in robustness. Not illegal, can be obtained from cargo. + /obj/item/gun/projectile/shotgun/automatic/dual_tube = 50, // cycler shotgun, not normally available to crew + + // Cluster grenades + /obj/item/grenade/clusterbuster = 50, // cluster flashbang + /obj/item/grenade/clusterbuster/teargas = 50 ) /obj/effect/spawner/lootdrop/trade_sol/eng name = "7. eng gear" - lootcount = 3 loot = list( /obj/item/storage/belt/utility/chief/full = 25, /obj/item/rcd/combat = 25, + /obj/item/rpd/bluespace = 25, + /obj/item/tank/emergency_oxygen/double/full = 25, + /obj/item/slimepotion/speed = 25, + /obj/item/storage/backpack/holding = 25, + /obj/item/clothing/glasses/meson/night = 25, // NV mesons + /obj/item/clothing/glasses/material = 25, // shows objects, but not mobs, through walls + /obj/item/grenade/clusterbuster/metalfoam = 25 // cluster metal foam grenade ) /obj/effect/spawner/lootdrop/trade_sol/largeitem @@ -319,7 +329,7 @@ lootcount = 1 loot = list( /obj/machinery/disco = 20, - /obj/mecha/combat/durand/old = 20, + /obj/mecha/combat/durand/old = 20 ) /obj/effect/spawner/lootdrop/trade_sol/vehicle @@ -348,18 +358,22 @@ // Mining /obj/item/mining_voucher = 100, /obj/item/pickaxe/drill/jackhammer = 100, - /obj/item/stack/sheet/animalhide/goliath_hide = 100, /obj/item/gun/energy/kinetic_accelerator/experimental = 100, + /obj/item/borg/upgrade/modkit/aoe/turfs/andmobs = 100, // Botanist /obj/item/seeds/random/labelled = 100, // Clown - /obj/item/grenade/bananade = 100, + /obj/item/grenade/clusterbuster/honk = 100, /obj/item/bikehorn/golden = 100, + // Bartender + /obj/item/storage/box/bartender_rare_ingredients_kit = 100, - // It would be nice to also have items for other service jobs: Bartender, Mime, Chef, Librarian, Chaplain, etc + // Chef + /obj/item/storage/box/chef_rare_ingredients_kit = 100 + // It would be nice to also have items for other service jobs: Mime, Librarian, Chaplain, etc ) diff --git a/code/game/objects/items/weapons/grenades/clusterbuster.dm b/code/game/objects/items/weapons/grenades/clusterbuster.dm index 46cc71f257d..09822143a34 100644 --- a/code/game/objects/items/weapons/grenades/clusterbuster.dm +++ b/code/game/objects/items/weapons/grenades/clusterbuster.dm @@ -104,7 +104,7 @@ payload = /obj/item/grenade/chem_grenade/cleaner /obj/item/grenade/clusterbuster/teargas - name = "Oignon Grenade" + name = "Oignon Teargas Grenade" payload = /obj/item/grenade/chem_grenade/teargas /obj/item/grenade/clusterbuster/facid diff --git a/code/game/objects/items/weapons/storage/boxes.dm b/code/game/objects/items/weapons/storage/boxes.dm index d8d748efb99..1ca94de01dc 100644 --- a/code/game/objects/items/weapons/storage/boxes.dm +++ b/code/game/objects/items/weapons/storage/boxes.dm @@ -680,6 +680,56 @@ new /obj/item/clothing/head/syndicatefake(src) new /obj/item/clothing/suit/syndicatefake(src) +/obj/item/storage/box/enforcer_rubber + name = "enforcer pistol kit (rubber)" + desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'NON-LETHAL'." + icon_state = "box_ert" + +/obj/item/storage/box/enforcer_rubber/New() + ..() + new /obj/item/gun/projectile/automatic/pistol/enforcer(src) // loaded with rubber by default + new /obj/item/ammo_box/magazine/enforcer(src) + new /obj/item/ammo_box/magazine/enforcer(src) + +/obj/item/storage/box/enforcer_lethal + name = "enforcer pistol kit (lethal)" + desc = "A box marked with pictures of an enforcer pistol, two ammo clips, and the word 'LETHAL'." + icon_state = "box_ert" + +/obj/item/storage/box/enforcer_lethal/New() + ..() + new /obj/item/gun/projectile/automatic/pistol/enforcer/lethal(src) + new /obj/item/ammo_box/magazine/enforcer/lethal(src) + new /obj/item/ammo_box/magazine/enforcer/lethal(src) + +/obj/item/storage/box/bartender_rare_ingredients_kit + name = "bartender rare reagents kit" + desc = "A box intended for experienced bartenders." + +/obj/item/storage/box/bartender_rare_ingredients_kit/New() + ..() + var/list/reagent_list = list("sacid", "radium", "ether", "methamphetamine", "plasma", "gold", "silver", "capsaicin", "psilocybin") + for(var/reag in reagent_list) + var/obj/item/reagent_containers/glass/bottle/B = new(src) + B.reagents.add_reagent(reag, 30) + B.name = "[reag] bottle" + +/obj/item/storage/box/chef_rare_ingredients_kit + name = "chef rare reagents kit" + desc = "A box intended for experienced chefs." + +/obj/item/storage/box/chef_rare_ingredients_kit/New() + ..() + new /obj/item/reagent_containers/food/condiment/soysauce(src) + new /obj/item/reagent_containers/food/condiment/enzyme(src) + new /obj/item/reagent_containers/food/condiment/pack/hotsauce(src) + new /obj/item/kitchen/knife/butcher(src) + var/list/reagent_list = list("msg", "triple_citrus", "salglu_solution", "nutriment", "gravy", "honey", "vitfro") + for(var/reag in reagent_list) + var/obj/item/reagent_containers/glass/bottle/B = new(src) + B.reagents.add_reagent(reag, 30) + B.name = "[reag] bottle" + /obj/item/storage/box/mousetraps name = "box of Pest-B-Gon mousetraps" desc = "WARNING: Keep out of reach of children." diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm index abe41483bc6..6cc12faf1b4 100644 --- a/code/modules/events/event_container.dm +++ b/code/modules/events/event_container.dm @@ -194,7 +194,7 @@ var/list/event_last_fired = list() new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, 0, list(ASSIGNMENT_ENGINEER = 5), 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Abductor Visit", /datum/event/abductor, 80, is_one_shot = 1), new /datum/event_meta/alien(EVENT_LEVEL_MAJOR, "Alien Infestation", /datum/event/alien_infestation, 0, list(ASSIGNMENT_SECURITY = 15), 1), - new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 0, is_one_shot = 1), + new /datum/event_meta(EVENT_LEVEL_MAJOR, "Traders", /datum/event/traders, 180, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Terror Spiders", /datum/event/spider_terror, 0, list(ASSIGNMENT_SECURITY = 15), is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Slaughter Demon", /datum/event/spawn_slaughter, 15, is_one_shot = 1), new /datum/event_meta(EVENT_LEVEL_MAJOR, "Floor Cluwne", /datum/event/spawn_floor_cluwne, 15, is_one_shot = 1) diff --git a/code/modules/events/traders.dm b/code/modules/events/traders.dm index 2d198200422..2b49bd51bfc 100644 --- a/code/modules/events/traders.dm +++ b/code/modules/events/traders.dm @@ -6,7 +6,7 @@ var/global/list/unused_trade_stations = list("sol") /datum/event/traders var/success_spawn = 0 var/station = null - var/spawn_count = 3 + var/spawn_count = 2 var/list/trader_objectives = list() /datum/event/traders/setup() @@ -16,6 +16,10 @@ var/global/list/unused_trade_stations = list("sol") /datum/event/traders/start() if(!station) // If there are no unused stations, just no. return + if(seclevel2num(get_security_level()) >= SEC_LEVEL_RED) + event_announcement.Announce("A trading shuttle from Jupiter Station has been denied docking permission due to the heightened security alert aboard [station_name()].", "Trader Shuttle Docking Request Refused") + return + var/list/spawnlocs = list() for(var/obj/effect/landmark/landmark in GLOB.landmarks_list) if(landmark.name == "traderstart_[station]") @@ -35,6 +39,7 @@ var/global/list/unused_trade_stations = list("sol") var/turf/picked_loc = spawnlocs[index] index++ var/mob/C = pick_n_take(candidates) + spawn_count-- if(C) GLOB.respawnable_list -= C.client var/mob/living/carbon/human/M = new /mob/living/carbon/human(picked_loc) @@ -44,7 +49,9 @@ var/global/list/unused_trade_stations = list("sol") M.mind.objectives += trader_objectives greet_trader(M) success_spawn = 1 - if(!success_spawn) + if(success_spawn) + event_announcement.Announce("A trading shuttle from Jupiter Station has been granted docking permission at [station_name()] arrivals port 4.", "Trader Shuttle Docking Request Accepted") + else unused_trade_stations += station // Return the station to the list of usable stations. /datum/event/traders/proc/greet_trader(var/mob/living/carbon/human/M) @@ -55,17 +62,14 @@ var/global/list/unused_trade_stations = list("sol") show_objectives(M.mind) /datum/event/traders/proc/forge_trader_objectives() - var/i = 1 - var/max_objectives = pick(2, 2, 2, 2, 3, 3, 3, 4) var/list/objs = list() - var/list/goals = list("stockparts") - while(i<= max_objectives) - var/goal = pick(goals) - var/datum/objective/trade/O - if(goal == "stockparts") - O = new /datum/objective/trade/stock(station) - O.choose_target() - objs += O - i++ + var/datum/objective/trade/plasma/P = new /datum/objective/trade/plasma + P.choose_target() + objs += P + + var/datum/objective/trade/credits/C = new /datum/objective/trade/credits + C.choose_target() + objs += C + return objs diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 89eab0ca882..f4500c7ce6d 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -221,7 +221,7 @@ multiple_sprites = 1 /obj/item/ammo_box/magazine/enforcer - name = "handgun magazine (9mm)" + name = "handgun magazine (9mm rubber)" icon_state = "enforcer" ammo_type = /obj/item/ammo_casing/rubber9mm max_ammo = 8 @@ -250,6 +250,7 @@ return 0 /obj/item/ammo_box/magazine/enforcer/lethal + name = "handgun magazine (9mm)" ammo_type = /obj/item/ammo_casing/c9mm /obj/item/ammo_box/magazine/wt550m9 diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 18eb7a6c17e..89acad55c7c 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -142,11 +142,10 @@ /obj/item/gun/energy/kinetic_accelerator/experimental name = "experimental kinetic accelerator" - desc = "A modified, far more dangerous version of the proto-kinetic accelerator, with half the cooldown and twice the modkit space of the standard version." + desc = "A modified version of the proto-kinetic accelerator, with twice the modkit space of the standard version." icon_state = "kineticgun_h" item_state = "kineticgun_h" origin_tech = "combat=5;powerstorage=3;engineering=5" - overheat_time = 8 max_mod_capacity = 200 //Casing