mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-29 08:08:49 +01:00
A "postal workers strike" negative station trait. (can be positive) (#80213)
## About The Pull Request Added a negative station trait, which blocks the mail like it's sunday or a official holiday. However! If it's actually sunday or a official holiday, when the mail would be normally blocked already, instead it'll unblock it. It was done this way because it's easier (station traits are loaded before the events and economy subsystems are initialized) and cooler. ## Why It's Good For The Game Granted there are quite a few station traits around cargo already, features interacting with other features is honestly a good thing. ## Changelog 🆑 add: Added a "postal workers strike" negative station trait. In the case of holidays and sunday though, it'll be a "postal system overtime" instead. /🆑 --------- Co-authored-by: Mothblocks <35135081+Mothblocks@users.noreply.github.com>
This commit is contained in:
@@ -1,2 +1,3 @@
|
||||
#define WALL_DENT_HIT 1
|
||||
#define WALL_DENT_SHOT 2
|
||||
#define MAX_DENT_DECALS 15
|
||||
|
||||
@@ -17,6 +17,30 @@
|
||||
/datum/station_trait/distant_supply_lines/on_round_start()
|
||||
SSeconomy.pack_price_modifier *= 1.2
|
||||
|
||||
///A negative trait that stops mail from arriving (or the inverse if on holiday). It also enables a specific shuttle loan situation.
|
||||
/datum/station_trait/mail_blocked
|
||||
name = "Postal workers strike"
|
||||
trait_type = STATION_TRAIT_NEGATIVE
|
||||
weight = 2
|
||||
show_in_report = TRUE
|
||||
report_message = "Due to an ongoing strike announced by the postal workers union, mail won't be delivered this shift."
|
||||
|
||||
/datum/station_trait/mail_blocked/on_round_start()
|
||||
//This is either a holiday or sunday... well then, let's flip the situation.
|
||||
if(SSeconomy.mail_blocked)
|
||||
name = "Postal system overtime"
|
||||
report_message = "Despite being a day off, the postal system is working overtime today. Mail will be delivered this shift."
|
||||
else
|
||||
var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control
|
||||
our_event.unavailable_situations -= /datum/shuttle_loan_situation/mail_strike
|
||||
SSeconomy.mail_blocked = !SSeconomy.mail_blocked
|
||||
|
||||
/datum/station_trait/mail_blocked/hangover/revert()
|
||||
var/datum/round_event_control/shuttle_loan/our_event = locate() in SSevents.control
|
||||
our_event.unavailable_situations |= /datum/shuttle_loan_situation/mail_strike
|
||||
SSeconomy.mail_blocked = !SSeconomy.mail_blocked
|
||||
return ..()
|
||||
|
||||
///A negative trait that reduces the amount of products available from vending machines throughout the station.
|
||||
/datum/station_trait/vending_shortage
|
||||
name = "Vending products shortage"
|
||||
|
||||
@@ -141,3 +141,59 @@
|
||||
/obj/item/restraints/legcuffs/beartrap/prearmed = 5, //not really a landmine, but still a good threat
|
||||
/obj/effect/mine/shrapnel = 5,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades
|
||||
name = "grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/chem_grenade/metalfoam,
|
||||
/obj/item/grenade/chem_grenade/cleaner,
|
||||
/obj/effect/spawner/random/entertainment/colorful_grenades,
|
||||
/obj/item/grenade/smokebomb,
|
||||
/obj/item/grenade/chem_grenade/antiweed,
|
||||
/obj/item/grenade/spawnergrenade/syndiesoap,
|
||||
/obj/effect/spawner/random/contraband/grenades/dangerous,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades/dangerous
|
||||
name = "dangerous grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/flashbang = 3,
|
||||
/obj/item/grenade/chem_grenade/teargas = 2,
|
||||
/obj/item/grenade/iedcasing/spawned = 2,
|
||||
/obj/item/grenade/empgrenade = 2,
|
||||
/obj/item/grenade/antigravity = 2,
|
||||
/obj/effect/spawner/random/contraband/grenades/cluster = 1,
|
||||
/obj/effect/spawner/random/contraband/grenades/lethal = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades/cluster
|
||||
name = "clusterbusters spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/clusterbuster/smoke = 4,
|
||||
/obj/item/grenade/clusterbuster/metalfoam = 4,
|
||||
/obj/item/grenade/clusterbuster/cleaner = 4,
|
||||
/obj/item/grenade/clusterbuster = 3,
|
||||
/obj/item/grenade/clusterbuster/teargas = 3,
|
||||
/obj/item/grenade/clusterbuster/antiweed = 3,
|
||||
/obj/item/grenade/clusterbuster/soap = 2,
|
||||
/obj/item/grenade/clusterbuster/emp = 1,
|
||||
/obj/item/grenade/clusterbuster/spawner_spesscarp = 1,
|
||||
/obj/item/grenade/clusterbuster/facid = 1,
|
||||
/obj/item/grenade/clusterbuster/inferno = 1,
|
||||
/obj/item/grenade/clusterbuster/clf3 = 1,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/contraband/grenades/lethal
|
||||
name = "lethal grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/chem_grenade/incendiary = 3,
|
||||
/obj/item/grenade/chem_grenade/facid = 3,
|
||||
/obj/item/grenade/chem_grenade/ez_clean = 3,
|
||||
/obj/item/grenade/chem_grenade/clf3 = 2,
|
||||
/obj/item/grenade/gluon = 2,
|
||||
/obj/item/grenade/chem_grenade/holy = 2,
|
||||
/obj/item/grenade/spawnergrenade/spesscarp = 1,
|
||||
/obj/item/grenade/spawnergrenade/cat = 1,
|
||||
/obj/item/grenade/frag = 1,
|
||||
/obj/item/grenade/chem_grenade/bioterrorfoam = 1,
|
||||
)
|
||||
|
||||
@@ -281,3 +281,12 @@
|
||||
/obj/item/toy/plush/ratplush = 2,
|
||||
/obj/item/toy/plush/narplush = 2,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/entertainment/colorful_grenades
|
||||
name = "colorful/glitter grenades spawner"
|
||||
loot = list(
|
||||
/obj/item/grenade/chem_grenade/glitter/pink,
|
||||
/obj/item/grenade/chem_grenade/glitter/blue,
|
||||
/obj/item/grenade/chem_grenade/glitter/white,
|
||||
/obj/item/grenade/chem_grenade/colorful
|
||||
)
|
||||
|
||||
@@ -323,3 +323,17 @@
|
||||
/obj/item/food/donut/jelly/slimejelly/matcha = 2,
|
||||
/obj/item/food/donut/jelly/slimejelly/trumpet = 2,
|
||||
)
|
||||
|
||||
/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage
|
||||
name = "any snack or beverage spawner"
|
||||
icon_state = "slime_jelly_donut"
|
||||
loot = list(
|
||||
/obj/effect/spawner/random/food_or_drink/snack = 6,
|
||||
/obj/effect/spawner/random/food_or_drink/refreshing_beverage = 6,
|
||||
/obj/effect/spawner/random/food_or_drink/donuts = 5,
|
||||
/obj/effect/spawner/random/food_or_drink/donkpockets_single = 5,
|
||||
/obj/effect/spawner/random/food_or_drink/booze = 4,
|
||||
/obj/effect/spawner/random/food_or_drink/snack/lizard = 4,
|
||||
/obj/effect/spawner/random/food_or_drink/jelly_donuts = 3,
|
||||
/obj/effect/spawner/random/food_or_drink/slime_jelly_donuts = 1,
|
||||
)
|
||||
|
||||
@@ -152,14 +152,18 @@
|
||||
|
||||
/obj/item/mail/examine_more(mob/user)
|
||||
. = ..()
|
||||
var/list/msg = list(span_notice("<i>You notice the postmarking on the front of the mail...</i>"))
|
||||
if(!postmarked)
|
||||
. += span_info("This mail has no postmarking of any sort...")
|
||||
else
|
||||
. += span_notice("<i>You notice the postmarking on the front of the mail...</i>")
|
||||
var/datum/mind/recipient = recipient_ref.resolve()
|
||||
if(recipient)
|
||||
msg += "\t[span_info("Certified NT mail for [recipient].")]"
|
||||
. += span_info("[postmarked ? "Certified NT" : "Uncertfieid"] mail for [recipient].")
|
||||
else if(postmarked)
|
||||
. += span_info("Certified mail for [GLOB.station_name].")
|
||||
else
|
||||
msg += "\t[span_info("Certified mail for [GLOB.station_name].")]"
|
||||
msg += "\t[span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")]"
|
||||
return msg
|
||||
. += span_info("This is a dead letter mail with no recipient.")
|
||||
. += span_info("Distribute by hand or via destination tagger using the certified NT disposal system.")
|
||||
|
||||
/// Accepts a mind to initialize goodies for a piece of mail.
|
||||
/obj/item/mail/proc/initialize_for_recipient(datum/mind/recipient)
|
||||
@@ -249,6 +253,8 @@
|
||||
lid_x = -26
|
||||
lid_y = 2
|
||||
paint_jobs = null
|
||||
///if it'll show the nt mark on the crate
|
||||
var/postmarked = TRUE
|
||||
|
||||
/obj/structure/closet/crate/mail/update_icon_state()
|
||||
. = ..()
|
||||
@@ -259,6 +265,11 @@
|
||||
else
|
||||
icon_state = "[base_icon_state]sealed"
|
||||
|
||||
/obj/structure/closet/crate/mail/update_overlays()
|
||||
. = ..()
|
||||
if(postmarked)
|
||||
. += "mail_nt"
|
||||
|
||||
/// Fills this mail crate with N pieces of mail, where N is the lower of the amount var passed, and the maximum capacity of this crate. If N is larger than the number of alive human players, the excess will be junkmail.
|
||||
/obj/structure/closet/crate/mail/proc/populate(amount)
|
||||
var/mail_count = min(amount, storage_capacity)
|
||||
@@ -304,6 +315,19 @@
|
||||
. = ..()
|
||||
populate(INFINITY)
|
||||
|
||||
///Used in the mail strike shuttle loan event
|
||||
/obj/structure/closet/crate/mail/full/mail_strike
|
||||
desc = "A post crate from somewhere else. It has no NT logo on it."
|
||||
postmarked = FALSE
|
||||
|
||||
/obj/structure/closet/crate/mail/full/mail_strike/populate(amount)
|
||||
var/strike_mail_to_spawn = rand(1, storage_capacity-1)
|
||||
for(var/i in 1 to strike_mail_to_spawn)
|
||||
if(prob(95))
|
||||
new /obj/item/mail/mail_strike(src)
|
||||
else
|
||||
new /obj/item/mail/traitor/mail_strike(src)
|
||||
return ..(storage_capacity - strike_mail_to_spawn)
|
||||
|
||||
/// Opened mail crate
|
||||
/obj/structure/closet/crate/mail/preopen
|
||||
@@ -381,7 +405,8 @@
|
||||
playsound(loc, 'sound/items/poster_ripped.ogg', vol = 50, vary = TRUE)
|
||||
for(var/obj/item/stuff as anything in contents) // Mail and envelope actually can have more than 1 item.
|
||||
if(user.put_in_hands(stuff) && armed)
|
||||
log_bomber(user, "opened armed mail made by [made_by_cached_name] ([made_by_cached_ckey]), activating", stuff)
|
||||
var/whomst = made_by_cached_name ? "[made_by_cached_name] ([made_by_cached_ckey])" : "no one in particular"
|
||||
log_bomber(user, "opened armed mail made by [whomst], activating", stuff)
|
||||
INVOKE_ASYNC(stuff, TYPE_PROC_REF(/obj/item, attack_self), user)
|
||||
qdel(src)
|
||||
return TRUE
|
||||
@@ -412,6 +437,55 @@
|
||||
after_unwrap(user)
|
||||
return TRUE
|
||||
|
||||
///Generic mail used in the mail strike shuttle loan event
|
||||
/obj/item/mail/mail_strike
|
||||
name = "dead mail"
|
||||
desc = "An unmarked parcel of unknown origins, effectively undeliverable."
|
||||
postmarked = FALSE
|
||||
generic_goodies = list(
|
||||
/obj/effect/spawner/random/entertainment/money_medium = 2,
|
||||
/obj/effect/spawner/random/contraband = 2,
|
||||
/obj/effect/spawner/random/entertainment/money_large = 1,
|
||||
/obj/effect/spawner/random/entertainment/coin = 1,
|
||||
/obj/effect/spawner/random/food_or_drink/any_snack_or_beverage = 1,
|
||||
/obj/effect/spawner/random/entertainment/drugs = 1,
|
||||
/obj/effect/spawner/random/contraband/grenades = 1,
|
||||
)
|
||||
|
||||
/obj/item/mail/mail_strike/Initialize(mapload)
|
||||
if(prob(35))
|
||||
stamped = FALSE
|
||||
if(prob(35))
|
||||
name = "dead envelope"
|
||||
icon_state = "mail_large"
|
||||
goodie_count = 2
|
||||
stamp_max = 2
|
||||
stamp_offset_y = 5
|
||||
. = ..()
|
||||
color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED)
|
||||
for(var/goodie in 1 to goodie_count)
|
||||
var/target_good = pick_weight(generic_goodies)
|
||||
new target_good(src)
|
||||
|
||||
///Also found in the mail strike shuttle loan. It contains a random grenade that'll be triggered when unwrapped
|
||||
/obj/item/mail/traitor/mail_strike
|
||||
name = "dead mail"
|
||||
desc = "An unmarked parcel of unknown origins, effectively undeliverable."
|
||||
postmarked = FALSE
|
||||
|
||||
/obj/item/mail/traitor/mail_strike/Initialize(mapload)
|
||||
if(prob(35))
|
||||
stamped = FALSE
|
||||
if(prob(35))
|
||||
name = "dead envelope"
|
||||
icon_state = "mail_large"
|
||||
goodie_count = 2
|
||||
stamp_max = 2
|
||||
stamp_offset_y = 5
|
||||
. = ..()
|
||||
color = pick(COLOR_SILVER, COLOR_DARK, COLOR_DRIED_TAN, COLOR_ORANGE_BROWN, COLOR_BROWN, COLOR_SYNDIE_RED)
|
||||
new /obj/effect/spawner/random/contraband/grenades/dangerous(src)
|
||||
|
||||
/obj/item/storage/mail_counterfeit_device
|
||||
name = "GLA-2 mail counterfeit device"
|
||||
desc = "Device that actually able to counterfeit NT's mail. This device also able to place a trap inside of mail for malicious actions. Trap will \"activate\" any item inside of mail. Also it might be used for contraband purposes. Integrated micro-computer will give you great configuration optionality for your needs."
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
#define MAX_DENT_DECALS 15
|
||||
#define LEANING_OFFSET 11
|
||||
|
||||
/turf/closed/wall
|
||||
@@ -387,5 +386,4 @@
|
||||
. = ..()
|
||||
SEND_SIGNAL(gone, COMSIG_LIVING_WALL_EXITED, src)
|
||||
|
||||
#undef MAX_DENT_DECALS
|
||||
#undef LEANING_OFFSET
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
/// What the shuttle says about it.
|
||||
var/shuttle_transit_text = "Unset transit text"
|
||||
/// Supply points earned for taking the deal.
|
||||
var/bonus_points = 10000
|
||||
var/bonus_points = CARGO_CRATE_VALUE * 50
|
||||
/// Response for taking the deal.
|
||||
var/thanks_msg = "The cargo shuttle should return in five minutes. Have some supply points for your trouble."
|
||||
/// Small description of the loan for easier log reading.
|
||||
@@ -21,7 +21,7 @@
|
||||
bonus_points *= 1.15
|
||||
|
||||
/// Spawns paths added to `spawn_list`, and passes empty shuttle turfs so you can spawn more complicated things like dead bodies.
|
||||
/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/proc/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
SHOULD_CALL_PARENT(FALSE)
|
||||
CRASH("Unimplemented get_spawned_items() on [src.type].")
|
||||
|
||||
@@ -31,7 +31,7 @@
|
||||
shuttle_transit_text = "Virus samples incoming."
|
||||
logging_desc = "Virus shuttle"
|
||||
|
||||
/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/antidote/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/obj/effect/mob_spawn/corpse/human/assistant/infected_assistant = pick(list(
|
||||
/obj/effect/mob_spawn/corpse/human/assistant/beesease_infection,
|
||||
/obj/effect/mob_spawn/corpse/human/assistant/brainrot_infection,
|
||||
@@ -58,7 +58,7 @@
|
||||
bonus_points = 0
|
||||
logging_desc = "Resupply packages"
|
||||
|
||||
/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/department_resupply/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/list/crate_types = list(
|
||||
/datum/supply_pack/emergency/equipment,
|
||||
/datum/supply_pack/security/supplies,
|
||||
@@ -84,7 +84,7 @@
|
||||
shuttle_transit_text = "Syndicate hijack team incoming."
|
||||
logging_desc = "Syndicate boarding party"
|
||||
|
||||
/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/syndiehijacking/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -99,10 +99,10 @@
|
||||
sender = "CentCom Janitorial Division"
|
||||
announcement_text = "One of our freighters carrying a bee shipment has been attacked by eco-terrorists. Can you clean up the mess for us?"
|
||||
shuttle_transit_text = "Biohazard cleanup incoming."
|
||||
bonus_points = 20000 //Toxin bees can be unbeelievably lethal
|
||||
bonus_points = CARGO_CRATE_VALUE * 100 //Toxin bees can be unbeelievably lethal
|
||||
logging_desc = "Shuttle full of bees"
|
||||
|
||||
/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/lots_of_bees/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/organic/hydroponics/beekeeping_fullkit]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -135,10 +135,10 @@
|
||||
announcement_text = "We have discovered an active Syndicate bomb near our VIP shuttle's fuel lines. If you feel up to the task, we will pay you for defusing it."
|
||||
shuttle_transit_text = "Live explosive ordnance incoming. Exercise extreme caution."
|
||||
thanks_msg = "Live explosive ordnance incoming via supply shuttle. Evacuating cargo bay is recommended."
|
||||
bonus_points = 45000 //If you mess up, people die and the shuttle gets turned into swiss cheese
|
||||
bonus_points = CARGO_CRATE_VALUE * 225 //If you mess up, people die and the shuttle gets turned into swiss cheese
|
||||
logging_desc = "Shuttle with a ticking bomb"
|
||||
|
||||
/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/jc_a_bomb/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
spawn_list.Add(/obj/machinery/syndicatebomb/shuttle_loan)
|
||||
if(prob(95))
|
||||
spawn_list.Add(/obj/item/paper/fluff/cargo/bomb)
|
||||
@@ -153,7 +153,7 @@
|
||||
bonus_points = 0 //Payout is made when the stamped papers are returned
|
||||
logging_desc = "Paperwork shipment"
|
||||
|
||||
/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/papers_please/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
spawn_list += subtypesof(/obj/item/paperwork) - typesof(/obj/item/paperwork/photocopy) - typesof(/obj/item/paperwork/ancient)
|
||||
|
||||
/datum/shuttle_loan_situation/pizza_delivery
|
||||
@@ -164,7 +164,7 @@
|
||||
bonus_points = 0
|
||||
logging_desc = "Pizza delivery"
|
||||
|
||||
/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/naughtypizza = list(/obj/item/pizzabox/bomb, /obj/item/pizzabox/margherita/robo) //oh look another blacklist, for pizza nonetheless!
|
||||
var/nicepizza = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/meat, /obj/item/pizzabox/vegetable, /obj/item/pizzabox/mushroom)
|
||||
for(var/i in 1 to 6)
|
||||
@@ -176,7 +176,7 @@
|
||||
shuttle_transit_text = "Partying Russians incoming."
|
||||
logging_desc = "Russian party squad"
|
||||
|
||||
/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/russian_party/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/service/party]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
shuttle_transit_text = "Spider Clan gift incoming."
|
||||
logging_desc = "Shuttle full of spiders"
|
||||
|
||||
/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs)
|
||||
/datum/shuttle_loan_situation/spider_gift/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
var/datum/supply_pack/pack = SSshuttle.supply_packs[/datum/supply_pack/imports/specialops]
|
||||
pack.generate(pick_n_take(empty_shuttle_turfs))
|
||||
|
||||
@@ -213,3 +213,82 @@
|
||||
for(var/i in 1 to 5)
|
||||
var/turf/web_turf = pick_n_take(empty_shuttle_turfs)
|
||||
new /obj/structure/spider/stickyweb(web_turf)
|
||||
|
||||
#define DENT_WALL "dent"
|
||||
#define CHANGE_WALL "change"
|
||||
#define DISMANTLE_WALL "dismantle"
|
||||
|
||||
#define BREAK_TILE "break"
|
||||
#define PLATING_TILE "plating"
|
||||
#define RUST_TILE "rust"
|
||||
|
||||
/**
|
||||
* A special shuttle loan situation enabled by the 'mail blocked' station trait.
|
||||
* It sends back a lot of mail to the station, at the cost of wrecking the cargo shuttle a little.
|
||||
*/
|
||||
/datum/shuttle_loan_situation/mail_strike
|
||||
sender = "Spinward Mail Workers Union"
|
||||
announcement_text = "The Mail Workers Union wants to borrow your cargo shuttle to employ \"advanced union strike tactics\" with. Payment is strictly in mails."
|
||||
bonus_points = 0
|
||||
thanks_msg = "The cargo shuttle should return in five minutes."
|
||||
shuttle_transit_text = "Nothing stops the mail."
|
||||
logging_desc = "Shuttle full of shady mail"
|
||||
|
||||
/datum/shuttle_loan_situation/mail_strike/spawn_items(list/spawn_list, list/empty_shuttle_turfs, list/blocked_shutte_turfs)
|
||||
for(var/i in 1 to rand(7, 12))
|
||||
var/turf/closed/wall/wall = pick_n_take(blocked_shutte_turfs)
|
||||
if(!istype(wall))
|
||||
continue
|
||||
var/static/list/wall_bad_stuff = list(DENT_WALL = 85, CHANGE_WALL = 13, DISMANTLE_WALL = 2)
|
||||
var/static/list/possible_new_walls = list(
|
||||
/turf/closed/wall/mineral/sandstone,
|
||||
/turf/closed/wall/mineral/wood,
|
||||
/turf/closed/wall/mineral/iron,
|
||||
/turf/closed/wall/metal_foam_base,
|
||||
/turf/closed/wall/r_wall,
|
||||
)
|
||||
var/damage_done = pick_weight(wall_bad_stuff)
|
||||
switch(damage_done)
|
||||
if(DENT_WALL)
|
||||
for(var/dent in 1 to rand(1, MAX_DENT_DECALS))
|
||||
wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT)
|
||||
if(CHANGE_WALL)
|
||||
wall.ChangeTurf(pick(possible_new_walls - wall.type))
|
||||
if(prob(25))
|
||||
for(var/dent in 1 to rand(1, MAX_DENT_DECALS))
|
||||
wall.add_dent(prob(90) ? WALL_DENT_SHOT : WALL_DENT_HIT)
|
||||
if(DISMANTLE_WALL)
|
||||
wall.dismantle_wall()
|
||||
|
||||
for(var/i in 1 to rand(7, 12))
|
||||
var/turf/open/floor/floor = pick_n_take(empty_shuttle_turfs)
|
||||
if(!istype(floor))
|
||||
continue
|
||||
var/static/list/floor_bad_stuff = list(BREAK_TILE = 65, PLATING_TILE = 25, RUST_TILE = 10)
|
||||
var/damage_done = pick_weight(floor_bad_stuff)
|
||||
switch(damage_done)
|
||||
if(BREAK_TILE)
|
||||
if(prob(50))
|
||||
floor.break_tile()
|
||||
else
|
||||
floor.burn_tile()
|
||||
if(PLATING_TILE)
|
||||
if(prob(25))
|
||||
floor.remove_tile()
|
||||
else
|
||||
floor.make_plating()
|
||||
if(RUST_TILE)
|
||||
floor.ChangeTurf(/turf/open/floor/plating/rust)
|
||||
if(prob(25))
|
||||
spawn_list += pick(/obj/effect/gibspawner/robot, /obj/effect/gibspawner/human)
|
||||
|
||||
for(var/i in 1 to rand(4, 7))
|
||||
spawn_list += /obj/structure/closet/crate/mail/full/mail_strike
|
||||
|
||||
#undef BREAK_TILE
|
||||
#undef PLATING_TILE
|
||||
#undef RUST_TILE
|
||||
|
||||
#undef DENT_WALL
|
||||
#undef CHANGE_WALL
|
||||
#undef DISMANTLE_WALL
|
||||
|
||||
@@ -8,7 +8,8 @@
|
||||
description = "If cargo accepts the offer, fills the shuttle with loot and/or enemies."
|
||||
///The types of loan events already run (and to be excluded if the event triggers).
|
||||
admin_setup = list(/datum/event_admin_setup/listed_options/shuttle_loan)
|
||||
var/list/run_situations = list()
|
||||
///A list of normally unavailable (or already run) situations datums
|
||||
var/list/unavailable_situations = list(/datum/shuttle_loan_situation/mail_strike)
|
||||
|
||||
/datum/round_event_control/shuttle_loan/can_spawn_event(players_amt, allow_magic = FALSE)
|
||||
. = ..()
|
||||
@@ -28,14 +29,14 @@
|
||||
var/datum/round_event_control/shuttle_loan/loan_control = control
|
||||
//by this point if situation is admin picked, it is a type, not an instance.
|
||||
if(!situation)
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.run_situations
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_control.unavailable_situations
|
||||
if(!valid_situations.len)
|
||||
//If we somehow run out of loans (fking campbell), they all become available again
|
||||
loan_control.run_situations.Cut()
|
||||
loan_control.unavailable_situations.Cut()
|
||||
valid_situations = subtypesof(/datum/shuttle_loan_situation)
|
||||
situation = pick(valid_situations)
|
||||
|
||||
loan_control.run_situations.Add(situation)
|
||||
loan_control.unavailable_situations.Add(situation)
|
||||
situation = new situation()
|
||||
|
||||
/datum/round_event/shuttle_loan/announce(fake)
|
||||
@@ -76,10 +77,12 @@
|
||||
|
||||
//get empty turfs
|
||||
var/list/empty_shuttle_turfs = list()
|
||||
var/list/blocked_shutte_turfs = list()
|
||||
var/list/area/shuttle/shuttle_areas = SSshuttle.supply.shuttle_areas
|
||||
for(var/area/shuttle/shuttle_area as anything in shuttle_areas)
|
||||
for(var/turf/open/floor/shuttle_turf in shuttle_area)
|
||||
if(shuttle_turf.is_blocked_turf())
|
||||
blocked_shutte_turfs += shuttle_turf
|
||||
continue
|
||||
empty_shuttle_turfs += shuttle_turf
|
||||
if(!empty_shuttle_turfs.len)
|
||||
@@ -87,7 +90,7 @@
|
||||
|
||||
//let the situation spawn its items
|
||||
var/list/spawn_list = list()
|
||||
situation.spawn_items(spawn_list, empty_shuttle_turfs)
|
||||
situation.spawn_items(spawn_list, empty_shuttle_turfs, blocked_shutte_turfs)
|
||||
|
||||
var/false_positive = 0
|
||||
while(spawn_list.len && empty_shuttle_turfs.len)
|
||||
@@ -103,7 +106,7 @@
|
||||
|
||||
/datum/event_admin_setup/listed_options/shuttle_loan/get_list()
|
||||
var/datum/round_event_control/shuttle_loan/loan_event = event_control
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.run_situations
|
||||
var/list/valid_situations = subtypesof(/datum/shuttle_loan_situation) - loan_event.unavailable_situations
|
||||
return valid_situations
|
||||
|
||||
/datum/event_admin_setup/listed_options/shuttle_loan/apply_to_event(datum/round_event/shuttle_loan/event)
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 37 KiB After Width: | Height: | Size: 40 KiB |
Reference in New Issue
Block a user