Better Bounties (#9381)

rscadd: "Added new cargo bounties."
    rscadd: "Adjusted cargo bounties. Reward amounts are semi-randomized, as is the number of required items for some bounties. The types of bounties that appear are more randomized."
    tweak: "Altered some bounty descriptions."
    tweak: "Any food that has bites taken out of it will no longer count for the related bounty."
    tweak: "More types of pies, muffins, and kabobs should now count for their respective bounties."
    tweak: "Further adjusted cargo warehouse spawns."
This commit is contained in:
Doxxmedearly
2020-07-21 17:27:37 +03:00
committed by GitHub
parent a355c9f12b
commit a23d9417fd
19 changed files with 1030 additions and 269 deletions
+154 -25
View File
@@ -1,49 +1,178 @@
/datum/bounty/item/assistant/briefcase
name = "Briefcase"
description = "%BOSSNAME will be holding a business convention this year. Ship a few briefcases in support."
reward = 2500
required_count = 5
reward_low = 2000
reward_high = 3000
required_count = 4
random_count = 1
wanted_types = list(/obj/item/storage/briefcase)
exclude_types = list(/obj/item/storage/briefcase/inflatable, /obj/item/storage/briefcase/crimekit)
/datum/bounty/item/assistant/lung
name = "Lungs"
description = "A recent explosion at %BOSSNAME has left multiple staff with punctured lungs. Ship spare lungs to be rewarded."
reward = 3000
required_count = 1
description = "A recent explosion at %BOSSNAME has left multiple staff with punctured lungs. Ship spare lungs to be rewarded- and save some lives."
reward_low = 2500
reward_high = 3500
wanted_types = list(/obj/item/organ/internal/lungs)
/datum/bounty/item/assistant/appendix
name = "Appendix"
description = "Chef Gibb of %BOSSNAME wants to prepare a traditional Unathi meal using a very special delicacy: an appendix. If you ship one, he'll pay."
reward = 3000
description = "%PERSONNAME wants our chefs to prepare a strange meal using a very special delicacy: an appendix. If you ship one, they'll pay."
reward_low = 2500
reward_high = 3500
wanted_types = list(/obj/item/organ/internal/appendix)
/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. "
reward = 1500
required_count = 5
wanted_types = list(/obj/structure/bed/chair/comfy)
/datum/bounty/item/assistant/hand_tele
name = "Hand Tele"
description = "%BOSSNAME 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
reward_low = 3000
reward_high = 5500
wanted_types = list(/obj/item/hand_tele)
/datum/bounty/item/assistant/handcuffs
name = "Handcuffs"
description = "A large influx of escaped convicts have arrived at %BOSSNAME. Now is the perfect time to ship out spare handcuffs."
reward = 1000
required_count = 5
wanted_types = list(/obj/item/handcuffs)
/datum/bounty/item/assistant/monkey_cubes
name = "Monkey Cubes"
description = "Due to a recent genetics accident, %BOSSNAME is in serious need of monkeys. Your mission is to ship monkey cubes."
reward = 2000
required_count = 3
reward_low = 1800
reward_high = 2400
required_count = 4
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/monkeycube)
/datum/bounty/item/assistant/curtains
name = "Curtain"
description = "Send us some curtains to help redecorate our offices!"
reward_low = 2200
reward_high = 3200
required_count = 5
random_count = 2
wanted_types = list(/obj/structure/curtain)
/datum/bounty/item/assistant/action_figures
name = "Action Figures"
description = "%PERSONNAME wants a few action figures for their collection, and is willing to pay any station who provides."
reward_low = 2000
reward_high = 3000
required_count = 5
random_count = 3
wanted_types = list(/obj/item/toy/figure)
/datum/bounty/item/assistant/water_tank
name = "Water Tank"
description = "Send us some water tanks that will be used for botany research, and definitely not for creating a slip 'n slide in %PERSONNAME's office."
reward_low = 1500
reward_high = 2500
required_count = 3
random_count = 1
wanted_types = list(/obj/structure/reagent_dispensers/watertank)
/datum/bounty/item/assistant/water_tank/applies_to(var/obj/structure/reagent_dispensers/watertank/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.reagents.get_reagent_amount(/datum/reagent/water) >= 750)
return TRUE
return FALSE
/datum/bounty/item/assistant/wheelchair
name = "Wheelchairs"
description = "The medical bay at the %DOCKSHORT has been busier than usual; we're requesting some spare wheelchairs for patient transport."
reward_low = 2300
reward_high = 4000
required_count = 2
wanted_types = list(/obj/structure/bed/chair/wheelchair)
/datum/bounty/item/assistant/film
name = "Camera Film"
description = "We received a gift from a delegate on Adhomai- a group of some sort of small, fat xenofauna. Everyone thinks they're cute and we're low on film from all the pictures!"
reward_low = 1200
reward_high = 1800
required_count = 3
random_count = 1
wanted_types = list(/obj/item/device/camera_film)
/datum/bounty/item/assistant/trash
name = "Trash"
description = "It's time for the %COMPNAME cleanup initiative! Clean stations will receive a bonus; pick up the litter from around your station and send it to us as proof!"
reward_low = 1000
reward_high = 2000
required_count = 15
random_count = 5
wanted_types = list(/obj/item/trash)
/datum/bounty/item/assistant/monkey_hide
name = "Monkey Hide"
description = "One of the scientists at %BOSSSHORT is interested in testing products on monkey skin. Your mission is to acquire monkey's hide and ship it."
reward_low = 1500
reward_high = 2500
required_count = 5
random_count = 1
wanted_types = list(/obj/item/stack/material/animalhide/monkey)
/datum/bounty/item/assistant/heart
name = "Heart"
description = "%PERSONNAME is in critical condition after suffering a heart attack. Doctors say they need a new heart, fast. Ship one, pronto! Organic or mechanical, just hurry up!"
reward_low = 2500
reward_high = 4000
wanted_types = list(/obj/item/organ/internal/heart)
/datum/bounty/item/assistant/statue
name = "Statue"
description = "%BOSSNAME would like to commision an artsy statue for the lobby. Ship one out, when possible."
reward_low = 2200
reward_high = 2800
wanted_types = list(/obj/structure/sculpting_block)
/datum/bounty/item/assistant/statue/applies_to(var/obj/structure/sculpting_block/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.sculpted)
return TRUE
return FALSE
/datum/bounty/item/assistant/tajcard
name = "Collectable Card"
description = "%PERSONNAME is offering a bonus to any station that can help them expand their collection of collectable tajaran cards."
reward_low = 1800
reward_high = 2400
required_count = 2
wanted_types = list(/obj/item/tajcard)
/datum/bounty/item/assistant/jetpack
name = "Jetpacks"
description = "We're engaging in an EVA training initiative for new miners. Ship us a few jetpacks for a station bonus."
reward_low = 3000
reward_high = 4000
required_count = 3
random_count = 1
wanted_types = list(/obj/item/tank/jetpack)
/datum/bounty/item/assistant/cleaner
name = "Space Cleaner"
description = "The janitorial division of the ERT is requesting some actual supplies, to insist they aren't a joke. They're putting up for a bounty, so humor them if you want."
reward_low = 1000
reward_high = 1500
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/spray)
/datum/bounty/item/assistant/cleaner/applies_to(var/obj/item/reagent_containers/spray/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.reagents.get_reagent_amount(/datum/reagent/spacecleaner) >= 200)
return TRUE
return FALSE
//Can't wait to see people have fun with THIS one.
/datum/bounty/item/assistant/photograph
name = "Photographs"
description = "The %DOCKNAME is holding a morale project, and part of that is to display photographs from the various stations. Send us some for a participation bonus!"
reward_low = 1500
reward_high = 2500
required_count = 8
random_count = 2
wanted_types = list(/obj/item/photo)
+18 -14
View File
@@ -1,45 +1,49 @@
/datum/bounty/item/bot/mark_high_priority(scale_reward)
return ..(max(scale_reward * 0.7, 1.2))
/datum/bounty/item/bot/cleanbot
name = "Cleanbot"
description = "There has been a incident out our crusher which resulted in the death of multiple janitors. Ship a replacement."
reward = 2000
description = "There has been a incident out our crusher which resulted in the tragic death of multiple cleanbots. Ship a few replacements."
reward_low = 2700
reward_high = 3700
required_count = 3
wanted_types = list(/mob/living/bot/cleanbot)
/datum/bounty/item/bot/secbot
name = "Secbot"
description = "To revitalise the residential zones on the Odin management has decided to increase the security presence. Ship us a few security bots."
reward = 2500
description = "To revitalise the residential zones on the %DOCKSHORT, management has decided to increase the security presence. Ship us a few security bots."
reward_low = 4000
reward_high = 4500
required_count = 2
wanted_types = list(/mob/living/bot/secbot)
/datum/bounty/item/bot/ed209
name = "ED 209"
description = "To increase the security presence at our checkpoints we need a couple of ED209s."
reward = 5000
reward_low = 8500
reward_high = 9500
required_count = 2
wanted_types = list(/mob/living/bot/secbot/ed209)
/datum/bounty/item/bot/farmbot
name = "Farmbot"
description = "After a k'ois incident multiple botanists are hospitalized. Provide a farmbot to replace them."
reward = 2000
description = "After a k'ois incident multiple botanists were hospitalized. Provide a few farmbots to handle their duties while they recover."
reward_low = 3700
reward_high = 4300
required_count = 3
random_count = 1
wanted_types = list(/mob/living/bot/farmbot)
/datum/bounty/item/bot/floorbot
name = "Floorbot"
description = "We need a few floorbots to assist our engineers in expanding a managers office."
reward = 5000
description = "We need a few floorbots to assist our engineers in expanding some offices."
reward_low = 4000
reward_high = 4500
required_count = 4
random_count = 1
wanted_types = list(/mob/living/bot/floorbot)
/datum/bounty/item/bot/medbot
name = "Medbot"
description = "We were unable to recruit a sufficient number of qualified medical professionals this month. Ship us a few medbots to fill the void."
reward = 4000
reward_low = 5500
reward_high = 6000
required_count = 2
wanted_types = list(/mob/living/bot/medbot)
+205 -54
View File
@@ -1,114 +1,265 @@
/datum/bounty/item/chef/applies_to(obj/O)
if(!..())
return FALSE
if(!istype(O, /obj/item/reagent_containers/food/snacks))
return FALSE
var/obj/item/reagent_containers/food/snacks/S = O
if(!S.bitecount) //They're not gonna take bitten food.
return TRUE
return FALSE
/datum/bounty/item/chef/birthday_cake
name = "Birthday Cake"
description = "A birthday party is coming up! Ship a complete birthday cake to celebrate!"
reward = 4000
description = "A birthday party for %PERSONNAME is coming up! Ship a complete birthday cake to celebrate!"
reward_low = 3000
reward_high = 4000
wanted_types = list(
/obj/item/reagent_containers/food/snacks/variable/cake,
/obj/item/reagent_containers/food/snacks/sliceable/cake)
/datum/bounty/item/chef/soup
name = "Soup"
description = "To quell the homeless uprising, %COMPNAME will be serving soup to all underpaid workers. Ship any type of soup."
reward = 3000
description = "%COMPNAME will be serving soup to the homeless for a PR initiative. Ship any type of soup. And make sure it's soup- not just hot water."
reward_low = 2700
reward_high = 3500
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/soup)
exclude_types = list(/obj/item/reagent_containers/food/snacks/soup/wish)
/datum/bounty/item/chef/popcorn
name = "Popcorn Bags"
description = "Upper management wants to host a movie night. Ship bags of popcorn for the occasion."
reward = 3000
required_count = 3
description = "%PERSONNAME wants to host a movie night. Ship bags of popcorn for the occasion."
reward_low = 2300
reward_high = 3000
required_count = 4
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/popcorn)
/datum/bounty/item/chef/icecreamsandwich
name = "Ice Cream Sandwiches"
description = "The Air Conditioning System in the CCIA Offices has failed. Ship some icecream."
reward = 4000
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/icecreamsandwich)
/datum/bounty/item/chef/icecream
name = "Ice Cream"
description = "The air conditioning system of some offices on %DOCKSHORT has failed. Ship some ice cream before we melt."
reward_low = 4000
reward_high = 4500
required_count = 4
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/icecreamsandwich, /obj/item/reagent_containers/food/snacks/icecream)
/datum/bounty/item/chef/icecream/applies_to(obj/O)
if(!..())
return FALSE
if(istype(O, /obj/item/reagent_containers/food/snacks/icecreamsandwich))
return TRUE
var/obj/item/reagent_containers/food/snacks/icecream/I = O
if(I?.ice_creamed)
return TRUE
return FALSE
/datum/bounty/item/chef/pie
name = "Pie"
description = "%BOSSSHORT management wants a pie! Ship one pie."
reward = 3000
wanted_types = list(/obj/item/reagent_containers/food/snacks/pie)
reward = 3142
wanted_types = list(/obj/item/reagent_containers/food/snacks/pie,
/obj/item/reagent_containers/food/snacks/meatpie,
/obj/item/reagent_containers/food/snacks/tofupie,
/obj/item/reagent_containers/food/snacks/amanita_pie,
/obj/item/reagent_containers/food/snacks/plump_pie,
/obj/item/reagent_containers/food/snacks/xemeatpie,
/obj/item/reagent_containers/food/snacks/cherrypie)
/datum/bounty/item/chef/salad
name = "Salad"
description = "%BOSSSHORT management is going on a health binge. Your order is to ship salad."
reward = 3000
description = "%BOSSSHORT management is going on a health binge. Ship some tasty salads to help keep them on track."
reward_low = 2800
reward_high = 3800
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/salad)
/datum/bounty/item/chef/carrotfries
name = "Carrot Fries"
description = "A health craze has started among management. A shipment of carrot fries is the order."
reward = 3500
/datum/bounty/item/chef/fries
name = "Fries"
description = "Sometimes the whole office just gets a craving for a certain food. Today, it's fries. Ship some!"
reward_low = 2800
reward_high = 3800
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/carrotfries)
wanted_types = list(/obj/item/reagent_containers/food/snacks/carrotfries,
/obj/item/reagent_containers/food/snacks/fries,
/obj/item/reagent_containers/food/snacks/chilicheesefries,
/obj/item/reagent_containers/food/snacks/cheesyfries)
/datum/bounty/item/chef/superbite
name = "Super Bite Burger"
description = "Commander Tubbs thinks he can set a competitive eating world record. All he needs is a super bite burger shipped to him."
reward = 12000
description = "%PERSONNAME thinks they can set a competitive eating world record. All they need is a super bite burger shipped to them."
reward_low = 11500
reward_high = 13500
wanted_types = list(/obj/item/reagent_containers/food/snacks/burger/superbite)
/datum/bounty/item/chef/superbite/compatible_with(var/datum/other_bounty)
if(istype(other_bounty, /datum/bounty/item/chef/burger))
return FALSE
return ..()
/datum/bounty/item/chef/poppypretzel
name = "Poppy Pretzel"
description = "%BOSSNAME needs a poppy pretzel for the drug-training of their security department."
reward = 3000
description = "%BOSSNAME needs a few poppy pretzels for the drug-training of their security department."
reward_low = 2600
reward_high = 3200
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/poppypretzel)
/datum/bounty/item/chef/cubancarp
name = "Cuban Carp"
description = "A Adhomai Representative is visiting %BOSSSHORT. Ship one cuban carp."
reward = 8000
description = "A diplomat is visiting %BOSSSHORT. Ship one cuban carp for the business luncheon."
reward_low = 8200
reward_high = 9200
wanted_types = list(/obj/item/reagent_containers/food/snacks/cubancarp)
/datum/bounty/item/chef/hotdog
name = "Hot Dog"
description = "%COMPNAME is conducting taste tests to determine the best hot dog recipe. Ship your station's version to participate."
reward = 8000
reward_low = 4000
reward_high = 4800
wanted_types = list(/obj/item/reagent_containers/food/snacks/hotdog)
/datum/bounty/item/chef/lemon
name = "Lemons"
description = "A commander needs fresh lemons. Ship him a few and he'll deposit the money into the station's account."
reward = 4000
required_count = 10
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown)
/datum/bounty/item/chef/lemon/applies_to(obj/O)
if(!..())
return FALSE
var/obj/item/reagent_containers/food/snacks/grown/L = O
if(L && L.plantname == "lemon")
return TRUE
return FALSE
/datum/bounty/item/chef/eggplantparm
name = "Eggplant Parmigianas"
description = "A famous singer will be arriving at %BOSSSHORT, and their contract demands that they only be served Eggplant Parmigiana. Ship some, please!"
reward = 3500
reward_low = 4000
reward_high = 4800
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/eggplantparm)
/datum/bounty/item/chef/muffin
name = "Muffins"
description = "%BOSSSHORT needs muffins! Your order is to rectify this."
reward = 3000
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/muffin)
description = "%BOSSSHORT needs muffins for a morning meeting! Your station will get a bonus if you ship some."
reward_low = 3500
reward_high = 4200
required_count = 8
random_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/muffin,
/obj/item/reagent_containers/food/snacks/nt_muffin,
/obj/item/reagent_containers/food/snacks/berrymuffin)
/datum/bounty/item/chef/chawanmush
name = "Chawanmushi"
description = "Someone from middle-management mentioned Chawanmushi. We never tried them so we need you to ship Chawanmushi immediately."
reward = 8000
description = "Someone from middle-management mentioned Chawanmushi. We never tried them so we need you to ship some immediately."
reward_low = 6500
reward_high = 7500
required_count = 2
wanted_types = list(/obj/item/reagent_containers/food/snacks/chawanmushi)
/datum/bounty/item/chef/kebab
name = "Kebabs"
description = "%BOSSSHORT is requesting a special order, please ship some kebabs."
reward = 3500
description = "%BOSSNAME is requesting a special order; please ship some kebabs."
reward_low = 3500
reward_high = 4200
required_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/variable/kebab)
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/variable/kebab,
/obj/item/reagent_containers/food/snacks/monkeykabob,
/obj/item/reagent_containers/food/snacks/tofukabob,
/obj/item/reagent_containers/food/snacks/koiskebab3,
/obj/item/reagent_containers/food/snacks/donerkebab)
/datum/bounty/item/chef/poppers
name = "Jalapeno Poppers"
description = "%PERSONNAME is trying to set a system record for most jalapeno poppers held in their mouth at once. Don't ask questions, just send them."
reward_low = 4500
reward_high = 5200
required_count = 8
random_count = 3
wanted_types = list(/obj/item/reagent_containers/food/snacks/jalapeno_poppers)
/datum/bounty/item/chef/burger
name = "Burger"
description = "%PERSONNAME is this month's food critic for a local newsletter and they're on a deadline. Give them some burgers to review."
reward_low = 1200
reward_high = 2000
required_count = 2
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/burger)
/datum/bounty/item/chef/burger/compatible_with(var/datum/other_bounty)
if(istype(other_bounty, /datum/bounty/item/chef/superbite))
return FALSE
return ..()
/datum/bounty/item/chef/fortune
name = "Fortune Cookies"
description = "%PERSONNAME claims they can do divination based on fortune cookies. Send a batch so we can find out if it's true."
reward_low = 2000
reward_high = 3000
required_count = 7
random_count = 2
wanted_types = list(/obj/item/reagent_containers/food/snacks/fortunecookie)
/datum/bounty/item/chef/spaghetti
name = "Spaghetti"
description = "We're hosting a luncheon for some %COMPSHORT Academy computer programming students. We heard that they really enjoy spaghetti, so ship some!"
reward_low = 2200
reward_high = 3200
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/boiledspagetti,
/obj/item/reagent_containers/food/snacks/pastatomato,
/obj/item/reagent_containers/food/snacks/meatballspagetti)
/datum/bounty/item/chef/dumplings
name = "Meat Buns or Momo"
description = "We're sick of eating vendor food; send us some meat buns or momo."
reward_low = 3200
reward_high = 4100
required_count = 4
random_count = 2
wanted_types = list(/obj/item/reagent_containers/food/snacks/meatbun,
/obj/item/reagent_containers/food/snacks/chickenmomo,
/obj/item/reagent_containers/food/snacks/veggiemomo)
/datum/bounty/item/chef/unathi
name = "Unathi Delicacies"
description = "We're holding a luncheon with some Hegemony representatives; send some traditional Unathi dishes!"
reward_low = 3500
reward_high = 5500
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/chilied_eggs,
/obj/item/reagent_containers/food/snacks/hatchling_suprise,
/obj/item/reagent_containers/food/snacks/red_sun_special,
/obj/item/reagent_containers/food/snacks/riztizkzi_sea,
/obj/item/reagent_containers/food/snacks/sliceable/sushi_roll)
/datum/bounty/item/chef/tajara
name = "Adhomai Delicacies"
description = "We're holding a luncheon with some representatives from Adhomai; send some traditional Tajaran dishes!"
reward_low = 3500
reward_high = 5500
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/stew/tajaran,
/obj/item/reagent_containers/food/snacks/soup/earthenroot,
/obj/item/reagent_containers/food/snacks/tajaran_bread,
/obj/item/reagent_containers/food/snacks/spicy_clams,
/obj/item/reagent_containers/food/snacks/hardbread,
/obj/item/reagent_containers/food/snacks/tajcandy,
/obj/item/reagent_containers/food/snacks/lardwich)
/datum/bounty/item/chef/curry
name = "Curry"
description = "I forgot that I was supposed to host lunch for an upcoming meeting. Ship me some curry and I'll make sure your station gets a bonus. - %PERSONNAME"
reward_low = 3000
reward_high = 3900
required_count = 4
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/redcurry,
/obj/item/reagent_containers/food/snacks/greencurry,
/obj/item/reagent_containers/food/snacks/yellowcurry)
/datum/bounty/item/chef/dip
name = "Dip"
description = "It's time for an office party, but %PERSONNAME forgot the dip! Send us some and we'll transfer part of their upcoming bonus to your station's account."
reward_low = 2500
reward_high = 3000
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/dip)
+154
View File
@@ -0,0 +1,154 @@
/datum/bounty/item/engineer/comfy_chair
name = "Comfy Chairs"
description = "%PERSONNAME is unhappy with their chair. They claim it hurts their back. Have engineers craft some alternatives and ship them out to humor them."
reward_low = 2400
reward_high = 3900
required_count = 4
random_count = 2
wanted_types = list(/obj/structure/bed/chair/comfy)
/datum/bounty/item/engineer/smes_coil
name = "Superconductive magnetic coil"
description = "A xenobotanist from the NSS Upsilon sent us a gigantic lemon. We're turning it into a battery; send us an SMES coil so we can contain its power."
reward_low = 4000
reward_high = 4500
wanted_types = list(/obj/item/smes_coil)
/datum/bounty/item/engineer/solar
name = "Solar Assemblies or Trackers"
description = "A meteor shower ruined some backup solar arrays on the %DOCKNAME; ship us some assemblies or tracker electronics so we can expedite repairs."
reward_low = 6500
reward_high = 8700
required_count = 6
random_count = 2
wanted_types = list(/obj/item/solar_assembly, /obj/item/tracker_electronics)
/datum/bounty/item/engineer/eshield
name = "Emergency Shields"
description = "Another station is requesting emergency energy shields. Apparently there was a baby carp migration and they want to set up a safe play area for them. Treat this as urgent."
reward_low = 7500
reward_high = 9000
required_count = 2
wanted_types = list(/obj/machinery/shield)
/datum/bounty/item/engineer/firesuit
name = "Firesuits"
description = "I'm about to drop my mixtape in our next meeting. Send some suits to protect management from this straight FIRE. - %PERSONNAME"
reward_low = 2000
reward_high = 3200
required_count = 2
random_count = 1
wanted_types = list(/obj/item/clothing/suit/fire)
/datum/bounty/item/engineer/fuel_tank
name = "Fuel Tank"
description = "After some observations of the Aurora, we think it's best if you send us a few of those fuel tanks so nobody hurts themselves."
reward_low = 2500
reward_high = 3500
required_count = 4
random_count = 2
wanted_types = list(/obj/structure/reagent_dispensers/fueltank)
/datum/bounty/item/engineer/fuel_tank/applies_to(var/obj/structure/reagent_dispensers/fueltank/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.reagents.get_reagent_amount(/datum/reagent/fuel) >= 750)
return TRUE
return FALSE
/datum/bounty/item/engineer/phoron_tank
name = "Full Tank of Phoron"
description = "Another station has requested supplies to test a new engine. In particular, they request a full tank of phoron. Please don't send a whole canister; they'll get... ideas."
reward_low = 2200
reward_high = 3200
wanted_types = list(/obj/item/tank)
var/moles_required = 20 // A full tank is 28 moles, but we give some leeway.
/datum/bounty/item/engineer/phoron_tank/applies_to(var/obj/item/tank/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(!O.air_contents.gas["phoron"])
return FALSE
return O.air_contents.gas["phoron"] >= moles_required
/datum/bounty/item/engineer/vending
name = "Vending Machines"
description = "We're researching the cause of the widespread brand intelligence virus. Send us some vending machines of any kind from your station so we can examine them. Just get permission, first."
reward_low = 3500
reward_high = 5000
required_count = 4
random_count = 1
wanted_types = list(/obj/machinery/vending)
/datum/bounty/item/engineer/coffin
name = "Coffins"
description = "%PERSONNAME is holding a funeral service for some brave maintenance drones. Kind of weird, but they're a nice person and willing to put up for a bounty. Ship us some urns or wooden coffins to humor them."
reward_low = 2500
reward_high = 3000
required_count = 3
random_count = 1
wanted_types = list(/obj/structure/closet/coffin, /obj/item/material/urn)
/datum/bounty/item/engineer/pap
name = "Portable Air Pumps"
description = "After a breach, some employees have been opening emergency shutters with no regard for their safety. Send us some pumps with at least 5,000kpa of air mix to get this taken care of quickly."
reward_low = 7200
reward_high = 8800
required_count = 3
wanted_types = list(/obj/machinery/portable_atmospherics/powered/pump)
/datum/bounty/item/engineer/pap/applies_to(var/obj/machinery/portable_atmospherics/powered/pump/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.holding.air_contents.return_pressure() >= 5000)
return TRUE
return FALSE
/datum/bounty/item/engineer/spaceac
name = "Space A/C"
description = "The A/C is out in our offices, and everyone's talking about ice cream. I'm authorizing a bounty for some actual A/C units, since that will actually solve the issue. - %PERSONNAME"
reward_low = 5000
reward_high = 6500
required_count = 3
random_count = 1
wanted_types = list(/obj/machinery/space_heater)
/datum/bounty/item/engineer/pipe
name = "Atmospheric Pipe Dispenser"
description = "We need another pipe dispenser to help expedite an atmospherics project. The station will get a bonus if you send us a pipe dispenser."
reward_low = 5000
reward_high = 5700
wanted_types = list(/obj/machinery/pipedispenser)
exclude_types = list(/obj/machinery/pipedispenser/disposal)
/datum/bounty/item/engineer/disposal
name = "Disposal Pipe Dispenser"
description = "The %DOCKSHORT is undergoing an overhaul of its mail delivery chutes. Lend us a dispenser to help expedite it for a bonus."
reward_low = 5000
reward_high = 5700
wanted_types = list(/obj/machinery/pipedispenser/disposal)
/datum/bounty/item/engineer/bookcase
name = "Bookcases"
description = "We're showing some love to one of the libraries on the %DOCKSHORT. A bonus will be paid to any station who has some skilled engineers build some for us."
reward_low = 6000
reward_high = 7000
required_count = 4
random_count = 1
wanted_types = list(/obj/structure/bookcase)
/datum/bounty/item/engineer/generator
name = "Portable Generators"
description = "Another station reported some engine troubles, and needs a few portable generators to maintain critical operations. Ship any type of P.A.C.M.A.N. generators to receive a bonus."
reward_low = 5000
reward_high = 6200
required_count = 2
random_count = 1
wanted_types = list(/obj/machinery/power/port_gen/pacman)
+108
View File
@@ -0,0 +1,108 @@
//Hydro bounties. Things that can be biogenerated and stuff
/datum/bounty/item/hydroponicist/potato_cells
name = "Potato Batteries"
description = "%BOSSNAME is researching an environmentally-friendly power source on another station. Send us some potato batteries."
reward_low = 2000
reward_high = 3000
required_count = 6
random_count = 3
wanted_types = list(/obj/item/cell/potato)
/datum/bounty/item/hydroponicist/ert
name = "Rations"
description = "%BOSSSHORT is sending ERT out on a long mission. We need some long-lasting rations for them to eat!"
reward_low = 2200
reward_high = 2800
required_count = 6
random_count = 2
wanted_types = list(/obj/item/reagent_containers/food/snacks/liquidfood, /obj/item/pen/crayon)
/datum/bounty/item/hydroponicist/towels
name = "Towels"
description = "%BOSSSHORT is having the sickest pool party ever. Send us some towels for a reward, and maybe an invitation!"
reward_low = 3000
reward_high = 3500
required_count = 8
random_count = 3
wanted_types = list(/obj/item/towel, /obj/item/towel_flat)
/datum/bounty/item/hydroponicist/gloves
name = "Botanical Gloves"
description = "%BOSSNAME is participating in a massive tree-planting initiative on Biesel. Help us help the company's image by sending our volunteers some gardening gloves!"
reward_low = 2200
reward_high = 3000
required_count = 4
random_count = 1
wanted_types = list(/obj/item/clothing/gloves/botanic_leather)
/datum/bounty/item/hydroponicist/flower_crown
name = "Flower Crowns"
description = "It's time for the monthly %COMPNAME company dance. This month's theme is floral in nature, so send us some flower crowns to give to attendees."
reward_low = 3600
reward_high = 4400
required_count = 6
random_count = 2
wanted_types = list(/obj/item/clothing/head/sunflower_crown, /obj/item/clothing/head/lavender_crown, /obj/item/clothing/head/poppy_crown)
/datum/bounty/item/assistant/animal_cubes
name = "Xeno Cubes"
description = "Monkeys are very limiting for xenostudies research. Please ship some alternative cubes (wrapped) to alleviate a shortage experienced by our other labs."
reward_low = 2000
reward_high = 2600
required_count = 4
random_count = 1
wanted_types = list(/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/farwacube,
/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/stokcube,
/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube,
/obj/item/reagent_containers/food/snacks/monkeycube/wrapped/vkrexicube)
/datum/bounty/item/hydroponicist/produce
name = "Produce - Any"
description = "%BOSSNAME is in need of a bundle of fresh produce. Send your best!"
reward_low = 3000
reward_high = 3500
required_count = 18
random_count = 5
wanted_types = list(/obj/item/reagent_containers/food/snacks/grown)
var/list/produce_picks = list(/datum/seed)
/datum/bounty/item/hydroponicist/produce/applies_to(var/obj/item/reagent_containers/food/snacks/grown/O)
if(!istype(O))
return FALSE
if(O.bitecount > 0) //still not accepting partially-eaten food
return FALSE
if(is_type_in_list(O.seed, produce_picks)) //check if it's a type we want.
return TRUE
return FALSE
/datum/bounty/item/hydroponicist/produce/fruit
name = "Produce - Fruit"
description = "%BOSSNAME is in need of a bundle of fresh fruit. Send your best!"
required_count = 12
random_count = 3
produce_picks = list(/datum/seed/tomato,
/datum/seed/berry,
/datum/seed/apple,
/datum/seed/grapes,
/datum/seed/banana,
/datum/seed/watermelon,
/datum/seed/citrus,
/datum/seed/cherries,
/datum/seed/nifberries,
/datum/seed/dyn,
/datum/seed/wulumunusha,
/datum/seed/sugartree)
/datum/bounty/item/hydroponicist/produce/mushroom
name = "Produce - Mushrooms"
description = "%BOSSNAME is in need of some fresh mushrooms. Send your best!"
required_count = 15
random_count = 3
produce_picks = list(/datum/seed/mushroom)
/datum/bounty/item/hydroponicist/produce/tobacco
name = "Produce - Tobacco"
description = "%BOSSNAME is in need of some fresh tobacco leaves. Send your best!"
required_count = 10
random_count = 2
produce_picks = list(/datum/seed/tobacco)
+10 -3
View File
@@ -1,14 +1,21 @@
/datum/bounty/item
var/required_count = 1
var/shipped_count = 0
var/list/wanted_types // Types accepted for the bounty.
var/list/wanted_types = list() // Types accepted for the bounty.
var/include_subtypes = TRUE // Set to FALSE to make the datum apply only to a strict type.
var/list/exclude_types // Types excluded.
var/list/exclude_types = list() // Types excluded.
var/random_count = 0 //number. This will randomize required_count when initialized by picking a random amount of required_count + and - this number. at least 1 will always be required count. Leave at 0 to not randomize.
/datum/bounty/item/New()
..()
wanted_types = typecacheof(wanted_types)
exclude_types = typecacheof(exclude_types)
if(random_count > 0)
required_count = rand(max(1, required_count - random_count), required_count + random_count)
//adjust the reward. If more than standard required_count, increase reward. If less, decrease.
//Will make the reward more/less depending if it was randomized to require more/less, by 5% of the item's reward per difference. Not huge.
reward += (required_count - initial(required_count)) * round(reward * 0.05, 10)
/datum/bounty/item/completion_string()
return {"[shipped_count]/[required_count]"}
@@ -28,6 +35,6 @@
return
shipped_count += 1
/datum/bounty/item/compatible_with(datum/other_bounty)
/datum/bounty/item/compatible_with(var/datum/other_bounty)
return type != other_bounty.type
+118 -65
View File
@@ -2,6 +2,12 @@
var/required_volume = 10
var/shipped_volume = 0
var/datum/reagent/wanted_reagent
var/list/possible_descriptions = list("We're interested in testing the quality of our stations' bartenders!",
"We're holding an office party and need some drink variety.",
"We're holding a mixing competition, and you'll receive a bonus for competing.",
"One of our agents has had a hard day and needs to unwind so badly they're willing to put up for a bounty.",
"We need some drinks for a PR campaign setup.",
"One of our bartenders is having trouble getting inspired, and wants to see a different drink.")
/datum/bounty/reagent/completion_string()
return {"[round(shipped_volume)]/[required_volume] Units"}
@@ -31,94 +37,141 @@
/datum/bounty/reagent/simple_drink
name = "Simple Drink"
reward = 1500
reward_low = 1000
reward_high = 1800
/datum/bounty/reagent/simple_drink/New()
..()
// Don't worry about making this comprehensive. It doesn't matter if some drinks are skipped.
var/static/list/possible_reagents = list(\
/datum/reagent/alcohol/ethanol/antifreeze,\
/datum/reagent/alcohol/ethanol/andalusia,\
/datum/reagent/alcohol/ethanol/coffee/b52,\
/datum/reagent/alcohol/ethanol/bananahonk,\
/datum/reagent/alcohol/ethanol/beepsky_smash,\
/datum/reagent/alcohol/ethanol/bilk,\
/datum/reagent/alcohol/ethanol/black_russian,\
/datum/reagent/alcohol/ethanol/bloody_mary,\
/datum/reagent/alcohol/ethanol/martini,\
/datum/reagent/alcohol/ethanol/cubalibre,\
/datum/reagent/alcohol/ethanol/erikasurprise,\
/datum/reagent/alcohol/ethanol/ginfizz,\
/datum/reagent/alcohol/ethanol/gintonic,\
/datum/reagent/alcohol/ethanol/grog,\
/datum/reagent/alcohol/ethanol/hooch,\
/datum/reagent/alcohol/ethanol/iced_beer,\
/datum/reagent/alcohol/ethanol/irishcarbomb,\
/datum/reagent/alcohol/ethanol/manhattan,\
/datum/reagent/alcohol/ethanol/margarita,\
/datum/reagent/alcohol/ethanol/gargle_blaster,\
/datum/reagent/alcohol/ethanol/screwdrivercocktail,\
/datum/reagent/alcohol/ethanol/snowwhite,\
/datum/reagent/drink/coffee/soy_latte,\
/datum/reagent/drink/coffee/cafe_latte,\
/datum/reagent/alcohol/ethanol/gibsonhooch,\
/datum/reagent/alcohol/ethanol/manly_dorf,\
/datum/reagent/alcohol/ethanol/thirteenloko,\
/datum/reagent/alcohol/ethanol/vodkamartini,\
/datum/reagent/alcohol/ethanol/whiskeysoda,\
/datum/reagent/alcohol/ethanol/demonsblood,\
/datum/reagent/alcohol/ethanol/singulo)
var/list/possible_reagents = list(
/datum/reagent/alcohol/ethanol/antifreeze,
/datum/reagent/alcohol/ethanol/andalusia,
/datum/reagent/alcohol/ethanol/coffee/b52,
/datum/reagent/alcohol/ethanol/bananahonk,
/datum/reagent/alcohol/ethanol/bilk,
/datum/reagent/alcohol/ethanol/blackrussian,
/datum/reagent/alcohol/ethanol/bloodymary,
/datum/reagent/alcohol/ethanol/martini,
/datum/reagent/alcohol/ethanol/cubalibre,
/datum/reagent/alcohol/ethanol/erikasurprise,
/datum/reagent/alcohol/ethanol/ginfizz,
/datum/reagent/alcohol/ethanol/gintonic,
/datum/reagent/alcohol/ethanol/grog,
/datum/reagent/alcohol/ethanol/iced_beer,
/datum/reagent/alcohol/ethanol/irishcarbomb,
/datum/reagent/alcohol/ethanol/manhattan,
/datum/reagent/alcohol/ethanol/margarita,
/datum/reagent/alcohol/ethanol/gargleblaster,
/datum/reagent/alcohol/ethanol/screwdrivercocktail,
/datum/reagent/alcohol/ethanol/cobaltvelvet,
/datum/reagent/alcohol/ethanol/snowwhite,
/datum/reagent/alcohol/ethanol/gibsonhooch,
/datum/reagent/alcohol/ethanol/manly_dorf,
/datum/reagent/alcohol/ethanol/thirteenloko,
/datum/reagent/alcohol/ethanol/vodkamartini,
/datum/reagent/alcohol/ethanol/whiskeysoda,
/datum/reagent/alcohol/ethanol/demonsblood,
/datum/reagent/alcohol/ethanol/cinnamonapplewhiskey,
/datum/reagent/drink/coffee/soy_latte,
/datum/reagent/drink/coffee/cafe_latte,
/datum/reagent/drink/tea/coco_chaitea,
/datum/reagent/drink/tea/chaitealatte,
/datum/reagent/drink/tea/bureacratea,
/datum/reagent/drink/tea/desert_tea,
/datum/reagent/drink/tea/hakhma_tea,
/datum/reagent/drink/tea/portsvilleminttea,
/datum/reagent/drink/meatshake,
/datum/reagent/alcohol/butanol/sandgria,
/datum/reagent/alcohol/butanol/cactuscola,
/datum/reagent/alcohol/butanol/trizkizki_tea)
var/reagent_type = pick(possible_reagents)
var/datum/reagent/reagent_type = pick(possible_reagents)
wanted_reagent = new reagent_type
name = wanted_reagent.name
description = "%BOSSSHORT is thirsty! Send a shipment of [name] to %DOCKNAME to quench the company's thirst."
reward += rand(0, 2) * 500
..()
description = "[pick(possible_descriptions)] Send a shipment of [name]." //punctuation is already in pick()
required_volume = rand(2, 12) * 10
reward += required_volume * 20 //range from +400(20u) to +2400(120u)
//Complex drinks. Requires coordination with other departments for ingredients
/datum/bounty/reagent/complex_drink
name = "Complex Drink"
reward = 4000
reward_low = 2000
reward_high = 3200
/datum/bounty/reagent/complex_drink/New()
..()
// Don't worry about making this comprehensive. It doesn't matter if some drinks are skipped.
var/static/list/possible_reagents = list(\
/datum/reagent/alcohol/ethanol/atomicbomb,\
/datum/reagent/alcohol/ethanol/booger,\
/datum/reagent/alcohol/ethanol/hippies_delight,\
/datum/reagent/alcohol/ethanol/goldschlager,\
/datum/reagent/alcohol/ethanol/manhattan_proj,\
/datum/reagent/alcohol/ethanol/neurotoxin,\
/datum/reagent/alcohol/ethanol/patron,\
/datum/reagent/alcohol/ethanol/silencer)
var/list/possible_reagents = list(
/datum/reagent/alcohol/ethanol/hooch,
/datum/reagent/alcohol/ethanol/atomicbomb,
/datum/reagent/alcohol/ethanol/beepsky_smash,
/datum/reagent/alcohol/ethanol/booger,
/datum/reagent/alcohol/ethanol/hippiesdelight,
/datum/reagent/alcohol/ethanol/goldschlager,
/datum/reagent/alcohol/ethanol/manhattan_proj,
/datum/reagent/alcohol/ethanol/neurotoxin,
/datum/reagent/alcohol/ethanol/singulo,
/datum/reagent/alcohol/ethanol/patron,
/datum/reagent/alcohol/ethanol/silencer,
/datum/reagent/alcohol/ethanol/cbsc,
/datum/reagent/alcohol/ethanol/rixulin_sundae,
/datum/reagent/drink/xrim,
/datum/reagent/drink/tea/securitea,
/datum/reagent/drink/toothpaste/sedantian_firestorm,
/datum/reagent/alcohol/butanol/wastelandheat,
/datum/reagent/alcohol/butanol/contactwine,
/datum/reagent/alcohol/butanol/crocodile_booze)
var/reagent_type = pick(possible_reagents)
wanted_reagent = new reagent_type
name = wanted_reagent.name
description = "%BOSSSHORT is offering a reward for talented bartenders. Ship a container of [name] to claim the prize."
reward += rand(0, 4) * 500
..()
description = "[pick(possible_descriptions)] Send a shipment of [name]." //punctuation is already in pick()
required_volume = rand(2, 12) * 10
reward += required_volume * 30 //range from +600(20u) to +3600(120u)
//Medicines, toxins, and drugs
/datum/bounty/reagent/chemical
name = "Chemical"
reward = 4000
required_volume = 30
reward_low = 2000
reward_high = 3200
/datum/bounty/reagent/chemical/New()
..()
// Don't worry about making this comprehensive. It doesn't matter if some chems are skipped.
var/static/list/possible_reagents = list(\
/datum/reagent/leporazine,\
/datum/reagent/clonexadone,\
/datum/reagent/rezadone,\
/datum/reagent/space_drugs,\
/datum/reagent/thermite,\
/datum/reagent/nutriment/honey,\
/datum/reagent/frostoil,\
/datum/reagent/slimejelly,\
/datum/reagent/toxin/cyanide)
var/list/possible_reagents = list(
/datum/reagent/leporazine,
/datum/reagent/clonexadone,
/datum/reagent/space_drugs,
/datum/reagent/thermite,
/datum/reagent/antihistamine,
/datum/reagent/sterilizine,
/datum/reagent/mental/duloxetine,
/datum/reagent/mental/escitalopram,
/datum/reagent/mental/risperidone,
/datum/reagent/rmt,
/datum/reagent/tramadol,
/datum/reagent/oxycodone,
/datum/reagent/imidazoline,
/datum/reagent/peridaxon,
/datum/reagent/mannitol,
/datum/reagent/ipecac,
/datum/reagent/hyperzine,
/datum/reagent/calomel,
/datum/reagent/pacifier,
/datum/reagent/dexalin/plus,
/datum/reagent/ryetalyn,
/datum/reagent/pneumalin,
/datum/reagent/acid/polyacid,
/datum/reagent/mutagen,
/datum/reagent/impedrezene,
/datum/reagent/night_juice,
/datum/reagent/toxin/cardox,
/datum/reagent/toxin/lean,
/datum/reagent/toxin/stimm)
var/reagent_type = pick(possible_reagents)
wanted_reagent = new reagent_type
name = wanted_reagent.name
description = "%BOSSSHORT is in desperate need of the chemical [name]. Ship a container of it to be rewarded."
reward += rand(0, 4) * 500
..()
description = "One of our labs is in desperate need of [name]. Ship a container of it to be rewarded."
required_volume = rand(2, 12) * 10
reward += required_volume * 40 //range from +800(20u) to +4800(120u)
+69 -57
View File
@@ -1,52 +1,88 @@
/datum/bounty/item/science/boh
name = "Bag of Holding"
description = "%COMPNAME would make good use of high-capacity backpacks. If you have any, please ship them."
reward = 10000
description = "%COMPNAME would make good use of a high-capacity backpack. If you have any, please ship them."
reward_low = 6000
reward_high = 7200
wanted_types = list(/obj/item/storage/backpack/holding)
/datum/bounty/item/science/nightvision_goggles
name = "Night Vision Goggles"
description = "An electrical storm has busted all the lights at %BOSSSHORT. While management is waiting for replacements, perhaps some night vision goggles can be shipped?"
reward = 10000
reward_low = 5200
reward_high = 6000
wanted_types = list(/obj/item/clothing/glasses/night)
/datum/bounty/item/science/experimental_welding_tool
name = "Experimental Welding Tool"
description = "A recent accident has left most of %BOSSSHORT's welding tools exploded. Ship replacements to be rewarded."
reward = 10000
reward_low = 5200
reward_high = 6000
required_count = 3
random_count = 1
wanted_types = list(/obj/item/weldingtool/experimental)
/datum/bounty/item/science/cryostasis_beaker
name = "Cryostasis Beaker"
description = "Chemists at %BOSSNAME have discovered a new chemical that can only be held in cryostasis beakers. The only problem is they don't have any! Rectify this to receive payment."
reward = 10000
description = "Chemists at %BOSSNAME have discovered a new chemical that can only be held in cryostasis beakers. The only problem is they don't have any! Rectify this to receive a station bonus."
reward_low = 5200
reward_high = 6000
required_count = 3
random_count = 1
wanted_types = list(/obj/item/reagent_containers/glass/beaker/noreact)
/datum/bounty/item/science/advanced_egun
name = "Advanced Energy Gun"
description = "With the price of rechargers on the rise, upper management is interested in purchasing guns that are self-powered. If you ship one, they'll pay."
reward = 10000
reward_low = 6000
reward_high = 7200
wanted_types = list(/obj/item/gun/energy/gun/nuclear)
/datum/bounty/item/science/posibrain
name = "Posibrain"
description = "Due to a sudden spike in accidents management has decided to replace some of the staff with borgs. Ship us 2 posibrains."
reward = 10000
reward_low = 8000
reward_high = 8500
required_count = 2
wanted_types = list(/obj/item/device/mmi/digital/posibrain)
/datum/bounty/item/science/borgbody
name = "Robot Endoskeleton"
description = "Due to a sudden spike in assistants-related accidents management has decided to replace some of them with borgs. Ship us fully assembled robot endoskeletons without a mmi/posibrain inside of it."
reward = 10000
required_count = 2
description = "The %DOCKSHORT has decided to rely more on cyborgs for dangerous tasks. Ship us a fully assembled robot endoskeletons without a mmi/posibrain inside of it."
reward_low = 5000
reward_high = 6500
required_count = 1
wanted_types = list(/obj/item/robot_parts/robot_suit)
/datum/bounty/item/science/borgbody/applies_to(var/obj/item/robot_parts/robot_suit/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.check_completion())
return TRUE
return FALSE
/datum/bounty/item/science/forcegloves
name = "Force Gloves"
description = "%PERSONNAME has been challenged to a sparring duel in the holodeck. Ship them a pair of forcegloves so there can be a fair fight."
reward_low = 2500
reward_high = 3500
wanted_types = list(/obj/item/clothing/gloves/force)
/datum/bounty/item/science/fossil
name = "Fossil"
description = "We want to set up a display in one of the libraries on the %DOCKSHORT. Ship us a unique discovery when you are done displaying it on-station."
reward_low = 7500
reward_high = 8500
required_count = 1
random_count = 1 //wants one or two
wanted_types = list(/obj/item/fossil, /obj/skeleton)
/datum/bounty/item/science/circuitboard
name = "Telecomms Monitor Circuitboard"
description = "Due to a hardware failure, %COMPNAME requires a new circuit board to replace the spare that was used to fix the problem."
reward = 4000
reward_low = 3500
reward_high = 4500
required_count = 1
wanted_types = list(/obj/item/circuitboard/comm_monitor)
@@ -58,14 +94,6 @@
name = "Telecomms Traffic Control Circuitboard"
wanted_types = list(/obj/item/circuitboard/comm_traffic)
/datum/bounty/item/science/circuitboard/seccamera
name = "Security Camera Monitor Circuitboard"
wanted_types = list(/obj/item/circuitboard/security)
/datum/bounty/item/science/circuitboard/engcamera
name = "Engineering Camera Monitor Circuitboard"
wanted_types = list(/obj/item/circuitboard/security/engineering)
/datum/bounty/item/science/circuitboard/messagemonitor
name = "Message Monitor Circuitboard"
wanted_types = list(/obj/item/circuitboard/message_monitor)
@@ -78,10 +106,6 @@
name = "Borg Upload Circuitboard"
wanted_types = list(/obj/item/circuitboard/borgupload)
/datum/bounty/item/science/circuitboard/airalert
name = "Atmos Alert Circuitboard"
wanted_types = list(/obj/item/circuitboard/atmos_alert)
/datum/bounty/item/science/circuitboard/robotics
name = "Robotics Control Circuitboard"
wanted_types = list(/obj/item/circuitboard/robotics)
@@ -90,56 +114,44 @@
name = "Drone Control Circuitboard"
wanted_types = list(/obj/item/circuitboard/drone_control)
/datum/bounty/item/science/circuitboard/cloning
name = "Cloning Control Circuitboard"
wanted_types = list(/obj/item/circuitboard/cloning)
/datum/bounty/item/science/circuitboard/powermonitor
name = "Power Monitor Circuitboard"
wanted_types = list(/obj/item/circuitboard/powermonitor)
/datum/bounty/item/science/battery
name = "Heavy-Duty Power Cell"
description = "%COMPNAME has requested some power cells to fill their supply closet. Please charge them first."
reward = 3000
required_count = 5
description = "%COMPNAME has requested some power cells to fill their supply closet. Please fully charge them first."
reward_low = 3500
reward_high = 4500
required_count = 4
random_count = 1
wanted_types = list(/obj/item/cell/apc)
/datum/bounty/item/science/battery/applies_to(var/obj/item/cell/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.charge == O.maxcharge)
return TRUE
return FALSE
/datum/bounty/item/science/battery/high
name = "High-Capacity power Cell"
reward = 3500
required_count = 4
reward_low = 4500
reward_high = 5000
wanted_types = list(/obj/item/cell/high)
/datum/bounty/item/science/battery/super
name = "Super-Capacity power Cell"
reward = 4000
reward_low = 4500
reward_high = 5000
required_count = 3
wanted_types = list(/obj/item/cell/super)
/datum/bounty/item/science/battery/hyper
name = "Hyper-Capacity power Cell"
reward = 5000
required_count = 2
reward_low = 5000
reward_high = 6000
required_count = 3
wanted_types = list(/obj/item/cell/hyper)
/datum/bounty/item/science/borgbody/halstre
description = "We require you to ship us one fully assembled cyborg endoskeleton without a mmi/posibrain inside of it"
required_count = 1
/datum/bounty/item/science/borgbody/applies_to(obj/O)
if(!..())
return FALSE
var/obj/item/robot_parts/robot_suit/S = O
if(S && S.l_leg && S.r_leg && S.l_arm && S.r_arm && S.chest && S.head)
return TRUE
return FALSE
/datum/bounty/item/science/borgbody/compatible_with(datum/other_bounty)
if(!..())
return FALSE
var/datum/bounty/item/other_item_bounty = other_bounty
if(other_bounty && (/obj/item/robot_parts/robot_suit in other_item_bounty.wanted_types))
return FALSE
return TRUE
+96 -14
View File
@@ -1,29 +1,111 @@
/datum/bounty/item/security/headset
name = "Security Headset"
description = "%COMPNAME wants to ensure that their encryption is working correctly. Ship them a security headset so that they can check."
reward = 800
reward_low = 700
reward_high = 1200
random_count = 1
wanted_types = list(/obj/item/device/radio/headset/headset_sec , /obj/item/device/radio/headset/heads/hos)
/datum/bounty/item/security/securitybelt
name = "Security Belt"
description = "%BOSSSHORT is having difficulties with their security belts. Ship one from the station to receive compensation."
reward = 800
description = "%BOSSNAME is having difficulties with their security belts. Ship one from the station to receive compensation."
reward_low = 700
reward_high = 1200
random_count = 1
wanted_types = list(/obj/item/storage/belt/security)
/datum/bounty/item/security/sechuds
name = "Security HUDSunglasses"
description = "%BOSSSHORT screwed up and ordered the wrong type of security sunglasses. They request the station ship some of theirs."
reward = 800
description = "%BOSSNAME screwed up and ordered the wrong type of security sunglasses. They request the station ship some of theirs."
reward_low = 700
reward_high = 1200
wanted_types = list(/obj/item/clothing/glasses/sunglasses/sechud)
/datum/bounty/item/security/hardsuit
name = "Security Hardsuit"
description = "Pirates have engaged the NMV Icarus! Quick! Ship a security hardsuit to aid the fight!"
reward = 2000
/datum/bounty/item/security/voidsuit
name = "Security Voidsuit"
description = "The %DOCKSHORT has misplaced one of its security voidsuits, and a training exercise is about to begin. Ship a spare for a station bonus. Don't forget the helmet."
reward_low = 2500
reward_high = 4500
wanted_types = list(/obj/item/clothing/suit/space/void/security)
/datum/bounty/item/security/forcegloves
name = "Force Gloves"
description = "Captain Francis of Station 8 has been challenged to a sparring duel in the holodeck. Ship him a pair of forcegloves so there can be a fair fight."
reward = 2000
wanted_types = list(/obj/item/clothing/gloves/force)
/datum/bounty/item/security/voidsuit/applies_to(var/obj/item/clothing/suit/space/void/security/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.helmet)
return TRUE
return FALSE
/datum/bounty/item/security/maglight
name = "Maglights"
description = "Some civil protection agents lost their flashlights, and think the plastic ones are too lame. Send some maglights to appease their picky tastes."
reward_low = 2200
reward_high = 3000
required_count = 2
random_count = 1
wanted_types = list(/obj/item/device/flashlight/maglight)
/datum/bounty/item/security/handcuffs
name = "Handcuffs"
description = "A large influx of criminals have arrived at %BOSSNAME for processing and transfer. Now is the perfect time to ship out spare handcuffs."
reward_low = 1200
reward_high = 1900
required_count = 4
random_count = 2
wanted_types = list(/obj/item/handcuffs)
/datum/bounty/item/security/teargas
name = "Teargas Grenades"
description = "We're training some new civil protection officers, but our order for tear gas is running behind. Ship some for a bonus to your station's account."
reward_low = 2000
reward_high = 3000
required_count = 3
random_count = 1
wanted_types = list(/obj/item/grenade/chem_grenade/teargas)
/datum/bounty/item/security/smoke
name = "Smoke Grenades"
description = "We need a few extra smoke grenades to restock the ERT. Any station that ships spares will be compensated."
reward_low = 2200
reward_high = 3200
required_count = 3
random_count = 1
wanted_types = list(/obj/item/grenade/chem_grenade/gas)
/datum/bounty/item/security/pepper
name = "Pepper Spray"
description = "Time to help some civil protection troopers toughen their response to being pepper sprayed. Any station that helps will be compensated. I love this job. -%PERSONNAME"
reward_low = 1200
reward_high = 2200
required_count = 4
random_count = 1
wanted_types = list(/obj/item/reagent_containers/spray/pepper)
/datum/bounty/item/security/pepper/applies_to(var/obj/item/reagent_containers/spray/pepper/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(O.reagents.get_reagent_amount(/datum/reagent/capsaicin/condensed) >= 25)
return TRUE
return FALSE
/datum/bounty/item/security/flash
name = "Flashes"
description = "The %DOCKSHORT has a few more new recruits than expected; we'll compensate any station that helps us provide some basic equipment. Right now, we need flashes."
reward_low = 1200
reward_high = 2200
required_count = 4
random_count = 1
wanted_types = list(/obj/item/device/flash)
include_subtypes = FALSE
/datum/bounty/item/security/flash/applies_to(var/obj/item/device/flash/O)
if(!..())
return FALSE
if(!istype(O))
return FALSE
if(!O.broken)
return TRUE
return FALSE
+3 -2
View File
@@ -1,9 +1,10 @@
/datum/bounty/item/slime
reward = 3000
reward_low = 4000
reward_high = 6000
/datum/bounty/item/slime/New()
..()
description = "%COMPNAME's science lead is hunting for the rare and exotic [name]. A bounty has been offered for finding it."
description = "One of our science leads is hunting for a sample of [name]. A bounty has been offered for finding it."
reward += rand(0, 4) * 500
/datum/bounty/item/slime/green
@@ -17,10 +17,10 @@
/datum/bounty/weapon_prototype/can_claim()
return ..() && shipped
/datum/bounty/weapon_prototype/applies_to(obj/O)
/datum/bounty/weapon_prototype/applies_to(var/obj/item/gun/energy/laser/prototype/O)
if(shipped)
return FALSE
if(!istype(O, /obj/item/gun/energy/laser/prototype))
if(!istype(O))
return FALSE
if(accepts_weapon(O))
return TRUE
@@ -31,7 +31,7 @@
return
shipped = TRUE
/datum/bounty/weapon_prototype/compatible_with(datum/other_bounty)
/datum/bounty/weapon_prototype/compatible_with(var/datum/other_bounty)
if(!istype(other_bounty, /datum/bounty/weapon_prototype))
return TRUE
var/datum/bounty/weapon_prototype/W = other_bounty
+41 -16
View File
@@ -1,18 +1,29 @@
#define BOUNTY_MIN 1000
#define BOUNTY_MAX 15000
#define BOUNTY_NUM_LOW 1
#define BOUNTY_NUM_MED 2
#define BOUNTY_NUM_HIGH 3
/datum/bounty
var/name
var/description
var/reward = 1000 // In credits.
var/reward = BOUNTY_MIN // In credits. Mostly a fallback
var/reward_low = 0 //If 0, uses reward value instead
var/reward_high = 0 //If 0, uses reward value instead. Must be higher than reward_low
var/claimed = FALSE
var/high_priority = FALSE
/datum/bounty/New()
if(reward_low > 0 && reward_high > reward_low)
reward = round(rand(reward_low, reward_high), 100)
description = replacetext(description, "%DOCKNAME",current_map.dock_name)
description = replacetext(description, "%DOCKSHORT",current_map.dock_short)
description = replacetext(description, "%BOSSNAME",current_map.boss_name)
description = replacetext(description, "%BOSSSHORT",current_map.boss_short)
description = replacetext(description, "%COMPNAME",current_map.company_name)
description = replacetext(description, "%COMPSHORT",current_map.company_short)
description = replacetext(description, "%PERSONNAME","[pick("Trooper", "Commander", "Agent", "Director", "Doctor")] [pick(last_names)]")
// Displayed on bounty UI screen.
/datum/bounty/proc/completion_string()
@@ -43,14 +54,14 @@
// When randomly generating the bounty list, duplicate bounties must be avoided.
// This proc is used to determine if two bounties are duplicates, or incompatible in general.
/datum/bounty/proc/compatible_with(other_bounty)
/datum/bounty/proc/compatible_with(var/datum/other_bounty)
return TRUE
/datum/bounty/proc/mark_high_priority(scale_reward = 2)
if(high_priority)
return
high_priority = TRUE
reward = round(reward * scale_reward)
reward = min(round(reward * scale_reward), BOUNTY_MAX) //15k limit
//Generates a list of available bounties to be displayed
/datum/controller/subsystem/cargo/proc/get_bounty_list()
@@ -112,7 +123,7 @@
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
return new subtype
if(2)
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
var/subtype = pick(subtypesof(/datum/bounty/item/engineer))
return new subtype
if(3)
var/subtype = pick(subtypesof(/datum/bounty/item/chef))
@@ -130,7 +141,7 @@
var/subtype = pick(subtypesof(/datum/bounty/item/science))
return new subtype
if(8)
var/subtype = pick(subtypesof(/datum/bounty/item/slime))
var/subtype = pick(subtypesof(/datum/bounty/item/hydroponicist))
return new subtype
if(9)
var/subtype = pick(subtypesof(/datum/bounty/item/bot))
@@ -155,34 +166,48 @@
// Called lazily at startup to populate bounties_list with random bounties.
/datum/controller/subsystem/cargo/proc/setupBounties()
for(var/i = 0; i < 3; ++i)
for(var/i = 0; i < BOUNTY_NUM_HIGH; i++)
CHECK_TICK
var/subtype = pick(subtypesof(/datum/bounty/item/assistant))
var/datum/bounty/subtype = pick(subtypesof(/datum/bounty/item/assistant))
try_add_bounty(new subtype)
for(var/i = 0; i < 1; ++i)
for(var/i = 0; i < BOUNTY_NUM_HIGH; i++)
CHECK_TICK
var/list/subtype = pick(subtypesof(/datum/bounty/item/bot))
var/list/subtypes = subtypesof(/datum/bounty/item/bot)
subtypes += subtypesof(/datum/bounty/item/science)
var/datum/bounty/subtype = pick(subtypes)
try_add_bounty(new subtype)
for(var/i = 0; i < 2; ++i)
for(var/i = 0; i < BOUNTY_NUM_MED; i++)
CHECK_TICK
var/list/subtype = pick(subtypesof(/datum/bounty/item/chef))
var/datum/bounty/subtype = pick(subtypesof(/datum/bounty/item/chef))
try_add_bounty(new subtype)
for(var/i = 0; i < 1; ++i)
for(var/i = 0; i < BOUNTY_NUM_MED; i++)
CHECK_TICK
var/list/subtype = pick(subtypesof(/datum/bounty/item/security))
var/datum/bounty/subtype = pick(subtypesof(/datum/bounty/item/hydroponicist))
try_add_bounty(new subtype)
for(var/i = 0; i < 5; ++i)
for(var/i = 0; i < BOUNTY_NUM_HIGH; i++)
CHECK_TICK
var/list/subtype = pick(subtypesof(/datum/bounty/weapon_prototype, /datum/bounty/item/science, /datum/bounty/item/slime))
var/list/subtypes = subtypesof(/datum/bounty/item/security)
subtypes += subtypesof(/datum/bounty/item/engineer)
var/datum/bounty/subtype = pick(subtypes)
try_add_bounty(new subtype)
for(var/i = 0; i < BOUNTY_NUM_LOW; i++)
CHECK_TICK
var/list/subtypes = subtypesof(/datum/bounty/weapon_prototype)
subtypes += subtypesof(/datum/bounty/item/slime)
var/datum/bounty/subtype = pick(subtypes)
try_add_bounty(new subtype)
//add one of each reagent, then another one picked at random
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)
var/datum/bounty/r_subtype = pick(subtypesof(/datum/bounty/reagent))
try_add_bounty(new r_subtype)
var/datum/bounty/B = pick(bounties_list)
B.mark_high_priority()
+3 -1
View File
@@ -37,7 +37,9 @@
/datum/export/large/reagent_dispenser/get_cost(obj/O)
var/obj/structure/reagent_dispensers/D = O
var/ratio = D.reagents.total_volume / D.reagents.maximum_volume
var/ratio
if(D?.reagents)
ratio = D.reagents.total_volume / D.reagents.maximum_volume
return ..() + round(contents_cost * ratio)
+8 -3
View File
@@ -410,7 +410,7 @@ STOCK_ITEM_COMMON(bag, 3.5)
new type(L)
STOCK_ITEM_COMMON(extinguish, 2.2)
for(var/i in 1 to rand(1, 3))
for(var/i in 1 to rand(1, 2))
var/type = pick( \
/obj/item/extinguisher, \
/obj/item/extinguisher/mini \
@@ -528,9 +528,9 @@ STOCK_ITEM_COMMON(gasmask, 2)
new type(L)
STOCK_ITEM_COMMON(mining, 2)
var/list/mine_items = list(/obj/item/shovel, /obj/item/pickaxe, /obj/item/clothing/glasses/material,
var/list/mine_items = list(/obj/item/shovel, /obj/item/clothing/glasses/material,
/obj/item/device/flashlight/lantern, /obj/item/mining_scanner, /obj/item/storage/box/excavation)
for(var/i in 1 to rand(1, 3))
for(var/i in 1 to rand(1, 2))
var/to_spawn = pick(mine_items)
new to_spawn(L)
@@ -546,5 +546,10 @@ STOCK_ITEM_COMMON(custom_ka, 1)
STOCK_ITEM_COMMON(towel, 1)
new /obj/item/towel(L)
STOCK_ITEM_COMMON(camera, 1)
new /obj/item/device/camera(L)
if(prob(60))
new /obj/item/device/camera_film(L)
STOCK_ITEM_COMMON(nothing, 0)
// do nothing
+21 -7
View File
@@ -171,9 +171,6 @@ STOCK_ITEM_UNCOMMON(MMI, 1.5)
STOCK_ITEM_UNCOMMON(voidsuit, 2)
new /obj/random/voidsuit(L,1)
STOCK_ITEM_UNCOMMON(nightvision, 2)
new /obj/item/clothing/glasses/night(L)
STOCK_ITEM_UNCOMMON(violin, 2)
new /obj/item/device/violin(L)
@@ -274,8 +271,11 @@ STOCK_ITEM_UNCOMMON(manual, 2)
var/type = pick(booklist)
new type(L)
STOCK_ITEM_UNCOMMON(jammer, 2)
new /obj/item/device/radiojammer(L)
STOCK_ITEM_UNCOMMON(spystuff, 1)
if(prob(40))
new /obj/item/device/radiojammer(L)
else
new /obj/item/clothing/glasses/night(L)
STOCK_ITEM_UNCOMMON(seeds, 1)
for(var/i in 1 to rand(1, 3))
@@ -330,7 +330,7 @@ STOCK_ITEM_UNCOMMON(randomhide, 0.5)
var/obj/item/stack/material/animalhide/spawn_hide = pick(typesof(/obj/item/stack/material/animalhide))
new spawn_hide(L, rand(5, 50))
STOCK_ITEM_UNCOMMON(hoodie, 0.5)
STOCK_ITEM_UNCOMMON(hoodie, 1)
new /obj/random/hoodie(L)
STOCK_ITEM_UNCOMMON(bang, 0.5)
@@ -377,7 +377,21 @@ STOCK_ITEM_UNCOMMON(pops, 0.5)
new /obj/item/storage/box/snappops/syndi(L)
STOCK_ITEM_UNCOMMON(collectable_headwear, 0.5)
var/type = pick(subtypesof(/obj/item/clothing/head/collectable/))
var/type = pick(subtypesof(/obj/item/clothing/head/collectable))
new type(L)
STOCK_ITEM_UNCOMMON(pickaxes, 1)
var/list/pickaxe_type = list(
/obj/item/pickaxe = 10,
/obj/item/pickaxe/hammer = 1,
/obj/item/pickaxe/silver = 2,
/obj/item/pickaxe/drill = 5,
/obj/item/pickaxe/gold = 0.5,
/obj/item/pickaxe/diamond = 0.25,
/obj/item/pickaxe/brush = 1,
/obj/item/pickaxe/hand = 2
)
var/type = pickweight(pickaxe_type)
new type(L)
STOCK_ITEM_UNCOMMON(alt_glasses, 1)