mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-28 06:27:26 +01:00
Merge branch 'master' into overhaul-event-mob-selection
This commit is contained in:
+2
-1
@@ -19,8 +19,9 @@ jobs:
|
||||
- tools/travis/install_dreamchecker.sh
|
||||
script:
|
||||
- find . -name "*.php" -print0 | xargs -0 -n1 php -l
|
||||
- find . -name "*.json" -not -path "./nano/node_modules/*" -print0 | xargs -0 python3 ./tools/travis/json_verifier.py
|
||||
- find . -name "*.json" -not -path "*/node_modules/*" -print0 | xargs -0 python3 ./tools/travis/json_verifier.py
|
||||
- tools/travis/build_nanoui.sh
|
||||
- tools/travis/build_tgui.sh
|
||||
- tools/travis/check_grep.sh
|
||||
- python3 tools/travis/check_line_endings.py
|
||||
- ~/dreamchecker
|
||||
|
||||
Vendored
+2
-1
@@ -2,6 +2,7 @@
|
||||
"recommendations": [
|
||||
"gbasood.byond-dm-language-support",
|
||||
"platymuus.dm-langclient",
|
||||
"EditorConfig.EditorConfig"
|
||||
"EditorConfig.EditorConfig",
|
||||
"dbaeumer.vscode-eslint"
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
# This file has all the information on what versions of libraries are thrown into the code
|
||||
# For dreamchecker
|
||||
export SPACEMANDMM_TAG=suite-1.4
|
||||
# For NanoUI
|
||||
export NODE_VERSION=9
|
||||
# For NanoUI + TGUI
|
||||
export NODE_VERSION=12
|
||||
# For the scripts in tools
|
||||
export PHP_VERSION=5.6
|
||||
# Byond Major
|
||||
|
||||
@@ -92226,6 +92226,9 @@
|
||||
pressure_checks = 1
|
||||
},
|
||||
/obj/effect/decal/warning_stripes/yellow/hollow,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "neutralfull"
|
||||
@@ -94897,6 +94900,9 @@
|
||||
on = 1
|
||||
},
|
||||
/obj/effect/decal/warning_stripes/yellow/hollow,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 8;
|
||||
icon_state = "neutralfull"
|
||||
|
||||
@@ -42197,9 +42197,6 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/obj/machinery/hologram/holopad,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -43998,6 +43995,9 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -44010,6 +44010,9 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -44025,6 +44028,9 @@
|
||||
d2 = 8;
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
@@ -45008,6 +45014,9 @@
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
|
||||
@@ -91252,6 +91252,9 @@
|
||||
initialize_directions = 11;
|
||||
level = 1
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "grimy"
|
||||
},
|
||||
@@ -91732,6 +91735,9 @@
|
||||
icon_state = "1-2";
|
||||
pixel_y = 0
|
||||
},
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "grimy"
|
||||
},
|
||||
@@ -96174,6 +96180,24 @@
|
||||
},
|
||||
/turf/simulated/floor/bluegrid,
|
||||
/area/tcommsat/chamber)
|
||||
"rWq" = (
|
||||
/obj/structure/cable{
|
||||
d1 = 1;
|
||||
d2 = 2;
|
||||
icon_state = "1-2";
|
||||
tag = ""
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/supply,
|
||||
/obj/effect/landmark/start{
|
||||
name = "Cyborg"
|
||||
},
|
||||
/turf/simulated/floor/plasteel{
|
||||
dir = 5;
|
||||
icon_state = "dark";
|
||||
tag = "icon-vault (NORTHEAST)"
|
||||
},
|
||||
/area/turret_protected/aisat_interior)
|
||||
"rYq" = (
|
||||
/obj/machinery/door/airlock/centcom{
|
||||
id_tag = "adminshuttle";
|
||||
@@ -133007,7 +133031,7 @@ diC
|
||||
diE
|
||||
diM
|
||||
djD
|
||||
djJ
|
||||
rWq
|
||||
dka
|
||||
djJ
|
||||
dkf
|
||||
|
||||
@@ -924,6 +924,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-2"
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"cn" = (
|
||||
@@ -1008,6 +1009,11 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 2
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Shuttle Docking Foyer North";
|
||||
dir = 8;
|
||||
network = list("Mining Outpost")
|
||||
},
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"cx" = (
|
||||
@@ -1428,11 +1434,6 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Shuttle Docking Foyer";
|
||||
dir = 8;
|
||||
network = list("Mining Outpost")
|
||||
},
|
||||
/obj/machinery/newscaster{
|
||||
pixel_x = 30;
|
||||
pixel_y = 1
|
||||
@@ -1443,6 +1444,11 @@
|
||||
/obj/effect/turf_decal/tile/brown{
|
||||
dir = 2
|
||||
},
|
||||
/obj/machinery/camera{
|
||||
c_tag = "Shuttle Docking Foyer South";
|
||||
dir = 8;
|
||||
network = list("Mining Outpost")
|
||||
},
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"dw" = (
|
||||
@@ -1897,6 +1903,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "1-4"
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/living_quarters)
|
||||
"eu" = (
|
||||
@@ -2019,6 +2026,7 @@
|
||||
/obj/structure/cable{
|
||||
icon_state = "2-8"
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"eD" = (
|
||||
@@ -2396,6 +2404,7 @@
|
||||
/obj/effect/turf_decal/tile/purple{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/living_quarters)
|
||||
"fv" = (
|
||||
@@ -2794,6 +2803,7 @@
|
||||
dir = 1
|
||||
},
|
||||
/obj/effect/turf_decal/tile/bar,
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/living_quarters)
|
||||
"gj" = (
|
||||
@@ -3056,6 +3066,7 @@
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/baseturf_helper/lava_land/surface,
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/mine/maintenance)
|
||||
"gJ" = (
|
||||
@@ -4119,6 +4130,7 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
dir = 4
|
||||
},
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"BD" = (
|
||||
@@ -4266,6 +4278,10 @@
|
||||
},
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/production)
|
||||
"Ww" = (
|
||||
/obj/machinery/hologram/holopad,
|
||||
/turf/simulated/floor/plasteel,
|
||||
/area/mine/eva)
|
||||
"WO" = (
|
||||
/obj/effect/spawner/window,
|
||||
/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{
|
||||
@@ -20693,7 +20709,7 @@ ab
|
||||
bg
|
||||
bs
|
||||
bY
|
||||
bY
|
||||
Ww
|
||||
bU
|
||||
cp
|
||||
bf
|
||||
|
||||
@@ -59,7 +59,7 @@ GLOBAL_DATUM_INIT(pipe_icon_manager, /datum/pipe_icon_manager, new())
|
||||
for(var/mob/living/L in src) //ventcrawling is serious business
|
||||
L.remove_ventcrawl()
|
||||
L.forceMove(get_turf(src))
|
||||
QDEL_NULL(pipe_image) //we have to del it, or it might keep a ref somewhere else
|
||||
QDEL_NULL(pipe_image) //we have to qdel it, or it might keep a ref somewhere else
|
||||
return ..()
|
||||
|
||||
// Icons/overlays/underlays
|
||||
|
||||
@@ -176,7 +176,7 @@
|
||||
|
||||
if(istype(loc, /turf/simulated))
|
||||
var/turf/simulated/T = loc
|
||||
if(T.to_be_destroyed)
|
||||
if(T.to_be_destroyed && !T.changing_turf)
|
||||
var/chance_of_deletion
|
||||
if(T.heat_capacity) //beware of division by zero
|
||||
chance_of_deletion = T.max_fire_temperature_sustained / T.heat_capacity * 8 //there is no problem with prob(23456), min() was redundant --rastaf0
|
||||
|
||||
@@ -74,8 +74,8 @@
|
||||
air.temperature = temperature
|
||||
|
||||
/turf/simulated/Destroy()
|
||||
visibilityChanged()
|
||||
QDEL_NULL(active_hotspot)
|
||||
QDEL_NULL(wet_overlay)
|
||||
return ..()
|
||||
|
||||
/turf/simulated/assume_air(datum/gas_mixture/giver)
|
||||
|
||||
@@ -145,7 +145,6 @@
|
||||
#define RESISTCOLD "resist_cold"
|
||||
#define NO_EXAMINE "no_examine"
|
||||
#define CAN_WINGDINGS "can_wingdings"
|
||||
#define NOZOMBIE "no_zombie"
|
||||
#define NO_GERMS "no_germs"
|
||||
#define NO_DECAY "no_decay"
|
||||
#define PIERCEIMMUNE "pierce_immunity"
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
// Mobs
|
||||
#define ismegafauna(A) istype(A, /mob/living/simple_animal/hostile/megafauna)
|
||||
#define iszombie(A) (is_species(A, /datum/species/zombie))
|
||||
|
||||
//Simple animals
|
||||
#define isshade(A) (istype(A, /mob/living/simple_animal/shade))
|
||||
|
||||
@@ -196,7 +196,7 @@
|
||||
#define isslimeperson(A) (is_species(A, /datum/species/slime))
|
||||
#define isgrey(A) (is_species(A, /datum/species/grey))
|
||||
#define isdiona(A) (is_species(A, /datum/species/diona))
|
||||
#define ismachine(A) (is_species(A, /datum/species/machine))
|
||||
#define ismachineperson(A) (is_species(A, /datum/species/machine))
|
||||
#define isdrask(A) (is_species(A, /datum/species/drask))
|
||||
|
||||
#define isanimal(A) (istype((A), /mob/living/simple_animal))
|
||||
|
||||
@@ -15,3 +15,57 @@
|
||||
|
||||
#define SOUND_MINIMUM_PRESSURE 10
|
||||
#define FALLOFF_SOUNDS 0.5
|
||||
|
||||
//Ambience types
|
||||
|
||||
#define GENERIC_SOUNDS list('sound/ambience/ambigen1.ogg', 'sound/ambience/ambigen3.ogg',\
|
||||
'sound/ambience/ambigen4.ogg', 'sound/ambience/ambigen5.ogg',\
|
||||
'sound/ambience/ambigen6.ogg', 'sound/ambience/ambigen7.ogg',\
|
||||
'sound/ambience/ambigen8.ogg', 'sound/ambience/ambigen9.ogg',\
|
||||
'sound/ambience/ambigen10.ogg', 'sound/ambience/ambigen11.ogg',\
|
||||
'sound/ambience/ambigen12.ogg', 'sound/ambience/ambigen14.ogg', 'sound/ambience/ambigen15.ogg')
|
||||
|
||||
#define HOLY_SOUNDS list('sound/ambience/ambicha1.ogg', 'sound/ambience/ambicha2.ogg', 'sound/ambience/ambicha3.ogg',\
|
||||
'sound/ambience/ambicha4.ogg', 'sound/ambience/ambiholy.ogg', 'sound/ambience/ambiholy2.ogg',\
|
||||
'sound/ambience/ambiholy3.ogg')
|
||||
|
||||
#define HIGHSEC_SOUNDS list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg')
|
||||
|
||||
#define RUINS_SOUNDS list('sound/ambience/ambimine.ogg', 'sound/ambience/ambicave.ogg', 'sound/ambience/ambiruin.ogg',\
|
||||
'sound/ambience/ambiruin2.ogg', 'sound/ambience/ambiruin3.ogg', 'sound/ambience/ambiruin4.ogg',\
|
||||
'sound/ambience/ambiruin5.ogg', 'sound/ambience/ambiruin6.ogg', 'sound/ambience/ambiruin7.ogg',\
|
||||
'sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambitech3.ogg',\
|
||||
'sound/ambience/ambimystery.ogg', 'sound/ambience/ambimaint1.ogg')
|
||||
|
||||
#define ENGINEERING_SOUNDS list('sound/ambience/ambisin1.ogg', 'sound/ambience/ambisin2.ogg', 'sound/ambience/ambisin3.ogg', 'sound/ambience/ambisin4.ogg',\
|
||||
'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg')
|
||||
|
||||
#define MINING_SOUNDS list('sound/ambience/ambimine.ogg', 'sound/ambience/ambicave.ogg', 'sound/ambience/ambiruin.ogg',\
|
||||
'sound/ambience/ambiruin2.ogg', 'sound/ambience/ambiruin3.ogg', 'sound/ambience/ambiruin4.ogg',\
|
||||
'sound/ambience/ambiruin5.ogg', 'sound/ambience/ambiruin6.ogg', 'sound/ambience/ambiruin7.ogg',\
|
||||
'sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambimaint1.ogg',\
|
||||
'sound/ambience/ambilava1.ogg', 'sound/ambience/ambilava2.ogg', 'sound/ambience/ambilava3.ogg')
|
||||
|
||||
#define MEDICAL_SOUNDS list('sound/ambience/ambinice.ogg')
|
||||
|
||||
#define SPOOKY_SOUNDS list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg','sound/ambience/ambiruin7.ogg','sound/ambience/ambiruin6.ogg',\
|
||||
'sound/ambience/ambiodd.ogg', 'sound/ambience/ambimystery.ogg')
|
||||
|
||||
#define SPACE_SOUNDS list('sound/ambience/ambispace.ogg', 'sound/ambience/ambispace2.ogg', 'sound/music/title2.ogg', 'sound/ambience/ambiatmos.ogg')
|
||||
|
||||
#define MAINTENANCE_SOUNDS list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg',\
|
||||
'sound/ambience/ambimaint5.ogg', 'sound/voice/lowHiss2.ogg', 'sound/voice/lowHiss3.ogg', 'sound/voice/lowHiss4.ogg', 'sound/ambience/ambitech2.ogg' )
|
||||
|
||||
#define AWAY_MISSION_SOUNDS list('sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiruin.ogg',\
|
||||
'sound/ambience/ambiruin2.ogg', 'sound/ambience/ambiruin3.ogg', 'sound/ambience/ambiruin4.ogg',\
|
||||
'sound/ambience/ambiruin5.ogg', 'sound/ambience/ambiruin6.ogg', 'sound/ambience/ambiruin7.ogg',\
|
||||
'sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg', 'sound/ambience/ambimaint.ogg',\
|
||||
'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg', 'sound/ambience/ambiodd.ogg')
|
||||
|
||||
|
||||
|
||||
#define CREEPY_SOUNDS list('sound/effects/ghost.ogg', 'sound/effects/ghost2.ogg', 'sound/effects/heart_beat.ogg', 'sound/effects/screech.ogg',\
|
||||
'sound/hallucinations/behind_you1.ogg', 'sound/hallucinations/behind_you2.ogg', 'sound/hallucinations/far_noise.ogg', 'sound/hallucinations/growl1.ogg', 'sound/hallucinations/growl2.ogg',\
|
||||
'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\
|
||||
'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\
|
||||
'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg')
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
#define UNCONSCIOUS 1
|
||||
#define DEAD 2
|
||||
|
||||
// NanoUI flags
|
||||
// NanoUI & TGUI flags
|
||||
#define STATUS_INTERACTIVE 2 // GREEN Visability
|
||||
#define STATUS_UPDATE 1 // ORANGE Visability
|
||||
#define STATUS_DISABLED 0 // RED Visability
|
||||
|
||||
@@ -143,6 +143,9 @@ GLOBAL_VAR_INIT(log_end, (world.system_type == UNIX ? ascii2text(13) : ""))
|
||||
/proc/log_runtime_summary(text)
|
||||
WRITE_LOG(GLOB.runtime_summary_log, "[text]")
|
||||
|
||||
/proc/log_tgui(text)
|
||||
WRITE_LOG(GLOB.tgui_log, "[text]")
|
||||
|
||||
/**
|
||||
* Standardized method for tracking startup times.
|
||||
*/
|
||||
|
||||
@@ -344,7 +344,7 @@
|
||||
for(var/i = 1; i <= GLOB.player_list.len; i++)
|
||||
var/mob/M = GLOB.player_list[i]
|
||||
if(M && M.client)
|
||||
if(istype(M, /mob/new_player)) // exclude people in the lobby
|
||||
if(isnewplayer(M)) // exclude people in the lobby
|
||||
continue
|
||||
else if(isobserver(M)) // Ghosts are fine if they were playing once (didn't start as observers)
|
||||
var/mob/dead/observer/O = M
|
||||
|
||||
@@ -16,8 +16,6 @@
|
||||
|
||||
GLOBAL_VAR_INIT(next_unique_datum_id, 1)
|
||||
|
||||
// /client/var/tmp/unique_datum_id = null
|
||||
|
||||
/datum/proc/UID()
|
||||
if(!unique_datum_id)
|
||||
var/tag_backup = tag
|
||||
@@ -37,8 +35,6 @@ GLOBAL_VAR_INIT(next_unique_datum_id, 1)
|
||||
|
||||
var/datum/D = locate(copytext(uid, 1, splitat))
|
||||
|
||||
// We might locate a client instead of a datum, but just using : is easier
|
||||
// than actually checking and typecasting
|
||||
if(D && D:unique_datum_id == uid)
|
||||
if(D && D.unique_datum_id == uid)
|
||||
return D
|
||||
return null
|
||||
|
||||
@@ -329,8 +329,9 @@ Turf and target are seperate in case you want to teleport some distance from a t
|
||||
/proc/select_active_ai_with_fewest_borgs()
|
||||
var/mob/living/silicon/ai/selected
|
||||
var/list/active = active_ais()
|
||||
for(var/mob/living/silicon/ai/A in active)
|
||||
if(!selected || (selected.connected_robots > A.connected_robots))
|
||||
for(var/thing in active)
|
||||
var/mob/living/silicon/ai/A = thing
|
||||
if(!selected || (length(selected.connected_robots) > length(A.connected_robots)))
|
||||
selected = A
|
||||
|
||||
return selected
|
||||
|
||||
@@ -16,7 +16,6 @@ GLOBAL_LIST_INIT(prisoncomputer_list, list())
|
||||
GLOBAL_LIST_INIT(celltimers_list, list()) // list of all cell timers
|
||||
GLOBAL_LIST_INIT(cell_logs, list())
|
||||
GLOBAL_LIST_INIT(navigation_computers, list())
|
||||
GLOBAL_LIST_INIT(zombie_infection_list, list())
|
||||
|
||||
GLOBAL_LIST_INIT(all_areas, list())
|
||||
GLOBAL_LIST_INIT(machines, list())
|
||||
|
||||
@@ -15,6 +15,8 @@ GLOBAL_VAR(world_asset_log)
|
||||
GLOBAL_PROTECT(world_asset_log)
|
||||
GLOBAL_VAR(runtime_summary_log)
|
||||
GLOBAL_PROTECT(runtime_summary_log)
|
||||
GLOBAL_VAR(tgui_log)
|
||||
GLOBAL_PROTECT(tgui_log)
|
||||
|
||||
GLOBAL_LIST_EMPTY(jobMax)
|
||||
GLOBAL_PROTECT(jobMax)
|
||||
|
||||
@@ -4,7 +4,7 @@ GLOBAL_DATUM(slmaster, /obj/effect/overlay)
|
||||
GLOBAL_VAR_INIT(CELLRATE, 0.002) // conversion ratio between a watt-tick and kilojoule
|
||||
GLOBAL_VAR_INIT(CHARGELEVEL, 0.001) // Cap for how fast cells charge, as a percentage-per-tick (.001 means cellcharge is capped to 1% per second)
|
||||
|
||||
// Announcer intercom, because too much stuff creates an intercom for one message then hard del()s it.
|
||||
// Announcer intercom, because too much stuff creates an intercom for one message then qdel()s it.
|
||||
GLOBAL_DATUM_INIT(global_announcer, /obj/item/radio/intercom, create_global_announcer())
|
||||
GLOBAL_DATUM_INIT(command_announcer, /obj/item/radio/intercom/command, create_command_announcer())
|
||||
|
||||
|
||||
@@ -75,8 +75,8 @@
|
||||
if(hitsound)
|
||||
playsound(loc, hitsound, get_clamped_volume(), 1, -1)
|
||||
|
||||
user.lastattacked = M
|
||||
M.lastattacker = user
|
||||
M.lastattacker = user.real_name
|
||||
M.lastattackerckey = user.ckey
|
||||
|
||||
user.do_attack_animation(M)
|
||||
. = M.attacked_by(src, user, def_zone)
|
||||
|
||||
@@ -63,7 +63,7 @@
|
||||
if(!istype(user)) // Make sure user is actually an observer. Revenents also use attack_ghost, but do not have the health_scan var.
|
||||
return
|
||||
if(user.client && user.health_scan)
|
||||
if(issilicon(src) || ismachine(src))
|
||||
if(issilicon(src) || ismachineperson(src))
|
||||
robot_healthscan(user, src)
|
||||
else if(ishuman(src))
|
||||
healthscan(user, src, 1, TRUE)
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
var/vote_no_default = 0 // vote does not default to nochange/norestart (tbi)
|
||||
var/vote_no_dead = 0 // dead people can't vote (tbi)
|
||||
// var/enable_authentication = 0 // goon authentication
|
||||
var/del_new_on_log = 1 // del's new players if they log before they spawn in
|
||||
var/del_new_on_log = 1 // qdel's new players if they log before they spawn in
|
||||
var/feature_object_spell_system = 0 //spawns a spellbook which gives object-type spells instead of verb-type spells for the wizard
|
||||
var/traitor_scaling = 0 //if amount of traitors scales based on amount of players
|
||||
var/protect_roles_from_antagonist = 0// If security and such can be tratior/cult/other
|
||||
|
||||
@@ -49,7 +49,7 @@ SUBSYSTEM_DEF(afk)
|
||||
if(mins_afk >= config.auto_cryo_afk && A.can_get_auto_cryod)
|
||||
if(A.fast_despawn)
|
||||
toRemove += H.ckey
|
||||
warn(H, "<span class='danger'>You are have been despawned after being AFK for [mins_afk] minutes. You have been despawned instantly due to you being in a secure area.</span>")
|
||||
warn(H, "<span class='danger'>You have been despawned after being AFK for [mins_afk] minutes. You have been despawned instantly due to you being in a secure area.</span>")
|
||||
log_afk_action(H, mins_afk, T, "despawned", "AFK in a fast despawn area")
|
||||
force_cryo_human(H)
|
||||
else
|
||||
@@ -67,7 +67,7 @@ SUBSYSTEM_DEF(afk)
|
||||
|
||||
else if(afk_players[H.ckey] != AFK_ADMINS_WARNED && mins_afk >= config.auto_despawn_afk)
|
||||
log_afk_action(H, mins_afk, T, "despawned")
|
||||
warn(H, "<span class='danger'>You are have been despawned after being AFK for [mins_afk] minutes.</span>")
|
||||
warn(H, "<span class='danger'>You have been despawned after being AFK for [mins_afk] minutes.</span>")
|
||||
toRemove += H.ckey
|
||||
force_cryo_human(H)
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ SUBSYSTEM_DEF(garbage)
|
||||
init_order = INIT_ORDER_GARBAGE
|
||||
offline_implications = "Garbage collection is no longer functional, and objects will not be qdel'd. Immediate server restart recommended."
|
||||
|
||||
var/list/collection_timeout = list(0, 2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
|
||||
var/list/collection_timeout = list(2 MINUTES, 10 SECONDS) // deciseconds to wait before moving something up in the queue to the next level
|
||||
|
||||
//Stat tracking
|
||||
var/delslasttick = 0 // number of del()'s we've done this tick
|
||||
|
||||
@@ -103,12 +103,12 @@ SUBSYSTEM_DEF(mob_hunt)
|
||||
return
|
||||
if(red_terminal && red_terminal.ready && blue_terminal && blue_terminal.ready)
|
||||
battle_turn = pick("Red", "Blue")
|
||||
red_terminal.audible_message("Battle starting!", null, 5)
|
||||
blue_terminal.audible_message("Battle starting!", null, 5)
|
||||
red_terminal.atom_say("Battle starting!")
|
||||
blue_terminal.atom_say("Battle starting!")
|
||||
if(battle_turn == "Red")
|
||||
red_terminal.audible_message("Red Player's Turn!", null, 5)
|
||||
red_terminal.atom_say("Red Player's Turn!")
|
||||
else if(battle_turn == "Blue")
|
||||
blue_terminal.audible_message("Blue Player's Turn!", null, 5)
|
||||
blue_terminal.atom_say("Blue Player's Turn!")
|
||||
|
||||
/datum/controller/subsystem/mob_hunt/proc/launch_attack(team, raw_damage, datum/mob_type/attack_type)
|
||||
if(!team || !raw_damage)
|
||||
@@ -135,11 +135,11 @@ SUBSYSTEM_DEF(mob_hunt)
|
||||
winner_terminal.ready = 0
|
||||
loser_terminal.ready = 0
|
||||
if(surrender) //surrender doesn't give exp, to avoid people just farming exp without actually doing a battle
|
||||
winner_terminal.audible_message("Your rival surrendered!", null, 2)
|
||||
winner_terminal.atom_say("Your rival surrendered!")
|
||||
else
|
||||
var/progress_message = winner_terminal.mob_info.gain_exp()
|
||||
winner_terminal.audible_message("[winner_terminal.team] Player wins!", null, 5)
|
||||
winner_terminal.audible_message(progress_message, null, 2)
|
||||
winner_terminal.atom_say("[winner_terminal.team] Player wins!")
|
||||
winner_terminal.atom_say(progress_message)
|
||||
|
||||
/datum/controller/subsystem/mob_hunt/proc/end_turn()
|
||||
red_terminal.updateUsrDialog()
|
||||
@@ -148,7 +148,7 @@ SUBSYSTEM_DEF(mob_hunt)
|
||||
return
|
||||
if(battle_turn == "Red")
|
||||
battle_turn = "Blue"
|
||||
blue_terminal.audible_message("Blue's turn.", null, 5)
|
||||
blue_terminal.atom_say("Blue's turn.")
|
||||
else if(battle_turn == "Blue")
|
||||
battle_turn = "Red"
|
||||
blue_terminal.audible_message("Red's turn.", null, 5)
|
||||
blue_terminal.atom_say("Red's turn.")
|
||||
|
||||
@@ -0,0 +1,286 @@
|
||||
/**
|
||||
* tgui subsystem
|
||||
*
|
||||
* Contains all tgui state and subsystem code.
|
||||
**/
|
||||
|
||||
|
||||
SUBSYSTEM_DEF(tgui)
|
||||
name = "TGUI"
|
||||
wait = 9
|
||||
flags = SS_NO_INIT
|
||||
priority = FIRE_PRIORITY_NANOUI // Yes I am aware that this is TGUI and I used the nanoUI fire priority. Dont @ me.
|
||||
runlevels = RUNLEVEL_LOBBY | RUNLEVELS_DEFAULT
|
||||
offline_implications = "All TGUIs will no longer process. Shuttle call recommended."
|
||||
|
||||
var/list/currentrun = list()
|
||||
var/list/open_uis = list() // A list of open UIs, grouped by src_object and ui_key.
|
||||
var/list/processing_uis = list() // A list of processing UIs, ungrouped.
|
||||
var/basehtml // The HTML base used for all UIs.
|
||||
|
||||
/datum/controller/subsystem/tgui/PreInit()
|
||||
basehtml = file2text('tgui/packages/tgui/public/tgui.html')
|
||||
|
||||
/datum/controller/subsystem/tgui/Shutdown()
|
||||
close_all_uis()
|
||||
|
||||
/datum/controller/subsystem/tgui/stat_entry()
|
||||
..("P:[processing_uis.len]")
|
||||
|
||||
/datum/controller/subsystem/tgui/fire(resumed = 0)
|
||||
if (!resumed)
|
||||
src.currentrun = processing_uis.Copy()
|
||||
//cache for sanic speed (lists are references anyways)
|
||||
var/list/currentrun = src.currentrun
|
||||
|
||||
while(currentrun.len)
|
||||
var/datum/tgui/ui = currentrun[currentrun.len]
|
||||
currentrun.len--
|
||||
if(ui && ui.user && ui.src_object)
|
||||
ui.process()
|
||||
else
|
||||
processing_uis.Remove(ui)
|
||||
if (MC_TICK_CHECK)
|
||||
return
|
||||
|
||||
/**
|
||||
* public
|
||||
*
|
||||
* Get a open UI given a user, src_object, and ui_key and try to update it with data.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* required src_object datum The object/datum which owns the UI.
|
||||
* required ui_key string The ui_key of the UI.
|
||||
* optional ui datum/tgui The UI to be updated, if it exists.
|
||||
* optional force_open bool If the UI should be re-opened instead of updated.
|
||||
*
|
||||
* return datum/tgui The found UI.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/try_update_ui(mob/user, datum/src_object, ui_key, datum/tgui/ui, force_open = FALSE)
|
||||
if(isnull(ui)) // No UI was passed, so look for one.
|
||||
ui = get_open_ui(user, src_object, ui_key)
|
||||
|
||||
if(!isnull(ui))
|
||||
var/data = src_object.tgui_data(user) // Get data from the src_object.
|
||||
if(!force_open) // UI is already open; update it.
|
||||
ui.push_data(data)
|
||||
else // Re-open it anyways.
|
||||
ui.reinitialize(null, data)
|
||||
return ui // We found the UI, return it.
|
||||
else
|
||||
return null // We couldn't find a UI.
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Get a open UI given a user, src_object, and ui_key.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* required src_object datum The object/datum which owns the UI.
|
||||
* required ui_key string The ui_key of the UI.
|
||||
*
|
||||
* return datum/tgui The found UI.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/get_open_ui(mob/user, datum/src_object, ui_key)
|
||||
var/src_object_key = "[src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return null // No UIs open.
|
||||
else if(isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list))
|
||||
return null // No UIs open for this object.
|
||||
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key]) // Find UIs for this object.
|
||||
if(ui.user == user) // Make sure we have the right user
|
||||
return ui
|
||||
|
||||
return null // Couldn't find a UI!
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Update all UIs attached to src_object.
|
||||
*
|
||||
* required src_object datum The object/datum which owns the UIs.
|
||||
*
|
||||
* return int The number of UIs updated.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/update_uis(datum/src_object)
|
||||
var/src_object_key = "[src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return 0 // Couldn't find any UIs for this object.
|
||||
|
||||
var/update_count = 0
|
||||
for(var/ui_key in open_uis[src_object_key])
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key])
|
||||
if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid.
|
||||
ui.process(force = 1) // Update the UI.
|
||||
update_count++ // Count each UI we update.
|
||||
return update_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Close all UIs attached to src_object.
|
||||
*
|
||||
* required src_object datum The object/datum which owns the UIs.
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/close_uis(datum/src_object)
|
||||
var/src_object_key = "[src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return 0 // Couldn't find any UIs for this object.
|
||||
|
||||
var/close_count = 0
|
||||
for(var/ui_key in open_uis[src_object_key])
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key])
|
||||
if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid.
|
||||
ui.close() // Close the UI.
|
||||
close_count++ // Count each UI we close.
|
||||
return close_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Close *ALL* UIs
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/close_all_uis()
|
||||
var/close_count = 0
|
||||
for(var/src_object_key in open_uis)
|
||||
for(var/ui_key in open_uis[src_object_key])
|
||||
for(var/datum/tgui/ui in open_uis[src_object_key][ui_key])
|
||||
if(ui && ui.src_object && ui.user && ui.src_object.tgui_host(ui.user)) // Check the UI is valid.
|
||||
ui.close() // Close the UI.
|
||||
close_count++ // Count each UI we close.
|
||||
return close_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Update all UIs belonging to a user.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* optional src_object datum If provided, only update UIs belonging this src_object.
|
||||
* optional ui_key string If provided, only update UIs with this UI key.
|
||||
*
|
||||
* return int The number of UIs updated.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/update_user_uis(mob/user, datum/src_object = null, ui_key = null)
|
||||
if(isnull(user.open_tguis) || !istype(user.open_tguis, /list) || open_uis.len == 0)
|
||||
return 0 // Couldn't find any UIs for this user.
|
||||
|
||||
var/update_count = 0
|
||||
for(var/datum/tgui/ui in user.open_tguis)
|
||||
if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key))
|
||||
ui.process(force = 1) // Update the UI.
|
||||
update_count++ // Count each UI we upadte.
|
||||
return update_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Close all UIs belonging to a user.
|
||||
*
|
||||
* required user mob The mob who opened/is using the UI.
|
||||
* optional src_object datum If provided, only close UIs belonging this src_object.
|
||||
* optional ui_key string If provided, only close UIs with this UI key.
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/close_user_uis(mob/user, datum/src_object = null, ui_key = null)
|
||||
if(isnull(user.open_tguis) || !istype(user.open_tguis, /list) || open_uis.len == 0)
|
||||
return 0 // Couldn't find any UIs for this user.
|
||||
|
||||
var/close_count = 0
|
||||
for(var/datum/tgui/ui in user.open_tguis)
|
||||
if((isnull(src_object) || !isnull(src_object) && ui.src_object == src_object) && (isnull(ui_key) || !isnull(ui_key) && ui.ui_key == ui_key))
|
||||
ui.close() // Close the UI.
|
||||
close_count++ // Count each UI we close.
|
||||
return close_count
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Add a UI to the list of open UIs.
|
||||
*
|
||||
* required ui datum/tgui The UI to be added.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_open(datum/tgui/ui)
|
||||
var/src_object_key = "[ui.src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
open_uis[src_object_key] = list(ui.ui_key = list()) // Make a list for the ui_key and src_object.
|
||||
else if(isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
|
||||
open_uis[src_object_key][ui.ui_key] = list() // Make a list for the ui_key.
|
||||
|
||||
// Append the UI to all the lists.
|
||||
ui.user.open_tguis |= ui
|
||||
var/list/uis = open_uis[src_object_key][ui.ui_key]
|
||||
uis |= ui
|
||||
processing_uis |= ui
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Remove a UI from the list of open UIs.
|
||||
*
|
||||
* required ui datum/tgui The UI to be removed.
|
||||
*
|
||||
* return bool If the UI was removed or not.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_close(datum/tgui/ui)
|
||||
var/src_object_key = "[ui.src_object.UID()]"
|
||||
if(isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
||||
return FALSE // It wasn't open.
|
||||
else if(isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
|
||||
return FALSE // It wasn't open.
|
||||
|
||||
processing_uis.Remove(ui) // Remove it from the list of processing UIs.
|
||||
if(ui.user) // If the user exists, remove it from them too.
|
||||
ui.user.open_tguis.Remove(ui)
|
||||
var/Ukey = ui.ui_key
|
||||
var/list/uis = open_uis[src_object_key][Ukey] // Remove it from the list of open UIs.
|
||||
uis.Remove(ui)
|
||||
if(!uis.len)
|
||||
var/list/uiobj = open_uis[src_object_key]
|
||||
uiobj.Remove(Ukey)
|
||||
if(!uiobj.len)
|
||||
open_uis.Remove(src_object_key)
|
||||
|
||||
return TRUE // Let the caller know we did it.
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Handle client logout, by closing all their UIs.
|
||||
*
|
||||
* required user mob The mob which logged out.
|
||||
*
|
||||
* return int The number of UIs closed.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_logout(mob/user)
|
||||
return close_user_uis(user)
|
||||
|
||||
/**
|
||||
* private
|
||||
*
|
||||
* Handle clients switching mobs, by transferring their UIs.
|
||||
*
|
||||
* required user source The client's original mob.
|
||||
* required user target The client's new mob.
|
||||
*
|
||||
* return bool If the UIs were transferred.
|
||||
**/
|
||||
/datum/controller/subsystem/tgui/proc/on_transfer(mob/source, mob/target)
|
||||
if(!source || isnull(source.open_tguis) || !istype(source.open_tguis, /list) || open_uis.len == 0)
|
||||
return FALSE // The old mob had no open UIs.
|
||||
|
||||
if(isnull(target.open_tguis) || !istype(target.open_tguis, /list))
|
||||
target.open_tguis = list() // Create a list for the new mob if needed.
|
||||
|
||||
for(var/datum/tgui/ui in source.open_tguis)
|
||||
ui.user = target // Inform the UIs of their new owner.
|
||||
target.open_tguis.Add(ui) // Transfer all the UIs.
|
||||
|
||||
source.open_tguis.Cut() // Clear the old list.
|
||||
return TRUE // Let the caller know we did it.
|
||||
@@ -407,7 +407,7 @@ SUBSYSTEM_DEF(ticker)
|
||||
EquipCustomItems(player)
|
||||
if(captainless)
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
if(!istype(M,/mob/new_player))
|
||||
if(!isnewplayer(M))
|
||||
to_chat(M, "Captainship not forced on anyone.")
|
||||
|
||||
/datum/controller/subsystem/ticker/proc/send_tip_of_the_round()
|
||||
|
||||
@@ -37,10 +37,10 @@
|
||||
I.anchored = initial(I.anchored)
|
||||
for(var/datum/action/item_action/remove_tape/RT in I.actions)
|
||||
RT.Remove(user)
|
||||
RT.Destroy()
|
||||
qdel(RT)
|
||||
I.overlays.Cut(tape_overlay)
|
||||
user.transfer_fingerprints_to(I)
|
||||
Destroy()
|
||||
qdel(src)
|
||||
|
||||
/datum/component/ducttape/proc/afterattack(obj/item/I, atom/target, mob/user, proximity, params)
|
||||
if(!proximity)
|
||||
|
||||
@@ -819,6 +819,59 @@
|
||||
message_admins("<span class='notice'>[key_name(usr)] has made [A] process normally</span>")
|
||||
return TRUE
|
||||
|
||||
else if(href_list["modifyarmor"])
|
||||
if(!check_rights(R_DEBUG|R_ADMIN))
|
||||
return
|
||||
var/obj/A = locateUID(href_list["modifyarmor"])
|
||||
if(!istype(A))
|
||||
return
|
||||
A.var_edited = TRUE
|
||||
var/list/armorlist = A.armor.getList()
|
||||
var/list/displaylist
|
||||
|
||||
var/result
|
||||
do
|
||||
displaylist = list()
|
||||
for(var/key in armorlist)
|
||||
displaylist += "[key] = [armorlist[key]]"
|
||||
result = input(usr, "Select an armor type to modify..", "Modify armor") as null|anything in displaylist + "(ADD ALL)" + "(SET ALL)" + "(DONE)"
|
||||
|
||||
if(result == "(DONE)")
|
||||
break
|
||||
else if(result == "(ADD ALL)" || result == "(SET ALL)")
|
||||
var/new_amount = input(usr, result == "(ADD ALL)" ? "Enter armor to add to all types:" : "Enter new armor value for all types:", "Modify all types") as num|null
|
||||
if(isnull(new_amount))
|
||||
continue
|
||||
var/proper_amount = text2num(new_amount)
|
||||
if(isnull(proper_amount))
|
||||
continue
|
||||
for(var/key in armorlist)
|
||||
armorlist[key] = (result == "(ADD ALL)" ? armorlist[key] : 0) + proper_amount
|
||||
else if(result)
|
||||
var/list/fields = splittext(result, " = ")
|
||||
if(length(fields) != 2)
|
||||
continue
|
||||
var/type = fields[1]
|
||||
if(isnull(armorlist[type]))
|
||||
continue
|
||||
var/new_amount = input(usr, "Enter new armor value for [type]:", "Modify [type]") as num|null
|
||||
if(isnull(new_amount))
|
||||
continue
|
||||
var/proper_amount = text2num(new_amount)
|
||||
if(isnull(proper_amount))
|
||||
continue
|
||||
armorlist[type] = proper_amount
|
||||
while(result)
|
||||
|
||||
if(!result || !A)
|
||||
return TRUE
|
||||
|
||||
A.armor = A.armor.setRating(armorlist["melee"], armorlist["bullet"], armorlist["laser"], armorlist["energy"], armorlist["bomb"], armorlist["bio"], armorlist["rad"], armorlist["fire"], armorlist["acid"], armorlist["magic"])
|
||||
|
||||
log_admin("[key_name(usr)] modified the armor on [A] to: melee = [armorlist["melee"]], bullet = [armorlist["bullet"]], laser = [armorlist["laser"]], energy = [armorlist["energy"]], bomb = [armorlist["bomb"]], bio = [armorlist["bio"]], rad = [armorlist["rad"]], fire = [armorlist["fire"]], acid = [armorlist["acid"]], magic = [armorlist["magic"]]")
|
||||
message_admins("<span class='notice'>[key_name(usr)] modified the armor on [A] to: melee = [armorlist["melee"]], bullet = [armorlist["bullet"]], laser = [armorlist["laser"]], energy = [armorlist["energy"]], bomb = [armorlist["bomb"]], bio = [armorlist["bio"]], rad = [armorlist["rad"]], fire = [armorlist["fire"]], acid = [armorlist["acid"]], magic = [armorlist["magic"]]")
|
||||
return TRUE
|
||||
|
||||
else if(href_list["addreagent"]) /* Made on /TG/, credit to them. */
|
||||
if(!check_rights(R_DEBUG|R_ADMIN)) return
|
||||
|
||||
|
||||
@@ -159,7 +159,7 @@
|
||||
var/mob/living/carbon/human/H = affected_mob
|
||||
if(NO_HUNGER in H.dna.species.species_traits)
|
||||
return TRUE
|
||||
if(ismachine(H))
|
||||
if(ismachineperson(H))
|
||||
return TRUE
|
||||
return ..()
|
||||
|
||||
|
||||
+3
-1
@@ -39,7 +39,6 @@
|
||||
var/role_alt_title
|
||||
|
||||
var/datum/job/assigned_job
|
||||
var/list/kills = list()
|
||||
var/list/datum/objective/objectives = list()
|
||||
var/list/datum/objective/special_verbs = list()
|
||||
var/list/targets = list()
|
||||
@@ -90,6 +89,9 @@
|
||||
if(antag_datum.delete_on_mind_deletion)
|
||||
qdel(i)
|
||||
antag_datums = null
|
||||
current = null
|
||||
original = null
|
||||
soulOwner = null
|
||||
return ..()
|
||||
|
||||
/datum/mind/proc/transfer_to(mob/living/new_character)
|
||||
|
||||
@@ -75,8 +75,6 @@
|
||||
B.transfer_identity(C)
|
||||
C.death()
|
||||
add_attack_logs(target, C, "Magically debrained INTENT: [uppertext(target.a_intent)]")*/
|
||||
if(C.stomach_contents && (item_to_retrieve in C.stomach_contents))
|
||||
C.stomach_contents -= item_to_retrieve
|
||||
for(var/X in C.bodyparts)
|
||||
var/obj/item/organ/external/part = X
|
||||
if(item_to_retrieve in part.embedded_objects)
|
||||
|
||||
@@ -188,15 +188,6 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
|
||||
item = /obj/item/storage/box/syndie_kit/fake_revolver
|
||||
cost = 1
|
||||
job = list("Clown")
|
||||
/*
|
||||
/datum/uplink_item/stealthy_weapons/romerol_kit
|
||||
name = "Romerol"
|
||||
reference = "ROM"
|
||||
desc = "A highly experimental bioterror agent which creates dormant nodules to be etched into the grey matter of the brain. On death, these nodules take control of the dead body, causing limited revivification, along with slurred speech, aggression, and the ability to infect others with this agent."
|
||||
item = /obj/item/storage/box/syndie_kit/romerol
|
||||
cost = 25
|
||||
cant_discount = TRUE
|
||||
*/
|
||||
//mime
|
||||
/datum/uplink_item/jobspecific/caneshotgun
|
||||
name = "Cane Shotgun and Assassination Shells"
|
||||
|
||||
@@ -166,9 +166,9 @@
|
||||
//raises them if they are down (only if power's on)
|
||||
if(!A.locked)
|
||||
if(A.lock())
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", null, 1)
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", hearing_distance = 1)
|
||||
else if(A.unlock())
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", null, 1)
|
||||
A.audible_message("<span class='italics'>You hear a click from the bottom of the door.</span>", hearing_distance = 1)
|
||||
|
||||
if(AIRLOCK_WIRE_BACKUP_POWER1)
|
||||
//two wires for backup power. Sending a pulse through either one causes a breaker to trip, but this does not disable it unless main power is down too (in which case it is disabled for 1 minute or however long it takes main power to come back, whichever is shorter).
|
||||
|
||||
@@ -29,8 +29,9 @@
|
||||
var/laname
|
||||
var/lakey
|
||||
if(H.lastattacker)
|
||||
laname = sanitizeSQL(H.lastattacker:real_name)
|
||||
lakey = sanitizeSQL(H.lastattacker:key)
|
||||
laname = sanitizeSQL(H.lastattacker)
|
||||
if(H.lastattackerckey)
|
||||
lakey = sanitizeSQL(H.lastattackerckey)
|
||||
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
|
||||
var/coord = "[H.x], [H.y], [H.z]"
|
||||
// to_chat(world, "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.getBrainLoss()], [H.getOxyLoss()])")
|
||||
@@ -64,8 +65,9 @@
|
||||
var/laname
|
||||
var/lakey
|
||||
if(H.lastattacker)
|
||||
laname = sanitizeSQL(H.lastattacker:real_name)
|
||||
lakey = sanitizeSQL(H.lastattacker:key)
|
||||
laname = sanitizeSQL(H.lastattacker)
|
||||
if(H.lastattackerckey)
|
||||
lakey = sanitizeSQL(H.lastattackerckey)
|
||||
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
|
||||
var/coord = "[H.x], [H.y], [H.z]"
|
||||
// to_chat(world, "INSERT INTO death (name, byondkey, job, special, pod, tod, laname, lakey, gender, bruteloss, fireloss, brainloss, oxyloss) VALUES ('[sqlname]', '[sqlkey]', '[sqljob]', '[sqlspecial]', '[sqlpod]', '[sqltime]', '[laname]', '[lakey]', '[H.gender]', [H.bruteloss], [H.getFireLoss()], [H.brainloss], [H.getOxyLoss()])")
|
||||
|
||||
@@ -70,7 +70,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
power_environ = FALSE
|
||||
valid_territory = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = list('sound/ambience/ambispace.ogg','sound/music/title2.ogg','sound/music/space.ogg','sound/music/traitor.ogg')
|
||||
ambientsounds = SPACE_SOUNDS
|
||||
|
||||
/area/space/nearstation
|
||||
icon_state = "space_near"
|
||||
@@ -117,39 +117,33 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape
|
||||
name = "\improper Emergency Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle2"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_1
|
||||
name = "\improper Escape Pod One"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_2
|
||||
name = "\improper Escape Pod Two"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/pod_3
|
||||
name = "\improper Escape Pod Three"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
parallax_movedir = EAST
|
||||
|
||||
/area/shuttle/pod_4
|
||||
name = "\improper Escape Pod Four"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
nad_allowed = TRUE
|
||||
parallax_movedir = EAST
|
||||
|
||||
/area/shuttle/escape_pod1
|
||||
name = "\improper Escape Pod One"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod1/station
|
||||
@@ -163,7 +157,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape_pod2
|
||||
name = "\improper Escape Pod Two"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod2/station
|
||||
@@ -177,7 +170,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape_pod3
|
||||
name = "\improper Escape Pod Three"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod3/station
|
||||
@@ -191,7 +183,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/escape_pod5 //Pod 4 was lost to meteors
|
||||
name = "\improper Escape Pod Five"
|
||||
music = "music/escape.ogg"
|
||||
nad_allowed = TRUE
|
||||
|
||||
/area/shuttle/escape_pod5/station
|
||||
@@ -205,7 +196,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/mining
|
||||
name = "\improper Mining Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/transport
|
||||
@@ -246,7 +236,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/siberia
|
||||
name = "\improper Labor Camp Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/specops
|
||||
@@ -329,7 +318,6 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
/area/shuttle/research
|
||||
name = "\improper Research Shuttle"
|
||||
music = "music/escape.ogg"
|
||||
icon_state = "shuttle"
|
||||
|
||||
/area/shuttle/research/station
|
||||
@@ -498,6 +486,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
requires_power = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
nad_allowed = TRUE
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/syndicate_mothership/control
|
||||
name = "\improper Syndicate Control Room"
|
||||
@@ -519,6 +508,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
requires_power = FALSE
|
||||
valid_territory = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_FORCED
|
||||
ambientsounds = MINING_SOUNDS
|
||||
|
||||
/area/asteroid/cave // -- TLE
|
||||
name = "\improper Asteroid - Underground"
|
||||
@@ -633,7 +623,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//Maintenance
|
||||
/area/maintenance
|
||||
ambientsounds = list('sound/ambience/ambimaint1.ogg', 'sound/ambience/ambimaint2.ogg', 'sound/ambience/ambimaint3.ogg', 'sound/ambience/ambimaint4.ogg', 'sound/ambience/ambimaint5.ogg')
|
||||
ambientsounds = MAINTENANCE_SOUNDS
|
||||
valid_territory = FALSE
|
||||
|
||||
/area/maintenance/atmos_control
|
||||
@@ -803,12 +793,11 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/bridge
|
||||
name = "\improper Bridge"
|
||||
icon_state = "bridge"
|
||||
music = "signal"
|
||||
ambientsounds = list('sound/ambience/signal.ogg')
|
||||
|
||||
/area/bridge/meeting_room
|
||||
name = "\improper Heads of Staff Meeting Room"
|
||||
icon_state = "meeting"
|
||||
music = null
|
||||
|
||||
/area/crew_quarters/captain
|
||||
name = "\improper Captain's Office"
|
||||
@@ -969,10 +958,12 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "\improper Abandoned Library"
|
||||
icon_state = "library"
|
||||
|
||||
/area/chapel
|
||||
icon_state = "chapel"
|
||||
ambientsounds = HOLY_SOUNDS
|
||||
|
||||
/area/chapel/main
|
||||
name = "\improper Chapel"
|
||||
icon_state = "chapel"
|
||||
ambientsounds = list('sound/ambience/ambicha1.ogg','sound/ambience/ambicha2.ogg','sound/ambience/ambicha3.ogg','sound/ambience/ambicha4.ogg','sound/music/traitor.ogg')
|
||||
|
||||
/area/chapel/office
|
||||
name = "\improper Chapel Office"
|
||||
@@ -1107,7 +1098,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//Engineering
|
||||
/area/engine
|
||||
ambientsounds = list('sound/ambience/ambisin1.ogg','sound/ambience/ambisin2.ogg','sound/ambience/ambisin3.ogg','sound/ambience/ambisin4.ogg')
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/engine/engine_smes
|
||||
name = "\improper Engineering SMES"
|
||||
@@ -1161,6 +1152,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
requires_power = FALSE
|
||||
valid_territory = FALSE
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_IFSTARLIGHT
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/solar/auxport
|
||||
name = "\improper Fore Port Solar Array"
|
||||
@@ -1227,18 +1219,17 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/teleporter
|
||||
name = "\improper Teleporter"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/gateway
|
||||
name = "\improper Gateway"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/AIsattele
|
||||
name = "\improper Abandoned Teleporter"
|
||||
icon_state = "teleporter"
|
||||
music = "signal"
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/signal.ogg')
|
||||
|
||||
/area/toxins/explab
|
||||
name = "\improper E.X.P.E.R.I-MENTOR Lab"
|
||||
@@ -1250,42 +1241,39 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//MedBay
|
||||
|
||||
/area/medical
|
||||
ambientsounds = MEDICAL_SOUNDS
|
||||
|
||||
/area/medical/medbay
|
||||
name = "\improper Medbay"
|
||||
icon_state = "medbay"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
//Medbay is a large area, these additional areas help level out APC load.
|
||||
/area/medical/medbay2
|
||||
name = "\improper Medbay"
|
||||
icon_state = "medbay2"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/medbay3
|
||||
name = "\improper Medbay"
|
||||
icon_state = "medbay3"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
|
||||
/area/medical/biostorage
|
||||
name = "\improper Medical Storage"
|
||||
icon_state = "medbaysecstorage"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/reception
|
||||
name = "\improper Medbay Reception"
|
||||
icon_state = "medbay"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/psych
|
||||
name = "\improper Psych Room"
|
||||
icon_state = "medbaypsych"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
ambientsounds = list('sound/ambience/aurora_caelus_short.ogg')
|
||||
|
||||
/area/medical/medbreak
|
||||
name = "\improper Break Room"
|
||||
icon_state = "medbaybreak"
|
||||
music = 'sound/ambience/signal.ogg'
|
||||
|
||||
/area/medical/patients_rooms
|
||||
name = "\improper Patient's Rooms"
|
||||
@@ -1342,7 +1330,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/medical/morgue
|
||||
name = "\improper Morgue"
|
||||
icon_state = "morgue"
|
||||
ambientsounds = list('sound/ambience/ambimo1.ogg','sound/ambience/ambimo2.ogg')
|
||||
ambientsounds = SPOOKY_SOUNDS
|
||||
|
||||
/area/medical/chemistry
|
||||
name = "\improper Chemistry"
|
||||
@@ -1390,6 +1378,9 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
|
||||
//Security
|
||||
|
||||
/area/security
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/security/main
|
||||
name = "\improper Security Office"
|
||||
icon_state = "securityoffice"
|
||||
@@ -1522,6 +1513,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/security/detectives_office
|
||||
name = "\improper Detective's Office"
|
||||
icon_state = "detective"
|
||||
ambientsounds = list('sound/ambience/ambidet1.ogg', 'sound/ambience/ambidet2.ogg')
|
||||
|
||||
/area/security/range
|
||||
name = "\improper Firing Range"
|
||||
@@ -1870,6 +1862,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/construction
|
||||
name = "\improper Construction Area"
|
||||
icon_state = "yellow"
|
||||
ambientsounds = ENGINEERING_SOUNDS
|
||||
|
||||
/area/mining_construction
|
||||
name = "Auxillary Base Construction"
|
||||
@@ -1962,6 +1955,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
/area/ai_monitored/storage/eva
|
||||
name = "EVA Storage"
|
||||
icon_state = "eva"
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/ai_monitored/storage/secure
|
||||
name = "Secure Storage"
|
||||
@@ -1972,7 +1966,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
icon_state = "storage"
|
||||
|
||||
/area/turret_protected/
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg')
|
||||
ambientsounds = list('sound/ambience/ambimalf.ogg', 'sound/ambience/ambitech.ogg', 'sound/ambience/ambitech2.ogg', 'sound/ambience/ambiatmos.ogg', 'sound/ambience/ambiatmos2.ogg')
|
||||
|
||||
/area/turret_protected/ai_upload
|
||||
name = "\improper AI Upload Chamber"
|
||||
@@ -2034,7 +2028,8 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
// Telecommunications Satellite
|
||||
|
||||
/area/tcommsat
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
|
||||
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg', 'sound/ambience/ambitech.ogg',\
|
||||
'sound/ambience/ambitech2.ogg', 'sound/ambience/ambitech3.ogg', 'sound/ambience/ambimystery.ogg')
|
||||
|
||||
/area/tcommsat/chamber
|
||||
name = "\improper Telecoms Central Compartment"
|
||||
@@ -2082,6 +2077,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
name = "\improper Strange Location"
|
||||
icon_state = "away"
|
||||
report_alerts = FALSE
|
||||
ambientsounds = AWAY_MISSION_SOUNDS
|
||||
|
||||
/area/awaymission/example
|
||||
name = "\improper Strange Station"
|
||||
@@ -2096,7 +2092,7 @@ GLOBAL_LIST_EMPTY(ghostteleportlocs)
|
||||
icon_state = "beach"
|
||||
dynamic_lighting = DYNAMIC_LIGHTING_DISABLED
|
||||
requires_power = FALSE
|
||||
ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg','sound/ambience/seag2.ogg','sound/ambience/seag2.ogg')
|
||||
ambientsounds = list('sound/ambience/shore.ogg', 'sound/ambience/seag1.ogg', 'sound/ambience/seag2.ogg', 'sound/ambience/seag2.ogg', 'sound/ambience/ambiodd.ogg', 'sound/ambience/ambinice.ogg')
|
||||
|
||||
/area/awaymission/undersea
|
||||
name = "Undersea"
|
||||
|
||||
+13
-15
@@ -26,7 +26,6 @@
|
||||
var/power_equip = TRUE
|
||||
var/power_light = TRUE
|
||||
var/power_environ = TRUE
|
||||
var/music = null
|
||||
var/used_equip = FALSE
|
||||
var/used_light = FALSE
|
||||
var/used_environ = FALSE
|
||||
@@ -56,12 +55,7 @@
|
||||
var/global/global_uid = 0
|
||||
var/uid
|
||||
|
||||
var/list/ambientsounds = list('sound/ambience/ambigen1.ogg','sound/ambience/ambigen3.ogg',\
|
||||
'sound/ambience/ambigen4.ogg','sound/ambience/ambigen5.ogg',\
|
||||
'sound/ambience/ambigen6.ogg','sound/ambience/ambigen7.ogg',\
|
||||
'sound/ambience/ambigen8.ogg','sound/ambience/ambigen9.ogg',\
|
||||
'sound/ambience/ambigen10.ogg','sound/ambience/ambigen11.ogg',\
|
||||
'sound/ambience/ambigen12.ogg','sound/ambience/ambigen14.ogg')
|
||||
var/list/ambientsounds = GENERIC_SOUNDS
|
||||
|
||||
var/fast_despawn = FALSE
|
||||
var/can_get_auto_cryod = TRUE
|
||||
@@ -379,20 +373,24 @@
|
||||
|
||||
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
|
||||
if(L && L.client && !L.client.ambience_playing && (L.client.prefs.sound & SOUND_BUZZ)) //split off the white noise from the rest of the ambience because of annoyance complaints - Kluys
|
||||
L.client.ambience_playing = 1
|
||||
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ)
|
||||
L.client.ambience_playing = TRUE
|
||||
SEND_SOUND(L, sound('sound/ambience/shipambience.ogg', repeat = TRUE, wait = FALSE, volume = 35, channel = CHANNEL_BUZZ))
|
||||
else if(L && L.client && !(L.client.prefs.sound & SOUND_BUZZ))
|
||||
L.client.ambience_playing = 0
|
||||
L.client.ambience_playing = FALSE
|
||||
|
||||
if(prob(35) && L && L.client && (L.client.prefs.sound & SOUND_AMBIENCE))
|
||||
var/sound = pick(ambientsounds)
|
||||
|
||||
if(!L.client.played)
|
||||
L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE)
|
||||
L.client.played = 1
|
||||
spawn(600) //ewww - this is very very bad
|
||||
if(L && L.client)
|
||||
L.client.played = 0
|
||||
SEND_SOUND(L, sound(sound, repeat = FALSE, wait = FALSE, volume = 25, channel = CHANNEL_AMBIENCE))
|
||||
L.client.played = TRUE
|
||||
addtimer(CALLBACK(L.client, /client/proc/ResetAmbiencePlayed), 600)
|
||||
|
||||
/**
|
||||
* Reset the played var to false on the client
|
||||
*/
|
||||
/client/proc/ResetAmbiencePlayed()
|
||||
played = FALSE
|
||||
|
||||
/area/proc/gravitychange(var/gravitystate = 0, var/area/A)
|
||||
A.has_gravity = gravitystate
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
/area/mine/explored
|
||||
name = "Mine"
|
||||
icon_state = "explored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
requires_power = TRUE
|
||||
poweralm = FALSE
|
||||
@@ -15,7 +14,7 @@
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
flags = NONE
|
||||
|
||||
/area/mine/dangerous/explored/golem
|
||||
@@ -24,7 +23,6 @@
|
||||
/area/mine/unexplored
|
||||
name = "Mine"
|
||||
icon_state = "unexplored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
requires_power = TRUE
|
||||
poweralm = FALSE
|
||||
@@ -32,7 +30,7 @@
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
outdoors = TRUE
|
||||
ambientsounds = list('sound/ambience/ambimine.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
flags = NONE
|
||||
|
||||
/area/mine/lobby
|
||||
@@ -80,6 +78,7 @@
|
||||
/area/mine/laborcamp/security
|
||||
name = "Labor Camp Security"
|
||||
icon_state = "security"
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
|
||||
/area/mine/podbay
|
||||
name = "Mining Podbay"
|
||||
@@ -95,26 +94,24 @@
|
||||
/area/lavaland/surface
|
||||
name = "Lavaland"
|
||||
icon_state = "explored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
poweralm = FALSE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
requires_power = TRUE
|
||||
ambientsounds = list('sound/ambience/ambilava.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
|
||||
/area/lavaland/underground
|
||||
name = "Lavaland Caves"
|
||||
icon_state = "unexplored"
|
||||
music = null
|
||||
always_unpowered = TRUE
|
||||
requires_power = TRUE
|
||||
poweralm = FALSE
|
||||
power_environ = FALSE
|
||||
power_equip = FALSE
|
||||
power_light = FALSE
|
||||
ambientsounds = list('sound/ambience/ambilava.ogg')
|
||||
ambientsounds = MINING_SOUNDS
|
||||
|
||||
/area/lavaland/surface/outdoors
|
||||
name = "Lavaland Wastes"
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
|
||||
/area/ruin/powered/clownplanet
|
||||
icon_state = "dk_yellow"
|
||||
ambientsounds = list('sound/music/clown.ogg')
|
||||
|
||||
/area/ruin/powered/animal_hospital
|
||||
icon_state = "dk_yellow"
|
||||
@@ -38,7 +39,7 @@
|
||||
/area/ruin/unpowered/syndicate_lava_base
|
||||
name = "Secret Base"
|
||||
icon_state = "dk_yellow"
|
||||
ambientsounds = list('sound/ambience/ambidanger.ogg', 'sound/ambience/ambidanger2.ogg')
|
||||
ambientsounds = HIGHSEC_SOUNDS
|
||||
report_alerts = FALSE
|
||||
hide_attacklogs = TRUE
|
||||
|
||||
|
||||
+41
-10
@@ -14,6 +14,7 @@
|
||||
var/germ_level = GERM_LEVEL_AMBIENT // The higher the germ level, the more germ on the atom.
|
||||
var/simulated = TRUE //filter for actions - used by lighting overlays
|
||||
var/atom_say_verb = "says"
|
||||
var/bubble_icon = "default" ///what icon the mob uses for speechbubbles
|
||||
var/dont_save = FALSE // For atoms that are temporary by necessity - like lighting overlays
|
||||
|
||||
///Chemistry.
|
||||
@@ -721,17 +722,38 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
var/mob/M = loc
|
||||
M.update_inv_shoes()
|
||||
|
||||
/mob/living/carbon/human/clean_blood()
|
||||
if(gloves)
|
||||
/mob/living/carbon/human/clean_blood(clean_hands = TRUE, clean_mask = TRUE, clean_feet = TRUE)
|
||||
if(w_uniform && !(wear_suit && wear_suit.flags_inv & HIDEJUMPSUIT))
|
||||
if(w_uniform.clean_blood())
|
||||
update_inv_w_uniform()
|
||||
if(gloves && !(wear_suit && wear_suit.flags_inv & HIDEGLOVES))
|
||||
if(gloves.clean_blood())
|
||||
clean_blood()
|
||||
update_inv_gloves()
|
||||
gloves.germ_level = 0
|
||||
else
|
||||
..() // Clear the Blood_DNA list
|
||||
if(bloody_hands)
|
||||
bloody_hands = 0
|
||||
update_inv_gloves()
|
||||
gloves.germ_level = 0
|
||||
clean_hands = FALSE
|
||||
if(shoes && !(wear_suit && wear_suit.flags_inv & HIDESHOES))
|
||||
if(shoes.clean_blood())
|
||||
update_inv_shoes()
|
||||
clean_feet = FALSE
|
||||
if(s_store && !(wear_suit && wear_suit.flags_inv & HIDESUITSTORAGE))
|
||||
if(s_store.clean_blood())
|
||||
update_inv_s_store()
|
||||
if(lip_style && !(head && head.flags_inv & HIDEMASK))
|
||||
lip_style = null
|
||||
update_body()
|
||||
if(glasses && !(wear_mask && wear_mask.flags_inv & HIDEEYES))
|
||||
if(glasses.clean_blood())
|
||||
update_inv_glasses()
|
||||
if(l_ear && !(wear_mask && wear_mask.flags_inv & HIDEEARS))
|
||||
if(l_ear.clean_blood())
|
||||
update_inv_ears()
|
||||
if(r_ear && !(wear_mask && wear_mask.flags_inv & HIDEEARS))
|
||||
if(r_ear.clean_blood())
|
||||
update_inv_ears()
|
||||
if(belt)
|
||||
if(belt.clean_blood())
|
||||
update_inv_belt()
|
||||
..(clean_hands, clean_mask, clean_feet)
|
||||
update_icons() //apply the now updated overlays to the mob
|
||||
|
||||
/atom/proc/add_vomit_floor(toxvomit = FALSE, green = FALSE)
|
||||
@@ -819,7 +841,16 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
/atom/proc/atom_say(message)
|
||||
if(!message)
|
||||
return
|
||||
audible_message("<span class='game say'><span class='name'>[src]</span> [atom_say_verb], \"[message]\"</span>")
|
||||
var/list/speech_bubble_hearers = list()
|
||||
for(var/mob/M in get_mobs_in_view(7, src))
|
||||
M.show_message("<span class='game say'><span class='name'>[src]</span> [atom_say_verb], \"[message]\"</span>", 2, null, 1)
|
||||
if(M.client)
|
||||
speech_bubble_hearers += M.client
|
||||
|
||||
if(length(speech_bubble_hearers))
|
||||
var/image/I = image('icons/mob/talk.dmi', src, "[bubble_icon][say_test(message)]", FLY_LAYER)
|
||||
I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
|
||||
INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, I, speech_bubble_hearers, 30)
|
||||
|
||||
/atom/proc/speech_bubble(bubble_state = "", bubble_loc = src, list/bubble_recipients = list())
|
||||
return
|
||||
|
||||
@@ -50,6 +50,7 @@
|
||||
loc.handle_atom_del(src)
|
||||
for(var/atom/movable/AM in contents)
|
||||
qdel(AM)
|
||||
LAZYCLEARLIST(client_mobs_in_contents)
|
||||
loc = null
|
||||
if(pulledby)
|
||||
pulledby.stop_pulling()
|
||||
|
||||
@@ -46,7 +46,6 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
var/datum/mind/blob = pick(possible_blobs)
|
||||
infected_crew += blob
|
||||
blob.special_role = SPECIAL_ROLE_BLOB
|
||||
update_blob_icons_added(blob)
|
||||
blob.restricted_roles = restricted_jobs
|
||||
log_game("[key_name(blob)] has been selected as a Blob")
|
||||
possible_blobs -= blob
|
||||
@@ -152,6 +151,7 @@ GLOBAL_LIST_EMPTY(blob_nodes)
|
||||
|
||||
for(var/datum/mind/blob in infected_crew)
|
||||
greet_blob(blob)
|
||||
update_blob_icons_added(blob)
|
||||
|
||||
if(SSshuttle)
|
||||
SSshuttle.emergencyNoEscape = 1
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
icon = 'icons/mob/blob.dmi'
|
||||
pass_flags = PASSBLOB
|
||||
faction = list(ROLE_BLOB)
|
||||
bubble_icon = "blob"
|
||||
atmos_requirements = list("min_oxy" = 0, "max_oxy" = 0, "min_tox" = 0, "max_tox" = 0, "min_co2" = 0, "max_co2" = 0, "min_n2" = 0, "max_n2" = 0)
|
||||
minbodytemp = 0
|
||||
maxbodytemp = 360
|
||||
|
||||
@@ -89,41 +89,40 @@
|
||||
..()
|
||||
|
||||
|
||||
/obj/structure/blob/core/proc/create_overmind(var/client/new_overmind, var/override_delay)
|
||||
/obj/structure/blob/core/proc/create_overmind(client/new_overmind, override_delay)
|
||||
if(overmind_get_delay > world.time && !override_delay)
|
||||
return
|
||||
|
||||
overmind_get_delay = world.time + 3000 // 5 minutes
|
||||
overmind_get_delay = world.time + 5 MINUTES
|
||||
|
||||
if(overmind)
|
||||
qdel(overmind)
|
||||
|
||||
INVOKE_ASYNC(src, .proc/get_new_overmind, new_overmind)
|
||||
|
||||
/obj/structure/blob/core/proc/get_new_overmind(client/new_overmind)
|
||||
var/mob/C = null
|
||||
var/list/candidates = list()
|
||||
|
||||
spawn()
|
||||
if(!new_overmind)
|
||||
if(is_offspring)
|
||||
candidates = pollCandidates("Do you want to play as a blob offspring?", ROLE_BLOB, 1)
|
||||
else
|
||||
candidates = pollCandidates("Do you want to play as a blob?", ROLE_BLOB, 1)
|
||||
|
||||
if(candidates.len)
|
||||
C = pick(candidates)
|
||||
if(!new_overmind)
|
||||
if(is_offspring)
|
||||
candidates = pollCandidates("Do you want to play as a blob offspring?", ROLE_BLOB, 1)
|
||||
else
|
||||
C = new_overmind
|
||||
candidates = pollCandidates("Do you want to play as a blob?", ROLE_BLOB, 1)
|
||||
|
||||
if(C)
|
||||
var/mob/camera/blob/B = new(src.loc)
|
||||
B.key = C.key
|
||||
B.blob_core = src
|
||||
src.overmind = B
|
||||
color = overmind.blob_reagent_datum.color
|
||||
if(B.mind && !B.mind.special_role)
|
||||
B.mind.make_Overmind()
|
||||
spawn(0)
|
||||
if(is_offspring)
|
||||
B.is_offspring = TRUE
|
||||
if(length(candidates))
|
||||
C = pick(candidates)
|
||||
else
|
||||
C = new_overmind
|
||||
|
||||
if(C && !QDELETED(src))
|
||||
var/mob/camera/blob/B = new(loc)
|
||||
B.key = C.key
|
||||
B.blob_core = src
|
||||
overmind = B
|
||||
color = overmind.blob_reagent_datum.color
|
||||
if(B.mind && !B.mind.special_role)
|
||||
B.mind.make_Overmind()
|
||||
B.is_offspring = is_offspring
|
||||
|
||||
/obj/structure/blob/core/proc/lateblobtimer()
|
||||
addtimer(CALLBACK(src, .proc/lateblobcheck), 50)
|
||||
|
||||
@@ -36,11 +36,9 @@
|
||||
to_chat(user, "We haven't prepared our sting yet!")
|
||||
if(!iscarbon(target))
|
||||
return
|
||||
if(ishuman(target))
|
||||
var/mob/living/carbon/human/H = target
|
||||
if(H.isSynthetic())
|
||||
to_chat(user, "<span class='warning'>This won't work on synthetics.</span>")
|
||||
return
|
||||
if(ismachineperson(target))
|
||||
to_chat(user, "<span class='warning'>This won't work on synthetics.</span>")
|
||||
return
|
||||
if(!isturf(user.loc))
|
||||
return
|
||||
if(!AStar(user, target.loc, /turf/proc/Distance, user.mind.changeling.sting_range, simulated_only = 0))
|
||||
|
||||
@@ -808,6 +808,7 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
allow_excess_invokers = 1
|
||||
icon_state = "5"
|
||||
invoke_damage = 5
|
||||
var/summoning = FALSE
|
||||
var/summontime = 0
|
||||
|
||||
/obj/effect/rune/summon/invoke(var/list/invokers)
|
||||
@@ -819,6 +820,11 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
var/mob/living/cultist_to_summon = input(user, "Who do you wish to call to [src]?", "Followers of [SSticker.cultdat.entity_title3]") as null|anything in cultists
|
||||
if(!Adjacent(user) || !src || QDELETED(src) || user.incapacitated())
|
||||
return
|
||||
if(summoning)
|
||||
to_chat(user, "<span class='cultitalic'>You are already summoning a target!</span>")
|
||||
fail_invoke()
|
||||
return
|
||||
|
||||
if(!cultist_to_summon)
|
||||
to_chat(user, "<span class='cultitalic'>You require a summoning target!</span>")
|
||||
fail_invoke()
|
||||
@@ -841,18 +847,20 @@ GLOBAL_LIST_EMPTY(teleport_runes)
|
||||
new /obj/effect/temp_visual/cult/sparks(get_turf(cultist_to_summon)) //observer warning
|
||||
log_game("Summon Cultist rune failed - holywater in target")
|
||||
return
|
||||
|
||||
summoning = TRUE
|
||||
..()
|
||||
if(hard_summon)
|
||||
summontime = 20
|
||||
|
||||
if(do_after(user, summontime, target = loc))
|
||||
if(do_after(user, summontime, target = src))
|
||||
summoning = FALSE // Here incase the proc stops after the qdel
|
||||
cultist_to_summon.visible_message("<span class='warning'>[cultist_to_summon] suddenly disappears in a flash of red light!</span>", \
|
||||
"<span class='cultitalic'><b>Overwhelming vertigo consumes you as you are hurled through the air!</b></span>")
|
||||
visible_message("<span class='warning'>A foggy shape materializes atop [src] and solidifies into [cultist_to_summon]!</span>")
|
||||
|
||||
cultist_to_summon.forceMove(get_turf(src))
|
||||
qdel(src)
|
||||
summoning = FALSE
|
||||
|
||||
//Rite of Boiling Blood: Deals extremely high amounts of damage to non-cultists nearby
|
||||
/obj/effect/rune/blood_boil
|
||||
|
||||
@@ -480,8 +480,8 @@ Congratulations! You are now trained for invasive xenobiology research!"}
|
||||
H.update_inv_r_hand()
|
||||
|
||||
/obj/item/abductor_baton/proc/StunAttack(mob/living/L,mob/living/user)
|
||||
user.lastattacked = L
|
||||
L.lastattacker = user
|
||||
L.lastattacker = user.real_name
|
||||
L.lastattackerckey = user.ckey
|
||||
|
||||
L.Stun(7)
|
||||
L.Weaken(7)
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
icon = 'icons/mob/swarmer.dmi'
|
||||
desc = "Robotic constructs of unknown design, swarmers seek only to consume materials and replicate themselves indefinitely."
|
||||
speak_emote = list("tones")
|
||||
bubble_icon = "swarmer"
|
||||
health = 40
|
||||
maxHealth = 40
|
||||
status_flags = CANPUSH
|
||||
@@ -362,6 +363,10 @@
|
||||
to_chat(S, "<span class='warning'>This cryopod control computer should be preserved, it contains useful items and information about the inhabitants. Aborting.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/structure/spacepoddoor/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Disrupting this energy field would overload us. Aborting.</span>")
|
||||
return FALSE
|
||||
|
||||
/turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
var/isonshuttle = istype(loc, /area/shuttle)
|
||||
for(var/turf/T in range(1, src))
|
||||
@@ -604,7 +609,7 @@
|
||||
if(!istype(L, /mob/living/simple_animal/hostile/swarmer))
|
||||
playsound(loc,'sound/effects/snap.ogg',50, 1, -1)
|
||||
L.electrocute_act(0, src, 1, TRUE, TRUE)
|
||||
if(isrobot(L) || L.isSynthetic())
|
||||
if(isrobot(L) || ismachineperson(L))
|
||||
L.Weaken(5)
|
||||
qdel(src)
|
||||
..()
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
real_name = "Guardian Spirit"
|
||||
desc = "A mysterious being that stands by it's charge, ever vigilant."
|
||||
speak_emote = list("intones")
|
||||
bubble_icon = "guardian"
|
||||
response_help = "passes through"
|
||||
response_disarm = "flails at"
|
||||
response_harm = "punches"
|
||||
|
||||
@@ -67,7 +67,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
|
||||
/datum/objective/assassinate/check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == DEAD || iszombie(target))
|
||||
if(target.current.stat == DEAD)
|
||||
return 1
|
||||
if(issilicon(target.current) || isbrain(target.current)) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
|
||||
return 1
|
||||
@@ -111,7 +111,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
|
||||
/datum/objective/maroon/check_completion()
|
||||
if(target && target.current)
|
||||
if(target.current.stat == DEAD || iszombie(target))
|
||||
if(target.current.stat == DEAD)
|
||||
return 1
|
||||
if(!target.current.ckey)
|
||||
return 1
|
||||
@@ -168,7 +168,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
if(!target) //If it's a free objective.
|
||||
return 1
|
||||
if(target.current)
|
||||
if(target.current.stat == DEAD || iszombie(target))
|
||||
if(target.current.stat == DEAD)
|
||||
return 0
|
||||
if(issilicon(target.current))
|
||||
return 0
|
||||
@@ -262,7 +262,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
return 0
|
||||
if(isbrain(owner.current))
|
||||
return 0
|
||||
if(!owner.current || owner.current.stat == DEAD || iszombie(owner))
|
||||
if(!owner.current || owner.current.stat == DEAD)
|
||||
return 0
|
||||
if(SSticker.force_ending) //This one isn't their fault, so lets just assume good faith
|
||||
return 1
|
||||
@@ -317,7 +317,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Die a glorious death."
|
||||
|
||||
/datum/objective/die/check_completion()
|
||||
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current) || iszombie(owner))
|
||||
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
|
||||
return 1
|
||||
if(issilicon(owner.current) && owner.current != owner.original)
|
||||
return 1
|
||||
@@ -573,9 +573,10 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
// /vg/; Vox Inviolate for humans :V
|
||||
/datum/objective/minimize_casualties
|
||||
explanation_text = "Minimise casualties."
|
||||
|
||||
/datum/objective/minimize_casualties/check_completion()
|
||||
if(owner.kills.len>5) return 0
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
//Vox heist objectives.
|
||||
|
||||
@@ -781,16 +782,7 @@ GLOBAL_LIST_INIT(potential_theft_objectives, (subtypesof(/datum/theft_objective)
|
||||
explanation_text = "Follow the Inviolate. Minimise death and loss of resources."
|
||||
|
||||
/datum/objective/heist/inviolate_death/check_completion()
|
||||
var/vox_allowed_kills = 3 // The number of people the vox can accidently kill. Mostly a counter to people killing themselves if a raider touches them to force fail.
|
||||
var/vox_total_kills = 0
|
||||
|
||||
var/datum/game_mode/heist/H = SSticker.mode
|
||||
for(var/datum/mind/raider in H.raiders)
|
||||
vox_total_kills += raider.kills.len // Kills are listed in the mind; uses this to calculate vox kills
|
||||
|
||||
if(vox_total_kills > vox_allowed_kills) return 0
|
||||
return 1
|
||||
|
||||
return TRUE
|
||||
|
||||
// Traders
|
||||
// These objectives have no check_completion, they exist only to tell Sol Traders what to aim for.
|
||||
|
||||
@@ -194,8 +194,8 @@ Made by Xhuis
|
||||
return 1
|
||||
var/mob/living/M = thrall_mind.current
|
||||
if(issilicon(M))
|
||||
M.audible_message("<span class='notice'>[M] lets out a short blip.</span>", \
|
||||
"<span class='userdanger'>You have been turned into a robot! You are no longer a thrall! Though you try, you cannot remember anything about your servitude...</span>")
|
||||
M.audible_message("<span class='notice'>[M] lets out a short blip.</span>")
|
||||
to_chat(M, "<span class='userdanger'>You have been turned into a robot! You are no longer a thrall! Though you try, you cannot remember anything about your servitude...</span>")
|
||||
else
|
||||
M.visible_message("<span class='big'>[M] looks like [M.p_their()] mind is [M.p_their()] own again!</span>", \
|
||||
"<span class='userdanger'>A piercing white light floods your eyes. Your mind is your own again! Though you try, you cannot remember anything about the shadowlings or your time \
|
||||
@@ -244,8 +244,8 @@ Made by Xhuis
|
||||
ling_mind.RemoveSpell(S)
|
||||
var/mob/living/M = ling_mind.current
|
||||
if(issilicon(M))
|
||||
M.audible_message("<span class='notice'>[M] lets out a short blip.</span>", \
|
||||
"<span class='userdanger'>You have been turned into a robot! You are no longer a shadowling! Though you try, you cannot remember anything about your time as one...</span>")
|
||||
M.audible_message("<span class='notice'>[M] lets out a short blip.</span>")
|
||||
to_chat(M, "<span class='userdanger'>You have been turned into a robot! You are no longer a shadowling! Though you try, you cannot remember anything about your time as one...</span>")
|
||||
else
|
||||
M.visible_message("<span class='big'>[M] screams and contorts!</span>", \
|
||||
"<span class='userdanger'>THE LIGHT-- YOUR MIND-- <i>BURNS--</i></span>")
|
||||
|
||||
@@ -470,7 +470,7 @@ GLOBAL_LIST_EMPTY(multiverse)
|
||||
M.equip_to_slot_or_del(sword, slot_r_hand)
|
||||
|
||||
if("cyborg")
|
||||
if(!ismachine(M))
|
||||
if(!ismachineperson(M))
|
||||
for(var/obj/item/organ/O in M.bodyparts)
|
||||
O.robotize(make_tough = 1)
|
||||
M.equip_to_slot_or_del(new /obj/item/clothing/glasses/thermal/eyepatch(M), slot_glasses)
|
||||
|
||||
@@ -24,8 +24,8 @@
|
||||
title = "Cyborg"
|
||||
flag = JOB_CYBORG
|
||||
department_flag = JOBCAT_ENGSEC
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "your laws and the AI" //Nodrak
|
||||
department_head = list("AI")
|
||||
selection_color = "#ddffdd"
|
||||
|
||||
@@ -223,6 +223,7 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca
|
||||
glasses = /obj/item/clothing/glasses/hud/security/sunglasses
|
||||
id = /obj/item/card/id/nanotrasen
|
||||
l_pocket = /obj/item/flash
|
||||
r_pocket = /obj/item/clothing/accessory/lawyers_badge
|
||||
pda = /obj/item/pda/heads/magistrate
|
||||
backpack_contents = list(
|
||||
/obj/item/melee/classic_baton/telescopic = 1
|
||||
@@ -262,9 +263,12 @@ GLOBAL_DATUM_INIT(captain_announcement, /datum/announcement/minor, new(do_newsca
|
||||
glasses = /obj/item/clothing/glasses/hud/security/sunglasses/read_only
|
||||
id = /obj/item/card/id/security
|
||||
l_pocket = /obj/item/laser_pointer
|
||||
r_pocket = /obj/item/flash
|
||||
r_pocket = /obj/item/clothing/accessory/lawyers_badge
|
||||
l_hand = /obj/item/storage/briefcase
|
||||
pda = /obj/item/pda/lawyer
|
||||
backpack_contents = list(
|
||||
/obj/item/flash = 1
|
||||
)
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
satchel = /obj/item/storage/backpack/satchel_sec
|
||||
dufflebag = /obj/item/storage/backpack/duffel/security
|
||||
|
||||
@@ -282,14 +282,14 @@
|
||||
if(visualsOnly)
|
||||
return
|
||||
|
||||
if(ismachine(H))
|
||||
if(ismachineperson(H))
|
||||
var/obj/item/organ/internal/cyberimp/brain/clown_voice/implant = new
|
||||
implant.insert(H)
|
||||
|
||||
H.dna.SetSEState(GLOB.clumsyblock, TRUE)
|
||||
genemutcheck(H, GLOB.clumsyblock, null, MUTCHK_FORCED)
|
||||
H.dna.default_blocks.Add(GLOB.clumsyblock)
|
||||
if(!ismachine(H))
|
||||
if(!ismachineperson(H))
|
||||
H.dna.SetSEState(GLOB.comicblock, TRUE)
|
||||
genemutcheck(H, GLOB.comicblock, null, MUTCHK_FORCED)
|
||||
H.dna.default_blocks.Add(GLOB.comicblock)
|
||||
|
||||
@@ -322,16 +322,18 @@
|
||||
apply_mode()
|
||||
|
||||
|
||||
/obj/machinery/alarm/proc/handle_heating_cooling(var/datum/gas_mixture/environment, var/datum/tlv/cur_tlv, var/turf/simulated/location)
|
||||
/obj/machinery/alarm/proc/handle_heating_cooling(datum/gas_mixture/environment, datum/tlv/cur_tlv, turf/simulated/location)
|
||||
cur_tlv = TLV["temperature"]
|
||||
//Handle temperature adjustment here.
|
||||
if(environment.temperature < target_temperature - 2 || environment.temperature > target_temperature + 2 || regulating_temperature)
|
||||
//If it goes too far, we should adjust ourselves back before stopping.
|
||||
if(!cur_tlv.get_danger_level(target_temperature))
|
||||
var/datum/gas_mixture/gas = location.remove_air(0.25 * environment.total_moles())
|
||||
if(!gas)
|
||||
return
|
||||
if(!regulating_temperature)
|
||||
regulating_temperature = 1
|
||||
visible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\
|
||||
"You hear a click and a faint electronic hum.")
|
||||
visible_message("\The [src] clicks as it starts [environment.temperature > target_temperature ? "cooling" : "heating"] the room.", "You hear a click and a faint electronic hum.")
|
||||
|
||||
if(target_temperature > MAX_TEMPERATURE)
|
||||
target_temperature = MAX_TEMPERATURE
|
||||
@@ -339,9 +341,8 @@
|
||||
if(target_temperature < MIN_TEMPERATURE)
|
||||
target_temperature = MIN_TEMPERATURE
|
||||
|
||||
var/datum/gas_mixture/gas = location.remove_air(0.25*environment.total_moles())
|
||||
var/heat_capacity = gas.heat_capacity()
|
||||
var/energy_used = max( abs( heat_capacity*(gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE)
|
||||
var/energy_used = max(abs(heat_capacity * (gas.temperature - target_temperature) ), MAX_ENERGY_CHANGE)
|
||||
|
||||
//Use power. Assuming that each power unit represents 1000 watts....
|
||||
use_power(energy_used/1000, ENVIRON)
|
||||
@@ -349,16 +350,15 @@
|
||||
//We need to cool ourselves.
|
||||
if(heat_capacity)
|
||||
if(environment.temperature > target_temperature)
|
||||
gas.temperature -= energy_used/heat_capacity
|
||||
gas.temperature -= energy_used / heat_capacity
|
||||
else
|
||||
gas.temperature += energy_used/heat_capacity
|
||||
gas.temperature += energy_used / heat_capacity
|
||||
|
||||
environment.merge(gas)
|
||||
|
||||
if(abs(environment.temperature - target_temperature) <= 0.5)
|
||||
regulating_temperature = 0
|
||||
visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.",\
|
||||
"You hear a click as a faint electronic humming stops.")
|
||||
visible_message("\The [src] clicks quietly as it stops [environment.temperature > target_temperature ? "cooling" : "heating"] the room.", "You hear a click as a faint electronic humming stops.")
|
||||
|
||||
/obj/machinery/alarm/update_icon()
|
||||
if(wiresexposed)
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
active_power_usage = 500
|
||||
light_color = LIGHT_COLOR_DARKBLUE
|
||||
circuit = /obj/item/circuitboard/crew
|
||||
var/datum/nano_module/crew_monitor/crew_monitor
|
||||
var/datum/tgui_module/crew_monitor/crew_monitor
|
||||
|
||||
/obj/machinery/computer/crew/New()
|
||||
crew_monitor = new(src)
|
||||
@@ -20,17 +20,15 @@
|
||||
|
||||
/obj/machinery/computer/crew/attack_ai(mob/user)
|
||||
attack_hand(user)
|
||||
ui_interact(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/crew/attack_hand(mob/user)
|
||||
add_fingerprint(user)
|
||||
if(stat & (BROKEN|NOPOWER))
|
||||
return
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/machinery/computer/crew/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
crew_monitor.ui_interact(user, ui_key, ui, force_open)
|
||||
/obj/machinery/computer/crew/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
crew_monitor.tgui_interact(user, ui_key, ui, force_open)
|
||||
|
||||
/obj/machinery/computer/crew/interact(mob/user)
|
||||
crew_monitor.ui_interact(user)
|
||||
crew_monitor.tgui_interact(user)
|
||||
|
||||
@@ -89,12 +89,12 @@ GLOBAL_LIST_EMPTY(doppler_arrays)
|
||||
|
||||
/obj/machinery/doppler_array/proc/print_explosive_logs(mob/user)
|
||||
if(!logged_explosions.len)
|
||||
atom_say("<span class='notice'>No logs currently stored in internal database.</span>")
|
||||
atom_say("No logs currently stored in internal database.")
|
||||
return
|
||||
if(active_timers)
|
||||
to_chat(user, "<span class='notice'>[src] is already printing something, please wait.</span>")
|
||||
return
|
||||
atom_say("<span class='notice'>Printing explosive log. Standby...</span>")
|
||||
atom_say("Printing explosive log. Standby...")
|
||||
addtimer(CALLBACK(src, .proc/print), 50)
|
||||
|
||||
/obj/machinery/doppler_array/proc/print()
|
||||
|
||||
@@ -177,8 +177,8 @@
|
||||
F.broken = 0
|
||||
F.times_used = 0
|
||||
F.icon_state = "flash"
|
||||
if(istype(O,/obj/item/gun/energy/disabler/cyborg))
|
||||
var/obj/item/gun/energy/disabler/cyborg/D = O
|
||||
if(istype(O,/obj/item/gun/energy))
|
||||
var/obj/item/gun/energy/D = O
|
||||
if(D.cell.charge < D.cell.maxcharge)
|
||||
var/obj/item/ammo_casing/energy/E = D.ammo_type[D.select]
|
||||
D.cell.give(E.e_cost)
|
||||
|
||||
@@ -225,7 +225,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
|
||||
message_log += "<B>Message sent to [recipient] at [station_time_timestamp()]</B><BR>[message]"
|
||||
Radio.autosay("Alert; a new requests console message received for [recipient] from [department]", null, "[radiochannel]")
|
||||
else
|
||||
audible_message(text("[bicon(src)] *The Requests Console beeps: '<b>NOTICE:</b> No server detected!'"),,4)
|
||||
atom_say("No server detected!")
|
||||
|
||||
//Handle screen switching
|
||||
if(href_list["setScreen"])
|
||||
@@ -256,7 +256,7 @@ GLOBAL_LIST_EMPTY(allRequestConsoles)
|
||||
else if(world.time < print_cooldown)
|
||||
error_message = "Please allow the printer time to prepare the next shipping label."
|
||||
if(error_message)
|
||||
audible_message(text("[bicon(src)] *The Requests Console beeps: '<b>NOTICE:</b> [error_message]'"),,4)
|
||||
atom_say("[error_message]")
|
||||
return
|
||||
print_label(ship_tag_name, ship_tag_index)
|
||||
shipping_log += "<B>Shipping Label printed for [ship_tag_name]</b><br>[msgVerified]"
|
||||
|
||||
@@ -306,7 +306,7 @@ GLOBAL_LIST_EMPTY(tcomms_machines)
|
||||
if(is_admin(R) && !R.get_preference(CHAT_RADIO)) //Adminning with 80 people on can be fun when you're trying to talk and all you can hear is radios.
|
||||
continue
|
||||
|
||||
if(istype(R, /mob/new_player)) // we don't want new players to hear messages. rare but generates runtimes.
|
||||
if(isnewplayer(R)) // we don't want new players to hear messages. rare but generates runtimes.
|
||||
continue
|
||||
|
||||
// --- Can understand the speech ---
|
||||
|
||||
@@ -166,10 +166,6 @@
|
||||
var/mob/M = A
|
||||
if(istype(firer, /mob))
|
||||
add_attack_logs(firer, M, "Mecha-shot with <b>[src]</b>")
|
||||
if(!iscarbon(firer))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = firer
|
||||
else
|
||||
add_attack_logs(null, M, "Mecha-shot with <b>[src]</b>")
|
||||
if(life <= 0)
|
||||
|
||||
@@ -5,8 +5,8 @@
|
||||
|
||||
/turf/simulated/floor/mech_bay_recharge_floor/airless
|
||||
icon_state = "recharge_floor_asteroid"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port
|
||||
|
||||
@@ -11,6 +11,7 @@
|
||||
force = 5
|
||||
max_integrity = 300 //max_integrity is base health
|
||||
armor = list(melee = 20, bullet = 10, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
|
||||
bubble_icon = "machine"
|
||||
var/list/facing_modifiers = list(MECHA_FRONT_ARMOUR = 1.5, MECHA_SIDE_ARMOUR = 1, MECHA_BACK_ARMOUR = 0.5)
|
||||
var/ruin_mecha = FALSE //if the mecha starts on a ruin, don't automatically give it a tracking beacon to prevent metagaming.
|
||||
var/initial_icon = null //Mech type for resetting icon. Only used for reskinning kits (see custom items)
|
||||
@@ -1446,8 +1447,10 @@
|
||||
diag_hud_set_mechtracking()
|
||||
|
||||
|
||||
/obj/mecha/speech_bubble(var/bubble_state = "",var/bubble_loc = src, var/list/bubble_recipients = list())
|
||||
flick_overlay(image('icons/mob/talk.dmi', bubble_loc, bubble_state,MOB_LAYER+1), bubble_recipients, 30)
|
||||
/obj/mecha/speech_bubble(bubble_state = "", bubble_loc = src, list/bubble_recipients = list())
|
||||
var/image/I = image('icons/mob/talk.dmi', bubble_loc, bubble_state, FLY_LAYER)
|
||||
I.appearance_flags = APPEARANCE_UI_IGNORE_ALPHA
|
||||
INVOKE_ASYNC(GLOBAL_PROC, /.proc/flick_overlay, I, bubble_recipients, 30)
|
||||
|
||||
/obj/mecha/update_remote_sight(mob/living/user)
|
||||
if(occupant_sight_flags)
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
var/lootdoubles = 1 //if the same item can be spawned twice
|
||||
var/list/loot //a list of possible items to spawn e.g. list(/obj/item, /obj/structure, /obj/effect)
|
||||
|
||||
/obj/effect/spawner/lootdrop/Initialize(mapload)
|
||||
/obj/effect/spawner/lootdrop/New()
|
||||
..()
|
||||
if(loot && loot.len)
|
||||
for(var/i = lootcount, i > 0, i--)
|
||||
@@ -17,7 +17,7 @@
|
||||
|
||||
if(lootspawn)
|
||||
new lootspawn(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spawner/lootdrop/armory_contraband
|
||||
name = "armory contraband gun spawner"
|
||||
|
||||
@@ -21,6 +21,7 @@
|
||||
if(i == lowBoundX || i == hiBoundX || j == lowBoundY || j == hiBoundY)
|
||||
new /turf/simulated/wall/vault(locate(i,j,z),type)
|
||||
else
|
||||
new /turf/simulated/floor/vault(locate(i,j,z),type)
|
||||
var/turf/T = new /turf/simulated/floor/vault(locate(i, j, z))
|
||||
T.icon_state = "[type]vault"
|
||||
|
||||
qdel(src)
|
||||
|
||||
@@ -56,7 +56,7 @@
|
||||
desc = "Huh."
|
||||
allow_wrap = FALSE
|
||||
|
||||
/obj/item/storage/pill_bottle/random_drug_bottle/New()
|
||||
..()
|
||||
/obj/item/storage/pill_bottle/random_drug_bottle/Initialize(mapload)
|
||||
. = ..()
|
||||
for(var/i in 1 to 5)
|
||||
new /obj/item/reagent_containers/food/pill/random_drugs(src)
|
||||
|
||||
@@ -241,6 +241,7 @@
|
||||
user.base_icon = disguise
|
||||
user.icon_state = disguise
|
||||
user.cham_proj = src
|
||||
user.bubble_icon = "robot"
|
||||
active = TRUE
|
||||
user.update_icons()
|
||||
|
||||
@@ -249,6 +250,7 @@
|
||||
S = user
|
||||
user.base_icon = initial(user.base_icon)
|
||||
user.icon_state = initial(user.icon_state)
|
||||
user.bubble_icon = "syndibot"
|
||||
active = FALSE
|
||||
user.update_icons()
|
||||
|
||||
|
||||
@@ -113,7 +113,6 @@
|
||||
/obj/item/flash/attack(mob/living/M, mob/user)
|
||||
if(!try_use_flash(user))
|
||||
return 0
|
||||
|
||||
if(iscarbon(M))
|
||||
flash_carbon(M, user, 5, 1)
|
||||
if(overcharged)
|
||||
@@ -121,22 +120,12 @@
|
||||
M.IgniteMob()
|
||||
burn_out()
|
||||
return 1
|
||||
|
||||
else if(issilicon(M))
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.module) // Perhaps they didn't choose a module yet
|
||||
for(var/obj/item/borg/combat/shield/S in R.module.modules)
|
||||
if(R.activated(S))
|
||||
add_attack_logs(user, M, "Flashed with [src]")
|
||||
user.visible_message("<span class='disarm'>[user] tries to overloads [M]'s sensors with the [src.name], but is blocked by [M]'s shield!</span>", "<span class='danger'>You try to overload [M]'s sensors with the [src.name], but are blocked by [M.p_their()] shield!</span>")
|
||||
return 1
|
||||
add_attack_logs(user, M, "Flashed with [src]")
|
||||
if(M.flash_eyes(affect_silicon = 1))
|
||||
M.Weaken(rand(5,10))
|
||||
user.visible_message("<span class='disarm'>[user] overloads [M]'s sensors with the [src.name]!</span>", "<span class='danger'>You overload [M]'s sensors with the [src.name]!</span>")
|
||||
return 1
|
||||
|
||||
user.visible_message("<span class='disarm'>[user] fails to blind [M] with the [src.name]!</span>", "<span class='warning'>You fail to blind [M] with the [src.name]!</span>")
|
||||
|
||||
|
||||
|
||||
@@ -52,7 +52,7 @@
|
||||
if(disarmed)
|
||||
visible_message("<span class='danger'>[bicon(src)] Sparks briefly jump out of the [correct_wire] wire on \the [src], but it's disarmed!")
|
||||
return
|
||||
src.audible_message("[bicon(src)] <b>[src]</b> beeps, \"Enjoy the pizza!\"")
|
||||
atom_say("Enjoy the pizza!")
|
||||
src.visible_message("<span class='userdanger'>\The [src] violently explodes!</span>")
|
||||
explosion(src.loc,1,2,4,flame_range = 2) //Identical to a minibomb
|
||||
qdel(src)
|
||||
|
||||
@@ -623,6 +623,9 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
|
||||
..()
|
||||
set_frequency(ERT_FREQ)
|
||||
|
||||
/obj/item/radio/borg/ert/specops
|
||||
keyslot = new /obj/item/encryptionkey/centcom
|
||||
|
||||
/obj/item/radio/borg/attackby(obj/item/W as obj, mob/user as mob, params)
|
||||
if(istype(W, /obj/item/encryptionkey/))
|
||||
user.set_machine(src)
|
||||
|
||||
@@ -141,7 +141,7 @@ REAGENT SCANNER
|
||||
|
||||
// Used by the PDA medical scanner too
|
||||
/proc/healthscan(mob/user, mob/living/M, mode = 1, advanced = FALSE)
|
||||
if(!ishuman(M) || M.isSynthetic())
|
||||
if(!ishuman(M) || ismachineperson(M))
|
||||
//these sensors are designed for organic life
|
||||
to_chat(user, "<span class='notice'>Analyzing Results for ERROR:\n\t Overall Status: ERROR</span>")
|
||||
to_chat(user, "\t Key: <font color='blue'>Suffocation</font>/<font color='green'>Toxin</font>/<font color='#FFA500'>Burns</font>/<font color='red'>Brute</font>")
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
slot_flags = SLOT_BELT
|
||||
origin_tech = "programming=3;materials=3;magnets=3"
|
||||
var/datum/nano_module/crew_monitor/crew_monitor
|
||||
var/datum/tgui_module/crew_monitor/crew_monitor
|
||||
|
||||
/obj/item/sensor_device/New()
|
||||
..()
|
||||
@@ -17,7 +17,7 @@
|
||||
return ..()
|
||||
|
||||
/obj/item/sensor_device/attack_self(mob/user as mob)
|
||||
ui_interact(user)
|
||||
tgui_interact(user)
|
||||
|
||||
/obj/item/sensor_device/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
|
||||
crew_monitor.ui_interact(user, ui_key, ui, force_open)
|
||||
/obj/item/sensor_device/tgui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, datum/tgui/master_ui = null, datum/tgui_state/state = GLOB.tgui_default_state)
|
||||
crew_monitor.tgui_interact(user, ui_key, ui, force_open)
|
||||
|
||||
@@ -9,23 +9,23 @@
|
||||
origin_tech = "programming=2"
|
||||
var/locked = 0
|
||||
var/installed = 0
|
||||
var/require_module = 0
|
||||
var/require_module = FALSE
|
||||
var/module_type = null
|
||||
|
||||
/obj/item/borg/upgrade/proc/action(mob/living/silicon/robot/R)
|
||||
if(R.stat == DEAD)
|
||||
to_chat(usr, "<span class='notice'>[src] will not function on a deceased cyborg.</span>")
|
||||
return 1
|
||||
return TRUE
|
||||
if(module_type && !istype(R.module, module_type))
|
||||
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
|
||||
to_chat(usr, "There's no mounting point for the module!")
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/reset
|
||||
name = "cyborg module reset board"
|
||||
desc = "Used to reset a cyborg's module. Destroys any other upgrades applied to the cyborg."
|
||||
icon_state = "cyborg_upgrade1"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
|
||||
/obj/item/borg/upgrade/reset/action(mob/living/silicon/robot/R)
|
||||
if(..())
|
||||
@@ -55,7 +55,7 @@
|
||||
R.custom_name = heldname
|
||||
R.real_name = heldname
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/restart
|
||||
name = "cyborg emergency reboot module"
|
||||
@@ -77,14 +77,14 @@
|
||||
GLOB.alive_mob_list += R
|
||||
R.notify_ai(1)
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
|
||||
/obj/item/borg/upgrade/vtec
|
||||
name = "robotic VTEC Module"
|
||||
desc = "Used to kick in a robot's VTEC systems, increasing their speed."
|
||||
icon_state = "cyborg_upgrade2"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
origin_tech = "engineering=4;materials=5;programming=4"
|
||||
|
||||
/obj/item/borg/upgrade/vtec/action(var/mob/living/silicon/robot/R)
|
||||
@@ -97,14 +97,14 @@
|
||||
|
||||
R.speed = -1 // Gotta go fast.
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/disablercooler
|
||||
name = "cyborg rapid disabler cooling module"
|
||||
desc = "Used to cool a mounted disabler, increasing the potential current in it and thus its recharge rate."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
origin_tech = "engineering=4;powerstorage=4;combat=4"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/security
|
||||
|
||||
/obj/item/borg/upgrade/disablercooler/action(mob/living/silicon/robot/R)
|
||||
@@ -122,7 +122,7 @@
|
||||
|
||||
T.charge_delay = max(2 , T.charge_delay - 4)
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/thrusters
|
||||
name = "ion thruster upgrade"
|
||||
@@ -139,14 +139,14 @@
|
||||
return
|
||||
|
||||
R.ionpulse = 1
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/ddrill
|
||||
name = "mining cyborg diamond drill"
|
||||
desc = "A diamond drill replacement for the mining module's standard drill."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
origin_tech = "engineering=4;materials=5"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/miner
|
||||
|
||||
/obj/item/borg/upgrade/ddrill/action(mob/living/silicon/robot/R)
|
||||
@@ -161,14 +161,14 @@
|
||||
R.module.modules += new /obj/item/pickaxe/drill/cyborg/diamond(R.module)
|
||||
R.module.rebuild()
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/soh
|
||||
name = "mining cyborg satchel of holding"
|
||||
desc = "A satchel of holding replacement for mining cyborg's ore satchel module."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
origin_tech = "engineering=4;materials=4;bluespace=4"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/miner
|
||||
|
||||
/obj/item/borg/upgrade/soh/action(mob/living/silicon/robot/R)
|
||||
@@ -181,35 +181,46 @@
|
||||
R.module.modules += new /obj/item/storage/bag/ore/holding(R.module)
|
||||
R.module.rebuild()
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/syndicate
|
||||
name = "illegal equipment module"
|
||||
name = "safety override module"
|
||||
desc = "Unlocks the hidden, deadlier functions of a cyborg. Also prevents emag subversion."
|
||||
icon_state = "cyborg_upgrade3"
|
||||
origin_tech = "combat=4;syndicate=1"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
|
||||
/obj/item/borg/upgrade/syndicate/action(mob/living/silicon/robot/R)
|
||||
if(..())
|
||||
return
|
||||
|
||||
if(R.emagged)
|
||||
return
|
||||
|
||||
if(R.weapons_unlock)
|
||||
to_chat(R, "<span class='warning'>Internal diagnostic error: incompatible upgrade module detected.</span>");
|
||||
return
|
||||
|
||||
R.emagged = 1
|
||||
return TRUE
|
||||
|
||||
return 1
|
||||
/obj/item/borg/upgrade/lavaproof
|
||||
name = "mining cyborg lavaproof chassis"
|
||||
desc = "An upgrade kit to apply specialized coolant systems and insulation layers to a mining cyborg's chassis, enabling them to withstand exposure to molten rock."
|
||||
icon_state = "ash_plating"
|
||||
resistance_flags = LAVA_PROOF | FIRE_PROOF
|
||||
require_module = TRUE
|
||||
module_type = /obj/item/robot_module/miner
|
||||
|
||||
/obj/item/borg/upgrade/lavaproof/action(mob/living/silicon/robot/R)
|
||||
if(..())
|
||||
return
|
||||
if(istype(R))
|
||||
R.weather_immunities += "lava"
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/selfrepair
|
||||
name = "self-repair module"
|
||||
desc = "This module will repair the cyborg over time."
|
||||
icon_state = "cyborg_upgrade5"
|
||||
require_module = 1
|
||||
require_module = TRUE
|
||||
var/repair_amount = -1
|
||||
var/repair_tick = 1
|
||||
var/msg_cooldown = 0
|
||||
@@ -230,7 +241,7 @@
|
||||
icon_state = "selfrepair_off"
|
||||
var/datum/action/A = new /datum/action/item_action/toggle(src)
|
||||
A.Grant(R)
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/borg/upgrade/selfrepair/Destroy()
|
||||
cyborg = null
|
||||
|
||||
@@ -57,7 +57,7 @@
|
||||
E.heal_damage(0, remheal, 0, 1) //Healing Burn
|
||||
remheal = nremheal
|
||||
user.visible_message("<span class='notice'>\The [user] applies some nanite paste at \the [M]'s [E.name] with \the [src].</span>")
|
||||
if(H.bleed_rate && H.isSynthetic())
|
||||
if(H.bleed_rate && ismachineperson(H))
|
||||
H.bleed_rate = 0
|
||||
else
|
||||
to_chat(user, "<span class='notice'>Nothing to fix here.</span>")
|
||||
|
||||
@@ -204,7 +204,7 @@
|
||||
|
||||
if(amount < 1) // Just in case a stack's amount ends up fractional somehow
|
||||
var/oldsrc = src
|
||||
src = null //dont kill proc after del()
|
||||
src = null //dont kill proc after qdel()
|
||||
usr.unEquip(oldsrc, 1)
|
||||
qdel(oldsrc)
|
||||
if(istype(O, /obj/item))
|
||||
|
||||
@@ -1408,6 +1408,7 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
name = "xenomorph action figure"
|
||||
desc = "MEGA presents the new Xenos Isolated action figure! Comes complete with realistic sounds! Pull back string to use."
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
bubble_icon = "alien"
|
||||
var/cooldown = 0
|
||||
|
||||
/obj/item/toy/toy_xeno/attack_self(mob/user)
|
||||
@@ -1416,7 +1417,7 @@ obj/item/toy/cards/deck/syndicate/black
|
||||
user.visible_message("<span class='notice'>[user] pulls back the string on [src].</span>")
|
||||
icon_state = "[initial(icon_state)]_used"
|
||||
sleep(5)
|
||||
audible_message("<span class='danger'>[bicon(src)] Hiss!</span>")
|
||||
atom_say("Hiss!")
|
||||
var/list/possible_sounds = list('sound/voice/hiss1.ogg', 'sound/voice/hiss2.ogg', 'sound/voice/hiss3.ogg', 'sound/voice/hiss4.ogg')
|
||||
playsound(get_turf(src), pick(possible_sounds), 50, 1)
|
||||
spawn(45)
|
||||
|
||||
@@ -477,9 +477,7 @@ GLOBAL_LIST_INIT(rcd_door_types, list(
|
||||
return R.cell.charge >= (amount * use_multiplier)
|
||||
|
||||
/obj/item/rcd/proc/detonate_pulse()
|
||||
audible_message("<span class='danger'><b>[src] begins to vibrate and \
|
||||
buzz loudly!</b></span>","<span class='danger'><b>[src] begins \
|
||||
vibrating violently!</b></span>")
|
||||
audible_message("<span class='danger'><b>[src] begins to vibrate and buzz loudly!</b></span>", "<span class='danger'><b>[src] begins vibrating violently!</b></span>")
|
||||
// 5 seconds to get rid of it
|
||||
addtimer(CALLBACK(src, .proc/detonate_pulse_explode), 50)
|
||||
|
||||
|
||||
@@ -147,10 +147,6 @@
|
||||
to_chat(user, "<span class='notice'>You inject yourself with [src].</span>")
|
||||
|
||||
add_attack_logs(user, M, attack_log, ATKLOG_ALL)
|
||||
if(!iscarbon(user))
|
||||
M.LAssailant = null
|
||||
else
|
||||
M.LAssailant = user
|
||||
|
||||
inject(M, user)
|
||||
used = TRUE
|
||||
|
||||
@@ -121,19 +121,6 @@
|
||||
desc = "A sleek, sturdy box"
|
||||
icon_state = "box_of_doom"
|
||||
|
||||
/obj/item/storage/box/syndie_kit/romerol
|
||||
name = "Romerol Kit"
|
||||
desc = "A box containing a deadly virus capable of reanimating dead as zombies."
|
||||
max_w_class = WEIGHT_CLASS_NORMAL
|
||||
can_hold = list(/obj/item/reagent_containers/glass/bottle/romerol,/obj/item/reagent_containers/syringe,/obj/item/reagent_containers/dropper)
|
||||
|
||||
/obj/item/storage/box/syndie_kit/romerol/New()
|
||||
..()
|
||||
new /obj/item/reagent_containers/glass/bottle/romerol(src)
|
||||
new /obj/item/reagent_containers/syringe(src)
|
||||
new /obj/item/reagent_containers/dropper(src)
|
||||
return
|
||||
|
||||
/obj/item/storage/box/syndie_kit/space
|
||||
name = "Boxed Space Suit and Helmet"
|
||||
can_hold = list(/obj/item/clothing/suit/space/syndicate/black/red, /obj/item/clothing/head/helmet/space/syndicate/black/red, /obj/item/tank/emergency_oxygen/syndi, /obj/item/clothing/mask/gas/syndicate)
|
||||
|
||||
@@ -189,8 +189,8 @@
|
||||
L.apply_effect(STUTTER, stunforce)
|
||||
|
||||
if(user)
|
||||
user.lastattacked = L
|
||||
L.lastattacker = user
|
||||
L.lastattacker = user.real_name
|
||||
L.lastattackerckey = user.ckey
|
||||
L.visible_message("<span class='danger'>[user] has stunned [L] with [src]!</span>", \
|
||||
"<span class='userdanger'>[user] has stunned you with [src]!</span>")
|
||||
add_attack_logs(user, L, "stunned")
|
||||
|
||||
@@ -347,6 +347,7 @@ a {
|
||||
.["Make speed process"] = "?_src_=vars;makespeedy=[UID()]"
|
||||
else
|
||||
.["Make normal process"] = "?_src_=vars;makenormalspeed=[UID()]"
|
||||
.["Modify armor values"] = "?_src_=vars;modifyarmor=[UID()]"
|
||||
|
||||
/obj/proc/check_uplink_validity()
|
||||
return TRUE
|
||||
|
||||
@@ -115,6 +115,8 @@
|
||||
new /obj/item/clothing/shoes/black(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/big(src)
|
||||
new /obj/item/clothing/glasses/sunglasses/big(src)
|
||||
new /obj/item/clothing/accessory/lawyers_badge(src)
|
||||
new /obj/item/clothing/accessory/lawyers_badge(src)
|
||||
|
||||
//Paramedic
|
||||
|
||||
|
||||
@@ -466,3 +466,4 @@
|
||||
new /obj/item/gavelhammer(src)
|
||||
new /obj/item/clothing/head/justice_wig(src)
|
||||
new /obj/item/clothing/accessory/medal/legal(src)
|
||||
new /obj/item/clothing/accessory/lawyers_badge(src)
|
||||
|
||||
@@ -403,75 +403,7 @@
|
||||
L.ExtinguishMob()
|
||||
L.adjust_fire_stacks(-20) //Douse ourselves with water to avoid fire more easily
|
||||
to_chat(L, "<span class='warning'>You've been drenched in water!</span>")
|
||||
if(iscarbon(O))
|
||||
var/mob/living/carbon/M = O
|
||||
if(M.r_hand)
|
||||
M.r_hand.clean_blood()
|
||||
if(M.l_hand)
|
||||
M.l_hand.clean_blood()
|
||||
if(M.back)
|
||||
if(M.back.clean_blood())
|
||||
M.update_inv_back()
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
var/washgloves = 1
|
||||
var/washshoes = 1
|
||||
var/washmask = 1
|
||||
var/washears = 1
|
||||
var/washglasses = 1
|
||||
|
||||
if(H.wear_suit)
|
||||
washgloves = !(H.wear_suit.flags_inv & HIDEGLOVES)
|
||||
washshoes = !(H.wear_suit.flags_inv & HIDESHOES)
|
||||
|
||||
if(H.head)
|
||||
washmask = !(H.head.flags_inv & HIDEMASK)
|
||||
washglasses = !(H.head.flags_inv & HIDEEYES)
|
||||
washears = !(H.head.flags_inv & HIDEEARS)
|
||||
|
||||
if(H.wear_mask)
|
||||
if(washears)
|
||||
washears = !(H.wear_mask.flags_inv & HIDEEARS)
|
||||
if(washglasses)
|
||||
washglasses = !(H.wear_mask.flags_inv & HIDEEYES)
|
||||
|
||||
if(H.head)
|
||||
if(H.head.clean_blood())
|
||||
H.update_inv_head()
|
||||
if(H.wear_suit)
|
||||
if(H.wear_suit.clean_blood())
|
||||
H.update_inv_wear_suit()
|
||||
else if(H.w_uniform)
|
||||
if(H.w_uniform.clean_blood())
|
||||
H.update_inv_w_uniform()
|
||||
if(H.gloves && washgloves)
|
||||
if(H.gloves.clean_blood())
|
||||
H.update_inv_gloves()
|
||||
if(H.shoes && washshoes)
|
||||
if(H.shoes.clean_blood())
|
||||
H.update_inv_shoes()
|
||||
if(H.wear_mask && washmask)
|
||||
if(H.wear_mask.clean_blood())
|
||||
H.update_inv_wear_mask()
|
||||
if(H.glasses && washglasses)
|
||||
if(H.glasses.clean_blood())
|
||||
H.update_inv_glasses()
|
||||
if(H.l_ear && washears)
|
||||
if(H.l_ear.clean_blood())
|
||||
H.update_inv_ears()
|
||||
if(H.r_ear && washears)
|
||||
if(H.r_ear.clean_blood())
|
||||
H.update_inv_ears()
|
||||
if(H.belt)
|
||||
if(H.belt.clean_blood())
|
||||
H.update_inv_belt()
|
||||
else
|
||||
if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags
|
||||
if(M.wear_mask.clean_blood())
|
||||
M.update_inv_wear_mask()
|
||||
|
||||
else
|
||||
O.clean_blood()
|
||||
L.clean_blood()
|
||||
|
||||
if(isturf(loc))
|
||||
var/turf/tile = loc
|
||||
|
||||
@@ -8,12 +8,6 @@
|
||||
nitrogen = MOLES_N2STANDARD
|
||||
var/to_be_destroyed = 0 //Used for fire, if a melting temperature was reached, it will be destroyed
|
||||
var/max_fire_temperature_sustained = 0 //The max temperature of the fire which it was subjected to
|
||||
var/dirtoverlay = null
|
||||
|
||||
/turf/simulated/New()
|
||||
..()
|
||||
levelupdate()
|
||||
visibilityChanged()
|
||||
|
||||
/turf/simulated/proc/break_tile()
|
||||
return
|
||||
|
||||
@@ -31,8 +31,8 @@ GLOBAL_LIST_INIT(icons_to_ignore_at_floor_init, list("damaged1","damaged2","dama
|
||||
var/list/burnt_states = list("floorscorched1", "floorscorched2")
|
||||
var/list/prying_tool_list = list(TOOL_CROWBAR) //What tool/s can we use to pry up the tile?
|
||||
|
||||
/turf/simulated/floor/New()
|
||||
..()
|
||||
/turf/simulated/floor/Initialize(mapload)
|
||||
. = ..()
|
||||
if(icon_state in GLOB.icons_to_ignore_at_floor_init) //so damaged/burned tiles or plating icons aren't saved as the default
|
||||
icon_regular_floor = "floor"
|
||||
else
|
||||
|
||||
@@ -49,9 +49,9 @@
|
||||
floor_tile = /obj/item/stack/tile/grass
|
||||
broken_states = list("sand")
|
||||
|
||||
/turf/simulated/floor/grass/Initialize()
|
||||
/turf/simulated/floor/grass/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/grass/update_icon()
|
||||
icon_state = "grass[pick("1","2","3","4")]"
|
||||
@@ -80,10 +80,9 @@
|
||||
)
|
||||
|
||||
|
||||
/turf/simulated/floor/carpet/New()
|
||||
..()
|
||||
if(broken || burnt)
|
||||
make_plating()
|
||||
/turf/simulated/floor/carpet/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/carpet/update_icon()
|
||||
if(!..())
|
||||
@@ -119,18 +118,18 @@
|
||||
broken_states = list("damaged")
|
||||
plane = PLANE_SPACE
|
||||
|
||||
/turf/simulated/floor/fakespace/New()
|
||||
..()
|
||||
icon_state = "[rand(0,25)]"
|
||||
|
||||
/turf/simulated/floor/carpet/arcade
|
||||
icon = 'icons/goonstation/turf/floor.dmi'
|
||||
icon_state = "arcade"
|
||||
floor_tile = /obj/item/stack/tile/arcade_carpet
|
||||
smooth = SMOOTH_FALSE
|
||||
/turf/simulated/floor/fakespace/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = SPACE_ICON_STATE
|
||||
|
||||
/turf/simulated/floor/fakespace/get_smooth_underlay_icon(mutable_appearance/underlay_appearance, turf/asking_turf, adjacency_dir)
|
||||
underlay_appearance.icon = 'icons/turf/space.dmi'
|
||||
underlay_appearance.icon_state = SPACE_ICON_STATE
|
||||
underlay_appearance.plane = PLANE_SPACE
|
||||
return TRUE
|
||||
|
||||
/turf/simulated/floor/carpet/arcade
|
||||
icon = 'icons/goonstation/turf/floor.dmi'
|
||||
icon_state = "arcade"
|
||||
floor_tile = /obj/item/stack/tile/arcade_carpet
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
@@ -8,9 +8,6 @@
|
||||
light_power = 0.75
|
||||
light_color = LIGHT_COLOR_LAVA
|
||||
|
||||
/turf/simulated/floor/plating/lava/New()
|
||||
..()
|
||||
|
||||
/turf/simulated/floor/plating/lava/ex_act()
|
||||
return
|
||||
|
||||
|
||||
@@ -20,8 +20,8 @@
|
||||
var/state = LIGHTFLOOR_ON
|
||||
var/can_modify_colour = TRUE
|
||||
|
||||
/turf/simulated/floor/light/New()
|
||||
..()
|
||||
/turf/simulated/floor/light/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/light/update_icon()
|
||||
|
||||
@@ -14,8 +14,8 @@
|
||||
icon_state = ""
|
||||
var/list/icons = list()
|
||||
|
||||
/turf/simulated/floor/mineral/New()
|
||||
..()
|
||||
/turf/simulated/floor/mineral/Initialize(mapload)
|
||||
. = ..()
|
||||
broken_states = list("[initial(icon_state)]_dam")
|
||||
|
||||
/turf/simulated/floor/mineral/update_icon()
|
||||
@@ -97,24 +97,24 @@
|
||||
broken_states = list("titanium_dam1","titanium_dam2","titanium_dam3","titanium_dam4","titanium_dam5")
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/airless
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/blue
|
||||
icon_state = "titanium_blue"
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/blue/airless
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/yellow
|
||||
icon_state = "titanium_yellow"
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/yellow/airless
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/purple
|
||||
@@ -122,8 +122,8 @@
|
||||
floor_tile = /obj/item/stack/tile/mineral/titanium/purple
|
||||
|
||||
/turf/simulated/floor/mineral/titanium/purple/airless
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
//PLASTITANIUM (syndieshuttle)
|
||||
@@ -137,8 +137,8 @@
|
||||
icon_state = "plastitanium_red"
|
||||
|
||||
/turf/simulated/floor/mineral/plastitanium/red/airless
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/mineral/plastitanium/red/brig
|
||||
@@ -179,8 +179,8 @@
|
||||
spam_flag = world.time + 10
|
||||
|
||||
/turf/simulated/floor/mineral/bananium/airless
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
|
||||
@@ -254,8 +254,8 @@
|
||||
floor_tile = /obj/item/stack/tile/mineral/abductor
|
||||
icons = list("alienpod1", "alienpod2", "alienpod3", "alienpod4", "alienpod5", "alienpod6", "alienpod7", "alienpod8", "alienpod9")
|
||||
|
||||
/turf/simulated/floor/mineral/abductor/New()
|
||||
..()
|
||||
/turf/simulated/floor/mineral/abductor/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "alienpod[rand(1,9)]"
|
||||
|
||||
/turf/simulated/floor/mineral/abductor/break_tile()
|
||||
|
||||
@@ -3,19 +3,11 @@
|
||||
icon_state = "rockvault"
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
/turf/simulated/floor/vault/New(location, vtype)
|
||||
..()
|
||||
icon_state = "[vtype]vault"
|
||||
|
||||
/turf/simulated/wall/vault
|
||||
icon = 'icons/turf/walls.dmi'
|
||||
icon_state = "rockvault"
|
||||
smooth = SMOOTH_FALSE
|
||||
|
||||
/turf/simulated/wall/vault/New(location, vtype)
|
||||
..()
|
||||
icon_state = "[vtype]vault"
|
||||
|
||||
/turf/simulated/floor/bluegrid
|
||||
icon = 'icons/turf/floors.dmi'
|
||||
icon_state = "bcircuit"
|
||||
@@ -35,12 +27,12 @@
|
||||
/turf/simulated/floor/greengrid/airless
|
||||
icon_state = "gcircuit"
|
||||
name = "airless floor"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/greengrid/airless/New()
|
||||
..()
|
||||
/turf/simulated/floor/greengrid/airless/Initialize(mapload)
|
||||
. = ..()
|
||||
name = "floor"
|
||||
|
||||
/turf/simulated/floor/redgrid
|
||||
@@ -78,8 +70,8 @@
|
||||
mouse_opacity = MOUSE_OPACITY_TRANSPARENT
|
||||
var/obj/machinery/poolcontroller/linkedcontroller = null
|
||||
|
||||
/turf/simulated/floor/beach/water/New()
|
||||
..()
|
||||
/turf/simulated/floor/beach/water/Initialize(mapload)
|
||||
. = ..()
|
||||
var/image/overlay_image = image('icons/misc/beach.dmi', icon_state = "water5", layer = ABOVE_MOB_LAYER)
|
||||
overlay_image.plane = GAME_PLANE
|
||||
overlays += overlay_image
|
||||
|
||||
@@ -12,12 +12,12 @@
|
||||
|
||||
/turf/simulated/floor/plasteel/airless
|
||||
name = "airless floor"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/plasteel/airless/New()
|
||||
..()
|
||||
/turf/simulated/floor/plasteel/airless/Initialize(mapload)
|
||||
. = ..()
|
||||
name = "floor"
|
||||
|
||||
/turf/simulated/floor/plasteel/airless/indestructible // For bomb testing range
|
||||
|
||||
@@ -14,17 +14,17 @@
|
||||
"xeno" = list('sound/effects/footstep/plating_xeno.ogg')
|
||||
)
|
||||
|
||||
/turf/simulated/floor/plating/New()
|
||||
..()
|
||||
/turf/simulated/floor/plating/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_plating = icon_state
|
||||
update_icon()
|
||||
|
||||
/turf/simulated/floor/plating/damaged/New()
|
||||
..()
|
||||
/turf/simulated/floor/plating/damaged/Initialize(mapload)
|
||||
. = ..()
|
||||
break_tile()
|
||||
|
||||
/turf/simulated/floor/plating/burnt/New()
|
||||
..()
|
||||
/turf/simulated/floor/plating/burnt/Initialize(mapload)
|
||||
. = ..()
|
||||
burn_tile()
|
||||
|
||||
/turf/simulated/floor/plating/update_icon()
|
||||
@@ -113,12 +113,12 @@
|
||||
/turf/simulated/floor/plating/airless
|
||||
icon_state = "plating"
|
||||
name = "airless plating"
|
||||
oxygen = 0.01
|
||||
nitrogen = 0.01
|
||||
oxygen = 0
|
||||
nitrogen = 0
|
||||
temperature = TCMB
|
||||
|
||||
/turf/simulated/floor/plating/airless/New()
|
||||
..()
|
||||
/turf/simulated/floor/plating/airless/Initialize(mapload)
|
||||
. = ..()
|
||||
name = "plating"
|
||||
|
||||
/turf/simulated/floor/engine
|
||||
@@ -190,8 +190,8 @@
|
||||
name = "engraved floor"
|
||||
icon_state = "cult"
|
||||
|
||||
/turf/simulated/floor/engine/cult/New()
|
||||
..()
|
||||
/turf/simulated/floor/engine/cult/Initialize(mapload)
|
||||
. = ..()
|
||||
if(SSticker.mode)//only do this if the round is going..otherwise..fucking asteroid..
|
||||
icon_state = SSticker.cultdat.cult_floor_icon_state
|
||||
|
||||
@@ -275,8 +275,8 @@
|
||||
icon = 'icons/turf/floors/ironsand.dmi'
|
||||
icon_state = "ironsand1"
|
||||
|
||||
/turf/simulated/floor/plating/ironsand/New()
|
||||
..()
|
||||
/turf/simulated/floor/plating/ironsand/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "ironsand[rand(1,15)]"
|
||||
|
||||
/turf/simulated/floor/plating/ironsand/remove_plating()
|
||||
@@ -359,8 +359,8 @@
|
||||
name = "alien floor"
|
||||
icon_state = "alienpod1"
|
||||
|
||||
/turf/simulated/floor/plating/abductor/New()
|
||||
..()
|
||||
/turf/simulated/floor/plating/abductor/Initialize(mapload)
|
||||
. = ..()
|
||||
icon_state = "alienpod[rand(1,9)]"
|
||||
|
||||
/turf/simulated/floor/plating/ice
|
||||
|
||||
@@ -9,8 +9,8 @@
|
||||
sheet_amount = 1
|
||||
girder_type = /obj/structure/girder/cult
|
||||
|
||||
/turf/simulated/wall/cult/New()
|
||||
..()
|
||||
/turf/simulated/wall/cult/Initialize(mapload)
|
||||
. = ..()
|
||||
if(SSticker.mode)//game hasn't started offically don't do shit..
|
||||
new /obj/effect/temp_visual/cult/turf(src)
|
||||
icon_state = SSticker.cultdat.cult_wall_icon_state
|
||||
@@ -72,10 +72,7 @@
|
||||
realappearance.linked = src
|
||||
|
||||
/turf/simulated/wall/clockwork/Destroy()
|
||||
if(realappearance)
|
||||
qdel(realappearance)
|
||||
realappearance = null
|
||||
|
||||
QDEL_NULL(realappearance)
|
||||
return ..()
|
||||
|
||||
/turf/simulated/wall/clockwork/ReplaceWithLattice()
|
||||
|
||||
@@ -21,6 +21,11 @@
|
||||
/turf/space/Initialize(mapload)
|
||||
if(!istype(src, /turf/space/transit))
|
||||
icon_state = SPACE_ICON_STATE
|
||||
vis_contents.Cut() //removes inherited overlays
|
||||
|
||||
if(initialized)
|
||||
stack_trace("Warning: [src]([type]) initialized multiple times!")
|
||||
initialized = TRUE
|
||||
|
||||
var/area/A = loc
|
||||
if(!IS_DYNAMIC_LIGHTING(src) && IS_DYNAMIC_LIGHTING(A))
|
||||
@@ -34,12 +39,6 @@
|
||||
|
||||
return INITIALIZE_HINT_NORMAL
|
||||
|
||||
/turf/space/Destroy(force)
|
||||
if(force)
|
||||
. = ..()
|
||||
else
|
||||
return QDEL_HINT_LETMELIVE
|
||||
|
||||
/turf/space/BeforeChange()
|
||||
..()
|
||||
var/datum/space_level/S = GLOB.space_manager.get_zlev(z)
|
||||
|
||||
@@ -125,9 +125,9 @@
|
||||
/turf/space/transit/attackby()
|
||||
return
|
||||
|
||||
/turf/space/transit/New()
|
||||
/turf/space/transit/Initialize(mapload)
|
||||
. = ..()
|
||||
update_icon()
|
||||
..()
|
||||
|
||||
/turf/space/transit/proc/update_icon()
|
||||
var/p = 9
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user