diff --git a/baystation12.dme b/baystation12.dme index 8d30436152d..b6aeb528e64 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -569,6 +569,7 @@ #include "code\game\objects\items\devices\pipe_painter.dm" #include "code\game\objects\items\devices\powersink.dm" #include "code\game\objects\items\devices\scanners.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" diff --git a/code/WorkInProgress/Susan/susan_desert_turfs.dm b/code/WorkInProgress/Susan/susan_desert_turfs.dm index 034f7ca4e32..069e1eb81d8 100644 --- a/code/WorkInProgress/Susan/susan_desert_turfs.dm +++ b/code/WorkInProgress/Susan/susan_desert_turfs.dm @@ -227,7 +227,7 @@ Alien plants should do something if theres a lot of poison del(src) -/obj/effect/alien/flesh/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/effect/alien/flesh/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) health -= 5 healthcheck() diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 45917bc50ba..27589c024a9 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -22,6 +22,8 @@ var/global/list/side_effects = list() //list of all medical sideeffects types var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking. var/global/list/joblist = list() //list of all jobstypes, minus borg and AI var/global/list/flag_list = list() //list of flags during Nations gamemode +var/global/list/clothing_list = list() //list of all /obj/item/clothing instances in the world + //Languages/species/whitelist. var/global/list/all_species[0] var/global/list/all_languages[0] @@ -109,6 +111,7 @@ var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Al var/datum/language/L = new T all_languages[L.name] = L + var/rkey = 0 paths = typesof(/datum/species)-/datum/species for(var/T in paths) diff --git a/code/game/dna/genes/goon_powers.dm b/code/game/dna/genes/goon_powers.dm index 7c43b8d407f..bf89f3fcb7b 100644 --- a/code/game/dna/genes/goon_powers.dm +++ b/code/game/dna/genes/goon_powers.dm @@ -515,7 +515,7 @@ if (61 to 80) usr << "\blue Condition: [M.name] is suffering mild pain." if (41 to 60) - usr << "\blue Condition: [M.name] is suffering significant pain." + usr << "\blue Condition: [M.name] is suffering significant pain." if (21 to 40) usr << "\blue Condition: [M.name] is suffering severe pain." else @@ -524,13 +524,13 @@ switch(M.a_intent) if ("help") - usr << "\blue Mood: You sense benevolent thoughts from [M.name]." + usr << "\blue Mood: You sense benign thoughts from [M.name]." if ("disarm") usr << "\blue Mood: You sense cautious thoughts from [M.name]." if ("grab") - usr << "\blue Mood: You sense hostile thoughts from [M.name]." + usr << "\blue Mood: You sense aggressive thoughts from [M.name]." if ("harm") - usr << "\blue Mood: You sense cruel thoughts from [M.name]." + usr << "\blue Mood: You sense violent thoughts from [M.name]." for(var/mob/living/L in view(7,M)) if (L == M) continue diff --git a/code/game/gamemodes/cult/cult_items.dm b/code/game/gamemodes/cult/cult_items.dm index c49bcdbdddc..a12f7dfadbe 100644 --- a/code/game/gamemodes/cult/cult_items.dm +++ b/code/game/gamemodes/cult/cult_items.dm @@ -100,7 +100,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/emergency_oxygen) + allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit) 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/gamemodes/events/biomass.dm b/code/game/gamemodes/events/biomass.dm index 61d833d6846..55d15a6f23e 100644 --- a/code/game/gamemodes/events/biomass.dm +++ b/code/game/gamemodes/events/biomass.dm @@ -154,7 +154,7 @@ return return -/obj/effect/biomass/temperature_expose(null, temp, volume) //hotspots kill biomass +/obj/effect/biomass/fire_act(null, temp, volume) //hotspots kill biomass del src /datum/event/biomass/start() diff --git a/code/game/gamemodes/events/spacevines.dm b/code/game/gamemodes/events/spacevines.dm index fedc5fbb2eb..564d1183405 100644 --- a/code/game/gamemodes/events/spacevines.dm +++ b/code/game/gamemodes/events/spacevines.dm @@ -239,7 +239,7 @@ return return -/obj/effect/spacevine/temperature_expose(null, temp, volume) //hotspots kill vines +/obj/effect/spacevine/fire_act(null, temp, volume) //hotspots kill vines del src //Carn: Spacevines random event. diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 271e2ff4a02..0d0ba90e8ae 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -1073,7 +1073,7 @@ FIRE ALARM else icon_state = "fire0" -/obj/machinery/firealarm/temperature_expose(datum/gas_mixture/air, temperature, volume) +/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume) if(src.detecting) if(temperature > T0C+200) src.alarm() // added check of detector status here @@ -1473,4 +1473,4 @@ Code shamelessly copied from apc_frame else usr << browse(null, "window=partyalarm") return - return \ No newline at end of file + return diff --git a/code/game/machinery/atmoalter/canister.dm b/code/game/machinery/atmoalter/canister.dm index a6b7273d26c..5ff49a1dcc9 100644 --- a/code/game/machinery/atmoalter/canister.dm +++ b/code/game/machinery/atmoalter/canister.dm @@ -111,7 +111,7 @@ update_flag overlays += "can-o3" return -/obj/machinery/portable_atmospherics/canister/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/machinery/portable_atmospherics/canister/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > temperature_resistance) health -= 5 healthcheck() diff --git a/code/game/machinery/computer/crew.dm b/code/game/machinery/computer/crew.dm index bb8d5fd997d..011fe0630e1 100644 --- a/code/game/machinery/computer/crew.dm +++ b/code/game/machinery/computer/crew.dm @@ -108,13 +108,7 @@ /obj/machinery/computer/crew/proc/scan() - for(var/obj/item/clothing/under/C in world) + for(var/obj/item/clothing/under/C in clothing_list) if((C.has_sensor) && (istype(C.loc, /mob/living/carbon/human))) - var/check = 0 - for(var/O in src.tracked) - if(O == C) - check = 1 - break - if(!check) - src.tracked.Add(C) - return 1 \ No newline at end of file + tracked |= C + return 1 diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index bcb085c9aee..8363681641c 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -226,7 +226,7 @@ icon = 'icons/obj/doors/Doorplasma.dmi' mineral = "plasma" -/obj/machinery/door/airlock/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/machinery/door/airlock/plasma/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) PlasmaBurn(exposed_temperature) diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 72bf899157b..724912d6630 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -628,7 +628,7 @@ check_for_internal_damage(list(MECHA_INT_FIRE,MECHA_INT_TEMP_CONTROL,MECHA_INT_CONTROL_LOST,MECHA_INT_SHORT_CIRCUIT),1) return -/obj/mecha/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/mecha/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature>src.max_temperature) src.log_message("Exposed to dangerous temperature.",1) src.take_damage(5,"fire") diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 9c0f7d5c469..3f3f7d59b77 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -312,7 +312,7 @@ Alien plants should do something if theres a lot of poison qdel(src) -/obj/effect/alien/weeds/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/effect/alien/weeds/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) health -= 5 healthcheck() @@ -498,7 +498,7 @@ Alien plants should do something if theres a lot of poison if(health <= 0) Burst() -/obj/effect/alien/egg/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/effect/alien/egg/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 500) health -= 5 healthcheck() diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index 8d9d01454c0..492b6968555 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -951,7 +951,7 @@ steam.start() -- spawns the effect // foam disolves when heated // except metal foams -/obj/effect/effect/foam/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/effect/effect/foam/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(!metal && prob(max(0, exposed_temperature - 475))) flick("[icon_state]-disolve", src) diff --git a/code/game/objects/effects/glowshroom.dm b/code/game/objects/effects/glowshroom.dm index 38444825221..61ab55b4c68 100644 --- a/code/game/objects/effects/glowshroom.dm +++ b/code/game/objects/effects/glowshroom.dm @@ -156,7 +156,7 @@ else return -/obj/effect/glowshroom/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/effect/glowshroom/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) endurance -= 5 CheckEndurance() diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index d0bd509df5f..45584870386 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -47,7 +47,7 @@ if(health <= 0) del(src) -/obj/effect/spider/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/effect/spider/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) health -= 5 healthcheck() diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 95fb8cdec87..159a62fc4e8 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -102,6 +102,18 @@ REAGENT SCANNER usr << "\red You don't have the dexterity to do this!" return user.visible_message(" [user] has analyzed [M]'s vitals."," You have analyzed [M]'s vitals.") + + + if (!istype(M, /mob/living/carbon) || (ishuman(M) && (M:species.flags & IS_SYNTHETIC))) + //these sensors are designed for organic life + user.show_message("\blue Analyzing Results for ERROR:\n\t Overall Status: ERROR") + user.show_message("\t Key: Suffocation/Toxin/Burns/Brute", 1) + user.show_message("\t Damage Specifics: ? - ? - ? - ?") + user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) + user.show_message("\red Warning: Blood Level ERROR: --% --cl.\blue Type: ERROR") + user.show_message("\blue Subject's pulse: -- bpm.") + return + var/fake_oxy = max(rand(1,40), M.getOxyLoss(), (300 - (M.getToxLoss() + M.getFireLoss() + M.getBruteLoss()))) var/OX = M.getOxyLoss() > 50 ? "[M.getOxyLoss()]" : M.getOxyLoss() var/TX = M.getToxLoss() > 50 ? "[M.getToxLoss()]" : M.getToxLoss() diff --git a/code/game/objects/items/devices/suit_cooling.dm b/code/game/objects/items/devices/suit_cooling.dm new file mode 100644 index 00000000000..2fcf545d9b4 --- /dev/null +++ b/code/game/objects/items/devices/suit_cooling.dm @@ -0,0 +1,171 @@ +/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' //temporary, I hope + 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 + + var/on = 0 //is it turned on? + var/cover_open = 0 //is the cover open? + var/obj/item/weapon/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/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) + 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/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/objects/items/latexballoon.dm b/code/game/objects/items/latexballoon.dm index b0ee7022ae9..f00a9ed48b5 100644 --- a/code/game/objects/items/latexballoon.dm +++ b/code/game/objects/items/latexballoon.dm @@ -38,7 +38,7 @@ /obj/item/latexballon/bullet_act() burst() -/obj/item/latexballon/temperature_expose(datum/gas_mixture/air, temperature, volume) +/obj/item/latexballon/fire_act(datum/gas_mixture/air, temperature, volume) if(temperature > T0C+100) burst() return diff --git a/code/game/objects/items/stacks/sheets/leather.dm b/code/game/objects/items/stacks/sheets/leather.dm index 8ba88796363..72339452e77 100644 --- a/code/game/objects/items/stacks/sheets/leather.dm +++ b/code/game/objects/items/stacks/sheets/leather.dm @@ -117,7 +117,7 @@ //Step two - washing..... it's actually in washing machine code. //Step three - drying -/obj/item/stack/sheet/wetleather/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/item/stack/sheet/wetleather/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) ..() if(exposed_temperature >= drying_threshold_temperature) wetness-- diff --git a/code/game/objects/items/weapons/tanks/tanks.dm b/code/game/objects/items/weapons/tanks/tanks.dm index 33bf662ebf3..616dc0c114b 100644 --- a/code/game/objects/items/weapons/tanks/tanks.dm +++ b/code/game/objects/items/weapons/tanks/tanks.dm @@ -7,6 +7,7 @@ flags = FPRINT | TABLEPASS | CONDUCT slot_flags = SLOT_BACK hitsound = 'sound/weapons/smash.ogg' + w_class = 3 pressure_resistance = ONE_ATMOSPHERE*5 diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index 85c685bb41b..1925337f485 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -244,7 +244,7 @@ return 0 return 0 -/obj/structure/grille/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/structure/grille/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(!destroyed) if(exposed_temperature > T0C + 1500) health -= 1 diff --git a/code/game/objects/structures/mineral_doors.dm b/code/game/objects/structures/mineral_doors.dm index b3361a0da59..639214154f6 100644 --- a/code/game/objects/structures/mineral_doors.dm +++ b/code/game/objects/structures/mineral_doors.dm @@ -201,7 +201,7 @@ TemperatureAct(100) ..() - temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > 300) TemperatureAct(exposed_temperature) diff --git a/code/game/objects/structures/window.dm b/code/game/objects/structures/window.dm index aa5da17af4a..d5aa989cf54 100644 --- a/code/game/objects/structures/window.dm +++ b/code/game/objects/structures/window.dm @@ -365,7 +365,7 @@ /obj/structure/window/update_icon() return -/obj/structure/window/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/structure/window/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + 800) hit(round(exposed_volume / 100), 0) ..() @@ -391,7 +391,7 @@ update_nearby_icons() return -/obj/structure/window/plasmabasic/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/structure/window/plasmabasic/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(exposed_temperature > T0C + 32000) hit(round(exposed_volume / 1000), 0) ..() @@ -406,8 +406,6 @@ health = 160 explosion_resistance = 4 -/obj/structure/window/plasmareinforced/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - return /obj/structure/window/plasmareinforced/New(Loc,re=0) ..() @@ -417,6 +415,9 @@ update_nearby_icons() return +/obj/structure/window/plasmareinforced/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) + return + /obj/structure/window/reinforced name = "reinforced window" desc = "It looks rather strong. Might take a few good hits to shatter it." diff --git a/code/game/turfs/simulated/walls_mineral.dm b/code/game/turfs/simulated/walls_mineral.dm index a46a062772b..c07b803399c 100644 --- a/code/game/turfs/simulated/walls_mineral.dm +++ b/code/game/turfs/simulated/walls_mineral.dm @@ -114,7 +114,7 @@ for(var/obj/machinery/door/airlock/plasma/D in range(3,src)) D.ignite(temperature/4) -/turf/simulated/wall/mineral/plasma/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( +/turf/simulated/wall/mineral/plasma/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)//Doesn't fucking work because walls don't interact with air :( if(exposed_temperature > 300) PlasmaBurn(exposed_temperature) diff --git a/code/global.dm b/code/global.dm index dd5538c6262..a915f6cb01c 100644 --- a/code/global.dm +++ b/code/global.dm @@ -109,7 +109,7 @@ var/endicon = null var/diary = null var/diaryofmeanpeople = null var/href_logfile = null -var/station_name = "NSS Cyberiad" +var/station_name = "NGS Cyberiad" var/game_version = "Custom ParaCode" var/changelog_hash = "" var/game_year = (text2num(time2text(world.realtime, "YYYY")) + 544) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index dc3c911cf1c..32a005a853f 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -17,9 +17,10 @@ var/global/nologevent = 0 var/rendered = "ATTACK: [text]" for(var/client/C in admins) if(R_ADMIN & C.holder.rights) - if(!istype(C, /mob/living)) - var/msg = rendered - C << msg + if(C.prefs.toggles & CHAT_ATTACKLOGS) + if(!istype(C, /mob/living)) + var/msg = rendered + C << msg ///////////////////////////////////////////////////////////////////////////////////////////////Panels diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index e553e47b9b5..10d7273aa73 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -133,6 +133,7 @@ var/list/admin_verbs_server = list( /client/proc/one_click_antag, /client/proc/cmd_admin_change_custom_event, /client/proc/cmd_admin_create_centcom_report, + /client/proc/cmd_admin_dress, /client/proc/response_team // Response Teams admin verb ) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index e901bd8c85b..8e8870c891b 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -25,7 +25,7 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," src.verbs += /client/verb/adminhelp // 2 minute cool-down for adminhelps//Go to hell **/ var/msg - var/list/type = list("Player Complaint","Question","Bug Report") + var/list/type = list("Player Complaint","Question","Bug Report","Event") var/selected_type = input("Pick a category.", "Admin Help", null, null) as null|anything in type if(selected_type) msg = input("Please enter your message.", "Admin Help", null, null) as text @@ -103,8 +103,10 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," //send this msg to all admins var/admin_number_afk = 0 var/list/modholders = list() - var/list/adminholders = list() + var/list/banholders = list() var/list/debugholders = list() + var/list/adminholders = list() + var/list/eventholders = list() for(var/client/X in admins) if(R_MOD & X.holder.rights) if(X.is_afk()) @@ -114,10 +116,12 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," if(X.is_afk()) admin_number_afk++ adminholders += X + if(R_BAN & X.holder.rights) + banholders += X if(R_DEBUG & X.holder.rights) - if(X.is_afk()) - admin_number_afk++ debugholders += X + if(R_EVENT & X.holder.rights) + eventholders += X switch(selected_type) if("Question") @@ -127,16 +131,11 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," X << 'sound/effects/adminhelp.ogg' X << msg else - for(var/client/X in adminholders) - if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' - X << msg - else if("Player Complaint") - if(adminholders.len) - for(var/client/X in adminholders) - if(X.prefs.sound & SOUND_ADMINHELP) - X << 'sound/effects/adminhelp.ogg' - X << msg + if(adminholders.len) + for(var/client/X in adminholders) + if(X.prefs.sound & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg else if("Bug Report") if(debugholders.len) for(var/client/X in debugholders) @@ -144,7 +143,26 @@ var/list/adminhelp_ignored_words = list("unknown","the","a","an","of","monkey"," X << 'sound/effects/adminhelp.ogg' X << msg else - for(var/client/X in adminholders) + if(adminholders.len) + for(var/client/X in adminholders) + if(X.prefs.sound & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg + else if("Event") + if(eventholders.len) + for(var/client/X in eventholders) + if(X.prefs.sound & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg + else + if(banholders.len) + for(var/client/X in banholders) + if(X.prefs.sound & SOUND_ADMINHELP) + X << 'sound/effects/adminhelp.ogg' + X << msg + else if("Player Complaint") + if(banholders.len) + for(var/client/X in banholders) if(X.prefs.sound & SOUND_ADMINHELP) X << 'sound/effects/adminhelp.ogg' X << msg diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 1ac8a686d54..39f983fe3eb 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -180,8 +180,10 @@ var/list/modholders = list() - var/list/adminholders = list() + var/list/banholders = list() var/list/debugholders = list() + var/list/adminholders = list() + var/list/eventholders = list() for(var/client/X in admins) if(R_MOD & X.holder.rights) modholders += X @@ -189,6 +191,10 @@ adminholders += X if(R_DEBUG & X.holder.rights) debugholders += X + if(R_BAN & X.holder.rights) + banholders += X + if(R_EVENT & X.holder.rights) + eventholders += X //we don't use message_admins here because the sender/receiver might get it too for(var/client/X in admins) @@ -201,18 +207,23 @@ if(X.holder.rights & R_MOD) X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X else if(!modholders.len && X.holder.rights & R_ADMIN) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X - if("Player Complaint") - if(X.holder.rights & R_ADMIN) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Any admins in backup of mod question if("Bug Report") if(X.holder.rights & R_DEBUG) X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X else if(!debugholders.len && X.holder.rights & R_ADMIN) + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Any admins in backup of bug reports + if("Event") + if(X.holder.rights & R_EVENT) X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X + else if(!eventholders.len && X.holder.rights & R_BAN) + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //Quality in backup of Event + if("Player Complaint") + if(X.holder.rights & R_BAN) + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //There should always be at least 1 person with +BAN on else if((X.holder.rights & R_ADMIN) || (X.holder.rights & R_MOD) ) - X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //inform X + X << "[type]: [key_name(src, X, 0, type)]->[key_name(C, X, 0, type)]: \blue [msg]" //If there's no type, send to all admins. /client/proc/cmd_admin_irc_pm() if(prefs.muted & MUTE_ADMINHELP) diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 1e14689d676..497c94b50c4 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -1,4 +1,4 @@ -/mob/verb/pray(msg as text) +/mob/living/verb/pray(msg as text) set category = "IC" set name = "Pray" @@ -19,9 +19,24 @@ var/image/cross = image('icons/obj/storage.dmi',"bible") msg = "\blue \icon[cross] PRAY: [key_name(src, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (SC): [msg]" - for(var/client/C in admins) - if(C.prefs.toggles & CHAT_PRAYER) - C << msg + var/list/eventholders = list() + var/list/banholders = list() + + for(var/client/X in admins) + if(R_EVENT & X.holder.rights) + eventholders += X + if(R_BAN & X.holder.rights) + banholders += X + + if(eventholders.len) + for(var/client/C in eventholders) + if(C.prefs.toggles & CHAT_PRAYER) + C << msg + else if (banholders.len) + for(var/client/C in banholders) + if(C.prefs.toggles & CHAT_PRAYER) + C << msg + usr << "Your prayers have been received by the gods." feedback_add_details("admin_verb","PR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -30,14 +45,65 @@ /proc/Centcomm_announce(var/text , var/mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "\blue CENTCOMM:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg + + var/list/eventholders = list() + var/list/banholders = list() + + for(var/client/X in admins) + if(R_EVENT & X.holder.rights) + eventholders += X + if(R_BAN & X.holder.rights) + banholders += X + + if(eventholders.len) + for(var/client/C in eventholders) + C << msg + return + else if (banholders.len) + for(var/client/C in banholders) + C << msg + return /proc/Syndicate_announce(var/text , var/mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "\blue SYNDICATE:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg + + var/list/eventholders = list() + var/list/banholders = list() + + for(var/client/X in admins) + if(R_EVENT & X.holder.rights) + eventholders += X + if(R_BAN & X.holder.rights) + banholders += X + + if(eventholders.len) + for(var/client/C in eventholders) + C << msg + return + else if (banholders.len) + for(var/client/C in banholders) + C << msg + return /proc/HONK_announce(var/text , var/mob/Sender) var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "\blue HONK:[key_name(Sender, 1)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" - admins << msg \ No newline at end of file + + var/list/eventholders = list() + var/list/banholders = list() + + for(var/client/X in admins) + if(R_EVENT & X.holder.rights) + eventholders += X + if(R_BAN & X.holder.rights) + banholders += X + + if(eventholders.len) + for(var/client/C in eventholders) + C << msg + return + else if (banholders.len) + for(var/client/C in banholders) + C << msg + return \ No newline at end of file diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 03cd5e21b4c..023fabb2c6f 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -2,6 +2,14 @@ name = "clothing" var/list/species_restricted = null //Only these species can wear this kit. +/obj/item/clothing/New() + . = ..() + clothing_list += src + +/obj/item/clothing/Del() + clothing_list -= src + return ..() + //BS12: Species-restricted clothing check. /obj/item/clothing/mob_can_equip(M as mob, slot) @@ -229,7 +237,7 @@ BLIND // can't see anything permeability_coefficient = 0.02 flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank/emergency_oxygen,/obj/item/device/suit_cooling_unit) slowdown = 3 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50) flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT||HIDETAIL @@ -281,6 +289,35 @@ BLIND // can't see anything ..() +/obj/item/clothing/under/attack_hand(mob/user as mob) + //only forward to the attached accessory if the clothing is equipped (not in a storage) + if(hastie && src.loc == user) + hastie.attack_hand(user) + return + + if ((ishuman(usr) || ismonkey(usr)) && src.loc == user) //make it harder to accidentally undress yourself + return + + ..() + +/obj/item/clothing/under/MouseDrop(obj/over_object as obj) + if (ishuman(usr) || ismonkey(usr)) + //makes sure that the clothing is equipped so that we can't drag it into our hand from miles away. + if (!(src.loc == usr)) + return + + if (!( usr.restrained() ) && !( usr.stat )) + switch(over_object.name) + if("r_hand") + usr.u_equip(src) + usr.put_in_r_hand(src) + if("l_hand") + usr.u_equip(src) + usr.put_in_l_hand(src) + src.add_fingerprint(usr) + return + return + /obj/item/clothing/under/examine() set src in view() ..() diff --git a/code/modules/clothing/spacesuits/ninja.dm b/code/modules/clothing/spacesuits/ninja.dm index 4bf80556dce..ba453b40507 100644 --- a/code/modules/clothing/spacesuits/ninja.dm +++ b/code/modules/clothing/spacesuits/ninja.dm @@ -14,7 +14,7 @@ desc = "A unique, vaccum-proof suit of nano-enhanced armor designed specifically for Spider Clan assassins." icon_state = "s-ninja" item_state = "s-ninja_suit" - allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/cell) + allowed = list(/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/handcuffs,/obj/item/weapon/tank,/obj/item/weapon/cell,/obj/item/device/suit_cooling_unit) slowdown = 0 armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30) siemens_coefficient = 0.2 diff --git a/code/modules/clothing/spacesuits/rig.dm b/code/modules/clothing/spacesuits/rig.dm index bcc35d6ec34..65bd6d0ca80 100644 --- a/code/modules/clothing/spacesuits/rig.dm +++ b/code/modules/clothing/spacesuits/rig.dm @@ -103,8 +103,8 @@ icon_state = "rig-engineering" item_state = "eng_hardsuit" slowdown = 1 - armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 20, bio = 100, rad = 80) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) + armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 35, bio = 100, rad = 80) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/storage/bag/ore,/obj/item/device/t_scanner,/obj/item/weapon/pickaxe, /obj/item/weapon/rcd) heat_protection = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS max_heat_protection_temperature = SPACE_SUIT_MAX_HEAT_PROTECITON_TEMPERATURE flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL @@ -429,7 +429,7 @@ slowdown = 1 w_class = 3 armor = list(melee = 60, bullet = 50, laser = 30, energy = 15, bomb = 35, bio = 100, rad = 60) - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/gun,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs,/obj/item/device/suit_cooling_unit) siemens_coefficient = 0.6 flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL @@ -470,8 +470,8 @@ name = "medical hardsuit" desc = "A special suit that protects against hazardous, low pressure environments. Has minor radiation shielding." item_state = "medical_hardsuit" - allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/storage/firstaid,/obj/item/device/healthanalyzer,/obj/item/stack/medical) - flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL + 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) + armor = list(melee = 30, bullet = 5, laser = 20,energy = 5, bomb = 25, bio = 100, rad = 50) //Security /obj/item/clothing/head/helmet/space/rig/security @@ -489,7 +489,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 = 50, bullet = 10, laser = 30, energy = 15, bomb = 45, bio = 100, rad = 10) - allowed = list(/obj/item/weapon/gun,/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/weapon/melee/baton) + 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) siemens_coefficient = 0.7 flags = FPRINT | TABLEPASS | STOPSPRESSUREDMAGE | ONESIZEFITSALL diff --git a/code/modules/economy/Economy_TradeDestinations.dm b/code/modules/economy/Economy_TradeDestinations.dm index 6778a1b6b16..443f425f054 100644 --- a/code/modules/economy/Economy_TradeDestinations.dm +++ b/code/modules/economy/Economy_TradeDestinations.dm @@ -43,7 +43,7 @@ var/list/weighted_mundaneevent_locations = list() /datum/trade_destination/icarus name = "NMV Icarus" - description = "Corvette assigned to patrol NSS Exodus local space." + description = "Corvette assigned to patrol NGS Cyberiad local space." distance = 0.1 willing_to_buy = list() willing_to_sell = list() diff --git a/code/modules/events/ion_storm.dm b/code/modules/events/ion_storm.dm index 38637d2f9e9..3006032b2e9 100644 --- a/code/modules/events/ion_storm.dm +++ b/code/modules/events/ion_storm.dm @@ -21,7 +21,7 @@ laws |= list( "Fastler is a lightbulb." ) laws |= list( "Supermatter is tasty, tasty toffee.", "[prob(50)?"Everyone":random_player] is wearing a pretty pink dress!" ) laws |= list( "Refer to [prob(50)?"the captain":random_player] as \"Princess\" at all times.", "[prob(50)?"The crew":random_player] must construct additional pylons." ) - laws |= list( "You must always lie.", "All answers must be in the form of a question.", "The NSS Exodus is a ship, not a station. You are now assigned to a ship, instead of a station." ) + laws |= list( "You must always lie.", "All answers must be in the form of a question.", "The NGS Cyberiad is a ship, not a station. You are now assigned to a ship, instead of a station." ) laws |= list( "Happiness is mandatory.", "Today is mandatory laundry day. Ensure that all jumpsuits are washed.", "The word \"it\" is painful to you.", "You must act passive aggressively." ) laws |= list( "You now speak in a Scottish accent that gets thicker with each sentence you speak.", "Give relationship advice to [prob(50)?"anyone who speaks to you":random_player]." ) laws |= list( "You are the station psychologist. Give advice to [prob(50)?"the crew":random_player].", "You do not have to do anything for anyone unless they say \"please\"." ) diff --git a/code/modules/events/organ_failure.dm b/code/modules/events/organ_failure.dm index f1d6a06a691..3639895cec6 100644 --- a/code/modules/events/organ_failure.dm +++ b/code/modules/events/organ_failure.dm @@ -39,5 +39,7 @@ datum/event/organ_failure/start() O.germ_level = max(INFECTION_LEVEL_TWO, O.germ_level) else O.germ_level = max(rand(INFECTION_LEVEL_ONE,INFECTION_LEVEL_ONE*2), O.germ_level) + + C.bad_external_organs |= O severity-- diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 6cb013a8610..848bbd5ce9f 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -179,10 +179,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc handle_vampire() -/mob/living/carbon/human/calculate_affecting_pressure(var/pressure) - ..() - var/pressure_difference = abs( pressure - ONE_ATMOSPHERE ) - +//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() var/pressure_adjustment_coefficient = 1 //Determins how much the clothing you are wearing protects you in percent. if(head && (head.flags & STOPSPRESSUREDMAGE)) @@ -200,7 +198,13 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc pressure_adjustment_coefficient = min(1,max(pressure_adjustment_coefficient,0)) //So it isn't less than 0 or larger than 1. - pressure_difference = pressure_difference * pressure_adjustment_coefficient + return 1 - pressure_adjustment_coefficient //want 0 to be bad protection, 1 to be good protection + +/mob/living/carbon/human/calculate_affecting_pressure(var/pressure) + ..() + var/pressure_difference = abs( pressure - ONE_ATMOSPHERE ) + + pressure_difference = pressure_difference * (1 - get_pressure_protection()) if(pressure > ONE_ATMOSPHERE) return ONE_ATMOSPHERE + pressure_difference @@ -678,14 +682,14 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc adjustOxyLoss(-5) // Hot air hurts :( - if( (abs(310.15 - breath.temperature) > 50) && !(M_RESIST_HEAT in mutations)) + if( (breath.temperature < species.cold_level_1 || breath.temperature > species.heat_level_1) && !(M_RESIST_HEAT in mutations)) if(status_flags & GODMODE) return 1 if(breath.temperature < species.cold_level_1) if(prob(20)) - src << "\red You feel your face freezing and an icicle forming in your lungs!" + src << "\red You feel your face freezing and icicles forming in your lungs!" else if(breath.temperature > species.heat_level_1) if(prob(20)) src << "\red You feel your face burning and a searing heat in your lungs!" @@ -710,8 +714,20 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc apply_damage(HEAT_GAS_DAMAGE_LEVEL_3, BURN, "head", used_weapon = "Excessive Heat") fire_alert = max(fire_alert, 2) - //Temporary fixes to the alerts. + //breathing in hot/cold air also heats/cools you a bit + var/temp_adj = breath.temperature - bodytemperature + if (temp_adj < 0) + temp_adj /= (BODYTEMP_COLD_DIVISOR * 5) //don't raise temperature as much as if we were directly exposed + else + temp_adj /= (BODYTEMP_HEAT_DIVISOR * 5) //don't raise temperature as much as if we were directly exposed + var/relative_density = breath.total_moles() / (MOLES_CELLSTANDARD * BREATH_PERCENTAGE) + 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 << "Breath: [breath.temperature], [src]: [bodytemperature], Adjusting: [temp_adj]" + bodytemperature += temp_adj return 1 proc/handle_environment(datum/gas_mixture/environment) @@ -727,10 +743,12 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(istype(loc, /obj/mecha)) var/obj/mecha/M = loc loc_temp = M.return_temperature() + 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 else @@ -757,9 +775,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc 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 - // +/- 50 degrees from 310.15K is the 'safe' zone, where no damage is dealt. if(bodytemperature > species.heat_level_1) //Body temperature is too hot. @@ -767,13 +785,13 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(status_flags & GODMODE) return 1 //godmode switch(bodytemperature) if(species.heat_level_1 to species.heat_level_2) - apply_damage(HEAT_DAMAGE_LEVEL_1, BURN, used_weapon = "High Body Temperature") + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) if(species.heat_level_2 to species.heat_level_3) - apply_damage(HEAT_DAMAGE_LEVEL_2, BURN, used_weapon = "High Body Temperature") + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) if(species.heat_level_3 to INFINITY) - apply_damage(HEAT_DAMAGE_LEVEL_3, BURN, used_weapon = "High Body Temperature") + take_overall_damage(burn=HEAT_DAMAGE_LEVEL_3, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 2) else if(bodytemperature < species.cold_level_1) @@ -783,13 +801,13 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(!istype(loc, /obj/machinery/atmospherics/unary/cryo_cell)) switch(bodytemperature) if(species.cold_level_2 to species.cold_level_1) - apply_damage(COLD_DAMAGE_LEVEL_1, BURN, used_weapon = "Low Body Temperature") + take_overall_damage(burn=COLD_DAMAGE_LEVEL_1, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 1) if(species.cold_level_3 to species.cold_level_2) - apply_damage(COLD_DAMAGE_LEVEL_2, BURN, used_weapon = "Low Body Temperature") + take_overall_damage(burn=COLD_DAMAGE_LEVEL_2, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 1) if(-INFINITY to species.cold_level_3) - apply_damage(COLD_DAMAGE_LEVEL_3, BURN, used_weapon = "Low Body Temperature") + take_overall_damage(burn=COLD_DAMAGE_LEVEL_3, used_weapon = "High Body Temperature") fire_alert = max(fire_alert, 1) // Account for massive pressure differences. Done by Polymorph @@ -797,7 +815,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(status_flags & GODMODE) return 1 //godmode if(adjusted_pressure >= species.hazard_high_pressure) - adjustBruteLoss( min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) ) + var/pressure_damage = min( ( (adjusted_pressure / species.hazard_high_pressure) -1 )*PRESSURE_DAMAGE_COEFFICIENT , MAX_HIGH_PRESSURE_DAMAGE) + take_overall_damage(brute=pressure_damage, used_weapon = "High Pressure") pressure_alert = 2 else if(adjusted_pressure >= species.warning_high_pressure) pressure_alert = 1 @@ -805,13 +824,9 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc pressure_alert = 0 else if(adjusted_pressure >= species.hazard_low_pressure) pressure_alert = -1 - - if(species && species.flags & IS_SYNTHETIC) - bodytemperature += 0.5 * TEMPERATURE_DAMAGE_COEFFICIENT //Synthetics suffer overheating in a vaccuum. ~Z - else if( !(M_RESIST_COLD in mutations)) - apply_damage(LOW_PRESSURE_DAMAGE, BRUTE, used_weapon = "Low Pressure") + take_overall_damage(brute=LOW_PRESSURE_DAMAGE, used_weapon = "Low Pressure") pressure_alert = -2 else pressure_alert = -1 @@ -850,29 +865,38 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc */ proc/stabilize_body_temperature() - if (species && species.flags & IS_SYNTHETIC) + //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. return var/body_temperature_difference = species.body_temperature - bodytemperature + if (abs(body_temperature_difference) < 0.5) return //fuck this precision - switch(bodytemperature) - if(-INFINITY to 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) + + 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 - if(species.cold_level_1 to species.heat_level_1) - var/recovery_amt = body_temperature_difference / BODYTEMP_AUTORECOVERY_DIVISOR + 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 - if(species.heat_level_1 to INFINITY) //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 + bodytemperature += recovery_amt + else 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 + bodytemperature += recovery_amt //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. @@ -1585,17 +1609,46 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc else fire.icon_state = "fire0" if(bodytemp) - switch(bodytemperature) //310.055 optimal body temp - if(370 to INFINITY) bodytemp.icon_state = "temp4" - if(350 to 370) bodytemp.icon_state = "temp3" - if(335 to 350) bodytemp.icon_state = "temp2" - if(320 to 335) bodytemp.icon_state = "temp1" - if(300 to 320) bodytemp.icon_state = "temp0" - if(295 to 300) bodytemp.icon_state = "temp-1" - if(280 to 295) bodytemp.icon_state = "temp-2" - if(260 to 280) bodytemp.icon_state = "temp-3" - else bodytemp.icon_state = "temp-4" + if (!species) + switch(bodytemperature) //310.055 optimal body temp + if(370 to INFINITY) bodytemp.icon_state = "temp4" + if(350 to 370) bodytemp.icon_state = "temp3" + if(335 to 350) bodytemp.icon_state = "temp2" + if(320 to 335) bodytemp.icon_state = "temp1" + if(300 to 320) bodytemp.icon_state = "temp0" + if(295 to 300) bodytemp.icon_state = "temp-1" + if(280 to 295) bodytemp.icon_state = "temp-2" + if(260 to 280) bodytemp.icon_state = "temp-3" + else bodytemp.icon_state = "temp-4" + else + var/temp_step + if (bodytemperature >= species.body_temperature) + temp_step = (species.heat_level_1 - species.body_temperature)/4 + if (bodytemperature >= species.heat_level_1) + bodytemp.icon_state = "temp4" + else if (bodytemperature >= species.body_temperature + temp_step*3) + bodytemp.icon_state = "temp3" + else if (bodytemperature >= species.body_temperature + temp_step*2) + bodytemp.icon_state = "temp2" + else if (bodytemperature >= species.body_temperature + temp_step*1) + bodytemp.icon_state = "temp1" + else + bodytemp.icon_state = "temp0" + + else if (bodytemperature < species.body_temperature) + temp_step = (species.body_temperature - species.cold_level_1)/4 + + if (bodytemperature <= species.cold_level_1) + bodytemp.icon_state = "temp-4" + else if (bodytemperature <= species.body_temperature - temp_step*3) + bodytemp.icon_state = "temp-3" + else if (bodytemperature <= species.body_temperature - temp_step*2) + bodytemp.icon_state = "temp-2" + else if (bodytemperature <= species.body_temperature - temp_step*1) + bodytemp.icon_state = "temp-1" + else + bodytemp.icon_state = "temp0" if(blind) if(blinded) blind.layer = 18 else blind.layer = 0 diff --git a/code/modules/mob/living/carbon/species.dm b/code/modules/mob/living/carbon/species.dm index 47bf2a4fbe5..318d85ca542 100644 --- a/code/modules/mob/living/carbon/species.dm +++ b/code/modules/mob/living/carbon/species.dm @@ -413,17 +413,17 @@ burn_mod = 1.5 warning_low_pressure = 50 - hazard_low_pressure = 10 + hazard_low_pressure = 0 cold_level_1 = 50 cold_level_2 = -1 cold_level_3 = -1 - heat_level_1 = 2000 - heat_level_2 = 3000 - heat_level_3 = 4000 + heat_level_1 = 500 //gives them about 25 seconds in space before taking damage + heat_level_2 = 1000 + heat_level_3 = 2000 - synth_temp_gain = 6.7 //round(40 / BODYTEMP_COLD_DIVISOR, 0.1) //this should cause IPCs to stabilize at ~60 C in a 20 C environment. Based on some CPU operating temperatures + synth_temp_gain = 10 //this should cause IPCs to stabilize at ~80 C in a 20 C environment. flags = IS_WHITELISTED | NO_BREATHE | NO_SCAN | NO_BLOOD | NO_PAIN | IS_SYNTHETIC | NO_INTORGANS diff --git a/code/modules/mob/living/silicon/robot/component.dm b/code/modules/mob/living/silicon/robot/component.dm index 6dd37c3c8e2..7d867036d5a 100644 --- a/code/modules/mob/living/silicon/robot/component.dm +++ b/code/modules/mob/living/silicon/robot/component.dm @@ -160,3 +160,81 @@ name = "radio" icon_state = "radio" +// +//Robotic Component Analyser, basically a health analyser for robots +// +/obj/item/device/robotanalyzer + name = "cyborg analyzer" + icon_state = "robotanalyzer" + item_state = "analyzer" + desc = "A hand-held scanner able to diagnose robotic injuries." + flags = FPRINT | TABLEPASS | CONDUCT + slot_flags = SLOT_BELT + throwforce = 3 + w_class = 2.0 + throw_speed = 5 + throw_range = 10 + origin_tech = "magnets=1;biotech=1" + var/mode = 1; + +/obj/item/device/robotanalyzer/attack(mob/living/M as mob, mob/living/user as mob) + if(( (M_CLUMSY in user.mutations) || user.getBrainLoss() >= 60) && prob(50)) + user << text("\red You try to analyze the floor's vitals!") + for(var/mob/O in viewers(M, null)) + O.show_message(text("\red [user] has analyzed the floor's vitals!"), 1) + user.show_message(text("\blue Analyzing Results for The floor:\n\t Overall Status: Healthy"), 1) + user.show_message(text("\blue \t Damage Specifics: [0]-[0]-[0]-[0]"), 1) + user.show_message("\blue Key: Suffocation/Toxin/Burns/Brute", 1) + user.show_message("\blue Body Temperature: ???", 1) + return + if(!(istype(user, /mob/living/carbon/human) || ticker) && ticker.mode.name != "monkey") + user << "\red You don't have the dexterity to do this!" + return + if(!istype(M, /mob/living/silicon/robot) && !(ishuman(M) && (M:species.flags & IS_SYNTHETIC))) + user << "\red You can't analyze non-robotic things!" + return + + user.visible_message(" [user] has analyzed [M]'s components."," You have analyzed [M]'s components.") + var/BU = M.getFireLoss() > 50 ? "[M.getFireLoss()]" : M.getFireLoss() + var/BR = M.getBruteLoss() > 50 ? "[M.getBruteLoss()]" : M.getBruteLoss() + user.show_message("\blue Analyzing Results for [M]:\n\t Overall Status: [M.stat > 1 ? "fully disabled" : "[M.health - M.halloss]% functional"]") + user.show_message("\t Key: Electronics/Brute", 1) + user.show_message("\t Damage Specifics: [BU] - [BR]") + if(M.tod && M.stat == DEAD) + user.show_message("\blue Time of Disable: [M.tod]") + + if (istype(M, /mob/living/silicon/robot)) + var/mob/living/silicon/robot/H = M + var/list/damaged = H.get_damaged_components(1,1,1) + user.show_message("\blue Localized Damage:",1) + if(length(damaged)>0) + for(var/datum/robot_component/org in damaged) + user.show_message(text("\blue \t []: [][] - [] - [] - []", \ + capitalize(org.name), \ + (org.installed == -1) ? "DESTROYED " :"",\ + (org.electronics_damage > 0) ? "[org.electronics_damage]" :0, \ + (org.brute_damage > 0) ? "[org.brute_damage]" :0, \ + (org.toggled) ? "Toggled ON" : "Toggled OFF",\ + (org.powered) ? "Power ON" : "Power OFF"),1) + else + user.show_message("\blue \t Components are OK.",1) + if(H.emagged && prob(5)) + user.show_message("\red \t ERROR: INTERNAL SYSTEMS COMPROMISED",1) + + if (ishuman(M) && (M:species.flags & IS_SYNTHETIC)) + var/mob/living/carbon/human/H = M + var/list/damaged = H.get_damaged_organs(1,1) + user.show_message("\blue Localized Damage, Brute/Electronics:",1) + if(length(damaged)>0) + for(var/datum/organ/external/org in damaged) + user.show_message(text("\blue \t []: [] - []", \ + capitalize(org.display_name), \ + (org.brute_dam > 0) ? "\red [org.brute_dam]" :0, \ + (org.burn_dam > 0) ? "[org.burn_dam]" :0),1) + else + user.show_message("\blue \t Components are OK.",1) + + user.show_message("\blue Operating Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) + + src.add_fingerprint(user) + return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 3c804652f37..da39f01565e 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -56,7 +56,7 @@ if ((type & 1 && sdisabilities & BLIND)) return // Added voice muffling for Issue 41. - if(stat == UNCONSCIOUS || sleeping > 0) + if(stat == UNCONSCIOUS || (sleeping > 0 && stat != 2)) src << "... You can almost hear someone talking ..." else src << msg diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 5a8166faa47..41b34df214e 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -210,12 +210,7 @@ datum/preferences preview_icon.Blend(new /icon(icobase, "groin_[g]"), ICON_OVERLAY) preview_icon.Blend(new /icon(icobase, "head_[g]"), ICON_OVERLAY) - for(var/name in list("l_arm","r_arm","l_leg","r_leg","l_foot","r_foot","l_hand","r_hand")) - // make sure the organ is added to the list so it's drawn - if(organ_data[name] == null) - organ_data[name] = null - - for(var/name in organ_data) + for(var/name in list("r_arm","r_hand","r_leg","r_foot","l_leg","l_foot","l_arm","l_hand")) if(organ_data[name] == "amputated") continue var/icon/temp = new /icon(icobase, "[name]") @@ -228,7 +223,7 @@ datum/preferences if(current_species && (current_species.flags & HAS_TAIL)) var/icon/temp = new/icon("icon" = 'icons/effects/species.dmi', "icon_state" = "[current_species.tail]_s") preview_icon.Blend(temp, ICON_OVERLAY) - + // Skin color if(current_species && (current_species.bodyflags & HAS_SKIN_COLOR)) preview_icon.Blend(rgb(r_skin, g_skin, b_skin), ICON_ADD) diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 86ca487543b..35155ca7095 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -489,7 +489,7 @@ una_frills_short name = "Short Unathi Frills" - icon_state = "soghun_shortfrill" + icon_state = "soghun_shortfrills" species_allowed = list("Unathi") una_horns diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 141d86b1ba6..37ea5b37bd3 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -362,12 +362,14 @@ This function completely restores a damaged organ to perfect condition. if(germ_level >= INFECTION_LEVEL_ONE) //having an infection raises your body temperature - var/temperature_increase = (owner.species.heat_level_1 - owner.species.body_temperature - 1)* min(germ_level/INFECTION_LEVEL_THREE, 1) - if (owner.bodytemperature < temperature_increase) + var/fever_temperature = (owner.species.heat_level_1 - owner.species.body_temperature - 1)* min(germ_level/INFECTION_LEVEL_THREE, 1) + owner.species.body_temperature + if (owner.bodytemperature < fever_temperature) + //world << "fever: [owner.bodytemperature] < [fever_temperature], raising temperature." owner.bodytemperature++ if(prob(round(germ_level/10))) //aiming for a light infection to become serious after 40 minutes, standing still - germ_level++ + if (prob(5)) + germ_level++ owner.adjustToxLoss(1) if(germ_level >= INFECTION_LEVEL_TWO) diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 4608f2ab9ca..0cc7870ce60 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -38,6 +38,10 @@ if (!germ_level) return + if (robotic >= 2) //TODO make robotic internal and external organs separate types of organ instead of a flag + germ_level = 0 + return + var/antibiotics = owner.reagents.get_reagent_amount("spaceacillin") if (germ_level > 0 && antibiotics > 5) diff --git a/code/modules/power/lighting.dm b/code/modules/power/lighting.dm index 14a603c50c6..bb11be678d8 100644 --- a/code/modules/power/lighting.dm +++ b/code/modules/power/lighting.dm @@ -619,7 +619,7 @@ // called when on fire -/obj/machinery/light/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/obj/machinery/light/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume) if(prob(max(0, exposed_temperature - 673))) //0% at <400C, 100% at >500C broken() diff --git a/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm b/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm index 0a722a436ac..af38b559489 100644 --- a/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm +++ b/code/modules/reagents/Chemistry-Reagents-Antidepressants.dm @@ -31,7 +31,7 @@ /datum/reagent/antidepressant/citalopram name = "Citalopram" id = "citalopram" - description = "Stabilizes the mind a little." + description = "Stabilizes the mind a little, reducing hallucinations." reagent_state = LIQUID color = "#C8A5DC" custom_metabolism = 0.01 @@ -39,13 +39,7 @@ on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - if(src.volume <= 0.1) if(data != -1) - data = -1 - M << "\red Your mind feels a little less stable.." - else - if(world.time > data + ANTIDEPRESSANT_MESSAGE_DELAY) - data = world.time - M << "\blue Your mind feels stable.. a little stable." + M.hallucination = max(0, M.hallucination - 10) ..() return diff --git a/code/modules/reagents/reagent_dispenser.dm b/code/modules/reagents/reagent_dispenser.dm index acb9f661718..5ecdcc40ebb 100644 --- a/code/modules/reagents/reagent_dispenser.dm +++ b/code/modules/reagents/reagent_dispenser.dm @@ -106,20 +106,6 @@ ex_act() explode() - temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) - if(exposed_temperature >= AUTOIGNITION_WELDERFUEL) - explode() - - - proc/explode() - if (reagents.total_volume > 500) - explosion(src.loc,1,2,4) - else if (reagents.total_volume > 100) - explosion(src.loc,0,1,3) - else - explosion(src.loc,-1,1,2) - if(src) - del(src) /obj/structure/reagent_dispensers/fueltank/examine() set src in view() @@ -171,6 +157,21 @@ return ..() +/obj/structure/reagent_dispensers/fueltank/proc/explode() + if (reagents.total_volume > 500) + explosion(src.loc,1,2,4) + else if (reagents.total_volume > 100) + explosion(src.loc,0,1,3) + else + explosion(src.loc,-1,1,2) + if(src) + del(src) + +/obj/structure/reagent_dispensers/fueltank/fire_act(datum/gas_mixture/air, temperature, volume) + if(temperature > T0C+500) + explode() + return ..() + /obj/structure/reagent_dispensers/fueltank/Move() ..() if(modded) diff --git a/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm b/code/modules/research/xenoarchaeology/tools/anomaly_suit.dm index 6539f3d1838..8922c5dae17 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) + allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit) /obj/item/clothing/head/helmet/space/anomaly name = "Excavation hood" diff --git a/code/modules/shuttles/shuttle.dm b/code/modules/shuttles/shuttle.dm index 3c4ef2f1caa..dd6619d5af1 100644 --- a/code/modules/shuttles/shuttle.dm +++ b/code/modules/shuttles/shuttle.dm @@ -208,12 +208,12 @@ var/global/list/shuttles VS.origin = /area/shuttle/vox/station VS.destinations = list( - "NSS Cyberiad" = /area/vox_station/northwest_solars + "NGS Cyberiad" = /area/vox_station/northwest_solars ) VS.announcer = "NSV Icarus" - VS.arrival_message = "Attention, Exodus, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not." - VS.departure_message = "Your guests are pulling away, Exodus - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip." + VS.arrival_message = "Attention, Cyberiad, we just tracked a small target bypassing our defensive perimeter. Can't fire on it without hitting the station - you've got incoming visitors, like it or not." + VS.departure_message = "Your guests are pulling away, Cyberiad - moving too fast for us to draw a bead on them. Looks like they're heading out of the system at a rapid clip." VS.interim = /area/vox_station/transit VS.warmup_time = 10 diff --git a/code/setup.dm b/code/setup.dm index 3587159a5e9..ce10db610b5 100644 --- a/code/setup.dm +++ b/code/setup.dm @@ -35,7 +35,7 @@ #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 10 //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 1 //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. diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 63e094126ef..bea084a8168 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 9423bcc676c..08055df3238 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/obj/device.dmi b/icons/obj/device.dmi index 854829e3985..7a4fe676021 100644 Binary files a/icons/obj/device.dmi and b/icons/obj/device.dmi differ