diff --git a/code/game/machinery/shieldgen.dm b/code/game/machinery/shieldgen.dm
index 95d8417031f..81b80fb8fd3 100644
--- a/code/game/machinery/shieldgen.dm
+++ b/code/game/machinery/shieldgen.dm
@@ -11,6 +11,7 @@
anchored = 0
pressure_resistance = 2*ONE_ATMOSPHERE
+#define maxstoredpower 500
/obj/machinery/shieldwallgen
name = "Shield Generator"
desc = "A shield generator."
@@ -32,7 +33,6 @@
// var/maxshieldload = 200
var/obj/cable/attached // the attached cable
var/storedpower = 0
- var/maxstoredpower = 500
flags = FPRINT | CONDUCT
/obj/machinery/shield
@@ -53,6 +53,7 @@
anchored = 1
density = 1
unacidable = 1
+ var/needs_power = 0
var/active = 1
// var/power = 10
var/delay = 5
@@ -160,43 +161,37 @@
/obj/machinery/shieldgen/attack_hand(mob/user as mob)
if (src.active)
- for(var/mob/viwer in viewers(world.view, src.loc))
- viwer << text("\icon[] [user] deactivated the shield generator.", src)
- shields_down()
-
+ user.visible_message("\blue \icon[src] [user] deactivated the shield generator.", \
+ "\blue \icon[src] You deactivate the shield generator.", \
+ "You hear heavy droning fade out.")
+ src.shields_down()
else
- for(var/mob/viwer in viewers(world.view, src.loc))
- viwer << text("\icon[] [user] activated the shield generator.", src)
- shields_up()
-
+ user.visible_message("\blue \icon[src] [user] activated the shield generator.", \
+ "\blue \icon[src] You activate the shield generator.", \
+ "You hear heavy droning.")
+ src.shields_up()
////FIELD GEN START //shameless copypasta from fieldgen, powersink, and grille
-
-/obj/machinery/shieldwallgen/proc/get_connection()
- var/turf/T = src.loc
- if(!istype(T, /turf/simulated/floor))
- return
-
- for(var/obj/cable/C in T)
- if(C.d1 == 0)
- return C.netnum
-
- return 0
-
-
/obj/machinery/shieldwallgen/proc/power()
if(!anchored)
+ power = 0
return 0
+ var/turf/T = src.loc
+ var/obj/cable/C = T.get_cable_node()
+ var/net = C.netnum // find the powernet of the connected cable
- var/net = get_connection() // find the powernet of the connected cable
+ if(!net)
+ power = 0
+ return 0
+ var/datum/powernet/PN = powernets[net] // find the powernet. Magic code, voodoo code.
- var/datum/powernet/PN // find the powernet. Magic code, voodoo code.
- if(net)
- PN = powernets[net]
- var/shieldload = rand(50,200)
-
- if((!PN || !PN.avail) && !storedpower) // no cable or no power, and no power stored
+ if(!PN)
+ power = 0
+ return 0
+ var/surplus = max(PN.avail-PN.load, 0)
+ var/shieldload = min(rand(50,200), surplus)
+ if(shieldload==0 && !storedpower) // no cable or no power, and no power stored
power = 0
return 0
else
@@ -208,52 +203,37 @@
// use_power(250) //uses APC power
/obj/machinery/shieldwallgen/attack_hand(mob/user as mob)
- if(state == 1)
- if(!src.locked)
- if(power == 1)
- if(src.active >= 1)
- src.active = 0
- icon_state = "Shield_Gen"
- user << "You turn off the shield generator."
- src.cleanup()
- else
- src.active = 1
- icon_state = "Shield_Gen +a"
- user << "You turn on the shield generator."
- else
- user << "The shield generator needs to be powered by wire underneath."
- else
- user << "The controls are locked!"
+ if(state != 1)
+ user << "\red The shield generator needs to be firmly secured to the floor first."
+ return 1
+ if(src.locked && !istype(user, /mob/living/silicon))
+ user << "\red The controls are locked!"
+ return 1
+ if(power != 1)
+ user << "\red The shield generator needs to be powered by wire underneath."
+ return 1
+
+ if(src.active >= 1)
+ src.active = 0
+ icon_state = "Shield_Gen"
+ user << "You "
+
+ user.visible_message("[user] turned the shield generator off.", \
+ "You turn off the shield generator.", \
+ "You hear heavy droning fade out.")
+ src.cleanup()
else
- user << "The shield generator needs to be firmly secured to the floor first."
+ src.active = 1
+ icon_state = "Shield_Gen +a"
+ user.visible_message("[user] turned the shield generator on.", \
+ "You turn on the shield generator.", \
+ "You hear heavy droning.")
src.add_fingerprint(user)
-/obj/machinery/shieldwallgen/attack_ai(mob/user as mob)
- if(state == 1)
- if(power == 1)
- if(src.active >= 1)
- user << "You turn off the shield generator."
- icon_state = "Shield_Gen"
- src.active = 0
- else
- src.active = 1
- icon_state = "Shield_Gen +a"
- user << "You turn on the shield generator."
- else
- user << "The shield generator needs to be powered by wire underneath."
- else
- user << "The shield generator needs to be firmly secured to the floor first."
- src.add_fingerprint(user)
-
-/obj/machinery/shieldwallgen/New()
- ..()
- return
-
-
/obj/machinery/shieldwallgen/process()
spawn(100)
power()
- if(power == 1)
+ if(power)
storedpower -= 50 //this way it can survive longer and survive at all
if(storedpower >= maxstoredpower)
storedpower = maxstoredpower
@@ -277,8 +257,8 @@
src.active = 2
if(src.active >= 1)
if(src.power == 0)
- for(var/mob/M in viewers(src))
- M.show_message("\red The [src.name] shuts down due to lack of power!")
+ src.visible_message("\red The [src.name] shuts down due to lack of power!", \
+ "You hear heavy droning fade out")
icon_state = "Shield_Gen"
src.active = 0
spawn(1)
@@ -396,18 +376,19 @@
/obj/machinery/shieldwallgen/bullet_act(flag)
- if (flag == PROJECTILE_BULLET)
- src.storedpower -= 10
- else if (flag == PROJECTILE_WEAKBULLET)
- src.storedpower -= 1
- else if (flag == PROJECTILE_LASER)
- src.storedpower +=20
- else if (flag == PROJECTILE_TASER)
- src.storedpower +=3
- else if (flag == PROJECTILE_PULSE)
- src.storedpower +=50
- else
- src.storedpower -=2
+ switch(flag)
+ if (PROJECTILE_BULLET)
+ src.storedpower -= 10
+ if (PROJECTILE_WEAKBULLET)
+ src.storedpower -= 1
+ if (PROJECTILE_LASER)
+ src.storedpower +=20
+ if (PROJECTILE_TASER)
+ src.storedpower +=3
+ if (PROJECTILE_PULSE)
+ src.storedpower +=50
+ else
+ src.storedpower -=2
return
@@ -480,6 +461,8 @@
..()
src.gen_primary = A
src.gen_secondary = B
+ if(A && B)
+ needs_power = 1
spawn(1)
src.sd_SetLuminosity(3)
@@ -498,52 +481,42 @@
return
/obj/machinery/shieldwall/process()
- if(isnull(gen_primary)||isnull(gen_secondary))
- del(src)
- return
+ if(needs_power)
+ if(isnull(gen_primary)||isnull(gen_secondary))
+ del(src)
+ return
- if(!(gen_primary.active)||!(gen_secondary.active))
- del(src)
- return
+ if(!(gen_primary.active)||!(gen_secondary.active))
+ del(src)
+ return
//
- if(prob(50))
- gen_primary.storedpower -= 10
- else
- gen_secondary.storedpower -=10
-
-
-/obj/machinery/shieldwall/bullet_act(flag)
-
- if (flag == PROJECTILE_BULLET)
if(prob(50))
gen_primary.storedpower -= 10
else
gen_secondary.storedpower -=10
- else if (flag == PROJECTILE_WEAKBULLET)
+
+
+/obj/machinery/shieldwall/bullet_act(flag)
+
+ if(needs_power)
+ var/obj/machinery/shieldwallgen/G
if(prob(50))
- gen_primary.storedpower -= 1
+ G = gen_primary
else
- gen_secondary.storedpower -=1
- else if (flag == PROJECTILE_LASER)
- if(prob(50))
- gen_primary.storedpower += 20
- else
- gen_secondary.storedpower +=20
- else if (flag == PROJECTILE_TASER)
- if(prob(50))
- gen_primary.storedpower += 3
- else
- gen_secondary.storedpower +=3
- else if (flag == PROJECTILE_PULSE)
- if(prob(50))
- gen_primary.storedpower += 50
- else
- gen_secondary.storedpower +=50
- else
- if(prob(50))
- gen_primary.storedpower -= 2
- else
- gen_secondary.storedpower -=2
+ G = gen_secondary
+ switch(flag)
+ if (PROJECTILE_BULLET)
+ G.storedpower -= 10
+ if (PROJECTILE_WEAKBULLET)
+ G.storedpower -=1
+ if (PROJECTILE_LASER)
+ G.storedpower +=20
+ if (PROJECTILE_TASER)
+ G.storedpower +=3
+ if (PROJECTILE_PULSE)
+ G.storedpower +=50
+ else
+ G.storedpower -=2
return
@@ -557,4 +530,4 @@
if (istype(mover, /obj/bullet))
return prob(10)
else
- return !src.density
\ No newline at end of file
+ return !src.density
diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm
index f508b332fc8..4199fbafaa3 100644
--- a/code/modules/power/apc.dm
+++ b/code/modules/power/apc.dm
@@ -162,7 +162,7 @@
else
if (stat & MAINT)
usr << "The cover is closed. Something wrong with it: it's doesn't work."
- else if (emagged || malfhack)
+ else if (malfhack)
usr << "The cover is broken. It's may be hard to force it open."
else
usr << "The cover is closed."
diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm
index 50433f0c6a6..6820f5e4bbb 100644
--- a/code/modules/power/power.dm
+++ b/code/modules/power/power.dm
@@ -370,7 +370,7 @@
/turf/proc/get_cable_node()
if(!istype(src, /turf/simulated/floor))
- return
+ return null
for(var/obj/cable/C in src)
if(C.d1 == 0)
return C