mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-27 14:07:51 +01:00
Merge remote-tracking branch 'upstream/master' into departmental-clothing-vendors
This commit is contained in:
+2144
-2689
File diff suppressed because it is too large
Load Diff
@@ -1620,6 +1620,7 @@
|
||||
/obj/structure/sign/securearea{
|
||||
pixel_x = -32
|
||||
},
|
||||
/obj/machinery/suit_storage_unit/gamma,
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"fW" = (
|
||||
@@ -3547,6 +3548,12 @@
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
/turf/simulated/floor/grass,
|
||||
/area/centcom/control)
|
||||
"nb" = (
|
||||
/obj/machinery/autolathe/upgraded/gamma,
|
||||
/obj/item/stack/sheet/glass/fifty,
|
||||
/obj/item/stack/sheet/metal/fifty,
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"nc" = (
|
||||
/obj/machinery/door/airlock/centcom{
|
||||
name = "Gamma Armory";
|
||||
@@ -4076,18 +4083,12 @@
|
||||
/area/centcom/gamma)
|
||||
"oJ" = (
|
||||
/obj/structure/closet/secure_closet/guncabinet,
|
||||
/obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/ammo_box/magazine/m10mm,
|
||||
/obj/item/gun/projectile/automatic/pistol{
|
||||
name = "pistol"
|
||||
},
|
||||
/obj/item/gun/projectile/automatic/pistol{
|
||||
name = "pistol"
|
||||
},
|
||||
/obj/item/gun/projectile/automatic/pistol{
|
||||
name = "pistol"
|
||||
},
|
||||
/obj/item/ammo_box/magazine/smgm9mm,
|
||||
/obj/item/ammo_box/magazine/smgm9mm,
|
||||
/obj/item/ammo_box/magazine/smgm9mm,
|
||||
/obj/item/gun/projectile/automatic/proto,
|
||||
/obj/item/gun/projectile/automatic/proto,
|
||||
/obj/item/gun/projectile/automatic/proto,
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"oN" = (
|
||||
@@ -4258,14 +4259,6 @@
|
||||
/obj/structure/flora/ausbushes,
|
||||
/turf/simulated/floor/grass,
|
||||
/area/centcom/specops)
|
||||
"pk" = (
|
||||
/obj/structure/closet/secure_closet/guncabinet,
|
||||
/obj/item/ammo_casing/rocket,
|
||||
/obj/item/ammo_casing/rocket,
|
||||
/obj/item/ammo_casing/rocket,
|
||||
/obj/item/gun/rocketlauncher,
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"pl" = (
|
||||
/obj/structure/window/reinforced{
|
||||
dir = 1
|
||||
@@ -4317,9 +4310,7 @@
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"pu" = (
|
||||
/obj/mecha/combat/durand/loaded{
|
||||
operation_req_access = list(1)
|
||||
},
|
||||
/obj/mecha/combat/marauder/ares/loaded,
|
||||
/obj/structure/cable{
|
||||
d1 = 4;
|
||||
d2 = 8;
|
||||
@@ -4527,6 +4518,11 @@
|
||||
},
|
||||
/turf/simulated/floor/plasteel/dark,
|
||||
/area/centcom/specops)
|
||||
"qf" = (
|
||||
/obj/structure/closet/secure_closet/guncabinet,
|
||||
/obj/item/gun/medbeam,
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"qh" = (
|
||||
/obj/structure/holowindow,
|
||||
/turf/simulated/floor/holofloor{
|
||||
@@ -9964,6 +9960,12 @@
|
||||
icon_state = "red"
|
||||
},
|
||||
/area/holodeck/source_knightarena)
|
||||
"LN" = (
|
||||
/obj/machinery/recharger/wallcharger{
|
||||
pixel_x = -24
|
||||
},
|
||||
/turf/simulated/floor/mineral/plastitanium/red,
|
||||
/area/shuttle/gamma/space)
|
||||
"LO" = (
|
||||
/obj/machinery/autolathe/upgraded{
|
||||
hacked = 1
|
||||
@@ -25459,8 +25461,8 @@ th
|
||||
fm
|
||||
of
|
||||
oB
|
||||
pf
|
||||
pf
|
||||
LN
|
||||
nb
|
||||
pf
|
||||
fV
|
||||
of
|
||||
@@ -25717,7 +25719,7 @@ fm
|
||||
of
|
||||
oJ
|
||||
pf
|
||||
pk
|
||||
po
|
||||
pf
|
||||
pq
|
||||
of
|
||||
@@ -25974,7 +25976,7 @@ fm
|
||||
of
|
||||
oW
|
||||
pf
|
||||
po
|
||||
qf
|
||||
pf
|
||||
pu
|
||||
of
|
||||
|
||||
@@ -43,9 +43,9 @@
|
||||
return num
|
||||
|
||||
//Returns the hex value of a number given a value assumed to be a base-ten value
|
||||
/proc/num2hex(num, placeholder)
|
||||
if(!isnum(num)) return
|
||||
if(placeholder == null) placeholder = 2
|
||||
/proc/num2hex(num, placeholder = 2)
|
||||
if(!isnum(num) || num < 0)
|
||||
return
|
||||
|
||||
var/hex = ""
|
||||
while(num)
|
||||
|
||||
@@ -1,9 +1,16 @@
|
||||
PROCESSING_SUBSYSTEM_DEF(radiation)
|
||||
name = "Radiation"
|
||||
flags = SS_NO_INIT | SS_BACKGROUND
|
||||
flags = SS_BACKGROUND | SS_NO_INIT
|
||||
wait = 1 SECONDS
|
||||
offline_implications = "Radiation will no longer function; power generation may not happen. A restart may or may not be required, depending on the situation."
|
||||
var/list/warned_atoms = list()
|
||||
// Cache radiation levels for each turf so it doesn't need to be done iteratively
|
||||
// turf_rad_cache is the state in the current loop, and may not be 100% representative
|
||||
// until processing is complete.
|
||||
// prev_rad_cache is the fully evaluated radiation state cache from the previous tick.
|
||||
var/list/turf_rad_cache = list()
|
||||
var/list/prev_rad_cache = list()
|
||||
|
||||
|
||||
/datum/controller/subsystem/processing/radiation/proc/warn(datum/component/radioactive/contamination)
|
||||
if(!contamination || QDELETED(contamination))
|
||||
@@ -16,3 +23,26 @@ PROCESSING_SUBSYSTEM_DEF(radiation)
|
||||
SSblackbox.record_feedback("tally", "contaminated", 1, master.type)
|
||||
var/msg = "has become contaminated with enough radiation to contaminate other objects. || Source: [contamination.source] || Strength: [contamination.strength]"
|
||||
master.investigate_log(msg, "radiation")
|
||||
|
||||
/datum/controller/subsystem/processing/radiation/fire(resumed)
|
||||
refresh_rad_cache()
|
||||
. = ..()
|
||||
|
||||
/datum/controller/subsystem/processing/radiation/proc/get_turf_radiation(turf/place)
|
||||
if (prev_rad_cache[place])
|
||||
return prev_rad_cache[place]
|
||||
else
|
||||
return 0
|
||||
|
||||
/datum/controller/subsystem/processing/radiation/proc/update_rad_cache(datum/component/radioactive/thing)
|
||||
var/atom/owner = thing.parent
|
||||
var/turf/place = get_turf(owner)
|
||||
if (turf_rad_cache[place])
|
||||
turf_rad_cache[place] += thing.strength
|
||||
else
|
||||
turf_rad_cache[place] = thing.strength
|
||||
|
||||
|
||||
/datum/controller/subsystem/processing/radiation/proc/refresh_rad_cache()
|
||||
prev_rad_cache = turf_rad_cache.Copy()
|
||||
turf_rad_cache = list()
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
if(!hl3_release_date)
|
||||
return
|
||||
strength -= strength / hl3_release_date
|
||||
SSradiation.update_rad_cache(src)
|
||||
if(strength <= RAD_BACKGROUND_RADIATION)
|
||||
qdel(src)
|
||||
return PROCESS_KILL
|
||||
|
||||
@@ -11,7 +11,7 @@ GLOBAL_LIST_INIT(possible_changeling_IDs, list("Alpha","Beta","Gamma","Delta","E
|
||||
name = "changeling"
|
||||
config_tag = "changeling"
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation Brigadier General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General")
|
||||
protected_species = list("Machine")
|
||||
required_players = 15
|
||||
required_enemies = 1
|
||||
|
||||
@@ -48,7 +48,7 @@ GLOBAL_LIST_EMPTY(all_cults)
|
||||
/datum/game_mode/cult
|
||||
name = "cult"
|
||||
config_tag = "cult"
|
||||
restricted_jobs = list("Chaplain", "AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Security Pod Pilot", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation Brigadier General")
|
||||
restricted_jobs = list("Chaplain", "AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "Security Pod Pilot", "Head of Security", "Captain", "Head of Personnel", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General")
|
||||
protected_jobs = list()
|
||||
required_players = 30
|
||||
required_enemies = 3
|
||||
|
||||
@@ -74,7 +74,7 @@ Made by Xhuis
|
||||
required_enemies = 2
|
||||
recommended_enemies = 2
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation Brigadier General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General")
|
||||
|
||||
/datum/game_mode/shadowling/announce()
|
||||
to_chat(world, "<b>The current game mode is - Shadowling!</b>")
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
name = "traitor"
|
||||
config_tag = "traitor"
|
||||
restricted_jobs = list("Cyborg")//They are part of the AI if he is traitor so are they, they use to get double chances
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation Brigadier General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Internal Affairs Agent", "Brig Physician", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General")
|
||||
required_players = 0
|
||||
required_enemies = 1
|
||||
recommended_enemies = 4
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
name = "traitor+vampire"
|
||||
config_tag = "traitorvamp"
|
||||
traitors_possible = 3 //hard limit on traitors if scaling is turned off
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Solar Federation Brigadier General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Solar Federation General")
|
||||
restricted_jobs = list("Cyborg")
|
||||
secondary_restricted_jobs = list("AI")
|
||||
required_players = 10
|
||||
|
||||
@@ -9,7 +9,7 @@
|
||||
name = "vampire"
|
||||
config_tag = "vampire"
|
||||
restricted_jobs = list("AI", "Cyborg")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation Brigadier General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Chaplain", "Brig Physician", "Internal Affairs Agent", "Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General")
|
||||
protected_species = list("Machine")
|
||||
required_players = 15
|
||||
required_enemies = 1
|
||||
|
||||
@@ -100,7 +100,7 @@
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Special Operations Officer")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Solar Federation Brigadier General")
|
||||
if("Solar Federation General")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
if("Nanotrasen Navy Representative")
|
||||
return get_all_centcom_access() + get_all_accesses()
|
||||
@@ -403,7 +403,7 @@
|
||||
return list("VIP Guest","Custodian","Thunderdome Overseer","Emergency Response Team Member","Emergency Response Team Leader","Intel Officer","Medical Officer","Death Commando","Research Officer","Deathsquad Officer","Special Operations Officer","Nanotrasen Navy Representative","Nanotrasen Navy Officer","Nanotrasen Navy Captain","Supreme Commander")
|
||||
|
||||
/proc/get_all_solgov_jobs()
|
||||
return list("Solar Federation Lieutenant","Solar Federation Specops Lieutenant","Solar Federation Marine","Solar Federation Specops Marine","Solar Federation Representative","Sol Trader","Solar Federation Brigadier General")
|
||||
return list("Solar Federation Lieutenant","Solar Federation Specops Lieutenant","Solar Federation Marine","Solar Federation Specops Marine","Solar Federation Representative","Sol Trader","Solar Federation General")
|
||||
|
||||
//gets the actual job rank (ignoring alt titles)
|
||||
//this is used solely for sechuds
|
||||
|
||||
@@ -106,11 +106,11 @@
|
||||
H.mind.offstation_role = TRUE
|
||||
|
||||
/datum/job/ntspecops/solgovspecops
|
||||
title = "Solar Federation Brigadier General"
|
||||
title = "Solar Federation General"
|
||||
outfit = /datum/outfit/job/ntspecops/solgovspecops
|
||||
|
||||
/datum/outfit/job/ntspecops/solgovspecops
|
||||
name = "Solar Federation Brigadier General"
|
||||
name = "Solar Federation General"
|
||||
uniform = /obj/item/clothing/under/rank/centcom/captain/solgov
|
||||
suit = /obj/item/clothing/suit/space/deathsquad/officer/solgov
|
||||
head = /obj/item/clothing/head/helmet/space/deathsquad/beret/solgov
|
||||
|
||||
@@ -66,6 +66,21 @@
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/autolathe/upgraded/gamma/New()
|
||||
. = ..()
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/autolathe(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin/super(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator/pico(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/autolathe/upgraded/gamma/Initialize()
|
||||
. = ..()
|
||||
adjust_hacked(TRUE)
|
||||
|
||||
/obj/machinery/autolathe/Destroy()
|
||||
SStgui.close_uis(wires)
|
||||
QDEL_NULL(wires)
|
||||
|
||||
@@ -253,7 +253,10 @@
|
||||
/obj/item/key,
|
||||
/obj/item/door_remote,
|
||||
/obj/item/autopsy_scanner,
|
||||
/obj/item/holosign_creator/atmos
|
||||
/obj/item/holosign_creator/atmos,
|
||||
/obj/item/clothing/gloves/color/black/forensics,
|
||||
/obj/item/rcd,
|
||||
/obj/item/rpd
|
||||
)
|
||||
// These items will NOT be preserved
|
||||
var/list/do_not_preserve_items = list (
|
||||
@@ -341,21 +344,23 @@
|
||||
return CRYO_PRESERVE
|
||||
return CRYO_DESTROY
|
||||
|
||||
// This function can not be undone; do not call this unless you are sure
|
||||
// Also make sure there is a valid control computer
|
||||
|
||||
/obj/machinery/cryopod/proc/handle_contents(obj/item/I)
|
||||
if(length(I.contents)) //Make sure we catch anything not handled by qdel() on the items.
|
||||
if(should_preserve_item(I) != CRYO_DESTROY) // Don't remove the contents of things that need preservation
|
||||
return
|
||||
for(var/obj/item/O in I.contents)
|
||||
if(istype(O, /obj/item/tank)) //Stop eating pockets, you fuck!
|
||||
continue
|
||||
handle_contents(O)
|
||||
O.forceMove(src)
|
||||
|
||||
/obj/machinery/cryopod/proc/despawn_occupant()
|
||||
//Drop all items into the pod.
|
||||
for(var/obj/item/I in occupant)
|
||||
occupant.unEquip(I)
|
||||
I.forceMove(src)
|
||||
|
||||
if(I.contents.len) //Make sure we catch anything not handled by qdel() on the items.
|
||||
if(should_preserve_item(I) != CRYO_DESTROY) // Don't remove the contents of things that need preservation
|
||||
continue
|
||||
for(var/obj/item/O in I.contents)
|
||||
if(istype(O, /obj/item/tank)) //Stop eating pockets, you fuck!
|
||||
continue
|
||||
O.forceMove(src)
|
||||
handle_contents(I)
|
||||
|
||||
for(var/obj/machinery/computer/cloning/cloner in GLOB.machines)
|
||||
for(var/datum/dna2/record/R in cloner.records)
|
||||
|
||||
@@ -110,6 +110,15 @@
|
||||
/obj/machinery/suit_storage_unit/security/hos/secure
|
||||
secure = TRUE
|
||||
|
||||
/obj/machinery/suit_storage_unit/gamma
|
||||
name = "gamma shielded suit storage unit"
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/shielded/gamma
|
||||
mask_type = /obj/item/clothing/mask/gas/sechailer/swat
|
||||
req_access = list(ACCESS_SECURITY)
|
||||
|
||||
/obj/machinery/suit_storage_unit/gamma/secure
|
||||
secure = TRUE
|
||||
|
||||
/obj/machinery/suit_storage_unit/atmos
|
||||
name = "atmospherics suit storage unit"
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"Emergency Response Team Officer" = "dsquadradio",
|
||||
"Nanotrasen Navy Officer" = "dsquadradio",
|
||||
"Special Operations Officer" = "dsquadradio",
|
||||
"Solar Federation Brigadier General" = "dsquadradio",
|
||||
"Solar Federation General" = "dsquadradio",
|
||||
"Solar Federation Specops Lieutenant" = "dsquadradio",
|
||||
"Solar Federation Specops Marine" = "dsquadradio",
|
||||
"Solar Federation Lieutenant" = "dsquadradio",
|
||||
@@ -124,7 +124,7 @@
|
||||
/// List of ERT jobs
|
||||
var/list/ert_jobs = list("Emergency Response Team Officer", "Emergency Response Team Engineer", "Emergency Response Team Medic", "Emergency Response Team Leader", "Emergency Response Team Member")
|
||||
/// List of CentComm jobs
|
||||
var/list/cc_jobs = list("Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation Brigadier General")
|
||||
var/list/cc_jobs = list("Nanotrasen Navy Officer", "Special Operations Officer", "Syndicate Officer", "Solar Federation General")
|
||||
/// List of SolGov Marine jobs
|
||||
var/list/tsf_jobs = list("Solar Federation Specops Lieutenant", "Solar Federation Specops Marine", "Solar Federation Lieutenant", "Solar Federation Marine")
|
||||
// Defined so code compiles and incase someone has a non-standard job
|
||||
|
||||
@@ -44,6 +44,29 @@
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster(src)
|
||||
ME.attach(src)
|
||||
|
||||
/obj/mecha/combat/marauder/ares
|
||||
name = "Ares"
|
||||
desc = "Heavy-duty, combat exosuit, adapted from rejected early versions of the Marauder to serve as a biohazard containment exosuit. This model, albeit rare, can be found among civilian populations."
|
||||
icon_state = "ares"
|
||||
initial_icon = "ares"
|
||||
operation_req_access = list(ACCESS_SECURITY)
|
||||
max_integrity = 450
|
||||
armor = list(melee = 50, bullet = 40, laser = 20, energy = 20, bomb = 20, bio = 100, rad = 60, fire = 100, acid = 100)
|
||||
max_temperature = 40000
|
||||
wreckage = /obj/structure/mecha_wreckage/ares
|
||||
max_equip = 4
|
||||
|
||||
/obj/mecha/combat/marauder/ares/loaded/New()
|
||||
..()
|
||||
var/obj/item/mecha_parts/mecha_equipment/ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/energy/xray(src)
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg(src)
|
||||
ME.attach(src)
|
||||
ME = new /obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster(src)
|
||||
ME.attach(src)
|
||||
|
||||
/obj/mecha/combat/marauder/seraph
|
||||
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
|
||||
name = "Seraph"
|
||||
|
||||
@@ -128,6 +128,11 @@
|
||||
name = "\improper Marauder wreckage"
|
||||
icon_state = "marauder-broken"
|
||||
|
||||
/obj/structure/mecha_wreckage/ares
|
||||
name = "\improper Ares wreckage"
|
||||
icon_state = "ares-broken"
|
||||
desc = "The truth is you lost an expensive piece of Nanotrasen-issue equipment. That suit is going to come out of your pay, and you will remain in this corporation until you are five hundred and ten years old, which is the number of years it will take for you to pay for an Ares Biohazard Containment Exosuit you have lost!"
|
||||
|
||||
/obj/structure/mecha_wreckage/mauler
|
||||
name = "\improper Mauler wreckage"
|
||||
icon_state = "mauler-broken"
|
||||
|
||||
@@ -83,7 +83,9 @@
|
||||
if(!mapload)
|
||||
log_world("### MAP WARNING, [src] spawned outside of mapload!")
|
||||
return
|
||||
var/obj/machinery/door/door = locate(/obj/machinery/door) in loc
|
||||
var/obj/machinery/door/door = locate(/obj/machinery/door/airlock) in loc
|
||||
if(!door)
|
||||
door = locate(/obj/machinery/door/window) in loc
|
||||
if(door)
|
||||
door.unres_sides ^= dir
|
||||
else
|
||||
|
||||
@@ -43,14 +43,14 @@
|
||||
|
||||
/obj/effect/temp_visual/ratvar/window
|
||||
icon_state = "ratvarwindowglow"
|
||||
layer = ABOVE_OBJ_LAYER
|
||||
layer = ABOVE_WINDOW_LAYER
|
||||
|
||||
/obj/effect/temp_visual/ratvar/window/single
|
||||
icon_state = "ratvarwindowglow_s"
|
||||
|
||||
/obj/effect/temp_visual/ratvar/gear
|
||||
icon_state = "ratvargearglow"
|
||||
layer = BELOW_OBJ_LAYER
|
||||
layer = ABOVE_OBJ_LAYER
|
||||
|
||||
/obj/effect/temp_visual/ratvar/grille
|
||||
icon_state = "ratvargrilleglow"
|
||||
|
||||
@@ -702,21 +702,17 @@
|
||||
reinf = FALSE
|
||||
var/made_glow = FALSE
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/Initialize(mapload, direct)
|
||||
. = ..()
|
||||
if(fulltile)
|
||||
made_glow = TRUE
|
||||
if(fulltile)
|
||||
new /obj/effect/temp_visual/ratvar/window(get_turf(src))
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/spawnDebris(location)
|
||||
. = list()
|
||||
. += new /obj/item/stack/tile/brass(location, (fulltile ? 2 : 1))
|
||||
|
||||
/obj/structure/window/reinforced/clockwork/setDir(direct)
|
||||
if(!made_glow)
|
||||
var/obj/effect/E = new /obj/effect/temp_visual/ratvar/window/single(get_turf(src))
|
||||
E.setDir(direct)
|
||||
if(fulltile)
|
||||
new /obj/effect/temp_visual/ratvar/window(get_turf(src))
|
||||
else
|
||||
var/obj/effect/E = new /obj/effect/temp_visual/ratvar/window/single(get_turf(src))
|
||||
E.setDir(direct)
|
||||
made_glow = TRUE
|
||||
..()
|
||||
|
||||
|
||||
@@ -52,9 +52,8 @@
|
||||
hardness = 10
|
||||
slicing_duration = 80
|
||||
sheet_type = /obj/item/stack/tile/brass
|
||||
sheet_amount = 1
|
||||
sheet_amount = 2
|
||||
girder_type = /obj/structure/clockwork/wall_gear
|
||||
baseturf = /turf/simulated/floor/clockwork/reebe
|
||||
var/heated
|
||||
var/obj/effect/clockwork/overlay/wall/realappearance
|
||||
|
||||
@@ -77,25 +76,6 @@
|
||||
animate(src, color = previouscolor, time = 8)
|
||||
addtimer(CALLBACK(src, /atom/proc/update_atom_colour), 8)
|
||||
|
||||
/turf/simulated/wall/clockwork/dismantle_wall(devastated=0, explode=0)
|
||||
if(devastated)
|
||||
devastate_wall()
|
||||
ChangeTurf(baseturf)
|
||||
else
|
||||
playsound(src, 'sound/items/welder.ogg', 100, 1)
|
||||
var/newgirder = break_wall()
|
||||
if(newgirder) //maybe we want a gear!
|
||||
transfer_fingerprints_to(newgirder)
|
||||
ChangeTurf(baseturf)
|
||||
|
||||
for(var/obj/O in src) //Eject contents!
|
||||
if(istype(O, /obj/structure/sign/poster))
|
||||
var/obj/structure/sign/poster/P = O
|
||||
P.roll_and_drop(src)
|
||||
else
|
||||
O.forceMove(src)
|
||||
return TRUE
|
||||
|
||||
/turf/simulated/wall/clockwork/devastate_wall()
|
||||
for(var/i in 1 to 2)
|
||||
new/obj/item/clockwork/alloy_shards/large(src)
|
||||
@@ -116,4 +96,3 @@
|
||||
if(heated)
|
||||
to_chat(M.occupant, "<span class='userdanger'>The wall's intense heat completely reflects your [M.name]'s attack!</span>")
|
||||
M.take_damage(20, BURN)
|
||||
|
||||
|
||||
@@ -93,7 +93,7 @@
|
||||
|
||||
for(var/A in loc)
|
||||
var/atom/item = A
|
||||
if(item && item != src) // It's possible that the item is deleted in temperature_expose
|
||||
if(!QDELETED(item) && item != src) // It's possible that the item is deleted in temperature_expose
|
||||
item.fire_act(null, temperature, volume)
|
||||
|
||||
color = heat2color(temperature)
|
||||
@@ -250,7 +250,7 @@
|
||||
var/turf/T = open[1]
|
||||
var/dist = open[T]
|
||||
open -= T
|
||||
closed += T
|
||||
closed[T] = TRUE
|
||||
|
||||
if(isspaceturf(T))
|
||||
continue
|
||||
@@ -305,9 +305,7 @@
|
||||
|
||||
if(T.density)
|
||||
continue
|
||||
for(var/obj/O in T)
|
||||
if(O.density)
|
||||
continue
|
||||
|
||||
if(dist == max_dist)
|
||||
continue
|
||||
|
||||
@@ -315,10 +313,11 @@
|
||||
var/turf/link = get_step(T, dir)
|
||||
if (!link)
|
||||
continue
|
||||
var/dx = link.x - Ce.x
|
||||
var/dy = link.y - Ce.y
|
||||
var/target_dist = max((dist + 1 + sqrt(dx * dx + dy * dy)) / 2, dist)
|
||||
if(!(link in closed))
|
||||
// Check if it wasn't already visited and if you can get to that turf
|
||||
if(!closed[link] && T.CanAtmosPass(link))
|
||||
var/dx = link.x - Ce.x
|
||||
var/dy = link.y - Ce.y
|
||||
var/target_dist = max((dist + 1 + sqrt(dx * dx + dy * dy)) / 2, dist)
|
||||
if(link in open)
|
||||
if(open[link] > target_dist)
|
||||
open[link] = target_dist
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
/obj/machinery/atmospherics/unary/heat_exchanger
|
||||
icon = 'icons/obj/atmospherics/heat_exchanger.dmi'
|
||||
icon_state = "intact"
|
||||
density = 1
|
||||
|
||||
name = "heat exchanger"
|
||||
desc = "Exchanges heat between two input gases. Setup for fast heat transfer"
|
||||
|
||||
can_unwrench = 1
|
||||
can_unwrench = TRUE
|
||||
|
||||
var/obj/machinery/atmospherics/unary/heat_exchanger/partner = null
|
||||
var/update_cycle
|
||||
|
||||
@@ -66,30 +66,10 @@
|
||||
if(MODE_RAD)
|
||||
show_rads()
|
||||
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/proc/show_rads()
|
||||
var/mob/living/carbon/human/user = loc
|
||||
var/list/rad_places = list()
|
||||
for(var/datum/component/radioactive/thing in SSradiation.processing)
|
||||
var/atom/owner = thing.parent
|
||||
var/turf/place = get_turf(owner)
|
||||
if(rad_places[place])
|
||||
rad_places[place] += thing.strength
|
||||
else
|
||||
rad_places[place] = thing.strength
|
||||
|
||||
for(var/i in rad_places)
|
||||
var/turf/place = i
|
||||
if(get_dist(user, place) >= range * 5) //Rads are easier to see than wires under the floor
|
||||
continue
|
||||
var/strength = round(rad_places[i] / 1000, 0.1)
|
||||
var/image/pic = image(loc = place)
|
||||
var/mutable_appearance/MA = new()
|
||||
MA.maptext = MAPTEXT("[strength]k")
|
||||
MA.color = "#04e604"
|
||||
MA.layer = RAD_TEXT_LAYER
|
||||
MA.plane = GAME_PLANE
|
||||
pic.appearance = MA
|
||||
flick_overlay(pic, list(user.client), 10)
|
||||
user.show_rads(range * 5) // Rads are easier to see than wires under the floor
|
||||
|
||||
/obj/item/clothing/glasses/meson/engine/update_icon()
|
||||
icon_state = "trayson-[mode]"
|
||||
|
||||
@@ -711,3 +711,24 @@
|
||||
item_state = "syndie_helm"
|
||||
item_color = "syndi"
|
||||
armor = list("melee" = 40, "bullet" = 50, "laser" = 30, "energy" = 15, "bomb" = 35, "bio" = 100, "rad" = 50, "fire" = 100, "acid" = 100)
|
||||
|
||||
|
||||
//////Security Version (Gamma armory only)
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/shielded/gamma
|
||||
name = "shielded security hardsuit"
|
||||
desc = "A more advanced version of the normal security hardsuit. Comes with built in energy shielding."
|
||||
icon_state = "hardsuit-sec"
|
||||
item_state = "sec-hardsuit"
|
||||
armor = list("melee" = 35, "bullet" = 15, "laser" = 30, "energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
|
||||
allowed = list(/obj/item/gun,/obj/item/flashlight,/obj/item/tank,/obj/item/melee/baton,/obj/item/reagent_containers/spray/pepper,/obj/item/ammo_box,/obj/item/ammo_casing,/obj/item/restraints/handcuffs)
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/shielded/gamma
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/shielded/gamma
|
||||
name = "shielded security hardsuit helmet"
|
||||
desc = "A more advanced version of the normal security hardsuit helmet. Comes with built in energy shielding."
|
||||
icon_state = "hardsuit0-sec"
|
||||
item_state = "sec_helm"
|
||||
item_color = "sec"
|
||||
armor = list("melee" = 35, "bullet" = 15, "laser" = 30,"energy" = 10, "bomb" = 10, "bio" = 100, "rad" = 50, "fire" = 75, "acid" = 75)
|
||||
|
||||
|
||||
@@ -10,7 +10,9 @@
|
||||
w_class = WEIGHT_CLASS_NORMAL // so it doesn't fit in pockets
|
||||
|
||||
/obj/item/clothing/accessory/holster/Destroy()
|
||||
QDEL_NULL(holstered)
|
||||
if(holstered?.loc == src) // Gun still in the holster
|
||||
holstered.forceMove(loc)
|
||||
holstered = null
|
||||
return ..()
|
||||
|
||||
//subtypes can override this to specify what can be holstered
|
||||
|
||||
@@ -289,8 +289,15 @@
|
||||
/obj/item/CQC_manual/attack_self(mob/living/carbon/human/user)
|
||||
if(!istype(user) || !user)
|
||||
return
|
||||
to_chat(user, "<span class='boldannounce'>You remember the basics of CQC.</span>")
|
||||
if(user.mind) //Prevents changelings and vampires from being able to learn it
|
||||
if(user.mind.changeling) //Changelings
|
||||
to_chat(user, "<span class='warning'>We try multiple times, but we simply cannot grasp the basics of CQC!</span>")
|
||||
return
|
||||
else if(user.mind.vampire) //Vampires
|
||||
to_chat(user, "<span class='warning'>Your blood lust distracts you from the basics of CQC!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='boldannounce'>You remember the basics of CQC.</span>")
|
||||
var/datum/martial_art/cqc/CQC = new(null)
|
||||
CQC.teach(user)
|
||||
user.drop_item()
|
||||
|
||||
@@ -26,6 +26,7 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
var/image/ghostimage = null //this mobs ghost image, for deleting and stuff
|
||||
var/ghostvision = TRUE //is the ghost able to see things humans can't?
|
||||
var/seedarkness = TRUE
|
||||
var/seerads = FALSE // can the ghost see radiation?
|
||||
/// Defines from __DEFINES/hud.dm go here based on which huds the ghost has activated.
|
||||
var/list/data_hud_seen = list()
|
||||
var/ghost_orbit = GHOST_ORBIT_CIRCLE
|
||||
@@ -98,6 +99,8 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
if(orbit_menu)
|
||||
SStgui.close_uis(orbit_menu)
|
||||
QDEL_NULL(orbit_menu)
|
||||
if (seerads)
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
return ..()
|
||||
|
||||
/mob/dead/observer/examine(mob/user)
|
||||
@@ -105,6 +108,10 @@ GLOBAL_VAR_INIT(observer_default_invisibility, INVISIBILITY_OBSERVER)
|
||||
if(!invisibility)
|
||||
. += "It seems extremely obvious."
|
||||
|
||||
/mob/dead/observer/process()
|
||||
if(seerads)
|
||||
show_rads(5)
|
||||
|
||||
// This seems stupid, but it's the easiest way to avoid absolutely ridiculous shit from happening
|
||||
// Copying an appearance directly from a mob includes it's verb list, it's invisibility, it's alpha, and it's density
|
||||
// You might recognize these things as "fucking ridiculous to put in an appearance"
|
||||
@@ -341,6 +348,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
for(var/datum/atom_hud/antag/H in GLOB.huds)
|
||||
H.add_hud_to(src)
|
||||
|
||||
/mob/dead/observer/proc/set_radiation_view(enabled)
|
||||
if (enabled)
|
||||
seerads = TRUE
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
seerads = FALSE
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
|
||||
/mob/dead/observer/verb/set_dnr()
|
||||
set name = "Set DNR"
|
||||
set category = "Ghost"
|
||||
@@ -732,6 +747,10 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
if(mind)
|
||||
mind.active = TRUE
|
||||
mind.transfer_to(new_char)
|
||||
if(mind.vampire)
|
||||
mind.vampire.owner = new_char
|
||||
mind.vampire.powers.Cut()
|
||||
mind.vampire.check_vampire_upgrade(FALSE)
|
||||
else
|
||||
new_char.key = key
|
||||
|
||||
|
||||
@@ -1459,6 +1459,27 @@ GLOBAL_LIST_INIT(slot_equipment_priority, list( \
|
||||
/mob/proc/update_runechat_msg_location()
|
||||
return
|
||||
|
||||
|
||||
/**
|
||||
* Show an overlay of radiation levels on radioactive objects.
|
||||
*/
|
||||
/mob/proc/show_rads(range)
|
||||
for(var/turf/place in range(range, src))
|
||||
var/rads = SSradiation.get_turf_radiation(place)
|
||||
if (rads < RAD_BACKGROUND_RADIATION)
|
||||
continue
|
||||
|
||||
var/strength = round(rads / 1000, 0.1)
|
||||
var/image/pic = image(loc = place)
|
||||
var/mutable_appearance/MA = new()
|
||||
MA.maptext = MAPTEXT("[strength]k")
|
||||
MA.color = "#04e604"
|
||||
MA.layer = RAD_TEXT_LAYER
|
||||
MA.plane = GAME_PLANE
|
||||
pic.appearance = MA
|
||||
flick_overlay(pic, list(client), 10)
|
||||
|
||||
|
||||
GLOBAL_LIST_INIT(holy_areas, typecacheof(list(
|
||||
/area/chapel
|
||||
)))
|
||||
|
||||
@@ -79,7 +79,7 @@
|
||||
//Saber SMG//
|
||||
/obj/item/gun/projectile/automatic/proto
|
||||
name = "\improper Nanotrasen Saber SMG"
|
||||
desc = "A prototype three-round burst 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors."
|
||||
desc = "A rejected prototype three-round burst 9mm submachine gun, designated 'SABR'. Surplus of this model are bouncing around armories of Nanotrasen Space Stations. Has a threaded barrel for suppressors."
|
||||
icon_state = "saber"
|
||||
mag_type = /obj/item/ammo_box/magazine/smgm9mm
|
||||
origin_tech = "combat=4;materials=2"
|
||||
|
||||
@@ -133,7 +133,6 @@
|
||||
color = "#A8A8A8" // rgb: 168, 168, 168
|
||||
taste_description = "a CPU"
|
||||
|
||||
|
||||
/datum/reagent/copper
|
||||
name = "Copper"
|
||||
id = "copper"
|
||||
@@ -141,6 +140,13 @@
|
||||
color = "#6E3B08" // rgb: 110, 59, 8
|
||||
taste_description = "copper"
|
||||
|
||||
/datum/reagent/copper/reaction_obj(obj/O, volume)
|
||||
if(istype(O, /obj/item/stack/sheet/metal))
|
||||
var/obj/item/stack/sheet/metal/M = O
|
||||
volume = round(min(volume, M.amount), 1)
|
||||
new /obj/item/stack/tile/brass(get_turf(M), volume)
|
||||
M.use(volume)
|
||||
|
||||
/datum/reagent/chromium
|
||||
name = "Chromium"
|
||||
id = "chromium"
|
||||
@@ -204,14 +210,17 @@
|
||||
if(exposed_temperature > T0C + 600)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
holder.my_atom.visible_message("<b>The oil burns!</b>")
|
||||
fireflash(T, min(max(0, volume / 40), 8))
|
||||
var/datum/reagents/old_holder = holder
|
||||
fire_flash_log(holder, id)
|
||||
if(holder)
|
||||
holder.del_reagent(id) // Remove first. Else fireflash triggers a reaction again
|
||||
|
||||
fireflash(T, min(max(0, volume / 40), 8))
|
||||
var/datum/effect_system/smoke_spread/bad/BS = new
|
||||
BS.set_up(1, 0, T)
|
||||
BS.start()
|
||||
if(holder)
|
||||
holder.add_reagent("ash", round(volume * 0.5))
|
||||
holder.del_reagent(id)
|
||||
if(!QDELETED(old_holder))
|
||||
old_holder.add_reagent("ash", round(volume * 0.5))
|
||||
|
||||
/datum/reagent/oil/reaction_turf(turf/T, volume)
|
||||
if(volume >= 3 && !isspaceturf(T) && !locate(/obj/effect/decal/cleanable/blood/oil) in T)
|
||||
|
||||
@@ -15,8 +15,8 @@
|
||||
if(holder.chem_temp <= T0C - 50)
|
||||
return
|
||||
var/radius = min(max(0, volume / size_divisor), 8)
|
||||
fireflash_sm(T, radius, rand(temp_fire - temp_deviance, temp_fire + temp_deviance), 500)
|
||||
fire_flash_log(holder, id)
|
||||
fireflash_sm(T, radius, rand(temp_fire - temp_deviance, temp_fire + temp_deviance), 500)
|
||||
|
||||
/datum/reagent/phlogiston/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume)
|
||||
if(holder.chem_temp <= T0C - 50)
|
||||
@@ -56,10 +56,11 @@
|
||||
/datum/reagent/napalm/reaction_temperature(exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature > T0C + 100)
|
||||
var/radius = min(max(0, volume * 0.15), 8)
|
||||
fireflash_sm(get_turf(holder.my_atom), radius, rand(3000, 6000), 500)
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
fire_flash_log(holder, id)
|
||||
if(holder)
|
||||
holder.del_reagent(id)
|
||||
fireflash_sm(T, radius, rand(3000, 6000), 500)
|
||||
|
||||
/datum/reagent/napalm/reaction_turf(turf/T, volume)
|
||||
if(isspaceturf(T))
|
||||
@@ -112,19 +113,24 @@
|
||||
if(holder)
|
||||
holder.del_reagent(id)
|
||||
return
|
||||
|
||||
var/will_explode = volume >= explosion_threshold
|
||||
if(will_explode && holder.my_atom)
|
||||
// Log beforehand
|
||||
holder.my_atom.visible_message("<span class='danger'>[holder.my_atom] explodes!</span>")
|
||||
message_admins("Fuel explosion ([holder.my_atom], reagent type: [id]) at [COORD(holder.my_atom.loc)]. Last touched by: [holder.my_atom.fingerprintslast ? "[holder.my_atom.fingerprintslast]" : "*null*"].")
|
||||
log_game("Fuel explosion ([holder.my_atom], reagent type: [id]) at [COORD(holder.my_atom.loc)]. Last touched by: [holder.my_atom.fingerprintslast ? "[holder.my_atom.fingerprintslast]" : "*null*"].")
|
||||
holder.my_atom.investigate_log("A fuel explosion, last touched by [holder.my_atom.fingerprintslast ? "[holder.my_atom.fingerprintslast]" : "*null*"], triggered at [COORD(holder.my_atom.loc)].", INVESTIGATE_BOMB)
|
||||
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
if(holder) // Delete the fuel from the holder before we trigger the fireball
|
||||
holder.del_reagent(id)
|
||||
|
||||
var/radius = min(max(min_radius, volume * volume_radius_multiplier + volume_radius_modifier), max_radius)
|
||||
fireflash_sm(T, radius, 2200 + radius * 250, radius * 50)
|
||||
if(holder && volume >= explosion_threshold)
|
||||
if(holder.my_atom)
|
||||
holder.my_atom.visible_message("<span class='danger'>[holder.my_atom] explodes!</span>")
|
||||
message_admins("Fuel explosion ([holder.my_atom], reagent type: [id]) at [COORD(holder.my_atom.loc)]. Last touched by: [holder.my_atom.fingerprintslast ? "[holder.my_atom.fingerprintslast]" : "*null*"].")
|
||||
log_game("Fuel explosion ([holder.my_atom], reagent type: [id]) at [COORD(holder.my_atom.loc)]. Last touched by: [holder.my_atom.fingerprintslast ? "[holder.my_atom.fingerprintslast]" : "*null*"].")
|
||||
holder.my_atom.investigate_log("A fuel explosion, last touched by [holder.my_atom.fingerprintslast ? "[holder.my_atom.fingerprintslast]" : "*null*"], triggered at [COORD(holder.my_atom.loc)].", INVESTIGATE_BOMB)
|
||||
if(will_explode)
|
||||
var/boomrange = min(max(min_explosion_radius, round(volume * volume_explosion_radius_multiplier + volume_explosion_radius_modifier)), max_explosion_radius)
|
||||
explosion(T, -1, -1, boomrange, 1)
|
||||
if(holder)
|
||||
holder.del_reagent(id)
|
||||
|
||||
/datum/reagent/fuel/reaction_turf(turf/T, volume) //Don't spill the fuel, or you'll regret it
|
||||
if(isspaceturf(T))
|
||||
@@ -149,10 +155,11 @@
|
||||
|
||||
/datum/reagent/plasma/reaction_temperature(exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature >= T0C + 100)
|
||||
fireflash(get_turf(holder.my_atom), min(max(0, volume / 10), 8))
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
fire_flash_log(holder, id)
|
||||
if(holder)
|
||||
holder.del_reagent(id)
|
||||
holder.del_reagent(id) // Remove first. Else fireflash triggers a reaction again
|
||||
fireflash(T, min(max(0, volume / 10), 8))
|
||||
|
||||
/datum/reagent/plasma/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
@@ -241,8 +248,8 @@
|
||||
if(volume < 3)
|
||||
return
|
||||
var/radius = min((volume - 3) * 0.15, 3)
|
||||
fireflash_sm(T, radius, 4500 + volume * 500, 350)
|
||||
fire_flash_log(holder, id)
|
||||
fireflash_sm(T, radius, 4500 + volume * 500, 350)
|
||||
|
||||
/datum/reagent/clf3/reaction_mob(mob/living/M, method = REAGENT_TOUCH, volume)
|
||||
if(method == REAGENT_TOUCH || method == REAGENT_INGEST)
|
||||
@@ -439,10 +446,11 @@
|
||||
|
||||
/datum/reagent/plasma_dust/reaction_temperature(exposed_temperature, exposed_volume)
|
||||
if(exposed_temperature >= T0C + 100)
|
||||
fireflash(get_turf(holder.my_atom), min(max(0, volume / 10), 8))
|
||||
var/turf/T = get_turf(holder.my_atom)
|
||||
fire_flash_log(holder, id)
|
||||
if(holder)
|
||||
holder.del_reagent(id)
|
||||
holder.del_reagent(id) // Remove first. Else fireflash triggers a reaction again
|
||||
fireflash(T, min(max(0, volume / 10), 8))
|
||||
|
||||
/datum/reagent/plasma_dust/on_mob_life(mob/living/M)
|
||||
var/update_flags = STATUS_UPDATE_NONE
|
||||
|
||||
@@ -16,6 +16,8 @@
|
||||
var/lastrigger = ""
|
||||
/// Can this tank be unwrenched
|
||||
var/can_be_unwrenched = TRUE
|
||||
/// If the dispenser is being blown up already. Used to avoid multiple boom calls due to itself exploding etc
|
||||
var/went_boom = FALSE
|
||||
|
||||
/obj/structure/reagent_dispensers/take_damage(damage_amount, damage_type = BRUTE, damage_flag = 0, sound_effect = 1, attack_dir)
|
||||
. = ..()
|
||||
@@ -53,7 +55,13 @@
|
||||
if(reagents)
|
||||
reagents.temperature_reagents(exposed_temperature)
|
||||
|
||||
/obj/structure/reagent_dispensers/proc/boom()
|
||||
/obj/structure/reagent_dispensers/proc/boom(rigtrigger = FALSE, log_attack = FALSE)
|
||||
if(went_boom)
|
||||
return
|
||||
went_boom = TRUE
|
||||
do_boom(rigtrigger, log_attack)
|
||||
|
||||
/obj/structure/reagent_dispensers/proc/do_boom(rigtrigger = FALSE, log_attack = FALSE)
|
||||
visible_message("<span class='danger'>[src] ruptures!</span>")
|
||||
chem_splash(loc, 5, list(reagents))
|
||||
qdel(src)
|
||||
@@ -107,7 +115,7 @@
|
||||
investigate_log("[key_name(P.firer)] triggered a fueltank explosion with [P.name] at [COORD(loc)]", INVESTIGATE_BOMB)
|
||||
boom()
|
||||
|
||||
/obj/structure/reagent_dispensers/fueltank/boom(rigtrigger = FALSE, log_attack = FALSE) // Prevent case where someone who rigged the tank is blamed for the explosion when the rig isn't what triggered the explosion
|
||||
/obj/structure/reagent_dispensers/fueltank/do_boom(rigtrigger = FALSE, log_attack = FALSE) // Prevent case where someone who rigged the tank is blamed for the explosion when the rig isn't what triggered the explosion
|
||||
if(rigtrigger) // If the explosion is triggered by an assembly holder
|
||||
log_game("A fueltank, last rigged by [lastrigger], triggered at [COORD(loc)]")
|
||||
add_attack_logs(lastrigger, src, "rigged fuel tank exploded", ATKLOG_FEW)
|
||||
|
||||
@@ -19,7 +19,7 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new)
|
||||
/datum/ui_module/ghost_hud_panel/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.observer_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "GhostHudPanel", name, 250, 171, master_ui, state)
|
||||
ui = new(user, src, ui_key, "GhostHudPanel", name, 250, 207, master_ui, state)
|
||||
ui.set_autoupdate(FALSE)
|
||||
ui.open()
|
||||
|
||||
@@ -28,6 +28,8 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new)
|
||||
for(var/hud in hud_type_lookup)
|
||||
data[hud] = (hud_type_lookup[hud] in ghost.data_hud_seen)
|
||||
data["ahud"] = ghost.antagHUD
|
||||
// Split radioactivity out as it isn't a true datahud
|
||||
data["radioactivity"] = ghost.seerads
|
||||
return data
|
||||
|
||||
/datum/ui_module/ghost_hud_panel/ui_act(action, list/params)
|
||||
@@ -46,6 +48,12 @@ GLOBAL_DATUM_INIT(ghost_hud_panel, /datum/ui_module/ghost_hud_panel, new)
|
||||
var/hud_type = hud_type_lookup[params["hud_type"]]
|
||||
ghost.remove_the_hud(hud_type)
|
||||
|
||||
if("rads_on")
|
||||
ghost.set_radiation_view(TRUE)
|
||||
|
||||
if("rads_off")
|
||||
ghost.set_radiation_view(FALSE)
|
||||
|
||||
if("ahud_on")
|
||||
if(!GLOB.configuration.general.allow_antag_hud && !ghost.client.holder)
|
||||
to_chat(ghost, "<span class='warning'>Admins have disabled this for this round.</span>")
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 136 KiB After Width: | Height: | Size: 136 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 175 KiB After Width: | Height: | Size: 181 KiB |
@@ -8,6 +8,7 @@ export const GhostHudPanel = (props, context) => {
|
||||
security,
|
||||
medical,
|
||||
diagnostic,
|
||||
radioactivity,
|
||||
ahud,
|
||||
} = data;
|
||||
return (
|
||||
@@ -18,6 +19,8 @@ export const GhostHudPanel = (props, context) => {
|
||||
<HudEntry label="Security" type="security" is_active={security} />
|
||||
<HudEntry label="Diagnostic" type="diagnostic" is_active={diagnostic} />
|
||||
<Divider />
|
||||
<HudEntry label="Radioactivity" type="radioactivity" is_active={radioactivity} act_on={"rads_on"} act_off={"rads_off"} />
|
||||
<Divider />
|
||||
<HudEntry label="Antag HUD" is_active={ahud} act_on={"ahud_on"} act_off={"ahud_off"} />
|
||||
</Section>
|
||||
</Window.Content>
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user