everything but mob stuff
This commit is contained in:
+37
-42
@@ -1,30 +1,30 @@
|
||||
//update_state
|
||||
#define UPSTATE_CELL_IN 1
|
||||
#define UPSTATE_OPENED1 2
|
||||
#define UPSTATE_OPENED2 4
|
||||
#define UPSTATE_MAINT 8
|
||||
#define UPSTATE_BROKE 16
|
||||
#define UPSTATE_BLUESCREEN 32
|
||||
#define UPSTATE_WIREEXP 64
|
||||
#define UPSTATE_ALLGOOD 128
|
||||
#define UPSTATE_CELL_IN (1<<0)
|
||||
#define UPSTATE_OPENED1 (1<<1)
|
||||
#define UPSTATE_OPENED2 (1<<2)
|
||||
#define UPSTATE_MAINT (1<<3)
|
||||
#define UPSTATE_BROKE (1<<4)
|
||||
#define UPSTATE_BLUESCREEN (1<<5)
|
||||
#define UPSTATE_WIREEXP (1<<6)
|
||||
#define UPSTATE_ALLGOOD (1<<7)
|
||||
|
||||
#define APC_RESET_EMP "emp"
|
||||
|
||||
//update_overlay
|
||||
#define APC_UPOVERLAY_CHARGEING0 1
|
||||
#define APC_UPOVERLAY_CHARGEING1 2
|
||||
#define APC_UPOVERLAY_CHARGEING2 4
|
||||
#define APC_UPOVERLAY_EQUIPMENT0 8
|
||||
#define APC_UPOVERLAY_EQUIPMENT1 16
|
||||
#define APC_UPOVERLAY_EQUIPMENT2 32
|
||||
#define APC_UPOVERLAY_LIGHTING0 64
|
||||
#define APC_UPOVERLAY_LIGHTING1 128
|
||||
#define APC_UPOVERLAY_LIGHTING2 256
|
||||
#define APC_UPOVERLAY_ENVIRON0 512
|
||||
#define APC_UPOVERLAY_ENVIRON1 1024
|
||||
#define APC_UPOVERLAY_ENVIRON2 2048
|
||||
#define APC_UPOVERLAY_LOCKED 4096
|
||||
#define APC_UPOVERLAY_OPERATING 8192
|
||||
#define APC_UPOVERLAY_CHARGEING0 (1<<0)
|
||||
#define APC_UPOVERLAY_CHARGEING1 (1<<1)
|
||||
#define APC_UPOVERLAY_CHARGEING2 (1<<2)
|
||||
#define APC_UPOVERLAY_EQUIPMENT0 (1<<3)
|
||||
#define APC_UPOVERLAY_EQUIPMENT1 (1<<4)
|
||||
#define APC_UPOVERLAY_EQUIPMENT2 (1<<5)
|
||||
#define APC_UPOVERLAY_LIGHTING0 (1<<6)
|
||||
#define APC_UPOVERLAY_LIGHTING1 (1<<7)
|
||||
#define APC_UPOVERLAY_LIGHTING2 (1<<8)
|
||||
#define APC_UPOVERLAY_ENVIRON0 (1<<9)
|
||||
#define APC_UPOVERLAY_ENVIRON1 (1<<10)
|
||||
#define APC_UPOVERLAY_ENVIRON2 (1<<11)
|
||||
#define APC_UPOVERLAY_LOCKED (1<<12)
|
||||
#define APC_UPOVERLAY_OPERATING (1<<13)
|
||||
|
||||
|
||||
// the Area Power Controller (APC), formerly Power Distribution Unit (PDU)
|
||||
@@ -911,12 +911,11 @@
|
||||
update()
|
||||
if("emergency_lighting")
|
||||
emergency_lights = !emergency_lights
|
||||
for(var/area/A in area.related)
|
||||
for(var/obj/machinery/light/L in A)
|
||||
if(!initial(L.no_emergency)) //If there was an override set on creation, keep that override
|
||||
L.no_emergency = emergency_lights
|
||||
INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE)
|
||||
CHECK_TICK
|
||||
for(var/obj/machinery/light/L in area)
|
||||
if(!initial(L.no_emergency)) //If there was an override set on creation, keep that override
|
||||
L.no_emergency = emergency_lights
|
||||
INVOKE_ASYNC(L, /obj/machinery/light/.proc/update, FALSE)
|
||||
CHECK_TICK
|
||||
return 1
|
||||
|
||||
/obj/machinery/power/apc/proc/toggle_breaker()
|
||||
@@ -1281,12 +1280,11 @@
|
||||
INVOKE_ASYNC(src, .proc/break_lights)
|
||||
|
||||
/obj/machinery/power/apc/proc/break_lights()
|
||||
for(var/area/A in area.related)
|
||||
for(var/obj/machinery/light/L in A)
|
||||
L.on = TRUE
|
||||
L.break_light_tube()
|
||||
L.on = FALSE
|
||||
stoplag()
|
||||
for(var/obj/machinery/light/L in area)
|
||||
L.on = TRUE
|
||||
L.break_light_tube()
|
||||
L.on = FALSE
|
||||
stoplag()
|
||||
|
||||
/obj/machinery/power/apc/proc/shock(mob/user, prb)
|
||||
if(!prob(prb))
|
||||
@@ -1322,12 +1320,11 @@
|
||||
/obj/machinery/power/apc/proc/set_nightshift(on)
|
||||
set waitfor = FALSE
|
||||
nightshift_lights = on
|
||||
for(var/area/A in area.related)
|
||||
for(var/obj/machinery/light/L in A)
|
||||
if(L.nightshift_allowed)
|
||||
L.nightshift_enabled = nightshift_lights
|
||||
L.update(FALSE)
|
||||
CHECK_TICK
|
||||
for(var/obj/machinery/light/L in area)
|
||||
if(L.nightshift_allowed)
|
||||
L.nightshift_enabled = nightshift_lights
|
||||
L.update(FALSE)
|
||||
CHECK_TICK
|
||||
|
||||
#undef UPSTATE_CELL_IN
|
||||
#undef UPSTATE_OPENED1
|
||||
@@ -1356,8 +1353,6 @@
|
||||
#undef APC_UPOVERLAY_LOCKED
|
||||
#undef APC_UPOVERLAY_OPERATING
|
||||
|
||||
#undef APC_UPDATE_ICON_COOLDOWN
|
||||
|
||||
/*Power module, used for APC construction*/
|
||||
/obj/item/electronics/apc
|
||||
name = "power control module"
|
||||
|
||||
@@ -272,7 +272,7 @@
|
||||
/obj/singularity/proc/consume(atom/A)
|
||||
var/gain = A.singularity_act(current_size, src)
|
||||
src.energy += gain
|
||||
if(istype(A, /obj/machinery/power/supermatter_shard) && !consumedSupermatter)
|
||||
if(istype(A, /obj/machinery/power/supermatter_crystal) && !consumedSupermatter)
|
||||
desc = "[initial(desc)] It glows fiercely with inner fire."
|
||||
name = "supermatter-charged [initial(name)]"
|
||||
consumedSupermatter = 1
|
||||
|
||||
@@ -22,7 +22,7 @@
|
||||
#define SEVERE_POWER_PENALTY_THRESHOLD 7000 //Same as above, but causes more dangerous effects
|
||||
#define CRITICAL_POWER_PENALTY_THRESHOLD 9000 //Even more dangerous effects, threshold for tesla delamination
|
||||
#define HEAT_PENALTY_THRESHOLD 40 //Higher == Crystal safe operational temperature is higher.
|
||||
#define DAMAGE_HARDCAP 0.0025
|
||||
#define DAMAGE_HARDCAP 0.002
|
||||
#define DAMAGE_INCREASE_MULTIPLIER 0.25
|
||||
|
||||
|
||||
@@ -54,15 +54,17 @@
|
||||
#define SUPERMATTER_DANGER_PERCENT 50
|
||||
#define SUPERMATTER_WARNING_PERCENT 100
|
||||
|
||||
GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
#define SUPERMATTER_COUNTDOWN_TIME 30 SECONDS
|
||||
|
||||
/obj/machinery/power/supermatter_shard
|
||||
name = "supermatter shard"
|
||||
desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure."
|
||||
GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
|
||||
/obj/machinery/power/supermatter_crystal
|
||||
name = "supermatter crystal"
|
||||
desc = "A strangely translucent and iridescent crystal."
|
||||
icon = 'icons/obj/supermatter.dmi'
|
||||
icon_state = "darkmatter_shard"
|
||||
icon_state = "darkmatter"
|
||||
density = TRUE
|
||||
anchored = FALSE
|
||||
anchored = TRUE
|
||||
var/uid = 1
|
||||
var/static/gl_uid = 1
|
||||
light_range = 4
|
||||
@@ -70,9 +72,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
critical_machine = TRUE
|
||||
|
||||
var/gasefficency = 0.125
|
||||
var/gasefficency = 0.15
|
||||
|
||||
var/base_icon_state = "darkmatter_shard"
|
||||
var/base_icon_state = "darkmatter"
|
||||
|
||||
var/final_countdown = FALSE
|
||||
|
||||
var/damage = 0
|
||||
var/damage_archived = 0
|
||||
@@ -86,7 +90,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
var/emergency_issued = FALSE
|
||||
|
||||
var/explosion_power = 12
|
||||
var/explosion_power = 35
|
||||
var/temp_factor = 30
|
||||
|
||||
var/lastwarning = 0 // Time in 1/10th of seconds since the last sent warning
|
||||
@@ -137,9 +141,9 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
var/datum/looping_sound/supermatter/soundloop
|
||||
|
||||
var/moveable = TRUE
|
||||
var/moveable = FALSE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/Initialize()
|
||||
/obj/machinery/power/supermatter_crystal/Initialize()
|
||||
. = ..()
|
||||
uid = gl_uid++
|
||||
SSair.atmos_machinery += src
|
||||
@@ -156,7 +160,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
soundloop = new(list(src), TRUE)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/Destroy()
|
||||
/obj/machinery/power/supermatter_crystal/Destroy()
|
||||
investigate_log("has been destroyed.", INVESTIGATE_SUPERMATTER)
|
||||
SSair.atmos_machinery -= src
|
||||
QDEL_NULL(radio)
|
||||
@@ -167,7 +171,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
QDEL_NULL(soundloop)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/power/supermatter_shard/examine(mob/user)
|
||||
/obj/machinery/power/supermatter_crystal/examine(mob/user)
|
||||
..()
|
||||
if(!ishuman(user))
|
||||
return
|
||||
@@ -180,12 +184,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
to_chat(H, "<span class='danger'>You get headaches just from looking at it.</span>")
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_shard/get_spans()
|
||||
/obj/machinery/power/supermatter_crystal/get_spans()
|
||||
return list(SPAN_ROBOT)
|
||||
|
||||
#define CRITICAL_TEMPERATURE 10000
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/get_status()
|
||||
/obj/machinery/power/supermatter_crystal/proc/get_status()
|
||||
var/turf/T = get_turf(src)
|
||||
if(!T)
|
||||
return SUPERMATTER_ERROR
|
||||
@@ -212,7 +216,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
return SUPERMATTER_NORMAL
|
||||
return SUPERMATTER_INACTIVE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/alarm()
|
||||
/obj/machinery/power/supermatter_crystal/proc/alarm()
|
||||
switch(get_status())
|
||||
if(SUPERMATTER_DELAMINATING)
|
||||
playsound(src, 'sound/misc/bloblarm.ogg', 100)
|
||||
@@ -223,13 +227,51 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
if(SUPERMATTER_WARNING)
|
||||
playsound(src, 'sound/machines/terminal_alert.ogg', 75)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/get_integrity()
|
||||
/obj/machinery/power/supermatter_crystal/proc/get_integrity()
|
||||
var/integrity = damage / explosion_point
|
||||
integrity = round(100 - integrity * 100, 0.01)
|
||||
integrity = integrity < 0 ? 0 : integrity
|
||||
return integrity
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/explode()
|
||||
/obj/machinery/power/supermatter_crystal/proc/countdown()
|
||||
if(final_countdown) // We're already doing it go away
|
||||
return
|
||||
final_countdown = TRUE
|
||||
|
||||
var/image/causality_field = image(icon, null, "causality_field")
|
||||
add_overlay(causality_field, TRUE)
|
||||
|
||||
var/speaking = "[emergency_alert] The supermatter has reached critical integrity failure. Emergency causality destabilization field has been activated."
|
||||
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
|
||||
for(var/i in SUPERMATTER_COUNTDOWN_TIME to 0 step -10)
|
||||
if(damage < explosion_point) // Cutting it a bit close there engineers
|
||||
radio.talk_into(src, "[safe_alert] Failsafe has been disengaged.", common_channel, get_spans(), get_default_language())
|
||||
cut_overlay(causality_field, TRUE)
|
||||
final_countdown = FALSE
|
||||
return
|
||||
else if((i % 50) != 0 && i > 50) // A message once every 5 seconds until the final 5 seconds which count down individualy
|
||||
sleep(10)
|
||||
continue
|
||||
else if(i > 50)
|
||||
speaking = "[i/10] seconds remain before causality stabilization."
|
||||
else
|
||||
speaking = "[i/10]..."
|
||||
radio.talk_into(src, speaking, common_channel, get_spans(), get_default_language())
|
||||
sleep(10)
|
||||
|
||||
explode()
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/proc/explode()
|
||||
for(var/mob in GLOB.alive_mob_list)
|
||||
var/mob/living/L = mob
|
||||
if(istype(L) && L.z == z)
|
||||
if(ishuman(mob))
|
||||
//Hilariously enough, running into a closet should make you get hit the hardest.
|
||||
var/mob/living/carbon/human/H = mob
|
||||
H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
|
||||
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) )
|
||||
L.rad_act(rads)
|
||||
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(M.z == z)
|
||||
@@ -251,7 +293,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
E.energy = power
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/process_atmos()
|
||||
/obj/machinery/power/supermatter_crystal/process_atmos()
|
||||
var/turf/T = loc
|
||||
|
||||
if(isnull(T)) // We have a null turf...something is wrong, stop processing this entity.
|
||||
@@ -282,7 +324,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
else
|
||||
if(takes_damage)
|
||||
//causing damage
|
||||
damage = max(damage + (max(removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
|
||||
damage = max(damage + (max(CLAMP(removed.total_moles() / 200, 0.5, 1) * removed.temperature - ((T0C + HEAT_PENALTY_THRESHOLD)*dynamic_heat_resistance), 0) * mole_heat_penalty / 150 ) * DAMAGE_INCREASE_MULTIPLIER, 0)
|
||||
damage = max(damage + (max(power - POWER_PENALTY_THRESHOLD, 0)/500) * DAMAGE_INCREASE_MULTIPLIER, 0)
|
||||
damage = max(damage + (max(combined_gas - MOLE_PENALTY_THRESHOLD, 0)/80) * DAMAGE_INCREASE_MULTIPLIER, 0)
|
||||
|
||||
@@ -427,21 +469,11 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
radio.talk_into(src, "Warning: Critical coolant mass reached.", engineering_channel, get_spans(), get_default_language())
|
||||
|
||||
if(damage > explosion_point)
|
||||
for(var/mob in GLOB.alive_mob_list)
|
||||
var/mob/living/L = mob
|
||||
if(istype(L) && L.z == z)
|
||||
if(ishuman(mob))
|
||||
//Hilariously enough, running into a closet should make you get hit the hardest.
|
||||
var/mob/living/carbon/human/H = mob
|
||||
H.hallucination += max(50, min(300, DETONATION_HALLUCINATION * sqrt(1 / (get_dist(mob, src) + 1)) ) )
|
||||
var/rads = DETONATION_RADS * sqrt( 1 / (get_dist(L, src) + 1) )
|
||||
L.rad_act(rads)
|
||||
|
||||
explode()
|
||||
countdown()
|
||||
|
||||
return 1
|
||||
|
||||
/obj/machinery/power/supermatter_shard/bullet_act(obj/item/projectile/Proj)
|
||||
/obj/machinery/power/supermatter_crystal/bullet_act(obj/item/projectile/Proj)
|
||||
var/turf/L = loc
|
||||
if(!istype(L))
|
||||
return FALSE
|
||||
@@ -457,7 +489,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
damage += Proj.damage * config_bullet_energy
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/singularity_act()
|
||||
/obj/machinery/power/supermatter_crystal/singularity_act()
|
||||
var/gain = 100
|
||||
investigate_log("Supermatter shard consumed by singularity.", INVESTIGATE_SINGULO)
|
||||
message_admins("Singularity has consumed a supermatter shard and can now become stage six.")
|
||||
@@ -469,7 +501,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
qdel(src)
|
||||
return gain
|
||||
|
||||
/obj/machinery/power/supermatter_shard/blob_act(obj/structure/blob/B)
|
||||
/obj/machinery/power/supermatter_crystal/blob_act(obj/structure/blob/B)
|
||||
if(B && !isspaceturf(loc)) //does nothing in space
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
damage += B.obj_integrity * 0.5 //take damage equal to 50% of remaining blob health before it tried to eat us
|
||||
@@ -482,20 +514,20 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
Consume(B)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_tk(mob/user)
|
||||
/obj/machinery/power/supermatter_crystal/attack_tk(mob/user)
|
||||
if(iscarbon(user))
|
||||
var/mob/living/carbon/C = user
|
||||
to_chat(C, "<span class='userdanger'>That was a really dumb idea.</span>")
|
||||
var/obj/item/bodypart/head/rip_u = C.get_bodypart(BODY_ZONE_HEAD)
|
||||
rip_u.dismember(BURN) //nice try jedi
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_paw(mob/user)
|
||||
/obj/machinery/power/supermatter_crystal/attack_paw(mob/user)
|
||||
dust_mob(user, cause = "monkey attack")
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_alien(mob/user)
|
||||
/obj/machinery/power/supermatter_crystal/attack_alien(mob/user)
|
||||
dust_mob(user, cause = "alien attack")
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_animal(mob/living/simple_animal/S)
|
||||
/obj/machinery/power/supermatter_crystal/attack_animal(mob/living/simple_animal/S)
|
||||
var/murder
|
||||
if(!S.melee_damage_upper && !S.melee_damage_lower)
|
||||
murder = S.friendly
|
||||
@@ -506,20 +538,20 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
"<span class='userdanger'>You unwisely touch [src], and your vision glows brightly as your body crumbles to dust. Oops.</span>", \
|
||||
"simple animal attack")
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_robot(mob/user)
|
||||
/obj/machinery/power/supermatter_crystal/attack_robot(mob/user)
|
||||
if(Adjacent(user))
|
||||
dust_mob(user, cause = "cyborg attack")
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_ai(mob/user)
|
||||
/obj/machinery/power/supermatter_crystal/attack_ai(mob/user)
|
||||
return
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attack_hand(mob/living/user)
|
||||
/obj/machinery/power/supermatter_crystal/attack_hand(mob/living/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
return
|
||||
dust_mob(user, cause = "hand")
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause)
|
||||
/obj/machinery/power/supermatter_crystal/proc/dust_mob(mob/living/nom, vis_msg, mob_msg, cause)
|
||||
if(nom.incorporeal_move || nom.status_flags & GODMODE)
|
||||
return
|
||||
if(!vis_msg)
|
||||
@@ -533,7 +565,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1)
|
||||
Consume(nom)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/attackby(obj/item/W, mob/living/user, params)
|
||||
/obj/machinery/power/supermatter_crystal/attackby(obj/item/W, mob/living/user, params)
|
||||
if(!istype(W) || (W.flags_1 & ABSTRACT_1) || !istype(user))
|
||||
return
|
||||
if (istype(W, /obj/item/melee/roastingstick))
|
||||
@@ -554,12 +586,12 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
radiation_pulse(src, 150, 4)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/wrench_act(mob/user, obj/item/tool)
|
||||
/obj/machinery/power/supermatter_crystal/wrench_act(mob/user, obj/item/tool)
|
||||
if (moveable)
|
||||
default_unfasten_wrench(user, tool, time = 20)
|
||||
return TRUE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/CollidedWith(atom/movable/AM)
|
||||
/obj/machinery/power/supermatter_crystal/CollidedWith(atom/movable/AM)
|
||||
if(isliving(AM))
|
||||
AM.visible_message("<span class='danger'>\The [AM] slams into \the [src] inducing a resonance... [AM.p_their()] body starts to glow and catch flame before flashing into ash.</span>",\
|
||||
"<span class='userdanger'>You slam into \the [src] as your ears are filled with unearthly ringing. Your last thought is \"Oh, fuck.\"</span>",\
|
||||
@@ -574,7 +606,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
|
||||
Consume(AM)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/Consume(atom/movable/AM)
|
||||
/obj/machinery/power/supermatter_crystal/proc/Consume(atom/movable/AM)
|
||||
if(isliving(AM))
|
||||
var/mob/living/user = AM
|
||||
if(user.status_flags & GODMODE)
|
||||
@@ -602,30 +634,30 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
else
|
||||
L.show_message("<span class='italics'>You hear an unearthly ringing and notice your skin is covered in fresh radiation burns.</span>", 2)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/engine
|
||||
/obj/machinery/power/supermatter_crystal/engine
|
||||
is_main_engine = TRUE
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/shard
|
||||
name = "supermatter shard"
|
||||
desc = "A strangely translucent and iridescent crystal that looks like it used to be part of a larger structure."
|
||||
base_icon_state = "darkmatter_shard"
|
||||
icon_state = "darkmatter_shard"
|
||||
anchored = FALSE
|
||||
gasefficency = 0.125
|
||||
explosion_power = 12
|
||||
moveable = TRUE
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/shard/engine
|
||||
is_main_engine = TRUE
|
||||
|
||||
// When you wanna make a supermatter shard for the dramatic effect, but
|
||||
// don't want it exploding suddenly
|
||||
/obj/machinery/power/supermatter_shard/hugbox
|
||||
/obj/machinery/power/supermatter_crystal/shard/hugbox
|
||||
takes_damage = FALSE
|
||||
produces_gas = FALSE
|
||||
moveable = FALSE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/crystal
|
||||
name = "supermatter crystal"
|
||||
desc = "A strangely translucent and iridescent crystal."
|
||||
base_icon_state = "darkmatter"
|
||||
icon_state = "darkmatter"
|
||||
anchored = TRUE
|
||||
gasefficency = 0.15
|
||||
explosion_power = 35
|
||||
moveable = FALSE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/crystal/engine
|
||||
is_main_engine = TRUE
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/supermatter_pull(turf/center, pull_range = 10)
|
||||
/obj/machinery/power/supermatter_crystal/proc/supermatter_pull(turf/center, pull_range = 10)
|
||||
playsound(src.loc, 'sound/weapons/marauder.ogg', 100, 1, extrarange = 7)
|
||||
for(var/atom/P in orange(pull_range,center))
|
||||
if(ismovableatom(P))
|
||||
@@ -639,7 +671,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
step_towards(pulled_object,center)
|
||||
step_towards(pulled_object,center)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/supermatter_anomaly_gen(turf/anomalycenter, type = FLUX_ANOMALY, anomalyrange = 5)
|
||||
/obj/machinery/power/supermatter_crystal/proc/supermatter_anomaly_gen(turf/anomalycenter, type = FLUX_ANOMALY, anomalyrange = 5)
|
||||
var/turf/L = pick(orange(anomalyrange, anomalycenter))
|
||||
if(L)
|
||||
switch(type)
|
||||
@@ -651,7 +683,7 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_shard)
|
||||
if(PYRO_ANOMALY)
|
||||
new /obj/effect/anomaly/pyro(L, 200)
|
||||
|
||||
/obj/machinery/power/supermatter_shard/proc/supermatter_zap(atom/zapstart, range = 3, power)
|
||||
/obj/machinery/power/supermatter_crystal/proc/supermatter_zap(atom/zapstart, range = 3, power)
|
||||
. = zapstart.dir
|
||||
if(power < 1000)
|
||||
return
|
||||
|
||||
@@ -1,84 +0,0 @@
|
||||
//This is a power switch. When turned on it looks at the cables around the tile that it's on and notes which cables are trying to connect to it.
|
||||
//After it knows this it creates the number of cables from the center to each of the cables attempting to conenct. These cables cannot be removed
|
||||
//with wirecutters. When the switch is turned off it removes all the cables on the tile it's on.
|
||||
//The switch uses a 5s delay to prevent powernet change spamming.
|
||||
/*
|
||||
/obj/structure/powerswitch
|
||||
name = "power switch"
|
||||
desc = "A switch that controls power."
|
||||
icon = 'icons/obj/power.dmi'
|
||||
icon_state = "switch-dbl-up"
|
||||
var/icon_state_on = "switch-dbl-down"
|
||||
var/icon_state_off = "switch-dbl-up"
|
||||
density = FALSE
|
||||
anchored = TRUE
|
||||
var/on = FALSE //up is off, down is on
|
||||
var/busy = FALSE //set to 1 when you start pulling
|
||||
|
||||
/obj/structure/powerswitch/simple
|
||||
icon_state = "switch-up"
|
||||
icon_state_on = "switch-down"
|
||||
icon_state_off = "switch-up"
|
||||
|
||||
|
||||
/obj/structure/powerswitch/examine(mob/user)
|
||||
..()
|
||||
if(on)
|
||||
to_chat(user, "The switch is in the on position")
|
||||
else
|
||||
to_chat(user, "The switch is in the off position")
|
||||
|
||||
/obj/structure/powerswitch/attack_ai(mob/user)
|
||||
to_chat(user, "\red You're an AI. This is a manual switch. It's not going to work.")
|
||||
return
|
||||
|
||||
/obj/structure/powerswitch/attack_hand(mob/user)
|
||||
|
||||
if(busy)
|
||||
to_chat(user, "\red This switch is already being toggled.")
|
||||
return
|
||||
|
||||
..()
|
||||
|
||||
busy = TRUE
|
||||
for(var/mob/O in viewers(user))
|
||||
O.show_message(text("\red [user] started pulling the [src]."), 1)
|
||||
|
||||
if(do_after(user, 50))
|
||||
set_state(!on)
|
||||
for(var/mob/O in viewers(user))
|
||||
O.show_message(text("\red [user] flipped the [src] into the [on ? "on": "off"] position."), 1)
|
||||
busy = FALSE
|
||||
|
||||
/obj/structure/powerswitch/proc/set_state(var/state)
|
||||
on = state
|
||||
if(on)
|
||||
icon_state = icon_state_on
|
||||
var/list/connection_dirs = list()
|
||||
for(var/direction in list(1,2,4,8,5,6,9,10))
|
||||
for(var/obj/structure/cable/C in get_step(src,direction))
|
||||
if(C.d1 == turn(direction, 180) || C.d2 == turn(direction, 180))
|
||||
connection_dirs += direction
|
||||
break
|
||||
|
||||
for(var/direction in connection_dirs)
|
||||
var/obj/structure/cable/C = new/obj/structure/cable(src.loc)
|
||||
C.d1 = 0
|
||||
C.d2 = direction
|
||||
C.icon_state = "[C.d1]-[C.d2]"
|
||||
C.power_switch = src
|
||||
|
||||
var/datum/powernet/PN = new()
|
||||
PN.number = powernets.len + 1
|
||||
powernets += PN
|
||||
C.netnum = PN.number
|
||||
PN.cables += C
|
||||
|
||||
C.mergeConnectedNetworks(C.d2)
|
||||
C.mergeConnectedNetworksOnTurf()
|
||||
|
||||
else
|
||||
icon_state = icon_state_off
|
||||
for(var/obj/structure/cable/C in src.loc)
|
||||
qdel(C)
|
||||
*/
|
||||
Reference in New Issue
Block a user