mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-11 10:43:20 +00:00
- Added a sprite "7" to the sd lighting file as it was used, even if it didn't exist.
- Piped 3.0.0 a bit. - Standardized code/modules/power. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4242 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -15,27 +15,27 @@
|
||||
var/stability = 100//TODO: add all the stability things to this so its not very safe if you keep hitting in on things
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
|
||||
/obj/item/weapon/am_containment/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
explosion(get_turf(src), 1, 2, 3, 5)//Should likely be larger but this works fine for now I guess
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob((fuel/10)-stability))
|
||||
explosion(get_turf(src), 1, 2, 3, 5)
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
if(2.0)
|
||||
if(prob((fuel/10)-stability))
|
||||
explosion(get_turf(src), 1, 2, 3, 5)
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
//check_stability()
|
||||
return
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
//check_stability()
|
||||
return
|
||||
|
||||
proc/usefuel(var/wanted)
|
||||
if(fuel < wanted)
|
||||
wanted = fuel
|
||||
fuel -= wanted
|
||||
return wanted
|
||||
/obj/item/weapon/am_containment/proc/usefuel(var/wanted)
|
||||
if(fuel < wanted)
|
||||
wanted = fuel
|
||||
fuel -= wanted
|
||||
return wanted
|
||||
@@ -29,311 +29,311 @@
|
||||
var/stored_power = 0//Power to deploy per tick
|
||||
|
||||
|
||||
New()
|
||||
..()
|
||||
linked_shielding = list()
|
||||
linked_cores = list()
|
||||
/obj/machinery/power/am_control_unit/New()
|
||||
..()
|
||||
linked_shielding = list()
|
||||
linked_cores = list()
|
||||
|
||||
|
||||
Del()//Perhaps damage and run stability checks rather than just del on the others
|
||||
/obj/machinery/power/am_control_unit/Del()//Perhaps damage and run stability checks rather than just del on the others
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
del(AMS)
|
||||
..()
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/process()
|
||||
if(exploding)
|
||||
explosion(get_turf(src),8,12,18,12)
|
||||
if(src) del(src)
|
||||
|
||||
if(update_shield_icons && !shield_icon_delay)
|
||||
check_shield_icons()
|
||||
update_shield_icons = 0
|
||||
|
||||
if(stat & (NOPOWER|BROKEN) || !active)//can update the icons even without power
|
||||
return
|
||||
|
||||
if(!fueljar)//No fuel but we are on, shutdown
|
||||
toggle_power()
|
||||
//Angry buzz or such here
|
||||
return
|
||||
|
||||
add_avail(stored_power)
|
||||
|
||||
power_cycle++
|
||||
if(power_cycle >= power_cycle_delay)
|
||||
produce_power()
|
||||
power_cycle = 0
|
||||
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/produce_power()
|
||||
playsound(src.loc, 'bang.ogg', 25, 1)
|
||||
var/core_power = reported_core_efficiency//Effectively how much fuel we can safely deal with
|
||||
if(core_power <= 0) return 0//Something is wrong
|
||||
var/core_damage = 0
|
||||
var/fuel = fueljar.usefuel(fuel_injection)
|
||||
|
||||
stored_power = (fuel/core_power)*fuel*200000
|
||||
//Now check if the cores could deal with it safely, this is done after so you can overload for more power if needed, still a bad idea
|
||||
if(fuel > (2*core_power))//More fuel has been put in than the current cores can deal with
|
||||
if(prob(50))core_damage = 1//Small chance of damage
|
||||
if((fuel-core_power) > 5) core_damage = 5//Now its really starting to overload the cores
|
||||
if((fuel-core_power) > 10) core_damage = 20//Welp now you did it, they wont stand much of this
|
||||
if(core_damage == 0) return
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
AMS.stability -= core_damage
|
||||
AMS.check_stability(1)
|
||||
playsound(src.loc, 'bang.ogg', 50, 1)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/emp_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
if(active) toggle_power()
|
||||
stability -= rand(15,30)
|
||||
if(2)
|
||||
if(active) toggle_power()
|
||||
stability -= rand(10,20)
|
||||
..()
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/blob_act()
|
||||
stability -= 20
|
||||
if(prob(100-stability))//Might infect the rest of the machine
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
del(AMS)
|
||||
..()
|
||||
|
||||
|
||||
process()
|
||||
if(exploding)
|
||||
explosion(get_turf(src),8,12,18,12)
|
||||
if(src) del(src)
|
||||
|
||||
if(update_shield_icons && !shield_icon_delay)
|
||||
check_shield_icons()
|
||||
update_shield_icons = 0
|
||||
|
||||
if(stat & (NOPOWER|BROKEN) || !active)//can update the icons even without power
|
||||
return
|
||||
|
||||
if(!fueljar)//No fuel but we are on, shutdown
|
||||
toggle_power()
|
||||
//Angry buzz or such here
|
||||
return
|
||||
|
||||
add_avail(stored_power)
|
||||
|
||||
power_cycle++
|
||||
if(power_cycle >= power_cycle_delay)
|
||||
produce_power()
|
||||
power_cycle = 0
|
||||
|
||||
return
|
||||
|
||||
|
||||
proc/produce_power()
|
||||
playsound(src.loc, 'bang.ogg', 25, 1)
|
||||
var/core_power = reported_core_efficiency//Effectively how much fuel we can safely deal with
|
||||
if(core_power <= 0) return 0//Something is wrong
|
||||
var/core_damage = 0
|
||||
var/fuel = fueljar.usefuel(fuel_injection)
|
||||
|
||||
stored_power = (fuel/core_power)*fuel*200000
|
||||
//Now check if the cores could deal with it safely, this is done after so you can overload for more power if needed, still a bad idea
|
||||
if(fuel > (2*core_power))//More fuel has been put in than the current cores can deal with
|
||||
if(prob(50))core_damage = 1//Small chance of damage
|
||||
if((fuel-core_power) > 5) core_damage = 5//Now its really starting to overload the cores
|
||||
if((fuel-core_power) > 10) core_damage = 20//Welp now you did it, they wont stand much of this
|
||||
if(core_damage == 0) return
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
AMS.stability -= core_damage
|
||||
AMS.check_stability(1)
|
||||
playsound(src.loc, 'bang.ogg', 50, 1)
|
||||
return
|
||||
|
||||
|
||||
emp_act(severity)
|
||||
switch(severity)
|
||||
if(1)
|
||||
if(active) toggle_power()
|
||||
stability -= rand(15,30)
|
||||
if(2)
|
||||
if(active) toggle_power()
|
||||
stability -= rand(10,20)
|
||||
..()
|
||||
return 0
|
||||
|
||||
|
||||
blob_act()
|
||||
stability -= 20
|
||||
if(prob(100-stability))//Might infect the rest of the machine
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
AMS.blob_act()
|
||||
spawn(0)
|
||||
//Likely explode
|
||||
del(src)
|
||||
return
|
||||
check_stability()
|
||||
return
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
stability -= 60
|
||||
if(2.0)
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
return
|
||||
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
stability -= Proj.force
|
||||
return 0
|
||||
|
||||
|
||||
power_change()
|
||||
..()
|
||||
if(stat & NOPOWER && active)
|
||||
toggle_power()
|
||||
return
|
||||
|
||||
|
||||
update_icon()
|
||||
if(active) icon_state = "control_on"
|
||||
else icon_state = "control"
|
||||
//No other icons for it atm
|
||||
|
||||
|
||||
attackby(obj/item/W, mob/user)
|
||||
if(!istype(W) || !user) return
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(!anchored)
|
||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
||||
"You secure the anchor bolts to the floor.", \
|
||||
"You hear a ratchet")
|
||||
src.anchored = 1
|
||||
connect_to_network()
|
||||
else if(!linked_shielding.len > 0)
|
||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||
user.visible_message("[user.name] unsecures the [src.name].", \
|
||||
"You remove the anchor bolts.", \
|
||||
"You hear a ratchet")
|
||||
src.anchored = 0
|
||||
disconnect_from_network()
|
||||
else
|
||||
user << "\red Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!"
|
||||
return
|
||||
|
||||
if(istype(W, /obj/item/weapon/am_containment))
|
||||
if(fueljar)
|
||||
user << "\red There is already a [fueljar] inside!"
|
||||
return
|
||||
fueljar = W
|
||||
W.loc = src
|
||||
if(user.client)
|
||||
user.client.screen -= W
|
||||
user.u_equip(W)
|
||||
user.update_icons()
|
||||
user.visible_message("[user.name] loads an [W.name] into the [src.name].", \
|
||||
"You load an [W.name].", \
|
||||
"You hear a thunk.")
|
||||
return
|
||||
|
||||
if(W.force >= 20)
|
||||
stability -= W.force/2
|
||||
check_stability()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
attack_hand(mob/user as mob)
|
||||
if(anchored)
|
||||
interact(user)
|
||||
return
|
||||
|
||||
|
||||
proc/add_shielding(var/obj/machinery/am_shielding/AMS, var/AMS_linking = 0)
|
||||
if(!istype(AMS)) return 0
|
||||
if(!anchored) return 0
|
||||
if(!AMS_linking && !AMS.link_control(src)) return 0
|
||||
linked_shielding.Add(AMS)
|
||||
update_shield_icons = 1
|
||||
return 1
|
||||
|
||||
|
||||
proc/remove_shielding(var/obj/machinery/am_shielding/AMS)
|
||||
if(!istype(AMS)) return 0
|
||||
linked_shielding.Remove(AMS)
|
||||
update_shield_icons = 2
|
||||
if(active) toggle_power()
|
||||
return 1
|
||||
|
||||
|
||||
proc/check_stability()//TODO: make it break when low also might want to add a way to fix it like a part or such that can be replaced
|
||||
if(stability <= 0)
|
||||
AMS.blob_act()
|
||||
spawn(0)
|
||||
//Likely explode
|
||||
del(src)
|
||||
return
|
||||
check_stability()
|
||||
return
|
||||
|
||||
|
||||
proc/toggle_power()
|
||||
active = !active
|
||||
if(active)
|
||||
use_power = 2
|
||||
visible_message("The [src.name] starts up.")
|
||||
/obj/machinery/power/am_control_unit/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
stability -= 60
|
||||
if(2.0)
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
stability -= Proj.force
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/power_change()
|
||||
..()
|
||||
if(stat & NOPOWER && active)
|
||||
toggle_power()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/update_icon()
|
||||
if(active) icon_state = "control_on"
|
||||
else icon_state = "control"
|
||||
//No other icons for it atm
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/attackby(obj/item/W, mob/user)
|
||||
if(!istype(W) || !user) return
|
||||
if(istype(W, /obj/item/weapon/wrench))
|
||||
if(!anchored)
|
||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||
user.visible_message("[user.name] secures the [src.name] to the floor.", \
|
||||
"You secure the anchor bolts to the floor.", \
|
||||
"You hear a ratchet")
|
||||
src.anchored = 1
|
||||
connect_to_network()
|
||||
else if(!linked_shielding.len > 0)
|
||||
playsound(src.loc, 'Ratchet.ogg', 75, 1)
|
||||
user.visible_message("[user.name] unsecures the [src.name].", \
|
||||
"You remove the anchor bolts.", \
|
||||
"You hear a ratchet")
|
||||
src.anchored = 0
|
||||
disconnect_from_network()
|
||||
else
|
||||
use_power = 1
|
||||
visible_message("The [src.name] shuts down.")
|
||||
update_icon()
|
||||
user << "\red Once bolted and linked to a shielding unit it the [src.name] is unable to be moved!"
|
||||
return
|
||||
|
||||
|
||||
proc/check_shield_icons()//Forces icon_update for all shields
|
||||
if(shield_icon_delay) return
|
||||
shield_icon_delay = 1
|
||||
if(update_shield_icons == 2)//2 means to clear everything and rebuild
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
if(AMS.processing) AMS.shutdown_core()
|
||||
AMS.control_unit = null
|
||||
spawn(10)
|
||||
AMS.controllerscan()
|
||||
linked_shielding = list()
|
||||
|
||||
else
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
AMS.update_icon()
|
||||
spawn(20)
|
||||
shield_icon_delay = 0
|
||||
return
|
||||
|
||||
|
||||
proc/check_core_stability()
|
||||
if(stored_core_stability_delay || linked_cores.len <= 0) return
|
||||
stored_core_stability_delay = 1
|
||||
stored_core_stability = 0
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
stored_core_stability += AMS.stability
|
||||
stored_core_stability/=linked_cores.len
|
||||
spawn(40)
|
||||
stored_core_stability_delay = 0
|
||||
return
|
||||
|
||||
|
||||
proc/interact(mob/user)
|
||||
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
||||
if(!istype(user, /mob/living/silicon/ai))
|
||||
user.machine = null
|
||||
user << browse(null, "window=AMcontrol")
|
||||
return
|
||||
user.machine = src
|
||||
|
||||
var/dat = ""
|
||||
dat += "AntiMatter Control Panel<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];refreshicons=1'>Force Shielding Update</A><BR><BR>"
|
||||
dat += "Status: [(active?"Injecting":"Standby")] <BR>"
|
||||
dat += "<A href='?src=\ref[src];togglestatus=1'>Toggle Status</A><BR>"
|
||||
|
||||
dat += "Stability: [stability]%<BR>"
|
||||
dat += "Reactor parts: [linked_shielding.len]<BR>"//TODO: perhaps add some sort of stability check
|
||||
dat += "Cores: [linked_cores.len]<BR><BR>"
|
||||
dat += "-Current Efficiency: [reported_core_efficiency]<BR>"
|
||||
dat += "-Average Stability: [stored_core_stability] <A href='?src=\ref[src];refreshstability=1'>(update)</A><BR>"
|
||||
dat += "Last Produced: [stored_power]<BR>"
|
||||
|
||||
dat += "Fuel: "
|
||||
if(!fueljar)
|
||||
dat += "<BR>No fuel receptacle detected."
|
||||
else
|
||||
dat += "<A href='?src=\ref[src];ejectjar=1'>Eject</A><BR>"
|
||||
dat += "- [fueljar.fuel]/[fueljar.fuel_max] Units<BR>"
|
||||
|
||||
dat += "- Injecting: [fuel_injection] units<BR>"
|
||||
dat += "- <A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
||||
|
||||
|
||||
user << browse(dat, "window=AMcontrol;size=420x500")
|
||||
onclose(user, "AMcontrol")
|
||||
return
|
||||
|
||||
|
||||
Topic(href, href_list)
|
||||
..()
|
||||
//Ignore input if we are broken or guy is not touching us, AI can control from a ways away
|
||||
if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon/ai)))
|
||||
usr.machine = null
|
||||
usr << browse(null, "window=AMcontrol")
|
||||
if(istype(W, /obj/item/weapon/am_containment))
|
||||
if(fueljar)
|
||||
user << "\red There is already a [fueljar] inside!"
|
||||
return
|
||||
fueljar = W
|
||||
W.loc = src
|
||||
if(user.client)
|
||||
user.client.screen -= W
|
||||
user.u_equip(W)
|
||||
user.update_icons()
|
||||
user.visible_message("[user.name] loads an [W.name] into the [src.name].", \
|
||||
"You load an [W.name].", \
|
||||
"You hear a thunk.")
|
||||
return
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=AMcontrol")
|
||||
usr.machine = null
|
||||
if(W.force >= 20)
|
||||
stability -= W.force/2
|
||||
check_stability()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/attack_hand(mob/user as mob)
|
||||
if(anchored)
|
||||
interact(user)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/add_shielding(var/obj/machinery/am_shielding/AMS, var/AMS_linking = 0)
|
||||
if(!istype(AMS)) return 0
|
||||
if(!anchored) return 0
|
||||
if(!AMS_linking && !AMS.link_control(src)) return 0
|
||||
linked_shielding.Add(AMS)
|
||||
update_shield_icons = 1
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/remove_shielding(var/obj/machinery/am_shielding/AMS)
|
||||
if(!istype(AMS)) return 0
|
||||
linked_shielding.Remove(AMS)
|
||||
update_shield_icons = 2
|
||||
if(active) toggle_power()
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/check_stability()//TODO: make it break when low also might want to add a way to fix it like a part or such that can be replaced
|
||||
if(stability <= 0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/toggle_power()
|
||||
active = !active
|
||||
if(active)
|
||||
use_power = 2
|
||||
visible_message("The [src.name] starts up.")
|
||||
else
|
||||
use_power = 1
|
||||
visible_message("The [src.name] shuts down.")
|
||||
update_icon()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/check_shield_icons()//Forces icon_update for all shields
|
||||
if(shield_icon_delay) return
|
||||
shield_icon_delay = 1
|
||||
if(update_shield_icons == 2)//2 means to clear everything and rebuild
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
if(AMS.processing) AMS.shutdown_core()
|
||||
AMS.control_unit = null
|
||||
spawn(10)
|
||||
AMS.controllerscan()
|
||||
linked_shielding = list()
|
||||
|
||||
else
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_shielding)
|
||||
AMS.update_icon()
|
||||
spawn(20)
|
||||
shield_icon_delay = 0
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/check_core_stability()
|
||||
if(stored_core_stability_delay || linked_cores.len <= 0) return
|
||||
stored_core_stability_delay = 1
|
||||
stored_core_stability = 0
|
||||
for(var/obj/machinery/am_shielding/AMS in linked_cores)
|
||||
stored_core_stability += AMS.stability
|
||||
stored_core_stability/=linked_cores.len
|
||||
spawn(40)
|
||||
stored_core_stability_delay = 0
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/power/am_control_unit/proc/interact(mob/user)
|
||||
if((get_dist(src, user) > 1) || (stat & (BROKEN|NOPOWER)))
|
||||
if(!istype(user, /mob/living/silicon/ai))
|
||||
user.machine = null
|
||||
user << browse(null, "window=AMcontrol")
|
||||
return
|
||||
user.machine = src
|
||||
|
||||
if(href_list["togglestatus"])
|
||||
toggle_power()
|
||||
var/dat = ""
|
||||
dat += "AntiMatter Control Panel<BR>"
|
||||
dat += "<A href='?src=\ref[src];close=1'>Close</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];refresh=1'>Refresh</A><BR>"
|
||||
dat += "<A href='?src=\ref[src];refreshicons=1'>Force Shielding Update</A><BR><BR>"
|
||||
dat += "Status: [(active?"Injecting":"Standby")] <BR>"
|
||||
dat += "<A href='?src=\ref[src];togglestatus=1'>Toggle Status</A><BR>"
|
||||
|
||||
if(href_list["refreshicons"])
|
||||
update_shield_icons = 1
|
||||
dat += "Stability: [stability]%<BR>"
|
||||
dat += "Reactor parts: [linked_shielding.len]<BR>"//TODO: perhaps add some sort of stability check
|
||||
dat += "Cores: [linked_cores.len]<BR><BR>"
|
||||
dat += "-Current Efficiency: [reported_core_efficiency]<BR>"
|
||||
dat += "-Average Stability: [stored_core_stability] <A href='?src=\ref[src];refreshstability=1'>(update)</A><BR>"
|
||||
dat += "Last Produced: [stored_power]<BR>"
|
||||
|
||||
if(href_list["ejectjar"])
|
||||
if(fueljar)
|
||||
fueljar.loc = src.loc
|
||||
fueljar = null
|
||||
//fueljar.control_unit = null currently it does not care where it is
|
||||
//update_icon() when we have the icon for it
|
||||
dat += "Fuel: "
|
||||
if(!fueljar)
|
||||
dat += "<BR>No fuel receptacle detected."
|
||||
else
|
||||
dat += "<A href='?src=\ref[src];ejectjar=1'>Eject</A><BR>"
|
||||
dat += "- [fueljar.fuel]/[fueljar.fuel_max] Units<BR>"
|
||||
|
||||
if(href_list["strengthup"])
|
||||
fuel_injection++
|
||||
dat += "- Injecting: [fuel_injection] units<BR>"
|
||||
dat += "- <A href='?src=\ref[src];strengthdown=1'>--</A>|<A href='?src=\ref[src];strengthup=1'>++</A><BR><BR>"
|
||||
|
||||
if(href_list["strengthdown"])
|
||||
fuel_injection--
|
||||
if(fuel_injection < 0) fuel_injection = 0
|
||||
|
||||
if(href_list["refreshstability"])
|
||||
check_core_stability()
|
||||
user << browse(dat, "window=AMcontrol;size=420x500")
|
||||
onclose(user, "AMcontrol")
|
||||
return
|
||||
|
||||
updateDialog()
|
||||
return
|
||||
|
||||
/obj/machinery/power/am_control_unit/Topic(href, href_list)
|
||||
..()
|
||||
//Ignore input if we are broken or guy is not touching us, AI can control from a ways away
|
||||
if(stat & (BROKEN|NOPOWER) || (get_dist(src, usr) > 1 && !istype(usr, /mob/living/silicon/ai)))
|
||||
usr.machine = null
|
||||
usr << browse(null, "window=AMcontrol")
|
||||
return
|
||||
|
||||
if(href_list["close"])
|
||||
usr << browse(null, "window=AMcontrol")
|
||||
usr.machine = null
|
||||
return
|
||||
|
||||
if(href_list["togglestatus"])
|
||||
toggle_power()
|
||||
|
||||
if(href_list["refreshicons"])
|
||||
update_shield_icons = 1
|
||||
|
||||
if(href_list["ejectjar"])
|
||||
if(fueljar)
|
||||
fueljar.loc = src.loc
|
||||
fueljar = null
|
||||
//fueljar.control_unit = null currently it does not care where it is
|
||||
//update_icon() when we have the icon for it
|
||||
|
||||
if(href_list["strengthup"])
|
||||
fuel_injection++
|
||||
|
||||
if(href_list["strengthdown"])
|
||||
fuel_injection--
|
||||
if(fuel_injection < 0) fuel_injection = 0
|
||||
|
||||
if(href_list["refreshstability"])
|
||||
check_core_stability()
|
||||
|
||||
updateDialog()
|
||||
return
|
||||
@@ -26,177 +26,177 @@ proc/cardinalrange(var/center)
|
||||
var/efficiency = 1//How many cores this core counts for when doing power processing, plasma in the air and stability could affect this
|
||||
|
||||
|
||||
New(loc)
|
||||
..(loc)
|
||||
spawn(10)
|
||||
controllerscan()
|
||||
/obj/machinery/am_shielding/New(loc)
|
||||
..(loc)
|
||||
spawn(10)
|
||||
controllerscan()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/proc/controllerscan(var/priorscan = 0)
|
||||
//Make sure we are the only one here
|
||||
if(!istype(src.loc, /turf))
|
||||
del(src)
|
||||
return
|
||||
for(var/obj/machinery/am_shielding/AMS in loc.contents)
|
||||
if(AMS == src) continue
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
//Search for shielding first
|
||||
for(var/obj/machinery/am_shielding/AMS in cardinalrange(src))
|
||||
if(AMS && AMS.control_unit && link_control(AMS.control_unit))
|
||||
break
|
||||
|
||||
proc/controllerscan(var/priorscan = 0)
|
||||
//Make sure we are the only one here
|
||||
if(!istype(src.loc, /turf))
|
||||
del(src)
|
||||
return
|
||||
for(var/obj/machinery/am_shielding/AMS in loc.contents)
|
||||
if(AMS == src) continue
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
//Search for shielding first
|
||||
for(var/obj/machinery/am_shielding/AMS in cardinalrange(src))
|
||||
if(AMS && AMS.control_unit && link_control(AMS.control_unit))
|
||||
if(!control_unit)//No other guys nearby look for a control unit
|
||||
for(var/direction in cardinal)
|
||||
for(var/obj/machinery/power/am_control_unit/AMC in cardinalrange(src))
|
||||
if(AMC.add_shielding(src))
|
||||
break
|
||||
|
||||
if(!control_unit)//No other guys nearby look for a control unit
|
||||
for(var/direction in cardinal)
|
||||
for(var/obj/machinery/power/am_control_unit/AMC in cardinalrange(src))
|
||||
if(AMC.add_shielding(src))
|
||||
break
|
||||
|
||||
if(!control_unit)
|
||||
if(!priorscan)
|
||||
spawn(20)
|
||||
controllerscan(1)//Last chance
|
||||
return
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
Del()
|
||||
if(control_unit) control_unit.remove_shielding(src)
|
||||
if(processing) shutdown_core()
|
||||
visible_message("\red The [src.name] melts!")
|
||||
//Might want to have it leave a mess on the floor but no sprites for now
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
return 0
|
||||
|
||||
|
||||
process()
|
||||
if(!processing) ..()
|
||||
//TODO: core functions and stability
|
||||
//TODO: think about checking the airmix for plasma and increasing power output
|
||||
return
|
||||
|
||||
|
||||
emp_act()//Immune due to not really much in the way of electronics.
|
||||
return 0
|
||||
|
||||
|
||||
blob_act()
|
||||
stability -= 20
|
||||
if(prob(100-stability))
|
||||
if(prob(10))//Might create a node
|
||||
new /obj/effect/blob/node(src.loc,150)
|
||||
else
|
||||
new /obj/effect/blob(src.loc,60)
|
||||
spawn(0)
|
||||
del(src)
|
||||
if(!control_unit)
|
||||
if(!priorscan)
|
||||
spawn(20)
|
||||
controllerscan(1)//Last chance
|
||||
return
|
||||
check_stability()
|
||||
return
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
stability -= 80
|
||||
if(2.0)
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
return
|
||||
/obj/machinery/am_shielding/Del()
|
||||
if(control_unit) control_unit.remove_shielding(src)
|
||||
if(processing) shutdown_core()
|
||||
visible_message("\red The [src.name] melts!")
|
||||
//Might want to have it leave a mess on the floor but no sprites for now
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
stability -= Proj.force/2
|
||||
return 0
|
||||
/obj/machinery/am_shielding/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
if(air_group || (height==0)) return 1
|
||||
return 0
|
||||
|
||||
|
||||
update_icon()
|
||||
overlays = null
|
||||
for(var/direction in alldirs)
|
||||
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
||||
if((istype(machine, /obj/machinery/am_shielding) && machine:control_unit == control_unit)||(istype(machine, /obj/machinery/power/am_control_unit) && machine == control_unit))
|
||||
overlays += "shield_[direction]"
|
||||
|
||||
if(core_check())
|
||||
overlays += "core"
|
||||
if(!processing) setup_core()
|
||||
else if(processing) shutdown_core()
|
||||
/obj/machinery/am_shielding/process()
|
||||
if(!processing) ..()
|
||||
//TODO: core functions and stability
|
||||
//TODO: think about checking the airmix for plasma and increasing power output
|
||||
return
|
||||
|
||||
|
||||
attackby(obj/item/W, mob/user)
|
||||
if(!istype(W) || !user) return
|
||||
if(W.force > 10)
|
||||
stability -= W.force/2
|
||||
check_stability()
|
||||
..()
|
||||
return
|
||||
/obj/machinery/am_shielding/emp_act()//Immune due to not really much in the way of electronics.
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
//Call this to link a detected shilding unit to the controller
|
||||
proc/link_control(var/obj/machinery/power/am_control_unit/AMC)
|
||||
if(!istype(AMC)) return 0
|
||||
if(control_unit && control_unit != AMC) return 0//Already have one
|
||||
control_unit = AMC
|
||||
control_unit.add_shielding(src,1)
|
||||
return 1
|
||||
|
||||
|
||||
//Scans cards for shields or the control unit and if all there it
|
||||
proc/core_check()
|
||||
for(var/direction in alldirs)
|
||||
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
||||
if(!machine) return 0//Need all for a core
|
||||
if(!istype(machine, /obj/machinery/am_shielding) && !istype(machine, /obj/machinery/power/am_control_unit)) return 0
|
||||
return 1
|
||||
|
||||
|
||||
proc/setup_core()
|
||||
processing = 1
|
||||
machines.Add(src)
|
||||
if(!control_unit) return
|
||||
control_unit.linked_cores.Add(src)
|
||||
control_unit.reported_core_efficiency += efficiency
|
||||
return
|
||||
|
||||
|
||||
proc/shutdown_core()
|
||||
processing = 0
|
||||
machines.Remove(src)
|
||||
if(!control_unit) return
|
||||
control_unit.linked_cores.Remove(src)
|
||||
control_unit.reported_core_efficiency -= efficiency
|
||||
return
|
||||
|
||||
|
||||
proc/check_stability(var/injecting_fuel = 0)
|
||||
if(stability > 0) return
|
||||
if(injecting_fuel && control_unit)
|
||||
control_unit.exploding = 1
|
||||
if(src)
|
||||
/obj/machinery/am_shielding/blob_act()
|
||||
stability -= 20
|
||||
if(prob(100-stability))
|
||||
if(prob(10))//Might create a node
|
||||
new /obj/effect/blob/node(src.loc,150)
|
||||
else
|
||||
new /obj/effect/blob(src.loc,60)
|
||||
spawn(0)
|
||||
del(src)
|
||||
return
|
||||
check_stability()
|
||||
return
|
||||
|
||||
|
||||
proc/recalc_efficiency(var/new_efficiency)//tbh still not 100% sure how I want to deal with efficiency so this is likely temp
|
||||
if(!control_unit || !processing) return
|
||||
if(stability < 50)
|
||||
new_efficiency /= 2
|
||||
control_unit.reported_core_efficiency += (new_efficiency - efficiency)
|
||||
efficiency = new_efficiency
|
||||
return
|
||||
/obj/machinery/am_shielding/ex_act(severity)
|
||||
switch(severity)
|
||||
if(1.0)
|
||||
stability -= 80
|
||||
if(2.0)
|
||||
stability -= 40
|
||||
if(3.0)
|
||||
stability -= 20
|
||||
check_stability()
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/bullet_act(var/obj/item/projectile/Proj)
|
||||
if(Proj.flag != "bullet")
|
||||
stability -= Proj.force/2
|
||||
return 0
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/update_icon()
|
||||
overlays = null
|
||||
for(var/direction in alldirs)
|
||||
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
||||
if((istype(machine, /obj/machinery/am_shielding) && machine:control_unit == control_unit)||(istype(machine, /obj/machinery/power/am_control_unit) && machine == control_unit))
|
||||
overlays += "shield_[direction]"
|
||||
|
||||
if(core_check())
|
||||
overlays += "core"
|
||||
if(!processing) setup_core()
|
||||
else if(processing) shutdown_core()
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/attackby(obj/item/W, mob/user)
|
||||
if(!istype(W) || !user) return
|
||||
if(W.force > 10)
|
||||
stability -= W.force/2
|
||||
check_stability()
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
//Call this to link a detected shilding unit to the controller
|
||||
/obj/machinery/am_shielding/proc/link_control(var/obj/machinery/power/am_control_unit/AMC)
|
||||
if(!istype(AMC)) return 0
|
||||
if(control_unit && control_unit != AMC) return 0//Already have one
|
||||
control_unit = AMC
|
||||
control_unit.add_shielding(src,1)
|
||||
return 1
|
||||
|
||||
|
||||
//Scans cards for shields or the control unit and if all there it
|
||||
/obj/machinery/am_shielding/proc/core_check()
|
||||
for(var/direction in alldirs)
|
||||
var/machine = locate(/obj/machinery, get_step(loc, direction))
|
||||
if(!machine) return 0//Need all for a core
|
||||
if(!istype(machine, /obj/machinery/am_shielding) && !istype(machine, /obj/machinery/power/am_control_unit)) return 0
|
||||
return 1
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/proc/setup_core()
|
||||
processing = 1
|
||||
machines.Add(src)
|
||||
if(!control_unit) return
|
||||
control_unit.linked_cores.Add(src)
|
||||
control_unit.reported_core_efficiency += efficiency
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/proc/shutdown_core()
|
||||
processing = 0
|
||||
machines.Remove(src)
|
||||
if(!control_unit) return
|
||||
control_unit.linked_cores.Remove(src)
|
||||
control_unit.reported_core_efficiency -= efficiency
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/proc/check_stability(var/injecting_fuel = 0)
|
||||
if(stability > 0) return
|
||||
if(injecting_fuel && control_unit)
|
||||
control_unit.exploding = 1
|
||||
if(src)
|
||||
del(src)
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/am_shielding/proc/recalc_efficiency(var/new_efficiency)//tbh still not 100% sure how I want to deal with efficiency so this is likely temp
|
||||
if(!control_unit || !processing) return
|
||||
if(stability < 50)
|
||||
new_efficiency /= 2
|
||||
control_unit.reported_core_efficiency += (new_efficiency - efficiency)
|
||||
efficiency = new_efficiency
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -214,10 +214,10 @@ proc/cardinalrange(var/center)
|
||||
m_amt = 100
|
||||
w_amt = 2000
|
||||
|
||||
attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
|
||||
new/obj/machinery/am_shielding(src.loc)
|
||||
del(src)
|
||||
return
|
||||
..()
|
||||
return
|
||||
/obj/item/device/am_shielding_container/attackby(var/obj/item/I, var/mob/user)
|
||||
if(istype(I, /obj/item/device/multitool) && istype(src.loc,/turf))
|
||||
new/obj/machinery/am_shielding(src.loc)
|
||||
del(src)
|
||||
return
|
||||
..()
|
||||
return
|
||||
Reference in New Issue
Block a user