Merge branch 'master' into breakable-ssus

This commit is contained in:
lewcc
2021-10-03 23:11:00 -04:00
136 changed files with 3707 additions and 8298 deletions
+7 -5
View File
@@ -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:
![image](https://user-images.githubusercontent.com/12197162/120011088-d22c7400-bfd5-11eb-867f-7b137ac5b1b2.png) ![image](https://user-images.githubusercontent.com/12197162/120011126-dfe1f980-bfd5-11eb-96b2-c83238a9cdcf.png)
* 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:
![image](https://user-images.githubusercontent.com/12197162/120619480-ecda6f00-c453-11eb-9d9f-abf0d1a99c34.png)
* Decals are to be used sparingly. Good map design does not require warning tape around everything. Decal overuse contributes to maptick slowdown.
+4
View File
@@ -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:
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{
File diff suppressed because it is too large Load Diff
+2 -2
View File
@@ -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
+4 -3
View File
@@ -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
-2
View File
@@ -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))
+2 -2
View File
@@ -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
+1 -1
View File
@@ -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.
-2
View File
@@ -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",
-1
View File
@@ -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
+1 -1
View File
@@ -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
-8
View File
@@ -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
View File
@@ -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
+4
View File
@@ -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
-7
View File
@@ -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
+1 -13
View File
@@ -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
View File
@@ -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
View File
@@ -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...
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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>")
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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>")
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+1 -1
View File
@@ -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
+4 -8
View File
@@ -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)
+2 -36
View File
@@ -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
+2 -39
View File
@@ -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
+1 -5
View File
@@ -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"
))
+2
View File
@@ -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
+2 -13
View File
@@ -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
-2
View File
@@ -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
-1
View File
@@ -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,
+6
View File
@@ -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
-25
View File
@@ -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
+18 -9
View File
@@ -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))
+1 -5
View File
@@ -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())
+1 -1
View File
@@ -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")
-3
View File
@@ -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
-2
View File
@@ -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",
+1 -1
View File
@@ -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)
+2 -2
View File
@@ -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))
-33
View File
@@ -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)
-2
View File
@@ -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'
-23
View File
@@ -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)
+2 -2
View File
@@ -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
+3 -2
View File
@@ -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)
+3 -1
View File
@@ -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"
+7 -6
View File
@@ -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
+1 -1
View File
@@ -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"
+4 -4
View File
@@ -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)
+1 -1
View File
@@ -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"
-24
View File
@@ -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"
+1 -2
View File
@@ -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
+9 -11
View File
@@ -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),
+1 -1
View File
@@ -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
-4
View File
@@ -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
+1
View File
@@ -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
+10 -9
View File
@@ -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