mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-15 00:53:23 +01:00
Merge branch 'master' into breakable-ssus
This commit is contained in:
@@ -465,7 +465,7 @@ SS13 has a lot of legacy code that's never been updated. Here are some examples
|
||||
```DM
|
||||
//Bad
|
||||
var/datum/db_query/query_watch = SSdbcore.NewQuery("SELECT reason FROM [format_table_name("watch")] WHERE ckey='[target_ckey]'")
|
||||
|
||||
|
||||
//Good
|
||||
var/datum/db_query/query_watch = SSdbcore.NewQuery("SELECT reason FROM [format_table_name("watch")] WHERE ckey=:target_ckey", list(
|
||||
"target_ckey" = target_ckey
|
||||
@@ -502,11 +502,13 @@ in the SQL/updates folder.
|
||||
* Queries must never specify the database, be it in code, or in text files in the repo.
|
||||
|
||||
### Mapping Standards
|
||||
* For map edit PRs, we do not accept 'change for the sake of change' remaps, unless you have very good reasoning to do so. Maintainers reserve the right to close your PR if we disagree with your reasoning.
|
||||
|
||||
* Map Merge
|
||||
* The following guideline for map merging applies to people who are **NOT** using StrongDMM, please see the StrongDMM section if you are.
|
||||
* You **MUST** run Map Merge prior to opening your PR when updating existing maps to minimize the change differences (even when using third party mapping programs such as FastDMM.)
|
||||
* Failure to run Map Merge on a map after using third party mapping programs (such as FastDMM) greatly increases the risk of the map's key dictionary becoming corrupted by future edits after running map merge. Resolving the corruption issue involves rebuilding the map's key dictionary;
|
||||
|
||||
|
||||
* StrongDMM
|
||||
* When using StrongDMM, the following options **MUST** be enabled to avoid file bloat. They can be found under `File > Preferences > Save Options` in SDMM.
|
||||
* Map save format: This **MUST** be set to **TGM** if you do not want to run Map Merge. Enabling this setting means SDMM will automatically map merge, letting you skip manual merging.
|
||||
@@ -526,10 +528,10 @@ in the SQL/updates folder.
|
||||
* NEVER run cables under wall turfs.
|
||||
* Keep floor turf variations to a minimum. Generally, more than 3 floor turf types in one room is bad design.
|
||||
* Run air pipes together where possible. The first example below is to be avoided, the second is optimal:
|
||||
|
||||
|
||||
 
|
||||
* Pipe layouts should be logical and predictable, easy to understand at a glance. Always avoid complex layouts like in this example:
|
||||
|
||||
* Pipe layouts should be logical and predictable, easy to understand at a glance. Always avoid complex layouts like in this example:
|
||||
|
||||

|
||||
|
||||
* Decals are to be used sparingly. Good map design does not require warning tape around everything. Decal overuse contributes to maptick slowdown.
|
||||
|
||||
@@ -55,6 +55,9 @@ jobs:
|
||||
unit_tests_and_sql:
|
||||
name: Unit Tests + SQL Validation
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
matrix:
|
||||
maptype: ['/datum/map/cyberiad', '/datum/map/delta', '/datum/map/metastation']
|
||||
services:
|
||||
mariadb:
|
||||
image: mariadb:latest
|
||||
@@ -86,6 +89,7 @@ jobs:
|
||||
tools/ci/install_byond.sh
|
||||
source $HOME/BYOND/byond/bin/byondsetup
|
||||
tools/ci/dm.sh -DCIBUILDING paradise.dme
|
||||
echo '${{ matrix.maptype }}' > data/next_map.txt
|
||||
tools/ci/run_server.sh
|
||||
|
||||
windows_dll_tests:
|
||||
|
||||
+1629
-1831
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -362,12 +362,6 @@
|
||||
"bf" = (
|
||||
/turf/simulated/wall/mineral/plastitanium/nodiagonal,
|
||||
/area/syndicate_depot/outer)
|
||||
"bg" = (
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod,
|
||||
/turf/simulated/floor/plasteel{
|
||||
icon_state = "dark"
|
||||
},
|
||||
/area/syndicate_depot/core)
|
||||
"bh" = (
|
||||
/obj/machinery/light{
|
||||
dir = 1;
|
||||
@@ -1758,7 +1752,7 @@ aD
|
||||
aM
|
||||
at
|
||||
aD
|
||||
bg
|
||||
aD
|
||||
bn
|
||||
bu
|
||||
bz
|
||||
|
||||
@@ -290,8 +290,13 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"by" = (
|
||||
/obj/structure/spacepoddoor,
|
||||
/turf/simulated/floor/plating,
|
||||
/obj/machinery/door_control{
|
||||
id = "whiteshippoddoor";
|
||||
name = "Pod Door Control";
|
||||
pixel_x = -24;
|
||||
pixel_y = 24
|
||||
},
|
||||
/turf/simulated/floor/mineral/titanium,
|
||||
/area/shuttle/abandoned)
|
||||
"bz" = (
|
||||
/obj/machinery/door/airlock/public/glass{
|
||||
@@ -304,11 +309,10 @@
|
||||
/turf/simulated/floor/plating,
|
||||
/area/shuttle/abandoned)
|
||||
"bC" = (
|
||||
/obj/structure/spacepoddoor,
|
||||
/obj/machinery/door/poddoor/multi_tile/two_tile_ver{
|
||||
id_tag = "whiteshippoddoor"
|
||||
},
|
||||
/turf/simulated/floor/plating,
|
||||
/turf/simulated/floor/mineral/titanium,
|
||||
/area/shuttle/abandoned)
|
||||
"bD" = (
|
||||
/obj/machinery/door_control{
|
||||
|
||||
+1502
-2342
File diff suppressed because it is too large
Load Diff
@@ -66,8 +66,8 @@
|
||||
#define ACCESS_PARAMEDIC 66
|
||||
#define ACCESS_BLUESHIELD 67
|
||||
#define ACCESS_SALVAGE_CAPTAIN 69 // Salvage ship captain's quarters
|
||||
#define ACCESS_MECHANIC 70
|
||||
#define ACCESS_PILOT 71
|
||||
// #define ACCESS_MECHANIC 70 // AA07 2021-10-02 - Removed: Kept for history sake
|
||||
// #define ACCESS_PILOT 71 // AA07 2021-10-02 - Removed: Kept for history sake
|
||||
#define ACCESS_NTREP 73
|
||||
#define ACCESS_MAGISTRATE 74
|
||||
#define ACCESS_MINISAT 75
|
||||
|
||||
@@ -25,8 +25,9 @@
|
||||
#define PLANT_PEST_HUD "20"// Pest level
|
||||
#define PLANT_WEED_HUD "21"// Weed level
|
||||
#define DIAG_TRACK_HUD "22"// Mech tracking beacon
|
||||
#define DIAG_PATH_HUD "23"//Bot path indicators
|
||||
#define GLAND_HUD "24"//Gland indicators for abductors
|
||||
#define DIAG_AIRLOCK_HUD "23" // Airlock shock overlay
|
||||
#define DIAG_PATH_HUD "24"//Bot path indicators
|
||||
#define GLAND_HUD "25"//Gland indicators for abductors
|
||||
|
||||
//by default everything in the hud_list of an atom is an image
|
||||
//a value in hud_list with one of these will change that behavior
|
||||
@@ -38,7 +39,7 @@
|
||||
#define DATA_HUD_SECURITY_ADVANCED 2
|
||||
#define DATA_HUD_MEDICAL_BASIC 3
|
||||
#define DATA_HUD_MEDICAL_ADVANCED 4
|
||||
#define DATA_HUD_DIAGNOSTIC 5
|
||||
#define DATA_HUD_DIAGNOSTIC_BASIC 5
|
||||
#define DATA_HUD_DIAGNOSTIC_ADVANCED 6
|
||||
#define DATA_HUD_HYDROPONIC 7
|
||||
//antag HUD defines
|
||||
|
||||
@@ -18,8 +18,6 @@
|
||||
|
||||
#define ismecha(A) (istype(A, /obj/mecha))
|
||||
|
||||
#define isspacepod(A) (istype(A, /obj/spacepod))
|
||||
|
||||
#define iseffect(A) (istype(A, /obj/effect))
|
||||
|
||||
#define isclothing(A) (istype(A, /obj/item/clothing))
|
||||
|
||||
@@ -58,7 +58,7 @@
|
||||
#define JOB_NANO (1<<0)
|
||||
#define JOB_BLUESHIELD (1<<1)
|
||||
#define JOB_BARBER (1<<3)
|
||||
#define JOB_MECHANIC (1<<4)
|
||||
// #define JOB_MECHANIC (1<<4) // AA07 2021-10-02 - Removed: Kept for history sake
|
||||
#define JOB_BRIGDOC (1<<5)
|
||||
#define JOB_JUDGE (1<<6)
|
||||
#define JOB_PILOT (1<<7)
|
||||
// #define JOB_PILOT (1<<7) // AA07 2021-10-02 - Removed: Kept for history sake
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
#define AUTOLATHE 4 //Uses glass/metal only.
|
||||
#define CRAFTLATHE 8 //Uses fuck if I know. For use eventually.
|
||||
#define MECHFAB 16 //Remember, objects utilising this flag should have construction_time and construction_cost vars.
|
||||
#define PODFAB 32 //Used by the spacepod part fabricator. Same idea as the mechfab
|
||||
// #define PODFAB 32 //Used by the spacepod part fabricator. Same idea as the mechfab // AA 2021-10-02 - Removed. Kept for flag consistency.
|
||||
#define BIOGENERATOR 64 //Uses biomass
|
||||
#define SMELTER 128 //uses various minerals
|
||||
//Note: More then one of these can be added to a design but imprinter and lathe designs are incompatable.
|
||||
|
||||
@@ -1777,8 +1777,6 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new)
|
||||
/obj/item/robot_parts = "ROBOT_PARTS",
|
||||
/obj/item/seeds = "SEED",
|
||||
/obj/item/slime_extract = "SLIME_CORE",
|
||||
/obj/item/spacepod_equipment/weaponry = "POD_WEAPON",
|
||||
/obj/item/spacepod_equipment = "POD_EQUIP",
|
||||
/obj/item/stack/sheet/mineral = "MINERAL",
|
||||
/obj/item/stack/sheet = "SHEET",
|
||||
/obj/item/stack/tile = "TILE",
|
||||
|
||||
@@ -6,7 +6,6 @@ GLOBAL_LIST_INIT(landmarks_list, list()) //list of all landmarks created
|
||||
GLOBAL_LIST_INIT(surgery_steps, list()) //list of all surgery steps |BS12
|
||||
GLOBAL_LIST_INIT(side_effects, list()) //list of all medical sideeffects types by thier names |BS12
|
||||
GLOBAL_LIST_INIT(mechas_list, list()) //list of all mechs. Used by hostile mobs target tracking.
|
||||
GLOBAL_LIST_INIT(spacepods_list, list()) //list of all space pods. Used by hostile mobs target tracking.
|
||||
GLOBAL_LIST_INIT(joblist, list()) //list of all jobstypes, minus borg and AI
|
||||
GLOBAL_LIST_INIT(airlocks, list()) //list of all airlocks
|
||||
GLOBAL_LIST_INIT(singularities, list()) //list of all singularities
|
||||
|
||||
Vendored
+1
-1
@@ -57,7 +57,7 @@ GLOBAL_DATUM_INIT(crew_repository, /datum/repository/crew, new())
|
||||
|
||||
if(C.sensor_mode >= SUIT_SENSOR_TRACKING)
|
||||
var/area/A = get_area(H)
|
||||
crewmemberData["area"] = sanitize(A.name)
|
||||
crewmemberData["area"] = sanitize_simple(A.name)
|
||||
crewmemberData["x"] = pos.x
|
||||
crewmemberData["y"] = pos.y
|
||||
|
||||
|
||||
@@ -461,10 +461,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "detective_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "brown"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "detective"), ICON_OVERLAY)
|
||||
if("Security Pod Pilot")
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "bomber"), ICON_OVERLAY)
|
||||
if("Brig Physician")
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
@@ -484,10 +480,6 @@ GLOBAL_VAR_INIT(record_id_num, 1001)
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "atmos_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Mechanic")
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "mechanic_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
if("Roboticist")
|
||||
clothes_s = new /icon('icons/mob/clothing/uniform.dmi', "robotics_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "black"), ICON_UNDERLAY)
|
||||
|
||||
+22
-22
@@ -2,28 +2,28 @@
|
||||
GLOBAL_LIST_EMPTY(all_huds)
|
||||
|
||||
///GLOBAL HUD LIST
|
||||
GLOBAL_LIST_INIT(huds, list( \
|
||||
DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(), \
|
||||
DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(), \
|
||||
DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(), \
|
||||
DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(), \
|
||||
DATA_HUD_DIAGNOSTIC = new/datum/atom_hud/data/diagnostic(), \
|
||||
DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(), \
|
||||
DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(), \
|
||||
ANTAG_HUD_CULT = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_REV = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_OPS = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_WIZ = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(), \
|
||||
ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),\
|
||||
DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),\
|
||||
ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),\
|
||||
ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()\
|
||||
))
|
||||
GLOBAL_LIST_INIT(huds, list(
|
||||
DATA_HUD_SECURITY_BASIC = new/datum/atom_hud/data/human/security/basic(),
|
||||
DATA_HUD_SECURITY_ADVANCED = new/datum/atom_hud/data/human/security/advanced(),
|
||||
DATA_HUD_MEDICAL_BASIC = new/datum/atom_hud/data/human/medical/basic(),
|
||||
DATA_HUD_MEDICAL_ADVANCED = new/datum/atom_hud/data/human/medical/advanced(),
|
||||
DATA_HUD_DIAGNOSTIC_BASIC = new/datum/atom_hud/data/diagnostic/basic(),
|
||||
DATA_HUD_DIAGNOSTIC_ADVANCED = new/datum/atom_hud/data/diagnostic/advanced(),
|
||||
DATA_HUD_HYDROPONIC = new/datum/atom_hud/data/hydroponic(),
|
||||
ANTAG_HUD_CULT = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_REV = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_OPS = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_WIZ = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_SHADOW = new/datum/atom_hud/antag(),
|
||||
ANTAG_HUD_TRAITOR = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_NINJA = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_CHANGELING = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_VAMPIRE = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_ABDUCTOR = new/datum/atom_hud/antag/hidden(),
|
||||
DATA_HUD_ABDUCTOR = new/datum/atom_hud/abductor(),
|
||||
ANTAG_HUD_EVENTMISC = new/datum/atom_hud/antag/hidden(),
|
||||
ANTAG_HUD_BLOB = new/datum/atom_hud/antag/hidden()
|
||||
))
|
||||
|
||||
/datum/atom_hud
|
||||
var/list/atom/hudatoms = list() //list of all atoms which display this hud
|
||||
|
||||
@@ -85,6 +85,10 @@
|
||||
original = null
|
||||
return ..()
|
||||
|
||||
/datum/mind/proc/get_display_key()
|
||||
var/clientKey = current?.client.get_display_key()
|
||||
return clientKey ? clientKey : key
|
||||
|
||||
/datum/mind/proc/transfer_to(mob/living/new_character)
|
||||
var/datum/atom_hud/antag/hud_to_transfer = antag_hud //we need this because leave_hud() will clear this list
|
||||
var/mob/living/old_current = current
|
||||
|
||||
@@ -147,13 +147,6 @@
|
||||
detected_mech = TRUE
|
||||
increase_alert("Hostile mecha detected: [E]")
|
||||
|
||||
/area/syndicate_depot/core/proc/saw_pod(obj/spacepod/P)
|
||||
if(detected_pod)
|
||||
return
|
||||
detected_pod = TRUE
|
||||
if(!called_backup)
|
||||
increase_alert("Hostile spacepod detected: [P]")
|
||||
|
||||
/area/syndicate_depot/core/proc/saw_double_agent(mob/living/M)
|
||||
if(detected_double_agent)
|
||||
return
|
||||
|
||||
@@ -1112,14 +1112,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "\improper Chief Engineer's office"
|
||||
icon_state = "engine_control"
|
||||
|
||||
/area/engine/mechanic_workshop
|
||||
name = "\improper Mechanic Workshop"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/engine/mechanic_workshop/hanger
|
||||
name = "\improper Hanger Bay"
|
||||
icon_state = "engine"
|
||||
|
||||
/area/engine/supermatter
|
||||
name = "\improper Supermatter Engine"
|
||||
icon_state = "engine"
|
||||
@@ -1488,10 +1480,6 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
name = "\improper Head of Security's Office"
|
||||
icon_state = "sec_hos"
|
||||
|
||||
/area/security/podbay
|
||||
name = "\improper Security Podbay"
|
||||
icon_state = "securitypodbay"
|
||||
|
||||
/area/security/detectives_office
|
||||
name = "\improper Detective's Office"
|
||||
icon_state = "detective"
|
||||
@@ -1544,7 +1532,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
|
||||
/area/security/vacantoffice2
|
||||
name = "\improper Vacant Office"
|
||||
icon_state = "security"
|
||||
|
||||
|
||||
/area/security/permasolitary
|
||||
name = "Solitary Confinement"
|
||||
icon_state = "solitary"
|
||||
|
||||
+25
-40
@@ -657,9 +657,6 @@
|
||||
|
||||
GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
|
||||
/atom/proc/blood_splatter_index()
|
||||
return "\ref[initial(icon)]-[initial(icon_state)]"
|
||||
|
||||
//returns the mob's dna info as a list, to be inserted in an object's blood_DNA list
|
||||
/mob/living/proc/get_blood_dna_list()
|
||||
if(get_blood_id() != "blood")
|
||||
@@ -726,56 +723,52 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
return add_blood(blood_dna, bloodcolor)
|
||||
|
||||
//to add blood onto something, with blood dna info to include.
|
||||
/atom/proc/add_blood(list/blood_dna, color)
|
||||
/atom/proc/add_blood(list/blood_dna, b_color)
|
||||
return FALSE
|
||||
|
||||
/obj/add_blood(list/blood_dna, color)
|
||||
/obj/add_blood(list/blood_dna, b_color)
|
||||
return transfer_blood_dna(blood_dna)
|
||||
|
||||
/obj/item/add_blood(list/blood_dna, color)
|
||||
var/blood_count = !blood_DNA ? 0 : blood_DNA.len
|
||||
/obj/item/add_blood(list/blood_dna, b_color)
|
||||
var/blood_count = !blood_DNA ? 0 : length(blood_DNA)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(!blood_count)//apply the blood-splatter overlay if it isn't already in there
|
||||
add_blood_overlay(color)
|
||||
blood_color = b_color // update the blood color
|
||||
if(!blood_count) //apply the blood-splatter overlay if it isn't already in there
|
||||
add_blood_overlay()
|
||||
return TRUE //we applied blood to the item
|
||||
|
||||
/obj/item/clothing/gloves/add_blood(list/blood_dna, color)
|
||||
/obj/item/clothing/gloves/add_blood(list/blood_dna, b_color)
|
||||
. = ..()
|
||||
transfer_blood = rand(2, 4)
|
||||
|
||||
/turf/add_blood(list/blood_dna, color)
|
||||
/turf/add_blood(list/blood_dna, b_color)
|
||||
var/obj/effect/decal/cleanable/blood/splatter/B = locate() in src
|
||||
if(!B)
|
||||
B = new /obj/effect/decal/cleanable/blood/splatter(src)
|
||||
B.transfer_blood_dna(blood_dna) //give blood info to the blood decal.
|
||||
B.basecolor = color
|
||||
B.basecolor = b_color
|
||||
return TRUE //we bloodied the floor
|
||||
|
||||
/mob/living/carbon/human/add_blood(list/blood_dna, color)
|
||||
/mob/living/carbon/human/add_blood(list/blood_dna, b_color)
|
||||
if(wear_suit)
|
||||
wear_suit.add_blood(blood_dna, color)
|
||||
wear_suit.blood_color = color
|
||||
wear_suit.add_blood(blood_dna, b_color)
|
||||
update_inv_wear_suit()
|
||||
else if(w_uniform)
|
||||
w_uniform.add_blood(blood_dna, color)
|
||||
w_uniform.blood_color = color
|
||||
w_uniform.add_blood(blood_dna, b_color)
|
||||
update_inv_w_uniform()
|
||||
if(head)
|
||||
head.add_blood(blood_dna, color)
|
||||
head.blood_color = color
|
||||
head.add_blood(blood_dna, b_color)
|
||||
update_inv_head()
|
||||
if(glasses)
|
||||
glasses.add_blood(blood_dna, color)
|
||||
glasses.blood_color = color
|
||||
glasses.add_blood(blood_dna, b_color)
|
||||
update_inv_glasses()
|
||||
if(gloves)
|
||||
var/obj/item/clothing/gloves/G = gloves
|
||||
G.add_blood(blood_dna, color)
|
||||
G.blood_color = color
|
||||
G.add_blood(blood_dna, b_color)
|
||||
verbs += /mob/living/carbon/human/proc/bloody_doodle
|
||||
else
|
||||
hand_blood_color = color
|
||||
hand_blood_color = b_color
|
||||
bloody_hands = rand(2, 4)
|
||||
transfer_blood_dna(blood_dna)
|
||||
verbs += /mob/living/carbon/human/proc/bloody_doodle
|
||||
@@ -783,21 +776,13 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
update_inv_gloves() //handles bloody hands overlays and updating
|
||||
return TRUE
|
||||
|
||||
/obj/item/proc/add_blood_overlay(color)
|
||||
/obj/item/proc/add_blood_overlay()
|
||||
if(initial(icon) && initial(icon_state))
|
||||
//try to find a pre-processed blood-splatter. otherwise, make a new one
|
||||
var/index = blood_splatter_index()
|
||||
var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index]
|
||||
if(!blood_splatter_icon)
|
||||
blood_splatter_icon = icon(initial(icon), initial(icon_state), , 1) //we only want to apply blood-splatters to the initial icon_state for each object
|
||||
blood_splatter_icon.Blend("#fff", ICON_ADD) //fills the icon_state with white (except where it's transparent)
|
||||
blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY) //adds blood and the remaining white areas become transparant
|
||||
blood_splatter_icon = fcopy_rsc(blood_splatter_icon)
|
||||
GLOB.blood_splatter_icons[index] = blood_splatter_icon
|
||||
|
||||
blood_overlay = image(blood_splatter_icon)
|
||||
blood_overlay.color = color
|
||||
overlays += blood_overlay
|
||||
var/list/params = GLOB.blood_splatter_icons["[blood_color]"]
|
||||
if(!params)
|
||||
params = layering_filter(icon = icon('icons/effects/blood.dmi', "itemblood"), color = blood_color, blend_mode = BLEND_INSET_OVERLAY)
|
||||
GLOB.blood_splatter_icons["[blood_color]"] = params
|
||||
add_filter("blood_splatter", 1, params)
|
||||
|
||||
/atom/proc/clean_blood(radiation_clean = FALSE)
|
||||
germ_level = 0
|
||||
@@ -828,8 +813,8 @@ GLOBAL_LIST_EMPTY(blood_splatter_icons)
|
||||
/obj/item/clean_blood(radiation_clean = FALSE)
|
||||
. = ..()
|
||||
if(.)
|
||||
if(blood_overlay)
|
||||
overlays -= blood_overlay
|
||||
if(initial(icon) && initial(icon_state))
|
||||
remove_filter("blood_splatter")
|
||||
|
||||
/obj/item/clothing/gloves/clean_blood(radiation_clean = FALSE)
|
||||
. = ..()
|
||||
|
||||
+14
-2
@@ -44,10 +44,12 @@
|
||||
hud_icons = list(ID_HUD, IMPTRACK_HUD, IMPMINDSHIELD_HUD, IMPCHEM_HUD, WANTED_HUD)
|
||||
|
||||
/datum/atom_hud/data/diagnostic
|
||||
hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD)
|
||||
|
||||
/datum/atom_hud/data/diagnostic/basic
|
||||
hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD)
|
||||
|
||||
/datum/atom_hud/data/diagnostic/advanced
|
||||
hud_icons = list (DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_PATH_HUD)
|
||||
hud_icons = list(DIAG_HUD, DIAG_STAT_HUD, DIAG_BATT_HUD, DIAG_MECH_HUD, DIAG_BOT_HUD, DIAG_TRACK_HUD, DIAG_AIRLOCK_HUD, DIAG_PATH_HUD)
|
||||
|
||||
/datum/atom_hud/data/bot_path
|
||||
hud_icons = list(DIAG_PATH_HUD)
|
||||
@@ -473,6 +475,16 @@
|
||||
return
|
||||
holder.icon_state = "hudweed[RoundPlantBar(weedlevel/10)]"
|
||||
|
||||
/*~~~~~~~~~~~~
|
||||
Airlocks!
|
||||
~~~~~~~~~~~~~*/
|
||||
/obj/machinery/door/airlock/proc/diag_hud_set_electrified()
|
||||
var/image/holder = hud_list[DIAG_AIRLOCK_HUD]
|
||||
if(isElectrified())
|
||||
holder.icon_state = "electrified"
|
||||
else
|
||||
holder.icon_state = ""
|
||||
|
||||
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
I'll just put this somewhere near the end...
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
|
||||
|
||||
@@ -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 General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "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 General")
|
||||
restricted_jobs = list("Chaplain", "AI", "Cyborg", "Internal Affairs Agent", "Security Officer", "Warden", "Detective", "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
|
||||
|
||||
@@ -463,7 +463,7 @@
|
||||
var/jobtext = ""
|
||||
if(ply.assigned_role)
|
||||
jobtext = " the <b>[ply.assigned_role]</b>"
|
||||
var/text = "<b>[ply.key]</b> was <b>[ply.name]</b>[jobtext] and"
|
||||
var/text = "<b>[ply.get_display_key()]</b> was <b>[ply.name]</b>[jobtext] and"
|
||||
if(ply.current)
|
||||
if(ply.current.stat == DEAD)
|
||||
text += " <span class='redtext'>died</span>"
|
||||
@@ -480,7 +480,7 @@
|
||||
return text
|
||||
|
||||
/proc/printeventplayer(datum/mind/ply)
|
||||
var/text = "<b>[ply.key]</b> was <b>[ply.name]</b>"
|
||||
var/text = "<b>[ply.get_display_key()]</b> was <b>[ply.name]</b>"
|
||||
if(ply.special_role != SPECIAL_ROLE_EVENTMISC)
|
||||
text += " the [ply.special_role]"
|
||||
text += " and"
|
||||
|
||||
@@ -372,10 +372,6 @@
|
||||
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))
|
||||
@@ -412,10 +408,6 @@
|
||||
to_chat(S, "<span class='warning'>Attempting to dismantle this machine would result in an immediate counterattack. Aborting.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/spacepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
to_chat(S, "<span class='warning'>Destroying this vehicle would destroy us. Aborting.</span>")
|
||||
return FALSE
|
||||
|
||||
/obj/machinery/clonepod/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)
|
||||
if(occupant)
|
||||
to_chat(S, "<span class='warning'>Destroying this machine while it is occupied would result in biological and sentient resources to be harmed. Aborting.</span>")
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
/datum/game_mode/revolution
|
||||
name = "revolution"
|
||||
config_tag = "revolution"
|
||||
restricted_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield", "Nanotrasen Representative", "Security Pod Pilot", "Magistrate", "Brig Physician")
|
||||
restricted_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "AI", "Cyborg","Captain", "Head of Personnel", "Head of Security", "Chief Engineer", "Research Director", "Chief Medical Officer", "Blueshield", "Nanotrasen Representative", "Magistrate", "Brig Physician")
|
||||
required_players = 20
|
||||
required_enemies = 1
|
||||
recommended_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 General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Head of Personnel", "Captain", "Blueshield", "Nanotrasen Representative", "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 General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "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 General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "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 General")
|
||||
protected_jobs = list("Security Officer", "Warden", "Detective", "Head of Security", "Captain", "Blueshield", "Nanotrasen Representative", "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
|
||||
|
||||
@@ -133,9 +133,9 @@
|
||||
ACCESS_HEADS, ACCESS_CAPTAIN, ACCESS_CARGO, ACCESS_MAILSORTING, ACCESS_CHAPEL_OFFICE, ACCESS_CE, ACCESS_CHEMISTRY, ACCESS_CLOWN, ACCESS_CMO,
|
||||
ACCESS_COURT, ACCESS_CONSTRUCTION, ACCESS_CREMATORIUM, ACCESS_JANITOR, ACCESS_ENGINE, ACCESS_EVA, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_FORENSICS_LOCKERS,
|
||||
ACCESS_GENETICS, ACCESS_GATEWAY, ACCESS_BRIG, ACCESS_HOP, ACCESS_HOS, ACCESS_HYDROPONICS, ACCESS_CHANGE_IDS, ACCESS_KEYCARD_AUTH, ACCESS_KITCHEN,
|
||||
ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAGISTRATE, ACCESS_MAINT_TUNNELS, ACCESS_HEADS_VAULT, ACCESS_MEDICAL, ACCESS_MECHANIC, ACCESS_MIME,
|
||||
ACCESS_LAWYER, ACCESS_LIBRARY, ACCESS_MAGISTRATE, ACCESS_MAINT_TUNNELS, ACCESS_HEADS_VAULT, ACCESS_MEDICAL, ACCESS_MIME,
|
||||
ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_MORGUE, ACCESS_NETWORK, ACCESS_NTREP, ACCESS_PARAMEDIC, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_ENGINE_EQUIP, ACCESS_PSYCHIATRIST, ACCESS_QM, ACCESS_RD, ACCESS_RC_ANNOUNCE, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_RESEARCH, ACCESS_SECURITY, ACCESS_PILOT,
|
||||
ACCESS_ENGINE_EQUIP, ACCESS_PSYCHIATRIST, ACCESS_QM, ACCESS_RD, ACCESS_RC_ANNOUNCE, ACCESS_ROBOTICS, ACCESS_TOX, ACCESS_RESEARCH, ACCESS_SECURITY,
|
||||
ACCESS_SURGERY, ACCESS_TECH_STORAGE, ACCESS_TELEPORTER, ACCESS_THEATRE, ACCESS_TCOMSAT, ACCESS_TOX_STORAGE, ACCESS_VIROLOGY, ACCESS_WEAPONS, ACCESS_XENOBIOLOGY,
|
||||
ACCESS_XENOARCH)
|
||||
|
||||
@@ -158,13 +158,13 @@
|
||||
if(REGION_GENERAL) //station general
|
||||
return list(ACCESS_KITCHEN, ACCESS_BAR, ACCESS_HYDROPONICS, ACCESS_JANITOR, ACCESS_CHAPEL_OFFICE, ACCESS_CREMATORIUM, ACCESS_LIBRARY, ACCESS_THEATRE, ACCESS_LAWYER, ACCESS_MAGISTRATE, ACCESS_CLOWN, ACCESS_MIME)
|
||||
if(REGION_SECURITY) //security
|
||||
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_PILOT, ACCESS_HOS)
|
||||
return list(ACCESS_SEC_DOORS, ACCESS_WEAPONS, ACCESS_SECURITY, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_FORENSICS_LOCKERS, ACCESS_COURT, ACCESS_HOS)
|
||||
if(REGION_MEDBAY) //medbay
|
||||
return list(ACCESS_MEDICAL, ACCESS_GENETICS, ACCESS_MORGUE, ACCESS_CHEMISTRY, ACCESS_PSYCHIATRIST, ACCESS_VIROLOGY, ACCESS_SURGERY, ACCESS_CMO, ACCESS_PARAMEDIC)
|
||||
if(REGION_RESEARCH) //research
|
||||
return list(ACCESS_RESEARCH, ACCESS_TOX, ACCESS_TOX_STORAGE, ACCESS_GENETICS, ACCESS_ROBOTICS, ACCESS_XENOBIOLOGY, ACCESS_XENOARCH, ACCESS_MINISAT, ACCESS_RD, ACCESS_NETWORK)
|
||||
if(REGION_ENGINEERING) //engineering and maintenance
|
||||
return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_MINISAT, ACCESS_CE, ACCESS_MECHANIC)
|
||||
return list(ACCESS_CONSTRUCTION, ACCESS_MAINT_TUNNELS, ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_TECH_STORAGE, ACCESS_ATMOSPHERICS, ACCESS_MINISAT, ACCESS_CE)
|
||||
if(REGION_SUPPLY) //supply
|
||||
return list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION, ACCESS_MINERAL_STOREROOM, ACCESS_CARGO, ACCESS_QM)
|
||||
if(REGION_COMMAND) //command
|
||||
@@ -334,10 +334,6 @@
|
||||
return "Nanotrasen Rep."
|
||||
if(ACCESS_PARAMEDIC)
|
||||
return "Paramedic"
|
||||
if(ACCESS_MECHANIC)
|
||||
return "Mechanic Workshop"
|
||||
if(ACCESS_PILOT)
|
||||
return "Security Pod Pilot"
|
||||
if(ACCESS_MAGISTRATE)
|
||||
return "Magistrate"
|
||||
if(ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
@@ -12,11 +12,11 @@
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_player_age = 21
|
||||
exp_requirements = 1200
|
||||
exp_type = EXP_TYPE_ENGINEERING
|
||||
@@ -117,37 +117,3 @@
|
||||
dufflebag = /obj/item/storage/backpack/duffel/atmos
|
||||
box = /obj/item/storage/box/engineer
|
||||
|
||||
/datum/job/mechanic
|
||||
title = "Mechanic"
|
||||
flag = JOB_MECHANIC
|
||||
department_flag = JOBCAT_KARMA
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
is_engineering = 1
|
||||
supervisors = "the chief engineer"
|
||||
department_head = list("Chief Engineer")
|
||||
selection_color = "#fff5cc"
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS, ACCESS_MECHANIC, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MINERAL_STOREROOM)
|
||||
minimal_access = list(ACCESS_MAINT_TUNNELS, ACCESS_EMERGENCY_STORAGE, ACCESS_MECHANIC, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_MINERAL_STOREROOM)
|
||||
outfit = /datum/outfit/job/mechanic
|
||||
|
||||
/datum/outfit/job/mechanic
|
||||
name = "Mechanic"
|
||||
jobtype = /datum/job/mechanic
|
||||
|
||||
uniform = /obj/item/clothing/under/rank/mechanic
|
||||
belt = /obj/item/storage/belt/utility/full
|
||||
shoes = /obj/item/clothing/shoes/workboots
|
||||
head = /obj/item/clothing/head/hardhat
|
||||
l_ear = /obj/item/radio/headset/headset_eng
|
||||
id = /obj/item/card/id/engineering
|
||||
r_pocket = /obj/item/t_scanner
|
||||
pda = /obj/item/pda/engineering
|
||||
backpack_contents = list(
|
||||
/obj/item/pod_paint_bucket = 1
|
||||
)
|
||||
|
||||
backpack = /obj/item/storage/backpack/industrial
|
||||
satchel = /obj/item/storage/backpack/satchel_eng
|
||||
dufflebag = /obj/item/storage/backpack/duffel/engineering
|
||||
box = /obj/item/storage/box/engineer
|
||||
|
||||
@@ -10,13 +10,13 @@
|
||||
selection_color = "#ffdddd"
|
||||
req_admin_notify = 1
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_PILOT, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS)
|
||||
minimal_access = list(ACCESS_EVA, ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_PILOT, ACCESS_WEAPONS)
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS)
|
||||
minimal_player_age = 21
|
||||
exp_requirements = 1200
|
||||
exp_type = EXP_TYPE_SECURITY
|
||||
@@ -222,40 +222,3 @@
|
||||
backpack = /obj/item/storage/backpack/medic
|
||||
satchel = /obj/item/storage/backpack/satchel_med
|
||||
dufflebag = /obj/item/storage/backpack/duffel/medical
|
||||
|
||||
|
||||
/datum/job/pilot
|
||||
title = "Security Pod Pilot"
|
||||
flag = JOB_PILOT
|
||||
department_flag = JOBCAT_KARMA
|
||||
total_positions = 1
|
||||
spawn_positions = 1
|
||||
is_security = 1
|
||||
supervisors = "the head of security"
|
||||
department_head = list("Head of Security")
|
||||
selection_color = "#ffeeee"
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_PILOT, ACCESS_EXTERNAL_AIRLOCKS)
|
||||
minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_WEAPONS, ACCESS_PILOT, ACCESS_EXTERNAL_AIRLOCKS)
|
||||
minimal_player_age = 7
|
||||
outfit = /datum/outfit/job/pilot
|
||||
|
||||
/datum/outfit/job/pilot
|
||||
name = "Security Pod Pilot"
|
||||
jobtype = /datum/job/pilot
|
||||
uniform = /obj/item/clothing/under/rank/security/pod_pilot
|
||||
suit = /obj/item/clothing/suit/jacket/pilot
|
||||
gloves = /obj/item/clothing/gloves/color/black
|
||||
shoes = /obj/item/clothing/shoes/jackboots
|
||||
l_ear = /obj/item/radio/headset/headset_sec/alt
|
||||
id = /obj/item/card/id/security
|
||||
l_pocket = /obj/item/flash
|
||||
suit_store = /obj/item/gun/energy/gun/advtaser
|
||||
pda = /obj/item/pda/security
|
||||
backpack_contents = list(
|
||||
/obj/item/restraints/handcuffs = 1
|
||||
)
|
||||
implants = list(/obj/item/implant/mindshield)
|
||||
backpack = /obj/item/storage/backpack/security
|
||||
satchel = /obj/item/storage/backpack/satchel_sec
|
||||
dufflebag = /obj/item/storage/backpack/duffel/security
|
||||
box = /obj/item/storage/box/engineer
|
||||
|
||||
@@ -17,7 +17,6 @@ GLOBAL_LIST_INIT(engineering_positions, list(
|
||||
"Chief Engineer",
|
||||
"Station Engineer",
|
||||
"Life Support Specialist",
|
||||
"Mechanic"
|
||||
))
|
||||
|
||||
|
||||
@@ -78,7 +77,6 @@ GLOBAL_LIST_INIT(security_positions, list(
|
||||
"Detective",
|
||||
"Security Officer",
|
||||
"Brig Physician",
|
||||
"Security Pod Pilot",
|
||||
"Magistrate"
|
||||
))
|
||||
|
||||
@@ -98,10 +96,8 @@ GLOBAL_LIST_INIT(whitelisted_positions, list(
|
||||
"Blueshield",
|
||||
"Nanotrasen Representative",
|
||||
"Barber",
|
||||
"Mechanic",
|
||||
"Brig Physician",
|
||||
"Magistrate",
|
||||
"Security Pod Pilot",
|
||||
"Magistrate"
|
||||
))
|
||||
|
||||
|
||||
|
||||
@@ -257,6 +257,7 @@
|
||||
enemy_name = "Cuban Pete"
|
||||
name = "Outbomb Cuban Pete"
|
||||
|
||||
add_hiddenprint(user)
|
||||
updateUsrDialog()
|
||||
|
||||
// *** THE ORION TRAIL ** //
|
||||
@@ -962,6 +963,7 @@
|
||||
to_chat(user, "<span class='notice'>You override the cheat code menu and skip to Cheat #[rand(1, 50)]: Realism Mode.</span>")
|
||||
name = "The Orion Trail: Realism Edition"
|
||||
desc = "Learn how our ancestors got to Orion, and try not to die in the process!"
|
||||
add_hiddenprint(user)
|
||||
newgame()
|
||||
emagged = 1
|
||||
|
||||
|
||||
@@ -257,8 +257,8 @@
|
||||
board_name = "RD Console"
|
||||
desc = "Swipe a Scientist level ID or higher to reconfigure."
|
||||
build_path = /obj/machinery/computer/rdconsole/core
|
||||
req_access = list(ACCESS_TOX) // This is for adjusting the type of computer we're building - in case something messes up the pre-existing robotics or mechanics consoles
|
||||
var/list/access_types = list("R&D Core", "Robotics", "E.X.P.E.R.I-MENTOR", "Mechanics", "Public")
|
||||
req_access = list(ACCESS_TOX) // This is for adjusting the type of computer we're building - in case something messes up the pre-existing robotics console
|
||||
var/list/access_types = list("R&D Core", "Robotics", "E.X.P.E.R.I-MENTOR", "Public")
|
||||
|
||||
/obj/item/circuitboard/rdconsole/robotics
|
||||
board_name = "RD Console - Robotics"
|
||||
@@ -268,10 +268,6 @@
|
||||
board_name = "RD Console - E.X.P.E.R.I-MENTOR"
|
||||
build_path = /obj/machinery/computer/rdconsole/experiment
|
||||
|
||||
/obj/item/circuitboard/rdconsole/mechanics
|
||||
board_name = "RD Console - Mechanics"
|
||||
build_path = /obj/machinery/computer/rdconsole/mechanics
|
||||
|
||||
/obj/item/circuitboard/rdconsole/public
|
||||
board_name = "RD Console - Public"
|
||||
build_path = /obj/machinery/computer/rdconsole/public
|
||||
@@ -281,10 +277,6 @@
|
||||
board_name = "Exosuit Control Console"
|
||||
build_path = /obj/machinery/computer/mecha
|
||||
|
||||
/obj/item/circuitboard/pod_locater
|
||||
board_name = "Pod Location Console"
|
||||
build_path = /obj/machinery/computer/podtracker
|
||||
|
||||
/obj/item/circuitboard/rdservercontrol
|
||||
board_name = "RD Server Control"
|
||||
build_path = /obj/machinery/computer/rdservercontrol
|
||||
@@ -426,9 +418,6 @@
|
||||
if("E.X.P.E.R.I-MENTOR")
|
||||
board_name = "RD Console - E.X.P.E.R.I-MENTOR"
|
||||
build_path = /obj/machinery/computer/rdconsole/experiment
|
||||
if("Mechanics")
|
||||
board_name = "RD Console - Mechanics"
|
||||
build_path = /obj/machinery/computer/rdconsole/mechanics
|
||||
if("Public")
|
||||
board_name = "RD Console - Public"
|
||||
build_path = /obj/machinery/computer/rdconsole/public
|
||||
|
||||
@@ -48,9 +48,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
|
||||
/datum/job/judge,
|
||||
/datum/job/blueshield,
|
||||
/datum/job/nanotrasenrep,
|
||||
/datum/job/pilot,
|
||||
/datum/job/brigdoc,
|
||||
/datum/job/mechanic,
|
||||
/datum/job/barber,
|
||||
/datum/job/chaplain
|
||||
)
|
||||
|
||||
@@ -1,41 +0,0 @@
|
||||
/obj/machinery/computer/podtracker
|
||||
name = "pod tracking console"
|
||||
icon = 'icons/obj/computer.dmi'
|
||||
icon_keyboard = "tech_key"
|
||||
icon_screen = "rdcomp"
|
||||
light_color = LIGHT_COLOR_PURPLE
|
||||
req_access = list(ACCESS_ROBOTICS)
|
||||
circuit = /obj/item/circuitboard/pod_locater
|
||||
|
||||
/obj/machinery/computer/podtracker/attack_ai(mob/user)
|
||||
return attack_hand(user)
|
||||
|
||||
/obj/machinery/computer/podtracker/attack_hand(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/obj/machinery/computer/podtracker/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "PodTracking", name, 400, 500, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/computer/podtracker/ui_data(mob/user)
|
||||
var/list/data = list()
|
||||
var/list/pods = list()
|
||||
for(var/obj/item/spacepod_equipment/misc/tracker/TR in GLOB.pod_trackers)
|
||||
if(TR.my_atom)
|
||||
var/obj/spacepod/my_pod = TR.my_atom
|
||||
var/podname = capitalize(sanitize(my_pod.name))
|
||||
var/pilot = "None"
|
||||
var/passengers = list()
|
||||
if(my_pod.pilot)
|
||||
pilot = my_pod.pilot
|
||||
if(my_pod.passengers)
|
||||
for(var/mob/M in my_pod.passengers)
|
||||
passengers += M.name
|
||||
var/passengers_text = english_list(passengers, "None")
|
||||
|
||||
pods.Add(list(list("name" = podname, "podx" = my_pod.x, "pody" = my_pod.y, "podz" = my_pod.z, "pilot" = pilot, "passengers" = passengers_text)))
|
||||
|
||||
data["pods"] = pods
|
||||
return data
|
||||
@@ -710,18 +710,6 @@ to destroy them and players will be able to make replacements.
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
|
||||
/obj/item/circuitboard/podfab
|
||||
board_name = "Spacepod Fabricator"
|
||||
build_path = /obj/machinery/mecha_part_fabricator/spacepod
|
||||
board_type = "machine"
|
||||
origin_tech = "programming=2;engineering=2"
|
||||
req_components = list(
|
||||
/obj/item/stock_parts/matter_bin = 2,
|
||||
/obj/item/stock_parts/manipulator = 1,
|
||||
/obj/item/stock_parts/micro_laser = 1,
|
||||
/obj/item/stack/sheet/glass = 1)
|
||||
|
||||
|
||||
/obj/item/circuitboard/clonepod
|
||||
board_name = "Clone Pod"
|
||||
build_path = /obj/machinery/clonepod
|
||||
|
||||
@@ -248,7 +248,6 @@
|
||||
/obj/item/reagent_containers/hypospray/CMO,
|
||||
/obj/item/clothing/accessory/medal/gold/captain,
|
||||
/obj/item/clothing/gloves/color/black/krav_maga/sec,
|
||||
/obj/item/spacepod_key,
|
||||
/obj/item/nullrod,
|
||||
/obj/item/key,
|
||||
/obj/item/door_remote,
|
||||
|
||||
@@ -55,6 +55,7 @@ GLOBAL_LIST_EMPTY(airlock_overlays)
|
||||
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_N
|
||||
autoclose = TRUE
|
||||
explosion_block = 1
|
||||
hud_possible = list(DIAG_AIRLOCK_HUD)
|
||||
assemblytype = /obj/structure/door_assembly
|
||||
siemens_strength = 1
|
||||
flags_2 = RAD_PROTECT_CONTENTS_2 | RAD_NO_CONTAMINATE_2
|
||||
@@ -149,6 +150,10 @@ About the new airlock wires panel:
|
||||
if(damage_deflection == AIRLOCK_DAMAGE_DEFLECTION_N && security_level > AIRLOCK_SECURITY_METAL)
|
||||
damage_deflection = AIRLOCK_DAMAGE_DEFLECTION_R
|
||||
update_icon()
|
||||
prepare_huds()
|
||||
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||
diag_hud.add_to_hud(src)
|
||||
diag_hud_set_electrified()
|
||||
|
||||
/obj/machinery/door/airlock/proc/update_other_id()
|
||||
for(var/obj/machinery/door/airlock/A in GLOB.airlocks)
|
||||
@@ -292,6 +297,7 @@ About the new airlock wires panel:
|
||||
electrified_timer = addtimer(CALLBACK(src, .proc/electrify, 0), duration SECONDS, TIMER_UNIQUE | TIMER_STOPPABLE)
|
||||
if(feedback && message)
|
||||
to_chat(user, message)
|
||||
diag_hud_set_electrified()
|
||||
|
||||
// shock user with probability prb (if all connections & power are working)
|
||||
// returns 1 if shocked, 0 otherwise
|
||||
|
||||
@@ -1,25 +0,0 @@
|
||||
/obj/structure/spacepoddoor
|
||||
name = "podlock"
|
||||
desc = "Why it no open!!!"
|
||||
icon = 'icons/effects/beam.dmi'
|
||||
icon_state = "n_beam"
|
||||
density = 0
|
||||
anchored = 1
|
||||
var/id = 1.0
|
||||
|
||||
/obj/structure/spacepoddoor/Initialize()
|
||||
..()
|
||||
air_update_turf(1)
|
||||
|
||||
/obj/structure/spacepoddoor/CanAtmosPass(turf/T)
|
||||
return 0
|
||||
|
||||
/obj/structure/spacepoddoor/Destroy()
|
||||
var/turf/T = get_turf(src)
|
||||
. = ..()
|
||||
T.air_update_turf(TRUE)
|
||||
|
||||
/obj/structure/spacepoddoor/CanPass(atom/movable/A, turf/T)
|
||||
if(istype(A, /obj/spacepod))
|
||||
return ..()
|
||||
else return 0
|
||||
@@ -502,6 +502,7 @@ Class Procs:
|
||||
"<span class='notice'>You apply some [O] at [src]'s damaged areas.</span>")
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/machinery/proc/exchange_parts(mob/user, obj/item/storage/part_replacer/W)
|
||||
var/shouldplaysound = 0
|
||||
if((flags & NODECONSTRUCT))
|
||||
@@ -519,15 +520,23 @@ Class Procs:
|
||||
break
|
||||
for(var/obj/item/stock_parts/B in W.contents)
|
||||
if(istype(B, P) && istype(A, P))
|
||||
if(B.rating > A.rating)
|
||||
W.remove_from_storage(B, src)
|
||||
W.handle_item_insertion(A, 1)
|
||||
component_parts -= A
|
||||
component_parts += B
|
||||
B.loc = null
|
||||
to_chat(user, "<span class='notice'>[A.name] replaced with [B.name].</span>")
|
||||
shouldplaysound = 1
|
||||
break
|
||||
//If it's cell - check: 1) Max charge is better? 2) Max charge same but current charge better? - If both NO -> next content
|
||||
if(ispath(B.type, /obj/item/stock_parts/cell))
|
||||
var/obj/item/stock_parts/cell/tA = A
|
||||
var/obj/item/stock_parts/cell/tB = B
|
||||
if(!(tB.maxcharge > tA.maxcharge) && !((tB.maxcharge == tA.maxcharge) && (tB.charge > tA.charge)))
|
||||
continue
|
||||
//If it's not cell and not better -> next content
|
||||
else if(B.rating <= A.rating)
|
||||
continue
|
||||
W.remove_from_storage(B, src)
|
||||
W.handle_item_insertion(A, 1)
|
||||
component_parts -= A
|
||||
component_parts += B
|
||||
B.loc = null
|
||||
to_chat(user, "<span class='notice'>[A.name] replaced with [B.name].</span>")
|
||||
shouldplaysound = 1
|
||||
break
|
||||
RefreshParts()
|
||||
else
|
||||
to_chat(user, display_parts(user))
|
||||
|
||||
@@ -516,7 +516,7 @@ GLOBAL_LIST_EMPTY(turret_icons)
|
||||
|
||||
var/list/targets = list() //list of primary targets
|
||||
var/list/secondarytargets = list() //targets that are least important
|
||||
var/static/things_to_scan = typecacheof(list(/obj/mecha, /obj/spacepod, /obj/vehicle, /mob/living))
|
||||
var/static/things_to_scan = typecacheof(list(/obj/mecha, /obj/vehicle, /mob/living))
|
||||
|
||||
for(var/A in typecache_filter_list(view(scan_range, src), things_to_scan))
|
||||
var/atom/AA = A
|
||||
@@ -528,10 +528,6 @@ GLOBAL_LIST_EMPTY(turret_icons)
|
||||
var/obj/mecha/ME = A
|
||||
assess_and_assign(ME.occupant, targets, secondarytargets)
|
||||
|
||||
if(istype(A, /obj/spacepod))
|
||||
var/obj/spacepod/SP = A
|
||||
assess_and_assign(SP.pilot, targets, secondarytargets)
|
||||
|
||||
if(istype(A, /obj/vehicle))
|
||||
var/obj/vehicle/T = A
|
||||
if(T.has_buckled_mobs())
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
#define RCS_SHIP_LOG 10 // View Shipping Label Log
|
||||
|
||||
//Radio list
|
||||
#define ENGI_ROLES list("Atmospherics","Mechanic","Engineering","Chief Engineer's Desk","Telecoms Admin")
|
||||
#define ENGI_ROLES list("Atmospherics","Engineering","Chief Engineer's Desk","Telecoms Admin")
|
||||
#define SEC_ROLES list("Warden","Security","Brig Medbay","Head of Security's Desk")
|
||||
#define MISC_ROLES list("Bar","Chapel","Kitchen","Hydroponics","Janitorial")
|
||||
#define MED_ROLES list("Virology","Chief Medical Officer's Desk","Medbay")
|
||||
|
||||
@@ -98,9 +98,6 @@
|
||||
/obj/machinery/suit_storage_unit/security/secure
|
||||
secure = TRUE
|
||||
|
||||
/obj/machinery/suit_storage_unit/security/pod_pilot
|
||||
req_access = list(ACCESS_PILOT)
|
||||
|
||||
/obj/machinery/suit_storage_unit/security/hos
|
||||
name = "Head of Security's suit storage unit"
|
||||
suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos
|
||||
|
||||
@@ -41,7 +41,6 @@
|
||||
"Engine Technician" = "engradio",
|
||||
"Life Support Specialist" = "engradio",
|
||||
"Maintenance Technician" = "engradio",
|
||||
"Mechanic" = "engradio",
|
||||
"Station Engineer" = "engradio",
|
||||
// Central Command
|
||||
"Emergency Response Team Engineer" = "dsquadradio", // I know this says deathsquad but the class for responseteam is neon green. No.
|
||||
@@ -92,7 +91,6 @@
|
||||
"Internal Affairs Agent" = "secradio",
|
||||
"Magistrate" = "secradio",
|
||||
"Security Officer" = "secradio",
|
||||
"Security Pod Pilot" = "secradio",
|
||||
"Warden" = "secradio",
|
||||
// Supply
|
||||
"Quartermaster" = "supradio",
|
||||
|
||||
@@ -368,7 +368,7 @@
|
||||
if(!is_teleport_allowed(z) && !admin_usage)
|
||||
to_chat(M, "You can't use this here.")
|
||||
return
|
||||
if(power_station && power_station.engaged && !panel_open && !blockAI(M) && !istype(M, /obj/spacepod))
|
||||
if(power_station && power_station.engaged && !panel_open && !blockAI(M))
|
||||
if(!teleport(M) && isliving(M)) // the isliving(M) is needed to avoid triggering errors if a spark bumps the telehub
|
||||
visible_message("<span class='warning'>[src] emits a loud buzz, as its teleport portal flickers and fails!</span>")
|
||||
playsound(loc, 'sound/machines/buzz-sigh.ogg', 50, FALSE)
|
||||
|
||||
@@ -122,7 +122,7 @@
|
||||
for(var/datum/data/vending_product/R in (product_records + coin_records + hidden_records))
|
||||
var/obj/item/I = R.product_path
|
||||
var/pp = replacetext(replacetext("[R.product_path]", "/obj/item/", ""), "/", "-")
|
||||
imagelist[pp] = "[icon2base64(icon(initial(I.icon), initial(I.icon_state)))]"
|
||||
imagelist[pp] = "[icon2base64(icon(initial(I.icon), initial(I.icon_state), SOUTH, 1))]"
|
||||
if(LAZYLEN(slogan_list))
|
||||
// So not all machines speak at the exact same time.
|
||||
// The first time this machine says something will be at slogantime + this random value,
|
||||
@@ -1798,7 +1798,7 @@
|
||||
/obj/item/clothing/head/soft/sec = 4,
|
||||
/obj/item/clothing/head/soft/sec/corp = 4,
|
||||
/obj/item/clothing/suit/armor/secjacket = 4,
|
||||
/obj/item/clothing/suit/jacket/pilot = 2,
|
||||
/obj/item/clothing/suit/jacket/secbomber = 2,
|
||||
/obj/item/clothing/suit/hooded/wintercoat/security = 4,
|
||||
/obj/item/clothing/gloves/color/black = 4,
|
||||
/obj/item/clothing/accessory/armband/sec = 6,
|
||||
|
||||
@@ -109,9 +109,7 @@
|
||||
H.apply_damage(10, BRUTE, "chest", H.run_armor_check(target_part, MELEE))
|
||||
|
||||
//blood splatters
|
||||
blood_color = H.dna.species.blood_color
|
||||
|
||||
new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, blood_color)
|
||||
new /obj/effect/temp_visual/dir_setting/bloodsplatter(H.drop_location(), splatter_dir, H.dna.species.blood_color)
|
||||
|
||||
//organs go everywhere
|
||||
if(target_part && prob(10 * drill_level))
|
||||
|
||||
@@ -460,39 +460,6 @@
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
RefreshParts()
|
||||
|
||||
/**
|
||||
* # Spacepod Fabricator
|
||||
*
|
||||
* Spacepod variant of [/obj/machinery/mecha_part_fabricator].
|
||||
*/
|
||||
/obj/machinery/mecha_part_fabricator/spacepod
|
||||
name = "spacepod fabricator"
|
||||
allowed_design_types = PODFAB
|
||||
req_access = list(ACCESS_MECHANIC)
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/spacepod/New()
|
||||
..()
|
||||
QDEL_LIST(component_parts)
|
||||
component_parts = list()
|
||||
component_parts += new /obj/item/circuitboard/podfab(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/matter_bin(null)
|
||||
component_parts += new /obj/item/stock_parts/manipulator(null)
|
||||
component_parts += new /obj/item/stock_parts/micro_laser(null)
|
||||
component_parts += new /obj/item/stack/sheet/glass(null)
|
||||
RefreshParts()
|
||||
|
||||
/obj/machinery/mecha_part_fabricator/spacepod/Initialize(mapload)
|
||||
. = ..()
|
||||
categories = list(
|
||||
"Pod_Weaponry",
|
||||
"Pod_Armor",
|
||||
"Pod_Cargo",
|
||||
"Pod_Parts",
|
||||
"Pod_Frame",
|
||||
"Misc"
|
||||
)
|
||||
|
||||
/**
|
||||
* # Robotic Fabricator
|
||||
*
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
/// Ion trails for spacepods and other space-flying things
|
||||
/// Ion trails for jetpacks, ion thrusters and other space-flying things
|
||||
/obj/effect/particle_effect/ion_trails
|
||||
name = "ion trails"
|
||||
icon_state = "ion_trails"
|
||||
|
||||
@@ -307,9 +307,3 @@
|
||||
name = "80pc vaultdoor 20pc wall"
|
||||
result = list(/obj/machinery/door/airlock/hatch/syndicate/vault = 4,
|
||||
/turf/simulated/wall/mineral/plastitanium/nodiagonal = 1)
|
||||
|
||||
|
||||
/obj/effect/spawner/random_spawners/syndicate/layout/spacepod
|
||||
name = "50pc loot spacepod"
|
||||
result = list(/obj/spacepod/syndi = 1,
|
||||
/obj/spacepod/syndi/unlocked = 1)
|
||||
|
||||
@@ -5,8 +5,6 @@ GLOBAL_DATUM_INIT(fire_overlay, /image, image("icon" = 'icons/goonstation/effect
|
||||
|
||||
move_resist = null // Set in the Initialise depending on the item size. Unless it's overriden by a specific item
|
||||
var/discrete = 0 // used in item_attack.dm to make an item not show an attack message to viewers
|
||||
var/image/blood_overlay = null //this saves our blood splatter overlay, which will be processed not to go over the edges of the sprite
|
||||
var/blood_overlay_color = null
|
||||
var/item_state = null
|
||||
var/lefthand_file = 'icons/mob/inhands/items_lefthand.dmi'
|
||||
var/righthand_file = 'icons/mob/inhands/items_righthand.dmi'
|
||||
|
||||
@@ -187,28 +187,5 @@
|
||||
var/mob/living/carbon/human/H = user
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
// Update blood splatter
|
||||
if(blood_overlay)
|
||||
cut_overlay(blood_overlay)
|
||||
qdel(blood_overlay)
|
||||
add_blood_overlay(blood_overlay_color)
|
||||
playsound(loc, extend_sound, 50, TRUE)
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/melee/classic_baton/telescopic/blood_splatter_index()
|
||||
return "\ref[icon]-[icon_state]"
|
||||
|
||||
/obj/item/melee/classic_baton/telescopic/add_blood_overlay(color)
|
||||
var/index = blood_splatter_index()
|
||||
var/icon/blood_splatter_icon = GLOB.blood_splatter_icons[index]
|
||||
if(!blood_splatter_icon)
|
||||
blood_splatter_icon = icon(icon, icon_state)
|
||||
blood_splatter_icon.Blend("#ffffff", ICON_ADD)
|
||||
blood_splatter_icon.Blend(icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY)
|
||||
blood_splatter_icon = fcopy_rsc(blood_splatter_icon)
|
||||
GLOB.blood_splatter_icons[index] = blood_splatter_icon
|
||||
|
||||
blood_overlay = image(blood_splatter_icon)
|
||||
blood_overlay.color = color
|
||||
blood_overlay_color = color
|
||||
add_overlay(blood_overlay)
|
||||
|
||||
@@ -734,7 +734,7 @@
|
||||
registered_name = "HoS"
|
||||
icon_state = "HoS"
|
||||
access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_PILOT, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS,
|
||||
ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING,
|
||||
ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_WEAPONS)
|
||||
|
||||
@@ -762,7 +762,7 @@
|
||||
access = list(ACCESS_ENGINE, ACCESS_ENGINE_EQUIP, ACCESS_TECH_STORAGE, ACCESS_MAINT_TUNNELS,
|
||||
ACCESS_TELEPORTER, ACCESS_EXTERNAL_AIRLOCKS, ACCESS_ATMOSPHERICS, ACCESS_EMERGENCY_STORAGE, ACCESS_EVA,
|
||||
ACCESS_HEADS, ACCESS_CONSTRUCTION, ACCESS_SEC_DOORS,
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MECHANIC, ACCESS_MINERAL_STOREROOM)
|
||||
ACCESS_CE, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_TCOMSAT, ACCESS_MINISAT, ACCESS_MINERAL_STOREROOM)
|
||||
|
||||
/obj/item/card/id/clown
|
||||
name = "Pink ID"
|
||||
|
||||
@@ -231,8 +231,7 @@
|
||||
/obj/item/holosign_creator/security,
|
||||
/obj/item/melee/classic_baton/telescopic,
|
||||
/obj/item/restraints/legcuffs/bola,
|
||||
/obj/item/clothing/mask/gas/sechailer,
|
||||
/obj/item/spacepod_key)
|
||||
/obj/item/clothing/mask/gas/sechailer)
|
||||
|
||||
/obj/item/storage/belt/security/sec/populate_contents()
|
||||
new /obj/item/flashlight/seclite(src)
|
||||
|
||||
@@ -183,6 +183,7 @@
|
||||
*/
|
||||
/obj/item/twohanded/fireaxe // DEM AXES MAN, marker -Agouri
|
||||
icon_state = "fireaxe0"
|
||||
item_state = "fireaxe0"
|
||||
name = "fire axe"
|
||||
desc = "Truly, the weapon of a madman. Who would think to fight fire with an axe?"
|
||||
force = 5
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
if(istype(W, /obj/item/pen))
|
||||
var/decalselection = input("Please select a decal") as null|anything in list("Atmospherics", "Bartender", "Barber", "Blueshield", "Brig Physician", "Captain",
|
||||
"Cargo", "Chief Engineer", "Chaplain", "Chef", "Chemist", "Civilian", "Clown", "CMO", "Coroner", "Detective", "Engineering", "Genetics", "HOP",
|
||||
"HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Mechanic", "Medical", "Mime", "Mining", "NT Representative", "Paramedic", "Pod Pilot",
|
||||
"HOS", "Hydroponics", "Internal Affairs Agent", "Janitor", "Magistrate", "Medical", "Mime", "Mining", "NT Representative", "Paramedic",
|
||||
"Prisoner", "Research Director", "Security", "Syndicate", "Therapist", "Virology", "Warden", "Xenobiology")
|
||||
if(!decalselection)
|
||||
return
|
||||
|
||||
@@ -94,9 +94,9 @@
|
||||
if(density)
|
||||
smooth = SMOOTH_FALSE
|
||||
clear_smooth_overlays()
|
||||
icon_state = "fwall_opening"
|
||||
flick("fwall_opening", src)
|
||||
else
|
||||
icon_state = "fwall_closing"
|
||||
flick("fwall_closing", src)
|
||||
|
||||
/obj/structure/falsewall/update_icon()
|
||||
if(density)
|
||||
@@ -297,6 +297,7 @@
|
||||
/obj/structure/falsewall/sandstone
|
||||
name = "sandstone wall"
|
||||
desc = "A wall with sandstone plating."
|
||||
icon = 'icons/turf/walls/sandstone_wall.dmi'
|
||||
icon_state = "sandstone"
|
||||
mineral = /obj/item/stack/sheet/mineral/sandstone
|
||||
walltype = /turf/simulated/wall/mineral/sandstone
|
||||
|
||||
@@ -76,7 +76,7 @@
|
||||
if(!has_buckled_mobs())
|
||||
return
|
||||
var/mob/living/buckled_mob = buckled_mobs[1]
|
||||
if(istype(A, /obj/machinery/door))
|
||||
if(istype(A, /obj/machinery/door) || istype(A, /obj/machinery/gateway))
|
||||
A.Bumped(buckled_mob)
|
||||
|
||||
if(propelled)
|
||||
|
||||
@@ -508,6 +508,7 @@
|
||||
/obj/structure/window/reinforced/polarized
|
||||
name = "electrochromic window"
|
||||
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
|
||||
glass_amount = 2
|
||||
var/id
|
||||
|
||||
/obj/machinery/button/windowtint
|
||||
@@ -674,8 +675,9 @@
|
||||
/obj/structure/window/full/reinforced/polarized
|
||||
name = "electrochromic window"
|
||||
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
|
||||
glass_amount = 4
|
||||
var/id
|
||||
|
||||
|
||||
/obj/structure/window/full/reinforced/tinted
|
||||
name = "tinted window"
|
||||
desc = "It looks rather strong and opaque. Might take a few good hits to shatter it."
|
||||
|
||||
@@ -25,7 +25,6 @@
|
||||
"Locker Toilets",
|
||||
"Maintenance Bar",
|
||||
"Medical Secondary Storage",
|
||||
"Mechanic Workshop",
|
||||
"Port Emergency Storage",
|
||||
"Psych Room",
|
||||
"Toxins Launch Room",
|
||||
|
||||
@@ -206,9 +206,7 @@
|
||||
immunity = list(TYPE_GROUND)
|
||||
area_blacklist = list(/area/maintenance)
|
||||
area_whitelist = list(/area/hallway,
|
||||
/area/escapepodbay,
|
||||
/area/engine/mechanic_workshop,
|
||||
/area/security/podbay)
|
||||
/area/escapepodbay)
|
||||
|
||||
/datum/mob_type/bluespace
|
||||
name = "Bluespace"
|
||||
|
||||
@@ -213,9 +213,6 @@
|
||||
to_chat(user, "<span class='warning'>The communicator buzzes, and you hear the voice again: 'Oh really now?' You hear a clicking sound. 'Team, get back here. We have trouble'. Then the line goes dead.</span>")
|
||||
for(var/thing in GLOB.landmarks_list)
|
||||
var/obj/effect/landmark/L = thing
|
||||
if(L.name == "wildwest_syndipod")
|
||||
var/obj/spacepod/syndi/P = new /obj/spacepod/syndi(get_turf(L))
|
||||
P.name = "Syndi Recon Pod"
|
||||
if(L.name == "wildwest_syndibackup")
|
||||
var/mob/living/simple_animal/hostile/syndicate/ranged/space/R = new /mob/living/simple_animal/hostile/syndicate/ranged/space(get_turf(L))
|
||||
R.name = "Syndi Recon Team"
|
||||
|
||||
@@ -147,14 +147,10 @@
|
||||
karma_purchase(karma,5,"job","Brig Physician")
|
||||
if("3")
|
||||
karma_purchase(karma,30,"job","Nanotrasen Representative")
|
||||
if("5")
|
||||
if("4")
|
||||
karma_purchase(karma,30,"job","Blueshield")
|
||||
if("6")
|
||||
karma_purchase(karma,30,"job","Mechanic")
|
||||
if("7")
|
||||
if("5")
|
||||
karma_purchase(karma,45,"job","Magistrate")
|
||||
if("9")
|
||||
karma_purchase(karma,30,"job","Security Pod Pilot")
|
||||
return
|
||||
if(href_list["KarmaBuy2"])
|
||||
var/karma=verify_karma()
|
||||
@@ -202,6 +198,11 @@
|
||||
|
||||
..() //redirect to hsrc.Topic()
|
||||
|
||||
|
||||
/client/proc/get_display_key()
|
||||
var/fakekey = src?.holder?.fakekey
|
||||
return fakekey ? fakekey : key
|
||||
|
||||
/client/proc/is_content_unlocked()
|
||||
if(!prefs.unlock_content)
|
||||
to_chat(src, "Become a BYOND member to access member-perks and features, as well as support the engine that makes this game possible. <a href='http://www.byond.com/membership'>Click here to find out more</a>.")
|
||||
|
||||
@@ -1379,29 +1379,6 @@
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
else if(job_karma_high)
|
||||
switch(job_karma_high)
|
||||
if(JOB_MECHANIC)
|
||||
clothes_s = new /icon(uniform_dmi, "mechanic_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "orange"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/belt.dmi', "utility"), ICON_OVERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/head.dmi', "hardhat0_yellow"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "engiepack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-eng"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(JOB_PILOT)
|
||||
clothes_s = new /icon(uniform_dmi, "secred_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "jackboots"), ICON_UNDERLAY)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/suit.dmi', "bomber"), ICON_OVERLAY)
|
||||
switch(backbag)
|
||||
if(2)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "securitypack"), ICON_OVERLAY)
|
||||
if(3)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel-sec"), ICON_OVERLAY)
|
||||
if(4)
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/back.dmi', "satchel"), ICON_OVERLAY)
|
||||
if(JOB_BRIGDOC)
|
||||
clothes_s = new /icon(uniform_dmi, "medical_s")
|
||||
clothes_s.Blend(new /icon('icons/mob/clothing/feet.dmi', "white"), ICON_UNDERLAY)
|
||||
|
||||
@@ -66,12 +66,12 @@
|
||||
/datum/gear/accessory/holobadge
|
||||
display_name = "holobadge, pin"
|
||||
path = /obj/item/clothing/accessory/holobadge
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/accessory/holobadge_n
|
||||
display_name = "holobadge, cord"
|
||||
path = /obj/item/clothing/accessory/holobadge/cord
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/accessory/tieblue
|
||||
display_name = "tie, blue"
|
||||
@@ -170,7 +170,7 @@
|
||||
/datum/gear/accessory/armband_job/sec
|
||||
display_name = " armband, security"
|
||||
path = /obj/item/clothing/accessory/armband/sec
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician")
|
||||
|
||||
/datum/gear/accessory/armband_job/cargo
|
||||
display_name = "cargo armband"
|
||||
|
||||
@@ -71,7 +71,7 @@
|
||||
/datum/gear/sechud
|
||||
display_name = "a classic security HUD"
|
||||
path = /obj/item/clothing/glasses/hud/security
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent","Magistrate")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Internal Affairs Agent","Magistrate")
|
||||
|
||||
/datum/gear/cryaonbox
|
||||
display_name = "a box of crayons"
|
||||
@@ -168,7 +168,7 @@
|
||||
/datum/gear/mug/department/eng
|
||||
display_name = "engineer coffee mug"
|
||||
description = "An engineer's coffee mug, emblazoned in the colors of the Engineering department."
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/eng
|
||||
|
||||
/datum/gear/mug/department/med
|
||||
@@ -186,7 +186,7 @@
|
||||
/datum/gear/mug/department/sec
|
||||
display_name = "officer coffee mug"
|
||||
description = "An officer's coffee mug, emblazoned in the colors of the Security department."
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot", "Brig Physician", "Internal Affairs Agent")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Brig Physician", "Internal Affairs Agent")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/sec
|
||||
|
||||
/datum/gear/mug/department/serv
|
||||
|
||||
@@ -6,17 +6,17 @@
|
||||
/datum/gear/hat/hhat_yellow
|
||||
display_name = "hardhat, yellow"
|
||||
path = /obj/item/clothing/head/hardhat
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
|
||||
|
||||
/datum/gear/hat/hhat_orange
|
||||
display_name = "hardhat, orange"
|
||||
path = /obj/item/clothing/head/hardhat/orange
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
|
||||
|
||||
/datum/gear/hat/hhat_blue
|
||||
display_name = "hardhat, blue"
|
||||
path = /obj/item/clothing/head/hardhat/dblue
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic", "Life Support Specialist")
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Life Support Specialist")
|
||||
|
||||
/datum/gear/hat/that
|
||||
display_name = "top hat"
|
||||
@@ -57,12 +57,12 @@
|
||||
/datum/gear/hat/capcsec
|
||||
display_name = "security corporate cap"
|
||||
path = /obj/item/clothing/head/soft/sec/corp
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer")
|
||||
|
||||
/datum/gear/hat/capsec
|
||||
display_name = "security cap"
|
||||
path = /obj/item/clothing/head/soft/sec
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer")
|
||||
|
||||
/datum/gear/hat/capred
|
||||
display_name = "cap, red"
|
||||
@@ -143,7 +143,7 @@
|
||||
/datum/gear/hat/beret_job/sec
|
||||
display_name = "security beret"
|
||||
path = /obj/item/clothing/head/beret/sec
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer")
|
||||
|
||||
/datum/gear/hat/beret_job/sci
|
||||
display_name = "science beret"
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
display_name = "sleek veil"
|
||||
description = "A common traditional nano-fiber veil worn by many Tajaran, It is rare and offensive to see it on other races. This one has an in-built security HUD."
|
||||
path = /obj/item/clothing/glasses/hud/security/tajblind
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot", "Internal Affairs Agent", "Magistrate")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Internal Affairs Agent", "Magistrate")
|
||||
cost = 2
|
||||
|
||||
/datum/gear/racial/taj/med
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
/datum/gear/suit/coat/job/sec
|
||||
display_name = "winter coat, security"
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/security
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/suit/coat/job/captain
|
||||
display_name = "winter coat, captain"
|
||||
@@ -38,7 +38,7 @@
|
||||
/datum/gear/suit/coat/job/engi
|
||||
display_name = "winter coat, engineering"
|
||||
path = /obj/item/clothing/suit/hooded/wintercoat/engineering
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer", "Mechanic")
|
||||
allowed_roles = list("Chief Engineer", "Station Engineer")
|
||||
|
||||
/datum/gear/suit/coat/job/atmos
|
||||
display_name = "winter coat, atmospherics"
|
||||
@@ -106,12 +106,12 @@
|
||||
/datum/gear/suit/secjacket
|
||||
display_name = "security jacket"
|
||||
path = /obj/item/clothing/suit/armor/secjacket
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/suit/secbomberjacket
|
||||
display_name = "security bomber jacket"
|
||||
path = /obj/item/clothing/suit/jacket/pilot
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
path = /obj/item/clothing/suit/jacket/secbomber
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/suit/ianshirt
|
||||
display_name = "Ian Shirt"
|
||||
|
||||
@@ -229,22 +229,22 @@
|
||||
/datum/gear/uniform/sec/formal
|
||||
display_name = "security uniform, formal"
|
||||
path = /obj/item/clothing/under/rank/security/formal
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/sec/secorporate
|
||||
display_name = "security uniform, corporate"
|
||||
path = /obj/item/clothing/under/rank/security/corp
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/sec/dispatch
|
||||
display_name = "security uniform, dispatch"
|
||||
path = /obj/item/clothing/under/rank/dispatch
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer")
|
||||
|
||||
/datum/gear/uniform/sec/casual
|
||||
display_name = "security uniform, casual"
|
||||
path = /obj/item/clothing/under/rank/security2
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective", "Security Pod Pilot")
|
||||
allowed_roles = list("Head of Security", "Warden", "Security Officer", "Detective")
|
||||
|
||||
/datum/gear/uniform/shorts
|
||||
subtype_path = /datum/gear/uniform/shorts
|
||||
|
||||
@@ -64,7 +64,7 @@
|
||||
desc = "A heads-up display capable of analyzing the integrity and status of robotics and exosuits."
|
||||
icon_state = "diagnostichud"
|
||||
origin_tech = "magnets=2;engineering=2"
|
||||
HUDType = DATA_HUD_DIAGNOSTIC
|
||||
HUDType = DATA_HUD_DIAGNOSTIC_BASIC
|
||||
|
||||
sprite_sheets = list(
|
||||
"Vox" = 'icons/mob/clothing/species/vox/eyes.dmi',
|
||||
|
||||
@@ -165,12 +165,10 @@
|
||||
/obj/item/clothing/gloves/fingerless/rapid/Touch(mob/living/target, proximity = TRUE)
|
||||
var/mob/living/M = loc
|
||||
|
||||
if(M.a_intent in accepted_intents)
|
||||
if(M.mind.martial_art || HAS_TRAIT(M, TRAIT_HULK))
|
||||
M.changeNext_move(CLICK_CD_MELEE)//normal attack speed for hulk, CQC and Carp.
|
||||
else
|
||||
M.changeNext_move(click_speed_modifier)
|
||||
.= FALSE
|
||||
if((M.a_intent in accepted_intents) && !M.mind.martial_art?.can_use(M) && !HAS_TRAIT(M, TRAIT_HULK))
|
||||
M.changeNext_move(click_speed_modifier)
|
||||
|
||||
return FALSE
|
||||
|
||||
/obj/item/clothing/gloves/fingerless/rapid/admin
|
||||
name = "advanced interactive gloves"
|
||||
|
||||
@@ -512,8 +512,8 @@
|
||||
var/mob/living/carbon/human/U = user
|
||||
if(istype(U.glasses, /obj/item/clothing/glasses/hud/diagnostic)) // If they are for some reason wearing a diagnostic hud when they put the helmet on
|
||||
return // already have a hud
|
||||
var/datum/atom_hud/H = GLOB.huds[DATA_HUD_DIAGNOSTIC]
|
||||
H.add_hud_to(U)
|
||||
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC]
|
||||
DHUD.add_hud_to(user)
|
||||
hud_active = TRUE
|
||||
|
||||
|
||||
@@ -521,8 +521,8 @@
|
||||
..()
|
||||
if((user.head == src) && hud_active)
|
||||
GLOB.doppler_arrays -= src
|
||||
var/datum/atom_hud/H = GLOB.huds[DATA_HUD_DIAGNOSTIC]
|
||||
H.remove_hud_from(user)
|
||||
var/datum/atom_hud/DHUD = GLOB.huds[DATA_HUD_DIAGNOSTIC_BASIC]
|
||||
DHUD.remove_hud_from(user)
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/rd/proc/sense_explosion(x0, y0, z0, devastation_range, heavy_impact_range,
|
||||
light_impact_range, took, orig_dev_range, orig_heavy_range, orig_light_range)
|
||||
|
||||
@@ -789,7 +789,7 @@
|
||||
"Vox" = 'icons/mob/clothing/species/vox/suit.dmi'
|
||||
)
|
||||
|
||||
/obj/item/clothing/suit/jacket/pilot
|
||||
/obj/item/clothing/suit/jacket/secbomber
|
||||
name = "security bomber jacket"
|
||||
desc = "A stylish and worn-in armoured black bomber jacket emblazoned with the NT Security crest on the left breast. Looks rugged."
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
|
||||
@@ -64,10 +64,3 @@
|
||||
name = "roboticist's jumpskirt"
|
||||
icon_state = "roboticsf"
|
||||
item_color = "roboticsf"
|
||||
|
||||
/obj/item/clothing/under/rank/mechanic
|
||||
desc = "It's a pair of overalls worn by mechanics."
|
||||
name = "mechanic's overalls"
|
||||
icon_state = "mechanic"
|
||||
item_state = "mechanic"
|
||||
item_color = "mechanic"
|
||||
|
||||
@@ -183,11 +183,3 @@
|
||||
item_state = "brig_physf"
|
||||
item_color = "brig_physf"
|
||||
permeability_coefficient = 0.50
|
||||
|
||||
//Pod Pilot
|
||||
/obj/item/clothing/under/rank/security/pod_pilot
|
||||
name = "pod pilot's jumpsuit"
|
||||
desc = "Suit for your regular pod pilot."
|
||||
icon_state = "pod_pilot"
|
||||
item_state = "pod_pilot"
|
||||
item_color = "pod_pilot"
|
||||
|
||||
@@ -1537,30 +1537,6 @@
|
||||
icon_state = "ikelos_envirohelm" // New item needed because `initial(icon_state)` is used.
|
||||
icon = 'icons/obj/custom_items.dmi'
|
||||
|
||||
|
||||
/obj/item/fluff/decemviri_spacepod_kit //Decemviri: Sylus Cain
|
||||
name = "Spacepod mod kit"
|
||||
desc = "a kit on tools and a blueprint detailing how to reconfigure a spacepod"
|
||||
icon_state = "modkit"
|
||||
|
||||
/obj/item/fluff/decemviri_spacepod_kit/afterattack(atom/target, mob/user, proximity)
|
||||
if(!proximity || !ishuman(user) || user.incapacitated())
|
||||
return
|
||||
|
||||
if(!istype(target, /obj/spacepod))
|
||||
to_chat(user, "<span class='warning'>You can't modify [target]!</span>")
|
||||
return
|
||||
|
||||
to_chat(user, "<span class='notice'>You modify the appearance of [target] based on the kit blueprints.</span>")
|
||||
var/obj/spacepod/pod = target
|
||||
pod.icon = 'icons/48x48/custom_pod.dmi'
|
||||
pod.icon_state = "pod_dece"
|
||||
pod.name = "sleek spacepod"
|
||||
pod.desc = "A modified varient of a space pod."
|
||||
pod.can_paint = FALSE
|
||||
used = 1
|
||||
qdel(src)
|
||||
|
||||
/obj/item/bikehorn/fluff/pinkbikehorn //Xerdies: Squiddle Toodle
|
||||
name = "Honkinator5000"
|
||||
desc = "This horn may look ridiculous but is the new hot item for clowns in the Clown Empire. It has a fine print on its side reading: Property of Prince Honktertong the IV"
|
||||
|
||||
@@ -24,8 +24,7 @@
|
||||
/area/engine/break_room,
|
||||
/area/engine/equipmentstorage,
|
||||
/area/engine/chiefs_office,
|
||||
/area/engine/controlroom,
|
||||
/area/engine/mechanic_workshop
|
||||
/area/engine/controlroom
|
||||
))
|
||||
|
||||
allowed_areas = typecacheof(GLOB.the_station_areas) - safe_area_types + unsafe_area_subtypes
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
name = "carp fillet"
|
||||
desc = "A fillet of spess carp meat."
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "fishfillet"
|
||||
icon_state = "carpfillet" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use.
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 6
|
||||
list_reagents = list("protein" = 3, "carpotoxin" = 2, "vitamin" = 2)
|
||||
@@ -13,7 +13,7 @@
|
||||
name = "raw salmon"
|
||||
desc = "A fillet of raw salmon."
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "fishfillet"
|
||||
icon_state = "salmonfillet" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use.
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 6
|
||||
list_reagents = list("protein" = 3, "vitamin" = 2)
|
||||
@@ -23,7 +23,7 @@
|
||||
name = "salmon steak"
|
||||
desc = "A fillet of freshly-grilled salmon meat."
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "salmonsteak"
|
||||
icon_state = "salmonsteak" // Sprite based on one created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use.
|
||||
trash = /obj/item/trash/plate
|
||||
filling_color = "#7A3D11"
|
||||
bitesize = 3
|
||||
@@ -34,7 +34,7 @@
|
||||
name = "raw catfish"
|
||||
desc = "A fillet of raw catfish."
|
||||
icon = 'icons/obj/food/seafood.dmi'
|
||||
icon_state = "fishfillet"
|
||||
icon_state = "catfishfillet" // Sprite created by https://github.com/binarysudoku for Goonstation, They have relicensed it for our use.
|
||||
filling_color = "#FFDEFE"
|
||||
bitesize = 6
|
||||
list_reagents = list("protein" = 3, "vitamin" = 2)
|
||||
|
||||
@@ -237,7 +237,7 @@
|
||||
var/K = item_quants[i]
|
||||
var/count = item_quants[K]
|
||||
if(count > 0)
|
||||
items.Add(list(list("display_name" = html_encode(capitalize(K)), "vend" = i, "quantity" = count)))
|
||||
items.Add(list(list("display_name" = capitalize(K), "vend" = i, "quantity" = count)))
|
||||
|
||||
if(length(items))
|
||||
data["contents"] = items
|
||||
|
||||
@@ -206,17 +206,6 @@
|
||||
H.update_inv_l_hand()
|
||||
H.update_inv_r_hand()
|
||||
add_fingerprint(user)
|
||||
if(!blood_DNA)
|
||||
return
|
||||
if(blood_overlay && (blood_DNA.len >= 1)) //updated blood overlay, if any
|
||||
overlays.Cut() //this might delete other item overlays as well but eeeeeh
|
||||
|
||||
var/icon/I = new /icon(icon, icon_state)
|
||||
I.Blend(new /icon('icons/effects/blood.dmi', rgb(255,255,255)), ICON_ADD)
|
||||
I.Blend(new /icon('icons/effects/blood.dmi', "itemblood"), ICON_MULTIPLY)
|
||||
blood_overlay = I
|
||||
overlays += blood_overlay
|
||||
|
||||
|
||||
// *************************************
|
||||
// Nutrient defines for hydroponics
|
||||
|
||||
@@ -271,19 +271,11 @@ GLOBAL_LIST_EMPTY(karma_spenders)
|
||||
else
|
||||
dat += "Nanotrasen Representative - <font color='green'>Unlocked</font><br>"
|
||||
if(!("Blueshield" in joblist))
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaBuy=5'>Unlock Blueshield -- 30KP</a><br>"
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaBuy=4'>Unlock Blueshield -- 30KP</a><br>"
|
||||
else
|
||||
dat += "Blueshield - <font color='green'>Unlocked</font><br>"
|
||||
if(!("Security Pod Pilot" in joblist))
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaBuy=9'>Unlock Security Pod Pilot -- 30KP</a><br>"
|
||||
else
|
||||
dat += "Security Pod Pilot - <font color='green'>Unlocked</font><br>"
|
||||
if(!("Mechanic" in joblist))
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaBuy=6'>Unlock Mechanic -- 30KP</a><br>"
|
||||
else
|
||||
dat += "Mechanic - <font color='green'>Unlocked</font><br>"
|
||||
if(!("Magistrate" in joblist))
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaBuy=7'>Unlock Magistrate -- 45KP</a><br>"
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaBuy=5'>Unlock Magistrate -- 45KP</a><br>"
|
||||
else
|
||||
dat+= "Magistrate - <font color='green'>Unlocked</font><br>"
|
||||
|
||||
@@ -350,6 +342,12 @@ GLOBAL_LIST_EMPTY(karma_spenders)
|
||||
if("Nanotrasen Recruiter" in purchased)
|
||||
refundable += "Nanotrasen Recruiter"
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaRefund=Nanotrasen Recruiter;KarmaRefundType=job;KarmaRefundCost=10'>Refund Nanotrasen Recruiter -- 10KP</a><br>"
|
||||
if("Mechanic" in purchased)
|
||||
refundable += "Mechanic"
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaRefund=Mechanic;KarmaRefundType=job;KarmaRefundCost=30'>Refund Mechanic -- 30KP</a><br>"
|
||||
if("Security Pod Pilot" in purchased)
|
||||
refundable += "Security Pod Pilot"
|
||||
dat += "<a href='?src=[UID()];karmashop=shop;KarmaRefund=Security Pod Pilot;KarmaRefundType=job;KarmaRefundCost=30'>Refund Security Pod Pilot -- 30KP</a><br>"
|
||||
|
||||
if(!refundable.len)
|
||||
dat += "You do not have any refundable karma purchases.<br>"
|
||||
@@ -512,7 +510,7 @@ GLOBAL_LIST_EMPTY(karma_spenders)
|
||||
/client/proc/karmarefund(type, name, cost)
|
||||
switch(name)
|
||||
if("Tajaran Ambassador","Unathi Ambassador","Skrell Ambassador","Diona Ambassador","Kidan Ambassador",
|
||||
"Slime People Ambassador","Grey Ambassador","Vox Ambassador","Customs Officer")
|
||||
"Slime People Ambassador","Grey Ambassador","Vox Ambassador","Customs Officer", "Mechanic", "Security Pod Pilot")
|
||||
cost = 30
|
||||
if("Nanotrasen Recruiter")
|
||||
cost = 10
|
||||
|
||||
@@ -31,7 +31,6 @@
|
||||
"Science",
|
||||
"Robotics",
|
||||
"Research Director's Desk",
|
||||
"Mechanic",
|
||||
"Engineering" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA),
|
||||
"Chief Engineer's Desk" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA),
|
||||
"Atmospherics" = list(MAT_METAL, MAT_GLASS, MAT_PLASMA),
|
||||
|
||||
@@ -339,7 +339,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
|
||||
* * user - A reference to the ghost's old mob. This argument is required since `src` does not have a `client` at this point.
|
||||
*/
|
||||
/mob/dead/observer/proc/toggle_all_huds_on(mob/user)
|
||||
show_me_the_hud(DATA_HUD_DIAGNOSTIC)
|
||||
show_me_the_hud(DATA_HUD_DIAGNOSTIC_ADVANCED)
|
||||
show_me_the_hud(DATA_HUD_SECURITY_ADVANCED)
|
||||
show_me_the_hud(DATA_HUD_MEDICAL_ADVANCED)
|
||||
if(!check_rights((R_ADMIN | R_MOD), FALSE, user))
|
||||
|
||||
@@ -211,11 +211,6 @@
|
||||
stat("Total Blood", "[mind.vampire.bloodtotal]")
|
||||
stat("Usable Blood", "[mind.vampire.bloodusable]")
|
||||
|
||||
if(istype(loc, /obj/spacepod)) // Spacdpods!
|
||||
var/obj/spacepod/S = loc
|
||||
stat("Spacepod Charge", "[istype(S.battery) ? "[(S.battery.charge / S.battery.maxcharge) * 100]" : "No cell detected"]")
|
||||
stat("Spacepod Integrity", "[!S.health ? "0" : "[(S.health / initial(S.health)) * 100]"]%")
|
||||
|
||||
/mob/living/carbon/human/ex_act(severity)
|
||||
if(status_flags & GODMODE)
|
||||
return FALSE
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
if("Chef")
|
||||
O = new /datum/outfit/plasmaman/chef
|
||||
|
||||
if("Security Officer", "Security Pod Pilot", "Special Operations Officer")
|
||||
if("Security Officer", "Special Operations Officer")
|
||||
O = new /datum/outfit/plasmaman/security
|
||||
|
||||
if("Detective")
|
||||
@@ -111,7 +111,7 @@
|
||||
if("Research Director")
|
||||
O = new /datum/outfit/plasmaman/rd
|
||||
|
||||
if("Station Engineer", "Mechanic")
|
||||
if("Station Engineer")
|
||||
O = new /datum/outfit/plasmaman/engineering
|
||||
|
||||
if("Chief Engineer")
|
||||
|
||||
@@ -88,9 +88,8 @@
|
||||
|
||||
/datum/species/slime/proc/blend(mob/living/carbon/human/H)
|
||||
var/new_color = BlendRGB(H.skin_colour, "#acacac", 0.5) // Blends this to make it work better
|
||||
if(H.blood_color != new_color) // Put here, so if it's a roundstart, dyed, or CMA'd slime, their blood changes to match skin
|
||||
H.blood_color = new_color
|
||||
H.dna.species.blood_color = H.blood_color
|
||||
if(H.dna.species.blood_color != new_color) // Put here, so if it's a roundstart, dyed, or CMA'd slime, their blood changes to match skin
|
||||
H.dna.species.blood_color = new_color
|
||||
|
||||
/datum/species/slime/handle_life(mob/living/carbon/human/H)
|
||||
// Slowly shifting to the color of the reagents
|
||||
|
||||
@@ -847,10 +847,6 @@
|
||||
var/obj/mecha/M = loc
|
||||
loc_temp = M.return_temperature()
|
||||
|
||||
else if(istype(loc, /obj/spacepod))
|
||||
var/obj/spacepod/S = loc
|
||||
loc_temp = S.return_temperature()
|
||||
|
||||
else if(istype(loc, /obj/structure/transit_tube_pod))
|
||||
loc_temp = environment.temperature
|
||||
|
||||
|
||||
@@ -44,6 +44,7 @@ GLOBAL_LIST_INIT(ai_verbs_default, list(
|
||||
move_resist = MOVE_FORCE_NORMAL
|
||||
density = 1
|
||||
status_flags = CANSTUN|CANPARALYSE|CANPUSH
|
||||
d_hud = DATA_HUD_DIAGNOSTIC_ADVANCED
|
||||
mob_size = MOB_SIZE_LARGE
|
||||
sight = SEE_TURFS | SEE_MOBS | SEE_OBJS
|
||||
see_in_dark = 8
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
|
||||
var/designation = ""
|
||||
var/obj/item/camera/siliconcam/aiCamera = null //photography
|
||||
//Used in say.dm, allows for pAIs to have different say flavor text, as well as silicons, although the latter is not implemented.
|
||||
//Used in say.dm, allows for pAIs to have different say flavor text, as well as silicons, although the latter is not implemented.
|
||||
var/speak_statement = "states"
|
||||
var/speak_exclamation = "declares"
|
||||
var/speak_query = "queries"
|
||||
@@ -34,7 +34,7 @@
|
||||
|
||||
var/med_hud = DATA_HUD_MEDICAL_ADVANCED //Determines the med hud to use
|
||||
var/sec_hud = DATA_HUD_SECURITY_ADVANCED //Determines the sec hud to use
|
||||
var/d_hud = DATA_HUD_DIAGNOSTIC_ADVANCED //There is only one kind of diag hud
|
||||
var/d_hud = DATA_HUD_DIAGNOSTIC_BASIC //There is only one kind of diag hud
|
||||
|
||||
var/obj/item/radio/common_radio
|
||||
|
||||
@@ -46,13 +46,14 @@
|
||||
RegisterSignal(SSalarm, COMSIG_TRIGGERED_ALARM, .proc/alarm_triggered)
|
||||
RegisterSignal(SSalarm, COMSIG_CANCELLED_ALARM, .proc/alarm_cancelled)
|
||||
|
||||
/mob/living/silicon/Initialize()
|
||||
/mob/living/silicon/Initialize(mapload)
|
||||
. = ..()
|
||||
var/datum/atom_hud/data/diagnostic/diag_hud = GLOB.huds[DATA_HUD_DIAGNOSTIC]
|
||||
diag_hud.add_to_hud(src)
|
||||
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||
diag_hud.add_to_hud(src)
|
||||
diag_hud_set_status()
|
||||
diag_hud_set_health()
|
||||
|
||||
|
||||
/mob/living/silicon/med_hud_set_health()
|
||||
return //we use a different hud
|
||||
|
||||
@@ -311,10 +312,10 @@
|
||||
/mob/living/silicon/proc/remove_med_sec_hud()
|
||||
var/datum/atom_hud/secsensor = GLOB.huds[sec_hud]
|
||||
var/datum/atom_hud/medsensor = GLOB.huds[med_hud]
|
||||
for(var/datum/atom_hud/data/diagnostic/diagsensor in GLOB.huds)
|
||||
diagsensor.remove_hud_from(src)
|
||||
var/datum/atom_hud/diagsensor = GLOB.huds[d_hud]
|
||||
secsensor.remove_hud_from(src)
|
||||
medsensor.remove_hud_from(src)
|
||||
diagsensor.remove_hud_from(src)
|
||||
|
||||
|
||||
/mob/living/silicon/proc/add_sec_hud()
|
||||
@@ -326,8 +327,8 @@
|
||||
medsensor.add_hud_to(src)
|
||||
|
||||
/mob/living/silicon/proc/add_diag_hud()
|
||||
for(var/datum/atom_hud/data/diagnostic/diagsensor in GLOB.huds)
|
||||
diagsensor.add_hud_to(src)
|
||||
var/datum/atom_hud/diagsensor = GLOB.huds[d_hud]
|
||||
diagsensor.add_hud_to(src)
|
||||
|
||||
|
||||
/mob/living/silicon/proc/toggle_sensor_mode()
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
var/control_freq = BOT_FREQ // bot control frequency
|
||||
var/bot_filter // The radio filter the bot uses to identify itself on the network.
|
||||
var/bot_type = 0 //The type of bot it is, for radio control.
|
||||
var/data_hud_type = DATA_HUD_DIAGNOSTIC //The type of data HUD the bot uses. Diagnostic by default.
|
||||
var/data_hud_type = DATA_HUD_DIAGNOSTIC_BASIC //The type of data HUD the bot uses. Diagnostic by default.
|
||||
//This holds text for what the bot is mode doing, reported on the remote bot control interface.
|
||||
var/list/mode_name = list("In Pursuit","Preparing to Arrest", "Arresting", \
|
||||
"Beginning Patrol", "Patrolling", "Summoned by PDA", \
|
||||
@@ -1079,6 +1079,8 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
if(newpath)
|
||||
for(var/i in 1 to newpath.len)
|
||||
var/turf/T = newpath[i]
|
||||
if(T == loc) //don't bother putting an image if it's where we already exist.
|
||||
continue
|
||||
var/direction = NORTH
|
||||
if(i > 1)
|
||||
var/turf/prevT = path[i - 1]
|
||||
@@ -1121,7 +1123,7 @@ Pass a positive integer as an argument to override a bot's default speed.
|
||||
return
|
||||
var/image/I = path[path[1]]
|
||||
if(I)
|
||||
I.icon = null
|
||||
I.icon_state = null
|
||||
path.Cut(1, 2)
|
||||
|
||||
/mob/living/simple_animal/bot/proc/drop_part(obj/item/drop_item, dropzone)
|
||||
|
||||
@@ -131,21 +131,6 @@
|
||||
spawn(0)
|
||||
handle_automated_action()
|
||||
break
|
||||
for(var/obj/spacepod/P in view(7, src))
|
||||
if((P.name == oldtarget_name) && (world.time < last_found + 100))
|
||||
continue
|
||||
if(!P.pilot)
|
||||
continue
|
||||
if("syndicate" in P.pilot.faction)
|
||||
continue
|
||||
if(P.pilot.stat == DEAD)
|
||||
continue
|
||||
target = P
|
||||
oldtarget_name = P.name
|
||||
mode = BOT_HUNT
|
||||
spawn(0)
|
||||
handle_automated_action()
|
||||
break
|
||||
|
||||
|
||||
/mob/living/simple_animal/bot/ed209/syndicate/shootAt(atom/target)
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
if(!search_objects)
|
||||
. = hearers(vision_range, targets_from) - src //Remove self, so we don't suicide
|
||||
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/spacepod))
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha))
|
||||
|
||||
for(var/HM in typecache_filter_list(range(vision_range, targets_from), hostile_machines))
|
||||
if(can_see(targets_from, HM, vision_range))
|
||||
@@ -216,12 +216,6 @@
|
||||
if(CanAttack(M.occupant))
|
||||
return TRUE
|
||||
|
||||
if(isspacepod(the_target))
|
||||
var/obj/spacepod/S = the_target
|
||||
if(S.pilot)//Just so we don't attack empty pods
|
||||
if(CanAttack(S.pilot))
|
||||
return TRUE
|
||||
|
||||
if(istype(the_target, /obj/machinery/porta_turret))
|
||||
var/obj/machinery/porta_turret/P = the_target
|
||||
if(P.faction in faction)
|
||||
@@ -557,7 +551,7 @@
|
||||
toggle_ai(AI_ON)
|
||||
|
||||
/mob/living/simple_animal/hostile/proc/ListTargetsLazy(_Z)//Step 1, find out what we can see
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha, /obj/spacepod))
|
||||
var/static/hostile_machines = typecacheof(list(/obj/machinery/porta_turret, /obj/mecha))
|
||||
. = list()
|
||||
for(var/I in SSmobs.clients_by_zlevel[_Z])
|
||||
var/mob/M = I
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//Gutlunches, passive mods that devour blood and gibs
|
||||
/mob/living/simple_animal/hostile/asteroid/gutlunch
|
||||
name = "gutlunch"
|
||||
desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, nutritious milk."
|
||||
desc = "A scavenger that eats raw meat, often found alongside ash walkers. Produces a thick, medicinally nutritious milk."
|
||||
icon = 'icons/mob/lavaland/lavaland_monsters.dmi'
|
||||
icon_state = "gutlunch"
|
||||
icon_living = "gutlunch"
|
||||
@@ -104,7 +104,9 @@
|
||||
if(prob(60))
|
||||
reagents.add_reagent("cream", rand(2, 5))
|
||||
if(prob(45))
|
||||
reagents.add_reagent("salglu_solution", rand(2,5))
|
||||
reagents.add_reagent("salglu_solution", rand(2, 5))
|
||||
if(prob(30))
|
||||
reagents.add_reagent("epinephrine", rand(2, 5))
|
||||
|
||||
|
||||
//Male gutlunch. They're smaller and more colorful!
|
||||
|
||||
@@ -12,10 +12,6 @@
|
||||
var/obj/mecha/M = A
|
||||
if(M.occupant)
|
||||
return A
|
||||
else if(isspacepod(A))
|
||||
var/obj/spacepod/S = A
|
||||
if(S.pilot)
|
||||
return A
|
||||
|
||||
/mob/living/simple_animal/hostile/retaliate/ListTargets()
|
||||
if(!enemies.len)
|
||||
@@ -39,11 +35,6 @@
|
||||
if(M.occupant)
|
||||
enemies |= M
|
||||
enemies |= M.occupant
|
||||
else if(isspacepod(A))
|
||||
var/obj/spacepod/S = A
|
||||
if(S.pilot)
|
||||
enemies |= S
|
||||
enemies |= S.pilot
|
||||
|
||||
for(var/mob/living/simple_animal/hostile/retaliate/H in around)
|
||||
if(faction_check_mob(H) && !attack_same && !H.attack_same)
|
||||
|
||||
@@ -139,8 +139,6 @@
|
||||
seen_enemy_name = target.name
|
||||
if(istype(target, /obj/mecha))
|
||||
depotarea.saw_mech(target)
|
||||
if(istype(target, /obj/spacepod))
|
||||
depotarea.saw_pod(target)
|
||||
if(depotarea.list_includes(target, depotarea.dead_list))
|
||||
seen_revived_enemy = TRUE
|
||||
raise_alert("[name] reports intruder [target] has returned from death!")
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user