fixes
This commit is contained in:
@@ -17,7 +17,7 @@
|
||||
var/turn_connects = TRUE
|
||||
|
||||
/datum/component/plumbing/Initialize(start=TRUE, _turn_connects=TRUE) //turn_connects for wheter or not we spin with the object to change our pipes
|
||||
if(parent && !ismovableatom(parent))
|
||||
if(parent && !istype(parent, /atom/movable))
|
||||
return COMPONENT_INCOMPATIBLE
|
||||
var/atom/movable/AM = parent
|
||||
if(!AM.reagents)
|
||||
@@ -77,7 +77,7 @@
|
||||
if(reagent) //only asked for one type of reagent
|
||||
for(var/A in reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(R.id == reagent)
|
||||
if(R.type == reagent)
|
||||
return TRUE
|
||||
else if(reagents.total_volume > 0) //take whatever
|
||||
return TRUE
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
v/datum/component/plumbing/acclimator
|
||||
/datum/component/plumbing/acclimator
|
||||
demand_connects = WEST
|
||||
supply_connects = EAST
|
||||
var/obj/machinery/plumbing/acclimator/AC
|
||||
|
||||
@@ -35,12 +35,12 @@
|
||||
else
|
||||
for(var/A in reagents.reagent_list)
|
||||
var/datum/reagent/R = A
|
||||
if(!can_give_in_direction(direction, R.id))
|
||||
if(!can_give_in_direction(direction, R))
|
||||
continue
|
||||
var/new_amount
|
||||
if(R.volume < amount)
|
||||
new_amount = amount - R.volume
|
||||
reagents.trans_id_to(target.parent, R.id, amount)
|
||||
reagents.trans_id_to(target.parent, R, amount)
|
||||
amount = new_amount
|
||||
if(amount <= 0)
|
||||
break
|
||||
|
||||
@@ -17,17 +17,17 @@
|
||||
var/obj/machinery/plumbing/reaction_chamber/RC = parent
|
||||
if(RC.emptying || !LAZYLEN(RC.required_reagents))
|
||||
return
|
||||
for(var/RTid in RC.required_reagents)
|
||||
for(var/RT in RC.required_reagents)
|
||||
var/has_reagent = FALSE
|
||||
for(var/A in reagents.reagent_list)
|
||||
var/datum/reagent/RD = A
|
||||
if(RTid == RD.id)
|
||||
if(RT == RD)
|
||||
has_reagent = TRUE
|
||||
if(RD.volume < RC.required_reagents[RTid])
|
||||
process_request(min(RC.required_reagents[RTid] - RD.volume, MACHINE_REAGENT_TRANSFER) , RTid, dir)
|
||||
if(RD.volume < RC.required_reagents[RT])
|
||||
process_request(min(RC.required_reagents[RT] - RD.volume, MACHINE_REAGENT_TRANSFER) , RT, dir)
|
||||
return
|
||||
if(!has_reagent)
|
||||
process_request(min(RC.required_reagents[RTid], MACHINE_REAGENT_TRANSFER), RTid, dir)
|
||||
process_request(min(RC.required_reagents[RT], MACHINE_REAGENT_TRANSFER), RT, dir)
|
||||
return
|
||||
|
||||
RC.reagent_flags &= ~NO_REACT
|
||||
|
||||
@@ -135,6 +135,14 @@ RLD
|
||||
flick("[icon_state]_empty", src) //somewhat hacky thing to make RCDs with ammo counters actually have a blinking yellow light
|
||||
return .
|
||||
|
||||
|
||||
/obj/item/construction/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/construction/proc/range_check(atom/A, mob/user)
|
||||
if(!(A in range(custom_range, get_turf(user))))
|
||||
to_chat(user, "<span class='warning'>The \'Out of Range\' light on [src] blinks red.</span>")
|
||||
@@ -276,13 +284,6 @@ RLD
|
||||
//Not scaling these down to button size because they look horrible then, instead just bumping up radius.
|
||||
return MA
|
||||
|
||||
/obj/item/construction/rcd/proc/check_menu(mob/living/user)
|
||||
if(!istype(user))
|
||||
return FALSE
|
||||
if(user.incapacitated() || !user.Adjacent(src))
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/obj/item/construction/rcd/proc/change_computer_dir(mob/user)
|
||||
if(!user)
|
||||
return
|
||||
@@ -915,9 +916,9 @@ RLD
|
||||
if(O.density) //let's not built ontop of dense stuff, like big machines and other obstacles, it kills my immershion
|
||||
return FALSE
|
||||
|
||||
/obj/item/construction/plumbing/afterattack(atom/A, mob/user, proximity)
|
||||
/obj/item/construction/plumbing/afterattack(atom/A, mob/user)
|
||||
. = ..()
|
||||
if(!prox_check(proximity))
|
||||
if(!range_check(A, user))
|
||||
return
|
||||
if(istype(A, /obj/machinery/plumbing))
|
||||
var/obj/machinery/plumbing/P = A
|
||||
|
||||
@@ -1,74 +0,0 @@
|
||||
//If you look at the "geyser_soup" overlay icon_state, you'll see that the first frame has 25 ticks.
|
||||
//That's because the first 18~ ticks are completely skipped for some ungodly weird fucking byond reason
|
||||
|
||||
/obj/structure/geyser
|
||||
name = "geyser"
|
||||
icon = 'icons/obj/lavaland/terrain.dmi'
|
||||
icon_state = "geyser"
|
||||
anchored = TRUE
|
||||
var/decay = 0 //reagents/tick removed
|
||||
var/erupting_state = null //set to null to get it greyscaled from "[icon_state]_soup". Not very usable with the whole random thing, but more types can be added if you change the spawn prob
|
||||
var/activated = FALSE //whether we are active and generating chems
|
||||
var/reagent_id = "oil"
|
||||
var/potency = 2 //how much reagents we add every process (2 seconds)
|
||||
var/max_volume = 500
|
||||
var/start_volume = 50
|
||||
|
||||
/obj/structure/geyser/proc/start_chemming()
|
||||
activated = TRUE
|
||||
create_reagents(max_volume, DRAINABLE)
|
||||
reagents.add_reagent(reagent_id, start_volume)
|
||||
START_PROCESSING(SSfluids, src) //It's main function is to be plumbed, so use SSfluids
|
||||
if(erupting_state)
|
||||
icon_state = erupting_state
|
||||
else
|
||||
var/mutable_appearance/I = mutable_appearance('icons/obj/lavaland/terrain.dmi', "[icon_state]_soup")
|
||||
I.color = mix_color_from_reagents(reagents.reagent_list)
|
||||
add_overlay(I)
|
||||
|
||||
/obj/structure/geyser/process()
|
||||
if(activated && reagents.total_volume <= reagents.maximum_volume) //this is also evaluated in add_reagent, but from my understanding proc calls are expensive and should be avoided in continous
|
||||
reagents.add_reagent(reagent_id, potency) //processes
|
||||
if(potency > 0)
|
||||
potency =- decay //decaying!
|
||||
|
||||
/obj/structure/geyser/plunger_act(obj/item/plunger/P, mob/living/user, _reinforced)
|
||||
if(!_reinforced)
|
||||
to_chat(user, "<span class='warning'>The [P.name] isn't strong enough!</span>")
|
||||
return
|
||||
if(activated)
|
||||
to_chat(user, "<span class'warning'>The [name] is already active!")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You start vigorously plunging [src]!")
|
||||
if(do_after(user, 50*P.plunge_mod, target = src) && !activated)
|
||||
start_chemming()
|
||||
|
||||
/obj/structure/geyser/random
|
||||
erupting_state = null
|
||||
var/list/options = list("oil" = 2, "clf3" = 1) //formerly crudeoil, 2,1
|
||||
/obj/structure/geyser/random/Initialize()
|
||||
. = ..()
|
||||
reagent_id = pickweight(options)
|
||||
|
||||
/obj/item/plunger
|
||||
name = "plunger"
|
||||
desc = "It's a plunger for plunging."
|
||||
icon = 'icons/obj/watercloset.dmi'
|
||||
icon_state = "plunger"
|
||||
slot_flags = ITEM_SLOT_MASK
|
||||
|
||||
var/plunge_mod = 1 //time*plunge_mod = total time we take to plunge an object
|
||||
var/reinforced = FALSE //whether we do heavy duty stuff like geysers
|
||||
|
||||
/obj/item/plunger/attack_obj(obj/O, mob/living/user)
|
||||
if(!O.plunger_act(src, user, reinforced))
|
||||
return ..()
|
||||
|
||||
/obj/item/plunger/reinforced
|
||||
name = "reinforced plunger"
|
||||
desc = " It's an M. 7 Reinforced Plunger for heavy duty plunging."
|
||||
icon_state = "reinforced_plunger"
|
||||
|
||||
reinforced = TRUE
|
||||
plunge_mod = 0.8
|
||||
@@ -334,8 +334,19 @@
|
||||
spawned_flora = SpawnFlora(T)
|
||||
if(!spawned_flora) // no rocks beneath mob spawners / mobs.
|
||||
SpawnMonster(T)
|
||||
SpawnTerrain(T)
|
||||
T.ChangeTurf(turf_type, null, CHANGETURF_IGNORE_AIR)
|
||||
|
||||
/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnTerrain(turf/T)
|
||||
if(prob(1))
|
||||
if(istype(loc, /area/mine/explored) || istype(loc, /area/lavaland/surface/outdoors/explored))
|
||||
return
|
||||
var/randumb = pickweight(terrain_spawn_list)
|
||||
for(var/obj/structure/geyser/F in range(7, T))
|
||||
if(istype(F, randumb))
|
||||
return
|
||||
new randumb(T)
|
||||
|
||||
/// Spawns a random mob or megafauna in the tunnel
|
||||
/turf/open/floor/plating/asteroid/airless/cave/proc/SpawnMonster(turf/T)
|
||||
if(!isarea(loc))
|
||||
|
||||
@@ -266,7 +266,7 @@
|
||||
name = "pipes"
|
||||
|
||||
/datum/asset/spritesheet/pipes/register()
|
||||
for (var/each in list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi', 'icons/obj/atmospherics/pipes/transit_tube.dmi', 'icons/obj/plumbing/fluid_ducts.dmi'))
|
||||
for (var/each in list('icons/obj/atmospherics/pipes/pipe_item.dmi', 'icons/obj/atmospherics/pipes/disposal.dmi', 'icons/obj/atmospherics/pipes/transit_tube.dmi', 'icons/obj/plumbing/fluid_ducts.dmi'))
|
||||
InsertAll("", each, GLOB.alldirs)
|
||||
..()
|
||||
|
||||
|
||||
@@ -26,11 +26,12 @@
|
||||
. = ..()
|
||||
anchored = bolt
|
||||
create_reagents(buffer, reagent_flags)
|
||||
AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS )
|
||||
AddComponent(/datum/component/simple_rotation, ROTATION_ALTCLICK | ROTATION_CLOCKWISE | ROTATION_COUNTERCLOCKWISE | ROTATION_VERBS, null, CALLBACK(src, .proc/can_be_rotated))
|
||||
|
||||
/obj/machinery/plumbing/proc/can_be_rotated(mob/user,rotation_type)
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/machinery/plumbing/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>The maximum volume display reads: <b>[reagents.maximum_volume] units</b>.</span>"
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
and you get nasty leftovers
|
||||
*/
|
||||
var/emptying = FALSE
|
||||
var/ui_x = 320
|
||||
var/ui_y = 310
|
||||
ui_x = 320
|
||||
ui_y = 310
|
||||
|
||||
/obj/machinery/plumbing/acclimator/Initialize(mapload, bolt)
|
||||
. = ..()
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
to_chat(user, "<span class='notice'> The [src] will now fill for [wanted_amount]u.</span>")
|
||||
|
||||
/obj/machinery/plumbing/bottler/process()
|
||||
if(machine_stat & NOPOWER)
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
///see if machine has enough to fill
|
||||
if(reagents.total_volume >= wanted_amount && anchored)
|
||||
|
||||
@@ -14,17 +14,25 @@
|
||||
. = ..()
|
||||
AddComponent(/datum/component/plumbing/simple_supply, bolt)
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user, rotation_type)
|
||||
/obj/machinery/plumbing/fermenter/can_be_rotated(mob/user,rotation_type)
|
||||
if(anchored)
|
||||
to_chat(user, "<span class='warning'>It is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
switch(eat_dir)
|
||||
if(WEST)
|
||||
eat_dir = NORTH
|
||||
return TRUE
|
||||
if(EAST)
|
||||
eat_dir = SOUTH
|
||||
return TRUE
|
||||
if(NORTH)
|
||||
eat_dir = EAST
|
||||
return TRUE
|
||||
if(SOUTH)
|
||||
eat_dir = WEST
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/plumbing/fermenter/setDir(newdir)
|
||||
. = ..()
|
||||
eat_dir = newdir
|
||||
|
||||
/obj/machinery/plumbing/fermenter/CanAllowThrough(atom/movable/AM)
|
||||
/obj/machinery/plumbing/fermenter/CanPass(atom/movable/AM)
|
||||
. = ..()
|
||||
if(!anchored)
|
||||
return
|
||||
@@ -36,9 +44,8 @@
|
||||
. = ..()
|
||||
ferment(AM)
|
||||
|
||||
/// uses fermentation proc similar to fermentation barrels
|
||||
/obj/machinery/plumbing/fermenter/proc/ferment(atom/AM)
|
||||
if(machine_stat & NOPOWER)
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
if(reagents.holder_full())
|
||||
return
|
||||
|
||||
@@ -12,8 +12,8 @@
|
||||
var/list/english_left = list()
|
||||
///whitelist of chems but their name instead of path
|
||||
var/list/english_right = list()
|
||||
var/ui_x = 320
|
||||
var/ui_y = 310
|
||||
ui_x = 320
|
||||
ui_y = 310
|
||||
|
||||
|
||||
/obj/machinery/plumbing/filter/Initialize(mapload, bolt)
|
||||
|
||||
@@ -7,23 +7,31 @@
|
||||
rcd_cost = 30
|
||||
rcd_delay = 30
|
||||
buffer = 400
|
||||
var/eat_dir = SOUTH
|
||||
var/eat_dir = NORTH
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/Initialize(mapload, bolt)
|
||||
. = ..()
|
||||
AddComponent(/datum/component/plumbing/simple_supply, bolt)
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user, rotation_type)
|
||||
/obj/machinery/plumbing/grinder_chemical/can_be_rotated(mob/user,rotation_type)
|
||||
if(anchored)
|
||||
to_chat(user, "<span class='warning'>It is fastened to the floor!</span>")
|
||||
return FALSE
|
||||
return TRUE
|
||||
switch(eat_dir)
|
||||
if(WEST)
|
||||
eat_dir = NORTH
|
||||
return TRUE
|
||||
if(EAST)
|
||||
eat_dir = SOUTH
|
||||
return TRUE
|
||||
if(NORTH)
|
||||
eat_dir = EAST
|
||||
return TRUE
|
||||
if(SOUTH)
|
||||
eat_dir = WEST
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/setDir(newdir)
|
||||
. = ..()
|
||||
eat_dir = newdir
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/CanAllowThrough(atom/movable/AM)
|
||||
/obj/machinery/plumbing/grinder_chemical/CanPass(atom/movable/AM)
|
||||
. = ..()
|
||||
if(!anchored)
|
||||
return
|
||||
@@ -36,7 +44,7 @@
|
||||
grind(AM)
|
||||
|
||||
/obj/machinery/plumbing/grinder_chemical/proc/grind(atom/AM)
|
||||
if(machine_stat & NOPOWER)
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
if(reagents.holder_full())
|
||||
return
|
||||
@@ -53,6 +61,4 @@
|
||||
return
|
||||
I.on_grind()
|
||||
reagents.add_reagent_list(I.grind_results)
|
||||
if(I.reagents)
|
||||
I.reagents.trans_to(src, I.reagents.total_volume, transfered_by = src)
|
||||
qdel(I)
|
||||
|
||||
@@ -1,28 +1,36 @@
|
||||
///We take a constant input of reagents, and produce a pill once a set volume is reached
|
||||
/obj/machinery/plumbing/pill_press
|
||||
name = "pill press"
|
||||
desc = "A press that presses pills."
|
||||
name = "chemical press"
|
||||
desc = "A press that makes pills, patches and bottles."
|
||||
icon_state = "pill_press"
|
||||
///the minimum size a pill can be
|
||||
var/minimum_pill = 5
|
||||
///the maximum size a pill can be
|
||||
var/maximum_pill = 50
|
||||
///the size of the pill
|
||||
var/pill_size = 10
|
||||
///pill name
|
||||
var/pill_name = "factory pill"
|
||||
///maximum size of a pill
|
||||
var/max_pill_volume = 50
|
||||
///maximum size of a patch
|
||||
var/max_patch_volume = 40
|
||||
///maximum size of a bottle
|
||||
var/max_bottle_volume = 30
|
||||
///current operating product (pills or patches)
|
||||
var/product = "pill"
|
||||
///the minimum size a pill or patch can be
|
||||
var/min_volume = 5
|
||||
///the maximum size a pill or patch can be
|
||||
var/max_volume = 50
|
||||
///selected size of the product
|
||||
var/current_volume = 10
|
||||
///prefix for the product name
|
||||
var/product_name = "factory"
|
||||
///the icon_state number for the pill.
|
||||
var/pill_number = RANDOM_PILL_STYLE
|
||||
///list of id's and icons for the pill selection of the ui
|
||||
var/list/pill_styles
|
||||
///list of pills stored in the machine, so we dont have 610 pills on one tile
|
||||
var/list/stored_pills = list()
|
||||
///list of products stored in the machine, so we dont have 610 pills on one tile
|
||||
var/list/stored_products = list()
|
||||
///max amount of pills allowed on our tile before we start storing them instead
|
||||
var/max_floor_pills = 10
|
||||
var/max_floor_products = 50 //haha massive pill piles
|
||||
|
||||
/obj/machinery/plumbing/pill_press/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>The [name] currently has [stored_pills.len] stored. There needs to be less than [max_floor_pills] on the floor to continue dispensing.</span>"
|
||||
. += "<span class='notice'>The [name] currently has [stored_products.len] stored. There needs to be less than [max_floor_products ] on the floor to continue dispensing.</span>"
|
||||
|
||||
/obj/machinery/plumbing/pill_press/Initialize(mapload, bolt)
|
||||
. = ..()
|
||||
@@ -37,29 +45,41 @@
|
||||
SL["htmltag"] = assets.icon_tag("pill[x]")
|
||||
pill_styles += list(SL)
|
||||
|
||||
|
||||
/obj/machinery/plumbing/pill_press/process()
|
||||
if(stat & NOPOWER)
|
||||
return
|
||||
if(reagents.total_volume >= pill_size)
|
||||
var/obj/item/reagent_containers/pill/P = new(src)
|
||||
reagents.trans_to(P, pill_size)
|
||||
P.name = pill_name
|
||||
stored_pills += P
|
||||
if(pill_number == RANDOM_PILL_STYLE)
|
||||
P.icon_state = "pill[rand(1,21)]"
|
||||
else
|
||||
P.icon_state = "pill[pill_number]"
|
||||
if(P.icon_state == "pill4") //mirrored from chem masters
|
||||
P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality."
|
||||
if(stored_pills.len)
|
||||
if(reagents.total_volume >= current_volume)
|
||||
if (product == "pill")
|
||||
var/obj/item/reagent_containers/pill/P = new(src)
|
||||
reagents.trans_to(P, current_volume)
|
||||
P.name = trim("[product_name] pill")
|
||||
stored_products += P
|
||||
if(pill_number == RANDOM_PILL_STYLE)
|
||||
P.icon_state = "pill[rand(1,21)]"
|
||||
else
|
||||
P.icon_state = "pill[pill_number]"
|
||||
if(P.icon_state == "pill4") //mirrored from chem masters
|
||||
P.desc = "A tablet or capsule, but not just any, a red one, one taken by the ones not scared of knowledge, freedom, uncertainty and the brutal truths of reality."
|
||||
else if (product == "patch")
|
||||
var/obj/item/reagent_containers/pill/patch/P = new(src)
|
||||
reagents.trans_to(P, current_volume)
|
||||
P.name = trim("[product_name] patch")
|
||||
stored_products += P
|
||||
else if (product == "bottle")
|
||||
var/obj/item/reagent_containers/glass/bottle/P = new(src)
|
||||
reagents.trans_to(P, current_volume)
|
||||
P.name = trim("[product_name] bottle")
|
||||
stored_products += P
|
||||
if(stored_products.len)
|
||||
var/pill_amount = 0
|
||||
for(var/obj/item/reagent_containers/pill/P in loc)
|
||||
pill_amount++
|
||||
if(pill_amount >= max_floor_pills) //too much so just stop
|
||||
if(pill_amount >= max_floor_products) //too much so just stop
|
||||
break
|
||||
if(pill_amount < max_floor_pills)
|
||||
var/atom/movable/AM = stored_pills[1] //AM because forceMove is all we need
|
||||
stored_pills -= AM
|
||||
if(pill_amount < max_floor_products)
|
||||
var/atom/movable/AM = stored_products[1] //AM because forceMove is all we need
|
||||
stored_products -= AM
|
||||
AM.forceMove(drop_location())
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +1,17 @@
|
||||
///We pump liquids from activated(plungerated) geysers to a plumbing outlet. We need to be wired.
|
||||
/obj/machinery/power/liquid_pump
|
||||
///We pump liquids from activated(plungerated) geysers to a plumbing outlet. We don't need to be wired.
|
||||
/obj/machinery/plumbing/liquid_pump
|
||||
name = "liquid pump"
|
||||
desc = "Pump up those sweet liquids from under the surface."
|
||||
desc = "Pump up those sweet liquids from under the surface. Uses thermal energy from geysers to power itself." //better than placing 200 cables, because it wasnt fun
|
||||
icon = 'icons/obj/plumbing/plumbers.dmi'
|
||||
icon_state = "pump"
|
||||
anchored = FALSE
|
||||
density = TRUE
|
||||
idle_power_usage = 10
|
||||
active_power_usage = 1000
|
||||
///Are we powered?
|
||||
var/powered = FALSE
|
||||
|
||||
rcd_cost = 30
|
||||
rcd_delay = 40
|
||||
|
||||
///units we pump per process (2 seconds)
|
||||
var/pump_power = 2
|
||||
///set to true if the loop couldnt find a geyser in process, so it remembers and stops checking every loop until moved. more accurate name would be absolutely_no_geyser_under_me_so_dont_try
|
||||
@@ -19,63 +21,42 @@
|
||||
///volume of our internal buffer
|
||||
var/volume = 200
|
||||
|
||||
/obj/machinery/power/liquid_pump/Initialize()
|
||||
/obj/machinery/plumbing/liquid_pump/Initialize(mapload, bolt)
|
||||
. = ..()
|
||||
create_reagents(volume)
|
||||
AddComponent(/datum/component/plumbing/simple_supply, TRUE)
|
||||
AddComponent(/datum/component/plumbing/simple_supply, bolt)
|
||||
|
||||
/obj/machinery/power/liquid_pump/attackby(obj/item/W, mob/user, params)
|
||||
if(!powered)
|
||||
if(!anchored)
|
||||
if(default_deconstruction_screwdriver(user, "[initial(icon_state)]_open", "[initial(icon_state)]",W))
|
||||
return
|
||||
if(default_deconstruction_crowbar(W))
|
||||
return
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/liquid_pump/wrench_act(mob/living/user, obj/item/I)
|
||||
..()
|
||||
default_unfasten_wrench(user, I)
|
||||
return TRUE
|
||||
///please note that the component has a hook in the parent call, wich handles activating and deactivating
|
||||
/obj/machinery/power/liquid_pump/default_unfasten_wrench(mob/user, obj/item/I, time = 20)
|
||||
/obj/machinery/plumbing/liquid_pump/default_unfasten_wrench(mob/user, obj/item/I, time = 20)
|
||||
. = ..()
|
||||
if(. == SUCCESSFUL_UNFASTEN)
|
||||
geyser = null
|
||||
update_icon()
|
||||
powered = FALSE
|
||||
geyserless = FALSE //we switched state, so lets just set this back aswell
|
||||
|
||||
/obj/machinery/power/liquid_pump/process()
|
||||
if(!anchored || panel_open)
|
||||
/obj/machinery/plumbing/liquid_pump/process()
|
||||
if(!anchored || panel_open || geyserless)
|
||||
return
|
||||
if(!geyser && !geyserless)
|
||||
|
||||
if(!geyser)
|
||||
for(var/obj/structure/geyser/G in loc.contents)
|
||||
geyser = G
|
||||
update_icon()
|
||||
if(!geyser) //we didnt find one, abort
|
||||
anchored = FALSE
|
||||
geyserless = TRUE
|
||||
visible_message("<span class='warning'>The [name] makes a sad beep!</span>")
|
||||
playsound(src, 'sound/machines/buzz-sigh.ogg', 50)
|
||||
return
|
||||
|
||||
if(avail(active_power_usage))
|
||||
if(!powered) //we werent powered before this tick so update our sprite
|
||||
powered = TRUE
|
||||
update_icon()
|
||||
add_load(active_power_usage)
|
||||
pump()
|
||||
else if(powered) //we were powered, but now we arent
|
||||
powered = FALSE
|
||||
update_icon()
|
||||
pump()
|
||||
|
||||
///pump up that sweet geyser nectar
|
||||
/obj/machinery/power/liquid_pump/proc/pump()
|
||||
/obj/machinery/plumbing/liquid_pump/proc/pump()
|
||||
if(!geyser || !geyser.reagents)
|
||||
return
|
||||
geyser.reagents.trans_to(src, pump_power)
|
||||
|
||||
/obj/machinery/power/liquid_pump/update_icon()
|
||||
if(powered)
|
||||
/obj/machinery/plumbing/liquid_pump/update_icon_state()
|
||||
if(geyser)
|
||||
icon_state = initial(icon_state) + "-on"
|
||||
else if(panel_open)
|
||||
icon_state = initial(icon_state) + "-open"
|
||||
|
||||
@@ -34,7 +34,7 @@
|
||||
/datum/reagent/oxygen,
|
||||
/datum/reagent/phosphorus,
|
||||
/datum/reagent/potassium,
|
||||
/datum/reagent/uranium/radium,
|
||||
/datum/reagent/radium,
|
||||
/datum/reagent/silicon,
|
||||
/datum/reagent/silver,
|
||||
/datum/reagent/sodium,
|
||||
@@ -51,7 +51,7 @@
|
||||
AddComponent(/datum/component/plumbing/simple_supply, bolt)
|
||||
|
||||
/obj/machinery/plumbing/synthesizer/process()
|
||||
if(machine_stat & NOPOWER || !reagent_id || !amount)
|
||||
if(stat & NOPOWER || !reagent_id || !amount)
|
||||
return
|
||||
if(reagents.total_volume >= amount) //otherwise we get leftovers, and we need this to be precise
|
||||
return
|
||||
|
||||
@@ -53,6 +53,14 @@ GLOBAL_LIST_INIT(name2reagent, build_name2reagent())
|
||||
var/metabolizing = FALSE
|
||||
var/chemical_flags // See fermi/readme.dm REAGENT_DEAD_PROCESS, REAGENT_DONOTSPLIT, REAGENT_ONLYINVERSE, REAGENT_ONMOBMERGE, REAGENT_INVISIBLE, REAGENT_FORCEONNEW, REAGENT_SNEAKYNAME
|
||||
var/value = REAGENT_VALUE_NONE //How much does it sell for in cargo?
|
||||
var/datum/material/material //are we made of material?
|
||||
|
||||
/datum/reagent/New()
|
||||
. = ..()
|
||||
|
||||
if(material)
|
||||
material = getmaterialref(material)
|
||||
|
||||
|
||||
/datum/reagent/Destroy() // This should only be called by the holder, so it's already handled clearing its references
|
||||
. = ..()
|
||||
|
||||
@@ -505,12 +505,13 @@
|
||||
overdose_threshold = 30
|
||||
pH = 2
|
||||
value = REAGENT_VALUE_UNCOMMON
|
||||
var/healing = 0.5
|
||||
|
||||
/datum/reagent/medicine/omnizine/on_mob_life(mob/living/carbon/M)
|
||||
M.adjustToxLoss(-0.5*REM, 0)
|
||||
M.adjustOxyLoss(-0.5*REM, 0)
|
||||
M.adjustBruteLoss(-0.5*REM, 0)
|
||||
M.adjustFireLoss(-0.5*REM, 0)
|
||||
M.adjustToxLoss(-healing*REM, 0)
|
||||
M.adjustOxyLoss(-healing*REM, 0)
|
||||
M.adjustBruteLoss(-healing*REM, 0)
|
||||
M.adjustFireLoss(-healing*REM, 0)
|
||||
..()
|
||||
. = 1
|
||||
|
||||
@@ -522,6 +523,12 @@
|
||||
..()
|
||||
. = 1
|
||||
|
||||
/datum/reagent/medicine/omnizine/protozine
|
||||
name = "Protozine"
|
||||
description = "A less environmentally friendly and somewhat weaker variant of omnizine."
|
||||
color = "#d8c7b7"
|
||||
healing = 0.2
|
||||
|
||||
/datum/reagent/medicine/calomel
|
||||
name = "Calomel"
|
||||
description = "Quickly purges the body of all chemicals. Toxin damage is dealt if the patient is in good condition."
|
||||
@@ -1587,4 +1594,3 @@
|
||||
if(prob(3))
|
||||
to_chat(C, "[pick(GLOB.wisdoms)]") //give them a random wisdom
|
||||
..()
|
||||
|
||||
|
||||
@@ -308,6 +308,13 @@
|
||||
metabolization_rate = 45 * REAGENTS_METABOLISM
|
||||
. = 1
|
||||
|
||||
/datum/reagent/water/hollowwater
|
||||
name = "Hollow Water"
|
||||
description = "An ubiquitous chemical substance that is composed of hydrogen and oxygen, but it looks kinda hollow."
|
||||
color = "#88878777"
|
||||
taste_description = "emptyiness"
|
||||
|
||||
|
||||
/datum/reagent/water/holywater
|
||||
name = "Holy Water"
|
||||
description = "Water blessed by some deity."
|
||||
@@ -943,6 +950,7 @@
|
||||
color = "#1C1300" // rgb: 30, 20, 0
|
||||
taste_description = "sour chalk"
|
||||
pH = 5
|
||||
material = /datum/material/diamond
|
||||
|
||||
/datum/reagent/carbon/reaction_turf(turf/T, reac_volume)
|
||||
if(!isspaceturf(T))
|
||||
@@ -1065,6 +1073,7 @@
|
||||
pH = 6
|
||||
overdose_threshold = 30
|
||||
color = "#c2391d"
|
||||
material = /datum/material/iron
|
||||
|
||||
/datum/reagent/iron/on_mob_life(mob/living/carbon/C)
|
||||
if((HAS_TRAIT(C, TRAIT_NOMARROW)))
|
||||
@@ -1096,6 +1105,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#F7C430" // rgb: 247, 196, 48
|
||||
taste_description = "expensive metal"
|
||||
material = /datum/material/gold
|
||||
|
||||
/datum/reagent/silver
|
||||
name = "Silver"
|
||||
@@ -1103,6 +1113,7 @@
|
||||
reagent_state = SOLID
|
||||
color = "#D0D0D0" // rgb: 208, 208, 208
|
||||
taste_description = "expensive yet reasonable metal"
|
||||
material = /datum/material/silver
|
||||
|
||||
/datum/reagent/silver/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(M.has_bane(BANE_SILVER))
|
||||
@@ -1116,6 +1127,7 @@
|
||||
color = "#B8B8C0" // rgb: 184, 184, 192
|
||||
taste_description = "the inside of a reactor"
|
||||
pH = 4
|
||||
material = /datum/material/uranium
|
||||
|
||||
/datum/reagent/uranium/on_mob_life(mob/living/carbon/M)
|
||||
M.apply_effect(1/M.metabolism_efficiency,EFFECT_IRRADIATE,0)
|
||||
@@ -1137,6 +1149,7 @@
|
||||
taste_description = "fizzling blue"
|
||||
pH = 12
|
||||
value = REAGENT_VALUE_RARE
|
||||
material = /datum/material/bluespace
|
||||
|
||||
/datum/reagent/bluespace/reaction_mob(mob/living/M, method=TOUCH, reac_volume)
|
||||
if(method == TOUCH || method == VAPOR)
|
||||
@@ -1175,6 +1188,7 @@
|
||||
color = "#A8A8A8" // rgb: 168, 168, 168
|
||||
taste_mult = 0
|
||||
pH = 10
|
||||
material = /datum/material/glass
|
||||
|
||||
/datum/reagent/fuel
|
||||
name = "Welding fuel"
|
||||
@@ -2301,4 +2315,4 @@
|
||||
description = "A crystaline polydextrose polymer, plants swear by this stuff."
|
||||
reagent_state = SOLID
|
||||
color = "#E6E6DA"
|
||||
taste_mult = 0
|
||||
taste_mult = 0
|
||||
|
||||
@@ -64,6 +64,7 @@
|
||||
toxpwr = 3
|
||||
pH = 4
|
||||
value = REAGENT_VALUE_RARE //sheets are worth more
|
||||
material = /datum/material/plasma
|
||||
|
||||
/datum/reagent/toxin/plasma/on_mob_life(mob/living/carbon/C)
|
||||
if(holder.has_reagent(/datum/reagent/medicine/epinephrine))
|
||||
|
||||
@@ -207,6 +207,12 @@
|
||||
results = list(/datum/reagent/medicine/strange_reagent = 3)
|
||||
required_reagents = list(/datum/reagent/medicine/omnizine = 1, /datum/reagent/water/holywater = 1, /datum/reagent/toxin/mutagen = 1)
|
||||
|
||||
/datum/chemical_reaction/strange_reagent/alt
|
||||
name = "Strange Reagent"
|
||||
id = /datum/reagent/medicine/strange_reagent
|
||||
results = list(/datum/reagent/medicine/strange_reagent = 2)
|
||||
required_reagents = list(/datum/reagent/medicine/omnizine/protozine = 1, /datum/reagent/water/holywater = 1, /datum/reagent/toxin/mutagen = 1)
|
||||
|
||||
/datum/chemical_reaction/mannitol
|
||||
name = "Mannitol"
|
||||
id = /datum/reagent/medicine/mannitol
|
||||
@@ -333,4 +339,4 @@
|
||||
/datum/chemical_reaction/medmesh/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
for(var/i = 1, i <= created_volume, i++)
|
||||
new /obj/item/stack/medical/mesh/advanced(location)
|
||||
new /obj/item/stack/medical/mesh/advanced(location)
|
||||
|
||||
@@ -1,3 +1,34 @@
|
||||
/datum/chemical_reaction/metalgen
|
||||
name = "metalgen"
|
||||
id = /datum/reagent/metalgen
|
||||
required_reagents = list(/datum/reagent/wittel = 1, /datum/reagent/bluespace = 1, /datum/reagent/toxin/mutagen = 1)
|
||||
results = list(/datum/reagent/metalgen = 1)
|
||||
|
||||
/datum/chemical_reaction/metalgen_imprint
|
||||
name = "metalgen imprint"
|
||||
id = /datum/reagent/metalgen
|
||||
required_reagents = list(/datum/reagent/metalgen = 1, /datum/reagent/liquid_dark_matter = 1)
|
||||
results = list(/datum/reagent/metalgen = 1)
|
||||
|
||||
/datum/chemical_reaction/holywater
|
||||
name = "Holy Water"
|
||||
id = /datum/reagent/water/holywater
|
||||
results = list(/datum/reagent/water/holywater = 1)
|
||||
required_reagents = list(/datum/reagent/water/hollowwater = 1)
|
||||
required_catalysts = list(/datum/reagent/water/holywater = 1)
|
||||
|
||||
/datum/chemical_reaction/metalgen_imprint/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/datum/reagent/metalgen/MM = holder.get_reagent(/datum/reagent/metalgen)
|
||||
for(var/datum/reagent/R in holder.reagent_list)
|
||||
if(R.material && R.volume >= 40)
|
||||
MM.data["material"] = R.material
|
||||
holder.remove_reagent(R.type, 40)
|
||||
|
||||
/datum/chemical_reaction/gravitum
|
||||
name = "gravitum"
|
||||
id = /datum/reagent/gravitum
|
||||
required_reagents = list(/datum/reagent/wittel = 1, /datum/reagent/sorium = 10)
|
||||
results = list(/datum/reagent/gravitum = 10)
|
||||
|
||||
/datum/chemical_reaction/sterilizine
|
||||
name = "Sterilizine"
|
||||
@@ -711,7 +742,7 @@
|
||||
/datum/chemical_reaction/slime_extractification/on_reaction(datum/reagents/holder, created_volume)
|
||||
var/location = get_turf(holder.my_atom)
|
||||
new /obj/item/slime_extract/grey(location)
|
||||
|
||||
|
||||
// Liquid Carpets
|
||||
|
||||
/datum/chemical_reaction/carpet
|
||||
@@ -837,4 +868,4 @@
|
||||
/datum/chemical_reaction/cellulose_carbonization
|
||||
results = list(/datum/reagent/carbon = 1)
|
||||
required_reagents = list(/datum/reagent/cellulose = 1)
|
||||
required_temp = 512
|
||||
required_temp = 512
|
||||
|
||||
@@ -1115,4 +1115,4 @@
|
||||
construction_time = 150
|
||||
build_path = /obj/item/construction/plumbing
|
||||
category = list("Misc","Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCEs
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
@@ -41,7 +41,8 @@
|
||||
/obj/item/wrench/medical = 1,
|
||||
/obj/item/storage/belt/medolier/full = 2,
|
||||
/obj/item/gun/syringe/dart = 2,
|
||||
/obj/item/storage/briefcase/medical = 2)
|
||||
/obj/item/storage/briefcase/medical = 2,
|
||||
/obj/item/plunger/reinforced = 2)
|
||||
|
||||
armor = list("melee" = 100, "bullet" = 100, "laser" = 100, "energy" = 100, "bomb" = 0, "bio" = 0, "rad" = 0, "fire" = 100, "acid" = 50)
|
||||
resistance_flags = FIRE_PROOF
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 771 B |
@@ -1189,7 +1189,6 @@
|
||||
#include "code\game\objects\structures\flora.dm"
|
||||
#include "code\game\objects\structures\fluff.dm"
|
||||
#include "code\game\objects\structures\fugitive_role_spawners.dm"
|
||||
#include "code\game\objects\structures\geyser.dm"
|
||||
#include "code\game\objects\structures\ghost_role_spawners.dm"
|
||||
#include "code\game\objects\structures\girders.dm"
|
||||
#include "code\game\objects\structures\grille.dm"
|
||||
|
||||
Reference in New Issue
Block a user