diff --git a/code/__DEFINES/wall_dents.dm b/code/__DEFINES/wall_dents.dm index 1e4f813849e..555f98671c0 100644 --- a/code/__DEFINES/wall_dents.dm +++ b/code/__DEFINES/wall_dents.dm @@ -1,2 +1,3 @@ #define WALL_DENT_HIT 1 #define WALL_DENT_SHOT 2 +#define MAX_DENT_DECALS 15 diff --git a/code/datums/station_traits/negative_traits.dm b/code/datums/station_traits/negative_traits.dm index e623c9b1870..f73bd480f84 100644 --- a/code/datums/station_traits/negative_traits.dm +++ b/code/datums/station_traits/negative_traits.dm @@ -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" diff --git a/code/game/objects/effects/spawners/random/contraband.dm b/code/game/objects/effects/spawners/random/contraband.dm index f5bf0f452a3..ca5acbdbe67 100644 --- a/code/game/objects/effects/spawners/random/contraband.dm +++ b/code/game/objects/effects/spawners/random/contraband.dm @@ -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, + ) diff --git a/code/game/objects/effects/spawners/random/entertainment.dm b/code/game/objects/effects/spawners/random/entertainment.dm index 1c635f07a5a..0a61cd1ab1f 100644 --- a/code/game/objects/effects/spawners/random/entertainment.dm +++ b/code/game/objects/effects/spawners/random/entertainment.dm @@ -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 + ) diff --git a/code/game/objects/effects/spawners/random/food_or_drink.dm b/code/game/objects/effects/spawners/random/food_or_drink.dm index b2639b2df68..192914b6e3d 100644 --- a/code/game/objects/effects/spawners/random/food_or_drink.dm +++ b/code/game/objects/effects/spawners/random/food_or_drink.dm @@ -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, + ) diff --git a/code/game/objects/items/mail.dm b/code/game/objects/items/mail.dm index d058f96a40c..50b81ab6bc3 100644 --- a/code/game/objects/items/mail.dm +++ b/code/game/objects/items/mail.dm @@ -154,14 +154,18 @@ /obj/item/mail/examine_more(mob/user) . = ..() - var/list/msg = list(span_notice("You notice the postmarking on the front of the mail...")) + if(!postmarked) + . += span_info("This mail has no postmarking of any sort...") + else + . += span_notice("You notice the postmarking on the front of the mail...") 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) @@ -251,6 +255,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() . = ..() @@ -261,6 +267,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) @@ -306,6 +317,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 @@ -383,7 +407,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 @@ -414,6 +439,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." diff --git a/code/game/turfs/closed/walls.dm b/code/game/turfs/closed/walls.dm index f8d411acee4..2cc6d32bc03 100644 --- a/code/game/turfs/closed/walls.dm +++ b/code/game/turfs/closed/walls.dm @@ -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 diff --git a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm index 6c325e43da3..706274dfd85 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_datum.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_datum.dm @@ -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,8 +164,8 @@ bonus_points = 0 logging_desc = "Pizza delivery" -/datum/shuttle_loan_situation/pizza_delivery/spawn_items(list/spawn_list, list/empty_shuttle_turfs) - var/naughtypizza = list(/obj/item/pizzabox/bomb /*/obj/item/pizzabox/margherita/robo*/) // SKYRAT EDIT: oh look another blacklist, for pizza nonetheless! removes borg pizza +/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) spawn_list.Add(pick(prob(5) ? naughtypizza : nicepizza)) @@ -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 diff --git a/code/modules/events/shuttle_loan/shuttle_loan_event.dm b/code/modules/events/shuttle_loan/shuttle_loan_event.dm index 6eeddea0214..99e70e39495 100644 --- a/code/modules/events/shuttle_loan/shuttle_loan_event.dm +++ b/code/modules/events/shuttle_loan/shuttle_loan_event.dm @@ -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) diff --git a/icons/obj/storage/crates.dmi b/icons/obj/storage/crates.dmi index 274af66c820..9bc8f4d2c27 100644 Binary files a/icons/obj/storage/crates.dmi and b/icons/obj/storage/crates.dmi differ