From d8ae776f647127a9f2d6998049fd623f18a383cd Mon Sep 17 00:00:00 2001 From: Kelenius Date: Thu, 3 Jul 2014 18:52:11 +0400 Subject: [PATCH] Gives the AI a hud --- code/_onclick/ai.dm | 2 + code/_onclick/hud/_defines.dm | 17 +++ code/_onclick/hud/ai.dm | 135 ++++++++++++++++++ code/_onclick/hud/other_mobs.dm | 3 - code/_onclick/hud/screen_objects.dm | 72 ++++++++++ code/game/machinery/camera/tracking.dm | 7 - code/game/objects/items/devices/PDA/PDA.dm | 8 +- code/modules/mob/living/silicon/ai/ai.dm | 33 +---- .../mob/living/silicon/ai/freelook/eye.dm | 8 -- code/modules/mob/living/silicon/ai/say.dm | 7 +- code/modules/mob/transform_procs.dm | 5 - code/modules/paperwork/photography.dm | 15 -- icons/mob/screen_ai.dmi | Bin 0 -> 5982 bytes tgstation.dme | 1 + 14 files changed, 233 insertions(+), 80 deletions(-) create mode 100644 code/_onclick/hud/ai.dm create mode 100644 icons/mob/screen_ai.dmi 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 0000000000000000000000000000000000000000..d0c18c20e53e2ca4443f665491781e61ec27c195 GIT binary patch literal 5982 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 literal 0 HcmV?d00001 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"