diff --git a/code/__DEFINES/layers_planes.dm b/code/__DEFINES/layers_planes.dm index 7168862899766..2a897f8b31329 100644 --- a/code/__DEFINES/layers_planes.dm +++ b/code/__DEFINES/layers_planes.dm @@ -215,6 +215,8 @@ /// Plane related to the menu when pressing Escape. /// Needed so that we can apply a blur effect to EVERYTHING, and guarantee we are above all UI. #define ESCAPE_MENU_PLANE 105 +#define ESCAPE_MENU_DIMMER_LAYER 105.1 +#define ESCAPE_MENU_DEFAULT_LAYER 105.2 #define RENDER_PLANE_MASTER 110 diff --git a/code/datums/ert.dm b/code/datums/ert.dm index e303d08caa6b9..36631ae84012f 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -85,7 +85,7 @@ mission = "Разберитесь с проблемами на станции [station_name()], а также проведите плановую проверку всех Отделов и Командования." /datum/ert/inquisition - roles = list(/datum/antagonist/ert/chaplain/inquisitor, /datum/antagonist/ert/security/inquisitor, /datum/antagonist/ert/medic/inquisitor) + roles = list(/datum/antagonist/ert/security/inquisitor, /datum/antagonist/ert/medic/inquisitor) leader_role = /datum/antagonist/ert/commander/inquisitor rename_team = "Inquisition" mission = "Уничтожьте любые следы паранормальной активности на борту Космической Станции Тринадцатого Сектора." diff --git a/code/game/gamemodes/clock_cult/clock_cult.dm b/code/game/gamemodes/clock_cult/clock_cult.dm index c698a6843011b..ffaacb5123a0c 100644 --- a/code/game/gamemodes/clock_cult/clock_cult.dm +++ b/code/game/gamemodes/clock_cult/clock_cult.dm @@ -62,6 +62,8 @@ Credit where due: return FALSE if(M.mind.unconvertable) return FALSE + if (IS_HERETIC(M)) + return FALSE else return FALSE if(iscultist(M) || isconstruct(M) || ispAI(M)) diff --git a/code/game/gamemodes/cult/cult.dm b/code/game/gamemodes/cult/cult.dm index 4c93d0891ca01..e4e4724929d90 100644 --- a/code/game/gamemodes/cult/cult.dm +++ b/code/game/gamemodes/cult/cult.dm @@ -27,6 +27,8 @@ return FALSE if(M.mind.unconvertable) return FALSE + if(IS_HERETIC(M)) + return FALSE else return FALSE if(HAS_TRAIT(M, TRAIT_MINDSHIELD) || issilicon(M) || isbot(M) || isdrone(M) || is_servant_of_ratvar(M) || !M.client) diff --git a/code/game/machinery/dance_machine.dm b/code/game/machinery/dance_machine.dm index 984bbf10c94a4..ab038d41fc63b 100644 --- a/code/game/machinery/dance_machine.dm +++ b/code/game/machinery/dance_machine.dm @@ -398,6 +398,7 @@ /obj/machinery/jukebox/disco/proc/dance3(var/mob/living/M) var/matrix/initial_matrix = matrix(M.transform) + var/matrix/initial_matrix_ = matrix(M.transform) for (var/i in 1 to 75) if (!M) return @@ -441,7 +442,7 @@ initial_matrix.Translate(-3,0) animate(M, transform = initial_matrix, time = 1, loop = 0) sleep(1) - M.lying_fix() + M.lying_fix(initial_matrix_) /obj/machinery/jukebox/disco/proc/dance4(var/mob/living/M) @@ -459,6 +460,7 @@ time-- /obj/machinery/jukebox/disco/proc/dance5(var/mob/living/M) + var/matrix/initial_matrix_ = matrix(M.transform) animate(M, transform = matrix(180, MATRIX_ROTATE), time = 1, loop = 0) var/matrix/initial_matrix = matrix(M.transform) for (var/i in 1 to 60) @@ -491,10 +493,10 @@ initial_matrix.Translate(-3,0) animate(M, transform = initial_matrix, time = 1, loop = 0) sleep(1) - M.lying_fix() + M.lying_fix(initial_matrix_) -/mob/living/proc/lying_fix() - animate(src, transform = null, time = 1, loop = 0) +/mob/living/proc/lying_fix(var/matrix/initial_matrix) + animate(src, transform = initial_matrix, time = 1, loop = 0) lying_prev = 0 /obj/machinery/jukebox/proc/dance_over() diff --git a/code/game/objects/items/implants/implant_deathrattle.dm b/code/game/objects/items/implants/implant_deathrattle.dm index ed195ab55e425..a346ee3c6d94f 100644 --- a/code/game/objects/items/implants/implant_deathrattle.dm +++ b/code/game/objects/items/implants/implant_deathrattle.dm @@ -67,8 +67,18 @@ if(!group) to_chat(target, "Вы слышите странный механический голос в голове... \"Внимание: Не выявлены другие подключенные импланты.\"") - /obj/item/implantcase/deathrattle name = "implant case - 'Deathrattle'" desc = "A glass case containing a deathrattle implant." imp_type = /obj/item/implant/deathrattle + +GLOBAL_DATUM_INIT(centcom_deathrattle_group, /datum/deathrattle_group, new) + +/obj/item/implant/deathrattle/centcom + name = "centcom deathrattle implant" + desc = "Hope no one else dies, prepare for when they do" + +/obj/item/implant/deathrattle/centcom/implant(mob/living/target, mob/user, silent = FALSE, force = FALSE) + . = ..() + group = GLOB.centcom_deathrattle_group + group.register(src) diff --git a/code/game/objects/items/storage/firstaid.dm b/code/game/objects/items/storage/firstaid.dm index 1094ff22f1b4b..4600e1299f4be 100644 --- a/code/game/objects/items/storage/firstaid.dm +++ b/code/game/objects/items/storage/firstaid.dm @@ -201,9 +201,9 @@ new /obj/item/healthanalyzer/advanced(src) new /obj/item/reagent_containers/syringe/piercing(src) new /obj/item/bonesetter(src) + new /obj/item/pinpointer/crew(src) + new /obj/item/sensor_device(src) new /obj/item/reagent_containers/medspray/sterilizine(src) - new /obj/item/reagent_containers/medspray/sterilizine(src) - new /obj/item/reagent_containers/glass/bottle/morphine(src) new /obj/item/reagent_containers/glass/bottle/morphine(src) new /obj/item/hypospray/mkii/CMO/combat/synthflesh(src) @@ -215,14 +215,13 @@ if(empty) return new /obj/item/stack/medical/gauze(src) - new /obj/item/stack/medical/gauze(src) - new /obj/item/reagent_containers/hypospray/medipen/oxandrolone(src) - new /obj/item/reagent_containers/hypospray/medipen/salacid(src) - new /obj/item/reagent_containers/hypospray/combat/omnizine(src) + new /obj/item/reagent_containers/medspray/sterilizine(src) + new /obj/item/reagent_containers/glass/bottle/morphine(src) + new /obj/item/reagent_containers/glass/bottle/morphine(src) new /obj/item/reagent_containers/hypospray/combat/omnizine(src) new /obj/item/reagent_containers/hypospray/medipen/penacid(src) new /obj/item/reagent_containers/hypospray/medipen/penacid(src) - + new /obj/item/reagent_containers/hypospray/medipen/penacid(src) /obj/item/storage/firstaid/radbgone diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 852aaf22885e8..47b48604e074e 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -571,7 +571,7 @@ gloves = /obj/item/clothing/gloves/tackler/combat/insulated ears = /obj/item/radio/headset/syndicate/alt back = /obj/item/storage/backpack - implants = list(/obj/item/implant/weapons_auth, /obj/item/implant/deathrattle, /obj/item/implant/explosive, /obj/item/implant/mindshield) + implants = list(/obj/item/implant/weapons_auth, /obj/item/implant/deathrattle/centcom, /obj/item/implant/explosive, /obj/item/implant/mindshield) id = /obj/item/card/id/syndicate give_space_cooler_if_synth = TRUE // BLUEMOON ADD @@ -1207,7 +1207,7 @@ /obj/item/storage/firstaid/regular=1, /obj/item/stamp/syndicate=1, ) - implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle, /obj/item/implant/weapons_auth) + implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle/centcom, /obj/item/implant/weapons_auth) cybernetic_implants = list(/obj/item/organ/cyberimp/eyes/hud/security,/obj/item/organ/cyberimp/chest/nutrimentextreme, /obj/item/organ/cyberimp/chest/chem_implant) id = /obj/item/card/id @@ -1260,7 +1260,7 @@ /obj/item/storage/firstaid/regular=1, /obj/item/stamp/centcom=1, ) - implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle, /obj/item/implant/weapons_auth) + implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle/centcom, /obj/item/implant/weapons_auth) cybernetic_implants = list(/obj/item/organ/cyberimp/eyes/hud/security,/obj/item/organ/cyberimp/chest/nutrimentextreme, /obj/item/organ/cyberimp/chest/chem_implant) id = /obj/item/card/id diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index b6d7e6dfbc6db..d0672155e54a8 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -381,7 +381,7 @@ var/datum/antagonist/ert/ert = antag mannequin.equipOutfit(initial(ert.outfit), TRUE) else if (ispath(antag, /datum/antagonist/official)) - mannequin.equipOutfit(/datum/outfit/centcom_official, TRUE) + mannequin.equipOutfit(/datum/outfit/ert/centcom_official, TRUE) /datum/admins/proc/makeERTPreviewIcon(list/settings) // Set up the dummy for its photoshoot diff --git a/code/modules/antagonists/eldritch_cult/eldritch_book.dm b/code/modules/antagonists/eldritch_cult/eldritch_book.dm index ba7fcb0be11f7..d83bc479e017e 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_book.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_book.dm @@ -14,11 +14,14 @@ ///Where we cannot create the rune? var/static/list/blacklisted_turfs = typecacheof(list(/turf/closed,/turf/open/space,/turf/open/lava)) +/obj/item/forbidden_book/Initialize(mapload) + . = ..() + AddComponent(/datum/component/anti_magic, FALSE, FALSE) + /obj/item/forbidden_book/Destroy() last_user = null . = ..() - /obj/item/forbidden_book/examine(mob/user) . = ..() if(!IS_HERETIC(user)) diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 57a69bed2ff78..0ccd37d338d8c 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -131,17 +131,14 @@ /datum/antagonist/ert/medic/inquisitor outfit = /datum/outfit/ert/medic/inquisitor +/datum/antagonist/ert/medic/inquisitor/on_gain() + . = ..() + owner.isholy = TRUE + /datum/antagonist/ert/security/inquisitor outfit = /datum/outfit/ert/security/inquisitor -/datum/antagonist/ert/chaplain - role = "Священник" - outfit = /datum/outfit/ert/chaplain - -/datum/antagonist/ert/chaplain/inquisitor - outfit = /datum/outfit/ert/chaplain/inquisitor - -/datum/antagonist/ert/chaplain/on_gain() +/datum/antagonist/ert/security/inquisitor/on_gain() . = ..() owner.isholy = TRUE diff --git a/code/modules/antagonists/official/official.dm b/code/modules/antagonists/official/official.dm index 27dcd0e635744..47465475931a3 100644 --- a/code/modules/antagonists/official/official.dm +++ b/code/modules/antagonists/official/official.dm @@ -18,7 +18,7 @@ var/mob/living/carbon/human/H = owner.current if(!istype(H)) return - H.equipOutfit(/datum/outfit/centcom_official) + H.equipOutfit(/datum/outfit/ert/centcom_official) if(CONFIG_GET(flag/enforce_human_authority)) H.set_species(/datum/species/human) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 2230b55be7ee8..31a0146a1bad0 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -1106,7 +1106,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Toys and Egg Stuffing:[features["butt_stuffing"] == TRUE ? "Yes" : "No"]" dat += "Max Size:[features["butt_max_size"] ? features["butt_max_size"] : "Disabled"]" dat += "Min Size:[features["butt_min_size"] ? features["butt_min_size"] : "Disabled"]" - dat += "Butthole Sprite:[features["has_anus"] == TRUE ? "Yes" : "No"]" + dat += "Has Anus:[features["has_anus"] == TRUE ? "Yes" : "No"]" if(features["has_anus"]) dat += "Butthole Color:
" if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE) diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index b90651eceb17d..17bf6dc9a109a 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -13,7 +13,7 @@ give_space_cooler_if_synth = TRUE // BLUEMOON ADD - implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle, /obj/item/implant/weapons_auth) + implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle/centcom, /obj/item/implant/weapons_auth) cybernetic_implants = list(/obj/item/organ/cyberimp/eyes/hud/security,/obj/item/organ/cyberimp/chest/nutrimentextreme, /obj/item/organ/cyberimp/chest/chem_implant) @@ -503,52 +503,12 @@ W.access = list(ACCESS_MAINT_TUNNELS,ACCESS_CENT_GENERAL) W.update_label(W.registered_name, W.assignment) -/datum/outfit/centcom_official - name = "CentCom Official" - - uniform = /obj/item/clothing/under/rank/centcom/officer - shoes = /obj/item/clothing/shoes/laceup - gloves = /obj/item/clothing/gloves/color/black - ears = /obj/item/radio/headset/headset_cent/alt - head = /obj/item/clothing/head/beret/sec/ntr_beret - glasses = /obj/item/clothing/glasses/sunglasses - belt = /obj/item/gun/energy/e_gun/nuclear/ert - back = /obj/item/storage/backpack/satchel - l_hand = /obj/item/clipboard - id = /obj/item/card/id/ert - backpack_contents = list(/obj/item/storage/box/survival/centcom=1, - /obj/item/pda/heads=1, - /obj/item/pen=1) - - implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle, /obj/item/implant/weapons_auth) - - cybernetic_implants = list(/obj/item/organ/cyberimp/eyes/hud/security, - /obj/item/organ/cyberimp/chest/nutrimentextreme, - /obj/item/organ/cyberimp/chest/chem_implant) - -/datum/outfit/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.set_frequency(FREQ_CENTCOM) - R.freqlock = TRUE - - var/obj/item/card/id/W = H.wear_id - W.icon_state = "centcom" - W.access = get_all_accesses()//They get full station access. - W.access += get_centcom_access("Death Commando")//Let's add their alloted CentCom access. - W.assignment = "CentCom Official" - W.registered_name = H.real_name - W.update_label(W.registered_name, W.assignment) - /datum/outfit/ert/commander/inquisitor name = "Inquisition Commander" mask = /obj/item/clothing/mask/gas/sechailer/swat glasses = /obj/item/clothing/glasses/hud/health/night/syndicate l_hand = /obj/item/gun/ballistic/automatic/proto/unrestricted - r_hand = /obj/item/nullrod/scythe/talking/chainsword suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal belt = /obj/item/storage/belt/military/ert_max backpack_contents = list(/obj/item/storage/box/survival/centcom=1, @@ -575,7 +535,6 @@ glasses = /obj/item/clothing/glasses/hud/health/night/syndicate suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor l_hand = /obj/item/gun/ballistic/automatic/proto/unrestricted - r_hand = /obj/item/nullrod/scythe/talking/chainsword belt = /obj/item/storage/belt/military/ert_max backpack_contents = list(/obj/item/storage/box/survival/centcom=1, /obj/item/storage/firstaid/regular=1, @@ -602,7 +561,6 @@ glasses = /obj/item/clothing/glasses/hud/health/night/syndicate suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor l_hand = /obj/item/gun/ballistic/automatic/proto/unrestricted - r_hand = /obj/item/nullrod/scythe/talking/chainsword belt = /obj/item/defibrillator/compact/loaded_ert backpack_contents = list(/obj/item/storage/box/survival/centcom=1, /obj/item/storage/box/ammo/smgap=1,\ @@ -621,40 +579,52 @@ /obj/item/organ/cyberimp/chest/thrusters, ) -/datum/outfit/ert/chaplain/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) - ..() +//Агенты ЦК - if(visualsOnly) - return - - var/obj/item/radio/R = H.ears - R.keyslot = new /obj/item/encryptionkey/heads/hop - R.recalculateChannels() - -/datum/outfit/ert/chaplain - name = "ERT Chaplain" - - mask = /obj/item/clothing/mask/gas/sechailer/swat - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor // Chap role always gets this suit - id = /obj/item/card/id/ert/chaplain +/datum/outfit/ert/centcom_official + name = "CentCom Official" + uniform = /obj/item/clothing/under/syndicate/sniper + suit = /obj/item/clothing/suit/armor/vest/agent + shoes = /obj/item/clothing/shoes/laceup + head = /obj/item/clothing/head/HoS/beret/syndicate glasses = /obj/item/clothing/glasses/hud/health/night/syndicate - back = /obj/item/storage/backpack/cultpack - belt = /obj/item/storage/belt/soulstone - r_hand = /obj/item/gun/ballistic/automatic/laser + belt = /obj/item/storage/belt/military/ert_max + back = /obj/item/storage/backpack/satchel + mask = null + id = /obj/item/card/id/ert + backpack_contents = list(/obj/item/storage/box/survival/centcom=1, - /obj/item/nullrod=1, - /obj/item/storage/firstaid/regular=1,\ - /obj/item/ammo_box/magazine/recharge=4) + /obj/item/pda/heads=1, + /obj/item/stamp/centcom=1, + /obj/item/stamp/syndicate=1, + ) + implants = list( + /obj/item/implant/mindshield, + /obj/item/implant/deathrattle/centcom, + /obj/item/implant/weapons_auth, + /obj/item/implant/krav_maga, + ) -/datum/outfit/ert/chaplain/inquisitor - name = "Inquisition Chaplain" + cybernetic_implants = list( + /obj/item/organ/cyberimp/eyes/hud/security, + /obj/item/organ/cyberimp/chest/nutrimentextreme, + /obj/item/organ/cyberimp/chest/chem_implant/plus, + /obj/item/organ/eyes/robotic/thermals, + /obj/item/organ/cyberimp/mouth/breathing_tube, + ) - mask = /obj/item/clothing/mask/gas/sechailer/swat - suit = /obj/item/clothing/suit/space/hardsuit/ert/paranormal/inquisitor - belt = /obj/item/storage/belt/soulstone/full/chappy - backpack_contents = list(/obj/item/storage/box/survival/centcom=1, +/datum/outfit/ert/centcom_official/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE, client/preference_source) + if(visualsOnly) + return - /obj/item/grenade/chem_grenade/holy=1, - /obj/item/nullrod=1, - /obj/item/storage/firstaid/regular=1,\ - /obj/item/ammo_box/magazine/recharge=4) + var/obj/item/radio/R = H.ears + R.set_frequency(FREQ_CENTCOM) + R.freqlock = TRUE + + var/obj/item/card/id/W = H.wear_id + W.icon_state = "centcom" + W.access = get_all_accesses()//They get full station access. + W.access += get_centcom_access("Death Commando")//Let's add their alloted CentCom access. + W.assignment = "CentCom Official" + W.registered_name = H.real_name + W.update_label(W.registered_name, W.assignment) diff --git a/code/modules/clothing/outfits/standard.dm b/code/modules/clothing/outfits/standard.dm index 34d5dc60c3f44..6d685e560822f 100644 --- a/code/modules/clothing/outfits/standard.dm +++ b/code/modules/clothing/outfits/standard.dm @@ -405,7 +405,7 @@ /obj/item/pinpointer/nuke=1,\ /obj/item/grenade/plastic/x4=1) - implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle, /obj/item/implant/weapons_auth) + implants = list(/obj/item/implant/mindshield, /obj/item/implant/deathrattle/centcom, /obj/item/implant/weapons_auth) cybernetic_implants = list( /obj/item/organ/cyberimp/eyes/hud/security, diff --git a/code/modules/clothing/suits/armor.dm b/code/modules/clothing/suits/armor.dm index a2b238a49a89e..df2520baa1029 100644 --- a/code/modules/clothing/suits/armor.dm +++ b/code/modules/clothing/suits/armor.dm @@ -317,8 +317,8 @@ blood_overlay_type = "armor" armor = list(MELEE = 10, BULLET = 10, LASER = 60, ENERGY = 60, BOMB = 0, BIO = 0, RAD = 0, FIRE = 100, ACID = 100, WOUND = 15) resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF - var/hit_reflect_chance = 40 - var/list/protected_zones = list(BODY_ZONE_CHEST, BODY_ZONE_PRECISE_GROIN) + var/hit_reflect_chance = 60 + var/list/protected_zones = list(BODY_ZONE_CHEST, BODY_ZONE_HEAD, BODY_ZONE_L_ARM, BODY_ZONE_R_ARM, BODY_ZONE_L_LEG, BODY_ZONE_R_LEG) /obj/item/clothing/suit/armor/laserproof/run_block(mob/living/owner, atom/object, damage, attack_text, attack_type, armour_penetration, mob/attacker, def_zone, final_block_chance, list/block_return) if(def_zone in protected_zones) diff --git a/code/modules/escape_menu/details.dm b/code/modules/escape_menu/details.dm index e1887773e7a00..a96219c989413 100644 --- a/code/modules/escape_menu/details.dm +++ b/code/modules/escape_menu/details.dm @@ -9,7 +9,7 @@ GLOBAL_DATUM(escape_menu_details, /atom/movable/screen/escape_menu/details) return GLOB.escape_menu_details /atom/movable/screen/escape_menu/details - screen_loc = "EAST:-180,NORTH:-25" + screen_loc = "EAST:-180,NORTH:-48" maptext_height = 100 maptext_width = 200 diff --git a/code/modules/escape_menu/dimmer.dm b/code/modules/escape_menu/dimmer.dm index 277262d00b61e..249831d37c165 100644 --- a/code/modules/escape_menu/dimmer.dm +++ b/code/modules/escape_menu/dimmer.dm @@ -4,6 +4,7 @@ icon_state = "black" alpha = 200 plane = ESCAPE_MENU_PLANE + layer = ESCAPE_MENU_DIMMER_LAYER mouse_opacity = MOUSE_OPACITY_OPAQUE clear_with_screen = FALSE diff --git a/code/modules/escape_menu/escape_menu.dm b/code/modules/escape_menu/escape_menu.dm index b1726b8600b55..78d4e3a03c76c 100644 --- a/code/modules/escape_menu/escape_menu.dm +++ b/code/modules/escape_menu/escape_menu.dm @@ -115,8 +115,12 @@ GLOBAL_LIST_EMPTY(escape_menus) if (isnull(plane_master_controllers)) return - plane_master_controller = list(client?.mob.hud_used.plane_masters["[GAME_PLANE]"], client?.mob.hud_used.plane_masters["[FLOOR_PLANE]"], - client?.mob.hud_used.plane_masters["[WALL_PLANE]"], client?.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"]) + plane_master_controller = list( + client?.mob.hud_used.plane_masters["[GAME_PLANE]"], + client?.mob.hud_used.plane_masters["[FLOOR_PLANE]"], + client?.mob.hud_used.plane_masters["[WALL_PLANE]"], + client?.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"], + ) for(var/A in plane_master_controller) var/atom/movable/screen/plane_master/P = A P.add_filter("escape_menu_blur", 1, list("type" = "blur", "size" = 2)) @@ -128,14 +132,20 @@ GLOBAL_LIST_EMPTY(escape_menus) if (isnull(plane_master_controllers)) return - plane_master_controller = list(client?.mob.hud_used.plane_masters["[GAME_PLANE]"], client?.mob.hud_used.plane_masters["[FLOOR_PLANE]"], - client?.mob.hud_used.plane_masters["[WALL_PLANE]"], client?.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"]) + plane_master_controller = list( + client?.mob.hud_used.plane_masters["[GAME_PLANE]"], + client?.mob.hud_used.plane_masters["[FLOOR_PLANE]"], + client?.mob.hud_used.plane_masters["[WALL_PLANE]"], + client?.mob.hud_used.plane_masters["[ABOVE_WALL_PLANE]"], + ) for(var/A in plane_master_controller) var/atom/movable/screen/plane_master/P = A P.remove_filter("escape_menu_blur") /atom/movable/screen/escape_menu + name = "Anything" plane = ESCAPE_MENU_PLANE + layer = ESCAPE_MENU_DEFAULT_LAYER clear_with_screen = FALSE // The escape menu can be opened before SSatoms diff --git a/code/modules/escape_menu/home_page.dm b/code/modules/escape_menu/home_page.dm index fe82fda3912bf..a8653d23131ce 100644 --- a/code/modules/escape_menu/home_page.dm +++ b/code/modules/escape_menu/home_page.dm @@ -23,7 +23,7 @@ new /atom/movable/screen/escape_menu/home_button/leave_body( null, src, - "Покинуть", + "Покинуть тело", /* offset = */ 3, CALLBACK(src, PROC_REF(open_leave_body)), ) @@ -63,7 +63,7 @@ vis_contents += home_button_text - screen_loc = "NORTH:-[100 + (32 * offset)],WEST:110" + screen_loc = "NORTH:-[132 + (32 * offset)],WEST:110" transform = transform.Scale(6, 1) /atom/movable/screen/escape_menu/home_button/Destroy() @@ -92,6 +92,7 @@ // Needs to be separated so it doesn't scale /atom/movable/screen/escape_menu/home_button_text + name = "text" maptext_width = 200 maptext_height = 50 pixel_x = -80 @@ -117,9 +118,9 @@ /atom/movable/screen/escape_menu/home_button_text/proc/update_text() var/atom/movable/screen/escape_menu/home_button/escape_menu_loc = loc - maptext = MAPTEXT_VCR_OSD_MONO("[button_text]") + maptext = "[button_text]" - if (hovered) + if (hovered && (!istype(escape_menu_loc) || escape_menu_loc.enabled())) maptext = "[maptext]" /atom/movable/screen/escape_menu/home_button/leave_body diff --git a/code/modules/escape_menu/leave_body.dm b/code/modules/escape_menu/leave_body.dm index 4563908242d5c..402aa5d49aab3 100644 --- a/code/modules/escape_menu/leave_body.dm +++ b/code/modules/escape_menu/leave_body.dm @@ -12,7 +12,7 @@ src, "Драма", "Совершить драматический уход", - /* pixel_offset = */ -105, + /* pixel_offset = */ -115, CALLBACK(src, PROC_REF(leave_suicide)), /* button_overlay = */ dead_clown, )) @@ -32,8 +32,8 @@ new /atom/movable/screen/escape_menu/leave_body_button( src, "Назад", - /* tooltip_text = */ null, - /* pixel_offset = */ 105, + "Вернуться в главное меню", + /* pixel_offset = */ 115, CALLBACK(src, PROC_REF(open_home_page)), /* button_overlay = */ "back", ) @@ -63,6 +63,7 @@ // Not guaranteed to be living. Everything defines verb/ghost separately. Fuck you. var/mob/living/living_user = client?.mob living_user?.ghostize(FALSE) + qdel(src) /datum/escape_menu/proc/leave_suicide() PRIVATE_PROC(TRUE) @@ -70,6 +71,7 @@ // Not guaranteed to be human. Everything defines verb/suicide separately. Fuck you, still. var/mob/living/carbon/human/human_user = client?.mob human_user?.suicide() + qdel(src) /atom/movable/screen/escape_menu/leave_body_button icon = 'icons/hud/escape_menu_leave_body.dmi' @@ -97,8 +99,9 @@ add_overlay(button_overlay) - maptext = MAPTEXT_VCR_OSD_MONO("[button_text]") + maptext = "[button_text]" screen_loc = "CENTER:[pixel_offset],CENTER-1" + update_color() /atom/movable/screen/escape_menu/leave_body_button/Destroy() QDEL_NULL(on_click_callback) @@ -117,6 +120,7 @@ // The UX on this is pretty shit, but it's okay enough for now. // Regularly goes way too far from your cursor. Not designed for large icons. openToolTip(usr, src, params, content = tooltip_text) + update_color() /atom/movable/screen/escape_menu/leave_body_button/MouseExited(location, control, params) if (!hovered) @@ -124,3 +128,10 @@ hovered = FALSE closeToolTip(usr) + update_color() + +/atom/movable/screen/escape_menu/leave_body_button/proc/update_color() + if (hovered) + color = "#ffffff" + else + color = "#bbbbbb" diff --git a/code/modules/escape_menu/title.dm b/code/modules/escape_menu/title.dm index 1125136e8a135..2b62ef0ecdf3a 100644 --- a/code/modules/escape_menu/title.dm +++ b/code/modules/escape_menu/title.dm @@ -28,14 +28,23 @@ GLOBAL_DATUM(escape_menu_title, /atom/movable/screen/escape_menu/title) return ..() /atom/movable/screen/escape_menu/title/proc/update_text() - var/subtitle_text = MAPTEXT("Ещё одна смена на...") + var/subtitle_text = MAPTEXT("Ещё одна смена на станции...") var/title_text = {" - - [station_name()] + + [get_filtered_station_name()] "} - maptext = "" + subtitle_text + MAPTEXT_VCR_OSD_MONO(title_text) + "" + maptext = "" + subtitle_text + title_text + "" + +/atom/movable/screen/escape_menu/title/proc/get_filtered_station_name() + var/val = station_name() + var/index = findtext_char(val, "| ") + + if (index) + val = copytext_char(val, index + 2) + + return val /atom/movable/screen/escape_menu/title/proc/on_station_name_changed() SIGNAL_HANDLER diff --git a/code/modules/projectiles/guns/energy/pulse.dm b/code/modules/projectiles/guns/energy/pulse.dm index bbe5c4147f80b..a65eaf8f77815 100644 --- a/code/modules/projectiles/guns/energy/pulse.dm +++ b/code/modules/projectiles/guns/energy/pulse.dm @@ -2,7 +2,7 @@ name = "\improper Pulse Rifle" desc = "A heavy-duty, multifaceted energy rifle with three modes. Preferred by front-line combat personnel." icon_state = "pulse" - item_state = null + item_state = "gun" w_class = WEIGHT_CLASS_BULKY force = 10 modifystate = TRUE diff --git a/icons/obj/machines/washing_machine.dmi b/icons/obj/machines/washing_machine.dmi index c01252f092b69..4a618b7747e99 100644 Binary files a/icons/obj/machines/washing_machine.dmi and b/icons/obj/machines/washing_machine.dmi differ diff --git a/modular_bluemoon/SmiLeY/code/ert/pizza_ert.dm b/modular_bluemoon/SmiLeY/code/ert/pizza_ert.dm index 73b049813cedb..9c534bb6eae78 100644 --- a/modular_bluemoon/SmiLeY/code/ert/pizza_ert.dm +++ b/modular_bluemoon/SmiLeY/code/ert/pizza_ert.dm @@ -85,7 +85,7 @@ /datum/outfit/ert/pizza_ert/post_equip() . = ..() -/datum/outfit/ert/pizza/pre_equip(mob/living/carbon/human/equipped_human, visualsOnly) +/datum/outfit/ert/pizza_ert/pre_equip(mob/living/carbon/human/equipped_human, visualsOnly) var/list/pizza_list = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/mushroom, /obj/item/pizzabox/meat, /obj/item/pizzabox/pineapple) r_hand = pick(pizza_list) backpack_contents += list( @@ -94,7 +94,7 @@ pizza_list,\ ) -/datum/outfit/ert/pizza/leader/pre_equip(mob/living/carbon/human/equipped_human, visualsOnly) +/datum/outfit/ert/pizza_ert/leader/pre_equip(mob/living/carbon/human/equipped_human, visualsOnly) var/list/pizza_list = list(/obj/item/pizzabox/margherita, /obj/item/pizzabox/mushroom, /obj/item/pizzabox/meat, /obj/item/pizzabox/pineapple) r_hand = pick(pizza_list) backpack_contents += list( diff --git a/modular_bluemoon/shower_trait/shower_trait.dm b/modular_bluemoon/shower_trait/shower_trait.dm index 6b479f618dadb..2306f208a263e 100644 --- a/modular_bluemoon/shower_trait/shower_trait.dm +++ b/modular_bluemoon/shower_trait/shower_trait.dm @@ -7,7 +7,7 @@ /datum/quirk/bluemoon_shower_need name = BLUEMOON_TRAIT_NAME_SHOWER_NEED - desc = "Вам нужно периодически ходить в душ. Хотя бы на станции. Из-за особенностей здешних мест, делать это нужно хотя бы раз в час на пару минут. Можно мыться в душевых, сауне и бассейне. Лучше всего подходят душевые в жилых зонах, а также личных каютах." + desc = "Вам нужно периодически ходить в душ. Хотя бы на станции. Из-за особенностей здешних мест, делать это нужно раз в час на пару минут. Можно мыться в душевых, сауне и бассейне. Лучше всего подходят душевые в жилых зонах, а также личных каютах." gain_text = span_warning("Чистота - залог хорошего настроения!") lose_text = span_notice("Мне достаточно мыться раз в неделю, ведь в среднем на 10-минутный душ расходуется 60 литров воды. Использование нагревателя повышает расход в три раза, а на ванну нужно как минимум 200 литров. Получается, что семья из четырех человек, которые каждый день принимают 10-минутный душ, расходует 25 куб. м воды каждый год (традиционно в Великобритании установлены отдельные краны с холодной и горячей водой без смесителя, и для теплого душа нужен проточный нагреватель — прим. ред.). Цена электричества повышает стоимость гигиены такой семьи с 400 £ до 1200 £ в год. И это еще не все: любители душа оказываются ответственными за выброс в атмосферу 3,5 тонн углекислого газа. Чтобы остановить глобальное потепление, мы можем позволить себе только 1 тонну СО2 на человека, с учетом всей его жизнедеятельности от еды до транспорта.") value = -2 @@ -20,6 +20,7 @@ var/hide_visual_effect = FALSE // если игрок хочет, он может отключить визуальное отображение, но при этом будет сильное падение настроения var/cleaned_times = 0 // счётчик, сколько тиков игрок постоял под душем var/warning_level = 0 // предупреждения для игрока в чат. Обнуляются при достижении чистоты + var/image/stink_overlay // оверлей вони /datum/quirk/bluemoon_shower_need/on_spawn() . = ..() @@ -31,6 +32,12 @@ var/datum/action/cooldown/change_stink_overlay/C = new // выдача способности для изменения оверлея вони C.Grant(H) + // создание оверлея вони + var/matrix/M = matrix() + M.Scale(0.6) + stink_overlay = image('modular_bluemoon/shower_trait/stink.dmi', "steam_double", pixel_y = 12, layer = -FIRE_LAYER) + stink_overlay.transform = M + /datum/quirk/bluemoon_shower_need/remove() UnregisterSignal(quirk_holder, COMSIG_COMPONENT_CLEAN_ACT) UnregisterSignal(quirk_holder, COMSIG_PARENT_EXAMINE) @@ -38,6 +45,10 @@ var/mob/living/carbon/human/H = quirk_holder var/datum/action/cooldown/change_stink_overlay/C = locate() in H.actions C.Remove(H) // забираем способность изменения оверлея вони + + // удаляем оверлей вони + quirk_holder.cut_overlay(stink_overlay) + stink_overlay = null . = ..() /datum/quirk/bluemoon_shower_need/process() @@ -48,13 +59,13 @@ if(T.air) var/datum/gas_mixture/G = T.air if(HAS_TRAIT(quirk_holder, TRAIT_SWIMMING) || G.get_moles(GAS_H2O) > 0) // персонаж находится в бассейне или сауне, происходит мытьё - cleaning(TRUE) + cleaning(10) // при вызове сигнала COMSIG_COMPONENT_CLEAN_ACT этой функции в аргументы присваивается персонаж, что делает невозможным применение TRUE switch(cleanse_level) if(-INFINITY to FINE_CLEAN) - quirk_holder.remove_status_effect(/datum/status_effect/stink) if(warning_level > 0) to_chat(quirk_holder, span_notice("Моё тело чистое, можно выходить.")) + quirk_holder.cut_overlay(stink_overlay) doing_shower = FALSE warning_level = 0 if(FIRST_WARNING to DIRTY) @@ -72,8 +83,8 @@ SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "need_shower", /datum/mood_event/need_shower/very_dirty_catastrophic) else SEND_SIGNAL(quirk_holder, COMSIG_ADD_MOOD_EVENT, "need_shower", /datum/mood_event/need_shower/very_dirty) - quirk_holder.apply_status_effect(STATUS_EFFECT_STINK) if(warning_level < 3) + quirk_holder.add_overlay(stink_overlay) to_chat(quirk_holder, span_phobia("Мне ОЧЕНЬ нужно сходить в душ!")) warning_level = 3 @@ -100,7 +111,7 @@ else examine_list += span_warning("[quirk_holder.p_they_ru(TRUE)] плохо пахнет.") -/datum/quirk/bluemoon_shower_need/proc/cleaning(var/hide_clothing_warning = FALSE) +/datum/quirk/bluemoon_shower_need/proc/cleaning(var/hide_clothing_warning) SIGNAL_HANDLER var/cleaning_efficiency = 10 // 3.5~ минуты с 1000 @@ -109,7 +120,7 @@ cleaned_times++ if(!check_for_clothing()) - if(!(cleaned_times % 10) && !hide_clothing_warning) // каждые 10 тиков сообщение, если одежда не подходит + if(!(cleaned_times % 10) && (hide_clothing_warning != 10)) to_chat(quirk_holder, span_warning("Нужно снять одежду, не подходящую для душа! Бюстгалтер и трусы допустимы.")) return @@ -207,34 +218,6 @@ description = span_phobia("МНЕ КРИТИЧЕСКИ НУЖНО СХОДИТЬ В ДУШ!\n") mood_change = -16 // игрок скрывает визуальный негативный эффект, но от этого персонаж сильно страдает -/* - * ОВЕРЛЕЙ - */ - -/datum/status_effect/stink - id = "stink" - on_remove_on_mob_delete = TRUE - status_type = STATUS_EFFECT_REFRESH // обновлять таймер - alert_type = null - var/image/overlay // оверлей вони - duration = 10 SECONDS - -/datum/status_effect/stink/on_apply() - . = ..() - add_overlay() - -/datum/status_effect/stink/proc/add_overlay() - var/matrix/M = matrix() - M.Scale(0.6) - overlay = image('modular_bluemoon/shower_trait/stink.dmi', "steam_double", pixel_y = 12, layer = -FIRE_LAYER) - overlay.transform = M - owner.add_overlay(overlay) - -/datum/status_effect/stink/on_remove() - owner.cut_overlay(overlay) - overlay = null - return ..() - #undef STATUS_EFFECT_STINK #undef FINE_CLEAN diff --git a/modular_splurt/code/modules/client/preferences.dm b/modular_splurt/code/modules/client/preferences.dm index e995364312777..02804577815ba 100644 --- a/modular_splurt/code/modules/client/preferences.dm +++ b/modular_splurt/code/modules/client/preferences.dm @@ -650,7 +650,7 @@ dat += "Butt Size:[features["butt_size"]]" dat += "Butt Visibility:[features["butt_visibility"]]" dat += "Toys and Egg Stuffing:[features["butt_stuffing"] == TRUE ? "Yes" : "No"]" - dat += "Butthole Sprite:[features["has_anus"] == TRUE ? "Yes" : "No"]" + dat += "Has Anus:[features["has_anus"] == TRUE ? "Yes" : "No"]" if(features["has_anus"]) dat += "Butthole Color:
" if(pref_species.use_skintones && features["genitals_use_skintone"] == TRUE)