mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-22 19:47:22 +01:00
Merge remote-tracking branch 'ParadiseSS13/master' into multi-instance-support
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.
|
||||
|
||||
@@ -599,6 +599,20 @@ CREATE TABLE `2fa_secrets` (
|
||||
PRIMARY KEY (`ckey`) USING BTREE
|
||||
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `pai_saves`
|
||||
--
|
||||
CREATE TABLE `pai_saves` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`pai_name` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`description` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`preferred_role` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`ooc_comments` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `ckey` (`ckey`) USING BTREE
|
||||
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;
|
||||
|
||||
--
|
||||
-- Table structure for table `instance_data_cache`
|
||||
--
|
||||
|
||||
+12
-10
@@ -1,11 +1,13 @@
|
||||
# Updates DB from 25 to 26 -AffectedArc07
|
||||
# Adds a new table for instance data caching, and server_id fields on other tables
|
||||
# NOTE: If this line makes it into the final PR I will be upset with myself
|
||||
# Updates DB from 25-25, -AffectedArc07
|
||||
# Adds a pAI saves table to the DB
|
||||
|
||||
CREATE TABLE `instance_data_cache` (
|
||||
`server_id` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`key_name` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`key_value` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`last_updated` TIMESTAMP NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
|
||||
PRIMARY KEY (`server_id`, `key_name`) USING HASH
|
||||
) COLLATE='utf8mb4_general_ci' ENGINE=MEMORY;
|
||||
CREATE TABLE `pai_saves` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`ckey` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`pai_name` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`description` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`preferred_role` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
`ooc_comments` LONGTEXT NULL DEFAULT NULL COLLATE 'utf8mb4_general_ci',
|
||||
PRIMARY KEY (`id`) USING BTREE,
|
||||
UNIQUE INDEX `ckey` (`ckey`) USING BTREE
|
||||
) COLLATE='utf8mb4_general_ci' ENGINE=InnoDB;
|
||||
|
||||
+313
-1112
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
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -77,13 +77,12 @@
|
||||
for(var/geartype in subtypesof(/datum/gear))
|
||||
var/datum/gear/G = geartype
|
||||
|
||||
var/use_name = initial(G.display_name)
|
||||
var/use_category = initial(G.sort_category)
|
||||
|
||||
if(G == initial(G.subtype_path))
|
||||
if(G == initial(G.main_typepath))
|
||||
continue
|
||||
|
||||
if(!use_name)
|
||||
if(!initial(G.display_name))
|
||||
stack_trace("Loadout - Missing display name: [G]")
|
||||
continue
|
||||
if(!initial(G.cost))
|
||||
@@ -96,8 +95,8 @@
|
||||
if(!GLOB.loadout_categories[use_category])
|
||||
GLOB.loadout_categories[use_category] = new /datum/loadout_category(use_category)
|
||||
var/datum/loadout_category/LC = GLOB.loadout_categories[use_category]
|
||||
GLOB.gear_datums[use_name] = new geartype
|
||||
LC.gear[use_name] = GLOB.gear_datums[use_name]
|
||||
GLOB.gear_datums[geartype] = new geartype
|
||||
LC.gear[geartype] = GLOB.gear_datums[geartype]
|
||||
|
||||
GLOB.loadout_categories = sortAssoc(GLOB.loadout_categories)
|
||||
for(var/loadout_category in GLOB.loadout_categories)
|
||||
|
||||
@@ -16,6 +16,10 @@
|
||||
if(default) return default
|
||||
if(List && List.len)return pick(List)
|
||||
|
||||
/proc/sanitize_json(json_input)
|
||||
if(length(json_input) && istext(json_input))
|
||||
return json_decode(json_input)
|
||||
return list()
|
||||
|
||||
|
||||
//more specialised stuff
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -7,6 +7,8 @@
|
||||
var/forward_all_ahelps = TRUE
|
||||
/// Admin role to ping if no admins are online. Disables if empty string
|
||||
var/admin_role_id = ""
|
||||
/// Mentor role to ping if no mentors are online. Disables if empty string
|
||||
var/mentor_role_id = ""
|
||||
/// List of all URLs for the main webhooks
|
||||
var/list/main_webhook_urls = list()
|
||||
/// List of all URLs for the admin webhooks
|
||||
@@ -21,6 +23,7 @@
|
||||
CONFIG_LOAD_BOOL(webhooks_enabled, data["enable_discord_webhooks"])
|
||||
CONFIG_LOAD_BOOL(forward_all_ahelps, data["forward_all_ahelps"])
|
||||
CONFIG_LOAD_STR(admin_role_id, data["admin_role_id"])
|
||||
CONFIG_LOAD_STR(mentor_role_id, data["mentor_role_id"])
|
||||
CONFIG_LOAD_LIST(main_webhook_urls, data["main_webhook_urls"])
|
||||
CONFIG_LOAD_LIST(mentor_webhook_urls, data["mentor_webhook_urls"])
|
||||
CONFIG_LOAD_LIST(admin_webhook_urls, data["admin_webhook_urls"])
|
||||
|
||||
@@ -5,6 +5,8 @@ SUBSYSTEM_DEF(discord)
|
||||
var/enabled = FALSE
|
||||
/// Last time the administrator ping was dropped. This ensures administrators cannot be mass pinged if a large chunk of ahelps go off at once (IE: tesloose)
|
||||
var/last_administration_ping = 0
|
||||
/// Last time the mentor ping was dropped. This ensures mentors cannot be mass pinged if a large chunk of mhelps go off at once.
|
||||
var/last_mentor_ping = 0
|
||||
|
||||
/datum/controller/subsystem/discord/Initialize(start_timeofday)
|
||||
if(GLOB.configuration.discord.webhooks_enabled)
|
||||
@@ -75,6 +77,27 @@ SUBSYSTEM_DEF(discord)
|
||||
for(var/url in GLOB.configuration.discord.admin_webhook_urls)
|
||||
SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, url, dwp.serialize2json(), list("content-type" = "application/json"))
|
||||
|
||||
/datum/controller/subsystem/discord/proc/send2discord_simple_mentor(content)
|
||||
var/alerttext
|
||||
var/list/mentorcounter = staff_countup(R_MENTOR)
|
||||
var/active_mentors = mentorcounter[1]
|
||||
var/inactive_mentors = mentorcounter[3]
|
||||
var/add_ping = FALSE
|
||||
|
||||
if(active_mentors <= 0)
|
||||
add_ping = TRUE
|
||||
if(inactive_mentors)
|
||||
alerttext = "| **ALL MENTORS AFK**"
|
||||
else
|
||||
alerttext = "| **NO MENTORS ONLINE**"
|
||||
|
||||
var/message = "[content] [alerttext][add_ping ? handle_mentor_ping() : ""]"
|
||||
|
||||
var/datum/discord_webhook_payload/dwp = new()
|
||||
dwp.webhook_content = message
|
||||
for(var/url in GLOB.configuration.discord.mentor_webhook_urls)
|
||||
SShttp.create_async_request(RUSTG_HTTP_METHOD_POST, url, dwp.serialize2json(), list("content-type" = "application/json"))
|
||||
|
||||
// Helper to make administrator ping easier
|
||||
/datum/controller/subsystem/discord/proc/handle_administrator_ping()
|
||||
// Check if a role is even set
|
||||
@@ -86,3 +109,13 @@ SUBSYSTEM_DEF(discord)
|
||||
return "<@&[GLOB.configuration.discord.admin_role_id]>"
|
||||
|
||||
return ""
|
||||
|
||||
/datum/controller/subsystem/discord/proc/handle_mentor_ping()
|
||||
if(GLOB.configuration.discord.mentor_role_id)
|
||||
if(last_mentor_ping > world.time)
|
||||
return " *(Role pinged recently)*"
|
||||
|
||||
last_mentor_ping = world.time + 60 SECONDS
|
||||
return " <@&[GLOB.configuration.discord.mentor_role_id]>"
|
||||
|
||||
return ""
|
||||
|
||||
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)
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
var/list/stage5 = list("Oh the humanity!")
|
||||
var/transformation_text = null
|
||||
var/new_form = /mob/living/carbon/human
|
||||
var/job_role = null
|
||||
|
||||
/datum/disease/transformation/stage_act()
|
||||
..()
|
||||
@@ -40,8 +41,8 @@
|
||||
if(istype(affected_mob, /mob/living/carbon) && affected_mob.stat != DEAD)
|
||||
if(stage5)
|
||||
to_chat(affected_mob, pick(stage5))
|
||||
if(jobban_isbanned(affected_mob, new_form))
|
||||
affected_mob.death(1)
|
||||
if(jobban_isbanned(affected_mob, job_role))
|
||||
affected_mob.death()
|
||||
return
|
||||
if(affected_mob.notransform)
|
||||
return
|
||||
@@ -133,6 +134,7 @@
|
||||
stage4 = list("<span class='danger'>Your skin feels very loose.</span>", "<span class='danger'>You can feel... something...inside you.</span>")
|
||||
stage5 = list("<span class='danger'>Your skin feels as if it's about to burst off!</span>")
|
||||
new_form = /mob/living/silicon/robot
|
||||
job_role = "Cyborg"
|
||||
|
||||
|
||||
/datum/disease/transformation/robot/stage_act()
|
||||
@@ -165,6 +167,7 @@
|
||||
stage4 = list("<span class='danger'>Your skin feels very tight.</span>", "<span class='danger'>Your blood boils!</span>", "<span class='danger'>You can feel... something...inside you.</span>")
|
||||
stage5 = list("<span class='danger'>Your skin feels as if it's about to burst off!</span>")
|
||||
new_form = /mob/living/carbon/alien/humanoid/hunter
|
||||
job_role = ROLE_ALIEN
|
||||
|
||||
/datum/disease/transformation/xeno/stage_act()
|
||||
..()
|
||||
@@ -248,3 +251,4 @@
|
||||
stage5 = list("<span class='danger'>You have become a morph.</span>")
|
||||
transformation_text = "<span class='userdanger'>This transformation does NOT make you an antagonist if you were not one already. If you were not an antagonist, you should not eat any steal objectives or the contents of the armory.</span>"
|
||||
new_form = /mob/living/simple_animal/hostile/morph
|
||||
job_role = ROLE_MORPH
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -96,10 +96,10 @@
|
||||
invocation_type = "none"
|
||||
action_icon_state = "vampire_bats"
|
||||
|
||||
shapeshift_type = /mob/living/simple_animal/hostile/scarybat/batswarm
|
||||
current_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm)
|
||||
shapeshift_type = /mob/living/simple_animal/hostile/scarybat/adminvampire
|
||||
current_shapes = list(/mob/living/simple_animal/hostile/scarybat/adminvampire)
|
||||
current_casters = list()
|
||||
possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/batswarm)
|
||||
possible_shapes = list(/mob/living/simple_animal/hostile/scarybat/adminvampire)
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/shapeshift/hellhound
|
||||
name = "Lesser Hellhound Form"
|
||||
|
||||
@@ -55,10 +55,6 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY
|
||||
var/list/announce_beacons = list() // Particular beacons that we'll notify the relevant department when we reach
|
||||
var/special = FALSE //Event/Station Goals/Admin enabled packs
|
||||
var/special_enabled = FALSE
|
||||
/// The number of times one can order a cargo crate, before it becomes restricted. -1 for infinite
|
||||
var/order_limit = -1
|
||||
/// Number of times a crate has been ordered in a shift
|
||||
var/times_ordered = 0
|
||||
/// List of names for being done in TGUI
|
||||
var/list/ui_manifest = list()
|
||||
|
||||
@@ -197,15 +193,6 @@ GLOBAL_LIST_INIT(all_supply_groups, list(SUPPLY_EMERGENCY,SUPPLY_SECURITY,SUPPLY
|
||||
containername = "special ops crate"
|
||||
hidden = 1
|
||||
|
||||
/datum/supply_packs/emergency/syndicate
|
||||
name = "ERROR_NULL_ENTRY"
|
||||
contains = list(/obj/item/storage/box/syndicate)
|
||||
cost = 140
|
||||
containertype = /obj/structure/closet/crate
|
||||
containername = "crate"
|
||||
hidden = 1
|
||||
order_limit = 5
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
//////////////////////////// Security ////////////////////////////////////////
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -175,7 +175,7 @@
|
||||
|
||||
if(allow_loadout && H.client && length(H.client.prefs.active_character.loadout_gear))
|
||||
for(var/gear in H.client.prefs.active_character.loadout_gear)
|
||||
var/datum/gear/G = GLOB.gear_datums[gear]
|
||||
var/datum/gear/G = GLOB.gear_datums[text2path(gear) || gear]
|
||||
if(G)
|
||||
var/permitted = FALSE
|
||||
|
||||
@@ -185,16 +185,13 @@
|
||||
else
|
||||
permitted = TRUE
|
||||
|
||||
if(G.whitelisted && (G.whitelisted != H.dna.species.name || !is_alien_whitelisted(H, G.whitelisted)))
|
||||
permitted = FALSE
|
||||
|
||||
if(!permitted)
|
||||
to_chat(H, "<span class='warning'>Your current job or whitelist status does not permit you to spawn with [gear]!</span>")
|
||||
to_chat(H, "<span class='warning'>Your current job or whitelist status does not permit you to spawn with [G.display_name]!</span>")
|
||||
continue
|
||||
|
||||
if(G.slot)
|
||||
if(H.equip_to_slot_or_del(G.spawn_item(H), G.slot, TRUE))
|
||||
to_chat(H, "<span class='notice'>Equipping you with [gear]!</span>")
|
||||
to_chat(H, "<span class='notice'>Equipping you with [G.display_name]!</span>")
|
||||
else
|
||||
gear_leftovers += G
|
||||
else
|
||||
@@ -217,7 +214,7 @@
|
||||
if(isturf(placed_in))
|
||||
to_chat(H, "<span class='notice'>Placing [G.display_name] on [placed_in]!</span>")
|
||||
else
|
||||
to_chat(H, "<span class='notice'>Placing [G.display_name] in [placed_in.name].</span>")
|
||||
to_chat(H, "<span class='notice'>Placing [G.display_name] in your [placed_in.name].</span>")
|
||||
continue
|
||||
if(H.equip_to_appropriate_slot(G))
|
||||
to_chat(H, "<span class='notice'>Placing [G.display_name] in your inventory!</span>")
|
||||
|
||||
@@ -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"
|
||||
))
|
||||
|
||||
|
||||
|
||||
@@ -48,7 +48,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
var/obj/effect/countdown/clonepod/countdown
|
||||
|
||||
var/list/brine_types = list("corazone", "perfluorodecalin", "epinephrine", "salglu_solution") //stops heart attacks, heart failure, shock, and keeps their O2 levels normal
|
||||
var/list/missing_organs
|
||||
var/list/missing_organs = list()
|
||||
var/organs_number = 0
|
||||
|
||||
light_color = LIGHT_COLOR_PURE_GREEN
|
||||
@@ -338,9 +338,9 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
progress += (100 - MINIMUM_HEAL_LEVEL)
|
||||
var/milestone = CLONE_INITIAL_DAMAGE / organs_number
|
||||
// Doing this as a #define so that the value can change when evaluated multiple times
|
||||
#define INSTALLED (organs_number - LAZYLEN(missing_organs))
|
||||
#define INSTALLED (organs_number - length(missing_organs))
|
||||
|
||||
while((progress / milestone) > INSTALLED && LAZYLEN(missing_organs))
|
||||
while((progress / milestone) > INSTALLED && length(missing_organs))
|
||||
var/obj/item/organ/I = pick_n_take(missing_organs)
|
||||
I.safe_replace(occupant)
|
||||
|
||||
@@ -494,9 +494,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
clonemind = null
|
||||
|
||||
|
||||
for(var/i in missing_organs)
|
||||
qdel(i)
|
||||
missing_organs.Cut()
|
||||
QDEL_LIST(missing_organs)
|
||||
occupant.SetLoseBreath(0) // Stop friggin' dying, gosh damn
|
||||
occupant.setOxyLoss(0)
|
||||
for(var/datum/disease/critical/crit in occupant.viruses)
|
||||
@@ -523,9 +521,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
message += "<i>Is this what dying is like? Yes it is.</i>"
|
||||
to_chat(occupant, "<span class='warning'>[message]</span>")
|
||||
SEND_SOUND(occupant, sound('sound/hallucinations/veryfar_noise.ogg', 0, 1, 50))
|
||||
for(var/i in missing_organs)
|
||||
qdel(i)
|
||||
missing_organs.Cut()
|
||||
QDEL_LIST(missing_organs)
|
||||
clonemind = null
|
||||
spawn(40)
|
||||
qdel(occupant)
|
||||
@@ -577,10 +573,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
malfunction(go_easy = TRUE)
|
||||
|
||||
/obj/machinery/clonepod/proc/maim_clone(mob/living/carbon/human/H)
|
||||
LAZYINITLIST(missing_organs)
|
||||
for(var/i in missing_organs)
|
||||
qdel(i)
|
||||
missing_organs.Cut()
|
||||
QDEL_LIST(missing_organs)
|
||||
|
||||
H.setCloneLoss(CLONE_INITIAL_DAMAGE, FALSE)
|
||||
H.setBrainLoss(BRAIN_INITIAL_DAMAGE)
|
||||
@@ -604,7 +597,7 @@ GLOBAL_LIST_INIT(cloner_biomass_items, list(\
|
||||
I.forceMove(src)
|
||||
missing_organs += I
|
||||
|
||||
organs_number = LAZYLEN(missing_organs)
|
||||
organs_number = length(missing_organs)
|
||||
H.updatehealth()
|
||||
|
||||
/obj/machinery/clonepod/proc/check_brine()
|
||||
|
||||
@@ -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
|
||||
)
|
||||
|
||||
@@ -261,7 +261,7 @@
|
||||
icon_state = "oldcomp"
|
||||
icon_screen = "library"
|
||||
icon_keyboard = null
|
||||
name = "DoorMex Control Computer"
|
||||
name = "\improper DoorMex control computer"
|
||||
circuit = /obj/item/circuitboard/olddoor
|
||||
|
||||
|
||||
@@ -343,7 +343,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/deathsquad_tele
|
||||
name = "Mech Teleporter"
|
||||
name = "mech teleporter"
|
||||
density = 0
|
||||
anchored = 1
|
||||
icon = 'icons/obj/stationobjs.dmi'
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -178,6 +178,8 @@ About the new airlock wires panel:
|
||||
if(SSradio)
|
||||
SSradio.remove_object(src, frequency)
|
||||
radio_connection = null
|
||||
for(var/datum/atom_hud/data/diagnostic/diag_hud in GLOB.huds)
|
||||
diag_hud.remove_from_hud(src)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/door/airlock/handle_atom_del(atom/A)
|
||||
|
||||
@@ -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
|
||||
@@ -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,15 +98,12 @@
|
||||
/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
|
||||
mask_type = /obj/item/clothing/mask/gas/sechailer/hos
|
||||
req_access = list(ACCESS_HOS)
|
||||
|
||||
|
||||
/obj/machinery/suit_storage_unit/security/hos/secure
|
||||
secure = TRUE
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -1120,10 +1120,26 @@
|
||||
ads_list = list("Probably not bad for you!","Don't believe the scientists!","It's good for you!","Don't quit, buy more!","Smoke!","Nicotine heaven.","Best cigarettes since 2150.","Award-winning cigs.")
|
||||
vend_delay = 34
|
||||
icon_state = "cigs"
|
||||
products = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 12, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 6, /obj/item/storage/fancy/cigarettes/cigpack_random = 6, /obj/item/reagent_containers/food/pill/patch/nicotine = 10, /obj/item/storage/box/matches = 10,/obj/item/lighter/random = 4,/obj/item/storage/fancy/rollingpapers = 5)
|
||||
products = list(
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_robust = 12,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_uplift = 6,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_midori = 6,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_random = 6,
|
||||
/obj/item/reagent_containers/food/pill/patch/nicotine = 10,
|
||||
/obj/item/storage/box/matches = 10,
|
||||
/obj/item/lighter/random = 4,
|
||||
/obj/item/storage/fancy/rollingpapers = 5)
|
||||
contraband = list(/obj/item/lighter/zippo = 4)
|
||||
premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2, /obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1)
|
||||
prices = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 60, /obj/item/storage/fancy/cigarettes/cigpack_uplift = 80, /obj/item/storage/fancy/cigarettes/cigpack_random = 120, /obj/item/reagent_containers/food/pill/patch/nicotine = 70, /obj/item/storage/box/matches = 10,/obj/item/lighter/random = 60, /obj/item/storage/fancy/rollingpapers = 20)
|
||||
premium = list(/obj/item/clothing/mask/cigarette/cigar/havana = 2,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_robustgold = 1)
|
||||
prices = list(/obj/item/storage/fancy/cigarettes/cigpack_robust = 60,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_uplift = 80,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_midori = 100,
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_random = 120,
|
||||
/obj/item/reagent_containers/food/pill/patch/nicotine = 70,
|
||||
/obj/item/storage/box/matches = 10,
|
||||
/obj/item/lighter/random = 60,
|
||||
/obj/item/storage/fancy/rollingpapers = 20)
|
||||
refill_canister = /obj/item/vending_refill/cigarette
|
||||
|
||||
/obj/machinery/vending/cigarette/free
|
||||
@@ -1798,7 +1814,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,
|
||||
|
||||
@@ -148,7 +148,7 @@
|
||||
//////////////////////////// ARMOR BOOSTER MODULES //////////////////////////////////////////////////////////
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/anticcw_armor_booster //what is that noise? A BAWWW from TK mutants.
|
||||
name = "Armor Booster Module (Close Combat Weaponry)"
|
||||
name = "armor booster module (Close combat weaponry)"
|
||||
desc = "Boosts exosuit armor against armed melee attacks. Requires energy to operate."
|
||||
icon_state = "mecha_abooster_ccw"
|
||||
origin_tech = "materials=4;combat=4"
|
||||
@@ -166,7 +166,7 @@
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/antiproj_armor_booster
|
||||
name = "Armor Booster Module (Ranged Weaponry)"
|
||||
name = "armor booster module (Ranged weaponry)"
|
||||
desc = "Boosts exosuit armor against ranged attacks. Completely blocks taser shots. Requires energy to operate."
|
||||
icon_state = "mecha_abooster_proj"
|
||||
origin_tech = "materials=4;combat=3;engineering=3"
|
||||
@@ -186,7 +186,7 @@
|
||||
////////////////////////////////// REPAIR DROID //////////////////////////////////////////////////
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/repair_droid
|
||||
name = "Repair Droid"
|
||||
name = "repair droid"
|
||||
desc = "Automated repair droid. Scans exosuit for damage and repairs it. Can fix almost all types of external or internal damage."
|
||||
icon_state = "repair_droid"
|
||||
origin_tech ="magnets=3;programming=3;engineering=4"
|
||||
|
||||
@@ -193,7 +193,7 @@
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/rcd
|
||||
name = "Mounted RCD"
|
||||
name = "mounted RCD"
|
||||
desc = "An exosuit-mounted Rapid Construction Device. (Can be attached to: Any exosuit)"
|
||||
icon_state = "mecha_rcd"
|
||||
origin_tech = "materials=4;bluespace=3;magnets=4;powerstorage=4;engineering=4"
|
||||
|
||||
@@ -64,12 +64,12 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy
|
||||
name = "General Energy Weapon"
|
||||
name = "general energy weapon"
|
||||
size = 2
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser
|
||||
equip_cooldown = 8
|
||||
name = "CH-PS \"Firedart\" Laser"
|
||||
name = "\improper CH-PS \"Firedart\" Laser"
|
||||
icon_state = "mecha_laser"
|
||||
origin_tech = "magnets=3;combat=3;engineering=3"
|
||||
energy_drain = 30
|
||||
@@ -78,7 +78,7 @@
|
||||
harmful = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/disabler
|
||||
name = "CH-PD Disabler"
|
||||
name = "\improper CH-PD Disabler"
|
||||
origin_tech = "combat=3"
|
||||
projectile = /obj/item/projectile/beam/disabler
|
||||
projectiles_per_shot = 2
|
||||
@@ -87,7 +87,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/heavy
|
||||
equip_cooldown = 10
|
||||
name = "CH-LC \"Solaris\" Laser Cannon"
|
||||
name = "\improper CH-LC \"Solaris\" Laser Cannon"
|
||||
icon_state = "mecha_laser"
|
||||
origin_tech = "magnets=4;combat=4;engineering=3"
|
||||
energy_drain = 60
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/tesla
|
||||
equip_cooldown = 35
|
||||
name = "P-X Tesla Cannon"
|
||||
name = "\improper P-X Tesla Cannon"
|
||||
desc = "A weapon for combat exosuits. Fires bolts of electricity similar to the experimental tesla engine"
|
||||
icon_state = "mecha_laser"
|
||||
origin_tech = "materials=4;engineering=4;combat=6;magnets=6"
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/xray
|
||||
equip_cooldown = 35
|
||||
name = "S-1 X-Ray Projector"
|
||||
name = "\improper S-1 X-Ray Projector"
|
||||
desc = "A weapon for combat exosuits. Fires beams of X-Rays that pass through solid matter."
|
||||
icon_state = "mecha_laser"
|
||||
origin_tech = "materials=3;combat=5;magnets=2;syndicate=2"
|
||||
@@ -126,13 +126,13 @@
|
||||
harmful = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/xray/triple
|
||||
name = "X-XR Triple-barrel X-Ray Stream Projector"
|
||||
name = "\improper X-XR Triple-barrel X-Ray Stream Projector"
|
||||
projectiles_per_shot = 3
|
||||
projectile_delay = 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/immolator
|
||||
equip_cooldown = 35
|
||||
name = "ZFI Immolation Beam Gun"
|
||||
name = "\improper ZFI Immolation Beam Gun"
|
||||
desc = "A weapon for combat exosuits. Fires beams of extreme heat that set targets on fire."
|
||||
icon_state = "mecha_laser"
|
||||
origin_tech = "materials=4;engineering=4;combat=6;magnets=6"
|
||||
@@ -143,7 +143,7 @@
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/pulse
|
||||
equip_cooldown = 30
|
||||
name = "eZ-13 mk2 Heavy pulse rifle"
|
||||
name = "eZ-13 mk2 Heavy Pulse Rifle"
|
||||
icon_state = "mecha_pulse"
|
||||
energy_drain = 120
|
||||
origin_tech = "materials=3;combat=6;powerstorage=4"
|
||||
@@ -172,7 +172,7 @@
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/energy/taser
|
||||
name = "PBT \"Pacifier\" Mounted Taser"
|
||||
name = "\improper PBT \"Pacifier\" Mounted Taser"
|
||||
icon_state = "mecha_taser"
|
||||
origin_tech = "combat=3"
|
||||
energy_drain = 20
|
||||
@@ -182,7 +182,7 @@
|
||||
size = 1
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/honker
|
||||
name = "HoNkER BlAsT 5000"
|
||||
name = "\improper HoNkER BlAsT 5000"
|
||||
icon_state = "mecha_honker"
|
||||
energy_drain = 200
|
||||
equip_cooldown = 150
|
||||
@@ -242,7 +242,7 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic
|
||||
name = "General Ballisic Weapon"
|
||||
name = "general ballisic weapon"
|
||||
size = 2
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/action_checks(atom/target)
|
||||
if(..())
|
||||
@@ -272,7 +272,7 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/carbine
|
||||
name = "FNX-66 Carbine"
|
||||
name = "\improper FNX-66 Carbine"
|
||||
icon_state = "mecha_carbine"
|
||||
origin_tech = "materials=4;combat=4"
|
||||
equip_cooldown = 5
|
||||
@@ -298,7 +298,7 @@
|
||||
return 0
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/scattershot
|
||||
name = "LBX AC 10 \"Scattershot\""
|
||||
name = "\improper LBX AC 10 \"Scattershot\""
|
||||
icon_state = "mecha_scatter"
|
||||
origin_tech = "combat=4"
|
||||
equip_cooldown = 20
|
||||
@@ -311,7 +311,7 @@
|
||||
harmful = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg
|
||||
name = "Ultra AC 2"
|
||||
name = "\improper Ultra AC 2"
|
||||
icon_state = "mecha_uac2"
|
||||
origin_tech = "combat=4"
|
||||
equip_cooldown = 10
|
||||
@@ -325,11 +325,11 @@
|
||||
harmful = TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/lmg/dual
|
||||
name = "XMG-9 Autocannon"
|
||||
name = "\improper XMG-9 Autocannon"
|
||||
projectiles_per_shot = 6
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack
|
||||
name = "SRM-8 Light Missile Rack"
|
||||
name = "\improper SRM-8 Light Missile Rack"
|
||||
icon_state = "mecha_missilerack"
|
||||
origin_tech = "combat=5;materials=4;engineering=4"
|
||||
projectile = /obj/item/missile
|
||||
@@ -361,7 +361,7 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/heavy
|
||||
name = "SRX-13 Heavy Missile Launcher"
|
||||
name = "\improper SRX-13 Heavy Missile Launcher"
|
||||
heavy_missile = 1
|
||||
|
||||
/obj/item/missile
|
||||
@@ -383,7 +383,7 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang
|
||||
name = "SGL-6 Flashbang Launcher"
|
||||
name = "\improper SGL-6 Flashbang Launcher"
|
||||
icon_state = "mecha_grenadelnchr"
|
||||
origin_tech = "combat=4;engineering=4"
|
||||
projectile = /obj/item/grenade/flashbang
|
||||
@@ -409,7 +409,7 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/flashbang/clusterbang//Because I am a heartless bastard -Sieve
|
||||
name = "SOB-3 Clusterbang Launcher"
|
||||
name = "\improper SOB-3 Clusterbang Launcher"
|
||||
desc = "A weapon for combat exosuits. Launches primed clusterbangs. You monster."
|
||||
origin_tech = "combat=4;materials=4"
|
||||
projectiles = 3
|
||||
@@ -425,7 +425,7 @@
|
||||
return//Extra bit of security
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/banana_mortar
|
||||
name = "Banana Mortar"
|
||||
name = "banana mortar"
|
||||
icon_state = "mecha_bananamrtr"
|
||||
projectile = /obj/item/grown/bananapeel
|
||||
fire_sound = 'sound/items/bikehorn.ogg'
|
||||
@@ -455,7 +455,7 @@
|
||||
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/mousetrap_mortar
|
||||
name = "Mousetrap Mortar"
|
||||
name = "mousetrap mortar"
|
||||
icon_state = "mecha_mousetrapmrtr"
|
||||
projectile = /obj/item/assembly/mousetrap
|
||||
fire_sound = 'sound/items/bikehorn.ogg'
|
||||
@@ -485,7 +485,7 @@
|
||||
return
|
||||
|
||||
/obj/item/mecha_parts/mecha_equipment/weapon/ballistic/missile_rack/bola
|
||||
name = "PCMK-6 Bola Launcher"
|
||||
name = "\improper PCMK-6 Bola Launcher"
|
||||
icon_state = "mecha_bola"
|
||||
origin_tech = "combat=4;engineering=4"
|
||||
projectile = /obj/item/restraints/legcuffs/bola
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/turf/simulated/floor/mech_bay_recharge_floor
|
||||
name = "Mech Bay Recharge Station"
|
||||
name = "mech bay recharge station"
|
||||
icon = 'icons/mecha/mech_bay.dmi'
|
||||
icon_state = "recharge_floor"
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
temperature = TCMB
|
||||
|
||||
/obj/machinery/mech_bay_recharge_port
|
||||
name = "Mech Bay Power Port"
|
||||
name = "mech bay power port"
|
||||
density = 1
|
||||
anchored = 1
|
||||
dir = EAST
|
||||
|
||||
@@ -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
|
||||
*
|
||||
|
||||
@@ -69,7 +69,7 @@
|
||||
return TRUE
|
||||
|
||||
/obj/item/mecha_parts/mecha_tracking
|
||||
name = "Exosuit tracking beacon"
|
||||
name = "exosuit tracking beacon"
|
||||
desc = "Device used to transmit exosuit data."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "motion2"
|
||||
@@ -174,7 +174,7 @@
|
||||
ai_beacon = TRUE
|
||||
|
||||
/obj/item/storage/box/mechabeacons
|
||||
name = "Exosuit Tracking Beacons"
|
||||
name = "exosuit tracking beacons"
|
||||
|
||||
/obj/item/storage/box/mechabeacons/New()
|
||||
..()
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
|
||||
/obj/item/mecha_parts/chassis
|
||||
name="Mecha Chassis"
|
||||
name = "mecha chassis"
|
||||
icon_state = "backbone"
|
||||
var/datum/construction/construct
|
||||
flags = CONDUCT
|
||||
@@ -31,83 +31,83 @@
|
||||
/////////// Ripley
|
||||
|
||||
/obj/item/mecha_parts/chassis/ripley
|
||||
name = "Ripley Chassis"
|
||||
name = "\improper Ripley chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/ripley/New()
|
||||
..()
|
||||
construct = new /datum/construction/mecha/ripley_chassis(src)
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_torso
|
||||
name="Ripley Torso"
|
||||
desc="A torso part of Ripley APLU. Contains power unit, processing core and life support systems."
|
||||
name = "\improper Ripley torso"
|
||||
desc = "A torso part of Ripley APLU. Contains power unit, processing core and life support systems."
|
||||
icon_state = "ripley_harness"
|
||||
origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_left_arm
|
||||
name="Ripley Left Arm"
|
||||
desc="A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools."
|
||||
name = "\improper Ripley left arm"
|
||||
desc = "A Ripley APLU left arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "ripley_l_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_right_arm
|
||||
name="Ripley Right Arm"
|
||||
desc="A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools."
|
||||
name = "\improper Ripley right arm"
|
||||
desc = "A Ripley APLU right arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "ripley_r_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_left_leg
|
||||
name="Ripley Left Leg"
|
||||
desc="A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
name = "\improper Ripley left leg"
|
||||
desc = "A Ripley APLU left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "ripley_l_leg"
|
||||
|
||||
/obj/item/mecha_parts/part/ripley_right_leg
|
||||
name="Ripley Right Leg"
|
||||
desc="A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
name = "\improper Ripley right leg"
|
||||
desc = "A Ripley APLU right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "ripley_r_leg"
|
||||
|
||||
///////// Gygax
|
||||
|
||||
/obj/item/mecha_parts/chassis/gygax
|
||||
name = "Gygax Chassis"
|
||||
name = "\improper Gygax chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/gygax/New()
|
||||
..()
|
||||
construct = new /datum/construction/mecha/gygax_chassis(src)
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_torso
|
||||
name="Gygax Torso"
|
||||
desc="A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot."
|
||||
name = "\improper Gygax torso"
|
||||
desc = "A torso part of Gygax. Contains power unit, processing core and life support systems. Has an additional equipment slot."
|
||||
icon_state = "gygax_harness"
|
||||
origin_tech = "programming=2;materials=4;biotech=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_head
|
||||
name="Gygax Head"
|
||||
desc="A Gygax head. Houses advanced surveilance and targeting sensors."
|
||||
name = "\improper Gygax head"
|
||||
desc = "A Gygax head. Houses advanced surveilance and targeting sensors."
|
||||
icon_state = "gygax_head"
|
||||
origin_tech = "programming=2;materials=4;magnets=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_left_arm
|
||||
name="Gygax Left Arm"
|
||||
desc="A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
name = "\improper Gygax left arm"
|
||||
desc = "A Gygax left arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
icon_state = "gygax_l_arm"
|
||||
origin_tech = "programming=2;materials=4;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_right_arm
|
||||
name="Gygax Right Arm"
|
||||
desc="A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
name = "\improper Gygax right arm"
|
||||
desc = "A Gygax right arm. Data and power sockets are compatible with most exosuit tools and weapons."
|
||||
icon_state = "gygax_r_arm"
|
||||
origin_tech = "programming=2;materials=4;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_left_leg
|
||||
name="Gygax Left Leg"
|
||||
name = "\improper Gygax left leg"
|
||||
icon_state = "gygax_l_leg"
|
||||
origin_tech = "programming=2;materials=4;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_right_leg
|
||||
name="Gygax Right Leg"
|
||||
name = "\improper Gygax right leg"
|
||||
icon_state = "gygax_r_leg"
|
||||
origin_tech = "programming=2;materials=4;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/gygax_armour
|
||||
name="Gygax Armour Plates"
|
||||
name = "\improper Gygax armour plates"
|
||||
icon_state = "gygax_armour"
|
||||
origin_tech = "materials=6;combat=4;engineering=4"
|
||||
|
||||
@@ -115,44 +115,44 @@
|
||||
//////////// Durand
|
||||
|
||||
/obj/item/mecha_parts/chassis/durand
|
||||
name = "Durand Chassis"
|
||||
name = "\improper Durand chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/durand/New()
|
||||
..()
|
||||
construct = new /datum/construction/mecha/durand_chassis(src)
|
||||
|
||||
/obj/item/mecha_parts/part/durand_torso
|
||||
name="Durand Torso"
|
||||
name = "\improper Durand torso"
|
||||
icon_state = "durand_harness"
|
||||
origin_tech = "programming=2;materials=3;biotech=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/durand_head
|
||||
name="Durand Head"
|
||||
name = "\improper Durand head"
|
||||
icon_state = "durand_head"
|
||||
origin_tech = "programming=2;materials=3;magnets=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/durand_left_arm
|
||||
name="Durand Left Arm"
|
||||
name = "\improper Durand left arm"
|
||||
icon_state = "durand_l_arm"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/durand_right_arm
|
||||
name="Durand Right Arm"
|
||||
name = "\improper Durand right arm"
|
||||
icon_state = "durand_r_arm"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/durand_left_leg
|
||||
name="Durand Left Leg"
|
||||
name = "\improper Durand left leg"
|
||||
icon_state = "durand_l_leg"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/durand_right_leg
|
||||
name="Durand Right Leg"
|
||||
name = "\improper Durand right leg"
|
||||
icon_state = "durand_r_leg"
|
||||
origin_tech = "programming=2;materials=3;engineering=3"
|
||||
|
||||
/obj/item/mecha_parts/part/durand_armor
|
||||
name="Durand Armour Plates"
|
||||
name = "\improper Durand armour plates"
|
||||
icon_state = "durand_armor"
|
||||
origin_tech = "materials=5;combat=4;engineering=4"
|
||||
|
||||
@@ -161,7 +161,7 @@
|
||||
////////// Firefighter
|
||||
|
||||
/obj/item/mecha_parts/chassis/firefighter
|
||||
name = "Firefighter Chassis"
|
||||
name = "\improper Firefighter chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/firefighter/New()
|
||||
..()
|
||||
@@ -170,41 +170,41 @@
|
||||
////////// HONK
|
||||
|
||||
/obj/item/mecha_parts/chassis/honker
|
||||
name = "H.O.N.K Chassis"
|
||||
name = "\improper H.O.N.K chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/honker/New()
|
||||
..()
|
||||
construct = new /datum/construction/mecha/honker_chassis(src)
|
||||
|
||||
/obj/item/mecha_parts/part/honker_torso
|
||||
name="H.O.N.K Torso"
|
||||
name = "\improper H.O.N.K torso"
|
||||
icon_state = "honker_harness"
|
||||
|
||||
/obj/item/mecha_parts/part/honker_head
|
||||
name="H.O.N.K Head"
|
||||
name = "\improper H.O.N.K head"
|
||||
icon_state = "honker_head"
|
||||
|
||||
/obj/item/mecha_parts/part/honker_left_arm
|
||||
name="H.O.N.K Left Arm"
|
||||
name = "\improper H.O.N.K left arm"
|
||||
icon_state = "honker_l_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/honker_right_arm
|
||||
name="H.O.N.K Right Arm"
|
||||
name = "\improper H.O.N.K right arm"
|
||||
icon_state = "honker_r_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/honker_left_leg
|
||||
name="H.O.N.K Left Leg"
|
||||
name = "\improper H.O.N.K left leg"
|
||||
icon_state = "honker_l_leg"
|
||||
|
||||
/obj/item/mecha_parts/part/honker_right_leg
|
||||
name="H.O.N.K Right Leg"
|
||||
name = "\improper H.O.N.K right leg"
|
||||
icon_state = "honker_r_leg"
|
||||
|
||||
|
||||
////////// Reticence
|
||||
|
||||
/obj/item/mecha_parts/chassis/reticence
|
||||
name = "Reticence Chassis"
|
||||
name = "\improper Reticence chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/reticence/New()
|
||||
..()
|
||||
@@ -226,34 +226,34 @@
|
||||
construct.action(new /obj/effect/dummy/mecha_emote_step(msg), M)
|
||||
|
||||
/obj/item/mecha_parts/part/reticence_torso
|
||||
name = "Reticence Torso"
|
||||
name = "\improper Reticence torso"
|
||||
icon_state = "reticence_harness"
|
||||
|
||||
/obj/item/mecha_parts/part/reticence_head
|
||||
name = "Reticence Head"
|
||||
name = "\improper Reticence head"
|
||||
icon_state = "reticence_head"
|
||||
|
||||
/obj/item/mecha_parts/part/reticence_left_arm
|
||||
name = "Reticence Left Arm"
|
||||
name = "\improper Reticence left arm"
|
||||
icon_state = "reticence_l_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/reticence_right_arm
|
||||
name = "Reticence Right Arm"
|
||||
name = "\improper Reticence right arm"
|
||||
icon_state = "reticence_r_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/reticence_left_leg
|
||||
name = "Reticence Left Leg"
|
||||
name = "\improper Reticence left leg"
|
||||
icon_state = "reticence_l_leg"
|
||||
|
||||
/obj/item/mecha_parts/part/reticence_right_leg
|
||||
name = "Reticence Right Leg"
|
||||
name = "\improper Reticence right leg"
|
||||
icon_state = "reticence_r_leg"
|
||||
|
||||
|
||||
////////// Phazon
|
||||
|
||||
/obj/item/mecha_parts/chassis/phazon
|
||||
name = "Phazon Chassis"
|
||||
name = "\improper Phazon chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/phazon/New()
|
||||
..()
|
||||
@@ -265,81 +265,81 @@
|
||||
to_chat(user, "<span class='warning'>The anomaly core socket only accepts bluespace anomaly cores!</span>")
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_torso
|
||||
name="Phazon Torso"
|
||||
name = "\improper Phazon torso"
|
||||
icon_state = "phazon_harness"
|
||||
origin_tech = "programming=4;materials=4;bluespace=4;plasmatech=5"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_head
|
||||
name="Phazon Head"
|
||||
name = "\improper Phazon head"
|
||||
icon_state = "phazon_head"
|
||||
origin_tech = "programming=3;materials=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_arm
|
||||
name="Phazon Left Arm"
|
||||
name = "\improper Phazon left arm"
|
||||
icon_state = "phazon_l_arm"
|
||||
origin_tech = "materials=3;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_arm
|
||||
name="Phazon Right Arm"
|
||||
name = "\improper Phazon right arm"
|
||||
icon_state = "phazon_r_arm"
|
||||
origin_tech = "materials=3;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_left_leg
|
||||
name="Phazon Left Leg"
|
||||
name = "\improper Phazon left leg"
|
||||
icon_state = "phazon_l_leg"
|
||||
origin_tech = "materials=3;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_right_leg
|
||||
name="Phazon Right Leg"
|
||||
name = "\improper Phazon right leg"
|
||||
icon_state = "phazon_r_leg"
|
||||
origin_tech = "materials=3;bluespace=3;magnets=3"
|
||||
|
||||
/obj/item/mecha_parts/part/phazon_armor
|
||||
name="Phazon armor"
|
||||
desc="Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties."
|
||||
name = "\improper Phazon armor"
|
||||
desc = "Phazon armor plates. They are layered with plasma to protect the pilot from the stress of phasing and have unusual properties."
|
||||
icon_state = "phazon_armor"
|
||||
origin_tech = "materials=4;bluespace=4;plasmatech=5"
|
||||
|
||||
///////// Odysseus
|
||||
/obj/item/mecha_parts/chassis/odysseus
|
||||
name = "Odysseus Chassis"
|
||||
name = "\improper Odysseus Chassis"
|
||||
|
||||
/obj/item/mecha_parts/chassis/odysseus/New()
|
||||
..()
|
||||
construct = new /datum/construction/mecha/odysseus_chassis(src)
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_head
|
||||
name="Odysseus Head"
|
||||
name = "\improper Odysseus head"
|
||||
icon_state = "odysseus_head"
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_torso
|
||||
name="Odysseus Torso"
|
||||
desc="A torso part of Odysseus. Contains power unit, processing core and life support systems."
|
||||
name = "\improper Odysseus torso"
|
||||
desc = "A torso part of Odysseus. Contains power unit, processing core and life support systems."
|
||||
icon_state = "odysseus_torso"
|
||||
origin_tech = "programming=2;materials=2;biotech=2;engineering=2"
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_left_arm
|
||||
name="Odysseus Left Arm"
|
||||
desc="An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
|
||||
name = "\improper Odysseus left arm"
|
||||
desc = "An Odysseus left arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "odysseus_l_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_right_arm
|
||||
name="Odysseus Right Arm"
|
||||
desc="An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
|
||||
name = "\improper Odysseus right arm"
|
||||
desc = "An Odysseus right arm. Data and power sockets are compatible with most exosuit tools."
|
||||
icon_state = "odysseus_r_arm"
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_left_leg
|
||||
name="Odysseus Left Leg"
|
||||
desc="An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
name = "\improper Odysseus left leg"
|
||||
desc = "An Odysseus left leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "odysseus_l_leg"
|
||||
|
||||
/obj/item/mecha_parts/part/odysseus_right_leg
|
||||
name="Odysseus Right Leg"
|
||||
desc="A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
name = "\improper Odysseus right leg"
|
||||
desc = "A Odysseus right leg. Contains somewhat complex servodrives and balance maintaining systems."
|
||||
icon_state = "odysseus_r_leg"
|
||||
|
||||
/*/obj/item/mecha_parts/part/odysseus_armour
|
||||
name="Odysseus Carapace"
|
||||
name = "\improper Odysseus carapace"
|
||||
icon_state = "odysseus_armour"
|
||||
origin_tech = "materials=3;engineering=3")*/
|
||||
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
var/list/allowed_types = list() //Types of mech that the kit will work on.
|
||||
|
||||
/obj/item/paintkit/titansfist
|
||||
name = "APLU \"Ripley\" customisation kit"
|
||||
name = "\improper APLU \"Ripley\" customisation kit"
|
||||
desc = "A kit containing all the needed tools and parts to turn an APLU \"Ripley\" into a Titan's Fist worker mech."
|
||||
icon_state = "paintkit_2"
|
||||
|
||||
@@ -21,10 +21,8 @@
|
||||
allowed_types = list("ripley","firefighter")
|
||||
|
||||
/obj/item/paintkit/mercenary
|
||||
name = "Mercenary APLU \"Ripley\" kit"
|
||||
name = "\improper mercenary APLU \"Ripley\" kit"
|
||||
desc = "A kit containing all the needed tools and parts to turn an APLU \"Ripley\" into an old Mercenaries APLU."
|
||||
|
||||
|
||||
new_name = "APLU \"Strike the Earth!\""
|
||||
new_desc = "Looks like an over worked, under maintained Ripley with some horrific damage."
|
||||
new_icon = "earth"
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -3,8 +3,7 @@
|
||||
icon = 'icons/mob/screen_gen.dmi'
|
||||
icon_state = "x2"
|
||||
var/list/result = list(
|
||||
/turf/simulated/floor/plasteel = 1,
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/datum/nothing = 1,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1,
|
||||
/obj/effect/decal/cleanable/fungus = 1)
|
||||
@@ -37,25 +36,25 @@
|
||||
/obj/effect/spawner/random_spawners/blood_maybe
|
||||
name = "blood maybe"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 20,
|
||||
/datum/nothing = 20,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/blood_often
|
||||
name = "blood often"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 5,
|
||||
/datum/nothing = 5,
|
||||
/obj/effect/decal/cleanable/blood/splatter = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/oil_maybe
|
||||
name = "oil maybe"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 20,
|
||||
/datum/nothing = 20,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/oil_maybe
|
||||
name = "oil often"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 5,
|
||||
/datum/nothing = 5,
|
||||
/obj/effect/decal/cleanable/blood/oil = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/wall_rusted_probably
|
||||
@@ -73,37 +72,37 @@
|
||||
/obj/effect/spawner/random_spawners/cobweb_left_frequent
|
||||
name = "cobweb left frequent"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/datum/nothing = 1,
|
||||
/obj/effect/decal/cleanable/cobweb = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_right_frequent
|
||||
name = "cobweb right frequent"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/datum/nothing = 1,
|
||||
/obj/effect/decal/cleanable/cobweb2 = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_left_rare
|
||||
name = "cobweb left rare"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 10,
|
||||
/datum/nothing = 10,
|
||||
/obj/effect/decal/cleanable/cobweb = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/cobweb_right_rare
|
||||
name = "cobweb right rare"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 10,
|
||||
/datum/nothing = 10,
|
||||
/obj/effect/decal/cleanable/cobweb2 = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/dirt_frequent
|
||||
name = "dirt frequent"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 1,
|
||||
/datum/nothing = 1,
|
||||
/obj/effect/decal/cleanable/dirt = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/dirt_rare
|
||||
name = "dirt rare"
|
||||
result = list(
|
||||
/turf/simulated/floor/plating = 10,
|
||||
/datum/nothing = 10,
|
||||
/obj/effect/decal/cleanable/dirt = 1)
|
||||
|
||||
/obj/effect/spawner/random_spawners/fungus_maybe
|
||||
@@ -307,9 +306,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)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
|
||||
/obj/effect/spawner/window/reinforced/polarized
|
||||
name = "electrochromic reinforced window spawner"
|
||||
icon_state = "pwindow_spawner"
|
||||
icon_state = "ewindow_spawner"
|
||||
window_to_spawn_regular = /obj/structure/window/reinforced/polarized
|
||||
window_to_spawn_full = /obj/structure/window/full/reinforced/polarized
|
||||
|
||||
|
||||
@@ -71,8 +71,6 @@
|
||||
laser_act(target, user, params)
|
||||
|
||||
/obj/item/laser_pointer/proc/laser_act(atom/target, mob/living/user, params)
|
||||
if( !(user in (viewers(7,target))) )
|
||||
return
|
||||
if(!diode)
|
||||
to_chat(user, "<span class='notice'>You point [src] at [target], but nothing happens!</span>")
|
||||
return
|
||||
@@ -82,6 +80,9 @@
|
||||
if(HAS_TRAIT(user, TRAIT_CHUNKYFINGERS))
|
||||
to_chat(user, "<span class='warning'>Your fingers can't press the button!</span>")
|
||||
return
|
||||
if(!(target in view(7, get_turf(src)))) // Use the turf as center so it won't use the potential xray of the user
|
||||
to_chat(user, "<span class='warning'>There is something in the way!</span>")
|
||||
return
|
||||
|
||||
add_fingerprint(user)
|
||||
|
||||
|
||||
@@ -170,7 +170,7 @@ effective or pretty fucking useless.
|
||||
GLOB.active_jammers -= src
|
||||
|
||||
/obj/item/teleporter
|
||||
name = "\improper Syndicate teleporter"
|
||||
name = "syndicate teleporter"
|
||||
desc = "A strange syndicate version of a cult veil shifter. Warrenty voided if exposed to EMP."
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "syndi-tele"
|
||||
@@ -208,24 +208,32 @@ effective or pretty fucking useless.
|
||||
charges++
|
||||
|
||||
/obj/item/teleporter/emp_act(severity)
|
||||
var/teleported_something = FALSE
|
||||
if(prob(50 / severity))
|
||||
if(istype(loc, /mob/living/carbon/human))
|
||||
var/mob/living/carbon/human/user = loc
|
||||
to_chat(user, "<span class='userdanger'>[src] buzzes and activates!</span>")
|
||||
attempt_teleport(user, TRUE)
|
||||
else
|
||||
visible_message("<span class='danger'>[src] activates and blinks out of existence!</span>")
|
||||
do_sparks(2, 1, src)
|
||||
qdel(src)
|
||||
else //Well, it either is on a floor / locker, and won't teleport someone, OR it's in someones bag. As such, we need to check the turf to see if people are there.
|
||||
var/turf/teleport_turf = get_turf(src)
|
||||
for(var/mob/living/user in teleport_turf)
|
||||
if(!teleported_something)
|
||||
teleport_turf.visible_message("<span class='danger'>[src] activates sporadically, teleporting everyone around it!</span>")
|
||||
teleported_something = TRUE
|
||||
attempt_teleport(user, TRUE)
|
||||
if(!teleported_something)
|
||||
visible_message("<span class='danger'>[src] activates and blinks out of existence!</span>")
|
||||
do_sparks(2, 1, src)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/teleporter/proc/attempt_teleport(mob/user, EMP_D = FALSE)
|
||||
dir_correction(user)
|
||||
if(!charges)
|
||||
if(!charges && !EMP_D) //If it's empd, you are moving no matter what.
|
||||
to_chat(user, "<span class='warning'>[src] is still recharging.</span>")
|
||||
return
|
||||
|
||||
var/mob/living/carbon/C = user
|
||||
var/turf/mobloc = get_turf(C)
|
||||
var/mob/living/M = user
|
||||
var/turf/mobloc = get_turf(M)
|
||||
var/list/turfs = new/list()
|
||||
var/found_turf = FALSE
|
||||
var/list/bagholding = user.search_contents_for(/obj/item/storage/backpack/holding)
|
||||
@@ -233,7 +241,7 @@ effective or pretty fucking useless.
|
||||
if(!is_teleport_allowed(T.z))
|
||||
break
|
||||
if(!(length(bagholding) && !flawless)) //Chaos if you have a bag of holding
|
||||
if(get_dir(C, T) != C.dir)
|
||||
if(get_dir(M, T) != M.dir)
|
||||
continue
|
||||
if(T in range(user, inner_tp_range))
|
||||
continue
|
||||
@@ -247,13 +255,14 @@ effective or pretty fucking useless.
|
||||
|
||||
if(found_turf)
|
||||
if(user.loc != mobloc) // No locker / mech / sleeper teleporting, that breaks stuff
|
||||
to_chat(C, "<span class='danger'>[src] will not work here!</span>")
|
||||
charges--
|
||||
to_chat(M, "<span class='danger'>[src] will not work here!</span>")
|
||||
if(charges > 0) //While we want EMP triggered teleports to drain charge, we also do not want it to go negative charge, as such we need this check here
|
||||
charges--
|
||||
var/turf/destination = pick(turfs)
|
||||
if(tile_check(destination) || flawless) // Why is there so many bloody floor types
|
||||
var/turf/fragging_location = destination
|
||||
telefrag(fragging_location, user)
|
||||
C.forceMove(destination)
|
||||
M.forceMove(destination)
|
||||
playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
new/obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc)
|
||||
playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
@@ -264,7 +273,7 @@ effective or pretty fucking useless.
|
||||
else // Emp activated? Bag of holding? No saving throw for you
|
||||
get_fragged(user, destination)
|
||||
else
|
||||
to_chat(C, "<span class='danger'>[src] will not work here!</span>")
|
||||
to_chat(M, "<span class='danger'>[src] will not work here!</span>")
|
||||
|
||||
/obj/item/teleporter/proc/tile_check(turf/T)
|
||||
if(istype(T, /turf/simulated/floor) || istype(T, /turf/space))
|
||||
@@ -294,8 +303,8 @@ effective or pretty fucking useless.
|
||||
else
|
||||
saving_throw = NORTH // just in case
|
||||
|
||||
var/mob/living/carbon/C = user
|
||||
var/turf/mobloc = get_turf(C)
|
||||
var/mob/living/M = user
|
||||
var/turf/mobloc = get_turf(M)
|
||||
var/list/turfs = list()
|
||||
var/found_turf = FALSE
|
||||
for(var/turf/T in range(destination, saving_throw_distance))
|
||||
@@ -314,7 +323,7 @@ effective or pretty fucking useless.
|
||||
var/turf/new_destination = pick(turfs)
|
||||
var/turf/fragging_location = new_destination
|
||||
telefrag(fragging_location, user)
|
||||
C.forceMove(new_destination)
|
||||
M.forceMove(new_destination)
|
||||
playsound(mobloc, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(mobloc)
|
||||
new /obj/effect/temp_visual/teleport_abductor/syndi_teleporter(new_destination)
|
||||
@@ -332,11 +341,12 @@ effective or pretty fucking useless.
|
||||
playsound(destination, "sparks", 50, TRUE, SHORT_RANGE_SOUND_EXTRARANGE)
|
||||
playsound(destination, "sound/magic/disintegrate.ogg", 50, TRUE)
|
||||
destination.ex_act(rand(1,2))
|
||||
for(var/obj/item/W in user)
|
||||
if(istype(W, /obj/item/implant))
|
||||
continue
|
||||
if(!user.unEquip(W))
|
||||
qdel(W)
|
||||
if(iscarbon(user)) //don't want cyborgs dropping their stuff
|
||||
for(var/obj/item/W in user)
|
||||
if(istype(W, /obj/item/implant))
|
||||
continue
|
||||
if(!user.unEquip(W))
|
||||
qdel(W)
|
||||
to_chat(user, "<span class='biggerdanger'>You teleport into the wall, the teleporter tries to save you, but--</span>")
|
||||
user.gib()
|
||||
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -262,6 +262,9 @@ LIGHTERS ARE IN LIGHTERS.DM
|
||||
pixel_x = rand(-5, 5)
|
||||
pixel_y = rand(-5, 5)
|
||||
|
||||
/obj/item/clothing/mask/cigarette/rollie/nicotine
|
||||
list_reagents = list("nicotine" = 40)
|
||||
|
||||
|
||||
/obj/item/cigbutt/roach
|
||||
name = "roach"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -293,6 +293,7 @@
|
||||
desc = "You can't understand the runes, but the packet smells funny."
|
||||
icon_state = "midoripacket"
|
||||
item_state = "midoripacket"
|
||||
cigarette_type = /obj/item/clothing/mask/cigarette/rollie/nicotine
|
||||
|
||||
/obj/item/storage/fancy/cigarettes/cigpack_shadyjims
|
||||
name ="\improper Shady Jim's Super Slims"
|
||||
|
||||
@@ -158,7 +158,7 @@
|
||||
deductcharge(hitcost)
|
||||
return
|
||||
|
||||
if(isrobot(M)) // Can't stunbaton borgs
|
||||
if(issilicon(M)) // Can't stunbaton borgs and AIs
|
||||
return ..()
|
||||
|
||||
if(!isliving(M))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
/obj/structure/closet/fireaxecabinet
|
||||
name = "fire axe cabinet"
|
||||
desc = "There is small label that reads \"For Emergency use only\" along with details for safe use of the axe. As if."
|
||||
var/obj/item/twohanded/fireaxe/fireaxe = new/obj/item/twohanded/fireaxe
|
||||
var/obj/item/twohanded/fireaxe/fireaxe
|
||||
icon_state = "fireaxe1000"
|
||||
icon_closed = "fireaxe1000"
|
||||
icon_opened = "fireaxe1100"
|
||||
@@ -15,6 +15,10 @@
|
||||
locked = TRUE
|
||||
var/smashed = FALSE
|
||||
|
||||
/obj/structure/closet/fireaxecabinet/populate_contents()
|
||||
fireaxe = new/obj/item/twohanded/fireaxe(src)
|
||||
update_icon() // So its initial icon doesn't show it without the fireaxe
|
||||
|
||||
/obj/structure/closet/fireaxecabinet/examine(mob/user)
|
||||
. = ..()
|
||||
. += "<span class='notice'>Use a multitool to lock/unlock it.</span>"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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."
|
||||
|
||||
+78
-32
@@ -624,43 +624,89 @@ GLOBAL_VAR_INIT(nologevent, 0)
|
||||
|
||||
////////////////////////////////////////////////////////////////////////////////////////////////ADMIN HELPER PROCS
|
||||
|
||||
/proc/is_special_character(mob/M as mob) // returns 1 for specail characters and 2 for heroes of gamemode
|
||||
if(!SSticker || !SSticker.mode)
|
||||
return 0
|
||||
/**
|
||||
* A proc that return whether the mob is a "Special Character" aka Antagonist
|
||||
*
|
||||
* Arguments:
|
||||
* * M - the mob you're checking
|
||||
* *
|
||||
*/
|
||||
/proc/is_special_character(mob/M)
|
||||
if(!SSticker.mode)
|
||||
return FALSE
|
||||
if(!istype(M))
|
||||
return 0
|
||||
if((M.mind in SSticker.mode.head_revolutionaries) || (M.mind in SSticker.mode.revolutionaries))
|
||||
if(SSticker.mode.config_tag == "revolution")
|
||||
return 2
|
||||
return 1
|
||||
if(M.mind in SSticker.mode.cult)
|
||||
if(SSticker.mode.config_tag == "cult")
|
||||
return 2
|
||||
return 1
|
||||
if(M.mind in SSticker.mode.syndicates)
|
||||
if(SSticker.mode.config_tag == "nuclear")
|
||||
return 2
|
||||
return 1
|
||||
if(M.mind in SSticker.mode.wizards)
|
||||
if(SSticker.mode.config_tag == "wizard")
|
||||
return 2
|
||||
return 1
|
||||
if(M.mind in SSticker.mode.changelings)
|
||||
if(SSticker.mode.config_tag == "changeling")
|
||||
return 2
|
||||
return 1
|
||||
if(M.mind in SSticker.mode.abductors)
|
||||
if(SSticker.mode.config_tag == "abduction")
|
||||
return 2
|
||||
return 1
|
||||
return FALSE
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.emagged)
|
||||
return 1
|
||||
if(M.mind&&M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist.
|
||||
return 1
|
||||
return TRUE
|
||||
if(M.mind.special_role)//If they have a mind and special role, they are some type of traitor or antagonist.
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
return 0
|
||||
/**
|
||||
* A proc that return an array of capitalized strings containing name of the antag types they are
|
||||
*
|
||||
* Arguments:
|
||||
* * M - the mob you're checking
|
||||
*/
|
||||
/proc/get_antag_type_strings_list(mob/M) // return an array of all the antag types they are with name
|
||||
var/list/antag_list = list()
|
||||
|
||||
if(!SSticker.mode || !istype(M) || !M.mind)
|
||||
return FALSE
|
||||
|
||||
if(M.mind in SSticker.mode.head_revolutionaries)
|
||||
antag_list += "Head Rev"
|
||||
if(M.mind in SSticker.mode.revolutionaries)
|
||||
antag_list += "Revolutionary"
|
||||
if(M.mind in SSticker.mode.cult)
|
||||
antag_list += "Cultist"
|
||||
if(M.mind in SSticker.mode.syndicates)
|
||||
antag_list += "Nuclear Operative"
|
||||
if(M.mind in SSticker.mode.wizards)
|
||||
antag_list += "Wizard"
|
||||
if(M.mind in SSticker.mode.changelings)
|
||||
antag_list += "Changeling"
|
||||
if(M.mind in SSticker.mode.abductors)
|
||||
antag_list += "Abductor"
|
||||
if(M.mind in SSticker.mode.vampires)
|
||||
antag_list += "Vampire"
|
||||
if(M.mind in SSticker.mode.vampire_enthralled)
|
||||
antag_list += "Vampire Thrall"
|
||||
if(M.mind in SSticker.mode.shadows)
|
||||
antag_list += "Shadowling"
|
||||
if(M.mind in SSticker.mode.shadowling_thralls)
|
||||
antag_list += "Shadowling Thrall"
|
||||
if(M.mind.has_antag_datum(/datum/antagonist/traitor))
|
||||
antag_list += "Traitor"
|
||||
if(M.mind.has_antag_datum(/datum/antagonist/mindslave))
|
||||
antag_list += "Mindslave"
|
||||
if(isrobot(M))
|
||||
var/mob/living/silicon/robot/R = M
|
||||
if(R.emagged)
|
||||
antag_list += "Emagged Borg"
|
||||
if(!length(antag_list) && M.mind.special_role) // Snowflake check. If none of the above but still special, then other antag. Technically not accurate.
|
||||
antag_list += "Other Antag(s)"
|
||||
return antag_list
|
||||
|
||||
/**
|
||||
* A proc that return a string containing all the singled out antags . Empty string if not antag
|
||||
*
|
||||
* Usually, you'd return a FALSE, but since this is consumed by javascript you're in
|
||||
* for a world of hurt if you pass a byond FALSE which get converted into a fucking string anyway and pass for TRUE in check. Fuck.
|
||||
* It always append "(May be other antag)"
|
||||
* Arguments:
|
||||
* * M - the mob you're checking
|
||||
* *
|
||||
*/
|
||||
/proc/get_antag_type_truncated_plaintext_string(mob/M as mob)
|
||||
var/list/antag_list = get_antag_type_strings_list(M)
|
||||
|
||||
if(length(antag_list))
|
||||
return antag_list.Join(" & ") + " " + "(May be other antag)"
|
||||
|
||||
return ""
|
||||
|
||||
/datum/admins/proc/spawn_atom(object as text)
|
||||
set category = "Debug"
|
||||
|
||||
@@ -363,17 +363,20 @@ GLOBAL_LIST_INIT(admin_verbs_ticket, list(
|
||||
|
||||
if(!check_rights(R_ADMIN))
|
||||
return
|
||||
if(!isliving(mob))
|
||||
return
|
||||
|
||||
if(mob)
|
||||
if(mob.invisibility == INVISIBILITY_OBSERVER)
|
||||
mob.invisibility = initial(mob.invisibility)
|
||||
to_chat(mob, "<span class='danger'>Invisimin off. Invisibility reset.</span>")
|
||||
mob.add_to_all_human_data_huds()
|
||||
//TODO: Make some kind of indication for the badmin that they are currently invisible
|
||||
else
|
||||
mob.invisibility = INVISIBILITY_OBSERVER
|
||||
to_chat(mob, "<span class='notice'>Invisimin on. You are now as invisible as a ghost.</span>")
|
||||
mob.remove_from_all_data_huds()
|
||||
if(mob.invisibility == INVISIBILITY_OBSERVER)
|
||||
mob.invisibility = initial(mob.invisibility)
|
||||
mob.add_to_all_human_data_huds()
|
||||
to_chat(mob, "<span class='danger'>Invisimin off. Invisibility reset.</span>")
|
||||
log_admin("[key_name(mob)] has turned Invisimin OFF")
|
||||
else
|
||||
mob.invisibility = INVISIBILITY_OBSERVER
|
||||
mob.remove_from_all_data_huds()
|
||||
to_chat(mob, "<span class='notice'>Invisimin on. You are now as invisible as a ghost.</span>")
|
||||
log_admin("[key_name(mob)] has turned Invisimin ON")
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Invisimin")
|
||||
|
||||
/client/proc/player_panel_new()
|
||||
set name = "Player Panel"
|
||||
|
||||
@@ -65,7 +65,7 @@
|
||||
|
||||
}
|
||||
|
||||
function expand(id,job,name,real_name,image,key,ip,antagonist,mobUID,client_ckey,eyeUID){
|
||||
function expand(id,job,name,real_name,image,key,ip,antagonists,mobUID,client_ckey,eyeUID){
|
||||
|
||||
clearAll();
|
||||
|
||||
@@ -89,8 +89,8 @@
|
||||
if(eyeUID)
|
||||
body += "|<a href='?src=[UID()];adminplayerobservefollow="+eyeUID+"'>EYE</a>"
|
||||
body += "<br>"
|
||||
if(antagonist > 0)
|
||||
body += "<font size='2'><a href='?src=[UID()];check_antagonist=1'><font color='red'><b>Antagonist</b></font></a></font>";
|
||||
if(antagonists)
|
||||
body += "<font size='2'><a href='?src=[UID()];check_antagonist=1'><font color='red'><b>"+antagonists+"</b></font></a></font>";
|
||||
|
||||
body += "</td></tr></table>";
|
||||
|
||||
@@ -227,7 +227,7 @@
|
||||
var/color = "#e6e6e6"
|
||||
if(i%2 == 0)
|
||||
color = "#f2f2f2"
|
||||
var/is_antagonist = is_special_character(M)
|
||||
var/antagonist_string = get_antag_type_truncated_plaintext_string(M)
|
||||
|
||||
var/M_job = ""
|
||||
|
||||
@@ -305,7 +305,7 @@
|
||||
<td align='center' bgcolor='[color]'>
|
||||
<span id='notice_span[i]'></span>
|
||||
<a id='link[i]'
|
||||
onmouseover='expand("item[i]","[M_job]","[M_name]","[M_rname]","--unused--","[M_key]","[M.lastKnownIP]",[is_antagonist],"[M.UID()]","[client_ckey]","[M_eyeUID]")'
|
||||
onmouseover='expand("item[i]","[M_job]","[M_name]","[M_rname]","--unused--","[M_key]","[M.lastKnownIP]","[antagonist_string]","[M.UID()]","[client_ckey]","[M_eyeUID]")'
|
||||
>
|
||||
<b id='search[i]'>[M_name] - [M_rname] - [M_key] ([M_job])</b>
|
||||
</a>
|
||||
|
||||
@@ -47,16 +47,8 @@ GLOBAL_LIST_INIT(adminhelp_ignored_words, list("unknown", "the", "a", "an", "of"
|
||||
SSdiscord.send2discord_simple_noadmins("**\[Adminhelp]** [key_name(src)]: [msg]", check_send_always = TRUE)
|
||||
|
||||
if("Mentorhelp")
|
||||
var/alerttext
|
||||
var/list/mentorcount = staff_countup(R_MENTOR)
|
||||
var/active_mentors = mentorcount[1]
|
||||
var/inactive_mentors = mentorcount[3]
|
||||
|
||||
if(active_mentors <= 0)
|
||||
if(inactive_mentors)
|
||||
alerttext = " | **ALL MENTORS AFK**"
|
||||
else
|
||||
alerttext = " | **NO MENTORS ONLINE**"
|
||||
|
||||
log_admin("[selected_type]: [key_name(src)]: [msg] - heard by [active_mentors] non-AFK mentors.")
|
||||
SSdiscord.send2discord_simple(DISCORD_WEBHOOK_MENTOR, "[key_name(src)]: [msg][alerttext]")
|
||||
SSdiscord.send2discord_simple_mentor("[key_name(src)]: [msg]")
|
||||
|
||||
@@ -357,8 +357,8 @@ GLOBAL_PROTECT(AdminProcCallSpamPrevention)
|
||||
pai.real_name = pai.name
|
||||
pai.key = choice.key
|
||||
card.setPersonality(pai)
|
||||
for(var/datum/paiCandidate/candidate in GLOB.paiController.pai_candidates)
|
||||
if(candidate.key == choice.key)
|
||||
for(var/datum/pai_save/candidate in GLOB.paiController.pai_candidates)
|
||||
if(candidate.owner.ckey == choice.ckey)
|
||||
GLOB.paiController.pai_candidates.Remove(candidate)
|
||||
SSblackbox.record_feedback("tally", "admin_verb", 1, "Make pAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
|
||||
log_world("### MassVarEdit by [src]: [O.type] (A/R [accepted]/[rejected]) [variable]=[html_encode("[O.vars[variable]]")]([list2params(value)])")
|
||||
log_admin("[key_name(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)")
|
||||
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [O.vars[variable]] ([accepted] objects modified)")
|
||||
message_admins("[key_name_admin(src)] mass modified [original_name]'s [variable] to [html_encode("[O.vars[variable]]")] ([accepted] objects modified)")
|
||||
|
||||
/proc/get_all_of_type(T, subtypes = TRUE)
|
||||
var/list/typecache = list()
|
||||
|
||||
@@ -355,7 +355,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h
|
||||
return
|
||||
log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: ADDED=[var_value]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[var_value]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: ADDED=[html_encode("[var_value]")]")
|
||||
|
||||
/client/proc/mod_list(list/L, atom/O, original_name, objectvar, index, autodetect_class = FALSE)
|
||||
if(!check_rights(R_VAREDIT))
|
||||
@@ -495,7 +495,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h
|
||||
return
|
||||
log_world("### ListVarEdit by [src]: [O.type] [objectvar]: REMOVED=[html_encode("[original_var]")]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[original_var]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s [objectvar]: REMOVED=[html_encode("[original_var]")]")
|
||||
return
|
||||
|
||||
if(VV_TEXT)
|
||||
@@ -514,7 +514,7 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h
|
||||
return
|
||||
log_world("### ListVarEdit by [src]: [(O ? O.type : "/list")] [objectvar]: [original_var]=[new_var]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [objectvar]: [original_var]=[new_var]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[new_var]")
|
||||
message_admins("[key_name_admin(src)] modified [original_name]'s varlist [objectvar]: [original_var]=[html_encode("[new_var]")]")
|
||||
|
||||
/proc/vv_varname_lockcheck(param_var_name)
|
||||
if(param_var_name in GLOB.VVlocked)
|
||||
@@ -630,5 +630,5 @@ GLOBAL_LIST_INIT(VVpixelmovement, list("step_x", "step_y", "step_size", "bound_h
|
||||
SEND_GLOBAL_SIGNAL(COMSIG_GLOB_VAR_EDIT, args)
|
||||
log_world("### VarEdit by [src]: [O.type] [variable]=[html_encode("[var_new]")]")
|
||||
log_admin("[key_name(src)] modified [original_name]'s [variable] to [var_new]")
|
||||
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [var_new]"
|
||||
var/msg = "[key_name_admin(src)] modified [original_name]'s [variable] to [html_encode("[var_new]")]"
|
||||
message_admins(msg)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -114,6 +114,9 @@
|
||||
/// Is the client watchlisted
|
||||
var/watchlisted = FALSE
|
||||
|
||||
/// Client's pAI save
|
||||
var/datum/pai_save/pai_save
|
||||
|
||||
/client/vv_edit_var(var_name, var_value)
|
||||
switch(var_name)
|
||||
// I know we will never be in a world where admins are editing client vars to let people bypass TOS
|
||||
|
||||
@@ -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>.")
|
||||
@@ -286,6 +287,8 @@
|
||||
|
||||
log_client_to_db(tdata) // Make sure our client exists in the DB
|
||||
|
||||
pai_save = new(src)
|
||||
|
||||
// This is where we load all of the clients stuff from the DB
|
||||
if(SSdbcore.IsConnected())
|
||||
// Load in all our client data from the DB
|
||||
@@ -453,6 +456,7 @@
|
||||
GLOB.clients -= src
|
||||
SSinstancing.update_playercache() // Clear us out
|
||||
QDEL_NULL(chatOutput)
|
||||
QDEL_NULL(pai_save)
|
||||
if(movingmob)
|
||||
movingmob.client_mobs_in_contents -= mob
|
||||
UNSETEMPTY(movingmob.client_mobs_in_contents)
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
/datum/client_login_processor/pai_save
|
||||
priority = 40
|
||||
|
||||
/datum/client_login_processor/pai_save/get_query(client/C)
|
||||
return C.pai_save.get_query()
|
||||
|
||||
/datum/client_login_processor/pai_save/process_result(datum/db_query/Q, client/C)
|
||||
C.pai_save.load_data(Q)
|
||||
@@ -115,7 +115,7 @@
|
||||
if(!isemptylist(player_alt_titles))
|
||||
playertitlelist = list2params(player_alt_titles)
|
||||
if(!isemptylist(loadout_gear))
|
||||
gearlist = list2params(loadout_gear)
|
||||
gearlist = json_encode(loadout_gear)
|
||||
|
||||
var/datum/db_query/firstquery = SSdbcore.NewQuery("SELECT slot FROM characters WHERE ckey=:ckey ORDER BY slot", list(
|
||||
"ckey" = C.ckey
|
||||
@@ -438,7 +438,7 @@
|
||||
//socks
|
||||
socks = query.item[49]
|
||||
body_accessory = query.item[50]
|
||||
loadout_gear = params2list(query.item[51])
|
||||
loadout_gear = query.item[51]
|
||||
autohiss_mode = text2num(query.item[52])
|
||||
|
||||
//Sanitize
|
||||
@@ -507,6 +507,7 @@
|
||||
|
||||
socks = sanitize_text(socks, initial(socks))
|
||||
body_accessory = sanitize_text(body_accessory, initial(body_accessory))
|
||||
loadout_gear = sanitize_json(loadout_gear)
|
||||
|
||||
if(!player_alt_titles)
|
||||
player_alt_titles = new()
|
||||
@@ -1379,29 +1380,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)
|
||||
@@ -1480,11 +1458,11 @@
|
||||
|
||||
|
||||
|
||||
/datum/character_save/proc/get_gear_metadata(datum/gear/G)
|
||||
. = loadout_gear[G.display_name]
|
||||
/datum/character_save/proc/get_gear_metadata(datum/gear/G) // NYI
|
||||
. = loadout_gear[G.type]
|
||||
if(!.)
|
||||
. = list()
|
||||
loadout_gear[G.display_name] = .
|
||||
loadout_gear[G.type] = .
|
||||
|
||||
/datum/character_save/proc/get_tweak_metadata(datum/gear/G, datum/gear_tweak/tweak)
|
||||
var/list/metadata = get_gear_metadata(G)
|
||||
|
||||
@@ -96,29 +96,17 @@
|
||||
|
||||
if(href_list["preference"] == "gear")
|
||||
if(href_list["toggle_gear"])
|
||||
var/datum/gear/TG = GLOB.gear_datums[href_list["toggle_gear"]]
|
||||
if(TG.display_name in active_character.loadout_gear)
|
||||
active_character.loadout_gear -= TG.display_name
|
||||
var/datum/gear/TG = GLOB.gear_datums[text2path(href_list["toggle_gear"])]
|
||||
if(TG && (TG.type in active_character.loadout_gear))
|
||||
active_character.loadout_gear -= TG.type
|
||||
else
|
||||
if(TG.donator_tier && user.client.donator_level < TG.donator_tier)
|
||||
to_chat(user, "<span class='warning'>That gear is only available at a higher donation tier than you are on.</span>")
|
||||
return
|
||||
var/total_cost = 0
|
||||
var/list/type_blacklist = list()
|
||||
for(var/gear_name in active_character.loadout_gear)
|
||||
var/datum/gear/G = GLOB.gear_datums[gear_name]
|
||||
if(istype(G))
|
||||
if(!G.subtype_cost_overlap)
|
||||
if(G.subtype_path in type_blacklist)
|
||||
continue
|
||||
type_blacklist += G.subtype_path
|
||||
total_cost += G.cost
|
||||
build_loadout(TG)
|
||||
|
||||
if((total_cost + TG.cost) <= max_gear_slots)
|
||||
active_character.loadout_gear += TG.display_name
|
||||
|
||||
else if(href_list["gear"] && href_list["tweak"])
|
||||
var/datum/gear/gear = GLOB.gear_datums[href_list["gear"]]
|
||||
else if(href_list["gear"] && href_list["tweak"]) // NYI
|
||||
var/datum/gear/gear = GLOB.gear_datums[text2path(href_list["gear"])]
|
||||
var/datum/gear_tweak/tweak = locate(href_list["tweak"])
|
||||
if(!tweak || !istype(gear) || !(tweak in gear.gear_tweaks))
|
||||
return
|
||||
|
||||
@@ -10,17 +10,27 @@ GLOBAL_LIST_EMPTY(gear_datums)
|
||||
..()
|
||||
|
||||
/datum/gear
|
||||
var/display_name //Name/index. Must be unique.
|
||||
var/description //Description of this gear. If left blank will default to the description of the pathed item.
|
||||
var/path //Path to item.
|
||||
var/cost = 1 //Number of points used. Items in general cost 1 point, storage/armor/gloves/special use costs 2 points.
|
||||
var/slot //Slot to equip to.
|
||||
var/list/allowed_roles //Roles that can spawn with this item.
|
||||
var/whitelisted //Term to check the whitelist for..
|
||||
/// Displayed name of the item listing.
|
||||
var/display_name
|
||||
/// Description of the item listing. If left blank will default to the description of the pathed item.
|
||||
var/description
|
||||
/// Typepath of the item.
|
||||
var/path
|
||||
/// Loadout points cost to select the item listing.
|
||||
var/cost = 1
|
||||
/// Slot to equip the item to.
|
||||
var/slot
|
||||
/// List of job roles which can spawn with the item.
|
||||
var/list/allowed_roles
|
||||
/// Loadout category of the item listing.
|
||||
var/sort_category = "General"
|
||||
var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned.
|
||||
var/subtype_path = /datum/gear //for skipping organizational subtypes (optional)
|
||||
var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time
|
||||
/// List of datums which will alter the item after it has been spawned. (NYI)
|
||||
var/list/gear_tweaks = list()
|
||||
/// Set on empty category datums to skip them being added to the list. (/datum/gear/accessory, /datum/gear/suit/coat/job, etc.)
|
||||
var/main_typepath = /datum/gear
|
||||
/// Does selecting a second item with the same `main_typepath` cost loadout points.
|
||||
var/subtype_selection_cost = TRUE
|
||||
/// Patreon donator tier needed to select this item listing.
|
||||
var/donator_tier = 0
|
||||
|
||||
/datum/gear/New()
|
||||
|
||||
@@ -1,203 +1,215 @@
|
||||
/*
|
||||
######################################################################################
|
||||
## ##
|
||||
## IMPORTANT README ##
|
||||
## ##
|
||||
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
|
||||
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
|
||||
## Please inform the server host if you wish to modify any of these. ##
|
||||
## ##
|
||||
######################################################################################
|
||||
*/
|
||||
|
||||
|
||||
/datum/gear/accessory
|
||||
subtype_path = /datum/gear/accessory
|
||||
main_typepath = /datum/gear/accessory
|
||||
slot = slot_tie
|
||||
sort_category = "Accessories"
|
||||
|
||||
/datum/gear/accessory/scarf
|
||||
display_name = "scarf"
|
||||
display_name = "Scarf"
|
||||
path = /obj/item/clothing/accessory/scarf
|
||||
|
||||
/datum/gear/accessory/scarf/red
|
||||
display_name = "scarf, red"
|
||||
display_name = "Scarf, red"
|
||||
path = /obj/item/clothing/accessory/scarf/red
|
||||
|
||||
/datum/gear/accessory/scarf/green
|
||||
display_name = "scarf, green"
|
||||
display_name = "Scarf, green"
|
||||
path = /obj/item/clothing/accessory/scarf/green
|
||||
|
||||
/datum/gear/accessory/scarf/darkblue
|
||||
display_name = "scarf, dark blue"
|
||||
display_name = "Scarf, dark blue"
|
||||
path = /obj/item/clothing/accessory/scarf/darkblue
|
||||
|
||||
/datum/gear/accessory/scarf/purple
|
||||
display_name = "scarf, purple"
|
||||
display_name = "Scarf, purple"
|
||||
path = /obj/item/clothing/accessory/scarf/purple
|
||||
|
||||
/datum/gear/accessory/scarf/yellow
|
||||
display_name = "scarf, yellow"
|
||||
display_name = "Scarf, yellow"
|
||||
path = /obj/item/clothing/accessory/scarf/yellow
|
||||
|
||||
/datum/gear/accessory/scarf/orange
|
||||
display_name = "scarf, orange"
|
||||
display_name = "Scarf, orange"
|
||||
path = /obj/item/clothing/accessory/scarf/orange
|
||||
|
||||
/datum/gear/accessory/scarf/lightblue
|
||||
display_name = "scarf, light blue"
|
||||
display_name = "Scarf, light blue"
|
||||
path = /obj/item/clothing/accessory/scarf/lightblue
|
||||
|
||||
/datum/gear/accessory/scarf/white
|
||||
display_name = "scarf, white"
|
||||
display_name = "Scarf, white"
|
||||
path = /obj/item/clothing/accessory/scarf/white
|
||||
|
||||
/datum/gear/accessory/scarf/black
|
||||
display_name = "scarf, black"
|
||||
display_name = "Scarf, black"
|
||||
path = /obj/item/clothing/accessory/scarf/black
|
||||
|
||||
/datum/gear/accessory/scarf/zebra
|
||||
display_name = "scarf, zebra"
|
||||
display_name = "Scarf, zebra"
|
||||
path = /obj/item/clothing/accessory/scarf/zebra
|
||||
|
||||
/datum/gear/accessory/scarf/christmas
|
||||
display_name = "scarf, christmas"
|
||||
display_name = "Scarf, christmas"
|
||||
path = /obj/item/clothing/accessory/scarf/christmas
|
||||
|
||||
/datum/gear/accessory/scarf/stripedred
|
||||
display_name = "scarf, striped red"
|
||||
display_name = "Scarf, striped red"
|
||||
path = /obj/item/clothing/accessory/stripedredscarf
|
||||
|
||||
/datum/gear/accessory/scarf/stripedgreen
|
||||
display_name = "scarf, striped green"
|
||||
display_name = "Scarf, striped green"
|
||||
path = /obj/item/clothing/accessory/stripedgreenscarf
|
||||
|
||||
/datum/gear/accessory/scarf/stripedblue
|
||||
display_name = "scarf, striped blue"
|
||||
display_name = "Scarf, striped blue"
|
||||
path = /obj/item/clothing/accessory/stripedbluescarf
|
||||
|
||||
/datum/gear/accessory/holobadge
|
||||
display_name = "holobadge, pin"
|
||||
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"
|
||||
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"
|
||||
display_name = "Tie, blue"
|
||||
path = /obj/item/clothing/accessory/blue
|
||||
|
||||
/datum/gear/accessory/tiered
|
||||
display_name = "tie, red"
|
||||
display_name = "Tie, red"
|
||||
path = /obj/item/clothing/accessory/red
|
||||
|
||||
/datum/gear/accessory/tieblack
|
||||
display_name = "tie, black"
|
||||
display_name = "Tie, black"
|
||||
path = /obj/item/clothing/accessory/black
|
||||
|
||||
/datum/gear/accessory/tiehorrible
|
||||
display_name = "tie, vomit green"
|
||||
display_name = "Tie, vomit green"
|
||||
path = /obj/item/clothing/accessory/horrible
|
||||
|
||||
/datum/gear/accessory/stethoscope
|
||||
display_name = "stethoscope"
|
||||
display_name = "Stethoscope"
|
||||
path = /obj/item/clothing/accessory/stethoscope
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Paramedic", "Brig Physician")
|
||||
|
||||
/datum/gear/accessory/cowboyshirt
|
||||
display_name = "cowboy shirt, black"
|
||||
display_name = "Cowboy shirt, black"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/short_sleeved
|
||||
display_name = "cowboy shirt, short sleeved black"
|
||||
display_name = "Cowboy shirt, short sleeved black"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/short_sleeved
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/white
|
||||
display_name = "cowboy shirt, white"
|
||||
display_name = "Cowboy shirt, white"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/white
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/white/short_sleeved
|
||||
display_name = "cowboy shirt, short sleeved white"
|
||||
display_name = "Cowboy shirt, short sleeved white"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/white/short_sleeved
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/pink
|
||||
display_name = "cowboy shirt, pink"
|
||||
display_name = "Cowboy shirt, pink"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/pink
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/pink/short_sleeved
|
||||
display_name = "cowboy shirt, short sleeved pink"
|
||||
display_name = "Cowboy shirt, short sleeved pink"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/pink/short_sleeved
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/red
|
||||
display_name = "cowboy shirt, red"
|
||||
display_name = "Cowboy shirt, red"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/red
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/red/short_sleeved
|
||||
display_name = "cowboy shirt, short sleeved red"
|
||||
display_name = "Cowboy shirt, short sleeved red"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/red/short_sleeved
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/navy
|
||||
display_name = "cowboy shirt, navy"
|
||||
display_name = "Cowboy shirt, navy"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/navy
|
||||
|
||||
/datum/gear/accessory/cowboyshirt/navy/short_sleeved
|
||||
display_name = "cowboy shirt, short sleeved navy"
|
||||
display_name = "Cowboy shirt, short sleeved navy"
|
||||
path = /obj/item/clothing/accessory/cowboyshirt/navy/short_sleeved
|
||||
|
||||
/datum/gear/accessory/locket
|
||||
display_name = "gold locket"
|
||||
display_name = "Gold locket"
|
||||
path = /obj/item/clothing/accessory/necklace/locket
|
||||
|
||||
/datum/gear/accessory/necklace
|
||||
display_name = "simple necklace"
|
||||
display_name = "Simple necklace"
|
||||
path = /obj/item/clothing/accessory/necklace
|
||||
|
||||
/datum/gear/accessory/corset
|
||||
display_name = "corset, black"
|
||||
display_name = "Corset, black"
|
||||
path = /obj/item/clothing/accessory/corset
|
||||
|
||||
/datum/gear/accessory/corsetred
|
||||
display_name = "corset, red"
|
||||
display_name = "Corset, red"
|
||||
path = /obj/item/clothing/accessory/corset/red
|
||||
|
||||
/datum/gear/accessory/corsetblue
|
||||
display_name = "corset, blue"
|
||||
display_name = "Corset, blue"
|
||||
path = /obj/item/clothing/accessory/corset/blue
|
||||
|
||||
|
||||
/datum/gear/accessory/armband_red
|
||||
display_name = "armband"
|
||||
display_name = "Armband"
|
||||
path = /obj/item/clothing/accessory/armband
|
||||
|
||||
/datum/gear/accessory/armband_civ
|
||||
display_name = "armband, blue-yellow"
|
||||
display_name = "Armband, blue-yellow"
|
||||
path = /obj/item/clothing/accessory/armband/yb
|
||||
|
||||
/datum/gear/accessory/armband_job
|
||||
subtype_path = /datum/gear/accessory/armband_job
|
||||
subtype_cost_overlap = FALSE
|
||||
main_typepath = /datum/gear/accessory/armband_job
|
||||
subtype_selection_cost = FALSE
|
||||
|
||||
/datum/gear/accessory/armband_job/sec
|
||||
display_name = " armband, security"
|
||||
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"
|
||||
display_name = "Armband, cargo"
|
||||
path = /obj/item/clothing/accessory/armband/cargo
|
||||
allowed_roles = list("Quartermaster","Cargo Technician", "Shaft Miner")
|
||||
|
||||
/datum/gear/accessory/armband_job/medical
|
||||
display_name = "armband, medical"
|
||||
display_name = "Armband, medical"
|
||||
path = /obj/item/clothing/accessory/armband/med
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Coroner", "Paramedic", "Brig Physician")
|
||||
|
||||
/datum/gear/accessory/armband_job/emt
|
||||
display_name = "armband, EMT"
|
||||
display_name = "Armband, EMT"
|
||||
path = /obj/item/clothing/accessory/armband/medgreen
|
||||
allowed_roles = list("Paramedic", "Brig Physician")
|
||||
|
||||
/datum/gear/accessory/armband_job/engineering
|
||||
display_name = "armband, engineering"
|
||||
display_name = "Armband, engineering"
|
||||
path = /obj/item/clothing/accessory/armband/engine
|
||||
allowed_roles = list("Chief Engineer","Station Engineer", "Life Support Specialist")
|
||||
|
||||
/datum/gear/accessory/armband_job/hydro
|
||||
display_name = "armband, hydroponics"
|
||||
display_name = "Armband, hydroponics"
|
||||
path = /obj/item/clothing/accessory/armband/hydro
|
||||
allowed_roles = list("Botanist")
|
||||
|
||||
/datum/gear/accessory/armband_job/sci
|
||||
display_name = "armband, science"
|
||||
display_name = "Armband, science"
|
||||
path = /obj/item/clothing/accessory/armband/science
|
||||
allowed_roles = list("Research Director","Scientist", "Roboticist")
|
||||
|
||||
@@ -1,24 +1,37 @@
|
||||
/*
|
||||
######################################################################################
|
||||
## ##
|
||||
## IMPORTANT README ##
|
||||
## ##
|
||||
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
|
||||
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
|
||||
## Please inform the server host if you wish to modify any of these. ##
|
||||
## ##
|
||||
######################################################################################
|
||||
*/
|
||||
|
||||
|
||||
/datum/gear/lipstick
|
||||
display_name = "lipstick, red"
|
||||
display_name = "Lipstick, red"
|
||||
path = /obj/item/lipstick
|
||||
sort_category = "Cosmetics"
|
||||
|
||||
/datum/gear/lipstick/black
|
||||
display_name = "lipstick, black"
|
||||
display_name = "Lipstick, black"
|
||||
path = /obj/item/lipstick/black
|
||||
|
||||
/datum/gear/lipstick/jade
|
||||
display_name = "lipstick, jade"
|
||||
display_name = "Lipstick, jade"
|
||||
path = /obj/item/lipstick/jade
|
||||
|
||||
/datum/gear/lipstick/purple
|
||||
display_name = "lipstick, purple"
|
||||
display_name = "Lipstick, purple"
|
||||
path = /obj/item/lipstick/purple
|
||||
|
||||
/datum/gear/lipstick/blue
|
||||
display_name = "lipstick, blue"
|
||||
display_name = "Lipstick, blue"
|
||||
path = /obj/item/lipstick/blue
|
||||
|
||||
/datum/gear/lipstick/lime
|
||||
display_name = "lipstick, lime"
|
||||
display_name = "Lipstick, lime"
|
||||
path = /obj/item/lipstick/lime
|
||||
|
||||
@@ -1,7 +1,20 @@
|
||||
/*
|
||||
######################################################################################
|
||||
## ##
|
||||
## IMPORTANT README ##
|
||||
## ##
|
||||
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
|
||||
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
|
||||
## Please inform the server host if you wish to modify any of these. ##
|
||||
## ##
|
||||
######################################################################################
|
||||
*/
|
||||
|
||||
|
||||
/datum/gear/donor
|
||||
donator_tier = 2
|
||||
sort_category = "Donor"
|
||||
subtype_path = /datum/gear/donor
|
||||
main_typepath = /datum/gear/donor
|
||||
|
||||
/datum/gear/donor/furgloves
|
||||
display_name = "Fur Gloves"
|
||||
|
||||
@@ -1,136 +1,149 @@
|
||||
/*
|
||||
######################################################################################
|
||||
## ##
|
||||
## IMPORTANT README ##
|
||||
## ##
|
||||
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
|
||||
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
|
||||
## Please inform the server host if you wish to modify any of these. ##
|
||||
## ##
|
||||
######################################################################################
|
||||
*/
|
||||
|
||||
|
||||
/datum/gear/dice
|
||||
display_name = "a d20"
|
||||
display_name = "D20"
|
||||
path = /obj/item/dice/d20
|
||||
|
||||
/datum/gear/uplift
|
||||
display_name = "a pack of Uplifts"
|
||||
display_name = "Pack of Uplifts"
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_uplift
|
||||
|
||||
/datum/gear/robust
|
||||
display_name = "a pack of Robusts"
|
||||
display_name = "Pack of Robusts"
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_robust
|
||||
|
||||
/datum/gear/carp
|
||||
display_name = "a pack of Carps"
|
||||
display_name = "Pack of Carps"
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_carp
|
||||
|
||||
/datum/gear/midori
|
||||
display_name = "a pack of Midoris"
|
||||
display_name = "Pack of Midoris"
|
||||
path = /obj/item/storage/fancy/cigarettes/cigpack_midori
|
||||
|
||||
/datum/gear/smokingpipe
|
||||
display_name = "smoking pipe"
|
||||
display_name = "Smoking pipe"
|
||||
path = /obj/item/clothing/mask/cigarette/pipe
|
||||
cost = 2
|
||||
|
||||
/datum/gear/lighter
|
||||
display_name = "a cheap lighter"
|
||||
display_name = "Cheap lighter"
|
||||
path = /obj/item/lighter
|
||||
|
||||
/datum/gear/matches
|
||||
display_name = "a box of matches"
|
||||
display_name = "Box of matches"
|
||||
path = /obj/item/storage/box/matches
|
||||
|
||||
/datum/gear/candlebox
|
||||
display_name = "a box candles"
|
||||
display_name = "Box of candles"
|
||||
description = "For setting the mood or for occult rituals."
|
||||
path = /obj/item/storage/fancy/candle_box/full
|
||||
|
||||
/datum/gear/rock
|
||||
display_name = "a pet rock"
|
||||
display_name = "Pet rock"
|
||||
path = /obj/item/toy/pet_rock
|
||||
|
||||
/datum/gear/camera
|
||||
display_name = "a camera"
|
||||
display_name = "Camera"
|
||||
path = /obj/item/camera
|
||||
|
||||
/datum/gear/redfoxplushie
|
||||
display_name = "a red fox plushie"
|
||||
display_name = "Red fox plushie"
|
||||
path = /obj/item/toy/plushie/red_fox
|
||||
|
||||
/datum/gear/blackcatplushie
|
||||
display_name = "a black cat plushie"
|
||||
display_name = "Black cat plushie"
|
||||
path = /obj/item/toy/plushie/black_cat
|
||||
|
||||
/datum/gear/voxplushie
|
||||
display_name = "a vox plushie"
|
||||
display_name = "Vox plushie"
|
||||
path = /obj/item/toy/plushie/voxplushie
|
||||
|
||||
/datum/gear/lizardplushie
|
||||
display_name = "a lizard plushie"
|
||||
display_name = "Lizard plushie"
|
||||
path = /obj/item/toy/plushie/lizardplushie
|
||||
|
||||
/datum/gear/deerplushie
|
||||
display_name = "a deer plushie"
|
||||
display_name = "Deer plushie"
|
||||
path = /obj/item/toy/plushie/deer
|
||||
|
||||
/datum/gear/carpplushie
|
||||
display_name = "a carp plushie"
|
||||
display_name = "Carp plushie"
|
||||
path = /obj/item/toy/carpplushie
|
||||
|
||||
/datum/gear/sechud
|
||||
display_name = "a classic security HUD"
|
||||
display_name = "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"
|
||||
display_name = "Box of crayons"
|
||||
path = /obj/item/storage/fancy/crayons
|
||||
|
||||
/datum/gear/cane
|
||||
display_name = "a walking cane"
|
||||
display_name = "Walking cane"
|
||||
path = /obj/item/cane
|
||||
|
||||
/datum/gear/cards
|
||||
display_name = "a deck of standard cards"
|
||||
display_name = "Deck of standard cards"
|
||||
path = /obj/item/deck/cards
|
||||
|
||||
/datum/gear/doublecards
|
||||
display_name = "a double deck of standard cards"
|
||||
display_name = "Double deck of standard cards"
|
||||
path = /obj/item/deck/doublecards
|
||||
|
||||
/datum/gear/tarot
|
||||
display_name = "a deck of tarot cards"
|
||||
display_name = "Deck of tarot cards"
|
||||
path = /obj/item/deck/tarot
|
||||
|
||||
/datum/gear/headphones
|
||||
display_name = "a pair of headphones"
|
||||
display_name = "Headphones"
|
||||
path = /obj/item/clothing/ears/headphones
|
||||
|
||||
/datum/gear/fannypack
|
||||
display_name = "a fannypack"
|
||||
display_name = "Fannypack"
|
||||
path = /obj/item/storage/belt/fannypack
|
||||
|
||||
/datum/gear/blackbandana
|
||||
display_name = "bandana, black"
|
||||
display_name = "Bandana, black"
|
||||
path = /obj/item/clothing/mask/bandana/black
|
||||
|
||||
/datum/gear/purplebandana
|
||||
display_name = "bandana, purple"
|
||||
display_name = "Bandana, purple"
|
||||
path = /obj/item/clothing/mask/bandana/purple
|
||||
|
||||
/datum/gear/orangebandana
|
||||
display_name = "bandana, orange"
|
||||
display_name = "Bandana, orange"
|
||||
path = /obj/item/clothing/mask/bandana/orange
|
||||
|
||||
/datum/gear/greenbandana
|
||||
display_name = "bandana, green"
|
||||
display_name = "Bandana, green"
|
||||
path = /obj/item/clothing/mask/bandana/green
|
||||
|
||||
/datum/gear/bluebandana
|
||||
display_name = "bandana, blue"
|
||||
display_name = "Bandana, blue"
|
||||
path = /obj/item/clothing/mask/bandana/blue
|
||||
|
||||
/datum/gear/redbandana
|
||||
display_name = "bandana, red"
|
||||
display_name = "Bandana, red"
|
||||
path = /obj/item/clothing/mask/bandana/red
|
||||
|
||||
/datum/gear/goldbandana
|
||||
display_name = "bandana, gold"
|
||||
display_name = "Bandana, gold"
|
||||
path = /obj/item/clothing/mask/bandana/gold
|
||||
|
||||
/datum/gear/skullbandana
|
||||
display_name = "bandana, skull"
|
||||
display_name = "Bandana, skull"
|
||||
path = /obj/item/clothing/mask/bandana/skull
|
||||
|
||||
/datum/gear/mob_hunt_game
|
||||
@@ -143,54 +156,54 @@
|
||||
//////////////////////
|
||||
|
||||
/datum/gear/mug
|
||||
display_name = "random coffee mug"
|
||||
display_name = "Coffee mug, random"
|
||||
description = "A randomly colored coffee mug. You'll need to supply your own beverage though."
|
||||
path = /obj/item/reagent_containers/food/drinks/mug
|
||||
sort_category = "Mugs"
|
||||
|
||||
/datum/gear/novelty_mug
|
||||
display_name = "novelty coffee mug"
|
||||
display_name = "Coffee mug, novelty"
|
||||
description = "A random novelty coffee mug. You'll need to supply your own beverage though."
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/novelty
|
||||
cost = 2
|
||||
sort_category = "Mugs"
|
||||
|
||||
/datum/gear/mug/flask
|
||||
display_name = "flask"
|
||||
display_name = "Flask"
|
||||
description = "A flask for drink transportation. You'll need to supply your own beverage though."
|
||||
path = /obj/item/reagent_containers/food/drinks/flask/barflask
|
||||
|
||||
/datum/gear/mug/department
|
||||
subtype_path = /datum/gear/mug/department
|
||||
main_typepath = /datum/gear/mug/department
|
||||
sort_category = "Mugs"
|
||||
subtype_cost_overlap = FALSE
|
||||
subtype_selection_cost = FALSE
|
||||
|
||||
/datum/gear/mug/department/eng
|
||||
display_name = "engineer coffee mug"
|
||||
display_name = "Coffee mug, engineering"
|
||||
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
|
||||
display_name = "doctor coffee mug"
|
||||
display_name = "Coffee mug, medical"
|
||||
description = "A doctor's coffee mug, emblazoned in the colors of the Medical department."
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Psychiatrist", "Paramedic", "Virologist", "Coroner")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/med
|
||||
|
||||
/datum/gear/mug/department/sci
|
||||
display_name = "scientist coffee mug"
|
||||
display_name = "Coffee mug, science"
|
||||
description = "A scientist's coffee mug, emblazoned in the colors of the Science department."
|
||||
allowed_roles = list("Research Director", "Scientist", "Roboticist")
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/sci
|
||||
|
||||
/datum/gear/mug/department/sec
|
||||
display_name = "officer coffee mug"
|
||||
display_name = "Coffee mug, security"
|
||||
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
|
||||
display_name = "crewmember coffee mug"
|
||||
display_name = "Coffee mug, service"
|
||||
description = "A crewmember's coffee mug, emblazoned in the colors of the Service department."
|
||||
path = /obj/item/reagent_containers/food/drinks/mug/serv
|
||||
|
||||
|
||||
@@ -1,10 +1,23 @@
|
||||
/*
|
||||
######################################################################################
|
||||
## ##
|
||||
## IMPORTANT README ##
|
||||
## ##
|
||||
## Changing any /datum/gear typepaths --WILL-- break people's loadouts. ##
|
||||
## The typepaths are stored directly in the `characters.gear` column of the DB. ##
|
||||
## Please inform the server host if you wish to modify any of these. ##
|
||||
## ##
|
||||
######################################################################################
|
||||
*/
|
||||
|
||||
|
||||
/datum/gear/glasses
|
||||
subtype_path = /datum/gear/glasses
|
||||
main_typepath = /datum/gear/glasses
|
||||
slot = slot_glasses
|
||||
sort_category = "Glasses"
|
||||
|
||||
/datum/gear/glasses/sunglasses
|
||||
display_name = "cheap sunglasses"
|
||||
display_name = "Cheap sunglasses"
|
||||
path = /obj/item/clothing/glasses/sunglasses_fake
|
||||
|
||||
/datum/gear/glasses/eyepatch
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user