diff --git a/code/datums/weather/weather.dm b/code/datums/weather/weather.dm index 02dbccfb1db..c1afdea4ca6 100644 --- a/code/datums/weather/weather.dm +++ b/code/datums/weather/weather.dm @@ -20,6 +20,7 @@ var/weather_duration_upper = 1500 //See above - this is the highest possible duration var/weather_sound var/weather_overlay + var/weather_color = null var/end_message = "The wind relents its assault." //Displayed once the wather is over var/end_duration = 300 //In deciseconds, how long the "wind-down" graphic will appear before vanishing entirely @@ -125,6 +126,7 @@ N.layer = overlay_layer N.icon = 'icons/effects/weather_effects.dmi' N.invisibility = 0 + N.color = weather_color switch(stage) if(STARTUP_STAGE) N.icon_state = telegraph_overlay @@ -133,6 +135,7 @@ if(WIND_DOWN_STAGE) N.icon_state = end_overlay if(END_STAGE) + N.color = null N.icon_state = initial(N.icon_state) N.icon = 'icons/turf/areas.dmi' N.layer = AREA_LAYER //Just default back to normal area stuff since I assume setting a var is faster than initial diff --git a/code/datums/weather/weather_types.dm b/code/datums/weather/weather_types.dm index 083c92d2937..535f882d4bf 100644 --- a/code/datums/weather/weather_types.dm +++ b/code/datums/weather/weather_types.dm @@ -118,12 +118,15 @@ name = "radiation storm" desc = "A cloud of intense radiation passes through the area dealing rad damage to those who are unprotected." - telegraph_duration = 300 - telegraph_message = "The air begins to grow warm." + telegraph_duration = 600 + telegraph_message = "The air begins to grow warm." weather_message = "You feel waves of heat wash over you! Find shelter!" + weather_overlay = "ash_storm" weather_duration_lower = 600 weather_duration_upper = 1500 + weather_color = "green" + weather_sound = 'sound/misc/bloblarm.ogg' end_duration = 100 end_message = "The air seems to be cooling off again." @@ -135,19 +138,25 @@ immunity_type = "rad" /datum/weather/rad_storm/impact(mob/living/L) - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.dna && H.dna.species) - if(!(RADIMMUNE in H.dna.species.specflags)) - if(prob(25)) - if(prob(25)) + if(prob(20)) + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.dna && H.dna.species) + if(!(RADIMMUNE in H.dna.species.specflags)) + if(prob(50)) randmuti(H) - if(prob(90)) - randmutb(H) - else - randmutg(H) - H.domutcheck() - L.rad_act(20,1) + if(prob(90)) + randmutb(H) + else + randmutg(H) + H.domutcheck() + L.rad_act(20,1) + + L.adjustToxLoss(4) + + + + /datum/weather/rad_storm/end() if(..()) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index 0bc318a5494..d58b2f71d03 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -109,6 +109,7 @@ if(isEmpProof()) return ..() + qdel(src)//to prevent bomb testing camera from exploding over and over forever /obj/machinery/camera/blob_act(obj/effect/blob/B) if(B && B.loc == loc) diff --git a/code/game/machinery/doors/door.dm b/code/game/machinery/doors/door.dm index 351107b7ded..ac8291cd6b0 100644 --- a/code/game/machinery/doors/door.dm +++ b/code/game/machinery/doors/door.dm @@ -49,13 +49,17 @@ //return /obj/machinery/door/Bumped(atom/AM) - if(operating || emagged) return + if(operating || emagged) + return + if(isliving(AM)) var/mob/living/M = AM - if(world.time - M.last_bumped <= 10) return //Can bump-open one airlock per second. This is to prevent shock spam. + if(world.time - M.last_bumped <= 10) + return //Can bump-open one airlock per second. This is to prevent shock spam. M.last_bumped = world.time - if(!M.restrained()) - bumpopen(M) + if(M.restrained() && !check_access(null)) + return + bumpopen(M) return if(istype(AM, /obj/mecha)) diff --git a/code/game/objects/items/weapons/explosives.dm b/code/game/objects/items/weapons/explosives.dm index 373e4558dd4..57a33afa574 100644 --- a/code/game/objects/items/weapons/explosives.dm +++ b/code/game/objects/items/weapons/explosives.dm @@ -43,8 +43,8 @@ message_say = "[uppertext(user.mind.gang_datum.name)] RULES!" user.say(message_say) target = user - message_admins("[key_name_admin(user)](?) (FLW) suicided with [src.name] at ([x],[y],[z] - JMP)",0,1) - message_admins("[key_name(user)] suicided with [src.name] at ([x],[y],[z])") + message_admins("[ADMIN_LOOKUPFLW(user)] suicided with [name] at [ADMIN_COORDJMP(src)]",0,1) + message_admins("[key_name(user)] suicided with [name] at ([x],[y],[z])") sleep(10) explode(get_turf(user)) user.gib(1, 1) @@ -87,8 +87,10 @@ src.target = AM loc = null - message_admins("[key_name_admin(user)](?) (FLW) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [timer] second fuse",0,1) - log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [timer] second fuse") + var/message = "[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [timer] second fuse" + bombers += message + message_admins(message,0,1) + log_game("[key_name(user)] planted [name] on [target.name] at [COORD(target)] with [timer] second fuse") target.add_overlay(image_overlay, 1) user << "You plant the bomb. Timer counting down from [timer]." diff --git a/code/game/objects/items/weapons/grenades/ghettobomb.dm b/code/game/objects/items/weapons/grenades/ghettobomb.dm index 7c02af54709..a72e63d7684 100644 --- a/code/game/objects/items/weapons/grenades/ghettobomb.dm +++ b/code/game/objects/items/weapons/grenades/ghettobomb.dm @@ -50,8 +50,8 @@ var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) - message_admins("[key_name_admin(usr)]? (FLW) has primed a [name] for detonation at [A.name] (JMP).") - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") + message_admins("[ADMIN_LOOKUPFLW(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)].") + log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(bombturf)].") if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() diff --git a/code/game/objects/items/weapons/grenades/grenade.dm b/code/game/objects/items/weapons/grenades/grenade.dm index b1f6e2c7284..60f8799ae76 100644 --- a/code/game/objects/items/weapons/grenades/grenade.dm +++ b/code/game/objects/items/weapons/grenades/grenade.dm @@ -52,8 +52,10 @@ add_fingerprint(user) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) - message_admins("[key_name_admin(usr)]? (FLW) has primed a [name] for detonation at [A.name] (JMP).") - log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] ([bombturf.x],[bombturf.y],[bombturf.z]).") + var/message = "[ADMIN_LOOKUPFLW(user)]) has primed a [name] for detonation at [ADMIN_COORDJMP(src)]" + bombers += message + message_admins(message) + log_game("[key_name(usr)] has primed a [name] for detonation at [A.name] [COORD(src)].") if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() diff --git a/code/game/objects/items/weapons/grenades/plastic.dm b/code/game/objects/items/weapons/grenades/plastic.dm index 9ad00781e80..3af83500b67 100644 --- a/code/game/objects/items/weapons/grenades/plastic.dm +++ b/code/game/objects/items/weapons/grenades/plastic.dm @@ -78,8 +78,8 @@ src.target = AM loc = null - message_admins("[key_name_admin(user)](?) (FLW) planted [src.name] on [target.name] at ([target.x],[target.y],[target.z] - JMP) with [det_time] second fuse",0,1) - log_game("[key_name(user)] planted [src.name] on [target.name] at ([target.x],[target.y],[target.z]) with [det_time] second fuse") + message_admins("[ADMIN_LOOKUPFLW(user)] planted [name] on [target.name] at [ADMIN_COORDJMP(target)] with [det_time] second fuse",0,1) + log_game("[key_name(user)] planted [name] on [target.name] at [COORD(src)] with [det_time] second fuse") target.add_overlay(image_overlay, 1) if(!nadeassembly) diff --git a/code/game/objects/items/weapons/grenades/syndieminibomb.dm b/code/game/objects/items/weapons/grenades/syndieminibomb.dm index 9db3a15d37f..bbc2f455aae 100644 --- a/code/game/objects/items/weapons/grenades/syndieminibomb.dm +++ b/code/game/objects/items/weapons/grenades/syndieminibomb.dm @@ -6,6 +6,7 @@ item_state = "flashbang" origin_tech = "materials=3;magnets=4;syndicate=3" + /obj/item/weapon/grenade/syndieminibomb/prime() update_mob() explosion(src.loc,1,2,4,flame_range = 2) diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index 946b2caf509..b81634de888 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -38,7 +38,7 @@ LINEN BINS /obj/item/weapon/bedsheet/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/wirecutters) || I.is_sharp()) - var/obj/item/stack/sheet/cloth/C = new (loc, 3) + var/obj/item/stack/sheet/cloth/C = new (get_turf(src), 3) transfer_fingerprints_to(C) C.add_fingerprint(user) qdel(src) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index c65cd051b5d..46e2e08b60f 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -103,16 +103,19 @@ else return ..() - - /obj/structure/urinal name = "urinal" - desc = "The HU-452, an experimental urinal." + desc = "The HU-452, an experimental urinal. Comes complete with experimental urinal cake." icon = 'icons/obj/watercloset.dmi' icon_state = "urinal" density = 0 anchored = 1 + var/exposed = 0 // can you currently put an item inside + var/obj/item/hiddenitem = null // what's in the urinal +/obj/structure/urinal/New() + ..() + hiddenitem = new /obj/item/weapon/reagent_containers/food/urinalcake /obj/structure/urinal/attack_hand(mob/user) if(user.pulling && user.a_intent == "grab" && isliving(user.pulling)) @@ -126,9 +129,49 @@ GM.adjustBruteLoss(8) else user << "You need a tighter grip!" + + else if(exposed) + if(!hiddenitem) + user << "There is nothing in the drain holder." + else + if(ishuman(user)) + user.put_in_hands(hiddenitem) + else + hiddenitem.forceMove(get_turf(src)) + user << "You fish [hiddenitem] out of the drain enclosure." else ..() +/obj/structure/urinal/attackby(obj/item/I, mob/living/user, params) + if(istype(I, /obj/item/weapon/screwdriver)) + user << "You start to [exposed ? "screw the cap back into place" : "unscrew the cap to the drain protector"]..." + playsound(loc, 'sound/effects/stonedoor_openclose.ogg', 50, 1) + if(do_after(user, 20/I.toolspeed, target = src)) + user.visible_message("[user] [exposed ? "screws the cap back into place" : "unscrew the cap to the drain protector"]!", "You [exposed ? "screw the cap back into place" : "unscrew the cap on the drain"]!", "You hear metal and squishing noises.") + exposed = !exposed + else if(exposed) + if (hiddenitem) + user << "There is already something in the drain enclosure." + return + if(I.w_class > 1) + user << "[I] is too large for the drain enclosure." + return + if(!user.drop_item()) + user << "\[I] is stuck to your hand, you cannot put it in the drain enclosure!" + return + I.forceMove(src) + hiddenitem = I + user << "You place [I] into the drain enclosure." + + +/obj/item/weapon/reagent_containers/food/urinalcake + name = "urinal cake" + desc = "The noble urinal cake, protecting the station's pipes from the station's pee. Do not eat." + icon = 'icons/obj/items.dmi' + icon_state = "urinalcake" + w_class = 1 + list_reagents = list("chlorine" = 3, "ammonia" = 1) + /obj/machinery/shower name = "shower" desc = "The HS-451. Installed in the 2550s by the Nanotrasen Hygiene Division." @@ -376,7 +419,7 @@ var/washing_face = 0 if(selected_area in list("head", "mouth", "eyes")) washing_face = 1 - user.visible_message("[user] start washing their [washing_face ? "face" : "hands"]...", \ + user.visible_message("[user] starts washing their [washing_face ? "face" : "hands"]...", \ "You start washing your [washing_face ? "face" : "hands"]...") busy = 1 diff --git a/code/modules/cargo/packs.dm b/code/modules/cargo/packs.dm index a002694149f..81fab5def1a 100644 --- a/code/modules/cargo/packs.dm +++ b/code/modules/cargo/packs.dm @@ -147,11 +147,27 @@ name = "NULL_ENTRY" hidden = TRUE cost = 14000 - contains = list(/obj/item/weapon/storage/box/syndicate) + contains = list() crate_name = "emergency crate" crate_type = /obj/structure/closet/crate/internals dangerous = TRUE +/datum/supply_pack/emergency/syndicate/fill(obj/structure/closet/crate/C) + var/static/list/uplink_items = get_uplink_items() + + var/crate_value = 50 + while(crate_value) + var/category = pick(uplink_items) + var/item = pick(uplink_items[category]) + var/datum/uplink_item/I = uplink_items[category][item] + + if(!I.surplus || prob(100 - I.surplus)) + continue + if(crate_value < I.cost) + continue + crate_value -= I.cost + new I.item(C) + ////////////////////////////////////////////////////////////////////////////// //////////////////////////// Security //////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////// diff --git a/code/modules/crafting/craft.dm b/code/modules/crafting/craft.dm index 0fbd60d3b06..70f45474c5f 100644 --- a/code/modules/crafting/craft.dm +++ b/code/modules/crafting/craft.dm @@ -110,7 +110,6 @@ return 1 /datum/personal_crafting/proc/construct_item(mob/user, datum/crafting_recipe/R) - for(var/A in R.parts) var/list/contents = get_surroundings(user) var/send_feedback = 1 if(check_contents(R, contents)) diff --git a/code/modules/food_and_drinks/drinks/drinks/bottle.dm b/code/modules/food_and_drinks/drinks/drinks/bottle.dm index b60417bac28..306db8311da 100644 --- a/code/modules/food_and_drinks/drinks/drinks/bottle.dm +++ b/code/modules/food_and_drinks/drinks/drinks/bottle.dm @@ -375,8 +375,10 @@ active = 1 var/turf/bombturf = get_turf(src) var/area/bombarea = get_area(bombturf) - message_admins("[key_name(user)]? has primed a [name] for detonation at [bombarea] (JMP).") - log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] ([bombturf.x],[bombturf.y],[bombturf.z]).") + var/message = "[ADMIN_LOOKUP(user)] has primed a [name] for detonation at [ADMIN_COORDJMP(bombturf)]." + bombers += message + message_admins(message) + log_game("[key_name(user)] has primed a [name] for detonation at [bombarea] [COORD(bombturf)].") user << "You light \the [src] on fire." add_overlay(fire_overlay) diff --git a/code/modules/food_and_drinks/food/snacks.dm b/code/modules/food_and_drinks/food/snacks.dm index 714e6d4eaa4..b257ff42d8e 100644 --- a/code/modules/food_and_drinks/food/snacks.dm +++ b/code/modules/food_and_drinks/food/snacks.dm @@ -154,17 +154,18 @@ return 1 //Called when you finish tablecrafting a snack. -/obj/item/weapon/reagent_containers/food/snacks/CheckParts(list/parts_list, datum/crafting_recipe/R) +/obj/item/weapon/reagent_containers/food/snacks/CheckParts(list/parts_list, datum/crafting_recipe/food/R) ..() reagents.reagent_list.Cut() for(var/obj/item/weapon/reagent_containers/RC in contents) RC.reagents.trans_to(reagents, RC.reagents.maximum_volume) - contents_loop: - for(var/A in contents) - for(var/B in initial(R.parts)) - if(istype(A, B)) - continue contents_loop - qdel(A) + if(istype(R)) + contents_loop: + for(var/A in contents) + for(var/B in R.real_parts) + if(istype(A, B)) + continue contents_loop + qdel(A) feedback_add_details("food_made","[type]") if(bonus_reagents.len) for(var/r_id in bonus_reagents) diff --git a/code/modules/food_and_drinks/pizzabox.dm b/code/modules/food_and_drinks/pizzabox.dm index 47583de1bf6..55653911f47 100644 --- a/code/modules/food_and_drinks/pizzabox.dm +++ b/code/modules/food_and_drinks/pizzabox.dm @@ -31,6 +31,7 @@ /obj/item/pizzabox/Destroy() unprocess() + return ..() /obj/item/pizzabox/update_icon() // Description @@ -106,7 +107,9 @@ bomb_timer = Clamp(Ceiling(bomb_timer / 2), BOMB_TIMER_MIN, BOMB_TIMER_MAX) bomb_defused = FALSE - message_admins("[key_name_admin(user)]? (FLW) has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds.") + var/message = "[ADMIN_LOOKUPFLW(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds." + bombers += message + message_admins(message) log_game("[key_name(user)] has trapped a [src] with [bomb] set to [bomb_timer * 2] seconds.") bomb.adminlog = "The [bomb.name] in [src.name] that [key_name(user)] activated has detonated!" diff --git a/code/modules/food_and_drinks/recipes/food_mixtures.dm b/code/modules/food_and_drinks/recipes/food_mixtures.dm index c8362a14ad7..ba4c562eb7f 100644 --- a/code/modules/food_and_drinks/recipes/food_mixtures.dm +++ b/code/modules/food_and_drinks/recipes/food_mixtures.dm @@ -1,4 +1,8 @@ +/datum/crafting_recipe/food + var/real_parts + /datum/crafting_recipe/food/New() + real_parts = parts.Copy() parts |= reqs //////////////////////////////////////////FOOD MIXTURES//////////////////////////////////// diff --git a/code/modules/hydroponics/grown/citrus.dm b/code/modules/hydroponics/grown/citrus.dm index e0500a68ee6..7f4e692d695 100644 --- a/code/modules/hydroponics/grown/citrus.dm +++ b/code/modules/hydroponics/grown/citrus.dm @@ -104,8 +104,10 @@ /obj/item/weapon/reagent_containers/food/snacks/grown/firelemon/attack_self(mob/living/user) var/area/A = get_area(user) user.visible_message("[user] primes the [src]!", "You prime the [src]!") - message_admins("[user] ([user.key ? user.key : "no key"]) primed a combustible lemon for detonation at [A] ([user.x], [user.y], [user.z]) (JMP)") - log_game("[user] ([user.key ? user.key : "no key"]) primed a combustible lemon for detonation at [A] ([user.x],[user.y],[user.z]).") + var/message = "[ADMIN_LOOKUPFLW(user)] primed a combustible lemon for detonation at [A] [ADMIN_COORDJMP(user)]" + bombers += message + message_admins(message) + log_game("[key_name(user)] primed a combustible lemon for detonation at [A] [COORD(user)].") if(iscarbon(user)) var/mob/living/carbon/C = user C.throw_mode_on() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index e28cf2da6fb..0fcfa4992c1 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -683,6 +683,14 @@ return if(alert(user, "This will make [src] self-sustaining but consume [O] forever. Are you sure?", "[name]", "I'm Sure", "Abort") == "Abort" || !user) return + if(!Adjacent(user)) + return + if(self_sustaining) + user << "This [name] is already self-sustaining!" + return + if(myseed || weedlevel) + user << "[src] needs to be clear of plants and weeds!" + return user.visible_message("[user] gently pulls open the soil for [O] and places it inside.", "You tenderly root [O] into [src].") user.drop_item() qdel(O) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 99522e44faf..abcc8e7521b 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -4,6 +4,7 @@ name = "necropolis chest" desc = "It's watching you closely." icon_state = "necrocrate" + burn_state = LAVA_PROOF /obj/structure/closet/crate/necropolis/tendril desc = "It's watching you suspiciously." diff --git a/code/modules/mob/living/silicon/robot/emote.dm b/code/modules/mob/living/silicon/robot/emote.dm index de797f9fe9a..bbb524a7dc7 100644 --- a/code/modules/mob/living/silicon/robot/emote.dm +++ b/code/modules/mob/living/silicon/robot/emote.dm @@ -236,7 +236,7 @@ else src << "Unusable emote '[act]'. Say *help for a list." - if (message && src.stat == CONSCIOUS) + if (message && stat == CONSCIOUS) log_emote("[name]/[key] : [message]") if (m_type & 1) visible_message(message) @@ -248,9 +248,10 @@ set category = "Robot Commands" set name = "Power Warning" - if(!cell || !cell.charge) - visible_message("The power warning light on [src] flashes urgently.",\ - "You announce you are operating in low power mode.") - playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) - else - src << "You can only use this emote when you're out of charge." \ No newline at end of file + if(stat == CONSCIOUS) + if(!cell || !cell.charge) + visible_message("The power warning light on [src] flashes urgently.",\ + "You announce you are operating in low power mode.") + playsound(loc, 'sound/machines/buzz-two.ogg', 50, 0) + else + src << "You can only use this emote when you're out of charge." \ No newline at end of file diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index ee835dac8fb..6af4d863856 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -15,7 +15,8 @@ var/list/blacklisted_tesla_types = typecacheof(list(/obj/machinery/atmospherics, /obj/machinery/field/containment, /obj/structure/disposalpipe, /obj/structure/sign, - /obj/machinery/gateway)) + /obj/machinery/gateway, + /obj/structure/lattice)) /obj/singularity/energy_ball name = "energy ball" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index bb85566a5f8..ec86f0817f5 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -12,22 +12,22 @@ /obj/structure/reagent_dispensers/ex_act(severity, target) switch(severity) if(1) - qdel(src) + boom() return if(2) if (prob(50)) - qdel(src) + boom() return if(3) if (prob(5)) - qdel(src) + boom() return else return /obj/structure/reagent_dispensers/blob_act(obj/effect/blob/B) if(prob(50)) - qdel(src) + boom() /obj/structure/reagent_dispensers/attackby(obj/item/weapon/W, mob/user, params) if(istype(W, /obj/item/weapon/reagent_containers)) @@ -48,42 +48,39 @@ user << "It's empty." +/obj/structure/reagent_dispensers/proc/boom() + qdel(src) + /obj/structure/reagent_dispensers/watertank name = "water tank" desc = "A water tank." icon_state = "water" -/obj/structure/reagent_dispensers/watertank/ex_act(severity, target) - switch(severity) - if(1) - qdel(src) - return - if(2) - if (prob(50)) - PoolOrNew(/obj/effect/particle_effect/water, src.loc) - qdel(src) - return - if(3) - if (prob(5)) - PoolOrNew(/obj/effect/particle_effect/water, src.loc) - qdel(src) - return - else - return +/obj/structure/reagent_dispensers/waterank/bullet_act(obj/item/projectile/Proj) + ..() + if(tank_volume && istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) + boom() + +/obj/structure/reagent_dispensers/watertank/boom() + playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6) + PoolOrNew(/obj/effect/particle_effect/water, loc) + for(var/turf/open/T in view(5,loc)) + T.MakeSlippery(min_wet_time = 20, wet_time_to_add = 15) + for(var/mob/living/L in T) + L.adjust_fire_stacks(-20) + qdel(src) /obj/structure/reagent_dispensers/watertank/blob_act(obj/effect/blob/B) if(prob(50)) PoolOrNew(/obj/effect/particle_effect/water, loc) qdel(src) - /obj/structure/reagent_dispensers/watertank/high name = "high-capacity water tank" desc = "A highly-pressurized water tank made to hold gargantuan amounts of water.." icon_state = "water_high" //I was gonna clean my room... tank_volume = 100000 - /obj/structure/reagent_dispensers/fueltank name = "fuel tank" desc = "A tank full of industrial welding fuel. Do not consume." @@ -93,11 +90,13 @@ /obj/structure/reagent_dispensers/fueltank/bullet_act(obj/item/projectile/Proj) ..() if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE))) - message_admins("[key_name_admin(Proj.firer)] triggered a fueltank explosion via projectile.") + var/boom_message = "[key_name_admin(Proj.firer)] triggered a fueltank explosion via projectile." + bombers += boom_message + message_admins(boom_message) log_game("[key_name(Proj.firer)] triggered a fueltank explosion via projectile.") boom() -/obj/structure/reagent_dispensers/fueltank/proc/boom() +/obj/structure/reagent_dispensers/fueltank/boom() explosion(get_turf(src), 0, 1, 5, flame_range = 5) qdel(src) @@ -130,7 +129,9 @@ update_icon() else user.visible_message("[user] catastrophically fails at refilling \his [W.name]!", "That was stupid of you.") - message_admins("[key_name_admin(user)] triggered a fueltank explosion via welding tool.") + var/message = "[key_name_admin(user)] triggered a fueltank explosion via welding tool." + bombers += message + message_admins(message) log_game("[key_name(user)] triggered a fueltank explosion via welding tool.") boom() return @@ -189,4 +190,4 @@ desc = "A dispenser of low-potency virus mutagenic." icon_state = "virus_food" anchored = 1 - reagent_id = "virusfood" + reagent_id = "virusfood" \ No newline at end of file diff --git a/code/modules/stock_market/stocks.dm b/code/modules/stock_market/stocks.dm index 6a6b6600d95..b75a5e56a16 100644 --- a/code/modules/stock_market/stocks.dm +++ b/code/modules/stock_market/stocks.dm @@ -139,8 +139,11 @@ speculation += rand(-400, 0) / 1000 * speculation if (prob(1) && prob(5)) // pop that bubble speculation += rand(-4000, 0) / 1000 * speculation - - current_value += (speculation / rand(25000, 50000) + performance / rand(100, 800)) * current_value + var/fucking_stock_spikes = current_value + 500 + var/piece_of_shit_fuck = current_value - 500 + var/i_hate_this_code = (speculation / rand(25000, 50000) + performance / rand(100, 800)) * current_value + if(i_hate_this_code < fucking_stock_spikes || i_hate_this_code > piece_of_shit_fuck) + current_value += i_hate_this_code if (current_value < 5) current_value = 5 @@ -306,4 +309,4 @@ return 0 /datum/stock/proc/displayValues(var/mob/user) - user << browse(plotBarGraph(values, "[name] share value per share"), "window=stock_[name];size=450x450") \ No newline at end of file + user << browse(plotBarGraph(values, "[name] share value per share"), "window=stock_[name];size=450x450") diff --git a/html/changelog.html b/html/changelog.html index 02d04296a05..005e0ea5582 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,64 @@ -->