diff --git a/_maps/bubber/automapper/templates/generic/interlink_adminoffice.dmm b/_maps/bubber/automapper/templates/generic/interlink_adminoffice.dmm index 2e5abda078edd..f64bfd428064b 100644 --- a/_maps/bubber/automapper/templates/generic/interlink_adminoffice.dmm +++ b/_maps/bubber/automapper/templates/generic/interlink_adminoffice.dmm @@ -73,9 +73,9 @@ /area/centcom/central_command_areas/admin/interlink) "m" = ( /obj/effect/turf_decal/siding/wood, -/obj/machinery/vending/boozeomat/all_access{ - density = 0; - pixel_y = 32 +/obj/machinery/vending/boozeomat/cafe{ + pixel_y = 32; + density = 0 }, /turf/open/floor/wood/large, /area/centcom/central_command_areas/admin/interlink) diff --git a/_maps/map_files/BoxStation/BoxStation.dmm b/_maps/map_files/BoxStation/BoxStation.dmm index 2a95ba89ab234..d913e8c952497 100644 --- a/_maps/map_files/BoxStation/BoxStation.dmm +++ b/_maps/map_files/BoxStation/BoxStation.dmm @@ -35316,7 +35316,6 @@ /obj/item/clothing/gloves/latex{ pixel_y = 3 }, -/obj/item/storage/pill_bottle/monkeydone, /obj/item/storage/pill_bottle/mutadone{ pixel_x = 11; pixel_y = 7 diff --git a/_maps/map_files/VoidRaptor/VoidRaptor.dmm b/_maps/map_files/VoidRaptor/VoidRaptor.dmm index 38c732c66999b..df4358f982700 100644 --- a/_maps/map_files/VoidRaptor/VoidRaptor.dmm +++ b/_maps/map_files/VoidRaptor/VoidRaptor.dmm @@ -634,10 +634,12 @@ "aiU" = ( /obj/effect/turf_decal/bot_red, /obj/structure/sign/warning/hot_temp/directional/north, -/obj/structure/bodycontainer/crematorium{ - dir = 4; - id = "crematoriumSecurity" +/obj/structure/rack, +/obj/item/storage/box/hug/plushes, +/obj/effect/turf_decal/trimline/dark/filled/warning{ + dir = 9 }, +/obj/item/storage/box/hug/plushes, /turf/open/floor/iron/dark/smooth_large, /area/station/security/office) "ajb" = ( @@ -12392,12 +12394,6 @@ /area/station/cargo/storage) "dGX" = ( /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, -/obj/effect/turf_decal/trimline/dark/filled/corner{ - dir = 1 - }, -/obj/effect/turf_decal/stripes/corner{ - dir = 1 - }, /turf/open/floor/iron/dark/textured_corner{ dir = 1 }, @@ -17122,7 +17118,12 @@ pixel_y = 3 }, /obj/item/storage/box/bodybags, -/obj/item/pushbroom, +/obj/item/pushbroom{ + pixel_x = -10 + }, +/obj/item/mop{ + pixel_x = 7 + }, /turf/open/floor/iron/dark, /area/station/security/office) "eWh" = ( @@ -22757,8 +22758,17 @@ /obj/machinery/camera/directional/north{ c_tag = "Security - Morgue" }, -/obj/structure/table, -/obj/item/clothing/gloves/latex, +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_y = 9 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = 9; + pixel_y = -6 + }, +/obj/effect/spawner/random/entertainment/plushie{ + pixel_x = -13 + }, /turf/open/floor/iron/dark/smooth_edge, /area/station/security/office) "gGg" = ( @@ -24597,7 +24607,7 @@ /area/station/service/chapel/funeral) "hgo" = ( /obj/machinery/door/airlock/grunge{ - name = "Morgue" + name = "Plushie Storage" }, /obj/machinery/door/firedoor, /obj/machinery/atmospherics/pipe/smart/manifold4w/scrubbers/hidden/layer2, @@ -47886,13 +47896,8 @@ /area/station/maintenance/starboard/greater) "nuV" = ( /obj/effect/turf_decal/trimline/dark/filled/warning{ - dir = 9 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 + dir = 8 }, -/obj/structure/closet/l3closet/security, -/obj/effect/turf_decal/bot, /turf/open/floor/iron/dark, /area/station/security/office) "nvc" = ( @@ -51969,6 +51974,8 @@ /obj/item/flashlight/lamp, /obj/item/radio/intercom/directional/north, /obj/effect/turf_decal/tile/dark_red/fourcorners, +/obj/item/clothing/suit/jacket/straight_jacket, +/obj/item/clothing/mask/muzzle, /turf/open/floor/iron/dark, /area/station/security/execution/education) "oBK" = ( @@ -56540,15 +56547,16 @@ /area/station/science/robotics/mechbay) "pOs" = ( /obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer2, -/obj/machinery/button/crematorium{ - id = "crematoriumSecurity"; - pixel_y = 25 +/obj/structure/rack, +/obj/effect/spawner/random/entertainment/plushie_delux{ + pixel_x = 4 }, /obj/effect/turf_decal/trimline/dark/filled/warning{ - dir = 9 + dir = 1 }, -/obj/effect/turf_decal/stripes/line{ - dir = 8 +/obj/item/toy/plush/skyrat/duffmoth{ + pixel_x = -11; + pixel_y = 6 }, /turf/open/floor/iron/dark, /area/station/security/office) @@ -75580,17 +75588,12 @@ /turf/open/floor/iron/dark/smooth_large, /area/station/medical/morgue) "uXb" = ( -/obj/structure/bed/medical{ - dir = 4 - }, -/obj/item/clothing/glasses/blindfold, /obj/effect/turf_decal/trimline/dark/filled/line{ dir = 5 }, -/obj/item/clothing/suit/jacket/straight_jacket, -/obj/item/clothing/glasses/blindfold, -/obj/item/clothing/mask/muzzle, /obj/structure/sink/directional/south, +/obj/structure/rack, +/obj/item/toy/plush/skyrat/sechound, /turf/open/floor/iron/dark, /area/station/security/office) "uXf" = ( diff --git a/_maps/moonstation.json b/_maps/moonstation.json index 8d710e381fb08..47e2fb81e4953 100644 --- a/_maps/moonstation.json +++ b/_maps/moonstation.json @@ -18,7 +18,7 @@ "Mining": true, "Linkage": null, "Gravity": true, - "Lava Ruins": true, + "Moonstation Ruins": true, "Baseturf": "/turf/open/lava/smooth/lava_land_surface", "No Parallax": true }, diff --git a/code/__DEFINES/inventory.dm b/code/__DEFINES/inventory.dm index 9a5684c4fa8a6..36eeeabcdc5cc 100644 --- a/code/__DEFINES/inventory.dm +++ b/code/__DEFINES/inventory.dm @@ -119,15 +119,15 @@ DEFINE_BITFIELD(no_equip_flags, list( //SKYRAT EDIT ADDITION: CUSTOM EAR TOGGLE FOR ANTHRO/ETC EAR SHOWING - /// Manually set this on items you want anthro ears to show on! -#define SHOWSPRITEEARS (1<<14) +#define SHOWSPRITEEARS (1<<16) /// Does this sprite hide the tail? -#define HIDETAIL (1<<15) +#define HIDETAIL (1<<17) /// Does this sprite also hide the spine on tails? Realistically only useful for the clothes that have a special tail overlay, like MODsuits -#define HIDESPINE (1<<16) +#define HIDESPINE (1<<18) /// Does this sprite hide devious devices? -#define HIDESEXTOY (1<<17) +#define HIDESEXTOY (1<<19) /// If this has our taur variant, do we hide our taur part? -#define HIDETAUR (1<<18) +#define HIDETAUR (1<<20) //SKYRAT EDIT ADDITION END //SPLURT EDIT diff --git a/code/__DEFINES/~~bubber_defines/chat.dm b/code/__DEFINES/~~bubber_defines/chat.dm new file mode 100644 index 0000000000000..dbfa454056369 --- /dev/null +++ b/code/__DEFINES/~~bubber_defines/chat.dm @@ -0,0 +1,3 @@ +// Additional message types for TGUI chat panel filtering +#define MESSAGE_TYPE_LOOC "looc" +#define MESSAGE_TYPE_REMOTE_LOOC "rlooc" diff --git a/code/__DEFINES/~~bubber_defines/traits/declarations.dm b/code/__DEFINES/~~bubber_defines/traits/declarations.dm index 7c7891b7177f9..0f8e7df54c379 100644 --- a/code/__DEFINES/~~bubber_defines/traits/declarations.dm +++ b/code/__DEFINES/~~bubber_defines/traits/declarations.dm @@ -22,3 +22,6 @@ //lipstick trait #define TRAIT_HYPNO_KISS "hypno kiss" +// Shows extended examine option when worn +#define TRAIT_WORN_EXAMINE "worn_examine" + diff --git a/code/__DEFINES/~~bubber_defines/traits/sources.dm b/code/__DEFINES/~~bubber_defines/traits/sources.dm new file mode 100644 index 0000000000000..fb073441fc231 --- /dev/null +++ b/code/__DEFINES/~~bubber_defines/traits/sources.dm @@ -0,0 +1,2 @@ +// Loadout trait +#define TRAIT_SOURCE_LOADOUT "loadout" diff --git a/code/game/objects/items/devices/scanners/health_analyzer.dm b/code/game/objects/items/devices/scanners/health_analyzer.dm index a1aee90dd5b39..3aa23a67539d1 100644 --- a/code/game/objects/items/devices/scanners/health_analyzer.dm +++ b/code/game/objects/items/devices/scanners/health_analyzer.dm @@ -93,7 +93,7 @@ balloon_alert(user, "analyzing vitals") playsound(user.loc, 'sound/items/healthanalyzer.ogg', 50) - var/readability_check = user.can_read(src) && !user.is_blind() + var/readability_check = user.can_read(src) // BUBBER EDIT CHANGE - Blind people can analyze again - ORIGINAL: user.can_read(src) && !user.is_blind() switch (scanmode) if (SCANMODE_HEALTH) last_scan_text = healthscan(user, M, mode, advanced, tochat = readability_check) diff --git a/code/modules/antagonists/malf_ai/malf_ai_modules.dm b/code/modules/antagonists/malf_ai/malf_ai_modules.dm index c54714f21c5af..43f593324952f 100644 --- a/code/modules/antagonists/malf_ai/malf_ai_modules.dm +++ b/code/modules/antagonists/malf_ai/malf_ai_modules.dm @@ -499,6 +499,11 @@ GLOBAL_LIST_INIT(malf_modules, subtypesof(/datum/ai_module/malf) - /datum/ai_mod /datum/action/innate/ai/destroy_rcds/Activate() for(var/I in GLOB.rcd_list) + // BUBBER EDIT BEGIN - Ghost role RCDs are spared + var/turf/rcd_loc = get_turf(I) + if(!is_station_level(rcd_loc.z)) + continue + // BUBBER EDIT END if(!istype(I, /obj/item/construction/rcd/borg)) //Ensures that cyborg RCDs are spared. var/obj/item/construction/rcd/RCD = I RCD.detonate_pulse() diff --git a/code/modules/loadout/loadout_items.dm b/code/modules/loadout/loadout_items.dm index de50b793b160a..3e8ad19f12138 100644 --- a/code/modules/loadout/loadout_items.dm +++ b/code/modules/loadout/loadout_items.dm @@ -277,7 +277,7 @@ GLOBAL_LIST_INIT(all_loadout_categories, init_loadout_categories()) ASSERT(!isnull(equipped_item)) if(!visuals_only) - ADD_TRAIT(equipped_item, TRAIT_ITEM_OBJECTIVE_BLOCKED, "Loadout") + ADD_TRAIT(equipped_item, TRAIT_ITEM_OBJECTIVE_BLOCKED, TRAIT_SOURCE_LOADOUT) var/list/item_details = preference_list[item_path] var/update_flag = NONE @@ -296,8 +296,9 @@ GLOBAL_LIST_INIT(all_loadout_categories, init_loadout_categories()) equipped_item.desc = trim(item_details[INFO_DESCRIBED], PREVENT_CHARACTER_TRIM_LOSS(MAX_DESC_LEN)) renamed = 1 if(renamed) - ADD_TRAIT(equipped_item, TRAIT_WAS_RENAMED, "Loadout") - SEND_SIGNAL(equipped_item, COMSIG_NAME_CHANGED) // BUBBER EDIT + ADD_TRAIT(equipped_item, TRAIT_WAS_RENAMED, TRAIT_SOURCE_LOADOUT) + equipped_item.AddElement(/datum/element/examined_when_worn) + SEND_SIGNAL(equipped_item, COMSIG_NAME_CHANGED) // SKYRAT EDIT END if(can_be_reskinned && item_details?[INFO_RESKIN]) diff --git a/code/modules/mob/living/carbon/examine.dm b/code/modules/mob/living/carbon/examine.dm index fbd19dff25496..b7664bebf5fa2 100644 --- a/code/modules/mob/living/carbon/examine.dm +++ b/code/modules/mob/living/carbon/examine.dm @@ -51,12 +51,6 @@ if (length(status_examines)) . += status_examines - //SPLURT EDIT ADDITION - Sizecode - var/list/size_examines = get_size_examine_info(user) - if (length(size_examines)) - . += size_examines - //SPLURT EDIT ADDITION END - if(get_bodypart(BODY_ZONE_HEAD) && !get_organ_by_type(/obj/item/organ/internal/brain)) . += span_deadsay("It appears that [t_his] brain is missing...") @@ -386,6 +380,7 @@ final_descriptions[damage_type] = damage_desc return final_descriptions +// BUBBER EDIT BEGIN - replaced examine_title with examine_title_worn across whole proc /// Coolects examine information about the mob's clothing and equipment /mob/living/carbon/proc/get_clothing_examine_info(mob/living/user) . = list() @@ -397,18 +392,18 @@ var/t_is = p_are() //head if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [head.examine_title(user)] on [t_his] head." + . += "[t_He] [t_is] wearing [head.examine_title_worn(user)] on [t_his] head." //back if(back && !(back.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [back.examine_title(user)] on [t_his] back." + . += "[t_He] [t_has] [back.examine_title_worn(user)] on [t_his] back." //Hands for(var/obj/item/held_thing in held_items) if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) continue - . += "[t_He] [t_is] holding [held_thing.examine_title(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." + . += "[t_He] [t_is] holding [held_thing.examine_title_worn(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." //gloves if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [gloves.examine_title(user)] on [t_his] hands." + . += "[t_He] [t_has] [gloves.examine_title_worn(user)] on [t_his] hands." else if(GET_ATOM_BLOOD_DNA_LENGTH(src)) if(num_hands) . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") @@ -418,25 +413,27 @@ . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") //shoes if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [shoes.examine_title(user)] on [t_his] feet." + . += "[t_He] [t_is] wearing [shoes.examine_title_worn(user)] on [t_his] feet." //mask if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [wear_mask.examine_title(user)] on [t_his] face." + . += "[t_He] [t_has] [wear_mask.examine_title_worn(user)] on [t_his] face." if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wear_neck.examine_title(user)] around [t_his] neck." + . += "[t_He] [t_is] wearing [wear_neck.examine_title_worn(user)] around [t_his] neck." //eyes if(!(obscured & ITEM_SLOT_EYES) ) if(glasses && !(glasses.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [glasses.examine_title(user)] covering [t_his] eyes." + . += "[t_He] [t_has] [glasses.examine_title_worn(user)] covering [t_his] eyes." else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) . += span_warning("[t_His] eyes are glowing with an unnatural red aura!") else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) . += span_warning("[t_His] eyes are bloodshot!") //ears if(ears && !(obscured & ITEM_SLOT_EARS) && !(ears.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [ears.examine_title(user)] on [t_his] ears." + . += "[t_He] [t_has] [ears.examine_title_worn(user)] on [t_his] ears." +// BUBBER EDIT END // Yes there's a lot of copypasta here, we can improve this later when carbons are less dumb in general +// BUBBER EDIT BEGIN - replaced examine_title with examine_title_worn across whole proc /mob/living/carbon/human/get_clothing_examine_info(mob/living/user) . = list() var/obscured = check_obscured_slots() @@ -456,52 +453,36 @@ if(length(accessories)) accessory_message = " with [english_list(accessories)] attached" - . += "[t_He] [t_is] wearing [w_uniform.examine_title(user)][accessory_message]." - //SPLURT EDIT - shirt - if(w_shirt && !undershirt_hidden() && !(w_shirt.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_shirt.examine_title(user)]." - //SPLURT EDIT - bra - if(w_bra && !bra_hidden() && !(w_bra.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_bra.examine_title(user)]." - //SPLURT EDIT - underwear - if(w_underwear && !underwear_hidden() && !(w_underwear.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_underwear.examine_title(user)]." + . += "[t_He] [t_is] wearing [w_uniform.examine_title_worn(user)][accessory_message]." //head if(head && !(obscured & ITEM_SLOT_HEAD) && !(head.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [head.examine_title(user)] on [t_his] head." + . += "[t_He] [t_is] wearing [head.examine_title_worn(user)] on [t_his] head." //mask if(wear_mask && !(obscured & ITEM_SLOT_MASK) && !(wear_mask.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [wear_mask.examine_title(user)] on [t_his] face." + . += "[t_He] [t_has] [wear_mask.examine_title_worn(user)] on [t_his] face." //neck if(wear_neck && !(obscured & ITEM_SLOT_NECK) && !(wear_neck.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wear_neck.examine_title(user)] around [t_his] neck." + . += "[t_He] [t_is] wearing [wear_neck.examine_title_worn(user)] around [t_his] neck." //eyes if(!(obscured & ITEM_SLOT_EYES) ) if(glasses && !(glasses.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [glasses.examine_title(user)] covering [t_his] eyes." + . += "[t_He] [t_has] [glasses.examine_title_worn(user)] covering [t_his] eyes." else if(HAS_TRAIT(src, TRAIT_UNNATURAL_RED_GLOWY_EYES)) . += span_warning("[t_His] eyes are glowing with an unnatural red aura!") else if(HAS_TRAIT(src, TRAIT_BLOODSHOT_EYES)) . += span_warning("[t_His] eyes are bloodshot!") //ears if(ears && !(obscured & ITEM_SLOT_EARS) && !(ears.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [ears.examine_title(user)] on [t_his] ears." - //SPLURT EDIT - ears extra - if(ears_extra && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [ears_extra.examine_title(user)] on [t_his] right ear." - //SPLURT EDIT - ears extra - //wearing two ear items makes you look like an idiot - if((istype(ears, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_LEFT) && !(ears.item_flags & EXAMINE_SKIP)) && (istype(ears_extra, /obj/item/radio/headset) && !(obscured & ITEM_SLOT_EARS_RIGHT) && !(ears_extra.item_flags & EXAMINE_SKIP))) - . += span_warning("[t_He] looks quite tacky wearing both \an [ears.name] and \an [ears_extra.name] on [t_his] head.") + . += "[t_He] [t_has] [ears.examine_title_worn(user)] on [t_his] ears." //suit/armor if(wear_suit && !(wear_suit.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wear_suit.examine_title(user)]." + . += "[t_He] [t_is] wearing [wear_suit.examine_title_worn(user)]." //suit/armor storage if(s_store && !(obscured & ITEM_SLOT_SUITSTORE) && !(s_store.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] carrying [s_store.examine_title(user)] on [t_his] [wear_suit.name]." + . += "[t_He] [t_is] carrying [s_store.examine_title_worn(user)] on [t_his] [wear_suit.name]." //back if(back && !(back.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [back.examine_title(user)] on [t_his] back." + . += "[t_He] [t_has] [back.examine_title_worn(user)] on [t_his] back." //ID if(wear_id && !(wear_id.item_flags & EXAMINE_SKIP)) var/obj/item/card/id/id = wear_id.GetID() @@ -515,29 +496,24 @@ for(var/obj/item/held_thing in held_items) if(held_thing.item_flags & (ABSTRACT|EXAMINE_SKIP|HAND_ITEM)) continue - . += "[t_He] [t_is] holding [held_thing.examine_title(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." + . += "[t_He] [t_is] holding [held_thing.examine_title_worn(user)] in [t_his] [get_held_index_name(get_held_index_of_item(held_thing))]." //gloves if(gloves && !(obscured & ITEM_SLOT_GLOVES) && !(gloves.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [gloves.examine_title(user)] on [t_his] hands." + . += "[t_He] [t_has] [gloves.examine_title_worn(user)] on [t_his] hands." else if(GET_ATOM_BLOOD_DNA_LENGTH(src) || blood_in_hands) if(num_hands) . += span_warning("[t_He] [t_has] [num_hands > 1 ? "" : "a "]blood-stained hand[num_hands > 1 ? "s" : ""]!") - //SPLURT EDIT - wrists - if(wrists && !wrists_hidden() && !(wrists.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [wrists.examine_title(user)]." //handcuffed? if(handcuffed) var/cables_or_cuffs = istype(handcuffed, /obj/item/restraints/handcuffs/cable) ? "restrained with cable" : "handcuffed" . += span_warning("[t_He] [t_is] [icon2html(handcuffed, user)] [cables_or_cuffs]!") //belt if(belt && !(belt.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_has] [belt.examine_title(user)] about [t_his] waist." + . += "[t_He] [t_has] [belt.examine_title_worn(user)] about [t_his] waist." //shoes if(shoes && !(obscured & ITEM_SLOT_FEET) && !(shoes.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [shoes.examine_title(user)] on [t_his] feet." - //SPLURT EDIT - socks - if(w_socks && !socks_hidden() && !(w_socks.item_flags & EXAMINE_SKIP)) - . += "[t_He] [t_is] wearing [w_socks.examine_title(user)] on [t_his] feet." + . += "[t_He] [t_is] wearing [shoes.examine_title_worn(user)] on [t_his] feet." +// BUBBER EDIT END /// Collects info displayed about any HUDs the user has when examining src /mob/living/carbon/proc/get_hud_examine_info(mob/living/user) diff --git a/code/modules/power/cell.dm b/code/modules/power/cell.dm index addb8cdb6b835..f77314cfaa227 100644 --- a/code/modules/power/cell.dm +++ b/code/modules/power/cell.dm @@ -51,9 +51,11 @@ custom_materials = list(/datum/material/glass=SMALL_MATERIAL_AMOUNT*0.5) chargerate = STANDARD_CELL_RATE * 0.5 +/* BUBBER EDIT REMOVAL BEGIN - New icon in modular_skyrat/modules/aesthetics/cells/cell.dm /obj/item/stock_parts/power_store/cell/upgraded/Initialize(mapload) AddElement(/datum/element/update_icon_blocker) return ..() +*/// BUBBER EDIT REMOVAL END /obj/item/stock_parts/power_store/cell/upgraded/plus name = "upgraded power cell+" diff --git a/html/changelogs/AutoChangeLog-pr-2362.yml b/html/changelogs/AutoChangeLog-pr-2362.yml new file mode 100644 index 0000000000000..dfbfc7bf99691 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2362.yml @@ -0,0 +1,4 @@ +author: "xPokee" +delete-after: True +changes: + - bugfix: "fixed the tactical Hawaiian outfits wrongly being adjustable" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2370.yml b/html/changelogs/AutoChangeLog-pr-2370.yml new file mode 100644 index 0000000000000..f8c0f2d40f9fb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2370.yml @@ -0,0 +1,4 @@ +author: "BurgerBB" +delete-after: True +changes: + - rscadd: "Adds a new snout option for lizards along with a horn option." \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2371.yml b/html/changelogs/AutoChangeLog-pr-2371.yml new file mode 100644 index 0000000000000..377e932e7841a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2371.yml @@ -0,0 +1,4 @@ +author: "Majkl-J" +delete-after: True +changes: + - balance: "Xeno queen scream no longer deafens for ages, stun times kept same" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2373.yml b/html/changelogs/AutoChangeLog-pr-2373.yml new file mode 100644 index 0000000000000..0cd6cc291ee94 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2373.yml @@ -0,0 +1,4 @@ +author: "xPokee" +delete-after: True +changes: + - rscadd: "added the colored glasses to the loadout" \ No newline at end of file diff --git a/html/changelogs/AutoChangeLog-pr-2375.yml b/html/changelogs/AutoChangeLog-pr-2375.yml new file mode 100644 index 0000000000000..d6c55cf2a0164 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-2375.yml @@ -0,0 +1,4 @@ +author: "Shadow-Quill" +delete-after: True +changes: + - bugfix: "Emergency Response 911 calls from the comms console now function again. Woo!" \ No newline at end of file diff --git a/html/changelogs/archive/2024-11.yml b/html/changelogs/archive/2024-11.yml index ad60694d1ec34..dfedd3fde4629 100644 --- a/html/changelogs/archive/2024-11.yml +++ b/html/changelogs/archive/2024-11.yml @@ -13,8 +13,6 @@ - rscadd: Black-Backed Jackal tail LT3: - qol: Map vote results only include choices included in the vote - SandPoot: - - rscadd: Added mechanical effects to changing your size. TealSeer: - config: Removed config entries for archived maps - bugfix: find_and_buy_event_from_track should no longer randomly fail. @@ -31,7 +29,82 @@ - rscadd: Added a Skillsoft machine to the Ghost Cafe vending area Majkl-J: - bugfix: Hemophage organs no longer show up on analyzers + StrangeWeirdKitten: + - balance: Replaces the security cremator with a room of plushies. sippykot: - balance: borg self un-tip time reduced to 3sec from 20sec xPokee: - qol: made it so you can examine what is inside of crates and lockers as an observer +2024-11-06: + Arturlang: + - rscadd: You are now prevented from making a revenge vassal as a ventrue bloodsucker + if you do not have any ghoul slots free to prevent softlocks + - rscadd: Changes ghoulization used in bloodsuckers words to ghouling + - bugfix: Ghoul antag panels now work again + LT3: + - bugfix: Fixed upgraded power cells always showing red/empty. + - qol: LOOC can now be individually enabled/disabled on chat tabs + Majkl-J: + - bugfix: Fixed some hat related sprite hiding issues + TealSeer: + - bugfix: The game should no longer run ruin generation twice. + xXPawnStarrXx: + - spellcheck: made prisoner bounties list what you're after rather than "fruit" + or "flowers" +2024-11-07: + Majkl-J: + - bugfix: Standalone hood now shows ears + nevimer: + - bugfix: vetted list now doesn't wipe the admin who added field on reload + thegrb93: + - balance: Legwraps wrap your feet now and you won't fall on glass shards while + wearing them + xXPawnStarrXx: + - rscadd: Added blanks to the limbgrower, for soul/brain transfer. +2024-11-08: + Adrian16199: + - bugfix: Made HFZ actualy be able to have digitigraded legs for real this time. + Majkl-J: + - rscadd: Suspicious protogen plushie + - bugfix: Phystool and Physgun work correctly again + - bugfix: Clockcult slabs can examine again + - bugfix: Compostbin is now handled correctly + - bugfix: Robohand checks for robohand again + ReturnToZender: + - balance: Default Andy will spawn mundane events half as frequently. + TealSeer: + - bugfix: Moonstation ore vents should no longer be barren. + - bugfix: Window polarizers can be properly linked to windows again +2024-11-09: + CydiaButt13: + - rscadd: Added sprite for blood_tea + - rscadd: Added vending machine option for blood_tea + Majkl-J: + - rscadd: Loadout renamed/redescribed items can be examined when worn. + - rscadd: Sombreros return to clothes vendors and loadouts + - qol: Sombreros no longer make you bald + Midiwidi: + - rscadd: 'Added science bag to SciDrobe + + :cl: + + + + + + ' + TealSeer: + - bugfix: Large Antlers should now have a north-facing sprite +2024-11-10: + Majkl-J: + - balance: AI RCD explosion ability can no longer take out nonstation RCDs + ceeetchell: + - bugfix: Makes blind people able to actually use the health analyzer again. + xPokee: + - image: replaced the outdated F13 mob sprites with their current F13 versions diff --git a/modular_skyrat/master_files/code/modules/loadout/categories/donator_personal.dm b/modular_skyrat/master_files/code/modules/loadout/categories/donator_personal.dm index 4649771e62716..3e6bd4d4e3615 100644 --- a/modular_skyrat/master_files/code/modules/loadout/categories/donator_personal.dm +++ b/modular_skyrat/master_files/code/modules/loadout/categories/donator_personal.dm @@ -650,15 +650,15 @@ item_path = /obj/item/toy/plush/skyrat/plushie_syntax1112 //ckeywhitelist = list("syntax1112") -/datum/loadout_item/gloves/hypnoring_nuke +/datum/loadout_item/gloves/hypnoring_sharkenning name = "Suspiciously Glossy Ring" - item_path = /obj/item/clothing/gloves/ring/hypno/nuke - ckeywhitelist = list("sonicgotnuked", "tecktonic") + item_path = /obj/item/clothing/gloves/ring/hypno/sharkenning + ckeywhitelist = list("thesharkenning", "tecktonic") -/datum/loadout_item/ears/kinkphone_nuke +/datum/loadout_item/ears/kinkphone_sharkenning name = "Suspiciously Glossy Headphones" - item_path = /obj/item/clothing/ears/kinky_headphones/nuke - ckeywhitelist = list("sonicgotnuked") + item_path = /obj/item/clothing/ears/kinky_headphones/sharkenning + ckeywhitelist = list("thesharkenning") /datum/loadout_item/head/somerandomowl name = "Starry Witch Hat" diff --git a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm index afa9c22f2314d..e437177a3cfaa 100644 --- a/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm +++ b/modular_skyrat/master_files/code/modules/mob/living/simple_animal/hostile/grabbagmob.dm @@ -453,6 +453,7 @@ icon = 'modular_skyrat/master_files/icons/mob/newmobs.dmi' icon_state = "sentrybot" icon_living = "sentrybot" + icon_dead = "sentrybot_d" casingtype = /obj/item/ammo_casing/c45 projectilesound = 'sound/items/weapons/gun/smg/shot.ogg' health = 250 diff --git a/modular_skyrat/master_files/icons/mob/newmobs.dmi b/modular_skyrat/master_files/icons/mob/newmobs.dmi index 0adcb392ec887..dbaf52748a279 100644 Binary files a/modular_skyrat/master_files/icons/mob/newmobs.dmi and b/modular_skyrat/master_files/icons/mob/newmobs.dmi differ diff --git a/modular_skyrat/master_files/icons/mob/newmobs64x64.dmi b/modular_skyrat/master_files/icons/mob/newmobs64x64.dmi index 50aabfa1234f2..5d1948d959ab4 100644 Binary files a/modular_skyrat/master_files/icons/mob/newmobs64x64.dmi and b/modular_skyrat/master_files/icons/mob/newmobs64x64.dmi differ diff --git a/modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm b/modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm index fa37830184f76..d684987fbe162 100644 --- a/modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm +++ b/modular_skyrat/modules/clock_cult/code/components/structure_info_element.dm @@ -8,13 +8,13 @@ if(!istype(target, /obj/structure/destructible/clockwork/gear_base)) return ELEMENT_INCOMPATIBLE - RegisterSignal(target, COMSIG_ATOM_AFTER_ATTACKEDBY, PROC_REF(print_info)) + RegisterSignal(target, COMSIG_ATOM_ITEM_INTERACTION, PROC_REF(print_info)) RegisterSignal(target, COMSIG_ATOM_EXAMINE, PROC_REF(on_examine)) /datum/element/clockwork_structure_info/Detach(datum/target) . = ..() - UnregisterSignal(target, COMSIG_ATOM_AFTER_ATTACKEDBY) + UnregisterSignal(target, COMSIG_ATOM_ITEM_INTERACTION) UnregisterSignal(target, COMSIG_ATOM_EXAMINE) /** @@ -26,7 +26,7 @@ * * weapon - The item that attacked the structure * * user - The one who attacked the structure */ -/datum/element/clockwork_structure_info/proc/print_info(obj/structure/destructible/clockwork/gear_base/source, obj/item/weapon, mob/user, proximity_flag, click_parameters) +/datum/element/clockwork_structure_info/proc/print_info(obj/structure/destructible/clockwork/gear_base/source, mob/user, obj/item/weapon) SIGNAL_HANDLER if(!IS_CLOCK(user) || !istype(weapon, /obj/item/clockwork/clockwork_slab)) @@ -44,6 +44,7 @@ assembled_string += "This structure is connected to [LAZYLEN(powered_source.transmission_sigils)] transmission sigil[LAZYLEN(powered_source.transmission_sigils) == 1 ? "" : "s"]." to_chat(user, span_brass(assembled_string)) + return ITEM_INTERACT_BLOCKING /** * diff --git a/modular_skyrat/modules/customization/modules/clothing/head/head.dm b/modular_skyrat/modules/customization/modules/clothing/head/head.dm index 6736582235073..a7d1c0ce75dd7 100644 --- a/modular_skyrat/modules/customization/modules/clothing/head/head.dm +++ b/modular_skyrat/modules/customization/modules/clothing/head/head.dm @@ -187,7 +187,7 @@ body_parts_covered = HEAD cold_protection = HEAD min_cold_protection_temperature = FIRE_SUIT_MIN_TEMP_PROTECT - flags_inv = HIDEEARS|HIDEHAIR + flags_inv = HIDEHAIR|HIDEEARS|SHOWSPRITEEARS supports_variations_flags = CLOTHING_SNOUTED_VARIATION_NO_NEW_ICON flags_1 = IS_PLAYER_COLORABLE_1 greyscale_colors = "#4e4a43#F1F1F1" diff --git a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm b/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm index 5d9e8a270537d..a1e34cd6fdf5f 100644 --- a/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm +++ b/modular_skyrat/modules/customization/modules/clothing/shoes/shoes.dm @@ -4,7 +4,6 @@ name = "gilded leg wraps" desc = "Ankle coverings. These ones have a golden design." icon_state = "gildedcuffs" - body_parts_covered = FALSE /obj/item/clothing/shoes/wraps/silver name = "silver leg wraps" diff --git a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm b/modular_skyrat/modules/customization/modules/clothing/under/misc.dm index ba6e00c6f8f0e..485d0bcba3e0a 100644 --- a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm +++ b/modular_skyrat/modules/customization/modules/clothing/under/misc.dm @@ -12,6 +12,7 @@ worn_icon = 'modular_skyrat/master_files/icons/mob/clothing/uniform.dmi' icon_state = "tacticool_hawaiian_orange" supports_variations_flags = CLOTHING_DIGITIGRADE_VARIATION + can_adjust = FALSE /obj/item/clothing/under/tachawaiian/blue name = "blue tactical hawaiian outfit" diff --git a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm index 6c33006f2d9d9..9b9c54a963e50 100644 --- a/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm +++ b/modular_skyrat/modules/customization/modules/clothing/~donator/donator_clothing.dm @@ -1448,9 +1448,9 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32) hoodtype = /obj/item/clothing/head/hooded/sigmarcoat supports_variations_flags = NONE -// Donation reward for Sonicgotnuked +// Donation reward for The Sharkenning -/obj/item/clothing/gloves/ring/hypno/nuke +/obj/item/clothing/gloves/ring/hypno/sharkenning name = "suspiciously glossy ring" desc = "This ring oozes with an assertive edge as sharp light bends along the smooth, black bronze. Like the finger that wears it, an exceptional amount of polish repels nearly all the light that glances along its surface. If you look closer, a slight golden hue indicates the precious metals inside the alloy." icon = 'modular_skyrat/master_files/icons/donator/obj/clothing/gloves.dmi' @@ -1461,7 +1461,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/structure/sign/poster/contraband/korpstech, 32) righthand_file = null spans = list("glossy") -/obj/item/clothing/ears/kinky_headphones/nuke +/obj/item/clothing/ears/kinky_headphones/sharkenning name = "suspiciously glossy headphones" desc = "Black metalic headphones with a glossy finish. The soft rubber cushions are comftorable and form fitting" icon_state = "kinkphones_black_off" diff --git a/modular_skyrat/modules/goofsec/code/sol_fed.dm b/modular_skyrat/modules/goofsec/code/sol_fed.dm index 0e17fed0c140a..1abab7ebab3f2 100644 --- a/modular_skyrat/modules/goofsec/code/sol_fed.dm +++ b/modular_skyrat/modules/goofsec/code/sol_fed.dm @@ -143,7 +143,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( cell_phone_number = "Dogginos" list_to_use = "dogginos" priority_announce(announcement_message, announcer, 'sound/effects/families_police.ogg', has_important_message=TRUE, color_override = "yellow") - var/list/candidates = SSpolling.poll_ghost_candidates(poll_question, ROLE_DEATHSQUAD) + var/list/candidates = SSpolling.poll_ghost_candidates(poll_question, check_jobban = "deathsquad", alert_pic = /obj/item/card/id/advanced/solfed, role_name_text = "solfed response team") if(candidates.len) //Pick the (un)lucky players @@ -224,13 +224,13 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( message_admins("[ADMIN_LOOKUPFLW(user)] is considering calling the Sol Federation [called_group_pretty].") var/call_911_msg_are_you_sure = "Are you sure you want to call 911? Faulty 911 calls results in a $20,000 fine and a 5 year superjail \ sentence." - if(tgui_input_list(user, call_911_msg_are_you_sure, "Call 911", list("Yes", "No")) != "Yes") + if(tgui_alert(user, call_911_msg_are_you_sure, "Call 911", list("No", "Yes")) != "Yes") return message_admins("[ADMIN_LOOKUPFLW(user)] has acknowledged the faulty 911 call consequences.") - if(tgui_input_list(user, GLOB.call911_do_and_do_not[called_group], "Call [called_group_pretty]", list("Yes", "No")) != "Yes") + if(tgui_alert(user, GLOB.call911_do_and_do_not[called_group], "Call [called_group_pretty]", list("No", "Yes")) != "Yes") return message_admins("[ADMIN_LOOKUPFLW(user)] has read and acknowleged the recommendations for what to call and not call [called_group_pretty] for.") - var/reason_to_call_911 = stripped_input(user, "What do you wish to call 911 [called_group_pretty] for?", "Call 911", null, MAX_MESSAGE_LEN) + var/reason_to_call_911 = tgui_input_text(user, "What do you wish to call 911 [called_group_pretty] for?", "Call 911", null, MAX_MESSAGE_LEN) if(!reason_to_call_911) to_chat(user, "You decide not to call 911.") return @@ -642,7 +642,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( /obj/item/solfed_reporter/swat_caller/questions(mob/user) var/question = "Does the situation require additional S.W.A.T. backup, involve the station impeding you from doing your job, \ or involve the station making a fraudulent 911 call and needing an arrest made on the caller?" - if(tgui_input_list(user, question, "S.W.A.T. Backup Caller", list("Yes", "No")) != "Yes") + if(tgui_alert(user, question, "S.W.A.T. Backup Caller", list("No", "Yes")) != "Yes") to_chat(user, "You decide not to request S.W.A.T. backup.") return FALSE message_admins("[ADMIN_LOOKUPFLW(user)] has voted to summon S.W.A.T backup.") @@ -678,7 +678,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( administrative action against your account." ) for(var/question in list_of_questions) - if(tgui_input_list(user, question, "Treason Reporter", list("Yes", "No")) != "Yes") + if(tgui_alert(user, question, "Treason Reporter", list("No", "Yes")) != "Yes") to_chat(user, "You decide not to declare the station as treasonous.") return FALSE message_admins("[ADMIN_LOOKUPFLW(user)] has acknowledged the consequences of a false claim of Treason administratively, \ @@ -705,7 +705,7 @@ GLOBAL_LIST_INIT(call911_do_and_do_not, list( cell_phone_number = "Dogginos" /obj/item/solfed_reporter/pizza_managers/questions(mob/user) - if(tgui_input_list(user, "Is the station refusing to pay their bill of $35,000, including a fifteen percent tip for delivery drivers?", "Dogginos Uncompliant Customer Reporter", list("Yes", "No")) != "Yes") + if(tgui_alert(user, "Is the station refusing to pay their bill of $35,000, including a fifteen percent tip for delivery drivers?", "Dogginos Uncompliant Customer Reporter", list("No", "Yes")) != "Yes") to_chat(user, "You decide not to request management assist you with the delivery.") return FALSE message_admins("[ADMIN_LOOKUPFLW(user)] has voted to summon Dogginos management to resolve the lack of payment.") diff --git a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm index ee44cf44996c6..607514e2ab4f3 100644 --- a/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm +++ b/modular_skyrat/modules/modular_implants/code/soulcatcher/soulcatcher_mob.dm @@ -2,7 +2,7 @@ /// Is the soul able to leave the soulcatcher? var/able_to_leave = TRUE /// Did the soul live within the round? This is checked if we want to transfer the soul to another body. - var/round_participant = FALSE + var/round_participant = TRUE //BUBBER EDIT /// Does the body need scanned? var/body_scan_needed = FALSE /// Assuming we died inside of the round? What is our previous body? diff --git a/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm b/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm index a15d0766ecef1..a02fc10a94a77 100644 --- a/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm +++ b/modular_skyrat/modules/modular_weapons/code/conversion_kits.dm @@ -19,7 +19,8 @@ /datum/crafting_recipe/mosin_pro name = "Sakhno to Xhihao 'Rengo' Conversion" - desc = "It's actually really easy to change the stock on your Sakhno. Anyone can do it. It takes roughly thirty seconds and a screwdriver." + desc = "It's actually really easy to change the stock on your Sakhno. Anyone can do it. \ + It takes roughly thirty seconds and a screwdriver." result = /obj/item/gun/ballistic/rifle/boltaction/sporterized/empty reqs = list( /obj/item/gun/ballistic/rifle/boltaction = 1, @@ -34,7 +35,7 @@ category = CAT_WEAPON_RANGED /datum/crafting_recipe/mosin_pro/New() - ..() + . = ..() blacklist |= subtypesof(/obj/item/gun/ballistic/rifle/boltaction) - list(/obj/item/gun/ballistic/rifle/boltaction/surplus) /datum/crafting_recipe/mosin_pro/check_requirements(mob/user, list/collected_requirements) diff --git a/modular_skyrat/modules/moretraitoritems/code/weapons.dm b/modular_skyrat/modules/moretraitoritems/code/weapons.dm index 48a823694ec93..48bd909852a84 100644 --- a/modular_skyrat/modules/moretraitoritems/code/weapons.dm +++ b/modular_skyrat/modules/moretraitoritems/code/weapons.dm @@ -105,16 +105,27 @@ /obj/item/gun/ballistic/automatic/pistol/robohand/unrestricted unrestricted = TRUE -//The gun cannot shoot if you do not have a cyborg arm. -/obj/item/gun/ballistic/automatic/pistol/robohand/afterattack(atom/target, mob/living/user, flag, params) - //This is where we are checking if the user has a cybernetic arm to USE the gun. ROBOHAND HAS A ROBO HAND - if(!unrestricted) - var/mob/living/carbon/human/human_user = user - var/obj/item/bodypart/selected_hand = human_user.get_active_hand() - if(IS_ORGANIC_LIMB(selected_hand)) - to_chat(user, span_warning("You can't seem to figure out how to use [src], perhaps you need to check the manual?")) - return - . = ..() +/obj/item/gun/ballistic/automatic/pistol/robohand/ranged_interact_with_atom(atom/interacting_with, mob/living/user, list/modifiers) + if(can_use(user) == ITEM_INTERACT_SUCCESS) + return ..() + return ITEM_INTERACT_BLOCKING + +/obj/item/gun/ballistic/automatic/pistol/robohand/ranged_interact_with_atom_secondary(atom/interacting_with, mob/living/user, list/modifiers) + if(can_use(user) == ITEM_INTERACT_SUCCESS) + return ..() + return ITEM_INTERACT_BLOCKING + +/// Checks if we have the roboarm to use the robo gun. Well, unless it's unrestricted +/obj/item/gun/ballistic/automatic/pistol/robohand/proc/can_use(mob/living/carbon/human/user) + if(unrestricted) + return ITEM_INTERACT_SUCCESS + if(!istype(user)) + return ITEM_INTERACT_BLOCKING + var/obj/item/bodypart/selected_hand = user.get_active_hand() + if(IS_ORGANIC_LIMB(selected_hand)) + to_chat(user, span_warning("You can't seem to figure out how to use [src], perhaps you need to check the manual?")) + return ITEM_INTERACT_BLOCKING + return ITEM_INTERACT_SUCCESS /obj/item/gun/ballistic/automatic/pistol/robohand/insert_magazine(mob/user, obj/item/ammo_box/magazine/inserted_mag, display_message) if(!istype(inserted_mag, accepted_magazine_type)) diff --git a/modular_skyrat/modules/polarized_windows/polarization_controller.dm b/modular_skyrat/modules/polarized_windows/polarization_controller.dm index 116f2566c6e7e..1f4b0737e799e 100644 --- a/modular_skyrat/modules/polarized_windows/polarization_controller.dm +++ b/modular_skyrat/modules/polarized_windows/polarization_controller.dm @@ -75,13 +75,13 @@ GLOBAL_LIST_EMPTY(polarization_controllers) * Called when the parent window is being hit by an item * * Arguments: - * * obj/item/attacking_item - The item hitting this atom * * mob/user - The wielder of this item + * * obj/item/attacking_item - The item hitting this atom * * params - click params such as alt/shift etc * * See: [/obj/item/proc/melee_attack_chain] */ -/datum/component/polarization_controller/proc/window_item_interact(datum/source, obj/item/attacking_item, mob/user, params) +/datum/component/polarization_controller/proc/window_item_interact(datum/source, mob/user, obj/item/attacking_item, params) SIGNAL_HANDLER if(!istype(attacking_item, /obj/item/assembly/control/polarizer)) diff --git a/modular_skyrat/modules/primitive_production/code/hydroponics.dm b/modular_skyrat/modules/primitive_production/code/hydroponics.dm index b4165e8f04d74..a794db7383dc2 100644 --- a/modular_skyrat/modules/primitive_production/code/hydroponics.dm +++ b/modular_skyrat/modules/primitive_production/code/hydroponics.dm @@ -107,59 +107,63 @@ /obj/machinery/compostbin/proc/visible_volume() return reagents.total_volume -/obj/machinery/compostbin/attacked_by(obj/item/weapon, mob/living/user) - if(!machine_stat) - if(user.combat_mode) - return ..() +/obj/machinery/compostbin/base_item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + if(. == ITEM_INTERACT_BLOCKING) + return + if(user.combat_mode) + return ITEM_INTERACT_SKIP_TO_ATTACK - if(istype(weapon, /obj/item/storage/bag)) - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, span_warning("\The [src] is already full of compost.")) - return TRUE + . = ITEM_INTERACT_BLOCKING + if(istype(tool, /obj/item/storage/bag)) + if(reagents.total_volume >= reagents.maximum_volume) + to_chat(user, span_warning("\The [src] is already full of compost.")) + return - if(current_item_count >= max_items) - to_chat(user, span_warning("\The [src] is already full of produce! Wait for it to decompose.")) - return TRUE + if(current_item_count >= max_items) + to_chat(user, span_warning("\The [src] is already full of produce! Wait for it to decompose.")) + return - var/obj/item/storage/bag/bag = weapon + var/obj/item/storage/bag/bag = tool - for(var/obj/item/food/item in bag.contents) - if(current_item_count >= max_items) - break + for(var/obj/item/food/item in bag.contents) + if(current_item_count >= max_items) + break - if(bag.atom_storage.attempt_remove(item, src)) - current_item_count++ + if(bag.atom_storage.attempt_remove(item, src)) + current_item_count++ - if(bag.contents.len == 0) - to_chat(user, span_info("You empty \the [bag] into \the [src].")) + if(bag.contents.len == 0) + to_chat(user, span_info("You empty \the [bag] into \the [src].")) - else if (current_item_count >= max_items) - to_chat(user, span_info("You fill \the [src] from \the [bag] to its capacity.")) + else if (current_item_count >= max_items) + to_chat(user, span_info("You fill \the [src] from \the [bag] to its capacity.")) - else - to_chat(user, span_info("You fill \the [src] from \the [bag].")) + else + to_chat(user, span_info("You fill \the [src] from \the [bag].")) - start_process() - return TRUE //no afterattack + start_process() + return ITEM_INTERACT_SUCCESS - else if(istype(weapon, /obj/item/food)) - if(reagents.total_volume >= reagents.maximum_volume) - to_chat(user, span_warning("\The [src] is already full of compost.")) - return TRUE + else if(istype(tool, /obj/item/food)) + if(reagents.total_volume >= reagents.maximum_volume) + to_chat(user, span_warning("\The [src] is already full of compost.")) + return - if(current_item_count >= max_items) - to_chat(user, span_warning("\The [src] is already full of produce! Wait for it to decompose.")) + if(current_item_count >= max_items) + to_chat(user, span_warning("\The [src] is already full of produce! Wait for it to decompose.")) - else - if(user.transferItemToLoc(weapon, src)) - current_item_count++ - to_chat(user, span_info("You insert \the [weapon] in \the [src]")) + else + if(user.transferItemToLoc(tool, src)) + current_item_count++ + to_chat(user, span_info("You insert \the [tool] in \the [src]")) - start_process() - return TRUE //no afterattack + start_process() + return ITEM_INTERACT_SUCCESS - else - to_chat(user, span_warning("You cannot put \the [weapon] in \the [src]!")) + else + to_chat(user, span_warning("You cannot put \the [tool] in \the [src]!")) + return /obj/machinery/compostbin/proc/start_process() if(machine_stat != NONE) diff --git a/modular_skyrat/modules/reagent_forging/code/forge_items.dm b/modular_skyrat/modules/reagent_forging/code/forge_items.dm index 4db2587dc293f..84818353acbcf 100644 --- a/modular_skyrat/modules/reagent_forging/code/forge_items.dm +++ b/modular_skyrat/modules/reagent_forging/code/forge_items.dm @@ -38,12 +38,6 @@ /obj/structure/reagent_crafting_bench ) -/obj/item/forging/hammer/afterattack(atom/target, mob/user, click_parameters) - . = ..() - if(!is_type_in_list(target, fast_attacks)) - return - user.changeNext_move(CLICK_CD_RAPID) - /obj/item/forging/hammer/primitive name = "primitive forging hammer" diff --git a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm index 3c60e97095872..b5b160a4c0cb9 100644 --- a/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm +++ b/modular_skyrat/modules/xenos_skyrat_redo/code/xeno_types/queen.dm @@ -72,7 +72,7 @@ shake_camera(owner, 2, 2) for(var/mob/living/carbon/human/screech_target in get_hearers_in_view(7, get_turf(queenie))) - screech_target.soundbang_act(intensity = 5, stun_pwr = 50, damage_pwr = 10, deafen_pwr = 30) //Only being deaf will save you from the screech + screech_target.soundbang_act(intensity = 3, stun_pwr = 80, damage_pwr = 5, deafen_pwr = 10) // Only being deaf or in space with protection will save you shake_camera(screech_target, 4, 3) to_chat(screech_target, span_doyourjobidiot("[queenie] lets out a deafening screech!")) diff --git a/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm b/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm index 947606d41756a..7a315600bcca9 100644 --- a/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm +++ b/modular_zubbers/code/__DEFINES/bloodsucker_defines.dm @@ -59,12 +59,12 @@ /** * Ghoul defines */ -///If someone passes all checks and can be ghoulized -#define GHOULIZATION_ALLOWED 0 -///If someone has to accept ghoulization -#define GHOULIZATION_DISLOYAL 1 +///If someone passes all checks and can be ghouled +#define GHOULING_ALLOWED 0 +///If someone has to accept ghouling +#define GHOULING_DISLOYAL 1 ///If someone is not allowed under any circimstances to become a Ghoul -#define GHOULIZATION_BANNED 2 +#define GHOULING_BANNED 2 /** * Cooldown defines diff --git a/modular_zubbers/code/__DEFINES/moonstation_defines.dm b/modular_zubbers/code/__DEFINES/moonstation_defines.dm index db8155b53d9d2..ab5ffae4653bb 100644 --- a/modular_zubbers/code/__DEFINES/moonstation_defines.dm +++ b/modular_zubbers/code/__DEFINES/moonstation_defines.dm @@ -2,3 +2,4 @@ #define MOONSTATION_ATMOS_CAVE LAVALAND_DEFAULT_ATMOS #define ZTRAIT_SANDSTORM "Weather_Sandstorm" +#define ZTRAIT_MOONSTATION_RUINS "Moonstation Ruins" diff --git a/modular_zubbers/code/controllers/subsystem/mapping.dm b/modular_zubbers/code/controllers/subsystem/mapping.dm index c7c4f5e2173d4..7fd2c0f73cf52 100644 --- a/modular_zubbers/code/controllers/subsystem/mapping.dm +++ b/modular_zubbers/code/controllers/subsystem/mapping.dm @@ -3,12 +3,12 @@ /datum/controller/subsystem/mapping/setup_rivers() . = ..() // Generate mining ruins - var/list/lava_ruins = levels_by_trait(ZTRAIT_LAVA_RUINS) + var/list/lava_ruins = levels_by_trait(ZTRAIT_MOONSTATION_RUINS) for (var/lava_z in lava_ruins) spawn_rivers(lava_z, 4, /turf/open/lava/smooth/lava_land_surface, /area/lavaland/underground/unexplored) /datum/controller/subsystem/mapping/setup_ruins() . = ..() - var/list/lava_ruins = levels_by_trait(ZTRAIT_LAVA_RUINS) + var/list/lava_ruins = levels_by_trait(ZTRAIT_MOONSTATION_RUINS) if (lava_ruins.len) - seedRuins(lava_ruins, CONFIG_GET(number/lavaland_budget), list(/area/lavaland/underground/unexplored), themed_ruins[ZTRAIT_LAVA_RUINS], clear_below = TRUE) + seedRuins(lava_ruins, CONFIG_GET(number/lavaland_budget), list(/area/lavaland/underground/unexplored), themed_ruins[ZTRAIT_LAVA_RUINS], clear_below = TRUE, mineral_budget = 15, mineral_budget_update = OREGEN_PRESET_LAVALAND) diff --git a/modular_zubbers/code/datums/elements/examine_when_worn.dm b/modular_zubbers/code/datums/elements/examine_when_worn.dm new file mode 100644 index 0000000000000..59e64adaefe01 --- /dev/null +++ b/modular_zubbers/code/datums/elements/examine_when_worn.dm @@ -0,0 +1,17 @@ +// This is cheaper than adding to the Topic() of atom +/datum/element/examined_when_worn + +/datum/element/examined_when_worn/Attach(datum/target) + . = ..() + RegisterSignal(target, COMSIG_TOPIC, PROC_REF(on_topic)) + ADD_TRAIT(target, TRAIT_WORN_EXAMINE, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM) + +/datum/element/examined_when_worn/proc/on_topic(atom/source, mob/user, href_list) + if(href_list["examine_loadout"]) + user.run_examinate(source) + return + +/datum/element/examined_when_worn/Detach(datum/source, ...) + . = ..() + UnregisterSignal(source, COMSIG_TOPIC) + REMOVE_TRAIT(source, TRAIT_WORN_EXAMINE, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM) diff --git a/modular_zubbers/code/datums/weather/weather_types/sand_storm.dm b/modular_zubbers/code/datums/weather/weather_types/sand_storm.dm index 1ad9bbbafdc01..85a6b18de3c4a 100644 --- a/modular_zubbers/code/datums/weather/weather_types/sand_storm.dm +++ b/modular_zubbers/code/datums/weather/weather_types/sand_storm.dm @@ -234,4 +234,4 @@ GLOBAL_LIST_EMPTY(sand_storm_sounds) /obj/item/clothing/shoes/cowboyboots heat_protection = FEET - max_heat_protection_temperature = 400 \ No newline at end of file + max_heat_protection_temperature = 400 diff --git a/modular_zubbers/code/game/objects/items/plushes.dm b/modular_zubbers/code/game/objects/items/plushes.dm index d326717000e87..8ae9c4b7ee097 100644 --- a/modular_zubbers/code/game/objects/items/plushes.dm +++ b/modular_zubbers/code/game/objects/items/plushes.dm @@ -196,3 +196,13 @@ new /obj/effect/decal/cleanable/ash(get_turf(src)) src.visible_message(span_warning("The [src.name] turns to ash!")) qdel(src) + +// Plush for Vanilla +/obj/item/toy/plush/suspicious_protogen + name = "\improper Suspicious protogen plush" + desc = "A suspicious pink looking protogen plushie commonly seen roaming the station almost everywhere, \ + perfect for cuddling when you feel upset at something." + icon = 'modular_zubbers/icons/obj/toys/plushes.dmi' + icon_state = "pinkproot" + gender = FEMALE + squeak_override = list('modular_skyrat/modules/emotes/sound/emotes/dwoop.ogg' = 1) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm index d0333b4735d8f..e407b3db18940 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/bloodsucker.dm @@ -78,7 +78,7 @@ /// Static typecache of all bloodsucker powers. var/static/list/all_bloodsucker_powers = typecacheof(/datum/action/cooldown/bloodsucker, ignore_root_path = TRUE) - /// Antagonists that cannot be Ghoulized no matter what + /// Antagonists that cannot be Ghouled no matter what var/static/list/ghoul_banned_antags = list( /datum/antagonist/bloodsucker, // /datum/antagonist/monsterhunter, diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm index 72954ac6f401e..075972577f9d2 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/conversion.dm @@ -1,19 +1,19 @@ /** * Checks if the target has antag datums and, if so, - * are they allowed to be Ghoulized, or not, or banned. + * are they allowed to be Ghouled, or not, or banned. * Args: * target - The person we check for antag datums. */ /datum/antagonist/bloodsucker/proc/AmValidAntag(mob/target) if(HAS_TRAIT(target, TRAIT_UNCONVERTABLE)) - return GHOULIZATION_BANNED + return GHOULING_BANNED - var/ghoulization_status = GHOULIZATION_ALLOWED + var/ghouling_status = GHOULING_ALLOWED for(var/datum/antagonist/antag_datum as anything in target.mind.antag_datums) if(antag_datum.type in ghoul_banned_antags) - return GHOULIZATION_BANNED - ghoulization_status = GHOULIZATION_DISLOYAL - return ghoulization_status + return GHOULING_BANNED + ghouling_status = GHOULING_DISLOYAL + return ghouling_status /** * # can_make_ghoul @@ -22,7 +22,7 @@ * If they are a Ghoul themselves, will check if their master * has broken the Masquerade, to steal them. * Args: - * conversion_target - Person being ghoulized + * conversion_target - Person being ghouled */ /datum/antagonist/bloodsucker/proc/can_make_ghoul(mob/living/conversion_target) if(!iscarbon(conversion_target) || (conversion_target.stat < CONSCIOUS)) @@ -31,7 +31,7 @@ if(!conversion_target.mind) to_chat(owner.current, span_danger("[conversion_target] isn't self-aware enough to be made into a Ghoul.")) return FALSE - if(AmValidAntag(conversion_target) == GHOULIZATION_BANNED) + if(AmValidAntag(conversion_target) == GHOULING_BANNED) to_chat(owner.current, span_danger("[conversion_target] resists the power of your blood to dominate their mind!")) return FALSE var/mob/living/master = conversion_target.mind.enslaved_to?.resolve() diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm index 4c70d8b7d10da..db9aaedabc39b 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/life.dm @@ -228,8 +228,7 @@ bloodsuckeruser.cure_husk(CHANGELING_DRAIN) bloodsuckeruser.cure_husk(BURN) - for(var/datum/wound/wound as anything in bloodsuckeruser.all_wounds) - wound.remove_wound() + if(bloodsuckeruser.get_organ_slot(ORGAN_SLOT_HEART)) bloodsuckeruser.regenerate_organs(regenerate_existing = FALSE) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm index c7aabe42c5d7e..2f8074964d03a 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/bloodsuckers/objectives.dm @@ -98,13 +98,13 @@ /// Ghoulify a certain person / people /datum/objective/bloodsucker/conversion - name = "ghoulization" + name = "ghouling" ///////////////////////////////// // Ghoulify a head of staff /datum/objective/bloodsucker/conversion/command - name = "ghoulizationcommand" + name = "ghoulingcommand" target_amount = 1 // EXPLANATION diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm index 0a8232b82120a..933431759f4a6 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan.dm @@ -240,7 +240,7 @@ bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/candelabrum) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/bloodthrone) bloodsuckerdatum.owner.teach_crafting_recipe(/datum/crafting_recipe/meatcoffin) - bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "new recipes learned! Ghoulization unlocked!") + bloodsuckerdatum.owner.current.balloon_alert(bloodsuckerdatum.owner.current, "new recipes learned! Ghouling unlocked!") return TRUE @@ -292,16 +292,16 @@ option.image = image(icon = initial(ghouldatums.hud_icon), icon_state = initial(ghouldatums.antag_hud_name), pixel_y = -12, pixel_x = -12) option.info = "[initial(ghouldatums.name)] - [span_boldnotice(initial(ghouldatums.ghoul_description))]" radial_display[initial(ghouldatums.name)] = option - - if(!options.len) + if(!length(options)) master.balloon_alert(master, "Out of Special Ghoul slots!") return FALSE to_chat(master, span_notice("You can change who this Ghoul is, who are they to you? This will cost [SPECIAL_GHOUL_COST] blood.")) var/ghoul_response = show_radial_menu(master, servant, radial_display) - if(!ghoul_response) + if(!ghoul_response || !is_valid_ghoul(options[ghoul_response])) return FALSE var/datum/antagonist/ghoul/ghoul_type = options[ghoul_response] + // let's ask if the ghoul themselves actually wants to be a favorite #ifndef BLOODSUCKER_TESTING servant.balloon_alert(master, "asking...") @@ -312,6 +312,7 @@ #endif if(QDELETED(src) || QDELETED(master) || QDELETED(servant) || !ghoul_type) return FALSE + if(bloodsuckerdatum.GetBloodVolume() < SPECIAL_GHOUL_COST) to_chat(master, span_notice("You took too long to make your ghoul, you no longer have enough blood!")) return FALSE @@ -319,6 +320,10 @@ bloodsuckerdatum.AdjustBloodVolume(-SPECIAL_GHOUL_COST) return TRUE +/datum/bloodsucker_clan/proc/is_valid_ghoul(datum/antagonist/ghoul/ghoul_type) + if(!ghoul_type) + return FALSE + return TRUE /** * Called when we are successfully turn a Ghoul into a Favorite Ghoul * args: diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm index b35ec6e9ece92..2a1eb497f0d9b 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/clans/clan_ventrue.dm @@ -138,5 +138,16 @@ to_chat(source.owner.current, span_announce("* Bloodsucker Tip: You can now upgrade your Favorite Ghoul by buckling them onto a persuasion rack!")) ghouldatum.BuyPower(/datum/action/cooldown/bloodsucker/distress) +/datum/bloodsucker_clan/ventrue/is_valid_ghoul(datum/antagonist/ghoul/ghoul_type) + . = ..() + if(!.) + return FALSE + var/datum/antagonist/ghoul/favorite = /datum/antagonist/ghoul/favorite + if(ghoul_type != favorite) + // no ghoul slots and trying to make a non-favorite ghoul, don't softlock yourself + if(bloodsuckerdatum.free_ghoul_slots() < 1 && !bloodsuckerdatum.special_ghouls[initial(favorite.special_type)]) + to_chat(bloodsuckerdatum.owner.current, span_danger("Making a non-favorite Ghoul will prevent you from leveling up, as you have no slots left!")) + return FALSE + return TRUE #undef VENTRUE_MAX_POWERS diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm index b1d08c8afd76b..8001ef2a11ab0 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/powers/tremere/dominate.dm @@ -54,7 +54,7 @@ . += "While this ability is active, you will be able to see additional information about everyone in the room." . += "At level [DOMINATE_XRAY_LEVEL], you will gain X-Ray vision while this ability is active." . += "At level [DOMINATE_GHOULIZE_LEVEL], while adjacent to the target, if your target is in critical condition or dead, they will instead be turned into a temporary Ghoul. This will cost [TEMP_GHOULIZE_COST] blood." - . += "The victim must have atleast [BLOOD_VOLUME_BAD] blood to be ghoulized." + . += "The victim must have atleast [BLOOD_VOLUME_BAD] blood to be ghouled." . += "The ghoul will be mute and deaf if the level of [src] is not at least [DOMINATE_NON_MUTE_GHOULIZE_LEVEL]" . += "If you use this on a currently dead normal Ghoul, they will will not suddenly cease to live as if a temporary Ghoul." . += "They will have complete loyalty to you, until their death in [DisplayTimeText(get_ghoul_duration())] upon use." @@ -106,7 +106,7 @@ if(IS_GHOUL(target_mob)) owner.balloon_alert(owner, "too far to revive!") else - owner.balloon_alert(owner, "too far to ghoulize!") + owner.balloon_alert(owner, "too far to ghoul!") return TRUE return ..() @@ -118,7 +118,7 @@ if(ghoul) owner.balloon_alert(owner, "attempting to revive.") else - owner.balloon_alert(owner, "attempting to ghoulize.") + owner.balloon_alert(owner, "attempting to ghoul.") if(!do_after(user, 6 SECONDS, target, NONE, TRUE)) return FALSE if(!victim_has_blood(target)) @@ -136,7 +136,7 @@ log_combat(owner, target, "tremere revived", addition="Revived their ghoul using dominate") return FALSE if(!bloodsuckerdatum_power.make_ghoul(target) ) - owner.balloon_alert(owner, "not a valid target for ghoulization!.") + owner.balloon_alert(owner, "not a valid target for ghouling!.") return /*if(IS_MONSTERHUNTER(target)) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm index f49ad794ff1c5..60d7bad0e7938 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/structures/crypt.dm @@ -166,7 +166,7 @@ return // Don't buckle Silicon to it please. if(issilicon(living_target)) - to_chat(user, span_danger("You realize that this machine cannot be ghoulized, therefore it is useless to buckle them.")) + to_chat(user, span_danger("You realize that this machine cannot be ghouled, therefore it is useless to buckle them.")) return if(do_after(user, 5 SECONDS, living_target)) attach_victim(living_target, user) @@ -253,7 +253,7 @@ user_unbuckle_mob(buckled_carbons, user) return if(!bloodsuckerdatum.my_clan) - to_chat(user, span_warning("You can't ghoulize people until you enter a Clan (Through your Antagonist UI button)")) + to_chat(user, span_warning("You can't ghoul people until you enter a Clan (Through your Antagonist UI button)")) user.balloon_alert(user, "join a clan first!") return var/datum/antagonist/ghoul/ghouldatum = IS_GHOUL(buckled_carbons) @@ -262,7 +262,7 @@ SEND_SIGNAL(bloodsuckerdatum, COMSIG_BLOODSUCKER_INTERACT_WITH_GHOUL, ghouldatum) return if(bloodsuckerdatum.free_ghoul_slots() < 1) - to_chat(user, span_warning("You can't ghoulize more people until you level up more! You are currently at [bloodsuckerdatum.free_ghoul_slots()] active / [bloodsuckerdatum.max_ghouls()] max ghouls.")) + to_chat(user, span_warning("You can't ghoul more people until you level up more! You are currently at [bloodsuckerdatum.free_ghoul_slots()] active / [bloodsuckerdatum.max_ghouls()] max ghouls.")) user.balloon_alert(user, "not enough ghoul slots!") return @@ -286,9 +286,9 @@ return FALSE var/disloyalty_requires = RequireDisloyalty(user, target) - if(disloyalty_requires == GHOULIZATION_BANNED) + if(disloyalty_requires == GHOULING_BANNED) if(target.ckey) - balloon_alert(user, "can't be ghoulized!") + balloon_alert(user, "can't be ghouled!") else balloon_alert(user, "target has no mind!") return FALSE @@ -399,7 +399,7 @@ if("Accept") disloyalty_confirm = TRUE else - target.balloon_alert_to_viewers("stares defiantly", "refused ghoulization!") + target.balloon_alert_to_viewers("stares defiantly", "refused ghouling!") disloyalty_offered = FALSE return TRUE @@ -409,10 +409,10 @@ #else if(!target?.mind || !target?.client) #endif - return GHOULIZATION_BANNED + return GHOULING_BANNED if(HAS_TRAIT(target, TRAIT_MINDSHIELD)) - return GHOULIZATION_DISLOYAL + return GHOULING_DISLOYAL var/datum/antagonist/bloodsucker/bloodsuckerdatum = IS_BLOODSUCKER(user) return bloodsuckerdatum.AmValidAntag(target) diff --git a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm index 677dc11cad0b1..25c2a07e7e840 100644 --- a/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm +++ b/modular_zubbers/code/modules/antagonists/bloodsucker/vassal/vassal_datum.dm @@ -76,7 +76,7 @@ /// This is called when the antagonist is successfully mindshielded. /datum/antagonist/ghoul/on_mindshield(mob/implanter, mob/living/mob_override) owner.remove_antag_datum(/datum/antagonist/ghoul) - owner.current.log_message("has been deconverted from Ghoulization by [implanter]!", LOG_ATTACK, color="#960000") + owner.current.log_message("has been deconverted from Ghouling by [implanter]!", LOG_ATTACK, color="#960000") return COMPONENT_MINDSHIELD_DECONVERTED /datum/antagonist/ghoul/proc/on_examined(datum/source, mob/examiner, examine_text) @@ -98,7 +98,7 @@ master.special_ghouls[special_type] |= src master.ghouls += src owner.enslave_mind_to_creator(master.owner.current) - owner.current.log_message("has been ghoulized by [master.owner.current]!", LOG_ATTACK, color="#960000") + owner.current.log_message("has been ghouled by [master.owner.current]!", LOG_ATTACK, color="#960000") /// Give Recuperate Power BuyPower(/datum/action/cooldown/bloodsucker/recuperate) /// Give Objectives diff --git a/modular_zubbers/code/modules/antagonists/malf/doomsday.dm b/modular_zubbers/code/modules/antagonists/malf/doomsday.dm index 3755cb56c3734..c634e8dcf0eb7 100644 --- a/modular_zubbers/code/modules/antagonists/malf/doomsday.dm +++ b/modular_zubbers/code/modules/antagonists/malf/doomsday.dm @@ -1,7 +1,6 @@ /obj/machinery/doomsday_device/trigger_doomsday() - var/list/bombable = SSmapping.levels_by_trait(ZTRAIT_STATION) - for(var/obj/machinery/power/apc/power in world) - if(power.z == locate(power.z) in bombable) + for(var/obj/machinery/power/apc/power as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/apc)) + if(is_station_level(power.z)) explosion(power, light_impact_range = 15, explosion_cause = src, adminlog = TRUE) sleep(1) to_chat(world, span_bold("You hear a series of explosions!")) diff --git a/modular_zubbers/code/modules/cargo/bounties/prisoner.dm b/modular_zubbers/code/modules/cargo/bounties/prisoner.dm index a4b60536e08ae..9fa5e2ad69805 100644 --- a/modular_zubbers/code/modules/cargo/bounties/prisoner.dm +++ b/modular_zubbers/code/modules/cargo/bounties/prisoner.dm @@ -7,7 +7,7 @@ /datum/bounty/item/prisoner/baseball_bat name = "Baseball Bat" - description = "Baseball fever is going on at CentCom! Be a dear and ship them some baseball bats, so that management can live out their childhood dream." + description = "Security wants more baseball bats, sell them... Don't use them unless you want to be the new league ball." reward = CARGO_CRATE_VALUE * 4 required_count = 5 wanted_types = list(/obj/item/melee/baseball_bat = TRUE) @@ -20,7 +20,7 @@ /datum/bounty/item/prisoner/poppy name = "Poppies" - description = "Stop asking questions, send the flowers, get paid. INMATE!" + description = "Stop asking questions, send the poppies, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 2 required_count = 3 wanted_types = list(/obj/item/food/grown/poppy = TRUE) @@ -28,7 +28,7 @@ /datum/bounty/item/prisoner/lilly name = "Lillies" - description = "Stop asking questions, send the flowers, get paid. INMATE!" + description = "Stop asking questions, send the lillies, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 3 wanted_types = list(/obj/item/food/grown/poppy/lily = TRUE) @@ -36,7 +36,7 @@ /datum/bounty/item/prisoner/geranium name = "Geraniums" - description = "Stop asking questions, send the flowers, get paid. INMATE!" + description = "Stop asking questions, send the geraniums, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 3 wanted_types = list(/obj/item/food/grown/poppy/geranium = TRUE) @@ -44,7 +44,7 @@ /datum/bounty/item/prisoner/tomatoes name = "Tomatoes" - description = "Stop asking questions, send the fruits, get paid. INMATE!" + description = "Stop asking questions, send the tomatoes, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 5 wanted_types = list(/obj/item/food/grown/tomato = TRUE) @@ -52,7 +52,7 @@ /datum/bounty/item/prisoner/carrots name = "Carrots" - description = "Stop asking questions, send the fruits, get paid. INMATE!" + description = "Stop asking questions, send the carrots, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 5 wanted_types = list(/obj/item/food/grown/carrot = TRUE) @@ -60,7 +60,7 @@ /datum/bounty/item/prisoner/onion name = "Onions" - description = "Stop asking questions, send the fruits, get paid. INMATE!" + description = "Stop asking questions, send the onions, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 5 wanted_types = list(/obj/item/food/grown/onion = TRUE) @@ -68,7 +68,7 @@ /datum/bounty/item/prisoner/apples name = "Apples" - description = "Stop asking questions, send the fruits, get paid. INMATE!" + description = "Stop asking questions, send the apples, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 5 wanted_types = list(/obj/item/food/grown/apple = TRUE) @@ -76,7 +76,7 @@ /datum/bounty/item/prisoner/grapes name = "Grapes" - description = "Stop asking questions, send the fruits, get paid. INMATE!" + description = "Stop asking questions, send the grapes, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 5 wanted_types = list(/obj/item/food/grown/grapes = TRUE) @@ -84,7 +84,7 @@ /datum/bounty/item/prisoner/corn name = "Ears of Corn" - description = "Stop asking questions, send the fruits, get paid. INMATE!" + description = "Stop asking questions, send the corn, get paid. INMATE!" reward = CARGO_CRATE_VALUE * 3 required_count = 5 wanted_types = list(/obj/item/food/grown/corn = TRUE) diff --git a/modular_zubbers/code/modules/clothing/head/sombrero.dm b/modular_zubbers/code/modules/clothing/head/sombrero.dm new file mode 100644 index 0000000000000..8556b8f05e1f1 --- /dev/null +++ b/modular_zubbers/code/modules/clothing/head/sombrero.dm @@ -0,0 +1,2 @@ +/obj/item/clothing/head/costume/sombrero + flags_inv = NONE diff --git a/modular_zubbers/code/modules/customization/sprite_accessories/horns.dm b/modular_zubbers/code/modules/customization/sprite_accessories/horns.dm index f353b8cb78bf4..c62be8327d7c0 100644 --- a/modular_zubbers/code/modules/customization/sprite_accessories/horns.dm +++ b/modular_zubbers/code/modules/customization/sprite_accessories/horns.dm @@ -33,6 +33,9 @@ name = "Biter's Horns" icon_state = "biterhorns" +/datum/sprite_accessory/horns/bubber/fullstub + name = "Full Stubby" + icon_state = "fullstub" /datum/sprite_accessory/horns/bubber/big icon = 'modular_zubbers/icons/customization/horns_big.dmi' diff --git a/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm b/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm index 949023edad25c..b3517579cc202 100644 --- a/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm +++ b/modular_zubbers/code/modules/customization/sprite_accessories/snouts.dm @@ -13,3 +13,15 @@ name = "Cat" icon = 'modular_zubbers/icons/customization/snouts.dmi' icon_state = "catsnout" + +/datum/sprite_accessory/snouts/full_face + name = "Full and Thick" + icon = 'modular_zubbers/icons/customization/snouts.dmi' + icon_state = "full" + color_src = USE_ONE_COLOR + +/datum/sprite_accessory/snouts/full_face_alt + name = "Full and Thick (Alt)" + icon = 'modular_zubbers/icons/customization/snouts.dmi' + icon_state = "fullalt" + color_src = USE_ONE_COLOR diff --git a/modular_zubbers/code/modules/debug_tools/physgun.dm b/modular_zubbers/code/modules/debug_tools/physgun.dm index 3cad81526994c..7fcd8140d21fe 100644 --- a/modular_zubbers/code/modules/debug_tools/physgun.dm +++ b/modular_zubbers/code/modules/debug_tools/physgun.dm @@ -20,20 +20,20 @@ drop_sound = 'sound/items/handling/tools/screwdriver_drop.ogg' pickup_sound = 'modular_zubbers/sound/phystools/physgun_pickup.ogg' - //The dragged object. - var/atom/movable/handlet_atom - //The creature that is using the physgun. + /// The dragged object + var/atom/movable/handled_atom + /// The creature that is using the physgun var/mob/living/physgun_user - //Datum of the beam between the user and the dragged object. + /// Datum of the beam between the user and the dragged object var/datum/beam/physgun_beam - //Color of the physgun. + /// Color of the physgun var/effects_color = COLOR_CARP_BLUE - //The effect that is tracking the cursor. + /// The effect that is tracking the cursor var/atom/movable/screen/fullscreen/cursor_catcher/physgun_catcher - //If the physgun is empowered? + /// If the physgun is empowered var/force_grab = FALSE - //Can the physgun use advanced settings? + /// Whether the physgun use advanced settings var/advanced = FALSE var/use_cooldown = 3 SECONDS @@ -46,23 +46,23 @@ /obj/item/physic_manipulation_tool/Destroy(force) . = ..() - if(handlet_atom) + if(handled_atom) release_atom() qdel(loop_sound) /** * The control of the dragging. */ -/obj/item/physic_manipulation_tool/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/physic_manipulation_tool/ranged_interact_with_atom(atom/movable/target, mob/living/user, list/modifiers) . = ..() if(istype(target)) if(!can_catch(target, user)) playsound(user, 'modular_zubbers/sound/phystools/physgun_cant_grab.ogg', 100, TRUE) return - if(!COOLDOWN_FINISHED(src, grab_cooldown) && !handlet_atom) + if(!COOLDOWN_FINISHED(src, grab_cooldown) && !handled_atom) user.balloon_alert(user, "On cooldown!") return - if(!range_check(target, user) && !handlet_atom) + if(!range_check(target, user) && !handled_atom) user.balloon_alert(user, "Too far!") return catch_atom(target, user) @@ -72,12 +72,12 @@ /obj/item/physic_manipulation_tool/dropped(mob/user, silent) . = ..() - if(handlet_atom) + if(handled_atom) release_atom() /obj/item/physic_manipulation_tool/click_alt(mob/user) . = ..() - var/choised_color = input(usr, "Pick new effects color", "Physgun color") as color|null + var/choised_color = input(usr, "Pick new effect color", "Physgun color") as color|null effects_color = choised_color color = choised_color update_appearance() @@ -99,27 +99,27 @@ if(!physgun_user) release_atom() return - if(!range_check(handlet_atom, physgun_user)) + if(!range_check(handled_atom, physgun_user)) release_atom() return if(physgun_catcher.mouse_params) physgun_catcher.calculate_params() if(!physgun_catcher.given_turf) return - physgun_user.setDir(get_dir(physgun_user, handlet_atom)) - if(handlet_atom.loc == physgun_catcher.given_turf) - if(handlet_atom.pixel_x == physgun_catcher.given_x - world.icon_size/2 && handlet_atom.pixel_y == physgun_catcher.given_y - world.icon_size/2) + physgun_user.setDir(get_dir(physgun_user, handled_atom)) + if(handled_atom.loc == physgun_catcher.given_turf) + if(handled_atom.pixel_x == physgun_catcher.given_x - world.icon_size/2 && handled_atom.pixel_y == physgun_catcher.given_y - world.icon_size/2) return - animate(handlet_atom, 0.2 SECONDS, pixel_x = handlet_atom.base_pixel_x + physgun_catcher.given_x - world.icon_size/2, pixel_y = handlet_atom.base_pixel_y + physgun_catcher.given_y - world.icon_size/2) + animate(handled_atom, 0.2 SECONDS, pixel_x = handled_atom.base_pixel_x + physgun_catcher.given_x - world.icon_size/2, pixel_y = handled_atom.base_pixel_y + physgun_catcher.given_y - world.icon_size/2) physgun_beam.redrawing() return - animate(handlet_atom, 0.2 SECONDS, pixel_x = handlet_atom.base_pixel_x + physgun_catcher.given_x - world.icon_size/2, pixel_y = handlet_atom.base_pixel_y + physgun_catcher.given_y - world.icon_size/2) + animate(handled_atom, 0.2 SECONDS, pixel_x = handled_atom.base_pixel_x + physgun_catcher.given_x - world.icon_size/2, pixel_y = handled_atom.base_pixel_y + physgun_catcher.given_y - world.icon_size/2) physgun_beam.redrawing() - var/turf/turf_to_move = get_step_towards(handlet_atom, physgun_catcher.given_turf) - handlet_atom.Move(turf_to_move, get_dir(handlet_atom, turf_to_move), 8) + var/turf/turf_to_move = get_step_towards(handled_atom, physgun_catcher.given_turf) + handled_atom.Move(turf_to_move, get_dir(handled_atom, turf_to_move), 8) var/pixel_x_change = 0 var/pixel_y_change = 0 - var/direction = get_dir(handlet_atom, turf_to_move) + var/direction = get_dir(handled_atom, turf_to_move) if(direction & NORTH) pixel_y_change = world.icon_size/2 else if(direction & SOUTH) @@ -128,7 +128,7 @@ pixel_x_change = world.icon_size/2 else if(direction & WEST) pixel_x_change = -world.icon_size/2 - animate(handlet_atom, 0.2 SECONDS, pixel_x = handlet_atom.base_pixel_x + pixel_x_change, pixel_y = handlet_atom.base_pixel_y + pixel_y_change) + animate(handled_atom, 0.2 SECONDS, pixel_x = handled_atom.base_pixel_x + pixel_x_change, pixel_y = handled_atom.base_pixel_y + pixel_y_change) /obj/item/physic_manipulation_tool/proc/can_catch(atom/target, mob/user) if(target == user) @@ -163,32 +163,32 @@ * Signal controller. */ -/obj/item/physic_manipulation_tool/proc/on_clicked(atom/source, location, control, params, user) +/obj/item/physic_manipulation_tool/proc/on_clicked(atom/source, atom/clicked_on, modifiers) SIGNAL_HANDLER - if(!handlet_atom || !physgun_user) + if(!handled_atom || !physgun_user) + stack_trace("Physgun tried to run its click signal with no linked atoms or users.") return - - var/list/modifiers = params2list(params) + . = COMSIG_MOB_CANCEL_CLICKON if(LAZYACCESS(modifiers, RIGHT_CLICK)) if(!advanced) - physgun_user.balloon_alert(physgun_user, "Not enjoy power!") + physgun_user.balloon_alert(physgun_user, "Not enough power!") return - pause_atom(handlet_atom) + pause_atom(handled_atom) return else if(LAZYACCESS(modifiers, CTRL_CLICK)) - repulse(handlet_atom, physgun_user) + repulse(handled_atom, physgun_user) return else if(LAZYACCESS(modifiers, ALT_CLICK)) - rotate_object(handlet_atom) + rotate_object(handled_atom) return release_atom() /obj/item/physic_manipulation_tool/proc/on_living_resist(mob/living) SIGNAL_HANDLER if(force_grab) - handlet_atom.balloon_alert(handlet_atom, "Never escape!") + handled_atom.balloon_alert(handled_atom, "Can't escape!") return - if(handlet_atom) + if(handled_atom) release_atom() /** @@ -210,13 +210,13 @@ physgun_beam.beam_color = effects_color physgun_catcher = user.overlay_fullscreen("physgun_effect", /atom/movable/screen/fullscreen/cursor_catcher, 0) physgun_catcher.assign_to_mob(user) - handlet_atom = target - handlet_atom.plane = handlet_atom.plane + 1 - handlet_atom.set_density(FALSE) + handled_atom = target + handled_atom.plane = handled_atom.plane + 1 + handled_atom.set_density(FALSE) physgun_user = user loop_sound.start() - RegisterSignal(physgun_catcher, COMSIG_CLICK, PROC_REF(on_clicked), TRUE) + RegisterSignal(user, COMSIG_MOB_CLICKON, PROC_REF(on_clicked), TRUE) START_PROCESSING(SSfastprocess, src) /** @@ -224,30 +224,30 @@ */ /obj/item/physic_manipulation_tool/proc/release_atom() - if(isliving(handlet_atom)) - var/mob/living/L = handlet_atom + if(isliving(handled_atom)) + var/mob/living/L = handled_atom if(force_grab) L.SetParalyzed(0) if(L.has_status_effect(/datum/status_effect/physgun_pause)) L.remove_status_effect(/datum/status_effect/physgun_pause) - handlet_atom.remove_traits(list(TRAIT_HANDS_BLOCKED), REF(src)) - UnregisterSignal(handlet_atom, COMSIG_LIVING_RESIST) - if(HAS_TRAIT(handlet_atom, TRAIT_PHYSGUN_PAUSE)) - REMOVE_TRAIT(handlet_atom, TRAIT_PHYSGUN_PAUSE, PHYSGUN_EFFECTS) - handlet_atom.movement_type = initial(movement_type) + handled_atom.remove_traits(list(TRAIT_HANDS_BLOCKED), REF(src)) + UnregisterSignal(handled_atom, COMSIG_LIVING_RESIST) + if(HAS_TRAIT(handled_atom, TRAIT_PHYSGUN_PAUSE)) + REMOVE_TRAIT(handled_atom, TRAIT_PHYSGUN_PAUSE, PHYSGUN_EFFECTS) + handled_atom.movement_type = initial(movement_type) STOP_PROCESSING(SSfastprocess, src) - handlet_atom.remove_filter("physgun") + handled_atom.remove_filter("physgun") UnregisterSignal(physgun_catcher, COMSIG_CLICK) physgun_catcher = null physgun_user.clear_fullscreen("physgun_effect") - handlet_atom.pixel_x = initial(handlet_atom.pixel_x) - handlet_atom.pixel_y = initial(handlet_atom.pixel_y) - handlet_atom.anchored = initial(handlet_atom.anchored) - handlet_atom.density = initial(handlet_atom.density) - handlet_atom.plane = initial(handlet_atom.plane) + handled_atom.pixel_x = initial(handled_atom.pixel_x) + handled_atom.pixel_y = initial(handled_atom.pixel_y) + handled_atom.anchored = initial(handled_atom.anchored) + handled_atom.density = initial(handled_atom.density) + handled_atom.plane = initial(handled_atom.plane) qdel(physgun_beam) physgun_user = null - handlet_atom = null + handled_atom = null loop_sound.stop() /** @@ -263,22 +263,22 @@ */ /obj/item/physic_manipulation_tool/proc/pause_atom(atom/movable/target) - if(isliving(handlet_atom)) + if(isliving(handled_atom)) var/mob/living/L = target if(force_grab) L.apply_status_effect(/datum/status_effect/physgun_pause/admin) else L.apply_status_effect(/datum/status_effect/physgun_pause) REMOVE_TRAIT(L, TRAIT_HANDS_BLOCKED, REF(src)) - ADD_TRAIT(handlet_atom, TRAIT_PHYSGUN_PAUSE, PHYSGUN_EFFECTS) - handlet_atom.set_anchored(TRUE) + ADD_TRAIT(handled_atom, TRAIT_PHYSGUN_PAUSE, PHYSGUN_EFFECTS) + handled_atom.set_anchored(TRUE) STOP_PROCESSING(SSfastprocess, src) UnregisterSignal(physgun_catcher, list(COMSIG_CLICK, COMSIG_CLICK_ALT, COMSIG_CLICK_CTRL)) physgun_catcher = null physgun_user.clear_fullscreen("physgun_effect") qdel(physgun_beam) physgun_user = null - handlet_atom = null + handled_atom = null loop_sound.stop() /obj/item/physic_manipulation_tool/proc/repulse(atom/movable/target, mob/user) diff --git a/modular_zubbers/code/modules/debug_tools/phystool.dm b/modular_zubbers/code/modules/debug_tools/phystool.dm index 5a0ec8e2dbaca..971ae20ddc7f9 100644 --- a/modular_zubbers/code/modules/debug_tools/phystool.dm +++ b/modular_zubbers/code/modules/debug_tools/phystool.dm @@ -18,17 +18,17 @@ resistance_flags = INDESTRUCTIBLE - //The mode that is chosen at the moment. + /// The mode that is chosen at the moment var/datum/phystool_mode/selected_mode - //Available modes. - var/list/datum/phystool_mode/avaible_modes = list( + /// Available modes + var/list/datum/phystool_mode/available_modes = list( /datum/phystool_mode/build_mode, /datum/phystool_mode/spawn_mode, /datum/phystool_mode/remove_mode, /datum/phystool_mode/color_mode, /datum/phystool_mode/size_mode, ) - //The datum of the beam. + /// The datum of the beam var/datum/beam/work_beam /obj/item/phystool/examine(mob/user) @@ -43,7 +43,7 @@ . = ..() if(selected_mode) qdel(selected_mode) - var/datum/phystool_mode/mode_to_select = tgui_input_list(user, "Select work mode:", "Phystool mode", avaible_modes) + var/datum/phystool_mode/mode_to_select = tgui_input_list(user, "Select work mode:", "Phystool mode", available_modes) if(!mode_to_select) return selected_mode = new mode_to_select @@ -56,7 +56,7 @@ return selected_mode.use_act(user) -/obj/item/phystool/afterattack(atom/target, mob/user, proximity_flag, click_parameters) +/obj/item/phystool/ranged_interact_with_atom(atom/target, mob/user, list/modifiers) . = ..() if(!selected_mode) return @@ -75,7 +75,6 @@ return do_work_effect(target, user) playsound(user, 'modular_zubbers/sound/phystools/toolgun_shot1.ogg', 100, TRUE) - return SECONDARY_ATTACK_CONTINUE_CHAIN /obj/item/phystool/proc/do_work_effect(atom/target, mob/user) if(!target) diff --git a/modular_zubbers/code/modules/limbgrowncorpses/limbgrowerblanks.dm b/modular_zubbers/code/modules/limbgrowncorpses/limbgrowerblanks.dm new file mode 100644 index 0000000000000..82a9c729e665f --- /dev/null +++ b/modular_zubbers/code/modules/limbgrowncorpses/limbgrowerblanks.dm @@ -0,0 +1,25 @@ +// Used for printing dead bodies with the limbgrower +/mob/living/carbon/human/empty + +/mob/living/carbon/human/empty/Initialize(mapload) + . = ..() + death() + + var/obj/item/organ/internal/brain/to_remove = get_organ_slot(ORGAN_SLOT_BRAIN) + QDEL_NULL(to_remove) + +/datum/design/wholehuman + name = "Blank body" + id = "blankhuman" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 600) + build_path = /mob/living/carbon/human/empty + category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL) + +/datum/design/humanoidbrain + name = "Blank brain" + id = "blankbrain" + build_type = LIMBGROWER + reagents_list = list(/datum/reagent/medicine/c2/synthflesh = 100) + build_path = /obj/item/organ/internal/brain + category = list(SPECIES_HUMAN, RND_CATEGORY_INITIAL) diff --git a/modular_zubbers/code/modules/loadout/categories/glasses.dm b/modular_zubbers/code/modules/loadout/categories/glasses.dm index 7716c2dd2e684..2a0ac81123f9f 100644 --- a/modular_zubbers/code/modules/loadout/categories/glasses.dm +++ b/modular_zubbers/code/modules/loadout/categories/glasses.dm @@ -6,3 +6,7 @@ name = "Surgery Goggles" item_path = /obj/item/clothing/glasses/hud/health/surgerygoggles restricted_roles = list(JOB_MEDICAL_DOCTOR, JOB_CHIEF_MEDICAL_OFFICER, JOB_GENETICIST, JOB_CHEMIST, JOB_PARAMEDIC, JOB_ORDERLY, JOB_CORONER) + +/datum/loadout_item/glasses/salesman + name = "Colored Glasses" + item_path = /obj/item/clothing/glasses/salesman diff --git a/modular_zubbers/code/modules/loadout/categories/heads.dm b/modular_zubbers/code/modules/loadout/categories/heads.dm index ba1fb87642279..827aef0cd737f 100644 --- a/modular_zubbers/code/modules/loadout/categories/heads.dm +++ b/modular_zubbers/code/modules/loadout/categories/heads.dm @@ -34,6 +34,10 @@ item_path = /obj/item/clothing/head/helmet/sec/futuristic restricted_roles = list(JOB_SECURITY_OFFICER, JOB_WARDEN, JOB_HEAD_OF_SECURITY) +/datum/loadout_item/head/sombrero + name = "Sombrero" + item_path = /obj/item/clothing/head/costume/sombrero + /datum/loadout_item/head/hats/caphat/drill name = "Captain's Campaign Hat" item_path = /obj/item/clothing/head/hats/warden/drill/captain @@ -68,3 +72,4 @@ item_path = /obj/item/clothing/head/costume/maidheadband/tactical_maid donator_only = TRUE + diff --git a/modular_zubbers/code/modules/loadout/categories/toys.dm b/modular_zubbers/code/modules/loadout/categories/toys.dm index f733cf7f48ef3..48486b7a67674 100644 --- a/modular_zubbers/code/modules/loadout/categories/toys.dm +++ b/modular_zubbers/code/modules/loadout/categories/toys.dm @@ -66,3 +66,7 @@ /datum/loadout_item/toys/cat_annoying name = "Annoying Cat Plush" item_path = /obj/item/toy/plush/cat_annoying + +/datum/loadout_item/toys/suspicious_protogen + name = "Suspicious Protogen Plush" + item_path = /obj/item/toy/plush/suspicious_protogen diff --git a/modular_zubbers/code/modules/mob/living/carbon/examine.dm b/modular_zubbers/code/modules/mob/living/carbon/examine.dm new file mode 100644 index 0000000000000..4cd3dd5b9f41d --- /dev/null +++ b/modular_zubbers/code/modules/mob/living/carbon/examine.dm @@ -0,0 +1,6 @@ +/atom/proc/examine_title_worn(mob/user) + var/regular_examine = src.examine_title(user) + if(HAS_TRAIT_FROM(src, TRAIT_WORN_EXAMINE, TRAIT_SUBTREE_REQUIRED_OPERATIONAL_DATUM)) // Uses /datum/element/examined_when_worn + return "[regular_examine]" + else + return regular_examine diff --git a/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm b/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm index bbc4aeb4ab9d4..e17330a3dfdd8 100644 --- a/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm +++ b/modular_zubbers/code/modules/mob/living/carbon/human/species/zombies.dm @@ -1,2 +1,12 @@ -/datum/species/zombie - digitigrade_customization = DIGITIGRADE_OPTIONAL +/datum/species/zombie/get_default_mutant_bodyparts() + return list( + "tail" = list("None", FALSE), + "snout" = list("None", FALSE), + "ears" = list("None", FALSE), + "legs" = list("Normal Legs", FALSE), + "taur" = list("None", FALSE), + "wings" = list("None", FALSE), + "horns" = list("None", FALSE), + "spines" = list("None", FALSE), + "frills" = list("None", FALSE), + ) diff --git a/modular_zubbers/code/modules/monkeydone/pill.dm b/modular_zubbers/code/modules/monkeydone/pill.dm deleted file mode 100644 index f3e6bbc0971b7..0000000000000 --- a/modular_zubbers/code/modules/monkeydone/pill.dm +++ /dev/null @@ -1,18 +0,0 @@ -/obj/item/reagent_containers/pill/monkeydone - name = "monkeydone pill" - desc = "Used to make monkeys return to human. Now banana flavored!" - icon_state = "pill22" - list_reagents = list(/datum/reagent/medicine/monkeydone = 5, /datum/reagent/consumable/banana = 10) - rename_with_volume = TRUE - -/obj/item/storage/pill_bottle/monkeydone - name = "bottle of monkeydone pills" - desc = "Used to make monkeys return to human. Now banana flavored!" - -/obj/item/storage/pill_bottle/monkeydone/PopulateContents() - for(var/i in 1 to 7) - new /obj/item/reagent_containers/pill/monkeydone(src) - -/obj/structure/closet/secure_closet/chief_medical/PopulateContents() - . = ..() - new /obj/item/storage/pill_bottle/monkeydone(src) diff --git a/modular_zubbers/code/modules/monkeydone/reagent.dm b/modular_zubbers/code/modules/monkeydone/reagent.dm deleted file mode 100644 index dd7847e4e5df8..0000000000000 --- a/modular_zubbers/code/modules/monkeydone/reagent.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/reagent/medicine/monkeydone - name = "Monkeydone" - description = "Accelerates genetic growth in monkeys, and converts them into what passes as a humanoid. While it is based off of Mutadone, it does not actually fix genetic defects." - color = "#88A384" - taste_description = "salt" - ph = 3 - chemical_flags = REAGENT_CAN_BE_SYNTHESIZED - purity = REAGENT_STANDARD_PURITY - inverse_chem_val = 0.5 - inverse_chem = /datum/reagent/consumable/monkey_energy - -/datum/reagent/medicine/monkeydone/on_mob_metabolize(mob/living/affected_mob) - . = ..() - if (!ishuman(affected_mob)) - return - var/mob/living/carbon/human/human_mob = affected_mob - if (ismonkey(human_mob)) - human_mob.dna.remove_mutation(/datum/mutation/human/race) diff --git a/modular_zubbers/code/modules/monkeydone/recipe.dm b/modular_zubbers/code/modules/monkeydone/recipe.dm deleted file mode 100644 index d69d0613e8ac0..0000000000000 --- a/modular_zubbers/code/modules/monkeydone/recipe.dm +++ /dev/null @@ -1,4 +0,0 @@ -/datum/chemical_reaction/medicine/monkeydone - results = list(/datum/reagent/medicine/monkeydone = 1) - required_reagents = list(/datum/reagent/medicine/mutadone = 10, /datum/reagent/toxin/mutagen = 10, /datum/reagent/consumable/salt = 1) - reaction_tags = REACTION_TAG_MODERATE | REACTION_TAG_HEALING | REACTION_TAG_OTHER diff --git a/modular_zubbers/code/modules/reagents/reagent_containers/cups/soda.dm b/modular_zubbers/code/modules/reagents/reagent_containers/cups/soda.dm new file mode 100644 index 0000000000000..847fd9908b7dc --- /dev/null +++ b/modular_zubbers/code/modules/reagents/reagent_containers/cups/soda.dm @@ -0,0 +1,9 @@ +//Soda Modular File for Bubber +////Add your custom sodas here, use this first one as a reference if you want + +/obj/item/reagent_containers/cup/soda_cans/blood_tea + name = "Hemoglobin Iced Tea" + desc = "Kinda like that rich golfer, but it's actually blood!" + icon = 'modular_zubbers/icons/obj/drinks/soda.dmi' + icon_state = "blood_tea" + list_reagents = list(/datum/reagent/blood = 25, /datum/reagent/consumable/ethanol/bloodshot = 5) diff --git a/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm b/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm index 1361463626ffb..59eb76d4bd658 100644 --- a/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm +++ b/modular_zubbers/code/modules/storyteller/storytellers/data/_track.dm @@ -3,7 +3,7 @@ /// Storyteller track data, for easy overriding of tracks without having to copypaste /// thresholds - Used to show how many points the track has to collect before it triggers, lower means faster /datum/storyteller_data/tracks - var/threshold_mundane = 900 + var/threshold_mundane = 1200 var/threshold_moderate = 1800 var/threshold_major = 8000 var/threshold_crewset = 1200 diff --git a/modular_zubbers/code/modules/vending/clothmate.dm b/modular_zubbers/code/modules/vending/clothmate.dm index c1371007e1063..3a3cb8d80829f 100644 --- a/modular_zubbers/code/modules/vending/clothmate.dm +++ b/modular_zubbers/code/modules/vending/clothmate.dm @@ -7,7 +7,7 @@ /obj/item/clothing/head/henchmen_hat = 5, /obj/item/clothing/head/avipilot = 5, /obj/item/clothing/head/costume/ushanka/frosty = 5, - + /obj/item/clothing/head/costume/sombrero = 3, ), ), diff --git a/modular_zubbers/code/modules/vending/cola.dm b/modular_zubbers/code/modules/vending/cola.dm new file mode 100644 index 0000000000000..498b09a14c380 --- /dev/null +++ b/modular_zubbers/code/modules/vending/cola.dm @@ -0,0 +1,4 @@ +/obj/machinery/vending/cola + zubbers_products = list( + /obj/item/reagent_containers/cup/soda_cans/blood_tea = 10, + ) diff --git a/modular_zubbers/code/modules/vending/wardrobe.dm b/modular_zubbers/code/modules/vending/wardrobe.dm index 366d5dc9f5201..5be2dff041de5 100644 --- a/modular_zubbers/code/modules/vending/wardrobe.dm +++ b/modular_zubbers/code/modules/vending/wardrobe.dm @@ -127,6 +127,7 @@ /obj/item/clothing/under/rank/rnd/scientist/bunnysuit = 3, /obj/item/clothing/suit/toggle/labcoat/doctor_tailcoat/science = 3, /obj/item/clothing/neck/tie/bunnytie/scientist = 3, + /obj/item/storage/bag/xeno = 3, ) /obj/machinery/vending/wardrobe/robo_wardrobe diff --git a/modular_zubbers/code/modules/vetted/vetted.dm b/modular_zubbers/code/modules/vetted/vetted.dm index 7f9d537619a5a..7a3c08766289a 100644 --- a/modular_zubbers/code/modules/vetted/vetted.dm +++ b/modular_zubbers/code/modules/vetted/vetted.dm @@ -68,8 +68,7 @@ GLOBAL_PROTECT(vetted_list) ckey_admin = admin_who_added_client?.client?.ckey var/datum/db_query/query_add_player_rank = SSdbcore.NewQuery( - "INSERT INTO vetted_list (ckey, admin_who_added) VALUES(:ckey, :admin_who_added) \ - ON DUPLICATE KEY UPDATE admin_who_added = :admin_who_added", + "INSERT INTO vetted_list (ckey, admin_who_added) VALUES(:ckey, :admin_who_added)", list("ckey" = ckey, "admin_who_added" = ckey_admin), ) diff --git a/modular_zubbers/icons/customization/horns.dmi b/modular_zubbers/icons/customization/horns.dmi index afd2e71e2340e..7a10b671956ed 100644 Binary files a/modular_zubbers/icons/customization/horns.dmi and b/modular_zubbers/icons/customization/horns.dmi differ diff --git a/modular_zubbers/icons/customization/horns_big.dmi b/modular_zubbers/icons/customization/horns_big.dmi index ec95447293f7c..4a1a5d2a9ebb7 100644 Binary files a/modular_zubbers/icons/customization/horns_big.dmi and b/modular_zubbers/icons/customization/horns_big.dmi differ diff --git a/modular_zubbers/icons/customization/snouts.dmi b/modular_zubbers/icons/customization/snouts.dmi index 55aa4047bd353..1083ecc7f9e3d 100644 Binary files a/modular_zubbers/icons/customization/snouts.dmi and b/modular_zubbers/icons/customization/snouts.dmi differ diff --git a/modular_zubbers/icons/obj/drinks/soda.dmi b/modular_zubbers/icons/obj/drinks/soda.dmi new file mode 100644 index 0000000000000..f32c699edc05d Binary files /dev/null and b/modular_zubbers/icons/obj/drinks/soda.dmi differ diff --git a/modular_zubbers/icons/obj/toys/plushes.dmi b/modular_zubbers/icons/obj/toys/plushes.dmi index a690e7ffae8f6..f92a88c64e9ef 100644 Binary files a/modular_zubbers/icons/obj/toys/plushes.dmi and b/modular_zubbers/icons/obj/toys/plushes.dmi differ diff --git a/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json b/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json index c8825c3896cb1..6370c3feab6ba 100644 --- a/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json +++ b/modular_zubbers/strings/bloodsuckers/malkavian_revelations.json @@ -14,7 +14,7 @@ "#If I focus on my goals, rather than what I want to do, am I truly happy?", "#Maybe... in an alternate universe... I could be part of another family. One that cares more about me...", ",LI wonder what other people think of me... Possibly terribly.", - "#...What would happen if I Ghoulized a Clown?", + "#...What would happen if I Ghouled a Clown?", "#Why can't we just walk? Does anyone walk anymore? Why do we run? What rush are we in?", "#Medbay is overworking, I wonder why they are always so shortstaffed.", "#Why do we take a pod instead of the shuttle? Where's the fun in that?", diff --git a/tgstation.dme b/tgstation.dme index 003249e922e87..151cad7a62439 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -492,6 +492,7 @@ #include "code\__DEFINES\~~bubber_defines\access.dm" #include "code\__DEFINES\~~bubber_defines\cameranets.dm" #include "code\__DEFINES\~~bubber_defines\changeling_zombie.dm" +#include "code\__DEFINES\~~bubber_defines\chat.dm" #include "code\__DEFINES\~~bubber_defines\combat.dm" #include "code\__DEFINES\~~bubber_defines\cooldowns.dm" #include "code\__DEFINES\~~bubber_defines\economy.dm" @@ -511,6 +512,7 @@ #include "code\__DEFINES\~~bubber_defines\___HELPERS\global_lists.dm" #include "code\__DEFINES\~~bubber_defines\research\techweb_nodes.dm" #include "code\__DEFINES\~~bubber_defines\traits\declarations.dm" +#include "code\__DEFINES\~~bubber_defines\traits\sources.dm" #include "code\__DEFINES\~~~splurt_defines\DNA.dm" #include "code\__DEFINES\~~~splurt_defines\hud.dm" #include "code\__DEFINES\~~~splurt_defines\intents.dm" @@ -8706,6 +8708,7 @@ #include "modular_zubbers\code\datums\components\vore\z_undefs.dm" #include "modular_zubbers\code\datums\computer_datums\protolathe_modifications.dm" #include "modular_zubbers\code\datums\diseases\advance\presets.dm" +#include "modular_zubbers\code\datums\elements\examine_when_worn.dm" #include "modular_zubbers\code\datums\greyscale\config_types\greyscale_configs\greyscale_clothes.dm" #include "modular_zubbers\code\datums\mapgen\Cavegens\moonstation.dm" #include "modular_zubbers\code\datums\materials\basemats.dm" @@ -8946,6 +8949,7 @@ #include "modular_zubbers\code\modules\clothing\gloves\bracers\armwraps.dm" #include "modular_zubbers\code\modules\clothing\head\helmet.dm" #include "modular_zubbers\code\modules\clothing\head\jobs.dm" +#include "modular_zubbers\code\modules\clothing\head\sombrero.dm" #include "modular_zubbers\code\modules\clothing\head\syndicate.dm" #include "modular_zubbers\code\modules\clothing\head\wig.dm" #include "modular_zubbers\code\modules\clothing\mask\clown.dm" @@ -9051,6 +9055,7 @@ #include "modular_zubbers\code\modules\languages\vampiric.dm" #include "modular_zubbers\code\modules\lewd_machinery\lustwish.dm" #include "modular_zubbers\code\modules\lewd_machinery\sex_barrier.dm" +#include "modular_zubbers\code\modules\limbgrowncorpses\limbgrowerblanks.dm" #include "modular_zubbers\code\modules\liquids\height_floors.dm" #include "modular_zubbers\code\modules\loadout\categories\accessories.dm" #include "modular_zubbers\code\modules\loadout\categories\ears.dm" @@ -9102,6 +9107,7 @@ #include "modular_zubbers\code\modules\mob\living\basic\space_fauna\space_dragon\space_dragon.dm" #include "modular_zubbers\code\modules\mob\living\basic\trooper\nanotrasen.dm" #include "modular_zubbers\code\modules\mob\living\basic\vermin\mouse.dm" +#include "modular_zubbers\code\modules\mob\living\carbon\examine.dm" #include "modular_zubbers\code\modules\mob\living\carbon\alien\adult\adult.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\_species.dm" #include "modular_zubbers\code\modules\mob\living\carbon\human\human.dm" @@ -9163,9 +9169,6 @@ #include "modular_zubbers\code\modules\modular_weapons\code\company_and_or_faction_based\carwo_defense_systems\ammo\ammobox.dm" #include "modular_zubbers\code\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\magazines.dm" #include "modular_zubbers\code\modules\modular_weapons\code\company_and_or_faction_based\szot_dynamica\pistol.dm" -#include "modular_zubbers\code\modules\monkeydone\pill.dm" -#include "modular_zubbers\code\modules\monkeydone\reagent.dm" -#include "modular_zubbers\code\modules\monkeydone\recipe.dm" #include "modular_zubbers\code\modules\movespeed\_movespeed_modifier.dm" #include "modular_zubbers\code\modules\movespeed\modifiers\status_effects.dm" #include "modular_zubbers\code\modules\opposing_force\code\items.dm" @@ -9206,6 +9209,7 @@ #include "modular_zubbers\code\modules\reagents\chemistry\reagents\food_reagents.dm" #include "modular_zubbers\code\modules\reagents\reagent_containers\condiment.dm" #include "modular_zubbers\code\modules\reagents\reagent_containers\cups\glassbottle.dm" +#include "modular_zubbers\code\modules\reagents\reagent_containers\cups\soda.dm" #include "modular_zubbers\code\modules\recycling\disposal\bin.dm" #include "modular_zubbers\code\modules\research\designs\ai_module_designs.dm" #include "modular_zubbers\code\modules\research\designs\comp_board_designs.dm" @@ -9292,6 +9296,7 @@ #include "modular_zubbers\code\modules\vehicles\mech_fabricator.dm" #include "modular_zubbers\code\modules\vending\armadyne.dm" #include "modular_zubbers\code\modules\vending\clothmate.dm" +#include "modular_zubbers\code\modules\vending\cola.dm" #include "modular_zubbers\code\modules\vending\comdrobe.dm" #include "modular_zubbers\code\modules\vending\games.dm" #include "modular_zubbers\code\modules\vending\halloween_chocolate.dm" diff --git a/tgui/packages/tgui-panel/chat/constants.ts b/tgui/packages/tgui-panel/chat/constants.ts index f872d06055baa..681a22b0ce5ce 100644 --- a/tgui/packages/tgui-panel/chat/constants.ts +++ b/tgui/packages/tgui-panel/chat/constants.ts @@ -37,7 +37,11 @@ export const MESSAGE_TYPE_EVENTCHAT = 'eventchat'; export const MESSAGE_TYPE_ADMINLOG = 'adminlog'; export const MESSAGE_TYPE_ATTACKLOG = 'attacklog'; export const MESSAGE_TYPE_DEBUG = 'debug'; -export const MESSAGE_TYPE_MENTOR = 'mentor'; // SKYRAT EDIT ADDITION +// BUBBER EDIT ADDITION BEGIN +export const MESSAGE_TYPE_MENTOR = 'mentor'; +export const MESSAGE_TYPE_LOOC = 'looc'; +export const MESSAGE_TYPE_REMOTE_LOOC = 'rlooc'; +// BUBBER EDIT ADDITION END // Metadata for each message type export const MESSAGE_TYPES = [ @@ -54,7 +58,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_LOCALCHAT, name: 'Local', description: 'In-character local messages (say, emote, etc)', - selector: '.say, .emote, .looc', + selector: '.say, .emote', }, { type: MESSAGE_TYPE_RADIO, @@ -87,8 +91,22 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_OOC, name: 'OOC', description: 'The bluewall of global OOC messages', - selector: '.ooc, .adminooc, .adminobserverooc, .oocplain, .looc, .rlooc', + selector: '.ooc, .adminooc, .adminobserverooc, .oocplain', }, + // BUBBER EDIT ADDITION BEGIN + { + type: MESSAGE_TYPE_LOOC, + name: 'LOOC', + description: 'Local OOC messages.', + selector: '.looc', + }, + { + type: MESSAGE_TYPE_MENTOR, + name: 'Mentor Log', + description: 'Mentor PMs and other mentor things.', + selector: '.mentor, .mentornotice', + }, + // BUBBER EDIT ADDITION END { type: MESSAGE_TYPE_ADMINPM, name: 'Admin PMs', @@ -146,10 +164,13 @@ export const MESSAGE_TYPES = [ description: 'DEBUG: SSPlanets subsystem Recover().', admin: true, }, + // BUBBER EDIT ADDITION BEGIN { - type: MESSAGE_TYPE_MENTOR, // SKYRAT EDIT - name: 'Mentor Log', - description: 'Mentor PMs and other mentor things.', - selector: '.mentor, .mentornotice', + type: MESSAGE_TYPE_REMOTE_LOOC, + name: 'Remote LOOC', + description: 'Yes, admins can read your LOOC no matter where you are.', + selector: '.rlooc', + admin: true, }, + // BUBBER EDIT ADDITION END ]; diff --git a/tgui/packages/tgui/interfaces/AntagInfoVassal.tsx b/tgui/packages/tgui/interfaces/AntagInfoGhoul.tsx similarity index 100% rename from tgui/packages/tgui/interfaces/AntagInfoVassal.tsx rename to tgui/packages/tgui/interfaces/AntagInfoGhoul.tsx diff --git a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx index 2e21c983ec260..ee761014778cd 100644 --- a/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx +++ b/tgui/packages/tgui/interfaces/CommunicationsConsole.jsx @@ -470,7 +470,7 @@ const PageMain = (props) => { {!!canMakeAnnouncement && (