diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index c90a8c19dbb..b9d763fd883 100644 --- a/code/_onclick/ai.dm +++ b/code/_onclick/ai.dm @@ -10,6 +10,8 @@ Note that AI have no need for the adjacency proc, and so this proc is a lot cleaner. */ /mob/living/silicon/ai/DblClickOn(var/atom/A, params) + if (istype(A, /obj/screen)) + return if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked build_click(src, client.buildmode, params, A) return diff --git a/code/_onclick/hud/_defines.dm b/code/_onclick/hud/_defines.dm index 342eeba8d36..5b8174a9650 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -89,6 +89,23 @@ #define ui_alien_health "EAST-1:28,CENTER-1:15" //aliens have the health display where humans have the pressure damage indicator. #define ui_alienplasmadisplay "EAST-1:28,CENTER-2:15" +// AI + +#define ui_ai_core "SOUTH:6,WEST:16" +#define ui_ai_camera_list "SOUTH:6,WEST+1:16" +#define ui_ai_track_with_camera "SOUTH:6,WEST+2:16" +#define ui_ai_camera_light "SOUTH:6,WEST+3:16" +#define ui_ai_crew_monitor "SOUTH:6,WEST+4:16" +#define ui_ai_crew_manifest "SOUTH:6,WEST+5:16" +#define ui_ai_alerts "SOUTH:6,WEST+6:16" +#define ui_ai_announcement "SOUTH:6,WEST+7:16" +#define ui_ai_shuttle "SOUTH:6,WEST+8:16" +#define ui_ai_state_laws "SOUTH:6,WEST+9:16" +#define ui_ai_pda_send "SOUTH:6,WEST+10:16" +#define ui_ai_pda_log "SOUTH:6,WEST+11:16" +#define ui_ai_take_picture "SOUTH:6,WEST+12:16" +#define ui_ai_view_images "SOUTH:6,WEST+13:16" + //Pop-up inventory #define ui_shoes "WEST+1:8,SOUTH:5" diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm new file mode 100644 index 00000000000..9f254878373 --- /dev/null +++ b/code/_onclick/hud/ai.dm @@ -0,0 +1,135 @@ +/datum/hud/proc/ai_hud() + adding = list() + other = list() + + var/obj/screen/using + +//AI core + using = new /obj/screen() + using.name = "AI Core" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "ai_core" + using.screen_loc = ui_ai_core + using.layer = 20 + adding += using + +//Camera list + using = new /obj/screen() + using.name = "Show Camera List" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "camera" + using.screen_loc = ui_ai_camera_list + using.layer = 20 + adding += using + +//Track + using = new /obj/screen() + using.name = "Track With Camera" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "track" + using.screen_loc = ui_ai_track_with_camera + using.layer = 20 + adding += using + +//Camera light + using = new /obj/screen() + using.name = "Toggle Camera Light" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "camera_light" + using.screen_loc = ui_ai_camera_light + using.layer = 20 + adding += using + +//Crew Monitorting + using = new /obj/screen() + using.name = "Crew Monitorting" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "crew_monitor" + using.screen_loc = ui_ai_crew_monitor + using.layer = 20 + adding += using + +//Crew Manifest + using = new /obj/screen() + using.name = "Show Crew Manifest" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "manifest" + using.screen_loc = ui_ai_crew_manifest + using.layer = 20 + adding += using + +//Alerts + using = new /obj/screen() + using.name = "Show Alerts" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "alerts" + using.screen_loc = ui_ai_alerts + using.layer = 20 + adding += using + +//Announcement + using = new /obj/screen() + using.name = "Announcement" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "announcement" + using.screen_loc = ui_ai_announcement + using.layer = 20 + adding += using + +//Shuttle + using = new /obj/screen() + using.name = "Call Emergency Shuttle" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "call_shuttle" + using.screen_loc = ui_ai_shuttle + using.layer = 20 + adding += using + +//Laws + using = new /obj/screen() + using.name = "State Laws" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "state_laws" + using.screen_loc = ui_ai_state_laws + using.layer = 20 + adding += using + +//PDA message + using = new /obj/screen() + using.name = "PDA - Send Message" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "pda_send" + using.screen_loc = ui_ai_pda_send + using.layer = 20 + adding += using + +//PDA log + using = new /obj/screen() + using.name = "PDA - Show Message Log" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "pda_receive" + using.screen_loc = ui_ai_pda_log + using.layer = 20 + adding += using + +//Take image + using = new /obj/screen() + using.name = "Take Image" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "take_picture" + using.screen_loc = ui_ai_take_picture + using.layer = 20 + adding += using + +//View images + using = new /obj/screen() + using.name = "View Images" + using.icon = 'icons/mob/screen_ai.dmi' + using.icon_state = "view_images" + using.screen_loc = ui_ai_view_images + using.layer = 20 + adding += using + + mymob.client.screen += adding + other + + return \ No newline at end of file diff --git a/code/_onclick/hud/other_mobs.dm b/code/_onclick/hud/other_mobs.dm index e1ccf1732a6..c9a188d0c80 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -13,9 +13,6 @@ mymob.blind.screen_loc = "CENTER-7,CENTER-7" mymob.blind.layer = 0 -/datum/hud/proc/ai_hud() - return - /datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen_midnight.dmi') blobpwrdisplay = new /obj/screen() diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 42e54d75b39..58b96c7492e 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -290,6 +290,78 @@ if(istype(usr, /mob/living/silicon/robot)) usr:toggle_module(3) + if("AI Core") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.view_core() + + if("Show Camera List") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + var/camera = input(AI) in AI.get_camera_list() + AI.ai_camera_list(camera) + + if("Track With Camera") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + var/target_name = input(AI) in AI.trackable_mobs() + AI.ai_camera_track(target_name) + + if("Toggle Camera Light") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.toggle_camera_light() + + if("Crew Monitorting") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + crewmonitor(AI) + + if("Show Crew Manifest") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_roster() + + if("Show Alerts") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_alerts() + + if("Announcement") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.announcement() + + if("Call Emergency Shuttle") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.ai_call_shuttle() + + if("State Laws") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.checklaws() + + if("PDA - Send Message") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.cmd_send_pdamesg() + + if("PDA - Show Message Log") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.cmd_show_message_log() + + if("Take Image") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.aicamera.toggle_camera_mode() + + if("View Images") + if(isAI(usr)) + var/mob/living/silicon/ai/AI = usr + AI.aicamera.viewpictures() + else return 0 return 1 diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index f588e5146a3..3b99e47fd8e 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -22,9 +22,6 @@ /mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list()) - set category = "AI Commands" - set name = "Show Camera List" - if(src.stat == 2) src << "You can't list the cameras because you are dead!" return @@ -101,10 +98,6 @@ return targets /mob/living/silicon/ai/proc/ai_camera_track(var/target_name in trackable_mobs()) - set category = "AI Commands" - set name = "Track With Camera" - set desc = "Select who you would like to track." - if(src.stat == 2) src << "You can't track with camera because you are dead!" return diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 7694275849a..0d14455d3ce 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -972,9 +972,7 @@ var/global/list/obj/item/device/pda/PDAs = list() //AI verb and proc for sending PDA messages. -/mob/living/silicon/ai/verb/cmd_send_pdamesg() - set category = "AI Commands" - set name = "PDA - Send Message" +/mob/living/silicon/ai/proc/cmd_send_pdamesg() var/list/names = list() var/list/plist = list() var/list/namecounts = list() @@ -1037,9 +1035,7 @@ var/global/list/obj/item/device/pda/PDAs = list() else usr << "You do not have a PDA. You should make an issue report about this." -/mob/living/silicon/ai/verb/cmd_show_message_log() - set category = "AI Commands" - set name = "PDA - Show Message Log" +/mob/living/silicon/ai/proc/cmd_show_message_log() if(usr.stat == 2) usr << "You can't do that because you are dead!" return diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index f32dba73748..3eedd00b97c 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -90,8 +90,7 @@ var/list/ai_list = list() aicamera = new/obj/item/device/camera/ai_camera(src) if (istype(loc, /turf)) - verbs.Add(/mob/living/silicon/ai/proc/ai_call_shuttle,/mob/living/silicon/ai/proc/ai_camera_track, \ - /mob/living/silicon/ai/proc/ai_camera_list, /mob/living/silicon/ai/proc/ai_network_change, \ + verbs.Add(/mob/living/silicon/ai/proc/ai_network_change, \ /mob/living/silicon/ai/proc/ai_statuschange, /mob/living/silicon/ai/proc/ai_hologram_change, \ /mob/living/silicon/ai/proc/toggle_camera_light) @@ -182,9 +181,6 @@ var/list/ai_list = list() stat(null, text("Systems nonfunctional")) /mob/living/silicon/ai/proc/ai_alerts() - set category = "AI Commands" - set name = "Show Alerts" - var/dat = "Current Station Alerts\n" dat += "Close

" for (var/cat in alarms) @@ -218,8 +214,6 @@ var/list/ai_list = list() src << browse(dat, "window=aialerts&can_close=0") /mob/living/silicon/ai/proc/ai_roster() - set category = "AI Commands" - set name = "Show Crew Manifest" var/dat = "Crew RosterCrew Roster:

" for(var/datum/data/record/t in sortRecord(data_core.general)) @@ -229,13 +223,7 @@ var/list/ai_list = list() src << browse(dat, "window=airoster") onclose(src, "airoster") -/mob/living/silicon/ai/verb/ai_crew() - set category = "AI Commands" - set name = "Crew Monitoring Console" - crewmonitor(src) /mob/living/silicon/ai/proc/ai_call_shuttle() - set category = "AI Commands" - set name = "Call Emergency Shuttle" if(src.stat == 2) src << "You can't call the shuttle because you are dead!" return @@ -515,14 +503,6 @@ var/list/ai_list = list() if (viewalerts) ai_alerts() return !cleared -/mob/living/silicon/ai/cancel_camera() - set category = "AI Commands" - set name = "Cancel Camera View" - - //src.cameraFollow = null - src.view_core() - - //Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm //Adds in /mob/living/silicon/ai/proc/ai_network_change() instead //Addition by Mord_Sith to define AI's network change ability @@ -650,9 +630,8 @@ var/list/ai_list = list() //Toggles the luminosity and applies it by re-entereing the camera. /mob/living/silicon/ai/proc/toggle_camera_light() - set name = "Toggle Camera Light" - set desc = "Toggles the light on the camera the AI is looking through." - set category = "AI Commands" + if(stat != CONSCIOUS) + return camera_light_on = !camera_light_on src << "Camera lights [camera_light_on ? "activated" : "deactivated"]." @@ -687,9 +666,3 @@ var/list/ai_list = list() src.current = camera src.current.SetLuminosity(AI_CAMERA_LUMINOSITY) camera_light_on = world.timeofday + 1 * 20 // Update the light every 2 seconds. - -/mob/living/silicon/ai/verb/outputlaws() - set category = "AI Commands" - set name = "State Laws" - - checklaws() diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index d1eb8e21c19..27d2b28b41a 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -92,14 +92,6 @@ // Return to the Core. - -/mob/living/silicon/ai/verb/core() - set category = "AI Commands" - set name = "AI Core" - - view_core() - - /mob/living/silicon/ai/proc/view_core() current = null diff --git a/code/modules/mob/living/silicon/ai/say.dm b/code/modules/mob/living/silicon/ai/say.dm index c3e8db720c1..d6906b3e2d2 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -63,12 +63,7 @@ var/const/VOX_DELAY = 600 popup.open() -/mob/living/silicon/ai/verb/announcement() - - set name = "Announcement" - set desc = "Create a vocal announcement by typing in the available words to create a sentence." - set category = "AI Commands" - +/mob/living/silicon/ai/proc/announcement() if(announcing_vox > world.time) src << "Please wait [round((announcing_vox - world.time) / 10)] seconds." return diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index 087480c786c..3e7d015eafc 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -247,13 +247,8 @@ O.show_laws() O << "These laws may be changed by other players, or by you being the traitor." - O.verbs += /mob/living/silicon/ai/proc/ai_call_shuttle O.verbs += /mob/living/silicon/ai/proc/show_laws_verb - O.verbs += /mob/living/silicon/ai/proc/ai_camera_track - O.verbs += /mob/living/silicon/ai/proc/ai_alerts - O.verbs += /mob/living/silicon/ai/proc/ai_camera_list O.verbs += /mob/living/silicon/ai/proc/ai_statuschange - O.verbs += /mob/living/silicon/ai/proc/ai_roster O.job = "AI" diff --git a/code/modules/paperwork/photography.dm b/code/modules/paperwork/photography.dm index 939c5328de5..c593cc727ad 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -113,21 +113,6 @@ name = "AI photo camera" var/in_camera_mode = 0 - verb/picture() - set category ="AI Commands" - set name = "Take Image" - set src in usr - - toggle_camera_mode() - - verb/viewpicture() - set category ="AI Commands" - set name = "View Images" - set src in usr - - viewpictures() - - /obj/item/device/camera/attack(mob/living/carbon/human/M, mob/user) return diff --git a/icons/mob/screen_ai.dmi b/icons/mob/screen_ai.dmi new file mode 100644 index 00000000000..d0c18c20e53 Binary files /dev/null and b/icons/mob/screen_ai.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 86fb4497c89..722352492d4 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -68,6 +68,7 @@ #include "code\_onclick\overmind.dm" #include "code\_onclick\telekinesis.dm" #include "code\_onclick\hud\_defines.dm" +#include "code\_onclick\hud\ai.dm" #include "code\_onclick\hud\alien.dm" #include "code\_onclick\hud\alien_larva.dm" #include "code\_onclick\hud\hud.dm"