mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-13 16:13:19 +01:00
Merge remote-tracking branch 'upstream/master'
This commit is contained in:
@@ -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
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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,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)
|
||||
|
||||
@@ -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")
|
||||
@@ -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()
|
||||
..()
|
||||
|
||||
@@ -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>→ 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>← 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>→ 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>← 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>→ 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>← 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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
..()
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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"
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user