- 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
This commit is contained in:
panurgomatic
2011-03-02 10:45:20 +00:00
parent 2bf36fc52d
commit 688e0c4808
13 changed files with 80 additions and 61 deletions
@@ -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)
@@ -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
+4 -2
View File
@@ -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("<b>[usr]</b> points to [src]")
usr.visible_message("<b>[usr]</b> points to [this]")
/obj/decal/point/point()
set src in oview()
+23 -31
View File
@@ -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 = "<B>[long_name]</B>:<BR>"
if(data)
sensor_part += {"<B>Operating:</B> <A href='?src=\ref[src];scr_toggle_power=[id_tag]'>[(data["on"]?"on":"off")]</A><BR>
<B>Type:</B> <A href='?src=\ref[src];scr_toggle_scrubbing=[id_tag]'>[(data["scrubbing"]?"scrubbing":"syphoning")]</A><BR>"}
sensor_part += {"<B>Operating:</B> <A href='?src=\ref[src];command=toggle_power;id=[id_tag]'>[(data["on"]?"on":"off")]</A><BR>
<B>Type:</B> <A href='?src=\ref[src];command=toggle_scrubbing;id=[id_tag]'>[(data["scrubbing"]?"scrubbing":"syphoning")]</A><BR>"}
if(data["scrubbing"])
sensor_part += "<B>Filtering:</B> Carbon Dioxide <A href='?src=\ref[src];scr_toggle_co2_scrub=[id_tag]'>([(data["filter_co2"]?"on":"off")])</A>; Toxins <A href='?src=\ref[src];scr_toggle_tox_scrub=[id_tag]'>([data["filter_toxins"]?"on":"off"])</A>; Nitrous Oxide <A href='?src=\ref[src];scr_toggle_n2o_scrub=[id_tag]'>([data["filter_n2o"]?"on":"off"])</A><BR>"
sensor_part += "<A href='?src=\ref[src];scr_toggle_panic_siphon=[id_tag]'><font color='[(data["panic"]?"blue'>Dea":"red'>A")]ctivate panic syphon</A></font><BR>"
sensor_part += "<B>Filtering:</B> Carbon Dioxide <A href='?src=\ref[src];command=toggle_co2_scrub;id=[id_tag]'>([(data["filter_co2"]?"on":"off")])</A>; Toxins <A href='?src=\ref[src];command=toggle_tox_scrub;id=[id_tag]'>([data["filter_toxins"]?"on":"off"])</A>; Nitrous Oxide <A href='?src=\ref[src];command=toggle_n2o_scrub;id=[id_tag]'>([data["filter_n2o"]?"on":"off"])</A><BR>"
sensor_part += "<A href='?src=\ref[src];command=toggle_panic_siphon;id=[id_tag]'><font color='[(data["panic"]?"blue'>Dea":"red'>A")]ctivate panic syphon</A></font><BR>"
if(data["panic"])
sensor_part += "<font color='red'><B>PANIC SYPHON ACTIVATED</B></font>"
/*
if (data["timestamp"]+3 < air_master.current_cycle)
sensor_part += "<font color='red'><B>[long_name] not responding.</B></font><BR>"
*/
sensor_part += "<HR>"
else
sensor_part = "<FONT color='red'>[long_name] can not be found!</FONT><BR><HR>"
@@ -242,10 +246,12 @@
var/sensor_part = "<B>[long_name]</B>:<BR>"
if(data)
sensor_part += {"<B>Operating:</B> <A href='?src=\ref[src];v_toggle_power=[id_tag]'>[data["power"]]</A><BR>
<B>Pressure checks:</B> <A href='?src=\ref[src];v_toggle_checks=[id_tag]'>[data["checks"]?"on":"off"]</A><BR>"}
sensor_part += {"<B>Operating:</B> <A href='?src=\ref[src];command=power_toggle;id=[id_tag]'>[data["power"]]</A><BR>
<B>Pressure checks:</B> <A href='?src=\ref[src];command=toggle_checks;id=[id_tag]'>[data["checks"]?"on":"off"]</A><BR>"}
/*
if (data["timestamp"]+3 < air_master.current_cycle)
sensor_part += "<font color='red'><B>[long_name] not responding.</B></font><BR>"
*/
sensor_part += "<HR>"
else
sensor_part = "<FONT color='red'>[long_name] can not be found!</FONT><HR>"
@@ -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)*/
+7
View File
@@ -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)
+2 -1
View File
@@ -31,12 +31,13 @@
return
/obj/mecha/combat/honker/get_stats_part()
var/cell_charge = get_charge()
var/output = {"[internal_damage&MECHA_INT_FIRE?"<font color='red'><b>INTERNAL FIRE</b></font><br>":null]
[internal_damage&MECHA_INT_TEMP_CONTROL?"<font color='red'><b>CLOWN SUPPORT SYSTEM MALFUNCTION</b></font><br>":null]
[internal_damage&MECHA_INT_TANK_BREACH?"<font color='red'><b>GAS TANK HONK</b></font><br>":null]
[internal_damage&MECHA_INT_CONTROL_LOST?"<font color='red'><b>HONK-A-DOODLE</b></font> - <a href='?src=\ref[src];repair_int_control_lost=1'>Recalibrate</a><br>":null]
<b>IntegriHONK: </b> [health/initial(health)*100] %) <br>
<b>PowerHONK charge: </b>[cell.charge/cell.maxcharge*100] %)<br>
<b>PowerHONK charge: </b>[isnull(cell_charge)?"Someone HONKed powerHonk!!!":"[cell.percent()]%"])<br>
<b>AirHONK pressure: </b>[src.return_pressure()]HoNKs<br>
<b>Internal HONKature: </b> [src.air_contents.temperature]&deg;honK|[src.air_contents.temperature - T0C]&deg;honCk<br>
<b>Lights: </b>[lights?"on":"off"]<br>
+5 -4
View File
@@ -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("<font color='[src.thrusters?"blue":"red"]'>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("<font color='[src.zoom?"blue":"red"]'>Zoom mode [zoom?"en":"dis"]abled.</font>")
if(zoom)
src.occupant.client.view = 12
src.occupant << sound('imag_enh.ogg',volume=50)
+10 -8
View File
@@ -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("<font color='red' size='5'>HONK</font>")
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 << "<font color='red' size='7'>HONK</font>"
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
+3 -2
View File
@@ -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("<font color='blue'><b>Fully charged.</b></font>")
@@ -181,7 +181,8 @@
output += {"<b>Mech Bay Recharge Station Data:</b><div style='margin-left: 15px;'>
<b>Mecha: </b>[recharge_floor.recharging_mecha||"None"]<br>"}
if(recharge_floor.recharging_mecha)
output += "<b>Cell charge: </b>[recharge_floor.recharging_mecha.cell?"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]":"No powercell found"]<br>"
var/cell_charge = recharge_floor.recharging_mecha.get_charge()
output += "<b>Cell charge: </b>[isnull(cell_charge)?"No powercell found":"[recharge_floor.recharging_mecha.cell.charge]/[recharge_floor.recharging_mecha.cell.maxcharge]"]<br>"
output += "</div>"
if(!recharge_port)
output += "<font color='red'>Mech Bay Power Port not initialized.</font><br>"
+10 -5
View File
@@ -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?"<font color='red'><b>INTERNAL FIRE</b></font><br>":null]
[internal_damage&MECHA_INT_TEMP_CONTROL?"<font color='red'><b>LIFE SUPPORT SYSTEM MALFUNCTION</b></font><br>":null]
[internal_damage&MECHA_INT_TANK_BREACH?"<font color='red'><b>GAS TANK BREACH</b></font><br>":null]
[internal_damage&MECHA_INT_CONTROL_LOST?"<font color='red'><b>COORDINATION SYSTEM CALIBRATION FAILURE</b></font> - <a href='?src=\ref[src];repair_int_control_lost=1'>Recalibrate</a><br>":null]
[integrity<30?"<font color='red'><b>DAMAGE LEVEL CRITICAL</b></font><br>":null]
<b>Integrity: </b> [integrity]%<br>
<b>Powercell charge: </b>[cell.charge/cell.maxcharge*100]%<br>
<b>Powercell charge: </b>[isnull(cell_charge)?"No powercell installed":"[cell.percent()]%"]<br>
<b>Air source: </b>[use_internal_tank?"Internal Airtank":"Environment"]<br>
<b>Airtank pressure: </b>[src.return_pressure()]kPa<br>
<b>Internal temperature: </b> [src.air_contents.temperature]&deg;K|[src.air_contents.temperature - T0C]&deg;C<br>
@@ -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 ////////
+2 -2
View File
@@ -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
+2 -1
View File
@@ -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 = {"<b>Name:</b> [M.name]<br>
<b>Integrity:</b> [M.health/initial(M.health)*100]%<br>
<b>Cell charge:</b> [M.cell?"[M.cell.charge/M.cell.maxcharge*100]%":"Not found"]<br>
<b>Cell charge:</b> [isnull(cell_charge)?"Not found":"[M.cell.percent()]%"]<br>
<b>Airtank:</b> [M.return_pressure()]kPa<br>
<b>Pilot:</b> [M.occupant||"None"]<br>
<b>Location:</b> [get_area(M)||"Unknown"]<br>
+4 -1
View File
@@ -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)