diff --git a/code/__DEFINES/pai.dm b/code/__DEFINES/pai.dm
index 5e5e13b1867..ed616a357a6 100644
--- a/code/__DEFINES/pai.dm
+++ b/code/__DEFINES/pai.dm
@@ -12,7 +12,7 @@
#define PAI_SPAM_TIME (40 SECONDS)
/// Maximum distance you can set the holoform leash
-#define HOLOFORM_MAX_RANGE 9
+#define HOLOFORM_MAX_RANGE 25 // SKYRAT EDIT CHANGE - ORIGINAL: #define HOLOFORM_MAX_RANGE 9
/// Minimum distance you can set the holoform leash
#define HOLOFORM_MIN_RANGE 3
diff --git a/modular_skyrat/master_files/code/modules/pai/card.dm b/modular_skyrat/master_files/code/modules/pai/card.dm
new file mode 100644
index 00000000000..b804649d343
--- /dev/null
+++ b/modular_skyrat/master_files/code/modules/pai/card.dm
@@ -0,0 +1,17 @@
+/obj/item/pai_card/ui_data(mob/user)
+ . = ..()
+ if(!pai)
+ return
+
+ .["pai"]["leash_enabled"] = pai.leashed
+
+/obj/item/pai_card/ui_act(action, list/params, datum/tgui/ui)
+ . = ..()
+ if(.)
+ return TRUE
+
+ if(pai && action == "toggle_leash")
+ pai.toggle_leash()
+ return TRUE
+
+ return FALSE
diff --git a/modular_skyrat/master_files/code/modules/pai/pai.dm b/modular_skyrat/master_files/code/modules/pai/pai.dm
new file mode 100644
index 00000000000..33fc1cfeacc
--- /dev/null
+++ b/modular_skyrat/master_files/code/modules/pai/pai.dm
@@ -0,0 +1,16 @@
+/mob/living/silicon/pai/
+ /// Whether or not the PAI is subject to range limitations and able to roam freely, off by default
+ var/leashed = FALSE
+
+/// Enables or disables the leash, allowing or forbidding the PAI from leaving a specified range
+/mob/living/silicon/pai/proc/toggle_leash()
+ leashed = !leashed
+ to_chat(src, span_warning("Your virtual leash has been [leashed ? "activated" : "deactivated"]!"))
+ if(leashed)
+ check_distance() // yoink them back
+
+/mob/living/silicon/pai/check_distance()
+ if(!leashed)
+ return
+
+ return ..()
diff --git a/tgstation.dme b/tgstation.dme
index fe45bcf8d6c..2350a98ae43 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -5732,6 +5732,8 @@
#include "modular_skyrat\master_files\code\modules\mod\modules\_module.dm"
#include "modular_skyrat\master_files\code\modules\mod\modules\modules_antag.dm"
#include "modular_skyrat\master_files\code\modules\modular_computers\computers\item\laptop_presets.dm"
+#include "modular_skyrat\master_files\code\modules\pai\card.dm"
+#include "modular_skyrat\master_files\code\modules\pai\pai.dm"
#include "modular_skyrat\master_files\code\modules\paperwork\stamps.dm"
#include "modular_skyrat\master_files\code\modules\power\cable.dm"
#include "modular_skyrat\master_files\code\modules\power\lighting\light_mapping_helpers.dm"
diff --git a/tgui/packages/tgui/interfaces/PaiCard.tsx b/tgui/packages/tgui/interfaces/PaiCard.tsx
index 4a15a46e5d1..3a3d6ca114b 100644
--- a/tgui/packages/tgui/interfaces/PaiCard.tsx
+++ b/tgui/packages/tgui/interfaces/PaiCard.tsx
@@ -28,6 +28,7 @@ type Pai = {
transmit: BooleanLike;
receive: BooleanLike;
range: number;
+ leash_enabled: BooleanLike; // SKYRAT EDIT ADDITION
};
export const PaiCard = (props, context) => {
@@ -155,6 +156,7 @@ const PaiOptions = (props, context) => {
transmit,
receive,
range,
+ leash_enabled /* SKYRAT EDIT ADDITION */,
},
} = data;
const suppliedLaws = laws[0] ? decodeHtmlEntities(laws[0]) : 'None';
@@ -185,13 +187,25 @@ const PaiOptions = (props, context) => {
Toggle
+ {/* SKYRAT EDIT ADDITION START */}
+
+
+
+ {/* SKYRAT EDIT ADDITION END */}
{range}
@@ -199,7 +213,8 @@ const PaiOptions = (props, context) => {