diff --git a/code/game/machinery/casino_ch.dm b/code/game/machinery/casino_ch.dm
index 1c39d2221c..354c309366 100644
--- a/code/game/machinery/casino_ch.dm
+++ b/code/game/machinery/casino_ch.dm
@@ -1140,4 +1140,218 @@
usr << "Invalid interval."
return
usr << "You set the interval to [interval]"
- return
\ No newline at end of file
+ return
+
+/obj/machinery/casinoslave_handler
+ name = "Sentient Prize Automated Sales Machinery"
+ desc = "The Sentient Prize Automated Sales Machinery, also known as SPASM! Here one can see who is on sale as sentinet prizes, as well as selling self and also buying prizes."
+ icon = 'icons/obj/casino_ch.dmi'
+ icon_state = "casinoslave_hub_off"
+ density = 1
+ anchored = 1
+ req_access = list(300)
+
+ var/casinoslave_sale = "disabled"
+ var/casinoslave_price = 100
+ var/collar_list = list()
+ var/slaves_ckeys_list = list() //Same trick as lottery, to keep life simple
+ var/obj/item/clothing/accessory/collar/casinoslave/selected_collar = null
+
+/obj/machinery/casinoslave_handler/attack_hand(mob/living/user as mob)
+ if(usr.incapacitated())
+ return
+ if(casinoslave_sale == "disabled")
+ to_chat(user,"The SPASM is disabled. ")
+ return
+
+ if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
+ switch(input(user,"Choose what to do","SPASM") in list("Show selected Prize", "Select Prize", "Become Prize (Please examine yourself first)", "Cancel"))
+ if("Cancel")
+ return
+ if("Show selected Prize")
+ if(QDELETED(selected_collar))
+ collar_list -= selected_collar
+ slaves_ckeys_list -= selected_collar.slaveckey
+ to_chat(user, "No collar is currently selected or the currently selected one has been destroyed or disabled.")
+ selected_collar = null
+ return
+ to_chat(user, "Sentient Prize information")
+ to_chat(user, "Name: [selected_collar.slavename]")
+ to_chat(user, "Description: [selected_collar.slaveflavor]")
+ to_chat(user, "OOC: [selected_collar.slaveooc]")
+ if(selected_collar.ownername != null)
+ to_chat(user, "This prize is already owned by [selected_collar.ownername]")
+
+ if("Select Prize")
+ selected_collar = tgui_input_list(user, "Select a prize", "Chose a collar", collar_list)
+ if(QDELETED(selected_collar))
+ collar_list -= selected_collar
+ slaves_ckeys_list -= selected_collar.slaveckey
+ to_chat(user, "No collars to chose, or selected collar has been destroyed or deactived, selection has been removed from list.")
+ selected_collar = null
+ return
+
+ if("Become Prize (Please examine yourself first)") //Its awkward, but no easy way to obtain flavor_text due to server not loading text of mob until its been examined at least once.
+ var/safety_ckey = user.client.ckey
+ if(safety_ckey in slaves_ckeys_list)
+ to_chat(user, "The SPASM beeps in an upset manner, you already have a collar!")
+ return
+ var/confirm = tgui_alert(usr, "Are you sure you want to become a sentient prize?", "Confirm Sentient Prize", list("Yes", "No"))
+ if(confirm == "Yes")
+ to_chat(user, "You are now a prize!")
+ if(safety_ckey in slaves_ckeys_list)
+ to_chat(user, "The SPASM beeps in an upset manner, you already have a collar!")
+ return
+ slaves_ckeys_list += user.ckey
+ var/obj/item/clothing/accessory/collar/casinoslave/C = new(src.loc)
+ C.slavename = "[user.name]"
+ C.slaveckey = "[user.ckey]"
+ C.slaveflavor = user.flavor_text
+ C.slaveooc = user.ooc_notes
+ C.name = "Sentient Prize Collar: Available! [user.name] purchaseable at the SPASM!"
+ C.desc = "Golden Goose Sentient Prize collar. The tags shows in flashy colorful text the wearer is [user.name] and is currently available to buy at the Sentient Prize Automated Sales Machinery!"
+ C.icon_state = "casinoslave_available"
+ C.update_icon()
+ collar_list += C
+
+ spawn_casinochips(casinoslave_price, src.loc)
+
+/obj/machinery/casinoslave_handler/attackby(obj/item/weapon/W as obj, mob/user as mob)
+ if(usr.incapacitated())
+ return
+
+ if(istype(W, /obj/item/weapon/spacecasinocash))
+ if(casinoslave_sale == "disabled")
+ to_chat(user, "Sentient Prize sales are currently disabled.")
+ return
+ if(!selected_collar.ownername)
+ var/obj/item/weapon/spacecasinocash/C = W
+ if(user.client.ckey == selected_collar.slaveckey)
+ insert_chip(C, user, "selfbuy")
+ return
+ else
+ insert_chip(C, user, "buy")
+ return
+ else
+ to_chat(user, "This Sentient Prize is already owned! If you are the owner you can release the prize by swiping the collar on the SPASM!")
+ return
+
+ if(istype(W, /obj/item/clothing/accessory/collar/casinoslave))
+ var/obj/item/clothing/accessory/collar/casinoslave/C = W
+ if(user.name != C.slavename && user.name != C.ownername)
+ to_chat(user, "This Sentient Prize collar isn't yours, please give it to the one it tagged for, belongs to, or a casino staff member!")
+ return
+ if(user.name == C.slavename)
+ if(!C.ownername)
+ to_chat(user,"If collar isn't disabled and entry removed, please select your entry and insert chips. Or contact staff if you need assistance. ")
+ return
+ else
+ to_chat(user,"If collar isn't disabled and entry removed, please ask your owner to free you with collar swipe on the SPASM, or contact staff if you need assistance. ")
+ return
+ if(user.name == C.ownername)
+ var/confirm = tgui_alert(usr, "Are you sure you want to wipe [C.slavename] entry?", "Confirm Sentient Prize Release", list("Yes", "No"))
+ if(confirm == "Yes")
+ to_chat(user, "[C.slavename] collar has been deleted from registry!")
+ C.icon_state = "casinoslave"
+ C.update_icon()
+ C.name = "a disabled Sentient Prize Collar: [C.slavename]"
+ C.desc = "A collar worn by sentient prizes on the Golden Goose Casino. The tag says its registered to [C.slavename], but harsh red text informs you its been disabled."
+ slaves_ckeys_list -= C.slaveckey
+ C.slaveckey = null
+ collar_list -= C
+
+ if(istype(W, /obj/item/weapon/card/id)||istype(W, /obj/item/device/pda))
+ if(!check_access(W))
+ to_chat(user, "Access Denied.")
+ return
+ else
+ to_chat(user, "Proper access, allowed staff controls.")
+ if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
+ switch(input(user,"Choose what to do (Management)","SPASM (Management)") in list("Toggle Sentient Prize Sales", "Wipe Selected Prize Entry", "Change Prize Value", "Cancel"))
+ if("Cancel")
+ return
+
+ if("Toggle Sentient Prize Sales")
+ if(casinoslave_sale == "disabled")
+ casinoslave_sale = "enabled"
+ icon_state = "casinoslave_hub_on"
+ update_icon()
+ to_chat(user,"Prize sale has been enabled. ")
+ else
+ casinoslave_sale = "disabled"
+ icon_state = "casinoslave_hub_off"
+ update_icon()
+ to_chat(user,"Prize sale has been disabled. ")
+
+ if("Wipe Selected Prize Entry")
+ if(!selected_collar)
+ to_chat(user, "No collar selected!")
+ return
+ if(QDELETED(selected_collar))
+ collar_list -= selected_collar
+ slaves_ckeys_list -= selected_collar.slaveckey
+ to_chat(user, "Collar has been destroyed!")
+ selected_collar = null
+ return
+ var/safety_ckey = selected_collar.slaveckey
+ var/confirm = tgui_alert(usr, "Are you sure you want to wipe [selected_collar.slavename] entry?", "Confirm Sentient Prize", list("Yes", "No"))
+ if(confirm == "Yes")
+ if(safety_ckey == selected_collar.slaveckey)
+ to_chat(user, "[selected_collar.slavename] collar has been deleted from registry!")
+ selected_collar.icon_state = "casinoslave"
+ selected_collar.update_icon()
+ selected_collar.name = "a disabled Sentient Prize Collar: [selected_collar.slavename]"
+ selected_collar.desc = "A collar worn by sentient prizes on the Golden Goose Casino. The tag says its registered to [selected_collar.slavename], but harsh red text informs you its been disabled."
+ slaves_ckeys_list -= selected_collar.slaveckey
+ selected_collar.slaveckey = null
+ collar_list -= selected_collar
+ selected_collar = null
+ else
+ to_chat(user, "Registry deletion aborted! Changed collar selection!")
+ return
+
+ if("Change Prize Value")
+ setprice(user)
+
+/obj/machinery/casinoslave_handler/proc/insert_chip(var/obj/item/weapon/spacecasinocash/cashmoney, mob/user, var/buystate)
+ if(cashmoney.worth < casinoslave_price)
+ to_chat(user,"You dont have enough chips to pay for the sentient prize! ")
+ return
+
+ cashmoney.worth -= casinoslave_price
+ cashmoney.update_icon()
+
+ if(cashmoney.worth <= 0)
+ usr.drop_from_inventory(cashmoney)
+ qdel(cashmoney)
+ cashmoney.update_icon()
+
+ if(buystate == "selfbuy")
+ to_chat(user,"You put [casinoslave_price] credits worth of chips into the SPASM and nullify your collar! ")
+ selected_collar.icon_state = "casinoslave"
+ selected_collar.update_icon()
+ selected_collar.name = "a disabled Sentient Prize Collar: [selected_collar.slavename]"
+ selected_collar.desc = "A collar worn by sentient prizes on the Golden Goose Casino. The tag says its registered to [selected_collar.slavename], but harsh red text informs you its been disabled."
+ slaves_ckeys_list -= selected_collar.slaveckey
+ selected_collar.slaveckey = null
+ collar_list -= selected_collar
+ selected_collar = null
+
+ if(buystate == "buy")
+ to_chat(user,"You put [casinoslave_price] credits worth of chips into the SPASM and it pings to inform you bought [selected_collar.slavename]! ")
+ selected_collar.icon_state = "casinoslave_owned"
+ selected_collar.update_icon()
+ selected_collar.ownername = user.name
+ selected_collar.name = "Sentient Prize Collar: [selected_collar.slavename] owned by [selected_collar.ownername]!"
+ selected_collar.desc = "A collar worn by sentient prizes on the Golden Goose Casino. The tag says its registered to [selected_collar.slavename] and they are owned by [selected_collar.ownername]."
+ selected_collar = null
+
+/obj/machinery/casinoslave_handler/proc/setprice(mob/living/user as mob)
+ if(usr.incapacitated())
+ return
+ if(ishuman(usr) || istype(usr, /mob/living/silicon/robot))
+ casinoslave_price = input("Select the desired price (1-1000)", "Set Price") as num
+ if(casinoslave_price>1000 || casinoslave_price<1)
+ to_chat(user,"Invalid price. ")
+ return
+ to_chat(user,"You set the price to [casinoslave_price] ")
diff --git a/code/modules/clothing/under/accessories/accessory_ch.dm b/code/modules/clothing/under/accessories/accessory_ch.dm
new file mode 100644
index 0000000000..b4ac071330
--- /dev/null
+++ b/code/modules/clothing/under/accessories/accessory_ch.dm
@@ -0,0 +1,28 @@
+/obj/item/clothing/accessory/collar/casinoslave
+ name = "a disabled Sentient Prize Collar"
+ desc = "A collar worn by sentient prizes on the Golden Goose Casino. Although the red text on it shows its disconnected and nonfunctional."
+ icon = 'icons/obj/clothing/ties_ch.dmi'
+ icon_override = 'icons/mob/ties_ch.dmi'
+
+ icon_state = "casinoslave"
+ item_state = "casinoslave"
+ overlay_state = "casinoslave"
+
+ var/slavename = null //Name for system to put on collar description
+ var/ownername = null //Name for system to put on collar description
+ var/slaveckey = null //Ckey for system to check who is the person and ensure no abuse of system or errors
+ var/slaveflavor = null //Description to show on the SPASM
+ var/slaveooc = null //OOC text to show on the SPASM
+
+/obj/item/clothing/accessory/collar/casinoslave/attack_self(mob/user as mob)
+ //keeping it blank so people don't tag and reset collar status
+
+/obj/item/clothing/accessory/collar/casinoslave_fake
+ name = "a Sentient Prize Collar"
+ desc = "A collar worn by sentient prizes on the Golden Goose Casino. This one has been disconnected from the system and is now an accessory!"
+ icon = 'icons/obj/clothing/ties_ch.dmi'
+ icon_override = 'icons/mob/ties_ch.dmi'
+
+ icon_state = "casinoslave_owned"
+ item_state = "casinoslave_owned"
+ overlay_state = "casinoslave_owned"
\ No newline at end of file
diff --git a/icons/mob/species/teshari/ties_ch.dmi b/icons/mob/species/teshari/ties_ch.dmi
new file mode 100644
index 0000000000..6c5795a855
Binary files /dev/null and b/icons/mob/species/teshari/ties_ch.dmi differ
diff --git a/icons/mob/ties_ch.dmi b/icons/mob/ties_ch.dmi
index 0a95c72053..de93c35119 100644
Binary files a/icons/mob/ties_ch.dmi and b/icons/mob/ties_ch.dmi differ
diff --git a/icons/obj/casino_ch.dmi b/icons/obj/casino_ch.dmi
index fa3fd57f38..aec50dffe8 100644
Binary files a/icons/obj/casino_ch.dmi and b/icons/obj/casino_ch.dmi differ
diff --git a/icons/obj/clothing/ties_ch.dmi b/icons/obj/clothing/ties_ch.dmi
index 56abd55da2..069850600c 100644
Binary files a/icons/obj/clothing/ties_ch.dmi and b/icons/obj/clothing/ties_ch.dmi differ
diff --git a/vorestation.dme b/vorestation.dme
index abe612a263..cc2c048af0 100644
--- a/vorestation.dme
+++ b/vorestation.dme
@@ -2176,6 +2176,7 @@
#include "code\modules\clothing\under\solgov_vr.dm"
#include "code\modules\clothing\under\syndicate.dm"
#include "code\modules\clothing\under\accessories\accessory.dm"
+#include "code\modules\clothing\under\accessories\accessory_ch.dm"
#include "code\modules\clothing\under\accessories\accessory_vr.dm"
#include "code\modules\clothing\under\accessories\accessory_yw.dm"
#include "code\modules\clothing\under\accessories\armband.dm"