diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 6e0854fefdc..6c116e931d3 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -9,7 +9,6 @@ var/flush = null origin_tech = "programming=3;materials=3" - /obj/item/aicard/afterattack(atom/target, mob/user, proximity) ..() if(!proximity || !target) @@ -24,29 +23,36 @@ /obj/item/aicard/proc/update_state() var/mob/living/silicon/ai/AI = locate(/mob/living/silicon/ai) in src //AI is inside. + update_icon(UPDATE_OVERLAYS) if(AI) name = "intelliCard - [AI.name]" - if(AI.stat == DEAD) - icon_state = "aicard-404" - else - icon_state = "aicard-full" AI.cancel_camera() //AI are forced to move when transferred, so do this whenver one is downloaded. else - icon_state = "aicard" name = "intelliCard" - overlays.Cut() + +/obj/item/aicard/update_overlays() + . = ..() + var/mob/living/silicon/ai/AI = locate(/mob/living/silicon/ai) in src //AI is inside. + if(AI) + var/list/aicard_icon_state_names = icon_states(icon) + var/aicard_new_display = AI.icon_state + + if(aicard_new_display in aicard_icon_state_names) + . += aicard_new_display + else if(AI.stat == DEAD) + . += "ai_dead" + else + . += "ai" /obj/item/aicard/attack_self(mob/user) ui_interact(user) - /obj/item/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state) ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open) if(!ui) ui = new(user, src, ui_key, "AICard", "[name]", 600, 394, master_ui, state) ui.open() - /obj/item/aicard/ui_data(mob/user) var/list/data = list() @@ -74,7 +80,6 @@ return data - /obj/item/aicard/ui_act(action, params) if(..()) return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 9143d18a91b..89aa51b1a40 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -542,9 +542,10 @@ GLOBAL_LIST_INIT(ai_verbs_default, list( icon_state = "ai-catamari" else icon_state = "ai" - //else -// to_chat(usr, "You can only change your display once!") - //return + + if(istype(loc, /obj/item/aicard/)) + var/obj/item/aicard/AIC = loc + AIC.update_icon(UPDATE_OVERLAYS) // this verb lets the ai see the stations manifest /mob/living/silicon/ai/proc/ai_roster() diff --git a/code/modules/unit_tests/_unit_tests.dm b/code/modules/unit_tests/_unit_tests.dm index d52c3c33bef..c61977b24be 100644 --- a/code/modules/unit_tests/_unit_tests.dm +++ b/code/modules/unit_tests/_unit_tests.dm @@ -18,4 +18,5 @@ #include "subsystem_metric_sanity.dm" #include "timer_sanity.dm" #include "unit_test.dm" +#include "aicard_icons.dm" #endif diff --git a/code/modules/unit_tests/aicard_icons.dm b/code/modules/unit_tests/aicard_icons.dm new file mode 100644 index 00000000000..cb61ade842f --- /dev/null +++ b/code/modules/unit_tests/aicard_icons.dm @@ -0,0 +1,19 @@ +/datum/unit_test/aicard_icons/Run() + var/mob/living/silicon/ai/ai_box = new /mob/living/silicon/ai/ + var/obj/item/aicard/int_card = new /obj/item/aicard/ + + var/list/ai_icon_list = icon_states(ai_box.icon) + var/list/aicard_icon_list = icon_states(int_card.icon) + + var/list/ai_icon_exclusions = list("eye", "ai-holo-old", "holo-angel", "holo-borb", "holo-biggestfan", "holo-cloudkat", "holo-donut", "holo-frostphoenix", "holo1", "holo2", "holo3", "holo4", "0", "1", "2", "3", "3b", "4") + + for(var/excl in ai_icon_exclusions) + ai_icon_list -= excl + + for(var/icn_st in ai_icon_list) + if(icn_st in aicard_icon_list) + continue + + Fail("Every AI Display must have a corresponding icon of the same name in [int_card.icon] for intelicards, [icn_st] is missing!") + + //The exclusions list will need to be updated anytime any non-display icons are added to ai.dmi diff --git a/icons/obj/aicards.dmi b/icons/obj/aicards.dmi index 177e72ad4bc..3bc1fd6457e 100644 Binary files a/icons/obj/aicards.dmi and b/icons/obj/aicards.dmi differ