diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm
index 12404d0574e..614f4d8f53f 100644
--- a/code/game/machinery/status_display.dm
+++ b/code/game/machinery/status_display.dm
@@ -203,6 +203,10 @@
var/emotion = "Neutral"
+/obj/machinery/ai_status_display/attack_ai(mob/living/silicon/ai/user)
+ if(isAI(user))
+ user.ai_statuschange()
+
/obj/machinery/ai_status_display/process()
if(stat & NOPOWER)
overlays.Cut()
diff --git a/code/modules/clothing/spacesuits/miscellaneous.dm b/code/modules/clothing/spacesuits/miscellaneous.dm
index 4d7e1011686..3269cf146c5 100644
--- a/code/modules/clothing/spacesuits/miscellaneous.dm
+++ b/code/modules/clothing/spacesuits/miscellaneous.dm
@@ -10,10 +10,10 @@
species_restricted = list("exclude", "Diona", "Wryn")
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/helmet.dmi',
- "Drask" = 'icons/mob/species/drask/helmet.dmi'
+ "Vox" = 'icons/mob/species/vox/helmet.dmi'
)
-/obj/item/clothing/head/helmet/space/capspace/equipped(var/mob/living/carbon/human/user, var/slot)
+
+/obj/item/clothing/head/helmet/space/capspace/equipped(mob/living/carbon/human/user, slot)
if(ishuman(user) && slot == slot_head)
if(user.species.name == "Vox")
if(flags & BLOCKHAIR)
@@ -33,11 +33,9 @@
species_restricted = list("exclude", "Diona", "Wryn")
species_fit = list("Vox")
sprite_sheets = list(
- "Vox" = 'icons/mob/species/vox/suit.dmi',
- "Drask" = 'icons/mob/species/drask/suit.dmi'
+ "Vox" = 'icons/mob/species/vox/suit.dmi'
)
-
//Deathsquad space suit, not hardsuits because no flashlight!
/obj/item/clothing/head/helmet/space/deathsquad
name = "deathsquad helmet"
@@ -106,7 +104,6 @@
flags_size = ONESIZEFITSALL
allowed = list(/obj/item) //for stuffing exta special presents
-
//Space pirate outfit
/obj/item/clothing/head/helmet/space/pirate
name = "pirate hat"
@@ -136,12 +133,22 @@
desc = "A paramedic EVA helmet. Used in the recovery of bodies from space."
icon_state = "paramedic-eva-helmet"
item_state = "paramedic-eva-helmet"
+ species_restricted = list("exclude","Diona","Wryn")
+ species_fit = list("Vox")
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/species/vox/helmet.dmi'
+ )
/obj/item/clothing/suit/space/eva/paramedic
name = "Paramedic EVA suit"
icon_state = "paramedic-eva"
item_state = "paramedic-eva"
desc = "A paramedic EVA suit. Used in the recovery of bodies from space."
+ species_restricted = list("exclude","Diona","Wryn")
+ species_fit = list("Vox")
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/species/vox/suit.dmi'
+ )
/obj/item/clothing/suit/space/eva
name = "EVA suit"
@@ -207,4 +214,4 @@
armor = list(melee = 20, bullet = 40, laser = 30, energy = 25, bomb = 100, bio = 100, rad = 100)
max_heat_protection_temperature = FIRE_IMMUNITY_HELM_MAX_TEMP_PROTECT
unacidable = 1
- strip_delay = 130
\ No newline at end of file
+ strip_delay = 130
diff --git a/code/modules/clothing/suits/utility.dm b/code/modules/clothing/suits/utility.dm
index 44a2f5b1c49..cae5fbd28f0 100644
--- a/code/modules/clothing/suits/utility.dm
+++ b/code/modules/clothing/suits/utility.dm
@@ -74,6 +74,10 @@
strip_delay = 70
put_on_delay = 70
burn_state = FIRE_PROOF
+ species_fit = list("Vox")
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/species/vox/head.dmi'
+ )
/obj/item/clothing/suit/bomb_suit
name = "bomb suit"
@@ -99,17 +103,20 @@
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/suit.dmi'
)
- hide_tail_by_species = list("Vox")
/obj/item/clothing/head/bomb_hood/security
icon_state = "bombsuitsec"
item_state = "bombsuitsec"
+ species_fit = null
+ sprite_sheets = null
/obj/item/clothing/suit/bomb_suit/security
icon_state = "bombsuitsec"
item_state = "bombsuitsec"
allowed = list(/obj/item/weapon/gun/energy,/obj/item/weapon/melee/baton,/obj/item/weapon/restraints/handcuffs)
+ species_fit = null
+ sprite_sheets = null
/*
* Radiation protection
@@ -123,6 +130,10 @@
strip_delay = 60
put_on_delay = 60
burn_state = FIRE_PROOF
+ species_fit = list("Vox")
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/species/vox/head.dmi'
+ )
/obj/item/clothing/suit/radiation
name = "Radiation suit"
@@ -140,4 +151,8 @@
flags_inv = HIDEJUMPSUIT|HIDETAIL
strip_delay = 60
put_on_delay = 60
- burn_state = FIRE_PROOF
\ No newline at end of file
+ burn_state = FIRE_PROOF
+ species_fit = list("Vox")
+ sprite_sheets = list(
+ "Vox" = 'icons/mob/species/vox/suit.dmi'
+ )
\ No newline at end of file
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 44bb237848a..3235c6899c1 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -104,12 +104,12 @@ var/list/ai_verbs_default = list(
var/arrivalmsg = "$name, $rank, has arrived on the station."
/mob/living/silicon/ai/proc/add_ai_verbs()
- src.verbs |= ai_verbs_default
- src.verbs |= silicon_subsystems
+ verbs |= ai_verbs_default
+ verbs |= silicon_subsystems
/mob/living/silicon/ai/proc/remove_ai_verbs()
- src.verbs -= ai_verbs_default
- src.verbs -= silicon_subsystems
+ verbs -= ai_verbs_default
+ verbs -= silicon_subsystems
/mob/living/silicon/ai/New(loc, var/datum/ai_laws/L, var/obj/item/device/mmi/B, var/safety = 0)
announcement = new()
@@ -156,7 +156,7 @@ var/list/ai_verbs_default = list(
aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src)
- if(istype(loc, /turf))
+ if(isturf(loc))
add_ai_verbs(src)
//Languages
@@ -228,7 +228,7 @@ var/list/ai_verbs_default = list(
/mob/living/silicon/ai/rename_character(oldname, newname)
if(!..(oldname, newname))
- return 0
+ return FALSE
if(oldname != real_name)
announcement.announcer = name
@@ -240,7 +240,7 @@ var/list/ai_verbs_default = list(
if(aiPDA)
aiPDA.set_name_and_job(newname, "AI")
- return 1
+ return TRUE
/mob/living/silicon/ai/Destroy()
ai_list -= src
@@ -263,7 +263,7 @@ var/list/ai_verbs_default = list(
var/mob/living/silicon/ai/powered_ai = null
invisibility = 100
-/obj/machinery/ai_powersupply/New(var/mob/living/silicon/ai/ai=null)
+/obj/machinery/ai_powersupply/New(mob/living/silicon/ai/ai=null)
powered_ai = ai
if(isnull(powered_ai))
qdel(src)
@@ -309,31 +309,83 @@ var/list/ai_verbs_default = list(
//if(icon_state == initial(icon_state))
var/icontype = ""
- if(custom_sprite == 1) icontype = ("Custom")//automagically selects custom sprite if one is available
- else icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT")
+ if(custom_sprite == 1)
+ icontype = ("Custom")//automagically selects custom sprite if one is available
+ else
+ icontype = input("Select an icon!", "AI", null, null) in list("Monochrome", "Blue", "Clown", "Inverted", "Text", "Smiley", "Angry", "Dorf", "Matrix", "Bliss", "Firewall", "Green", "Red", "Static", "Triumvirate", "Triumvirate Static", "Red October", "Sparkles", "ANIMA", "President", "NT", "NT2", "Rainbow", "Angel", "Heartline", "Hades", "Helios", "Syndicat Meow", "Too Deep", "Goon", "Murica", "Fuzzy", "Glitchman", "House", "Database")
switch(icontype)
- if("Custom") icon_state = "[ckey]-ai"
- if("Clown") icon_state = "ai-clown2"
- if("Monochrome") icon_state = "ai-mono"
- if("Inverted") icon_state = "ai-u"
- if("Firewall") icon_state = "ai-magma"
- if("Green") icon_state = "ai-wierd"
- if("Red") icon_state = "ai-red"
- if("Static") icon_state = "ai-static"
- if("Text") icon_state = "ai-text"
- if("Smiley") icon_state = "ai-smiley"
- if("Matrix") icon_state = "ai-matrix"
- if("Angry") icon_state = "ai-angryface"
- if("Dorf") icon_state = "ai-dorf"
- if("Bliss") icon_state = "ai-bliss"
- if("Triumvirate") icon_state = "ai-triumvirate"
- if("Triumvirate Static") icon_state = "ai-triumvirate-malf"
- if("Red October") icon_state = "ai-redoctober"
- if("Sparkles") icon_state = "ai-sparkles"
- if("ANIMA") icon_state = "ai-anima"
- if("President") icon_state = "ai-president"
- if("NT") icon_state = "ai-nt"
- else icon_state = "ai"
+ if("Custom")
+ icon_state = "[ckey]-ai"
+ if("Clown")
+ icon_state = "ai-clown"
+ if("Monochrome")
+ icon_state = "ai-mono"
+ if("Inverted")
+ icon_state = "ai-u"
+ if("Firewall")
+ icon_state = "ai-magma"
+ if("Green")
+ icon_state = "ai-weird"
+ if("Red")
+ icon_state = "ai-red"
+ if("Static")
+ icon_state = "ai-static"
+ if("Text")
+ icon_state = "ai-text"
+ if("Smiley")
+ icon_state = "ai-smiley"
+ if("Matrix")
+ icon_state = "ai-matrix"
+ if("Angry")
+ icon_state = "ai-angryface"
+ if("Dorf")
+ icon_state = "ai-dorf"
+ if("Bliss")
+ icon_state = "ai-bliss"
+ if("Triumvirate")
+ icon_state = "ai-triumvirate"
+ if("Triumvirate Static")
+ icon_state = "ai-triumvirate-malf"
+ if("Red October")
+ icon_state = "ai-redoctober"
+ if("Sparkles")
+ icon_state = "ai-sparkles"
+ if("ANIMA")
+ icon_state = "ai-anima"
+ if("President")
+ icon_state = "ai-president"
+ if("NT")
+ icon_state = "ai-nt"
+ if("NT2")
+ icon_state = "ai-nanotrasen"
+ if("Rainbow")
+ icon_state = "ai-rainbow"
+ if("Angel")
+ icon_state = "ai-angel"
+ if("Heartline")
+ icon_state = "ai-heartline"
+ if("Hades")
+ icon_state = "ai-hades"
+ if("Helios")
+ icon_state = "ai-helios"
+ if("Syndicat Meow")
+ icon_state = "ai-syndicatmeow"
+ if("Too Deep")
+ icon_state = "ai-toodeep"
+ if("Goon")
+ icon_state = "ai-goon"
+ if("Murica")
+ icon_state = "ai-murica"
+ if("Fuzzy")
+ icon_state = "ai-fuzz"
+ if("Glitchman")
+ icon_state = "ai-glitchman"
+ if("House")
+ icon_state = "ai-house"
+ if("Database")
+ icon_state = "ai-database"
+ else
+ icon_state = "ai"
//else
// to_chat(usr, "You can only change your display once!")
//return
@@ -402,7 +454,7 @@ var/list/ai_verbs_default = list(
cancel_call_proc(src)
/mob/living/silicon/ai/cancel_camera()
- src.view_core()
+ view_core()
/mob/living/silicon/ai/verb/toggle_anchor()
set category = "AI Commands"
@@ -416,7 +468,7 @@ var/list/ai_verbs_default = list(
to_chat(src, "[anchored ? "You are now anchored." : "You are now unanchored."]")
/mob/living/silicon/ai/update_canmove()
- return 0
+ return FALSE
/mob/living/silicon/ai/proc/announcement()
set name = "Announcement"
@@ -428,21 +480,21 @@ var/list/ai_verbs_default = list(
ai_announcement()
-/mob/living/silicon/ai/check_eye(var/mob/user as mob)
+/mob/living/silicon/ai/check_eye(mob/user)
if(!current)
return null
user.reset_perspective(current)
- return 1
+ return TRUE
/mob/living/silicon/ai/blob_act()
if(stat != 2)
adjustBruteLoss(60)
updatehealth()
- return 1
- return 0
+ return TRUE
+ return FALSE
/mob/living/silicon/ai/restrained()
- return 0
+ return FALSE
/mob/living/silicon/ai/emp_act(severity)
if(prob(30))
@@ -518,7 +570,7 @@ var/list/ai_verbs_default = list(
if(href_list["callbot"]) //Command a bot to move to a selected location.
Bot = locate(href_list["callbot"]) in simple_animal_list
- if(!Bot || Bot.remote_disabled || src.control_disabled)
+ if(!Bot || Bot.remote_disabled || control_disabled)
return //True if there is no bot found, the bot is manually emagged, or the AI is carded with wireless off.
waypoint_mode = 1
to_chat(src, "Set your waypoint by clicking on a valid location free of obstructions.")
@@ -526,7 +578,7 @@ var/list/ai_verbs_default = list(
if(href_list["interface"]) //Remotely connect to a bot!
Bot = locate(href_list["interface"]) in simple_animal_list
- if(!Bot || Bot.remote_disabled || src.control_disabled)
+ if(!Bot || Bot.remote_disabled || control_disabled)
return
Bot.attack_ai(src)
@@ -561,7 +613,7 @@ var/list/ai_verbs_default = list(
if(usr.machine == null)
usr.machine = usr
- while(src.cameraFollow == target)
+ while(cameraFollow == target)
to_chat(usr, "Target is not on or near any active cameras on the station. We'll check again in 5 seconds (unless you use the cancel-camera verb).")
sleep(40)
continue
@@ -576,12 +628,12 @@ var/list/ai_verbs_default = list(
return 2
-/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M as mob)
+/mob/living/silicon/ai/attack_alien(mob/living/carbon/alien/humanoid/M)
if(!ticker)
to_chat(M, "You cannot attack people before the game has started.")
return
- if(istype(loc, /turf) && istype(loc.loc, /area/start))
+ if(isturf(loc) && istype(loc.loc, /area/start))
to_chat(M, "No attacking people at spawn, you jackass.")
return
@@ -606,7 +658,7 @@ var/list/ai_verbs_default = list(
return
-/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob)
+/mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M)
if(M.melee_damage_upper == 0)
M.custom_emote(1, "[M.friendly] [src]")
else
@@ -664,7 +716,7 @@ var/list/ai_verbs_default = list(
popup.set_content(d)
popup.open()
-/mob/living/silicon/ai/proc/set_waypoint(var/atom/A)
+/mob/living/silicon/ai/proc/set_waypoint(atom/A)
var/turf/turf_check = get_turf(A)
//The target must be in view of a camera or near the core.
if(turf_check in range(get_turf(src)))
@@ -674,7 +726,7 @@ var/list/ai_verbs_default = list(
else
to_chat(src, "Selected location is not visible.")
-/mob/living/silicon/ai/proc/call_bot(var/turf/waypoint)
+/mob/living/silicon/ai/proc/call_bot(turf/waypoint)
if(!Bot)
return
@@ -685,22 +737,22 @@ var/list/ai_verbs_default = list(
Bot.call_bot(src, waypoint)
-/mob/living/silicon/ai/proc/switchCamera(var/obj/machinery/camera/C)
+/mob/living/silicon/ai/proc/switchCamera(obj/machinery/camera/C)
if(!tracking)
cameraFollow = null
if(!C || stat == DEAD) //C.can_use())
- return 0
+ return FALSE
- if(!src.eyeobj)
+ if(!eyeobj)
view_core()
return
// ok, we're alive, camera is good and in our network...
eyeobj.setLoc(get_turf(C))
//machine = src
- return 1
+ return TRUE
//Replaces /mob/living/silicon/ai/verb/change_network() in ai.dm & camera.dm
//Adds in /mob/living/silicon/ai/proc/ai_network_change() instead
@@ -931,7 +983,7 @@ var/list/ai_verbs_default = list(
set category = "Malfunction"
set name = "Return to Main Core"
- var/obj/machinery/power/apc/apc = src.loc
+ var/obj/machinery/power/apc/apc = loc
if(!istype(apc))
to_chat(src, "\blue You are already in your Main Core.")
return
@@ -1005,7 +1057,7 @@ var/list/ai_verbs_default = list(
lit_cameras |= C
-/mob/living/silicon/ai/attackby(obj/item/weapon/W as obj, mob/user as mob, params)
+/mob/living/silicon/ai/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W, /obj/item/weapon/wrench))
if(anchored)
user.visible_message("\blue \The [user] starts to unbolt \the [src] from the plating...")
@@ -1036,14 +1088,15 @@ var/list/ai_verbs_default = list(
return
to_chat(src, "Accessing Subspace Transceiver control...")
- if(src.aiRadio)
- src.aiRadio.interact(src)
+ if(aiRadio)
+ aiRadio.interact(src)
-/mob/living/silicon/ai/proc/open_nearest_door(mob/living/target as mob)
- if(!istype(target)) return
+/mob/living/silicon/ai/proc/open_nearest_door(mob/living/target)
+ if(!istype(target))
+ return
spawn(0)
- if(istype(target, /mob/living/carbon/human))
+ if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/weapon/card/id/id = H.wear_id
if(istype(id) && id.is_untrackable())
@@ -1058,7 +1111,8 @@ var/list/ai_verbs_default = list(
var/obj/machinery/door/airlock/tobeopened
var/dist = -1
for(var/obj/machinery/door/airlock/D in range(3,target))
- if(!D.density) continue
+ if(!D.density)
+ continue
if(dist < 0)
dist = get_dist(D, target)
// to_chat(world, dist)
@@ -1084,27 +1138,27 @@ var/list/ai_verbs_default = list(
return
-/mob/living/silicon/ai/proc/check_unable(var/flags = 0)
+/mob/living/silicon/ai/proc/check_unable(flags = 0)
if(stat == DEAD)
to_chat(usr, "You are dead!")
- return 1
+ return TRUE
if(lacks_power())
to_chat(usr, "Power systems failure!")
- return 1
+ return TRUE
- if((flags & AI_CHECK_WIRELESS) && src.control_disabled)
+ if((flags & AI_CHECK_WIRELESS) && control_disabled)
to_chat(usr, "Wireless control is disabled!")
- return 1
- if((flags & AI_CHECK_RADIO) && src.aiRadio.disabledAi)
+ return TRUE
+ if((flags & AI_CHECK_RADIO) && aiRadio.disabledAi)
to_chat(src, "System Error - Transceiver Disabled!")
- return 1
- return 0
+ return TRUE
+ return FALSE
/mob/living/silicon/ai/proc/is_in_chassis()
- return istype(loc, /turf)
+ return isturf(loc)
-/mob/living/silicon/ai/transfer_ai(var/interaction, var/mob/user, var/mob/living/silicon/ai/AI, var/obj/item/device/aicard/card)
+/mob/living/silicon/ai/transfer_ai(interaction, mob/user, mob/living/silicon/ai/AI, obj/item/device/aicard/card)
if(!..())
return
if(interaction == AI_TRANS_TO_CARD)//The only possible interaction. Upload AI mob to a card.
@@ -1125,17 +1179,17 @@ var/list/ai_verbs_default = list(
set category = "IC"
resting = 0
- var/obj/item/weapon/rig/rig = src.get_rig()
+ var/obj/item/weapon/rig/rig = get_rig()
if(rig)
rig.force_rest(src)
-/mob/living/silicon/ai/switch_to_camera(var/obj/machinery/camera/C)
+/mob/living/silicon/ai/switch_to_camera(obj/machinery/camera/C)
if(!C.can_use() || !is_in_chassis())
- return 0
+ return FALSE
eyeobj.setLoc(get_turf(C))
client.eye = eyeobj
- return 1
+ return TRUE
/mob/living/silicon/ai/proc/relay_speech(mob/living/M, text, verb, datum/language/speaking)
if(!say_understands(M, speaking))//The AI will be able to understand most mobs talking through the holopad.
diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm
index 1c977296a8a..9947e6faeec 100644
--- a/code/modules/mob/living/silicon/ai/death.dm
+++ b/code/modules/mob/living/silicon/ai/death.dm
@@ -1,9 +1,13 @@
/mob/living/silicon/ai/death(gibbed)
- if(stat == DEAD) return
+ if(stat == DEAD)
+ return
stat = DEAD
- if(src.custom_sprite == 1)//check for custom AI sprite, defaulting to blue screen if no.
- icon_state = "[ckey]-ai-crash"
- else icon_state = "ai-crash"
+ if(custom_sprite == 1)//check for custom AI sprite, defaulting to blue screen if no.
+ icon_state = "[ckey]-ai_dead"
+ else if("[icon_state]_dead" in icon_states(icon,1))
+ icon_state = "[icon_state]_dead"
+ else
+ icon_state = "ai_dead"
update_canmove()
if(eyeobj)
eyeobj.setLoc(get_turf(src))
diff --git a/icons/mob/AI.dmi b/icons/mob/AI.dmi
index 4c879d066b1..8146e8c6a86 100644
Binary files a/icons/mob/AI.dmi and b/icons/mob/AI.dmi differ
diff --git a/icons/mob/species/vox/head.dmi b/icons/mob/species/vox/head.dmi
index 21ed6e38001..bca96cddb8f 100644
Binary files a/icons/mob/species/vox/head.dmi and b/icons/mob/species/vox/head.dmi differ
diff --git a/icons/mob/species/vox/helmet.dmi b/icons/mob/species/vox/helmet.dmi
index 05c31e1e1d6..869d98223cf 100644
Binary files a/icons/mob/species/vox/helmet.dmi and b/icons/mob/species/vox/helmet.dmi differ
diff --git a/icons/mob/species/vox/suit.dmi b/icons/mob/species/vox/suit.dmi
index 12be5447f34..311bc31623a 100644
Binary files a/icons/mob/species/vox/suit.dmi and b/icons/mob/species/vox/suit.dmi differ