mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-08-22 04:30:44 +01:00
iron foam is now blue steel color just like aluminium foam.
Fixes metal foam from backpack firefighter watertank. Fixes nanofrost not freezing shut vent scrubbers. Atmos backpack watertank now starts full of water. Change foam layer to Objlayer +0.1 so that it is above foammetalstructure so it doesn't hide the dissolving animation and also above tables. Buff foam and smoke: smoke/foam contains four times the amount of reagents that was inserted in them, for balancing. Add a little more smoke clouds for tear gas grenade. Removed the no longer needed max_lifetime smoke var. Reagent_dispensers (watertank) now show how much reagents they have left upon examination. Fixed some code formatting in reagent_dispensers. Fixes nanofrost temperature lowering effect that wasn't working. Adjusted reagent volume in blob spore smoke because of the buff. Change to sorium and ldm: effect varies with created volume. If you are close to a powerful vortex you are thrown, otherwise you are just moved instead. Vortex blobs now only make you step if you are far from it when reaction hits, otherwise it throws you. The vortex blob range gets +1 to compensate. Also the range and effect depends on the reagent volume which means lower effect for blobspore smoke.
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
|
||||
can_unwrench = 1
|
||||
|
||||
welded = 0
|
||||
|
||||
var/area/initial_loc
|
||||
level = 1
|
||||
var/area_uid
|
||||
|
||||
@@ -9,6 +9,8 @@
|
||||
|
||||
can_unwrench = 1
|
||||
|
||||
welded = 0
|
||||
|
||||
var/area/initial_loc
|
||||
var/id_tag = null
|
||||
var/frequency = 1439
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 << "<span class='warning'>Metal foam mix is still being synthesized...</span>"
|
||||
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("<span class='danger'>[V] was frozen shut!</span>")
|
||||
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("<span class='danger'>[U] was frozen shut!</span>")
|
||||
for(var/mob/living/L in T)
|
||||
L.ExtinguishMob()
|
||||
for(var/obj/item/Item in T)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
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
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
/obj/structure/reagent_dispensers/virusfood/New()
|
||||
..()
|
||||
reagents.add_reagent("virusfood", 1000)
|
||||
@@ -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."
|
||||
Reference in New Issue
Block a user