From 9fc48d35ef5a27987311fcea7c6f38f39fc5bd5b Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue, 26 May 2026 00:40:48 +0300 Subject: [PATCH 01/29] Create readme.md --- modular_oculis/modules/antimemetics/readme.md | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 modular_oculis/modules/antimemetics/readme.md diff --git a/modular_oculis/modules/antimemetics/readme.md b/modular_oculis/modules/antimemetics/readme.md new file mode 100644 index 00000000000..01fd8af1fd7 --- /dev/null +++ b/modular_oculis/modules/antimemetics/readme.md @@ -0,0 +1,29 @@ +https://github.com/Monkestation/OculisStation/pull/ + +## \ + +Module ID: ANTIMEMETICS + +### Description: + +This entire module contains everything relating to mechanical memetics, antimemetics and related phenomena that are mainly used for admin / event shenanigens for Oculis Station. + +### TG Proc/File Changes: + +- N/A + +### Modular Overrides: + +- N/A + +### Defines: + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +XeonMations From 6379f97b1a08f548883895f6e9ff7e8c3975296b Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue, 26 May 2026 09:19:56 +0300 Subject: [PATCH 02/29] reality anchors --- .../antimemetics/code/reality_anchor.dm | 123 ++++++++++++++++++ .../antimemetics/icons/reality_anchor.dmi | Bin 0 -> 1933 bytes modular_oculis/modules/antimemetics/readme.md | 2 +- tgstation.dme | 1 + 4 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 modular_oculis/modules/antimemetics/code/reality_anchor.dm create mode 100644 modular_oculis/modules/antimemetics/icons/reality_anchor.dmi diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm new file mode 100644 index 00000000000..d976bd077a3 --- /dev/null +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -0,0 +1,123 @@ +/obj/item/circuitboard/machine/reality_anchor + name = "Reality Anchor" + greyscale_colors = COLOR_DARK_PURPLE + build_path = /obj/machinery/power/reality_anchor + req_components = list( + /obj/item/stack/cable_coil = 5, + /datum/stock_part/servo/tier4 = 2, + /datum/stock_part/micro_laser/tier4 = 4, + /datum/stock_part/matter_bin/tier4 = 2, + /obj/item/stack/sheet/bluespace_crystal = 1, + ) + +/obj/machinery/power/reality_anchor + name = "dunmore reality anchor" + desc = "A machine made to make reality more stable. Whatever that means." + icon = 'modular_oculis/modules/antimemetics/icons/reality_anchor.dmi' + icon_state = "reality_anchor" + base_icon_state = "reality_anchor" + density = TRUE + use_power = IDLE_POWER_USE + circuit = /obj/item/circuitboard/machine/reality_anchor + critical_machine = TRUE + idle_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 1000 // 1 MW + + /// Is it about to explode? + VAR_PRIVATE/going_kaboom = FALSE + + var/on = FALSE + +/obj/machinery/power/reality_anchor/Initialize(mapload) + . = ..() + connect_to_network() + +/obj/machinery/power/reality_anchor/examine(mob/user) + . = ..() + . += on ? "[span_purple("You feel stable.")]" : null + +/obj/machinery/power/reality_anchor/update_icon_state() + . = ..() + if(panel_open) + icon_state = "[base_icon_state]_open" + return + if(on) + icon_state = "[base_icon_state]_on" + else + icon_state = "[base_icon_state]" + +/obj/machinery/power/reality_anchor/screwdriver_act(mob/living/user, obj/item/tool) + if(on) + balloon_alert(user, "turn off first!") + return ITEM_INTERACT_BLOCKING + return default_deconstruction_screwdriver(user, tool) + +/obj/machinery/power/reality_anchor/crowbar_act(mob/living/user, obj/item/tool) + if(on) + balloon_alert(user, "turn off first!") + return ITEM_INTERACT_BLOCKING + return default_deconstruction_crowbar(user, tool) + +/obj/machinery/power/reality_anchor/wrench_act(mob/living/user, obj/item/tool) + . = ..() + if(on) + balloon_alert(user, "turn off first!") + return ITEM_INTERACT_BLOCKING + default_unfasten_wrench(user, tool) + if(anchored) + connect_to_network() + else + disconnect_from_network() + return ITEM_INTERACT_SUCCESS + +/obj/machinery/power/reality_anchor/interact(mob/user) + . = ..() + on = !on + playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) + balloon_alert_to_viewers("[on ? null : "de"]activated!") + update_icon() + +/obj/machinery/power/reality_anchor/proc/overload() + if(!on) + return + if(going_kaboom) + return + going_kaboom = TRUE + visible_message( + message = span_danger("[src] lets out a shower of sparks as it starts to lose stability!"), + blind_message = span_hear("You hear a loud electrical crack!"), + ) + playsound(src, 'sound/effects/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) + tesla_zap(source = src, zap_range = 5, power = 1 MEGA WATTS) + addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), src, 2, 3, 4, null, 8), 10 SECONDS) // Not a normal explosion. + +/obj/machinery/power/reality_anchor/bullet_act(obj/projectile/proj) + . = ..() + if(!going_kaboom && istype(proj) && proj.damage > 0 && ((proj.damage_type == BURN) || (proj.damage_type == BRUTE))) + log_bomber(proj.firer, "triggered a", src, "explosion via projectile") + overload() + +/obj/machinery/power/reality_anchor/blob_act(obj/structure/blob/B) + if(on) + overload() + return TRUE + return ..() + +/obj/machinery/power/reality_anchor/ex_act() + if(on) + if(going_kaboom) + qdel(src) + else + overload() + return TRUE + return ..() + +/obj/machinery/power/reality_anchor/fire_act(exposed_temperature, exposed_volume) + if(on) + overload() + return TRUE + return ..() + +/obj/machinery/power/reality_anchor/zap_act(power, zap_flags) + . = ..() //extend the zap + if(zap_flags & ZAP_MACHINE_EXPLOSIVE) + overload() diff --git a/modular_oculis/modules/antimemetics/icons/reality_anchor.dmi b/modular_oculis/modules/antimemetics/icons/reality_anchor.dmi new file mode 100644 index 0000000000000000000000000000000000000000..3f250cc1eea14052941014307c8020058d15a133 GIT binary patch literal 1933 zcmXw33s4kS7Ht>^IzyIG1O}t!P<(8Z(N@H~aS1d6`uGS>em)ViO%b3KT^mBQF|oFh zP&T4#i>PfdI4YQtk2QRZvSP#vDqs+FR|HWL6=Z95P01=IWpMVHs&rMqSAEYt_nmw0 zt1d$cE8o}7)KV1nehiFCB0EQ3c8Z3qxBjy;l%gDE6rU1ZSy{<248~YhRg1*}Aru6G zVORj5k*tVgIRRkaNCShB(Hm&J-bmAcJPeB<<~d&Ecma_##2ILS1qmZe0EUG|BLg7D zoFEFKBFQ2z@FbHHXaEsUVv>w`5px{o0K$qW2^=RNj7cdHfk={Mg-}^2K*VvJEXk@Q z3;eq*hM=+{z2ov&5J@Fo5HT-6B1Kj>jz>foIZ?InB+X)loWO|^uc$O&Z5F-CG7Mk^ z)k4lE8b$pSmT2Y$nr4tePrqvn35tpkVlfXfXHiuQp#?C2W@sa=T2zQ3;1J7WB#I2N z$w=E68X0M9&>I+FU>O6V8B7Brok&&`m6x!A=7@s;8UQ1xl7XiUf>DInN<>hU%8QDq z2!g`#5<&um9Lr*(5kS(UmFKL8w}_&mNF>0pA_IA18B0X*03cR^KxTmiS%C;9=0mG2 zLn93ll&!J>(-v8_DvClji>z1`1H&q+jW~s{V6}BvtQ{;Q(nvm0Y9qNc3k?P%LOdeV zBvk;501Id!%ZkkLgeF475*eyh;6;g$2_#7pL?U2CGC2TwGIe4xF+j19?qyPhg%ZLX zVJWIW28TF6h=NEi5SbPPa5rdhCRfv;FexFKVxJ7=kdNx^DY!5y`_rs~4MO3DEq|pb z@n~|IQ1IF7m&wA5S0nS{O!IF1(3fmWWo`!l^eCt=KCqiA*t7RM2u=$AXK<|X=%b3x ziWFn=X*y)l+?JZfVT%@;eJ{~rmy98aW#z&CEmi}a*LCGcTBTa0%^n*W^ODwr&mQ;Z zInG$s8`I#lxVO-?xPMQ13w<^;c%k#Ld~m^>3yNSva$B-Lm#CTS#-$MQRvf8 zxvX3_H`gmualoUs8JipL-D~P`AJe!cF7%3=?HiI2*5T_`rZI0-UOX!RkJ!%Z!`H7N z7xnM(@GjhO!=cpy{$yis-|74QN6nMl3E!u4y5pKdyPS(NGlNza6s!))9P~9WyZYfk+u77W$cG7Lkv-kYO&h2JvkFNe9jQ(Zh za)jTM7V2}q54`_zb$e%Amrj?p@00d%*M_o~?!eQG&K6aWzI{bbTEpRe@H~^tFXpoI-pm)AGdtPVxzf&Ky{~E2^t<`lMayfOPROjX2>=}O~ zor>>NO>P6NSK-*ieEG&@#<%vV6K?coyZf^_=;-+X(Sw^I)lpTTg7nmN+8WJS`e8uI(1VxkkG&MfD4 F{vW;mD}?|6 literal 0 HcmV?d00001 diff --git a/modular_oculis/modules/antimemetics/readme.md b/modular_oculis/modules/antimemetics/readme.md index 01fd8af1fd7..c9f526d8ca3 100644 --- a/modular_oculis/modules/antimemetics/readme.md +++ b/modular_oculis/modules/antimemetics/readme.md @@ -6,7 +6,7 @@ Module ID: ANTIMEMETICS ### Description: -This entire module contains everything relating to mechanical memetics, antimemetics and related phenomena that are mainly used for admin / event shenanigens for Oculis Station. +This entire module contains everything relating to mechanical memetics, antimemetics, memes and antimemes, and related phenomena that are mainly used for admin / event shenanigens for Oculis Station. ### TG Proc/File Changes: diff --git a/tgstation.dme b/tgstation.dme index 7cc89288e9d..b9c68f31f6f 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -10062,6 +10062,7 @@ #include "modular_oculis\master_files\code\modules\projectiles\boxes_magazines\ammo_boxes.dm" #include "modular_oculis\master_files\modular_nova\master_files\code\controllers\subsystem\dynamic_rulesets_midround.dm" #include "modular_oculis\modules\admin\code\view_variables.dm" +#include "modular_oculis\modules\antimemetics\code\reality_anchor.dm" #include "modular_oculis\modules\astar\code\astar.dm" #include "modular_oculis\modules\astar\code\navigation.dm" #include "modular_oculis\modules\astar\code\pathfinder.dm" From fff30084bf529f321bd87c2e7aa787287d293e59 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue, 26 May 2026 09:24:10 +0300 Subject: [PATCH 03/29] Update reality_anchor.dm --- modular_oculis/modules/antimemetics/code/reality_anchor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index d976bd077a3..3c6a78ea460 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -12,7 +12,7 @@ /obj/machinery/power/reality_anchor name = "dunmore reality anchor" - desc = "A machine made to make reality more stable. Whatever that means." + desc = "A machine made to make reality more stable. A direct power connection is heavily recommended." icon = 'modular_oculis/modules/antimemetics/icons/reality_anchor.dmi' icon_state = "reality_anchor" base_icon_state = "reality_anchor" From 0eb628bd060234978bb7476512ad601f56966f47 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue, 26 May 2026 10:02:49 +0300 Subject: [PATCH 04/29] Update reality_anchor.dm --- .../antimemetics/code/reality_anchor.dm | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index 3c6a78ea460..c2226419fd3 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -20,7 +20,7 @@ use_power = IDLE_POWER_USE circuit = /obj/item/circuitboard/machine/reality_anchor critical_machine = TRUE - idle_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 1000 // 1 MW + idle_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // 1 MW /// Is it about to explode? VAR_PRIVATE/going_kaboom = FALSE @@ -71,11 +71,29 @@ /obj/machinery/power/reality_anchor/interact(mob/user) . = ..() + toggle_power(user) + +/obj/machinery/power/reality_anchor/proc/toggle_power(mob/user) + if(!powered()) + balloon_alert(user, "no power!") + return on = !on + use_power = on ? IDLE_POWER_USE : NO_POWER_USE + update_current_power_usage() playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) balloon_alert_to_viewers("[on ? null : "de"]activated!") update_icon() +/obj/machinery/power/reality_anchor/power_change() + . = ..() + if(machine_stat & NOPOWER) + on = FALSE + use_power = NO_POWER_USE + update_current_power_usage() + playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) + balloon_alert_to_viewers("deactivated!") + update_icon() + /obj/machinery/power/reality_anchor/proc/overload() if(!on) return @@ -87,7 +105,7 @@ blind_message = span_hear("You hear a loud electrical crack!"), ) playsound(src, 'sound/effects/magic/lightningshock.ogg', 100, TRUE, extrarange = 5) - tesla_zap(source = src, zap_range = 5, power = 1 MEGA WATTS) + tesla_zap(source = src, zap_range = 5, power = 20 KILO WATTS) addtimer(CALLBACK(GLOBAL_PROC, GLOBAL_PROC_REF(explosion), src, 2, 3, 4, null, 8), 10 SECONDS) // Not a normal explosion. /obj/machinery/power/reality_anchor/bullet_act(obj/projectile/proj) From 3851122f706a233aae605fdded26d6d6609b2ef4 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue, 26 May 2026 10:32:58 +0300 Subject: [PATCH 05/29] Update reality_anchor.dm --- .../modules/antimemetics/code/reality_anchor.dm | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index c2226419fd3..086ce0debe0 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -20,7 +20,8 @@ use_power = IDLE_POWER_USE circuit = /obj/item/circuitboard/machine/reality_anchor critical_machine = TRUE - idle_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // 1 MW + active_power_usage = BASE_MACHINE_ACTIVE_CONSUMPTION * 10 // 1 MW + idle_power_usage = BASE_MACHINE_IDLE_CONSUMPTION /// Is it about to explode? VAR_PRIVATE/going_kaboom = FALSE @@ -71,6 +72,9 @@ /obj/machinery/power/reality_anchor/interact(mob/user) . = ..() + if(!anchored) + balloon_alert(user, "anchor first!") + return FALSE toggle_power(user) /obj/machinery/power/reality_anchor/proc/toggle_power(mob/user) @@ -78,7 +82,7 @@ balloon_alert(user, "no power!") return on = !on - use_power = on ? IDLE_POWER_USE : NO_POWER_USE + use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE update_current_power_usage() playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) balloon_alert_to_viewers("[on ? null : "de"]activated!") @@ -86,9 +90,9 @@ /obj/machinery/power/reality_anchor/power_change() . = ..() - if(machine_stat & NOPOWER) + if((machine_stat & NOPOWER) && on) on = FALSE - use_power = NO_POWER_USE + use_power = IDLE_POWER_USE update_current_power_usage() playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) balloon_alert_to_viewers("deactivated!") From 8fdc375992fedf923bc959cbf5f402315fe954e6 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Tue, 26 May 2026 13:09:29 +0300 Subject: [PATCH 06/29] amnestics --- .../modules/antimemetics/code/amnestics.dm | 37 +++++++++++++++++++ .../modules/antimemetics/code/mnestics.dm | 36 ++++++++++++++++++ tgstation.dme | 1 + 3 files changed, 74 insertions(+) create mode 100644 modular_oculis/modules/antimemetics/code/amnestics.dm create mode 100644 modular_oculis/modules/antimemetics/code/mnestics.dm diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm new file mode 100644 index 00000000000..d82a3acee6a --- /dev/null +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -0,0 +1,37 @@ +/datum/chemical_reaction/amnestic + results = list(/datum/reagent/medicine/amnestic = 5) + required_reagents = list( + /datum/reagent/medicine/ondansetron = 1, + /datum/reagent/medicine/polypyr = 1, + /datum/reagent/medicine/rezadone = 1, + /datum/reagent/medicine/neurine = 1, + /datum/reagent/toxin/amanitin = 1, + ) + reaction_tags = NONE + +/datum/reagent/medicine/amnestic + name = "Class A Amnestics" + description = "A standard for keeping secrets." + color = "#a5a5a5" + overdose_threshold = 25 + ph = 7 + taste_description = "almonds" + chemical_flags = REAGENT_NO_RANDOM_RECIPE + metabolized_traits = list(TRAIT_AMNESTICS) + +/datum/reagent/medicine/amnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) + . = ..() + if(!HAS_TRAIT(affected_carbon, TRAIT_MNESTICS)) + to_chat(affected_carbon, span_big(span_hypnophrase("You feel your memories slipping away."))) + +/datum/reagent/medicine/amnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) + . = ..() + if(!HAS_TRAIT(affected_carbon, TRAIT_MNESTICS)) + to_chat(affected_carbon, span_big(span_hypnophrase("You can't seem to remember what happened..."))) + +/datum/reagent/medicine/amnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) + if(SPT_PROB(25, seconds_per_tick)) + affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + return TRUE diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm new file mode 100644 index 00000000000..fe98554b561 --- /dev/null +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -0,0 +1,36 @@ +/datum/chemical_reaction/mnestic + results = list(/datum/reagent/medicine/mnestic = 4) + required_reagents = list( + /datum/reagent/medicine/neurine = 1, + /datum/reagent/medicine/rezadone = 1, + /datum/reagent/medicine/psicodine = 1, + /datum/reagent/medicine/modafinil = 1, + ) + reaction_tags = NONE + +/datum/reagent/medicine/mnestic + name = "Class Y Mnestics" + description = "You can never forget a dose of mnestics." + color = "#a5a5a5" + overdose_threshold = 25 + ph = 7 + taste_description = "almonds" + chemical_flags = REAGENT_NO_RANDOM_RECIPE + purge_multiplier = 0.15 + metabolized_traits = list(TRAIT_MNESTICS) + +/datum/reagent/medicine/mnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) + . = ..() + +/datum/reagent/medicine/mnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) + . = ..() + +/datum/reagent/medicine/mnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) + affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + return TRUE + + diff --git a/tgstation.dme b/tgstation.dme index b9c68f31f6f..0c67209dd5a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -10062,6 +10062,7 @@ #include "modular_oculis\master_files\code\modules\projectiles\boxes_magazines\ammo_boxes.dm" #include "modular_oculis\master_files\modular_nova\master_files\code\controllers\subsystem\dynamic_rulesets_midround.dm" #include "modular_oculis\modules\admin\code\view_variables.dm" +#include "modular_oculis\modules\antimemetics\code\mnestics.dm" #include "modular_oculis\modules\antimemetics\code\reality_anchor.dm" #include "modular_oculis\modules\astar\code\astar.dm" #include "modular_oculis\modules\astar\code\navigation.dm" From dd45e44a4238b2bbe58f92bfc982e3dd52652a2e Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Wed, 27 May 2026 06:46:52 +0300 Subject: [PATCH 07/29] wew --- code/__DEFINES/~~oculis_defines/traits/declarations.dm | 4 ++++ code/_globalvars/traits/_traits.dm | 4 ++-- code/_globalvars/traits/admin_tooling.dm | 2 ++ modular_oculis/modules/antimemetics/readme.md | 4 ++-- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/code/__DEFINES/~~oculis_defines/traits/declarations.dm b/code/__DEFINES/~~oculis_defines/traits/declarations.dm index 316c7a6689a..43aaa9adb9e 100644 --- a/code/__DEFINES/~~oculis_defines/traits/declarations.dm +++ b/code/__DEFINES/~~oculis_defines/traits/declarations.dm @@ -3,4 +3,8 @@ /// The trait that determines if someone has the traditional thinker quirk. #define TRAIT_TRADITIONAL_THINKER "trait_traditional_thinker" +/// Used in the ANTIMEMETICS module. +#define TRAIT_AMNESTICS "trait_amnestics" +#define TRAIT_MNESTICS "trait_mnestics" + // END TRAIT DEFINES diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 1486df4c376..996b55d9ec2 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -939,9 +939,9 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SOMATIC_VOLATILITY" = TRAIT_SOMATIC_VOLATILITY, // OCULIS EDIT ADDITION START - OCULIS TRAITS - "TRAIT_TRADITIONAL_THINKER" = TRAIT_TRADITIONAL_THINKER, - + "TRAIT_AMNESTICS" = TRAIT_AMNESTICS, + "TRAIT_MNESTICS" = TRAIT_MNESTICS, // OCULIS EDIT ADDITION END ), // IRIS EDIT ADDITION END diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index 64b617d0b83..adfa1924b72 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -523,6 +523,8 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( // OCULIS EDIT ADDITION START - OCULIS TRAITS "TRAIT_TRADITIONAL_THINKER" = TRAIT_TRADITIONAL_THINKER, + "TRAIT_AMNESTICS" = TRAIT_AMNESTICS, + "TRAIT_MNESTICS" = TRAIT_MNESTICS, // OCULIS EDIT ADDITION END ), // IRIS EDIT ADDITION END diff --git a/modular_oculis/modules/antimemetics/readme.md b/modular_oculis/modules/antimemetics/readme.md index c9f526d8ca3..f926b81b8d1 100644 --- a/modular_oculis/modules/antimemetics/readme.md +++ b/modular_oculis/modules/antimemetics/readme.md @@ -1,4 +1,4 @@ -https://github.com/Monkestation/OculisStation/pull/ +https://github.com/Monkestation/OculisStation/pull/255 ## \ @@ -18,7 +18,7 @@ This entire module contains everything relating to mechanical memetics, antimeme ### Defines: -- N/A +- `code/__DEFINES/~~oculis_defines/traits/declarations.dm` ### Included files that are not contained in this module: From 481ce32ceb58c9f396232abe2124411157c8caf6 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Wed, 27 May 2026 06:51:56 +0300 Subject: [PATCH 08/29] awaw --- modular_oculis/modules/antimemetics/code/mnestics.dm | 2 ++ tgstation.dme | 1 + 2 files changed, 3 insertions(+) diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index fe98554b561..5a2dde86040 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -21,9 +21,11 @@ /datum/reagent/medicine/mnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) . = ..() + to_chat(affected_carbon, span_big(span_hypnophrase("You feel more in control of what you remember."))) /datum/reagent/medicine/mnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) . = ..() + to_chat(affected_carbon, span_big(span_hypnophrase("You lose the force you had on your memories."))) /datum/reagent/medicine/mnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) diff --git a/tgstation.dme b/tgstation.dme index 0c67209dd5a..93cf68f4f89 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -10062,6 +10062,7 @@ #include "modular_oculis\master_files\code\modules\projectiles\boxes_magazines\ammo_boxes.dm" #include "modular_oculis\master_files\modular_nova\master_files\code\controllers\subsystem\dynamic_rulesets_midround.dm" #include "modular_oculis\modules\admin\code\view_variables.dm" +#include "modular_oculis\modules\antimemetics\code\amnestics.dm" #include "modular_oculis\modules\antimemetics\code\mnestics.dm" #include "modular_oculis\modules\antimemetics\code\reality_anchor.dm" #include "modular_oculis\modules\astar\code\astar.dm" From d1fbf526289cec8f0375cdc6c400e30270471b9c Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Wed, 27 May 2026 07:06:37 +0300 Subject: [PATCH 09/29] awawwa --- modular_oculis/modules/antimemetics/code/mnestics.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index 5a2dde86040..5f566b56510 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -21,11 +21,11 @@ /datum/reagent/medicine/mnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) . = ..() - to_chat(affected_carbon, span_big(span_hypnophrase("You feel more in control of what you remember."))) + to_chat(affected_carbon, span_big(span_boldnicegreen("You feel more in control of what you remember."))) /datum/reagent/medicine/mnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) . = ..() - to_chat(affected_carbon, span_big(span_hypnophrase("You lose the force you had on your memories."))) + to_chat(affected_carbon, span_big(span_bolddanger("You lose the force you had on your memories."))) /datum/reagent/medicine/mnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) From 680334436fcfbe88785a301c65ebb4ff9f01e746 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Fri, 29 May 2026 03:36:28 +0300 Subject: [PATCH 10/29] Update modular_oculis/modules/antimemetics/code/reality_anchor.dm Co-authored-by: Lucy --- modular_oculis/modules/antimemetics/code/reality_anchor.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index 086ce0debe0..8a9b34cd570 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -34,7 +34,8 @@ /obj/machinery/power/reality_anchor/examine(mob/user) . = ..() - . += on ? "[span_purple("You feel stable.")]" : null + if(on) + . += span_purple("You feel stable.") /obj/machinery/power/reality_anchor/update_icon_state() . = ..() From e404fcc2c329f82a2977ae749b0eb44659c73d7f Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Fri, 29 May 2026 03:36:35 +0300 Subject: [PATCH 11/29] Update modular_oculis/modules/antimemetics/code/reality_anchor.dm Co-authored-by: Lucy --- modular_oculis/modules/antimemetics/code/reality_anchor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index 8a9b34cd570..e711b28e60f 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -83,7 +83,7 @@ balloon_alert(user, "no power!") return on = !on - use_power = on ? ACTIVE_POWER_USE : IDLE_POWER_USE + update_use_power(on ? ACTIVE_POWER_USE : IDLE_POWER_USE) update_current_power_usage() playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) balloon_alert_to_viewers("[on ? null : "de"]activated!") From a53065989f54900bb1f9ffd24b3ce2bcba3f5d5e Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Fri, 29 May 2026 03:36:43 +0300 Subject: [PATCH 12/29] Update modular_oculis/modules/antimemetics/code/reality_anchor.dm Co-authored-by: Lucy --- modular_oculis/modules/antimemetics/code/reality_anchor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index e711b28e60f..66d4bc57eac 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -93,7 +93,7 @@ . = ..() if((machine_stat & NOPOWER) && on) on = FALSE - use_power = IDLE_POWER_USE + update_use_power(IDLE_POWER_USE) update_current_power_usage() playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) balloon_alert_to_viewers("deactivated!") From 7b274258289a00fe23924854adc0b79572b37b9f Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Fri, 29 May 2026 03:36:50 +0300 Subject: [PATCH 13/29] Update modular_oculis/modules/antimemetics/code/reality_anchor.dm Co-authored-by: Lucy --- modular_oculis/modules/antimemetics/code/reality_anchor.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index 66d4bc57eac..aa3b57800e9 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -97,7 +97,7 @@ update_current_power_usage() playsound(src, 'modular_nova/master_files/sound/effects/gmalfunction.ogg', 100, TRUE) balloon_alert_to_viewers("deactivated!") - update_icon() + update_appearance(UPDATE_ICON_STATE) /obj/machinery/power/reality_anchor/proc/overload() if(!on) From 914114a571c569ba11c643e922a51f24f04c1414 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sat, 30 May 2026 06:52:04 +0300 Subject: [PATCH 14/29] Update _traits.dm --- code/_globalvars/traits/_traits.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 996b55d9ec2..7cba4bd93c6 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -939,9 +939,11 @@ GLOBAL_LIST_INIT(traits_by_type, list( "TRAIT_SOMATIC_VOLATILITY" = TRAIT_SOMATIC_VOLATILITY, // OCULIS EDIT ADDITION START - OCULIS TRAITS + "TRAIT_TRADITIONAL_THINKER" = TRAIT_TRADITIONAL_THINKER, "TRAIT_AMNESTICS" = TRAIT_AMNESTICS, "TRAIT_MNESTICS" = TRAIT_MNESTICS, + // OCULIS EDIT ADDITION END ), // IRIS EDIT ADDITION END From b6dc57e6a3a13be040dc0fb94c0b1f7f3bef5682 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 00:52:49 +0300 Subject: [PATCH 15/29] more chemicals --- .../modules/antimemetics/code/amnestics.dm | 39 ++++++++++++++++++- .../modules/antimemetics/code/mnestics.dm | 27 ++++++++++++- 2 files changed, 63 insertions(+), 3 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index d82a3acee6a..9284b2cf55c 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -22,12 +22,17 @@ /datum/reagent/medicine/amnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) . = ..() if(!HAS_TRAIT(affected_carbon, TRAIT_MNESTICS)) - to_chat(affected_carbon, span_big(span_hypnophrase("You feel your memories slipping away."))) + to_chat(affected_carbon, span_big(span_hypnophrase("You feel specific memories slipping away."))) /datum/reagent/medicine/amnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) . = ..() if(!HAS_TRAIT(affected_carbon, TRAIT_MNESTICS)) - to_chat(affected_carbon, span_big(span_hypnophrase("You can't seem to remember what happened..."))) + to_chat(affected_carbon, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) + +/datum/reagent/medicine/amnestic/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolized_volume) + if(SPT_PROB(25, seconds_per_tick)) + affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) /datum/reagent/medicine/amnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) @@ -35,3 +40,33 @@ affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE + +/datum/reagent/medicine/amnestic_b + name = "Class B Amnestics" + description = "Retrograde amnesiac medicine." + color = "#a5a5a5" + overdose_threshold = 25 + ph = 7 + taste_description = "almonds" + chemical_flags = REAGENT_NO_RANDOM_RECIPE + metabolized_traits = list(TRAIT_AMNESTICS) + +/datum/reagent/medicine/amnestic_b/on_mob_metabolize(mob/living/carbon/affected_carbon) + . = ..() + to_chat(affected_carbon, span_big(span_hypnophrase("You feel your memories slipping away, starting with your most recent ones."))) + +/datum/reagent/medicine/amnestic_b/on_mob_end_metabolize(mob/living/carbon/affected_carbon) + . = ..() + to_chat(affected_carbon, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) + +/datum/reagent/medicine/amnestic_b/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolized_volume) + if(SPT_PROB(25, seconds_per_tick)) + affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + +/datum/reagent/medicine/amnestic_b/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) + if(SPT_PROB(25, seconds_per_tick)) + affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + return TRUE diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index 5f566b56510..d7c686fc115 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -9,7 +9,7 @@ reaction_tags = NONE /datum/reagent/medicine/mnestic - name = "Class Y Mnestics" + name = "Class W Mnestics" description = "You can never forget a dose of mnestics." color = "#a5a5a5" overdose_threshold = 25 @@ -35,4 +35,29 @@ affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE +/datum/reagent/medicine/mnestic_x + name = "Class X Mnestics" + description = "Retroactive memory repair." + color = "#a5a5a5" + overdose_threshold = 25 + ph = 7 + taste_description = "almonds" + chemical_flags = REAGENT_NO_RANDOM_RECIPE + purge_multiplier = 0.15 + +/datum/reagent/medicine/mnestic_x/on_mob_metabolize(mob/living/carbon/affected_carbon) + . = ..() + to_chat(affected_carbon, span_big(span_boldnicegreen("You start to remember that which you had forgotten."))) + +/datum/reagent/medicine/mnestic_x/on_mob_end_metabolize(mob/living/carbon/affected_carbon) + . = ..() + to_chat(affected_carbon, span_big(span_bolddanger("You remember what shouldn't be remembered. It was real after all..."))) + +/datum/reagent/medicine/mnestic_x/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) + affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + return TRUE From 35ee150718c09e475d1de2ac6e680d93f844d0c8 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 01:13:06 +0300 Subject: [PATCH 16/29] awawwa --- .../modules/antimemetics/code/amnestics.dm | 44 +++++++++---------- .../modules/antimemetics/code/mnestics.dm | 44 +++++++++---------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index 9284b2cf55c..1a3103b98d2 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -19,26 +19,26 @@ chemical_flags = REAGENT_NO_RANDOM_RECIPE metabolized_traits = list(TRAIT_AMNESTICS) -/datum/reagent/medicine/amnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/amnestic/on_mob_metabolize(mob/living/carbon/affected_mob) . = ..() - if(!HAS_TRAIT(affected_carbon, TRAIT_MNESTICS)) - to_chat(affected_carbon, span_big(span_hypnophrase("You feel specific memories slipping away."))) + if(!HAS_TRAIT(affected_mob, TRAIT_MNESTICS)) + to_chat(affected_mob, span_big(span_hypnophrase("You feel specific memories slipping away."))) -/datum/reagent/medicine/amnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/amnestic/on_mob_end_metabolize(mob/living/carbon/affected_mob) . = ..() - if(!HAS_TRAIT(affected_carbon, TRAIT_MNESTICS)) - to_chat(affected_carbon, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) + if(!HAS_TRAIT(affected_mob, TRAIT_MNESTICS)) + to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) /datum/reagent/medicine/amnestic/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolized_volume) if(SPT_PROB(25, seconds_per_tick)) - affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) -/datum/reagent/medicine/amnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) +/datum/reagent/medicine/amnestic/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) - affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE /datum/reagent/medicine/amnestic_b @@ -51,22 +51,22 @@ chemical_flags = REAGENT_NO_RANDOM_RECIPE metabolized_traits = list(TRAIT_AMNESTICS) -/datum/reagent/medicine/amnestic_b/on_mob_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/amnestic_b/on_mob_metabolize(mob/living/carbon/affected_mob) . = ..() - to_chat(affected_carbon, span_big(span_hypnophrase("You feel your memories slipping away, starting with your most recent ones."))) + to_chat(affected_mob, span_big(span_hypnophrase("You feel your memories slipping away, starting with your most recent ones."))) -/datum/reagent/medicine/amnestic_b/on_mob_end_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/amnestic_b/on_mob_end_metabolize(mob/living/carbon/affected_mob) . = ..() - to_chat(affected_carbon, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) + to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) /datum/reagent/medicine/amnestic_b/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolized_volume) if(SPT_PROB(25, seconds_per_tick)) - affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) -/datum/reagent/medicine/amnestic_b/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) +/datum/reagent/medicine/amnestic_b/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) - affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index d7c686fc115..aa02e9ec7fb 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -19,20 +19,20 @@ purge_multiplier = 0.15 metabolized_traits = list(TRAIT_MNESTICS) -/datum/reagent/medicine/mnestic/on_mob_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/mnestic/on_mob_metabolize(mob/living/carbon/affected_mob) . = ..() - to_chat(affected_carbon, span_big(span_boldnicegreen("You feel more in control of what you remember."))) + to_chat(affected_mob, span_big(span_boldnicegreen("You feel more in control of what you remember."))) -/datum/reagent/medicine/mnestic/on_mob_end_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/mnestic/on_mob_end_metabolize(mob/living/carbon/affected_mob) . = ..() - to_chat(affected_carbon, span_big(span_bolddanger("You lose the force you had on your memories."))) - -/datum/reagent/medicine/mnestic/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) - affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + to_chat(affected_mob, span_big(span_bolddanger("You lose the force you had on your memories."))) + +/datum/reagent/medicine/mnestic/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) + affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE /datum/reagent/medicine/mnestic_x @@ -45,19 +45,19 @@ chemical_flags = REAGENT_NO_RANDOM_RECIPE purge_multiplier = 0.15 -/datum/reagent/medicine/mnestic_x/on_mob_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/mnestic_x/on_mob_metabolize(mob/living/carbon/affected_mob) . = ..() - to_chat(affected_carbon, span_big(span_boldnicegreen("You start to remember that which you had forgotten."))) + to_chat(affected_mob, span_big(span_boldnicegreen("You start to remember that which you had forgotten."))) -/datum/reagent/medicine/mnestic_x/on_mob_end_metabolize(mob/living/carbon/affected_carbon) +/datum/reagent/medicine/mnestic_x/on_mob_end_metabolize(mob/living/carbon/affected_mob) . = ..() - to_chat(affected_carbon, span_big(span_bolddanger("You remember what shouldn't be remembered. It was real after all..."))) - -/datum/reagent/medicine/mnestic_x/overdose_process(mob/living/affected_carbon, seconds_per_tick, metabolization_ratio) - affected_carbon.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_carbon.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_carbon.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + to_chat(affected_mob, span_big(span_bolddanger("You remember what shouldn't be remembered. It was real after all..."))) + +/datum/reagent/medicine/mnestic_x/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) + affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) + affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE From 73914f5d48ff5b24d000b6885bf727df3bd123ae Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 01:13:22 +0300 Subject: [PATCH 17/29] Update amnestics.dm --- modular_oculis/modules/antimemetics/code/amnestics.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index 1a3103b98d2..c70341cc9d7 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -29,7 +29,7 @@ if(!HAS_TRAIT(affected_mob, TRAIT_MNESTICS)) to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) -/datum/reagent/medicine/amnestic/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolized_volume) +/datum/reagent/medicine/amnestic/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) From ffb9b93828492180bcb7435fccea512f7f7d81b4 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:02:11 +0300 Subject: [PATCH 18/29] CHANGES --- .../_globalvars/lists/objects.dm | 1 + .../modules/antimemetics/code/amnestics.dm | 12 ++++- .../modules/antimemetics/code/mnestics.dm | 9 ++++ .../antimemetics/code/reality_anchor.dm | 5 ++ modular_oculis/modules/antimemetics/readme.md | 1 + .../modules/redaction/code/admin.dm | 20 ++++++++ .../redaction/code/redaction_subsystem.dm | 47 +++++++++++++++++++ .../modules/redaction/code/speech.dm | 21 +++++++++ modular_oculis/modules/redaction/readme.md | 29 ++++++++++++ tgstation.dme | 4 ++ 10 files changed, 148 insertions(+), 1 deletion(-) create mode 100644 code/__DEFINES/~~oculis_defines/_globalvars/lists/objects.dm create mode 100644 modular_oculis/modules/redaction/code/admin.dm create mode 100644 modular_oculis/modules/redaction/code/redaction_subsystem.dm create mode 100644 modular_oculis/modules/redaction/code/speech.dm create mode 100644 modular_oculis/modules/redaction/readme.md diff --git a/code/__DEFINES/~~oculis_defines/_globalvars/lists/objects.dm b/code/__DEFINES/~~oculis_defines/_globalvars/lists/objects.dm new file mode 100644 index 00000000000..96fa6153b5b --- /dev/null +++ b/code/__DEFINES/~~oculis_defines/_globalvars/lists/objects.dm @@ -0,0 +1 @@ +GLOBAL_LIST_EMPTY(reality_anchors) diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index c70341cc9d7..dbf5b87fd28 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -41,6 +41,11 @@ affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE +/obj/item/reagent_containers/cup/bottle/amnestic + name = "class a amnestic bottle" + desc = "A small bottle of amnestics." + list_reagents = list(/datum/reagent/medicine/amnestic = 50) + /datum/reagent/medicine/amnestic_b name = "Class B Amnestics" description = "Retrograde amnesiac medicine." @@ -59,7 +64,7 @@ . = ..() to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) -/datum/reagent/medicine/amnestic_b/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolized_volume) +/datum/reagent/medicine/amnestic_b/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) @@ -70,3 +75,8 @@ affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE + +/obj/item/reagent_containers/cup/bottle/amnestic_b + name = "class b amnestic bottle" + desc = "A small bottle of strong amnestics." + list_reagents = list(/datum/reagent/medicine/amnestic = 50) diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index aa02e9ec7fb..5588b6bfc49 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -35,6 +35,11 @@ affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE +/obj/item/reagent_containers/cup/bottle/mnestic + name = "class w mnestic bottle" + desc = "A small bottle of mnestics." + list_reagents = list(/datum/reagent/medicine/mnestic = 50) + /datum/reagent/medicine/mnestic_x name = "Class X Mnestics" description = "Retroactive memory repair." @@ -61,3 +66,7 @@ affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) return TRUE +/obj/item/reagent_containers/cup/bottle/mnestic_x + name = "class x mnestic bottle" + desc = "A small bottle of strong mnestics." + list_reagents = list(/datum/reagent/medicine/mnestic_x = 50) diff --git a/modular_oculis/modules/antimemetics/code/reality_anchor.dm b/modular_oculis/modules/antimemetics/code/reality_anchor.dm index aa3b57800e9..6eef1264043 100644 --- a/modular_oculis/modules/antimemetics/code/reality_anchor.dm +++ b/modular_oculis/modules/antimemetics/code/reality_anchor.dm @@ -31,6 +31,11 @@ /obj/machinery/power/reality_anchor/Initialize(mapload) . = ..() connect_to_network() + GLOB.reality_anchors += src + +/obj/machinery/power/reality_anchor/Destroy() + GLOB.reality_anchors -= src + return ..() /obj/machinery/power/reality_anchor/examine(mob/user) . = ..() diff --git a/modular_oculis/modules/antimemetics/readme.md b/modular_oculis/modules/antimemetics/readme.md index f926b81b8d1..11df41e1603 100644 --- a/modular_oculis/modules/antimemetics/readme.md +++ b/modular_oculis/modules/antimemetics/readme.md @@ -19,6 +19,7 @@ This entire module contains everything relating to mechanical memetics, antimeme ### Defines: - `code/__DEFINES/~~oculis_defines/traits/declarations.dm` +- `code/__DEFINES/~~oculis_defines/_globalvars/lists/objects.dm` ### Included files that are not contained in this module: diff --git a/modular_oculis/modules/redaction/code/admin.dm b/modular_oculis/modules/redaction/code/admin.dm new file mode 100644 index 00000000000..b3d5c51bab1 --- /dev/null +++ b/modular_oculis/modules/redaction/code/admin.dm @@ -0,0 +1,20 @@ + +ADMIN_VERB(redact_word, R_ADMIN, "Redact Word", "Redacts a word from everyone in the game, replacing it with noise.", ADMIN_CATEGORY_EVENTS) + var/redacted_word = SSredaction.add_word(user.mob) + + if(!redacted_word) + return + + log_admin("[key_name(user.mob)] redacted the word: [redacted_word]") + message_admins("[key_name_admin(user.mob)] redacted the word: [redacted_word]") + SSblackbox.record_feedback("tally", "redact_word", 1, "Redacted the word: [redacted_word]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +ADMIN_VERB(allow_word, R_ADMIN, "Allow Word", "Allows a word to be spoken by everyone in the game.", ADMIN_CATEGORY_EVENTS) + if(!length(SSredaction.redacted_words)) + return + + var/allowed_word = SSredaction.remove_word(user.mob) + + log_admin("[key_name(user.mob)] allowed the word: [allowed_word]") + message_admins("[key_name_admin(user.mob)] allowed the word: [allowed_word]") + SSblackbox.record_feedback("tally", "allow_word", 1, "Allowed the word: [allowed_word]") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/modular_oculis/modules/redaction/code/redaction_subsystem.dm b/modular_oculis/modules/redaction/code/redaction_subsystem.dm new file mode 100644 index 00000000000..f2c160dfaf2 --- /dev/null +++ b/modular_oculis/modules/redaction/code/redaction_subsystem.dm @@ -0,0 +1,47 @@ +SUBSYSTEM_DEF(redaction) + name = "1984" //Because we are redacting text. Literally 1984. + ss_flags = SS_NO_FIRE + + var/static/regex/redacted_words_regex + var/list/redacted_words + +/datum/controller/subsystem/redaction/Initialize() + redacted_words = new() + return SS_INIT_SUCCESS + +/datum/controller/subsystem/redaction/proc/add_word(mob/user) + var/word = tgui_input_text(user, "Enter a word to redact from everyone.", "Word Redaction", null) + if(!word) + return + redacted_words |= lowertext(word) + reinitialize_regex() + return word + +/datum/controller/subsystem/redaction/proc/remove_word(mob/user) + var/word = tgui_input_list(user, "Select a word to approve.", "Word Approval", redacted_words, null) + if(!word) + return + redacted_words -= lowertext(word) + reinitialize_regex() + return word + +/datum/controller/subsystem/redaction/proc/reinitialize_regex() + var/list/filter = list() + for(var/line as anything in redacted_words) + filter += REGEX_QUOTE(line) + redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")])\\b", "i") : null + +#define REDACTION "█" + +/datum/controller/subsystem/redaction/proc/redact_sentence(sentence, mob/user) + var/character_count = length(SSredaction.redacted_words_regex.match) + + var/generated_redaction = "" + for(var/i in 1 to character_count) + generated_redaction += REDACTION + + var/redacted_sentence = replacetext(sentence, SSredaction.redacted_words_regex.match, generated_redaction) + message_admins("[ADMIN_LOOKUPFLW(user)]] attempted to say the word: [SSredaction.redacted_words_regex.match]") + return redacted_sentence + +#undef REDACTION diff --git a/modular_oculis/modules/redaction/code/speech.dm b/modular_oculis/modules/redaction/code/speech.dm new file mode 100644 index 00000000000..fc910ab2746 --- /dev/null +++ b/modular_oculis/modules/redaction/code/speech.dm @@ -0,0 +1,21 @@ +#define REDACTION_FILTER_CHECK(T) (SSredaction.redacted_words_regex && findtext(T, SSredaction.redacted_words_regex)) + +/mob/living/say( + message, + bubble_type, + list/spans = list(), + sanitize = TRUE, + datum/language/language, + ignore_spam = FALSE, + forced, + filterproof = FALSE, + message_range = 7, + datum/saymode/saymode, + list/message_mods = list(), +) + if(!lowertext(REDACTION_FILTER_CHECK(message))) + return ..() + message = SSredaction.redact_sentence(message, src) + ..() + +#undef REDACTION_FILTER_CHECK diff --git a/modular_oculis/modules/redaction/readme.md b/modular_oculis/modules/redaction/readme.md new file mode 100644 index 00000000000..7354c647f19 --- /dev/null +++ b/modular_oculis/modules/redaction/readme.md @@ -0,0 +1,29 @@ +https://github.com/Monkestation/OculisStation/pull/255 + +## \ + +Module ID: REDACTED + +### Description: + +This module is for events and redacting certain words from player speech, configured by admins inround. + +### TG Proc/File Changes: + +- N/A + +### Modular Overrides: + +- `/mob/living/say()` + +### Defines: + +- N/A + +### Included files that are not contained in this module: + +- N/A + +### Credits: + +XeonMations diff --git a/tgstation.dme b/tgstation.dme index 45d3cb4c4fa..6c21efa2ad3 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -556,6 +556,7 @@ #include "code\__DEFINES\~~oculis_defines\plexora.dm" #include "code\__DEFINES\~~oculis_defines\quirks.dm" #include "code\__DEFINES\~~oculis_defines\role_preferences.dm" +#include "code\__DEFINES\~~oculis_defines\_globalvars\lists\objects.dm" #include "code\__DEFINES\~~oculis_defines\dcs\signals\signals_datum.dm" #include "code\__DEFINES\~~oculis_defines\dcs\signals\signals_mind.dm" #include "code\__DEFINES\~~oculis_defines\traits\declarations.dm" @@ -10135,6 +10136,9 @@ #include "modular_oculis\modules\quirks\affluent.dm" #include "modular_oculis\modules\quirks\scarred_eye.dm" #include "modular_oculis\modules\quirks\stowaway.dm" +#include "modular_oculis\modules\redaction\code\admin.dm" +#include "modular_oculis\modules\redaction\code\redaction_subsystem.dm" +#include "modular_oculis\modules\redaction\code\speech.dm" #include "modular_oculis\modules\relays\code\relays.dm" #include "modular_oculis\modules\slime_luxpens\code\hypospray.dm" #include "modular_oculis\modules\slime_luxpens\code\medicine_reagents.dm" From 42691b831f30d7afeff3d26bd99841fe7a07a549 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:16:34 +0300 Subject: [PATCH 19/29] Update redaction_subsystem.dm --- modular_oculis/modules/redaction/code/redaction_subsystem.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/redaction/code/redaction_subsystem.dm b/modular_oculis/modules/redaction/code/redaction_subsystem.dm index f2c160dfaf2..2a6787e0b49 100644 --- a/modular_oculis/modules/redaction/code/redaction_subsystem.dm +++ b/modular_oculis/modules/redaction/code/redaction_subsystem.dm @@ -27,7 +27,7 @@ SUBSYSTEM_DEF(redaction) /datum/controller/subsystem/redaction/proc/reinitialize_regex() var/list/filter = list() - for(var/line as anything in redacted_words) + for(var/line in redacted_words) filter += REGEX_QUOTE(line) redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")])\\b", "i") : null From dfcb822f987539a71f285a963b502135f338da91 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:25:07 +0300 Subject: [PATCH 20/29] awwawa --- .../redaction/code/redaction_subsystem.dm | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/modular_oculis/modules/redaction/code/redaction_subsystem.dm b/modular_oculis/modules/redaction/code/redaction_subsystem.dm index 2a6787e0b49..2ac43697663 100644 --- a/modular_oculis/modules/redaction/code/redaction_subsystem.dm +++ b/modular_oculis/modules/redaction/code/redaction_subsystem.dm @@ -10,7 +10,7 @@ SUBSYSTEM_DEF(redaction) return SS_INIT_SUCCESS /datum/controller/subsystem/redaction/proc/add_word(mob/user) - var/word = tgui_input_text(user, "Enter a word to redact from everyone.", "Word Redaction", null) + var/word = tgui_input_text(user, "Enter a word to redact from everyone.", "Word Redaction", null, encode = FALSE) if(!word) return redacted_words |= lowertext(word) @@ -31,17 +31,17 @@ SUBSYSTEM_DEF(redaction) filter += REGEX_QUOTE(line) redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")])\\b", "i") : null -#define REDACTION "█" /datum/controller/subsystem/redaction/proc/redact_sentence(sentence, mob/user) - var/character_count = length(SSredaction.redacted_words_regex.match) - - var/generated_redaction = "" - for(var/i in 1 to character_count) - generated_redaction += REDACTION - - var/redacted_sentence = replacetext(sentence, SSredaction.redacted_words_regex.match, generated_redaction) + var/redacted_sentence = replacetext_char(sentence, SSredaction.redacted_words_regex, GLOBAL_PROC_REF(replace_with_redactions)) message_admins("[ADMIN_LOOKUPFLW(user)]] attempted to say the word: [SSredaction.redacted_words_regex.match]") return redacted_sentence +#define REDACTION "█" + +/proc/replace_with_redactions(text) + . = "" + for(var/i = 1 to length_char(text)) + . += REDACTION + #undef REDACTION From 8d0b04f4d4a9ba0d3c5133c168e08405d4ee3808 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:25:36 +0300 Subject: [PATCH 21/29] Update redaction_subsystem.dm --- modular_oculis/modules/redaction/code/redaction_subsystem.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/redaction/code/redaction_subsystem.dm b/modular_oculis/modules/redaction/code/redaction_subsystem.dm index 2ac43697663..0daae3fa448 100644 --- a/modular_oculis/modules/redaction/code/redaction_subsystem.dm +++ b/modular_oculis/modules/redaction/code/redaction_subsystem.dm @@ -29,7 +29,7 @@ SUBSYSTEM_DEF(redaction) var/list/filter = list() for(var/line in redacted_words) filter += REGEX_QUOTE(line) - redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")])\\b", "i") : null + redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")](?:|es|ed|ing|er|ers|est|ly|ness|ment|ments)?)\\b", "i") : null /datum/controller/subsystem/redaction/proc/redact_sentence(sentence, mob/user) From f98849284c9ac3d0fcda901fdf1b0c66135f1bba Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:26:39 +0300 Subject: [PATCH 22/29] Update redaction_subsystem.dm --- modular_oculis/modules/redaction/code/redaction_subsystem.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modular_oculis/modules/redaction/code/redaction_subsystem.dm b/modular_oculis/modules/redaction/code/redaction_subsystem.dm index 0daae3fa448..f72f925c1d4 100644 --- a/modular_oculis/modules/redaction/code/redaction_subsystem.dm +++ b/modular_oculis/modules/redaction/code/redaction_subsystem.dm @@ -13,7 +13,7 @@ SUBSYSTEM_DEF(redaction) var/word = tgui_input_text(user, "Enter a word to redact from everyone.", "Word Redaction", null, encode = FALSE) if(!word) return - redacted_words |= lowertext(word) + redacted_words |= LOWER_TEXT(word) reinitialize_regex() return word @@ -21,7 +21,7 @@ SUBSYSTEM_DEF(redaction) var/word = tgui_input_list(user, "Select a word to approve.", "Word Approval", redacted_words, null) if(!word) return - redacted_words -= lowertext(word) + redacted_words -= LOWER_TEXT(word) reinitialize_regex() return word From 698df9b1b55756ed556692f9e0da4737d1bf1a05 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:27:33 +0300 Subject: [PATCH 23/29] Update speech.dm --- modular_oculis/modules/redaction/code/speech.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/redaction/code/speech.dm b/modular_oculis/modules/redaction/code/speech.dm index fc910ab2746..875f5e8e14e 100644 --- a/modular_oculis/modules/redaction/code/speech.dm +++ b/modular_oculis/modules/redaction/code/speech.dm @@ -13,7 +13,7 @@ datum/saymode/saymode, list/message_mods = list(), ) - if(!lowertext(REDACTION_FILTER_CHECK(message))) + if(!LOWER_TEXT(REDACTION_FILTER_CHECK(message))) return ..() message = SSredaction.redact_sentence(message, src) ..() From b3ec350fb01bca61bd52a0358a8cfff051961da3 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 02:43:34 +0300 Subject: [PATCH 24/29] bugfixes with shion --- modular_oculis/modules/redaction/code/redaction_subsystem.dm | 3 +-- modular_oculis/modules/redaction/code/speech.dm | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/modular_oculis/modules/redaction/code/redaction_subsystem.dm b/modular_oculis/modules/redaction/code/redaction_subsystem.dm index f72f925c1d4..6126d4f7276 100644 --- a/modular_oculis/modules/redaction/code/redaction_subsystem.dm +++ b/modular_oculis/modules/redaction/code/redaction_subsystem.dm @@ -29,8 +29,7 @@ SUBSYSTEM_DEF(redaction) var/list/filter = list() for(var/line in redacted_words) filter += REGEX_QUOTE(line) - redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")](?:|es|ed|ing|er|ers|est|ly|ness|ment|ments)?)\\b", "i") : null - + redacted_words_regex = filter.len ? regex("\\b([jointext(filter, "|")](?:s|es|ed|ing|er|ers|est|ly|ness|ment|ments)?)\\b", "gi") : null /datum/controller/subsystem/redaction/proc/redact_sentence(sentence, mob/user) var/redacted_sentence = replacetext_char(sentence, SSredaction.redacted_words_regex, GLOBAL_PROC_REF(replace_with_redactions)) diff --git a/modular_oculis/modules/redaction/code/speech.dm b/modular_oculis/modules/redaction/code/speech.dm index 875f5e8e14e..2ced8ebe835 100644 --- a/modular_oculis/modules/redaction/code/speech.dm +++ b/modular_oculis/modules/redaction/code/speech.dm @@ -13,7 +13,7 @@ datum/saymode/saymode, list/message_mods = list(), ) - if(!LOWER_TEXT(REDACTION_FILTER_CHECK(message))) + if(!REDACTION_FILTER_CHECK(message)) return ..() message = SSredaction.redact_sentence(message, src) ..() From fdabc31e9baa4083b4f449f7d832c8197ab5dcb3 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 04:43:22 +0300 Subject: [PATCH 25/29] MORE REDACTIONS --- code/__DEFINES/~~oculis_defines/redaction.dm | 1 + code/__HELPERS/priority_announce.dm | 5 ++ .../programs/chatroom/ntnrc_client.dm | 4 ++ .../modules/antimemetics/code/amnestics.dm | 16 ++--- .../modules/antimemetics/code/mnestics.dm | 16 ++--- modular_oculis/modules/antimemetics/readme.md | 3 +- .../modules/redaction/code/checks.dm | 71 +++++++++++++++++++ .../modules/redaction/code/speech.dm | 21 ------ tgstation.dme | 3 +- 9 files changed, 101 insertions(+), 39 deletions(-) create mode 100644 code/__DEFINES/~~oculis_defines/redaction.dm create mode 100644 modular_oculis/modules/redaction/code/checks.dm delete mode 100644 modular_oculis/modules/redaction/code/speech.dm diff --git a/code/__DEFINES/~~oculis_defines/redaction.dm b/code/__DEFINES/~~oculis_defines/redaction.dm new file mode 100644 index 00000000000..dd7aaf05e67 --- /dev/null +++ b/code/__DEFINES/~~oculis_defines/redaction.dm @@ -0,0 +1 @@ +#define REDACTION_FILTER_CHECK(T) (SSredaction.redacted_words_regex && findtext(T, SSredaction.redacted_words_regex)) diff --git a/code/__HELPERS/priority_announce.dm b/code/__HELPERS/priority_announce.dm index c8e201a0703..1187f3cbd5f 100644 --- a/code/__HELPERS/priority_announce.dm +++ b/code/__HELPERS/priority_announce.dm @@ -217,6 +217,11 @@ if(target.client?.prefs.read_preference(/datum/preference/toggle/sound_announcements)) SEND_SOUND(target, sound(sound_to_play)) */ + + // OCULIS EDIT ADDITION START + if(REDACTION_FILTER_CHECK(announcement)) + announcement = SSredaction.redact_sentence(announcement, usr) + // OCULIS EDIT ADDITION END if(!sound_override) sound_override = SSstation.announcer.get_rand_alert_sound() else if(SSstation.announcer.event_sounds[sound_override]) diff --git a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm index 6bdf21eb367..ff31f998fc8 100644 --- a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm @@ -73,6 +73,10 @@ channel.add_client(src) return TRUE + // OCULIS EDIT START + if(REDACTION_FILTER_CHECK(message)) + message = SSredaction.redact_sentence(message, user) + // OCULIS EDIT END channel.add_message(message, username) var/mob/living/user = usr user.log_talk(message, LOG_CHAT, tag = "as [username] to channel [channel.title]") diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index dbf5b87fd28..342419a1028 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -31,14 +31,14 @@ /datum/reagent/medicine/amnestic/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) - affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) /datum/reagent/medicine/amnestic/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_confusion_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) return TRUE /obj/item/reagent_containers/cup/bottle/amnestic @@ -66,14 +66,14 @@ /datum/reagent/medicine/amnestic_b/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) - affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) /datum/reagent/medicine/amnestic_b/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.25 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_confusion_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) return TRUE /obj/item/reagent_containers/cup/bottle/amnestic_b diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index 5588b6bfc49..2caa20432f8 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -29,10 +29,10 @@ /datum/reagent/medicine/mnestic/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_confusion_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_eye_blur_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) return TRUE /obj/item/reagent_containers/cup/bottle/mnestic @@ -60,10 +60,10 @@ /datum/reagent/medicine/mnestic_x/overdose_process(mob/living/affected_mob, seconds_per_tick, metabolization_ratio) affected_mob.adjust_organ_loss(ORGAN_SLOT_BRAIN, 0.5 * seconds_per_tick * metabolization_ratio, required_organ_flag = affected_organ_flags) - affected_mob.adjust_confusion(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_staggered(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_eye_blur(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) - affected_mob.adjust_drowsiness(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio) + affected_mob.adjust_confusion_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_eye_blur_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) + affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) return TRUE /obj/item/reagent_containers/cup/bottle/mnestic_x diff --git a/modular_oculis/modules/antimemetics/readme.md b/modular_oculis/modules/antimemetics/readme.md index 11df41e1603..8d1425b80fa 100644 --- a/modular_oculis/modules/antimemetics/readme.md +++ b/modular_oculis/modules/antimemetics/readme.md @@ -10,7 +10,7 @@ This entire module contains everything relating to mechanical memetics, antimeme ### TG Proc/File Changes: -- N/A +- `code/__HELPERS/priority_announce.dm` ### Modular Overrides: @@ -20,6 +20,7 @@ This entire module contains everything relating to mechanical memetics, antimeme - `code/__DEFINES/~~oculis_defines/traits/declarations.dm` - `code/__DEFINES/~~oculis_defines/_globalvars/lists/objects.dm` +- `code/__DEFINES/~~oculis_defines/redaction.dm` ### Included files that are not contained in this module: diff --git a/modular_oculis/modules/redaction/code/checks.dm b/modular_oculis/modules/redaction/code/checks.dm new file mode 100644 index 00000000000..a87542ecd66 --- /dev/null +++ b/modular_oculis/modules/redaction/code/checks.dm @@ -0,0 +1,71 @@ +/mob/living/say( + message, + bubble_type, + list/spans = list(), + sanitize = TRUE, + datum/language/language, + ignore_spam = FALSE, + forced, + filterproof = FALSE, + message_range = 7, + datum/saymode/saymode, + list/message_mods = list(), +) + if(!REDACTION_FILTER_CHECK(message)) + return ..() + message = SSredaction.redact_sentence(message, src) + ..() + +/obj/item/paper/add_raw_text(text, font, color, bold, advanced_html, mob/user) + if(!REDACTION_FILTER_CHECK(text)) + return ..() + text = SSredaction.redact_sentence(text, user) + return ..() + +/mob/living/treat_message(message, tts_message, tts_filter, capitalize_message = TRUE) + if(!REDACTION_FILTER_CHECK(message)) + return ..() + message = SSredaction.redact_sentence(message, src) + return ..() + +/datum/action/cooldown/spell/pointed/telepathy/send_thought(mob/living/caster, mob/living/target, message) + if(!REDACTION_FILTER_CHECK(message)) + return ..() + message = SSredaction.redact_sentence(message, src) + return ..() + +/datum/signal/subspace/messaging/tablet_message/format_message() + if(!REDACTION_FILTER_CHECK(data["message"])) + return ..() + data["message"] = SSredaction.redact_sentence(data["message"], src) + return ..() + +/datum/pda_chat/add_message(datum/pda_message/message, show_in_recents = TRUE) + if(!REDACTION_FILTER_CHECK(message.message)) + return ..() + message.message = SSredaction.redact_sentence(message.message, src) + return ..() + +/datum/computer_file/program/messenger/sanitize_pda_message(message, mob/sender) + if(!REDACTION_FILTER_CHECK(message)) + return ..() + message = SSredaction.redact_sentence(message, sender) + return ..() + +/datum/ntnet_conversation/add_message(message, username) + if(!REDACTION_FILTER_CHECK(message)) + return ..() + message = SSredaction.redact_sentence(message, src) + return ..() + +/datum/nifsoft/soul_poem/add_message(sender_identifier, received_name, received_message) + if(!REDACTION_FILTER_CHECK(received_message)) + return ..() + received_message = SSredaction.redact_sentence(received_message, src) + return ..() + +/datum/computer_file/program/notepad/ui_data(mob/user) + if(!REDACTION_FILTER_CHECK(written_note)) + return ..() + written_note = SSredaction.redact_sentence(written_note, user) + return ..() diff --git a/modular_oculis/modules/redaction/code/speech.dm b/modular_oculis/modules/redaction/code/speech.dm deleted file mode 100644 index 2ced8ebe835..00000000000 --- a/modular_oculis/modules/redaction/code/speech.dm +++ /dev/null @@ -1,21 +0,0 @@ -#define REDACTION_FILTER_CHECK(T) (SSredaction.redacted_words_regex && findtext(T, SSredaction.redacted_words_regex)) - -/mob/living/say( - message, - bubble_type, - list/spans = list(), - sanitize = TRUE, - datum/language/language, - ignore_spam = FALSE, - forced, - filterproof = FALSE, - message_range = 7, - datum/saymode/saymode, - list/message_mods = list(), -) - if(!REDACTION_FILTER_CHECK(message)) - return ..() - message = SSredaction.redact_sentence(message, src) - ..() - -#undef REDACTION_FILTER_CHECK diff --git a/tgstation.dme b/tgstation.dme index 6c21efa2ad3..63a1bb98682 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -555,6 +555,7 @@ #include "code\__DEFINES\~~oculis_defines\mobs.dm" #include "code\__DEFINES\~~oculis_defines\plexora.dm" #include "code\__DEFINES\~~oculis_defines\quirks.dm" +#include "code\__DEFINES\~~oculis_defines\redaction.dm" #include "code\__DEFINES\~~oculis_defines\role_preferences.dm" #include "code\__DEFINES\~~oculis_defines\_globalvars\lists\objects.dm" #include "code\__DEFINES\~~oculis_defines\dcs\signals\signals_datum.dm" @@ -10137,8 +10138,8 @@ #include "modular_oculis\modules\quirks\scarred_eye.dm" #include "modular_oculis\modules\quirks\stowaway.dm" #include "modular_oculis\modules\redaction\code\admin.dm" +#include "modular_oculis\modules\redaction\code\checks.dm" #include "modular_oculis\modules\redaction\code\redaction_subsystem.dm" -#include "modular_oculis\modules\redaction\code\speech.dm" #include "modular_oculis\modules\relays\code\relays.dm" #include "modular_oculis\modules\slime_luxpens\code\hypospray.dm" #include "modular_oculis\modules\slime_luxpens\code\medicine_reagents.dm" From a0d4008a97238a4588e4c4bf8ae35c75e6b03642 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 04:47:02 +0300 Subject: [PATCH 26/29] Update ntnrc_client.dm --- .../file_system/programs/chatroom/ntnrc_client.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm index ff31f998fc8..2daf045feaa 100644 --- a/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/chatroom/ntnrc_client.dm @@ -75,7 +75,7 @@ // OCULIS EDIT START if(REDACTION_FILTER_CHECK(message)) - message = SSredaction.redact_sentence(message, user) + message = SSredaction.redact_sentence(message, usr) // OCULIS EDIT END channel.add_message(message, username) var/mob/living/user = usr From 80afc9f9a62c0531d736989c6ce90ca7465a3c36 Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 04:55:29 +0300 Subject: [PATCH 27/29] Update amnestics.dm --- modular_oculis/modules/antimemetics/code/amnestics.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index 342419a1028..64bed4c0e22 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -29,7 +29,7 @@ if(!HAS_TRAIT(affected_mob, TRAIT_MNESTICS)) to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) -/datum/reagent/medicine/amnestic/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) +/datum/reagent/medicine/amnestic/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) @@ -64,7 +64,7 @@ . = ..() to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) -/datum/reagent/medicine/amnestic_b/metabolize_reagent(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) +/datum/reagent/medicine/amnestic_b/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) From fbb26b8b1268432893851a324ca9a9943b9f155f Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Sun, 31 May 2026 10:53:13 +0300 Subject: [PATCH 28/29] these people cant be trusted with remembering --- modular_oculis/modules/antimemetics/code/amnestics.dm | 2 ++ modular_oculis/modules/antimemetics/code/mnestics.dm | 10 ---------- 2 files changed, 2 insertions(+), 10 deletions(-) diff --git a/modular_oculis/modules/antimemetics/code/amnestics.dm b/modular_oculis/modules/antimemetics/code/amnestics.dm index 64bed4c0e22..d49917aff0c 100644 --- a/modular_oculis/modules/antimemetics/code/amnestics.dm +++ b/modular_oculis/modules/antimemetics/code/amnestics.dm @@ -30,6 +30,7 @@ to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) /datum/reagent/medicine/amnestic/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) + . = ..() if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) @@ -65,6 +66,7 @@ to_chat(affected_mob, span_big(span_hypnophrase("You can't seem to remember what you forgot..."))) /datum/reagent/medicine/amnestic_b/on_mob_life(mob/living/carbon/affected_mob, seconds_per_tick, metabolization_ratio) + . = ..() if(SPT_PROB(25, seconds_per_tick)) affected_mob.adjust_drowsiness_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) affected_mob.adjust_staggered_up_to(0.5 SECONDS * normalise_creation_purity() * seconds_per_tick * metabolization_ratio, 30 SECONDS) diff --git a/modular_oculis/modules/antimemetics/code/mnestics.dm b/modular_oculis/modules/antimemetics/code/mnestics.dm index 2caa20432f8..a6f29ca1138 100644 --- a/modular_oculis/modules/antimemetics/code/mnestics.dm +++ b/modular_oculis/modules/antimemetics/code/mnestics.dm @@ -1,13 +1,3 @@ -/datum/chemical_reaction/mnestic - results = list(/datum/reagent/medicine/mnestic = 4) - required_reagents = list( - /datum/reagent/medicine/neurine = 1, - /datum/reagent/medicine/rezadone = 1, - /datum/reagent/medicine/psicodine = 1, - /datum/reagent/medicine/modafinil = 1, - ) - reaction_tags = NONE - /datum/reagent/medicine/mnestic name = "Class W Mnestics" description = "You can never forget a dose of mnestics." From cdbd23b31c16734a8f691dd1d514a5de693c863c Mon Sep 17 00:00:00 2001 From: XeonMations <62395746+XeonMations@users.noreply.github.com> Date: Wed, 10 Jun 2026 15:47:34 +0300 Subject: [PATCH 29/29] tab_indent --- code/_globalvars/traits/_traits.dm | 2 +- code/_globalvars/traits/admin_tooling.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/_globalvars/traits/_traits.dm b/code/_globalvars/traits/_traits.dm index 80e689fde0d..fda938ece93 100644 --- a/code/_globalvars/traits/_traits.dm +++ b/code/_globalvars/traits/_traits.dm @@ -941,7 +941,7 @@ GLOBAL_LIST_INIT(traits_by_type, list( // OCULIS EDIT ADDITION START - OCULIS TRAITS "TRAIT_TRADITIONAL_THINKER" = TRAIT_TRADITIONAL_THINKER, "TRAIT_NO_MAIL" = TRAIT_NO_MAIL, - "TRAIT_AMNESTICS" = TRAIT_AMNESTICS, + "TRAIT_AMNESTICS" = TRAIT_AMNESTICS, "TRAIT_MNESTICS" = TRAIT_MNESTICS, // OCULIS EDIT ADDITION END ), diff --git a/code/_globalvars/traits/admin_tooling.dm b/code/_globalvars/traits/admin_tooling.dm index ee57fb48497..6b8309acc88 100644 --- a/code/_globalvars/traits/admin_tooling.dm +++ b/code/_globalvars/traits/admin_tooling.dm @@ -523,7 +523,7 @@ GLOBAL_LIST_INIT(admin_visible_traits, list( // OCULIS EDIT ADDITION START - OCULIS TRAITS "TRAIT_TRADITIONAL_THINKER" = TRAIT_TRADITIONAL_THINKER, - "TRAIT_NO_MAIL" = TRAIT_NO_MAIL, + "TRAIT_NO_MAIL" = TRAIT_NO_MAIL, "TRAIT_AMNESTICS" = TRAIT_AMNESTICS, "TRAIT_MNESTICS" = TRAIT_MNESTICS, // OCULIS EDIT ADDITION END