diff --git a/SQL/database_changelog.txt b/SQL/database_changelog.txt index 94fd88e0c19..b16ccb2a5de 100644 --- a/SQL/database_changelog.txt +++ b/SQL/database_changelog.txt @@ -66,32 +66,6 @@ ALTER TABLE `messages` ALTER TABLE `round` ADD COLUMN `server_name` VARCHAR(32) DEFAULT NULL AFTER `end_datetime`; -Version 5.13, 30 April 2021, by Atlanta Ned -Added the `citation` table for tracking security citations in the database. - -``` -CREATE TABLE `citation` ( - `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, - `round_id` INT(11) UNSIGNED NOT NULL, - `server_ip` INT(11) UNSIGNED NOT NULL, - `server_port` INT(11) UNSIGNED NOT NULL, - `citation` TEXT NOT NULL COLLATE 'utf8mb4_general_ci', - `action` VARCHAR(20) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci', - `sender` VARCHAR(32) NOT NULL DEFAULT '' COLLATE 'utf8mb4_general_ci', - `sender_ic` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Longer because this is the character name, not the ckey' COLLATE 'utf8mb4_general_ci', - `recipient` VARCHAR(64) NOT NULL DEFAULT '' COMMENT 'Longer because this is the character name, not the ckey' COLLATE 'utf8mb4_general_ci', - `crime` TEXT NOT NULL COLLATE 'utf8mb4_general_ci', - `fine` INT(4) NULL DEFAULT NULL, - `paid` INT(4) NULL DEFAULT '0', - `timestamp` DATETIME NOT NULL, - PRIMARY KEY (`id`) USING BTREE, - UNIQUE INDEX `idx_constraints` (`round_id`, `server_ip`, `server_port`, `citation`(100)) USING BTREE -) -COLLATE='utf8mb4_general_ci' -ENGINE=InnoDB -AUTO_INCREMENT=1 -; -``` ----------------------------------------------------- diff --git a/code/__DEFINES/~skyrat_defines/jobs.dm b/code/__DEFINES/~skyrat_defines/jobs.dm index f8eb97ec1b8..2767d0cf576 100644 --- a/code/__DEFINES/~skyrat_defines/jobs.dm +++ b/code/__DEFINES/~skyrat_defines/jobs.dm @@ -2,5 +2,6 @@ #define JOB_UNAVAILABLE_SPECIES 7 #define JOB_UNAVAILABLE_LANGUAGE 7 -#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE -#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE +#define SEC_RESTRICTED_QUIRKS "Blind" = TRUE, "Brain Tumor" = TRUE, "Deaf" = TRUE, "Paraplegic" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Pacifist" = TRUE, "Chunky Fingers" = TRUE +#define HEAD_RESTRICTED_QUIRKS "Blind" = TRUE, "Deaf" = TRUE, "Mute" = TRUE, "Foreigner" = TRUE, "Chunky Fingers" = TRUE +#define TECH_RESTRICTED_QUIRKS "Chunky Fingers" = TRUE diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm old mode 100755 new mode 100644 index 321288bded1..deee219a3dc --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -161,6 +161,7 @@ SUBSYSTEM_DEF(ticker) for(var/client/C in GLOB.clients) window_flash(C, ignorepref = TRUE) //let them know lobby has opened up. to_chat(world, "Welcome to [station_name()]!") + //SKYRAT EDIT START - DISCORD SPAM PREVENTION if(!discord_alerted) discord_alerted = TRUE send2chat("<@&[CONFIG_GET(string/game_alert_role_id)]> New round starting on [SSmapping.config.map_name], [CONFIG_GET(string/servername)]! \nIf you wish to be pinged for game related stuff, go to <#[CONFIG_GET(string/role_assign_channel_id)]> and assign yourself the roles.", CONFIG_GET(string/chat_announce_new_game)) // Skyrat EDIT -- role pingcurrent_state = GAME_STATE_PREGAME diff --git a/code/datums/emotes.dm b/code/datums/emotes.dm index c2083d2d543..9d3d324900b 100644 --- a/code/datums/emotes.dm +++ b/code/datums/emotes.dm @@ -82,10 +82,10 @@ if(emote_type == EMOTE_AUDIBLE) //SKYRAT EDIT CHANGE BEGIN //user.audible_message(msg, audible_message_flags = EMOTE_MESSAGE) - SKYRAT EDIT - ORIGINAL - user.audible_message(msg, deaf_message = "You see how [user] [msg]", audible_message_flags = EMOTE_MESSAGE) + user.audible_message(msg, deaf_message = "You see how [user] [msg]", audible_message_flags = EMOTE_MESSAGE) else //user.visible_message(msg, visible_message_flags = EMOTE_MESSAGE) - SKYRAT EDIT - ORIGINAL - user.visible_message(msg, blind_message = "You hear how [user] [msg]", visible_message_flags = EMOTE_MESSAGE) + user.visible_message(msg, blind_message = "You hear how [user] [msg]", visible_message_flags = EMOTE_MESSAGE) //SKYRAT EDIT CHANGE END /// For handling emote cooldown, return true to allow the emote to happen diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index f3e5fe17deb..37adb70d944 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -178,7 +178,9 @@ GLOBAL_LIST_EMPTY(PDAs) /obj/item/pda/update_overlays() . = ..() - var/mutable_appearance/overlay = new(icon) + if(!initial(icon)) + return + var/mutable_appearance/overlay = new(initial(icon)) overlay.pixel_x = overlays_x_offset if(id) overlay.icon_state = "id_overlay" diff --git a/code/game/objects/items/devices/PDA/PDA_types.dm b/code/game/objects/items/devices/PDA/PDA_types.dm index 6e44223f555..81d74039e73 100644 --- a/code/game/objects/items/devices/PDA/PDA_types.dm +++ b/code/game/objects/items/devices/PDA/PDA_types.dm @@ -49,6 +49,8 @@ // Special AI/pAI PDAs that cannot explode. /obj/item/pda/ai icon = null + greyscale_config = null + greyscale_colors = null ttone = "data" diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index effb6bbb3a9..ba259d3782d 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -21,7 +21,7 @@ new /obj/item/assembly/flash/handheld(src) new /obj/item/clothing/glasses/meson/engine(src) new /obj/item/door_remote/chief_engineer(src) - new /obj/item/pipe_dispenser(src) + new /obj/item/pipe_dispenser/bluespace(src) // SKYRAT EDIT -- BLUESPACE RPD -- ORIGINAL: new /obj/item/pipe_dispenser(src) new /obj/item/circuitboard/machine/techfab/department/engineering(src) new /obj/item/extinguisher/advanced(src) new /obj/item/storage/photo_album/ce(src) diff --git a/code/game/objects/structures/fluff.dm b/code/game/objects/structures/fluff.dm index d2155521fe5..f17f17ab3e0 100644 --- a/code/game/objects/structures/fluff.dm +++ b/code/game/objects/structures/fluff.dm @@ -1,5 +1,8 @@ -//Fluff structures serve no purpose and exist only for enriching the environment. They can be destroyed with a wrench. - +/** + * # Fluff structure + * + * Fluff structures serve no purpose and exist only for enriching the environment. By default, they can be deconstructed with a wrench. + */ /obj/structure/fluff name = "fluff structure" desc = "Fluffier than a sheep. This shouldn't exist." @@ -8,6 +11,7 @@ anchored = TRUE density = FALSE opacity = FALSE + ///If true, the structure can be deconstructed into a metal sheet with a wrench. var/deconstructible = TRUE /obj/structure/fluff/attackby(obj/item/I, mob/living/user, params) @@ -21,15 +25,19 @@ qdel(src) return ..() - -/obj/structure/fluff/empty_terrarium //Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated. +/** + * Empty terrariums are created when a preserved terrarium in a lavaland seed vault is activated. + */ +/obj/structure/fluff/empty_terrarium name = "empty terrarium" desc = "An ancient machine that seems to be used for storing plant matter. Its hatch is ajar." icon = 'icons/obj/lavaland/spawners.dmi' icon_state = "terrarium_open" density = TRUE - -/obj/structure/fluff/empty_sleeper //Empty sleepers are created by a good few ghost roles in lavaland. +/** + * Empty sleepers are created by a good few ghost roles in lavaland. + */ +/obj/structure/fluff/empty_sleeper name = "empty sleeper" desc = "An open sleeper. It looks as though it would be awaiting another patient, were it not broken." icon = 'icons/obj/machines/sleeper.dmi' @@ -43,8 +51,10 @@ /obj/structure/fluff/empty_sleeper/syndicate icon_state = "sleeper_s-open" - -/obj/structure/fluff/empty_cryostasis_sleeper //Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated +/** + * Empty cryostasis sleepers are created when a malfunctioning cryostasis sleeper in a lavaland shelter is activated. + */ +/obj/structure/fluff/empty_cryostasis_sleeper name = "empty cryostasis sleeper" desc = "Although comfortable, this sleeper won't function as anything but a bed ever again." icon = 'icons/obj/lavaland/spawners.dmi' @@ -55,8 +65,10 @@ desc = "A segment of broken flooring." icon = 'icons/obj/brokentiling.dmi' icon_state = "corner" - -/obj/structure/fluff/drake_statue //Ash drake status spawn on either side of the necropolis gate in lavaland. +/** + * Ash drake status spawn on either side of the necropolis gate in lavaland. + */ +/obj/structure/fluff/drake_statue name = "drake statue" desc = "A towering basalt sculpture of a proud and regal drake. Its eyes are six glowing gemstones." icon = 'icons/effects/64x64.dmi' @@ -65,8 +77,10 @@ density = TRUE deconstructible = FALSE layer = EDGED_TURF_LAYER - -/obj/structure/fluff/drake_statue/falling //A variety of statue in disrepair; parts are broken off and a gemstone is missing +/** + * A variety of statue in disrepair; parts are broken off and a gemstone is missing + */ +/obj/structure/fluff/drake_statue/falling desc = "A towering basalt sculpture of a drake. Cracks run down its surface and parts of it have fallen off." icon_state = "drake_statue_falling" @@ -270,8 +284,10 @@ opacity = FALSE else return ..() - -/obj/structure/fluff/hedge/opaque //useful for mazes and such +/** + * useful for mazes and such + */ +/obj/structure/fluff/hedge/opaque opacity = TRUE /obj/structure/fluff/tram_rail diff --git a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm index c8debcd94f7..3056dbb5e82 100644 --- a/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm +++ b/code/modules/antagonists/eldritch_cult/eldritch_monster_antag.dm @@ -17,11 +17,11 @@ /datum/antagonist/heretic_monster/greet() owner.current.playsound_local(get_turf(owner.current), 'sound/ambience/antag/ecult_op.ogg', 100, FALSE, pressure_affected = FALSE, use_reverb = FALSE)//subject to change - to_chat(owner, "You became an Eldritch Horror!") + to_chat(owner, "You became an Eldritch Horror!") /datum/antagonist/heretic_monster/on_removal() if(master) - to_chat(master, "Your master is no longer [master.owner.current.real_name]") + to_chat(master, "Your master is no longer [master.owner.current.real_name]") master = null return ..() @@ -33,7 +33,7 @@ master_obj.completed = TRUE objectives += master_obj owner.announce_objectives() - to_chat(owner, "Your master is [master.owner.current.real_name]") + to_chat(owner, "Your master is [master.owner.current.real_name]") return /datum/antagonist/heretic_monster/apply_innate_effects(mob/living/mob_override) diff --git a/code/modules/projectiles/guns/ballistic.dm b/code/modules/projectiles/guns/ballistic.dm index a8e85840c19..52b66ab4444 100644 --- a/code/modules/projectiles/guns/ballistic.dm +++ b/code/modules/projectiles/guns/ballistic.dm @@ -104,12 +104,17 @@ var/alternative_fire_sound ///If only our alternative ammuntion misfires and not our main ammunition, we set this to TRUE var/alternative_ammo_misfires = FALSE + + /// Misfire Variables /// + /// Whether our ammo misfires now or when it's set by the wrench_act. TRUE means it misfires. var/can_misfire = FALSE ///How likely is our gun to misfire? var/misfire_probability = 0 ///How much does shooting the gun increment the misfire probability? var/misfire_percentage_increment = 0 + ///What is the cap on our misfire probability? Do not set this to 100. + var/misfire_probability_cap = 25 /obj/item/gun/ballistic/Initialize() . = ..() @@ -358,6 +363,7 @@ /obj/item/gun/ballistic/shoot_live_shot(mob/living/user, pointblank = 0, atom/pbtarget = null, message = 1) if(can_misfire) misfire_probability += misfire_percentage_increment + misfire_probability = clamp(misfire_probability, 0, misfire_probability_cap) . = ..() diff --git a/html/changelogs/AutoChangeLog-pr-5378.yml b/html/changelogs/AutoChangeLog-pr-5378.yml new file mode 100644 index 00000000000..ae0d3ed0cdf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5378.yml @@ -0,0 +1,5 @@ +author: "Seris02" +delete-after: True +changes: + - bugfix: "various OOC messages going into unsorted now get sorted" + - bugfix: "various other miscellaneous unsorted messages now get sorted" diff --git a/html/changelogs/AutoChangeLog-pr-5459.yml b/html/changelogs/AutoChangeLog-pr-5459.yml deleted file mode 100644 index 199eb5e8061..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5459.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "many of the toggle preferences in preferences_toggles.dm going into the unsorted chat log" - - bugfix: "many of the role greetings from sending to the wrong chat filters/ to unsorted" - - bugfix: "miscellaneous other strings getting sent to the unsorted chat filter" diff --git a/html/changelogs/AutoChangeLog-pr-5460.yml b/html/changelogs/AutoChangeLog-pr-5460.yml new file mode 100644 index 00000000000..623fe6d6324 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5460.yml @@ -0,0 +1,4 @@ +author: "unit0016" +delete-after: True +changes: + - rscadd: "Lone Infiltrators are now on the prowl." diff --git a/html/changelogs/AutoChangeLog-pr-5472.yml b/html/changelogs/AutoChangeLog-pr-5472.yml new file mode 100644 index 00000000000..e978293328d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5472.yml @@ -0,0 +1,4 @@ +author: "KasparoVy" +delete-after: True +changes: + - rscadd: "Adds a new 8-point negative quirk preventing you from using most firearms, modular computers/tablets and laser pointers like an Ashwalker or Golem. KAs can be adapted w/ a modkit. You cannot be command, security, engineering, atmos, doctor, virologist, chemist, roboticist or scientist with this trait." diff --git a/html/changelogs/AutoChangeLog-pr-5483.yml b/html/changelogs/AutoChangeLog-pr-5483.yml new file mode 100644 index 00000000000..9f2071985b9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5483.yml @@ -0,0 +1,5 @@ +author: "thestubborn" +delete-after: True +changes: + - rscadd: "Two new colourable coats" + - rscadd: "Like five new collars" diff --git a/html/changelogs/AutoChangeLog-pr-5484.yml b/html/changelogs/AutoChangeLog-pr-5484.yml deleted file mode 100644 index 4a199dc0484..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5484.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "sqnztb" -delete-after: True -changes: - - bugfix: "icebox perma cabin has piped atmospherics again" diff --git a/html/changelogs/AutoChangeLog-pr-5485.yml b/html/changelogs/AutoChangeLog-pr-5485.yml deleted file mode 100644 index 4d08ae88e9b..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5485.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - imageadd: "New candle animations" - - imageadd: "New animations for altar candles" diff --git a/html/changelogs/AutoChangeLog-pr-5487.yml b/html/changelogs/AutoChangeLog-pr-5487.yml deleted file mode 100644 index ccbc66f7f27..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5487.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "dogs now resist before fetching or harassing, to unbuckle from stuff if they need to" diff --git a/html/changelogs/AutoChangeLog-pr-5490.yml b/html/changelogs/AutoChangeLog-pr-5490.yml deleted file mode 100644 index f5ab7708690..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5490.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "Celotajs" -delete-after: True -changes: - - bugfix: "GAGS-generated clothing can now have proper blood splatters and damage" diff --git a/html/changelogs/AutoChangeLog-pr-5491.yml b/html/changelogs/AutoChangeLog-pr-5491.yml new file mode 100644 index 00000000000..b57f70de1da --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5491.yml @@ -0,0 +1,4 @@ +author: "ZephyrTFA" +delete-after: True +changes: + - rscadd: "Bluespace RPD" diff --git a/html/changelogs/AutoChangeLog-pr-5495.yml b/html/changelogs/AutoChangeLog-pr-5495.yml deleted file mode 100644 index f0fdbe9c893..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5495.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - imageadd: "centers hydroponic sprays, adds new sprites for plant-b-gone" diff --git a/html/changelogs/AutoChangeLog-pr-5499.yml b/html/changelogs/AutoChangeLog-pr-5499.yml deleted file mode 100644 index 03bfa9a9d70..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5499.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "tf-4" -delete-after: True -changes: - - bugfix: "a single space" diff --git a/html/changelogs/AutoChangeLog-pr-5500.yml b/html/changelogs/AutoChangeLog-pr-5500.yml deleted file mode 100644 index fa8c4ef4c52..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5500.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "tf-4" -delete-after: True -changes: - - bugfix: "the sec medic and HoP now get four mags in their gunsets, same as everyone else" diff --git a/html/changelogs/AutoChangeLog-pr-5501.yml b/html/changelogs/AutoChangeLog-pr-5501.yml deleted file mode 100644 index aa09d826c91..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5501.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "The cursed slot machine sprite in the Greed lavaland ruin is now slightly less cursed." diff --git a/html/changelogs/AutoChangeLog-pr-5506.yml b/html/changelogs/AutoChangeLog-pr-5506.yml deleted file mode 100644 index 251836d767e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5506.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - rscadd: "BBQ Sauce can now be ordered in the kitchen console." diff --git a/html/changelogs/AutoChangeLog-pr-5507.yml b/html/changelogs/AutoChangeLog-pr-5507.yml deleted file mode 100644 index 3be4f9bd263..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5507.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SparkezelPL" -delete-after: True -changes: - - bugfix: "Single tank bombs no longer just delete themselves" diff --git a/html/changelogs/AutoChangeLog-pr-5508.yml b/html/changelogs/AutoChangeLog-pr-5508.yml deleted file mode 100644 index f0741371492..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5508.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "Syndicate uplink types can now be changed again" - - bugfix: "Radio uplink frequencies are now random again" diff --git a/html/changelogs/AutoChangeLog-pr-5509.yml b/html/changelogs/AutoChangeLog-pr-5509.yml deleted file mode 100644 index bc02ddf9397..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5509.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "spammable logging in chem grenades" diff --git a/html/changelogs/AutoChangeLog-pr-5510.yml b/html/changelogs/AutoChangeLog-pr-5510.yml deleted file mode 100644 index fafca1aca4e..00000000000 --- a/html/changelogs/AutoChangeLog-pr-5510.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: "SkyratBot" -delete-after: True -changes: - - bugfix: "fixed buggy organ fridges repair rate" - - bugfix: "fixed upgraded organ fridges not repairing organs" diff --git a/html/changelogs/AutoChangeLog-pr-5513.yml b/html/changelogs/AutoChangeLog-pr-5513.yml new file mode 100644 index 00000000000..b286663bb13 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5513.yml @@ -0,0 +1,4 @@ +author: "ORCACommander" +delete-after: True +changes: + - bugfix: "Cleaned up the SQL Changelog AGAIN" diff --git a/html/changelogs/AutoChangeLog-pr-5515.yml b/html/changelogs/AutoChangeLog-pr-5515.yml new file mode 100644 index 00000000000..b674da76fb8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5515.yml @@ -0,0 +1,4 @@ +author: "SkyratBot" +delete-after: True +changes: + - bugfix: "Messages related to becoming and ceasing to be a heretic monster are now more noticeable." diff --git a/html/changelogs/AutoChangeLog-pr-5516.yml b/html/changelogs/AutoChangeLog-pr-5516.yml new file mode 100644 index 00000000000..260fc0ae339 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-5516.yml @@ -0,0 +1,4 @@ +author: "Celotajs" +delete-after: True +changes: + - bugfix: "Fixed PDA overlays for GAGS PDAs" diff --git a/html/changelogs/archive/2021-05.yml b/html/changelogs/archive/2021-05.yml index a87dcd43272..d570e0952d1 100644 --- a/html/changelogs/archive/2021-05.yml +++ b/html/changelogs/archive/2021-05.yml @@ -245,3 +245,34 @@ unit0016: - balance: The most involved balance change ever - NSS Journey's turf decals have been changed up a lot. Also the aux base is a bit different, I suppose. +2021-05-07: + Celotajs: + - bugfix: GAGS-generated clothing can now have proper blood splatters and damage + SkyratBot: + - bugfix: dogs now resist before fetching or harassing, to unbuckle from stuff if + they need to + - bugfix: spammable logging in chem grenades + - bugfix: Syndicate uplink types can now be changed again + - bugfix: Radio uplink frequencies are now random again + - imageadd: New candle animations + - imageadd: New animations for altar candles + - bugfix: many of the toggle preferences in preferences_toggles.dm going into the + unsorted chat log + - bugfix: many of the role greetings from sending to the wrong chat filters/ to + unsorted + - bugfix: miscellaneous other strings getting sent to the unsorted chat filter + - bugfix: fixed buggy organ fridges repair rate + - bugfix: fixed upgraded organ fridges not repairing organs + - rscadd: BBQ Sauce can now be ordered in the kitchen console. + - bugfix: The cursed slot machine sprite in the Greed lavaland ruin is now slightly + less cursed. + - bugfix: Prevents guns that can misfire reaching 100% probability. + - imageadd: centers hydroponic sprays, adds new sprites for plant-b-gone + SparkezelPL: + - bugfix: Single tank bombs no longer just delete themselves + sqnztb: + - bugfix: icebox perma cabin has piped atmospherics again + tf-4: + - bugfix: the sec medic and HoP now get four mags in their gunsets, same as everyone + else + - bugfix: a single space diff --git a/modular_skyrat/master_files/code/datums/traits/negative.dm b/modular_skyrat/master_files/code/datums/traits/negative.dm index 042ea9b9410..862e76011dc 100644 --- a/modular_skyrat/master_files/code/datums/traits/negative.dm +++ b/modular_skyrat/master_files/code/datums/traits/negative.dm @@ -33,3 +33,12 @@ . = ..() var/mob/living/carbon/human/H = quirk_holder H?.cure_trauma_type(/datum/brain_trauma/severe/monophobia, TRAUMA_RESILIENCE_ABSOLUTE) + +/datum/quirk/ashwalkertalons + name = "Chunky Fingers" + desc = "Your digits are thick and tough and unable to use modular computers including tablets, certain devices like laser pointers, and non-adapted firearms." + gain_text = "Your fingers feel thicker and slightly less dextrous. You expect you'll have a difficult time using computers, certain small devices and firearms." + lose_text = "Your digits feel lithe and capable once more." + medical_record_text = "Patient's digits are thick and lack the dexterity for operating some small devices, computers and non-adapted firearms." + value = -8 + mob_trait = TRAIT_CHUNKYFINGERS diff --git a/modular_skyrat/modules/Midroundtraitor/datum_traitor.dm b/modular_skyrat/modules/Midroundtraitor/datum_traitor.dm new file mode 100644 index 00000000000..aeb51037109 --- /dev/null +++ b/modular_skyrat/modules/Midroundtraitor/datum_traitor.dm @@ -0,0 +1,10 @@ +/datum/antagonist/traitor/infiltrator + name = "Infiltrator" + var/infil_outfit = /datum/outfit/syndicateinfiltrator + +/datum/antagonist/traitor/infiltrator/on_gain() + var/mob/living/carbon/human/H = owner.current + H.equipOutfit(infil_outfit) + var/chosen_name = H.dna.species.random_name(H.gender,1,1) + H.fully_replace_character_name(H.real_name,chosen_name) + return ..() diff --git a/modular_skyrat/modules/Midroundtraitor/event.dm b/modular_skyrat/modules/Midroundtraitor/event.dm new file mode 100644 index 00000000000..fc41acccd73 --- /dev/null +++ b/modular_skyrat/modules/Midroundtraitor/event.dm @@ -0,0 +1,64 @@ +/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator + name = "Lone Infiltrator" + antag_datum = /datum/antagonist/traitor/infiltrator + antag_flag = ROLE_TRAITOR + restricted_roles = list("Cyborg", "AI", "Positronic Brain") + required_candidates = 1 + weight = 5 //Slightly less common than normal midround traitors. + cost = 15 //But also slightly more costly. + requirements = list(50,40,30,20,10,10,10,10,10,10) + var/list/spawn_locs = list() + +/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/execute() + for(var/obj/effect/landmark/carpspawn/C in GLOB.landmarks_list) + spawn_locs += (C.loc) + if(!spawn_locs.len) + message_admins("No valid spawn locations found, aborting...") + return MAP_ERROR + . = ..() + +/datum/dynamic_ruleset/midround/from_ghosts/lone_infiltrator/generate_ruleset_body(mob/applicant) + var/datum/mind/player_mind = new /datum/mind(applicant.key) + + var/mob/living/carbon/human/operative = new(pick(spawn_locs)) + applicant.client.prefs.copy_to(operative) + operative.dna.update_dna_identity() + operative.dna.species.before_equip_job(null, operative) + operative.regenerate_icons() + SSquirks.AssignQuirks(operative, applicant.client, TRUE, TRUE, null, FALSE, operative) + player_mind.assigned_role = "Lone Infiltrator" + player_mind.special_role = "Lone Infiltrator" + player_mind.active = TRUE + player_mind.transfer_to(operative) + player_mind.add_antag_datum(/datum/antagonist/traitor/infiltrator) + + message_admins("[ADMIN_LOOKUPFLW(operative)] has been made into lone infiltrator by midround ruleset.") + log_game("[key_name(operative)] was spawned as a lone infiltrator by midround ruleset.") + return operative + +//OUTFIT// +/datum/outfit/syndicateinfiltrator + name = "Syndicate Operative - Infiltrator" + + uniform = /obj/item/clothing/under/syndicate + shoes = /obj/item/clothing/shoes/combat + gloves = /obj/item/clothing/gloves/combat + back = /obj/item/storage/backpack/fireproof + ears = /obj/item/radio/headset/syndicate/alt + id = /obj/item/card/id/advanced/chameleon + glasses = /obj/item/clothing/glasses/night + mask = /obj/item/clothing/mask/gas/syndicate + suit = /obj/item/clothing/suit/space/hardsuit/syndi + r_pocket = /obj/item/tank/internals/emergency_oxygen/engi + internals_slot = ITEM_SLOT_RPOCKET + belt = /obj/item/storage/belt/military + backpack_contents = list(/obj/item/storage/box/survival/syndie=1,\ + /obj/item/tank/jetpack/oxygen/harness=1,\ + /obj/item/gun/ballistic/automatic/pistol=1,\ + /obj/item/kitchen/knife/combat/survival) + + id_trim = /datum/id_trim/chameleon/operative + +/datum/outfit/syndicateinfiltrator/post_equip(mob/living/carbon/human/H) + H.faction |= ROLE_SYNDICATE + H.update_icons() diff --git a/modular_skyrat/modules/admin/code/aooc.dm b/modular_skyrat/modules/admin/code/aooc.dm index d5e3ed7c4a5..f4948c3d31d 100644 --- a/modular_skyrat/modules/admin/code/aooc.dm +++ b/modular_skyrat/modules/admin/code/aooc.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(ckey_to_aooc_name) var/mode = listeners[c] var/color = (!anon && CONFIG_GET(flag/allow_admin_ooccolor) && C.prefs.ooccolor) ? C.prefs.ooccolor : GLOB.AOOC_COLOR var/name = (mode == AOOC_LISTEN_ADMIN && anon) ? "([key])[keyname]" : keyname - to_chat(C, "AOOC: [name]: [msg]") + to_chat(C, "AOOC: [name]: [msg]") #undef AOOC_LISTEN_PLAYER #undef AOOC_LISTEN_ADMIN @@ -101,7 +101,7 @@ GLOBAL_LIST_EMPTY(ckey_to_aooc_name) listeners[M.client] = TRUE for(var/c in listeners) var/client/C = c - to_chat(C, "The AOOC channel has been globally [GLOB.aooc_allowed ? "enabled" : "disabled"].") + to_chat(C, "The AOOC channel has been globally [GLOB.aooc_allowed ? "enabled" : "disabled"].") /datum/admins/proc/toggleaooc() set category = "Server" diff --git a/modular_skyrat/modules/admin/code/sooc.dm b/modular_skyrat/modules/admin/code/sooc.dm index adabbf95378..016050087a9 100644 --- a/modular_skyrat/modules/admin/code/sooc.dm +++ b/modular_skyrat/modules/admin/code/sooc.dm @@ -75,7 +75,7 @@ GLOBAL_LIST_EMPTY(ckey_to_sooc_name) var/mode = listeners[c] var/color = (!anon && CONFIG_GET(flag/allow_admin_ooccolor) && C.prefs.ooccolor) ? C.prefs.ooccolor : GLOB.SOOC_COLOR var/name = (mode == SOOC_LISTEN_ADMIN && anon) ? "([key])[keyname]" : keyname - to_chat(C, "SOOC: [name]: [msg]") + to_chat(C, "SOOC: [name]: [msg]") #undef SOOC_LISTEN_PLAYER #undef SOOC_LISTEN_ADMIN @@ -101,7 +101,7 @@ GLOBAL_LIST_EMPTY(ckey_to_sooc_name) listeners[M.client] = TRUE for(var/c in listeners) var/client/C = c - to_chat(C, "The SOOC channel has been globally [GLOB.sooc_allowed ? "enabled" : "disabled"].") + to_chat(C, "The SOOC channel has been globally [GLOB.sooc_allowed ? "enabled" : "disabled"].") /datum/admins/proc/togglesooc() set category = "Server" diff --git a/modular_skyrat/modules/bsrpd/code/bsrpd.dm b/modular_skyrat/modules/bsrpd/code/bsrpd.dm new file mode 100644 index 00000000000..9fb0016cd8f --- /dev/null +++ b/modular_skyrat/modules/bsrpd/code/bsrpd.dm @@ -0,0 +1,64 @@ +#define BSRPD_CAPAC_MAX 500 +#define BSRPD_CAPAC_USE 10 +#define BSRPD_CAPAC_NEW 250 + +/obj/item/pipe_dispenser/bluespace + name = "Bluespace RPD" + desc = "State of the art technology being tested by NT scientists; this is their only working prototype." + icon = 'modular_skyrat/modules/bsrpd/icons/bsrpd.dmi' + icon_state = "bsrpd" + lefthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi' + righthand_file = 'modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi' + inhand_icon_state = "bsrpd" + resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + custom_materials = null + var/bs_capac = BSRPD_CAPAC_MAX + var/bs_use = BSRPD_CAPAC_USE + var/bs_prog = 0 + +/obj/item/pipe_dispenser/bluespace/attackby(obj/item/item, mob/user, param) + if(istype(item, /obj/item/stack/sheet/bluespace_crystal)) + if(BSRPD_CAPAC_NEW > (BSRPD_CAPAC_MAX - bs_capac) || bs_use == 0) + to_chat(user, "You cannot recharge [src] anymore!") + return + item.use(1) + to_chat(user, "You recharge the bluespace capacitor inside of [src]") + bs_capac += BSRPD_CAPAC_NEW + return + if(istype(item, /obj/item/assembly/signaler/anomaly/bluespace)) + if(bs_use) + to_chat(user, "You slot [item] into [src]; supercharging the bluespace capacitor!") + bs_use = 0 + qdel(item) + else + to_chat(user, "You cannot improve the [src] further.") + return + return ..() + +/obj/item/pipe_dispenser/bluespace/examine(mob/user) + . = ..() + if(user.Adjacent(src)) + . += "Currently has [bs_use == 0 ? "infinite" : bs_capac / bs_use] charges remaining." + if(bs_use != 0) + . += "The Bluespace Anomaly Core slot is empty." + else + . += "You cannot see the charge capacity." + +/obj/item/pipe_dispenser/bluespace/afterattack(atom/target, mob/user, prox) + if(prox) // If we are in proximity to the target, don't use charge and don't call this shitcode. + return ..() + if(bs_capac < (bs_use * (bs_prog + 1))) + to_chat(user, "The [src] lacks the charge to do that.") + return FALSE + bs_prog++ // So people can't just spam click and get more uses + user.Beam(target, icon_state = "rped_upgrade", time = 1 SECONDS) + if(pre_attack(target, user)) + bs_prog-- + bs_capac -= bs_use + return TRUE + bs_prog-- + return FALSE + +#undef BSRPD_CAPAC_MAX +#undef BSRPD_CAPAC_USE +#undef BSRPD_CAPAC_NEW diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd.dmi b/modular_skyrat/modules/bsrpd/icons/bsrpd.dmi new file mode 100644 index 00000000000..5785e4d369a Binary files /dev/null and b/modular_skyrat/modules/bsrpd/icons/bsrpd.dmi differ diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi b/modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi new file mode 100644 index 00000000000..7ade04f94ef Binary files /dev/null and b/modular_skyrat/modules/bsrpd/icons/bsrpd_left.dmi differ diff --git a/modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi b/modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi new file mode 100644 index 00000000000..a55b1659d6f Binary files /dev/null and b/modular_skyrat/modules/bsrpd/icons/bsrpd_right.dmi differ diff --git a/modular_skyrat/modules/combat_indicator/code/combat_indicator.dm b/modular_skyrat/modules/combat_indicator/code/combat_indicator.dm index d2edccab722..c05dcfabbc8 100644 --- a/modular_skyrat/modules/combat_indicator/code/combat_indicator.dm +++ b/modular_skyrat/modules/combat_indicator/code/combat_indicator.dm @@ -30,7 +30,7 @@ GLOBAL_VAR_INIT(combat_indicator_overlay, GenerateCombatOverlay()) nextcombatpopup = world.time + COMBAT_NOTICE_COOLDOWN playsound(src, 'sound/machines/chime.ogg', 10, ignore_walls = FALSE) flick_emote_popup_on_mob("combat", 20) - visible_message("[src] gets ready for combat!") + visible_message("[src] gets ready for combat!") add_overlay(GLOB.combat_indicator_overlay) combat_indicator = TRUE src.log_message("has turned ON the combat indicator!", INDIVIDUAL_ATTACK_LOG) diff --git a/modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi b/modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi index da5e65c9d4a..801575fe28b 100644 Binary files a/modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi and b/modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi differ diff --git a/modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi b/modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi index 99e05acea4b..979c1fc7d1d 100644 Binary files a/modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi and b/modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi differ diff --git a/modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi b/modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi index ca82a6ffccb..04d314b1ed0 100644 Binary files a/modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi and b/modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi differ diff --git a/modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi b/modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi index d90044d2956..ab482c1d827 100644 Binary files a/modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi and b/modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi differ diff --git a/modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi b/modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi index 15bba73aa16..e89a4c866c0 100644 Binary files a/modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi and b/modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi differ diff --git a/modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi b/modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi index 9de08554aa3..79f67bd518e 100644 Binary files a/modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi and b/modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi differ diff --git a/modular_skyrat/modules/customization/modules/client/loadout/donator/personal/donator_personal.dm b/modular_skyrat/modules/customization/modules/client/loadout/donator/personal/donator_personal.dm index 4f9e0bd69e8..e6d98976da3 100644 --- a/modular_skyrat/modules/customization/modules/client/loadout/donator/personal/donator_personal.dm +++ b/modular_skyrat/modules/customization/modules/client/loadout/donator/personal/donator_personal.dm @@ -193,4 +193,4 @@ /datum/loadout_item/backpack/donator/intern_hat name = "Intern Hat" path = /obj/item/clothing/head/intern/developer - ckeywhitelist = list("gandalf2k15", "yawet330", "junglerat", "theooz", "tf4", "cheshify", "swiftfeather", "spcr", "tygertac", "useroth") + ckeywhitelist = list("gandalf2k15", "yawet330", "junglerat", "theooz", "tf4", "cheshify", "swiftfeather", "spcr", "tygertac", "useroth", "slippyjoe") diff --git a/modular_skyrat/modules/customization/modules/client/loadout/neck.dm b/modular_skyrat/modules/customization/modules/client/loadout/neck.dm index b98721a7c17..0619f48ea7f 100644 --- a/modular_skyrat/modules/customization/modules/client/loadout/neck.dm +++ b/modular_skyrat/modules/customization/modules/client/loadout/neck.dm @@ -21,6 +21,26 @@ path = /obj/item/clothing/neck/human_petcollar/leather extra_info = LOADOUT_INFO_THREE_COLORS +/datum/loadout_item/neck/cbellcollar + name = "Cowbell collar" + path = /obj/item/clothing/neck/human_petcollar/locked/cowcollar + +/datum/loadout_item/neck/bellcollar + name = "Bell collar" + path = /obj/item/clothing/neck/human_petcollar/locked/bellcollar + +/datum/loadout_item/neck/spikecollar + name = "Spike collar" + path = /obj/item/clothing/neck/human_petcollar/locked/spikecollar + +/datum/loadout_item/neck/hcollar + name = "Holocollar" + path = /obj/item/clothing/neck/human_petcollar/locked/holocollar + +/datum/loadout_item/neck/crosscollar + name = "Cross collar" + path = /obj/item/clothing/neck/human_petcollar/locked/cross + /datum/loadout_item/neck/poly_cloak name = "Polychromic Cloak" path = /obj/item/clothing/neck/cloak/polychromic diff --git a/modular_skyrat/modules/customization/modules/client/loadout/suit.dm b/modular_skyrat/modules/customization/modules/client/loadout/suit.dm index 1cab197e87b..e7212a0c9b7 100644 --- a/modular_skyrat/modules/customization/modules/client/loadout/suit.dm +++ b/modular_skyrat/modules/customization/modules/client/loadout/suit.dm @@ -36,6 +36,16 @@ name = "Tailcoat" path = /obj/item/clothing/suit/costume/tailcoat +/datum/loadout_item/suit/duster + name = "Colorable Duster" + path = /obj/item/clothing/suit/duster/colorable + extra_info = LOADOUT_INFO_ONE_COLOR + +/datum/loadout_item/suit/peacoat + name = "Colorable Peacoat" + path = /obj/item/clothing/suit/toggle/peacoat + extra_info = LOADOUT_INFO_ONE_COLOR + /datum/loadout_item/suit/dresscoat name = "Black Dresscoat" path = /obj/item/clothing/suit/costume/vic_dresscoat diff --git a/modular_skyrat/modules/customization/modules/client/loadout/uniform.dm b/modular_skyrat/modules/customization/modules/client/loadout/uniform.dm index 32e8ad5b0d7..0a8cd1ce22c 100644 --- a/modular_skyrat/modules/customization/modules/client/loadout/uniform.dm +++ b/modular_skyrat/modules/customization/modules/client/loadout/uniform.dm @@ -2,6 +2,11 @@ category = LOADOUT_CATEGORY_UNIFORM //MISC +/datum/loadout_item/uniform/gandalf + name = "Nostalgic Costume" + path = /obj/item/clothing/under/nostalgiacritic + ckeywhitelist = list("gandalf2k15") + /datum/loadout_item/uniform/assistantformal name = "Assistant's formal uniform" path = /obj/item/clothing/under/misc/assistantformal diff --git a/modular_skyrat/modules/customization/modules/clothing/neck/collars.dm b/modular_skyrat/modules/customization/modules/clothing/neck/collars.dm index 2d54b50de91..56bb98d21d1 100644 --- a/modular_skyrat/modules/customization/modules/clothing/neck/collars.dm +++ b/modular_skyrat/modules/customization/modules/clothing/neck/collars.dm @@ -90,3 +90,42 @@ /obj/item/key/collar name = "Collar Key" desc = "A key for a tiny lock on a collar or bag." + +/obj/item/clothing/neck/human_petcollar/locked/cowcollar + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi' + name = "cowbell collar" + desc = "Don't fear the ripper, now your pet doesn't have to." + icon_state = "collar_cowbell" + +/obj/item/clothing/neck/human_petcollar/locked/bellcollar + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi' + name = "bell collar" + desc = "A loud and annoying collar for your little kittens!" + icon_state = "collar_bell" + +/obj/item/clothing/neck/human_petcollar/locked/spikecollar + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi' + name = "spiked collar" + desc = "A collar for moody pets. Or pitbulls." + icon_state = "collar_spik" + +/obj/item/clothing/neck/human_petcollar/locked/holocollar + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi' + name = "holocollar" + desc = "A collar with holographic information, like a microchip, but around the neck." + icon_state = "collar_holo" + +/obj/item/clothing/neck/human_petcollar/locked/cross + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/neck.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/neck.dmi' + name = "cross collar" + desc = "A religious punishment, probably." + icon_state = "collar_blk" + + + + diff --git a/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm b/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm index e4792edb24a..0184f7d049d 100644 --- a/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm +++ b/modular_skyrat/modules/customization/modules/clothing/suits/coats.dm @@ -230,3 +230,30 @@ mutant_variants = NONE +/obj/item/clothing/suit/duster/colorable + name = "colorable duster" + desc = "This station aint big enough for the both of us." + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi' + icon_state = "duster" + mutant_variants = NONE + +/obj/item/clothing/suit/duster/colorable/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("5D5")) + +/obj/item/clothing/suit/toggle/peacoat + name = "colorable peacoat" + desc = "The way you guys are blending in with the local colour. I mean, Flag Girl was bad enough, but U-Boat Captain?" + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/suits.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/suit.dmi' + icon_state = "peacoat" + mutant_variants = NONE + +/obj/item/clothing/suit/toggle/peacoat/ComponentInitialize() + . = ..() + AddElement(/datum/element/polychromic, list("5D5")) + + + + diff --git a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm b/modular_skyrat/modules/customization/modules/clothing/under/misc.dm index c46056c655f..9d750f4e19b 100644 --- a/modular_skyrat/modules/customization/modules/clothing/under/misc.dm +++ b/modular_skyrat/modules/customization/modules/clothing/under/misc.dm @@ -394,5 +394,12 @@ worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi' icon_state = "rusuni" +/obj/item/clothing/under/nostalgiacritic + name = "nostalgic outfit" + desc = "He remembers it so you don't have to." + icon = 'modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi' + worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi' + icon_state = "cia" + diff --git a/modular_skyrat/modules/customization/modules/clothing/under/security.dm b/modular_skyrat/modules/customization/modules/clothing/under/security.dm index 833c0a97f17..7936900ad8e 100644 --- a/modular_skyrat/modules/customization/modules/clothing/under/security.dm +++ b/modular_skyrat/modules/customization/modules/clothing/under/security.dm @@ -155,6 +155,10 @@ icon = 'modular_skyrat/modules/customization/icons/obj/clothing/uniforms.dmi' worn_icon = 'modular_skyrat/modules/customization/icons/mob/clothing/uniform.dmi' icon_state = "prisonerclassic" + body_parts_covered = CHEST|GROIN|ARMS|LEGS + has_sensor = LOCKED_SENSORS + sensor_mode = SENSOR_COORDS + random_sensor = FALSE ///CDO /obj/item/clothing/under/rank/security/peacekeeper/junior/sol diff --git a/modular_skyrat/modules/customization/modules/jobs/_job.dm b/modular_skyrat/modules/customization/modules/jobs/_job.dm index ae746c92394..b97e6579de5 100644 --- a/modular_skyrat/modules/customization/modules/jobs/_job.dm +++ b/modular_skyrat/modules/customization/modules/jobs/_job.dm @@ -11,7 +11,7 @@ var/list/species_whitelist //Blacklist of species for this job. var/list/species_blacklist - /// Which languages does the job require, associative to LANGUAGE_UNDERSTOOD or LANGUAGE_SPOKEN + /// Which languages does the job require, associative to LANGUAGE_UNDERSTOOD or LANGUAGE_SPOKEN var/list/required_languages = list(/datum/language/common = LANGUAGE_SPOKEN) /datum/job/proc/has_banned_quirk(datum/preferences/pref) @@ -49,7 +49,7 @@ /datum/job/security_sergeant banned_quirks = list(SEC_RESTRICTED_QUIRKS) - + /datum/job/security_medic banned_quirks = list(SEC_RESTRICTED_QUIRKS) @@ -101,6 +101,27 @@ /datum/job/prisoner required_languages = null +/datum/job/station_engineer + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + +/datum/job/atmospheric_technician + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + +/datum/job/doctor + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + +/datum/job/virologist + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + +/datum/job/chemist + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + +/datum/job/roboticist + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + +/datum/job/scientist + banned_quirks = list(TECH_RESTRICTED_QUIRKS) + /datum/job/proc/has_required_languages(datum/preferences/pref) if(!required_languages) return TRUE diff --git a/modular_skyrat/modules/ghostcafe/code/game/objects/structures/ghost_role_spawners.dm b/modular_skyrat/modules/ghostcafe/code/game/objects/structures/ghost_role_spawners.dm index 08568c4328f..91208c41cd3 100644 --- a/modular_skyrat/modules/ghostcafe/code/game/objects/structures/ghost_role_spawners.dm +++ b/modular_skyrat/modules/ghostcafe/code/game/objects/structures/ghost_role_spawners.dm @@ -34,7 +34,7 @@ /area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing)) ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT) - to_chat(new_spawn,"Ghosting is free!") + to_chat(new_spawn,"Ghosting is free!") var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) D.Grant(new_spawn) @@ -64,7 +64,7 @@ /area/centcom/holding/cafebuild, /area/centcom/holding/cafevox, /area/centcom/holding/cafedorms, /area/centcom/holding/cafepark, /area/centcom/holding/cafeplumbing)) ADD_TRAIT(new_spawn, TRAIT_SIXTHSENSE, GHOSTROLE_TRAIT) ADD_TRAIT(new_spawn, TRAIT_FREE_GHOST, GHOSTROLE_TRAIT) - to_chat(new_spawn,"Ghosting is free!") + to_chat(new_spawn,"Ghosting is free!") //to_chat(new_spawn,"Be warned: People who opt out of EORG will come here. Do not make the area uninhabitable and do NOT commit EORG. This is a safe-zone. If you attack people in EORG, you will be banned for griefing.") var/datum/action/toggle_dead_chat_mob/D = new(new_spawn) D.Grant(new_spawn) diff --git a/modular_skyrat/modules/gunpoint/code/datum/gunpoint/gunpoint_datum.dm b/modular_skyrat/modules/gunpoint/code/datum/gunpoint/gunpoint_datum.dm index e702e801257..b914d7b91e6 100644 --- a/modular_skyrat/modules/gunpoint/code/datum/gunpoint/gunpoint_datum.dm +++ b/modular_skyrat/modules/gunpoint/code/datum/gunpoint/gunpoint_datum.dm @@ -92,8 +92,8 @@ locked = TRUE log_combat(target, source, "locked onto with aiming") playsound(get_turf(source), 'modular_skyrat/modules/gunpoint/sound/targeton.ogg', 50,1) - to_chat(source, "You lock onto [target.name]!") - target.visible_message("[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]!", "[source.name] holds you at gunpoint with the [aimed_gun.name]!") + to_chat(source, "You lock onto [target.name]!") + target.visible_message("[source.name] holds [target.name] at gunpoint with the [aimed_gun.name]!", "[source.name] holds you at gunpoint with the [aimed_gun.name]!") if(target.gunpointed.len == 1)//First case to_chat(target, "You'll get shot if you use radio, move or interact with items!") to_chat(target, "You can however take items out, toss harmless items or drop them.") @@ -131,7 +131,7 @@ source.gunpointing = null if(locked) QDEL_NULL(gunpoint_gui) - target.visible_message("[source.name] no longer holds [target.name] at gunpoint.", "[source.name] no longer holds you at gunpoint.") + target.visible_message("[source.name] no longer holds [target.name] at gunpoint.", "[source.name] no longer holds you at gunpoint.") source = null target = null aimed_gun = null diff --git a/modular_skyrat/modules/horrorform/code/modules/mob/hostile/true_changeling.dm b/modular_skyrat/modules/horrorform/code/modules/mob/hostile/true_changeling.dm index cfa4b15e5b0..6361d155af7 100644 --- a/modular_skyrat/modules/horrorform/code/modules/mob/hostile/true_changeling.dm +++ b/modular_skyrat/modules/horrorform/code/modules/mob/hostile/true_changeling.dm @@ -38,9 +38,9 @@ var/datum/action/innate/turn_to_human var/datum/action/innate/devour var/transformed_time = 0 - var/playstyle_string = "We have entered our true form! We are unbelievably powerful, and regenerate life at a steady rate. However, most of \ + var/playstyle_string = "We have entered our true form! We are unbelievably powerful, and regenerate life at a steady rate. However, most of \ our abilities are useless in this form, and we must utilise the abilities that we have gained as a result of our transformation. Currently, we are incapable of returning to a human. \ - After several minutes, we will once again be able to revert into a human. Taking too much damage will cause us to reach equilibrium and our cells will combust into a shower of gore, watch out!" + After several minutes, we will once again be able to revert into a human. Taking too much damage will cause us to reach equilibrium and our cells will combust into a shower of gore, watch out!" var/mob/living/carbon/human/stored_changeling = null //The changeling that transformed var/devouring = FALSE //If the true changeling is currently devouring a human @@ -71,7 +71,7 @@ if(stat) return if(act == "scream") - message = "[src] makes a loud, bone-chilling roar!" + message = "[src] makes a loud, bone-chilling roar!" act = "me" scream(message) return @@ -79,7 +79,7 @@ /mob/living/simple_animal/hostile/true_changeling/proc/scream(message) if(!message) - message = "[src] makes a loud, bone-chilling roar!" + message = "[src] makes a loud, bone-chilling roar!" var/frequency = get_rand_frequency() //so sound frequency is consistent for(var/mob/M in range(35, src)) //You can hear the scream 7 screens away // Double check for client diff --git a/modular_skyrat/modules/mentor/code/mentorhelp.dm b/modular_skyrat/modules/mentor/code/mentorhelp.dm index 9e1d3e8a01d..77862499537 100644 --- a/modular_skyrat/modules/mentor/code/mentorhelp.dm +++ b/modular_skyrat/modules/mentor/code/mentorhelp.dm @@ -15,7 +15,7 @@ return var/show_char = CONFIG_GET(flag/mentors_mobname_only) - var/mentor_msg = "MENTORHELP: [key_name_mentor(src, 1, 0, 1, show_char)]: [msg]" + var/mentor_msg = "MENTORHELP: [key_name_mentor(src, 1, 0, 1, show_char)]: [msg]" log_mentor("MENTORHELP: [key_name_mentor(src, 0, 0, 0, 0)]: [msg]") for(var/it in GLOB.mentors) @@ -23,7 +23,7 @@ SEND_SOUND(X, 'sound/items/bikehorn.ogg') to_chat(X, mentor_msg) - to_chat(src, "PM to-Mentors: [msg]") + to_chat(src, "PM to-Mentors: [msg]") return /proc/get_mentor_counts() diff --git a/modular_skyrat/modules/mentor/code/mentorpm.dm b/modular_skyrat/modules/mentor/code/mentorpm.dm index fce7c475287..7e6684ce2ee 100644 --- a/modular_skyrat/modules/mentor/code/mentorpm.dm +++ b/modular_skyrat/modules/mentor/code/mentorpm.dm @@ -32,7 +32,7 @@ return if(is_mentor(whom)) - to_chat(GLOB.mentors, "[src] has started replying to [whom]'s mhelp.") + to_chat(GLOB.mentors, "[src] has started replying to [whom]'s mhelp.") //get message text, limit it's length.and clean/escape html if(!msg) @@ -40,7 +40,7 @@ if(!msg) if (is_mentor(whom)) - to_chat(GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") + to_chat(GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") return if(!C) @@ -57,7 +57,7 @@ msg = sanitize(copytext_char(msg, 1, MAX_MESSAGE_LEN)) if(!msg) if (is_mentor(whom)) - to_chat(GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") + to_chat(GLOB.mentors, "[src] has stopped their reply to [whom]'s mhelp.") return log_mentor("Mentor PM: [key_name(src)]->[key_name(C)]: [msg]") @@ -66,17 +66,17 @@ var/show_char = CONFIG_GET(flag/mentors_mobname_only) if(C.is_mentor()) if(is_mentor())//both are mentors - to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") + to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") else //recipient is a mentor but sender is not - to_chat(C, "Reply PM from-[key_name_mentor(src, C, 1, 0, show_char)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") + to_chat(C, "Reply PM from-[key_name_mentor(src, C, 1, 0, show_char)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, 0)]: [msg]") else if(is_mentor()) //sender is a mentor but recipient is not. - to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") - to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, show_char)]: [msg]") + to_chat(C, "Mentor PM from-[key_name_mentor(src, C, 1, 0, 0)]: [msg]") + to_chat(src, "Mentor PM to-[key_name_mentor(C, C, 1, 0, show_char)]: [msg]") //we don't use message_Mentors here because the sender/receiver might get it too var/show_char_sender = !is_mentor() && CONFIG_GET(flag/mentors_mobname_only) @@ -84,4 +84,4 @@ for(var/it in GLOB.mentors) var/client/X = it if(X.key!=key && X.key!=C.key) //check client/X is an Mentor and isn't the sender or recipient - to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: [msg]") //inform X + to_chat(X, "Mentor PM: [key_name_mentor(src, X, 0, 0, show_char_sender)]->[key_name_mentor(C, X, 0, 0, show_char_recip)]: [msg]") //inform X diff --git a/modular_skyrat/modules/mentor/code/mentorsay.dm b/modular_skyrat/modules/mentor/code/mentorsay.dm index b69ce29047d..080bad4a871 100644 --- a/modular_skyrat/modules/mentor/code/mentorsay.dm +++ b/modular_skyrat/modules/mentor/code/mentorsay.dm @@ -13,7 +13,7 @@ log_mentor("MSAY: [key_name(src)] : [msg]") if(check_rights_for(src, R_ADMIN,0)) - msg = "MENTOR: [key_name(src, 0, 0)]: [msg]" + msg = "MENTOR: [key_name(src, 0, 0)]: [msg]" else - msg = "MENTOR: [key_name(src, 0, 0)]: [msg]" + msg = "MENTOR: [key_name(src, 0, 0)]: [msg]" to_chat(GLOB.admins | GLOB.mentors, msg) diff --git a/modular_skyrat/modules/mentor/code/mentorwho.dm b/modular_skyrat/modules/mentor/code/mentorwho.dm index b374a078232..500a5587bb2 100644 --- a/modular_skyrat/modules/mentor/code/mentorwho.dm +++ b/modular_skyrat/modules/mentor/code/mentorwho.dm @@ -18,5 +18,5 @@ if(C.is_afk()) suffix += " (AFK)" - msg += "\t[C][suffix]\n" + msg += "\t[C][suffix]\n" to_chat(src, msg) diff --git a/modular_skyrat/modules/ssd_indicator/code/mob.dm b/modular_skyrat/modules/ssd_indicator/code/mob.dm index d9434ae68d4..b474317623d 100644 --- a/modular_skyrat/modules/ssd_indicator/code/mob.dm +++ b/modular_skyrat/modules/ssd_indicator/code/mob.dm @@ -34,5 +34,5 @@ GLOBAL_VAR_INIT(ssd_indicator_overlay, mutable_appearance('modular_skyrat/module //This proc should stop mobs from having the overlay when someone keeps jumping control of mobs, unfortunately it causes Aghosts to have their character without the SSD overlay, I wasn't able to find a better proc unfortunately /mob/living/transfer_ckey(mob/new_mob, send_signal = TRUE) ..() - set_ssd_indicator(FALSE) + set_ssd_indicator(FALSE) */ diff --git a/modular_skyrat/modules/verbs/code/modules/client/preferences_toggles.dm b/modular_skyrat/modules/verbs/code/modules/client/preferences_toggles.dm index 7f0b441b23b..cc2abd1a36d 100644 --- a/modular_skyrat/modules/verbs/code/modules/client/preferences_toggles.dm +++ b/modular_skyrat/modules/verbs/code/modules/client/preferences_toggles.dm @@ -5,5 +5,5 @@ set desc = "Toggles seeing LocalOutOfCharacter chat" usr.client.prefs.skyrat_toggles ^= CHAT_LOOC usr.client.prefs.save_preferences() - to_chat(usr, "You will [(usr.client.prefs.skyrat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.") + to_chat(usr, "You will [(usr.client.prefs.skyrat_toggles & CHAT_LOOC) ? "now" : "no longer"] see messages on the LOOC channel.") SSblackbox.record_feedback("nested tally", "preferences_verb", 1, list("Toggle Seeing LOOC", "[usr.client.prefs.skyrat_toggles & CHAT_LOOC ? "Enabled" : "Disabled"]")) diff --git a/modular_skyrat/modules/verbs/code/modules/client/verbs/looc.dm b/modular_skyrat/modules/verbs/code/modules/client/verbs/looc.dm index 6c0f7f64989..91a2a9ee1c5 100644 --- a/modular_skyrat/modules/verbs/code/modules/client/verbs/looc.dm +++ b/modular_skyrat/modules/verbs/code/modules/client/verbs/looc.dm @@ -21,7 +21,7 @@ if(handle_spam_prevention(msg,MUTE_OOC)) return if(findtext(msg, "byond://")) - to_chat(src, "Advertising other servers is not allowed.") + to_chat(src, "Advertising other servers is not allowed.") log_admin("[key_name(src)] has attempted to advertise in LOOC: [msg]") return if(mob.stat) @@ -65,5 +65,5 @@ return prefs.skyrat_toggles ^= CHAT_LOOC_ADMIN prefs.save_preferences() - to_chat(usr, "You will [(prefs.skyrat_toggles & CHAT_LOOC_ADMIN) ? "now" : "no longer"] hear LOOC globally.") + to_chat(usr, "You will [(prefs.skyrat_toggles & CHAT_LOOC_ADMIN) ? "now" : "no longer"] hear LOOC globally.") SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Togle Admin LOOC", "[usr.client.prefs.skyrat_toggles & CHAT_LOOC_ADMIN ? "Enabled" : "Disabled"]")) diff --git a/tgstation.dme b/tgstation.dme index a108e502d05..702af709c4b 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3763,6 +3763,7 @@ #include "modular_skyrat\modules\brigoff\code\modules\jobs\job_types\brigoff.dm" #include "modular_skyrat\modules\bsa_overhaul\code\bsa_cannon.dm" #include "modular_skyrat\modules\bsa_overhaul\code\bsa_computer.dm" +#include "modular_skyrat\modules\bsrpd\code\bsrpd.dm" #include "modular_skyrat\modules\bulletrebalance\sniper.dm" #include "modular_skyrat\modules\cargo\code\bloat.dm" #include "modular_skyrat\modules\cargo\code\goodies.dm" @@ -4144,6 +4145,8 @@ #include "modular_skyrat\modules\mentor\code\mentorpm.dm" #include "modular_skyrat\modules\mentor\code\mentorsay.dm" #include "modular_skyrat\modules\mentor\code\mentorwho.dm" +#include "modular_skyrat\modules\Midroundtraitor\datum_traitor.dm" +#include "modular_skyrat\modules\Midroundtraitor\event.dm" #include "modular_skyrat\modules\modular_items\code\datums\components\crafting\recipes\recipes_misc.dm" #include "modular_skyrat\modules\modular_items\code\datums\components\crafting\recipes\tailoring.dm" #include "modular_skyrat\modules\modular_items\code\game\modular_clothing.dm" diff --git a/tgui/packages/tgui-panel/chat/constants.js b/tgui/packages/tgui-panel/chat/constants.js index 3719c8618bd..9ee44791473 100644 --- a/tgui/packages/tgui-panel/chat/constants.js +++ b/tgui/packages/tgui-panel/chat/constants.js @@ -82,7 +82,7 @@ export const MESSAGE_TYPES = [ type: MESSAGE_TYPE_OOC, name: 'OOC', description: 'The bluewall of global OOC messages', - selector: '.ooc, .adminooc, .oocplain, .looc', + selector: '.ooc, .adminooc, .oocplain, .looc, .rlooc', }, { type: MESSAGE_TYPE_ADMINPM,