diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index ea15eaa8c3e..ca5319313f8 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -51,7 +51,7 @@ var/list/ai_verbs_default = list( var/obj/machinery/camera/camera = null var/aiRestorePowerRoutine = 0 var/viewalerts = 0 - var/icon/holo_icon//Default is assigned when AI is created. + var/icon/holo_icon //Default is assigned when AI is created. var/list/connected_robots = list() var/obj/item/device/pda/ai/aiPDA = null var/obj/item/device/communicator/aiCommunicator = null diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 46c59c440f5..af8277e9870 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -52,7 +52,8 @@ "Teppi" = "teppi", "Catslug" = "catslug", "Car" = "car", - "Type One" = "typeone" + "Type One" = "typeone", + "Type Thirteen" = "13" //VOREStation Addition End ) @@ -104,6 +105,8 @@ var/current_pda_messaging = null + var/our_icon_rotation = 0 + /mob/living/silicon/pai/New(var/obj/item/device/paicard) src.loc = paicard card = paicard @@ -246,6 +249,7 @@ return if(world.time <= last_special) + to_chat(src, "You can't unfold yet.") return last_special = world.time + 100 @@ -299,6 +303,7 @@ return if(world.time <= last_special) + to_chat(src, "You can't fold up yet.") return close_up() @@ -345,14 +350,49 @@ var/obj/item/weapon/rig/rig = src.get_rig() if(istype(rig)) rig.force_rest(src) + return + else if(chassis == "13") + resting = !resting + update_transform() else resting = !resting icon_state = resting ? "[chassis]_rest" : "[chassis]" update_icon() //VOREStation edit - to_chat(src, "You are now [resting ? "resting" : "getting up"]") + to_chat(src, "You are now [resting ? "resting" : "getting up"]") canmove = !resting +/mob/living/silicon/pai/update_transform() + . = ..() + if(chassis != "13") + return + to_chat(src, "I'm gonna try to rotate the icon!") + var/desired_scale_x = size_multiplier * icon_scale_x + var/desired_scale_y = size_multiplier * icon_scale_y + appearance_flags |= PIXEL_SCALE + + var/matrix/M = matrix() + var/anim_time = 3 + + if(resting) + var/randn = rand(1, 2) + if(randn <= 1) // randomly choose a rotation + M.Turn(-90) + else + M.Turn(90) + M.Scale(desired_scale_y, desired_scale_x)//VOREStation Edit + if(holo_icon_dimension == 64)//VOREStation Edit + M.Translate(13,-22) + else + M.Translate(1,-6) + layer = MOB_LAYER -0.01 // Fix for a byond bug where turf entry order no longer matters + else + M.Scale(desired_scale_x, desired_scale_y)//VOREStation Edit + M.Translate(0, (vis_height/2)*(desired_scale_y-1)) //VOREStation edit + layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters + animate(src, transform = M, time = anim_time) + + //Overriding this will stop a number of headaches down the track. /mob/living/silicon/pai/attackby(obj/item/weapon/W as obj, mob/user as mob) if(W.force) diff --git a/code/modules/mob/living/silicon/pai/pai_vr.dm b/code/modules/mob/living/silicon/pai/pai_vr.dm index 07f948ca13c..7930778e7e2 100644 --- a/code/modules/mob/living/silicon/pai/pai_vr.dm +++ b/code/modules/mob/living/silicon/pai/pai_vr.dm @@ -6,6 +6,9 @@ var/hide_glow = FALSE var/image/eye_layer = null // Holds the eye overlay. var/eye_color = "#00ff0d" + var/icon/holo_icon + var/icon/holo_icon_north + var/holo_icon_dimension = 32 var/global/list/wide_chassis = list( "rat", "panther", @@ -41,7 +44,8 @@ "teppi", "catslug", "car", - "typeone" + "typeone", + "13" ) //These vars keep track of whether you have the related software, used for easily updating the UI var/soft_ut = FALSE //universal translator @@ -60,6 +64,11 @@ verbs |= /mob/living/proc/set_size verbs |= /mob/living/proc/shred_limb +/mob/living/silicon/pai/Login() + . = ..() + last_special = world.time + 100 //Let's give get_character_icon time to work + get_character_icon() + /mob/living/silicon/pai/proc/pai_nom(var/mob/living/T in oview(1)) set name = "pAI Nom" set category = "pAI Commands" @@ -78,6 +87,10 @@ /mob/living/silicon/pai/update_icon() //Some functions cause this to occur, such as resting ..() + if(chassis == "13") + add_eyes() + return + update_fullness_pai() if(!people_eaten && !resting) @@ -106,6 +119,9 @@ /mob/living/silicon/pai/update_icons() //And other functions cause this to occur, such as digesting someone. ..() + if(chassis == "13") + add_eyes() + return update_fullness_pai() if(!people_eaten && !resting) icon_state = "[chassis]" @@ -134,7 +150,13 @@ var/oursize = size_multiplier resize(1, FALSE, TRUE, TRUE, FALSE) //We resize ourselves to normal here for a moment to let the vis_height get reset chassis = possible_chassis[choice] - if(chassis in wide_chassis) + if(chassis == "13") + if(!holo_icon) + if(!get_character_icon()) + return + icon_state = null + icon = holo_icon + else if(chassis in wide_chassis) icon = 'icons/mob/pai_vr64x64.dmi' vis_height = 64 else @@ -154,6 +176,7 @@ /mob/living/silicon/pai/verb/toggle_eyeglow() set category = "pAI Commands" set name = "Toggle Eye Glow" + if(chassis in allows_eye_color) if(eye_glow && !hide_glow) eye_glow = FALSE @@ -186,14 +209,22 @@ /mob/living/silicon/pai/proc/add_eyes() remove_eyes() - if(chassis in allows_eye_color) - if(!eye_layer) - eye_layer = image(icon, "[icon_state]-eyes") - eye_layer.appearance_flags = appearance_flags - eye_layer.color = eye_color - if(eye_glow && !hide_glow) - eye_layer.plane = PLANE_LIGHTING_ABOVE - add_overlay(eye_layer) + if(chassis == "13") + if(holo_icon.Width() > 32) + eye_layer = image('icons/mob/pai_vr64x64.dmi', "type13-eyes") + pixel_x = -16 + default_pixel_x = -16 + holo_icon_dimension = 64 + else + eye_layer = image('icons/mob/pai_vr.dmi', "type13-eyes") + else if(chassis in allows_eye_color) + eye_layer = image(icon, "[icon_state]-eyes") + else return + eye_layer.appearance_flags = appearance_flags + eye_layer.color = eye_color + if(eye_glow && !hide_glow) + eye_layer.plane = PLANE_LIGHTING_ABOVE + add_overlay(eye_layer) /mob/living/silicon/pai/proc/remove_eyes() cut_overlay(eye_layer) @@ -545,3 +576,33 @@ /mob/living/silicon/pai/proc/ar_hud() touch_window("AR HUD") + +/mob/living/silicon/pai/proc/get_character_icon() + if(!client || !client.prefs) return FALSE + var/mob/living/carbon/human/dummy/dummy = new () + //This doesn't include custom_items because that's ... hard. + client.prefs.dress_preview_mob(dummy) + sleep(1 SECOND) //Strange bug in preview code? Without this, certain things won't show up. Yay race conditions? + dummy.regenerate_icons() + + var/icon/new_holo = getCompoundIcon(dummy) + + dummy.tail_alt = TRUE + dummy.set_dir(NORTH) + var/icon/new_holo_north = getCompoundIcon(dummy) + + qdel(holo_icon) + qdel(holo_icon_north) + qdel(dummy) + holo_icon = new_holo + holo_icon_north = new_holo_north + return TRUE + +/mob/living/silicon/pai/set_dir(var/new_dir) + . = ..() + if(. && (chassis == "13")) + switch(dir) + if(SOUTH) + icon = holo_icon + else + icon = holo_icon_north \ No newline at end of file diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index e564bba7b01..c2e5a319512 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -205,6 +205,8 @@ // Determine what job is marked as 'High' priority, and dress them up as such. if(job_civilian_low & ASSISTANT) previewJob = job_master.GetJob(USELESS_JOB) + else if(ispAI(client.mob)) //VOREStation Edit! - pAIs shouldn't wear job gear~! + //Don't do anything! else for(var/datum/job/job in job_master.occupations) var/job_flag diff --git a/icons/mob/pai_vr.dmi b/icons/mob/pai_vr.dmi index 859cfc71162..82f5faffe85 100644 Binary files a/icons/mob/pai_vr.dmi and b/icons/mob/pai_vr.dmi differ diff --git a/icons/mob/pai_vr64x64.dmi b/icons/mob/pai_vr64x64.dmi index d19f5137dfd..d9840c659ea 100644 Binary files a/icons/mob/pai_vr64x64.dmi and b/icons/mob/pai_vr64x64.dmi differ