This commit is contained in:
Ghommie
2019-11-15 00:36:50 +01:00
447 changed files with 16075 additions and 3073 deletions
+26 -18
View File
@@ -118,7 +118,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
use_power = IDLE_POWER_USE
interaction_flags_machine = INTERACT_MACHINE_ALLOW_SILICON | INTERACT_MACHINE_OFFLINE
var/on = TRUE
var/breaker = 1
var/breaker = TRUE
var/list/parts = list()
var/obj/middle = null
var/charging_state = POWER_IDLE
@@ -167,7 +167,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
M.set_broken()
middle.cut_overlays()
charge_count = 0
breaker = 0
breaker = FALSE
set_power()
set_state(0)
investigate_log("has broken down.", INVESTIGATE_GRAVITY)
@@ -177,7 +177,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
for(var/obj/machinery/gravity_generator/M in parts)
if(M.stat & BROKEN)
M.set_fix()
broken_state = 0
broken_state = FALSE
update_icon()
set_power()
@@ -274,11 +274,11 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
// Set the charging state based on power/breaker.
/obj/machinery/gravity_generator/main/proc/set_power()
var/new_state = 0
var/new_state = FALSE
if(stat & (NOPOWER|BROKEN) || !breaker)
new_state = 0
new_state = FALSE
else if(breaker)
new_state = 1
new_state = TRUE
charging_state = new_state ? POWER_UP : POWER_DOWN // Startup sequence animation.
investigate_log("is now [charging_state == POWER_UP ? "charging" : "discharging"].", INVESTIGATE_GRAVITY)
@@ -293,13 +293,13 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
var/alert = FALSE
if(SSticker.IsRoundInProgress())
if(on) // If we turned on and the game is live.
if(gravity_in_level() == 0)
alert = 1
if(gravity_in_level() == FALSE)
alert = TRUE
investigate_log("was brought online and is now producing gravity for this level.", INVESTIGATE_GRAVITY)
message_admins("The gravity generator was brought online [ADMIN_VERBOSEJMP(src)]")
else
if(gravity_in_level() == 1)
alert = 1
if(gravity_in_level() == TRUE)
alert = TRUE
investigate_log("was brought offline and there is now no gravity for this level.", INVESTIGATE_GRAVITY)
message_admins("The gravity generator was brought offline with no backup generator. [ADMIN_VERBOSEJMP(src)]")
@@ -362,7 +362,7 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
var/sound/alert_sound = sound('sound/effects/alert.ogg')
for(var/i in GLOB.mob_list)
var/mob/M = i
if(M.z != z)
if(M.z != z && !(SSmapping.level_trait(z, ZTRAITS_STATION) && SSmapping.level_trait(M.z, ZTRAITS_STATION)))
continue
M.update_gravity(M.mob_has_gravity())
if(M.client)
@@ -372,20 +372,28 @@ GLOBAL_LIST_EMPTY(gravity_generators) // We will keep track of this by adding ne
/obj/machinery/gravity_generator/main/proc/gravity_in_level()
var/turf/T = get_turf(src)
if(!T)
return 0
return FALSE
if(GLOB.gravity_generators["[T.z]"])
return length(GLOB.gravity_generators["[T.z]"])
return 0
return FALSE
/obj/machinery/gravity_generator/main/proc/update_list()
var/turf/T = get_turf(src.loc)
if(T)
if(!GLOB.gravity_generators["[T.z]"])
GLOB.gravity_generators["[T.z]"] = list()
if(on)
GLOB.gravity_generators["[T.z]"] |= src
var/list/z_list = list()
// Multi-Z, station gravity generator generates gravity on all ZTRAIT_STATION z-levels.
if(SSmapping.level_trait(T.z, ZTRAIT_STATION))
for(var/z in SSmapping.levels_by_trait(ZTRAIT_STATION))
z_list += z
else
GLOB.gravity_generators["[T.z]"] -= src
z_list += T.z
for(var/z in z_list)
if(!GLOB.gravity_generators["[z]"])
GLOB.gravity_generators["[z]"] = list()
if(on)
GLOB.gravity_generators["[z]"] |= src
else
GLOB.gravity_generators["[z]"] -= src
/obj/machinery/gravity_generator/main/proc/change_setting(value)
if(value != setting)
+3 -4
View File
@@ -177,8 +177,6 @@
fixture_type = "bulb"
sheets_refunded = 1
// the standard tube light fixture
/obj/machinery/light
name = "light fixture"
@@ -197,8 +195,8 @@
var/on_gs = FALSE
var/static_power_used = 0
var/brightness = 8 // luminosity when on, also used in power calculation
var/bulb_power = 1 // basically the alpha of the emitted light source
var/bulb_colour = "#FFFFFF" // befault colour of the light.
var/bulb_power = 0.75 // basically the alpha of the emitted light source
var/bulb_colour = "#FFEEDD" // befault colour of the light.
var/status = LIGHT_OK // LIGHT_OK, _EMPTY, _BURNED or _BROKEN
var/flickering = FALSE
var/light_type = /obj/item/light/tube // the type of light item
@@ -235,6 +233,7 @@
base_state = "bulb"
fitting = "bulb"
brightness = 4
bulb_colour = "#FFDDBB"
desc = "A small lighting fixture."
light_type = /obj/item/light/bulb
+80
View File
@@ -0,0 +1,80 @@
/obj/machinery/power/deck_relay //This bridges powernets
name = "Multi-deck power adapter"
desc = "A huge bundle of double insulated cabling which seems to run up into the ceiling."
icon = 'icons/obj/power.dmi'
icon_state = "cablerelay-off"
var/obj/machinery/power/deck_relay/below ///The relay that's below us (for bridging powernets)
var/obj/machinery/power/deck_relay/above ///The relay that's above us (for bridging powernets)
anchored = TRUE
density = FALSE
/obj/machinery/power/deck_relay/attackby(obj/item/I,mob/user)
if(default_unfasten_wrench(user, I))
return FALSE
. = ..()
/obj/machinery/power/deck_relay/process()
if(!anchored)
icon_state = "cablerelay-off"
if(above) //Lose connections
above.below = null
if(below)
below.above = null
return
refresh() //Sometimes the powernets get lost, so we need to keep checking.
if(powernet && (powernet.avail <= 0)) // is it powered?
icon_state = "cablerelay-off"
else
icon_state = "cablerelay-on"
if(!below || QDELETED(below) || !above || QDELETED(above))
icon_state = "cablerelay-off"
find_relays()
///Allows you to scan the relay with a multitool to see stats.
/obj/machinery/power/deck_relay/multitool_act(mob/user, obj/item/I)
if(powernet && (powernet.avail > 0)) // is it powered?
to_chat(user, "<span class='danger'>Total power: [DisplayPower(powernet.avail)]\nLoad: [DisplayPower(powernet.load)]\nExcess power: [DisplayPower(surplus())]</span>")
if(!powernet || below.powernet != powernet)
icon_state = "cablerelay-off"
to_chat(user, "<span class='danger'>Powernet connection lost. Attempting to re-establish. Ensure the relays below this one are connected too.</span>")
find_relays()
addtimer(CALLBACK(src, .proc/refresh), 20) //Wait a bit so we can find the one below, then get powering
return TRUE
/obj/machinery/power/deck_relay/Initialize()
. = ..()
addtimer(CALLBACK(src, .proc/find_relays), 30)
addtimer(CALLBACK(src, .proc/refresh), 50) //Wait a bit so we can find the one below, then get powering
///Handles re-acquiring + merging powernets found by find_relays()
/obj/machinery/power/deck_relay/proc/refresh()
if(above)
above.merge(src)
if(below)
below.merge(src)
/obj/machinery/power/deck_relay/proc/merge(var/obj/machinery/power/deck_relay/DR)
if(!DR)
return
var/turf/merge_from = get_turf(DR)
var/turf/merge_to = get_turf(src)
var/obj/structure/cable/C = merge_from.get_cable_node()
var/obj/structure/cable/XR = merge_to.get_cable_node()
if(C && XR)
merge_powernets(XR.powernet,C.powernet)//Bridge the powernets.
///Locates relays that are above and below this object
/obj/machinery/power/deck_relay/proc/find_relays()
var/turf/T = get_turf(src)
if(!T || !istype(T))
return FALSE
below = null //in case we're re-establishing
var/obj/structure/cable/C = T.get_cable_node() //check if we have a node cable on the machine turf, the first found is picked
if(C && C.powernet)
C.powernet.add_machine(src) //Nice we're in.
powernet = C.powernet
below = locate(/obj/machinery/power/deck_relay) in(SSmapping.get_turf_below(T))
above = locate(/obj/machinery/power/deck_relay) in(SSmapping.get_turf_above(T))
if(below || above)
icon_state = "cablerelay-on"
return TRUE
@@ -87,10 +87,9 @@
var/mob/living/carbon/C = user
log_game("[key_name(C)] has been disintegrated by attempting to telekenetically grab a singularity.</span>")
C.visible_message("<span class='danger'>[C]'s head begins to collapse in on itself!</span>", "<span class='userdanger'>Your head feels like it's collapsing in on itself! This was really not a good idea!</span>", "<span class='italics'>You hear something crack and explode in gore.</span>")
var/turf/T = get_turf(C)
for(var/i in 1 to 3)
C.apply_damage(30, BRUTE, BODY_ZONE_HEAD)
new /obj/effect/gibspawner/generic(T)
C.spawn_gibs()
sleep(1)
var/obj/item/bodypart/head/rip_u = C.get_bodypart(BODY_ZONE_HEAD)
rip_u.dismember(BURN) //nice try jedi
@@ -313,7 +313,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
T.visible_message("<span class='danger'>[T] smacks into [src] and rapidly flashes to ash.</span>",\
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
T.CalculateAdjacentTurfs()
CALCULATE_ADJACENT_TURFS(T)
/obj/machinery/power/supermatter_crystal/process_atmos()
var/turf/T = loc
@@ -650,6 +650,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
Consume(AM)
/obj/machinery/power/supermatter_crystal/intercept_zImpact(atom/movable/AM, levels)
. = ..()
Bumped(AM)
. |= FALL_STOP_INTERCEPTING | FALL_INTERCEPTED
/obj/machinery/power/supermatter_crystal/proc/Consume(atom/movable/AM)
if(isliving(AM))
var/mob/living/user = AM