diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index dfc78987eb3..6af57fc4870 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -153,7 +153,7 @@ turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) //im not sure how to implement a version that works for every creature so for now monkeys are firesafe for(var/mob/living/carbon/human/M in loc) - M.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure() ) //Burn the humans! +// M.FireBurn(firelevel, air_contents.temperature, air_contents.return_pressure() ) //Burn the humans! loc.fire_act(air_contents, air_contents.temperature, air_contents.return_volume()) for(var/atom/A in loc) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 1aae642647b..bf2e773651c 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -521,7 +521,7 @@ var/list/uplink_items = list() /datum/uplink_item/device_tools/cipherkey name = "Syndicate Encryption Key" desc = "A key, that when inserted into a radio headset, allows you to listen to all station department channels as well as talk on an encrypted Syndicate channel." - item = /obj/item/device/encryptionkey/syndicate/hacked + item = /obj/item/device/encryptionkey/syndicate cost = 5 /datum/uplink_item/device_tools/hacked_module diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index be1e71c6bb4..026e1f7499c 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -97,7 +97,7 @@ item_state = "cult_armour" desc = "A bulky suit of armour, bristling with spikes. It looks space proof." w_class = 3 - allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank) slowdown = 1 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0 diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 0d92be24127..d60fefe0b34 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -13,6 +13,7 @@ var/obj/item/weapon/reagent_containers/glass/beaker = null var/autoeject = 0 + var/next_trans = 0 var/current_heat_capacity = 50 var/efficiency @@ -38,7 +39,7 @@ component_parts += new /obj/item/stack/cable_coil(src, 1) RefreshParts() -/obj/machinery/atmospherics/unary/cryo_cell/New() +/obj/machinery/atmospherics/unary/cryo_cell/upgraded/New() ..() component_parts = list() component_parts += new /obj/item/weapon/circuitboard/cryo_tube(src) @@ -128,15 +129,13 @@ if(!on) return - if(occupant) - if(occupant.stat != 2) - process_occupant() - if(air_contents) temperature_archived = air_contents.temperature heat_gas_contents() expel_gas() + if(occupant) + process_occupant() if(abs(temperature_archived-air_contents.temperature) > 1) network.update = 1 @@ -220,7 +219,7 @@ data["beakerVolume"] += R.volume data["autoeject"] = autoeject - + // update the ui if it exists, returns null if no ui is passed/found ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) @@ -319,11 +318,11 @@ if(air_contents.total_moles() < 10) return if(occupant) - if(occupant.stat == 2) + if(occupant.stat == 2 || occupant.health >= 100) //Why waste energy on dead or healthy people + occupant.bodytemperature = T0C return occupant.bodytemperature += 2*(air_contents.temperature - occupant.bodytemperature)*current_heat_capacity/(current_heat_capacity + air_contents.heat_capacity()) occupant.bodytemperature = max(occupant.bodytemperature, air_contents.temperature) // this is so ugly i'm sorry for doing it i'll fix it later i promise - occupant.stat = 1 if(occupant.bodytemperature < T0C) occupant.sleeping = max(5/efficiency, (1/occupant.bodytemperature)*2000/efficiency) occupant.Paralyse(max(5/efficiency, (1/occupant.bodytemperature)*3000/efficiency)) @@ -333,17 +332,17 @@ occupant.adjustOxyLoss(-1) //severe damage should heal waaay slower without proper chemicals if(occupant.bodytemperature < 225) - if (occupant.getToxLoss()) + if(occupant.getToxLoss()) occupant.adjustToxLoss(max(-efficiency, (-20*(efficiency ** 2)) / occupant.getToxLoss())) var/heal_brute = occupant.getBruteLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getBruteLoss()) : 0 var/heal_fire = occupant.getFireLoss() ? min(efficiency, 20*(efficiency**2) / occupant.getFireLoss()) : 0 occupant.heal_organ_damage(heal_brute,heal_fire) - var/has_cryo = occupant.reagents.get_reagent_amount("cryoxadone") >= 1 - var/has_clonexa = occupant.reagents.get_reagent_amount("clonexadone") >= 1 - var/has_cryo_medicine = has_cryo || has_clonexa - if(beaker && !has_cryo_medicine) - beaker.reagents.trans_to(occupant, 1, 1) + if(beaker && next_trans == 0) + beaker.reagents.trans_to(occupant, 1, 10) beaker.reagents.reaction(occupant) + next_trans++ + if(next_trans == 10) + next_trans = 0 /obj/machinery/atmospherics/unary/cryo_cell/proc/heat_gas_contents() if(air_contents.total_moles() < 1) @@ -357,13 +356,12 @@ /obj/machinery/atmospherics/unary/cryo_cell/proc/expel_gas() if(air_contents.total_moles() < 1) return -// var/datum/gas_mixture/expel_gas = new -// var/remove_amount = air_contents.total_moles()/50 -// expel_gas = air_contents.remove(remove_amount) - - // Just have the gas disappear to nowhere. - //expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed - //loc.assume_air(expel_gas) + var/datum/gas_mixture/expel_gas = new + var/remove_amount = air_contents.total_moles()/100 + expel_gas = air_contents.remove(remove_amount) + expel_gas.temperature = T20C // Lets expel hot gas and see if that helps people not die as they are removed + loc.assume_air(expel_gas) + update_nearby_tiles() /obj/machinery/atmospherics/unary/cryo_cell/proc/go_out() if(!( occupant )) @@ -415,7 +413,7 @@ if (usr.stat == 2)//and he's not dead.... return usr << "\blue Release sequence activated. This will take two minutes." - sleep(1200) + sleep(600) if(!src || !usr || !occupant || (occupant != usr)) //Check if someone's released/replaced/bombed him already return go_out()//and release him from the eternal prison. diff --git a/code/game/machinery/wishgranter.dm b/code/game/machinery/wishgranter.dm index 22e89cfe000..1f14f105557 100644 --- a/code/game/machinery/wishgranter.dm +++ b/code/game/machinery/wishgranter.dm @@ -7,46 +7,33 @@ use_power = 0 anchored = 1 density = 1 - - var/charges = 1 - var/insisting = 0 - + var/datum/mind/target + var/list/types = list("Owlman", "The Griffin") /obj/machinery/wish_granter/attack_hand(var/mob/user as mob) usr.set_machine(src) - if(charges <= 0) - user << "The Wish Granter lies silent." - return - - else if(!istype(user, /mob/living/carbon/human)) + if(!istype(user, /mob/living/carbon/human)) user << "You feel a dark stirring inside of the Wish Granter, something you want nothing of. Your instincts are better than any man's." return else if(is_special_character(user)) user << "Even to a heart as dark as yours, you know nothing good will come of this. Something instinctual makes you pull away." - else if (!insisting) - user << "Your first touch makes the Wish Granter stir, listening to you. Are you really sure you want to do this?" - insisting++ - else user << "The power of the Wish Granter have turned you into the superhero the station deserves. You are a masked vigilante, and answer to no man. Will you use your newfound strength to protect the innocent, or will you hunt the guilty?" - ticker.mode.traitors += user.mind - user.mind.special_role = "The Hero The Station Deserves" - + var/wish + if(types.len == 1) + wish = pick(types) + else + wish = input("You want to become...","Wish") as null|anything in types var/mob/living/carbon/human/M = user - - var/wish = input("You want to...","Wish") as anything in list("Protect the innocent","Hunt the guilty") switch(wish) - if("Protect the innocent") + if("Owlman") + types -= "Owlman" M.fully_replace_character_name(M.real_name, "Owlman") - var/datum/objective/protect/protect = new - protect.owner = user.mind - user.mind.objectives += protect - for(var/obj/item/W in M) M.unEquip(W) @@ -64,12 +51,18 @@ M.regenerate_icons() - if("Hunt the guilty") - M.fully_replace_character_name(M.real_name, "The Griffin") + var/datum/objective/protect/protect = new + protect.owner = user.mind + if(target) + protect.target = target + else + protect.find_target() + target = protect.target + user.mind.objectives += protect - var/datum/objective/assassinate/assasinate = new - assasinate.owner = user.mind - user.mind.objectives += assasinate + if("The Griffin") + types -= "The Griffin" + M.fully_replace_character_name(M.real_name, "The Griffin") for(var/obj/item/W in M) M.unEquip(W) @@ -88,14 +81,25 @@ M.regenerate_icons() + var/datum/objective/assassinate/assasinate = new + assasinate.owner = user.mind + if(target) + assasinate.target = target + else + assasinate.find_target() + target = assasinate.target + user.mind.objectives += assasinate + + ticker.mode.traitors += user.mind + user.mind.special_role = wish + var/obj_count = 1 for(var/datum/objective/OBJ in user.mind.objectives) user << "Objective #[obj_count]: [OBJ.explanation_text]" obj_count++ - charges-- - insisting = 0 + //Time to hand out the powers, since they are currently generic if (!(HULK in user.mutations)) user.dna.SetSEState(HULKBLOCK,1) @@ -122,4 +126,14 @@ user.update_mutations() + //Remove the wishgranter or teleport it randomly on the station + if(!types.len) + user << "The wishgranter slowly fades into mist..." + qdel(src) + return + else + var/impact_area = findEventArea() + var/turf/T = pick(get_area_turfs(impact_area)) + if(T) + src.loc = T return \ No newline at end of file diff --git a/code/game/objects/items/devices/radio/encryptionkey.dm b/code/game/objects/items/devices/radio/encryptionkey.dm index 2c112dc12d0..e16d07ec59b 100644 --- a/code/game/objects/items/devices/radio/encryptionkey.dm +++ b/code/game/objects/items/devices/radio/encryptionkey.dm @@ -21,13 +21,6 @@ origin_tech = "syndicate=3" syndie = 1 //Signifies that it de-crypts Syndicate transmissions -/obj/item/device/encryptionkey/syndicate/hacked - name = "Standard Encryption Key" - desc = "An encryption key for a radio headset. Has no special codes in it. Looks more sophisticated than usual." - channels = list("Command" = 0, "Security" = 0, "Engineering" = 0, "Science" = 0, "Medical" = 0, "Supply" = 0, "Service" = 0, "Syndicate" = 1) - origin_tech = "syndicate=3" - syndie = 1 - /obj/item/device/encryptionkey/binary name = "binary translator key" desc = "An encryption key for a radio headset. To access the binary channel, use :b." diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm deleted file mode 100644 index 577dba2fdbe..00000000000 --- a/code/game/objects/items/devices/suit_cooling.dm +++ /dev/null @@ -1,180 +0,0 @@ -/obj/item/device/suit_cooling_unit - name = "portable suit cooling unit" - desc = "A portable heat sink and liquid cooled radiator that can be hooked up to a space suit's existing temperature controls to provide industrial levels of cooling." - w_class = 4 - icon = 'icons/obj/device.dmi' - icon_state = "suitcooler0" - slot_flags = SLOT_BACK //you can carry it on your back if you want, but it won't do anything unless attached to suit storage - - //copied from tank.dm - flags = CONDUCT - force = 5.0 - throwforce = 10.0 - throw_speed = 1 - throw_range = 4 - - origin_tech = "magnets=2;materials=2" - - var/on = 0 //is it turned on? - var/cover_open = 0 //is the cover open? - var/obj/item/weapon/stock_parts/cell/cell - var/max_cooling = 12 //in degrees per second - probably don't need to mess with heat capacity here - var/charge_consumption = 16.6 //charge per second at max_cooling - var/thermostat = T20C - - //TODO: make it heat up the surroundings when not in space - -/obj/item/device/suit_cooling_unit/New() - cell = new/obj/item/weapon/stock_parts/cell() //comes with the crappy default power cell - high-capacity ones shouldn't be hard to find - cell.loc = src - -/obj/item/device/suit_cooling_unit/proc/cool_mob(mob/M) - if (!on || !cell) return - - //make sure they have a suit and we are attached to it - if (!attached_to_suit(M)) - return - - var/mob/living/carbon/human/H = M - - var/efficiency = H.get_pressure_protection() //you need to have a good seal for effective cooling - var/env_temp = get_environment_temperature() //wont save you from a fire - var/temp_adj = min(H.bodytemperature - max(thermostat, env_temp), max_cooling) - - if (temp_adj < 0) //only cools, doesn't heat - return - - var/charge_usage = (temp_adj/max_cooling)*charge_consumption - - H.bodytemperature -= temp_adj*efficiency - - cell.use(charge_usage) - - if(cell.charge <= 0) - turn_off() - -/obj/item/device/suit_cooling_unit/proc/get_environment_temperature() - if (ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(istype(H.loc, /obj/mecha)) - var/obj/mecha/M = loc - return M.return_temperature() - else if(istype(H.loc, /obj/machinery/atmospherics/unary/cryo_cell)) - return H.loc:air_contents.temperature - - var/turf/T = get_turf(src) - if(istype(T, /turf/space)) - return 0 //space has no temperature, this just makes sure the cooling unit works in space - - var/datum/gas_mixture/environment = T.return_air() - if (!environment) - return 0 - - return environment.temperature - -/obj/item/device/suit_cooling_unit/proc/attached_to_suit(mob/M) - if (!ishuman(M)) - return 0 - - var/mob/living/carbon/human/H = M - - if (!H.wear_suit || H.s_store != src) - return 0 - - return 1 - -/obj/item/device/suit_cooling_unit/proc/turn_on() - if(!cell) - return - if(cell.charge <= 0) - return - - on = 1 - updateicon() - -/obj/item/device/suit_cooling_unit/proc/turn_off() - if (ismob(src.loc)) - src.loc << "\The [src] clicks and whines as it powers down." //let them know - on = 0 - updateicon() - -/obj/item/device/suit_cooling_unit/attack_self(mob/user as mob) - if(cover_open && cell) - if(ishuman(user)) - user.put_in_hands(cell) - else - cell.loc = get_turf(loc) - - cell.add_fingerprint(user) - cell.updateicon() - - user << "You remove the [src.cell]." - src.cell = null - updateicon() - return - - //TODO use a UI like the air tanks - if(on) - turn_off() - else - turn_on() - if (on) - user << "You switch on the [src]." - -/obj/item/device/suit_cooling_unit/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if (istype(W, /obj/item/weapon/screwdriver)) - if(cover_open) - cover_open = 0 - user << "You screw the panel into place." - else - cover_open = 1 - user << "You unscrew the panel." - updateicon() - return - - if (istype(W, /obj/item/weapon/stock_parts/cell)) - if(cover_open) - if(cell) - user << "There is a [cell] already installed here." - else - user.drop_item() - W.loc = src - cell = W - user << "You insert the [cell]." - updateicon() - return - - return ..() - -/obj/item/device/suit_cooling_unit/proc/updateicon() - if (cover_open) - if (cell) - icon_state = "suitcooler1" - else - icon_state = "suitcooler2" - else - icon_state = "suitcooler0" - -/obj/item/device/suit_cooling_unit/examine() - set src in view(1) - - ..() - - if (on) - if (attached_to_suit(src.loc)) - usr << "It's switched on and running." - else - usr << "It's switched on, but not attached to anything." - else - usr << "It is switched off." - - if (cover_open) - if(cell) - usr << "The panel is open, exposing the [cell]." - else - usr << "The panel is open." - - if (cell) - usr << "The charge meter reads [round(cell.percent())]%." - else - usr << "It doesn't have a power cell installed." \ No newline at end of file diff --git a/code/game/turfs/simulated/walls_reinforced.dm b/code/game/turfs/simulated/walls_reinforced.dm index 9514e9c7afd..1ff89a02a3f 100644 --- a/code/game/turfs/simulated/walls_reinforced.dm +++ b/code/game/turfs/simulated/walls_reinforced.dm @@ -13,6 +13,7 @@ var/d_state = 0 /turf/simulated/wall/r_wall/attack_hand(mob/user as mob) + user.changeNext_move(CLICK_CD_MELEE) if (HULK in user.mutations) if (prob(10) || rotting) usr << text("\blue You smash through the wall.") @@ -34,7 +35,7 @@ /turf/simulated/wall/r_wall/attackby(obj/item/W as obj, mob/user as mob, params) - + user.changeNext_move(CLICK_CD_MELEE) if (!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") user << "You don't have the dexterity to do this!" return @@ -286,7 +287,7 @@ else if( istype(W,/obj/item/apc_frame) ) var/obj/item/apc_frame/AH = W AH.try_build(src) - + else if(istype(W,/obj/item/newscaster_frame)) var/obj/item/newscaster_frame/AH = W AH.try_build(src) diff --git a/code/game/turfs/space/space.dm b/code/game/turfs/space/space.dm index 6768fdf3afd..e954e5f95b1 100644 --- a/code/game/turfs/space/space.dm +++ b/code/game/turfs/space/space.dm @@ -3,9 +3,9 @@ name = "\proper space" icon_state = "0" - temperature = T0C + temperature = TCMB thermal_conductivity = OPEN_HEAT_TRANSFER_COEFFICIENT -// heat_capacity = 700000 No. + heat_capacity = 700000 /turf/space/New() if(!istype(src, /turf/space/transit)) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 8c79383cc1a..33a75e7639c 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -246,7 +246,7 @@ BLIND // can't see anything var/mask_adjusted = 0 var/ignore_maskadjust = 1 var/adjusted_flags = null - + //Proc that moves gas/breath masks out of the way /obj/item/clothing/mask/proc/adjustmask(var/mob/user) if(!ignore_maskadjust) @@ -334,7 +334,7 @@ BLIND // can't see anything permeability_coefficient = 0.02 flags = STOPSPRESSUREDMAGE | THICKMATERIAL body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank) slowdown = 2 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT||HIDETAIL diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index cfe77d56f56..d1fa45e2018 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -61,7 +61,7 @@ item_state = "eng_hardsuit" slowdown = 2 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd) species_restricted = list("exclude","Unathi","Tajaran","Skrell","Diona","Vox") sprite_sheets = list( @@ -320,7 +320,7 @@ item_state = "eng_hardsuit" slowdown = 2 armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 75) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/device/t_scanner, /obj/item/weapon/rcd) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/t_scanner, /obj/item/weapon/rcd) //Chief Engineer's rig /obj/item/clothing/head/helmet/space/rig/elite @@ -497,7 +497,7 @@ desc = "A special helmet designed for work in a hazardous, low pressure environment. Built with lightweight materials for extra comfort." item_state = "medical_hardsuit" slowdown = 1 - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical) armor = list(melee = 10, bullet = 5, laser = 10, energy = 5, bomb = 10, bio = 100, rad = 50) //Security @@ -516,7 +516,7 @@ desc = "A special suit that protects against hazardous, low pressure environments. Has an additional layer of armor." item_state = "sec_hardsuit" armor = list(melee = 30, bullet = 15, laser = 30, energy = 10, bomb = 10, bio = 100, rad = 50) - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/melee/baton,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/restraints/handcuffs) + allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/melee/baton,/obj/item/weapon/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/restraints/handcuffs) siemens_coefficient = 0.7 diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 08614d68c9c..cdb1dc9a4b4 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -299,7 +299,7 @@ feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return -/datum/event/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! +/proc/findEventArea() //Here's a nice proc to use to find an area for your event to land in! var/area/candidate = null var/list/safe_areas = list( diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 8ab42b7ae1c..533c47a253d 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -9,7 +9,7 @@ opacity = 1 density = 1 blocks_air = 1 - temperature = T0C + temperature = TCMB var/mineral/mineral var/mined_ore = 0 var/last_act = 0 @@ -392,7 +392,7 @@ icon_state = "asteroid" oxygen = 0.01 nitrogen = 0.01 - temperature = T0C + temperature = TCMB icon_plating = "asteroid" var/dug = 0 //0 = has not yet been dug, 1 = has already been dug has_resources = 1 diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 86f500aa015..3e06137e7db 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -485,6 +485,36 @@ legcuffed = null update_inv_legcuffed(1) +/mob/living/carbon/proc/get_temperature(var/datum/gas_mixture/environment) + var/loc_temp = T0C + if(istype(loc, /obj/mecha)) + var/obj/mecha/M = loc + loc_temp = M.return_temperature() + + else if(istype(loc, /obj/spacepod)) + var/obj/spacepod/S = loc + loc_temp = S.return_temperature() + + else if(istype(loc, /obj/structure/transit_tube_pod)) + loc_temp = environment.temperature + + else if(istype(get_turf(src), /turf/space)) + var/turf/heat_turf = get_turf(src) + loc_temp = heat_turf.temperature + + else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) + var/obj/machinery/atmospherics/unary/cryo_cell/C = loc + + if(C.air_contents.total_moles() < 10) + loc_temp = environment.temperature + else + loc_temp = C.air_contents.temperature + + else + loc_temp = environment.temperature + + return loc_temp + /mob/living/carbon/show_inv(mob/living/carbon/user as mob) user.set_machine(src) var/dat = {" diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 6a36b6ae3d7..5ef569596cf 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -141,72 +141,19 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc handle_vampire() -//Much like get_heat_protection(), this returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. -/mob/living/carbon/human/proc/get_pressure_protection() +/mob/living/carbon/human/calculate_affecting_pressure(var/pressure) + ..() + var/pressure_difference = abs( pressure - ONE_ATMOSPHERE ) + var/pressure_adjustment_coefficient = 1 //Determins how much the clothing you are wearing protects you in percent. - - if(head && (head.flags & STOPSPRESSUREDMAGE)) - pressure_adjustment_coefficient -= PRESSURE_HEAD_REDUCTION_COEFFICIENT - - if(wear_suit && (wear_suit.flags & STOPSPRESSUREDMAGE)) - pressure_adjustment_coefficient -= PRESSURE_SUIT_REDUCTION_COEFFICIENT - - //Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure reduction. - if(istype(wear_suit,/obj/item/clothing/suit/space)) - var/obj/item/clothing/suit/space/S = wear_suit - if(S.can_breach && S.damage) - var/pressure_loss = S.damage * 0.1 - pressure_adjustment_coefficient += pressure_loss - - pressure_adjustment_coefficient = min(1,max(pressure_adjustment_coefficient,0)) //So it isn't less than 0 or larger than 1. - - return 1 - pressure_adjustment_coefficient //want 0 to be bad protection, 1 to be good protection - -// Calculate how vulnerable the human is to under- and overpressure. -// Returns 0 (equals 0 %) if sealed in an undamaged suit, 1 if unprotected (equals 100%). -// Suitdamage can modifiy this in 10% steps. -/mob/living/carbon/human/proc/get_pressure_weakness() - - var/pressure_adjustment_coefficient = 1 // Assume no protection at first. - if(wear_suit && (wear_suit.flags & STOPSPRESSUREDMAGE) && head && (head.flags & STOPSPRESSUREDMAGE)) // Complete set of pressure-proof suit worn, assume fully sealed. pressure_adjustment_coefficient = 0 - - // Handles breaches in your space suit. 10 suit damage equals a 100% loss of pressure protection. - if(istype(wear_suit,/obj/item/clothing/suit/space)) - var/obj/item/clothing/suit/space/S = wear_suit - if(S.can_breach && S.damage) - pressure_adjustment_coefficient += S.damage * 0.1 - - pressure_adjustment_coefficient = min(1,max(pressure_adjustment_coefficient,0)) // So it isn't less than 0 or larger than 1. - - return pressure_adjustment_coefficient - -/mob/living/carbon/human/calculate_affecting_pressure(var/pressure) - var/pressure_difference - - // First get the absolute pressure difference. - if(pressure < ONE_ATMOSPHERE) // We are in an underpressure. - pressure_difference = ONE_ATMOSPHERE - pressure - - else //We are in an overpressure or standard atmosphere. - pressure_difference = pressure - ONE_ATMOSPHERE - - if(pressure_difference < 5) // If the difference is small, don't bother calculating the fraction. - pressure_difference = 0 - - else - // Otherwise calculate how much of that absolute pressure difference affects us, can be 0 to 1 (equals 0% to 100%). - // This is our relative difference. - pressure_difference *= get_pressure_weakness() - - // The difference is always positive to avoid extra calculations. - // Apply the relative difference on a standard atmosphere to get the final result. - // The return value will be the adjusted_pressure of the human that is the basis of pressure warnings and damage. - if(pressure < ONE_ATMOSPHERE) - return ONE_ATMOSPHERE - pressure_difference - else + pressure_adjustment_coefficient = max(pressure_adjustment_coefficient,0) //So it isn't less than 0 + pressure_difference = pressure_difference * pressure_adjustment_coefficient + if(pressure > ONE_ATMOSPHERE) return ONE_ATMOSPHERE + pressure_difference + else + return ONE_ATMOSPHERE - pressure_difference /mob/living/carbon/human @@ -526,50 +473,25 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(!environment) return - //Moved pressure calculations here for use in skip-processing check. - var/pressure = environment.return_pressure() - var/adjusted_pressure = calculate_affecting_pressure(pressure) + var/loc_temp = get_temperature(environment) + //world << "Loc temp: [loc_temp] - Body temp: [bodytemperature] - Fireloss: [getFireLoss()] - Thermal protection: [get_thermal_protection()] - Fire protection: [thermal_protection + add_fire_protection(loc_temp)] - Heat capacity: [environment_heat_capacity] - Location: [loc] - src: [src]" - if(!istype(get_turf(src), /turf/space)) //space is not meant to change your body temperature. - var/loc_temp = T0C - if(istype(loc, /obj/mecha)) - var/obj/mecha/M = loc - loc_temp = M.return_temperature() + //Body temperature is adjusted in two steps. Firstly your body tries to stabilize itself a bit. + if(stat != 2) + stabilize_temperature_from_calories() - if(istype(loc, /obj/spacepod)) - var/obj/spacepod/S = loc - loc_temp = S.return_temperature() - //else if(istype(get_turf(src), /turf/space)) - - else if(istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) - loc_temp = loc:air_contents.temperature + //After then, it reacts to the surrounding atmosphere based on your thermal protection + if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases + if(loc_temp < bodytemperature) + //Place is colder than we are + var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR), BODYTEMP_COOLING_MAX) else - loc_temp = environment.temperature - - if(adjusted_pressure < species.warning_high_pressure && adjusted_pressure > species.warning_low_pressure && abs(loc_temp - bodytemperature) < 20 && bodytemperature < species.heat_level_1 && bodytemperature > species.cold_level_1 && environment.toxins < MOLES_PLASMA_VISIBLE) - pressure_alert = 0 - return // Temperatures are within normal ranges, fuck all this processing. ~Ccomp - - if(!on_fire) //If you're on fire, you do not heat up or cool down based on surrounding gases - //Body temperature adjusts depending on surrounding atmosphere based on your thermal protection - var/temp_adj = 0 - if(loc_temp < bodytemperature) //Place is colder than we are - var/thermal_protection = get_cold_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_COLD_DIVISOR) //this will be negative - else if (loc_temp > bodytemperature) //Place is hotter than we are - var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. - if(thermal_protection < 1) - temp_adj = (1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR) - - //Use heat transfer as proportional to the gas density. However, we only care about the relative density vs standard 101 kPa/20 C air. Therefore we can use mole ratios - var/relative_density = environment.total_moles() / MOLES_CELLSTANDARD - temp_adj *= relative_density - - if (temp_adj > BODYTEMP_HEATING_MAX) temp_adj = BODYTEMP_HEATING_MAX - if (temp_adj < BODYTEMP_COOLING_MAX) temp_adj = BODYTEMP_COOLING_MAX - //world << "Environment: [loc_temp], [src]: [bodytemperature], Adjusting: [temp_adj]" - bodytemperature += temp_adj + //Place is hotter than we are + var/thermal_protection = get_heat_protection(loc_temp) //This returns a 0 - 1 value, which corresponds to the percentage of protection based on what you're wearing and what you're exposed to. + if(thermal_protection < 1) + bodytemperature += min((1-thermal_protection) * ((loc_temp - bodytemperature) / BODYTEMP_HEAT_DIVISOR), BODYTEMP_HEATING_MAX) // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. if(bodytemperature > species.heat_level_1) @@ -607,6 +529,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc // Account for massive pressure differences. Done by Polymorph // Made it possible to actually have something that can protect against high pressure... Done by Errorage. Polymorph now has an axe sticking from his head for his previous hardcoded nonsense! + + var/pressure = environment.return_pressure() + var/adjusted_pressure = calculate_affecting_pressure(pressure) //Returns how much pressure actually affects the mob. if(status_flags & GODMODE) return 1 //godmode if(adjusted_pressure >= species.hazard_high_pressure) @@ -620,14 +545,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc else if(adjusted_pressure >= species.hazard_low_pressure) pressure_alert = -1 else - if( !(RESIST_COLD in mutations)) + if(RESIST_COLD in mutations) + pressure_alert = -1 + else take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") pressure_alert = -2 - else - pressure_alert = -1 - if(environment.toxins > MOLES_PLASMA_VISIBLE) - pl_effects() return ///FIRE CODE @@ -671,39 +594,20 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc return temp_change */ - proc/stabilize_body_temperature() - //TODO find a better place to put this - if (s_store && istype(s_store, /obj/item/device/suit_cooling_unit)) - var/obj/item/device/suit_cooling_unit/CU = s_store - CU.cool_mob(src) - -// if (species.flags & IS_SYNTHETIC) -// bodytemperature += species.synth_temp_gain //that CPU/posibrain just keeps putting out heat. // commented out as making synthetics unplayable until cooling system sorted out -// return - - var/body_temperature_difference = species.body_temperature - bodytemperature - - if (abs(body_temperature_difference) < 0.5) - return //fuck this precision - - if(bodytemperature < species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. + proc/stabilize_temperature_from_calories() + if(bodytemperature <= species.cold_level_1) //260.15 is 310.15 - 50, the temperature where you start to feel effects. if(nutrition >= 2) //If we are very, very cold we'll use up quite a bit of nutriment to heat us up. nutrition -= 2 - var/recovery_amt = max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) - //world << "Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]" -// log_debug("Cold. Difference = [body_temperature_difference]. Recovering [recovery_amt]") - bodytemperature += recovery_amt - else if(species.cold_level_1 <= bodytemperature && bodytemperature <= species.heat_level_1) - var/recovery_amt = body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR - //world << "Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]" -// log_debug("Norm. Difference = [body_temperature_difference]. Recovering [recovery_amt]") - bodytemperature += recovery_amt - else if(bodytemperature > species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. + var/body_temperature_difference = species.body_temperature - bodytemperature + bodytemperature += max((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), BODYTEMP_AUTORECOVERY_MINIMUM) + if(bodytemperature >= species.cold_level_1 && bodytemperature <= species.heat_level_1) + var/body_temperature_difference = species.body_temperature - bodytemperature + bodytemperature += body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR + if(bodytemperature >= species.heat_level_1) //360.15 is 310.15 + 50, the temperature where you start to feel effects. //We totally need a sweat system cause it totally makes sense...~ - var/recovery_amt = min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers - //world << "Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]" -// log_debug("Hot. Difference = [body_temperature_difference]. Recovering [recovery_amt]") - bodytemperature += recovery_amt + var/body_temperature_difference = species.body_temperature - bodytemperature + bodytemperature += min((body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR), -BODYTEMP_AUTORECOVERY_MINIMUM) //We're dealing with negative numbers + //This proc returns a number made up of the flags for body parts which you are protected on. (such as HEAD, UPPER_TORSO, LOWER_TORSO, etc. See setup.dm for the full list) proc/get_heat_protection_flags(temperature) //Temperature is the temperature you're being exposed to. @@ -1041,7 +945,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc updatehealth() //TODO if(!in_stasis) - stabilize_body_temperature() //Body temperature adjusts itself handle_organs() //Optimized. handle_blood() diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 7d16adc5539..8064bdbacc1 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -26,7 +26,8 @@ var/heat_level_1 = 360 // Heat damage level 1 above this point. var/heat_level_2 = 400 // Heat damage level 2 above this point. - var/heat_level_3 = 1000 // Heat damage level 2 above this point. + var/heat_level_3 = 460 // Heat damage level 3 above this point; used for body temperature + var/heat_level_3_breathe = 1000 // Heat damage level 3 above this point; used for breathed air temperature var/body_temperature = 310.15 //non-IS_SYNTHETIC species will try to stabilize at this temperature. (also affects temperature processing) var/synth_temp_gain = 0 //IS_SYNTHETIC species will gain this much temperature every second @@ -105,8 +106,7 @@ var/safe_oxygen_min = 16 // Minimum safe partial pressure of O2, in kPa //var/safe_oxygen_max = 140 // Maximum safe partial pressure of O2, in kPa (Not used for now) var/safe_co2_max = 10 // Yes it's an arbitrary value who cares? - var/safe_toxins_max = 0.5 - var/safe_toxins_mask = 5 + var/safe_toxins_max = 0.005 var/SA_para_min = 1 var/SA_sleep_min = 5 var/oxygen_used = 0 @@ -179,16 +179,9 @@ if(Toxins_pp > safe_toxins_max) // Too much toxins var/ratio = (breath.toxins/safe_toxins_max) * 10 //adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) //Limit amount of damage toxin exposure can do per second - if(H.wear_mask) - if(H.wear_mask.flags & BLOCK_GAS_SMOKE_EFFECT) - if(breath.toxins > safe_toxins_mask) - ratio = (breath.toxins/safe_toxins_mask) * 10 - else - ratio = 0 - if(ratio) - if(H.reagents) - H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) - H.toxins_alert = max(H.toxins_alert, 1) + if(H.reagents) + H.reagents.add_reagent("plasma", Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) + H.toxins_alert = max(H.toxins_alert, 1) else if(O2_pp > vox_oxygen_max && name == "Vox") //Oxygen is toxic to vox. var/ratio = (breath.oxygen/vox_oxygen_max) * 1000 H.adjustToxLoss(Clamp(ratio, MIN_PLASMA_DAMAGE, MAX_PLASMA_DAMAGE)) @@ -202,12 +195,16 @@ if(SA_pp > SA_para_min) // Enough to make us paralysed for a bit H.Paralyse(3) // 3 gives them one second to wake up and run away a bit! if(SA_pp > SA_sleep_min) // Enough to make us sleep as well - H.sleeping = min(H.sleeping+2, 10) - else if(SA_pp > 0.15) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning + H.sleeping = max(H.sleeping+2, 10) + else if(SA_pp > 0.01) // There is sleeping gas in their lungs, but only a little, so give them a bit of a warning if(prob(20)) spawn(0) H.emote(pick("giggle", "laugh")) - SA.moles = 0 + handle_temperature(breath, H) + + return 1 + +/datum/species/proc/handle_temperature(datum/gas_mixture/breath, var/mob/living/carbon/human/H) // called by human/life, handles temperatures if( (abs(310.15 - breath.temperature) > 50) && !(RESIST_HEAT in H.mutations)) // Hot air hurts :( if(H.status_flags & GODMODE) return 1 //godmode if(breath.temperature < cold_level_1) @@ -243,14 +240,14 @@ H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_1, BURN, "head", used_weapon = "Excessive Heat") H.fire_alert = max(H.fire_alert, 2) - if(heat_level_2 to heat_level_3) + if(heat_level_2 to heat_level_3_breathe) H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_2, BURN, "head", used_weapon = "Excessive Heat") H.fire_alert = max(H.fire_alert, 2) - if(heat_level_3 to INFINITY) + if(heat_level_3_breathe to INFINITY) H.apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") H.fire_alert = max(H.fire_alert, 2) - return 1 + return /datum/species/proc/handle_post_spawn(var/mob/living/carbon/C) //Handles anything not already covered by basic species assignment. handle_dna(C) @@ -315,11 +312,12 @@ cold_level_1 = 280 //Default 260 - Lower is better cold_level_2 = 220 //Default 200 - cold_level_3 = 130 //Default 120 + cold_level_3 = 140 //Default 120 - heat_level_1 = 420 //Default 360 - Higher is better - heat_level_2 = 480 //Default 400 - heat_level_3 = 1100 //Default 1000 + heat_level_1 = 380 //Default 360 - Higher is better + heat_level_2 = 420 //Default 400 + heat_level_3 = 480 //Default 460 + heat_level_3_breathe = 1100 //Default 1000 flesh_color = "#34AF10" @@ -343,13 +341,14 @@ of family and politics. They prefer colder environments, and speak a variety of languages, mostly Siik'Maas, \ using unique inflections their mouths form." - cold_level_1 = 200 - cold_level_2 = 140 - cold_level_3 = 80 + cold_level_1 = 240 + cold_level_2 = 180 + cold_level_3 = 100 - heat_level_1 = 330 + heat_level_1 = 340 heat_level_2 = 380 - heat_level_3 = 800 + heat_level_3 = 440 + heat_level_3_breathe = 900 primitive = /mob/living/carbon/monkey/tajara @@ -462,6 +461,7 @@ heat_level_1 = 2000 heat_level_2 = 3000 heat_level_3 = 4000 + heat_level_3_breathe = 4000 brute_mod = 0.2 burn_mod = 0.2 @@ -590,8 +590,9 @@ cold_level_3 = -1 heat_level_1 = 300 - heat_level_2 = 350 - heat_level_3 = 700 + heat_level_2 = 340 + heat_level_3 = 400 + heat_level_3_breathe = 700 blurb = "Commonly referred to (erroneously) as 'plant people', the Dionaea are a strange space-dwelling collective \ species hailing from Epsilon Ursae Minoris. Each 'diona' is a cluster of numerous cat-sized organisms called nymphs; \ @@ -657,8 +658,9 @@ cold_level_3 = -1 heat_level_1 = 500 //gives them about 25 seconds in space before taking damage - heat_level_2 = 1000 - heat_level_3 = 2000 + heat_level_2 = 540 + heat_level_3 = 600 + heat_level_3_breathe = 600 synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 79c5fc8b469..3f70e98c3ac 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -904,24 +904,63 @@ var/list/robot_verbs_default = list( usr << "You unlock your cover." /mob/living/silicon/robot/attack_alien(mob/living/carbon/alien/humanoid/M as mob) - if (M.a_intent =="disarm") - if(!(lying)) + if (!ticker) + M << "You cannot attack people before the game has started." + return + + if (istype(loc, /turf) && istype(loc.loc, /area/start)) + M << "No attacking people at spawn, you jackass." + return + + switch(M.a_intent) + + if ("help") + for(var/mob/O in viewers(src, null)) + if ((O.client && !( O.blinded ))) + O.show_message(text("[M] caresses [src]'s plating with its scythe like arm."), 1) + + if ("grab") + if (M == src || anchored) + return + var/obj/item/weapon/grab/G = new /obj/item/weapon/grab(M, src ) + + M.put_in_active_hand(G) + + G.synch() + playsound(loc, 'sound/weapons/thudswoosh.ogg', 50, 1, -1) + visible_message("[M] has grabbed [src] passively!") + + if ("harm") M.do_attack_animation(src) - if (prob(85)) - Stun(7) - step(src,get_dir(M,src)) - spawn(5) - step(src,get_dir(M,src)) - add_logs(M, src, "pushed", admin=0) - playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1) - visible_message("[M] has forced back [src]!", \ - "[M] has forced back [src]!") + var/damage = rand(10, 20) + if (prob(90)) + playsound(loc, 'sound/weapons/slash.ogg', 25, 1, -1) + visible_message("[M] has slashed at [src]!",\ + "[M] has slashed at [src]!") + if(prob(8)) + flick("noise", flash) + adjustBruteLoss(damage) + updatehealth() else playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) visible_message("[M] took a swipe at [src]!", \ "[M] took a swipe at [src]!") - else - ..() + + if ("disarm") + if(!(lying)) + M.do_attack_animation(src) + if (prob(85)) + Stun(7) + step(src,get_dir(M,src)) + spawn(5) + step(src,get_dir(M,src)) + playsound(loc, 'sound/weapons/pierce.ogg', 50, 1, -1) + visible_message("[M] has forced back [src]!",\ + "[M] has forced back [src]!") + else + playsound(loc, 'sound/weapons/slashmiss.ogg', 25, 1, -1) + visible_message("[M] attempted to force back [src]!",\ + "[M] attempted to force back [src]!") return diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 4deb87fbddb..490a91c2113 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -2329,18 +2329,19 @@ datum if(!data) data = 1 switch(data) if(1 to 15) - M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("capsaicin")) holder.remove_reagent("capsaicin", 5) if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(5,20) if(15 to 25) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(10,20) if(25 to INFINITY) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT - if(prob(1)) M.emote("shiver") + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT + if(prob(1)) + M.emote("shiver") if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(15,20) data++ diff --git a/code/modules/research/designs/mechfabricator_designs.dm b/code/modules/research/designs/mechfabricator_designs.dm index fe9acc74a7c..b7d49332314 100644 --- a/code/modules/research/designs/mechfabricator_designs.dm +++ b/code/modules/research/designs/mechfabricator_designs.dm @@ -849,7 +849,8 @@ build_type = MECHFAB req_tech = list("combat" = 4, "syndicate" = 3) build_path = /obj/item/borg/upgrade/syndicate - category = "Cyborg Upgrade Modules" + materials = list("$metal"=10000,"$glass"=15000,"$diamond" = 10000) + construction_time = 120 category = list("Cyborg Upgrade Modules") /datum/design/borg_upgrade_jetpack diff --git a/code/modules/research/designs/medical_designs.dm b/code/modules/research/designs/medical_designs.dm index b6b01c63872..0c03f1c6756 100644 --- a/code/modules/research/designs/medical_designs.dm +++ b/code/modules/research/designs/medical_designs.dm @@ -75,6 +75,7 @@ req_tech = list("programming" = 2, "biotech" = 3) build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 1000, "$glass" = 500) + construction_time = 75 reliability_base = 76 build_path = /obj/item/device/mmi category = list("Misc","Medical") @@ -107,6 +108,7 @@ req_tech = list("programming" = 2, "biotech" = 4) build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 1200, "$glass" = 500) + construction_time = 75 reliability_base = 74 build_path = /obj/item/device/mmi/radio_enabled category = list("Misc","Medical") @@ -139,6 +141,7 @@ req_tech = list("magnets" = 3, "combat" = 2) build_type = MECHFAB materials = list("$metal" = 750, "$glass" = 750) + construction_time = 100 reliability_base = 76 build_path = /obj/item/device/flash/synthetic category = list("Misc") diff --git a/code/modules/research/designs/power_designs.dm b/code/modules/research/designs/power_designs.dm index 9edc8400e3e..76524f5429a 100644 --- a/code/modules/research/designs/power_designs.dm +++ b/code/modules/research/designs/power_designs.dm @@ -9,6 +9,7 @@ req_tech = list("powerstorage" = 1) build_type = PROTOLATHE | AUTOLATHE | MECHFAB materials = list("$metal" = 700, "$glass" = 50) + construction_time=100 build_path = /obj/item/weapon/stock_parts/cell category = list("Misc","Power") @@ -19,9 +20,10 @@ req_tech = list("powerstorage" = 2) build_type = PROTOLATHE | AUTOLATHE | MECHFAB materials = list("$metal" = 700, "$glass" = 60) + construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/high category = list("Misc","Power") - + /datum/design/hyper_cell name = "Hyper-Capacity Power Cell" desc = "A power cell that holds 30000 units of energy" @@ -30,9 +32,10 @@ reliability_base = 70 build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 400, "$gold" = 150, "$silver" = 150, "$glass" = 70) + construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/hyper category = list("Misc","Power") - + /datum/design/super_cell name = "Super-Capacity Power Cell" desc = "A power cell that holds 20000 units of energy" @@ -41,9 +44,10 @@ reliability_base = 75 build_type = PROTOLATHE | MECHFAB materials = list("$metal" = 700, "$glass" = 70) + construction_time=100 build_path = /obj/item/weapon/stock_parts/cell/super category = list("Misc","Power") - + /datum/design/pacman name = "Machine Board (PACMAN-type Generator)" desc = "The circuit board that for a PACMAN-type portable generator." @@ -54,7 +58,7 @@ materials = list("$glass" = 1000, "sacid" = 20) build_path = /obj/item/weapon/circuitboard/pacman category = list("Engineering Machinery") - + /datum/design/mrspacman name = "Machine Board (MRSPACMAN-type Generator)" desc = "The circuit board that for a MRSPACMAN-type portable generator." diff --git a/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm b/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm index b8277fa5e8e..0d4e64d67ee 100644 --- a/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm +++ b/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm @@ -20,7 +20,7 @@ icon_state = "cespace_suit" item_state = "cespace_suit" armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 100) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank) /obj/item/clothing/head/helmet/space/eva/anomaly name = "Excavation hood" diff --git a/code/setup.dm b/code/setup.dm index 544d879df9d..72f56088a42 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -40,10 +40,10 @@ #define TEMPERATURE_DAMAGE_COEFFICIENT 1.5 //This is used in handle_temperature_damage() for humans, and in reagents that affect body temperature. Temperature damage is multiplied by this amount. #define BODYTEMP_AUTORECOVERY_DIVISOR 12 //This is the divisor which handles how much of the temperature difference between the current body temperature and 310.15K (optimal temperature) humans auto-regenerate each tick. The higher the number, the slower the recovery. This is applied each tick, so long as the mob is alive. -#define BODYTEMP_AUTORECOVERY_MINIMUM 1 //Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50. +#define BODYTEMP_AUTORECOVERY_MINIMUM 10 //Minimum amount of kelvin moved toward 310.15K per tick. So long as abs(310.15 - bodytemp) is more than 50. #define BODYTEMP_COLD_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is lower than their body temperature. Make it lower to lose bodytemp faster. #define BODYTEMP_HEAT_DIVISOR 6 //Similar to the BODYTEMP_AUTORECOVERY_DIVISOR, but this is the divisor which is applied at the stage that follows autorecovery. This is the divisor which comes into play when the human's loc temperature is higher than their body temperature. Make it lower to gain bodytemp faster. -#define BODYTEMP_COOLING_MAX -30 //The maximum number of degrees that your body can cool in 1 tick, when in a cold area. +#define BODYTEMP_COOLING_MAX 30 //The maximum number of degrees that your body can cool in 1 tick, when in a cold area. #define BODYTEMP_HEATING_MAX 30 //The maximum number of degrees that your body can heat up in 1 tick, when in a hot area. #define BODYTEMP_HEAT_DAMAGE_LIMIT 360.15 // The limit the human body can take before it starts taking damage from heat. diff --git a/maps/cyberiad.dmm b/maps/cyberiad.dmm index 07a8e6e722e..28bc95721f3 100644 --- a/maps/cyberiad.dmm +++ b/maps/cyberiad.dmm @@ -8352,7 +8352,7 @@ "deF" = (/obj/structure/table,/obj/item/weapon/grenade/syndieminibomb{pixel_x = 4; pixel_y = 2; pixel_z = 0},/obj/item/weapon/grenade/syndieminibomb{pixel_x = -1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "deG" = (/turf/unsimulated/floor{icon = 'icons/turf/snow.dmi'; icon_state = "snow"},/obj/structure/flora/bush,/turf/unsimulated/floor{tag = "icon-gravsnow_corner (WEST)"; icon = 'icons/turf/snow.dmi'; icon_state = "gravsnow_corner"; dir = 8},/area/syndicate_mothership) "deH" = (/obj/effect/landmark{name = "Nuclear-Bomb"},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) -"deI" = (/obj/machinery/telecomms/allinone,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) +"deI" = (/obj/machinery/telecomms/allinone{intercept = 1},/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "deJ" = (/obj/structure/table,/obj/item/weapon/storage/firstaid/regular,/obj/item/robot_parts/r_arm,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "deK" = (/obj/structure/closet/crate/internals,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/obj/item/weapon/tank/oxygen/red,/obj/item/clothing/mask/gas,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) "deL" = (/obj/structure/closet/crate/medical,/obj/item/weapon/surgicaldrill,/obj/item/weapon/scalpel,/obj/item/weapon/reagent_containers/glass/bottle/stoxin,/turf/simulated/shuttle/floor{icon_state = "floor4"},/area/syndicate_station/start) diff --git a/paradise.dme b/paradise.dme index d84b2c5f513..6e77d08e156 100644 --- a/paradise.dme +++ b/paradise.dme @@ -665,7 +665,6 @@ #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\scanners.dm" #include "code\game\objects\items\devices\sensor_device.dm" -#include "code\game\objects\items\devices\suit_cooling.dm" #include "code\game\objects\items\devices\taperecorder.dm" #include "code\game\objects\items\devices\traitordevices.dm" #include "code\game\objects\items\devices\transfer_valve.dm"