diff --git a/baystation12.dme b/baystation12.dme index 4ddb0cdd3ce..d0ec0e3ae0a 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -46,6 +46,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" diff --git a/code/_onclick/ai.dm b/code/_onclick/ai.dm index 29910ceaea9..f1e14db0831 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 6927831f45d..a3d83c72c66 100644 --- a/code/_onclick/hud/_defines.dm +++ b/code/_onclick/hud/_defines.dm @@ -125,3 +125,20 @@ #define ui_iarrowleft "SOUTH-1,11" #define ui_iarrowright "SOUTH-1,13" + +// 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" \ No newline at end of file diff --git a/code/_onclick/hud/ai.dm b/code/_onclick/hud/ai.dm new file mode 100644 index 00000000000..8578d953e19 --- /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 cd19e78d7e1..2b671f1ceff 100644 --- a/code/_onclick/hud/other_mobs.dm +++ b/code/_onclick/hud/other_mobs.dm @@ -13,8 +13,6 @@ mymob.blind.screen_loc = "1,1" mymob.blind.layer = 0 -/datum/hud/proc/ai_hud() - return /datum/hud/proc/blob_hud(ui_style = 'icons/mob/screen1_Midnight.dmi') @@ -32,4 +30,4 @@ mymob.client.screen = null - mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay) + mymob.client.screen += list(blobpwrdisplay, blobhealthdisplay) \ No newline at end of file diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 959d67db32c..b5b16cb6dfe 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -421,6 +421,79 @@ if("Toggle Gun Mode") usr.client.ToggleGunMode() + 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 + var/obj/machinery/computer/crew/C = locate(/obj/machinery/computer/crew) + C.attack_ai(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 d08962bf611..8685c7e79f3 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -23,9 +23,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 @@ -104,10 +101,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 99617b192b7..04f55abb99f 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -208,20 +208,17 @@ var/global/list/obj/item/device/pda/PDAs = list() //AI verb and proc for sending PDA messages. -/obj/item/device/pda/ai/verb/cmd_send_pdamesg() - set category = "AI IM" - set name = "Send Message" - set src in usr +/mob/living/silicon/ai/proc/cmd_send_pdamesg() if(usr.stat == 2) usr << "You can't send PDA messages because you are dead!" return - var/list/plist = available_pdas() + var/list/plist = aiPDA.available_pdas() if (plist) var/c = input(usr, "Please select a PDA") as null|anything in sortList(plist) if (!c) // if the user hasn't selected a PDA file we can't send a message return var/selected = plist[c] - create_message(usr, selected) + aiPDA.create_message(usr, selected) /obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver() @@ -246,15 +243,12 @@ var/global/list/obj/item/device/pda/PDAs = list() usr << "PDA ringer toggled [(silent ? "Off" : "On")]!" -/obj/item/device/pda/ai/verb/cmd_show_message_log() - set category = "AI IM" - set name = "Show Message Log" - set src in usr +/mob/living/silicon/ai/proc/cmd_show_message_log() if(usr.stat == 2) usr << "You can't do that because you are dead!" return var/HTML = "AI PDA Message Log" - for(var/index in tnote) + for(var/index in aiPDA.tnote) if(index["sent"]) HTML += addtext("→ To ", index["owner"],":
", index["message"], "
") else @@ -1306,7 +1300,6 @@ var/global/list/obj/item/device/pda/PDAs = list() plist[text("[name]")] = P return plist - //Some spare PDAs in a box /obj/item/weapon/storage/box/PDAs name = "spare PDAs" diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index c7c84639a52..46440582ec9 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -92,8 +92,7 @@ var/list/ai_list = list() aiMulti = new(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) @@ -244,9 +243,6 @@ var/list/ai_list = list() /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) @@ -281,13 +277,9 @@ var/list/ai_list = list() // this verb lets the ai see the stations manifest /mob/living/silicon/ai/proc/ai_roster() - set category = "AI Commands" - set name = "Show Crew Manifest" show_station_manifest() /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 @@ -599,14 +591,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 @@ -733,9 +717,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"]." @@ -792,4 +775,4 @@ var/list/ai_list = list() anchored = 1 return else - return ..() + return ..() \ No newline at end of file diff --git a/code/modules/mob/living/silicon/ai/freelook/eye.dm b/code/modules/mob/living/silicon/ai/freelook/eye.dm index cd49a089a38..53da7a3592b 100644 --- a/code/modules/mob/living/silicon/ai/freelook/eye.dm +++ b/code/modules/mob/living/silicon/ai/freelook/eye.dm @@ -117,14 +117,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 9ac4a11e7bf..e535a2dedee 100644 --- a/code/modules/mob/living/silicon/ai/say.dm +++ b/code/modules/mob/living/silicon/ai/say.dm @@ -60,7 +60,7 @@ var/const/VOX_PATH = "sound/vox_fem/" popup.open() -/mob/living/silicon/ai/verb/announcement() +/mob/living/silicon/ai/proc/announcement() set name = "Announcement" set desc = "Create a vocal announcement by typing in the available words to create a sentence." diff --git a/code/modules/mob/transform_procs.dm b/code/modules/mob/transform_procs.dm index e59c01dd87e..080a1e55926 100644 --- a/code/modules/mob/transform_procs.dm +++ b/code/modules/mob/transform_procs.dm @@ -120,13 +120,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 15d56611136..8e7eb00513c 100644 --- a/code/modules/paperwork/photography.dm +++ b/code/modules/paperwork/photography.dm @@ -313,4 +313,4 @@ if(get_dist(src, M) <= canhear_range) talk_into(M, msg) for(var/mob/living/carbon/human/H in watcherslist) - H.show_message(text("\blue (Newscaster) [] says, '[]'",M,msg), 1) \ No newline at end of file + H.show_message(text("\blue (Newscaster) [] says, '[]'",M,msg), 1) 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