diff --git a/code/game/gamemodes/events/space_ninja.dm b/code/game/gamemodes/events/space_ninja.dm index 1bf2406db5..3dac9f2148 100644 --- a/code/game/gamemodes/events/space_ninja.dm +++ b/code/game/gamemodes/events/space_ninja.dm @@ -531,20 +531,31 @@ As such, it's hard-coded for now. No reason for it not to be, really. else equip_to_slot_or_del(new /obj/item/clothing/under/color/black(src), slot_w_uniform) + equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask) + equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) + var/obj/item/weapon/rig/light/ninja/ninjasuit = new(src) // Make sure the ninja can actually equip the suit. if(src.dna && src.dna.unique_enzymes) - src << "Suit hardware locked to your DNA hash." ninjasuit.locked_dna = src.dna.unique_enzymes + spawn(10) + src << "Suit hardware locked to your DNA hash." else ninjasuit.req_access = list() equip_to_slot_or_del(ninjasuit,slot_back) + + if(istype(wear_suit,/obj/item/weapon/rig)) + var/obj/item/weapon/rig/rig = wear_suit + if(rig.air_supply) + internal = rig.air_supply + if(!internal && s_store) + internal = s_store + if(internal) + internals.icon_state = "internal1" + spawn(10) ninjasuit.toggle_seals(src,1) - equip_to_slot_or_del(new /obj/item/clothing/mask/gas/voice/space_ninja(src), slot_wear_mask) - equip_to_slot_or_del(new /obj/item/device/flashlight(src), slot_belt) - equip_to_slot_or_del(new /obj/item/weapon/tank/oxygen(src), slot_s_store) - return 1 + return 1 \ No newline at end of file diff --git a/code/game/jobs/job/medical.dm b/code/game/jobs/job/medical.dm index 085ca17a80..b3c6ad7e98 100644 --- a/code/game/jobs/job/medical.dm +++ b/code/game/jobs/job/medical.dm @@ -27,16 +27,14 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chief_medical_officer(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/heads/cmo(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) return 1 - - + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) /datum/job/doctor title = "Medical Doctor" @@ -54,6 +52,8 @@ equip(var/mob/living/carbon/human/H) if(!H) return 0 H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) + H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand) switch(H.backbag) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) @@ -90,14 +90,12 @@ else H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/firstaid/adv(H), slot_l_hand) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) + H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) return 1 @@ -123,13 +121,13 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/chemist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/chemist(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit) switch(H.backbag) if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/chemistry(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_chem(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/chemist(H), slot_wear_suit) return 1 @@ -153,48 +151,15 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/geneticist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/geneticist(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) switch(H.backbag) if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/genetics(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_gen(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) - return 1 - -/*/datum/job/virologist - title = "Virologist" - flag = VIROLOGIST - department_flag = MEDSCI - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the chief medical officer" - selection_color = "#ffeef0" - access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics) - minimal_access = list(access_medical, access_virology) - alt_titles = list("Pathologist","Microbiologist") - - - equip(var/mob/living/carbon/human/H) - if(!H) return 0 - H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_med(H), slot_l_ear) - switch(H.backbag) - if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/medic(H), slot_back) - if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_med(H), slot_back) - if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/virologist(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/device/pda/viro(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/mask/surgical(H), slot_wear_mask) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/virologist(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/genetics(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/device/flashlight/pen(H), slot_s_store) - if(H.backbag == 1) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) - else - H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) - return 1*/ + return 1 /datum/job/psychiatrist title = "Psychiatrist" @@ -224,10 +189,10 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/psych/turtleneck(H), slot_w_uniform) else H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/medical(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/laceup(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/medical(H), slot_belt) if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) \ No newline at end of file diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index b18e8b8ec1..e387e0d4be 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -25,7 +25,6 @@ H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/research_director(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/device/pda/heads/rd(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) H.equip_to_slot_or_del(new /obj/item/weapon/clipboard(H), slot_l_hand) switch(H.backbag) if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) @@ -33,6 +32,7 @@ if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) return 1 @@ -58,13 +58,13 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit) switch(H.backbag) if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit) return 1 @@ -89,16 +89,15 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/scientist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/white(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/science(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit) switch(H.backbag) if(1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/toxins(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel_tox(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat/science(H), slot_wear_suit) return 1 - /datum/job/roboticist title = "Roboticist" flag = ROBOTICIST @@ -122,11 +121,10 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/roboticist(H), slot_belt) - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) -// H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand) if(H.backbag == 1) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) else H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) - return 1 + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/toggle/labcoat(H), slot_wear_suit) + return 1 \ No newline at end of file diff --git a/code/game/jobs/job/security.dm b/code/game/jobs/job/security.dm index cc0628c284..6d25f7fe58 100644 --- a/code/game/jobs/job/security.dm +++ b/code/game/jobs/job/security.dm @@ -106,17 +106,8 @@ H.equip_to_slot_or_del(new /obj/item/clothing/under/det(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/brown(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/device/pda/detective(H), slot_belt) -/* var/obj/item/clothing/mask/cigarette/CIG = new /obj/item/clothing/mask/cigarette(H) - CIG.light("") - H.equip_to_slot_or_del(CIG, slot_wear_mask) */ H.equip_to_slot_or_del(new /obj/item/clothing/gloves/black(H), slot_gloves) - if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician") - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit) - else - H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head) H.equip_to_slot_or_del(new /obj/item/weapon/flame/lighter/zippo(H), slot_l_store) - if(H.backbag == 1)//Why cant some of these things spawn in his office? H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H), slot_r_hand) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_l_hand) @@ -125,7 +116,11 @@ H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/survival(H.back), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/weapon/storage/box/evidence(H), slot_in_backpack) H.equip_to_slot_or_del(new /obj/item/device/detective_scanner(H), slot_in_backpack) - + if(H.mind.role_alt_title && H.mind.role_alt_title == "Forensic Technician") + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/forensics/blue(H), slot_wear_suit) + else + H.equip_to_slot_or_del(new /obj/item/clothing/suit/storage/det_suit(H), slot_wear_suit) + H.equip_to_slot_or_del(new /obj/item/clothing/head/det_hat(H), slot_head) return 1 diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 326f705a5d..b3918713e7 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -379,16 +379,17 @@ var/global/datum/controller/occupations/job_master continue if(G.slot && !(G.slot in custom_equip_slots)) - if(H.equip_to_slot_or_del(new G.path(H), G.slot)) + // This is a miserable way to fix the loadout overwrite bug, but the alternative requires + // adding an arg to a bunch of different procs. Will look into it after this merge. ~ Z + if(G.slot == slot_wear_mask || G.slot == slot_wear_suit || G.slot == slot_head) + custom_equip_leftovers += thing + else if(H.equip_to_slot_or_del(new G.path(H), G.slot)) H << "\blue Equipping you with [thing]!" custom_equip_slots.Add(G.slot) else custom_equip_leftovers.Add(thing) - else spawn_in_storage += thing - - //Equip job items. job.equip(H) job.apply_fingerprints(H) diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 40a38621be..847663ee4a 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -341,7 +341,7 @@ if(slot_w_uniform) if(H.w_uniform) return 0 - if(H.wear_suit) + if(H.wear_suit && (H.wear_suit.body_parts_covered & src.body_parts_covered)) if(!disable_warning) H << "\The [H.wear_suit] is in the way." return 0 diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 6945729b5f..7767ecd307 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -67,7 +67,7 @@ /obj/item/device/aicard/Topic(href, href_list) var/mob/U = usr - if (!(get_turf(U) == get_turf(src)) || U.machine != src)//If they are not in range of 1 or less or their machine is not the card (ie, clicked on something else). + if (get_dist(get_turf(U),get_turf(src)) > 1 || U.machine != src)//If they are not in range of 1 or less or their machine is not the card (ie, clicked on something else). U << browse(null, "window=aicard") U.unset_machine() return diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 9461b9477c..721becf039 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -460,8 +460,6 @@ Traitors and the like can also be revived with the previous role mostly intact. call(/datum/game_mode/proc/equip_syndicate)(new_character) if("Ninja") new_character.equip_space_ninja() - new_character.internal = new_character.s_store - new_character.internals.icon_state = "internal1" if(ninjastart.len == 0) new_character << "\red A proper starting location for you could not be found, please report this bug!" new_character << "\red Attempting to place at a carpspawn." diff --git a/code/modules/clothing/spacesuits/rig/modules/computer.dm b/code/modules/clothing/spacesuits/rig/modules/computer.dm index 7b7e2374d4..71293ef450 100644 --- a/code/modules/clothing/spacesuits/rig/modules/computer.dm +++ b/code/modules/clothing/spacesuits/rig/modules/computer.dm @@ -138,11 +138,15 @@ if(ai_card) if(istype(ai_card, /obj/item/device/aicard)) - if(integrated_ai && integrated_ai.client) + if(integrated_ai && !integrated_ai.stat) if(user) user << "You cannot eject your currently stored AI. Purge it manually." return 0 - del(ai_card) + user << "You purge the remaining scraps of data from your previous AI, freeing it for use." + if(integrated_ai) + integrated_ai.ghostize() + del(integrated_ai) + if(ai_card) del(ai_card) else if(user) user.put_in_hands(ai_card) else diff --git a/code/modules/clothing/spacesuits/rig/modules/utility.dm b/code/modules/clothing/spacesuits/rig/modules/utility.dm index 06a72bc352..3a09ad41b1 100644 --- a/code/modules/clothing/spacesuits/rig/modules/utility.dm +++ b/code/modules/clothing/spacesuits/rig/modules/utility.dm @@ -58,7 +58,9 @@ desc = "You think it's called an Elder Sarsparilla or something." interface_name = "Alden-Saraspova counter" interface_desc = "An exotic particle detector commonly used by xenoarchaeologists." - selectable = 1 + engage_string = "Begin Scan" + usable = 1 + selectable = 0 device_type = /obj/item/device/ano_scanner /obj/item/rig_module/device/orescanner @@ -66,12 +68,9 @@ desc = "A clunky old ore scanner." interface_name = "ore detector" interface_desc = "A sonar system for detecting large masses of ore." - engage_string = "Begin Scan" - usable = 1 selectable = 0 - device_type = /obj/item/weapon/mining_scanner /obj/item/rig_module/device/rcd diff --git a/code/modules/hydroponics/seed_mobs.dm b/code/modules/hydroponics/seed_mobs.dm index a08de942d0..9fe3702eac 100644 --- a/code/modules/hydroponics/seed_mobs.dm +++ b/code/modules/hydroponics/seed_mobs.dm @@ -25,7 +25,7 @@ /datum/seed/proc/request_player(var/mob/living/host) if(!host) return for(var/mob/dead/observer/O in player_list) - if(jobban_isbanned(O, "Dionaea") || (!is_alien_whitelisted(O, "Diona") && config.usealienwhitelist)) + if(jobban_isbanned(O, "Dionaea")) continue if(O.client) if(O.client.prefs.be_special & BE_PLANT && !(O.client in currently_querying)) diff --git a/code/modules/mob/hear_say.dm b/code/modules/mob/hear_say.dm index 04fa4273a0..ffe9df9839 100644 --- a/code/modules/mob/hear_say.dm +++ b/code/modules/mob/hear_say.dm @@ -8,7 +8,7 @@ //Does the speaker have a client? It's either random stuff that observers won't care about (Experiment 97B says, 'EHEHEHEHEHEHEHE') //Or someone snoring. So we make it where they won't hear it. return - + //make sure the air can transmit speech - hearer's side var/turf/T = get_turf(src) if (T) @@ -16,22 +16,22 @@ var/pressure = (environment)? environment.return_pressure() : 0 if(pressure < SOUND_MINIMUM_PRESSURE && get_dist(speaker, src) > 1) return - + if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet italics = 1 sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact - + if(sleeping || stat == 1) hear_sleep(message) return var/style = "body" - + //non-verbal languages are garbled if you can't see the speaker. Yes, this includes if they are inside a closet. if (language && (language.flags & NONVERBAL)) if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src))) message = stars(message) - + if(!say_understands(speaker,language)) if(istype(speaker,/mob/living/simple_animal)) var/mob/living/simple_animal/S = speaker @@ -89,11 +89,14 @@ if (language && (language.flags & NONVERBAL)) if (!speaker || (src.sdisabilities & BLIND || src.blinded) || !(speaker in view(src))) message = stars(message) - + if(!say_understands(speaker,language)) if(istype(speaker,/mob/living/simple_animal)) var/mob/living/simple_animal/S = speaker - message = pick(S.speak) + if(S.speak && S.speak.len) + message = pick(S.speak) + else + return else message = stars(message) @@ -173,7 +176,7 @@ /mob/proc/hear_signlang(var/message, var/verb = "gestures", var/datum/language/language, var/mob/speaker = null) if(!client) return - + if(say_understands(speaker, language)) message = "[src] [verb], \"[message]\"" else diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index d1adff7de2..1b8cf6eee6 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -58,6 +58,7 @@ desc = "It's a tiny plant critter." icon_state = "nymph" origin_tech = "magnets=3;biotech=5" + slot_flags = SLOT_HEAD | SLOT_OCLOTHING /obj/item/weapon/holder/drone name = "maintenance drone" diff --git a/code/modules/mob/language.dm b/code/modules/mob/language.dm index 2e627330a0..b3ac986487 100755 --- a/code/modules/mob/language.dm +++ b/code/modules/mob/language.dm @@ -81,7 +81,7 @@ ask_verb = "creels" exclaim_verb = "SHRIEKS" colour = "vox" - key = "v" + key = "5" flags = RESTRICTED /datum/language/diona diff --git a/code/modules/mob/living/carbon/alien/diona/diona.dm b/code/modules/mob/living/carbon/alien/diona/diona.dm index a91f55d4b6..d2e362269a 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona.dm @@ -12,8 +12,8 @@ var/list/donors = list() var/last_checked_stage = 0 - universal_understand = 0 // Dionaea do not need to speak to people - universal_speak = 0 // before becoming an adult. Use *chirp. + universal_understand = 1 + universal_speak = 0 // Dionaea do not need to speak to people other than other dionaea. holder_type = /obj/item/weapon/holder/diona /mob/living/carbon/alien/diona/New() diff --git a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm index b8a47501a8..bac7c75d2b 100644 --- a/code/modules/mob/living/carbon/alien/diona/diona_powers.dm +++ b/code/modules/mob/living/carbon/alien/diona/diona_powers.dm @@ -5,6 +5,9 @@ set name = "Merge with gestalt" set desc = "Merge with another diona." + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + if(istype(src.loc,/mob/living/carbon)) src.verbs -= /mob/living/carbon/alien/diona/proc/merge return @@ -40,6 +43,9 @@ set name = "Split from gestalt" set desc = "Split away from your gestalt as a lone nymph." + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + if(!(istype(src.loc,/mob/living/carbon))) src.verbs -= /mob/living/carbon/alien/diona/proc/split return @@ -64,6 +70,9 @@ set name = "Steal Blood" set desc = "Take a blood sample from a suitable donor." + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + var/list/choices = list() for(var/mob/living/carbon/human/H in oview(1,src)) if(src.Adjacent(H)) diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index 7a51069fe8..67488df9eb 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -61,28 +61,28 @@ silent = 0 else updatehealth() - + handle_stunned() + handle_weakened() if(health <= 0) death() blinded = 1 silent = 0 return 1 - if(paralysis) - AdjustParalysis(-1) + if(paralysis && paralysis > 0) + handle_paralysed() blinded = 1 stat = UNCONSCIOUS if(halloss > 0) adjustHalLoss(-3) - else if(sleeping) + if(sleeping) adjustHalLoss(-3) if (mind) if((mind.active && client != null) || immune_to_ssd) sleeping = max(sleeping-1, 0) blinded = 1 stat = UNCONSCIOUS - else if(resting) if(halloss > 0) adjustHalLoss(-3) diff --git a/code/modules/mob/living/carbon/carbon_powers.dm b/code/modules/mob/living/carbon/carbon_powers.dm index 7dc0f45087..6f52ac106c 100644 --- a/code/modules/mob/living/carbon/carbon_powers.dm +++ b/code/modules/mob/living/carbon/carbon_powers.dm @@ -6,6 +6,9 @@ set name = "Fertilize plant" set desc = "Turn your food into nutrients for plants." + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + var/list/trays = list() for(var/obj/machinery/portable_atmospherics/hydroponics/tray in range(1)) if(tray.nutrilevel < 10 && src.Adjacent(tray)) @@ -25,6 +28,9 @@ set name = "Eat Weeds" set desc = "Clean the weeds out of soil or a hydroponics tray." + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + var/list/trays = list() for(var/obj/machinery/portable_atmospherics/hydroponics/tray in range(1)) if(tray.weedlevel > 0 && src.Adjacent(tray)) diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index f883ce46ff..5ca7d569dd 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -457,8 +457,9 @@ set name = "Resist" set category = "IC" - if(!isliving(usr) || usr.next_move > world.time) + if(usr.stat || !isliving(usr) || usr.next_move > world.time) return + usr.next_move = world.time + 20 var/mob/living/L = usr diff --git a/code/modules/mob/living/living_powers.dm b/code/modules/mob/living/living_powers.dm index d2a8e35320..da94c1abde 100644 --- a/code/modules/mob/living/living_powers.dm +++ b/code/modules/mob/living/living_powers.dm @@ -2,14 +2,20 @@ set name = "Crawl through Vent" set desc = "Enter an air vent and crawl through the pipe system." set category = "Abilities" + + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + handle_ventcrawl() - return /mob/living/proc/hide() set name = "Hide" set desc = "Allows to hide beneath tables or certain items. Toggled on or off." set category = "Abilities" + if(stat == DEAD || paralysis || weakened || stunned || restrained()) + return + if (layer != TURF_LAYER+0.2) layer = TURF_LAYER+0.2 src << text("\blue You are now hiding.") diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 28404b3d8a..622ee23bc7 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -13,7 +13,7 @@ var/list/department_radio_keys = list( ":t" = "Mercenary", "#t" = "Mercenary", ".t" = "Mercenary", ":u" = "Supply", "#u" = "Supply", ".u" = "Supply", ":v" = "Service", "#v" = "Service", ".v" = "Service", - ":o" = "AI Private", "#o" = "AI Private", ".o" = "AI Private", + ":p" = "AI Private", "#p" = "AI Private", ".p" = "AI Private", ":R" = "right ear", "#R" = "right ear", ".R" = "right ear", ":L" = "left ear", "#L" = "left ear", ".L" = "left ear", @@ -28,7 +28,7 @@ var/list/department_radio_keys = list( ":T" = "Mercenary", "#T" = "Mercenary", ".T" = "Mercenary", ":U" = "Supply", "#U" = "Supply", ".U" = "Supply", ":V" = "Service", "#V" = "Service", ".V" = "Service", - ":O" = "AI Private", "#O" = "AI Private", ".O" = "AI Private", + ":P" = "AI Private", "#P" = "AI Private", ".P" = "AI Private", //kinda localization -- rastaf0 //same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding. @@ -91,7 +91,7 @@ proc/get_radio_key_from_channel(var/channel) if (speaking.flags & SIGNLANG) return say_signlang(message, pick(speaking.signlang_verb), speaking) - + var/list/listening = list() var/list/listening_obj = list() @@ -101,11 +101,11 @@ proc/get_radio_key_from_channel(var/channel) var/pressure = (environment)? environment.return_pressure() : 0 if(pressure < SOUND_MINIMUM_PRESSURE) message_range = 1 - + if (pressure < ONE_ATMOSPHERE*0.4) //sound distortion pressure, to help clue people in that the air is thin, even if it isn't a vacuum yet italics = 1 sound_vol *= 0.5 //muffle the sound a bit, so it's like we're actually talking through contact - + var/list/hear = hear(message_range, T) var/list/hearturfs = list() diff --git a/code/modules/nano/nanoui.dm b/code/modules/nano/nanoui.dm index b4d2015538..91e97c0cb5 100644 --- a/code/modules/nano/nanoui.dm +++ b/code/modules/nano/nanoui.dm @@ -11,7 +11,7 @@ nanoui is used to open and update nano browser uis #define STATUS_UPDATE 1 // ORANGE Visability #define STATUS_DISABLED 0 // RED Visability -/datum/nanoui +/datum/nanoui // the user who opened this ui var/mob/user // the object this ui "belongs" to @@ -103,13 +103,13 @@ nanoui is used to open and update nano browser uis add_script("libraries.min.js") // A JS file comprising of jQuery, doT.js and jQuery Timer libraries (compressed together) add_script("nano_utility.js") // The NanoUtility JS, this is used to store utility functions. add_script("nano_template.js") // The NanoTemplate JS, this is used to render templates. - add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state - add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from - add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState + add_script("nano_state_manager.js") // The NanoStateManager JS, it handles updates from the server and passes data to the current state + add_script("nano_state.js") // The NanoState JS, this is the base state which all states must inherit from + add_script("nano_state_default.js") // The NanoStateDefault JS, this is the "default" state (used by all UIs by default), which inherits from NanoState add_script("nano_base_callbacks.js") // The NanoBaseCallbacks JS, this is used to set up (before and after update) callbacks which are common to all UIs add_script("nano_base_helpers.js") // The NanoBaseHelpers JS, this is used to set up template helpers which are common to all UIs add_stylesheet("shared.css") // this CSS sheet is common to all UIs - add_stylesheet("icons.css") // this CSS sheet is common to all UIs + add_stylesheet("icons.css") // this CSS sheet is common to all UIs /** * Set the current status (also known as visibility) of this ui. @@ -127,7 +127,7 @@ nanoui is used to open and update nano browser uis update() else status = state - if (push_update || status == 0) + if (push_update || status == 0) push_data(null, 1) // Update the UI, force the update in case the status is 0, data is null so that previous data is used /** @@ -138,7 +138,7 @@ nanoui is used to open and update nano browser uis * @return nothing */ /datum/nanoui/proc/update_status(var/push_update = 0) - if (istype(user, /mob/living/silicon/ai)) + if (istype(user, /mob/living/silicon/ai) || (get_dist(get_turf(user),get_turf(src_object)) <= 1)) set_status(STATUS_INTERACTIVE, push_update) // interactive (green visibility) else if (istype(user, /mob/living/silicon/robot)) if (src_object in view(7, user)) // robots can see and interact with things they can see within 7 tiles @@ -151,12 +151,12 @@ nanoui is used to open and update nano browser uis if (dist > 4) close() return - + if ((allowed_user_stat > -1) && (user.stat > allowed_user_stat)) set_status(STATUS_DISABLED, push_update) // no updates, completely disabled (red visibility) else if (user.restrained() || user.lying) set_status(STATUS_UPDATE, push_update) // update only (orange visibility) - else if (istype(src_object, /obj/item/device/uplink/hidden)) // You know what if they have the uplink open let them use the UI + else if (istype(src_object, /obj/item/device/uplink/hidden)) // You know what if they have the uplink open let them use the UI set_status(STATUS_INTERACTIVE, push_update) // Will build in distance checks on the topics for sanity. else if (!(src_object in view(4, user))) // If the src object is not in visable, set status to 0 set_status(STATUS_DISABLED, push_update) // interactive (green visibility) @@ -203,7 +203,7 @@ nanoui is used to open and update nano browser uis "showMap" = show_map, "mapZLevel" = map_z_level, "user" = list("name" = user.name) - ) + ) return config_data /** @@ -215,12 +215,12 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/get_send_data(var/list/data) var/list/config_data = get_config_data() - + var/list/send_data = list("config" = config_data) - + if (!isnull(data)) send_data["data"] = data - + return send_data /** @@ -267,11 +267,11 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/add_template(key, filename) templates[key] = filename - + /** * Set the layout key for use in the frontend Javascript * The layout key is the basic layout key for the page - * Two files are loaded on the client based on the layout key varable: + * Two files are loaded on the client based on the layout key varable: * -> a template in /nano/templates with the filename "layout_.tmpl * -> a CSS stylesheet in /nano/css with the filename "layout_.css * @@ -301,7 +301,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/set_auto_update_content(nstate) auto_update_content = nstate - + /** * Set the state key for use in the frontend Javascript * @@ -310,8 +310,8 @@ nanoui is used to open and update nano browser uis * @return nothing */ /datum/nanoui/proc/set_state_key(nstate_key) - state_key = nstate_key - + state_key = nstate_key + /** * Toggle showing the map ui * @@ -321,7 +321,7 @@ nanoui is used to open and update nano browser uis */ /datum/nanoui/proc/set_show_map(nstate) show_map = nstate - + /** * Toggle showing the map ui * @@ -352,15 +352,15 @@ nanoui is used to open and update nano browser uis // before the UI opens, add the layout files based on the layout key add_stylesheet("layout_[layout_key].css") add_template("layout", "layout_[layout_key].tmpl") - + var/head_content = "" - + for (var/filename in scripts) head_content += " " - + for (var/filename in stylesheets) head_content += " " - + var/template_data_json = "{}" // An empty JSON object if (templates.len > 0) template_data_json = list2json(templates) @@ -378,7 +378,7 @@ nanoui is used to open and update nano browser uis [head_content] - +