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