From 9a6391747ddda0003cbcc6650580493a568ee507 Mon Sep 17 00:00:00 2001 From: Kearel Date: Thu, 2 Jul 2015 13:55:27 -0500 Subject: [PATCH 1/5] fix trays Puts pikcup proc before loc is changed. --- code/game/objects/items.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 00693ec0a9..82c878603a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -140,7 +140,7 @@ if(temp && !temp.is_usable()) user << "You try to move your [temp.display_name], but cannot!" return - + src.pickup(user) if (istype(src.loc, /obj/item/weapon/storage)) var/obj/item/weapon/storage/S = src.loc S.remove_from_storage(src) @@ -157,8 +157,6 @@ return user.next_move = max(user.next_move+2,world.time + 2) user.put_in_active_hand(src) - if(src.loc == user) - src.pickup(user) return From b8e0015be17fe772d87aa57430b1934fadd53029 Mon Sep 17 00:00:00 2001 From: GinjaNinja32 Date: Sat, 4 Jul 2015 14:47:10 +0100 Subject: [PATCH 2/5] Changes cyborg HUD to not display a superfluous empty row Title. Modules with precisely 8, 16, 24 etc items were showing an extra row, this changes it from floor(X/8)+1 to just ceil(X/8). --- code/_onclick/hud/robot.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm index 2738cf3a7d..624e7006ee 100644 --- a/code/_onclick/hud/robot.dm +++ b/code/_onclick/hud/robot.dm @@ -210,7 +210,7 @@ var/obj/screen/robot_inventory if(!r.robot_modules_background) return - var/display_rows = round((r.module.modules.len) / 8) +1 //+1 because round() returns floor of number + var/display_rows = -round(-(r.module.modules.len) / 8) r.robot_modules_background.screen_loc = "CENTER-4:16,SOUTH+1:7 to CENTER+3:16,SOUTH+[display_rows]:7" r.client.screen += r.robot_modules_background From c46f32e8d7a02ccd9ea05525426b3bd9f5ca9f78 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sat, 4 Jul 2015 23:17:20 -0400 Subject: [PATCH 3/5] Airlock controller fixes Fixes airlocks opening their doors before the pumps have turned off. Fixes airlocks getting confused if you mash buttons in quick succession. --- .../embedded_controller/airlock_program.dm | 73 ++++++++----------- 1 file changed, 32 insertions(+), 41 deletions(-) diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 8cb3abb998..fabf499dc9 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -109,10 +109,14 @@ var/shutdown_pump = 0 switch(command) if("cycle_ext") - begin_cycle_out() + //only respond to these commands if the airlock isn't already doing something + //prevents the controller from getting confused and doing strange things + if(state == target_state) + begin_cycle_out() if("cycle_int") - begin_cycle_in() + if(state == target_state) + begin_cycle_in() if("cycle_ext_door") cycleDoors(TARGET_OUTOPEN) @@ -122,14 +126,6 @@ if("abort") stop_cycling() - /* - //dont do this. If the airlock can't get enough air to pressurize the person inside is stuck - state = STATE_PRESSURIZE - target_state = TARGET_NONE - memory["target_pressure"] = ONE_ATMOSPHERE - signalPump(tag_airpump, 1, 1, memory["target_pressure"]) - process() - */ if("force_ext") toggleDoor(memory["exterior_status"], tag_exterior_door, memory["secure"], "toggle") @@ -140,11 +136,9 @@ if("purge") memory["purge"] = !memory["purge"] if(memory["purge"]) - toggleDoor(memory["exterior_status"], tag_exterior_door, 1, "close") - toggleDoor(memory["interior_status"], tag_interior_door, 1, "close") - state = STATE_DEPRESSURIZE + close_doors() + state = STATE_PREPARE target_state = TARGET_NONE - signalPump(tag_airpump, 1, 0, 0) if("secure") memory["secure"] = !memory["secure"] @@ -188,12 +182,12 @@ var/target_pressure = memory["target_pressure"] if(memory["purge"]) + //purge apparently means clearing the airlock chamber to vacuum (then refilling, handled later) target_pressure = 0 + state = STATE_DEPRESSURIZE + signalPump(tag_airpump, 1, 0, 0) //send a signal to start depressurizing - if(memory["purge"]) - target_pressure = 0 - - if(chamber_pressure <= target_pressure) + else if(chamber_pressure <= target_pressure) state = STATE_PRESSURIZE signalPump(tag_airpump, 1, 1, target_pressure) //send a signal to start pressurizing @@ -201,40 +195,37 @@ state = STATE_DEPRESSURIZE signalPump(tag_airpump, 1, 0, target_pressure) //send a signal to start depressurizing - //Check for vacuum - this is set after the pumps so the pumps are aiming for 0 - if(!memory["target_pressure"]) - memory["target_pressure"] = ONE_ATMOSPHERE * 0.05 + //Make sure the airlock isn't aiming for pure vacuum - an impossibility + memory["target_pressure"] = max(target_pressure, ONE_ATMOSPHERE * 0.05) if(STATE_PRESSURIZE) if(memory["chamber_sensor_pressure"] >= memory["target_pressure"] * 0.95) - cycleDoors(target_state) - - state = STATE_IDLE - target_state = TARGET_NONE - + //not done until the pump has reported that it's off if(memory["pump_status"] != "off") signalPump(tag_airpump, 0) //send a signal to stop pumping + else + cycleDoors(target_state) + state = STATE_IDLE + target_state = TARGET_NONE if(STATE_DEPRESSURIZE) - if(memory["purge"]) - if(memory["chamber_sensor_pressure"] <= ONE_ATMOSPHERE * 0.05) - state = STATE_PRESSURIZE - signalPump(tag_airpump, 1, 1, memory["target_pressure"]) - - - else if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05) - cycleDoors(target_state) - - state = STATE_IDLE - target_state = TARGET_NONE - - //send a signal to stop pumping - if(memory["pump_status"] != "off") + if(memory["chamber_sensor_pressure"] <= memory["target_pressure"] * 1.05) + if(memory["purge"]) + memory["purge"] = 0 + memory["target_pressure"] = memory["internal_sensor_pressure"] + state = STATE_PREPARE + target_state = TARGET_NONE + + else if(memory["pump_status"] != "off") signalPump(tag_airpump, 0) + else + cycleDoors(target_state) + state = STATE_IDLE + target_state = TARGET_NONE - memory["processing"] = state != target_state + memory["processing"] = (state != target_state) return 1 From 6b550f7166c813b027d1814337cee39086218e57 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 5 Jul 2015 01:02:52 -0400 Subject: [PATCH 4/5] Fixes more instances of = instead of += inside loop --- code/ATMOSPHERICS/_atmospherics_helpers.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/ATMOSPHERICS/_atmospherics_helpers.dm b/code/ATMOSPHERICS/_atmospherics_helpers.dm index 47bd739a95..8cf5bcccf9 100644 --- a/code/ATMOSPHERICS/_atmospherics_helpers.dm +++ b/code/ATMOSPHERICS/_atmospherics_helpers.dm @@ -199,7 +199,7 @@ total_unfilterable_moles += source.gas[g] var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power = specific_power_gas[g]*ratio + total_specific_power += specific_power_gas[g]*ratio //Figure out how much of each gas to filter if (isnull(total_transfer_moles)) @@ -272,7 +272,7 @@ total_unfilterable_moles += source.gas[g] var/ratio = source.gas[g]/source.total_moles //converts the specific power per mole of pure gas to specific power per mole of input gas mix - total_specific_power = specific_power_gas[g]*ratio + total_specific_power += specific_power_gas[g]*ratio //Figure out how much of each gas to filter if (isnull(total_transfer_moles)) From bd59733fdb2216749269bf7ca9dae7872fd63ec0 Mon Sep 17 00:00:00 2001 From: mwerezak Date: Sun, 5 Jul 2015 01:18:38 -0400 Subject: [PATCH 5/5] Fixes #9714 Fixes incorrect arguments to calculate_transfer_moles() --- code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm | 4 ++-- code/ATMOSPHERICS/components/unary/vent_pump.dm | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm index 086df507b9..1899ee9dfd 100644 --- a/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm +++ b/code/ATMOSPHERICS/components/binary_devices/dp_vent_pump.dm @@ -120,14 +120,14 @@ if(pressure_delta > 0.5) if(pump_direction) //internal -> external if (node1 && (environment.temperature || air1.temperature)) - var/transfer_moles = calculate_transfer_moles(air1, environment) + var/transfer_moles = calculate_transfer_moles(air1, environment, pressure_delta) power_draw = pump_gas(src, air1, environment, transfer_moles, power_rating) if(power_draw >= 0 && network1) network1.update = 1 else //external -> internal if (node2 && (environment.temperature || air2.temperature)) - var/transfer_moles = calculate_transfer_moles(environment, air2, (network2)? network2.volume : 0) + var/transfer_moles = calculate_transfer_moles(environment, air2, pressure_delta, (network2)? network2.volume : 0) //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air2.volume/environment.volume) //group_multiplier gets divided out here diff --git a/code/ATMOSPHERICS/components/unary/vent_pump.dm b/code/ATMOSPHERICS/components/unary/vent_pump.dm index 4961d22e79..98a6c3baa2 100644 --- a/code/ATMOSPHERICS/components/unary/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary/vent_pump.dm @@ -169,10 +169,10 @@ if((environment.temperature || air_contents.temperature) && pressure_delta > 0.5) if(pump_direction) //internal -> external - var/transfer_moles = calculate_transfer_moles(air_contents, environment) + var/transfer_moles = calculate_transfer_moles(air_contents, environment, pressure_delta) power_draw = pump_gas(src, air_contents, environment, transfer_moles, power_rating) else //external -> internal - var/transfer_moles = calculate_transfer_moles(environment, air_contents, (network)? network.volume : 0) + var/transfer_moles = calculate_transfer_moles(environment, air_contents, pressure_delta, (network)? network.volume : 0) //limit flow rate from turfs transfer_moles = min(transfer_moles, environment.total_moles*air_contents.volume/environment.volume) //group_multiplier gets divided out here