diff --git a/code/__HELPERS/custom_holoforms.dm b/code/__HELPERS/custom_holoforms.dm
index 691d316987..1cba5b9772 100644
--- a/code/__HELPERS/custom_holoforms.dm
+++ b/code/__HELPERS/custom_holoforms.dm
@@ -27,7 +27,6 @@
COMPILE_OVERLAYS(mannequin)
CHECK_TICK
var/icon/capture = getFlatIcon(mannequin)
- capture.Shift(WEST,16,FALSE)
CHECK_TICK
combined.Insert(capture, dir = d)
CHECK_TICK
@@ -67,7 +66,6 @@
var/chosen_name = input(C, "Which character do you wish to use as your appearance.") as anything in characters
if(chosen_name)
target_prefs = new(C)
- message_admins("reverse index is [characters[chosen_name]]")
if(!target_prefs.load_character(characters[chosen_name], TRUE))
target_prefs = C.prefs
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 7ce1c1e7cc..d47ffa18e0 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -86,6 +86,7 @@
var/mob/living/silicon/robot/deployed_shell = null //For shell control
var/datum/action/innate/deploy_shell/deploy_action = new
var/datum/action/innate/deploy_last_shell/redeploy_action = new
+ var/datum/action/innate/custom_holoform/custom_holoform = new
var/chnotify = 0
@@ -152,6 +153,7 @@
aicamera = new/obj/item/camera/siliconcam/ai_camera(src)
deploy_action.Grant(src)
+ custom_holoform.Grant(src)
if(isturf(loc))
add_verb(src, list(/mob/living/silicon/ai/proc/ai_network_change, \
diff --git a/code/modules/mob/living/silicon/custom_holoform.dm b/code/modules/mob/living/silicon/custom_holoform.dm
index 6dbde1eb81..0e0af7e308 100644
--- a/code/modules/mob/living/silicon/custom_holoform.dm
+++ b/code/modules/mob/living/silicon/custom_holoform.dm
@@ -1,17 +1,15 @@
-/mob/living/silicon/verb/set_custom_holoform()
- set name = "Set Custom Holoform"
- set desc = "Set your custom holoform using your current preferences slot and a specified set of gear."
- set category = "OOC"
-
+/mob/living/silicon/proc/attempt_set_custom_holoform()
if(!client.prefs)
to_chat(src, "No preferences datum on your client, contact an admin/coder!")
return
if(client.prefs.last_custom_holoform > world.time - CUSTOM_HOLOFORM_DELAY)
to_chat(src, "You are attempting to change custom holoforms too fast!")
return
+ client.prefs.last_custom_holoform = world.time
var/icon/new_holoform = user_interface_custom_holoform(client)
if(new_holoform)
client.prefs.custom_holoform_icon = new_holoform
client.prefs.cached_holoform_icons = null
- client.prefs.last_custom_holoform = world.time
to_chat(src, "Holoform set.")
+ return TRUE
+ return FALSE
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index 6d2da187a1..786c121ad6 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -131,6 +131,7 @@
var/datum/action/innate/pai/chassis/AC = new /datum/action/innate/pai/chassis
var/datum/action/innate/pai/rest/AR = new /datum/action/innate/pai/rest
var/datum/action/innate/pai/light/AL = new /datum/action/innate/pai/light
+ var/datum/action/innate/custom_holoform/custom_holoform = new /datum/action/innate/custom_holoform
var/datum/action/language_menu/ALM = new
SW.Grant(src)
@@ -139,6 +140,7 @@
AR.Grant(src)
AL.Grant(src)
ALM.Grant(src)
+ custom_holoform.Grant(src)
emitter_next_use = world.time + 10 SECONDS
/mob/living/silicon/pai/ComponentInitialize()
diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm
index 83df3ffba5..7db417b8fa 100644
--- a/code/modules/mob/living/silicon/robot/robot.dm
+++ b/code/modules/mob/living/silicon/robot/robot.dm
@@ -1022,6 +1022,32 @@
R.undeploy()
return TRUE
+/datum/action/innate/custom_holoform
+ name = "Select Custom Holoform"
+ desc = "Select one of your existing avatars to use as a holoform."
+ icon_icon = 'icons/mob/actions/actions_silicon.dmi'
+ button_icon_state = "custom_holoform"
+ required_mobility_flags = NONE
+
+/datum/action/innate/custom_holoform/Trigger()
+ if(!..())
+ return FALSE
+ var/mob/living/silicon/S = owner
+
+ //if setting the holoform succeeds, attempt to set it as the current holoform for the pAI or AI
+ if(S.attempt_set_custom_holoform())
+ if(istype(S, /mob/living/silicon/pai))
+ var/mob/living/silicon/pai/P = S
+ P.chassis = "custom"
+ else if(istype(S, /mob/living/silicon/ai))
+ var/mob/living/silicon/ai/A = S
+ if(A.client?.prefs?.custom_holoform_icon)
+ A.holo_icon = A.client.prefs.get_filtered_holoform(HOLOFORM_FILTER_AI)
+ else
+ A.holo_icon = getHologramIcon(icon('icons/mob/ai.dmi', "female"))
+
+ return TRUE
+
/mob/living/silicon/robot/proc/undeploy()
@@ -1043,6 +1069,8 @@
mainframe.laws.show_laws(mainframe) //Always remind the AI when switching
mainframe = null
+
+
/mob/living/silicon/robot/attack_ai(mob/user)
if(shell && (!connected_ai || connected_ai == user))
var/mob/living/silicon/ai/AI = user
diff --git a/icons/mob/actions/actions_silicon.dmi b/icons/mob/actions/actions_silicon.dmi
index cf3d7a2a95..fa7edf111a 100644
Binary files a/icons/mob/actions/actions_silicon.dmi and b/icons/mob/actions/actions_silicon.dmi differ