Merge remote-tracking branch 'upstream/master'

This commit is contained in:
DZD
2014-11-16 18:03:55 -05:00
25 changed files with 3058 additions and 2507 deletions
@@ -29,9 +29,16 @@ var/global/wcCommon
/area/security/range,
/area/prison/cell_block/A,
/area/prison/cell_block/B,
/area/prison/cell_block/C,
/area/security/prison/cell_block/A,
/area/security/prison/cell_block/B,
/area/security/prison/cell_block/C,
/area/security/processing,
/area/security/armoury
/area/security/armoury,
/area/security/securearmoury,
/area/security/podbay,
/area/security/securehallway,
/area/security/medbay
)
for(var/A in wsBrigList)
+7 -2
View File
@@ -31,8 +31,12 @@
if(client.buildmode) // comes after object.Click to allow buildmode gui objects to be clicked
build_click(src, client.buildmode, params, A)
return
if(control_disabled || stat)
return
if(alienAI) return
if(alienAI)
return
var/list/modifiers = params2list(params)
if(modifiers["middle"])
@@ -48,7 +52,8 @@
CtrlClickOn(A)
return
if(control_disabled || stat || world.time <= next_move) return
if(world.time <= next_move)
return
next_move = world.time + 9
if(aiCamera.in_camera_mode)
+1 -1
View File
@@ -42,7 +42,7 @@
//Crew Monitorting
using = new /obj/screen()
using.name = "Crew Monitorting"
using.name = "Crew Monitoring"
using.icon = 'icons/mob/screen_ai.dmi'
using.icon_state = "crew_monitor"
using.screen_loc = ui_ai_crew_monitor
+96 -30
View File
@@ -543,39 +543,39 @@ var/list/ghostteleportlocs = list()
icon_state = "yellow"
/area/syndicate_station/southwest
name = "\improper south-west of SS13"
name = "\improper South-West of SS13"
icon_state = "southwest"
/area/syndicate_station/northwest
name = "\improper north-west of SS13"
name = "\improper North-West of SS13"
icon_state = "northwest"
/area/syndicate_station/northeast
name = "\improper north-east of SS13"
name = "\improper North-East of SS13"
icon_state = "northeast"
/area/syndicate_station/southeast
name = "\improper south-east of SS13"
name = "\improper South-East of SS13"
icon_state = "southeast"
/area/syndicate_station/north
name = "\improper north of SS13"
name = "\improper North of SS13"
icon_state = "north"
/area/syndicate_station/south
name = "\improper south of SS13"
name = "\improper South of SS13"
icon_state = "south"
/area/syndicate_station/commssat
name = "\improper south of the communication satellite"
name = "\improper South of the Communication Satellite"
icon_state = "south"
/area/syndicate_station/mining
name = "\improper north east of the mining asteroid"
name = "\improper North-East of the Mining Asteroid"
icon_state = "north"
/area/syndicate_station/transit
name = "\improper hyperspace"
name = "\improper Hyperspace"
icon_state = "shuttle"
/area/wizard_station
@@ -596,66 +596,66 @@ var/list/ghostteleportlocs = list()
/area/vox_station/transit
name = "\improper hyperspace"
name = "\improper Hyperspace"
icon_state = "shuttle"
requires_power = 0
/area/vox_station/southwest_solars
name = "\improper aft port solars"
name = "\improper Aft Port Solars"
icon_state = "southwest"
requires_power = 0
/area/vox_station/northwest_solars
name = "\improper fore port solars"
name = "\improper Fore Port Solars"
icon_state = "northwest"
requires_power = 0
/area/vox_station/northeast_solars
name = "\improper fore starboard solars"
name = "\improper Fore Starboard Solars"
icon_state = "northeast"
requires_power = 0
/area/vox_station/southeast_solars
name = "\improper aft starboard solars"
name = "\improper Aft Starboard Solars"
icon_state = "southeast"
requires_power = 0
/area/vox_station/mining
name = "\improper nearby mining asteroid"
name = "\improper Nearby Mining Asteroid"
icon_state = "north"
requires_power = 0
/area/xenos_station/start
name = "\improper start area"
name = "\improper Start Area"
icon_state = "north"
/area/xenos_station/transit
name = "\improper hyperspace"
name = "\improper Hyperspace"
icon_state = "shuttle"
/area/xenos_station/southwest
name = "\improper aft port solars"
name = "\improper Aft Port Solars"
icon_state = "southwest"
/area/xenos_station/northwest
name = "\improper fore port solars"
name = "\improper Fore Port Solars"
icon_state = "northwest"
/area/xenos_station/northeast
name = "\improper fore starboard solars"
name = "\improper Fore Starboard Solars"
icon_state = "northeast"
requires_power = 0
/area/xenos_station/southeast
name = "\improper aft starboard solars"
name = "\improper Aft Starboard Solars"
icon_state = "southeast"
/area/xenos_station/north
name = "\improper west landing area"
name = "\improper West Landing Area"
icon_state = "north"
/area/xenos_station/south
name = "\improper east landing area"
name = "\improper East Landing Area"
icon_state = "south"
//PRISON
@@ -1023,11 +1023,27 @@ var/list/ghostteleportlocs = list()
/area/chapel/office
name = "\improper Chapel Office"
icon_state = "chapeloffice"
/area/escapepodbay
name = "Escape Shuttle Hallway Podbay"
icon_state = "escape"
/area/lawoffice
name = "\improper Law Office"
icon_state = "law"
/area/magistrateoffice
name = "\improper Magistrate's Office"
icon_state = "law"
area/clownoffice
name = "\improper Clown's Office"
icon_state = "dk_yellow"
area/mimeoffice
name = "\improper Mime's Office"
icon_state = "dk_yellow"
/area/civilian/barber
name = "\improper Barber Shop"
icon_state = "barber"
@@ -1188,19 +1204,19 @@ var/list/ghostteleportlocs = list()
icon_state = "panelsP"
/area/maintenance/auxsolarport
name = "Fore Port Solar Maintenance"
name = "\improper Fore Port Solar Maintenance"
icon_state = "SolarcontrolA"
/area/maintenance/starboardsolar
name = "Aft Starboard Solar Maintenance"
name = "\improper Aft Starboard Solar Maintenance"
icon_state = "SolarcontrolS"
/area/maintenance/portsolar
name = "Aft Port Solar Maintenance"
name = "\improper Aft Port Solar Maintenance"
icon_state = "SolarcontrolP"
/area/maintenance/auxsolarstarboard
name = "Fore Starboard Solar Maintenance"
name = "\improper Fore Starboard Solar Maintenance"
icon_state = "SolarcontrolA"
@@ -1334,6 +1350,10 @@ var/list/ghostteleportlocs = list()
/area/medical/virology
name = "\improper Virology"
icon_state = "virology"
/area/medical/virology/lab
name = "\improper Virology Laboratory"
icon_state = "virology"
/area/medical/morgue
name = "\improper Morgue"
@@ -1370,6 +1390,10 @@ var/list/ghostteleportlocs = list()
/area/medical/sleeper
name = "\improper Medical Treatment Center"
icon_state = "exam_room"
/area/medical/paramedic
name = "\improper Paramedic"
icon_state = "medbay"
//Security
@@ -1378,7 +1402,7 @@ var/list/ghostteleportlocs = list()
icon_state = "security"
/area/security/lobby
name = "\improper Security lobby"
name = "\improper Security Lobby"
icon_state = "security"
/area/security/brig
@@ -1388,11 +1412,31 @@ var/list/ghostteleportlocs = list()
/area/security/prison
name = "\improper Prison Wing"
icon_state = "sec_prison"
/area/security/prison/cell_block/A
name = "Prison Cell Block A"
icon_state = "brig"
/area/security/prison/cell_block/B
name = "Prison Cell Block B"
icon_state = "brig"
/area/security/prison/cell_block/C
name = "Prison Cell Block C"
icon_state = "brig"
/area/security/medbay
name = "\improper Security Medbay"
icon_state = "brig"
/area/security/processing
name = "\improper Prisoner Processing"
icon_state = "sec_prison"
/area/security/warden
name = "\improper Security Medbay"
icon_state = "Warden"
/area/security/warden
name = "\improper Warden"
icon_state = "Warden"
@@ -1400,13 +1444,27 @@ var/list/ghostteleportlocs = list()
/area/security/armoury
name = "\improper Armory"
icon_state = "Warden"
/area/security/securearmoury
name = "\improper Secure Armory"
icon_state = "Warden"
/area/security/armoury/gamma
name = "\improper Gamma Armory"
icon_state = "Warden"
requires_power = 0
/area/security/securehallway
name = "\improper Security Secure Hallway"
icon_state = "security"
/area/security/hos
name = "\improper Head of Security's Office"
icon_state = "sec_hos"
area/security/podbay
name = "\improper Security Podbay"
icon_state = "security"
/area/security/detectives_office
name = "\improper Detective's Office"
@@ -1510,7 +1568,7 @@ var/list/ghostteleportlocs = list()
icon_state = "janitor"
/area/hydroponics
name = "Hydroponics"
name = "\improper Hydroponics"
icon_state = "hydro"
//Toxins
@@ -1534,6 +1592,10 @@ var/list/ghostteleportlocs = list()
/area/toxins/xenobiology
name = "\improper Xenobiology Lab"
icon_state = "toxlab"
/area/toxins/xenobiology/flora
name = "\improper Xenobiology Flora Lab"
icon_state = "toxlab"
/area/toxins/storage
name = "\improper Toxins Storage"
@@ -2183,7 +2245,11 @@ var/list/the_station_areas = list (
/area/holodeck,
/area/library,
/area/chapel,
/area/escapepodbay,
/area/lawoffice,
/area/magistrateoffice,
/area/clownoffice,
/area/mimeoffice,
/area/engine,
/area/solar,
/area/assembly,
+2 -2
View File
@@ -91,7 +91,7 @@ var/bomb_set
O.loc = src
src.auth = O
src.add_fingerprint(user)
nanomanager.update_uis(src)
ui_interact(user)
return
if (src.anchored)
@@ -323,7 +323,7 @@ obj/machinery/nuclearbomb/proc/nukehack_win(mob/user as mob)
if (text2num(lastentered) == null)
var/turf/LOC = get_turf(usr)
message_admins("[key_name_admin(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: <a href='?_src_=vars;Vars=\ref[src]'>[lastentered]</a>! ([LOC ? "<a href='?_src_=holder;adminplayerobservecoodjump=1;X=[LOC.x];Y=[LOC.y];Z=[LOC.z]'>JMP</a>" : "null"])", 0)
log_admin("EXPLOIT : [key_name(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: [lastentered]!")
log_admin("EXPLOIT: [key_name(usr)] tried to exploit a nuclear bomb by entering non-numerical codes: [lastentered]!")
else
src.code += lastentered
if (length(src.code) > 5)
+1 -1
View File
@@ -84,7 +84,7 @@
supervisors = "the chief engineer"
selection_color = "#fff5cc"
access = list(access_eva, access_engine, access_engine_equip, access_tech_storage, access_maint_tunnels, access_external_airlocks, access_construction, access_atmospherics)
minimal_access = list(access_eva, access_atmospherics, access_maint_tunnels, access_emergency_storage, access_construction)
minimal_access = list(access_eva, access_atmospherics, access_maint_tunnels, access_external_airlocks, access_emergency_storage, access_construction)
alt_titles = list("Atmospheric Technician")
minimal_player_age = 7
+2 -1
View File
@@ -58,7 +58,8 @@
/obj/item/weapon/gun/energy/laser/bluetag,\
/obj/item/weapon/gun/energy/laser/redtag,\
/obj/item/weapon/gun/energy/laser/practice,\
/obj/item/weapon/melee/telebaton)
/obj/item/weapon/melee/telebaton,\
/obj/item/weapon/melee/baton/loaded/ntcane)
/obj/machinery/bot/secbot/beepsky
+1 -4
View File
@@ -1,5 +1,4 @@
/mob/living/silicon/ai/proc/get_camera_list()
if(src.stat == 2)
return
@@ -15,13 +14,11 @@
var/list/tempnetwork = C.network&src.network
if (tempnetwork.len)
T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C
else return
track = new()
track.cameras = T
return T
/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list())
if(src.stat == 2)
src << "You can't list the cameras because you are dead!"
@@ -29,7 +26,7 @@
if (!camera || camera == "Cancel")
return 0
var/obj/machinery/camera/C = track.cameras[camera]
track = null
src.eyeobj.setLoc(C)
+13 -6
View File
@@ -18,20 +18,27 @@
networks["SS13"] = list(access_hos,access_captain)
networks["Telecomms"] = list(access_hos,access_captain)
networks["Research Outpost"] = list(access_rd,access_hos,access_captain)
networks["Mining Outpost"] = list(access_qm,access_hop,access_hos,access_captain)
networks["Mining Outpost"] = list(access_qm,access_hop,access_hos,access_captain)
networks["Research"] = list(access_rd,access_hos,access_captain)
networks["Prison"] = list(access_hos,access_captain)
networks["Interrogation"] = list(access_hos,access_captain)
networks["Interrogation"] = list(access_hos,access_captain)
networks["Atmosphere Alarms"] = list(access_ce,access_hos,access_captain)
networks["Fire Alarms"] = list(access_ce,access_hos,access_captain)
networks["Power Alarms"] = list(access_ce,access_hos,access_captain)
networks["Supermatter"] = list(access_ce,access_hos,access_captain)
networks["Singularity"] = list(access_ce,access_hos,access_captain)
networks["Singularity"] = list(access_ce,access_hos,access_captain)
networks["Anomaly Isolation"] = list(access_rd,access_hos,access_captain)
networks["Toxins"] = list(access_rd,access_hos,access_captain)
networks["Telepad"] = list(access_rd,access_hos,access_captain)
networks["ERT"] = list(access_cent_teleporter,access_cent_captain)
networks["CentCom"] = list(access_cent_captain)
networks["Thunderdome"] = list(access_cent_captain)
networks["Thunderdome"] = list(access_cent_captain)
attack_ai(var/mob/user as mob)
return ui_interact(user)
if(isAI(user))
return ui_interact(user)
else
return attack_hand(user)
attack_paw(var/mob/user as mob)
return attack_hand(user)
@@ -261,4 +268,4 @@
name = "Engineering Camera Monitor"
desc = "Used to monitor fires and breaches."
icon_state = "engineeringcameras"
network = list("Engineering","Power Alarms","Atmosphere Alarms","Fire Alarms")
network = list("Power Alarms","Atmosphere Alarms","Fire Alarms")
+41 -4
View File
@@ -25,7 +25,10 @@
if(T && istype(T) && T.zone)
var/datum/gas_mixture/environment = T.return_air()
for(var/i=1;i<=stats.len;i++)
rstats[i] = environment.vars[stats[i]]
if(stats[i] == "pressure")
rstats[i] = environment.return_pressure()
else
rstats[i] = environment.vars[stats[i]]
else if(istype(T, /turf/simulated))
rstats = null // Exclude zone (wall, door, etc).
else if(istype(T, /turf))
@@ -37,7 +40,7 @@
return temps
#define FIREDOOR_MAX_PRESSURE_DIFF 25 // kPa
#define FIREDOOR_MAX_TEMP 50 // °C
#define FIREDOOR_MAX_TEMP 50 // Celsius
#define FIREDOOR_MIN_TEMP 0
// Bitflags
@@ -100,6 +103,7 @@
/obj/machinery/door/firedoor/examine()
set src in view()
. = ..()
if(pdiff >= FIREDOOR_MAX_PRESSURE_DIFF)
usr << "<span class='warning'>WARNING: Current pressure differential is [pdiff]kPa! Opening door may result in injury!</span>"
@@ -125,7 +129,7 @@
o += "<span class='warning'>"
else
o += "<span style='color:blue'>"
o += "[celsius]?C</span> "
o += "[celsius]Celsius</span> "
o += "<span style='color:blue'>"
o += "[pressure]kPa</span></li>"
usr << o
@@ -159,7 +163,6 @@
stat |= NOPOWER
return
/obj/machinery/door/firedoor/attack_hand(mob/user as mob)
return attackby(null, user)
@@ -279,8 +282,42 @@
if(alarmed)
nextstate = CLOSED
/obj/machinery/door/firedoor/attack_ai(mob/user as mob)
if(operating)
return //Already doing something.
if(blocked)
user << "\red \The [src] is welded solid!"
return
var/area/A = get_area_master(src)
ASSERT(istype(A)) // This worries me.
var/alarmed = A.air_doors_activated || A.fire
var/access_granted = 0
if(isAI(user) || isrobot(user))
access_granted = 1
if(access_granted == 1)
user.visible_message("\blue \The [src] [density ? "open" : "close"]s for \the [user].",\
"\The [src] [density ? "open" : "close"]s.",\
"You hear a beep, and a door opening.")
var/needs_to_close = 0
if(density)
if(alarmed)
needs_to_close = 1
spawn()
open()
else
spawn()
close()
if(needs_to_close)
spawn(50)
if(alarmed)
nextstate = CLOSED
// CHECK PRESSURE
/obj/machinery/door/firedoor/process()
..()
+43 -15
View File
@@ -219,7 +219,50 @@ var/global/list/obj/item/device/pda/PDAs = list()
return
var/selected = plist[c]
aiPDA.create_message(user, selected)
/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob)
if(user.stat == 2)
user << "You can't do that because you are dead!"
return
var/HTML = "<html><head><title>AI PDA Message Log</title></head><body>"
for(var/index in aiPDA.tnote)
if(index["sent"])
HTML += addtext("<i><b>&rarr; To <a href='byond://?src=\ref[src];choice=Message;target=",index["src"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
else
HTML += addtext("<i><b>&larr; From <a href='byond://?src=\ref[src];choice=Message;target=",index["target"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
HTML +="</body></html>"
user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
/obj/item/device/pda/ai/verb/cmd_send_pdamesg()
set category = "AI IM"
set name = "Send PDA Message"
set src in usr
if(usr.stat == 2)
usr << "You can't send PDA messages because you are dead!"
return
var/list/plist = 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)
/obj/item/device/pda/ai/verb/cmd_show_message_log()
set category = "AI IM"
set name = "Show Message Log"
set src in usr
if(usr.stat == 2)
usr << "You can't do that because you are dead!"
return
var/HTML = "<html><head><title>AI PDA Message Log</title></head><body>"
for(var/index in tnote)
if(index["sent"])
HTML += addtext("<i><b>&rarr; To <a href='byond://?src=\ref[src];choice=Message;target=",index["src"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
else
HTML += addtext("<i><b>&larr; From <a href='byond://?src=\ref[src];choice=Message;target=",index["target"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
HTML +="</body></html>"
usr << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
/obj/item/device/pda/ai/verb/cmd_toggle_pda_receiver()
set category = "AI IM"
@@ -242,21 +285,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
silent=!silent
usr << "<span class='notice'>PDA ringer toggled [(silent ? "Off" : "On")]!</span>"
/mob/living/silicon/ai/proc/cmd_show_message_log(mob/user as mob)
if(user.stat == 2)
user << "You can't do that because you are dead!"
return
var/HTML = "<html><head><title>AI PDA Message Log</title></head><body>"
for(var/index in aiPDA.tnote)
if(index["sent"])
HTML += addtext("<i><b>&rarr; To <a href='byond://?src=\ref[src];choice=Message;target=",index["src"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
else
HTML += addtext("<i><b>&larr; From <a href='byond://?src=\ref[src];choice=Message;target=",index["target"],"'>", index["owner"],"</a>:</b></i><br>", index["message"], "<br>")
HTML +="</body></html>"
user << browse(HTML, "window=log;size=400x444;border=1;can_resize=1;can_close=1;can_minimize=0")
/obj/item/device/pda/ai/can_use()
return 1
+5 -5
View File
@@ -71,9 +71,9 @@
dat += "<br>"
dat += {"<a href='byond://?src=\ref[src];choice=Wireless'>[A.control_disabled ? "Enable" : "Disable"] Wireless Activity</a>"}
dat += "<br>"
dat += "Subspace Transceiver is: [A.radio.disabledAi ? "Disabled" : "Enabled"]"
dat += "Subspace Transceiver is: [A.aiRadio.disabledAi ? "Disabled" : "Enabled"]"
dat += "<br>"
dat += {"<a href='byond://?src=\ref[src];choice=Radio'>[A.radio.disabledAi ? "Enable" : "Disable"] Subspace Transceiver</a>"}
dat += {"<a href='byond://?src=\ref[src];choice=Radio'>[A.aiRadio.disabledAi ? "Enable" : "Disable"] Subspace Transceiver</a>"}
dat += "<br>"
dat += {"<a href='byond://?src=\ref[src];choice=Close'> Close</a>"}
user << browse(dat, "window=aicard")
@@ -116,9 +116,9 @@
if ("Radio")
for(var/mob/living/silicon/ai/A in src)
A.radio.disabledAi = !A.radio.disabledAi
A << "Your Subspace Transceiver has been: [A.radio.disabledAi ? "disabled" : "enabled"]"
U << "You [A.radio.disabledAi ? "Disable" : "Enable"] the AI's Subspace Transceiver"
A.aiRadio.disabledAi = !A.aiRadio.disabledAi
A << "Your Subspace Transceiver has been: [A.aiRadio.disabledAi ? "disabled" : "enabled"]"
U << "You [A.aiRadio.disabledAi ? "Disable" : "Enable"] the AI's Subspace Transceiver"
if ("Wireless")
for(var/mob/living/silicon/ai/A in src)
@@ -171,7 +171,8 @@
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
name = "AI Subspace Transceiver"
desc = "Integrated AI radio transceiver."
icon_state = "ai_radio"
icon = 'icons/obj/robot_component.dmi'
icon_state = "radio"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/heads/ai_integrated
var/myAi = null // Atlantis: Reference back to the AI which has this radio.
@@ -150,6 +150,7 @@
new /obj/item/device/radio/headset/headset_eng(src)
new /obj/item/clothing/suit/storage/hazardvest(src)
new /obj/item/clothing/mask/gas(src)
new /obj/item/clothing/glasses/meson(src)
new /obj/item/weapon/cartridge/atmos(src)
new /obj/item/taperoll/engineering(src)
return
+1 -1
View File
@@ -196,7 +196,7 @@
desc = "Covers the eyes, preventing sight."
icon_state = "blindfold"
item_state = "blindfold"
vision_flags = BLIND
//vision_flags = BLIND
species_fit = list("Vox")
sprite_sheets = list(
"Vox" = 'icons/mob/species/vox/eyes.dmi'
@@ -428,24 +428,26 @@ proc/get_damage_icon_part(damage_state, body_part)
if(f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[f_style]
if(facial_hair_style && src.species.name in facial_hair_style.species_allowed)
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
face_standing.Blend(facial_s, ICON_OVERLAY)
if(facial_hair_style && facial_hair_style.species_allowed)
if(src.species.name in facial_hair_style.species_allowed)
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_ADD)
face_standing.Blend(facial_s, ICON_OVERLAY)
else
warning("Invalid f_style for [species.name]: [f_style]")
//warning("Invalid f_style for [species.name]: [f_style]")
if(h_style && !(head && (head.flags & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[h_style]
if(hair_style && src.species.name in hair_style.species_allowed)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
if(hair_style && hair_style.species_allowed)
if(src.species.name in hair_style.species_allowed)
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration)
hair_s.Blend(rgb(r_hair, g_hair, b_hair), ICON_ADD)
face_standing.Blend(hair_s, ICON_OVERLAY)
face_standing.Blend(hair_s, ICON_OVERLAY)
else
warning("Invalid h_style for [species.name]: [h_style]")
//warning("Invalid h_style for [species.name]: [h_style]")
overlays_standing[HAIR_LAYER] = image(face_standing)
+23 -23
View File
@@ -30,25 +30,25 @@ var/list/department_radio_keys = list(
":A" = "alientalk", "#A" = "alientalk", ".A" = "alientalk",
":T" = "Syndicate", "#T" = "Syndicate", ".T" = "Syndicate",
":U" = "Supply", "#U" = "Supply", ".U" = "Supply",
":G" = "changeling", "#G" = "changeling", ".G" = "changeling",
//kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
":ð" = "department", "#ð" = "department", ".ð" = "department",
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
":û" = "Security", "#û" = "Security", ".û" = "Security",
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
":è" = "binary", "#è" = "binary", ".è" = "binary",
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling"
":G" = "changeling", "#G" = "changeling", ".G" = "changeling"
/* //kinda localization -- rastaf0
//same keys as above, but on russian keyboard layout. This file uses cp1251 as encoding.
":ê" = "right hand", "#ê" = "right hand", ".ê" = "right hand",
":ä" = "left hand", "#ä" = "left hand", ".ä" = "left hand",
":ø" = "intercom", "#ø" = "intercom", ".ø" = "intercom",
":ð" = "department", "#ð" = "department", ".ð" = "department",
":ñ" = "Command", "#ñ" = "Command", ".ñ" = "Command",
":ò" = "Science", "#ò" = "Science", ".ò" = "Science",
":ü" = "Medical", "#ü" = "Medical", ".ü" = "Medical",
":ó" = "Engineering", "#ó" = "Engineering", ".ó" = "Engineering",
":û" = "Security", "#û" = "Security", ".û" = "Security",
":ö" = "whisper", "#ö" = "whisper", ".ö" = "whisper",
":è" = "binary", "#è" = "binary", ".è" = "binary",
":ô" = "alientalk", "#ô" = "alientalk", ".ô" = "alientalk",
":å" = "Syndicate", "#å" = "Syndicate", ".å" = "Syndicate",
":é" = "Supply", "#é" = "Supply", ".é" = "Supply",
":ï" = "changeling", "#ï" = "changeling", ".ï" = "changeling" */
)
/mob/living/proc/binarycheck()
@@ -178,7 +178,7 @@ var/list/department_radio_keys = list(
message_mode = department_radio_keys[channel_prefix]
if (message_mode || speaking || copytext(message,1,2) == ":")
message = trim(copytext(message, 3))
if (!(istype(src,/mob/living/carbon/human) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department" || isAI(src) && (message_mode=="department") || (message_mode in radiochannels))))
if (!(istype(src,/mob/living/carbon/human) && !isAI(src) && !isrobot(src) || istype(src,/mob/living/carbon/monkey) || istype(src, /mob/living/simple_animal/parrot) || isrobot(src) && (message_mode=="department") || isAI(src) && (message_mode=="department") || (message_mode in radiochannels)))
message_mode = null //only humans can use headsets
if(src.stunned > 2 || (traumatic_shock > 61 && prob(50)))
@@ -302,9 +302,9 @@ var/list/department_radio_keys = list(
if(issilicon(src))
if(isAI(src))//for the AI's radio. This can't be with the borg thing above due to typecasting.
var/mob/living/silicon/ai/A = src
if(A.radio)
A.radio.talk_into(src, message, message_mode)
used_radios += A.radio
if(A.aiRadio)
A.aiRadio.talk_into(src, message, message_mode)
used_radios += A.aiRadio
else
var/mob/living/silicon/Ro=src
if(!isAI(Ro))
+8 -8
View File
@@ -19,7 +19,7 @@ var/list/ai_list = list()
anchored = 1 // -- TLE
density = 1
status_flags = CANSTUN|CANPARALYSE|CANPUSH
var/list/network = list("SS13")
var/list/network = list("SS13","Telecomms","Research Outpost","Mining Outpost")
var/obj/machinery/camera/current = null
var/list/connected_robots = list()
var/aiRestorePowerRoutine = 0
@@ -34,7 +34,7 @@ var/list/ai_list = list()
var/custom_sprite = 0 //For our custom sprites
var/alienAI = 0
var/obj/item/device/radio/headset/heads/ai_integrated/radio = null
var/obj/item/device/radio/headset/heads/ai_integrated/aiRadio = null
//MALFUNCTION
var/datum/module_picker/malf_picker
@@ -91,15 +91,15 @@ var/list/ai_list = list()
aiPDA.name = name + " (" + aiPDA.ownjob + ")"
aiMulti = new(src)
radio = new(src)
radio.myAi = src
aiRadio = new(src)
aiRadio.myAi = src
aiCamera = new/obj/item/device/camera/siliconcam/ai_camera(src)
if (istype(loc, /turf))
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, /mob/living/silicon/ai/proc/control_integrateed_radio)
/mob/living/silicon/ai/proc/toggle_camera_light, /mob/living/silicon/ai/proc/control_integrated_radio)
if(!safety)//Only used by AIize() to successfully spawn an AI.
if (!B)//If there is no player/brain inside.
@@ -786,11 +786,11 @@ var/list/ai_list = list()
return ..()
/mob/living/silicon/ai/proc/control_integrateed_radio()
/mob/living/silicon/ai/proc/control_integrated_radio()
set name = "Radio Settings"
set desc = "Allows you to change settings of your radio."
set category = "AI Commands"
src << "Accessing Subspace Transceiver control..."
if (src.radio)
src.radio.interact(src)
if (src.aiRadio)
src.aiRadio.interact(src)
@@ -23,9 +23,4 @@
return tally+config.robot_delay
/mob/living/silicon/robot/Move()
if (!is_component_functioning("actuator") || !is_component_functioning("power cell") || !cell)
return
else
if (src.cell.charge > 0)
..()
..()
+14 -4
View File
@@ -50,18 +50,28 @@
alien_talk(message)
else if (department_radio_keys[prefix] == "department")
if(isAI(src)&&client)//For patching directly into AI holopads.
if(isAI(src)&&client) //For patching directly into AI holopads.
var/mob/living/silicon/ai/U = src
message = copytext(message, 3)
message = trim(copytext(sanitize(message), 1, MAX_MESSAGE_LEN))
U.holopad_talk(message)
else//Will not allow anyone by an active AI to use this function.
else //Will not allow anyone by an active AI to use this function.
src << "This function is not available to you."
return
else
return ..(message)
var/mob/living/silicon/ai/AI = src
if (isAI(src) && AI.aiRadio.disabledAi)
src << "\red System Error - Transceiver Disabled"
return
else
return ..(message)
else
return ..(message)
var/mob/living/silicon/ai/AI = src
if (isAI(src) && AI.aiRadio.disabledAi)
src << "\red System Error - Transceiver Disabled"
return
else
return ..(message)
//For holopads only. Usable by AI.
/mob/living/silicon/ai/proc/holopad_talk(var/message)
+8 -7
View File
@@ -73,13 +73,14 @@ var/const/BLOOD_VOLUME_SURVIVE = 122
// Damaged heart virtually reduces the blood volume, as the blood isn't
// being pumped properly anymore.
var/datum/organ/internal/heart/heart = internal_organs_by_name["heart"]
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
blood_volume *= 0.8
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
blood_volume *= 0.6
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
blood_volume *= 0.3
if(heart)
if(heart.damage > 1 && heart.damage < heart.min_bruised_damage)
blood_volume *= 0.8
else if(heart.damage >= heart.min_bruised_damage && heart.damage < heart.min_broken_damage)
blood_volume *= 0.6
else if(heart.damage >= heart.min_broken_damage && heart.damage < INFINITY)
blood_volume *= 0.3
//Effects of bloodloss
switch(blood_volume)
-3
View File
@@ -848,9 +848,6 @@
return 1
/obj/machinery/power/apc/Topic(href, href_list, var/usingUI = 1)
if(..())
return 0
if(!can_use(usr, 1))
return 0
+1
View File
@@ -785,6 +785,7 @@ var/list/cheartstopper = list("potassium_chloride") //this stops the heart when
var/list/RESTRICTED_CAMERA_NETWORKS = list( //Those networks can only be accessed by preexisting terminals. AIs and new terminals can't use them.
"CentCom",
"ERT",
"Thunderdome",
"Xeno"
)