From bd7c475fccb014e5747507a81b7b3c1c31e71425 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Thu, 8 Oct 2015 20:29:39 +0200 Subject: [PATCH 01/13] Stack material use now depends on charge costs. This ensures one does not have to remember to set uses_charge equal to the length of the charge_cost list. Fixes #10943. --- code/game/objects/items/stacks/stack.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 94b6db4f95..8c5ac01c7a 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -191,7 +191,7 @@ else if(get_amount() < used) return 0 - for(var/i = 1 to uses_charge) + for(var/i = 1 to charge_costs.len) var/datum/matter_synth/S = synths[i] S.use_charge(charge_costs[i] * used) // Doesn't need to be deleted return 1 @@ -264,8 +264,8 @@ return 0 var/datum/matter_synth/S = synths[1] . = round(S.get_charge() / charge_costs[1]) - if(uses_charge > 1) - for(var/i = 2 to uses_charge) + if(charge_costs.len > 1) + for(var/i = 2 to charge_costs.len) S = synths[i] . = min(., round(S.get_charge() / charge_costs[i])) return From 40ab99b354b412092ff9b1b9191d0a9aec6eeea1 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Thu, 8 Oct 2015 16:36:51 -0400 Subject: [PATCH 02/13] Rubber bullets and beanbags now check melee armour instead of bullet armour --- .../modules/projectiles/projectile/bullets.dm | 4 +++- html/changelogs/HarpyEagle-rubberbullets.yml | 20 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/HarpyEagle-rubberbullets.yml diff --git a/code/modules/projectiles/projectile/bullets.dm b/code/modules/projectiles/projectile/bullets.dm index f2c10fd8a9..12fae31e4e 100644 --- a/code/modules/projectiles/projectile/bullets.dm +++ b/code/modules/projectiles/projectile/bullets.dm @@ -110,6 +110,7 @@ /obj/item/projectile/bullet/pistol/rubber //"rubber" bullets name = "rubber bullet" + check_armour = "melee" damage = 10 agony = 40 embed = 0 @@ -123,6 +124,7 @@ /obj/item/projectile/bullet/shotgun/beanbag //because beanbags are not bullets name = "beanbag" + check_armour = "melee" damage = 20 agony = 60 embed = 0 @@ -196,4 +198,4 @@ /obj/item/projectile/bullet/shotgun/practice name = "practice" - damage = 5 + damage = 5 diff --git a/html/changelogs/HarpyEagle-rubberbullets.yml b/html/changelogs/HarpyEagle-rubberbullets.yml new file mode 100644 index 0000000000..841373a9f9 --- /dev/null +++ b/html/changelogs/HarpyEagle-rubberbullets.yml @@ -0,0 +1,20 @@ +################################ +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +author: HarpyEagle +delete-after: True +changes: + - tweak: "Rubber bullets and beanbags now are now resisted by melee armour." From fa661f998f8307a40ab8084e601efae3345a5300 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Thu, 8 Oct 2015 23:26:05 -0400 Subject: [PATCH 03/13] TTV Refactor Ensures TTV icon update occurs properly and removes the need for sleep() by updating tank Destroy() to account for TTVs. Collects duplicated code into a transfer_valve/remove_tank() proc. --- .../objects/items/devices/transfer_valve.dm | 49 +++++++++++-------- .../game/objects/items/weapons/tanks/tanks.dm | 14 +++++- 2 files changed, 41 insertions(+), 22 deletions(-) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 36c3b3d11f..e44f759547 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -99,17 +99,9 @@ if (src.loc != usr) return 0 if(tank_one && href_list["tankone"]) - split_gases() - valve_open = 0 - tank_one.loc = get_turf(src) - tank_one = null - update_icon() + remove_tank(tank_one) else if(tank_two && href_list["tanktwo"]) - split_gases() - valve_open = 0 - tank_two.loc = get_turf(src) - tank_two = null - update_icon() + remove_tank(tank_two) else if(href_list["open"]) toggle_valve() else if(attached_device) @@ -148,20 +140,43 @@ if(attached_device) overlays += "device" +/obj/item/device/transfer_valve/proc/remove_tank(obj/item/weapon/tank/T) + if(tank_one == T) + split_gases() + tank_one = null + else if(tank_two == T) + split_gases() + tank_two = null + else + return + + T.loc = get_turf(src) + update_icon() + /obj/item/device/transfer_valve/proc/merge_gases() + if(valve_open) + return tank_two.air_contents.volume += tank_one.air_contents.volume var/datum/gas_mixture/temp temp = tank_one.air_contents.remove_ratio(1) tank_two.air_contents.merge(temp) + valve_open = 1 /obj/item/device/transfer_valve/proc/split_gases() - if (!valve_open || !tank_one || !tank_two) + if(!valve_open) return + + valve_open = 0 + + if(deleted(tank_one) || deleted(tank_two)) + return + var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume var/datum/gas_mixture/temp temp = tank_two.air_contents.remove_ratio(ratio1) tank_one.air_contents.merge(temp) tank_two.air_contents.volume -= tank_one.air_contents.volume + /* Exadv1: I know this isn't how it's going to work, but this was just to check @@ -169,8 +184,7 @@ */ /obj/item/device/transfer_valve/proc/toggle_valve() - if(valve_open==0 && (tank_one && tank_two)) - valve_open = 1 + if(!valve_open && (tank_one && tank_two)) var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) @@ -196,16 +210,11 @@ message_admins(log_str, 0, 1) log_game(log_str) merge_gases() - spawn(20) // In case one tank bursts - for (var/i=0,i<5,i++) - src.update_icon() - sleep(10) - src.update_icon() else if(valve_open==1 && (tank_one && tank_two)) split_gases() - valve_open = 0 - src.update_icon() + + src.update_icon() // this doesn't do anything but the timer etc. expects it to be here // eventually maybe have it update icon to show state (timer, prox etc.) like old bombs diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 59627bad11..1d1b2ea103 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -36,6 +36,10 @@ qdel(air_contents) processing_objects.Remove(src) + + if(istype(loc, /obj/item/device/transfer_valve)) + var/obj/item/device/transfer_valve/TTV = loc + TTV.remove_tank(src) ..() @@ -280,7 +284,10 @@ qdel(src) else if(pressure > TANK_RUPTURE_PRESSURE) - //world << "\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]" + #ifdef FIREDBG + log_debug("\blue[x],[y] tank is rupturing: [pressure] kPa, integrity [integrity]") + #endif + if(integrity <= 0) var/turf/simulated/T = get_turf(src) if(!T) @@ -292,7 +299,10 @@ integrity-- else if(pressure > TANK_LEAK_PRESSURE) - //world << "\blue[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]" + #ifdef FIREDBG + log_debug("\blue[x],[y] tank is leaking: [pressure] kPa, integrity [integrity]") + #endif + if(integrity <= 0) var/turf/simulated/T = get_turf(src) if(!T) From 9639d608a6875b7f82ad2e109328cd63c3da69f7 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Thu, 8 Oct 2015 23:29:37 -0400 Subject: [PATCH 04/13] Fixes calculate_firelevel() not counting oxidizer Fixes calculate_firelevel() not counting oxidizer when determining the ratio of reactants to other gases. As well firelevel calculation is now done separately for burning gas and burning liquid. Adjusted FIRE_LIQUID_BURNRATE_MULT so that liquid burn rate is unaffected by this fix, which will result in generally higher firelevels and thus faster burn rates. --- code/ZAS/Fire.dm | 44 ++++++++++++++++++++++---------------------- code/setup.dm | 2 +- 2 files changed, 23 insertions(+), 23 deletions(-) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index 501c49ae55..dba966e9fb 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -1,13 +1,9 @@ /* Making Bombs with ZAS: -Make burny fire with lots of burning -Draw off 5000K gas from burny fire -Separate gas into oxygen and phoron components -Obtain phoron and oxygen tanks filled up about 50-75% with normal-temp gas -Fill rest with super hot gas from separated canisters, they should be about 125C now. -Attach to transfer valve and open. BOOM. - +Get gas to react in an air tank so that it gains pressure. If it gains enough pressure, it goes boom. +The more pressure, the more boom. +If it gains pressure too slowly, it may leak or just rupture instead of exploding. */ //#define FIREDBG @@ -268,16 +264,16 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //determine how far the reaction can progress var/reaction_limit = min(total_oxidizers*(FIRE_REACTION_FUEL_AMOUNT/FIRE_REACTION_OXIDIZER_AMOUNT), total_fuel) //stoichiometric limit - //calculate the firelevel. - var/firelevel = calculate_firelevel(total_fuel, total_oxidizers, reaction_limit) - var/firelevel_ratio = firelevel / vsc.fire_firelevel_multiplier - //vapour fuels are extremely volatile! The reaction progress is a percentage of the total fuel (similar to old zburn).) + var/gas_firelevel = calculate_firelevel(gas_fuel, total_oxidizers, reaction_limit, volume*group_multiplier) / vsc.fire_firelevel_multiplier var/min_burn = 0.30*volume*group_multiplier/CELL_VOLUME //in moles - so that fires with very small gas concentrations burn out fast - var/gas_reaction_progress = min(max(min_burn, firelevel_ratio*gas_fuel)*FIRE_GAS_BURNRATE_MULT, gas_fuel) + var/gas_reaction_progress = min(max(min_burn, gas_firelevel*gas_fuel)*FIRE_GAS_BURNRATE_MULT, gas_fuel) //liquid fuels are not as volatile, and the reaction progress depends on the size of the area that is burning. Limit the burn rate to a certain amount per area. - var/liquid_reaction_progress = min((firelevel_ratio*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT, liquid_fuel) + var/liquid_firelevel = calculate_firelevel(liquid_fuel, total_oxidizers, reaction_limit, 0) / vsc.fire_firelevel_multiplier + var/liquid_reaction_progress = min((liquid_firelevel*0.2 + 0.05)*fuel_area*FIRE_LIQUID_BURNRATE_MULT, liquid_fuel) + + var/firelevel = (gas_fuel*gas_firelevel + liquid_fuel*liquid_firelevel)/total_fuel var/total_reaction_progress = gas_reaction_progress + liquid_reaction_progress var/used_fuel = min(total_reaction_progress, reaction_limit) @@ -286,7 +282,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) #ifdef FIREDBG log_debug("gas_fuel = [gas_fuel], liquid_fuel = [liquid_fuel], total_oxidizers = [total_oxidizers]") log_debug("fuel_area = [fuel_area], total_fuel = [total_fuel], reaction_limit = [reaction_limit]") - log_debug("firelevel -> [firelevel] / [vsc.fire_firelevel_multiplier]") + log_debug("firelevel -> [firelevel] (gas: [gas_firelevel], liquid: [liquid_firelevel])") log_debug("liquid_reaction_progress = [liquid_reaction_progress]") log_debug("gas_reaction_progress = [gas_reaction_progress]") log_debug("total_reaction_progress = [total_reaction_progress]") @@ -315,13 +311,13 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) //calculate the energy produced by the reaction and then set the new temperature of the mix temperature = (starting_energy + vsc.fire_fuel_energy_release * (used_gas_fuel + used_liquid_fuel)) / heat_capacity() + update_values() #ifdef FIREDBG log_debug("used_gas_fuel = [used_gas_fuel]; used_liquid_fuel = [used_liquid_fuel]; total = [used_fuel]") - log_debug("new temperature = [temperature]") + log_debug("new temperature = [temperature]; new pressure = [return_pressure()]") #endif - - update_values() + return firelevel datum/gas_mixture/proc/check_recombustability(list/fuel_objs) @@ -363,27 +359,31 @@ datum/gas_mixture/proc/check_recombustability(list/fuel_objs) break //returns a value between 0 and vsc.fire_firelevel_multiplier -/datum/gas_mixture/proc/calculate_firelevel(total_fuel, total_oxidizers, reaction_limit) +/datum/gas_mixture/proc/calculate_firelevel(total_fuel, total_oxidizers, reaction_limit, gas_volume) //Calculates the firelevel based on one equation instead of having to do this multiple times in different areas. var/firelevel = 0 var/total_combustables = (total_fuel + total_oxidizers) + var/active_combustables = (FIRE_REACTION_OXIDIZER_AMOUNT/FIRE_REACTION_FUEL_AMOUNT + 1)*reaction_limit if(total_combustables > 0) //slows down the burning when the concentration of the reactants is low - var/dampening_multiplier = min(1, reaction_limit / (total_moles/group_multiplier)) + var/damping_multiplier = min(1, active_combustables / (total_moles/group_multiplier)) + + //weight the damping mult so that it only really brings down the firelevel when the ratio is closer to 0 + damping_multiplier = 2*damping_multiplier - (damping_multiplier*damping_multiplier) //calculates how close the mixture of the reactants is to the optimum - //fires burn better when there is more oxidizer -- too much fuel will choke them out a bit, reducing firelevel. + //fires burn better when there is more oxidizer -- too much fuel will choke the fire out a bit, reducing firelevel. var/mix_multiplier = 1 / (1 + (5 * ((total_fuel / total_combustables) ** 2))) #ifdef FIREDBG - ASSERT(dampening_multiplier <= 1) + ASSERT(damping_multiplier <= 1) ASSERT(mix_multiplier <= 1) #endif //toss everything together -- should produce a value between 0 and fire_firelevel_multiplier - firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * dampening_multiplier + firelevel = vsc.fire_firelevel_multiplier * mix_multiplier * damping_multiplier return max( 0, firelevel) diff --git a/code/setup.dm b/code/setup.dm index be0989b191..7473822cc6 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -142,7 +142,7 @@ //These control the speed at which fire burns #define FIRE_GAS_BURNRATE_MULT 1 -#define FIRE_LIQUID_BURNRATE_MULT 1 +#define FIRE_LIQUID_BURNRATE_MULT 0.4 //If the fire is burning slower than this rate then the reaction is going too slow to be self sustaining and the fire burns itself out. //This ensures that fires don't grind to a near-halt while still remaining active forever. From 1cf6ace74e55e3b05bf9893cc3d2e057cf2aec1f Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Fri, 9 Oct 2015 01:04:57 -0400 Subject: [PATCH 05/13] Fixes #11071, #10936 Adjusts fire_fuel_energy_release to compensate for fixed fire heat release. Adjusts liquid fire burn parameters so that liquid fuel fire heat release and burn duration is unaffected. --- code/ZAS/Gas.dm | 3 +++ code/ZAS/Variable Settings.dm | 3 ++- code/setup.dm | 6 +++--- 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/code/ZAS/Gas.dm b/code/ZAS/Gas.dm index 0f3faa09b4..20dd67bf34 100644 --- a/code/ZAS/Gas.dm +++ b/code/ZAS/Gas.dm @@ -21,6 +21,9 @@ /xgm_gas/phoron id = "phoron" name = "Phoron" + + //Note that this has a significant impact on TTV yield. + //Because it is so high, any leftover phoron soaks up a lot of heat and drops the yield pressure. specific_heat = 200 // J/(mol*K) //Hypothetical group 14 (same as carbon), period 8 element. diff --git a/code/ZAS/Variable Settings.dm b/code/ZAS/Variable Settings.dm index c152159b7a..7700fee2bb 100644 --- a/code/ZAS/Variable Settings.dm +++ b/code/ZAS/Variable Settings.dm @@ -9,7 +9,8 @@ var/global/vs_control/vsc = new var/fire_firelevel_multiplier_NAME = "Fire - Firelevel Constant" var/fire_firelevel_multiplier_DESC = "Multiplied by the equation for firelevel, affects mainly the extingiushing of fires." - var/fire_fuel_energy_release = 397000 + //Note that this parameter and the phoron heat capacity have a significant impact on TTV yield. + var/fire_fuel_energy_release = 866000 //J/mol. Adjusted to compensate for fire energy release being fixed, was 397000 var/fire_fuel_energy_release_NAME = "Fire - Fuel energy release" var/fire_fuel_energy_release_DESC = "The energy in joule released when burning one mol of a burnable substance" diff --git a/code/setup.dm b/code/setup.dm index 7473822cc6..8371ca3cdd 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -142,15 +142,15 @@ //These control the speed at which fire burns #define FIRE_GAS_BURNRATE_MULT 1 -#define FIRE_LIQUID_BURNRATE_MULT 0.4 +#define FIRE_LIQUID_BURNRATE_MULT 0.225 //If the fire is burning slower than this rate then the reaction is going too slow to be self sustaining and the fire burns itself out. //This ensures that fires don't grind to a near-halt while still remaining active forever. #define FIRE_GAS_MIN_BURNRATE 0.01 -#define FIRE_LIQUD_MIN_BURNRATE 0.01 +#define FIRE_LIQUD_MIN_BURNRATE 0.0025 //How many moles of fuel are contained within one solid/liquid fuel volume unit -#define LIQUIDFUEL_AMOUNT_TO_MOL 1 //mol/volume unit +#define LIQUIDFUEL_AMOUNT_TO_MOL 0.45 //mol/volume unit #define T0C 273.15 // 0.0 degrees celcius #define T20C 293.15 // 20.0 degrees celcius From 63838b01d422d115c342b598883be9fdd11f6759 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Fri, 9 Oct 2015 11:18:12 -0400 Subject: [PATCH 06/13] Updates preset TTV bombs, adds debug verb --- .../objects/effects/spawners/bombspawner.dm | 83 ++++++++++++------- code/modules/admin/verbs/mapping.dm | 1 + 2 files changed, 53 insertions(+), 31 deletions(-) diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 547931a511..05d1a41bf2 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -105,27 +105,61 @@ qdel(src) */ +/client/proc/spawn_tanktransferbomb() + set category = "Debug" + set desc = "Spawn a tank transfer valve bomb" + set name = "Instant TTV" + + if(!check_rights(R_SPAWN)) return + + var/obj/effect/spawner/newbomb/proto = /obj/effect/spawner/newbomb/radio/custom + + var/p = input("Enter phoron amount (mol):","Phoron", initial(proto.phoron_amt)) as num|null + if(p == null) return + + var/o = input("Enter oxygen amount (mol):","Oxygen", initial(proto.oxygen_amt)) as num|null + if(o == null) return + + var/c = input("Enter carbon dioxide amount (mol):","Carbon Dioxide", initial(proto.carbon_amt)) as num|null + if(c == null) return + + new /obj/effect/spawner/newbomb/radio/custom(get_turf(mob), p, o, c) + /obj/effect/spawner/newbomb - name = "bomb" + name = "TTV bomb" icon = 'icons/mob/screen1.dmi' icon_state = "x" - var/btype = 0 // 0=radio, 1=prox, 2=time + + var/assembly_type = /obj/item/device/assembly/signaler + + //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa is 16.44 mol. + var/phoron_amt = 10.96 + var/oxygen_amt = 16.44 + var/carbon_amt = 0.0 - timer - btype = 2 +/obj/effect/spawner/newbomb/timer + name = "TTV bomb - timer" + assembly_type = /obj/item/device/assembly/timer - syndicate +/obj/effect/spawner/newbomb/timer/syndicate + name = "TTV bomb - merc" + //High yield bombs. Yes, it is possible to make these with toxins + phoron_amt = 15.66 + oxygen_amt = 24.66 - proximity - btype = 1 +/obj/effect/spawner/newbomb/proximity + name = "TTV bomb - proximity" + assembly_type = /obj/item/device/assembly/prox_sensor - radio - btype = 0 - - -/obj/effect/spawner/newbomb/New() +/obj/effect/spawner/newbomb/radio/custom/New(var/newloc, ph, ox, co) + if(ph != null) phoron_amt = ph + if(ox != null) oxygen_amt = ox + if(co != null) carbon_amt = co ..() +/obj/effect/spawner/newbomb/New(newloc) + ..(newloc) + var/obj/item/device/transfer_valve/V = new(src.loc) var/obj/item/weapon/tank/phoron/PT = new(V) var/obj/item/weapon/tank/oxygen/OT = new(V) @@ -137,28 +171,15 @@ OT.master = V PT.air_contents.temperature = PHORON_FLASHPOINT - PT.air_contents.adjust_multi("phoron", 12, "carbon_dioxide", 8) + PT.air_contents.gas["phoron"] = phoron_amt + PT.air_contents.gas["carbon_dioxide"] = carbon_amt + PT.air_contents.update_values() OT.air_contents.temperature = PHORON_FLASHPOINT - OT.air_contents.adjust_gas("oxygen", 20) + OT.air_contents.gas["oxygen"] = oxygen_amt + OT.air_contents.update_values() - var/obj/item/device/assembly/S - - switch (src.btype) - // radio - if (0) - - S = new/obj/item/device/assembly/signaler(V) - - // proximity - if (1) - - S = new/obj/item/device/assembly/prox_sensor(V) - - // timer - if (2) - - S = new/obj/item/device/assembly/timer(V) + var/obj/item/device/assembly/S = new assembly_type(V) V.attached_device = S diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index bd3c4be0d9..29d2b95d88 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -162,6 +162,7 @@ var/list/debug_verbs = list ( ,/client/proc/testZAScolors_remove ,/client/proc/setup_supermatter_engine ,/client/proc/atmos_toggle_debug + ,/client/proc/spawn_tanktransferbomb ) From 6c3bbb9ee82f36e35f1503a16a301d9604bbdff9 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Fri, 9 Oct 2015 11:21:12 -0400 Subject: [PATCH 07/13] Updates changelog, fixes comment --- .../objects/effects/spawners/bombspawner.dm | 2 +- html/changelogs/HarpyEagle-ttv.yml | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/HarpyEagle-ttv.yml diff --git a/code/game/objects/effects/spawners/bombspawner.dm b/code/game/objects/effects/spawners/bombspawner.dm index 05d1a41bf2..fb4716043f 100644 --- a/code/game/objects/effects/spawners/bombspawner.dm +++ b/code/game/objects/effects/spawners/bombspawner.dm @@ -132,7 +132,7 @@ var/assembly_type = /obj/item/device/assembly/signaler - //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa is 16.44 mol. + //Note that the maximum amount of gas you can put in a 70L air tank at 1013.25 kPa and 519K is 16.44 mol. var/phoron_amt = 10.96 var/oxygen_amt = 16.44 var/carbon_amt = 0.0 diff --git a/html/changelogs/HarpyEagle-ttv.yml b/html/changelogs/HarpyEagle-ttv.yml new file mode 100644 index 0000000000..67d426e234 --- /dev/null +++ b/html/changelogs/HarpyEagle-ttv.yml @@ -0,0 +1,21 @@ +################################ +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +author: HarpyEagle +delete-after: True +changes: + - bugfix: "Fixed a couple of bugs causing phoron gas fires to burn cooler and slower than they were supposed to." + - bugfix: "Merc bombs are now appropriately explosive again. Same goes for bombs made by toxins." From 80cc83dbf8cc39aebec64f240c1a68bdef15ec05 Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Fri, 9 Oct 2015 17:44:30 +0200 Subject: [PATCH 08/13] Fixes backup power test light --- code/datums/wires/airlock.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index a0f1f9c7f1..b204dc4eb0 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -41,7 +41,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 (A.locked ? "The door bolts have fallen!" : "The door bolts look up."), ((A.lights && haspower) ? "The door bolt lights are on." : "The door bolt lights are off!"), ((haspower) ? "The test light is on." : "The test light is off!"), - ((A.backupPowerCablesCut()) ? "The backup power light is off!" : "The backup power light is on."), + ((A.backup_power_lost_until) ? "The backup power light is off!" : "The backup power light is on."), ((A.aiControlDisabled==0 && !A.emagged && haspower)? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."), ((A.safe==0 && haspower)? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."), ((A.normalspeed==0 && haspower)? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off."), From 5684befee2da7cc29d4d6b20b8adc4e06cda0211 Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Fri, 9 Oct 2015 18:24:19 -0400 Subject: [PATCH 09/13] Fixes #11262 --- code/modules/mob/living/carbon/breathe.dm | 2 +- code/modules/mob/living/carbon/human/human.dm | 2 +- code/modules/mob/living/carbon/human/life.dm | 6 ++++++ code/modules/organs/organ.dm | 3 +++ 4 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/carbon/breathe.dm b/code/modules/mob/living/carbon/breathe.dm index b467b88cd2..2746e0c82e 100644 --- a/code/modules/mob/living/carbon/breathe.dm +++ b/code/modules/mob/living/carbon/breathe.dm @@ -49,7 +49,7 @@ breath = environment.remove_volume(volume_needed) handle_chemical_smoke(environment) //handle chemical smoke while we're at it - if(breath) + if(breath && breath.total_moles) //handle mask filtering if(istype(wear_mask, /obj/item/clothing/mask) && breath) var/obj/item/clothing/mask/M = wear_mask diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 1ebbd792c6..9987f7509e 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -967,7 +967,7 @@ if(L && !L.is_bruised()) src.custom_pain("You feel a stabbing pain in your chest!", 1) - L.damage = L.min_bruised_damage + L.bruise() /* /mob/living/carbon/human/verb/simulate() diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index efb450db44..cbec800efd 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -370,6 +370,12 @@ if(status_flags & GODMODE) return + //exposure to extreme pressures can rupture lungs + if(breath && (breath.total_moles < BREATH_MOLES / 5 || breath.total_moles > BREATH_MOLES * 5)) + if(!is_lung_ruptured() && prob(5)) + rupture_lung() + + //check if we actually need to process breath if(!breath || (breath.total_moles == 0) || suiciding) failed_last_breath = 1 if(suiciding) diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index fd17fc2f9f..0e628fa712 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -206,6 +206,9 @@ var/list/organ_cache = list() if(parent && !silent) owner.custom_pain("Something inside your [parent.name] hurts a lot.", 1) +/obj/item/organ/proc/bruise() + damage = max(damage, min_bruised_damage) + /obj/item/organ/proc/robotize() //Being used to make robutt hearts, etc robotic = 2 src.status &= ~ORGAN_BROKEN From fa86509daf0d0e8088104679846114c3bc9e302a Mon Sep 17 00:00:00 2001 From: HarpyEagle Date: Fri, 9 Oct 2015 18:25:10 -0400 Subject: [PATCH 10/13] Readds organ damage from failing to mend ribs --- code/modules/surgery/encased.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/code/modules/surgery/encased.dm b/code/modules/surgery/encased.dm index 8e1a516384..93a1bbf0e5 100644 --- a/code/modules/surgery/encased.dm +++ b/code/modules/surgery/encased.dm @@ -172,10 +172,12 @@ affected.createwound(BRUISE, 20) affected.fracture() - - /*if (prob(40)) //TODO: ORGAN REMOVAL UPDATE. - user.visible_message("\red A rib pierces the lung!") - target.rupture_lung()*/ + + if(affected.internal_organs && affected.internal_organs.len) + if(prob(40)) + var/obj/item/organ/O = pick(affected.internal_organs) //TODO weight by organ size + user.visible_message("A wayward piece of [target]'s [affected.encased] pierces \his [O.name]!") + O.bruise() /datum/surgery_step/open_encased/mend allowed_tools = list( From 2daa53ba4fba195b95aeb46c7198601231f94842 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sat, 10 Oct 2015 08:37:16 +0200 Subject: [PATCH 11/13] Fixes #11266. Rotates the connector properly. --- maps/exodus-1.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index b512e9296f..3f64986e67 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -6644,7 +6644,7 @@ "cxN" = (/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cxO" = (/obj/machinery/atmospherics/binary/pump{dir = 1},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) "cxP" = (/obj/item/device/radio/intercom{dir = 8; name = "Station Intercom (General)"; pixel_x = 28},/turf/simulated/floor{icon_state = "floorgrime"},/area/maintenance/incinerator) -"cxQ" = (/obj/machinery/atmospherics/portables_connector,/obj/machinery/portable_atmospherics/canister/air/airlock,/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/medbay) +"cxQ" = (/obj/machinery/portable_atmospherics/canister/air/airlock,/obj/machinery/atmospherics/portables_connector{dir = 4},/turf/simulated/floor/plating{dir = 2; icon_state = "warnplatecorner"},/area/maintenance/medbay) "cxR" = (/obj/machinery/door/airlock{name = "Starboard Emergency Storage"; req_one_access = list(12,47)},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/door/firedoor,/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/plating,/area/storage/emergency) "cxS" = (/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/structure/closet/secure_closet/personal/patient,/turf/simulated/floor{dir = 8; icon_state = "greencorner"},/area/medical/virology) "cxT" = (/obj/machinery/atmospherics/pipe/simple/hidden/purple,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/turf/simulated/floor{dir = 2; icon_state = "green"},/area/medical/virology) From fd3370c01fdcda632f951a655dcd3b2c172c8f68 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sat, 10 Oct 2015 08:48:37 +0200 Subject: [PATCH 12/13] Fixes #11263. Now possible to use items other than emags on holodeck computers Blobs no longer make computers lose their density state. Holodeck computers can now be repaired (and built, but since they cannot be configured they'll be useless). Fixes #11263. --- baystation12.dme | 1 + code/game/machinery/computer/computer.dm | 19 ++--- .../circuitboards/computer/holodeckcontrol.dm | 31 +++++++ code/modules/holodeck/HolodeckControl.dm | 80 +++++++++++++------ maps/exodus-1.dmm | 2 +- 5 files changed, 95 insertions(+), 38 deletions(-) create mode 100644 code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm diff --git a/baystation12.dme b/baystation12.dme index 2566203ca0..a79cce1094 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -657,6 +657,7 @@ #include "code\game\objects\items\weapons\circuitboards\computer\air_management.dm" #include "code\game\objects\items\weapons\circuitboards\computer\camera_monitor.dm" #include "code\game\objects\items\weapons\circuitboards\computer\computer.dm" +#include "code\game\objects\items\weapons\circuitboards\computer\holodeckcontrol.dm" #include "code\game\objects\items\weapons\circuitboards\computer\research.dm" #include "code\game\objects\items\weapons\circuitboards\computer\supply.dm" #include "code\game\objects\items\weapons\circuitboards\computer\telecomms.dm" diff --git a/code/game/machinery/computer/computer.dm b/code/game/machinery/computer/computer.dm index baa75fed05..1e9409437a 100644 --- a/code/game/machinery/computer/computer.dm +++ b/code/game/machinery/computer/computer.dm @@ -12,6 +12,11 @@ var/light_range_on = 3 var/light_power_on = 1 +/obj/machinery/computer/Destroy() + qdel(circuit) + circuit = null + return ..() + /obj/machinery/computer/initialize() power_change() @@ -70,7 +75,6 @@ for(var/x in verbs) verbs -= x set_broken() - density = 0 /obj/machinery/computer/update_icon() ..() @@ -124,22 +128,15 @@ for (var/obj/C in src) C.loc = src.loc if (src.stat & BROKEN) - user << "\blue The broken glass falls out." + user << "The broken glass falls out." new /obj/item/weapon/material/shard( src.loc ) A.state = 3 A.icon_state = "3" else - user << "\blue You disconnect the monitor." + user << "You disconnect the monitor." A.state = 4 A.icon_state = "4" M.deconstruct(src) qdel(src) else - src.attack_hand(user) - return - - - - - - + ..() diff --git a/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm new file mode 100644 index 0000000000..db11c4de50 --- /dev/null +++ b/code/game/objects/items/weapons/circuitboards/computer/holodeckcontrol.dm @@ -0,0 +1,31 @@ +#ifndef T_BOARD +#error T_BOARD macro is not defined but we need it! +#endif + +/obj/item/weapon/circuitboard/holodeckcontrol + name = T_BOARD("holodeck control console") + build_path = /obj/machinery/computer/HolodeckControl + origin_tech = "programming=2;bluespace=2" + var/last_to_emag + var/linkedholodeck_area + var/list/supported_programs + var/list/restricted_programs + +/obj/item/weapon/circuitboard/holodeckcontrol/construct(var/obj/machinery/computer/HolodeckControl/HC) + if (..(HC)) + HC.supported_programs = supported_programs.Copy() + HC.restricted_programs = restricted_programs.Copy() + if(linkedholodeck_area) + HC.linkedholodeck = locate(linkedholodeck_area) + if(last_to_emag) + HC.last_to_emag = last_to_emag + HC.emagged = 1 + HC.safety_disabled = 1 + +/obj/item/weapon/circuitboard/holodeckcontrol/deconstruct(var/obj/machinery/computer/HolodeckControl/HC) + if (..(HC)) + linkedholodeck_area = HC.linkedholodeck_area + supported_programs = HC.supported_programs.Copy() + restricted_programs = HC.restricted_programs.Copy() + last_to_emag = HC.last_to_emag + HC.emergencyShutdown() diff --git a/code/modules/holodeck/HolodeckControl.dm b/code/modules/holodeck/HolodeckControl.dm index 0509bf3d86..87c0b7e445 100644 --- a/code/modules/holodeck/HolodeckControl.dm +++ b/code/modules/holodeck/HolodeckControl.dm @@ -5,10 +5,13 @@ use_power = 1 active_power_usage = 8000 //8kW for the scenery + 500W per holoitem + + circuit = /obj/item/weapon/circuitboard/holodeckcontrol + var/item_power_usage = 500 var/area/linkedholodeck = null - var/area/target = null + var/linkedholodeck_area var/active = 0 var/list/holographic_objs = list() var/list/holographic_mobs = list() @@ -17,34 +20,39 @@ var/mob/last_to_emag = null var/last_change = 0 var/last_gravity_change = 0 - var/list/supported_programs = list( \ - "Empty Court" = "emptycourt", \ - "Basketball Court" = "basketball", \ - "Thunderdome Court" = "thunderdomecourt", \ - "Boxing Ring"="boxingcourt", \ - "Beach" = "beach", \ - "Desert" = "desert", \ - "Space" = "space", \ - "Picnic Area" = "picnicarea", \ - "Snow Field" = "snowfield", \ - "Theatre" = "theatre", \ - "Meeting Hall" = "meetinghall", \ - "Courtroom" = "courtroom" \ - ) - var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "Wildlife Simulation" = "wildlifecarp") + var/list/supported_programs + var/list/restricted_programs + +/obj/machinery/computer/HolodeckControl/New() + ..() + linkedholodeck = locate(linkedholodeck_area) + supported_programs = list() + restricted_programs = list() /obj/machinery/computer/HolodeckControl/attack_ai(var/mob/user as mob) return src.attack_hand(user) /obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob) - if(..()) - return + return 1 user.set_machine(src) var/dat dat += "Holodeck Control System
" dat += "
Current Loaded Programs:
" + + if(!linkedholodeck) + dat += "Warning: Unable to locate holodeck.
" + user << browse(dat, "window=computer;size=400x500") + onclose(user, "computer") + return + + if(!supported_programs.len) + dat += "Warning: No supported holo-programs loaded.
" + user << browse(dat, "window=computer;size=400x500") + onclose(user, "computer") + return + for(var/prog in supported_programs) dat += "([prog])
" @@ -82,10 +90,8 @@ user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") - return - /obj/machinery/computer/HolodeckControl/Topic(href, href_list) if(..()) return 1 @@ -131,8 +137,9 @@ user << "You vastly increase projector power and override the safety and security protocols." user << "Warning. Automatic shutoff and derezing protocols have been corrupted. Please call Nanotrasen maintenance and do not use the simulator." log_game("[key_name(usr)] emagged the Holodeck Control Computer") - src.updateUsrDialog() - return + src.updateUsrDialog() + else + ..() /obj/machinery/computer/HolodeckControl/proc/update_projections() if (safety_disabled) @@ -149,10 +156,6 @@ if (last_to_emag) C.friends = list(last_to_emag) -/obj/machinery/computer/HolodeckControl/New() - ..() - linkedholodeck = locate(/area/holodeck/alphadeck) - //This could all be done better, but it works for now. /obj/machinery/computer/HolodeckControl/Destroy() emergencyShutdown() @@ -345,3 +348,28 @@ active = 0 use_power = 1 + +/obj/machinery/computer/HolodeckControl/Exodus + linkedholodeck_area = /area/holodeck/alphadeck + +/obj/machinery/computer/HolodeckControl/Exodus/New() + ..() + supported_programs = list( + "Empty Court" = "emptycourt", + "Basketball Court" = "basketball", + "Thunderdome Court" = "thunderdomecourt", + "Boxing Ring" = "boxingcourt", + "Beach" = "beach", + "Desert" = "desert", + "Space" = "space", + "Picnic Area" = "picnicarea", + "Snow Field" = "snowfield", + "Theatre" = "theatre", + "Meeting Hall" = "meetinghall", + "Courtroom" = "courtroom" + ) + + restricted_programs = list( + "Atmospheric Burn Simulation" = "burntest", + "Wildlife Simulation" = "wildlifecarp" + ) diff --git a/maps/exodus-1.dmm b/maps/exodus-1.dmm index b512e9296f..ea5d8de765 100644 --- a/maps/exodus-1.dmm +++ b/maps/exodus-1.dmm @@ -1360,7 +1360,7 @@ "aAh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor/wood,/area/crew_quarters/sleep/bedrooms) "aAi" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating,/area/maintenance/dormitory) "aAj" = (/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/atmospherics/binary/pump/on{dir = 1; target_pressure = 200},/turf/simulated/floor/plating,/area/maintenance/evahallway) -"aAk" = (/obj/machinery/computer/HolodeckControl,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/crew_quarters/fitness) +"aAk" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/computer/HolodeckControl/Exodus,/turf/simulated/floor,/area/crew_quarters/fitness) "aAl" = (/obj/machinery/light,/obj/item/device/radio/intercom{name = "Station Intercom (General)"; pixel_y = -27},/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/sleep) "aAm" = (/turf/simulated/floor{icon_state = "neutral"},/area/crew_quarters/sleep) "aAn" = (/turf/simulated/floor{icon_state = "neutral"; dir = 6},/area/crew_quarters/sleep) From 92ea0f6e9ace4acfb90f03bb9a4d2d3ea8044e31 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Sat, 10 Oct 2015 10:15:14 +0200 Subject: [PATCH 13/13] Updates changelog. --- html/changelog.html | 8 ++++++++ html/changelogs/.all_changelog.yml | 7 +++++++ html/changelogs/HarpyEagle-rubberbullets.yml | 20 ------------------- html/changelogs/HarpyEagle-ttv.yml | 21 -------------------- 4 files changed, 15 insertions(+), 41 deletions(-) delete mode 100644 html/changelogs/HarpyEagle-rubberbullets.yml delete mode 100644 html/changelogs/HarpyEagle-ttv.yml diff --git a/html/changelog.html b/html/changelog.html index 5c6a149e93..64639f2244 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -56,6 +56,14 @@ -->
+

10 October 2015

+

HarpyEagle updated:

+
    +
  • Rubber bullets and beanbags now are now resisted by melee armour.
  • +
  • Fixed a couple of bugs causing phoron gas fires to burn cooler and slower than they were supposed to.
  • +
  • Merc bombs are now appropriately explosive again. Same goes for bombs made by toxins.
  • +
+

11 September 2015

HarpyEagle updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 4c024323f5..2db1c6ec28 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2017,3 +2017,10 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. 2015-09-11: HarpyEagle: - tweak: Made flares brighter. +2015-10-10: + HarpyEagle: + - tweak: Rubber bullets and beanbags now are now resisted by melee armour. + - bugfix: Fixed a couple of bugs causing phoron gas fires to burn cooler and slower + than they were supposed to. + - bugfix: Merc bombs are now appropriately explosive again. Same goes for bombs + made by toxins. diff --git a/html/changelogs/HarpyEagle-rubberbullets.yml b/html/changelogs/HarpyEagle-rubberbullets.yml deleted file mode 100644 index 841373a9f9..0000000000 --- a/html/changelogs/HarpyEagle-rubberbullets.yml +++ /dev/null @@ -1,20 +0,0 @@ -################################ -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -################################# - -author: HarpyEagle -delete-after: True -changes: - - tweak: "Rubber bullets and beanbags now are now resisted by melee armour." diff --git a/html/changelogs/HarpyEagle-ttv.yml b/html/changelogs/HarpyEagle-ttv.yml deleted file mode 100644 index 67d426e234..0000000000 --- a/html/changelogs/HarpyEagle-ttv.yml +++ /dev/null @@ -1,21 +0,0 @@ -################################ -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscadd (general adding of nice things) -# rscdel (general deleting of nice things) -# imageadd -# imagedel -# maptweak -# spellcheck (typo fixes) -# experiment -################################# - -author: HarpyEagle -delete-after: True -changes: - - bugfix: "Fixed a couple of bugs causing phoron gas fires to burn cooler and slower than they were supposed to." - - bugfix: "Merc bombs are now appropriately explosive again. Same goes for bombs made by toxins."