mirror of
https://github.com/PolarisSS13/Polaris.git
synced 2026-08-26 06:39:22 +01:00
Revert "Merge branch 'master' into Turret"
This reverts commit0300e6723b, reversing changes made to219348783d.
This commit is contained in:
@@ -1,50 +0,0 @@
|
||||
/obj/machinery/atmospherics/valve/shutoff
|
||||
icon = 'icons/atmos/clamp.dmi'
|
||||
icon_state = "map_vclamp0"
|
||||
|
||||
name = "automatic shutoff valve"
|
||||
desc = "An automatic valve with control circuitry and pipe integrity sensor, capable of automatically isolating damaged segments of the pipe network."
|
||||
var/close_on_leaks = TRUE // If false it will be always open
|
||||
level = 1
|
||||
connect_types = CONNECT_TYPE_SCRUBBER | CONNECT_TYPE_SUPPLY | CONNECT_TYPE_REGULAR
|
||||
|
||||
/obj/machinery/atmospherics/valve/shutoff/update_icon()
|
||||
icon_state = "vclamp[open]"
|
||||
|
||||
/obj/machinery/atmospherics/valve/shutoff/examine(var/mob/user)
|
||||
..()
|
||||
to_chat(user, "The automatic shutoff circuit is [close_on_leaks ? "enabled" : "disabled"].")
|
||||
|
||||
/obj/machinery/atmospherics/valve/shutoff/Initialize()
|
||||
. = ..()
|
||||
open()
|
||||
hide(1)
|
||||
|
||||
/obj/machinery/atmospherics/valve/shutoff/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
/obj/machinery/atmospherics/valve/shutoff/attack_hand(var/mob/user)
|
||||
src.add_fingerprint(usr)
|
||||
update_icon(1)
|
||||
close_on_leaks = !close_on_leaks
|
||||
to_chat(user, "You [close_on_leaks ? "enable" : "disable"] the automatic shutoff circuit.")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/atmospherics/valve/shutoff/process()
|
||||
..()
|
||||
|
||||
if (!network_node1 || !network_node2)
|
||||
if(open)
|
||||
close()
|
||||
return
|
||||
|
||||
if (!close_on_leaks)
|
||||
if (!open)
|
||||
open()
|
||||
return
|
||||
|
||||
if (network_node1.leaks.len || network_node2.leaks.len)
|
||||
if (open)
|
||||
close()
|
||||
else if (!open)
|
||||
open()
|
||||
@@ -8,83 +8,76 @@ var/global/list/datum/pipe_network/pipe_networks = list() // TODO - Move into SS
|
||||
var/list/datum/pipeline/line_members = list()
|
||||
//membership roster to go through for updates and what not
|
||||
|
||||
var/list/leaks = list()
|
||||
|
||||
var/update = 1
|
||||
//var/datum/gas_mixture/air_transient = null
|
||||
|
||||
/datum/pipe_network/Destroy()
|
||||
STOP_PROCESSING_PIPENET(src)
|
||||
for(var/datum/pipeline/line_member in line_members)
|
||||
line_member.network = null
|
||||
for(var/obj/machinery/atmospherics/normal_member in normal_members)
|
||||
normal_member.reassign_network(src, null)
|
||||
gases.Cut() // Do not qdel the gases, we don't own them
|
||||
leaks.Cut()
|
||||
return ..()
|
||||
Destroy()
|
||||
STOP_PROCESSING_PIPENET(src)
|
||||
for(var/datum/pipeline/line_member in line_members)
|
||||
line_member.network = null
|
||||
for(var/obj/machinery/atmospherics/normal_member in normal_members)
|
||||
normal_member.reassign_network(src, null)
|
||||
gases.Cut() // Do not qdel the gases, we don't own them
|
||||
return ..()
|
||||
|
||||
/datum/pipe_network/process()
|
||||
//Equalize gases amongst pipe if called for
|
||||
if(update)
|
||||
update = 0
|
||||
reconcile_air() //equalize_gases(gases)
|
||||
process()
|
||||
//Equalize gases amongst pipe if called for
|
||||
if(update)
|
||||
update = 0
|
||||
reconcile_air() //equalize_gases(gases)
|
||||
|
||||
listclearnulls(leaks) // Let's not have forever-seals.
|
||||
//Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport
|
||||
//for(var/datum/pipeline/line_member in line_members)
|
||||
// line_member.process()
|
||||
|
||||
//Give pipelines their process call for pressure checking and what not. Have to remove pressure checks for the time being as pipes dont radiate heat - Mport
|
||||
//for(var/datum/pipeline/line_member in line_members)
|
||||
// line_member.process()
|
||||
proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference)
|
||||
//Purpose: Generate membership roster
|
||||
//Notes: Assuming that members will add themselves to appropriate roster in network_expand()
|
||||
|
||||
/datum/pipe_network/proc/build_network(obj/machinery/atmospherics/start_normal, obj/machinery/atmospherics/reference)
|
||||
//Purpose: Generate membership roster
|
||||
//Notes: Assuming that members will add themselves to appropriate roster in network_expand()
|
||||
if(!start_normal)
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
if(!start_normal)
|
||||
qdel(src)
|
||||
return
|
||||
start_normal.network_expand(src, reference)
|
||||
|
||||
start_normal.network_expand(src, reference)
|
||||
update_network_gases()
|
||||
|
||||
update_network_gases()
|
||||
if((normal_members.len>0)||(line_members.len>0))
|
||||
START_PROCESSING_PIPENET(src)
|
||||
else
|
||||
qdel(src)
|
||||
|
||||
if((normal_members.len>0)||(line_members.len>0))
|
||||
START_PROCESSING_PIPENET(src)
|
||||
else
|
||||
qdel(src)
|
||||
proc/merge(datum/pipe_network/giver)
|
||||
if(giver==src) return 0
|
||||
|
||||
/datum/pipe_network/proc/merge(datum/pipe_network/giver)
|
||||
if(giver==src) return 0
|
||||
normal_members |= giver.normal_members
|
||||
|
||||
normal_members |= giver.normal_members
|
||||
line_members |= giver.line_members
|
||||
|
||||
line_members |= giver.line_members
|
||||
for(var/obj/machinery/atmospherics/normal_member in giver.normal_members)
|
||||
normal_member.reassign_network(giver, src)
|
||||
|
||||
leaks |= giver.leaks
|
||||
for(var/datum/pipeline/line_member in giver.line_members)
|
||||
line_member.network = src
|
||||
|
||||
for(var/obj/machinery/atmospherics/normal_member in giver.normal_members)
|
||||
normal_member.reassign_network(giver, src)
|
||||
update_network_gases()
|
||||
return 1
|
||||
|
||||
for(var/datum/pipeline/line_member in giver.line_members)
|
||||
line_member.network = src
|
||||
proc/update_network_gases()
|
||||
//Go through membership roster and make sure gases is up to date
|
||||
|
||||
update_network_gases()
|
||||
return 1
|
||||
gases = list()
|
||||
volume = 0
|
||||
|
||||
/datum/pipe_network/proc/update_network_gases()
|
||||
//Go through membership roster and make sure gases is up to date
|
||||
for(var/obj/machinery/atmospherics/normal_member in normal_members)
|
||||
var/result = normal_member.return_network_air(src)
|
||||
if(result) gases += result
|
||||
|
||||
gases = list()
|
||||
volume = 0
|
||||
for(var/datum/pipeline/line_member in line_members)
|
||||
gases += line_member.air
|
||||
|
||||
for(var/obj/machinery/atmospherics/normal_member in normal_members)
|
||||
var/result = normal_member.return_network_air(src)
|
||||
if(result) gases += result
|
||||
for(var/datum/gas_mixture/air in gases)
|
||||
volume += air.volume
|
||||
|
||||
for(var/datum/pipeline/line_member in line_members)
|
||||
gases += line_member.air
|
||||
|
||||
for(var/datum/gas_mixture/air in gases)
|
||||
volume += air.volume
|
||||
|
||||
/datum/pipe_network/proc/reconcile_air()
|
||||
equalize_gases(gases)
|
||||
proc/reconcile_air()
|
||||
equalize_gases(gases)
|
||||
|
||||
+164
-179
@@ -1,234 +1,219 @@
|
||||
|
||||
/datum/pipeline
|
||||
datum/pipeline
|
||||
var/datum/gas_mixture/air
|
||||
|
||||
var/list/obj/machinery/atmospherics/pipe/members
|
||||
var/list/obj/machinery/atmospherics/pipe/edges //Used for building networks
|
||||
|
||||
// Nodes that are leaking. Used for A.S. Valves.
|
||||
var/list/leaks = list()
|
||||
|
||||
var/datum/pipe_network/network
|
||||
|
||||
var/alert_pressure = 0
|
||||
|
||||
/datum/pipeline/Destroy()
|
||||
QDEL_NULL(network)
|
||||
Destroy()
|
||||
QDEL_NULL(network)
|
||||
|
||||
if(air && air.volume)
|
||||
temporarily_store_air()
|
||||
for(var/obj/machinery/atmospherics/pipe/P in members)
|
||||
P.parent = null
|
||||
members = null
|
||||
edges = null
|
||||
leaks = null
|
||||
. = ..()
|
||||
if(air && air.volume)
|
||||
temporarily_store_air()
|
||||
for(var/obj/machinery/atmospherics/pipe/P in members)
|
||||
P.parent = null
|
||||
members = null
|
||||
edges = null
|
||||
. = ..()
|
||||
|
||||
/datum/pipeline/process()//This use to be called called from the pipe networks
|
||||
process()//This use to be called called from the pipe networks
|
||||
|
||||
//Check to see if pressure is within acceptable limits
|
||||
var/pressure = air.return_pressure()
|
||||
if(pressure > alert_pressure)
|
||||
for(var/obj/machinery/atmospherics/pipe/member in members)
|
||||
if(!member.check_pressure(pressure))
|
||||
break //Only delete 1 pipe per process
|
||||
|
||||
proc/temporarily_store_air()
|
||||
//Update individual gas_mixtures by volume ratio
|
||||
|
||||
//Check to see if pressure is within acceptable limits
|
||||
var/pressure = air.return_pressure()
|
||||
if(pressure > alert_pressure)
|
||||
for(var/obj/machinery/atmospherics/pipe/member in members)
|
||||
if(!member.check_pressure(pressure))
|
||||
break //Only delete 1 pipe per process
|
||||
member.air_temporary = new
|
||||
member.air_temporary.copy_from(air)
|
||||
member.air_temporary.volume = member.volume
|
||||
member.air_temporary.multiply(member.volume / air.volume)
|
||||
|
||||
/datum/pipeline/proc/temporarily_store_air()
|
||||
//Update individual gas_mixtures by volume ratio
|
||||
|
||||
for(var/obj/machinery/atmospherics/pipe/member in members)
|
||||
member.air_temporary = new
|
||||
member.air_temporary.copy_from(air)
|
||||
member.air_temporary.volume = member.volume
|
||||
member.air_temporary.multiply(member.volume / air.volume)
|
||||
|
||||
/datum/pipeline/proc/build_pipeline(obj/machinery/atmospherics/pipe/base)
|
||||
air = new
|
||||
|
||||
var/list/possible_expansions = list(base)
|
||||
members = list(base)
|
||||
edges = list()
|
||||
|
||||
var/volume = base.volume
|
||||
base.parent = src
|
||||
alert_pressure = base.alert_pressure
|
||||
|
||||
if(base.air_temporary)
|
||||
air = base.air_temporary
|
||||
base.air_temporary = null
|
||||
else
|
||||
proc/build_pipeline(obj/machinery/atmospherics/pipe/base)
|
||||
air = new
|
||||
|
||||
if(base.leaking)
|
||||
leaks |= base
|
||||
var/list/possible_expansions = list(base)
|
||||
members = list(base)
|
||||
edges = list()
|
||||
|
||||
while(possible_expansions.len>0)
|
||||
for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions)
|
||||
var/volume = base.volume
|
||||
base.parent = src
|
||||
alert_pressure = base.alert_pressure
|
||||
|
||||
var/list/result = borderline.pipeline_expansion()
|
||||
var/edge_check = result.len
|
||||
if(base.air_temporary)
|
||||
air = base.air_temporary
|
||||
base.air_temporary = null
|
||||
else
|
||||
air = new
|
||||
|
||||
if(result.len>0)
|
||||
for(var/obj/machinery/atmospherics/pipe/item in result)
|
||||
while(possible_expansions.len>0)
|
||||
for(var/obj/machinery/atmospherics/pipe/borderline in possible_expansions)
|
||||
|
||||
if(item.in_stasis)
|
||||
continue
|
||||
var/list/result = borderline.pipeline_expansion()
|
||||
var/edge_check = result.len
|
||||
|
||||
if(!members.Find(item))
|
||||
members += item
|
||||
possible_expansions += item
|
||||
if(result.len>0)
|
||||
for(var/obj/machinery/atmospherics/pipe/item in result)
|
||||
if(!members.Find(item))
|
||||
members += item
|
||||
possible_expansions += item
|
||||
|
||||
volume += item.volume
|
||||
item.parent = src
|
||||
volume += item.volume
|
||||
item.parent = src
|
||||
|
||||
alert_pressure = min(alert_pressure, item.alert_pressure)
|
||||
alert_pressure = min(alert_pressure, item.alert_pressure)
|
||||
|
||||
if(item.air_temporary)
|
||||
air.merge(item.air_temporary)
|
||||
if(item.air_temporary)
|
||||
air.merge(item.air_temporary)
|
||||
|
||||
if(item.leaking)
|
||||
leaks |= item
|
||||
edge_check--
|
||||
|
||||
edge_check--
|
||||
if(edge_check>0)
|
||||
edges += borderline
|
||||
|
||||
if(edge_check>0)
|
||||
edges += borderline
|
||||
possible_expansions -= borderline
|
||||
|
||||
possible_expansions -= borderline
|
||||
air.volume = volume
|
||||
|
||||
air.volume = volume
|
||||
proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
|
||||
|
||||
/datum/pipeline/proc/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference)
|
||||
if(new_network.line_members.Find(src))
|
||||
return 0
|
||||
|
||||
if(new_network.line_members.Find(src))
|
||||
return 0
|
||||
new_network.line_members += src
|
||||
|
||||
new_network.line_members += src
|
||||
network = new_network
|
||||
|
||||
network = new_network
|
||||
network.leaks |= leaks
|
||||
for(var/obj/machinery/atmospherics/pipe/edge in edges)
|
||||
for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion())
|
||||
if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference))
|
||||
result.network_expand(new_network, edge)
|
||||
|
||||
for(var/obj/machinery/atmospherics/pipe/edge in edges)
|
||||
for(var/obj/machinery/atmospherics/result in edge.pipeline_expansion())
|
||||
if(!istype(result,/obj/machinery/atmospherics/pipe) && (result!=reference))
|
||||
result.network_expand(new_network, edge)
|
||||
return 1
|
||||
|
||||
return 1
|
||||
proc/return_network(obj/machinery/atmospherics/reference)
|
||||
if(!network)
|
||||
network = new /datum/pipe_network()
|
||||
network.build_network(src, null)
|
||||
//technically passing these parameters should not be allowed
|
||||
//however pipe_network.build_network(..) and pipeline.network_extend(...)
|
||||
// were setup to properly handle this case
|
||||
|
||||
/datum/pipeline/proc/return_network(obj/machinery/atmospherics/reference)
|
||||
if(!network)
|
||||
network = new /datum/pipe_network()
|
||||
network.build_network(src, null)
|
||||
//technically passing these parameters should not be allowed
|
||||
//however pipe_network.build_network(..) and pipeline.network_extend(...)
|
||||
// were setup to properly handle this case
|
||||
return network
|
||||
|
||||
return network
|
||||
proc/mingle_with_turf(turf/simulated/target, mingle_volume)
|
||||
var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume)
|
||||
air_sample.volume = mingle_volume
|
||||
|
||||
/datum/pipeline/proc/mingle_with_turf(turf/simulated/target, mingle_volume)
|
||||
var/datum/gas_mixture/air_sample = air.remove_ratio(mingle_volume/air.volume)
|
||||
air_sample.volume = mingle_volume
|
||||
if(istype(target) && target.zone)
|
||||
//Have to consider preservation of group statuses
|
||||
var/datum/gas_mixture/turf_copy = new
|
||||
var/datum/gas_mixture/turf_original = new
|
||||
|
||||
if(istype(target) && target.zone)
|
||||
//Have to consider preservation of group statuses
|
||||
var/datum/gas_mixture/turf_copy = new
|
||||
var/datum/gas_mixture/turf_original = new
|
||||
turf_copy.copy_from(target.zone.air)
|
||||
turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group
|
||||
turf_original.copy_from(turf_copy)
|
||||
|
||||
turf_copy.copy_from(target.zone.air)
|
||||
turf_copy.volume = target.zone.air.volume //Copy a good representation of the turf from parent group
|
||||
turf_original.copy_from(turf_copy)
|
||||
|
||||
equalize_gases(list(air_sample, turf_copy))
|
||||
air.merge(air_sample)
|
||||
equalize_gases(list(air_sample, turf_copy))
|
||||
air.merge(air_sample)
|
||||
|
||||
|
||||
target.zone.air.remove(turf_original.total_moles)
|
||||
target.zone.air.merge(turf_copy)
|
||||
|
||||
else
|
||||
var/datum/gas_mixture/turf_air = target.return_air()
|
||||
|
||||
equalize_gases(list(air_sample, turf_air))
|
||||
air.merge(air_sample)
|
||||
//turf_air already modified by equalize_gases()
|
||||
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
/datum/pipeline/proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
|
||||
var/total_heat_capacity = air.heat_capacity()
|
||||
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
|
||||
|
||||
if(istype(target, /turf/simulated))
|
||||
var/turf/simulated/modeled_location = target
|
||||
|
||||
if(modeled_location.blocks_air)
|
||||
|
||||
if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - modeled_location.temperature
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
modeled_location.temperature += heat/modeled_location.heat_capacity
|
||||
target.zone.air.remove(turf_original.total_moles)
|
||||
target.zone.air.merge(turf_copy)
|
||||
|
||||
else
|
||||
var/delta_temperature = 0
|
||||
var/sharer_heat_capacity = 0
|
||||
var/datum/gas_mixture/turf_air = target.return_air()
|
||||
|
||||
equalize_gases(list(air_sample, turf_air))
|
||||
air.merge(air_sample)
|
||||
//turf_air already modified by equalize_gases()
|
||||
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
proc/temperature_interact(turf/target, share_volume, thermal_conductivity)
|
||||
var/total_heat_capacity = air.heat_capacity()
|
||||
var/partial_heat_capacity = total_heat_capacity*(share_volume/air.volume)
|
||||
|
||||
if(istype(target, /turf/simulated))
|
||||
var/turf/simulated/modeled_location = target
|
||||
|
||||
if(modeled_location.blocks_air)
|
||||
|
||||
if((modeled_location.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - modeled_location.temperature
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*modeled_location.heat_capacity/(partial_heat_capacity+modeled_location.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
modeled_location.temperature += heat/modeled_location.heat_capacity
|
||||
|
||||
if(modeled_location.zone)
|
||||
delta_temperature = (air.temperature - modeled_location.zone.air.temperature)
|
||||
sharer_heat_capacity = modeled_location.zone.air.heat_capacity()
|
||||
else
|
||||
delta_temperature = (air.temperature - modeled_location.air.temperature)
|
||||
sharer_heat_capacity = modeled_location.air.heat_capacity()
|
||||
var/delta_temperature = 0
|
||||
var/sharer_heat_capacity = 0
|
||||
|
||||
var/self_temperature_delta = 0
|
||||
var/sharer_temperature_delta = 0
|
||||
if(modeled_location.zone)
|
||||
delta_temperature = (air.temperature - modeled_location.zone.air.temperature)
|
||||
sharer_heat_capacity = modeled_location.zone.air.heat_capacity()
|
||||
else
|
||||
delta_temperature = (air.temperature - modeled_location.air.temperature)
|
||||
sharer_heat_capacity = modeled_location.air.heat_capacity()
|
||||
|
||||
var/self_temperature_delta = 0
|
||||
var/sharer_temperature_delta = 0
|
||||
|
||||
if((sharer_heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity))
|
||||
|
||||
self_temperature_delta = -heat/total_heat_capacity
|
||||
sharer_temperature_delta = heat/sharer_heat_capacity
|
||||
else
|
||||
return 1
|
||||
|
||||
air.temperature += self_temperature_delta
|
||||
|
||||
if(modeled_location.zone)
|
||||
modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier
|
||||
else
|
||||
modeled_location.air.temperature += sharer_temperature_delta
|
||||
|
||||
|
||||
else
|
||||
if((target.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - target.temperature
|
||||
|
||||
if((sharer_heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*sharer_heat_capacity/(partial_heat_capacity+sharer_heat_capacity))
|
||||
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
|
||||
|
||||
self_temperature_delta = -heat/total_heat_capacity
|
||||
sharer_temperature_delta = heat/sharer_heat_capacity
|
||||
else
|
||||
return 1
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
air.temperature += self_temperature_delta
|
||||
//surface must be the surface area in m^2
|
||||
proc/radiate_heat_to_space(surface, thermal_conductivity)
|
||||
var/gas_density = air.total_moles/air.volume
|
||||
thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio
|
||||
|
||||
if(modeled_location.zone)
|
||||
modeled_location.zone.air.temperature += sharer_temperature_delta/modeled_location.zone.air.group_multiplier
|
||||
else
|
||||
modeled_location.air.temperature += sharer_temperature_delta
|
||||
// We only get heat from the star on the exposed surface area.
|
||||
// If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase.
|
||||
var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity
|
||||
|
||||
// Previously, the temperature would enter equilibrium at 26C or 294K.
|
||||
// Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on.
|
||||
// It currently should stabilise at 129.6K or -143.6C
|
||||
heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4
|
||||
|
||||
else
|
||||
if((target.heat_capacity>0) && (partial_heat_capacity>0))
|
||||
var/delta_temperature = air.temperature - target.temperature
|
||||
|
||||
var/heat = thermal_conductivity*delta_temperature* \
|
||||
(partial_heat_capacity*target.heat_capacity/(partial_heat_capacity+target.heat_capacity))
|
||||
|
||||
air.temperature -= heat/total_heat_capacity
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
//surface must be the surface area in m^2
|
||||
/datum/pipeline/proc/radiate_heat_to_space(surface, thermal_conductivity)
|
||||
var/gas_density = air.total_moles/air.volume
|
||||
thermal_conductivity *= min(gas_density / ( RADIATOR_OPTIMUM_PRESSURE/(R_IDEAL_GAS_EQUATION*GAS_CRITICAL_TEMPERATURE) ), 1) //mult by density ratio
|
||||
|
||||
// We only get heat from the star on the exposed surface area.
|
||||
// If the HE pipes gain more energy from AVERAGE_SOLAR_RADIATION than they can radiate, then they have a net heat increase.
|
||||
var/heat_gain = AVERAGE_SOLAR_RADIATION * (RADIATOR_EXPOSED_SURFACE_AREA_RATIO * surface) * thermal_conductivity
|
||||
|
||||
// Previously, the temperature would enter equilibrium at 26C or 294K.
|
||||
// Only would happen if both sides (all 2 square meters of surface area) were exposed to sunlight. We now assume it aligned edge on.
|
||||
// It currently should stabilise at 129.6K or -143.6C
|
||||
heat_gain -= surface * STEFAN_BOLTZMANN_CONSTANT * thermal_conductivity * (air.temperature - COSMIC_RADIATION_TEMPERATURE) ** 4
|
||||
|
||||
air.add_thermal_energy(heat_gain)
|
||||
if(network)
|
||||
network.update = 1
|
||||
air.add_thermal_energy(heat_gain)
|
||||
if(network)
|
||||
network.update = 1
|
||||
|
||||
@@ -67,22 +67,8 @@
|
||||
return
|
||||
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/set_leaking(var/new_leaking) // They already process, no need for manual processing toggles.
|
||||
if(new_leaking && !leaking)
|
||||
leaking = TRUE
|
||||
if(parent)
|
||||
parent.leaks |= src
|
||||
if(parent.network)
|
||||
parent.network.leaks |= src
|
||||
else if (!new_leaking && leaking)
|
||||
leaking = FALSE
|
||||
if(parent)
|
||||
parent.leaks -= src
|
||||
if(parent.network)
|
||||
parent.network.leaks -= src
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/heat_exchanging/process()
|
||||
if(!parent)
|
||||
@@ -194,5 +180,4 @@
|
||||
return
|
||||
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
return
|
||||
|
||||
@@ -68,16 +68,9 @@
|
||||
node3 = null
|
||||
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/handle_leaking()
|
||||
if(node1 && node2 && node3)
|
||||
set_leaking(FALSE)
|
||||
else
|
||||
set_leaking(TRUE)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/change_color(var/new_color)
|
||||
..()
|
||||
//for updating connected atmos device pipes (i.e. vents, manifolds, etc)
|
||||
@@ -161,7 +154,6 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold/visible
|
||||
icon_state = "map"
|
||||
|
||||
@@ -66,16 +66,9 @@
|
||||
node4 = null
|
||||
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/handle_leaking()
|
||||
if(node1 && node2 && node3 && node4)
|
||||
set_leaking(FALSE)
|
||||
else
|
||||
set_leaking(TRUE)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/change_color(var/new_color)
|
||||
..()
|
||||
//for updating connected atmos device pipes (i.e. vents, manifolds, etc)
|
||||
@@ -163,7 +156,6 @@
|
||||
var/turf/T = get_turf(src)
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/manifold4w/visible
|
||||
icon_state = "map_4way"
|
||||
|
||||
@@ -6,7 +6,6 @@
|
||||
var/datum/gas_mixture/air_temporary // used when reconstructing a pipeline that broke
|
||||
var/datum/pipeline/parent
|
||||
var/volume = 0
|
||||
var/leaking = FALSE // Do not set directly, use set_leaking(TRUE/FALSE)
|
||||
|
||||
layer = PIPES_LAYER
|
||||
use_power = 0
|
||||
@@ -14,7 +13,6 @@
|
||||
pipe_flags = 0 // Does not have PIPING_DEFAULT_LAYER_ONLY flag.
|
||||
|
||||
var/alert_pressure = 80*ONE_ATMOSPHERE
|
||||
var/in_stasis = FALSE
|
||||
//minimum pressure before check_pressure(...) should be called
|
||||
|
||||
can_buckle = 1
|
||||
@@ -32,31 +30,6 @@
|
||||
/obj/machinery/atmospherics/pipe/hides_under_flooring()
|
||||
return level != 2
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/set_leaking(var/new_leaking)
|
||||
if(new_leaking && !leaking)
|
||||
if(!speed_process)
|
||||
START_MACHINE_PROCESSING(src)
|
||||
else
|
||||
START_PROCESSING(SSfastprocess, src)
|
||||
leaking = TRUE
|
||||
if(parent)
|
||||
parent.leaks |= src
|
||||
if(parent.network)
|
||||
parent.network.leaks |= src
|
||||
else if (!new_leaking && leaking)
|
||||
if(!speed_process)
|
||||
STOP_MACHINE_PROCESSING(src)
|
||||
else
|
||||
STOP_PROCESSING(SSfastprocess, src)
|
||||
leaking = FALSE
|
||||
if(parent)
|
||||
parent.leaks -= src
|
||||
if(parent.network)
|
||||
parent.network.leaks -= src
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/handle_leaking() // Used specifically to update leaking status on different pipes.
|
||||
return
|
||||
|
||||
/obj/machinery/atmospherics/pipe/proc/pipeline_expansion()
|
||||
return null
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//
|
||||
// Simple Pipes - Just a tube, maybe bent
|
||||
//
|
||||
//
|
||||
/obj/machinery/atmospherics/pipe/simple
|
||||
icon = 'icons/atmos/pipes.dmi'
|
||||
icon_state = ""
|
||||
@@ -34,14 +34,6 @@
|
||||
icon = null
|
||||
alpha = 255
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/process()
|
||||
if(!parent)
|
||||
..()
|
||||
else if(leaking)
|
||||
parent.mingle_with_turf(loc, volume)
|
||||
else
|
||||
. = PROCESS_KILL
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/check_pressure(pressure)
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
|
||||
@@ -155,7 +147,6 @@
|
||||
var/turf/T = loc
|
||||
if(level == 1 && !T.is_plating()) hide(1)
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/disconnect(obj/machinery/atmospherics/reference)
|
||||
if(reference == node1)
|
||||
@@ -169,16 +160,9 @@
|
||||
node2 = null
|
||||
|
||||
update_icon()
|
||||
handle_leaking()
|
||||
|
||||
return null
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/handle_leaking()
|
||||
if(node1 && node2)
|
||||
set_leaking(FALSE)
|
||||
else
|
||||
set_leaking(TRUE)
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/visible
|
||||
icon_state = "intact"
|
||||
level = 2
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
construction_type = /obj/item/pipe/binary
|
||||
pipe_state = "universal"
|
||||
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0) // Doesn't leak. It's a special pipe.
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/universal/update_icon(var/safety = 0)
|
||||
if(!check_icon_cache())
|
||||
return
|
||||
|
||||
|
||||
@@ -8,12 +8,9 @@ var/datum/category_collection/autolathe/autolathe_recipes
|
||||
for(var/material in I.matter)
|
||||
var/coeff = (no_scale ? 1 : 1.25) //most objects are more expensive to produce than to recycle
|
||||
resources[material] = I.matter[material]*coeff // but if it's a sheet or RCD cartridge, it's 1:1
|
||||
if(is_stack)
|
||||
if(istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/IS = I
|
||||
max_stack = IS.max_amount
|
||||
else
|
||||
max_stack = 10
|
||||
if(is_stack && istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/IS = I
|
||||
max_stack = IS.max_amount
|
||||
qdel(I)
|
||||
|
||||
/****************************
|
||||
@@ -68,7 +65,7 @@ var/datum/category_collection/autolathe/autolathe_recipes
|
||||
var/list/resources
|
||||
var/hidden
|
||||
var/power_use = 0
|
||||
var/is_stack // Creates multiple of an item if applied to non-stack items
|
||||
var/is_stack
|
||||
var/max_stack
|
||||
var/no_scale
|
||||
|
||||
|
||||
@@ -105,12 +105,10 @@
|
||||
/datum/category_item/autolathe/general/tube
|
||||
name = "light tube"
|
||||
path =/obj/item/weapon/light/tube
|
||||
is_stack = TRUE
|
||||
|
||||
/datum/category_item/autolathe/general/bulb
|
||||
name = "light bulb"
|
||||
path =/obj/item/weapon/light/bulb
|
||||
is_stack = TRUE
|
||||
|
||||
/datum/category_item/autolathe/general/ashtray_glass
|
||||
name = "glass ashtray"
|
||||
|
||||
@@ -1,154 +0,0 @@
|
||||
//Good luck. --BlueNexus
|
||||
|
||||
//Static version of the clamp
|
||||
/obj/machinery/clamp
|
||||
name = "stasis clamp"
|
||||
desc = "A magnetic clamp which can halt the flow of gas in a pipe, via a localised stasis field."
|
||||
description_info = "Click-dragging this to yourself while adjacent will attempt to remove it from the pipe."
|
||||
icon = 'icons/atmos/clamp.dmi'
|
||||
icon_state = "pclamp0"
|
||||
anchored = 1.0
|
||||
var/obj/machinery/atmospherics/pipe/simple/target = null
|
||||
var/open = 1
|
||||
|
||||
var/datum/pipe_network/network_node1
|
||||
var/datum/pipe_network/network_node2
|
||||
|
||||
/obj/machinery/clamp/New(loc, var/obj/machinery/atmospherics/pipe/simple/to_attach = null)
|
||||
..()
|
||||
if(istype(to_attach))
|
||||
target = to_attach
|
||||
else
|
||||
target = locate(/obj/machinery/atmospherics/pipe/simple) in loc
|
||||
if(target)
|
||||
update_networks()
|
||||
dir = target.dir
|
||||
return 1
|
||||
|
||||
/obj/machinery/clamp/proc/update_networks()
|
||||
if(!target)
|
||||
return
|
||||
else
|
||||
var/obj/machinery/atmospherics/pipe/node1 = target.node1
|
||||
var/obj/machinery/atmospherics/pipe/node2 = target.node2
|
||||
if(istype(node1))
|
||||
var/datum/pipeline/P1 = node1.parent
|
||||
network_node1 = P1.network
|
||||
if(istype(node2))
|
||||
var/datum/pipeline/P2 = node2.parent
|
||||
network_node2 = P2.network
|
||||
|
||||
/obj/machinery/clamp/attack_hand(var/mob/user)
|
||||
if(!target)
|
||||
return FALSE
|
||||
if(!open)
|
||||
open()
|
||||
else
|
||||
close()
|
||||
to_chat(user, "<span class='notice'>You turn [open ? "off" : "on"] \the [src]</span>")
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/clamp/Destroy()
|
||||
if(!open)
|
||||
spawn(-1) open()
|
||||
. = ..()
|
||||
|
||||
/obj/machinery/clamp/proc/open()
|
||||
if(open || !target)
|
||||
return 0
|
||||
|
||||
target.build_network()
|
||||
|
||||
|
||||
if(network_node1&&network_node2)
|
||||
network_node1.merge(network_node2)
|
||||
network_node2 = network_node1
|
||||
|
||||
if(network_node1)
|
||||
network_node1.update = 1
|
||||
else if(network_node2)
|
||||
network_node2.update = 1
|
||||
|
||||
update_networks()
|
||||
|
||||
open = 1
|
||||
icon_state = "pclamp0"
|
||||
target.in_stasis = 0
|
||||
return 1
|
||||
|
||||
/obj/machinery/clamp/proc/close()
|
||||
if(!open)
|
||||
return 0
|
||||
|
||||
qdel(target.parent)
|
||||
|
||||
if(network_node1)
|
||||
qdel(network_node1)
|
||||
if(network_node2)
|
||||
qdel(network_node2)
|
||||
|
||||
var/obj/machinery/atmospherics/pipe/node1 = null
|
||||
var/obj/machinery/atmospherics/pipe/node2 = null
|
||||
|
||||
if(target.node1)
|
||||
target.node1.build_network()
|
||||
node1 = target.node1
|
||||
if(target.node2)
|
||||
target.node2.build_network()
|
||||
node2 = target.node2
|
||||
if(istype(node1) && node1.parent)
|
||||
var/datum/pipeline/P1 = node1.parent
|
||||
P1.build_pipeline(node1)
|
||||
qdel(P1)
|
||||
if(istype(node2) && node2.parent)
|
||||
var/datum/pipeline/P2 = node2.parent
|
||||
P2.build_pipeline(node2)
|
||||
qdel(P2)
|
||||
// P1.build_network()
|
||||
// P2.build_network()
|
||||
|
||||
open = 0
|
||||
icon_state = "pclamp1"
|
||||
target.in_stasis = 1
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/clamp/MouseDrop(obj/over_object as obj)
|
||||
if(!usr)
|
||||
return
|
||||
|
||||
if(open && over_object == usr && Adjacent(usr))
|
||||
to_chat(usr, "<span class='notice'>You begin to remove \the [src]...</span>")
|
||||
if (do_after(usr, 30, src))
|
||||
to_chat(usr, "<span class='notice'>You have removed \the [src].</span>")
|
||||
var/obj/item/clamp/C = new/obj/item/clamp(src.loc)
|
||||
C.forceMove(usr.loc)
|
||||
if(ishuman(usr))
|
||||
usr.put_in_hands(C)
|
||||
qdel(src)
|
||||
return
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>You can't remove \the [src] while it's active!</span>")
|
||||
|
||||
/obj/item/clamp
|
||||
name = "stasis clamp"
|
||||
desc = "A magnetic clamp which can halt the flow of gas in a pipe, via a localised stasis field."
|
||||
icon = 'icons/atmos/clamp.dmi'
|
||||
icon_state = "pclamp0"
|
||||
origin_tech = list(TECH_ENGINEERING = 4, TECH_MAGNET = 4)
|
||||
|
||||
/obj/item/clamp/afterattack(var/atom/A, mob/user as mob, proximity)
|
||||
if(!proximity)
|
||||
return
|
||||
|
||||
if (istype(A, /obj/machinery/atmospherics/pipe/simple))
|
||||
to_chat(user, "<span class='notice'>You begin to attach \the [src] to \the [A]...</span>")
|
||||
var/C = locate(/obj/machinery/clamp) in get_turf(A)
|
||||
if (do_after(user, 30, src) && !C)
|
||||
if(!user.unEquip(src))
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You have attached \the [src] to \the [A].</span>")
|
||||
new/obj/machinery/clamp(A.loc, A)
|
||||
qdel(src)
|
||||
if(C)
|
||||
to_chat(user, "<span class='notice'>\The [C] is already attached to the pipe at this location!</span>")
|
||||
@@ -276,13 +276,9 @@
|
||||
|
||||
//Create the desired item.
|
||||
var/obj/item/I = new making.path(src.loc)
|
||||
if(multiplier > 1)
|
||||
if(istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/S = I
|
||||
S.amount = multiplier
|
||||
else
|
||||
for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack.
|
||||
new making.path(src.loc)
|
||||
if(multiplier > 1 && istype(I, /obj/item/stack))
|
||||
var/obj/item/stack/S = I
|
||||
S.amount = multiplier
|
||||
|
||||
updateUsrDialog()
|
||||
|
||||
|
||||
@@ -27,7 +27,6 @@ var/global/list/atmos_pipe_recipes = null
|
||||
new /datum/pipe_recipe/pipe("Gas Pump", /obj/machinery/atmospherics/binary/pump),
|
||||
new /datum/pipe_recipe/pipe("Pressure Regulator", /obj/machinery/atmospherics/binary/passive_gate),
|
||||
new /datum/pipe_recipe/pipe("High Power Gas Pump",/obj/machinery/atmospherics/binary/pump/high_power),
|
||||
new /datum/pipe_recipe/pipe("Automatic Shutoff Valve",/obj/machinery/atmospherics/valve/shutoff),
|
||||
new /datum/pipe_recipe/pipe("Scrubber", /obj/machinery/atmospherics/unary/vent_scrubber),
|
||||
new /datum/pipe_recipe/meter("Meter"),
|
||||
new /datum/pipe_recipe/pipe("Gas Filter", /obj/machinery/atmospherics/trinary/atmos_filter),
|
||||
|
||||
@@ -892,7 +892,8 @@
|
||||
//Shooting Code:
|
||||
A.firer = src
|
||||
A.old_style_target(target)
|
||||
A.launch_projectile_from_turf(target, def_zone, src)
|
||||
A.def_zone = def_zone
|
||||
A.fire()
|
||||
|
||||
// Reset the time needed to go back down, since we just tried to shoot at someone.
|
||||
timeout = 10
|
||||
|
||||
@@ -328,7 +328,7 @@
|
||||
equip_cooldown = 5
|
||||
energy_drain = 0
|
||||
range = MELEE|RANGED
|
||||
required_type = list(/obj/mecha/working)
|
||||
required_type = /obj/mecha/working
|
||||
var/spray_particles = 5
|
||||
var/spray_amount = 5 //units of liquid per particle. 5 is enough to wet the floor - it's a big fire extinguisher, so should be fine
|
||||
var/max_water = 1000
|
||||
@@ -1227,7 +1227,7 @@
|
||||
energy_drain = 0
|
||||
var/dam_force = 0
|
||||
var/obj/mecha/working/ripley/cargo_holder
|
||||
required_type = list(/obj/mecha/working/ripley)
|
||||
required_type = /obj/mecha/working/ripley
|
||||
|
||||
equip_type = EQUIP_SPECIAL
|
||||
|
||||
@@ -1528,25 +1528,3 @@
|
||||
sleep(equip_cooldown)
|
||||
wait = 0
|
||||
return 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/speedboost
|
||||
name = "ripley leg actuator overdrive"
|
||||
desc = "System enhancements and overdrives to make a ripley's legs move faster."
|
||||
icon_state = "tesla"
|
||||
origin_tech = list( TECH_POWER = 5, TECH_MATERIAL = 4, TECH_ENGINEERING = 4)
|
||||
required_type = list(/obj/mecha/working/ripley)
|
||||
|
||||
equip_type = EQUIP_HULL
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/speedboost/attach(obj/mecha/M as obj)
|
||||
..()
|
||||
if(enable_special)
|
||||
chassis.step_in = (chassis.step_in-2) // Make the ripley as fast as a durand
|
||||
else
|
||||
chassis.step_in = (chassis.step_in+1) // Improper parts slow the mech down
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/speedboost/detach()
|
||||
chassis.step_in = initial(chassis.step_in)
|
||||
..()
|
||||
return
|
||||
|
||||
@@ -577,7 +577,31 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
|
||||
if(mode==3)
|
||||
data["aircontents"] = src.analyze_air()
|
||||
var/turf/T = get_turf(user.loc)
|
||||
if(!isnull(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
|
||||
if (total_moles)
|
||||
var/o2_level = environment.gas["oxygen"]/total_moles
|
||||
var/n2_level = environment.gas["nitrogen"]/total_moles
|
||||
var/co2_level = environment.gas["carbon_dioxide"]/total_moles
|
||||
var/phoron_level = environment.gas["phoron"]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
data["aircontents"] = list(\
|
||||
"pressure" = "[round(pressure,0.1)]",\
|
||||
"nitrogen" = "[round(n2_level*100,0.1)]",\
|
||||
"oxygen" = "[round(o2_level*100,0.1)]",\
|
||||
"carbon_dioxide" = "[round(co2_level*100,0.1)]",\
|
||||
"phoron" = "[round(phoron_level*100,0.01)]",\
|
||||
"other" = "[round(unknown_level, 0.01)]",\
|
||||
"temp" = "[round(environment.temperature-T0C,0.1)]",\
|
||||
"reading" = 1\
|
||||
)
|
||||
if(isnull(data["aircontents"]))
|
||||
data["aircontents"] = list("reading" = 0)
|
||||
if(mode==6)
|
||||
if(has_reception)
|
||||
feeds.Cut()
|
||||
@@ -1520,37 +1544,3 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
/obj/item/device/pda/emp_act(severity)
|
||||
for(var/atom/A in src)
|
||||
A.emp_act(severity)
|
||||
|
||||
/obj/item/device/pda/proc/analyze_air()
|
||||
var/list/results = list()
|
||||
var/turf/T = get_turf(src.loc)
|
||||
if(!isnull(T))
|
||||
var/datum/gas_mixture/environment = T.return_air()
|
||||
var/pressure = environment.return_pressure()
|
||||
var/total_moles = environment.total_moles
|
||||
if (total_moles)
|
||||
var/o2_level = environment.gas["oxygen"]/total_moles
|
||||
var/n2_level = environment.gas["nitrogen"]/total_moles
|
||||
var/co2_level = environment.gas["carbon_dioxide"]/total_moles
|
||||
var/phoron_level = environment.gas["phoron"]/total_moles
|
||||
var/unknown_level = 1-(o2_level+n2_level+co2_level+phoron_level)
|
||||
|
||||
// entry is what the element is describing
|
||||
// Type identifies which unit or other special characters to use
|
||||
// Val is the information reported
|
||||
// Bad_high/_low are the values outside of which the entry reports as dangerous
|
||||
// Poor_high/_low are the values outside of which the entry reports as unideal
|
||||
// Values were extracted from the template itself
|
||||
results = list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "°C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
)
|
||||
|
||||
if(isnull(results))
|
||||
results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
|
||||
return results
|
||||
|
||||
@@ -19,17 +19,17 @@
|
||||
// Poor_high/_low are the values outside of which the entry reports as unideal
|
||||
// Values were extracted from the template itself
|
||||
results = list(
|
||||
list("entry" = "Pressure", "units" = "kPa", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "units" = "°C", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "units" = "kPa", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "units" = "kPa", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "units" = "kPa", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Phoron", "units" = "kPa", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "units" = "kPa", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
list("entry" = "Pressure", "type" = "pressure", "val" = "[round(pressure,0.1)]", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80),
|
||||
list("entry" = "Temperature", "type" = "temp", "val" = "[round(environment.temperature-T0C,0.1)]", "bad_high" = 35, "poor_high" = 25, "poor_low" = 15, "bad_low" = 5),
|
||||
list("entry" = "Oxygen", "type" = "pressure", "val" = "[round(o2_level*100,0.1)]", "bad_high" = 140, "poor_high" = 135, "poor_low" = 19, "bad_low" = 17),
|
||||
list("entry" = "Nitrogen", "type" = "pressure", "val" = "[round(n2_level*100,0.1)]", "bad_high" = 105, "poor_high" = 85, "poor_low" = 50, "bad_low" = 40),
|
||||
list("entry" = "Carbon Dioxide", "type" = "pressure", "val" = "[round(co2_level*100,0.1)]", "bad_high" = 10, "poor_high" = 5, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Phoron", "type" = "pressure", "val" = "[round(phoron_level*100,0.01)]", "bad_high" = 0.5, "poor_high" = 0, "poor_low" = 0, "bad_low" = 0),
|
||||
list("entry" = "Other", "type" = "pressure", "val" = "[round(unknown_level, 0.01)]", "bad_high" = 1, "poor_high" = 0.5, "poor_low" = 0, "bad_low" = 0)
|
||||
)
|
||||
|
||||
if(isnull(results))
|
||||
results = list(list("entry" = "pressure", "units" = "kPa", "val" = "0", "bad_high" = 120, "poor_high" = 110, "poor_low" = 95, "bad_low" = 80))
|
||||
results = list(list("entry" = "pressure", "val" = "0"))
|
||||
return results
|
||||
|
||||
|
||||
|
||||
@@ -11,8 +11,6 @@
|
||||
starts_with = list(
|
||||
/obj/item/clothing/accessory/storage/brown_vest,
|
||||
/obj/item/blueprints,
|
||||
/obj/item/clamp,
|
||||
/obj/item/clamp,
|
||||
/obj/item/clothing/under/rank/chief_engineer,
|
||||
/obj/item/clothing/under/rank/chief_engineer/skirt,
|
||||
/obj/item/clothing/head/hardhat/white,
|
||||
@@ -125,7 +123,6 @@
|
||||
/obj/item/clothing/suit/fire/firefighter,
|
||||
/obj/item/device/flashlight,
|
||||
/obj/item/weapon/extinguisher,
|
||||
/obj/item/clamp,
|
||||
/obj/item/device/radio/headset/headset_eng,
|
||||
/obj/item/device/radio/headset/headset_eng/alt,
|
||||
/obj/item/clothing/suit/storage/hazardvest,
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed
|
||||
var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to
|
||||
var/can_dirty = TRUE // If false, tile never gets dirty
|
||||
var/can_start_dirty = TRUE // If false, cannot start dirty roundstart
|
||||
var/dirty_prob = 2 // Chance of being dirty roundstart
|
||||
var/dirt = 0
|
||||
|
||||
// This is not great.
|
||||
|
||||
@@ -41,10 +41,9 @@
|
||||
set_flooring(get_flooring_data(floortype))
|
||||
else
|
||||
footstep_sounds = base_footstep_sounds
|
||||
if(can_dirty && can_start_dirty)
|
||||
if(prob(dirty_prob))
|
||||
dirt += rand(50,100)
|
||||
update_dirt() //5% chance to start with dirt on a floor tile- give the janitor something to do
|
||||
if(can_dirty)
|
||||
if(prob(2))
|
||||
new /obj/effect/decal/cleanable/dirt(src) //5% chance to start with dirt on a floor tile- give the janitor something to do
|
||||
|
||||
/turf/simulated/floor/proc/set_flooring(var/decl/flooring/newflooring)
|
||||
make_plating(defer_icon_update = 1)
|
||||
|
||||
@@ -65,11 +65,6 @@
|
||||
on_engagement(target)
|
||||
melee_attack(target)
|
||||
|
||||
else if(distance <= 1 && !holder.ICheckRangedAttack(target)) // Doesn't have projectile, but is pointblank
|
||||
ai_log("engage_target() : Attempting a melee attack.", AI_LOG_TRACE)
|
||||
on_engagement(target)
|
||||
melee_attack(target)
|
||||
|
||||
// Shoot them.
|
||||
else if(holder.ICheckRangedAttack(target) && (distance <= max_range(target)) )
|
||||
on_engagement(target)
|
||||
|
||||
@@ -9,6 +9,7 @@ var/list/overminds = list()
|
||||
mouse_opacity = 1
|
||||
see_in_dark = 8
|
||||
invisibility = INVISIBILITY_OBSERVER
|
||||
layer = FLY_LAYER + 0.1
|
||||
|
||||
faction = "blob"
|
||||
var/obj/structure/blob/core/blob_core = null // The blob overmind's core
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle. They're large enough to be worn over other footwear."
|
||||
name = "magboots"
|
||||
icon_state = "magboots0"
|
||||
item_flags = PHORONGUARD
|
||||
item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots")
|
||||
species_restricted = null
|
||||
force = 3
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
|
||||
/obj/item/clothing/gloves/gauntlets/rig
|
||||
name = "gauntlets"
|
||||
item_flags = THICKMATERIAL|PHORONGUARD
|
||||
item_flags = THICKMATERIAL
|
||||
body_parts_covered = HANDS
|
||||
heat_protection = HANDS
|
||||
cold_protection = HANDS
|
||||
|
||||
@@ -35,7 +35,7 @@ I said no!
|
||||
|
||||
/datum/recipe/devilledegg
|
||||
fruit = list("chili" = 1)
|
||||
reagents = list("sodiumchloride" = 2, "mayo" = 5)
|
||||
reagents = list("salt" = 2, "mayo" = 5)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/egg
|
||||
@@ -90,6 +90,13 @@ I said no!
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
|
||||
|
||||
/datum/recipe/syntiburger
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bun,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/monkeyburger
|
||||
|
||||
/datum/recipe/brainburger
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/bun,
|
||||
@@ -207,6 +214,20 @@ I said no!
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
|
||||
|
||||
/datum/recipe/syntibread
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/meatbread
|
||||
|
||||
/datum/recipe/xenomeatbread
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/dough,
|
||||
@@ -332,11 +353,19 @@ I said no!
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/human/kabob
|
||||
|
||||
/datum/recipe/kabob //Do not put before humankabob
|
||||
/datum/recipe/monkeykabob
|
||||
items = list(
|
||||
/obj/item/stack/rods,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/monkey,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
|
||||
|
||||
/datum/recipe/syntikabob
|
||||
items = list(
|
||||
/obj/item/stack/rods,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/monkeykabob
|
||||
|
||||
@@ -448,6 +477,11 @@ I said no!
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
|
||||
|
||||
/datum/recipe/syntisteak
|
||||
reagents = list("sodiumchloride" = 1, "blackpepper" = 1)
|
||||
items = list(/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/meatsteak
|
||||
|
||||
/datum/recipe/pizzamargherita
|
||||
fruit = list("tomato" = 1)
|
||||
items = list(
|
||||
@@ -479,6 +513,17 @@ I said no!
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
|
||||
|
||||
/datum/recipe/syntipizza
|
||||
fruit = list("tomato" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/sliceable/flatdough,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh,
|
||||
/obj/item/weapon/reagent_containers/food/snacks/cheesewedge
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/sliceable/pizza/meatpizza
|
||||
|
||||
/datum/recipe/mushroompizza
|
||||
fruit = list("mushroom" = 5, "tomato" = 1)
|
||||
items = list(
|
||||
@@ -857,7 +902,7 @@ I said no!
|
||||
|
||||
/datum/recipe/zestfish
|
||||
fruit = list("lemon" = 1)
|
||||
reagents = list("sodiumchloride" = 3)
|
||||
reagents = list("salt" = 3)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
)
|
||||
@@ -865,7 +910,7 @@ I said no!
|
||||
|
||||
/datum/recipe/limezestfish
|
||||
fruit = list("lime" = 1)
|
||||
reagents = list("sodiumchloride" = 3)
|
||||
reagents = list("salt" = 3)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/carpmeat
|
||||
)
|
||||
@@ -1039,14 +1084,14 @@ I said no!
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/fries
|
||||
|
||||
/datum/recipe/roastedsunflowerseeds
|
||||
reagents = list("sodiumchloride" = 1, "cornoil" = 1)
|
||||
reagents = list("salt" = 1, "cornoil" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsunflower
|
||||
)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedsunflower
|
||||
|
||||
/datum/recipe/roastedpeanutsunflowerseeds
|
||||
reagents = list("sodiumchloride" = 1, "peanutoil" = 1)
|
||||
reagents = list("salt" = 1, "peanutoil" = 1)
|
||||
items = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks/rawsunflower
|
||||
)
|
||||
@@ -1054,7 +1099,7 @@ I said no!
|
||||
|
||||
/datum/recipe/roastedpeanuts
|
||||
fruit = list("peanut" = 2)
|
||||
reagents = list("sodiumchloride" = 2, "cornoil" = 1)
|
||||
reagents = list("salt" = 2, "cornoil" = 1)
|
||||
result = /obj/item/weapon/reagent_containers/food/snacks/roastedpeanuts
|
||||
|
||||
/datum/recipe/mint
|
||||
|
||||
@@ -3,9 +3,9 @@
|
||||
name = "chili"
|
||||
seed_name = "chili"
|
||||
display_name = "chili plants"
|
||||
kitchen_tag = "chili"
|
||||
chems = list("capsaicin" = list(3,5), "nutriment" = list(1,25))
|
||||
mutants = list("icechili")
|
||||
kitchen_tag = "chili"
|
||||
|
||||
/datum/seed/chili/New()
|
||||
..()
|
||||
@@ -24,9 +24,9 @@
|
||||
name = "icechili"
|
||||
seed_name = "ice pepper"
|
||||
display_name = "ice-pepper plants"
|
||||
kitchen_tag = "icechili"
|
||||
mutants = null
|
||||
chems = list("frostoil" = list(3,5), "nutriment" = list(1,50))
|
||||
kitchen_tag = "icechili"
|
||||
|
||||
/datum/seed/chili/ice/New()
|
||||
..()
|
||||
@@ -39,9 +39,9 @@
|
||||
name = "berries"
|
||||
seed_name = "berry"
|
||||
display_name = "berry bush"
|
||||
kitchen_tag = "berries"
|
||||
mutants = list("glowberries","poisonberries")
|
||||
chems = list("nutriment" = list(1,10), "berryjuice" = list(10,10))
|
||||
kitchen_tag = "berries"
|
||||
|
||||
/datum/seed/berry/New()
|
||||
..()
|
||||
@@ -129,9 +129,9 @@
|
||||
name = "deathnettle"
|
||||
seed_name = "death nettle"
|
||||
display_name = "death nettles"
|
||||
kitchen_tag = "deathnettle"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,50), "pacid" = list(0,1))
|
||||
kitchen_tag = "deathnettle"
|
||||
|
||||
/datum/seed/nettle/death/New()
|
||||
..()
|
||||
@@ -221,9 +221,9 @@
|
||||
name = "eggplant"
|
||||
seed_name = "eggplant"
|
||||
display_name = "eggplants"
|
||||
kitchen_tag = "eggplant"
|
||||
mutants = list("egg-plant")
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "eggplant"
|
||||
|
||||
/datum/seed/eggplant/New()
|
||||
..()
|
||||
@@ -243,9 +243,9 @@
|
||||
name = "egg-plant"
|
||||
seed_name = "egg-plant"
|
||||
display_name = "egg-plants"
|
||||
kitchen_tag = "egg-plant"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,5), "egg" = list(3,12))
|
||||
kitchen_tag = "egg-plant"
|
||||
has_item_product = /obj/item/weapon/reagent_containers/food/snacks/egg/purple
|
||||
|
||||
//Apples/varieties.
|
||||
@@ -253,9 +253,9 @@
|
||||
name = "apple"
|
||||
seed_name = "apple"
|
||||
display_name = "apple tree"
|
||||
kitchen_tag = "apple"
|
||||
mutants = list("poisonapple","goldapple")
|
||||
chems = list("nutriment" = list(1,10),"applejuice" = list(10,20))
|
||||
kitchen_tag = "apple"
|
||||
|
||||
/datum/seed/apple/New()
|
||||
..()
|
||||
@@ -279,9 +279,9 @@
|
||||
name = "goldapple"
|
||||
seed_name = "golden apple"
|
||||
display_name = "gold apple tree"
|
||||
kitchen_tag = "goldapple"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1,10), "gold" = list(1,5))
|
||||
kitchen_tag = "goldapple"
|
||||
|
||||
/datum/seed/apple/gold/New()
|
||||
..()
|
||||
@@ -296,9 +296,9 @@
|
||||
name = "ambrosia"
|
||||
seed_name = "ambrosia vulgaris"
|
||||
display_name = "ambrosia vulgaris"
|
||||
kitchen_tag = "ambrosia"
|
||||
mutants = list("ambrosiadeus")
|
||||
chems = list("nutriment" = list(1), "space_drugs" = list(1,8), "kelotane" = list(1,8,1), "bicaridine" = list(1,10,1), "toxin" = list(1,10))
|
||||
kitchen_tag = "ambrosia"
|
||||
|
||||
/datum/seed/ambrosia/New()
|
||||
..()
|
||||
@@ -316,9 +316,9 @@
|
||||
name = "ambrosiadeus"
|
||||
seed_name = "ambrosia deus"
|
||||
display_name = "ambrosia deus"
|
||||
kitchen_tag = "ambrosiadeus"
|
||||
mutants = null
|
||||
chems = list("nutriment" = list(1), "bicaridine" = list(1,8), "synaptizine" = list(1,8,1), "hyperzine" = list(1,10,1), "space_drugs" = list(1,10))
|
||||
kitchen_tag = "ambrosiadeus"
|
||||
|
||||
/datum/seed/ambrosia/deus/New()
|
||||
..()
|
||||
@@ -512,8 +512,8 @@
|
||||
name = "harebells"
|
||||
seed_name = "harebell"
|
||||
display_name = "harebells"
|
||||
kitchen_tag = "harebell"
|
||||
chems = list("nutriment" = list(1,20))
|
||||
kitchen_tag = "harebell"
|
||||
|
||||
/datum/seed/flower/New()
|
||||
..()
|
||||
@@ -530,8 +530,8 @@
|
||||
name = "poppies"
|
||||
seed_name = "poppy"
|
||||
display_name = "poppies"
|
||||
kitchen_tag = "poppy"
|
||||
chems = list("nutriment" = list(1,20), "bicaridine" = list(1,10))
|
||||
kitchen_tag = "poppy"
|
||||
|
||||
/datum/seed/flower/poppy/New()
|
||||
..()
|
||||
@@ -621,7 +621,6 @@
|
||||
name = "grapes"
|
||||
seed_name = "grape"
|
||||
display_name = "grapevines"
|
||||
kitchen_tag = "grapes"
|
||||
mutants = list("greengrapes")
|
||||
chems = list("nutriment" = list(1,10), "sugar" = list(1,5), "grapejuice" = list(10,10))
|
||||
|
||||
@@ -655,8 +654,8 @@
|
||||
name = "lettuce"
|
||||
seed_name = "lettuce"
|
||||
display_name = "lettuce"
|
||||
kitchen_tag = "cabbage"
|
||||
chems = list("nutriment" = list(1,15))
|
||||
kitchen_tag = "cabbage"
|
||||
|
||||
/datum/seed/lettuce/New()
|
||||
..()
|
||||
@@ -677,8 +676,8 @@
|
||||
name = "siflettuce"
|
||||
seed_name = "glacial lettuce"
|
||||
display_name = "glacial lettuce"
|
||||
kitchen_tag = "icelettuce"
|
||||
chems = list("nutriment" = list(1,5), "paracetamol" = list(0,2))
|
||||
kitchen_tag = "icelettuce"
|
||||
|
||||
/datum/seed/lettuce/ice/New()
|
||||
..()
|
||||
@@ -745,8 +744,8 @@
|
||||
name = "peanut"
|
||||
seed_name = "peanut"
|
||||
display_name = "peanut vines"
|
||||
kitchen_tag = "peanut"
|
||||
chems = list("nutriment" = list(1,10), "peanutoil" = list(1,3))
|
||||
kitchen_tag = "peanut"
|
||||
|
||||
/datum/seed/peanuts/New()
|
||||
..()
|
||||
@@ -764,7 +763,6 @@
|
||||
name = "vanilla"
|
||||
seed_name = "vanilla"
|
||||
display_name = "vanilla"
|
||||
kitchen_tag = "vanilla"
|
||||
chems = list("nutriment" = list(1,10), "vanilla" = list(0,3), "sugar" = list(0, 1))
|
||||
|
||||
/datum/seed/vanilla/New()
|
||||
@@ -784,8 +782,8 @@
|
||||
name = "cabbage"
|
||||
seed_name = "cabbage"
|
||||
display_name = "cabbages"
|
||||
kitchen_tag = "cabbage"
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "cabbage"
|
||||
|
||||
/datum/seed/cabbage/New()
|
||||
..()
|
||||
@@ -806,9 +804,9 @@
|
||||
name = "banana"
|
||||
seed_name = "banana"
|
||||
display_name = "banana tree"
|
||||
kitchen_tag = "banana"
|
||||
chems = list("banana" = list(10,10))
|
||||
trash_type = /obj/item/weapon/bananapeel
|
||||
kitchen_tag = "banana"
|
||||
|
||||
/datum/seed/banana/New()
|
||||
..()
|
||||
@@ -828,8 +826,8 @@
|
||||
name = "corn"
|
||||
seed_name = "corn"
|
||||
display_name = "ears of corn"
|
||||
kitchen_tag = "corn"
|
||||
chems = list("nutriment" = list(1,10), "cornoil" = list(1,10))
|
||||
kitchen_tag = "corn"
|
||||
trash_type = /obj/item/weapon/corncob
|
||||
|
||||
/datum/seed/corn/New()
|
||||
@@ -850,8 +848,8 @@
|
||||
name = "potato"
|
||||
seed_name = "potato"
|
||||
display_name = "potatoes"
|
||||
kitchen_tag = "potato"
|
||||
chems = list("nutriment" = list(1,10), "potatojuice" = list(10,10))
|
||||
kitchen_tag = "potato"
|
||||
|
||||
/datum/seed/potato/New()
|
||||
..()
|
||||
@@ -869,8 +867,8 @@
|
||||
name = "onion"
|
||||
seed_name = "onion"
|
||||
display_name = "onions"
|
||||
kitchen_tag = "onion"
|
||||
chems = list("nutriment" = list(1,10))
|
||||
kitchen_tag = "onion"
|
||||
|
||||
/datum/seed/onion/New()
|
||||
..()
|
||||
@@ -887,8 +885,8 @@
|
||||
name = "soybean"
|
||||
seed_name = "soybean"
|
||||
display_name = "soybeans"
|
||||
kitchen_tag = "soybeans"
|
||||
chems = list("nutriment" = list(1,20), "soymilk" = list(10,20))
|
||||
kitchen_tag = "soybeans"
|
||||
|
||||
/datum/seed/soybean/New()
|
||||
..()
|
||||
@@ -905,8 +903,8 @@
|
||||
name = "wheat"
|
||||
seed_name = "wheat"
|
||||
display_name = "wheat stalks"
|
||||
kitchen_tag = "wheat"
|
||||
chems = list("nutriment" = list(1,25), "flour" = list(15,15))
|
||||
kitchen_tag = "wheat"
|
||||
|
||||
/datum/seed/wheat/New()
|
||||
..()
|
||||
@@ -925,8 +923,8 @@
|
||||
name = "rice"
|
||||
seed_name = "rice"
|
||||
display_name = "rice stalks"
|
||||
kitchen_tag = "rice"
|
||||
chems = list("nutriment" = list(1,25), "rice" = list(10,15))
|
||||
kitchen_tag = "rice"
|
||||
|
||||
/datum/seed/rice/New()
|
||||
..()
|
||||
@@ -945,8 +943,8 @@
|
||||
name = "carrot"
|
||||
seed_name = "carrot"
|
||||
display_name = "carrots"
|
||||
kitchen_tag = "carrot"
|
||||
chems = list("nutriment" = list(1,20), "imidazoline" = list(3,5), "carrotjuice" = list(10,20))
|
||||
kitchen_tag = "carrot"
|
||||
|
||||
/datum/seed/carrots/New()
|
||||
..()
|
||||
@@ -980,8 +978,8 @@
|
||||
name = "whitebeet"
|
||||
seed_name = "white-beet"
|
||||
display_name = "white-beets"
|
||||
kitchen_tag = "whitebeet"
|
||||
chems = list("nutriment" = list(0,20), "sugar" = list(1,5))
|
||||
kitchen_tag = "whitebeet"
|
||||
|
||||
/datum/seed/whitebeets/New()
|
||||
..()
|
||||
@@ -999,7 +997,6 @@
|
||||
name = "sugarcane"
|
||||
seed_name = "sugarcane"
|
||||
display_name = "sugarcanes"
|
||||
kitchen_tag = "sugarcanes"
|
||||
chems = list("sugar" = list(4,5))
|
||||
|
||||
/datum/seed/sugarcane/New()
|
||||
@@ -1019,8 +1016,8 @@
|
||||
name = "rhubarb"
|
||||
seed_name = "rhubarb"
|
||||
display_name = "rhubarb"
|
||||
kitchen_tag = "rhubarb"
|
||||
chems = list("nutriment" = list(1,15))
|
||||
kitchen_tag = "rhubarb"
|
||||
|
||||
/datum/seed/rhubarb/New()
|
||||
..()
|
||||
@@ -1037,8 +1034,8 @@
|
||||
name = "celery"
|
||||
seed_name = "celery"
|
||||
display_name = "celery"
|
||||
kitchen_tag = "celery"
|
||||
chems = list("nutriment" = list(5,20))
|
||||
kitchen_tag = "celery"
|
||||
|
||||
/datum/seed/celery/New()
|
||||
..()
|
||||
@@ -1055,8 +1052,8 @@
|
||||
name = "spineapple"
|
||||
seed_name = "spineapple"
|
||||
display_name = "spineapple"
|
||||
kitchen_tag = "pineapple"
|
||||
chems = list("nutriment" = list(1,5), "enzyme" = list(1,5), "pineapplejuice" = list(1, 20))
|
||||
kitchen_tag = "pineapple"
|
||||
|
||||
/datum/seed/spineapple/New()
|
||||
..()
|
||||
@@ -1079,8 +1076,8 @@
|
||||
seed_name = "durian"
|
||||
seed_noun = "pits"
|
||||
display_name = "durian"
|
||||
kitchen_tag = "durian"
|
||||
chems = list("nutriment" = list(1,5), "durianpaste" = list(1, 20))
|
||||
kitchen_tag = "durian"
|
||||
|
||||
/datum/seed/durian/New()
|
||||
..()
|
||||
@@ -1100,8 +1097,8 @@
|
||||
name = "watermelon"
|
||||
seed_name = "watermelon"
|
||||
display_name = "watermelon vine"
|
||||
kitchen_tag = "watermelon"
|
||||
chems = list("nutriment" = list(1,6), "watermelonjuice" = list(10,6))
|
||||
kitchen_tag = "watermelon"
|
||||
|
||||
/datum/seed/watermelon/New()
|
||||
..()
|
||||
@@ -1124,8 +1121,8 @@
|
||||
name = "pumpkin"
|
||||
seed_name = "pumpkin"
|
||||
display_name = "pumpkin vine"
|
||||
kitchen_tag = "pumpkin"
|
||||
chems = list("nutriment" = list(1,6))
|
||||
kitchen_tag = "pumpkin"
|
||||
|
||||
/datum/seed/pumpkin/New()
|
||||
..()
|
||||
@@ -1144,8 +1141,8 @@
|
||||
name = "lime"
|
||||
seed_name = "lime"
|
||||
display_name = "lime trees"
|
||||
kitchen_tag = "lime"
|
||||
chems = list("nutriment" = list(1,20), "limejuice" = list(10,20))
|
||||
kitchen_tag = "lime"
|
||||
|
||||
/datum/seed/citrus/New()
|
||||
..()
|
||||
@@ -1164,8 +1161,8 @@
|
||||
name = "lemon"
|
||||
seed_name = "lemon"
|
||||
display_name = "lemon trees"
|
||||
kitchen_tag = "lemon"
|
||||
chems = list("nutriment" = list(1,20), "lemonjuice" = list(10,20))
|
||||
kitchen_tag = "lemon"
|
||||
|
||||
/datum/seed/citrus/lemon/New()
|
||||
..()
|
||||
@@ -1191,8 +1188,8 @@
|
||||
name = "grass"
|
||||
seed_name = "grass"
|
||||
display_name = "grass"
|
||||
kitchen_tag = "grass"
|
||||
chems = list("nutriment" = list(1,20))
|
||||
kitchen_tag = "grass"
|
||||
|
||||
/datum/seed/grass/New()
|
||||
..()
|
||||
@@ -1211,7 +1208,6 @@
|
||||
name = "cocoa"
|
||||
seed_name = "cacao"
|
||||
display_name = "cacao tree"
|
||||
kitchen_tag = "cocoa"
|
||||
chems = list("nutriment" = list(1,10), "coco" = list(4,5))
|
||||
|
||||
/datum/seed/cocoa/New()
|
||||
@@ -1232,8 +1228,8 @@
|
||||
seed_name = "cherry"
|
||||
seed_noun = "pits"
|
||||
display_name = "cherry tree"
|
||||
kitchen_tag = "cherries"
|
||||
chems = list("nutriment" = list(1,15), "sugar" = list(1,15), "cherryjelly" = list(10,15))
|
||||
kitchen_tag = "cherries"
|
||||
|
||||
/datum/seed/cherries/New()
|
||||
..()
|
||||
@@ -1252,8 +1248,8 @@
|
||||
name = "kudzu"
|
||||
seed_name = "kudzu"
|
||||
display_name = "kudzu vines"
|
||||
kitchen_tag = "kudzu"
|
||||
chems = list("nutriment" = list(1,50), "anti_toxin" = list(1,25))
|
||||
kitchen_tag = "kudzu"
|
||||
|
||||
/datum/seed/kudzu/New()
|
||||
..()
|
||||
@@ -1294,8 +1290,8 @@
|
||||
name = "shand"
|
||||
seed_name = "Selem's hand"
|
||||
display_name = "Selem's hand leaves"
|
||||
kitchen_tag = "shand"
|
||||
chems = list("bicaridine" = list(0,10))
|
||||
kitchen_tag = "shand"
|
||||
|
||||
/datum/seed/shand/New()
|
||||
..()
|
||||
@@ -1314,8 +1310,8 @@
|
||||
name = "mtear"
|
||||
seed_name = "Malani's tear"
|
||||
display_name = "Malani's tear leaves"
|
||||
kitchen_tag = "mtear"
|
||||
chems = list("honey" = list(1,10), "kelotane" = list(3,5))
|
||||
kitchen_tag = "mtear"
|
||||
|
||||
/datum/seed/mtear/New()
|
||||
..()
|
||||
@@ -1334,7 +1330,6 @@
|
||||
name = "telriis"
|
||||
seed_name = "telriis"
|
||||
display_name = "telriis grass"
|
||||
kitchen_tag = "telriis"
|
||||
chems = list("pwine" = list(1,5), "nutriment" = list(1,6))
|
||||
|
||||
/datum/seed/telriis/New()
|
||||
@@ -1351,7 +1346,6 @@
|
||||
name = "thaadra"
|
||||
seed_name = "thaa'dra"
|
||||
display_name = "thaa'dra lichen"
|
||||
kitchen_tag = "thaadra"
|
||||
chems = list("frostoil" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/thaadra/New()
|
||||
@@ -1368,7 +1362,6 @@
|
||||
name = "jurlmah"
|
||||
seed_name = "jurl'mah"
|
||||
display_name = "jurl'mah reeds"
|
||||
kitchen_tag = "jurlmah"
|
||||
chems = list("serotrotium" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/jurlmah/New()
|
||||
@@ -1384,7 +1377,6 @@
|
||||
name = "amauri"
|
||||
seed_name = "amauri"
|
||||
display_name = "amauri plant"
|
||||
kitchen_tag = "amauri"
|
||||
chems = list("zombiepowder" = list(1,10),"condensedcapsaicin" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/amauri/New()
|
||||
@@ -1400,7 +1392,6 @@
|
||||
name = "gelthi"
|
||||
seed_name = "gelthi"
|
||||
display_name = "gelthi plant"
|
||||
kitchen_tag = "gelthi"
|
||||
chems = list("stoxin" = list(1,5),"capsaicin" = list(1,5),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/gelthi/New()
|
||||
@@ -1416,7 +1407,6 @@
|
||||
name = "vale"
|
||||
seed_name = "vale"
|
||||
display_name = "vale bush"
|
||||
kitchen_tag = "vale"
|
||||
chems = list("paracetamol" = list(1,5),"dexalin" = list(1,2),"nutriment"= list(1,5))
|
||||
|
||||
/datum/seed/vale/New()
|
||||
@@ -1432,7 +1422,6 @@
|
||||
name = "surik"
|
||||
seed_name = "surik"
|
||||
display_name = "surik vine"
|
||||
kitchen_tag = "surik"
|
||||
chems = list("impedrezene" = list(1,3),"synaptizine" = list(1,2),"nutriment" = list(1,5))
|
||||
|
||||
/datum/seed/surik/New()
|
||||
|
||||
@@ -38,8 +38,8 @@
|
||||
new /datum/data/mining_equipment("Industrial Hardsuit - Maneuvering Jets", /obj/item/rig_module/maneuvering_jets, 1250),
|
||||
new /datum/data/mining_equipment("Hardsuit - Intelligence Storage", /obj/item/rig_module/ai_container, 2500),
|
||||
new /datum/data/mining_equipment("Hardsuit - Smoke Bomb Deployer", /obj/item/rig_module/grenade_launcher/smoke, 2000),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore", /obj/item/weapon/gun/magnetic/matfed, 3000),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher",/obj/item/weapon/storage/bag/sheetsnatcher, 500),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Sheet-Snatcher", /obj/item/weapon/gun/magnetic/matfed, 3000),
|
||||
new /datum/data/mining_equipment("Industrial Equipment - Phoron Bore",/obj/item/weapon/storage/bag/sheetsnatcher, 500),
|
||||
new /datum/data/mining_equipment("Digital Tablet - Standard", /obj/item/modular_computer/tablet/preset/custom_loadout/standard, 500),
|
||||
new /datum/data/mining_equipment("Digital Tablet - Advanced", /obj/item/modular_computer/tablet/preset/custom_loadout/advanced, 1000),
|
||||
new /datum/data/mining_equipment("Fine Excavation Kit - Chisels",/obj/item/weapon/storage/excavation, 500),
|
||||
|
||||
@@ -1,173 +0,0 @@
|
||||
/mob/living/bot/secbot/ed209/slime
|
||||
name = "SL-ED-209 Security Robot"
|
||||
desc = "A security robot. He looks less than thrilled."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "sled2090"
|
||||
density = 1
|
||||
health = 200
|
||||
maxHealth = 200
|
||||
|
||||
is_ranged = 1
|
||||
preparing_arrest_sounds = new()
|
||||
|
||||
a_intent = I_HURT
|
||||
mob_bump_flag = HEAVY
|
||||
mob_swap_flags = ~HEAVY
|
||||
mob_push_flags = HEAVY
|
||||
|
||||
used_weapon = /obj/item/weapon/gun/energy/taser/xeno
|
||||
|
||||
stun_strength = 10
|
||||
xeno_harm_strength = 9
|
||||
req_one_access = list(access_research, access_robotics)
|
||||
botcard_access = list(access_research, access_robotics, access_xenobiology, access_xenoarch, access_tox, access_tox_storage, access_maint_tunnels)
|
||||
used_weapon = /obj/item/weapon/melee/baton/slime
|
||||
var/xeno_stun_strength = 6
|
||||
|
||||
/mob/living/bot/secbot/ed209/slime/update_icons()
|
||||
if(on && busy)
|
||||
icon_state = "sled209-c"
|
||||
else
|
||||
icon_state = "sled209[on]"
|
||||
|
||||
/mob/living/bot/secbot/ed209/slime/RangedAttack(var/atom/A)
|
||||
if(last_shot + shot_delay > world.time)
|
||||
to_chat(src, "You are not ready to fire yet!")
|
||||
return
|
||||
|
||||
last_shot = world.time
|
||||
|
||||
var/projectile = /obj/item/projectile/beam/stun/xeno
|
||||
if(emagged)
|
||||
projectile = /obj/item/projectile/beam/shock
|
||||
|
||||
playsound(loc, emagged ? 'sound/weapons/laser3.ogg' : 'sound/weapons/Taser.ogg', 50, 1)
|
||||
var/obj/item/projectile/P = new projectile(loc)
|
||||
|
||||
P.firer = src
|
||||
P.old_style_target(A)
|
||||
P.fire()
|
||||
|
||||
/mob/living/bot/secbot/ed209/slime/UnarmedAttack(var/mob/living/L, var/proximity)
|
||||
..()
|
||||
|
||||
if(istype(L, /mob/living/simple_mob/slime/xenobio))
|
||||
var/mob/living/simple_mob/slime/xenobio/S = L
|
||||
S.slimebatoned(src, xeno_stun_strength)
|
||||
|
||||
// Assembly
|
||||
|
||||
/obj/item/weapon/secbot_assembly/ed209_assembly/slime
|
||||
name = "SL-ED-209 assembly"
|
||||
desc = "Some sort of bizarre assembly."
|
||||
icon = 'icons/obj/aibots.dmi'
|
||||
icon_state = "ed209_frame"
|
||||
item_state = "buildpipe"
|
||||
created_name = "SL-ED-209 Security Robot"
|
||||
|
||||
/obj/item/weapon/secbot_assembly/ed209_assembly/slime/attackby(var/obj/item/weapon/W as obj, var/mob/user as mob) // Here in the event it's added into a PoI or some such. Standard construction relies on the standard ED up until taser.
|
||||
if(istype(W, /obj/item/weapon/pen))
|
||||
var/t = sanitizeSafe(input(user, "Enter new robot name", name, created_name), MAX_NAME_LEN)
|
||||
if(!t)
|
||||
return
|
||||
if(!in_range(src, usr) && src.loc != usr)
|
||||
return
|
||||
created_name = t
|
||||
return
|
||||
|
||||
switch(build_step)
|
||||
if(0, 1)
|
||||
if(istype(W, /obj/item/robot_parts/l_leg) || istype(W, /obj/item/robot_parts/r_leg) || (istype(W, /obj/item/organ/external/leg) && ((W.name == "robotic right leg") || (W.name == "robotic left leg"))))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add the robot leg to [src].</span>")
|
||||
name = "legs/frame assembly"
|
||||
if(build_step == 1)
|
||||
icon_state = "ed209_leg"
|
||||
else
|
||||
icon_state = "ed209_legs"
|
||||
|
||||
if(2)
|
||||
if(istype(W, /obj/item/clothing/suit/storage/vest))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add the armor to [src].</span>")
|
||||
name = "vest/legs/frame assembly"
|
||||
item_state = "ed209_shell"
|
||||
icon_state = "ed209_shell"
|
||||
|
||||
if(3)
|
||||
if(istype(W, /obj/item/weapon/weldingtool))
|
||||
var/obj/item/weapon/weldingtool/WT = W
|
||||
if(WT.remove_fuel(0, user))
|
||||
build_step++
|
||||
name = "shielded frame assembly"
|
||||
to_chat(user, "<span class='notice'>You welded the vest to [src].</span>")
|
||||
if(4)
|
||||
if(istype(W, /obj/item/clothing/head/helmet))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add the helmet to [src].</span>")
|
||||
name = "covered and shielded frame assembly"
|
||||
item_state = "ed209_hat"
|
||||
icon_state = "ed209_hat"
|
||||
|
||||
if(5)
|
||||
if(isprox(W))
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add the prox sensor to [src].</span>")
|
||||
name = "covered, shielded and sensored frame assembly"
|
||||
item_state = "ed209_prox"
|
||||
icon_state = "ed209_prox"
|
||||
|
||||
if(6)
|
||||
if(istype(W, /obj/item/stack/cable_coil))
|
||||
var/obj/item/stack/cable_coil/C = W
|
||||
if (C.get_amount() < 1)
|
||||
to_chat(user, "<span class='warning'>You need one coil of wire to wire [src].</span>")
|
||||
return
|
||||
to_chat(user, "<span class='notice'>You start to wire [src].</span>")
|
||||
if(do_after(user, 40) && build_step == 6)
|
||||
if(C.use(1))
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You wire the ED-209 assembly.</span>")
|
||||
name = "wired ED-209 assembly"
|
||||
return
|
||||
|
||||
if(7)
|
||||
if(istype(W, /obj/item/weapon/gun/energy/taser/xeno))
|
||||
name = "xenotaser SL-ED-209 assembly"
|
||||
item_state = "sled209_taser"
|
||||
icon_state = "sled209_taser"
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add [W] to [src].</span>")
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
|
||||
if(8)
|
||||
if(W.is_screwdriver())
|
||||
playsound(src, W.usesound, 100, 1)
|
||||
var/turf/T = get_turf(user)
|
||||
to_chat(user, "<span class='notice'>Now attaching the gun to the frame...</span>")
|
||||
sleep(40)
|
||||
if(get_turf(user) == T && build_step == 8)
|
||||
build_step++
|
||||
name = "armed [name]"
|
||||
to_chat(user, "<span class='notice'>Taser gun attached.</span>")
|
||||
|
||||
if(9)
|
||||
if(istype(W, /obj/item/weapon/cell))
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You complete the ED-209.</span>")
|
||||
var/turf/T = get_turf(src)
|
||||
new /mob/living/bot/secbot/ed209/slime(T,created_name,lasercolor)
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
|
||||
@@ -160,30 +160,12 @@
|
||||
return
|
||||
|
||||
if(7)
|
||||
if(istype(W, /obj/item/weapon/gun/energy/taser/xeno))
|
||||
name = "xenotaser SL-ED-209 assembly"
|
||||
item_state = "sled209_taser"
|
||||
icon_state = "sled209_taser"
|
||||
if(istype(W, /obj/item/weapon/gun/energy/taser))
|
||||
name = "taser ED-209 assembly"
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add [W] to [src].</span>")
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
var/turf/T = get_turf(src)
|
||||
var/obj/item/weapon/secbot_assembly/ed209_assembly/slime/S = new /obj/item/weapon/secbot_assembly/ed209_assembly/slime(T)
|
||||
S.name = name
|
||||
S.item_state = item_state
|
||||
S.icon_state = icon_state
|
||||
S.build_step = build_step
|
||||
S.created_name = created_name
|
||||
user.drop_from_inventory(src)
|
||||
qdel(src)
|
||||
|
||||
else if(istype(W, /obj/item/weapon/gun/energy/taser))
|
||||
name = "taser ED-209 assembly"
|
||||
item_state = "ed209_taser"
|
||||
icon_state = "ed209_taser"
|
||||
build_step++
|
||||
to_chat(user, "<span class='notice'>You add [W] to [src].</span>")
|
||||
user.drop_item()
|
||||
qdel(W)
|
||||
|
||||
|
||||
@@ -280,6 +280,8 @@
|
||||
var/mob/living/simple_mob/slime/xenobio/S = L
|
||||
S.slimebatoned(src, xeno_stun_strength)
|
||||
|
||||
|
||||
|
||||
/mob/living/bot/secbot/explode()
|
||||
visible_message("<span class='warning'>[src] blows apart!</span>")
|
||||
var/turf/Tsec = get_turf(src)
|
||||
|
||||
@@ -122,7 +122,11 @@ var/datum/species/shapeshifter/promethean/prometheans
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/nymph,
|
||||
/obj/item/weapon/storage/toolbox/lunchbox/syndicate)) //Only pick the empty types
|
||||
var/obj/item/weapon/storage/toolbox/lunchbox/L = new boxtype(get_turf(H))
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/candy/proteinbar(L)
|
||||
var/mob/living/simple_mob/animal/passive/mouse/mouse = new (L)
|
||||
var/obj/item/weapon/holder/holder = new (L)
|
||||
holder.held_mob = mouse
|
||||
mouse.forceMove(holder)
|
||||
holder.sync(mouse)
|
||||
if(H.backbag == 1)
|
||||
H.equip_to_slot_or_del(L, slot_r_hand)
|
||||
else
|
||||
|
||||
@@ -83,4 +83,4 @@
|
||||
if(!.)
|
||||
if(isrobot(L)) // They ignore synths.
|
||||
return TRUE
|
||||
return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 3
|
||||
return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 4
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
if(!.)
|
||||
if(isrobot(L)) // They ignore synths.
|
||||
return TRUE
|
||||
return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 3
|
||||
return L.assess_perp(src, FALSE, FALSE, TRUE, FALSE) <= 4
|
||||
|
||||
/mob/living/simple_mob/mechanical/ward/monitor/death()
|
||||
if(owner)
|
||||
@@ -71,7 +71,7 @@
|
||||
icon_living = "[initial(icon_state)]_spotted"
|
||||
glow_color = "#FF0000"
|
||||
else
|
||||
icon_living = "[initial(icon_state)]"
|
||||
icon_living = "[initial(icon_state)]_ward"
|
||||
glow_color = "#00FF00"
|
||||
handle_light() // Update the light immediately.
|
||||
..()
|
||||
|
||||
@@ -150,15 +150,15 @@
|
||||
if(dna_lock && attached_lock.stored_dna)
|
||||
if(!authorized_user(user))
|
||||
if(attached_lock.safety_level == 0)
|
||||
to_chat(M, "<span class='danger'>\The [src] buzzes in dissapointment and displays an invalid DNA symbol.</span>")
|
||||
to_chat(M, "<span class='danger'>\The [src] buzzes in dissapoint and displays an invalid DNA symbol.</span>")
|
||||
return 0
|
||||
if(!attached_lock.exploding)
|
||||
if(attached_lock.safety_level == 1)
|
||||
to_chat(M, "<span class='danger'>\The [src] hisses in dissapointment.</span>")
|
||||
visible_message("<span class='game say'><span class='name'>\The [src]</span> announces, \"Self-destruct occurring in ten seconds.\"</span>", "<span class='game say'><span class='name'>\The [src]</span> announces, \"Self-destruct occurring in ten seconds.\"</span>")
|
||||
attached_lock.exploding = 1
|
||||
spawn(100)
|
||||
explosion(src, 0, 0, 3, 4)
|
||||
attached_lock.exploding = 1
|
||||
sleep(1)
|
||||
qdel(src)
|
||||
return 0
|
||||
|
||||
@@ -1,263 +1,249 @@
|
||||
/obj/item/weapon/gun/energy/laser
|
||||
name = "laser rifle"
|
||||
desc = "A Hephaestus Industries G40E rifle, designed to kill with concentrated energy blasts. This variant has the ability to \
|
||||
switch between standard fire and a more efficent but weaker 'suppressive' fire."
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
wielded_item_state = "laser-wielded"
|
||||
fire_delay = 8
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/midlaser
|
||||
// one_handed_penalty = 30
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240),
|
||||
list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
one_handed_penalty = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/practice
|
||||
name = "practice laser carbine"
|
||||
desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice."
|
||||
projectile_type = /obj/item/projectile/beam/practice
|
||||
charge_cost = 48
|
||||
|
||||
cell_type = /obj/item/weapon/cell/device
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 48),
|
||||
list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 12),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/retro
|
||||
name = "retro laser"
|
||||
icon_state = "retro"
|
||||
item_state = "retro"
|
||||
desc = "An older model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
fire_delay = 10 //old technology
|
||||
|
||||
/obj/item/weapon/gun/energy/retro/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/retro/empty
|
||||
icon_state = "retro"
|
||||
cell_type = null
|
||||
|
||||
|
||||
/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol
|
||||
name = "Precursor Alpha Weapon - Appendageheld Laser"
|
||||
desc = "This object strongly resembles a weapon, and if one were to pull the \
|
||||
trigger located on the handle of the object, it would fire a deadly \
|
||||
laser at whatever it was pointed at. The beam fired appears to cause too \
|
||||
much damage to whatever it would hit to have served as a long ranged repair tool, \
|
||||
therefore this object was most likely designed to be a deadly weapon. If so, this \
|
||||
has several implications towards its creators;\
|
||||
<br><br>\
|
||||
Firstly, it implies that these precursors, at some point during their development, \
|
||||
had needed to defend themselves, or otherwise had a need to utilize violence, and \
|
||||
as such created better tools to do so. It is unclear if violence was employed against \
|
||||
themselves as a form of in-fighting, or if violence was exclusive to outside species.\
|
||||
<br><br>\
|
||||
Secondly, the shape and design of the weapon implies that the creators of this \
|
||||
weapon were able to grasp objects, and be able to manipulate the trigger independently \
|
||||
from merely holding onto the weapon, making certain types of appendages like tentacles be \
|
||||
unlikely.\
|
||||
<br><br>\
|
||||
An interesting note about this weapon, when compared to contemporary energy weapons, is \
|
||||
that this gun appears to be inferior to modern laser weapons. The beam fired has less \
|
||||
of an ability to harm, and the power consumption appears to be higher than average for \
|
||||
a human-made energy side-arm. One possible explaination is that the creators of this \
|
||||
weapon, in their later years, had less of a need to optimize their capability for war, \
|
||||
and instead focused on other endeavors. Another explaination is that vast age of the weapon \
|
||||
may have caused it to degrade, yet still remain functional at a reduced capability."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/obj/item/weapon/gun/energy/alien
|
||||
name = "alien pistol"
|
||||
desc = "A weapon that works very similarly to a traditional energy weapon. How this came to be will likely be a mystery for the ages."
|
||||
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol)
|
||||
icon_state = "alienpistol"
|
||||
item_state = "alienpistol"
|
||||
fire_delay = 10 // Handguns should be inferior to two-handed weapons. Even alien ones I suppose.
|
||||
charge_cost = 480 // Five shots.
|
||||
|
||||
projectile_type = /obj/item/projectile/beam/cyan
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien // Self charges.
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MAGNET = 7)
|
||||
modifystate = "alienpistol"
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/captain
|
||||
name = "antique laser gun"
|
||||
icon_state = "caplaser"
|
||||
item_state = "caplaser"
|
||||
desc = "A rare weapon, handcrafted by a now defunct specialty manufacturer on Luna for a small fortune. It's certainly aged well."
|
||||
force = 5
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
origin_tech = null
|
||||
fire_delay = 10 //Old pistol
|
||||
charge_cost = 480 //to compensate a bit for self-recharging
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge/captain
|
||||
battery_lock = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon
|
||||
name = "laser cannon"
|
||||
desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron \
|
||||
flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
|
||||
icon_state = "lasercannon"
|
||||
item_state = null
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser/cannon
|
||||
battery_lock = 1
|
||||
fire_delay = 20
|
||||
w_class = ITEMSIZE_LARGE
|
||||
// one_handed_penalty = 90 // The thing's heavy and huge.
|
||||
accuracy = 45
|
||||
charge_cost = 600
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon/mounted
|
||||
name = "mounted laser cannon"
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 10
|
||||
accuracy = 0 // Mounted cannons are just fine the way they are.
|
||||
one_handed_penalty = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser
|
||||
charge_cost = 400
|
||||
fire_delay = 20
|
||||
|
||||
/obj/item/weapon/gun/energy/xray
|
||||
name = "xray laser gun"
|
||||
desc = "A high-power laser gun capable of expelling concentrated xray blasts, which are able to penetrate matter easier than \
|
||||
standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
|
||||
icon_state = "xray"
|
||||
item_state = "xray"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
charge_cost = 200
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle
|
||||
name = "marksman energy rifle"
|
||||
desc = "The HI DMR 9E is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful \
|
||||
ionized beams, this is a weapon to kill from a distance."
|
||||
icon_state = "sniper"
|
||||
item_state = "sniper"
|
||||
item_state_slots = list(slot_r_hand_str = "z8carbine", slot_l_hand_str = "z8carbine") //placeholder
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
|
||||
projectile_type = /obj/item/projectile/beam/sniper
|
||||
slot_flags = SLOT_BACK
|
||||
battery_lock = 1
|
||||
charge_cost = 600
|
||||
fire_delay = 35
|
||||
force = 10
|
||||
w_class = ITEMSIZE_HUGE // So it can't fit in a backpack.
|
||||
accuracy = -45 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
// requires_two_hands = 1
|
||||
// one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle/verb/scope()
|
||||
set category = "Object"
|
||||
set name = "Use Scope"
|
||||
set popup_menu = 1
|
||||
|
||||
toggle_scope(2.0)
|
||||
|
||||
/obj/item/weapon/gun/energy/monorifle
|
||||
name = "antique mono-rifle"
|
||||
desc = "An old laser rifle. This one can only fire once before requiring recharging."
|
||||
description_fluff = "Modeled after ancient hunting rifles, this rifle was dubbed the 'Rainy Day Special' by some, due to its use as some barmens' fight-stopper of choice. One shot is all it takes, or so they say."
|
||||
icon_state = "eshotgun"
|
||||
item_state = "shotgun"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_POWER = 3)
|
||||
projectile_type = /obj/item/projectile/beam/sniper
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 1300
|
||||
fire_delay = 20
|
||||
force = 8
|
||||
w_class = ITEMSIZE_LARGE
|
||||
accuracy = 10
|
||||
scoped_accuracy = 15
|
||||
var/scope_multiplier = 1.5
|
||||
|
||||
/obj/item/weapon/gun/energy/monorifle/verb/sights()
|
||||
set category = "Object"
|
||||
set name = "Aim Down Sights"
|
||||
set popup_menu = 1
|
||||
|
||||
toggle_scope(scope_multiplier)
|
||||
|
||||
/obj/item/weapon/gun/energy/monorifle/combat
|
||||
name = "combat mono-rifle"
|
||||
desc = "A modernized version of the mono-rifle. This one can fire twice before requiring recharging."
|
||||
description_fluff = "A modern design produced by a company once working from Saint Columbia, based on the antique mono-rifle 'Rainy Day Special' design."
|
||||
icon_state = "ecshotgun"
|
||||
item_state = "cshotgun"
|
||||
charge_cost = 1000
|
||||
force = 12
|
||||
accuracy = 0
|
||||
scoped_accuracy = 20
|
||||
|
||||
////////Laser Tag////////////////////
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag
|
||||
name = "laser tag gun"
|
||||
item_state = "laser"
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge
|
||||
battery_lock = 1
|
||||
var/required_vest
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M)
|
||||
if(ishuman(M))
|
||||
if(!istype(M.wear_suit, required_vest))
|
||||
M << "<span class='warning'>You need to be wearing your laser tag vest!</span>"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/blue
|
||||
icon_state = "bluetag"
|
||||
item_state = "bluetag"
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
||||
required_vest = /obj/item/clothing/suit/bluetag
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/red
|
||||
icon_state = "redtag"
|
||||
item_state = "redtag"
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/red
|
||||
required_vest = /obj/item/clothing/suit/redtag
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/omni
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/omni
|
||||
|
||||
/*
|
||||
* Laser scattergun, proof of concept.
|
||||
*/
|
||||
|
||||
/obj/item/weapon/gun/energy/lasershotgun
|
||||
name = "laser scattergun"
|
||||
icon = 'icons/obj/energygun.dmi'
|
||||
item_state = "laser"
|
||||
icon_state = "scatter"
|
||||
desc = "A strange Almachi weapon, utilizing a refracting prism to turn a single laser blast into a diverging cluster."
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 1, TECH_MATERIAL = 4)
|
||||
|
||||
projectile_type = /obj/item/projectile/scatter/laser
|
||||
/obj/item/weapon/gun/energy/laser
|
||||
name = "laser rifle"
|
||||
desc = "A Hephaestus Industries G40E rifle, designed to kill with concentrated energy blasts. This variant has the ability to \
|
||||
switch between standard fire and a more efficent but weaker 'suppressive' fire."
|
||||
icon_state = "laser"
|
||||
item_state = "laser"
|
||||
wielded_item_state = "laser-wielded"
|
||||
fire_delay = 8
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
w_class = ITEMSIZE_LARGE
|
||||
force = 10
|
||||
origin_tech = list(TECH_COMBAT = 3, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/midlaser
|
||||
// one_handed_penalty = 30
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", fire_delay=8, projectile_type=/obj/item/projectile/beam/midlaser, charge_cost = 240),
|
||||
list(mode_name="suppressive", fire_delay=5, projectile_type=/obj/item/projectile/beam/weaklaser, charge_cost = 60),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
one_handed_penalty = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
|
||||
/obj/item/weapon/gun/energy/laser/practice
|
||||
name = "practice laser carbine"
|
||||
desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice."
|
||||
projectile_type = /obj/item/projectile/beam/practice
|
||||
charge_cost = 48
|
||||
|
||||
cell_type = /obj/item/weapon/cell/device
|
||||
|
||||
firemodes = list(
|
||||
list(mode_name="normal", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 48),
|
||||
list(mode_name="suppressive", projectile_type=/obj/item/projectile/beam/practice, charge_cost = 12),
|
||||
)
|
||||
|
||||
/obj/item/weapon/gun/energy/retro
|
||||
name = "retro laser"
|
||||
icon_state = "retro"
|
||||
item_state = "retro"
|
||||
desc = "An older model of the basic lasergun. Nevertheless, it is still quite deadly and easy to maintain, making it a favorite amongst pirates and other outlaws."
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
fire_delay = 10 //old technology
|
||||
|
||||
/obj/item/weapon/gun/energy/retro/mounted
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/retro/empty
|
||||
icon_state = "retro"
|
||||
cell_type = null
|
||||
|
||||
|
||||
/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol
|
||||
name = "Precursor Alpha Weapon - Appendageheld Laser"
|
||||
desc = "This object strongly resembles a weapon, and if one were to pull the \
|
||||
trigger located on the handle of the object, it would fire a deadly \
|
||||
laser at whatever it was pointed at. The beam fired appears to cause too \
|
||||
much damage to whatever it would hit to have served as a long ranged repair tool, \
|
||||
therefore this object was most likely designed to be a deadly weapon. If so, this \
|
||||
has several implications towards its creators;\
|
||||
<br><br>\
|
||||
Firstly, it implies that these precursors, at some point during their development, \
|
||||
had needed to defend themselves, or otherwise had a need to utilize violence, and \
|
||||
as such created better tools to do so. It is unclear if violence was employed against \
|
||||
themselves as a form of in-fighting, or if violence was exclusive to outside species.\
|
||||
<br><br>\
|
||||
Secondly, the shape and design of the weapon implies that the creators of this \
|
||||
weapon were able to grasp objects, and be able to manipulate the trigger independently \
|
||||
from merely holding onto the weapon, making certain types of appendages like tentacles be \
|
||||
unlikely.\
|
||||
<br><br>\
|
||||
An interesting note about this weapon, when compared to contemporary energy weapons, is \
|
||||
that this gun appears to be inferior to modern laser weapons. The beam fired has less \
|
||||
of an ability to harm, and the power consumption appears to be higher than average for \
|
||||
a human-made energy side-arm. One possible explaination is that the creators of this \
|
||||
weapon, in their later years, had less of a need to optimize their capability for war, \
|
||||
and instead focused on other endeavors. Another explaination is that vast age of the weapon \
|
||||
may have caused it to degrade, yet still remain functional at a reduced capability."
|
||||
value = CATALOGUER_REWARD_MEDIUM
|
||||
|
||||
/obj/item/weapon/gun/energy/alien
|
||||
name = "alien pistol"
|
||||
desc = "A weapon that works very similarly to a traditional energy weapon. How this came to be will likely be a mystery for the ages."
|
||||
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/alien_pistol)
|
||||
icon_state = "alienpistol"
|
||||
item_state = "alienpistol"
|
||||
fire_delay = 10 // Handguns should be inferior to two-handed weapons. Even alien ones I suppose.
|
||||
charge_cost = 480 // Five shots.
|
||||
|
||||
projectile_type = /obj/item/projectile/beam/cyan
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge/alien // Self charges.
|
||||
origin_tech = list(TECH_COMBAT = 8, TECH_MAGNET = 7)
|
||||
modifystate = "alienpistol"
|
||||
|
||||
|
||||
/obj/item/weapon/gun/energy/captain
|
||||
name = "antique laser gun"
|
||||
icon_state = "caplaser"
|
||||
item_state = "caplaser"
|
||||
desc = "A rare weapon, handcrafted by a now defunct specialty manufacturer on Luna for a small fortune. It's certainly aged well."
|
||||
force = 5
|
||||
slot_flags = SLOT_BELT
|
||||
w_class = ITEMSIZE_NORMAL
|
||||
projectile_type = /obj/item/projectile/beam
|
||||
origin_tech = null
|
||||
fire_delay = 10 //Old pistol
|
||||
charge_cost = 480 //to compensate a bit for self-recharging
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge/captain
|
||||
battery_lock = 1
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon
|
||||
name = "laser cannon"
|
||||
desc = "With the laser cannon, the lasing medium is enclosed in a tube lined with uranium-235 and subjected to high neutron \
|
||||
flux in a nuclear reactor core. This incredible technology may help YOU achieve high excitation rates with small laser volumes!"
|
||||
icon_state = "lasercannon"
|
||||
item_state = null
|
||||
origin_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3)
|
||||
slot_flags = SLOT_BELT|SLOT_BACK
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser/cannon
|
||||
battery_lock = 1
|
||||
fire_delay = 20
|
||||
w_class = ITEMSIZE_LARGE
|
||||
// one_handed_penalty = 90 // The thing's heavy and huge.
|
||||
accuracy = 45
|
||||
charge_cost = 600
|
||||
|
||||
/obj/item/weapon/gun/energy/lasercannon/mounted
|
||||
name = "mounted laser cannon"
|
||||
self_recharge = 1
|
||||
use_external_power = 1
|
||||
recharge_time = 10
|
||||
accuracy = 0 // Mounted cannons are just fine the way they are.
|
||||
one_handed_penalty = 0 // Not sure if two-handing gets checked for mounted weapons, but better safe than sorry.
|
||||
projectile_type = /obj/item/projectile/beam/heavylaser
|
||||
charge_cost = 400
|
||||
fire_delay = 20
|
||||
|
||||
/obj/item/weapon/gun/energy/xray
|
||||
name = "xray laser gun"
|
||||
desc = "A high-power laser gun capable of expelling concentrated xray blasts, which are able to penetrate matter easier than \
|
||||
standard photonic beams, resulting in an effective 'anti-armor' energy weapon."
|
||||
icon_state = "xray"
|
||||
item_state = "xray"
|
||||
origin_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2)
|
||||
projectile_type = /obj/item/projectile/beam/xray
|
||||
charge_cost = 200
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle
|
||||
name = "marksman energy rifle"
|
||||
desc = "The HI DMR 9E is an older design of Hephaestus Industries. A designated marksman rifle capable of shooting powerful \
|
||||
ionized beams, this is a weapon to kill from a distance."
|
||||
icon_state = "sniper"
|
||||
item_state = "sniper"
|
||||
item_state_slots = list(slot_r_hand_str = "z8carbine", slot_l_hand_str = "z8carbine") //placeholder
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 5, TECH_POWER = 4)
|
||||
projectile_type = /obj/item/projectile/beam/sniper
|
||||
slot_flags = SLOT_BACK
|
||||
battery_lock = 1
|
||||
charge_cost = 600
|
||||
fire_delay = 35
|
||||
force = 10
|
||||
w_class = ITEMSIZE_HUGE // So it can't fit in a backpack.
|
||||
accuracy = -45 //shooting at the hip
|
||||
scoped_accuracy = 0
|
||||
// requires_two_hands = 1
|
||||
// one_handed_penalty = 60 // The weapon itself is heavy, and the long barrel makes it hard to hold steady with just one hand.
|
||||
|
||||
/obj/item/weapon/gun/energy/sniperrifle/verb/scope()
|
||||
set category = "Object"
|
||||
set name = "Use Scope"
|
||||
set popup_menu = 1
|
||||
|
||||
toggle_scope(2.0)
|
||||
|
||||
/obj/item/weapon/gun/energy/monorifle
|
||||
name = "antique mono-rifle"
|
||||
desc = "An old laser rifle. This one can only fire once before requiring recharging."
|
||||
description_fluff = "Modeled after ancient hunting rifles, this rifle was dubbed the 'Rainy Day Special' by some, due to its use as some barmens' fight-stopper of choice. One shot is all it takes, or so they say."
|
||||
icon_state = "eshotgun"
|
||||
item_state = "shotgun"
|
||||
origin_tech = list(TECH_COMBAT = 6, TECH_MATERIAL = 4, TECH_POWER = 3)
|
||||
projectile_type = /obj/item/projectile/beam/sniper
|
||||
slot_flags = SLOT_BACK
|
||||
charge_cost = 1300
|
||||
fire_delay = 20
|
||||
force = 8
|
||||
w_class = ITEMSIZE_LARGE
|
||||
accuracy = 10
|
||||
scoped_accuracy = 15
|
||||
var/scope_multiplier = 1.5
|
||||
|
||||
/obj/item/weapon/gun/energy/monorifle/verb/sights()
|
||||
set category = "Object"
|
||||
set name = "Aim Down Sights"
|
||||
set popup_menu = 1
|
||||
|
||||
toggle_scope(scope_multiplier)
|
||||
|
||||
/obj/item/weapon/gun/energy/monorifle/combat
|
||||
name = "combat mono-rifle"
|
||||
desc = "A modernized version of the mono-rifle. This one can fire twice before requiring recharging."
|
||||
description_fluff = "A modern design produced by a company once working from Saint Columbia, based on the antique mono-rifle 'Rainy Day Special' design."
|
||||
icon_state = "ecshotgun"
|
||||
item_state = "cshotgun"
|
||||
charge_cost = 1000
|
||||
force = 12
|
||||
accuracy = 0
|
||||
scoped_accuracy = 20
|
||||
|
||||
////////Laser Tag////////////////////
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag
|
||||
name = "laser tag gun"
|
||||
item_state = "laser"
|
||||
desc = "Standard issue weapon of the Imperial Guard"
|
||||
origin_tech = list(TECH_COMBAT = 1, TECH_MAGNET = 2)
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 2000)
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
||||
cell_type = /obj/item/weapon/cell/device/weapon/recharge
|
||||
battery_lock = 1
|
||||
var/required_vest
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/special_check(var/mob/living/carbon/human/M)
|
||||
if(ishuman(M))
|
||||
if(!istype(M.wear_suit, required_vest))
|
||||
M << "<span class='warning'>You need to be wearing your laser tag vest!</span>"
|
||||
return 0
|
||||
return ..()
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/blue
|
||||
icon_state = "bluetag"
|
||||
item_state = "bluetag"
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/blue
|
||||
required_vest = /obj/item/clothing/suit/bluetag
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/red
|
||||
icon_state = "redtag"
|
||||
item_state = "redtag"
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/red
|
||||
required_vest = /obj/item/clothing/suit/redtag
|
||||
|
||||
/obj/item/weapon/gun/energy/lasertag/omni
|
||||
projectile_type = /obj/item/projectile/beam/lasertag/omni
|
||||
@@ -84,17 +84,8 @@
|
||||
var/accuracy = 0
|
||||
var/dispersion = 0.0
|
||||
|
||||
// Sub-munitions. Basically, multi-projectile shotgun, rather than pellets.
|
||||
var/use_submunitions = FALSE
|
||||
var/only_submunitions = FALSE // Will the projectile delete itself after firing the submunitions?
|
||||
var/list/submunitions = list() // Assoc list of the paths of any submunitions, and how many they are. [projectilepath] = [projectilecount].
|
||||
var/submunition_spread_max = 30 // Divided by 10 to get the percentile dispersion.
|
||||
var/submunition_spread_min = 5 // Above.
|
||||
var/force_max_submunition_spread = FALSE // Do we just force the maximum?
|
||||
var/spread_submunition_damage = FALSE // Do we assign damage to our sub projectiles based on our main projectile damage?
|
||||
|
||||
var/damage = 10
|
||||
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS, ELECTROCUTE, BIOACID are the only things that should be in here
|
||||
var/damage_type = BRUTE //BRUTE, BURN, TOX, OXY, CLONE, HALLOSS are the only things that should be in here
|
||||
var/SA_bonus_damage = 0 // Some bullets inflict extra damage on simple animals.
|
||||
var/SA_vulnerability = null // What kind of simple animal the above bonus damage should be applied to. Set to null to apply to all SAs.
|
||||
var/nodamage = 0 //Determines if the projectile will skip any damage inflictions
|
||||
@@ -658,37 +649,6 @@
|
||||
if(get_turf(target) == get_turf(src))
|
||||
direct_target = target
|
||||
|
||||
if(use_submunitions && submunitions.len)
|
||||
var/temp_min_spread = 0
|
||||
if(force_max_submunition_spread)
|
||||
temp_min_spread = submunition_spread_max
|
||||
else
|
||||
temp_min_spread = submunition_spread_min
|
||||
|
||||
var/damage_override = null
|
||||
|
||||
if(spread_submunition_damage)
|
||||
damage_override = damage
|
||||
if(nodamage)
|
||||
damage_override = 0
|
||||
|
||||
var/projectile_count = 0
|
||||
|
||||
for(var/proj in submunitions)
|
||||
projectile_count += submunitions[proj]
|
||||
|
||||
damage_override = round(damage_override / max(1, projectile_count))
|
||||
|
||||
for(var/path in submunitions)
|
||||
for(var/count = 1 to submunitions[path])
|
||||
var/obj/item/projectile/SM = new path(get_turf(loc))
|
||||
SM.shot_from = shot_from
|
||||
SM.silenced = silenced
|
||||
SM.dispersion = rand(temp_min_spread, submunition_spread_max) / 10
|
||||
if(!isnull(damage_override))
|
||||
SM.damage = damage_override
|
||||
SM.launch_projectile(target, target_zone, user, params, angle_override)
|
||||
|
||||
preparePixelProjectile(target, user? user : get_turf(src), params, forced_spread)
|
||||
return fire(angle_override, direct_target)
|
||||
|
||||
@@ -708,36 +668,5 @@
|
||||
if(get_turf(target) == get_turf(src))
|
||||
direct_target = target
|
||||
|
||||
if(use_submunitions && submunitions.len)
|
||||
var/temp_min_spread = 0
|
||||
if(force_max_submunition_spread)
|
||||
temp_min_spread = submunition_spread_max
|
||||
else
|
||||
temp_min_spread = submunition_spread_min
|
||||
|
||||
var/damage_override = null
|
||||
|
||||
if(spread_submunition_damage)
|
||||
damage_override = damage
|
||||
if(nodamage)
|
||||
damage_override = 0
|
||||
|
||||
var/projectile_count = 0
|
||||
|
||||
for(var/proj in submunitions)
|
||||
projectile_count += submunitions[proj]
|
||||
|
||||
damage_override = round(damage_override / max(1, projectile_count))
|
||||
|
||||
for(var/path in submunitions)
|
||||
for(var/count = 1 to submunitions[path])
|
||||
var/obj/item/projectile/SM = new path(get_turf(loc))
|
||||
SM.shot_from = shot_from
|
||||
SM.silenced = silenced
|
||||
SM.dispersion = rand(temp_min_spread, submunition_spread_max) / 10
|
||||
if(!isnull(damage_override))
|
||||
SM.damage = damage_override
|
||||
SM.launch_projectile_from_turf(target, target_zone, user, params, angle_override)
|
||||
|
||||
preparePixelProjectile(target, get_turf(src), params, forced_spread)
|
||||
return fire(angle_override, direct_target)
|
||||
|
||||
@@ -213,17 +213,4 @@
|
||||
/obj/item/projectile/beam/stun/med
|
||||
name = "stun beam"
|
||||
icon_state = "stun"
|
||||
agony = 30
|
||||
|
||||
/obj/item/projectile/beam/shock
|
||||
name = "shock beam"
|
||||
icon_state = "lightning"
|
||||
damage_type = ELECTROCUTE
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/lightning
|
||||
tracer_type = /obj/effect/projectile/tracer/lightning
|
||||
impact_type = /obj/effect/projectile/impact/lightning
|
||||
|
||||
damage = 30
|
||||
agony = 15
|
||||
eyeblur = 2
|
||||
agony = 30
|
||||
@@ -1,62 +0,0 @@
|
||||
|
||||
/*
|
||||
* Home of the purely submunition projectiles.
|
||||
*/
|
||||
|
||||
/obj/item/projectile/scatter
|
||||
name = "scatter projectile"
|
||||
icon = 'icons/obj/projectiles.dmi'
|
||||
icon_state = "bullet"
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
unacidable = TRUE
|
||||
pass_flags = PASSTABLE
|
||||
mouse_opacity = 0
|
||||
|
||||
use_submunitions = TRUE
|
||||
|
||||
damage = 8
|
||||
spread_submunition_damage = TRUE
|
||||
only_submunitions = TRUE
|
||||
range = 0 // Immediately deletes itself after firing, as its only job is to fire other projectiles.
|
||||
|
||||
submunition_spread_max = 30
|
||||
submunition_spread_min = 2
|
||||
|
||||
submunitions = list(
|
||||
/obj/item/projectile/bullet/pellet/shotgun/flak = 3
|
||||
)
|
||||
|
||||
/obj/item/projectile/scatter/laser
|
||||
damage = 40
|
||||
|
||||
submunition_spread_max = 40
|
||||
submunition_spread_min = 10
|
||||
|
||||
submunitions = list(
|
||||
/obj/item/projectile/beam/prismatic = 4
|
||||
)
|
||||
|
||||
/obj/item/projectile/beam/prismatic
|
||||
name = "prismatic beam"
|
||||
icon_state = "omnilaser"
|
||||
damage = 10
|
||||
damage_type = BURN
|
||||
check_armour = "laser"
|
||||
light_color = "#00C6FF"
|
||||
|
||||
stutter = 2
|
||||
|
||||
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
|
||||
tracer_type = /obj/effect/projectile/tracer/laser_omni
|
||||
impact_type = /obj/effect/projectile/impact/laser_omni
|
||||
|
||||
/obj/item/projectile/scatter/ion
|
||||
damage = 20
|
||||
|
||||
submunition_spread_max = 40
|
||||
submunition_spread_min = 10
|
||||
|
||||
submunitions = list(
|
||||
/obj/item/projectile/bullet/shotgun/ion = 3
|
||||
)
|
||||
@@ -1198,7 +1198,7 @@
|
||||
name = "Peanut Butter"
|
||||
id = "peanutbutter"
|
||||
result = "peanutbutter"
|
||||
required_reagents = list("peanutoil" = 2, "sugar" = 1, "sodiumchloride" = 1)
|
||||
required_reagents = list("peanutoil" = 2, "sugar" = 1, "salt" = 1)
|
||||
catalysts = list("enzyme" = 5)
|
||||
result_amount = 3
|
||||
|
||||
@@ -1206,7 +1206,7 @@
|
||||
name = "mayonnaise"
|
||||
id = "mayo"
|
||||
result = "mayo"
|
||||
required_reagents = list("egg" = 9, "cornoil" = 5, "lemonjuice" = 5, "sodiumchloride" = 1)
|
||||
required_reagents = list("egg" = 9, "cornoil" = 5, "lemonjuice" = 5, "salt" = 1)
|
||||
result_amount = 15
|
||||
|
||||
/datum/chemical_reaction/food/cheesewheel
|
||||
|
||||
@@ -135,8 +135,8 @@
|
||||
/obj/item/weapon/reagent_containers/glass/proc/update_name_label()
|
||||
if(label_text == "")
|
||||
name = base_name
|
||||
else if(length(label_text) > 20)
|
||||
var/short_label_text = copytext(label_text, 1, 21)
|
||||
else if(length(label_text) > 10)
|
||||
var/short_label_text = copytext(label_text, 1, 11)
|
||||
name = "[base_name] ([short_label_text]...)"
|
||||
else
|
||||
name = "[base_name] ([label_text])"
|
||||
|
||||
@@ -664,13 +664,6 @@
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 7500, "silver" = 375, "glass" = 750)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/generator/nuclear
|
||||
|
||||
/datum/design/item/mecha/speedboost_ripley
|
||||
name = "Ripley Leg Actuator Overdrive"
|
||||
desc = "System enhancements and overdrives to make a mech's legs move faster."
|
||||
req_tech = list( TECH_POWER = 5, TECH_MATERIAL = 4, TECH_ENGINEERING = 4)
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 10000, "silver" = 1000, "gold" = 1000)
|
||||
build_path = /obj/item/mecha_parts/mecha_equipment/speedboost
|
||||
|
||||
/datum/design/item/synthetic_flash
|
||||
name = "Synthetic Flash"
|
||||
id = "sflash"
|
||||
|
||||
@@ -53,18 +53,6 @@
|
||||
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
<h2 class="date">19 July 2019</h2>
|
||||
<h3 class="author">Nalarac updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Add xenobio/xenobot to farmbots.</li>
|
||||
</ul>
|
||||
<h3 class="author">Woodrat updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Added a clotting kit to the Raider Shuttle.</li>
|
||||
<li class="tweak">Swapped out the ai turrets for industrial turrets in the teleporter rooms.</li>
|
||||
<li class="tweak">Adjusted access to the turret controls to heads of staff access, moved them outside of the rooms.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">07 July 2019</h2>
|
||||
<h3 class="author">Heroman3003 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -4614,11 +4614,3 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
on an invalid Z-level.
|
||||
- bugfix: Fixes GPSes not detecting other GPSes while on an invalid Z-level. Transit
|
||||
Z is unaffected by this- no spying on other shuttles!
|
||||
2019-07-19:
|
||||
Nalarac:
|
||||
- tweak: Add xenobio/xenobot to farmbots.
|
||||
Woodrat:
|
||||
- rscadd: Added a clotting kit to the Raider Shuttle.
|
||||
- tweak: Swapped out the ai turrets for industrial turrets in the teleporter rooms.
|
||||
- tweak: Adjusted access to the turret controls to heads of staff access, moved
|
||||
them outside of the rooms.
|
||||
|
||||
@@ -1,37 +0,0 @@
|
||||
################################
|
||||
# Example Changelog File
|
||||
#
|
||||
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
|
||||
#
|
||||
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
|
||||
# When it is, any changes listed below will disappear.
|
||||
#
|
||||
# Valid Prefixes:
|
||||
# bugfix
|
||||
# wip (For works in progress)
|
||||
# tweak
|
||||
# soundadd
|
||||
# sounddel
|
||||
# rscadd (general adding of nice things)
|
||||
# rscdel (general deleting of nice things)
|
||||
# imageadd
|
||||
# imagedel
|
||||
# maptweak
|
||||
# spellcheck (typo fixes)
|
||||
# experiment
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Mechoid
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
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, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Pipes will now leak if their ends are unsealed."
|
||||
- rscadd: "Pipe clamps now exist."
|
||||
+2
-2
@@ -22,7 +22,7 @@
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Mechoid
|
||||
author: TheFurryFeline
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
@@ -33,4 +33,4 @@ delete-after: True
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Added a Xenobio-compatible ED-209."
|
||||
- tweak: "Add access_xenobiology to farmbots."
|
||||
+4
-2
@@ -22,7 +22,7 @@
|
||||
#################################
|
||||
|
||||
# Your name.
|
||||
author: Nalarac
|
||||
author: Woodrat
|
||||
|
||||
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
|
||||
delete-after: True
|
||||
@@ -33,4 +33,6 @@ delete-after: True
|
||||
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
|
||||
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
|
||||
changes:
|
||||
- rscadd: "Ripley speed boost module that can be built in robotics."
|
||||
- rscadd: "Added a clotting kit to the Raider Shuttle."
|
||||
- tweak: "swapped out the ai turrets for industrial turrets in the teleporter rooms."
|
||||
- tweak: "Adjusted access to the turret controls to heads of staff access, moved them outside of the rooms."
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 55 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 739 B |
@@ -1,14 +1,57 @@
|
||||
<div class="statusDisplay" style="height: 250px; overflow: auto;">
|
||||
{{for data.aircontents}}
|
||||
{{if value.val != 0 || value.entry == "pressure" || value.entry == "temperature"}}
|
||||
<div class="item">
|
||||
<div class="itemLabel">
|
||||
{{:value.entry}}:
|
||||
</div>
|
||||
<div class="itemContent">
|
||||
{{:helper.string('<span class="{0}">{1}{2}</span>', value.val < value.bad_low || value.val > value.bad_high ? 'bad' : value.val < value.poor_low || value.val > value.poor_high ? 'average' : 'good' , value.val, value.units)}}
|
||||
</div>
|
||||
<div class="item">
|
||||
{{if data.aircontents.reading == 1}}
|
||||
<div class="itemLabel">
|
||||
Pressure:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:helper.string('<span class="{0}">{1} kPa</span>', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Temperature:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:helper.string('<span class="{0}">{1} °C</span>', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}}
|
||||
</div>
|
||||
<br>
|
||||
<div class="itemLabel">
|
||||
Oxygen:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}}
|
||||
</div>
|
||||
<div class="itemLabel">
|
||||
Nitrogen:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}}
|
||||
</div>
|
||||
{{if data.aircontents.carbon_dioxide > 0}}
|
||||
<div class="itemLabel">
|
||||
Carbon Dioxide:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if data.aircontents.phoron > 0}}
|
||||
<div class="itemLabel">
|
||||
Phoron:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
{{:helper.string('<span class="{0}">{1}%</span>', data.aircontents.phoron > 0 ? 'bad' : 'good' , data.aircontents.phoron)}}
|
||||
</div>
|
||||
{{/if}}
|
||||
{{if data.aircontents.other > 0}}
|
||||
<div class="itemLabel">
|
||||
Unknown:
|
||||
</div>
|
||||
<div class = "itemContent">
|
||||
<span class="bad">{{:data.aircontents.other}}%</span>
|
||||
</div>
|
||||
{{/if}}
|
||||
{{/for}}
|
||||
{{else}}
|
||||
<div class="itemContent" style="width: 100%;">
|
||||
<span class="average"><b>Unable to get air reading</b></span>
|
||||
</div>
|
||||
{{/if}}
|
||||
</div>
|
||||
@@ -300,7 +300,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
|
||||
|
||||
{{else data.mode == 3}}
|
||||
<H2>Atmospheric Scan</H2>
|
||||
{{#def.atmosphericScan}}
|
||||
<div class="statusDisplay" style="height: 250px; overflow: auto;">
|
||||
{{#def.atmosphericScan}}
|
||||
</div>
|
||||
|
||||
|
||||
{{else data.mode == 40}} <!-- Cartridge: Signaler -->
|
||||
<H2>Remote Signaling System</H2>
|
||||
|
||||
@@ -134,7 +134,6 @@
|
||||
#include "code\ATMOSPHERICS\datum_pipeline.dm"
|
||||
#include "code\ATMOSPHERICS\mainspipe.dm"
|
||||
#include "code\ATMOSPHERICS\components\portables_connector.dm"
|
||||
#include "code\ATMOSPHERICS\components\shutoff.dm"
|
||||
#include "code\ATMOSPHERICS\components\tvalve.dm"
|
||||
#include "code\ATMOSPHERICS\components\valve.dm"
|
||||
#include "code\ATMOSPHERICS\components\binary_devices\binary_atmos_base.dm"
|
||||
@@ -691,7 +690,6 @@
|
||||
#include "code\game\machinery\wishgranter.dm"
|
||||
#include "code\game\machinery\atmoalter\area_atmos_computer.dm"
|
||||
#include "code\game\machinery\atmoalter\canister.dm"
|
||||
#include "code\game\machinery\atmoalter\clamp.dm"
|
||||
#include "code\game\machinery\atmoalter\meter.dm"
|
||||
#include "code\game\machinery\atmoalter\portable_atmospherics.dm"
|
||||
#include "code\game\machinery\atmoalter\pump.dm"
|
||||
@@ -1894,7 +1892,6 @@
|
||||
#include "code\modules\mob\living\bot\medbot.dm"
|
||||
#include "code\modules\mob\living\bot\mulebot.dm"
|
||||
#include "code\modules\mob\living\bot\secbot.dm"
|
||||
#include "code\modules\mob\living\bot\SLed209bot.dm"
|
||||
#include "code\modules\mob\living\carbon\breathe.dm"
|
||||
#include "code\modules\mob\living\carbon\carbon.dm"
|
||||
#include "code\modules\mob\living\carbon\carbon_defense.dm"
|
||||
@@ -2421,7 +2418,6 @@
|
||||
#include "code\modules\projectiles\projectile\hook.dm"
|
||||
#include "code\modules\projectiles\projectile\magnetic.dm"
|
||||
#include "code\modules\projectiles\projectile\pellets.dm"
|
||||
#include "code\modules\projectiles\projectile\scatter.dm"
|
||||
#include "code\modules\projectiles\projectile\special.dm"
|
||||
#include "code\modules\projectiles\projectile\trace.dm"
|
||||
#include "code\modules\projectiles\targeting\targeting_client.dm"
|
||||
|
||||
Reference in New Issue
Block a user