module things, jfc

This commit is contained in:
Poojawa
2018-09-11 07:51:01 -05:00
parent 8b9ef1e400
commit 284e9d0325
695 changed files with 11343 additions and 5661 deletions
+10 -63
View File
@@ -13,7 +13,7 @@
/datum/bounty/item/assistant/skateboard
name = "Skateboard"
description = "Nanotrasen has determined walking to be a wasteful. Ship a skateboard to CentCom to speed operations up."
description = "Nanotrasen has determined walking to be wasteful. Ship a skateboard to CentCom to speed operations up."
reward = 900 // the tony hawk
wanted_types = list(/obj/vehicle/ridden/scooter/skateboard)
@@ -95,7 +95,7 @@
description = "Central Command will be holding a business convention this year. Ship a few briefcases in support."
reward = 2500
required_count = 5
wanted_types = list(/obj/item/storage/briefcase)
wanted_types = list(/obj/item/storage/briefcase, /obj/item/storage/secure/briefcase)
/datum/bounty/item/assistant/sunglasses
name = "Sunglasses"
@@ -104,43 +104,12 @@
required_count = 2
wanted_types = list(/obj/item/clothing/glasses/sunglasses)
/datum/bounty/item/assistant/gondola_hide
name = "Gondola Hide"
description = "Central Command has recently learned of strange creatures called Gondolas. If you catch one, ship its hide back to CentCom."
reward = 5000
wanted_types = list(/obj/item/stack/sheet/animalhide/gondola)
/datum/bounty/item/assistant/monkey_hide
name = "Monkey Hide"
description = "One of the scientists at CentCom is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it."
reward = 1500
wanted_types = list(/obj/item/stack/sheet/animalhide/monkey)
/datum/bounty/item/assistant/heart
name = "Heart"
description = "Commander Johnson is in critical condition after suffering a heart attack. Doctors say he needs a new heart fast. Ship one, pronto!"
reward = 3000
wanted_types = list(/obj/item/organ/heart)
/datum/bounty/item/assistant/lung
name = "Lungs"
description = "A recent explosion at Central Command has left multiple staff with punctured lungs. Ship spare lungs to be rewarded."
reward = 3000
required_count = 1
wanted_types = list(/obj/item/organ/lungs)
/datum/bounty/item/assistant/appendix
name = "Appendix"
description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay."
reward = 3000
wanted_types = list(/obj/item/organ/appendix)
/datum/bounty/item/assistant/lizard_tail
name = "Lizard Tail"
description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?"
reward = 3000
wanted_types = list(/obj/item/organ/tail/lizard)
/datum/bounty/item/assistant/shard
name = "Shards"
description = "A killer clown has been stalking CentCom, and staff have been unable to catch her because she's not wearing shoes. Please ship some shards so that a booby trap can be constructed."
@@ -150,23 +119,11 @@
/datum/bounty/item/assistant/comfy_chair
name = "Comfy Chairs"
description = "Commander Pat is unhappy with his chair. He claims it hurts his back. Ship some alternatives out to humor him. "
description = "Commander Pat is unhappy with his chair. He claims it hurts his back. Ship some alternatives out to humor him."
reward = 1500
required_count = 5
wanted_types = list(/obj/structure/chair/comfy)
/datum/bounty/item/assistant/revolver
name = "Revolver"
description = "Captain Johann of station 12 has challenged Captain Vic of station 11 to a duel. He's asked for help securing an appropriate revolver to use."
reward = 2000
wanted_types = list(/obj/item/gun/ballistic/revolver)
/datum/bounty/item/assistant/hand_tele
name = "Hand Tele"
description = "Central Command has come up with a genius idea: Why not teleport cargo rather than ship it? Send over a hand tele, receive payment, then wait 6-8 years while they deliberate."
reward = 2000
wanted_types = list(/obj/item/hand_tele)
/datum/bounty/item/assistant/geranium
name = "Geraniums"
description = "Commander Zot has the hots for Commander Zena. Send a shipment of geraniums - her favorite flower - and he'll happily reward you."
@@ -230,7 +187,7 @@
/datum/bounty/item/assistant/bonfire
name = "Lit Bonfire"
description = "Space heaters are malfunctioning and the cargo crew of Central Command is starting to feel cold. Ship a lit bonfire to warm them up."
description = "Space heaters are malfunctioning and the cargo crew of Central Command is starting to feel cold. Ship a lit bonfire to warm them up."
reward = 5000
wanted_types = list(/obj/structure/bonfire)
@@ -240,31 +197,21 @@
var/obj/structure/bonfire/B = O
return !!B.burning
/datum/bounty/item/assistant/plasma_tank
name = "Full Tank of Plasma"
description = "Station 12 has requested supplies to set up a singularity engine. In particular, they request 28 moles of plasma."
reward = 2500
wanted_types = list(/obj/item/tank)
var/moles_required = 20 // A full tank is 28 moles, but CentCom ignores that fact.
/datum/bounty/item/assistant/plasma_tank/applies_to(obj/O)
if(!..())
return FALSE
var/obj/item/tank/T = O
if(!T.air_contents.gases[/datum/gas/plasma])
return FALSE
return T.air_contents.gases[/datum/gas/plasma][MOLES] >= moles_required
/datum/bounty/item/assistant/corgimeat
name = "Raw Corgi Meat"
description = "The Syndicate recently stole all of CentCom's corgi meat. Ship out a replacement immediately."
reward = 3000
wanted_types = list(/obj/item/reagent_containers/food/snacks/meat/slab/corgi)
/datum/bounty/item/chef/action_figures
/datum/bounty/item/assistant/action_figures
name = "Action Figures"
description = "The vice president's son saw an ad for action figures on the telescreen and now he won't shut up about them. Ship some to ease his complaints."
reward = 4000
required_count = 5
wanted_types = list(/obj/item/toy/figure)
/datum/bounty/item/assistant/tail_whip
name = "Nine Tails whip"
description = "Commander Jackson is looking for a fine addition to her exotic weapons collection. She will reward you handsomely for either a Cat or Liz o' Nine Tails."
reward = 4000
wanted_types = list(/obj/item/melee/chainofcommand/tailwhip)
+194
View File
@@ -0,0 +1,194 @@
/datum/bounty/item/botany
reward = 5000
var/datum/bounty/item/botany/multiplier = 0 //adds bonus reward money; increased for higher tier or rare mutations
var/datum/bounty/item/botany/bonus_desc //for adding extra flavor text to bounty descriptions
var/datum/bounty/item/botany/foodtype = "meal" //same here
/datum/bounty/item/botany/New()
..()
description = "Central Command's head chef is looking to prepare a fine [foodtype] with [name]. [bonus_desc]"
reward += multiplier * 1000
required_count = rand(5, 10)
/datum/bounty/item/botany/ambrosia_vulgaris
name = "Ambrosia Vulgaris Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/vulgaris)
foodtype = "stew"
/datum/bounty/item/botany/ambrosia_gaia
name = "Ambrosia Gaia Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ambrosia/gaia)
multiplier = 4
foodtype = "stew"
/datum/bounty/item/botany/apple_golden
name = "Golden Apples"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/apple/gold)
multiplier = 4
foodtype = "dessert"
/datum/bounty/item/botany/banana
name = "Bananas"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/banana)
exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/banana/bluespace)
foodtype = "banana split"
/datum/bounty/item/botany/banana_bluespace
name = "Bluespace Bananas"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/banana/bluespace)
multiplier = 2
foodtype = "banana split"
/datum/bounty/item/botany/beans_koi
name = "Koi Beans"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/koibeans)
multiplier = 2
/datum/bounty/item/botany/berries_death
name = "Death Berries"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/berries/death)
multiplier = 2
bonus_desc = "He insists that \"he knows what he's doing\"."
foodtype = "sorbet"
/datum/bounty/item/botany/berries_glow
name = "Glow-Berries"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/berries/glow)
multiplier = 2
foodtype = "sorbet"
/datum/bounty/item/botany/cannabis
name = "Cannabis Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis)
exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/white, /obj/item/reagent_containers/food/snacks/grown/cannabis/death, /obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate)
multiplier = 4 //hush money
bonus_desc = "Do not mention this shipment to security."
foodtype = "\"meal\""
/datum/bounty/item/botany/cannabis_white
name = "Lifeweed Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/white)
multiplier = 6
bonus_desc = "Do not mention this shipment to security."
foodtype = "\"meal\""
/datum/bounty/item/botany/cannabis_death
name = "Deathweed Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/death)
multiplier = 6
bonus_desc = "Do not mention this shipment to security."
foodtype = "\"meal\""
/datum/bounty/item/botany/cannabis_ultimate
name = "Omega Weed Leaves"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/cannabis/ultimate)
multiplier = 6
bonus_desc = "Under no circumstances mention this shipment to security."
foodtype = "\"meal\""
/datum/bounty/item/botany/wheat
name = "Wheat Grains"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/wheat)
/datum/bounty/item/botany/rice
name = "Rice Grains"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/rice)
/datum/bounty/item/botany/chili
name = "Chili Peppers"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/chili)
/datum/bounty/item/botany/chili
name = "Ice Chili Peppers"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/icepepper)
multiplier = 2
/datum/bounty/item/botany/chili
name = "Ghost Chili Peppers"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/ghost_chili)
multiplier = 2
/datum/bounty/item/botany/citrus_lime
name = "Limes"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lime)
foodtype = "sorbet"
/datum/bounty/item/botany/citrus_lemon
name = "Lemons"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lemon)
foodtype = "sorbet"
/datum/bounty/item/botany/citrus_oranges
name = "Oranges"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/citrus/orange)
bonus_desc = "Do not ship lemons or limes." //I vanted orahnge!
foodtype = "sorbet"
/datum/bounty/item/botany/eggplant
name = "Eggplants"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/eggplant)
bonus_desc = "Not to be confused with egg-plants."
/datum/bounty/item/botany/eggplant_eggy
name = "Egg-plants"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/shell/eggy)
bonus_desc = "Not to be confused with eggplants."
multiplier = 2
/datum/bounty/item/botany/kudzu
name = "Kudzu Pods"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/kudzupod)
bonus_desc = "Store in a dry, dark place."
multiplier = 4
/datum/bounty/item/botany/watermelon
name = "Watermelons"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/watermelon)
foodtype = "dessert"
/datum/bounty/item/botany/watermelon_holy
name = "Holy Melons"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/holymelon)
multiplier = 2
foodtype = "dessert"
/datum/bounty/item/botany/glowshroom
name = "Glowshrooms"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom)
exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap, /obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom)
foodtype = "omelet"
/datum/bounty/item/botany/glowshroom_cap
name = "Glowcaps"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/glowcap)
multiplier = 2
foodtype = "omelet"
/datum/bounty/item/botany/glowshroom_shadow
name = "Shadowshrooms"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/mushroom/glowshroom/shadowshroom)
multiplier = 2
foodtype = "omelet"
/datum/bounty/item/botany/nettles_death
name = "Death Nettles"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/nettle/death)
multiplier = 2
bonus_desc = "Wear protection when handling them."
foodtype = "cheese"
/datum/bounty/item/botany/pineapples
name = "Pineapples"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/pineapple)
bonus_desc = "Not for human consumption."
foodtype = "ashtray"
/datum/bounty/item/botany/tomato
name = "Tomatoes"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato)
exclude_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blue)
/datum/bounty/item/botany/tomato_bluespace
name = "Bluespace Tomatoes"
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/tomato/blue/bluespace)
multiplier = 4
-7
View File
@@ -82,13 +82,6 @@
reward = 8000
wanted_types = list(/obj/item/reagent_containers/food/snacks/hotdog)
/datum/bounty/item/chef/lemon
name = "Lemons"
description = "A commander claims he can turn lemons into money. Ship him a few and he'll deposit the money into the station's account."
reward = 4444
required_count = 10
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown/citrus/lemon)
/datum/bounty/item/chef/eggplantparm
name = "Eggplant Parmigianas"
description = "A famous singer will be arriving at CentCom, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!"
@@ -0,0 +1,31 @@
/datum/bounty/item/engineering/gas
name = "Full Tank of Pluoxium"
description = "CentCom RnD is researching extra compact internals. Ship us a tank full of Pluoxium and you'll be compensated."
reward = 7500
wanted_types = list(/obj/item/tank)
var/moles_required = 20 // A full tank is 28 moles, but CentCom ignores that fact.
var/gas_type = /datum/gas/pluoxium
/datum/bounty/item/engineering/gas/applies_to(obj/O)
if(!..())
return FALSE
var/obj/item/tank/T = O
if(!T.air_contents.gases[gas_type])
return FALSE
return T.air_contents.gases[gas_type][MOLES] >= moles_required
/datum/bounty/item/engineering/gas/nitryl_tank
name = "Full Tank of Nitryl"
description = "The non-human staff of Station 88 has been volunteered to test performance enhancing drugs. Ship them a tank full of Nitryl so they can get started."
gas_type = /datum/gas/nitryl
/datum/bounty/item/engineering/gas/tritium_tank
name = "Full Tank of Tritium"
description = "Station 49 is looking to kickstart their research program. Ship them a tank full of Tritium."
gas_type = /datum/gas/tritium
/datum/bounty/item/engineering/energy_ball
name = "Contained Tesla Ball"
description = "Station 24 is being overrun by hordes of angry Mothpeople. They are requesting the ultimate bug zapper."
reward = 75000 //requires 14k credits of purchases, not to mention cooperation with engineering/heads of staff to set up inside the cramped shuttle
wanted_types = list(/obj/singularity/energy_ball)
+6 -1
View File
@@ -17,6 +17,12 @@
name = "APLU \"Ripley\""
reward = 13000
wanted_types = list(/obj/mecha/working/ripley)
exclude_types = list(/obj/mecha/working/ripley/firefighter)
/datum/bounty/item/mech/firefighter
name = "APLU \"Firefighter\""
reward = 18000
wanted_types = list(/obj/mecha/working/ripley/firefighter)
/datum/bounty/item/mech/odysseus
name = "Odysseus"
@@ -37,4 +43,3 @@
name = "Phazon"
reward = 50000
wanted_types = list(/obj/mecha/combat/phazon)
+59
View File
@@ -0,0 +1,59 @@
/datum/bounty/item/medical/heart
name = "Heart"
description = "Commander Johnson is in critical condition after suffering yet another heart attack. Doctors say he needs a new heart fast. Ship one, pronto!"
reward = 3000
wanted_types = list(/obj/item/organ/heart)
/datum/bounty/item/medical/lung
name = "Lungs"
description = "A recent explosion at Central Command has left multiple staff with punctured lungs. Ship spare lungs to be rewarded."
reward = 10000
required_count = 3
wanted_types = list(/obj/item/organ/lungs)
/datum/bounty/item/medical/appendix
name = "Appendix"
description = "Chef Gibb of Central Command wants to prepare a meal using a very special delicacy: an appendix. If you ship one, he'll pay."
reward = 5000 //there are no synthetic appendixes
wanted_types = list(/obj/item/organ/appendix)
/datum/bounty/item/medical/ears
name = "Ears"
description = "Multiple staff at Station 12 have been left deaf due to unauthorized clowning. Ship them new ears."
reward = 10000
required_count = 3
wanted_types = list(/obj/item/organ/ears)
/datum/bounty/item/medical/liver
name = "Livers"
description = "Multiple high-ranking CentCom diplomats have been hospitalized with liver failure after a recent meeting with Third Soviet Union ambassadors. Help us out, will you?"
reward = 10000
required_count = 3
wanted_types = list(/obj/item/organ/liver)
/datum/bounty/item/medical/eye
name = "Organic Eyes"
description = "Station 5's Research Director Willem is requesting a few pairs of non-robotic eyes. Don't ask questions, just ship them."
reward = 10000
required_count = 3
wanted_types = list(/obj/item/organ/eyes)
exclude_types = list(/obj/item/organ/eyes/robotic)
/datum/bounty/item/medical/tongue
name = "Tongues"
description = "A recent attack by Mime extremists has left staff at Station 23 speechless. Ship some spare tongues."
reward = 10000
required_count = 3
wanted_types = list(/obj/item/organ/tongue)
/datum/bounty/item/medical/lizard_tail
name = "Lizard Tail"
description = "The Wizard Federation has made off with Nanotrasen's supply of lizard tails. While CentCom is dealing with the wizards, can the station spare a tail of their own?"
reward = 3000
wanted_types = list(/obj/item/organ/tail/lizard)
/datum/bounty/item/medical/cat_tail
name = "Cat Tail"
description = "Central Command has run out of heavy duty pipe cleaners. Can you ship over a cat tail to help us out?"
reward = 3000
wanted_types = list(/obj/item/organ/tail/cat)
+51
View File
@@ -0,0 +1,51 @@
/datum/bounty/item/mining/goliath_steaks
name = "Lava-Cooked Goliath Steaks"
description = "Admiral Pavlov has gone on hunger strike ever since the canteen started serving only monkey and monkey byproducts. She is demanding lava-cooked Goliath steaks."
reward = 5000
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/meat/steak/goliath)
/datum/bounty/item/mining/goliath_boat
name = "Goliath Hide Boat"
description = "Commander Menkov wants to participate in the annual Lavaland Regatta. He is asking your shipwrights to build the swiftest boat known to man."
reward = 10000
wanted_types = list(/obj/vehicle/ridden/lavaboat)
/datum/bounty/item/mining/bone_oar
name = "Bone Oars"
description = "Commander Menkov requires oars to participate in the annual Lavaland Regatta. Ship a pair over."
reward = 4000
required_count = 2
wanted_types = list(/obj/item/oar)
/datum/bounty/item/mining/bone_axe
name = "Bone Axe"
description = "Station 12 has had their fire axes stolen by marauding clowns. Ship them a bone axe as a replacement."
reward = 7500
wanted_types = list(/obj/item/twohanded/fireaxe/boneaxe)
/datum/bounty/item/mining/bone_armor
name = "Bone Armor"
description = "Station 14 has volunteered their lizard crew for ballistic armor testing. Ship over some bone armor."
reward = 5000
wanted_types = list(/obj/item/clothing/suit/armor/bone)
/datum/bounty/item/mining/skull_helmet
name = "Skull Helmet"
description = "Station 42's Head of Security has her birthday tomorrow! We want to suprise her with a fashionable skull helmet."
reward = 4000
wanted_types = list(/obj/item/clothing/head/helmet/skull)
/datum/bounty/item/mining/bone_talisman
name = "Bone Talismans"
description = "Station 14's Research Director claims that pagan bone talismans protect their wearer. Ship them a few so they can start testing."
reward = 7500
required_count = 3
wanted_types = list(/obj/item/clothing/accessory/talisman)
/datum/bounty/item/mining/bone_dagger
name = "Bone Daggers"
description = "Central Command's canteen is undergoing budget cuts. Ship over some bone daggers so our Chef can keep working."
reward = 5000
required_count = 3
wanted_types = list(/obj/item/kitchen/knife/combat/bone)
+1 -7
View File
@@ -45,7 +45,7 @@
name = "Diamond Mining Drill"
description = "Central Command is willing to pay three months salary in exchange for one diamond mining drill."
reward = 15000
wanted_types = list(/obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)
wanted_types = list(/obj/item/pickaxe/drill/diamonddrill, /obj/item/mecha_parts/mecha_equipment/drill/diamonddrill)
/datum/bounty/item/science/floor_buffer
name = "Floor Buffer Upgrade"
@@ -53,12 +53,6 @@
reward = 10000
wanted_types = list(/obj/item/janiupgrade)
/datum/bounty/item/science/flightsuit
name = "Flight Suit"
description = "According to all known laws of physics, flight suits are cool. CentCom will pay at a premium for them, so get shipping!"
reward = 30000
wanted_types = list(/obj/item/clothing/suit/space/hardsuit/flightsuit)
/datum/bounty/item/science/advanced_mop
name = "Advanced Mop"
description = "Excuse me. I'd like to request $17 for a push broom rebristling. Either that, or an advanced mop."
-49
View File
@@ -1,21 +1,3 @@
/datum/bounty/item/security/headset
name = "Security Headset"
description = "Nanotrasen wants to ensure that their encryption is working correctly. Ship them a security headset so that they can check."
reward = 800
wanted_types = list(/obj/item/radio/headset/headset_sec, /obj/item/radio/headset/heads/hos)
/datum/bounty/item/security/securitybelt
name = "Security Belt"
description = "CentCom is having difficulties with their security belts. Ship one from the station to receive compensation."
reward = 800
wanted_types = list(/obj/item/storage/belt/security)
/datum/bounty/item/security/sechuds
name = "Security HUDSunglasses"
description = "CentCom screwed up and ordered the wrong type of security sunglasses. They request the station ship some of theirs."
reward = 800
wanted_types = list(/obj/item/clothing/glasses/hud/security/sunglasses)
/datum/bounty/item/security/riotshotgun
name = "Riot Shotguns"
description = "Hooligans have boarded CentCom! Ship riot shotguns quick, or things are going to get dirty."
@@ -23,40 +5,9 @@
required_count = 2
wanted_types = list(/obj/item/gun/ballistic/shotgun/riot)
/datum/bounty/item/security/pinpointer
name = "Nuclear Pinpointer"
description = "There's a teeny-tiny itty-bitty chance CentCom may have lost a nuke disk. Can the station spare a pinpointer to help out?"
reward = 1500
wanted_types = list(/obj/item/pinpointer/nuke)
/datum/bounty/item/security/captains_spare
name = "Captain's Spare"
description = "Captain Bart of Station 12 has forgotten his ID! Ship him your station's spare, would you?"
reward = 1500
wanted_types = list(/obj/item/card/id/captains_spare)
/datum/bounty/item/security/hardsuit
name = "Security Hardsuit"
description = "Space pirates are heading towards CentCom! Quick! Ship a security hardsuit to aid the fight!"
reward = 2000
wanted_types = list(/obj/item/clothing/suit/space/hardsuit/security)
/datum/bounty/item/security/krav_maga
name = "Krav Maga Gloves"
description = "Chef Howerwitz of CentCom is trying to take a kung-fu Pizza out of the oven, but his mitts aren't up to the task. Ship them a pair of Krav Maga gloves to do the job right."
reward = 2000
wanted_types = list(/obj/item/clothing/gloves/krav_maga)
/datum/bounty/item/security/recharger
name = "Rechargers"
description = "Nanotrasen military academy is conducting marksmanship exercises. They request that rechargers be shipped."
reward = 2000
required_count = 3
wanted_types = list(/obj/machinery/recharger)
/datum/bounty/item/security/sabre
name = "Officer's Sabre"
description = "A 3-hour LARP session will be held at CentCom in the upcoming months. A shipped officer's sabre would make a good prop."
reward = 2500
wanted_types = list(/obj/item/melee/sabre)
+8 -1
View File
@@ -8,7 +8,7 @@
/datum/bounty/item/syndicate_documents
name = "Syndicate Documents"
description = "Intel regarding the syndicate is highly prized at CentCom. If you find syndicate documents, ship them. You could save lives."
reward = 10000
reward = 15000
wanted_types = list(/obj/item/documents/syndicate, /obj/item/documents/photocopy)
/datum/bounty/item/syndicate_documents/applies_to(obj/O)
@@ -19,6 +19,13 @@
return (Copy.copy_type && ispath(Copy.copy_type, /obj/item/documents/syndicate))
return TRUE
/datum/bounty/item/adamantine
name = "Adamantine"
description = "Nanotrasen's anomalous materials division is in desparate need for Adamantine. Send them a large shipment and we'll make it worth your while."
reward = 35000
required_count = 10
wanted_types = list(/obj/item/stack/sheet/mineral/adamantine)
/datum/bounty/more_bounties
name = "More Bounties"
description = "Complete enough bounties and CentCom will issue new ones!"
+58 -28
View File
@@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(bounties_list)
// Returns a new bounty of random type, but does not add it to GLOB.bounties_list.
/proc/random_bounty()
switch(rand(1, 9))
switch(rand(1, 13))
if(1)
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
return new subtype
@@ -103,40 +103,70 @@ GLOBAL_LIST_EMPTY(bounties_list)
if(9)
var/subtype = pick(subtypesof(/datum/bounty/item/slime))
return new subtype
if(10)
var/subtype = pick(subtypesof(/datum/bounty/item/engineering))
return new subtype
if(11)
var/subtype = pick(subtypesof(/datum/bounty/item/mining))
return new subtype
if(12)
var/subtype = pick(subtypesof(/datum/bounty/item/medical))
return new subtype
if(13)
var/subtype = pick(subtypesof(/datum/bounty/item/botany))
return new subtype
// Called lazily at startup to populate GLOB.bounties_list with random bounties.
/proc/setup_bounties()
for(var/i = 0; i < 3; ++i)
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
try_add_bounty(new subtype)
for(var/i = 0; i < 1; ++i)
var/list/subtype = pick(subtypesof(/datum/bounty/item/mech))
try_add_bounty(new subtype)
for(var/i = 0; i < 2; ++i)
var/list/subtype = pick(subtypesof(/datum/bounty/item/chef))
try_add_bounty(new subtype)
for(var/i = 0; i < 1; ++i)
var/list/subtype = pick(subtypesof(/datum/bounty/item/security))
try_add_bounty(new subtype)
try_add_bounty(new /datum/bounty/reagent/simple_drink)
try_add_bounty(new /datum/bounty/reagent/complex_drink)
try_add_bounty(new /datum/bounty/reagent/chemical)
for(var/i = 0; i < 1; ++i)
var/list/subtype = pick(subtypesof(/datum/bounty/virus))
try_add_bounty(new subtype)
var/pick // instead of creating it a bunch let's go ahead and toss it here, we know we're going to use it for dynamics and subtypes!
/********************************Subtype Gens********************************/
var/list/easy_add_list_subtypes = list(/datum/bounty/item/assistant = 2,
/datum/bounty/item/mech = 1,
/datum/bounty/item/chef = 2,
/datum/bounty/item/security = 1,
/datum/bounty/virus = 1,
/datum/bounty/item/engineering = 1,
/datum/bounty/item/mining = 2,
/datum/bounty/item/medical = 2,
/datum/bounty/item/botany = 2)
for(var/the_type in easy_add_list_subtypes)
for(var/i in 1 to easy_add_list_subtypes[the_type])
pick = pick(subtypesof(the_type))
try_add_bounty(new pick)
/********************************Strict Type Gens********************************/
var/list/easy_add_list_strict_types = list(/datum/bounty/reagent/simple_drink = 1,
/datum/bounty/reagent/complex_drink = 1,
/datum/bounty/reagent/chemical = 1)
for(var/the_strict_type in easy_add_list_strict_types)
for(var/i in 1 to easy_add_list_strict_types[the_strict_type])
try_add_bounty(new the_strict_type)
/********************************Dynamic Gens********************************/
for(var/i in 0 to 1)
if(prob(50))
pick = pick(subtypesof(/datum/bounty/item/slime))
else
pick = pick(subtypesof(/datum/bounty/item/science))
try_add_bounty(new pick)
/********************************Cutoff for Non-Low Priority Bounties********************************/
var/datum/bounty/B = pick(GLOB.bounties_list)
B.mark_high_priority()
// Generate these last so they can't be high priority.
try_add_bounty(new /datum/bounty/item/alien_organs)
try_add_bounty(new /datum/bounty/item/syndicate_documents)
try_add_bounty(new /datum/bounty/more_bounties)
/********************************Low Priority Gens********************************/
var/list/low_priority_strict_type_list = list( /datum/bounty/item/alien_organs,
/datum/bounty/item/syndicate_documents,
/datum/bounty/item/adamantine,
/datum/bounty/more_bounties)
for(var/low_priority_bounty in low_priority_strict_type_list)
try_add_bounty(new low_priority_bounty)
/proc/completed_bounty_count()
var/count = 0
+8 -5
View File
@@ -28,6 +28,13 @@
else
obj_flags &= ~EMAGGED
/obj/machinery/computer/cargo/proc/get_export_categories()
var/cat = EXPORT_CARGO
if(contraband)
cat |= EXPORT_CONTRABAND
if(obj_flags & EMAGGED)
cat |= EXPORT_EMAG
/obj/machinery/computer/cargo/emag_act(mob/user)
if(obj_flags & EMAGGED)
return
@@ -115,11 +122,7 @@
say(blockade_warning)
return
if(SSshuttle.supply.getDockedId() == "supply_home")
if (obj_flags & EMAGGED)
SSshuttle.supply.obj_flags |= EMAGGED
else
SSshuttle.supply.obj_flags = (SSshuttle.supply.obj_flags & ~EMAGGED)
SSshuttle.supply.contraband = contraband
SSshuttle.supply.export_categories = get_export_categories()
SSshuttle.moveShuttle("supply", "supply_away", TRUE)
say("The supply shuttle is departing.")
investigate_log("[key_name(usr)] sent the supply shuttle away.", INVESTIGATE_CARGO)
+7 -1
View File
@@ -17,6 +17,7 @@
to_chat(user, "<span class='notice'>[src] is not currently linked to a cargo console.</span>")
/obj/item/export_scanner/afterattack(obj/O, mob/user, proximity)
. = ..()
if(!istype(O) || !proximity)
return
@@ -30,7 +31,12 @@
else
// Before you fix it:
// yes, checking manifests is a part of intended functionality.
var/price = export_item_and_contents(O, cargo_console.contraband, (cargo_console.obj_flags & EMAGGED), dry_run=TRUE)
var/datum/export_report/ex = export_item_and_contents(O, cargo_console.get_export_categories(), dry_run=TRUE)
var/price = 0
for(var/x in ex.total_amount)
price += ex.total_value[x]
if(price)
to_chat(user, "<span class='notice'>Scanned [O], value: <b>[price]</b> credits[O.contents.len ? " (contents included)" : ""].</span>")
else
+63 -59
View File
@@ -1,15 +1,7 @@
/* How it works:
The shuttle arrives at CentCom dock and calls sell(), which recursively loops through all the shuttle contents that are unanchored.
The loop only checks contents of storage types, see supply.dm shuttle code.
Each object in the loop is checked for applies_to() of various export datums, except the invalid ones.
Objects on shutlle floor are checked only against shuttle_floor = TRUE exports.
If applies_to() returns TRUE, sell_object() is called on object and checks against exports are stopped for this object.
sell_object() must add object amount and cost to export's total_cost and total_amount.
When all the shuttle objects are looped, export cycle is over. The shuttle calls total_printout() for each valid export.
If total_printout() returns something, the export datum's total_cost is added to cargo credits, then export_end() is called to reset total_cost and total_amount.
*/
/* The rule in figuring out item export cost:
@@ -26,52 +18,57 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
then the player gets the profit from selling his own wasted time.
*/
/proc/export_item_and_contents(atom/movable/AM, contraband, emagged, dry_run=FALSE)
// Simple holder datum to pass export results around
/datum/export_report
var/list/exported_atoms = list() //names of atoms sold/deleted by export
var/list/total_amount = list() //export instance => total count of sold objects of its type, only exists if any were sold
var/list/total_value = list() //export instance => total value of sold objects
// external_report works as "transaction" object, pass same one in if you're doing more than one export in single go
/proc/export_item_and_contents(atom/movable/AM, allowed_categories = EXPORT_CARGO, apply_elastic = TRUE, delete_unsold = TRUE, dry_run=FALSE, datum/export_report/external_report)
if(!GLOB.exports_list.len)
setupExports()
var/sold_str = ""
var/cost = 0
var/list/contents = AM.GetAllContents()
var/datum/export_report/report = external_report
if(!report) //If we don't have any longer transaction going on
report = new
// We go backwards, so it'll be innermost objects sold first
for(var/i in reverseRange(contents))
var/atom/movable/thing = i
var/sold = FALSE
for(var/datum/export/E in GLOB.exports_list)
if(!E)
continue
if(E.applies_to(thing, contraband, emagged))
if(dry_run)
cost += E.get_cost(thing, contraband, emagged)
else
E.sell_object(thing, contraband, emagged)
sold_str += " [thing.name]"
if(E.applies_to(thing, allowed_categories, apply_elastic))
sold = E.sell_object(thing, report, dry_run, allowed_categories , apply_elastic)
report.exported_atoms += " [thing.name]"
break
if(!dry_run)
if(!dry_run && (sold || delete_unsold))
if(ismob(thing))
thing.investigate_log("deleted through cargo export",INVESTIGATE_CARGO)
qdel(thing)
if(dry_run)
return cost
else
return sold_str
return report
/datum/export
var/unit_name = "" // Unit name. Only used in "Received [total_amount] [name]s [message]." message
var/message = ""
var/cost = 100 // Cost of item, in cargo credits. Must not alow for infinite price dupes, see above.
var/k_elasticity = 1/30 //coefficient used in marginal price calculation that roughly corresponds to the inverse of price elasticity, or "quantity elasticity"
var/contraband = FALSE // Export must be unlocked with multitool.
var/emagged = FALSE // Export must be unlocked with emag.
var/list/export_types = list() // Type of the exported object. If none, the export datum is considered base type.
var/include_subtypes = TRUE // Set to FALSE to make the datum apply only to a strict type.
var/list/exclude_types = list() // Types excluded from export
// Used by print-out
var/total_cost = 0
var/total_amount = 0
//cost includes elasticity, this does not.
var/init_cost
//All these need to be present in export call parameter for this to apply.
var/export_category = EXPORT_CARGO
/datum/export/New()
..()
SSprocessing.processing += src
@@ -79,7 +76,6 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
export_types = typecacheof(export_types)
exclude_types = typecacheof(exclude_types)
/datum/export/Destroy()
SSprocessing.processing -= src
return ..()
@@ -91,29 +87,30 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
cost = init_cost
// Checks the cost. 0 cost items are skipped in export.
/datum/export/proc/get_cost(obj/O, contr = 0, emag = 0)
var/amount = get_amount(O, contr, emag)
if(k_elasticity!=0)
return round((cost/k_elasticity) * (1 - NUM_E**(-1 * k_elasticity * amount))) //anti-derivative of the marginal cost function
/datum/export/proc/get_cost(obj/O, allowed_categories = NONE, apply_elastic = TRUE)
var/amount = get_amount(O)
if(apply_elastic)
if(k_elasticity!=0)
return round((cost/k_elasticity) * (1 - NUM_E**(-1 * k_elasticity * amount))) //anti-derivative of the marginal cost function
else
return round(cost * amount) //alternative form derived from L'Hopital to avoid division by 0
else
return round(cost * amount) //alternative form derived from L'Hopital to avoid division by 0
return round(init_cost * amount)
// Checks the amount of exportable in object. Credits in the bill, sheets in the stack, etc.
// Usually acts as a multiplier for a cost, so item that has 0 amount will be skipped in export.
/datum/export/proc/get_amount(obj/O, contr = 0, emag = 0)
/datum/export/proc/get_amount(obj/O)
return 1
// Checks if the item is fit for export datum.
/datum/export/proc/applies_to(obj/O, contr = 0, emag = 0)
if(contraband && !contr)
return FALSE
if(emagged && !emag)
/datum/export/proc/applies_to(obj/O, allowed_categories = NONE, apply_elastic = TRUE)
if((allowed_categories & export_category) != export_category)
return FALSE
if(!include_subtypes && !(O.type in export_types))
return FALSE
if(include_subtypes && (!is_type_in_typecache(O, export_types) || is_type_in_typecache(O, exclude_types)))
return FALSE
if(!get_cost(O, contr, emag))
if(!get_cost(O, allowed_categories , apply_elastic))
return FALSE
if(O.flags_1 & HOLOGRAM_1)
return FALSE
@@ -122,26 +119,38 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
// Called only once, when the object is actually sold by the datum.
// Adds item's cost and amount to the current export cycle.
// get_cost, get_amount and applies_to do not neccesary mean a successful sale.
/datum/export/proc/sell_object(obj/O, contr = 0, emag = 0)
var/the_cost = get_cost(O)
/datum/export/proc/sell_object(obj/O, datum/export_report/report, dry_run = TRUE, allowed_categories = EXPORT_CARGO , apply_elastic = TRUE)
var/the_cost = get_cost(O, allowed_categories , apply_elastic)
var/amount = get_amount(O)
total_cost += the_cost
if(istype(O, /datum/export/material))
total_amount += amount*MINERAL_MATERIAL_AMOUNT
else
total_amount += amount
cost *= NUM_E**(-1*k_elasticity*amount) //marginal cost modifier
SSblackbox.record_feedback("nested tally", "export_sold_cost", 1, list("[O.type]", "[the_cost]"))
if(amount <=0 || the_cost <=0)
return FALSE
report.total_value[src] += the_cost
if(istype(O, /datum/export/material))
report.total_amount[src] += amount*MINERAL_MATERIAL_AMOUNT
else
report.total_amount[src] += amount
if(!dry_run)
if(apply_elastic)
cost *= NUM_E**(-1*k_elasticity*amount) //marginal cost modifier
SSblackbox.record_feedback("nested tally", "export_sold_cost", 1, list("[O.type]", "[the_cost]"))
return TRUE
// Total printout for the cargo console.
// Called before the end of current export cycle.
// It must always return something if the datum adds or removes any credts.
/datum/export/proc/total_printout(contr = 0, emag = 0)
if(!total_cost && !total_amount)
/datum/export/proc/total_printout(datum/export_report/ex, notes = TRUE)
if(!ex.total_amount[src] || !ex.total_value[src])
return ""
var/msg = "[total_cost] credits: Received [total_amount] "
if(total_cost > 0)
var/total_value = ex.total_value[src]
var/total_amount = ex.total_amount[src]
var/msg = "[total_value] credits: Received [total_amount] "
if(total_value > 0)
msg = "+" + msg
if(unit_name)
@@ -157,11 +166,6 @@ Credit dupes that require a lot of manual work shouldn't be removed, unless they
msg += "."
return msg
// The current export cycle is over now. Reset all the export temporary vars.
/datum/export/proc/export_end()
total_cost = 0
total_amount = 0
GLOBAL_LIST_EMPTY(exports_list)
/proc/setupExports()
+59 -29
View File
@@ -5,9 +5,9 @@
export_types = list(/obj/structure/closet/crate)
exclude_types = list(/obj/structure/closet/crate/large, /obj/structure/closet/crate/wooden)
/datum/export/large/crate/total_printout() // That's why a goddamn metal crate costs that much.
/datum/export/large/crate/total_printout(datum/export_report/ex, notes = TRUE) // That's why a goddamn metal crate costs that much.
. = ..()
if(.)
if(. && notes)
. += " Thanks for participating in Nanotrasen Crates Recycling Program."
/datum/export/large/crate/wooden
@@ -56,42 +56,72 @@
export_types = list(/obj/structure/reagent_dispensers/beerkeg)
/datum/export/large/emitter
cost = 200
unit_name = "emitter"
export_types = list(/obj/machinery/power/emitter)
/datum/export/large/field_generator
cost = 200
unit_name = "field generator"
export_types = list(/obj/machinery/field/generator)
/datum/export/large/collector
cost = 200
unit_name = "collector"
export_types = list(/obj/machinery/power/rad_collector)
/datum/export/large/collector/pa
cost = 300
unit_name = "particle accelerator part"
export_types = list(/obj/structure/particle_accelerator)
/datum/export/large/collector/pa/controls
cost = 500
unit_name = "particle accelerator control console"
export_types = list(/obj/machinery/particle_accelerator/control_box)
/datum/export/large/pipedispenser
cost = 500
unit_name = "pipe dispenser"
export_types = list(/obj/machinery/pipedispenser)
/datum/export/large/emitter
cost = 550
unit_name = "emitter"
export_types = list(/obj/machinery/power/emitter)
/datum/export/large/field_generator
cost = 550
unit_name = "field generator"
export_types = list(/obj/machinery/field/generator)
/datum/export/large/collector
cost = 400
unit_name = "radiation collector"
export_types = list(/obj/machinery/power/rad_collector)
/datum/export/large/tesla_coil
cost = 450
unit_name = "tesla coil"
export_types = list(/obj/machinery/power/tesla_coil)
/datum/export/large/pa
cost = 350
unit_name = "particle accelerator part"
export_types = list(/obj/structure/particle_accelerator)
/datum/export/large/pa/controls
cost = 500
unit_name = "particle accelerator control console"
export_types = list(/obj/machinery/particle_accelerator/control_box)
/datum/export/large/supermatter
cost = 9000
cost = 8000
unit_name = "supermatter shard"
export_types = list(/obj/machinery/power/supermatter_crystal/shard)
/datum/export/large/grounding_rod
cost = 350
unit_name = "grounding rod"
export_types = list(/obj/machinery/power/grounding_rod)
/datum/export/large/tesla_gen
cost = 4000
unit_name = "energy ball generator"
export_types = list(/obj/machinery/the_singularitygen/tesla)
/datum/export/large/singulo_gen
cost = 4000
unit_name = "gravitational singularity generator"
export_types = list(/obj/machinery/the_singularitygen)
include_subtypes = FALSE
/datum/export/large/am_control_unit
cost = 4000
unit_name = "antimatter control unit"
export_types = list(/obj/machinery/power/am_control_unit)
/datum/export/large/am_shielding_container
cost = 150
unit_name = "packaged antimatter reactor section"
export_types = list(/obj/item/am_shielding_container)
/datum/export/large/iv
cost = 50
+65
View File
@@ -0,0 +1,65 @@
//Tendril chest artifacts and ruin loot. Includes ash drake loot since they drop two sets of armor + random item
//Consumable or one-use items like the magic D20 and gluttony's blessing are omitted
/datum/export/lavaland/minor
cost = 10000
unit_name = "minor lava planet artifact"
export_types = list(/obj/item/immortality_talisman,
/obj/item/book_of_babel,
/obj/item/gun/magic/hook,
/obj/item/wisp_lantern,
/obj/item/reagent_containers/glass/bottle/potion/flight,
/obj/item/katana/cursed,
/obj/item/clothing/glasses/godeye,
/obj/item/melee/ghost_sword,
/obj/item/clothing/suit/space/hardsuit/cult,
/obj/item/voodoo,
/obj/item/grenade/clusterbuster/inferno,
/obj/item/clothing/neck/necklace/memento_mori,
/obj/item/organ/heart/cursed/wizard,
/obj/item/clothing/suit/hooded/cloak/drake,
/obj/item/dragons_blood,
/obj/item/lava_staff,
/obj/item/ship_in_a_bottle,
/obj/item/clothing/shoes/clown_shoes/banana_shoes,
/obj/item/gun/magic/staff/honk,
/obj/item/kitchen/knife/envy,
/obj/item/gun/ballistic/revolver/russian/soul,
/obj/item/veilrender/vealrender)
/datum/export/lavaland/major //valuable chest/ruin loot and staff of storms
cost = 20000
unit_name = "lava planet artifact"
export_types = list(/obj/item/guardiancreator,
/obj/item/rod_of_asclepius,
/obj/item/clothing/suit/space/hardsuit/ert/paranormal,
/obj/item/prisoncube,
/obj/item/staff/storm)
//Megafauna loot, except for ash drakes and legion
/datum/export/lavaland/megafauna
cost = 40000
unit_name = "major lava planet artifact"
export_types = list(/obj/item/hierophant_club,
/obj/item/melee/transforming/cleaving_saw,
/obj/item/organ/vocal_cords/colossus,
/obj/machinery/anomalous_crystal,
/obj/item/mayhem,
/obj/item/blood_contract,
/obj/item/gun/magic/staff/spellblade)
/datum/export/lavaland/megafauna/total_printout(datum/export_report/ex, notes = TRUE) //in the unlikely case a miner feels like selling megafauna loot
. = ..()
if(. && notes)
. += " On behalf of the Nanotrasen RnD division: Thank you for your hard work."
/datum/export/lavaland/megafauna/hev/suit
cost = 30000
unit_name = "H.E.C.K. suit"
export_types = list(/obj/item/clothing/suit/space/hostile_environment)
/datum/export/lavaland/megafauna/hev/helmet
cost = 10000
unit_name = "H.E.C.K. helmet"
export_types = list(/obj/item/clothing/head/helmet/space/hostile_environment)
+4 -3
View File
@@ -15,9 +15,10 @@
return ..() * S.rarity // That's right, no bonus for potency. Send a crappy sample first to "show improvement" later.
/datum/export/seed/sell_object(obj/O)
..()
var/obj/item/seeds/S = O
discoveredPlants[S.type] = S.potency
. = ..()
if(.)
var/obj/item/seeds/S = O
discoveredPlants[S.type] = S.potency
/datum/export/seed/potency
+4 -4
View File
@@ -16,7 +16,7 @@
/datum/export/stack/skin/human
cost = 100
contraband = TRUE
export_category = EXPORT_CONTRABAND
unit_name = "piece"
message = "of human skin"
export_types = list(/obj/item/stack/sheet/animalhide/human)
@@ -28,13 +28,13 @@
/datum/export/stack/skin/cat
cost = 150
contraband = TRUE
export_category = EXPORT_CONTRABAND
unit_name = "cat hide"
export_types = list(/obj/item/stack/sheet/animalhide/cat)
/datum/export/stack/skin/corgi
cost = 200
contraband = TRUE
export_category = EXPORT_CONTRABAND
unit_name = "corgi hide"
export_types = list(/obj/item/stack/sheet/animalhide/corgi)
@@ -44,7 +44,7 @@
export_types = list(/obj/item/stack/sheet/animalhide/lizard)
/datum/export/stack/skin/gondola
cost = 500
cost = 5000
unit_name = "gondola hide"
export_types = list(/obj/item/stack/sheet/animalhide/gondola)
+20
View File
@@ -110,3 +110,23 @@
cost = 100
unit_name = "rapid piping device"
export_types = list(/obj/item/pipe_dispenser)
/datum/export/singulo //failsafe in case someone decides to ship a live singularity to CentCom without the corresponding bounty
cost = 1
unit_name = "singularity"
export_types = list(/obj/singularity)
include_subtypes = FALSE
/datum/export/singulo/total_printout(datum/export_report/ex, notes = TRUE)
. = ..()
if(. && notes)
. += " ERROR: Invalid object detected."
/datum/export/singulo/tesla //see above
unit_name = "energy ball"
export_types = list(/obj/singularity/energy_ball)
/datum/export/singulo/tesla/total_printout(datum/export_report/ex, notes = TRUE)
. = ..()
if(. && notes)
. += " ERROR: Unscheduled energy ball delivery detected."
-94
View File
@@ -69,97 +69,3 @@
unit_name = "pair"
message = "of handcuffs"
export_types = list(/obj/item/restraints/handcuffs)
// relics of lavaland
/datum/export/weapon/hierophant
cost = 40000
unit_name = "Hierophant Club"
export_types = list(/obj/item/hierophant_club)
/datum/export/weapon/lava
cost = 40000
unit_name = "Lava Staff"
export_types = list(/obj/item/lava_staff)
/datum/export/weapon/cleaving_saw
cost = 40000
unit_name = "Cleaving Saw"
export_types = list(/obj/item/melee/transforming/cleaving_saw)
/datum/export/weapon/mayhem
cost = 40000
unit_name = "Mayhem in a bottle"
export_types = list(/obj/item/mayhem)
/datum/export/weapon/blood_contract
cost = 40000
unit_name = "Blood Contract"
export_types = list(/obj/item/blood_contract)
//Artifacts of lavaland
/datum/export/weapon/immortality_talisman
cost = 10000
unit_name = "Immortality Talisman"
export_types = list(/obj/item/immortality_talisman)
/datum/export/weapon/babel
cost = 10000
unit_name = "Book of Babel"
export_types = list(/obj/item/book_of_babel)
/datum/export/weapon/hook
cost = 10000
unit_name = "Meat hook"
export_types = list(/obj/item/gun/magic/hook)
/datum/export/weapon/shipbottle //the price for not breaking the bottle.
cost = 20000
unit_name = "Ship in a bottle"
export_types = list(/obj/item/ship_in_a_bottle)
/datum/export/weapon/tarot //price for sacraficing a very profitiable ally
cost = 20000
unit_name = "Tarot cards"
export_types = list(/obj/item/guardiancreator)
/datum/export/weapon/red //second half of telecube
cost = 5000
unit_name = "Red Cube"
export_types = list(/obj/item/warp_cube/red)
/datum/export/weapon/blue //first half of telecube
cost = 5000
unit_name = "Blue Cube"
export_types = list(/obj/item/warp_cube)
/datum/export/weapon/wisplantern //thermals on lavaland
cost = 10000
unit_name = "Wisp Lantern"
export_types = list(/obj/item/wisp_lantern)
/datum/export/weapon/flight //if xenobiology ever reaches the point to get these without shuttle being called they deserve it
cost = 10000
unit_name = "Strange Elixir"
export_types = list(/obj/item/reagent_containers/glass/bottle/potion/flight)
/datum/export/weapon/cheart //is a very powerfull healing artifact in the robust hands
cost = 10000
unit_name = "Cursed Heart"
export_types = list(/obj/item/organ/heart/cursed/wizard)
/datum/export/weapon/ckatana
cost = 10000
unit_name = "Katana"
export_types = list(/obj/item/katana/cursed)
/datum/export/weapon/geye //xray
cost = 10000
unit_name = "God eye"
export_types = list(/obj/item/clothing/glasses/godeye)
/datum/export/weapon/spectral
cost = 10000
unit_name = "Spectral Sword"
export_types = list(/obj/item/melee/ghost_sword)
+6 -6
View File
@@ -9,7 +9,7 @@
/obj/machinery/computer/cargo/express
name = "express supply console"
desc = "This console allows the user to purchase a package \
with 1/40th of the delivery time: made possible by NanoTrasen's new \"1500mm Orbital Railgun\".\
with 1/40th of the delivery time: made possible by Nanotrasen's new \"1500mm Orbital Railgun\".\
All sales are near instantaneous - please choose carefully"
icon_screen = "supply_express"
circuit = /obj/item/circuitboard/computer/cargo/express
@@ -109,7 +109,7 @@
if(SSshuttle.supplyBlocked)
message = blockade_warning
if(usingBeacon && !beacon)
message = "BEACON ERROR: BEACON MISSING"//beacon was destroyed
message = "BEACON ERROR: BEACON MISSING"//beacon was destroyed
else if (usingBeacon && !canBeacon)
message = "BEACON ERROR: MUST BE EXPOSED"//beacon's loc/user's loc must be a turf
if(obj_flags & EMAGGED)
@@ -165,9 +165,9 @@
var/LZ
if (istype(beacon) && usingBeacon)//prioritize beacons over landing in cargobay
LZ = get_turf(beacon)
beacon.update_status(SP_LAUNCH)
beacon.update_status(SP_LAUNCH)
else if (!usingBeacon)//find a suitable supplypod landing zone in cargobay
landingzone = locate(/area/quartermaster/storage) in GLOB.sortedAreas
landingzone = GLOB.areas_by_type[/area/quartermaster/storage]
if (!landingzone)
WARNING("[src] couldnt find a Quartermaster/Storage (aka cargobay) area on the station, and as such it has set the supplypod landingzone to the area it resides in.")
landingzone = get_area(src)
@@ -177,7 +177,7 @@
LAZYADD(empty_turfs, T)
CHECK_TICK
if(empty_turfs && empty_turfs.len)
LZ = pick(empty_turfs)
LZ = pick(empty_turfs)
if (SO.pack.cost <= SSshuttle.points && LZ)//we need to call the cost check again because of the CHECK_TICK call
SSshuttle.points -= SO.pack.cost
new /obj/effect/DPtarget(LZ, SO, podID)
@@ -185,7 +185,7 @@
update_icon()
else
if(SO.pack.cost * (0.72*MAX_EMAG_ROCKETS) <= SSshuttle.points) // bulk discount :^)
landingzone = locate(pick(GLOB.the_station_areas)) in GLOB.sortedAreas //override default landing zone
landingzone = GLOB.areas_by_type[pick(GLOB.the_station_areas)] //override default landing zone
for(var/turf/open/floor/T in landingzone.contents)
if(is_blocked_turf(T))
continue
+72 -11
View File
@@ -460,7 +460,7 @@
/datum/supply_pack/security/armory/laserarmor
name = "Reflector Vest Crate"
desc = "Contains two vests of highly reflective material. Each armor peice diffuses a laser's energy by over half, as well as offering a good chance to reflect the laser entirely. Requires Armory access to open."
desc = "Contains two vests of highly reflective material. Each armor piece diffuses a laser's energy by over half, as well as offering a good chance to reflect the laser entirely. Requires Armory access to open."
cost = 2000
contains = list(/obj/item/clothing/suit/armor/laserproof,
/obj/item/clothing/suit/armor/laserproof)
@@ -1052,6 +1052,15 @@
/obj/item/storage/firstaid/o2)
crate_name = "oxygen deprivation kit crate"
/datum/supply_pack/medical/surgery
name = "Surgical Supplies Crate"
desc = "Do you want to perform surgery, but don't have one of those fancy shmancy degrees? Just get started with this crate containing a medical duffelbag, Sterilizine spray and collapsible roller bed."
cost = 3000
contains = list(/obj/item/storage/backpack/duffelbag/med/surgery,
/obj/item/reagent_containers/medspray/sterilizine,
/obj/item/roller)
crate_name = "surgical supplies crate"
/datum/supply_pack/medical/firstaidtoxins
name = "Toxin Treatment Kit Crate"
desc = "Contains three first aid kits focused on healing damage dealt by heavy toxins."
@@ -1072,13 +1081,14 @@
/obj/item/reagent_containers/blood/BPlus,
/obj/item/reagent_containers/blood/BMinus,
/obj/item/reagent_containers/blood/OPlus,
/obj/item/reagent_containers/blood/OMinus)
/obj/item/reagent_containers/blood/OMinus,
/obj/item/reagent_containers/blood/lizard)
crate_name = "blood freezer"
crate_type = /obj/structure/closet/crate/freezer
/datum/supply_pack/medical/defibs
name = "Defibrillator Crate"
desc = "Contains two defibrillators for bringing the recently-deceased back to life."
desc = "Contains two defibrillators for bringing the recently deceased back to life."
cost = 2500
contains = list(/obj/item/defibrillator/loaded,
/obj/item/defibrillator/loaded)
@@ -1162,7 +1172,7 @@
/datum/supply_pack/science/robotics/mecha_odysseus
name = "Circuit Crate (Odysseus)"
desc = "Ever wanted to build your own giant medical robot? Well now you can! Contains the Odysseus main control board and Odysseus peripherals board. Requires Robotics access to open."
desc = "Ever wanted to build your own giant medical robot? Well, now you can! Contains the Odysseus main control board and Odysseus peripherals board. Requires Robotics access to open."
cost = 2500
access = ACCESS_ROBOTICS
contains = list(/obj/item/circuitboard/mecha/odysseus/peripherals,
@@ -1181,6 +1191,16 @@
crate_name = "\improper APLU Ripley circuit crate"
crate_type = /obj/structure/closet/crate/secure/science
/datum/supply_pack/science/circuitry
name = "Circuitry Starter Pack Crate"
desc = "Journey into the mysterious world of Circuitry with this starter pack. Contains a circuit printer, analyzer, debugger and wirer. Power cells not included."
cost = 1000
contains = list(/obj/item/integrated_electronics/analyzer,
/obj/item/integrated_circuit_printer,
/obj/item/integrated_electronics/debugger,
/obj/item/integrated_electronics/wirer)
crate_name = "circuitry starter pack crate"
/datum/supply_pack/science/plasma
name = "Plasma Assembly Crate"
desc = "Everything you need to burn something to the ground, this contains three plasma assembly sets. Each set contains a plasma tank, igniter, proximity sensor, and timer! Warranty void if exposed to high temperatures. Requires Toxins access to open."
@@ -1257,6 +1277,18 @@
/datum/supply_pack/service
group = "Service"
/datum/supply_pack/service/cargo_supples
name = "Cargo Supplies Crate"
desc = "Sold everything that wasn't bolted down? You can get right back to work with this crate containing stamps, an export scanner, destination tagger, hand labeler and some package wrapping."
cost = 1000
contains = list(/obj/item/stamp,
/obj/item/stamp/denied,
/obj/item/export_scanner,
/obj/item/destTagger,
/obj/item/hand_labeler,
/obj/item/stack/packageWrap)
crate_name = "cargo supplies crate"
/datum/supply_pack/service/noslipfloor
name = "High-traction Floor Tiles"
desc = "Make slipping a thing of the past with thirty industrial-grade anti-slip floortiles!"
@@ -1332,6 +1364,16 @@
/obj/item/flashlight/glowstick/pink)
crate_name = "party equipment crate"
/datum/supply_pack/service/carpet
name = "Premium Carpet Crate"
desc = "Plasteel floor tiles getting on your nerves? These stacks of extra soft carpet will tie any room together."
cost = 1000
contains = list(/obj/item/stack/tile/carpet/fifty,
/obj/item/stack/tile/carpet/fifty,
/obj/item/stack/tile/carpet/black/fifty,
/obj/item/stack/tile/carpet/black/fifty)
crate_name = "premium carpet crate"
/datum/supply_pack/service/lightbulbs
name = "Replacement Lights"
desc = "May the light of Aether shine upon this station! Or at least, the light of forty two light tubes and twenty one light bulbs."
@@ -1641,6 +1683,14 @@
qdel(D)
new /mob/living/simple_animal/pet/dog/corgi/Lisa(.)
/datum/supply_pack/critter/corgis/exotic
name = "Exotic Corgi Crate"
desc = "Corgis fit for a king, these corgis come in a unique color to signify their superiority. Comes with a cute collar!"
cost = 5500
contains = list(/mob/living/simple_animal/pet/dog/corgi/exoticcorgi,
/obj/item/clothing/neck/petcollar)
crate_name = "exotic corgi crate"
/datum/supply_pack/critter/cow
name = "Cow Crate"
desc = "The cow goes moo!"
@@ -1739,13 +1789,14 @@
/obj/item/storage/pill_bottle/lsd,
/obj/item/storage/pill_bottle/aranesp,
/obj/item/storage/pill_bottle/stimulant,
/obj/item/toy/cards/deck/syndicate,
/obj/item/toy/cards/deck/syndicate,
/obj/item/reagent_containers/food/drinks/bottle/absinthe,
/obj/item/clothing/under/syndicate/tacticool,
/obj/item/storage/fancy/cigarettes/cigpack_syndicate,
/obj/item/storage/fancy/cigarettes/cigpack_shadyjims,
/obj/item/clothing/mask/gas/syndicate,
/obj/item/clothing/neck/necklace/dope)
/obj/item/clothing/neck/necklace/dope,
/obj/item/vending_refill/donksoft)
crate_name = "crate"
/datum/supply_pack/costumes_toys/foamforce
@@ -1942,14 +1993,14 @@
crate_name = "autodrobe supply crate"
/datum/supply_pack/costumes_toys/wardrobes/cargo
name = "Cargo Department Supply Crate"
name = "Cargo Wardrobe Supply Crate"
desc = "This crate contains a refill for the CargoDrobe."
cost = 750
contains = list(/obj/item/vending_refill/wardrobe/cargo_wardrobe)
crate_name = "cargo department supply crate"
/datum/supply_pack/costumes_toys/wardrobes/engineering
name = "Engineering Department Wardrobe Supply Crate"
name = "Engineering Wardrobe Supply Crate"
desc = "This crate contains refills for the EngiDrobe and AtmosDrobe."
cost = 1500
contains = list(/obj/item/vending_refill/wardrobe/engi_wardrobe,
@@ -1975,7 +2026,7 @@
crate_name = "hydrobe supply crate"
/datum/supply_pack/costumes_toys/wardrobes/medical
name = "Medical Department Wardrobe Supply Crate"
name = "Medical Wardrobe Supply Crate"
desc = "This crate contains refills for the MediDrobe, ChemDrobe, GeneDrobe, and ViroDrobe."
cost = 3000
contains = list(/obj/item/vending_refill/wardrobe/medi_wardrobe,
@@ -1985,7 +2036,7 @@
crate_name = "medical department wardrobe supply crate"
/datum/supply_pack/costumes_toys/wardrobes/science
name = "Science Department Wardrobe Supply Crate"
name = "Science Wardrobe Supply Crate"
desc = "This crate contains refills for the SciDrobe and RoboDrobe."
cost = 1500
contains = list(/obj/item/vending_refill/wardrobe/robo_wardrobe,
@@ -1993,7 +2044,7 @@
crate_name = "science department wardrobe supply crate"
/datum/supply_pack/costumes_toys/wardrobes/security
name = "Security Department Supply Crate"
name = "Security Wardrobe Supply Crate"
desc = "This crate contains refills for the SecDrobe and LawDrobe."
cost = 1500
contains = list(/obj/item/vending_refill/wardrobe/sec_wardrobe,
@@ -2090,6 +2141,16 @@
cost = 700
contains = list(/obj/item/storage/box/fountainpens)
crate_type = /obj/structure/closet/crate/wooden
crate_name = "calligraphy crate"
/datum/supply_pack/misc/wrapping_paper
name = "Festive Wrapping Paper Crate"
desc = "Want to mail your loved ones gift-wrapped chocolates, stuffed animals, the Clown's severed head? You can do all that, with this crate full of wrapping paper."
cost = 1000
contains = list(/obj/item/stack/wrapping_paper)
crate_type = /obj/structure/closet/crate/wooden
crate_name = "festive wrapping paper crate"
/datum/supply_pack/misc/funeral
name = "Funeral Supply crate"
+2
View File
@@ -48,6 +48,8 @@
..()
if(!express_console)
to_chat(user, "<span class='notice'>[src] is not currently linked to a Express Supply console.</span>")
else
to_chat(user, "<span class='notice'>Alt-click to unlink it from the Express Supply console.</span>")
/obj/item/supplypod_beacon/Destroy()
if(express_console)