From e7d46247e0d3a71fa77cf08f3c0e7d2b8bd8d20d Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 08:00:08 -0400 Subject: [PATCH 01/39] modkit sprites --- icons/obj/anomalykits.dmi | Bin 0 -> 516 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/obj/anomalykits.dmi diff --git a/icons/obj/anomalykits.dmi b/icons/obj/anomalykits.dmi new file mode 100644 index 0000000000000000000000000000000000000000..64dac4b965ce38a5b387cd2fdf88504436d4260b GIT binary patch literal 516 zcmV+f0{i`mP)V=-0C)j)j(4ihU%quXn{0003)NklhS`5uo) zz{E>n00v+H24DaNU;qYSfM1kt+ilY{D2k#R=Xs7OipVgB%oqBEYnq0-t`Wy^H&;~^ zvMeJ(7&^ZffTAc!(-dV{F2@LhfD~Xo|Mcw^7qi2001U%Gk|fY|9iHcr103C7;rZnW z`ksdKW}gPYvaD8B)zup?O%q`ll6Aml{>kGFuGM3@4%l44U-#hH`MnnGI8M8KilPWf zlDaw9b;(WvW$w3&?+<(}Uc2#U`HlvcG^fDiJ7Dqv>tA76mRH-r_kH?f@a_z=tsQKO zb3E)GjPoBr-2p@AGeF-(O!hAD---bkfB_hQ0T_S*rdvNshIBBl4Lali0000 Date: Thu, 16 Jul 2026 08:26:11 -0400 Subject: [PATCH 02/39] modularization --- .../modules/anomalykits/icons}/obj/anomalykits.dmi | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename {icons => modular_oculis/modules/anomalykits/icons}/obj/anomalykits.dmi (100%) diff --git a/icons/obj/anomalykits.dmi b/modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi similarity index 100% rename from icons/obj/anomalykits.dmi rename to modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi From dd11b590cdae5ee3ffaeceb5aeca1b90e78ec208 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 08:47:35 -0400 Subject: [PATCH 03/39] blank modkit --- .../projectiles/guns/energy/kinetic_accelerator.dm | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index c91985e71ea5..795b9a961402 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -679,6 +679,17 @@ KA.trigger_guard = TRIGGER_GUARD_NORMAL ..() +//OCULIS EDIT ADDITION START - ANOMALY_KITS + +//Blank PK modkit, able to be fit with an anomaly core +/obj/item/borg/upgrade/modkit/blank + name = "blank anomaly kit" + desc = "A specialized PK anomaly modkit. This one is currently empty, awaiting an anomaly core for completion." + cost = 10 + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykitempty" + +//OCULIS EDIT ADDITION END //Cosmetic From 6f3dde72bb70ed03459120589759fa588fbe440b Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 08:55:52 -0400 Subject: [PATCH 04/39] Anomaly interaction code Taken mostly from reactive anomaly armor's code --- .../guns/energy/kinetic_accelerator.dm | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 795b9a961402..927e56730e4b 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -689,6 +689,21 @@ icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykitempty" +/obj/item/borg/upgrade/modkit/blank/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + var/static/list/anomaly_kit_types = list( + + ) + + if(istype(tool, /obj/item/assembly/signaler/anomaly)) + var/obj/item/assembly/signaler/anomaly/anomaly = tool + var/anomkit_path = is_path_in_list(anomaly.anomaly_type, anomaly_kit_types, TRUE) + to_chat(user, span_notice("You insert [anomaly] into the modkit, and it gently hums to life.")) + new anomkit_path(get_turf(src)) + qdel(src) + qdel(anomaly) + return ITEM_INTERACT_SUCCESS + //OCULIS EDIT ADDITION END //Cosmetic From 0f485c548f487e6cb72bcc7047af93764e343e0e Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 09:59:43 -0400 Subject: [PATCH 05/39] gravitic pulverizer modkit --- .../guns/energy/kinetic_accelerator.dm | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 927e56730e4b..d27193099bb0 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -692,7 +692,7 @@ /obj/item/borg/upgrade/modkit/blank/item_interaction(mob/living/user, obj/item/tool, list/modifiers) . = ..() var/static/list/anomaly_kit_types = list( - + /obj/effect/anomaly/grav = /obj/item/borg/upgrade/modkit/cooldown/gravity, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -704,6 +704,25 @@ qdel(anomaly) return ITEM_INTERACT_SUCCESS +/obj/item/borg/upgrade/modkit/cooldown/gravity + name = "gravitic pulverizer" + desc = "A specialized PK anomaly modkit. This one vastly increases the weapon's damage at the cost of cooldown, as well as allowing it to knock targets back." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = -10 + cost = 30 + +/obj/item/borg/upgrade/modkit/cooldown/gravity/modify_projectile(obj/projectile/kinetic/K) + K.damage -= modifier * 5 + +/obj/item/borg/upgrade/modkit/cooldown/gravity/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + var/relative_direction = get_cardinal_dir(src, target) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + . = ..() + if(!QDELETED(target)) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + //OCULIS EDIT ADDITION END //Cosmetic From 06f6b42a7397512fc2fd82afa14b5a14f923de00 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 10:05:27 -0400 Subject: [PATCH 06/39] failsafe --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index d27193099bb0..fe37ad9e3250 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -698,6 +698,8 @@ if(istype(tool, /obj/item/assembly/signaler/anomaly)) var/obj/item/assembly/signaler/anomaly/anomaly = tool var/anomkit_path = is_path_in_list(anomaly.anomaly_type, anomaly_kit_types, TRUE) + if(!anomkit_path) + anomkit_path = /obj/item/borg/upgrade/modkit/cooldown/gravity //If an anomaly is inserted without a specifically coded modifier, give the gravity one so that the player isn't unrewarded to_chat(user, span_notice("You insert [anomaly] into the modkit, and it gently hums to life.")) new anomkit_path(get_turf(src)) qdel(src) From ee6971b108ea5cc6059ecb9c85b3ca22b656d594 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 11:02:30 -0400 Subject: [PATCH 07/39] storm capacitor modkit --- .../guns/energy/kinetic_accelerator.dm | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index fe37ad9e3250..0bec2323eb82 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -693,6 +693,7 @@ . = ..() var/static/list/anomaly_kit_types = list( /obj/effect/anomaly/grav = /obj/item/borg/upgrade/modkit/cooldown/gravity, + /obj/effect/anomaly/weather = /obj/item/borg/upgrade/modkit/weather, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -725,6 +726,38 @@ var/whack_speed = (2) target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) +/obj/item/borg/upgrade/modkit/weather + name = "storm capacitor" + desc = "A specialized PK anomaly modkit. This one allows the weapon to call lightning." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + cost = 40 + +/obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) + addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 2 SECONDS) + +/obj/item/borg/upgrade/modkit/weather/proc/shock_turf(turf/target) + playsound(target, 'sound/effects/magic/lightningbolt.ogg', 66, TRUE) + new /obj/effect/temp_visual/thunderbolt(target) + for(var/turf/open/adjacent_turf in oview(1, target)) + new /obj/effect/temp_visual/electricity(adjacent_turf) + + for(var/mob/living/hit_mob in target) + to_chat(hit_mob, span_userdanger("You've been struck by lightning!")) + hit_mob.electrocute_act(30, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) + hit_mob.Knockdown(1 SECONDS, 5 SECONDS) + + for(var/mob/living/nearby_target in oview(1, target)) + to_chat(nearby_target, span_userdanger("You've been struck by an arc of lightning!")) + nearby_target.electrocute_act(10, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) + + for(var/obj/hit_thing in target) + hit_thing.take_damage(20, BURN, ENERGY, FALSE) + + for(var/obj/nearby_thing in oview(1, target)) + nearby_thing.take_damage(5, BURN, ENERGY, FALSE) + //OCULIS EDIT ADDITION END //Cosmetic From a451978844e9780ce035c0d3ef64819bd170220a Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 11:09:54 -0400 Subject: [PATCH 08/39] gravitic mob check bugfix --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 0bec2323eb82..8749111fde0c 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -722,7 +722,7 @@ var/relative_direction = get_cardinal_dir(src, target) var/atom/throw_target = get_edge_target_turf(target, relative_direction) . = ..() - if(!QDELETED(target)) + if(!QDELETED(target) && istype(target, /mob)) var/whack_speed = (2) target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) From af25ea257fd4252afc54a71b0f2a651efb795c90 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 13:54:48 -0400 Subject: [PATCH 09/39] geist projector --- .../guns/energy/kinetic_accelerator.dm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 8749111fde0c..639ba96f2e37 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -694,6 +694,7 @@ var/static/list/anomaly_kit_types = list( /obj/effect/anomaly/grav = /obj/item/borg/upgrade/modkit/cooldown/gravity, /obj/effect/anomaly/weather = /obj/item/borg/upgrade/modkit/weather, + /obj/effect/anomaly/ectoplasm = /obj/item/borg/upgrade/modkit/ectoplasm, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -758,6 +759,22 @@ for(var/obj/nearby_thing in oview(1, target)) nearby_thing.take_damage(5, BURN, ENERGY, FALSE) +/obj/item/borg/upgrade/modkit/ectoplasm + name = "geist projector" + desc = "A specialized PK anomaly modkit. This one allows the weapon to create bubbles of kinetic possession, in addition to greatly increasing its range." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + cost = 35 + modifier = 5 + +/obj/item/borg/upgrade/modkit/ectoplasm/modify_projectile(obj/projectile/kinetic/K) + K.range += modifier + +/obj/item/borg/upgrade/modkit/ectoplasm/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob)) + playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) + haunt_outburst(epicenter = target_turf, range = 4, haunt_chance = 100, duration = 6 SECONDS) + //OCULIS EDIT ADDITION END //Cosmetic From e7ad3cdd9788bbc7f086dd86e5f596f4a784c299 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 14:02:10 -0400 Subject: [PATCH 10/39] description clarity --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 639ba96f2e37..e88ae7e07d20 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -761,7 +761,7 @@ /obj/item/borg/upgrade/modkit/ectoplasm name = "geist projector" - desc = "A specialized PK anomaly modkit. This one allows the weapon to create bubbles of kinetic possession, in addition to greatly increasing its range." + desc = "A specialized PK anomaly modkit. This one allows the weapon to create bubbles of object possession, in addition to greatly increasing its range." icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 From 8bad0a6d3579fbb0cbf55c27fa4886f4ef4c6a13 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 14:29:32 -0400 Subject: [PATCH 11/39] cost unification --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index e88ae7e07d20..17da18b4d96d 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -714,7 +714,7 @@ icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" modifier = -10 - cost = 30 + cost = 35 /obj/item/borg/upgrade/modkit/cooldown/gravity/modify_projectile(obj/projectile/kinetic/K) K.damage -= modifier * 5 @@ -732,7 +732,7 @@ desc = "A specialized PK anomaly modkit. This one allows the weapon to call lightning." icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" - cost = 40 + cost = 35 /obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) From a40be3178087d91f066395a39f20289b62512dc0 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 14:54:38 -0400 Subject: [PATCH 12/39] bluespace aberrator --- .../projectiles/guns/energy/kinetic_accelerator.dm | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 17da18b4d96d..3c9f1d24d878 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -695,6 +695,7 @@ /obj/effect/anomaly/grav = /obj/item/borg/upgrade/modkit/cooldown/gravity, /obj/effect/anomaly/weather = /obj/item/borg/upgrade/modkit/weather, /obj/effect/anomaly/ectoplasm = /obj/item/borg/upgrade/modkit/ectoplasm, + /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -775,6 +776,17 @@ playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) haunt_outburst(epicenter = target_turf, range = 4, haunt_chance = 100, duration = 6 SECONDS) +/obj/item/borg/upgrade/modkit/cooldown/bluespace + name = "bluespace aberrator" + desc = "A specialized PK anomaly modkit. This one allows the weapon to chaotically teleport targets, alongside increased cooling rates." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + cost = 35 + modifier = 5 + +/obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob)) + do_teleport(target, target_turf, 1, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) //OCULIS EDIT ADDITION END //Cosmetic From 4297b8bd55f6739d4216552978e306932c0797d6 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 14:57:05 -0400 Subject: [PATCH 13/39] small description touchup --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 3c9f1d24d878..7d8165b246d2 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -730,7 +730,7 @@ /obj/item/borg/upgrade/modkit/weather name = "storm capacitor" - desc = "A specialized PK anomaly modkit. This one allows the weapon to call lightning." + desc = "A specialized PK anomaly modkit. This one allows the weapon to call lightning from above, electrocuting targets." icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 From a2f658bc6df8e3d03b9ec866514c536414b19715 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 15:18:37 -0400 Subject: [PATCH 14/39] vortex attractor --- .../guns/energy/kinetic_accelerator.dm | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 7d8165b246d2..66671d15ff61 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -696,6 +696,7 @@ /obj/effect/anomaly/weather = /obj/item/borg/upgrade/modkit/weather, /obj/effect/anomaly/ectoplasm = /obj/item/borg/upgrade/modkit/ectoplasm, /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, + /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -787,6 +788,22 @@ /obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) if(!QDELETED(target) && istype(target, /mob)) do_teleport(target, target_turf, 1, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) + +/obj/item/borg/upgrade/modkit/vortex + name = "vortex attractor" + desc = "A specialized PK anomaly modkit. This one allows the weapon to pull enemies in, along with a slight increase to force output." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = 5 + cost = 35 + +/obj/item/borg/upgrade/modkit/vortex/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + var/relative_direction = get_cardinal_dir(target, src) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + . = ..() + if(!QDELETED(target) && istype(target, /mob)) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) //OCULIS EDIT ADDITION END //Cosmetic From 4b4ab3ff37edda348d17402570a190174bae4773 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 16:40:57 -0400 Subject: [PATCH 15/39] flux charger --- .../projectiles/guns/energy/kinetic_accelerator.dm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 66671d15ff61..4feefcfbae36 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -697,6 +697,7 @@ /obj/effect/anomaly/ectoplasm = /obj/item/borg/upgrade/modkit/ectoplasm, /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, + /obj/effect/anomaly/flux = /obj/item/borg/upgrade/modkit/flux, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -804,6 +805,19 @@ if(!QDELETED(target) && istype(target, /mob)) var/whack_speed = (2) target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + +/obj/item/borg/upgrade/modkit/flux + name = "flux charger" + desc = "A specialized PK anomaly modkit. This one gives the weapon a slight damage and range increase at no modularity cost. Push the limit." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = 10 + cost = 0 + +/obj/item/borg/upgrade/modkit/flux/modify_projectile(obj/projectile/kinetic/K) + K.damage += modifier + K.range += 1 + //OCULIS EDIT ADDITION END //Cosmetic From b03773724785b5f0d79b6b7f0d293bcb2ed91877 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 16:45:37 -0400 Subject: [PATCH 16/39] stormcaller buff --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 4feefcfbae36..52571c170742 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -739,7 +739,7 @@ /obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) - addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 2 SECONDS) + addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 1 SECOND) /obj/item/borg/upgrade/modkit/weather/proc/shock_turf(turf/target) playsound(target, 'sound/effects/magic/lightningbolt.ogg', 66, TRUE) From d1755a7981bb68cbb0ecad14bddeb8400a3e0bd4 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 17:47:31 -0400 Subject: [PATCH 17/39] rift cleaver --- .../guns/energy/kinetic_accelerator.dm | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 52571c170742..4aafc2825753 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -698,6 +698,7 @@ /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, /obj/effect/anomaly/flux = /obj/item/borg/upgrade/modkit/flux, + /obj/effect/anomaly/dimensional = /obj/item/borg/upgrade/modkit/cooldown/dimensional, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -818,6 +819,24 @@ K.damage += modifier K.range += 1 +/obj/item/borg/upgrade/modkit/cooldown/dimensional + name = "rift cleaver" + desc = "A specialized PK anomaly modkit. This one vastly increases the weapon's range at the cost of cooldown, as well as giving it a chance to shift dimensions in a small radius when striking." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = -5 + cost = 35 + +/obj/item/borg/upgrade/modkit/cooldown/dimensional/modify_projectile(obj/projectile/kinetic/K) + K.range -= modifier * 2 + +/obj/item/borg/upgrade/modkit/cooldown/dimensional/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob) && prob(20)) + var/new_theme_path = pick(subtypesof(/datum/dimension_theme)) + var/datum/dimension_theme/theme = SSmaterials.dimensional_themes[new_theme_path] + for(var/turf/turf as anything in RANGE_TURFS(1, target_turf)) + theme.apply_theme(turf, show_effect = TRUE) + //OCULIS EDIT ADDITION END //Cosmetic From e7dd1f7b9f86f1c565878a43c8b07fa1904d500c Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 17:47:43 -0400 Subject: [PATCH 18/39] storm capacitor bugfix --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 4aafc2825753..643f1f6a0b74 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -740,7 +740,7 @@ /obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) - addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 1 SECOND) + addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 1 SECONDS) /obj/item/borg/upgrade/modkit/weather/proc/shock_turf(turf/target) playsound(target, 'sound/effects/magic/lightningbolt.ogg', 66, TRUE) From 41a0a0ee0b1dfee05f2a0d5c4d9c809761f10e77 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 18:32:05 -0400 Subject: [PATCH 19/39] rift cleaver is now safe --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 643f1f6a0b74..d5508988dbfa 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -832,7 +832,7 @@ /obj/item/borg/upgrade/modkit/cooldown/dimensional/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) if(!QDELETED(target) && istype(target, /mob) && prob(20)) - var/new_theme_path = pick(subtypesof(/datum/dimension_theme)) + var/new_theme_path = pick(subtypesof(/datum/armour_dimensional_theme/safe)) var/datum/dimension_theme/theme = SSmaterials.dimensional_themes[new_theme_path] for(var/turf/turf as anything in RANGE_TURFS(1, target_turf)) theme.apply_theme(turf, show_effect = TRUE) From 6a67a17beeff85108dd6598824e68a2af7ebdce4 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 18:32:14 -0400 Subject: [PATCH 20/39] genetic inducer --- .../projectiles/guns/energy/kinetic_accelerator.dm | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index d5508988dbfa..8b948a772ccc 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -699,6 +699,7 @@ /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, /obj/effect/anomaly/flux = /obj/item/borg/upgrade/modkit/flux, /obj/effect/anomaly/dimensional = /obj/item/borg/upgrade/modkit/cooldown/dimensional, + /obj/effect/anomaly/bioscrambler = /obj/item/borg/upgrade/modkit/bioscrambler, ) if(istype(tool, /obj/item/assembly/signaler/anomaly)) @@ -837,6 +838,19 @@ for(var/turf/turf as anything in RANGE_TURFS(1, target_turf)) theme.apply_theme(turf, show_effect = TRUE) +/obj/item/borg/upgrade/modkit/bioscrambler + name = "genetic inducer" + desc = "A specialized PK anomaly modkit. This one allows the weapon to genetically batter its opponent, giving it a chance to deal critical internal damage." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = 20 + cost = 35 + +/obj/item/borg/upgrade/modkit/bioscrambler/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob) && prob(modifier)) + playsound(target, 'sound/items/weapons/zapbang.ogg', 100, TRUE) + if(target.uses_integrity) + target.take_damage(60, BRUTE, ENERGY, FALSE) //OCULIS EDIT ADDITION END //Cosmetic From 4feed91e410e19429aa86e513de05518b71b1722 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 19:17:04 -0400 Subject: [PATCH 21/39] rift cleaver alteration Taking from any of the dimensional themes, as it turns out, fucks you over via uranium or some similar dangerous dimensional shifts. Borrowing from the reactive armor theme system allows it to be safe, though it also includes the barricades. --- .../projectiles/guns/energy/kinetic_accelerator.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 8b948a772ccc..09c038a7f12a 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -832,11 +832,11 @@ K.range -= modifier * 2 /obj/item/borg/upgrade/modkit/cooldown/dimensional/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob) && prob(20)) - var/new_theme_path = pick(subtypesof(/datum/armour_dimensional_theme/safe)) - var/datum/dimension_theme/theme = SSmaterials.dimensional_themes[new_theme_path] - for(var/turf/turf as anything in RANGE_TURFS(1, target_turf)) - theme.apply_theme(turf, show_effect = TRUE) + if(!QDELETED(target) && istype(target, /mob) && prob(modifier * -4)) + playsound(target, 'sound/items/weapons/zapbang.ogg', 100, TRUE) + var/datum/armour_dimensional_theme/theme = new() + theme.apply_random(target_turf, dangerous = FALSE) + qdel(theme) /obj/item/borg/upgrade/modkit/bioscrambler name = "genetic inducer" From 4063dbf89eb9542eb8aba9b82cd0c55be730bb57 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 19:54:47 -0400 Subject: [PATCH 22/39] researchable and lathable blank-kits --- .../guns/energy/kinetic_accelerator.dm | 19 +++++++++++++++++++ .../research/techweb/nodes/mining_nodes.dm | 3 +++ 2 files changed, 22 insertions(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 09c038a7f12a..a1b52207fec3 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -713,6 +713,25 @@ qdel(anomaly) return ITEM_INTERACT_SUCCESS +/datum/design/anomaly_mod + name = "Kinetic Accelerator Blank Anomaly Mod" + desc = "Ask Research to slot an anomaly core into this for a specialized proto-kinetic accelerator upgrade." + id = "anomalymod" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver =SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT, + /datum/material/diamond =SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/borg/upgrade/modkit/blank + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + /obj/item/borg/upgrade/modkit/cooldown/gravity name = "gravitic pulverizer" desc = "A specialized PK anomaly modkit. This one vastly increases the weapon's damage at the cost of cooldown, as well as allowing it to knock targets back." diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm index 9c0ab9d879d1..8919e96265fb 100644 --- a/code/modules/research/techweb/nodes/mining_nodes.dm +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -65,6 +65,9 @@ "borg_upgrade_rangemod", "borg_upgrade_cooldownmod", "borg_upgrade_hypermod", + //OCULIS EDIT ADDITION START - ANOMALY_KITS + "anomalymod", + //OCULIS EDIT ADDITION END ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) From 5b1e53c3a93078d841dec9375a425cbefae24af6 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 20:02:17 -0400 Subject: [PATCH 23/39] small balance alterations --- .../projectiles/guns/energy/kinetic_accelerator.dm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index a1b52207fec3..d5614a2ad9ee 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -781,7 +781,7 @@ hit_thing.take_damage(20, BURN, ENERGY, FALSE) for(var/obj/nearby_thing in oview(1, target)) - nearby_thing.take_damage(5, BURN, ENERGY, FALSE) + nearby_thing.take_damage(10, BURN, ENERGY, FALSE) /obj/item/borg/upgrade/modkit/ectoplasm name = "geist projector" @@ -789,7 +789,7 @@ icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 - modifier = 5 + modifier = 3 /obj/item/borg/upgrade/modkit/ectoplasm/modify_projectile(obj/projectile/kinetic/K) K.range += modifier @@ -805,7 +805,7 @@ icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 - modifier = 5 + modifier = 4 /obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) if(!QDELETED(target) && istype(target, /mob)) @@ -813,12 +813,15 @@ /obj/item/borg/upgrade/modkit/vortex name = "vortex attractor" - desc = "A specialized PK anomaly modkit. This one allows the weapon to pull enemies in, along with a slight increase to force output." + desc = "A specialized PK anomaly modkit. This one allows the weapon to pull enemies in, along with an increase to force output." icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" - modifier = 5 + modifier = 10 cost = 35 +/obj/item/borg/upgrade/modkit/vortex/modify_projectile(obj/projectile/kinetic/K) + K.damage += modifier + /obj/item/borg/upgrade/modkit/vortex/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) var/relative_direction = get_cardinal_dir(target, src) var/atom/throw_target = get_edge_target_turf(target, relative_direction) From 5e2be3916edb083f14b5e8d256d2c6071ad51399 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 20:23:02 -0400 Subject: [PATCH 24/39] cut the rift cleaver It kinda sucked, down to the concept. As fun as it is to do the dimensional anomaly fuckery with a PKA, it just doesnt fit the job, and has too much griefing potential. --- .../guns/energy/kinetic_accelerator.dm | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index d5614a2ad9ee..504525a348c3 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -698,7 +698,6 @@ /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, /obj/effect/anomaly/flux = /obj/item/borg/upgrade/modkit/flux, - /obj/effect/anomaly/dimensional = /obj/item/borg/upgrade/modkit/cooldown/dimensional, /obj/effect/anomaly/bioscrambler = /obj/item/borg/upgrade/modkit/bioscrambler, ) @@ -842,24 +841,6 @@ K.damage += modifier K.range += 1 -/obj/item/borg/upgrade/modkit/cooldown/dimensional - name = "rift cleaver" - desc = "A specialized PK anomaly modkit. This one vastly increases the weapon's range at the cost of cooldown, as well as giving it a chance to shift dimensions in a small radius when striking." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - modifier = -5 - cost = 35 - -/obj/item/borg/upgrade/modkit/cooldown/dimensional/modify_projectile(obj/projectile/kinetic/K) - K.range -= modifier * 2 - -/obj/item/borg/upgrade/modkit/cooldown/dimensional/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob) && prob(modifier * -4)) - playsound(target, 'sound/items/weapons/zapbang.ogg', 100, TRUE) - var/datum/armour_dimensional_theme/theme = new() - theme.apply_random(target_turf, dangerous = FALSE) - qdel(theme) - /obj/item/borg/upgrade/modkit/bioscrambler name = "genetic inducer" desc = "A specialized PK anomaly modkit. This one allows the weapon to genetically batter its opponent, giving it a chance to deal critical internal damage." From 2290ae00c654fff4cec9692698acb6587dc659d7 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Thu, 16 Jul 2026 22:31:00 -0400 Subject: [PATCH 25/39] poltergeist projector (geist projector update) --- .../projectiles/guns/energy/kinetic_accelerator.dm | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 504525a348c3..3b636e48ef1f 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -783,8 +783,8 @@ nearby_thing.take_damage(10, BURN, ENERGY, FALSE) /obj/item/borg/upgrade/modkit/ectoplasm - name = "geist projector" - desc = "A specialized PK anomaly modkit. This one allows the weapon to create bubbles of object possession, in addition to greatly increasing its range." + name = "poltergeist projector" + desc = "A specialized PK anomaly modkit. This one grants the weapon a chance to haunt nearby objects, throwing them at the target. Comes with a large range increase." icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 @@ -795,8 +795,13 @@ /obj/item/borg/upgrade/modkit/ectoplasm/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) if(!QDELETED(target) && istype(target, /mob)) - playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) - haunt_outburst(epicenter = target_turf, range = 4, haunt_chance = 100, duration = 6 SECONDS) + for(var/obj/item/throwable in view(modifier, target)) + if(prob(30)) + playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) + var/relative_direction = get_cardinal_dir(throwable, target) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + var/whack_speed = (2) + throwable.throw_at(throw_target, modifier, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/cooldown/bluespace name = "bluespace aberrator" From ca68ba21a929805ae0bead6580a0e62ff24ae407 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Sun, 19 Jul 2026 08:03:05 -0400 Subject: [PATCH 26/39] complete modularization --- .../guns/energy/kinetic_accelerator.dm | 182 ------------------ .../modules/anomalykits/code/anomalykits.dm | 178 +++++++++++++++++ .../modules/anomalykits/code/readme.md | 45 +++++ tgstation.dme | 1 + 4 files changed, 224 insertions(+), 182 deletions(-) create mode 100644 modular_oculis/modules/anomalykits/code/anomalykits.dm create mode 100644 modular_oculis/modules/anomalykits/code/readme.md diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index 3b636e48ef1f..f93d2d2e8b99 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -679,188 +679,6 @@ KA.trigger_guard = TRIGGER_GUARD_NORMAL ..() -//OCULIS EDIT ADDITION START - ANOMALY_KITS - -//Blank PK modkit, able to be fit with an anomaly core -/obj/item/borg/upgrade/modkit/blank - name = "blank anomaly kit" - desc = "A specialized PK anomaly modkit. This one is currently empty, awaiting an anomaly core for completion." - cost = 10 - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykitempty" - -/obj/item/borg/upgrade/modkit/blank/item_interaction(mob/living/user, obj/item/tool, list/modifiers) - . = ..() - var/static/list/anomaly_kit_types = list( - /obj/effect/anomaly/grav = /obj/item/borg/upgrade/modkit/cooldown/gravity, - /obj/effect/anomaly/weather = /obj/item/borg/upgrade/modkit/weather, - /obj/effect/anomaly/ectoplasm = /obj/item/borg/upgrade/modkit/ectoplasm, - /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, - /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, - /obj/effect/anomaly/flux = /obj/item/borg/upgrade/modkit/flux, - /obj/effect/anomaly/bioscrambler = /obj/item/borg/upgrade/modkit/bioscrambler, - ) - - if(istype(tool, /obj/item/assembly/signaler/anomaly)) - var/obj/item/assembly/signaler/anomaly/anomaly = tool - var/anomkit_path = is_path_in_list(anomaly.anomaly_type, anomaly_kit_types, TRUE) - if(!anomkit_path) - anomkit_path = /obj/item/borg/upgrade/modkit/cooldown/gravity //If an anomaly is inserted without a specifically coded modifier, give the gravity one so that the player isn't unrewarded - to_chat(user, span_notice("You insert [anomaly] into the modkit, and it gently hums to life.")) - new anomkit_path(get_turf(src)) - qdel(src) - qdel(anomaly) - return ITEM_INTERACT_SUCCESS - -/datum/design/anomaly_mod - name = "Kinetic Accelerator Blank Anomaly Mod" - desc = "Ask Research to slot an anomaly core into this for a specialized proto-kinetic accelerator upgrade." - id = "anomalymod" - build_type = PROTOLATHE | AWAY_LATHE - materials = list( - /datum/material/iron =SHEET_MATERIAL_AMOUNT * 3, - /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2, - /datum/material/silver =SHEET_MATERIAL_AMOUNT * 2, - /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2, - /datum/material/uranium =SHEET_MATERIAL_AMOUNT, - /datum/material/diamond =SHEET_MATERIAL_AMOUNT, - ) - build_path = /obj/item/borg/upgrade/modkit/blank - category = list( - RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS - ) - departmental_flags = DEPARTMENT_BITFLAG_CARGO - -/obj/item/borg/upgrade/modkit/cooldown/gravity - name = "gravitic pulverizer" - desc = "A specialized PK anomaly modkit. This one vastly increases the weapon's damage at the cost of cooldown, as well as allowing it to knock targets back." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - modifier = -10 - cost = 35 - -/obj/item/borg/upgrade/modkit/cooldown/gravity/modify_projectile(obj/projectile/kinetic/K) - K.damage -= modifier * 5 - -/obj/item/borg/upgrade/modkit/cooldown/gravity/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - var/relative_direction = get_cardinal_dir(src, target) - var/atom/throw_target = get_edge_target_turf(target, relative_direction) - . = ..() - if(!QDELETED(target) && istype(target, /mob)) - var/whack_speed = (2) - target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) - -/obj/item/borg/upgrade/modkit/weather - name = "storm capacitor" - desc = "A specialized PK anomaly modkit. This one allows the weapon to call lightning from above, electrocuting targets." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - cost = 35 - -/obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) - addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 1 SECONDS) - -/obj/item/borg/upgrade/modkit/weather/proc/shock_turf(turf/target) - playsound(target, 'sound/effects/magic/lightningbolt.ogg', 66, TRUE) - new /obj/effect/temp_visual/thunderbolt(target) - for(var/turf/open/adjacent_turf in oview(1, target)) - new /obj/effect/temp_visual/electricity(adjacent_turf) - - for(var/mob/living/hit_mob in target) - to_chat(hit_mob, span_userdanger("You've been struck by lightning!")) - hit_mob.electrocute_act(30, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) - hit_mob.Knockdown(1 SECONDS, 5 SECONDS) - - for(var/mob/living/nearby_target in oview(1, target)) - to_chat(nearby_target, span_userdanger("You've been struck by an arc of lightning!")) - nearby_target.electrocute_act(10, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) - - for(var/obj/hit_thing in target) - hit_thing.take_damage(20, BURN, ENERGY, FALSE) - - for(var/obj/nearby_thing in oview(1, target)) - nearby_thing.take_damage(10, BURN, ENERGY, FALSE) - -/obj/item/borg/upgrade/modkit/ectoplasm - name = "poltergeist projector" - desc = "A specialized PK anomaly modkit. This one grants the weapon a chance to haunt nearby objects, throwing them at the target. Comes with a large range increase." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - cost = 35 - modifier = 3 - -/obj/item/borg/upgrade/modkit/ectoplasm/modify_projectile(obj/projectile/kinetic/K) - K.range += modifier - -/obj/item/borg/upgrade/modkit/ectoplasm/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob)) - for(var/obj/item/throwable in view(modifier, target)) - if(prob(30)) - playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) - var/relative_direction = get_cardinal_dir(throwable, target) - var/atom/throw_target = get_edge_target_turf(target, relative_direction) - var/whack_speed = (2) - throwable.throw_at(throw_target, modifier, whack_speed, K, gentle = TRUE) - -/obj/item/borg/upgrade/modkit/cooldown/bluespace - name = "bluespace aberrator" - desc = "A specialized PK anomaly modkit. This one allows the weapon to chaotically teleport targets, alongside increased cooling rates." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - cost = 35 - modifier = 4 - -/obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob)) - do_teleport(target, target_turf, 1, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) - -/obj/item/borg/upgrade/modkit/vortex - name = "vortex attractor" - desc = "A specialized PK anomaly modkit. This one allows the weapon to pull enemies in, along with an increase to force output." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - modifier = 10 - cost = 35 - -/obj/item/borg/upgrade/modkit/vortex/modify_projectile(obj/projectile/kinetic/K) - K.damage += modifier - -/obj/item/borg/upgrade/modkit/vortex/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - var/relative_direction = get_cardinal_dir(target, src) - var/atom/throw_target = get_edge_target_turf(target, relative_direction) - . = ..() - if(!QDELETED(target) && istype(target, /mob)) - var/whack_speed = (2) - target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) - -/obj/item/borg/upgrade/modkit/flux - name = "flux charger" - desc = "A specialized PK anomaly modkit. This one gives the weapon a slight damage and range increase at no modularity cost. Push the limit." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - modifier = 10 - cost = 0 - -/obj/item/borg/upgrade/modkit/flux/modify_projectile(obj/projectile/kinetic/K) - K.damage += modifier - K.range += 1 - -/obj/item/borg/upgrade/modkit/bioscrambler - name = "genetic inducer" - desc = "A specialized PK anomaly modkit. This one allows the weapon to genetically batter its opponent, giving it a chance to deal critical internal damage." - icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' - icon_state = "anomalykit" - modifier = 20 - cost = 35 - -/obj/item/borg/upgrade/modkit/bioscrambler/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob) && prob(modifier)) - playsound(target, 'sound/items/weapons/zapbang.ogg', 100, TRUE) - if(target.uses_integrity) - target.take_damage(60, BRUTE, ENERGY, FALSE) -//OCULIS EDIT ADDITION END - //Cosmetic /obj/item/borg/upgrade/modkit/chassis_mod diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm new file mode 100644 index 000000000000..0d77897495b9 --- /dev/null +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -0,0 +1,178 @@ +//Blank PK modkit, able to be fit with an anomaly core +/obj/item/borg/upgrade/modkit/blank + name = "blank anomaly kit" + desc = "A specialized PK anomaly modkit. This one is currently empty, awaiting an anomaly core for completion." + cost = 10 + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykitempty" + +/obj/item/borg/upgrade/modkit/blank/item_interaction(mob/living/user, obj/item/tool, list/modifiers) + . = ..() + var/static/list/anomaly_kit_types = list( + /obj/effect/anomaly/grav = /obj/item/borg/upgrade/modkit/cooldown/gravity, + /obj/effect/anomaly/weather = /obj/item/borg/upgrade/modkit/weather, + /obj/effect/anomaly/ectoplasm = /obj/item/borg/upgrade/modkit/ectoplasm, + /obj/effect/anomaly/bluespace = /obj/item/borg/upgrade/modkit/cooldown/bluespace, + /obj/effect/anomaly/bhole = /obj/item/borg/upgrade/modkit/vortex, + /obj/effect/anomaly/flux = /obj/item/borg/upgrade/modkit/flux, + /obj/effect/anomaly/bioscrambler = /obj/item/borg/upgrade/modkit/bioscrambler, + ) + + if(istype(tool, /obj/item/assembly/signaler/anomaly)) + var/obj/item/assembly/signaler/anomaly/anomaly = tool + var/anomkit_path = is_path_in_list(anomaly.anomaly_type, anomaly_kit_types, TRUE) + if(!anomkit_path) + anomkit_path = /obj/item/borg/upgrade/modkit/cooldown/gravity //If an anomaly is inserted without a specifically coded modifier, give the gravity one so that the player isn't unrewarded + to_chat(user, span_notice("You insert [anomaly] into the modkit, and it gently hums to life.")) + new anomkit_path(get_turf(src)) + qdel(src) + qdel(anomaly) + return ITEM_INTERACT_SUCCESS + +/datum/design/anomaly_mod + name = "Kinetic Accelerator Blank Anomaly Mod" + desc = "Ask Research to slot an anomaly core into this for a specialized proto-kinetic accelerator upgrade." + id = "anomalymod" + build_type = PROTOLATHE | AWAY_LATHE + materials = list( + /datum/material/iron =SHEET_MATERIAL_AMOUNT * 3, + /datum/material/glass =SHEET_MATERIAL_AMOUNT * 2, + /datum/material/silver =SHEET_MATERIAL_AMOUNT * 2, + /datum/material/gold =SHEET_MATERIAL_AMOUNT * 2, + /datum/material/uranium =SHEET_MATERIAL_AMOUNT, + /datum/material/diamond =SHEET_MATERIAL_AMOUNT, + ) + build_path = /obj/item/borg/upgrade/modkit/blank + category = list( + RND_CATEGORY_TOOLS + RND_SUBCATEGORY_TOOLS_PKA_MODS + ) + departmental_flags = DEPARTMENT_BITFLAG_CARGO + +/obj/item/borg/upgrade/modkit/cooldown/gravity + name = "gravitic pulverizer" + desc = "A specialized PK anomaly modkit. This one vastly increases the weapon's damage at the cost of cooldown, as well as allowing it to knock targets back." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = -10 + cost = 35 + +/obj/item/borg/upgrade/modkit/cooldown/gravity/modify_projectile(obj/projectile/kinetic/K) + K.damage -= modifier * 5 + +/obj/item/borg/upgrade/modkit/cooldown/gravity/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + var/relative_direction = get_cardinal_dir(src, target) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + . = ..() + if(!QDELETED(target) && istype(target, /mob)) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + +/obj/item/borg/upgrade/modkit/weather + name = "storm capacitor" + desc = "A specialized PK anomaly modkit. This one allows the weapon to call lightning from above, electrocuting targets." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + cost = 35 + +/obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) + addtimer(CALLBACK(src, PROC_REF(shock_turf), target_turf), 1 SECONDS) + +/obj/item/borg/upgrade/modkit/weather/proc/shock_turf(turf/target) + playsound(target, 'sound/effects/magic/lightningbolt.ogg', 66, TRUE) + new /obj/effect/temp_visual/thunderbolt(target) + for(var/turf/open/adjacent_turf in oview(1, target)) + new /obj/effect/temp_visual/electricity(adjacent_turf) + + for(var/mob/living/hit_mob in target) + to_chat(hit_mob, span_userdanger("You've been struck by lightning!")) + hit_mob.electrocute_act(30, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) + hit_mob.Knockdown(1 SECONDS, 5 SECONDS) + + for(var/mob/living/nearby_target in oview(1, target)) + to_chat(nearby_target, span_userdanger("You've been struck by an arc of lightning!")) + nearby_target.electrocute_act(10, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) + + for(var/obj/hit_thing in target) + hit_thing.take_damage(20, BURN, ENERGY, FALSE) + + for(var/obj/nearby_thing in oview(1, target)) + nearby_thing.take_damage(10, BURN, ENERGY, FALSE) + +/obj/item/borg/upgrade/modkit/ectoplasm + name = "poltergeist projector" + desc = "A specialized PK anomaly modkit. This one grants the weapon a chance to haunt nearby objects, throwing them at the target. Comes with a large range increase." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + cost = 35 + modifier = 3 + +/obj/item/borg/upgrade/modkit/ectoplasm/modify_projectile(obj/projectile/kinetic/K) + K.range += modifier + +/obj/item/borg/upgrade/modkit/ectoplasm/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob)) + for(var/obj/item/throwable in view(modifier, target)) + if(prob(30)) + playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) + var/relative_direction = get_cardinal_dir(throwable, target) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + var/whack_speed = (2) + throwable.throw_at(throw_target, modifier, whack_speed, K, gentle = TRUE) + +/obj/item/borg/upgrade/modkit/cooldown/bluespace + name = "bluespace aberrator" + desc = "A specialized PK anomaly modkit. This one allows the weapon to chaotically teleport targets, alongside increased cooling rates." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + cost = 35 + modifier = 4 + +/obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob)) + do_teleport(target, target_turf, 1, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) + +/obj/item/borg/upgrade/modkit/vortex + name = "vortex attractor" + desc = "A specialized PK anomaly modkit. This one allows the weapon to pull enemies in, along with an increase to force output." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = 10 + cost = 35 + +/obj/item/borg/upgrade/modkit/vortex/modify_projectile(obj/projectile/kinetic/K) + K.damage += modifier + +/obj/item/borg/upgrade/modkit/vortex/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + var/relative_direction = get_cardinal_dir(target, src) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + . = ..() + if(!QDELETED(target) && istype(target, /mob)) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + +/obj/item/borg/upgrade/modkit/flux + name = "flux charger" + desc = "A specialized PK anomaly modkit. This one gives the weapon a slight damage and range increase at no modularity cost. Push the limit." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = 10 + cost = 0 + +/obj/item/borg/upgrade/modkit/flux/modify_projectile(obj/projectile/kinetic/K) + K.damage += modifier + K.range += 1 + +/obj/item/borg/upgrade/modkit/bioscrambler + name = "genetic inducer" + desc = "A specialized PK anomaly modkit. This one allows the weapon to genetically batter its opponent, giving it a chance to deal critical internal damage." + icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' + icon_state = "anomalykit" + modifier = 20 + cost = 35 + +/obj/item/borg/upgrade/modkit/bioscrambler/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) + if(!QDELETED(target) && istype(target, /mob) && prob(modifier)) + playsound(target, 'sound/items/weapons/zapbang.ogg', 100, TRUE) + if(target.uses_integrity) + target.take_damage(60, BRUTE, ENERGY, FALSE) diff --git a/modular_oculis/modules/anomalykits/code/readme.md b/modular_oculis/modules/anomalykits/code/readme.md new file mode 100644 index 000000000000..4d5c00b9085d --- /dev/null +++ b/modular_oculis/modules/anomalykits/code/readme.md @@ -0,0 +1,45 @@ + + +https://github.com/Monkestation/OculisStation/pull/367 + +## \ + +Module ID: ANOMALY_KITS + +### Description: + +Adds a blank anomaly modkit, which allows insertion of an anomaly core to create specialized PKA upgrades. It must be researched in the same technode as the other craftable PKA upgrades, fabricated, then fit with an anomaly core. + + + +### 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: + +Keygenpie - Programmer +Xeonmations - Getting me to modularize the damn thing diff --git a/tgstation.dme b/tgstation.dme index 387c78b8de87..4b3c42fe2fda 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -10211,6 +10211,7 @@ #include "modular_oculis\modules\abel\code\id_cards.dm" #include "modular_oculis\modules\abel\code\modsuit.dm" #include "modular_oculis\modules\admin\code\view_variables.dm" +#include "modular_oculis\modules\anomalykits\code\anomalykits.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" From 7e815d20c8d0ee5cc8df9f4bd0bfc985abb4c77b Mon Sep 17 00:00:00 2001 From: keygenpie Date: Sun, 19 Jul 2026 10:55:59 -0400 Subject: [PATCH 27/39] tiny correction to readme file location --- modular_oculis/modules/anomalykits/{code => }/readme.md | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename modular_oculis/modules/anomalykits/{code => }/readme.md (100%) diff --git a/modular_oculis/modules/anomalykits/code/readme.md b/modular_oculis/modules/anomalykits/readme.md similarity index 100% rename from modular_oculis/modules/anomalykits/code/readme.md rename to modular_oculis/modules/anomalykits/readme.md From 07673308285c3e1229606df0bdddd0cbd61e6f59 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Sun, 19 Jul 2026 11:07:53 -0400 Subject: [PATCH 28/39] maxed all kit types at 1 max As much as ridiculous stacking shenanigans would be fun, the amount of ordnance that would be done for it is a bit much. I don't want to encourage excessive ordnance work, because I'm sure all the shaking and explosions would get annoying after too much. The limit should also help the modkits feel a bit more unique, rather than being yet another type of mod you just stack a bunch of. --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 0d77897495b9..3394b38235a2 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -55,6 +55,7 @@ icon_state = "anomalykit" modifier = -10 cost = 35 + maximum_of_type = 1 /obj/item/borg/upgrade/modkit/cooldown/gravity/modify_projectile(obj/projectile/kinetic/K) K.damage -= modifier * 5 @@ -73,6 +74,7 @@ icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 + maximum_of_type = 1 /obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) @@ -106,6 +108,7 @@ icon_state = "anomalykit" cost = 35 modifier = 3 + maximum_of_type = 1 /obj/item/borg/upgrade/modkit/ectoplasm/modify_projectile(obj/projectile/kinetic/K) K.range += modifier @@ -139,6 +142,7 @@ icon_state = "anomalykit" modifier = 10 cost = 35 + maximum_of_type = 1 /obj/item/borg/upgrade/modkit/vortex/modify_projectile(obj/projectile/kinetic/K) K.damage += modifier @@ -158,6 +162,7 @@ icon_state = "anomalykit" modifier = 10 cost = 0 + maximum_of_type = 1 /obj/item/borg/upgrade/modkit/flux/modify_projectile(obj/projectile/kinetic/K) K.damage += modifier @@ -170,6 +175,7 @@ icon_state = "anomalykit" modifier = 20 cost = 35 + maximum_of_type = 1 /obj/item/borg/upgrade/modkit/bioscrambler/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) if(!QDELETED(target) && istype(target, /mob) && prob(modifier)) From fd361216cda4aea9e28cd63d9e4bd8c25fd09c88 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 08:36:01 -0400 Subject: [PATCH 29/39] spacing Co-authored-by: XeonMations <62395746+XeonMations@users.noreply.github.com> --- code/modules/projectiles/guns/energy/kinetic_accelerator.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm index f93d2d2e8b99..c91985e71ea5 100644 --- a/code/modules/projectiles/guns/energy/kinetic_accelerator.dm +++ b/code/modules/projectiles/guns/energy/kinetic_accelerator.dm @@ -679,6 +679,7 @@ KA.trigger_guard = TRIGGER_GUARD_NORMAL ..() + //Cosmetic /obj/item/borg/upgrade/modkit/chassis_mod From 551bc28063a1a7ba3afef9e36c5b4f72127bdc68 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 08:36:23 -0400 Subject: [PATCH 30/39] small notation adjustment Co-authored-by: XeonMations <62395746+XeonMations@users.noreply.github.com> --- code/modules/research/techweb/nodes/mining_nodes.dm | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/code/modules/research/techweb/nodes/mining_nodes.dm b/code/modules/research/techweb/nodes/mining_nodes.dm index 8919e96265fb..acbf18f9c08d 100644 --- a/code/modules/research/techweb/nodes/mining_nodes.dm +++ b/code/modules/research/techweb/nodes/mining_nodes.dm @@ -65,9 +65,7 @@ "borg_upgrade_rangemod", "borg_upgrade_cooldownmod", "borg_upgrade_hypermod", - //OCULIS EDIT ADDITION START - ANOMALY_KITS - "anomalymod", - //OCULIS EDIT ADDITION END + "anomalymod", //OCULIS EDIT ADDITION - ANOMALY_KITS ) research_costs = list(TECHWEB_POINT_TYPE_GENERIC = TECHWEB_TIER_2_POINTS) announce_channels = list(RADIO_CHANNEL_SUPPLY) From 199265d2be3507dce80807b13054103c120e3f76 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 08:40:55 -0400 Subject: [PATCH 31/39] QDELETED check removal Xeonmations helped me realize that, despite being present elsewhere in the code, these checks are stupid. If the target is deleted, how would any of this get called? Duh. --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 3394b38235a2..514b9650cd46 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -64,7 +64,7 @@ var/relative_direction = get_cardinal_dir(src, target) var/atom/throw_target = get_edge_target_turf(target, relative_direction) . = ..() - if(!QDELETED(target) && istype(target, /mob)) + if(istype(target, /mob)) var/whack_speed = (2) target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) @@ -114,7 +114,7 @@ K.range += modifier /obj/item/borg/upgrade/modkit/ectoplasm/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob)) + if(istype(target, /mob)) for(var/obj/item/throwable in view(modifier, target)) if(prob(30)) playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) @@ -132,7 +132,7 @@ modifier = 4 /obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob)) + if(istype(target, /mob)) do_teleport(target, target_turf, 1, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) /obj/item/borg/upgrade/modkit/vortex @@ -151,7 +151,7 @@ var/relative_direction = get_cardinal_dir(target, src) var/atom/throw_target = get_edge_target_turf(target, relative_direction) . = ..() - if(!QDELETED(target) && istype(target, /mob)) + if(istype(target, /mob)) var/whack_speed = (2) target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) @@ -178,7 +178,7 @@ maximum_of_type = 1 /obj/item/borg/upgrade/modkit/bioscrambler/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(!QDELETED(target) && istype(target, /mob) && prob(modifier)) + if(istype(target, /mob) && prob(modifier)) playsound(target, 'sound/items/weapons/zapbang.ogg', 100, TRUE) if(target.uses_integrity) target.take_damage(60, BRUTE, ENERGY, FALSE) From 0ffc3c51c4000b21ec3266e7f9bd377d19e0ecc0 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 08:44:24 -0400 Subject: [PATCH 32/39] removed mob checks from grav and vortex kits For fun --- .../modules/anomalykits/code/anomalykits.dm | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 514b9650cd46..a6691cb8f647 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -63,10 +63,8 @@ /obj/item/borg/upgrade/modkit/cooldown/gravity/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) var/relative_direction = get_cardinal_dir(src, target) var/atom/throw_target = get_edge_target_turf(target, relative_direction) - . = ..() - if(istype(target, /mob)) - var/whack_speed = (2) - target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/weather name = "storm capacitor" @@ -150,10 +148,8 @@ /obj/item/borg/upgrade/modkit/vortex/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) var/relative_direction = get_cardinal_dir(target, src) var/atom/throw_target = get_edge_target_turf(target, relative_direction) - . = ..() - if(istype(target, /mob)) - var/whack_speed = (2) - target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/flux name = "flux charger" From 57d60ee4843959e1c750c82d7c2ccbdc39601b6e Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 09:21:58 -0400 Subject: [PATCH 33/39] ok well obviously there should be turf/anchored checks --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index a6691cb8f647..3fb956af4226 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -63,8 +63,9 @@ /obj/item/borg/upgrade/modkit/cooldown/gravity/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) var/relative_direction = get_cardinal_dir(src, target) var/atom/throw_target = get_edge_target_turf(target, relative_direction) - var/whack_speed = (2) - target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + if(!istype(target, /turf) && !target.anchored) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/weather name = "storm capacitor" @@ -148,8 +149,9 @@ /obj/item/borg/upgrade/modkit/vortex/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) var/relative_direction = get_cardinal_dir(target, src) var/atom/throw_target = get_edge_target_turf(target, relative_direction) - var/whack_speed = (2) - target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) + if(!istype(target, /turf) && !target.anchored) + var/whack_speed = (2) + target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/flux name = "flux charger" From 34350088daaf73f36e4ddd5ace667c89d5b6074d Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 09:35:46 -0400 Subject: [PATCH 34/39] cleaned up storm code a bit --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 3fb956af4226..d3a05196ae78 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -89,16 +89,14 @@ to_chat(hit_mob, span_userdanger("You've been struck by lightning!")) hit_mob.electrocute_act(30, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) hit_mob.Knockdown(1 SECONDS, 5 SECONDS) + if(hit_mob.uses_integrity) + hit_mob.take_damage(20, BURN, ENERGY, FALSE) for(var/mob/living/nearby_target in oview(1, target)) to_chat(nearby_target, span_userdanger("You've been struck by an arc of lightning!")) nearby_target.electrocute_act(10, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) - - for(var/obj/hit_thing in target) - hit_thing.take_damage(20, BURN, ENERGY, FALSE) - - for(var/obj/nearby_thing in oview(1, target)) - nearby_thing.take_damage(10, BURN, ENERGY, FALSE) + if(nearby_target.uses_integrity) + nearby_target.take_damage(10, BURN, ENERGY, FALSE) /obj/item/borg/upgrade/modkit/ectoplasm name = "poltergeist projector" From f48eff9b8c106ba1ca29a4bbe8380b466f80049e Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 09:35:59 -0400 Subject: [PATCH 35/39] removed mob check from poltergeist --- .../modules/anomalykits/code/anomalykits.dm | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index d3a05196ae78..bcdb20f273a4 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -111,14 +111,13 @@ K.range += modifier /obj/item/borg/upgrade/modkit/ectoplasm/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(istype(target, /mob)) - for(var/obj/item/throwable in view(modifier, target)) - if(prob(30)) - playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) - var/relative_direction = get_cardinal_dir(throwable, target) - var/atom/throw_target = get_edge_target_turf(target, relative_direction) - var/whack_speed = (2) - throwable.throw_at(throw_target, modifier, whack_speed, K, gentle = TRUE) + for(var/obj/item/throwable in view(modifier, target)) + if(prob(30)) + playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) + var/relative_direction = get_cardinal_dir(throwable, target) + var/atom/throw_target = get_edge_target_turf(target, relative_direction) + var/whack_speed = (2) + throwable.throw_at(throw_target, modifier, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/cooldown/bluespace name = "bluespace aberrator" From 399530b69ad7203b61aa69ab063e5f5f5f6f06f3 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 09:47:37 -0400 Subject: [PATCH 36/39] changed check on bluespace aberrator --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index bcdb20f273a4..658c15735de0 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -128,7 +128,7 @@ modifier = 4 /obj/item/borg/upgrade/modkit/cooldown/bluespace/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/movable/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) - if(istype(target, /mob)) + if(!istype(target, /turf) && !target.anchored) do_teleport(target, target_turf, 1, asoundin = 'sound/effects/phasein.ogg', channel = TELEPORT_CHANNEL_BLUESPACE) /obj/item/borg/upgrade/modkit/vortex From 9b6c3303264b66bbdc271ea90d8eb5de38e83bb3 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Mon, 20 Jul 2026 09:49:30 -0400 Subject: [PATCH 37/39] more modifier scaling --- .../modules/anomalykits/code/anomalykits.dm | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 658c15735de0..3f351960b734 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -74,6 +74,7 @@ icon_state = "anomalykit" cost = 35 maximum_of_type = 1 + modifier = 1 /obj/item/borg/upgrade/modkit/weather/projectile_strike(obj/projectile/kinetic/K, turf/target_turf, atom/target, obj/item/gun/energy/recharge/kinetic_accelerator/KA) new /obj/effect/temp_visual/telegraphing/thunderbolt(target_turf) @@ -88,7 +89,7 @@ for(var/mob/living/hit_mob in target) to_chat(hit_mob, span_userdanger("You've been struck by lightning!")) hit_mob.electrocute_act(30, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) - hit_mob.Knockdown(1 SECONDS, 5 SECONDS) + hit_mob.Knockdown(modifier SECONDS, 5 SECONDS) if(hit_mob.uses_integrity) hit_mob.take_damage(20, BURN, ENERGY, FALSE) @@ -104,7 +105,7 @@ icon = 'modular_oculis/modules/anomalykits/icons/obj/anomalykits.dmi' icon_state = "anomalykit" cost = 35 - modifier = 3 + modifier = 4 maximum_of_type = 1 /obj/item/borg/upgrade/modkit/ectoplasm/modify_projectile(obj/projectile/kinetic/K) @@ -116,7 +117,7 @@ playsound(target_turf,'sound/effects/hallucinations/veryfar_noise.ogg', 50, TRUE) var/relative_direction = get_cardinal_dir(throwable, target) var/atom/throw_target = get_edge_target_turf(target, relative_direction) - var/whack_speed = (2) + var/whack_speed = (modifier / 2) throwable.throw_at(throw_target, modifier, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/cooldown/bluespace @@ -147,7 +148,7 @@ var/relative_direction = get_cardinal_dir(target, src) var/atom/throw_target = get_edge_target_turf(target, relative_direction) if(!istype(target, /turf) && !target.anchored) - var/whack_speed = (2) + var/whack_speed = (modifier / 5) target.throw_at(throw_target, 2, whack_speed, K, gentle = TRUE) /obj/item/borg/upgrade/modkit/flux @@ -161,7 +162,7 @@ /obj/item/borg/upgrade/modkit/flux/modify_projectile(obj/projectile/kinetic/K) K.damage += modifier - K.range += 1 + K.range += modifier / 5 /obj/item/borg/upgrade/modkit/bioscrambler name = "genetic inducer" From 924abe48119d0acbc04f3d66d7688593881fdf97 Mon Sep 17 00:00:00 2001 From: keygenpie Date: Tue, 21 Jul 2026 14:20:18 -0400 Subject: [PATCH 38/39] storm capacitor changes Fixed damage, removed knockdown to prevent any PvP potential. --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 3f351960b734..9880bfaf5c2a 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -89,15 +89,14 @@ for(var/mob/living/hit_mob in target) to_chat(hit_mob, span_userdanger("You've been struck by lightning!")) hit_mob.electrocute_act(30, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) - hit_mob.Knockdown(modifier SECONDS, 5 SECONDS) - if(hit_mob.uses_integrity) - hit_mob.take_damage(20, BURN, ENERGY, FALSE) + var/limb_to_hit = hit_mob.get_bodypart(hit_mob.get_random_valid_zone(even_weights = TRUE)) + hit_mob.apply_damage(10, BURN, limb_to_hit, wound_bonus=CANT_WOUND) for(var/mob/living/nearby_target in oview(1, target)) to_chat(nearby_target, span_userdanger("You've been struck by an arc of lightning!")) nearby_target.electrocute_act(10, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) - if(nearby_target.uses_integrity) - nearby_target.take_damage(10, BURN, ENERGY, FALSE) + var/limb_to_hit = nearby_target.get_bodypart(nearby_target.get_random_valid_zone(even_weights = TRUE)) + nearby_target.apply_damage(10, BURN, limb_to_hit, wound_bonus=CANT_WOUND) /obj/item/borg/upgrade/modkit/ectoplasm name = "poltergeist projector" From 0b10cfa240c86ffebf2b35413aabe61208e9c09b Mon Sep 17 00:00:00 2001 From: keygenpie Date: Tue, 21 Jul 2026 15:33:23 -0400 Subject: [PATCH 39/39] oops --- modular_oculis/modules/anomalykits/code/anomalykits.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modular_oculis/modules/anomalykits/code/anomalykits.dm b/modular_oculis/modules/anomalykits/code/anomalykits.dm index 9880bfaf5c2a..1edd6e37a616 100644 --- a/modular_oculis/modules/anomalykits/code/anomalykits.dm +++ b/modular_oculis/modules/anomalykits/code/anomalykits.dm @@ -96,7 +96,7 @@ to_chat(nearby_target, span_userdanger("You've been struck by an arc of lightning!")) nearby_target.electrocute_act(10, src, flags = SHOCK_TESLA|SHOCK_NOSTUN) var/limb_to_hit = nearby_target.get_bodypart(nearby_target.get_random_valid_zone(even_weights = TRUE)) - nearby_target.apply_damage(10, BURN, limb_to_hit, wound_bonus=CANT_WOUND) + nearby_target.apply_damage(10, BURN, limb_to_hit, wound_bonus=CANT_WOUND) /obj/item/borg/upgrade/modkit/ectoplasm name = "poltergeist projector"