diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm
index 5de726a9972..e643e67405d 100644
--- a/code/ATMOSPHERICS/components/unary/vent_pump.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm
@@ -36,6 +36,9 @@
if (!id_tag)
assign_uid()
id_tag = num2text(uid)
+ if(ticker && ticker.current_state == 3)//if the game is running
+ src.initialize()
+ src.broadcast_status()
..()
high_volume
@@ -61,7 +64,7 @@
return
if (!node)
on = 0
- broadcast_status()
+ //broadcast_status()
if(!on)
return 0
@@ -174,7 +177,6 @@
if("toggle_checks")
pressure_checks = (pressure_checks?0:3)
-
if("set_direction")
var/number = text2num(signal.data["parameter"])
if(number > 0.5)
diff --git a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
index 43e1b571fe7..0b9c493228f 100644
--- a/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
+++ b/code/ATMOSPHERICS/components/unary/vent_scrubber.dm
@@ -31,6 +31,9 @@
if (!id_tag)
assign_uid()
id_tag = num2text(uid)
+ if(ticker && ticker.current_state == 3)//if the game is running
+ src.initialize()
+ src.broadcast_status()
..()
update_icon()
@@ -79,14 +82,13 @@
if (frequency)
set_frequency(frequency)
-
process()
..()
if(stat & (NOPOWER|BROKEN))
return
if (!node)
on = 0
- broadcast_status()
+ //broadcast_status()
if(!on)
return 0
diff --git a/code/game/cellautomata.dm b/code/game/cellautomata.dm
index 003b48c2f66..7e780fa378d 100644
--- a/code/game/cellautomata.dm
+++ b/code/game/cellautomata.dm
@@ -161,13 +161,15 @@
/atom/verb/point()
set name = "Point To"
set src in oview()
+ var/atom/this = src//detach proc from src
+ src = null
if (!usr || !isturf(usr.loc))
return
else if (usr.stat != 0 || usr.restrained())
return
- var/tile = get_turf(src)
+ var/tile = get_turf(this)
if (!tile)
return
@@ -175,7 +177,7 @@
spawn (20)
del(P)
- usr.visible_message("[usr] points to [src]")
+ usr.visible_message("[usr] points to [this]")
/obj/decal/point/point()
set src in oview()
diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm
index b97ec81c5fa..f6710965d86 100644
--- a/code/game/machinery/alarm.dm
+++ b/code/game/machinery/alarm.dm
@@ -43,6 +43,8 @@
return
if (signal.data["area"] != area_uid)
return
+ if(!signal.data["device"])
+ return
if(!(id_tag in sensors) && !(id_tag in vents))
register_env_machine(id_tag, signal.data["device"])
if(signal.data["device"] == "AScr")
@@ -217,15 +219,17 @@
var/sensor_part = "[long_name]:
"
if(data)
- sensor_part += {"Operating: [(data["on"]?"on":"off")]
- Type: [(data["scrubbing"]?"scrubbing":"syphoning")]
"}
+ sensor_part += {"Operating: [(data["on"]?"on":"off")]
+ Type: [(data["scrubbing"]?"scrubbing":"syphoning")]
"}
if(data["scrubbing"])
- sensor_part += "Filtering: Carbon Dioxide ([(data["filter_co2"]?"on":"off")]); Toxins ([data["filter_toxins"]?"on":"off"]); Nitrous Oxide ([data["filter_n2o"]?"on":"off"])
"
- sensor_part += "Dea":"red'>A")]ctivate panic syphon
"
+ sensor_part += "Filtering: Carbon Dioxide ([(data["filter_co2"]?"on":"off")]); Toxins ([data["filter_toxins"]?"on":"off"]); Nitrous Oxide ([data["filter_n2o"]?"on":"off"])
"
+ sensor_part += "Dea":"red'>A")]ctivate panic syphon
"
if(data["panic"])
sensor_part += "PANIC SYPHON ACTIVATED"
+ /*
if (data["timestamp"]+3 < air_master.current_cycle)
sensor_part += "[long_name] not responding.
"
+ */
sensor_part += "
"
else
sensor_part = "[long_name] can not be found!
"
@@ -242,10 +246,12 @@
var/sensor_part = "[long_name]:
"
if(data)
- sensor_part += {"Operating: [data["power"]]
- Pressure checks: [data["checks"]?"on":"off"]
"}
+ sensor_part += {"Operating: [data["power"]]
+ Pressure checks: [data["checks"]?"on":"off"]
"}
+ /*
if (data["timestamp"]+3 < air_master.current_cycle)
sensor_part += "[long_name] not responding.
"
+ */
sensor_part += "
"
else
sensor_part = "[long_name] can not be found!
"
@@ -292,35 +298,21 @@
src.device = "Vents"
if(href_list["main"])
src.device = null
- if(href_list["scr_toggle_power"])
- send_signal(href_list["scr_toggle_power"], "toggle_power")
-
- if(href_list["scr_toggle_scrubbing"])
- send_signal(href_list["scr_toggle_scrubbing"], "toggle_scrubbing")
-
- if(href_list["scr_toggle_co2_scrub"])
- send_signal(href_list["scr_toggle_co2_scrub"], "toggle_co2_scrub")
-
- if(href_list["scr_toggle_tox_scrub"])
- send_signal(href_list["scr_toggle_tox_scrub"], "toggle_tox_scrub")
-
- if(href_list["scr_toggle_n2o_scrub"])
- send_signal(href_list["scr_toggle_n2o_scrub"], "toggle_n2o_scrub")
-
- if(href_list["scr_toggle_panic_siphon"])
- send_signal(href_list["scr_toggle_panic_siphon"], "toggle_panic_siphon")
-
- if(href_list["v_toggle_power"])
- send_signal(href_list["v_toggle_power"], "power_toggle")
- if(href_list["v_toggle_checks"])
- send_signal(href_list["v_toggle_checks"], "toggle_checks")
-
+ if(href_list["id"] && href_list["command"])
+ send_signal(href_list["id"],href_list["command"])
+ if(src.device == "Scrubbers")
+ sensor_information[href_list["id"]] = null
+ else if(src.device == "Vents")
+ vent_information[href_list["id"]] = null
if(href_list["toggle_panic_siphon_global"])
+ panic = !panic
for(var/V in sensors)
send_signal(V, "toggle_panic_siphon")
+ sensor_information[V] = null
for(var/P in vents)
- send_signal(P, "power_off")
- panic = !panic
+ send_signal(P, "power_toggle")
+ vent_information[P] = null
+
/* if(href_list["reinit_atmos_machinery"])
var/A = get_area(loc)
connect_area_atmos_machinery(A)*/
diff --git a/code/game/master_controller.dm b/code/game/master_controller.dm
index 07766da1beb..daac7f3cee0 100644
--- a/code/game/master_controller.dm
+++ b/code/game/master_controller.dm
@@ -48,6 +48,13 @@ datum/controller/game_controller
for(var/obj/machinery/atmospherics/machine in world)
machine.build_network()
+ world << "\red \b Initializing atmos machinery."
+ sleep(-1)
+ for(var/obj/machinery/atmospherics/unary/vent_pump/T in world)
+ T.broadcast_status()
+ for(var/obj/machinery/atmospherics/unary/vent_scrubber/T in world)
+ T.broadcast_status()
+
/*world << "\red \b Initializing atmos machinery"
sleep(-1)
diff --git a/code/game/mecha/combat/honker.dm b/code/game/mecha/combat/honker.dm
index 54e3046ef5a..ac2c279f78b 100644
--- a/code/game/mecha/combat/honker.dm
+++ b/code/game/mecha/combat/honker.dm
@@ -31,12 +31,13 @@
return
/obj/mecha/combat/honker/get_stats_part()
+ var/cell_charge = get_charge()
var/output = {"[internal_damage&MECHA_INT_FIRE?"INTERNAL FIRE
":null]
[internal_damage&MECHA_INT_TEMP_CONTROL?"CLOWN SUPPORT SYSTEM MALFUNCTION
":null]
[internal_damage&MECHA_INT_TANK_BREACH?"GAS TANK HONK
":null]
[internal_damage&MECHA_INT_CONTROL_LOST?"HONK-A-DOODLE - Recalibrate
":null]
IntegriHONK: [health/initial(health)*100] %)
- PowerHONK charge: [cell.charge/cell.maxcharge*100] %)
+ PowerHONK charge: [isnull(cell_charge)?"Someone HONKed powerHonk!!!":"[cell.percent()]%"])
AirHONK pressure: [src.return_pressure()]HoNKs
Internal HONKature: [src.air_contents.temperature]°honK|[src.air_contents.temperature - T0C]°honCk
Lights: [lights?"on":"off"]
diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm
index 23dae30efbb..43543e3eff1 100644
--- a/code/game/mecha/combat/marauder.dm
+++ b/code/game/mecha/combat/marauder.dm
@@ -37,7 +37,7 @@
return 0
if(!thrusters && src.pr_inertial_movement.active())
return 0
- if(state || !cell || cell.charge<=0)
+ if(state || !get_charge())
return 0
var/tmp_step_in = step_in
var/tmp_step_energy_drain = step_energy_drain
@@ -71,9 +71,10 @@
if(usr!=src.occupant)
return
if(src.occupant)
- if(cell.charge > 0)
+ if(get_charge() > 0)
thrusters = !thrusters
- src.occupant_message("\blue Thrusters [thrusters?"en":"dis"]abled.")
+ src.log_message("Toggled thrusters.")
+ src.occupant_message("Thrusters [thrusters?"en":"dis"]abled.")
return
@@ -100,7 +101,7 @@
if(src.occupant.client)
src.zoom = !src.zoom
src.log_message("Toggled zoom mode.")
- src.occupant_message("\blue Zoom mode [zoom?"en":"dis"]abled.")
+ src.occupant_message("Zoom mode [zoom?"en":"dis"]abled.")
if(zoom)
src.occupant.client.view = 12
src.occupant << sound('imag_enh.ogg',volume=50)
diff --git a/code/game/mecha/combat/weapons/weapons.dm b/code/game/mecha/combat/weapons/weapons.dm
index a40c7d41721..dd472656ba2 100644
--- a/code/game/mecha/combat/weapons/weapons.dm
+++ b/code/game/mecha/combat/weapons/weapons.dm
@@ -28,7 +28,7 @@
return 0
if(!chassis)
return 0
- if(energy_drain && chassis.cell.charge < energy_drain)
+ if(energy_drain && chassis.get_charge() < energy_drain)
return 0
if(!weapon_ready)
return 0
@@ -63,10 +63,10 @@
proc/rearm()
if(missiles < initial(missiles))
var/missiles_to_add = initial(missiles) - missiles
- while(chassis.cell.charge >= missile_energy_cost && missiles_to_add)
+ while(chassis.get_charge() >= missile_energy_cost && missiles_to_add)
missiles++
missiles_to_add--
- chassis.cell.charge -= missile_energy_cost
+ chassis.cell.use(missile_energy_cost)
chassis.log_message("Rearmed [src.name].")
return
@@ -263,7 +263,7 @@
fire(target)
if(!chassis)
return 0
- if(energy_drain && chassis.cell.charge < energy_drain)
+ if(energy_drain && chassis.get_charge() < energy_drain)
return 0
if(!weapon_ready)
return 0
@@ -271,8 +271,10 @@
playsound(chassis, 'AirHorn.ogg', 100, 1)
chassis.occupant_message("HONK")
for(var/mob/living/carbon/M in ohearers(6, chassis))
- if(istype(M, /mob/living/carbon/human) && istype(M:ears, /obj/item/clothing/ears/earmuffs))
- continue
+ if(istype(M, /mob/living/carbon/human))
+ var/mob/living/carbon/human/H = M
+ if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
+ continue
M << "HONK"
M.sleeping = 0
M.stuttering += 20
@@ -313,10 +315,10 @@
proc/rearm()
if(projectiles < initial(projectiles))
var/projectiles_to_add = initial(projectiles) - projectiles
- while(chassis.cell.charge >= projectile_energy_cost && projectiles_to_add)
+ while(chassis.get_charge() >= projectile_energy_cost && projectiles_to_add)
projectiles++
projectiles_to_add--
- chassis.cell.charge -= projectile_energy_cost
+ chassis.cell.use(projectile_energy_cost)
chassis.log_message("Rearmed [src.name].")
return
diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm
index 448ee099741..fcf8d798168 100644
--- a/code/game/mecha/mech_bay.dm
+++ b/code/game/mecha/mech_bay.dm
@@ -110,7 +110,7 @@
if(mecha in port.recharge_floor)
var/delta = min(max_charge, mecha.cell.maxcharge - mecha.cell.charge)
if(delta>0)
- mecha.cell.charge += delta
+ mecha.cell.give(delta)
port.use_power(delta*150)
else
mecha.occupant_message("Fully charged.")
@@ -181,7 +181,8 @@
output += {"Mech Bay Recharge Station Data:
Mecha: [recharge_floor.recharging_mecha||"None"]
"}
if(recharge_floor.recharging_mecha)
- output += "Cell charge: [recharge_floor.recharging_mecha.cell?"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]":"No powercell found"]
"
+ var/cell_charge = recharge_floor.recharging_mecha.get_charge()
+ output += "Cell charge: [isnull(cell_charge)?"No powercell found":"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]"]
"
output += "
"
if(!recharge_port)
output += "Mech Bay Power Port not initialized.
"
diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm
index b55f39fa821..78185a95aa0 100644
--- a/code/game/mecha/mecha.dm
+++ b/code/game/mecha/mecha.dm
@@ -106,7 +106,7 @@
/obj/mecha/proc/click_action(atom/target,mob/user)
if(!src.occupant || src.occupant != user ) return
if(user.stat) return
- if(state || !cell || cell.charge<=0) return
+ if(state || !get_charge()) return
if(src == target) return
var/dir_to_target = get_dir(src,target)
if(dir_to_target && !(dir_to_target & src.dir))//wrong direction
@@ -183,7 +183,7 @@
return 0
if(src.pr_inertial_movement.active())
return 0
- if(state || !cell || cell.charge<=0)
+ if(state || !get_charge())
return 0
var/move_result = 0
if(internal_damage&MECHA_INT_CONTROL_LOST)
@@ -428,8 +428,8 @@
return ex_act(rand(1,3))//should do for now
/obj/mecha/emp_act(severity)
- cell.charge -= min(cell.charge, cell.maxcharge/severity)
- src.log_message("EMP pulse detected")
+ cell.use(min(cell.charge, cell.maxcharge/severity))
+ src.log_message("EMP detected")
take_damage(100 / severity)
src.check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST),1)
return
@@ -839,13 +839,14 @@
/obj/mecha/proc/get_stats_part()
var/integrity = health/initial(health)*100
+ var/cell_charge = get_charge()
var/output = {"[internal_damage&MECHA_INT_FIRE?"INTERNAL FIRE
":null]
[internal_damage&MECHA_INT_TEMP_CONTROL?"LIFE SUPPORT SYSTEM MALFUNCTION
":null]
[internal_damage&MECHA_INT_TANK_BREACH?"GAS TANK BREACH
":null]
[internal_damage&MECHA_INT_CONTROL_LOST?"COORDINATION SYSTEM CALIBRATION FAILURE - Recalibrate
":null]
[integrity<30?"DAMAGE LEVEL CRITICAL
":null]
Integrity: [integrity]%
- Powercell charge: [cell.charge/cell.maxcharge*100]%
+ Powercell charge: [isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]
Air source: [use_internal_tank?"Internal Airtank":"Environment"]
Airtank pressure: [src.return_pressure()]kPa
Internal temperature: [src.air_contents.temperature]°K|[src.air_contents.temperature - T0C]°C
@@ -968,6 +969,10 @@
occupant.show_message(rendered, 2)
return
+/obj/mecha/proc/get_charge()//returns null if no powercell, else returns cell.charge
+ if(!src.cell) return
+ return max(0, src.cell.charge)
+
//////////////////////////////////////////
//////// Mecha global iterators ////////
diff --git a/code/game/mecha/mecha_construction.dm b/code/game/mecha/mecha_construction.dm
index 6a4b9f00fd1..df713618129 100644
--- a/code/game/mecha/mecha_construction.dm
+++ b/code/game/mecha/mecha_construction.dm
@@ -385,9 +385,9 @@
list("key"="/obj/item/weapon/wrench"),//9
list("key"="/obj/item/weapon/gun/energy/laser_gun"),//10
list("key"="/obj/item/weapon/screwdriver"),//11
- list("key"="/obj/item/weapon/stock_parts/adv_capacitor"),//12
+ list("key"="/obj/item/weapon/stock_parts/capacitor/adv"),//12
list("key"="/obj/item/weapon/screwdriver"),//13
- list("key"="/obj/item/weapon/stock_parts/adv_scanning_module"),//14
+ list("key"="/obj/item/weapon/stock_parts/scanning_module/adv"),//14
list("key"="/obj/item/weapon/screwdriver"),//15
list("key"="/obj/item/mecha_parts/circuitboard/gygax/targeting"),//16
list("key"="/obj/item/weapon/screwdriver"),//17
diff --git a/code/game/mecha/mecha_control_console.dm b/code/game/mecha/mecha_control_console.dm
index 91481150f73..2c394070f33 100644
--- a/code/game/mecha/mecha_control_console.dm
+++ b/code/game/mecha/mecha_control_console.dm
@@ -93,9 +93,10 @@
if(!istype(src.loc, /obj/mecha))
return 0
var/obj/mecha/M = src.loc
+ var/cell_charge = M.get_charge()
var/answer = {"Name: [M.name]
Integrity: [M.health/initial(M.health)*100]%
- Cell charge: [M.cell?"[M.cell.charge/M.cell.maxcharge*100]%":"Not found"]
+ Cell charge: [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]
Airtank: [M.return_pressure()]kPa
Pilot: [M.occupant||"None"]
Location: [get_area(M)||"Unknown"]
diff --git a/code/game/mecha/working/tools/tools.dm b/code/game/mecha/working/tools/tools.dm
index 55cc38c2b89..9b24a09d938 100644
--- a/code/game/mecha/working/tools/tools.dm
+++ b/code/game/mecha/working/tools/tools.dm
@@ -28,7 +28,7 @@
return 0
if(!chassis)
return 0
- if(energy_drain && chassis.cell.charge < energy_drain)
+ if(energy_drain && chassis.get_charge() < energy_drain)
return 0
if(!tool_ready)
return 0
@@ -143,6 +143,9 @@
var/turf/simulated/mineral/M = target
chassis.log_message("Drilled through [target]")
M.gets_drilled()
+ for(var/turf/simulated/mineral/N in range(chassis,1))
+ if(get_dir(chassis,N)&chassis.dir)
+ N.gets_drilled()
else
chassis.log_message("Drilled through [target]")
target.ex_act(2)