mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 06:27:26 +01:00
@@ -68,6 +68,8 @@
|
||||
continue
|
||||
if(alarm.hidden)
|
||||
continue
|
||||
if(alarm.z != z)
|
||||
continue
|
||||
var/turf/pos = get_turf(alarm)
|
||||
var/list/alarm_data=list()
|
||||
alarm_data["ID"]="\ref[alarm]"
|
||||
|
||||
@@ -42,6 +42,9 @@
|
||||
if(modifiers["shift"] && modifiers["ctrl"])
|
||||
CtrlShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["shift"] && modifiers["alt"])
|
||||
AltShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
return
|
||||
@@ -99,6 +102,8 @@
|
||||
|
||||
/mob/living/silicon/ai/CtrlShiftClickOn(var/atom/A)
|
||||
A.AICtrlShiftClick(src)
|
||||
/mob/living/silicon/ai/AltShiftClickOn(var/atom/A)
|
||||
A.AIAltShiftClick(src)
|
||||
/mob/living/silicon/ai/ShiftClickOn(var/atom/A)
|
||||
A.AIShiftClick(src)
|
||||
/mob/living/silicon/ai/CtrlClickOn(var/atom/A)
|
||||
@@ -118,6 +123,18 @@
|
||||
examine()
|
||||
return
|
||||
|
||||
/atom/proc/AIAltShiftClick()
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/AIAltShiftClick() // Sets/Unsets Emergency Access Override
|
||||
if(emagged)
|
||||
return
|
||||
if(!emergency)
|
||||
Topic("aiEnable=11", list("aiEnable"="11"), 1) // 1 meaning no window (consistency!)
|
||||
else
|
||||
Topic("aiDisable=11", list("aiDisable"="11"), 1)
|
||||
return
|
||||
|
||||
/atom/proc/AIShiftClick()
|
||||
return
|
||||
|
||||
|
||||
+12
-1
@@ -46,6 +46,9 @@
|
||||
if(modifiers["shift"] && modifiers["ctrl"])
|
||||
CtrlShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["shift"] && modifiers["alt"])
|
||||
AltShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
return
|
||||
@@ -262,7 +265,7 @@
|
||||
return T.Adjacent(src)
|
||||
|
||||
/*
|
||||
Control+Shift click
|
||||
Control+Shift/Alt+Shift click
|
||||
Unused except for AI
|
||||
*/
|
||||
/mob/proc/CtrlShiftClickOn(var/atom/A)
|
||||
@@ -271,6 +274,14 @@
|
||||
|
||||
/atom/proc/CtrlShiftClick(var/mob/user)
|
||||
return
|
||||
|
||||
/mob/proc/AltShiftClickOn(var/atom/A)
|
||||
A.AltShiftClick(src)
|
||||
return
|
||||
|
||||
/atom/proc/AltShiftClick(var/mob/user)
|
||||
return
|
||||
|
||||
|
||||
/*
|
||||
Misc helpers
|
||||
|
||||
+12
-1
@@ -19,6 +19,9 @@
|
||||
if(modifiers["shift"] && modifiers["ctrl"])
|
||||
CtrlShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["shift"] && modifiers["alt"])
|
||||
AltShiftClickOn(A)
|
||||
return
|
||||
if(modifiers["middle"])
|
||||
MiddleClickOn(A)
|
||||
return
|
||||
@@ -117,6 +120,8 @@
|
||||
// for non-doors/apcs
|
||||
/mob/living/silicon/robot/CtrlShiftClickOn(var/atom/A)
|
||||
A.BorgCtrlShiftClick(src)
|
||||
/mob/living/silicon/robot/AltShiftClickOn(var/atom/A)
|
||||
A.BorgAltShiftClick(src)
|
||||
/mob/living/silicon/robot/ShiftClickOn(var/atom/A)
|
||||
A.BorgShiftClick(src)
|
||||
/mob/living/silicon/robot/CtrlClickOn(var/atom/A)
|
||||
@@ -129,9 +134,15 @@
|
||||
examine()
|
||||
user.face_atom(src)
|
||||
return
|
||||
|
||||
/atom/proc/BorgAltShiftClick()
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/BorgAltShiftClick() // Enables emergency override on doors! Forwards to AI code.
|
||||
AIAltShiftClick()
|
||||
|
||||
/atom/proc/BorgShiftClick()
|
||||
return
|
||||
return
|
||||
|
||||
/obj/machinery/door/airlock/BorgShiftClick() // Opens and closes doors! Forwards to AI code.
|
||||
AIShiftClick()
|
||||
|
||||
@@ -34,12 +34,13 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
||||
/datum/wires/airlock/GetInteractWindow()
|
||||
var/obj/machinery/door/airlock/A = holder
|
||||
. += ..()
|
||||
. += text("<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]", (A.locked ? "The door bolts have fallen!" : "The door bolts look up."),
|
||||
. += text("<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]<br>\n[]", (A.locked ? "The door bolts have fallen!" : "The door bolts look up."),
|
||||
(A.lights ? "The door bolt lights are on." : "The door bolt lights are off!"),
|
||||
((A.arePowerSystemsOn() && !(A.stat & NOPOWER)) ? "The test light is on." : "The test light is off!"),
|
||||
(A.aiControlDisabled==0 ? "The 'AI control allowed' light is on." : "The 'AI control allowed' light is off."),
|
||||
(A.safe==0 ? "The 'Check Wiring' light is on." : "The 'Check Wiring' light is off."),
|
||||
(A.normalspeed==0 ? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off."))
|
||||
(A.normalspeed==0 ? "The 'Check Timing Mechanism' light is on." : "The 'Check Timing Mechanism' light is off."),
|
||||
(A.emergency==0 ? "The emergency lights are off." : "The emergency lights are on."))
|
||||
|
||||
|
||||
/datum/wires/airlock/UpdateCut(var/index, var/mended)
|
||||
@@ -123,9 +124,12 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048
|
||||
var/obj/machinery/door/airlock/A = holder
|
||||
switch(index)
|
||||
if(AIRLOCK_WIRE_IDSCAN)
|
||||
//Sending a pulse through this flashes the red light on the door (if the door has power).
|
||||
//Sending a pulse through this disables emergency access and flashes the red light on the door (if the door has power).
|
||||
if((A.arePowerSystemsOn()) && (!(A.stat & NOPOWER)))
|
||||
A.door_animate("deny")
|
||||
if(A.emergency)
|
||||
A.emergency = 0
|
||||
A.update_icon()
|
||||
if(AIRLOCK_WIRE_MAIN_POWER1 || AIRLOCK_WIRE_MAIN_POWER2)
|
||||
//Sending a pulse through either one causes a breaker to trip, disabling the door for 10 seconds if backup power is connected, or 1 minute if not (or until backup power comes back on, whichever is shorter).
|
||||
A.loseMainPower()
|
||||
|
||||
@@ -238,14 +238,14 @@ var/list/ghostteleportlocs = list()
|
||||
/area/shuttle/gamma/space
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Gamma Shuttle Space"
|
||||
requires_power = 1
|
||||
requires_power = 0
|
||||
luminosity = 0
|
||||
lighting_use_dynamic = 1
|
||||
|
||||
/area/shuttle/gamma/station
|
||||
icon_state = "shuttle"
|
||||
name = "\improper Gamma Shuttle Station"
|
||||
requires_power = 1
|
||||
requires_power = 0
|
||||
luminosity = 0
|
||||
lighting_use_dynamic = 1
|
||||
|
||||
@@ -1583,6 +1583,14 @@ area/security/podbay
|
||||
name = "\improper Vault"
|
||||
icon_state = "nuke_storage"
|
||||
|
||||
/area/security/customs
|
||||
name = "\improper Customs"
|
||||
icon_state = "checkpoint1"
|
||||
|
||||
/area/security/customs2
|
||||
name = "\improper Customs"
|
||||
icon_state = "security"
|
||||
|
||||
/area/security/checkpoint
|
||||
name = "\improper Security Checkpoint"
|
||||
icon_state = "checkpoint1"
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
M << sound('sound/AI/poweroff.ogg')
|
||||
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
var/area/current_area = get_area(S)
|
||||
@@ -19,18 +20,25 @@
|
||||
|
||||
|
||||
for(var/obj/machinery/power/apc/C in world)
|
||||
if(C.cell && C.z == 1)
|
||||
var/area/current_area = get_area(C)
|
||||
if(current_area.type in skipped_areas_apc || C.z != 1)
|
||||
continue
|
||||
if(C.cell)
|
||||
C.cell.charge = 0
|
||||
|
||||
/proc/power_restore(var/announce = 1)
|
||||
var/list/skipped_areas = list(/area/turret_protected/ai)
|
||||
var/list/skipped_areas_apc = list(/area/engine/engineering)
|
||||
|
||||
if(announce)
|
||||
command_alert("Power has been restored to [station_name()]. We apologize for the inconvenience.", "Power Systems Nominal")
|
||||
for(var/mob/M in player_list)
|
||||
M << sound('sound/AI/poweron.ogg')
|
||||
for(var/obj/machinery/power/apc/C in machines)
|
||||
if(C.cell && C.z == 1)
|
||||
var/area/current_area = get_area(C)
|
||||
if(current_area.type in skipped_areas_apc || C.z != 1)
|
||||
continue
|
||||
if(C.cell)
|
||||
C.cell.charge = C.cell.maxcharge
|
||||
for(var/obj/machinery/power/smes/S in machines)
|
||||
var/area/current_area = get_area(S)
|
||||
|
||||
@@ -48,7 +48,7 @@
|
||||
selection_color = "#ffeef0"
|
||||
access = list(access_medical, access_morgue, access_surgery, access_chemistry, access_virology, access_genetics)
|
||||
minimal_access = list(access_medical, access_morgue, access_surgery, access_maint_tunnels)
|
||||
alt_titles = list("Surgeon","Nurse","Mortician")
|
||||
alt_titles = list("Surgeon","Nurse","Coroner")
|
||||
minimal_player_age = 3
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
@@ -60,10 +60,11 @@
|
||||
if(4) H.equip_or_collect(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
|
||||
if (H.mind.role_alt_title)
|
||||
switch(H.mind.role_alt_title)
|
||||
if("Mortician")
|
||||
if("Coroner")
|
||||
H.equip_or_collect(new /obj/item/clothing/under/rank/medical/mortician(H), slot_w_uniform)
|
||||
H.equip_or_collect(new /obj/item/clothing/suit/storage/labcoat/mortician(H), slot_wear_suit)
|
||||
if(H.backbag != 1)
|
||||
H.equip_or_collect(new /obj/item/clothing/head/surgery/black(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/autopsy_scanner(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/device/mass_spectrometer(H.back), slot_in_backpack)
|
||||
H.equip_or_collect(new /obj/item/weapon/storage/box/bodybags(H.back), slot_in_backpack)
|
||||
|
||||
@@ -414,13 +414,13 @@ obj/machinery/bot/proc/bot_move(var/dest, var/move_speed)
|
||||
|
||||
obj/machinery/bot/proc/bot_step(var/dest)
|
||||
if(path && path.len > 1)
|
||||
step_to(src, path[1])
|
||||
step_towards(src, path[1])
|
||||
if(get_turf(src) == path[1]) //Successful move
|
||||
path -= path[1]
|
||||
else
|
||||
return 0
|
||||
else if(path.len == 1)
|
||||
step_to(src, dest)
|
||||
step_towards(src, dest)
|
||||
path = list()
|
||||
return 1
|
||||
|
||||
@@ -777,7 +777,7 @@ obj/machinery/bot/proc/bot_summon()
|
||||
|
||||
|
||||
/obj/machinery/bot/Bump(M as mob|obj) //Leave no door unopened!
|
||||
if((istype(M, /obj/machinery/door/airlock) || istype(M, /obj/machinery/door/window)) && (!isnull(botcard)))
|
||||
if((istype(M, /obj/machinery/door/airlock) || istype(M, /obj/machinery/door/window)) && (!isnull(botcard)))
|
||||
var/obj/machinery/door/D = M
|
||||
if(D.check_access(botcard))
|
||||
D.open()
|
||||
@@ -786,4 +786,5 @@ obj/machinery/bot/proc/bot_summon()
|
||||
var/mob/living/Mb = M
|
||||
loc = Mb.loc
|
||||
frustration = 0
|
||||
return
|
||||
return
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
usr.set_machine(src)
|
||||
var/dat
|
||||
dat += hack(user)
|
||||
dat += text({"
|
||||
@@ -400,25 +401,6 @@ Auto Patrol[]"},
|
||||
return 1
|
||||
return 0
|
||||
|
||||
/obj/machinery/bot/ed209/Bump(M as mob|obj) //Leave no door unopened!
|
||||
if ((istype(M, /obj/machinery/door)) && (!isnull(botcard)))
|
||||
var/obj/machinery/door/D = M
|
||||
if (!istype(D, /obj/machinery/door/firedoor) && D.check_access(botcard))
|
||||
D.open()
|
||||
frustration = 0
|
||||
else if ((istype(M, /mob/living/)) && (!anchored))
|
||||
loc = M:loc
|
||||
frustration = 0
|
||||
return
|
||||
|
||||
/* terrible
|
||||
/obj/machinery/bot/ed209/Bumped(atom/movable/M as mob|obj)
|
||||
spawn(0)
|
||||
if (M)
|
||||
var/turf/T = get_turf(src)
|
||||
M:loc = T
|
||||
*/
|
||||
|
||||
/obj/machinery/bot/ed209/explode()
|
||||
walk_to(src,0)
|
||||
visible_message("<span class='userdanger'>[src] blows apart!</span>")
|
||||
|
||||
@@ -136,6 +136,7 @@
|
||||
. = ..()
|
||||
if (.)
|
||||
return
|
||||
usr.set_machine(src)
|
||||
var/dat
|
||||
dat += hack(user)
|
||||
dat += "<TT><B>Medical Unit Controls v1.1</B></TT><BR><BR>"
|
||||
|
||||
@@ -435,13 +435,14 @@ About the new airlock wires panel:
|
||||
|
||||
/obj/machinery/door/airlock/update_icon()
|
||||
if(overlays) overlays.Cut()
|
||||
overlays = list()
|
||||
if(emergency) overlays += image('icons/obj/doors/doorint.dmi', "elights")
|
||||
if(density)
|
||||
if(locked && lights)
|
||||
icon_state = "door_locked"
|
||||
else
|
||||
icon_state = "door_closed"
|
||||
if(p_open || welded || frozen)
|
||||
overlays = list()
|
||||
if(p_open)
|
||||
overlays += image(icon, "panel_open")
|
||||
if(welded)
|
||||
@@ -508,6 +509,11 @@ About the new airlock wires panel:
|
||||
else
|
||||
t1 += text("IdScan enabled. <A href='?src=\ref[];aiDisable=1'>Disable?</a><br>\n", src)
|
||||
|
||||
if(src.emergency)
|
||||
t1 += text("Emergency Access Override is enabled. <A href='?src=\ref[];aiDisable=11'>Disable?</a><br>\n", src)
|
||||
else
|
||||
t1 += text("Emergency Access Override is disabled. <A href='?src=\ref[];aiEnable=11'>Enable?</a><br>\n", src)
|
||||
|
||||
if(src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1))
|
||||
t1 += text("Main Power Input wire is cut.<br>\n")
|
||||
if(src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2))
|
||||
@@ -686,8 +692,9 @@ About the new airlock wires panel:
|
||||
return 1
|
||||
|
||||
/obj/machinery/door/airlock/Topic(href, href_list, var/nowindow = 0)
|
||||
// If you add an if(..()) check you must first remove the var/nowindow parameter.
|
||||
// Otherwise it will runtime with this kind of error: null.Topic()
|
||||
//AI
|
||||
//aiDisable - 1 idscan, 2 disrupt main power, 3 disrupt backup power, 4 drop door bolts, 5 un-electrify door, 7 close door, 8 door safties, 9 door speed, 11 emergency access
|
||||
//aiEnable - 1 idscan, 4 raise door bolts, 5 electrify door for 30 seconds, 6 electrify door indefinitely, 7 open door, 8 door safties, 9 door speed, 11 emergency access
|
||||
if(!nowindow)
|
||||
..()
|
||||
if(usr.stat || usr.restrained()|| usr.small)
|
||||
@@ -826,6 +833,13 @@ About the new airlock wires panel:
|
||||
usr << "The door bolt lights have been disabled."
|
||||
else
|
||||
usr << "The door bolt lights are already disabled!"
|
||||
if(11)
|
||||
// Emergency access
|
||||
if (src.emergency)
|
||||
emergency = 0
|
||||
else
|
||||
usr << text("Emergency access is already disabled!")
|
||||
|
||||
|
||||
else if(href_list["aiEnable"])
|
||||
var/code = text2num(href_list["aiEnable"])
|
||||
@@ -917,6 +931,13 @@ About the new airlock wires panel:
|
||||
usr << "The door bolt lights have been enabled"
|
||||
else
|
||||
usr << "The door bolt lights are already enabled!"
|
||||
if(11)
|
||||
// Emergency access
|
||||
if (!src.emergency)
|
||||
emergency = 1
|
||||
else
|
||||
usr << text("Emergency access is already enabled!")
|
||||
|
||||
|
||||
add_fingerprint(usr)
|
||||
update_icon()
|
||||
@@ -1209,3 +1230,8 @@ About the new airlock wires panel:
|
||||
return
|
||||
else
|
||||
return
|
||||
|
||||
|
||||
/obj/machinery/door/airlock/CanAStarPass(var/obj/item/weapon/card/id/ID)
|
||||
//Airlock is passable if it is open (!density), bot has access, and is not bolted shut)
|
||||
return !density || (check_access(ID) && !locked)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/glass = 0
|
||||
var/normalspeed = 1
|
||||
var/heat_proof = 0 // For glass airlocks/opacity firedoors
|
||||
var/emergency = 0
|
||||
var/air_properties_vary_with_direction = 0
|
||||
|
||||
//Multi-tile doors
|
||||
@@ -68,7 +69,7 @@
|
||||
|
||||
if(istype(AM, /obj/machinery/bot))
|
||||
var/obj/machinery/bot/bot = AM
|
||||
if(src.check_access(bot.botcard))
|
||||
if(src.check_access(bot.botcard) || emergency == 1)
|
||||
if(density)
|
||||
open()
|
||||
return
|
||||
@@ -76,7 +77,7 @@
|
||||
if(istype(AM, /obj/mecha))
|
||||
var/obj/mecha/mecha = AM
|
||||
if(density)
|
||||
if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access)))
|
||||
if(mecha.occupant && (src.allowed(mecha.occupant) || src.check_access_list(mecha.operation_req_access) || emergency == 1))
|
||||
open()
|
||||
else
|
||||
flick("door_deny", src)
|
||||
@@ -101,7 +102,7 @@
|
||||
|
||||
//used in the AStar algorithm to determinate if the turf the door is on is passable
|
||||
/obj/machinery/door/proc/CanAStarPass(var/obj/item/weapon/card/id/ID)
|
||||
return !density || check_access(ID)
|
||||
return !density
|
||||
|
||||
/obj/machinery/door/proc/bumpopen(mob/user as mob)
|
||||
if(operating) return
|
||||
@@ -113,8 +114,10 @@
|
||||
user = null
|
||||
|
||||
if(density)
|
||||
if(allowed(user)) open()
|
||||
else flick("door_deny", src)
|
||||
if(allowed(user) || src.emergency == 1)
|
||||
open()
|
||||
else
|
||||
flick("door_deny", src)
|
||||
return
|
||||
|
||||
/obj/machinery/door/meteorhit(obj/M as obj)
|
||||
@@ -153,7 +156,7 @@
|
||||
open()
|
||||
operating = -1
|
||||
return 1
|
||||
if(src.allowed(user))
|
||||
if(src.allowed(user) || src.emergency == 1)
|
||||
if(src.density)
|
||||
open()
|
||||
else
|
||||
|
||||
@@ -468,7 +468,3 @@
|
||||
/obj/machinery/door/firedoor/multi_tile/triple
|
||||
icon = 'icons/obj/doors/DoorHazard3x1.dmi'
|
||||
width = 3
|
||||
|
||||
//used in the AStar algorithm to determinate if the turf the door is on is passable
|
||||
/obj/machinery/door/firedoor/CanAStarPass()
|
||||
return !density
|
||||
|
||||
@@ -263,6 +263,9 @@
|
||||
if ( istype(W,/obj/item/clothing/head/helmet ) )
|
||||
user << "This item does not fit."
|
||||
return
|
||||
if ( istype(W,/obj/item/clothing/gloves/furgloves ) )
|
||||
user << "This item does not fit."
|
||||
return
|
||||
|
||||
if(contents.len < 5)
|
||||
if ( state in list(1, 3) )
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
name = "first-aid kit"
|
||||
desc = "It's an emergency medical kit for those serious boo-boos."
|
||||
icon_state = "firstaid"
|
||||
icon_override = 'icons/mob/in-hand/medkits.dmi'
|
||||
throw_speed = 2
|
||||
throw_range = 8
|
||||
var/empty = 0
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
new /obj/item/blueprints(src)
|
||||
new /obj/item/clothing/under/rank/chief_engineer(src)
|
||||
new /obj/item/clothing/head/hardhat/white(src)
|
||||
new /obj/item/clothing/head/welding(src)
|
||||
new /obj/item/clothing/glasses/welding/superior(src)
|
||||
new /obj/item/clothing/gloves/yellow(src)
|
||||
new /obj/item/clothing/shoes/brown(src)
|
||||
new /obj/item/weapon/cartridge/ce(src)
|
||||
|
||||
@@ -18,7 +18,7 @@ var/global/wcColored
|
||||
wcColored = 1
|
||||
|
||||
var/list/wcBarAreas = list(/area/crew_quarters/bar)
|
||||
var/list/wcBrigAreas = list(/area/security,/area/security/main,/area/security/lobby,/area/security/brig,/area/security/permabrig,/area/security/prison,/area/security/prison/cell_block/A,/area/security/prison/cell_block/B,/area/security/prison/cell_block/C,/area/security/execution,/area/security/processing,/area/security/interrogation,/area/security/interrogationobs,/area/security/evidence,/area/security/prisonlockers,/area/security/medbay,/area/security/processing,/area/security/warden,/area/security/armoury,/area/security/securearmoury,/area/security/armoury/gamma,/area/security/securehallway,/area/security/hos,/area/security/podbay,/area/security/detectives_office,/area/security/range,/area/security/nuke_storage,/area/security/checkpoint,/area/security/checkpoint2,/area/security/checkpoint2,/area/security/checkpoint/supply,/area/security/checkpoint/engineering,/area/security/checkpoint/medical,/area/security/checkpoint/science,/area/security/vacantoffice,/area/security/vacantoffice2,/area/prison,/area/prison/arrival_airlock,/area/prison/control,/area/prison/crew_quarters,/area/prison/rec_room,/area/prison/closet,/area/prison/hallway/fore,/area/prison/hallway/aft,/area/prison/hallway/port,/area/prison/hallway/starboard,/area/prison/morgue,/area/prison/medical_research,/area/prison/medical,/area/prison/solar,/area/prison/podbay,/area/prison/solar_control,/area/prison/solitary,/area/prison/cell_block,/area/prison/cell_block/A,/area/prison/cell_block/B,/area/prison/cell_block/C,/area/shuttle/gamma/space,/area/shuttle/gamma/station)
|
||||
var/list/wcBrigAreas = list(/area/security,/area/security/main,/area/security/lobby,/area/security/brig,/area/security/permabrig,/area/security/prison,/area/security/prison/cell_block/A,/area/security/prison/cell_block/B,/area/security/prison/cell_block/C,/area/security/execution,/area/security/processing,/area/security/interrogation,/area/security/interrogationobs,/area/security/evidence,/area/security/prisonlockers,/area/security/medbay,/area/security/processing,/area/security/warden,/area/security/armoury,/area/security/securearmoury,/area/security/armoury/gamma,/area/security/securehallway,/area/security/hos,/area/security/podbay,/area/security/detectives_office,/area/security/range,/area/security/nuke_storage,/area/security/customs,/area/security/customs2,/area/security/checkpoint,/area/security/checkpoint2,/area/security/checkpoint2,/area/security/checkpoint/supply,/area/security/checkpoint/engineering,/area/security/checkpoint/medical,/area/security/checkpoint/science,/area/security/vacantoffice,/area/security/vacantoffice2,/area/prison,/area/prison/arrival_airlock,/area/prison/control,/area/prison/crew_quarters,/area/prison/rec_room,/area/prison/closet,/area/prison/hallway/fore,/area/prison/hallway/aft,/area/prison/hallway/port,/area/prison/hallway/starboard,/area/prison/morgue,/area/prison/medical_research,/area/prison/medical,/area/prison/solar,/area/prison/podbay,/area/prison/solar_control,/area/prison/solitary,/area/prison/cell_block,/area/prison/cell_block/A,/area/prison/cell_block/B,/area/prison/cell_block/C,/area/shuttle/gamma/space,/area/shuttle/gamma/station)
|
||||
|
||||
var/newcolor
|
||||
for(var/A in wcBarAreas)
|
||||
|
||||
@@ -226,17 +226,17 @@
|
||||
name = "snow"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/plating/snow/concrete
|
||||
name = "concrete"
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "concrete"
|
||||
|
||||
|
||||
|
||||
|
||||
/turf/simulated/floor/plating/snow/ex_act(severity)
|
||||
return
|
||||
|
||||
/turf/simulated/floor/snow
|
||||
name = "snow"
|
||||
icon = 'icons/turf/snow.dmi'
|
||||
icon_state = "snow"
|
||||
|
||||
/turf/simulated/floor/snow/ex_act(severity)
|
||||
return
|
||||
|
||||
/turf/simulated/shuttle/plating/vox
|
||||
oxygen=0 // BIRDS HATE OXYGEN FOR SOME REASON
|
||||
|
||||
@@ -15,7 +15,6 @@
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "concrete"
|
||||
|
||||
|
||||
/turf/unsimulated/floor/plating/snow/ex_act(severity)
|
||||
return
|
||||
|
||||
|
||||
@@ -117,5 +117,5 @@
|
||||
icon_state = "surgcap_green"
|
||||
|
||||
/obj/item/clothing/head/surgery/black
|
||||
desc = "A cap morticians wear during autopsies. Keeps their hair from falling into the cadavers. It is as dark than the mortician's humor."
|
||||
desc = "A cap coroners wear during autopsies. Keeps their hair from falling into the cadavers. It is as dark than the coroner's humor."
|
||||
icon_state = "surgcap_black"
|
||||
@@ -5,7 +5,7 @@
|
||||
item_state = "labcoat"
|
||||
blood_overlay_type = "coat"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen)
|
||||
allowed = list(/obj/item/device/analyzer,/obj/item/stack/medical,/obj/item/weapon/dnainjector,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/hypospray,/obj/item/device/healthanalyzer,/obj/item/device/flashlight/pen,/obj/item/weapon/reagent_containers/glass/bottle,/obj/item/weapon/reagent_containers/glass/beaker,/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/storage/pill_bottle,/obj/item/weapon/paper)
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 0)
|
||||
species_fit = list("Vox")
|
||||
sprite_sheets = list(
|
||||
@@ -132,7 +132,7 @@
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/storage/labcoat/mortician
|
||||
name = "Mortician Labcoat"
|
||||
name = "Coroner Labcoat"
|
||||
desc = "A suit that protects against minor chemical spills. Has a black stripe on the shoulder."
|
||||
icon_state = "labcoat_mort_open"
|
||||
species_fit = list("Vox")
|
||||
|
||||
@@ -177,7 +177,7 @@
|
||||
)
|
||||
|
||||
/obj/item/clothing/under/rank/medical/mortician
|
||||
name = "mortician's scrubs"
|
||||
name = "coroner's scrubs"
|
||||
desc = "It's made of a special fiber that provides minor protection against biohazards. This one is as dark as an emo's poetry."
|
||||
icon_state = "scrubsblack"
|
||||
_color = "scrubsblack"
|
||||
|
||||
@@ -208,6 +208,41 @@
|
||||
see_invisible = 45
|
||||
nightvision = 0
|
||||
usr.hud_used.nightvisionicon.icon_state = "nightvision0"
|
||||
|
||||
|
||||
/mob/living/carbon/alien/assess_threat(var/obj/machinery/bot/secbot/judgebot, var/lasercolor)
|
||||
if(judgebot.emagged == 2)
|
||||
return 10 //Everyone is a criminal!
|
||||
var/threatcount = 0
|
||||
|
||||
//Securitrons can't identify aliens
|
||||
if(!lasercolor && judgebot.idcheck)
|
||||
threatcount += 4
|
||||
|
||||
//Lasertag bullshit
|
||||
if(lasercolor)
|
||||
if(lasercolor == "b")//Lasertag turrets target the opposing team, how great is that? -Sieve
|
||||
if((istype(r_hand,/obj/item/weapon/gun/energy/laser/redtag)) || (istype(l_hand,/obj/item/weapon/gun/energy/laser/redtag)))
|
||||
threatcount += 4
|
||||
|
||||
if(lasercolor == "r")
|
||||
if((istype(r_hand,/obj/item/weapon/gun/energy/laser/bluetag)) || (istype(l_hand,/obj/item/weapon/gun/energy/laser/bluetag)))
|
||||
threatcount += 4
|
||||
|
||||
return threatcount
|
||||
|
||||
//Check for weapons
|
||||
if(judgebot.weaponscheck)
|
||||
if(judgebot.check_for_weapons(l_hand))
|
||||
threatcount += 4
|
||||
if(judgebot.check_for_weapons(r_hand))
|
||||
threatcount += 4
|
||||
|
||||
//Loyalty implants imply trustworthyness
|
||||
if(isloyal(src))
|
||||
threatcount -= 1
|
||||
|
||||
return threatcount
|
||||
|
||||
/*----------------------------------------
|
||||
Proc: AddInfectionImages()
|
||||
|
||||
@@ -861,6 +861,9 @@
|
||||
if(istype(usr,/mob/living/silicon/robot))
|
||||
var/mob/living/silicon/robot/U = usr
|
||||
R.fields[text("com_[counter]")] = text("Made by [U.name] ([U.modtype] [U.braintype]) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]<BR>[t1]")
|
||||
if(istype(usr,/mob/living/silicon/ai))
|
||||
var/mob/living/silicon/ai/U = usr
|
||||
R.fields[text("com_[counter]")] = text("Made by [U.name] (artificial intelligence) on [time2text(world.realtime, "DDD MMM DD hh:mm:ss")], [game_year]<BR>[t1]")
|
||||
|
||||
if (href_list["medical"])
|
||||
if(hasHUD(usr,"medical"))
|
||||
|
||||
@@ -20,7 +20,6 @@
|
||||
dead_mob_list -= src
|
||||
respawnable_list -= src
|
||||
living_mob_list += src
|
||||
mob_list += src
|
||||
stat = CONSCIOUS
|
||||
ear_deaf = 0
|
||||
return
|
||||
|
||||
@@ -322,6 +322,7 @@
|
||||
on_fire = 0
|
||||
suiciding = 0
|
||||
buckled = initial(src.buckled)
|
||||
|
||||
if(iscarbon(src))
|
||||
var/mob/living/carbon/C = src
|
||||
C.handcuffed = initial(C.handcuffed)
|
||||
@@ -335,6 +336,9 @@
|
||||
if(stat == 2)
|
||||
dead_mob_list -= src
|
||||
living_mob_list += src
|
||||
tod = null
|
||||
timeofdeath = 0
|
||||
|
||||
stat = CONSCIOUS
|
||||
update_fire()
|
||||
regenerate_icons()
|
||||
|
||||
@@ -187,6 +187,7 @@ var/list/department_radio_keys = list(
|
||||
|
||||
if(traumatic_shock > 61 && prob(50))
|
||||
message_mode = null //people in shock will have a high chance of not being able to speak on radio; needed since people don't instantly pass out at 100 damage.
|
||||
src << "<span class='warning'>You try to use your radio, but you are in too much pain.</span>"
|
||||
|
||||
message = capitalize(message)
|
||||
|
||||
|
||||
@@ -257,6 +257,8 @@
|
||||
stored_comms["glass"]++
|
||||
stored_comms["glass"]++
|
||||
stored_comms["glass"]++
|
||||
else if (istype(W,/obj/item/weapon/light/tube) || istype(W,/obj/item/weapon/light/bulb))
|
||||
stored_comms["glass"]++
|
||||
else
|
||||
continue
|
||||
|
||||
|
||||
@@ -84,9 +84,9 @@
|
||||
|
||||
if(istype(owner,/mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/H = owner
|
||||
if(H.species && H.species.flags & IS_SYNTHETIC)
|
||||
brmod = H.species.brute_mod
|
||||
bumod = H.species.burn_mod
|
||||
if(H.species && H.species.flags & IS_SYNTHETIC) // No need for this - the modifer is being applied in the species' code already. Leaving it in, in case it ever changes.
|
||||
brmod = 1 //H.species.brute_mod
|
||||
bumod = 1 //H.species.burn_mod
|
||||
|
||||
brute *= brmod //~2/3 damage for ROBOLIMBS
|
||||
burn *= bumod //~2/3 damage for ROBOLIMBS
|
||||
@@ -137,9 +137,8 @@
|
||||
burn = max(0, burn - can_inflict)
|
||||
//If there are still hurties to dispense
|
||||
if (burn || brute)
|
||||
if (status & ORGAN_ROBOT)
|
||||
if(body_part != UPPER_TORSO && body_part != LOWER_TORSO) // as below, getting hit on the chest shouldn't gib you even if you've got a robotic chest
|
||||
droplimb(1) //Robot limbs just kinda fail at full damage.
|
||||
if (status & ORGAN_ROBOT && body_part != UPPER_TORSO && body_part != LOWER_TORSO)
|
||||
droplimb(1) //Robot limbs just kinda fail at full damage.
|
||||
else
|
||||
//List organs we can pass it to
|
||||
var/list/datum/organ/external/possible_points = list()
|
||||
|
||||
@@ -160,16 +160,19 @@
|
||||
var/global/maint_all_access = 0
|
||||
|
||||
/proc/make_maint_all_access()
|
||||
maint_all_access = 1
|
||||
for(var/area/maintenance/A in world)
|
||||
for(var/obj/machinery/door/airlock/D in A)
|
||||
D.emergency = 1
|
||||
D.update_icon(0)
|
||||
world << "<font size=4 color='red'>Attention!</font>"
|
||||
world << "<font color='red'>The maintenance access requirement has been revoked on all airlocks.</font>"
|
||||
|
||||
maint_all_access = 1
|
||||
|
||||
/proc/revoke_maint_all_access()
|
||||
maint_all_access = 0
|
||||
for(var/area/maintenance/A in world)
|
||||
for(var/obj/machinery/door/airlock/D in A)
|
||||
D.emergency = 0
|
||||
D.update_icon(0)
|
||||
world << "<font size=4 color='red'>Attention!</font>"
|
||||
world << "<font color='red'>The maintenance access requirement has been readded on all maintenance airlocks.</font>"
|
||||
|
||||
/obj/machinery/door/airlock/allowed(mob/M)
|
||||
if(maint_all_access && src.check_access_list(list(access_maint_tunnels)))
|
||||
return 1
|
||||
return ..(M)
|
||||
maint_all_access = 0
|
||||
+1
-1
@@ -1 +1 @@
|
||||
secret
|
||||
extended
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 1.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 84 KiB After Width: | Height: | Size: 88 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 23 KiB |
+344
-354
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user