diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index 49fb54d5094..bea84778558 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -20,7 +20,7 @@ Pipelines + Other Objects -> Pipe network var/initialize_directions = 0 var/pipe_color var/obj/item/pipe/stored - var/welded = 0 //Used on pumps and scrubbers + var/welded //Used on pumps and scrubbers var/global/list/iconsetids = list() var/global/list/pipeimages = list() var/datum/pipeline/parent = null diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 459bf870c66..3765c5f328e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -7,6 +7,8 @@ can_unwrench = 1 + welded = 0 + var/area/initial_loc level = 1 var/area_uid diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index 9588baa7ee7..a6801c3bf0e 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -9,6 +9,8 @@ can_unwrench = 1 + welded = 0 + var/area/initial_loc var/id_tag = null var/frequency = 1439 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index f83878efb29..b4e7aaaf3ce 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -514,7 +514,6 @@ Turf and target are seperate in case you want to teleport some distance from a t // returns the turf located at the map edge in the specified direction relative to A // used for mass driver /proc/get_edge_target_turf(var/atom/A, var/direction) - var/turf/target = locate(A.x, A.y, A.z) if(!A || !target) return 0 @@ -530,7 +529,6 @@ Turf and target are seperate in case you want to teleport some distance from a t target = locate(world.maxx, target.y, target.z) if(direction & WEST) target = locate(1, target.y, target.z) - return target // returns turf relative to A in given direction at set range diff --git a/code/game/atoms_movable.dm b/code/game/atoms_movable.dm index f24e6bf8e4f..e904280e175 100644 --- a/code/game/atoms_movable.dm +++ b/code/game/atoms_movable.dm @@ -94,16 +94,13 @@ return /atom/movable/Bump(var/atom/A as mob|obj|turf|area, yes) - if(src.throwing) - src.throw_impact(A) - src.throwing = 0 - + if(throwing) + throw_impact(A) + throwing = 0 if ((A && yes)) A.last_bumped = world.time A.Bumped(src) - return - ..() - return + /atom/movable/proc/forceMove(atom/destination) if(destination) diff --git a/code/game/gamemodes/blob/blobs/blob_mobs.dm b/code/game/gamemodes/blob/blobs/blob_mobs.dm index 8580c480ab1..2961be7eb35 100644 --- a/code/game/gamemodes/blob/blobs/blob_mobs.dm +++ b/code/game/gamemodes/blob/blobs/blob_mobs.dm @@ -94,16 +94,16 @@ var/turf/location = get_turf(src) // Create the reagents to put into the air - create_reagents(25) + create_reagents(5) if(overmind && overmind.blob_reagent_datum) - reagents.add_reagent(overmind.blob_reagent_datum.id, 25) + reagents.add_reagent(overmind.blob_reagent_datum.id, 5) else - reagents.add_reagent("spore", 25) + reagents.add_reagent("spore", 5) // Attach the smoke spreader and setup/start it. S.attach(location) - S.set_up(reagents, 1, 1, location, 15, 1) // only 1-2 smoke cloud + S.set_up(reagents, 1, 1, location, 15, 1) // only 1 smoke cloud S.start() ghostize() diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm index 81031ea3985..49005536c82 100644 --- a/code/game/objects/effects/effect_system/effects_foam.dm +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -7,7 +7,7 @@ opacity = 0 anchored = 1 density = 0 - layer = TURF_LAYER + 0.1 + layer = OBJ_LAYER + 0.05 //above table, below windoor/airlock/foamed metal. mouse_opacity = 0 var/amount = 3 animate_movement = 0 @@ -15,7 +15,7 @@ var/lifetime = 6 -/obj/effect/effect/foam/metal/aluminium +/obj/effect/effect/foam/metal name = "aluminium foam" metal = 1 icon_state = "mfoam" @@ -153,7 +153,7 @@ location = get_turf(loca) amount = round(sqrt(amt / 2), 1) - carry.copy_to(chemholder, carry.total_volume) + carry.copy_to(chemholder, 4*carry.total_volume) //The foam holds 4 times the total reagents volume for balance purposes. /datum/effect/effect/system/foam_spread/metal/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metaltype) ..() @@ -166,7 +166,7 @@ else var/obj/effect/effect/foam/F = PoolOrNew(foamtype, location) var/foamcolor = mix_color_from_reagents(chemholder.reagents.reagent_list) - chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount) //how much reagents each foam cell holds + chemholder.reagents.copy_to(F, chemholder.reagents.total_volume/amount) F.color = foamcolor F.amount = amount F.metal = metal diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index 1f447c5c1f9..f1b45cc23e4 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -149,11 +149,10 @@ icon = 'icons/effects/chemsmoke.dmi' icon_state = "" lifetime = 10 - var/max_lifetime = 10 /obj/effect/effect/smoke/chem/process() if(..()) - var/fraction = 1/max_lifetime + var/fraction = 1/initial(lifetime) for(var/obj/O in range(1,src)) if(O.type == src.type) continue @@ -173,7 +172,7 @@ return 0 if(!istype(M)) return 0 - var/fraction = 1/max_lifetime + var/fraction = 1/initial(lifetime) reagents.reaction(M, TOUCH, fraction) lifetime-- return 1 @@ -207,7 +206,7 @@ location = get_turf(loca) if(direct) direction = direct - carry.copy_to(chemholder, carry.total_volume) + carry.copy_to(chemholder, 4*carry.total_volume) //The smoke holds 4 times the total reagents volume for balance purposes. if(!silent) var/contained = "" @@ -256,8 +255,6 @@ else S.steps = pick(0,1,1,1,2,2,2,3) - S.max_lifetime = S.lifetime - if(chemholder.reagents.total_volume > 1) // can't split 1 very well chemholder.reagents.copy_to(S, chemholder.reagents.total_volume/number) // copy reagents to each smoke, divide evenly diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 2ab9f5a64dd..ab4bed24950 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -355,11 +355,11 @@ var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src) var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src) - B1.reagents.add_reagent("condensedcapsaicin", 70) - B1.reagents.add_reagent("potassium", 30) - B2.reagents.add_reagent("phosphorus", 30) - B2.reagents.add_reagent("sugar", 30) - B1.reagents.add_reagent("condensedcapsaicin", 40) + B1.reagents.add_reagent("condensedcapsaicin", 60) + B1.reagents.add_reagent("potassium", 40) + B2.reagents.add_reagent("phosphorus", 40) + B2.reagents.add_reagent("sugar", 40) + B1.reagents.add_reagent("condensedcapsaicin", 20) beakers += B1 beakers += B2 diff --git a/code/game/objects/items/weapons/tanks/watertank.dm b/code/game/objects/items/weapons/tanks/watertank.dm index 08808afdc04..7ab76a4e520 100644 --- a/code/game/objects/items/weapons/tanks/watertank.dm +++ b/code/game/objects/items/weapons/tanks/watertank.dm @@ -191,6 +191,10 @@ item_state = "waterbackpackatmos" volume = 200 +/obj/item/weapon/watertank/atmos/New() + ..() + reagents.add_reagent("water", 200) + /obj/item/weapon/watertank/atmos/make_noz() return new /obj/item/weapon/extinguisher/mini/nozzle(src) @@ -294,8 +298,7 @@ F.amount = 0 metal_synthesis_cooldown++ spawn(100) - if(src) - metal_synthesis_cooldown-- + metal_synthesis_cooldown-- else user << "Metal foam mix is still being synthesized..." return @@ -333,7 +336,7 @@ var/turf/simulated/T = A if(T.air) var/datum/gas_mixture/G = T.air - if(get_dist(T, src) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air + if(get_dist(T, location) < 2) // Otherwise we'll get silliness like people using Nanofrost to kill people through walls with cold air G.temperature = 2 T.air_update_turf() for(var/obj/effect/hotspot/H in T) @@ -341,10 +344,11 @@ if(G.toxins) G.nitrogen += (G.toxins) G.toxins = 0 - for(var/obj/machinery/atmospherics/unary/vent_pump/V in T) - V.welded = 1 - V.update_icon() - V.visible_message("[V] was frozen shut!") + for(var/obj/machinery/atmospherics/unary/U in T) + if(!isnull(U.welded) && !U.welded) //must be an unwelded vent pump or vent scrubber. + U.welded = 1 + U.update_icon() + U.visible_message("[U] was frozen shut!") for(var/mob/living/L in T) L.ExtinguishMob() for(var/obj/item/Item in T) diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 5f9ea9ff9d8..45396b99eba 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -1177,7 +1177,7 @@ if(!H.has_smoke_protection()) for(var/obj/effect/effect/smoke/chem/S in range(1, H)) if(S.reagents.total_volume && S.lifetime) - var/fraction = 1/S.max_lifetime + var/fraction = 1/initial(S.lifetime) S.reagents.reaction(H,INGEST, fraction) var/amount = round(S.reagents.total_volume*fraction,0.1) S.reagents.copy_to(H, amount) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index b019a52ab44..df487d56b87 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -73,7 +73,7 @@ if(!has_smoke_protection()) for(var/obj/effect/effect/smoke/chem/S in range(1, src)) if(S.reagents.total_volume && S.lifetime) - var/fraction = 1/S.max_lifetime + var/fraction = 1/initial(S.lifetime) S.reagents.reaction(src,INGEST, fraction) var/amount = round(S.reagents.total_volume*fraction,0.1) S.reagents.copy_to(src, amount) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 19826ce0d21..da820b5d877 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -173,16 +173,31 @@ /datum/reagent/blob/proc/reagent_vortex(var/mob/living/M as mob, var/setting_type) var/turf/pull = get_turf(M) - for(var/atom/movable/X in range(4,pull)) - if(istype(X, /atom/movable)) - if((X) && !X.anchored) - if(setting_type) - step_away(X,pull) - step_away(X,pull) - step_away(X,pull) - step_away(X,pull) + var/range_power = Clamp(round(volume/5, 1), 1, 5) + for(var/atom/movable/X in range(range_power,pull)) + if(X && !X.anchored) + var/distance = get_dist(X, pull) + var/moving_power = max(range_power - distance, 1) + spawn(0) + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, pull))) + var/throw_range = 5 - distance + X.throw_at(throw_target, throw_range, 1) + else + X.throw_at(pull, distance, 1) else - X.throw_at(pull) + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, pull)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, pull)) + break + /datum/reagent/blob/proc/send_message(var/mob/living/M as mob) var/totalmessage = message diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index 9555c8a126a..f632e72e590 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -78,15 +78,28 @@ for(var/j = 1, j <= rand(1, 3), j++) step(C, pick(NORTH,SOUTH,EAST,WEST)) -/datum/chemical_reaction/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range, var/pull_times) +/datum/chemical_reaction/proc/goonchem_vortex(var/turf/simulated/T, var/setting_type, var/range) for(var/atom/movable/X in orange(range, T)) if(istype(X, /obj/effect)) - continue //stop pulling smoke and hotspots please - if(istype(X, /atom/movable)) - if((X) && !X.anchored) - if(setting_type) - for(var/i = 0, i < pull_times, i++) - step_away(X,T) + continue + if(X && !X.anchored) + var/distance = get_dist(X, T) + var/moving_power = max(range - distance, 1) + spawn(0) //so everything moves at the same time. + if(moving_power > 2) //if the vortex is powerful and we're close, we get thrown + if(setting_type) + var/atom/throw_target = get_edge_target_turf(X, get_dir(X, get_step_away(X, T))) + X.throw_at(throw_target, moving_power, 1) + else + X.throw_at(T, moving_power, 1) else - for(var/i = 0, i < pull_times, i++) - step_towards(X,T) \ No newline at end of file + if(setting_type) + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_away(X, T)) + break + else + for(var/i = 0, i < moving_power, i++) + sleep(2) + if(!step_towards(X, T)) + break \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm b/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm index ba20b7c7817..ecfbf01d851 100644 --- a/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm +++ b/code/modules/reagents/Chemistry-Recipes/Pyrotechnics.dm @@ -124,18 +124,21 @@ return holder.remove_reagent("sorium", created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 1, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 1, range) /datum/chemical_reaction/sorium_vortex name = "sorium_vortex" id = "sorium_vortex" result = null + result_amount = 1 required_reagents = list("sorium" = 1) required_temp = 474 /datum/chemical_reaction/sorium_vortex/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 1, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 1, range) /datum/chemical_reaction/liquid_dark_matter @@ -150,18 +153,21 @@ return holder.remove_reagent("liquid_dark_matter", created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 0, 5, 6) + var/range = Clamp(sqrt(created_volume), 1, 6) + goonchem_vortex(T, 0, range) /datum/chemical_reaction/ldm_vortex name = "LDM Vortex" id = "ldm_vortex" result = null + result_amount = 1 required_reagents = list("liquid_dark_matter" = 1) required_temp = 474 /datum/chemical_reaction/ldm_vortex/on_reaction(var/datum/reagents/holder, var/created_volume) var/turf/simulated/T = get_turf(holder.my_atom) - goonchem_vortex(T, 0, 5, 6) + var/range = Clamp(sqrt(created_volume/2), 1, 6) + goonchem_vortex(T, 0, range) /datum/chemical_reaction/flash_powder name = "Flash powder" diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index 553f6c9cfbc..23730bc7565 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -49,6 +49,10 @@ if (N) amount_per_transfer_from_this = N +/obj/structure/reagent_dispensers/examine(mob/user) + ..() + user << "It contains [reagents.total_volume] units." + //Dispensers /obj/structure/reagent_dispensers/watertank name = "watertank" @@ -56,9 +60,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "watertank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("water",1000) + +/obj/structure/reagent_dispensers/watertank/New() + ..() + reagents.add_reagent("water",1000) /obj/structure/reagent_dispensers/watertank/ex_act(severity, target) switch(severity) @@ -89,9 +94,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "weldtank" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("welding_fuel",1000) + +/obj/structure/reagent_dispensers/fueltank/New() + ..() + reagents.add_reagent("welding_fuel",1000) /obj/structure/reagent_dispensers/fueltank/bullet_act(var/obj/item/projectile/Proj) @@ -127,9 +133,10 @@ anchored = 1 density = 0 amount_per_transfer_from_this = 45 - New() - ..() - reagents.add_reagent("condensedcapsaicin",1000) + +/obj/structure/reagent_dispensers/peppertank/New() + ..() + reagents.add_reagent("condensedcapsaicin",1000) /obj/structure/reagent_dispensers/water_cooler @@ -141,9 +148,10 @@ possible_transfer_amounts = null anchored = 1 var/cups = 50 - New() - ..() - reagents.add_reagent("water",500) + +/obj/structure/reagent_dispensers/water_cooler/New() + ..() + reagents.add_reagent("water",500) /obj/structure/reagent_dispensers/water_cooler/attack_hand(var/mob/living/carbon/human/user) if((!istype(user)) || (user.stat)) @@ -170,9 +178,10 @@ icon = 'icons/obj/objects.dmi' icon_state = "beertankTEMP" amount_per_transfer_from_this = 10 - New() - ..() - reagents.add_reagent("beer",1000) + +/obj/structure/reagent_dispensers/beerkeg/New() + ..() + reagents.add_reagent("beer",1000) /obj/structure/reagent_dispensers/beerkeg/blob_act() explosion(src.loc,0,3,5,7,10) @@ -186,6 +195,6 @@ amount_per_transfer_from_this = 10 anchored = 1 - New() - ..() - reagents.add_reagent("virusfood", 1000) \ No newline at end of file +/obj/structure/reagent_dispensers/virusfood/New() + ..() + reagents.add_reagent("virusfood", 1000) \ No newline at end of file diff --git a/html/changelogs/phil235-SmokeFoamBuff.yml b/html/changelogs/phil235-SmokeFoamBuff.yml new file mode 100644 index 00000000000..63cd5d14ac3 --- /dev/null +++ b/html/changelogs/phil235-SmokeFoamBuff.yml @@ -0,0 +1,14 @@ + +author: phil + +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. +# Please surround your changes in double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. +changes: + - tweak: "Smoke and foam touch reactions gets buffed." + - rscadd: "Reagent dispensers (watertank, fueltank) tells you how much reagents they have left when examined." + - tweak: "Liquid dark matter blob spore smoke now cannot throw you. The effects of sorium, blob sorium, liquid dark matter and blob liquid dark matter are now scaled by their volume. Sorium/LDM blob's touch now throws the mobs who are close but simply moves the mobs that are further away."