From 688e0c480835cbfbfa1b01555d721b1ddd583dff Mon Sep 17 00:00:00 2001 From: panurgomatic Date: Wed, 2 Mar 2011 10:45:20 +0000 Subject: [PATCH] - Fixed "eternal pointing arrow" bug. - Vent pumps and scrubbers no longer spam radio broadcasts. Should help with lag a little. - Fixed Gygax construction. - Made Ripley more miner-friendly. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@1152 316c924e-a436-60f5-8080-3fe189b3f50e --- .../components/unary/vent_pump.dm | 6 ++- .../components/unary/vent_scrubber.dm | 6 ++- code/game/cellautomata.dm | 6 ++- code/game/machinery/alarm.dm | 54 ++++++++----------- code/game/master_controller.dm | 7 +++ code/game/mecha/combat/honker.dm | 3 +- code/game/mecha/combat/marauder.dm | 9 ++-- code/game/mecha/combat/weapons/weapons.dm | 18 ++++--- code/game/mecha/mech_bay.dm | 5 +- code/game/mecha/mecha.dm | 15 ++++-- code/game/mecha/mecha_construction.dm | 4 +- code/game/mecha/mecha_control_console.dm | 3 +- code/game/mecha/working/tools/tools.dm | 5 +- 13 files changed, 80 insertions(+), 61 deletions(-) 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)