mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-08-30 16:38:22 +01:00
Update, May 2018
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
--
|
||||
-- Combines the ss13_admin and ss13_player table
|
||||
--
|
||||
ALTER TABLE `ss13_cargo_items`
|
||||
ADD COLUMN `created_by` VARCHAR(50) NULL DEFAULT NULL AFTER `order_by`,
|
||||
ADD COLUMN `approved_by` VARCHAR(50) NULL DEFAULT NULL AFTER `created_by`,
|
||||
ADD COLUMN `approved_at` DATETIME NULL DEFAULT NULL AFTER `created_at`;
|
||||
|
||||
UPDATE ss13_cargo_items SET approved_at = NOW()
|
||||
@@ -0,0 +1,21 @@
|
||||
--
|
||||
-- Adds a new table to load the regulations ("laws") from
|
||||
--
|
||||
CREATE TABLE `ss13_law` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`law_id` VARCHAR(4) NOT NULL,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`description` VARCHAR(500) NOT NULL,
|
||||
`min_fine` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`max_fine` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`min_brig_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`max_brig_time` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`severity` INT(10) UNSIGNED NULL DEFAULT '0',
|
||||
`felony` INT(10) UNSIGNED NOT NULL DEFAULT '0',
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`deleted_at` DATETIME NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE INDEX `UNIQUE LAW` (`law_id`)
|
||||
)
|
||||
ENGINE=InnoDB;
|
||||
@@ -0,0 +1,35 @@
|
||||
--
|
||||
-- Adds a new table to load news from
|
||||
--
|
||||
CREATE TABLE `ss13_news_channels` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`name` VARCHAR(50) NOT NULL,
|
||||
`author` VARCHAR(50) NOT NULL,
|
||||
`locked` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
|
||||
`is_admin_channel` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
|
||||
`announcement` VARCHAR(200) NOT NULL,
|
||||
`created_by` VARCHAR(50) NOT NULL,
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`deleted_at` DATETIME NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
)
|
||||
ENGINE=InnoDB;
|
||||
|
||||
CREATE TABLE `ss13_news_stories` (
|
||||
`id` INT(11) NOT NULL AUTO_INCREMENT,
|
||||
`channel_id` INT(11) NOT NULL,
|
||||
`author` VARCHAR(50) NOT NULL,
|
||||
`body` TEXT NOT NULL,
|
||||
`message_type` VARCHAR(50) NOT NULL DEFAULT 'Story',
|
||||
`is_admin_message` TINYINT(3) UNSIGNED NOT NULL DEFAULT '1',
|
||||
`time_stamp` DATETIME NULL DEFAULT NULL,
|
||||
`created_by` VARCHAR(50) NOT NULL,
|
||||
`created_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated_at` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
`deleted_at` DATETIME NULL DEFAULT NULL,
|
||||
PRIMARY KEY (`id`),
|
||||
INDEX `FK_ss13_news_stories_ss13_news_channels` (`channel_id`),
|
||||
CONSTRAINT `FK_ss13_news_stories_ss13_news_channels` FOREIGN KEY (`channel_id`) REFERENCES `ss13_news_channels` (`id`)
|
||||
)
|
||||
ENGINE=InnoDB;
|
||||
+7
-2
@@ -170,6 +170,7 @@
|
||||
#include "code\controllers\subsystems\machinery.dm"
|
||||
#include "code\controllers\subsystems\mob.dm"
|
||||
#include "code\controllers\subsystems\mob_ai.dm"
|
||||
#include "code\controllers\subsystems\news.dm"
|
||||
#include "code\controllers\subsystems\night_lighting.dm"
|
||||
#include "code\controllers\subsystems\orbit.dm"
|
||||
#include "code\controllers\subsystems\overlays.dm"
|
||||
@@ -190,8 +191,8 @@
|
||||
#include "code\controllers\subsystems\zcopy.dm"
|
||||
#include "code\controllers\subsystems\initialization\atlas.dm"
|
||||
#include "code\controllers\subsystems\initialization\atoms.dm"
|
||||
#include "code\controllers\subsystems\initialization\holomap.dm"
|
||||
#include "code\controllers\subsystems\initialization\map_finalization.dm"
|
||||
#include "code\controllers\subsystems\initialization\minimap.dm"
|
||||
#include "code\controllers\subsystems\initialization\misc_early.dm"
|
||||
#include "code\controllers\subsystems\initialization\misc_late.dm"
|
||||
#include "code\controllers\subsystems\initialization\xenoarch.dm"
|
||||
@@ -370,7 +371,6 @@
|
||||
#include "code\game\antagonist\antagonist_update.dm"
|
||||
#include "code\game\antagonist\alien\borer.dm"
|
||||
#include "code\game\antagonist\alien\xenomorph.dm"
|
||||
#include "code\game\antagonist\outsider\actors.dm"
|
||||
#include "code\game\antagonist\outsider\commando.dm"
|
||||
#include "code\game\antagonist\outsider\deathsquad.dm"
|
||||
#include "code\game\antagonist\outsider\ert.dm"
|
||||
@@ -745,6 +745,7 @@
|
||||
#include "code\game\objects\items\devices\megaphone.dm"
|
||||
#include "code\game\objects\items\devices\modkit.dm"
|
||||
#include "code\game\objects\items\devices\multitool.dm"
|
||||
#include "code\game\objects\items\devices\oxycandle.dm"
|
||||
#include "code\game\objects\items\devices\paicard.dm"
|
||||
#include "code\game\objects\items\devices\pipe_painter.dm"
|
||||
#include "code\game\objects\items\devices\powersink.dm"
|
||||
@@ -1254,6 +1255,7 @@
|
||||
#include "code\modules\clothing\under\color.dm"
|
||||
#include "code\modules\clothing\under\miscellaneous.dm"
|
||||
#include "code\modules\clothing\under\shorts.dm"
|
||||
#include "code\modules\clothing\under\skirts.dm"
|
||||
#include "code\modules\clothing\under\syndicate.dm"
|
||||
#include "code\modules\clothing\under\accessories\accessory.dm"
|
||||
#include "code\modules\clothing\under\accessories\armband.dm"
|
||||
@@ -1266,6 +1268,7 @@
|
||||
#include "code\modules\clothing\under\jobs\medsci.dm"
|
||||
#include "code\modules\clothing\under\jobs\security.dm"
|
||||
#include "code\modules\clothing\under\xenos\resomi.dm"
|
||||
#include "code\modules\clothing\under\xenos\tajara.dm"
|
||||
#include "code\modules\customitems\item_defines.dm"
|
||||
#include "code\modules\customitems\item_spawning.dm"
|
||||
#include "code\modules\detectivework\footprints.dm"
|
||||
@@ -2058,6 +2061,8 @@
|
||||
#include "code\modules\reagents\reagent_containers\food.dm"
|
||||
#include "code\modules\reagents\reagent_containers\glass.dm"
|
||||
#include "code\modules\reagents\reagent_containers\hypospray.dm"
|
||||
#include "code\modules\reagents\reagent_containers\inhaler.dm"
|
||||
#include "code\modules\reagents\reagent_containers\inhaler_advanced.dm"
|
||||
#include "code\modules\reagents\reagent_containers\pill.dm"
|
||||
#include "code\modules\reagents\reagent_containers\spray.dm"
|
||||
#include "code\modules\reagents\reagent_containers\syringes.dm"
|
||||
|
||||
@@ -1,8 +1,6 @@
|
||||
//node1, air1, network1 correspond to input
|
||||
//node2, air2, network2 correspond to output
|
||||
|
||||
#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
|
||||
|
||||
/obj/machinery/atmospherics/binary/circulator
|
||||
name = "circulator"
|
||||
desc = "A gas circulator turbine and heat exchanger."
|
||||
|
||||
@@ -1,5 +1,3 @@
|
||||
#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
|
||||
|
||||
/obj/machinery/atmospherics/pipeturbine
|
||||
name = "turbine"
|
||||
desc = "A gas turbine. Converting pressure into energy since 1884."
|
||||
|
||||
@@ -3,13 +3,16 @@
|
||||
#define PLANE_SPACE_DUST (PLANE_SPACE_PARALLAX + 1) // -96
|
||||
#define PLANE_ABOVE_PARALLAX (PLANE_SPACE_BACKGROUND + 3) // -95
|
||||
|
||||
// Custom layer definitions, supplementing the default TURF_LAYER, MOB_LAYER, etc.
|
||||
|
||||
#define LOWER_ON_TURF_LAYER (TURF_LAYER + 0.05) // under the below
|
||||
#define ON_TURF_LAYER (TURF_LAYER + 0.1) // sitting on the turf - should be preferred over direct use of TURF_LAYER
|
||||
#define AO_LAYER (ON_TURF_LAYER + 0.1)
|
||||
#define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
|
||||
#define UNDERDOOR 3.09 //Just barely under a closed door.
|
||||
#define DOOR_CLOSED_LAYER 3.1 //Above most items if closed
|
||||
#define BELOW_MOB_LAYER 3.7
|
||||
#define ABOVE_MOB_LAYER 4.1
|
||||
#define LIGHTING_LAYER 11
|
||||
#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put
|
||||
#define HUD_LAYER 20 //Above lighting, but below obfuscation. For in-game HUD effects (whereas SCREEN_LAYER is for abstract/OOC things like inventory slots)
|
||||
#define OBFUSCATION_LAYER 21 //Where images covering the view for eyes are put
|
||||
#define SCREEN_LAYER 22 //Mob HUD/effects layer
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#define Clamp(x, y, z) (x <= y ? y : (x >= z ? z : x))
|
||||
#define Clamp(x, low, high) max(low, min(high, x))
|
||||
#define CLAMP01(x) (Clamp(x, 0, 1))
|
||||
|
||||
#define span(class, text) ("<span class='[class]'>[text]</span>")
|
||||
|
||||
@@ -95,3 +95,5 @@
|
||||
#define ATMOSTANK_CO2 25000 // CO2 and PH are not critically important for station, only for toxins and alternative coolants, no need to store a lot of those.
|
||||
#define ATMOSTANK_PHORON 25000
|
||||
#define ATMOSTANK_NITROUSOXIDE 10000 // N2O doesn't have a real useful use, i guess it's on station just to allow refilling of sec's riot control canisters?
|
||||
|
||||
#define ADIABATIC_EXPONENT 0.667 //Actually adiabatic exponent - 1.
|
||||
|
||||
@@ -39,3 +39,25 @@ var/list/tachycardics = list("coffee", "inaprovaline", "hyperzine", "nitroglyce
|
||||
var/list/bradycardics = list("neurotoxin", "cryoxadone", "clonexadone", "space_drugs", "stoxin") // Decrease heart rate.
|
||||
var/list/heartstopper = list("potassium_chlorophoride", "zombie_powder") // This stops the heart.
|
||||
var/list/cheartstopper = list("potassium_chloride") // This stops the heart when overdose is met. -- c = conditional
|
||||
|
||||
//Alcohol
|
||||
#define INTOX_BUZZED 0.01
|
||||
#define INTOX_JUDGEIMP 0.03
|
||||
#define INTOX_MUSCLEIMP 0.08
|
||||
#define INTOX_REACTION 0.10
|
||||
#define INTOX_VOMIT 0.12
|
||||
#define INTOX_BALANCE 0.15
|
||||
#define INTOX_BLACKOUT 0.20
|
||||
#define INTOX_CONSCIOUS 0.30
|
||||
#define INTOX_DEATH 0.45
|
||||
|
||||
//How many units of intoxication to remove per second
|
||||
#define INTOX_FILTER_HEALTHY 0.015
|
||||
#define INTOX_FILTER_BRUISED 0.010
|
||||
#define INTOX_FILTER_DAMAGED 0.05
|
||||
|
||||
#define BASE_DIZZY 50 //Base dizziness from getting drunk.
|
||||
#define DIZZY_ADD_SCALE 15 //Amount added for every 0.01 percent over the JUDGEIMP limit
|
||||
|
||||
#define BASE_VOMIT_CHANCE 10 //Base chance
|
||||
#define VOMIT_CHANCE_SCALE 2.5 //Percent change added for every 0.01 percent over the VOMIT limit
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
#define ANTAG_RANDSPAWN 0x100 // Potentially randomly spawns due to events.
|
||||
#define ANTAG_VOTABLE 0x200 // Can be voted as an additional antagonist before roundstart.
|
||||
#define ANTAG_SET_APPEARANCE 0x400 // Causes antagonists to use an appearance modifier on spawn.
|
||||
#define ANTAG_RANDOM_EXCEPTED 0x800 // If a game mode randomly selects antag types, antag types with this flag should be excluded.
|
||||
|
||||
// Mode/antag template macros.
|
||||
#define MODE_BORER "borer"
|
||||
@@ -35,7 +36,6 @@
|
||||
#define MODE_COMMANDO "commando"
|
||||
#define MODE_DEATHSQUAD "deathsquad"
|
||||
#define MODE_ERT "ert"
|
||||
#define MODE_ACTOR "actor"
|
||||
#define MODE_MERCENARY "mercenary"
|
||||
#define MODE_NINJA "ninja"
|
||||
#define MODE_RAIDER "raider"
|
||||
@@ -46,7 +46,6 @@
|
||||
#define MODE_MONKEY "monkey"
|
||||
#define MODE_RENEGADE "renegade"
|
||||
#define MODE_REVOLUTIONARY "revolutionary"
|
||||
#define MODE_LOYALIST "loyalist"
|
||||
#define MODE_MALFUNCTION "malf"
|
||||
#define MODE_TRAITOR "traitor"
|
||||
#define MODE_VAMPIRE "vampire"
|
||||
|
||||
@@ -16,6 +16,13 @@
|
||||
// If defined, instant updates will be used whenever server load permits. Otherwise queued updates are always used.
|
||||
#define USE_INTELLIGENT_LIGHTING_UPDATES
|
||||
|
||||
// If defined, lighting corners will 'bleed' luminosity to corners above them to simulate cross-Z lighting upwards. Downwards Z-lighting will continue to work with this disabled.
|
||||
#define USE_CORNER_ZBLEED
|
||||
|
||||
#define TURF_IS_DYNAMICALLY_LIT(T) (isturf(T) && T:dynamic_lighting && T:loc:dynamic_lighting)
|
||||
// mostly identical to above, but doesn't make sure T is valid first. Should only be used by lighting code.
|
||||
#define TURF_IS_DYNAMICALLY_LIT_UNSAFE(T) (T:dynamic_lighting && T:loc:dynamic_lighting)
|
||||
|
||||
// If I were you I'd leave this alone.
|
||||
#define LIGHTING_BASE_MATRIX \
|
||||
list \
|
||||
|
||||
@@ -19,7 +19,6 @@
|
||||
#define T20C 293.15 // 20.0 degrees celcius
|
||||
#define TCMB 2.7 // -270.3 degrees celcius
|
||||
|
||||
#define CLAMP01(x) max(0, min(1, x))
|
||||
#define QUANTIZE(variable) (round(variable,0.0001))
|
||||
|
||||
#define INFINITY 1.#INF
|
||||
|
||||
+11
-10
@@ -250,16 +250,10 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
#define CAPTURE_MODE_ALL 1 //Admin camera mode
|
||||
#define CAPTURE_MODE_PARTIAL 3 //Simular to regular mode, but does not do dummy check
|
||||
|
||||
//Sound effects toggles
|
||||
#define ASFX_AMBIENCE 1
|
||||
#define ASFX_FOOTSTEPS 2
|
||||
#define ASFX_VOTE 4
|
||||
|
||||
//Cargo random stock vars
|
||||
//These are used in randomstock.dm
|
||||
//And also for generating random loot crates in crates.dm
|
||||
#define TOTAL_STOCK 80//The total number of items we'll spawn in cargo stock
|
||||
|
||||
#define TOTAL_STOCK 100//The total number of items we'll spawn in cargo stock
|
||||
|
||||
#define STOCK_UNCOMMON_PROB 23
|
||||
//The probability, as a percentage for each item, that we'll choose from the uncommon spawns list
|
||||
@@ -270,7 +264,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
//If an item is not rare or uncommon, it will be chosen from the common spawns list.
|
||||
//So the probability of a common item is 100 - (uncommon + rare)
|
||||
|
||||
|
||||
#define STOCK_LARGE_PROB 75
|
||||
//Large items are spawned on predetermined locations.
|
||||
//For each large spawn marker, this is the chance that we will spawn there
|
||||
@@ -278,8 +271,6 @@ Will print: "/mob/living/carbon/human/death" (you can optionally embed it in a s
|
||||
|
||||
// Law settings
|
||||
#define PERMABRIG_SENTENCE 90 // Measured in minutes
|
||||
//#define PERMAPRISON_SENTENCE 60 // Measured in IC days
|
||||
#define FELONY_LEVEL 2.0 // What is the minimum law severity that counts as a felony?
|
||||
|
||||
#define LAYER_TABLE 2.8
|
||||
#define LAYER_UNDER_TABLE 2.79
|
||||
@@ -456,3 +447,13 @@ Define for getting a bitfield of adjacent turfs that meet a condition.
|
||||
#define MAX_SOUND_Z_TRAVERSAL 2
|
||||
|
||||
#define Z_ALL_TURFS(Z) block(locate(1, 1, Z), locate(world.maxx, world.maxy, Z))
|
||||
|
||||
|
||||
// Z-controller stuff - see basic.dm to see why the fuck this is the way it is.
|
||||
#define IS_VALID_ZINDEX(z) !((z) > world.maxz || z > 17 || z < 2)
|
||||
|
||||
#define HAS_ABOVE(z) (IS_VALID_ZINDEX(z) && z_levels & (1 << (z - 1)))
|
||||
#define HAS_BELOW(z) (IS_VALID_ZINDEX(z) && z_levels & (1 << (z - 2)))
|
||||
|
||||
#define GET_ABOVE(A) (HAS_ABOVE(A:z) ? get_step(A, UP) : null)
|
||||
#define GET_BELOW(A) (HAS_BELOW(A:z) ? get_step(A, DOWN) : null)
|
||||
|
||||
@@ -100,9 +100,7 @@
|
||||
#define INV_R_HAND_DEF_ICON 'icons/mob/items/righthand.dmi'
|
||||
#define INV_W_UNIFORM_DEF_ICON 'icons/mob/uniform.dmi'
|
||||
#define INV_ACCESSORIES_DEF_ICON 'icons/mob/ties.dmi'
|
||||
#define INV_SUIT_DEF_ICON 'icons/mob/ties.dmi'
|
||||
#define INV_SUIT_DEF_ICON 'icons/mob/suit.dmi'
|
||||
#define MAX_SUPPLIED_LAW_NUMBER 50
|
||||
|
||||
// NT's alignment towards the character
|
||||
#define COMPANY_LOYAL "Loyal"
|
||||
|
||||
@@ -40,6 +40,7 @@
|
||||
#define LANGUAGE_SIIK_TAJR "Siik'tajr"
|
||||
#define LANGUAGE_SIGN_TAJARA "Nal'rasan"
|
||||
#define LANGUAGE_YA_SSA "Ya'ssa"
|
||||
#define LANGUAGE_DELVAHII "Delvahhi"
|
||||
#define LANGUAGE_SKRELLIAN "Nral'Malic"
|
||||
#define LANGUAGE_RESOMI "Resomi"
|
||||
#define LANGUAGE_ROOTSONG "Rootsong"
|
||||
|
||||
+19
-16
@@ -5,13 +5,13 @@
|
||||
// will get logs that are one big line if the system is Linux and they are using notepad. This solves it by adding CR to every line ending
|
||||
// in the logs. ascii character 13 = CR
|
||||
|
||||
#define SEVERITY_ALERT 1
|
||||
#define SEVERITY_CRITICAL 2
|
||||
#define SEVERITY_ERROR 3
|
||||
#define SEVERITY_WARNING 4
|
||||
#define SEVERITY_NOTICE 5
|
||||
#define SEVERITY_INFO 6
|
||||
#define SEVERITY_DEBUG 7
|
||||
#define SEVERITY_ALERT 1 //Alert: action must be taken immediately
|
||||
#define SEVERITY_CRITICAL 2 //Critical: critical conditions
|
||||
#define SEVERITY_ERROR 3 //Error: error conditions
|
||||
#define SEVERITY_WARNING 4 //Warning: warning conditions
|
||||
#define SEVERITY_NOTICE 5 //Notice: normal but significant condition
|
||||
#define SEVERITY_INFO 6 //Informational: informational messages
|
||||
#define SEVERITY_DEBUG 7 //Debug: debug-level messages
|
||||
|
||||
/var/global/log_end = world.system_type == UNIX ? ascii2text(13) : ""
|
||||
|
||||
@@ -39,6 +39,9 @@
|
||||
/proc/log_debug(text,level = SEVERITY_DEBUG)
|
||||
if (config.log_debug)
|
||||
game_log("DEBUG", text)
|
||||
|
||||
if (level == SEVERITY_ERROR) // Errors are always logged
|
||||
error(text)
|
||||
|
||||
for(var/client/C in admins)
|
||||
if(!C.prefs) //This is to avoid null.toggles runtime error while still initialyzing players preferences
|
||||
@@ -51,7 +54,7 @@
|
||||
if (config.log_game)
|
||||
game_log("GAME", text)
|
||||
send_gelf_log(
|
||||
short_message = text,
|
||||
short_message = text,
|
||||
long_message = "[time_stamp()]: [text]",
|
||||
level = level,
|
||||
category = "GAME",
|
||||
@@ -92,8 +95,8 @@
|
||||
if (config.log_attack)
|
||||
game_log("ATTACK", text)
|
||||
send_gelf_log(
|
||||
short_message = text,
|
||||
long_message = "[time_stamp()]: [text]",
|
||||
short_message = text,
|
||||
long_message = "[time_stamp()]: [text]",
|
||||
level = level,
|
||||
category="ATTACK",
|
||||
additional_data = list("_ckey" = html_encode(ckey), "_ckey_target" = html_encode(ckey_target))
|
||||
@@ -108,7 +111,7 @@
|
||||
if (config.log_pda)
|
||||
game_log("PDA", text)
|
||||
send_gelf_log(
|
||||
short_message = text,
|
||||
short_message = text,
|
||||
long_message = "[time_stamp()]: [text]",
|
||||
level = level,
|
||||
category="PDA",
|
||||
@@ -119,9 +122,9 @@
|
||||
if (config.log_pda)
|
||||
game_log("NTIRC", text)
|
||||
send_gelf_log(
|
||||
short_message = text,
|
||||
long_message="[time_stamp()]: [text]",
|
||||
level = level,
|
||||
short_message = text,
|
||||
long_message="[time_stamp()]: [text]",
|
||||
level = level,
|
||||
category = "NTIRC",
|
||||
additional_data = list("_ckey" = html_encode(ckey), "_ntirc_conversation" = html_encode(conversation))
|
||||
)
|
||||
@@ -187,7 +190,7 @@
|
||||
return english_list(comps, nothing_text="0", and_text="|", comma_text="|")
|
||||
|
||||
//more or less a logging utility
|
||||
/proc/key_name(var/whom, var/include_link = null, var/include_name = 1, var/highlight_special = 0, var/datum/ticket/ticket = null)
|
||||
/proc/key_name(var/whom, var/include_link = null, var/include_name = 1, var/highlight_special = 0, var/datum/ticket/ticket = null)
|
||||
var/mob/M
|
||||
var/client/C
|
||||
var/key
|
||||
@@ -217,7 +220,7 @@
|
||||
|
||||
if(key)
|
||||
if(include_link && C)
|
||||
. += "<a href='?priv_msg=\ref[C];ticket=\ref[ticket]'>"
|
||||
. += "<a href='?priv_msg=\ref[C];ticket=\ref[ticket]'>"
|
||||
|
||||
if(C && C.holder && C.holder.fakekey && !include_name)
|
||||
. += "Administrator"
|
||||
|
||||
@@ -259,6 +259,7 @@
|
||||
LAZYCLEARLIST(parallax)
|
||||
LAZYCLEARLIST(parallax_movable)
|
||||
|
||||
#undef GRID_WIDTH
|
||||
#undef PARALLAX4_ICON_NUMBER
|
||||
#undef PARALLAX3_ICON_NUMBER
|
||||
#undef PARALLAX2_ICON_NUMBER
|
||||
|
||||
@@ -603,7 +603,7 @@
|
||||
SearchVar(floor_light_cache)
|
||||
SearchVar(HOLOPAD_MODE)
|
||||
SearchVar(navbeacons)
|
||||
SearchVar(news_network)
|
||||
SearchVar(SSnews)
|
||||
SearchVar(allCasters)
|
||||
SearchVar(bomb_set)
|
||||
SearchVar(req_console_assistance)
|
||||
@@ -829,7 +829,7 @@
|
||||
SearchVar(lunchables_snacks_)
|
||||
SearchVar(lunchables_drinks_)
|
||||
SearchVar(lunchables_drink_reagents_)
|
||||
SearchVar(lunchables_ethanol_reagents_)
|
||||
SearchVar(lunchables_alcohol_reagents_)
|
||||
SearchVar(message_servers)
|
||||
SearchVar(blackbox)
|
||||
SearchVar(responsive_carriers)
|
||||
|
||||
+8
-8
@@ -1,9 +1,9 @@
|
||||
// Minimap generation system adapted from vorestation, adapted from /vg/.
|
||||
// Seems to be much simpler/saner than /vg/'s implementation.
|
||||
|
||||
/var/datum/controller/subsystem/minimap/SSminimap
|
||||
/var/datum/controller/subsystem/holomap/SSholomap
|
||||
|
||||
/datum/controller/subsystem/minimap
|
||||
/datum/controller/subsystem/holomap
|
||||
name = "Holomap"
|
||||
flags = SS_NO_FIRE
|
||||
init_order = SS_INIT_HOLOMAP
|
||||
@@ -12,15 +12,15 @@
|
||||
var/list/extra_minimaps = list()
|
||||
var/list/station_holomaps = list()
|
||||
|
||||
/datum/controller/subsystem/minimap/New()
|
||||
NEW_SS_GLOBAL(SSminimap)
|
||||
/datum/controller/subsystem/holomap/New()
|
||||
NEW_SS_GLOBAL(SSholomap)
|
||||
|
||||
/datum/controller/subsystem/minimap/Initialize()
|
||||
/datum/controller/subsystem/holomap/Initialize()
|
||||
holo_minimaps.len = world.maxz
|
||||
for (var/z in 1 to world.maxz)
|
||||
holo_minimaps[z] = generateHoloMinimap(z)
|
||||
|
||||
log_debug("SSminimap: [holo_minimaps.len] maps.")
|
||||
log_debug("SSholomap: [holo_minimaps.len] maps.")
|
||||
|
||||
for (var/z in current_map.station_levels)
|
||||
generateStationMinimap(z)
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
|
||||
// Generates the "base" holomap for one z-level, showing only the physical structure of walls and paths.
|
||||
/datum/controller/subsystem/minimap/proc/generateHoloMinimap(zlevel = 1)
|
||||
/datum/controller/subsystem/holomap/proc/generateHoloMinimap(zlevel = 1)
|
||||
// Save these values now to avoid a bazillion array lookups
|
||||
var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zlevel)
|
||||
var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zlevel)
|
||||
@@ -77,7 +77,7 @@
|
||||
|
||||
return canvas
|
||||
|
||||
/datum/controller/subsystem/minimap/proc/generateStationMinimap(zlevel)
|
||||
/datum/controller/subsystem/holomap/proc/generateStationMinimap(zlevel)
|
||||
// Save these values now to avoid a bazillion array lookups
|
||||
var/offset_x = HOLOMAP_PIXEL_OFFSET_X(zlevel)
|
||||
var/offset_y = HOLOMAP_PIXEL_OFFSET_Y(zlevel)
|
||||
@@ -13,6 +13,12 @@
|
||||
NEW_SS_GLOBAL(SSlaw)
|
||||
|
||||
/datum/controller/subsystem/law/Initialize(timeofday)
|
||||
if(config.sql_enabled)
|
||||
load_from_sql()
|
||||
else
|
||||
load_from_code()
|
||||
|
||||
/datum/controller/subsystem/law/proc/load_from_code()
|
||||
for (var/L in subtypesof(/datum/law/low_severity))
|
||||
low_severity += new L
|
||||
|
||||
@@ -23,3 +29,64 @@
|
||||
high_severity += new L
|
||||
|
||||
laws = low_severity + med_severity + high_severity
|
||||
|
||||
/datum/controller/subsystem/law/proc/load_from_sql()
|
||||
if(!establish_db_connection(dbcon))
|
||||
log_debug("SSlaw: SQL ERROR - Failed to connect.")
|
||||
return load_from_code()
|
||||
|
||||
var/DBQuery/law_query = dbcon.NewQuery("SELECT law_id, name, description, min_fine, max_fine, min_brig_time, max_brig_time, severity, felony FROM ss13_law WHERE deleted_at IS NULL ORDER BY law_id ASC")
|
||||
law_query.Execute()
|
||||
while(law_query.NextRow())
|
||||
CHECK_TICK
|
||||
try
|
||||
var/datum/law/L = new
|
||||
L.id = law_query.item[1]
|
||||
L.name = law_query.item[2]
|
||||
L.desc = law_query.item[3]
|
||||
L.min_fine = text2num(law_query.item[4])
|
||||
L.max_fine = text2num(law_query.item[5])
|
||||
L.min_brig_time = text2num(law_query.item[6])
|
||||
L.max_brig_time = text2num(law_query.item[7])
|
||||
L.severity = text2num(law_query.item[8])
|
||||
L.felony = text2num(law_query.item[9])
|
||||
|
||||
if(L.severity == 1)
|
||||
low_severity += L
|
||||
else if(L.severity == 2)
|
||||
med_severity += L
|
||||
else if(L.severity == 3)
|
||||
high_severity += L
|
||||
else
|
||||
throw("Law with id: [L.id] deleted due to invalid severity: [L.severity]")
|
||||
qdel(L)
|
||||
catch(var/exception/el)
|
||||
log_debug("SSlaw: Error when loading law: [el]")
|
||||
|
||||
laws = low_severity + med_severity + high_severity
|
||||
if(!laws.len)
|
||||
log_debug("SSlaw: No laws loaded. Loading from code and migrating to SQL")
|
||||
load_from_code()
|
||||
migrate_to_sql()
|
||||
|
||||
/datum/controller/subsystem/law/proc/migrate_to_sql()
|
||||
for(var/datum/law/L in laws)
|
||||
log_debug("SSlaw: Migrating law [L.id] to SQL")
|
||||
var/DBQuery/law_update_query = dbcon.NewQuery({"
|
||||
INSERT IGNORE INTO ss13_law
|
||||
(law_id, name, description, min_fine, max_fine, min_brig_time, max_brig_time, severity, felony)
|
||||
VALUES
|
||||
(:law_id:, :name:, :desc:, :min_fine:, :max_fine:, :min_brig_time:, :max_brig_time:, :severity:, :felony:)
|
||||
"})
|
||||
law_update_query.Execute(list(
|
||||
"law_id"=L.id,
|
||||
"name"=L.name,
|
||||
"desc"=L.desc,
|
||||
"min_fine"=L.min_fine,
|
||||
"max_fine"=L.max_fine,
|
||||
"min_brig_time"=L.min_brig_time,
|
||||
"max_brig_time"=L.max_brig_time,
|
||||
"severity"=L.severity,
|
||||
"felony"=L.felony
|
||||
))
|
||||
return
|
||||
@@ -0,0 +1,163 @@
|
||||
/var/datum/controller/subsystem/news/SSnews
|
||||
|
||||
/datum/controller/subsystem/news
|
||||
name = "News"
|
||||
flags = SS_NO_FIRE
|
||||
var/list/datum/feed_channel/network_channels = list()
|
||||
var/datum/feed_message/wanted_issue
|
||||
|
||||
/datum/controller/subsystem/news/Recover()
|
||||
src.network_channels = SSnews.network_channels
|
||||
src.wanted_issue = SSnews.wanted_issue
|
||||
|
||||
/datum/controller/subsystem/news/New()
|
||||
NEW_SS_GLOBAL(SSnews)
|
||||
|
||||
/datum/controller/subsystem/news/Initialize(timeofday)
|
||||
CreateFeedChannel("Station Announcements", "Automatic Announcement System", 1, 1, "New Station Announcement Available")
|
||||
CreateFeedChannel("Tau Ceti Daily", "CentComm Minister of Information", 1, 1)
|
||||
CreateFeedChannel("The Gibson Gazette", "Editor Carl Ritz", 1, 1)
|
||||
if(config.sql_enabled)
|
||||
load_from_sql()
|
||||
..()
|
||||
|
||||
/datum/controller/subsystem/news/proc/load_from_sql()
|
||||
if(!establish_db_connection(dbcon))
|
||||
log_debug("SSnews: SQL ERROR - Failed to connect.")
|
||||
return
|
||||
var/DBQuery/channel_query = dbcon.NewQuery("SELECT id, name, author, locked, is_admin_channel, announcement FROM ss13_news_channels WHERE deleted_at IS NULL ORDER BY name ASC")
|
||||
channel_query.Execute()
|
||||
while(channel_query.NextRow())
|
||||
CHECK_TICK
|
||||
var/datum/feed_channel/channel = null
|
||||
try
|
||||
channel = CreateFeedChannel(
|
||||
channel_query.item[2],
|
||||
channel_query.item[3],
|
||||
text2num(channel_query.item[4]),
|
||||
text2num(channel_query.item[5]),
|
||||
channel_query.item[6])
|
||||
catch(var/exception/ec)
|
||||
log_debug("SSnews: Error when loading channel: [ec]")
|
||||
continue
|
||||
var/DBQuery/news_query = dbcon.NewQuery("SELECT body, author, is_admin_message, message_type, time_stamp FROM ss13_news_stories WHERE deleted_at IS NULL AND channel_id = :channel_id: ORDER BY created_at DESC")
|
||||
news_query.Execute(list("channel_id" = channel_query.item[1]))
|
||||
while(news_query.NextRow())
|
||||
CHECK_TICK
|
||||
try
|
||||
SubmitArticle(news_query.item[1], news_query.item[2], channel, null, text2num(news_query.item[3]), news_query.item[4], news_query.item[5])
|
||||
catch(var/exception/en)
|
||||
log_debug("SSnews: Error when loading news: [en]")
|
||||
|
||||
/datum/controller/subsystem/news/proc/GetFeedChannel(var/channel_name)
|
||||
if(network_channels[channel_name])
|
||||
return network_channels[channel_name]
|
||||
return null
|
||||
|
||||
/datum/controller/subsystem/news/proc/CreateFeedChannel(var/channel_name, var/author, var/locked, var/adminChannel = 0, var/announcement_message)
|
||||
var/datum/feed_channel/newChannel = new /datum/feed_channel
|
||||
newChannel.channel_name = channel_name
|
||||
newChannel.author = author
|
||||
newChannel.locked = locked
|
||||
newChannel.is_admin_channel = adminChannel
|
||||
if(announcement_message)
|
||||
newChannel.announcement = announcement_message
|
||||
else
|
||||
newChannel.announcement = "Breaking news from [channel_name]!"
|
||||
network_channels[channel_name] = newChannel
|
||||
return newChannel
|
||||
|
||||
/datum/controller/subsystem/news/proc/SubmitArticle(var/msg, var/author, var/datum/feed_channel/channel, var/obj/item/weapon/photo/photo, var/adminMessage = 0, var/message_type = "", var/time_stamp)
|
||||
if(!channel)
|
||||
log_debug("SSnews: Attempted to submit a article from [author] without a proper channel",SEVERITY_ERROR)
|
||||
return
|
||||
|
||||
var/datum/feed_message/newMsg = new /datum/feed_message
|
||||
newMsg.author = author
|
||||
newMsg.body = msg
|
||||
if(time_stamp)
|
||||
newMsg.time_stamp = time_stamp
|
||||
else
|
||||
newMsg.time_stamp = "[worldtime2text()]"
|
||||
newMsg.is_admin_message = adminMessage
|
||||
if(message_type)
|
||||
newMsg.message_type = message_type
|
||||
if(photo)
|
||||
newMsg.img = photo.img
|
||||
newMsg.caption = photo.scribble
|
||||
insert_message_in_channel(channel, newMsg) //Adding message to the network's appropriate feed_channel
|
||||
|
||||
/datum/controller/subsystem/news/proc/insert_message_in_channel(var/datum/feed_channel/FC, var/datum/feed_message/newMsg)
|
||||
FC.messages += newMsg
|
||||
newMsg.parent_channel = FC
|
||||
FC.update()
|
||||
alert_readers(FC.announcement)
|
||||
|
||||
/datum/controller/subsystem/news/proc/alert_readers(var/annoncement)
|
||||
set waitfor = FALSE
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.newsAlert(annoncement)
|
||||
NEWSCASTER.update_icon()
|
||||
|
||||
var/list/receiving_pdas = new
|
||||
for (var/obj/item/device/pda/P in PDAs)
|
||||
if (!P.owner)
|
||||
continue
|
||||
if (P.toff)
|
||||
continue
|
||||
receiving_pdas += P
|
||||
|
||||
for(var/obj/item/device/pda/PDA in receiving_pdas)
|
||||
PDA.new_news(annoncement)
|
||||
|
||||
|
||||
/datum/feed_message
|
||||
var/author =""
|
||||
var/body =""
|
||||
var/message_type ="Story"
|
||||
var/datum/feed_channel/parent_channel
|
||||
var/is_admin_message = 0
|
||||
var/icon/img = null
|
||||
var/icon/caption = ""
|
||||
var/time_stamp = ""
|
||||
var/backup_body = ""
|
||||
var/backup_author = ""
|
||||
var/icon/backup_img = null
|
||||
var/icon/backup_caption = ""
|
||||
|
||||
/datum/feed_message/proc/clear()
|
||||
src.author = ""
|
||||
src.body = ""
|
||||
src.caption = ""
|
||||
src.img = null
|
||||
src.time_stamp = ""
|
||||
src.backup_body = ""
|
||||
src.backup_author = ""
|
||||
src.backup_caption = ""
|
||||
src.backup_img = null
|
||||
parent_channel.update()
|
||||
|
||||
/datum/feed_channel
|
||||
var/channel_name=""
|
||||
var/list/datum/feed_message/messages = list()
|
||||
var/locked=0 //If public stories are accepted
|
||||
var/author=""
|
||||
var/backup_author=""
|
||||
var/censored=0
|
||||
var/is_admin_channel=0 //If it can be censored, ...
|
||||
var/updated = 0
|
||||
var/announcement = "" //The text that should be broadcasted when a new story is posted
|
||||
|
||||
/datum/feed_channel/proc/update()
|
||||
updated = world.time
|
||||
|
||||
/datum/feed_channel/proc/clear()
|
||||
src.channel_name = ""
|
||||
src.messages = list()
|
||||
src.locked = 0
|
||||
src.author = ""
|
||||
src.backup_author = ""
|
||||
src.censored = 0
|
||||
src.is_admin_channel = 0
|
||||
src.announcement = ""
|
||||
update()
|
||||
@@ -1,6 +1,6 @@
|
||||
//Config stuff
|
||||
#define SUPPLY_DOCKZ 2 //Z-level of the Dock.
|
||||
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
|
||||
#define SUPPLY_DOCKZ 1 //Z-level of the Dock.
|
||||
#define SUPPLY_STATIONZ 6 //Z-level of the Station.
|
||||
#define SUPPLY_STATION_AREATYPE /area/supply/station //Type of the supply shuttle area for station
|
||||
#define SUPPLY_DOCK_AREATYPE /area/supply/dock //Type of the supply shuttle area for dock
|
||||
|
||||
@@ -182,7 +182,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
catch(var/exception/es)
|
||||
log_debug("SScargo: Error when loading supplier: [es]")
|
||||
//Load the items
|
||||
var/DBQuery/item_query = dbcon.NewQuery("SELECT id, name, supplier, description, categories, price, items, access, container_type, groupable, item_mul FROM ss13_cargo_items WHERE deleted_at is NULL AND supplier IS NOT NULL ORDER BY order_by ASC, name ASC, supplier ASC")
|
||||
var/DBQuery/item_query = dbcon.NewQuery("SELECT id, name, supplier, description, categories, price, items, access, container_type, groupable, item_mul FROM ss13_cargo_items WHERE deleted_at IS NULL AND approved_at IS NOT NULL AND supplier IS NOT NULL ORDER BY order_by ASC, name ASC, supplier ASC")
|
||||
item_query.Execute()
|
||||
while(item_query.NextRow())
|
||||
CHECK_TICK
|
||||
@@ -257,7 +257,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
cargoconfig["items"][item]["access"],
|
||||
cargoconfig["items"][item]["container_type"],
|
||||
cargoconfig["items"][item]["groupable"],
|
||||
cargoconfig["items"][item]["item_mul"])
|
||||
cargoconfig["items"][item]["item_mul"])
|
||||
catch(var/exception/ei)
|
||||
log_debug("SScargo: Error when loading supplier: [ei]")
|
||||
return 1
|
||||
@@ -292,7 +292,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
|
||||
//Add a new item to the cargo subsystem, the categories and the items need to be a list and CAN NOT be passed as a json string.
|
||||
//Decoding of the string MUST take place before
|
||||
/datum/controller/subsystem/cargo/proc/add_item(var/id=null,var/name,var/supplier="nt",var/description,var/list/categories,var/price,var/list/items,var/access=0,var/container_type=CARGO_CONTAINER_CRATE,var/groupable=1,var/item_mul=1)
|
||||
/datum/controller/subsystem/cargo/proc/add_item(var/id=null,var/name,var/supplier="nt",var/description,var/list/categories,var/price,var/list/items,var/access=0,var/container_type=CARGO_CONTAINER_CRATE,var/groupable=1,var/item_mul=1)
|
||||
//TODO-CARGO: Maybe add the option to specify access as string instead of number
|
||||
|
||||
//If no item ID is supplied generate one ourselfs (use the next free id)
|
||||
@@ -303,7 +303,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
id = text2num(id)
|
||||
if(id > last_item_id)
|
||||
last_item_id = id
|
||||
|
||||
|
||||
var/datum/cargo_item/ci = new()
|
||||
try
|
||||
ci.id = id
|
||||
@@ -322,7 +322,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
log_debug("SScargo: Error when loading item: [e]")
|
||||
qdel(ci)
|
||||
return
|
||||
|
||||
|
||||
for(var/item in ci.items)
|
||||
var/itempath = text2path(ci.items[item]["path"])
|
||||
if(!ispath(itempath))
|
||||
@@ -341,7 +341,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
log_debug("SScargo: [ci.supplier] is not a valid supplier for item [ci.name].")
|
||||
QDEL_NULL(ci)
|
||||
return
|
||||
|
||||
|
||||
//Setting the supplier
|
||||
ci.supplier_datum = cs
|
||||
|
||||
@@ -362,7 +362,7 @@ var/datum/controller/subsystem/cargo/SScargo
|
||||
cc.items.Add(ci)
|
||||
else
|
||||
log_debug("SScargo: Warning - Attempted to add [ci.name] item to category [category] that does not exist.")
|
||||
|
||||
|
||||
return ci
|
||||
|
||||
/*
|
||||
|
||||
@@ -387,6 +387,12 @@ var/datum/controller/subsystem/ticker/SSticker
|
||||
SSjobs.DivideOccupations() // Apparently important for new antagonist system to register specific job antags properly.
|
||||
|
||||
if(!src.mode.can_start())
|
||||
var/list/voted_not_ready = list()
|
||||
for(var/mob/abstract/new_player/player in player_list)
|
||||
if((player.client)&&(!player.ready))
|
||||
voted_not_ready += player.ckey
|
||||
message_admins("The following players voted for [mode.name], but did not ready up: [jointext(voted_not_ready, ", ")]")
|
||||
log_game("Ticker: Players voted for [mode.name], but did not ready up: [jointext(voted_not_ready, ", ")]")
|
||||
world << "<B>Unable to start [mode.name].</B> Not enough players, [mode.required_players] players needed. Reverting to pre-game lobby."
|
||||
current_state = GAME_STATE_PREGAME
|
||||
mode.fail_setup()
|
||||
|
||||
@@ -259,6 +259,7 @@ var/datum/controller/subsystem/vote/SSvote
|
||||
if("restart")
|
||||
choices.Add("Restart Round","Continue Playing")
|
||||
if("gamemode")
|
||||
round_voters.Cut() //Delete the old list, since we are having a new gamemode vote
|
||||
if(SSticker.current_state >= 2)
|
||||
return 0
|
||||
choices.Add(config.votable_modes)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#define OPENTURF_MAX_PLANE -71
|
||||
#define OPENTURF_CAP_PLANE -70 // The multiplier goes here so it'll be on top of every other overlay.
|
||||
#define OPENTURF_MAX_DEPTH 10 // The maxiumum number of planes deep we'll go before we just dump everything on the same plane.
|
||||
#define SHADOWER_DARKENING_FACTOR 0.4 // The multiplication factor for openturf shadower darkness. Lighting will be multiplied by this.
|
||||
#define SHADOWER_DARKENING_FACTOR 0.85 // The multiplication factor for openturf shadower darkness. Lighting will be multiplied by this.
|
||||
|
||||
/var/datum/controller/subsystem/zcopy/SSzcopy
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ var/list/all_supply_groups = list("Operations","Security","Hospitality","Enginee
|
||||
name = "Illegal weapons crate"
|
||||
num_contained = 2
|
||||
contains = list(/obj/item/weapon/gun/projectile/automatic/mini_uzi,
|
||||
/obj/item/weapon/gun/projectile/boltaction,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle,
|
||||
/obj/item/weapon/gun/projectile/silenced,
|
||||
/obj/item/weapon/gun/projectile/pirate,
|
||||
/obj/item/weapon/gun/projectile/revolver/derringer,
|
||||
|
||||
@@ -128,6 +128,7 @@ They sell generic supplies and ask for generic supplies.
|
||||
/obj/item/weapon/storage/pill_bottle = TRADER_SUBTYPES_ONLY,
|
||||
/obj/item/weapon/reagent_containers/hypospray = TRADER_ALL,
|
||||
/obj/item/device/healthanalyzer = TRADER_THIS_TYPE,
|
||||
/obj/item/device/breath_analyzer = TRADER_THIS_TYPE,
|
||||
/obj/item/stack/medical/bruise_pack = TRADER_THIS_TYPE,
|
||||
/obj/item/stack/medical/ointment = TRADER_THIS_TYPE,
|
||||
/obj/item/stack/medical/advanced = TRADER_SUBTYPES_ONLY,
|
||||
|
||||
@@ -223,6 +223,7 @@ Sells devices, odds and ends, and medical stuff
|
||||
/obj/item/device/paicard = TRADER_THIS_TYPE,
|
||||
/obj/item/device/pipe_painter = TRADER_THIS_TYPE,
|
||||
/obj/item/device/healthanalyzer = TRADER_THIS_TYPE,
|
||||
/obj/item/device/breath_analyzer = TRADER_THIS_TYPE,
|
||||
/obj/item/device/analyzer = TRADER_ALL,
|
||||
/obj/item/device/mass_spectrometer = TRADER_ALL,
|
||||
/obj/item/device/reagent_scanner = TRADER_ALL,
|
||||
|
||||
@@ -88,7 +88,7 @@
|
||||
)
|
||||
|
||||
possible_trading_items = list(
|
||||
/obj/item/weapon/gun/projectile/boltaction = TRADER_ALL,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle = TRADER_ALL,
|
||||
/obj/item/weapon/gun/projectile/dragunov = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/gun/projectile/silenced = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun = TRADER_THIS_TYPE,
|
||||
@@ -100,7 +100,7 @@
|
||||
/obj/item/weapon/gun/projectile/pirate = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/gun/projectile/contender = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/gun/projectile/revolver/lemat = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/gun/projectile/boltaction/vintage = TRADER_THIS_TYPE
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/vintage = TRADER_THIS_TYPE
|
||||
)
|
||||
|
||||
|
||||
@@ -142,4 +142,4 @@
|
||||
/obj/item/clothing/mask/gas/tactical = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/shield/riot/tact = TRADER_THIS_TYPE,
|
||||
/obj/item/weapon/storage/belt/security/tactical = TRADER_THIS_TYPE
|
||||
)
|
||||
)
|
||||
|
||||
@@ -24,7 +24,10 @@
|
||||
item_cost = 12
|
||||
path = /obj/item/weapon/storage/firstaid/combat
|
||||
|
||||
/datum/uplink_item/item/medical/trisyndicotin
|
||||
name = "Mind-freeing pills"
|
||||
item_cost = 3
|
||||
path = /obj/item/weapon/storage/pill_bottle/trisyndicotin
|
||||
/datum/uplink_item/item/medical/stimulants
|
||||
name = "Box of Combat Stimulants"
|
||||
item_cost = 6
|
||||
path = /obj/item/weapon/storage/box/syndie_kit/stimulants
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ var/const/VENDING_WIRE_IDSCAN = 8
|
||||
if(VENDING_WIRE_THROW)
|
||||
V.shoot_inventory = !mended
|
||||
if(VENDING_WIRE_CONTRABAND)
|
||||
V.categories &= ~CAT_HIDDEN
|
||||
V.categories &= ~CAT_HIDDEN
|
||||
if(VENDING_WIRE_ELECTRIFY)
|
||||
if(mended)
|
||||
V.seconds_electrified = 0
|
||||
|
||||
@@ -128,7 +128,7 @@ DBQuery/proc/Execute(var/list/argument_list = null, var/pass_not_found = 0, sql_
|
||||
|
||||
var/error = ErrorMsg()
|
||||
if (error)
|
||||
error("SQL Error: '[error]'")
|
||||
log_debug("SQL Error: '[error]'",SEVERITY_ERROR)
|
||||
// This is hacky and should probably be changed
|
||||
if (error == "MySQL server has gone away")
|
||||
log_game("MySQL connection drop detected, attempting to reconnect.")
|
||||
|
||||
@@ -74,20 +74,4 @@
|
||||
reception.telecomms_reception |= get_receiver_reception(receiver, signal)
|
||||
reception.message = signal && signal.data["compression"] > 0 ? Gibberish(message, signal.data["compression"] + 50) : message
|
||||
|
||||
return reception
|
||||
|
||||
/proc/get_receptions(var/atom/sender, var/list/atom/receivers, var/do_sleep = 1)
|
||||
var/datum/receptions/receptions = new
|
||||
receptions.message_server = get_message_server()
|
||||
|
||||
var/datum/signal/signal
|
||||
if(sender)
|
||||
signal = sender.telecomms_process(do_sleep)
|
||||
receptions.sender_reception = get_sender_reception(sender, signal)
|
||||
|
||||
for(var/atom/receiver in receivers)
|
||||
if(!signal)
|
||||
signal = receiver.telecomms_process()
|
||||
receptions.receiver_reception[receiver] = get_receiver_reception(receiver, signal)
|
||||
|
||||
return receptions
|
||||
return reception
|
||||
@@ -14,20 +14,6 @@
|
||||
- To skip equipping with appropriate gear, supply a positive third argument.
|
||||
*/
|
||||
|
||||
// Antagonist datum flags.
|
||||
#define ANTAG_OVERRIDE_JOB 1 // Assigned job is set to MODE when spawning.
|
||||
#define ANTAG_OVERRIDE_MOB 2 // Mob is recreated from datum mob_type var when spawning.
|
||||
#define ANTAG_CLEAR_EQUIPMENT 4 // All preexisting equipment is purged.
|
||||
#define ANTAG_CHOOSE_NAME 8 // Antagonists are prompted to enter a name.
|
||||
#define ANTAG_IMPLANT_IMMUNE 16 // Cannot be loyalty implanted.
|
||||
#define ANTAG_SUSPICIOUS 32 // Shows up on roundstart report.
|
||||
#define ANTAG_HAS_LEADER 64 // Generates a leader antagonist.
|
||||
#define ANTAG_HAS_NUKE 128 // Will spawn a nuke at supplied location.
|
||||
#define ANTAG_RANDSPAWN 256 // Potentially randomly spawns due to events.
|
||||
#define ANTAG_VOTABLE 512 // Can be voted as an additional antagonist before roundstart.
|
||||
#define ANTAG_SET_APPEARANCE 1024 // Causes antagonists to use an appearance modifier on spawn.
|
||||
#define ANTAG_RANDOM_EXCEPTED 2048 // If a game mode randomly selects antag types, antag types with this flag should be excluded.
|
||||
|
||||
// Globals.
|
||||
var/global/list/all_antag_types = list()
|
||||
var/global/list/all_antag_spawnpoints = list()
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
var/datum/antagonist/actor/actor
|
||||
|
||||
/datum/antagonist/actor
|
||||
id = MODE_ACTOR
|
||||
bantype = "actor"
|
||||
role_text = "NanoTrasen Actor"
|
||||
role_text_plural = "NanoTrasen Actors"
|
||||
welcome_text = "You've been hired to entertain people through the power of television!"
|
||||
landmark_id = "ActorSpawn"
|
||||
id_type = /obj/item/weapon/card/id/syndicate
|
||||
|
||||
flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_CHOOSE_NAME
|
||||
|
||||
hard_cap = 7
|
||||
hard_cap_round = 10
|
||||
initial_spawn_req = 1
|
||||
initial_spawn_target = 1
|
||||
|
||||
/datum/antagonist/actor/New()
|
||||
..()
|
||||
actor = src
|
||||
|
||||
/datum/antagonist/actor/greet(var/datum/mind/player)
|
||||
if(!..())
|
||||
return
|
||||
|
||||
player.current.show_message("You work for [current_map.company_name], tasked with the production and broadcasting of entertainment to all of its assets.")
|
||||
player.current.show_message("Entertain the crew! Try not to disrupt them from their work too much and remind them how great [current_map.company_name] is!")
|
||||
|
||||
/datum/antagonist/actor/equip(var/mob/living/carbon/human/player)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/under/chameleon(src), slot_w_uniform)
|
||||
player.equip_to_slot_or_del(new /obj/item/clothing/shoes/chameleon(src), slot_shoes)
|
||||
player.equip_to_slot_or_del(new /obj/item/device/radio/headset/entertainment(src), slot_l_ear)
|
||||
var/obj/item/weapon/card/id/centcom/ERT/C = new(player.loc)
|
||||
C.assignment = "Actor"
|
||||
player.set_id_info(C)
|
||||
player.equip_to_slot_or_del(C,slot_wear_id)
|
||||
|
||||
return 1
|
||||
|
||||
/*
|
||||
/client/verb/join_as_actor()
|
||||
set category = "IC"
|
||||
set name = "Join as Actor"
|
||||
set desc = "Join as an Actor to entertain the crew through television!"
|
||||
|
||||
if(!MayRespawn(1))
|
||||
return
|
||||
|
||||
var/choice = alert("Are you sure you'd like to join as an actor?", "Confirmation","Yes", "No")
|
||||
if(choice != "Yes")
|
||||
return
|
||||
|
||||
if(istype(usr,/mob/abstract/observer) || istype(usr,/mob/abstract/new_player))
|
||||
if(actor.current_antagonists.len >= actor.hard_cap)
|
||||
usr << "No more actors may spawn at the current time."
|
||||
return
|
||||
actor.create_default(usr)
|
||||
return
|
||||
|
||||
usr << "You must be observing or be a new player to spawn as an actor."
|
||||
*/
|
||||
@@ -6,7 +6,7 @@ var/datum/antagonist/deathsquad/mercenary/commandos
|
||||
role_text = "Syndicate Commando"
|
||||
role_text_plural = "Commandos"
|
||||
welcome_text = "You are in the employ of a criminal syndicate hostile to corporate interests."
|
||||
id_type = /obj/item/weapon/card/id/centcom/ERT
|
||||
id_type = /obj/item/weapon/card/id/ert
|
||||
|
||||
hard_cap = 4
|
||||
hard_cap_round = 8
|
||||
|
||||
@@ -8,9 +8,9 @@ var/datum/antagonist/ert/ert
|
||||
welcome_text = "As member of the Emergency Response Team, you answer only to your leader and CentComm officials."
|
||||
leader_welcome_text = "As leader of the Emergency Response Team, you answer only to CentComm, and have authority to override the Captain where it is necessary to achieve your mission goals. It is recommended that you attempt to cooperate with the captain where possible, however."
|
||||
landmark_id = "Response Team"
|
||||
|
||||
id_type = /obj/item/weapon/card/id/centcom/ERT
|
||||
|
||||
|
||||
id_type = /obj/item/weapon/card/id/ert
|
||||
|
||||
flags = ANTAG_OVERRIDE_JOB | ANTAG_SET_APPEARANCE | ANTAG_HAS_LEADER | ANTAG_CHOOSE_NAME | ANTAG_RANDOM_EXCEPTED
|
||||
antaghud_indicator = "hudloyalist"
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ var/datum/antagonist/raider/raiders
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/pellet,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn,
|
||||
/obj/item/weapon/gun/projectile/boltaction,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle,
|
||||
/obj/item/weapon/gun/projectile/colt,
|
||||
/obj/item/weapon/gun/projectile/sec,
|
||||
/obj/item/weapon/gun/projectile/pistol,
|
||||
@@ -103,7 +103,7 @@ var/datum/antagonist/raider/raiders
|
||||
/obj/item/weapon/gun/projectile/contender,
|
||||
/obj/item/weapon/gun/projectile/pirate,
|
||||
/obj/item/weapon/gun/projectile/tanto,
|
||||
/obj/item/weapon/gun/projectile/boltaction/vintage
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/vintage
|
||||
)
|
||||
|
||||
|
||||
|
||||
@@ -35,6 +35,16 @@ var/datum/antagonist/cultist/cult
|
||||
|
||||
faction = "cult"
|
||||
|
||||
restricted_species = list(
|
||||
"Baseline Frame",
|
||||
"Shell Frame",
|
||||
"Hephaestus G1 Industrial Frame",
|
||||
"Hephaestus G2 Industrial Frame",
|
||||
"Xion Industrial Frame",
|
||||
"Zeng-Hu Mobility Frame",
|
||||
"Bishop Accessory Frame"
|
||||
)
|
||||
|
||||
var/allow_narsie = 1
|
||||
var/datum/mind/sacrifice_target
|
||||
var/list/allwords = list("travel","self","see","hell","blood","join","tech","destroy", "other", "hide")
|
||||
|
||||
@@ -45,7 +45,6 @@ var/datum/antagonist/loyalists/loyalists
|
||||
loyal_obj.explanation_text = "Protect [player.real_name], the [player.mind.assigned_role]."
|
||||
global_objectives += loyal_obj
|
||||
|
||||
|
||||
/datum/antagonist/loyalists/equip(var/mob/living/carbon/human/player)
|
||||
|
||||
if(!..())
|
||||
|
||||
@@ -26,7 +26,7 @@ var/datum/antagonist/renegade/renegades
|
||||
/obj/item/weapon/gun/projectile/deagle/camo,
|
||||
/obj/item/weapon/gun/projectile/pistol,
|
||||
/obj/item/weapon/gun/projectile/shotgun/doublebarrel/sawn,
|
||||
/obj/item/weapon/gun/projectile/boltaction/obrez,
|
||||
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/obrez,
|
||||
/obj/item/weapon/gun/projectile/automatic,
|
||||
/obj/item/weapon/gun/projectile/automatic/c20r,
|
||||
/obj/item/weapon/gun/projectile/automatic/tommygun,
|
||||
|
||||
@@ -58,10 +58,6 @@ var/global/list/datum/dna/gene/dna_genes[0]
|
||||
// Used for genes that check for value rather than a binary on/off.
|
||||
#define GENE_ALWAYS_ACTIVATE 1
|
||||
|
||||
// Skip checking if it's already active.
|
||||
// Used for genes that check for value rather than a binary on/off.
|
||||
#define GENE_ALWAYS_ACTIVATE 1
|
||||
|
||||
/datum/dna
|
||||
// READ-ONLY, GETS OVERWRITTEN
|
||||
// DO NOT FUCK WITH THESE OR BYOND WILL EAT YOUR FACE
|
||||
|
||||
@@ -133,6 +133,11 @@ var/list/sacrificed = list()
|
||||
target.hallucination = min(target.hallucination, 500)
|
||||
return 0
|
||||
|
||||
//If you dont have blood, blood magic doesnt work on you
|
||||
if(target.is_mechanical())
|
||||
attacker << "<span class='danger'>You sense that your powers can not effect them.</span>"
|
||||
return 0
|
||||
|
||||
target.take_overall_damage(0, rand(5, 20)) // You dirty resister cannot handle the damage to your mind. Easily. - even cultists who accept right away should experience some effects
|
||||
// Resist messages go!
|
||||
if(initial_message) //don't do this stuff right away, only if they resist or hesitate.
|
||||
|
||||
@@ -213,7 +213,7 @@
|
||||
to_chat(src, "<span class='warning'>Your powers are not capable of taking you that far.</span>")
|
||||
return
|
||||
|
||||
if (!T.dynamic_lighting || T.get_lumcount() > 0.1)
|
||||
if (T.get_lumcount() > 0.1)
|
||||
// Too bright, cannot jump into.
|
||||
to_chat(src, "<span class='warning'>The destination is too bright.</span>")
|
||||
return
|
||||
|
||||
@@ -401,6 +401,12 @@
|
||||
desc = "Detective Equipment"
|
||||
region = ACCESS_REGION_SECURITY
|
||||
|
||||
/var/const/access_weapons = 69
|
||||
/datum/access/access_weapons
|
||||
id = access_weapons
|
||||
desc = "Weaponry Permission"
|
||||
region = ACCESS_REGION_SECURITY
|
||||
|
||||
/******************
|
||||
* Central Command *
|
||||
******************/
|
||||
|
||||
@@ -77,13 +77,13 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 1)
|
||||
access = list(access_sec_doors, access_medical, access_engine, access_change_ids, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth, access_gateway)
|
||||
access_chapel_office, access_library, access_research, access_mining, access_mining_station, access_janitor,
|
||||
access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_weapons)
|
||||
minimal_access = list(access_sec_doors, access_medical, access_engine, access_change_ids, access_eva, access_heads,
|
||||
access_all_personal_lockers, access_maint_tunnels, access_bar, access_janitor, access_construction,
|
||||
access_crematorium, access_kitchen, access_cargo, access_cargo_bot, access_mailsorting, access_qm, access_hydroponics,
|
||||
access_chapel_office, access_library, access_research, access_mining, access_mining_station,
|
||||
access_hop, access_RC_announce, access_keycard_auth, access_gateway)
|
||||
access_chapel_office, access_library, access_research, access_mining, access_mining_station, access_janitor,
|
||||
access_hop, access_RC_announce, access_keycard_auth, access_gateway, access_weapons)
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
|
||||
@@ -186,6 +186,36 @@
|
||||
H.species.equip_survival_gear(H,1)
|
||||
return TRUE
|
||||
|
||||
//Not engineers, just the mop boys
|
||||
/datum/job/janitor
|
||||
title = "Janitor"
|
||||
flag = JANITOR
|
||||
department = "Civilian"
|
||||
department_flag = CIVILIAN
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the head of personnel"
|
||||
selection_color = "#dddddd"
|
||||
access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
|
||||
minimal_access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
|
||||
|
||||
bag_type = /obj/item/weapon/storage/backpack
|
||||
satchel_type = /obj/item/weapon/storage/backpack/satchel_norm
|
||||
duffel_type = /obj/item/weapon/storage/backpack/satchel
|
||||
messenger_bag_type = /obj/item/weapon/storage/backpack/duffel
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
return FALSE
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_service(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
|
||||
return TRUE
|
||||
|
||||
|
||||
//More or less assistants
|
||||
/datum/job/librarian
|
||||
title = "Librarian"
|
||||
|
||||
@@ -18,11 +18,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_research, access_medical, access_janitor,
|
||||
access_heads, access_construction, access_sec_doors, access_research, access_medical,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
|
||||
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_research, access_medical, access_janitor,
|
||||
access_heads, access_construction, access_sec_doors, access_research, access_medical,
|
||||
access_ce, access_RC_announce, access_keycard_auth, access_tcomsat, access_ai_upload)
|
||||
minimal_player_age = 7
|
||||
|
||||
@@ -133,32 +133,4 @@
|
||||
if(!H)
|
||||
return FALSE
|
||||
H.species.equip_survival_gear(H,1)
|
||||
return TRUE
|
||||
|
||||
/datum/job/janitor
|
||||
title = "Janitor"
|
||||
flag = JANITOR
|
||||
department = "Engineering"
|
||||
department_flag = ENGSEC
|
||||
faction = "Station"
|
||||
total_positions = 2
|
||||
spawn_positions = 2
|
||||
supervisors = "the chief engineer"
|
||||
selection_color = "#fff5cc"
|
||||
access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
|
||||
minimal_access = list(access_janitor, access_maint_tunnels, access_engine, access_research, access_sec_doors, access_medical)
|
||||
|
||||
bag_type = /obj/item/weapon/storage/backpack
|
||||
satchel_type = /obj/item/weapon/storage/backpack/satchel_norm
|
||||
duffel_type = /obj/item/weapon/storage/backpack/satchel
|
||||
messenger_bag_type = /obj/item/weapon/storage/backpack/duffel
|
||||
|
||||
|
||||
equip(var/mob/living/carbon/human/H)
|
||||
if(!H)
|
||||
return FALSE
|
||||
H.equip_to_slot_or_del(new /obj/item/device/radio/headset/headset_eng(H), slot_l_ear)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/janitor(H), slot_w_uniform)
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)
|
||||
H.equip_to_slot_or_del(new /obj/item/device/pda/janitor(H), slot_belt)
|
||||
return TRUE
|
||||
return TRUE
|
||||
@@ -16,12 +16,12 @@
|
||||
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_external_airlocks,
|
||||
access_detective)
|
||||
access_detective, access_weapons)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory,
|
||||
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_external_airlocks,
|
||||
access_detective)
|
||||
access_detective, access_weapons)
|
||||
minimal_player_age = 14
|
||||
|
||||
bag_type = /obj/item/weapon/storage/backpack/security
|
||||
@@ -62,8 +62,8 @@
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
economic_modifier = 5
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks)
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_morgue, access_external_airlocks, access_weapons)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_armory, access_maint_tunnels, access_external_airlocks, access_weapons)
|
||||
minimal_player_age = 7
|
||||
|
||||
bag_type = /obj/item/weapon/storage/backpack/security
|
||||
@@ -107,8 +107,8 @@
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
economic_modifier = 5
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_detective)
|
||||
minimal_access = list(access_security, access_sec_doors, access_morgue, access_maint_tunnels, access_detective)
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_detective, access_weapons)
|
||||
minimal_access = list(access_security, access_sec_doors, access_morgue, access_maint_tunnels, access_detective, access_weapons)
|
||||
minimal_player_age = 7
|
||||
|
||||
|
||||
@@ -143,8 +143,8 @@
|
||||
supervisors = "the head of security"
|
||||
selection_color = "#ffeeee"
|
||||
economic_modifier = 5
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels)
|
||||
access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_weapons)
|
||||
minimal_access = list(access_security, access_sec_doors, access_forensics_lockers, access_morgue, access_maint_tunnels, access_weapons)
|
||||
alt_titles = list("Crime Scene Investigator")
|
||||
minimal_player_age = 3
|
||||
|
||||
@@ -185,8 +185,8 @@
|
||||
selection_color = "#ffeeee"
|
||||
// alt_titles = list("Junior Officer") //aurora already has security cadets
|
||||
economic_modifier = 4
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks)
|
||||
access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_morgue, access_external_airlocks, access_weapons)
|
||||
minimal_access = list(access_security, access_eva, access_sec_doors, access_brig, access_maint_tunnels, access_external_airlocks, access_weapons)
|
||||
minimal_player_age = 7
|
||||
|
||||
bag_type = /obj/item/weapon/storage/backpack/security
|
||||
|
||||
+11
-11
@@ -14,7 +14,6 @@ var/const/CYBORG =(1<<9)
|
||||
var/const/INTERN_SEC =(1<<10)
|
||||
var/const/INTERN_ENG =(1<<11)
|
||||
var/const/FORENSICS =(1<<12)
|
||||
var/const/JANITOR =(1<<13)
|
||||
|
||||
|
||||
var/const/MEDSCI =(1<<1)
|
||||
@@ -39,16 +38,17 @@ var/const/HOP =(1<<0)
|
||||
var/const/BARTENDER =(1<<1)
|
||||
var/const/BOTANIST =(1<<2)
|
||||
var/const/CHEF =(1<<3)
|
||||
var/const/LIBRARIAN =(1<<4)
|
||||
var/const/QUARTERMASTER =(1<<5)
|
||||
var/const/CARGOTECH =(1<<6)
|
||||
var/const/MINER =(1<<7)
|
||||
var/const/LAWYER =(1<<8)
|
||||
var/const/CHAPLAIN =(1<<9)
|
||||
var/const/CLOWN =(1<<10)
|
||||
var/const/MIME =(1<<11)
|
||||
var/const/MERCHANT =(1<<12)
|
||||
var/const/ASSISTANT =(1<<13)
|
||||
var/const/JANITOR =(1<<4)
|
||||
var/const/LIBRARIAN =(1<<5)
|
||||
var/const/QUARTERMASTER =(1<<6)
|
||||
var/const/CARGOTECH =(1<<7)
|
||||
var/const/MINER =(1<<8)
|
||||
var/const/LAWYER =(1<<9)
|
||||
var/const/CHAPLAIN =(1<<10)
|
||||
var/const/CLOWN =(1<<11)
|
||||
var/const/MIME =(1<<12)
|
||||
var/const/MERCHANT =(1<<13)
|
||||
var/const/ASSISTANT =(1<<14)
|
||||
|
||||
|
||||
var/list/assistant_occupations = list() //Leaving this on one line stops Travis complaining ~Scopes
|
||||
|
||||
@@ -2,45 +2,8 @@
|
||||
name = "random arcade"
|
||||
desc = "random arcade machine"
|
||||
icon_state = "arcade"
|
||||
|
||||
icon_screen = "invaders"
|
||||
var/list/prizes = list( /obj/item/weapon/storage/box/snappops = 11,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 5,
|
||||
/obj/item/toy/sword = 22,
|
||||
/obj/item/weapon/gun/projectile/revolver/capgun = 11,
|
||||
/obj/item/toy/crossbow = 11,
|
||||
/obj/item/weapon/storage/fancy/crayons = 11,
|
||||
/obj/item/toy/spinningtoy = 11,
|
||||
/obj/item/toy/prize/ripley = 1,
|
||||
/obj/item/toy/prize/fireripley = 1,
|
||||
/obj/item/toy/prize/deathripley = 1,
|
||||
/obj/item/toy/prize/gygax = 1,
|
||||
/obj/item/toy/prize/durand = 1,
|
||||
/obj/item/toy/prize/honk = 1,
|
||||
/obj/item/toy/prize/marauder = 1,
|
||||
/obj/item/toy/prize/seraph = 1,
|
||||
/obj/item/toy/prize/mauler = 1,
|
||||
/obj/item/toy/prize/odysseus = 1,
|
||||
/obj/item/toy/prize/phazon = 1,
|
||||
/obj/item/toy/waterflower = 5,
|
||||
/obj/random/action_figure = 11,
|
||||
/obj/random/plushie = 44,
|
||||
/obj/item/toy/cultsword = 5,
|
||||
/obj/item/toy/syndicateballoon = 5,
|
||||
/obj/item/toy/nanotrasenballoon = 5,
|
||||
/obj/item/toy/katana = 11,
|
||||
/obj/item/toy/bosunwhistle = 5,
|
||||
/obj/item/weapon/storage/belt/champion = 11,
|
||||
/obj/item/weapon/pen/invisible = 5,
|
||||
/obj/item/weapon/grenade/fake = 1,
|
||||
/obj/item/weapon/bikehorn = 11,
|
||||
/obj/item/clothing/mask/fakemoustache = 11,
|
||||
/obj/item/clothing/mask/gas/clown_hat = 11,
|
||||
/obj/item/clothing/mask/gas/mime = 11,
|
||||
/obj/item/weapon/gun/energy/wand/toy = 5,
|
||||
/obj/item/device/binoculars = 11,
|
||||
/obj/item/device/megaphone = 11
|
||||
)
|
||||
var/prize = /obj/random/arcade
|
||||
|
||||
/obj/machinery/computer/arcade/Initialize()
|
||||
. = ..()
|
||||
@@ -55,21 +18,18 @@
|
||||
|
||||
/obj/machinery/computer/arcade/proc/prizevend()
|
||||
if(!contents.len)
|
||||
var/prizeselect = pickweight(prizes)
|
||||
new prizeselect(src.loc)
|
||||
new prize(src.loc)
|
||||
else
|
||||
var/atom/movable/prize = pick(contents)
|
||||
prize.loc = src.loc
|
||||
var/atom/movable/chosen_prize = pick(contents)
|
||||
chosen_prize.forceMove(src.loc)
|
||||
|
||||
/obj/machinery/computer/arcade/attack_ai(mob/user as mob)
|
||||
return src.attack_hand(user)
|
||||
|
||||
|
||||
/obj/machinery/computer/arcade/emp_act(severity)
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
..(severity)
|
||||
return
|
||||
var/empprize = null
|
||||
var/num_of_prizes = 0
|
||||
switch(severity)
|
||||
if(1)
|
||||
@@ -77,8 +37,7 @@
|
||||
if(2)
|
||||
num_of_prizes = rand(0,2)
|
||||
for(num_of_prizes; num_of_prizes > 0; num_of_prizes--)
|
||||
empprize = pickweight(prizes)
|
||||
new empprize(src.loc)
|
||||
new prize(src.loc)
|
||||
|
||||
..(severity)
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@
|
||||
. += "<br><hr>"
|
||||
. += "<center>"
|
||||
. += "<a href='?src=\ref[src];button=render_guilty'>Render Guilty</a>"
|
||||
// . += "<a href='?src=\ref[src];button=render_guilty_fine'>Render Guilty - Fine</a>"
|
||||
. += "<a href='?src=\ref[src];button=render_guilty_fine'>Render Guilty - Fine</a>"
|
||||
. += "</center>"
|
||||
|
||||
return .
|
||||
@@ -368,8 +368,8 @@
|
||||
. += "<tr>"
|
||||
. += "<td><b>[L.name]</b></td>"
|
||||
. += "<td><i>[L.desc]</i></td>"
|
||||
. += "<td>[L.min_brig_time] - [L.max_brig_time] minutes</td>"
|
||||
. += "<td>[L.min_fine]-[L.max_fine]cR</td>"
|
||||
. += "<td>[L.get_brig_time_string()]</td>"
|
||||
. += "<td>[L.get_fine_string()]</td>"
|
||||
. += "<td><a href='?src=\ref[src];button=add_charge;law=\ref[L]'>Charge</a></td>"
|
||||
. += "</tr>"
|
||||
|
||||
@@ -398,8 +398,8 @@
|
||||
. += "<tr>"
|
||||
. += "<td><b>[L.name]</b></td>"
|
||||
. += "<td><i>[L.desc]</i></td>"
|
||||
. += "<td>[L.min_brig_time] - [L.max_brig_time] minutes</td>"
|
||||
. += "<td>[L.min_fine]-[L.max_fine]cR</td>"
|
||||
. += "<td>[L.get_brig_time_string()]</td>"
|
||||
. += "<td>[L.get_fine_string()]</td>"
|
||||
. += "<td><a href='?src=\ref[src];button=add_charge;law=\ref[L]'>Charge</a></td>"
|
||||
. += "</tr>"
|
||||
|
||||
@@ -427,7 +427,7 @@
|
||||
. += "<tr>"
|
||||
. += "<td><b>[L.name]</b></td>"
|
||||
. += "<td><i>[L.desc]</i></td>"
|
||||
. += "<td>[L.min_brig_time] - [L.max_brig_time] minutes</td>"
|
||||
. += "<td>[L.get_brig_time_string()]</td>"
|
||||
. += "<td><a href='?src=\ref[src];button=add_charge;law=\ref[L]'>Charge</a></td>"
|
||||
. += "</tr>"
|
||||
|
||||
@@ -457,38 +457,66 @@
|
||||
user << "<span class='alert'>[error]</span>"
|
||||
return
|
||||
|
||||
incident.renderGuilty( user )
|
||||
print_incident_overview(incident.renderGuilty(user, 0))
|
||||
var/obj/item/weapon/card/id/card = incident.card.resolve()
|
||||
if( incident.brig_sentence < PERMABRIG_SENTENCE)
|
||||
ping( "\The [src] pings, \"[card] has been found guilty of their crimes!\"" )
|
||||
ping( "\The [src] pings, \"[card.registered_name] has been found guilty of their crimes!\"" )
|
||||
else
|
||||
pingx3( "\The [src] pings, \"[card] has been found guilty of their crimes and earned a HuT Sentence\"" )
|
||||
pingx3( "\The [src] pings, \"[card.registered_name] has been found guilty of their crimes and earned a HuT Sentence\"" )
|
||||
|
||||
incident = null
|
||||
menu_screen = "main_menu"
|
||||
|
||||
// /obj/machinery/computer/sentencing/proc/render_guilty_fine( var/mob/living/user, var/obj/item/weapon/card/id/C )
|
||||
// if( !incident )
|
||||
// user << "<span class='alert'>There is no active case!</span>"
|
||||
// return
|
||||
//
|
||||
// if( !istype( user ))
|
||||
// return
|
||||
//
|
||||
// var/error = print_incident_report()
|
||||
//
|
||||
// if( error )
|
||||
// user << "<span class='alert'>[error]</span>"
|
||||
// return
|
||||
//
|
||||
// //TODO: Try to charge the criminal if not return and print error message
|
||||
//
|
||||
// incident.renderGuilty( user )
|
||||
//
|
||||
// ping( "\The [src] pings, \"[incident.card] has been fined for their crimes!\"" )
|
||||
//
|
||||
// incident = null
|
||||
// menu_screen = "main_menu"
|
||||
/obj/machinery/computer/sentencing/proc/render_guilty_fine( var/mob/living/user )
|
||||
if(!incident)
|
||||
user << "<span class='alert'>There is no active case!</span>"
|
||||
return
|
||||
|
||||
if(!istype(user))
|
||||
return
|
||||
|
||||
if(incident.fine <= 0)
|
||||
buzz("\The [src] buzzes, \"No fine has been entered!\"")
|
||||
return
|
||||
|
||||
//Lets check if there is a felony amongst the crimes
|
||||
for(var/datum/law/L in incident.charges)
|
||||
if(L.felony)
|
||||
buzz("\The [src] buzzes, \"The crimes are too severe to apply a fine!\"")
|
||||
if(!L.can_fine())
|
||||
buzz("\The [src] buzzes, \"It is not possible to fine for [L.name]\"")
|
||||
return
|
||||
|
||||
//Try to resole the security account first
|
||||
var/datum/money_account/security_account = department_accounts["Security"]
|
||||
if(!security_account)
|
||||
buzz("\The [src] buzzes, \"Could not get security account!\"")
|
||||
return
|
||||
|
||||
var/obj/item/weapon/card/id/card = incident.card.resolve()
|
||||
//Let´s get the account of the suspect and verify they have enough money
|
||||
var/datum/money_account/suspect_account = get_account(card.associated_account_number)
|
||||
if(!suspect_account)
|
||||
buzz("\The [src] buzzes, \"Could not get suspect account!\"")
|
||||
return
|
||||
|
||||
if(suspect_account.money < incident.fine)
|
||||
buzz("\The [src] buzzes, \"There is not enough money in the account to pay the fine!\"")
|
||||
return
|
||||
|
||||
charge_to_account(suspect_account.account_number,security_account.owner_name,"Incident: [incident.UID]","Sentencing Console",-incident.fine)
|
||||
charge_to_account(security_account.account_number,suspect_account.owner_name,"Incident: [incident.UID]Fine","Sentencing Console",incident.fine)
|
||||
print_incident_overview(incident.renderGuilty(user,1))
|
||||
|
||||
ping("\The [src] pings, \"[card.registered_name] has been fined for their crimes!\"")
|
||||
|
||||
incident = null
|
||||
menu_screen = "main_menu"
|
||||
|
||||
/obj/machinery/computer/sentencing/proc/print_incident_overview(var/text)
|
||||
var/obj/item/weapon/paper/P = new /obj/item/weapon/paper
|
||||
P.set_content_unsafe("Incident Summary",text)
|
||||
print(P)
|
||||
|
||||
/obj/machinery/computer/sentencing/proc/print_incident_report( var/sentence = 1 )
|
||||
var/error = incident.missingSentenceReq()
|
||||
@@ -636,20 +664,13 @@
|
||||
if( alert("No incident notes were added. Adding a short description of the incident is highly recommended. Do you still want to continue with the print?",,"Yes","No") == "No" )
|
||||
return
|
||||
render_guilty( usr )
|
||||
// if( "render_guilty_fine")
|
||||
// //Check for the notes
|
||||
// if( !incident.notes )
|
||||
// if( alert("No incident notes were added. Adding a short description of the incident is highly recommended. Do you still want to continue with the print?",,"Yes","No") == "No" )
|
||||
// return
|
||||
// //Get the ID Card
|
||||
// var/obj/item/weapon/card/id/C = usr.get_active_hand()
|
||||
// if( istype( C ))
|
||||
// if( incident && C.mob )
|
||||
// render_guilty_fine( usr, C)
|
||||
// else
|
||||
// usr << "<span class='alert'>\The [src] buzzes, \"ID card not tied to a NanoTrasen Employee!\"</span>"
|
||||
// else
|
||||
// usr << "<span class='alert'>\The [src] buzzes, \"The suspects ID is required to fine them\"</span>"
|
||||
if( "render_guilty_fine" )
|
||||
//Check for the notes
|
||||
if( !incident.notes )
|
||||
if( alert("No incident notes were added. Adding a short description of the incident is highly recommended. Do you still want to continue with the print?",,"Yes","No") == "No" )
|
||||
return
|
||||
//Get the ID Card
|
||||
render_guilty_fine( usr )
|
||||
|
||||
add_fingerprint(usr)
|
||||
updateUsrDialog()
|
||||
|
||||
@@ -296,6 +296,13 @@ Class Procs:
|
||||
state(text, "blue")
|
||||
playsound(src.loc, 'sound/machines/pingx3.ogg', 50, 0)
|
||||
|
||||
/obj/machinery/proc/buzz(text=null)
|
||||
if (!text)
|
||||
text = "\The [src] buzzes."
|
||||
|
||||
state(text, "blue")
|
||||
playsound(src.loc, 'sound/machines/buzz-sigh.ogg', 50, 0) //TODO: Check if that one is the correct sound
|
||||
|
||||
/obj/machinery/proc/shock(mob/user, prb)
|
||||
if(inoperable())
|
||||
return 0
|
||||
|
||||
@@ -2,126 +2,8 @@
|
||||
//################### NEWSCASTERS BE HERE! ####
|
||||
//###-Agouri###################################
|
||||
|
||||
/datum/feed_message
|
||||
var/author =""
|
||||
var/body =""
|
||||
var/message_type ="Story"
|
||||
var/datum/feed_channel/parent_channel
|
||||
var/is_admin_message = 0
|
||||
var/icon/img = null
|
||||
var/icon/caption = ""
|
||||
var/time_stamp = ""
|
||||
var/backup_body = ""
|
||||
var/backup_author = ""
|
||||
var/icon/backup_img = null
|
||||
var/icon/backup_caption = ""
|
||||
|
||||
/datum/feed_channel
|
||||
var/channel_name=""
|
||||
var/list/datum/feed_message/messages = list()
|
||||
var/locked=0
|
||||
var/author=""
|
||||
var/backup_author=""
|
||||
var/censored=0
|
||||
var/is_admin_channel=0
|
||||
var/updated = 0
|
||||
var/announcement = ""
|
||||
|
||||
/datum/feed_message/proc/clear()
|
||||
src.author = ""
|
||||
src.body = ""
|
||||
src.caption = ""
|
||||
src.img = null
|
||||
src.time_stamp = ""
|
||||
src.backup_body = ""
|
||||
src.backup_author = ""
|
||||
src.backup_caption = ""
|
||||
src.backup_img = null
|
||||
parent_channel.update()
|
||||
|
||||
/datum/feed_channel/proc/update()
|
||||
updated = world.time
|
||||
|
||||
/datum/feed_channel/proc/clear()
|
||||
src.channel_name = ""
|
||||
src.messages = list()
|
||||
src.locked = 0
|
||||
src.author = ""
|
||||
src.backup_author = ""
|
||||
src.censored = 0
|
||||
src.is_admin_channel = 0
|
||||
src.announcement = ""
|
||||
update()
|
||||
|
||||
/datum/feed_network
|
||||
var/list/datum/feed_channel/network_channels = list()
|
||||
var/datum/feed_message/wanted_issue
|
||||
|
||||
/datum/feed_network/New()
|
||||
CreateFeedChannel("Station Announcements", "SS13", 1, 1, "New Station Announcement Available")
|
||||
|
||||
/datum/feed_network/proc/CreateFeedChannel(var/channel_name, var/author, var/locked, var/adminChannel = 0, var/announcement_message)
|
||||
var/datum/feed_channel/newChannel = new /datum/feed_channel
|
||||
newChannel.channel_name = channel_name
|
||||
newChannel.author = author
|
||||
newChannel.locked = locked
|
||||
newChannel.is_admin_channel = adminChannel
|
||||
if(announcement_message)
|
||||
newChannel.announcement = announcement_message
|
||||
else
|
||||
newChannel.announcement = "Breaking news from [channel_name]!"
|
||||
network_channels += newChannel
|
||||
|
||||
/datum/feed_network/proc/SubmitArticle(var/msg, var/author, var/channel_name, var/obj/item/weapon/photo/photo, var/adminMessage = 0, var/message_type = "")
|
||||
var/datum/feed_message/newMsg = new /datum/feed_message
|
||||
newMsg.author = author
|
||||
newMsg.body = msg
|
||||
newMsg.time_stamp = "[worldtime2text()]"
|
||||
newMsg.is_admin_message = adminMessage
|
||||
if(message_type)
|
||||
newMsg.message_type = message_type
|
||||
if(photo)
|
||||
newMsg.img = photo.img
|
||||
newMsg.caption = photo.scribble
|
||||
for(var/datum/feed_channel/FC in network_channels)
|
||||
if(FC.channel_name == channel_name)
|
||||
insert_message_in_channel(FC, newMsg) //Adding message to the network's appropriate feed_channel
|
||||
break
|
||||
|
||||
/datum/feed_network/proc/insert_message_in_channel(var/datum/feed_channel/FC, var/datum/feed_message/newMsg)
|
||||
FC.messages += newMsg
|
||||
newMsg.parent_channel = FC
|
||||
FC.update()
|
||||
alert_readers(FC.announcement)
|
||||
|
||||
/datum/feed_network/proc/alert_readers(var/annoncement)
|
||||
// get_receptions sleeps further down the line, spawn of elsewhere
|
||||
set waitfor = FALSE
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.newsAlert(annoncement)
|
||||
NEWSCASTER.update_icon()
|
||||
|
||||
var/list/receiving_pdas = new
|
||||
for (var/obj/item/device/pda/P in PDAs)
|
||||
if (!P.owner)
|
||||
continue
|
||||
if (P.toff)
|
||||
continue
|
||||
receiving_pdas += P
|
||||
|
||||
var/datum/receptions/receptions = get_receptions(null, receiving_pdas) // datums are not atoms, thus we have to assume the newscast network always has reception
|
||||
|
||||
for(var/obj/item/device/pda/PDA in receiving_pdas)
|
||||
if(!(receptions.receiver_reception[PDA] & TELECOMMS_RECEPTION_RECEIVER))
|
||||
continue
|
||||
|
||||
PDA.new_news(annoncement)
|
||||
|
||||
var/datum/feed_network/news_network = new /datum/feed_network //The global news-network, which is coincidentally a global list.
|
||||
|
||||
var/list/obj/machinery/newscaster/allCasters = list() //Global list that will contain reference to all newscasters in existence.
|
||||
|
||||
|
||||
/obj/machinery/newscaster
|
||||
name = "newscaster"
|
||||
desc = "A standard newsfeed handler for use on commercial space stations. All the news you absolutely have no use for, in one place!"
|
||||
@@ -194,7 +76,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
cut_overlays() //reset overlays
|
||||
|
||||
if(news_network.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
|
||||
if(SSnews.wanted_issue) //wanted icon state, there can be no overlays on it as it's a priority message
|
||||
icon_state = "newscaster_wanted"
|
||||
return
|
||||
|
||||
@@ -262,7 +144,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(0)
|
||||
dat += "Welcome to Newscasting Unit #[src.unit_no].<BR> Interface & News networks Operational."
|
||||
dat += "<BR><FONT SIZE=1>Property of Nanotransen Inc</FONT>"
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
dat+= "<HR><A href='?src=\ref[src];view_wanted=1'>Read Wanted Issue</A>"
|
||||
dat+= "<HR><BR><A href='?src=\ref[src];create_channel=1'>Create Feed Channel</A>"
|
||||
dat+= "<BR><A href='?src=\ref[src];view=1'>View Feed Channels</A>"
|
||||
@@ -272,7 +154,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+= "<BR><BR><A href='?src=\ref[human_or_robot_user];mach_close=newscaster_main'>Exit</A>"
|
||||
if(src.securityCaster)
|
||||
var/wanted_already = 0
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
wanted_already = 1
|
||||
|
||||
dat+="<HR><B>Feed Security functions:</B><BR>"
|
||||
@@ -282,14 +164,15 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<BR><HR>The newscaster recognises you as: <FONT COLOR='green'>[src.scanned_user]</FONT>"
|
||||
if(1)
|
||||
dat+= "Station Feed Channels<HR>"
|
||||
if( isemptylist(news_network.network_channels) )
|
||||
if( isemptylist(SSnews.network_channels) )
|
||||
dat+="<I>No active channels found...</I>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
if(CHANNEL.is_admin_channel)
|
||||
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen '><A href='?src=\ref[src];show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A></FONT></B><BR>"
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.is_admin_channel)
|
||||
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen '><A href='?src=\ref[src];show_channel=\ref[FC]'>[FC.channel_name]</A></FONT></B><BR>"
|
||||
else
|
||||
dat+="<B><A href='?src=\ref[src];show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR></B>"
|
||||
dat+="<B><A href='?src=\ref[src];show_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR></B>"
|
||||
dat+="<BR><HR><A href='?src=\ref[src];refresh=1'>Refresh</A>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
|
||||
if(2)
|
||||
@@ -324,7 +207,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(7)
|
||||
dat+="<B><FONT COLOR='maroon'>ERROR: Could not submit Feed Channel to Network.</B></FONT><HR><BR>"
|
||||
var/list/existing_authors = list()
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.author == "\[REDACTED\]")
|
||||
existing_authors += FC.backup_author
|
||||
else
|
||||
@@ -334,7 +218,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
if(src.channel_name=="" || src.channel_name == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>�Invalid channel name.</FONT><BR>"
|
||||
var/check = 0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.channel_name == src.channel_name)
|
||||
check = 1
|
||||
break
|
||||
@@ -344,10 +229,11 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<FONT COLOR='maroon'>�Channel author unverified.</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[2]'>Return</A><BR>"
|
||||
if(8)
|
||||
var/total_num=length(news_network.network_channels)
|
||||
var/total_num=length(SSnews.network_channels)
|
||||
var/active_num=total_num
|
||||
var/message_num=0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(!FC.censored)
|
||||
message_num += length(FC.messages) //Dont forget, datum/feed_channel's var messages is a list of datum/feed_message
|
||||
else
|
||||
@@ -383,22 +269,24 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<FONT SIZE=1>NOTE: Due to the nature of news Feeds, total deletion of a Feed Story is not possible.<BR>"
|
||||
dat+="Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>"
|
||||
dat+="<HR>Select Feed channel to get Stories from:<BR>"
|
||||
if(isemptylist(news_network.network_channels))
|
||||
if(isemptylist(SSnews.network_channels))
|
||||
dat+="<I>No feed channels found active...</I><BR>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
dat+="<A href='?src=\ref[src];pick_censor_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Cancel</A>"
|
||||
if(11)
|
||||
dat+="<B>[current_map.company_name] D-Notice Handler</B><HR>"
|
||||
dat+="<FONT SIZE=1>A D-Notice is to be bestowed upon the channel if the handling Authority deems it as harmful for the station's"
|
||||
dat+="morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed"
|
||||
dat+="stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>"
|
||||
if(isemptylist(news_network.network_channels))
|
||||
if(isemptylist(SSnews.network_channels))
|
||||
dat+="<I>No feed channels found active...</I><BR>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
dat+="<A href='?src=\ref[src];pick_d_notice=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
dat+="<A href='?src=\ref[src];pick_d_notice=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Back</A>"
|
||||
if(12)
|
||||
@@ -431,7 +319,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<B>Wanted Issue Handler:</B>"
|
||||
var/wanted_already = 0
|
||||
var/end_param = 1
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
wanted_already = 1
|
||||
end_param = 2
|
||||
|
||||
@@ -442,7 +330,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<A href='?src=\ref[src];set_wanted_desc=1'>Description</A>: [src.msg] <BR>"
|
||||
dat+="<A href='?src=\ref[src];set_attachment=1'>Attach Photo</A>: [(src.photo_data ? "Photo Attached" : "No Photo")]</BR>"
|
||||
if(wanted_already)
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [news_network.wanted_issue.backup_author]</FONT><BR>"
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [SSnews.wanted_issue.backup_author]</FONT><BR>"
|
||||
else
|
||||
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'> [src.scanned_user]</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
|
||||
@@ -465,12 +353,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
dat+="<B>Wanted Issue successfully deleted from Circulation</B><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];setScreen=[0]'>Return</A><BR>"
|
||||
if(18)
|
||||
dat+="<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[news_network.wanted_issue.backup_author]</FONT>\]</FONT><HR>"
|
||||
dat+="<B>Criminal</B>: [news_network.wanted_issue.author]<BR>"
|
||||
dat+="<B>Description</B>: [news_network.wanted_issue.body]<BR>"
|
||||
dat+="<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[SSnews.wanted_issue.backup_author]</FONT>\]</FONT><HR>"
|
||||
dat+="<B>Criminal</B>: [SSnews.wanted_issue.author]<BR>"
|
||||
dat+="<B>Description</B>: [SSnews.wanted_issue.body]<BR>"
|
||||
dat+="<B>Photo:</B>: "
|
||||
if(news_network.wanted_issue.img)
|
||||
usr << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png")
|
||||
if(SSnews.wanted_issue.img)
|
||||
usr << browse_rsc(SSnews.wanted_issue.img, "tmp_photow.png")
|
||||
dat+="<BR><img src='tmp_photow.png' width = '180'>"
|
||||
else
|
||||
dat+="None"
|
||||
@@ -509,14 +397,16 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(href_list["submit_new_channel"])
|
||||
//var/list/existing_channels = list() //OBSOLETE
|
||||
var/list/existing_authors = list()
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
//existing_channels += FC.channel_name
|
||||
if(FC.author == "\[REDACTED\]")
|
||||
existing_authors += FC.backup_author
|
||||
else
|
||||
existing_authors +=FC.author
|
||||
var/check = 0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.channel_name == src.channel_name)
|
||||
check = 1
|
||||
break
|
||||
@@ -525,7 +415,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
news_network.CreateFeedChannel(src.channel_name, src.scanned_user, c_locked)
|
||||
SSnews.CreateFeedChannel(src.channel_name, src.scanned_user, c_locked)
|
||||
src.screen=5
|
||||
src.updateUsrDialog()
|
||||
//src.update_icon()
|
||||
@@ -533,9 +423,10 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(href_list["set_channel_receiving"])
|
||||
//var/list/datum/feed_channel/available_channels = list()
|
||||
var/list/available_channels = list()
|
||||
for(var/datum/feed_channel/F in news_network.network_channels)
|
||||
if( (!F.locked || F.author == scanned_user) && !F.censored)
|
||||
available_channels += F.channel_name
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if( (!FC.locked || FC.author == scanned_user) && !FC.censored)
|
||||
available_channels += FC.channel_name
|
||||
src.channel_name = input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -553,7 +444,8 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else
|
||||
var/image = photo_data ? photo_data.photo : null
|
||||
feedback_inc("newscaster_stories",1)
|
||||
news_network.SubmitArticle(src.msg, src.scanned_user, src.channel_name, image, 0)
|
||||
var/datum/feed_channel/ch = SSnews.GetFeedChannel(src.channel_name)
|
||||
SSnews.SubmitArticle(src.msg, src.scanned_user, ch, image, 0)
|
||||
src.screen=4
|
||||
|
||||
src.updateUsrDialog()
|
||||
@@ -587,12 +479,12 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
|
||||
else if(href_list["menu_wanted"])
|
||||
var/already_wanted = 0
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
already_wanted = 1
|
||||
|
||||
if(already_wanted)
|
||||
src.channel_name = news_network.wanted_issue.author
|
||||
src.msg = news_network.wanted_issue.body
|
||||
src.channel_name = SSnews.wanted_issue.author
|
||||
src.msg = SSnews.wanted_issue.body
|
||||
src.screen = 14
|
||||
src.updateUsrDialog()
|
||||
|
||||
@@ -618,29 +510,29 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
WANTED.backup_author = src.scanned_user //I know, a bit wacky
|
||||
if(photo_data)
|
||||
WANTED.img = photo_data.photo.img
|
||||
news_network.wanted_issue = WANTED
|
||||
news_network.alert_readers()
|
||||
SSnews.wanted_issue = WANTED
|
||||
SSnews.alert_readers()
|
||||
src.screen = 15
|
||||
else
|
||||
if(news_network.wanted_issue.is_admin_message)
|
||||
if(SSnews.wanted_issue.is_admin_message)
|
||||
alert("The wanted issue has been distributed by a [current_map.company_name] higherup. You cannot edit it.","Ok")
|
||||
return
|
||||
news_network.wanted_issue.author = src.channel_name
|
||||
news_network.wanted_issue.body = src.msg
|
||||
news_network.wanted_issue.backup_author = src.scanned_user
|
||||
SSnews.wanted_issue.author = src.channel_name
|
||||
SSnews.wanted_issue.body = src.msg
|
||||
SSnews.wanted_issue.backup_author = src.scanned_user
|
||||
if(photo_data)
|
||||
news_network.wanted_issue.img = photo_data.photo.img
|
||||
SSnews.wanted_issue.img = photo_data.photo.img
|
||||
src.screen = 19
|
||||
|
||||
src.updateUsrDialog()
|
||||
|
||||
else if(href_list["cancel_wanted"])
|
||||
if(news_network.wanted_issue.is_admin_message)
|
||||
if(SSnews.wanted_issue.is_admin_message)
|
||||
alert("The wanted issue has been distributed by a [current_map.company_name] higherup. You cannot take it down.","Ok")
|
||||
return
|
||||
var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
news_network.wanted_issue = null
|
||||
SSnews.wanted_issue = null
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.update_icon()
|
||||
src.screen=17
|
||||
@@ -652,7 +544,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(href_list["censor_channel_author"])
|
||||
var/datum/feed_channel/FC = locate(href_list["censor_channel_author"])
|
||||
if(FC.is_admin_channel)
|
||||
alert("This channel was created by a [current_map.company_name] Officer. You cannot censor it.","Ok")
|
||||
alert("This channel was created by a [current_map.company_name] Officer or a external news agency. You cannot censor it.","Ok")
|
||||
return
|
||||
if(FC.author != "<B>\[REDACTED\]</B>")
|
||||
FC.backup_author = FC.author
|
||||
@@ -665,7 +557,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(href_list["censor_channel_story_author"])
|
||||
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_author"])
|
||||
if(MSG.is_admin_message)
|
||||
alert("This message was created by a [current_map.company_name] Officer. You cannot censor its author.","Ok")
|
||||
alert("This message was created by a [current_map.company_name] Officer or a external news agency. You cannot censor its author.","Ok")
|
||||
return
|
||||
if(MSG.author != "<B>\[REDACTED\]</B>")
|
||||
MSG.backup_author = MSG.author
|
||||
@@ -678,7 +570,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(href_list["censor_channel_story_body"])
|
||||
var/datum/feed_message/MSG = locate(href_list["censor_channel_story_body"])
|
||||
if(MSG.is_admin_message)
|
||||
alert("This channel was created by a [current_map.company_name] Officer. You cannot censor it.","Ok")
|
||||
alert("This channel was created by a [current_map.company_name] Officer or a external news agency. You cannot censor it.","Ok")
|
||||
return
|
||||
if(MSG.body != "<B>\[REDACTED\]</B>")
|
||||
MSG.backup_body = MSG.body
|
||||
@@ -704,7 +596,7 @@ var/list/obj/machinery/newscaster/allCasters = list() //Global list that will co
|
||||
else if(href_list["toggle_d_notice"])
|
||||
var/datum/feed_channel/FC = locate(href_list["toggle_d_notice"])
|
||||
if(FC.is_admin_channel)
|
||||
alert("This channel was created by a [current_map.company_name] Officer. You cannot place a D-Notice upon it.","Ok")
|
||||
alert("This channel was created by a [current_map.company_name] Officer or a external news agency. You cannot place a D-Notice upon it.","Ok")
|
||||
return
|
||||
FC.censored = !FC.censored
|
||||
FC.update()
|
||||
@@ -978,10 +870,11 @@ obj/item/weapon/newspaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
/obj/machinery/newscaster/proc/print_paper()
|
||||
feedback_inc("newscaster_newspapers_printed",1)
|
||||
var/obj/item/weapon/newspaper/NEWSPAPER = new /obj/item/weapon/newspaper
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
NEWSPAPER.news_content += FC
|
||||
if(news_network.wanted_issue)
|
||||
NEWSPAPER.important_message = news_network.wanted_issue
|
||||
if(SSnews.wanted_issue)
|
||||
NEWSPAPER.important_message = SSnews.wanted_issue
|
||||
NEWSPAPER.loc = get_turf(src)
|
||||
src.paper_remaining--
|
||||
return
|
||||
|
||||
@@ -208,101 +208,101 @@ Buildable meters
|
||||
/obj/item/pipe/proc/update()
|
||||
var/list/nlist = list(
|
||||
"pipe",
|
||||
"bent pipe",
|
||||
"bent pipe",
|
||||
"h/e pipe",
|
||||
"bent h/e pipe",
|
||||
"connector",
|
||||
"manifold",
|
||||
"junction",
|
||||
"uvent",
|
||||
"mvalve",
|
||||
"pump",
|
||||
"scrubber",
|
||||
"insulated pipe",
|
||||
"bent insulated pipe",
|
||||
"gas filter",
|
||||
"gas mixer",
|
||||
"pressure regulator",
|
||||
"high power pump",
|
||||
"heat exchanger",
|
||||
"t-valve",
|
||||
"4-way manifold",
|
||||
"pipe cap",
|
||||
"manifold",
|
||||
"junction",
|
||||
"uvent",
|
||||
"mvalve",
|
||||
"pump",
|
||||
"scrubber",
|
||||
"insulated pipe",
|
||||
"bent insulated pipe",
|
||||
"gas filter",
|
||||
"gas mixer",
|
||||
"pressure regulator",
|
||||
"high power pump",
|
||||
"heat exchanger",
|
||||
"t-valve",
|
||||
"4-way manifold",
|
||||
"pipe cap",
|
||||
///// Z-Level stuff
|
||||
"pipe up",
|
||||
"pipe down",
|
||||
"pipe up",
|
||||
"pipe down",
|
||||
///// Z-Level stuff
|
||||
"gas filter m",
|
||||
"gas mixer t",
|
||||
"gas mixer m",
|
||||
"omni mixer",
|
||||
"omni filter",
|
||||
"gas filter m",
|
||||
"gas mixer t",
|
||||
"gas mixer m",
|
||||
"omni mixer",
|
||||
"omni filter",
|
||||
///// Supply and scrubbers pipes
|
||||
"universal pipe adapter",
|
||||
"supply pipe",
|
||||
"bent supply pipe",
|
||||
"scrubbers pipe",
|
||||
"bent scrubbers pipe",
|
||||
"supply manifold",
|
||||
"scrubbers manifold",
|
||||
"supply 4-way manifold",
|
||||
"scrubbers 4-way manifold",
|
||||
"supply pipe up",
|
||||
"scrubbers pipe up",
|
||||
"supply pipe down",
|
||||
"scrubbers pipe down",
|
||||
"supply pipe cap",
|
||||
"scrubbers pipe cap",
|
||||
"universal pipe adapter",
|
||||
"supply pipe",
|
||||
"bent supply pipe",
|
||||
"scrubbers pipe",
|
||||
"bent scrubbers pipe",
|
||||
"supply manifold",
|
||||
"scrubbers manifold",
|
||||
"supply 4-way manifold",
|
||||
"scrubbers 4-way manifold",
|
||||
"supply pipe up",
|
||||
"scrubbers pipe up",
|
||||
"supply pipe down",
|
||||
"scrubbers pipe down",
|
||||
"supply pipe cap",
|
||||
"scrubbers pipe cap",
|
||||
"t-valve m"
|
||||
)
|
||||
name = nlist[pipe_type+1] + " fitting"
|
||||
var/list/islist = list(
|
||||
"simple",
|
||||
"simple",
|
||||
"he",
|
||||
"he",
|
||||
"connector",
|
||||
"manifold",
|
||||
"junction",
|
||||
"uvent",
|
||||
"mvalve",
|
||||
"pump",
|
||||
"scrubber",
|
||||
"insulated",
|
||||
"insulated",
|
||||
"filter",
|
||||
"mixer",
|
||||
"passivegate",
|
||||
"volumepump",
|
||||
"heunary",
|
||||
"mtvalve",
|
||||
"manifold4w",
|
||||
"cap",
|
||||
var/list/islist = list(
|
||||
"simple",
|
||||
"simple",
|
||||
"he",
|
||||
"he",
|
||||
"connector",
|
||||
"manifold",
|
||||
"junction",
|
||||
"uvent",
|
||||
"mvalve",
|
||||
"pump",
|
||||
"scrubber",
|
||||
"insulated",
|
||||
"insulated",
|
||||
"filter",
|
||||
"mixer",
|
||||
"passivegate",
|
||||
"volumepump",
|
||||
"heunary",
|
||||
"mtvalve",
|
||||
"manifold4w",
|
||||
"cap",
|
||||
///// Z-Level stuff
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
///// Z-Level stuff
|
||||
"m_filter",
|
||||
"t_mixer",
|
||||
"m_mixer",
|
||||
"omni_mixer",
|
||||
"omni_filter",
|
||||
"m_filter",
|
||||
"t_mixer",
|
||||
"m_mixer",
|
||||
"omni_mixer",
|
||||
"omni_filter",
|
||||
///// Supply and scrubbers pipes
|
||||
"universal",
|
||||
"simple",
|
||||
"simple",
|
||||
"simple",
|
||||
"simple",
|
||||
"manifold",
|
||||
"manifold",
|
||||
"manifold4w",
|
||||
"manifold4w",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"universal",
|
||||
"simple",
|
||||
"simple",
|
||||
"simple",
|
||||
"simple",
|
||||
"manifold",
|
||||
"manifold",
|
||||
"manifold4w",
|
||||
"manifold4w",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"cap",
|
||||
"mtvalvem"
|
||||
)
|
||||
icon_state = islist[pipe_type + 1]
|
||||
@@ -359,16 +359,16 @@ Buildable meters
|
||||
var/acw = turn(dir, 90)
|
||||
|
||||
switch(pipe_type)
|
||||
if( PIPE_SIMPLE_STRAIGHT,
|
||||
if( PIPE_SIMPLE_STRAIGHT,
|
||||
PIPE_INSULATED_STRAIGHT,
|
||||
PIPE_HE_STRAIGHT,
|
||||
PIPE_HE_STRAIGHT,
|
||||
PIPE_JUNCTION ,
|
||||
PIPE_PUMP ,
|
||||
PIPE_VOLUME_PUMP ,
|
||||
PIPE_PASSIVE_GATE ,
|
||||
PIPE_MVALVE,
|
||||
PIPE_SUPPLY_STRAIGHT,
|
||||
PIPE_SCRUBBERS_STRAIGHT,
|
||||
PIPE_MVALVE,
|
||||
PIPE_SUPPLY_STRAIGHT,
|
||||
PIPE_SCRUBBERS_STRAIGHT,
|
||||
PIPE_UNIVERSAL
|
||||
)
|
||||
return dir|flip
|
||||
@@ -457,7 +457,7 @@ Buildable meters
|
||||
else
|
||||
user << "<span class='warning'>You can not change this pipe!</span>"
|
||||
return
|
||||
|
||||
|
||||
else if(pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SIMPLE_BENT, PIPE_SCRUBBERS_STRAIGHT, PIPE_SCRUBBERS_BENT, PIPE_SUPPLY_BENT, PIPE_SUPPLY_STRAIGHT))
|
||||
if(pipe_type in list(PIPE_SIMPLE_BENT, PIPE_SIMPLE_STRAIGHT))
|
||||
if(PIPE_SIMPLE_BENT)
|
||||
@@ -475,7 +475,7 @@ Buildable meters
|
||||
else
|
||||
pipe_type = PIPE_SIMPLE_STRAIGHT
|
||||
update()
|
||||
|
||||
|
||||
if (!isturf(src.loc))
|
||||
return 1
|
||||
if (pipe_type in list (PIPE_SIMPLE_STRAIGHT, PIPE_SUPPLY_STRAIGHT, PIPE_SCRUBBERS_STRAIGHT, PIPE_HE_STRAIGHT, PIPE_INSULATED_STRAIGHT, PIPE_MVALVE))
|
||||
@@ -1234,7 +1234,6 @@ Buildable meters
|
||||
#undef PIPE_GAS_MIXER
|
||||
#undef PIPE_PASSIVE_GATE
|
||||
#undef PIPE_VOLUME_PUMP
|
||||
#undef PIPE_OUTLET_INJECT
|
||||
#undef PIPE_MTVALVE
|
||||
#undef PIPE_MTVALVEM
|
||||
#undef PIPE_GAS_FILTER_M
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
var/datum/station_holomap/holomap_datum
|
||||
|
||||
/obj/machinery/station_map/Destroy()
|
||||
SSminimap.station_holomaps -= src
|
||||
SSholomap.station_holomaps -= src
|
||||
stopWatching()
|
||||
QDEL_NULL(holomap_datum)
|
||||
return ..()
|
||||
@@ -38,12 +38,12 @@
|
||||
. = ..()
|
||||
holomap_datum = new()
|
||||
original_zLevel = loc.z
|
||||
SSminimap.station_holomaps += src
|
||||
SSholomap.station_holomaps += src
|
||||
flags |= ON_BORDER // Why? It doesn't help if its not density
|
||||
bogus = FALSE
|
||||
var/turf/T = get_turf(src)
|
||||
original_zLevel = T.z
|
||||
if(!("[HOLOMAP_EXTRA_STATIONMAP]_[original_zLevel]" in SSminimap.extra_minimaps))
|
||||
if(!("[HOLOMAP_EXTRA_STATIONMAP]_[original_zLevel]" in SSholomap.extra_minimaps))
|
||||
bogus = TRUE
|
||||
holomap_datum.initialize_holomap_bogus()
|
||||
update_icon()
|
||||
@@ -51,11 +51,12 @@
|
||||
|
||||
holomap_datum.initialize_holomap(T, reinit = TRUE)
|
||||
|
||||
small_station_map = image(SSminimap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = dir)
|
||||
small_station_map = image(SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"], dir = dir)
|
||||
small_station_map.layer = LIGHTING_LAYER + 0.1
|
||||
|
||||
floor_markings = image('icons/obj/machines/stationmap.dmi', "decal_station_map")
|
||||
floor_markings.dir = src.dir
|
||||
floor_markings.layer = ON_TURF_LAYER
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/station_map/attack_hand(var/mob/user)
|
||||
@@ -153,7 +154,7 @@
|
||||
if(bogus)
|
||||
holomap_datum.initialize_holomap_bogus()
|
||||
else
|
||||
small_station_map.icon = SSminimap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"]
|
||||
small_station_map.icon = SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAPSMALL]_[original_zLevel]"]
|
||||
add_overlay(small_station_map)
|
||||
holomap_datum.initialize_holomap(get_turf(src))
|
||||
|
||||
@@ -200,7 +201,7 @@
|
||||
|
||||
/datum/station_holomap/proc/initialize_holomap(turf/T, isAI = null, mob/user = null, reinit = FALSE)
|
||||
if(!station_map || reinit)
|
||||
station_map = image(SSminimap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAP]_[T.z]"])
|
||||
station_map = image(SSholomap.extra_minimaps["[HOLOMAP_EXTRA_STATIONMAP]_[T.z]"])
|
||||
if(!cursor || reinit)
|
||||
cursor = image('icons/misc/holomap_markers.dmi', "you")
|
||||
if(!legend || reinit)
|
||||
|
||||
@@ -238,8 +238,7 @@
|
||||
mode = STATUS_DISPLAY_TIME
|
||||
update()
|
||||
|
||||
#undef CHARS_PER_LINE
|
||||
#undef FOND_SIZE
|
||||
#undef FONT_SIZE
|
||||
#undef FONT_COLOR
|
||||
#undef FONT_STYLE
|
||||
#undef SCROLL_SPEED
|
||||
|
||||
@@ -98,7 +98,8 @@
|
||||
var/datum/wires/vending/wires = null
|
||||
|
||||
var/can_move = 1 //if you can wrench the machine out of place
|
||||
var/vend_id = "generic"
|
||||
var/vend_id = "generic" //Id of the refill cartridge that has to be used
|
||||
var/restock_items = 0 //If items can be restocked into the vending machine
|
||||
|
||||
/obj/machinery/vending/Initialize()
|
||||
. = ..()
|
||||
@@ -270,7 +271,7 @@
|
||||
else if(!is_borg_item(W))
|
||||
|
||||
for(var/datum/data/vending_product/R in product_records)
|
||||
if(istype(W, R.product_path))
|
||||
if(istype(W, R.product_path) && restock_items)
|
||||
stock(R, user)
|
||||
qdel(W)
|
||||
return
|
||||
|
||||
@@ -265,6 +265,7 @@
|
||||
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,
|
||||
/obj/item/weapon/reagent_containers/syringe = 12,
|
||||
/obj/item/device/healthanalyzer = 5,
|
||||
/obj/item/device/breath_analyzer = 2,
|
||||
/obj/item/weapon/reagent_containers/glass/beaker = 4,
|
||||
/obj/item/weapon/reagent_containers/dropper = 2,
|
||||
/obj/item/stack/medical/advanced/bruise_pack = 3,
|
||||
@@ -308,7 +309,8 @@
|
||||
/obj/item/stack/medical/bruise_pack = 2,
|
||||
/obj/item/stack/medical/ointment = 2,
|
||||
/obj/item/weapon/reagent_containers/hypospray/autoinjector = 4,
|
||||
/obj/item/device/healthanalyzer = 1
|
||||
/obj/item/device/healthanalyzer = 1,
|
||||
/obj/item/device/breath_analyzer = 1
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/weapon/reagent_containers/syringe/antitoxin = 4,
|
||||
@@ -392,88 +394,91 @@
|
||||
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
|
||||
icon_state = "seeds"
|
||||
vend_id = "seeds"
|
||||
|
||||
products = list(
|
||||
/obj/item/seeds/appleseed = 3,
|
||||
/obj/item/seeds/bananaseed = 3,
|
||||
/obj/item/seeds/berryseed = 3,
|
||||
/obj/item/seeds/blueberryseed = 3,
|
||||
/obj/item/seeds/cabbageseed = 3,
|
||||
/obj/item/seeds/carrotseed = 3,
|
||||
/obj/item/seeds/chantermycelium = 3,
|
||||
/obj/item/seeds/cherryseed = 3,
|
||||
/obj/item/seeds/chiliseed = 3,
|
||||
/obj/item/seeds/cocoapodseed = 3,
|
||||
/obj/item/seeds/cornseed = 3,
|
||||
/obj/item/seeds/eggplantseed = 3,
|
||||
/obj/item/seeds/grapeseed = 3,
|
||||
/obj/item/seeds/grassseed = 3,
|
||||
/obj/item/seeds/greengrapeseed = 3,
|
||||
/obj/item/seeds/harebell = 3,
|
||||
/obj/item/seeds/lemonseed = 3,
|
||||
/obj/item/seeds/limeseed = 3,
|
||||
/obj/item/seeds/mtearseed = 3,
|
||||
/obj/item/seeds/orangeseed = 3,
|
||||
/obj/item/seeds/peanutseed = 3,
|
||||
/obj/item/seeds/plumpmycelium = 3,
|
||||
/obj/item/seeds/poppyseed = 3,
|
||||
/obj/item/seeds/potatoseed = 3,
|
||||
/obj/item/seeds/pumpkinseed = 3,
|
||||
/obj/item/seeds/replicapod = 3,
|
||||
/obj/item/seeds/riceseed = 3,
|
||||
/obj/item/seeds/shandseed = 3,
|
||||
/obj/item/seeds/soyaseed = 3,
|
||||
/obj/item/seeds/sugarcaneseed = 3,
|
||||
/obj/item/seeds/sunflowerseed = 3,
|
||||
/obj/item/seeds/tomatoseed = 3,
|
||||
/obj/item/seeds/towermycelium = 3,
|
||||
/obj/item/seeds/wheatseed = 3,
|
||||
/obj/item/seeds/appleseed = 3,
|
||||
/obj/item/seeds/poppyseed = 3,
|
||||
/obj/item/seeds/sugarcaneseed = 3,
|
||||
/obj/item/seeds/peanutseed = 3,
|
||||
/obj/item/seeds/whitebeetseed = 3,
|
||||
/obj/item/seeds/watermelonseed = 3,
|
||||
/obj/item/seeds/limeseed = 3,
|
||||
/obj/item/seeds/lemonseed = 3,
|
||||
/obj/item/seeds/orangeseed = 3,
|
||||
/obj/item/seeds/grassseed = 3,
|
||||
/obj/item/seeds/cocoapodseed = 3,
|
||||
/obj/item/seeds/plumpmycelium = 2,
|
||||
/obj/item/seeds/cabbageseed = 3,
|
||||
/obj/item/seeds/grapeseed = 3,
|
||||
/obj/item/seeds/pumpkinseed = 3,
|
||||
/obj/item/seeds/cherryseed = 3,
|
||||
/obj/item/seeds/plastiseed = 3,
|
||||
/obj/item/seeds/riceseed = 3
|
||||
/obj/item/seeds/wheatseed = 3,
|
||||
/obj/item/seeds/whitebeetseed = 3
|
||||
)
|
||||
contraband = list(
|
||||
/obj/item/seeds/amanitamycelium = 2,
|
||||
/obj/item/seeds/glowshroom = 2,
|
||||
/obj/item/seeds/libertymycelium = 2,
|
||||
/obj/item/seeds/mtearseed = 2,
|
||||
/obj/item/seeds/nettleseed = 2,
|
||||
/obj/item/seeds/reishimycelium = 2,
|
||||
/obj/item/seeds/reishimycelium = 2,
|
||||
/obj/item/seeds/shandseed = 2,
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3
|
||||
)
|
||||
premium = list(
|
||||
/obj/item/toy/waterflower = 1
|
||||
/obj/item/seeds/amanitamycelium = 3,
|
||||
/obj/item/seeds/ambrosiadeusseed = 3,
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 3,
|
||||
/obj/item/seeds/glowshroom = 3,
|
||||
/obj/item/seeds/libertymycelium = 3,
|
||||
/obj/item/seeds/nettleseed = 3,
|
||||
/obj/item/seeds/plastiseed = 3,
|
||||
/obj/item/seeds/reishimycelium = 3
|
||||
)
|
||||
prices = list(
|
||||
/obj/item/seeds/bananaseed = 30,
|
||||
/obj/item/seeds/berryseed = 15,
|
||||
/obj/item/seeds/carrotseed = 15,
|
||||
/obj/item/seeds/chantermycelium = 5,
|
||||
/obj/item/seeds/chiliseed = 10,
|
||||
/obj/item/seeds/cornseed = 15,
|
||||
/obj/item/seeds/eggplantseed = 10,
|
||||
/obj/item/seeds/potatoseed = 10,
|
||||
/obj/item/seeds/replicapod = 175,
|
||||
/obj/item/seeds/soyaseed = 10,
|
||||
/obj/item/seeds/sunflowerseed = 5,
|
||||
/obj/item/seeds/tomatoseed = 15,
|
||||
/obj/item/seeds/towermycelium = 5,
|
||||
/obj/item/seeds/wheatseed = 5,
|
||||
/obj/item/seeds/appleseed = 15,
|
||||
/obj/item/seeds/poppyseed = 20,
|
||||
/obj/item/seeds/sugarcaneseed = 12,
|
||||
/obj/item/seeds/peanutseed = 25,
|
||||
/obj/item/seeds/whitebeetseed = 20,
|
||||
/obj/item/seeds/watermelonseed = 15,
|
||||
/obj/item/seeds/limeseed = 15,
|
||||
/obj/item/seeds/lemonseed = 15,
|
||||
/obj/item/seeds/orangeseed = 15,
|
||||
/obj/item/seeds/grassseed = 2,
|
||||
/obj/item/seeds/cocoapodseed = 25,
|
||||
/obj/item/seeds/plumpmycelium = 30,
|
||||
/obj/item/seeds/cabbageseed = 15,
|
||||
/obj/item/seeds/grapeseed = 15,
|
||||
/obj/item/seeds/pumpkinseed = 25,
|
||||
/obj/item/seeds/cherryseed = 25,
|
||||
/obj/item/seeds/plastiseed = 25,
|
||||
/obj/item/seeds/riceseed = 25
|
||||
/obj/item/seeds/appleseed = 50,
|
||||
/obj/item/seeds/bananaseed = 60,
|
||||
/obj/item/seeds/berryseed = 40,
|
||||
/obj/item/seeds/blueberryseed = 30,
|
||||
/obj/item/seeds/cabbageseed = 40,
|
||||
/obj/item/seeds/carrotseed = 20,
|
||||
/obj/item/seeds/chantermycelium = 20,
|
||||
/obj/item/seeds/cherryseed = 40,
|
||||
/obj/item/seeds/chiliseed = 50,
|
||||
/obj/item/seeds/cocoapodseed = 50,
|
||||
/obj/item/seeds/cornseed = 30,
|
||||
/obj/item/seeds/eggplantseed = 30,
|
||||
/obj/item/seeds/grapeseed = 40,
|
||||
/obj/item/seeds/grassseed = 40,
|
||||
/obj/item/seeds/greengrapeseed = 40,
|
||||
/obj/item/seeds/harebell = 10,
|
||||
/obj/item/seeds/lemonseed = 40,
|
||||
/obj/item/seeds/limeseed = 50,
|
||||
/obj/item/seeds/mtearseed = 60,
|
||||
/obj/item/seeds/orangeseed = 40,
|
||||
/obj/item/seeds/peanutseed = 30,
|
||||
/obj/item/seeds/plumpmycelium = 20,
|
||||
/obj/item/seeds/poppyseed = 10,
|
||||
/obj/item/seeds/potatoseed = 30,
|
||||
/obj/item/seeds/pumpkinseed = 40,
|
||||
/obj/item/seeds/replicapod = 200,
|
||||
/obj/item/seeds/riceseed = 20,
|
||||
/obj/item/seeds/shandseed = 60,
|
||||
/obj/item/seeds/soyaseed = 40,
|
||||
/obj/item/seeds/sugarcaneseed = 20,
|
||||
/obj/item/seeds/sunflowerseed = 20,
|
||||
/obj/item/seeds/tomatoseed = 30,
|
||||
/obj/item/seeds/towermycelium = 20,
|
||||
/obj/item/seeds/watermelonseed = 30,
|
||||
/obj/item/seeds/wheatseed = 20,
|
||||
/obj/item/seeds/whitebeetseed = 20
|
||||
)
|
||||
|
||||
/**
|
||||
@@ -721,36 +726,6 @@
|
||||
)
|
||||
//everything after the power cell had no amounts, I improvised. -Sayu
|
||||
|
||||
//FOR ACTORS GUILD - mainly props that cannot be spawned otherwise
|
||||
/obj/machinery/vending/props
|
||||
name = "prop dispenser"
|
||||
desc = "All the props an actor could need. Probably."
|
||||
icon_state = "Theater"
|
||||
vend_id = "baygay"
|
||||
products = list(
|
||||
/obj/structure/flora/pottedplant = 2,
|
||||
/obj/item/device/flashlight/lamp = 2,
|
||||
/obj/item/device/flashlight/lamp/green = 2,
|
||||
/obj/item/weapon/reagent_containers/food/drinks/jar = 1,
|
||||
/obj/item/weapon/nullrod = 1,
|
||||
/obj/item/toy/cultsword = 4,
|
||||
/obj/item/toy/katana = 2,
|
||||
/obj/item/weapon/phone = 3
|
||||
)
|
||||
|
||||
//FOR ACTORS GUILD - Containers
|
||||
/obj/machinery/vending/containers
|
||||
name = "container dispenser"
|
||||
desc = "A container that dispenses containers."
|
||||
icon_state = "robotics"
|
||||
vend_id = "baygay"
|
||||
products = list(
|
||||
/obj/structure/closet/crate/freezer = 2,
|
||||
/obj/structure/closet = 3,
|
||||
/obj/structure/closet/crate = 3
|
||||
)
|
||||
|
||||
|
||||
//RECURSION
|
||||
/obj/machinery/vending/vendors
|
||||
name = "Omni-Vendor"
|
||||
|
||||
@@ -144,7 +144,7 @@
|
||||
delete_me = 1
|
||||
|
||||
/obj/effect/landmark/costume/maid/New()
|
||||
new /obj/item/clothing/under/blackskirt(src.loc)
|
||||
new /obj/item/clothing/under/skirt/(src.loc)
|
||||
var/CHOICE = pick( /obj/item/clothing/head/beret , /obj/item/clothing/head/rabbitears )
|
||||
new CHOICE(src.loc)
|
||||
new /obj/item/clothing/glasses/sunglasses/blindfold(src.loc)
|
||||
|
||||
@@ -427,10 +427,6 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
data["new_Message"] = new_message
|
||||
data["new_News"] = new_news
|
||||
|
||||
var/datum/reception/reception = get_reception(src, do_sleep = 0)
|
||||
var/has_reception = reception.telecomms_reception & TELECOMMS_RECEPTION_SENDER
|
||||
data["reception"] = has_reception
|
||||
|
||||
if(mode==2)
|
||||
var/convopdas[0]
|
||||
var/pdas[0]
|
||||
@@ -453,7 +449,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(P.icon_state == "pda-hos"||P.icon_state == "pda-warden"||P.icon_state == "pda-det"||P.icon_state == "pda-sec"||P.icon_state == "pda-s")
|
||||
pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0")))
|
||||
if(4) //eng
|
||||
if(P.icon_state == "pda-ce"||P.icon_state == "pda-e"||P.icon_state == "pda-atmo"||P.icon_state == "pda-j")
|
||||
if(P.icon_state == "pda-ce"||P.icon_state == "pda-e"||P.icon_state == "pda-atmo")
|
||||
pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0")))
|
||||
if(5) //sci
|
||||
if(P.icon_state == "pda-rd"||P.icon_state == "pda-tox"||P.icon_state == "pda-v"||P.icon_state == "pda-robot")
|
||||
@@ -462,7 +458,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(P.icon_state == "pda-hop"||P.icon_state == "pda-cargo"||P.icon_state == "pda-q"||P.icon_state == "pda-miner")
|
||||
pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0")))
|
||||
if(7) //service
|
||||
if(P.icon_state == "pda-hop"||P.icon_state == "pda-bar"||P.icon_state == "pda-holy"||P.icon_state == "pda-lawyer"||P.icon_state == "pda-libb"||P.icon_state == "pda-hydro"||P.icon_state == "pda-chef")
|
||||
if(P.icon_state == "pda-hop"||P.icon_state == "pda-bar"||P.icon_state == "pda-holy"||P.icon_state == "pda-lawyer"||P.icon_state == "pda-libb"||P.icon_state == "pda-hydro"||P.icon_state == "pda-chef"||P.icon_state == "pda-j")
|
||||
pdas.Add(list(list("Name" = "[P]", "Reference" = "\ref[P]", "Detonate" = "[P.detonate]", "inconvo" = "0")))
|
||||
if(8) //medical
|
||||
if(P.icon_state == "pda-cmo"||P.icon_state == "pda-v"||P.icon_state == "pda-m"||P.icon_state == "pda-chem")
|
||||
@@ -518,16 +514,13 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
if(isnull(data["aircontents"]))
|
||||
data["aircontents"] = list("reading" = 0)
|
||||
if(mode==6)
|
||||
if(has_reception)
|
||||
feeds.Cut()
|
||||
for(var/datum/feed_channel/channel in news_network.network_channels)
|
||||
feeds[++feeds.len] = list("name" = channel.channel_name, "censored" = channel.censored)
|
||||
feeds.Cut()
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
feeds[++feeds.len] = list("name" = FC.channel_name, "censored" = FC.censored)
|
||||
data["feedChannels"] = feeds
|
||||
if(mode==61)
|
||||
var/datum/feed_channel/FC
|
||||
for(FC in news_network.network_channels)
|
||||
if(FC.channel_name == active_feed["name"])
|
||||
break
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(active_feed["name"])
|
||||
|
||||
var/list/feed = feed_info[active_feed]
|
||||
if(!feed)
|
||||
@@ -538,7 +531,7 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
feed["updated"] = -1
|
||||
feed_info[active_feed] = feed
|
||||
|
||||
if(FC.updated > feed["updated"] && has_reception)
|
||||
if(FC.updated > feed["updated"])
|
||||
feed["author"] = FC.author
|
||||
feed["updated"] = FC.updated
|
||||
feed["censored"] = FC.censored
|
||||
@@ -910,65 +903,56 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
|
||||
/obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P)
|
||||
//TODO: sometimes these attacks show up on the message server
|
||||
var/i = rand(1,100)
|
||||
var/j = rand(0,1) //Possibility of losing the PDA after the detonation
|
||||
var/effect = pick("explosion", "burn", "emp", "smoke", "stun", "spark")
|
||||
var/message = ""
|
||||
var/mob/living/M = null
|
||||
if(ismob(P.loc))
|
||||
M = P.loc
|
||||
|
||||
//switch(i) //Yes, the overlapping cases are intended.
|
||||
if(i<=10) //The traditional explosion
|
||||
P.explode()
|
||||
j=1
|
||||
message += "Your [P] suddenly explodes!"
|
||||
if(i>=10 && i<= 20) //The PDA burns a hole in the holder.
|
||||
j=1
|
||||
if(M && isliving(M))
|
||||
M.apply_damage( rand(30,60) , BURN)
|
||||
message += "You feel a searing heat! Your [P] is burning!"
|
||||
if(i>=20 && i<=25) //EMP
|
||||
empulse(P.loc, 3, 6, 1)
|
||||
message += "Your [P] emits a wave of electromagnetic energy!"
|
||||
if(i>=25 && i<=40) //Smoke
|
||||
var/datum/effect/effect/system/smoke_spread/chem/S = new /datum/effect/effect/system/smoke_spread/chem
|
||||
S.attach(P.loc)
|
||||
S.set_up(P, 10, 0, P.loc, 60)
|
||||
playsound(P.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
S.start()
|
||||
message += "Large clouds of smoke billow forth from your [P]!"
|
||||
if(i>=40 && i<=45) //Bad smoke
|
||||
var/datum/effect/effect/system/smoke_spread/bad/B = new /datum/effect/effect/system/smoke_spread/bad
|
||||
B.attach(P.loc)
|
||||
B.set_up(P, 10, 0, P.loc)
|
||||
playsound(P.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
B.start()
|
||||
message += "Large clouds of noxious smoke billow forth from your [P]!"
|
||||
if(i>=65 && i<=75) //Weaken
|
||||
if(M && isliving(M))
|
||||
M.apply_effects(weaken = 1)
|
||||
message += "Your [P] flashes with a blinding white light! You feel weaker."
|
||||
if(i>=75 && i<=85) //Stun and stutter
|
||||
if(M && isliving(M))
|
||||
M.apply_effects(stun = 1, stutter = 1)
|
||||
message += "Your [P] flashes with a blinding white light! You feel weaker."
|
||||
if(i>=85) //Sparks
|
||||
spark(P.loc, 2)
|
||||
message += "Your [P] begins to spark violently!"
|
||||
if(i>45 && i<65 && prob(50)) //Nothing happens
|
||||
message += "Your [P] bleeps loudly."
|
||||
j = prob(10)
|
||||
switch(effect)
|
||||
|
||||
if(j) //This kills the PDA
|
||||
qdel(P)
|
||||
if(message)
|
||||
message += "It melts in a puddle of plastic."
|
||||
else
|
||||
message += "Your [P] shatters in a thousand pieces!"
|
||||
if("explosion")
|
||||
P.explode()
|
||||
message += "Your [P] suddenly explodes!"
|
||||
|
||||
if("burn")
|
||||
if(M && isliving(M))
|
||||
M.apply_damage( rand(30,60) , BURN)
|
||||
message += "You feel a searing heat! Your [P] is burning!"
|
||||
|
||||
if("emp")
|
||||
empulse(P.loc, 3, 6, 1)
|
||||
|
||||
if("smoke")
|
||||
var/datum/effect/effect/system/smoke_spread/bad/S = new /datum/effect/effect/system/smoke_spread/bad
|
||||
S.set_up(P, 10, 0, P.loc, 60)
|
||||
S.attach(P.loc)
|
||||
S.start()
|
||||
playsound(P.loc, 'sound/effects/smoke.ogg', 50, 1, -3)
|
||||
message += "Large clouds of smoke billow forth from your [P]!"
|
||||
|
||||
if("stun")
|
||||
if(M && isliving(M))
|
||||
M.apply_effect(5, WEAKEN)
|
||||
flick("flash", M.flash)
|
||||
message += "Your [P] flashes with a blinding white light!"
|
||||
|
||||
if("spark")
|
||||
spark(P.loc, 2)
|
||||
message += "Your [P] begins to spark violently!"
|
||||
|
||||
if(message)
|
||||
message += " "
|
||||
|
||||
if(effect == "explosion")
|
||||
message += "Your [P] shatters in a thousand pieces!"
|
||||
else
|
||||
message += "\The [P] melts in a puddle of plastic."
|
||||
|
||||
if(M && isliving(M))
|
||||
message = "<span class='warning'>[message]</span>"
|
||||
M.show_message(message, 1)
|
||||
to_chat(M, "<span class='warning'>[message]</span>")
|
||||
|
||||
qdel(P)
|
||||
|
||||
/obj/item/device/pda/proc/remove_id()
|
||||
if (id)
|
||||
@@ -1473,20 +1457,20 @@ var/global/list/obj/item/device/pda/PDAs = list()
|
||||
icon = 'icons/obj/pda.dmi'
|
||||
icon_state = "pdabox"
|
||||
|
||||
New()
|
||||
..()
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/weapon/cartridge/head(src)
|
||||
/obj/item/weapon/storage/box/PDAs/fill()
|
||||
..()
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/device/pda(src)
|
||||
new /obj/item/weapon/cartridge/head(src)
|
||||
|
||||
var/newcart = pick( /obj/item/weapon/cartridge/engineering,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/weapon/cartridge/signal/science,
|
||||
/obj/item/weapon/cartridge/quartermaster)
|
||||
new newcart(src)
|
||||
var/newcart = pick( /obj/item/weapon/cartridge/engineering,
|
||||
/obj/item/weapon/cartridge/security,
|
||||
/obj/item/weapon/cartridge/medical,
|
||||
/obj/item/weapon/cartridge/signal/science,
|
||||
/obj/item/weapon/cartridge/quartermaster)
|
||||
new newcart(src)
|
||||
|
||||
// Pass along the pulse to atoms in contents, largely added so pAIs are vulnerable to EMP
|
||||
/obj/item/device/pda/emp_act(severity)
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
/obj/item/device/oxycandle
|
||||
name = "oxygen candle"
|
||||
desc = "A steel tube with the words 'OXYGEN - PULL CORD TO IGNITE' stamped on the side. A small label warns against using the device underwater"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
icon_state = "oxycandle"
|
||||
item_state = "oxycandle"
|
||||
w_class = ITEMSIZE_SMALL // Should fit into internal's box or maybe pocket
|
||||
var/target_pressure = ONE_ATMOSPHERE
|
||||
var/datum/gas_mixture/air_contents = null
|
||||
var/volume = 5600 // One tile has 2500 volume of air, so two tiles plus a bit extra
|
||||
var/on = FALSE
|
||||
var/activation_sound = 'sound/items/flare.ogg'
|
||||
light_color = LIGHT_COLOR_FLARE
|
||||
uv_intensity = 50
|
||||
var/brightness_on = 2 // Moderate bright.
|
||||
light_power = 2
|
||||
action_button_name = null
|
||||
|
||||
/obj/item/device/oxycandle/attack_self(mob/user)
|
||||
if(!on)
|
||||
user << "<span class='notice'>You pull the cord and [src] ignites.</span>"
|
||||
light_range = brightness_on
|
||||
on = TRUE
|
||||
update_icon()
|
||||
playsound(src.loc, activation_sound, 75, 1)
|
||||
air_contents = new /datum/gas_mixture()
|
||||
air_contents.volume = 200 //liters
|
||||
air_contents.temperature = T20C
|
||||
var/list/air_mix = list("oxygen" = O2STANDARD * (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature),
|
||||
"nitrogen" = N2STANDARD * (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
|
||||
air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"])
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
// Process of Oxygen candles releasing air. Makes 200 volume of oxygen and nitrogen mix
|
||||
/obj/item/device/oxycandle/process()
|
||||
if(!loc)
|
||||
return
|
||||
var/turf/pos = get_turf(src)
|
||||
if(volume <= 0 || istype(pos, /turf/simulated/floor/beach/water) || istype(pos, /turf/unsimulated/beach/water))
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
icon_state = "oxycandle_burnt"
|
||||
item_state = icon_state
|
||||
set_light(0)
|
||||
update_held_icon()
|
||||
name = "burnt oxygen candle"
|
||||
desc += "This tube has exhausted its chemicals."
|
||||
return
|
||||
if(pos)
|
||||
pos.hotspot_expose(1500, 5)
|
||||
var/datum/gas_mixture/environment = loc.return_air()
|
||||
var/pressure_delta = target_pressure - environment.return_pressure()
|
||||
var/output_volume = environment.volume * environment.group_multiplier
|
||||
var/air_temperature = air_contents.temperature? air_contents.temperature : environment.temperature
|
||||
var/transfer_moles = pressure_delta*output_volume/(air_temperature * R_IDEAL_GAS_EQUATION)
|
||||
var/datum/gas_mixture/removed = air_contents.remove(transfer_moles)
|
||||
if (!removed) //Just in case
|
||||
return
|
||||
environment.merge(removed)
|
||||
volume -= 200
|
||||
var/list/air_mix = list("oxygen" = O2STANDARD * (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature),
|
||||
"nitrogen" = N2STANDARD * (target_pressure * air_contents.volume) / (R_IDEAL_GAS_EQUATION * air_contents.temperature))
|
||||
air_contents.adjust_multi("oxygen", air_mix["oxygen"], "nitrogen", air_mix["nitrogen"])
|
||||
|
||||
/obj/item/device/oxycandle/update_icon()
|
||||
if(on)
|
||||
icon_state = "oxycandle_on"
|
||||
item_state = icon_state
|
||||
set_light(brightness_on)
|
||||
else
|
||||
icon_state = "oxycandle"
|
||||
item_state = icon_state
|
||||
set_light(0)
|
||||
update_held_icon()
|
||||
@@ -226,13 +226,6 @@
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/heads/hos
|
||||
|
||||
/obj/item/device/radio/headset/entertainment
|
||||
name = "actor's radio headset"
|
||||
desc = "specially made to make you sound less cheesy."
|
||||
icon_state = "com_headset"
|
||||
item_state = "headset"
|
||||
ks2type = /obj/item/device/encryptionkey/entertainment
|
||||
|
||||
/obj/item/device/radio/headset/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
// ..()
|
||||
user.set_machine(src)
|
||||
|
||||
@@ -4,6 +4,7 @@ HEALTH ANALYZER
|
||||
GAS ANALYZER
|
||||
MASS SPECTROMETER
|
||||
REAGENT SCANNER
|
||||
BREATH ANALYZER
|
||||
*/
|
||||
|
||||
/obj/item/device/healthanalyzer
|
||||
@@ -19,8 +20,7 @@ REAGENT SCANNER
|
||||
throw_range = 10
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 200)
|
||||
origin_tech = list(TECH_MAGNET = 1, TECH_BIO = 1)
|
||||
var/mode = 1;
|
||||
|
||||
var/mode = 1
|
||||
|
||||
/obj/item/device/healthanalyzer/attack(mob/living/M as mob, mob/living/user as mob)
|
||||
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(50))
|
||||
@@ -112,15 +112,6 @@ REAGENT SCANNER
|
||||
++unknown
|
||||
if(unknown)
|
||||
user << "<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's stomach.</span>"
|
||||
if(C.breathing && C.breathing.total_volume)
|
||||
var/unknown = 0
|
||||
for(var/datum/reagent/R in C.breathing.reagent_list)
|
||||
if(R.scannable)
|
||||
user << "<span class='notice'>[R.name] found in subject's respitory system.</span>"
|
||||
else
|
||||
++unknown
|
||||
if(unknown)
|
||||
user << "<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's respitory system.</span>"
|
||||
if(C.virus2.len)
|
||||
for (var/ID in C.virus2)
|
||||
if (ID in virusDB)
|
||||
@@ -402,4 +393,93 @@ REAGENT SCANNER
|
||||
|
||||
var/value = get_value(target)
|
||||
user.visible_message("\The [user] scans \the [target] with \the [src]")
|
||||
user.show_message("Price estimation of \the [target]: [value ? value : "N/A"] Credits")
|
||||
user.show_message("Price estimation of \the [target]: [value ? value : "N/A"] Credits")
|
||||
|
||||
|
||||
/obj/item/device/breath_analyzer
|
||||
name = "breath analyzer"
|
||||
desc = "A hand-held breath analyzer that provides a robust amount of information about the subject's repository system."
|
||||
icon_state = "breath_analyzer"
|
||||
item_state = "analyzer"
|
||||
w_class = 2.0
|
||||
flags = CONDUCT
|
||||
slot_flags = SLOT_BELT
|
||||
throwforce = 5
|
||||
throw_speed = 4
|
||||
throw_range = 20
|
||||
matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 20)
|
||||
origin_tech = list(TECH_MAGNET = 2, TECH_BIO = 2)
|
||||
|
||||
/obj/item/device/breath_analyzer/attack(mob/living/carbon/human/H as mob, mob/living/user as mob)
|
||||
|
||||
if (!istype(H))
|
||||
to_chat(user,"<span class='warning'>You can't find a way to use the [src] on [H]!</span>")
|
||||
return
|
||||
|
||||
if ( ((CLUMSY in user.mutations) || (DUMB in user.mutations)) && prob(20))
|
||||
to_chat(user,"<span class='danger'>Your hand slips from clumsiness!</span>")
|
||||
eyestab(H,user)
|
||||
to_chat(user,"<span class='danger'>Alert: No breathing detected.</span>")
|
||||
return
|
||||
|
||||
if (!user.IsAdvancedToolUser())
|
||||
to_chat(user,"<span class='warning'>You don't have the dexterity to do this!</span>")
|
||||
return
|
||||
|
||||
if(user == H && !H.can_eat(src))
|
||||
return
|
||||
else if(!H.can_force_feed(user, src))
|
||||
return
|
||||
|
||||
user.setClickCooldown(DEFAULT_QUICK_COOLDOWN)
|
||||
user.do_attack_animation(H)
|
||||
|
||||
user.visible_message("<span class='notice'>[user] is trying to take a breath sample from [H].</span>","<span class='notice'>You gently insert the [src] into [H]'s mouth.</span>")
|
||||
|
||||
if (!LAZYLEN(src.other_DNA))
|
||||
LAZYADD(src.other_DNA, H.dna.unique_enzymes)
|
||||
src.other_DNA_type = "saliva"
|
||||
|
||||
if (!do_after(user, 2 SECONDS, act_target = H))
|
||||
to_chat(user,"<span class='notice'>You and the target need to be standing still in order to take a breath sample.</span>")
|
||||
return
|
||||
|
||||
user.visible_message("<span class='notice'>[user] takes a breath sample from [H].</span>","<span class='notice'>The [src] clicks as it finishes reading [H]'s breath sample.</span>")
|
||||
|
||||
to_chat(user,"<b>Breath Sample Results:</b>")
|
||||
|
||||
if(H.stat == DEAD || H.losebreath || !H.breathing)
|
||||
to_chat(user,"<span class='danger'>Alert: No breathing detected.</span>")
|
||||
return
|
||||
|
||||
to_chat(user,H.getOxyLoss() > 50 ? "<font color='blue'><b>Severe oxygen deprivation detected.</b></font>" : "Subject oxygen levels normal.")
|
||||
var/obj/item/organ/L = H.internal_organs_by_name["lungs"]
|
||||
if(istype(L))
|
||||
to_chat(user,L.is_bruised() ? "<font color='red'><b>Ruptured lung detected.</b></font>" : "Subject lung health normal.")
|
||||
else
|
||||
to_chat(user,"<span class='warning'>Subject lung health unknown.</span>")
|
||||
|
||||
var/additional_string = "<font color='green'>\[NORMAL\]</font>"
|
||||
var/bac = H.get_blood_alcohol()
|
||||
switch(bac)
|
||||
if(INTOX_JUDGEIMP to INTOX_MUSCLEIMP)
|
||||
additional_string = "\[LIGHTLY INTOXICATED\]"
|
||||
if(INTOX_MUSCLEIMP to INTOX_VOMIT)
|
||||
additional_string = "\[MODERATELY INTOXICATED\]"
|
||||
if(INTOX_VOMIT to INTOX_BALANCE)
|
||||
additional_string = "<font color='red'>\[HEAVILY INTOXICATED\]</font>"
|
||||
if(INTOX_BALANCE to INTOX_DEATH)
|
||||
additional_string = "<font color='red'>\[ALCOHOL POISONING LIKELY\]</font>"
|
||||
if(INTOX_DEATH to INFINITY)
|
||||
additional_string = "<font color='red'>\[DEATH IMMINENT\]</font>"
|
||||
to_chat(user,"<span class='normal'>Blood Alcohol Content: [round(bac,0.01)] <b>[additional_string]</b></span>")
|
||||
|
||||
if(H.breathing && H.breathing.total_volume)
|
||||
var/unknown = 0
|
||||
for(var/datum/reagent/R in H.breathing.reagent_list)
|
||||
if(R.scannable)
|
||||
to_chat(user,"<span class='notice'>[R.name] found in subject's respitory system.</span>")
|
||||
else
|
||||
++unknown
|
||||
if(unknown)
|
||||
to_chat(user,"<span class='warning'>Non-medical reagent[(unknown > 1)?"s":""] found in subject's respitory system.</span>")
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
throw_range = 20
|
||||
var/heal_brute = 0
|
||||
var/heal_burn = 0
|
||||
var/apply_sounds
|
||||
|
||||
/obj/item/stack/medical/attack(mob/living/M as mob, mob/user as mob)
|
||||
if (!istype(M) || istype(M, /mob/living/silicon) || istype(M, /mob/living/simple_animal/spiderbot))
|
||||
@@ -65,6 +66,7 @@
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
heal_brute = 4
|
||||
icon_has_variants = TRUE
|
||||
apply_sounds = list('sound/items/rip1.ogg','sound/items/rip2.ogg')
|
||||
|
||||
/obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -104,6 +106,7 @@
|
||||
user.visible_message("<span class='notice'>\The [user] places a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You place a bandaid over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
W.bandage()
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
used++
|
||||
affecting.update_damages()
|
||||
if(used == amount)
|
||||
@@ -128,6 +131,7 @@
|
||||
heal_burn = 4
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
icon_has_variants = TRUE
|
||||
apply_sounds = list('sound/items/ointment.ogg')
|
||||
|
||||
/obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -145,6 +149,7 @@
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
if(!do_mob(user, M, 10))
|
||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
||||
return 1
|
||||
@@ -166,6 +171,7 @@
|
||||
icon_state = "traumakit"
|
||||
heal_brute = 8
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
apply_sounds = list('sound/items/rip1.ogg','sound/items/rip2.ogg','sound/items/tape.ogg')
|
||||
|
||||
/obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -204,6 +210,7 @@
|
||||
else
|
||||
user.visible_message("<span class='notice'>\The [user] smears some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You smear some bioglue over \a [W.desc] on [M]'s [affecting.name].</span>" )
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
W.bandage()
|
||||
W.disinfect()
|
||||
W.heal_damage(heal_brute)
|
||||
@@ -229,7 +236,7 @@
|
||||
icon_state = "burnkit"
|
||||
heal_burn = 8
|
||||
origin_tech = list(TECH_BIO = 1)
|
||||
|
||||
apply_sounds = list('sound/items/ointment.ogg')
|
||||
|
||||
/obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob)
|
||||
if(..())
|
||||
@@ -247,6 +254,7 @@
|
||||
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
|
||||
user.visible_message("<span class='notice'>\The [user] starts salving wounds on [M]'s [affecting.name].</span>", \
|
||||
"<span class='notice'>You start salving the wounds on [M]'s [affecting.name].</span>" )
|
||||
playsound(src, pick(apply_sounds), 25)
|
||||
if(!do_mob(user, M, 10))
|
||||
user << "<span class='notice'>You must stand still to salve wounds.</span>"
|
||||
return 1
|
||||
|
||||
@@ -349,18 +349,19 @@ var/const/NO_EMAG_ACT = -50
|
||||
icon_state = "centcom"
|
||||
registered_name = "Central Command"
|
||||
assignment = "General"
|
||||
New()
|
||||
access = get_all_centcom_access()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/centcom/ERT
|
||||
/obj/item/weapon/card/id/centcom/New()
|
||||
access = get_all_centcom_access()
|
||||
..()
|
||||
|
||||
/obj/item/weapon/card/id/ert
|
||||
name = "\improper Emergency Response Team ID"
|
||||
icon_state = "centcom"
|
||||
assignment = "Emergency Response Team"
|
||||
|
||||
obj/item/weapon/card/id/centcom/ERT/New()
|
||||
obj/item/weapon/card/id/ert/New()
|
||||
access = get_all_station_access() + get_centcom_access("Emergency Response Team")
|
||||
..()
|
||||
access = get_all_accesses() + get_centcom_access("Emergency Response Team")
|
||||
|
||||
/obj/item/weapon/card/id/all_access
|
||||
name = "\improper Administrator's spare ID"
|
||||
|
||||
@@ -184,7 +184,7 @@
|
||||
invisibility = INVISIBILITY_MAXIMUM //Why am i doing this?
|
||||
//To make sure all reagents can work
|
||||
//correctly before deleting the grenade.
|
||||
QDEL_IN(src, 50)
|
||||
QDEL_IN(src, 50)
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/large
|
||||
name = "large chem grenade"
|
||||
@@ -283,6 +283,7 @@
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
icon_state = initial(icon_state) +"_locked"
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/cleaner
|
||||
name = "cleaner grenade"
|
||||
desc = "BLAM!-brand foaming space cleaner. In a special applicator for rapid cleaning of wide areas."
|
||||
@@ -304,6 +305,28 @@
|
||||
beakers += B2
|
||||
icon_state = initial(icon_state) +"_locked"
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/large/phoroncleaner
|
||||
name = "large cardox grenade"
|
||||
desc = "A large smoke grenade containing a heavy amount of cardox. Use in case of phoron leaks. Warning: Harmful to Vaurca health."
|
||||
stage = 2
|
||||
path = 1
|
||||
|
||||
Initialize()
|
||||
. = ..()
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/large/B1 = new(src)
|
||||
var/obj/item/weapon/reagent_containers/glass/beaker/large/B2 = new(src)
|
||||
|
||||
B1.reagents.add_reagent("water", 60)
|
||||
B1.reagents.add_reagent("cardox", 60)
|
||||
B2.reagents.add_reagent("surfactant", 60)
|
||||
B2.reagents.add_reagent("cardox", 60)
|
||||
|
||||
detonator = new/obj/item/device/assembly_holder/timer_igniter(src)
|
||||
|
||||
beakers += B1
|
||||
beakers += B2
|
||||
icon_state = initial(icon_state) +"_locked"
|
||||
|
||||
/obj/item/weapon/grenade/chem_grenade/teargas
|
||||
name = "tear gas grenade"
|
||||
desc = "Concentrated Capsaicin. Contents under pressure. Use with caution."
|
||||
|
||||
@@ -1368,3 +1368,34 @@
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
|
||||
/obj/item/weapon/book/manual/brainwashing
|
||||
name = "Disloyal to Loyal: The Legality of Brainwashing"
|
||||
icon_state ="rulebook"
|
||||
author = "Dr. Fredrick Richards"
|
||||
title = "Disloyal to Loyal: The Legality of Brainwashing"
|
||||
dat = {"<html>
|
||||
<head>
|
||||
<style>
|
||||
h1 {font-size: 21px; margin: 15px 0px 5px;}
|
||||
h2 {font-size: 15px; margin: 15px 0px 5px;}
|
||||
li {margin: 2px 0px 2px 15px;}
|
||||
ul {margin: 5px; padding: 0px;}
|
||||
ol {margin: 5px; padding: 0px 15px;}
|
||||
body {font-size: 13px; font-family: Verdana;}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Disloyal to Loyal: The Legality of Brainwashing</h1>
|
||||
<h2>by Doctor Fredrick Richards with help from the NanoTrasen Legal Department</h2>
|
||||
|
||||
While it may be tempting as a Captain, Head of Security, or sometimes an officer to go around distributing anti-psychotics to maintain the peace, there are a few Corporate regulations and rules that must be kept in mind before even considering obtaining the medication.<BR><BR>
|
||||
|
||||
<h2>Pre-injection</h2>
|
||||
Generally, anti-psychotic medications should only be given out to criminals who have been charged with crimes that typically have Hold until Transfer, Cyborgification, and Loyalty Implant sentences, however some exceptions may apply. It is important to note that when using medicine to rehabilitate a criminal, the criminal in question is now legally considered a medical patient. In Tau Ceti space, it is illegal to prescribe, consume, or force a patient to consume anti-psychotic medication as a non-medical professional. As such, a non-medical personnel who injects or feeds prisoners with anti-psychotics may be charged with Suspicious Conduct, Excessive Use of Force In Detainment, Mistreatment of Prisoners, Neglect of Duty, Assault, Exceeding Official Powers, Mistreatment of Prisoners, and/or Gross Negligence. A trained and licensed medical professional are legally required to perform an evaluation first, and must be the one to perform the injection.<BR><BR>
|
||||
|
||||
<h2>Post-injection</h2>
|
||||
It is your duty as a member of the security department to oversee the health and well-being of prisoners and parolees. Those who have been giving anti-psychotic medication must be carefully monitored for their behaviour. Prisoners who skip doses, or overdose, are a threat to themselves and the people near them. If in the case of an overdose occurs, or a dose is missed, medical personnel should be contacted immediately and the situation dealt with appropriately. Failure to do so may result in Gross Negligence charges and potential demotion.
|
||||
</body>
|
||||
</html>
|
||||
"}
|
||||
|
||||
@@ -83,6 +83,7 @@
|
||||
icon_state = "medicalbelt"
|
||||
item_state = "medical"
|
||||
can_hold = list(
|
||||
/obj/item/device/breath_analyzer,
|
||||
/obj/item/device/healthanalyzer,
|
||||
/obj/item/weapon/dnainjector,
|
||||
/obj/item/weapon/reagent_containers/dropper,
|
||||
|
||||
@@ -764,6 +764,8 @@
|
||||
W.damtype = "burn"
|
||||
W.icon_state = "match_lit"
|
||||
START_PROCESSING(SSprocessing, W)
|
||||
playsound(src.loc, 'sound/items/match.ogg', 60, 1, -4)
|
||||
user.visible_message("<span class='notice'>[user] strikes the match on the matchbox.</span>")
|
||||
W.update_icon()
|
||||
return
|
||||
|
||||
@@ -980,3 +982,27 @@
|
||||
/obj/item/weapon/storage/box/stims/fill()
|
||||
for(var/i in 1 to 4)
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/stimpack(src)
|
||||
|
||||
/obj/item/weapon/storage/box/inhalers
|
||||
name = "inhaler kit"
|
||||
desc = "A box filled with several inhalers and empty inhaler cartridges."
|
||||
icon_state = "box_inhalers"
|
||||
|
||||
/obj/item/weapon/storage/box/inhalers/fill()
|
||||
for(var/i in 1 to 2)
|
||||
new /obj/item/weapon/personal_inhaler(src)
|
||||
|
||||
for(var/i in 1 to 6)
|
||||
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge(src)
|
||||
|
||||
/obj/item/weapon/storage/box/inhalers_large
|
||||
name = "combat inhaler kit"
|
||||
desc = "A box filled with a combat inhaler and several large empty inhaler cartridges."
|
||||
icon_state = "box_inhalers"
|
||||
|
||||
/obj/item/weapon/storage/box/inhalers_large/fill()
|
||||
|
||||
new /obj/item/weapon/personal_inhaler/combat(src)
|
||||
|
||||
for(var/i in 1 to 6)
|
||||
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large(src)
|
||||
@@ -10,3 +10,4 @@
|
||||
w_class = 4
|
||||
max_w_class = 3
|
||||
max_storage_space = 16
|
||||
use_sound = 'sound/items/storage/briefcase.ogg'
|
||||
@@ -295,3 +295,18 @@
|
||||
/obj/item/weapon/storage/lockbox/vials/attackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
..()
|
||||
update_icon()
|
||||
|
||||
/obj/item/weapon/storage/fancy/chocolate_box
|
||||
icon = 'icons/obj/chocolate.dmi'
|
||||
icon_state = "chocolatebox"
|
||||
icon_type = "chocolatebox"
|
||||
name = "chocolate box"
|
||||
storage_slots = 8
|
||||
can_hold = list(
|
||||
/obj/item/weapon/reagent_containers/food/snacks
|
||||
)
|
||||
|
||||
/obj/item/weapon/storage/fancy/chocolate_box/fill()
|
||||
for(var/i=1; i <= storage_slots; i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/random(src)
|
||||
|
||||
|
||||
@@ -25,16 +25,14 @@
|
||||
fill()
|
||||
..()
|
||||
if (empty) return
|
||||
|
||||
icon_state = pick("ointment","firefirstaid")
|
||||
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/stack/medical/ointment( src )
|
||||
new /obj/item/stack/medical/ointment( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
|
||||
new /obj/item/stack/medical/ointment( src )
|
||||
new /obj/item/stack/medical/ointment( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/kelotane( src ) //Replaced ointment with these since they actually work --Errorage
|
||||
return
|
||||
|
||||
|
||||
@@ -55,16 +53,14 @@
|
||||
|
||||
/obj/item/weapon/storage/firstaid/toxin
|
||||
name = "toxin first aid"
|
||||
desc = "Used to treat when you have a high amoutn of toxins in your body."
|
||||
desc = "Used to treat when you have a high amount of toxins in your body."
|
||||
icon_state = "antitoxin"
|
||||
item_state = "firstaid-toxin"
|
||||
|
||||
fill()
|
||||
..()
|
||||
if (empty) return
|
||||
|
||||
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
|
||||
|
||||
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
|
||||
@@ -75,21 +71,21 @@
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/firstaid/o2
|
||||
name = "oxygen deprivation first aid"
|
||||
desc = "A box full of oxygen goodies."
|
||||
name = "oxygen deprivation kit"
|
||||
desc = "A box full of oxygen related goodies."
|
||||
icon_state = "o2"
|
||||
item_state = "firstaid-o2"
|
||||
|
||||
fill()
|
||||
..()
|
||||
if (empty) return
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/inhaler/dexalin( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
|
||||
new /obj/item/weapon/reagent_containers/syringe/inaprovaline( src )
|
||||
new /obj/item/device/healthanalyzer( src )
|
||||
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
|
||||
new /obj/item/device/breath_analyzer( src )
|
||||
return
|
||||
|
||||
/obj/item/weapon/storage/firstaid/adv
|
||||
@@ -124,7 +120,7 @@
|
||||
new /obj/item/weapon/storage/pill_bottle/dexalin_plus(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
|
||||
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
|
||||
new /obj/item/weapon/reagent_containers/inhaler/hyperzine(src)
|
||||
new /obj/item/stack/medical/splint(src)
|
||||
return
|
||||
|
||||
@@ -133,6 +129,7 @@
|
||||
desc = "Contains tools for surgery. Has precise foam fitting for safe transport."
|
||||
icon_state = "purplefirstaid"
|
||||
item_state = "firstaid-advanced"
|
||||
use_sound = 'sound/items/storage/briefcase.ogg'
|
||||
|
||||
/obj/item/weapon/storage/firstaid/surgery/fill()
|
||||
..()
|
||||
@@ -147,7 +144,8 @@
|
||||
new /obj/item/weapon/bonegel(src)
|
||||
new /obj/item/weapon/FixOVein(src)
|
||||
new /obj/item/stack/medical/advanced/bruise_pack(src)
|
||||
|
||||
new /obj/item/weapon/reagent_containers/inhaler/soporific(src)
|
||||
new /obj/item/weapon/reagent_containers/inhaler/soporific(src)
|
||||
make_exact_fit()
|
||||
|
||||
/obj/item/weapon/storage/firstaid/brute
|
||||
@@ -179,7 +177,7 @@
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/pill,/obj/item/weapon/dice,/obj/item/weapon/paper)
|
||||
allow_quick_gather = 1
|
||||
use_to_pickup = 1
|
||||
use_sound = null
|
||||
use_sound = 'sound/items/storage/pillbottle.ogg'
|
||||
max_storage_space = 16
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/antitox
|
||||
@@ -321,31 +319,3 @@
|
||||
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/escitalopram( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/trisyndicotin
|
||||
name = "bottle of Trisyndicotin pills"
|
||||
desc = "Used to free one's mind from the oppression of NanoTrasen."
|
||||
|
||||
fill()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/trisyndicotin( src )
|
||||
|
||||
/obj/item/weapon/storage/pill_bottle/hextrasenil
|
||||
name = "bottle of Hextrasenil pills"
|
||||
desc = "Pacification through medication."
|
||||
|
||||
fill()
|
||||
..()
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
new /obj/item/weapon/reagent_containers/pill/hextrasenil( src )
|
||||
|
||||
@@ -81,7 +81,6 @@
|
||||
new /obj/item/weapon/implantcase/loyalty(src)
|
||||
new /obj/item/weapon/implanter/loyalty(src)
|
||||
|
||||
|
||||
/obj/item/weapon/storage/lockbox/clusterbang
|
||||
name = "lockbox of clusterbangs"
|
||||
desc = "You have a bad feeling about opening this."
|
||||
|
||||
@@ -49,3 +49,15 @@
|
||||
|
||||
/obj/item/weapon/storage/box/donut/empty
|
||||
startswith = 0
|
||||
|
||||
/obj/item/weapon/storage/box/pineapple
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "pineapple_rings"
|
||||
name = "can of pineapple rings"
|
||||
var/startswith = 6
|
||||
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/pineapple_ring)
|
||||
|
||||
/obj/item/weapon/storage/box/pineapple/fill()
|
||||
for(var/i=1; i <= startswith; i++)
|
||||
new /obj/item/weapon/reagent_containers/food/snacks/pineapple_ring(src)
|
||||
update_icon()
|
||||
|
||||
@@ -26,6 +26,7 @@
|
||||
w_class = 3
|
||||
max_w_class = 2
|
||||
max_storage_space = 14
|
||||
use_sound = 'sound/items/storage/briefcase.ogg'
|
||||
|
||||
examine(mob/user)
|
||||
if(..(user, 1))
|
||||
|
||||
@@ -139,7 +139,7 @@
|
||||
|
||||
/obj/item/weapon/storage/proc/open(mob/user as mob)
|
||||
if (use_sound)
|
||||
playsound(src.loc, src.use_sound, 50, 1, -5)
|
||||
playsound(src.loc, src.use_sound, 50, 0, -5)
|
||||
|
||||
orient2hud(user)
|
||||
if (user.s_active)
|
||||
|
||||
@@ -14,6 +14,7 @@
|
||||
max_storage_space = 14 //enough to hold all starting contents
|
||||
origin_tech = list(TECH_COMBAT = 1)
|
||||
attack_verb = list("robusted")
|
||||
use_sound = 'sound/items/storage/toolbox.ogg'
|
||||
var/stunhit = 0
|
||||
|
||||
/obj/item/weapon/storage/toolbox/Initialize()
|
||||
|
||||
@@ -258,3 +258,14 @@
|
||||
new /obj/item/weapon/spacecash/c1000(src)
|
||||
new /obj/item/weapon/spacecash/c1000(src)
|
||||
new /obj/item/weapon/spacecash/c1000(src)
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/stimulants
|
||||
name = "box of stimulants"
|
||||
desc = "Comes with a combat inhaler, a large cartridge of hyperzine, a large cartridge of inaprovaline, and a large empty cartridge."
|
||||
|
||||
/obj/item/weapon/storage/box/syndie_kit/stimulants/fill()
|
||||
..()
|
||||
new /obj/item/weapon/personal_inhaler/combat( src )
|
||||
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large/hyperzine( src )
|
||||
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large/inaprovaline( src )
|
||||
new /obj/item/weapon/reagent_containers/personal_inhaler_cartridge/large( src )
|
||||
@@ -30,6 +30,7 @@
|
||||
if(!H || !src || !H.organs_by_name["head"] || !H.has_eyes() || H.glasses || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
return
|
||||
|
||||
playsound(src, 'sound/items/tape.ogg',25)
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s eyes!</span>")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/blindfold/tape(H), slot_glasses)
|
||||
H.update_inv_glasses()
|
||||
@@ -47,6 +48,8 @@
|
||||
if(H.head && (H.head.body_parts_covered & FACE))
|
||||
user << "<span class='warning'>Remove their [H.head] first.</span>"
|
||||
return
|
||||
|
||||
playsound(src, 'sound/items/tape.ogg',25)
|
||||
user.visible_message("<span class='danger'>\The [user] begins taping up \the [H]'s mouth!</span>")
|
||||
|
||||
if(!do_after(user, 30))
|
||||
@@ -56,11 +59,13 @@
|
||||
if(!H || !src || !H.organs_by_name["head"] || !H.check_has_mouth() || H.wear_mask || (H.head && (H.head.body_parts_covered & FACE)))
|
||||
return
|
||||
|
||||
playsound(src, 'sound/items/tape.ogg',25)
|
||||
user.visible_message("<span class='danger'>\The [user] has taped up \the [H]'s mouth!</span>")
|
||||
H.equip_to_slot_or_del(new /obj/item/clothing/mask/muzzle/tape(H), slot_wear_mask)
|
||||
H.update_inv_wear_mask()
|
||||
|
||||
else if(target_zone == "r_hand" || target_zone == "l_hand")
|
||||
playsound(src, 'sound/items/tape.ogg',25)
|
||||
var/obj/item/weapon/handcuffs/cable/tape/T = new(user)
|
||||
if(!T.place_handcuffs(H, user))
|
||||
user.unEquip(T)
|
||||
@@ -132,6 +137,7 @@
|
||||
return // reduce papers around corners issue.
|
||||
|
||||
user.drop_from_inventory(src)
|
||||
playsound(src, 'sound/items/tape.ogg',25)
|
||||
forceMove(source_turf)
|
||||
|
||||
if(params)
|
||||
|
||||
@@ -196,7 +196,8 @@
|
||||
/obj/item/seeds/ambrosiavulgarisseed = 2,
|
||||
/obj/item/seeds/ambrosiadeusseed = 1,
|
||||
/obj/item/clothing/mask/gas/voice = 1,
|
||||
/obj/item/clothing/gloves/brassknuckles = 2
|
||||
/obj/item/clothing/gloves/brassknuckles = 2,
|
||||
/obj/item/weapon/reagent_containers/inhaler/space_drugs = 2
|
||||
)
|
||||
|
||||
/obj/random/energy
|
||||
@@ -815,7 +816,9 @@
|
||||
/obj/random/junk = 0.9,
|
||||
/obj/item/weapon/spacecash/ewallet/lotto = 0.3,
|
||||
/obj/random/spacecash = 0.3,
|
||||
/obj/item/device/firing_pin = 0.3
|
||||
/obj/item/device/firing_pin = 0.3,
|
||||
/obj/item/weapon/reagent_containers/inhaler/hyperzine = 0.1,
|
||||
/obj/item/weapon/storage/box/pineapple = 0.1
|
||||
)
|
||||
|
||||
/obj/random/hoodie
|
||||
@@ -939,3 +942,46 @@
|
||||
/obj/item/weapon/material/sword/gladius
|
||||
)
|
||||
|
||||
/obj/random/arcade
|
||||
name = "random arcade loot"
|
||||
desc = "Arcade loot!"
|
||||
icon = 'icons/obj/items.dmi'
|
||||
icon_state = "gift3"
|
||||
spawnlist = list(
|
||||
/obj/item/weapon/storage/box/snappops = 11,
|
||||
/obj/item/clothing/under/syndicate/tacticool = 5,
|
||||
/obj/item/toy/sword = 22,
|
||||
/obj/item/weapon/gun/projectile/revolver/capgun = 11,
|
||||
/obj/item/toy/crossbow = 11,
|
||||
/obj/item/weapon/storage/fancy/crayons = 11,
|
||||
/obj/item/toy/spinningtoy = 11,
|
||||
/obj/item/toy/prize/ripley = 1,
|
||||
/obj/item/toy/prize/fireripley = 1,
|
||||
/obj/item/toy/prize/deathripley = 1,
|
||||
/obj/item/toy/prize/gygax = 1,
|
||||
/obj/item/toy/prize/durand = 1,
|
||||
/obj/item/toy/prize/honk = 1,
|
||||
/obj/item/toy/prize/marauder = 1,
|
||||
/obj/item/toy/prize/seraph = 1,
|
||||
/obj/item/toy/prize/mauler = 1,
|
||||
/obj/item/toy/prize/odysseus = 1,
|
||||
/obj/item/toy/prize/phazon = 1,
|
||||
/obj/item/toy/waterflower = 5,
|
||||
/obj/random/action_figure = 11,
|
||||
/obj/random/plushie = 44,
|
||||
/obj/item/toy/cultsword = 5,
|
||||
/obj/item/toy/syndicateballoon = 5,
|
||||
/obj/item/toy/nanotrasenballoon = 5,
|
||||
/obj/item/toy/katana = 11,
|
||||
/obj/item/toy/bosunwhistle = 5,
|
||||
/obj/item/weapon/storage/belt/champion = 11,
|
||||
/obj/item/weapon/pen/invisible = 5,
|
||||
/obj/item/weapon/grenade/fake = 1,
|
||||
/obj/item/weapon/bikehorn = 11,
|
||||
/obj/item/clothing/mask/fakemoustache = 11,
|
||||
/obj/item/clothing/mask/gas/clown_hat = 11,
|
||||
/obj/item/clothing/mask/gas/mime = 11,
|
||||
/obj/item/weapon/gun/energy/wand/toy = 5,
|
||||
/obj/item/device/binoculars = 11,
|
||||
/obj/item/device/megaphone = 11
|
||||
)
|
||||
@@ -111,6 +111,7 @@
|
||||
new /obj/item/weapon/reagent_containers/hypospray(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmo(src)
|
||||
new /obj/item/clothing/suit/storage/toggle/labcoat/cmoalt(src)
|
||||
new /obj/item/weapon/storage/box/inhalers(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/CMO2
|
||||
name = "chief medical officer's attire"
|
||||
@@ -168,7 +169,8 @@
|
||||
new /obj/item/weapon/storage/box/pillbottles(src)
|
||||
new /obj/item/weapon/storage/box/spraybottles(src)
|
||||
new /obj/item/weapon/storage/box/spraybottles(src)
|
||||
|
||||
new /obj/item/weapon/storage/box/inhalers(src)
|
||||
new /obj/item/weapon/storage/box/inhalers(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/medical_wall
|
||||
name = "first aid closet"
|
||||
|
||||
@@ -148,10 +148,13 @@
|
||||
new /obj/item/taperoll/police(src)
|
||||
new /obj/item/device/flash(src)
|
||||
new /obj/item/device/holowarrant(src)
|
||||
new /obj/item/device/breath_analyzer(src)
|
||||
//Belts
|
||||
new /obj/item/clothing/accessory/holster/waist(src)
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
|
||||
|
||||
|
||||
/obj/structure/closet/secure_closet/hos2
|
||||
name = "head of security's attire"
|
||||
req_access = list(access_hos)
|
||||
@@ -178,6 +181,8 @@
|
||||
new /obj/item/weapon/storage/belt/security(src)
|
||||
new /obj/item/clothing/accessory/holster/waist(src)
|
||||
|
||||
new /obj/item/device/breath_analyzer(src)
|
||||
|
||||
/obj/structure/closet/secure_closet/warden
|
||||
name = "warden's locker"
|
||||
req_access = list(access_armory)
|
||||
|
||||
@@ -28,6 +28,7 @@
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/clothing/suit/space/emergency(src)
|
||||
new /obj/item/clothing/head/helmet/space/emergency(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
if ("aid")
|
||||
new /obj/item/weapon/tank/emergency_oxygen(src)
|
||||
new /obj/item/weapon/storage/toolbox/emergency(src)
|
||||
@@ -35,11 +36,14 @@
|
||||
new /obj/item/weapon/storage/firstaid/o2(src)
|
||||
new /obj/item/clothing/suit/space/emergency(src)
|
||||
new /obj/item/clothing/head/helmet/space/emergency(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
if ("tank")
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
if ("both")
|
||||
new /obj/item/weapon/storage/toolbox/emergency(src)
|
||||
new /obj/item/weapon/tank/emergency_oxygen/engi(src)
|
||||
@@ -49,6 +53,9 @@
|
||||
new /obj/item/clothing/suit/space/emergency(src)
|
||||
new /obj/item/clothing/head/helmet/space/emergency(src)
|
||||
new /obj/item/clothing/head/helmet/space/emergency(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
new /obj/item/device/oxycandle(src)
|
||||
|
||||
/obj/structure/closet/emcloset/legacy/fill()
|
||||
..()
|
||||
|
||||
@@ -377,9 +377,9 @@
|
||||
new /obj/item/clothing/under/color/green(src)
|
||||
new /obj/item/clothing/under/color/orange(src)
|
||||
new /obj/item/clothing/under/color/pink(src)
|
||||
new /obj/item/clothing/under/dress/plaid_blue(src)
|
||||
new /obj/item/clothing/under/dress/plaid_red(src)
|
||||
new /obj/item/clothing/under/dress/plaid_purple(src)
|
||||
new /obj/item/clothing/under/skirt/plaid_blue(src)
|
||||
new /obj/item/clothing/under/skirt/plaid_red(src)
|
||||
new /obj/item/clothing/under/skirt/plaid_purple(src)
|
||||
new /obj/item/clothing/shoes/blue(src)
|
||||
new /obj/item/clothing/shoes/yellow(src)
|
||||
new /obj/item/clothing/shoes/green(src)
|
||||
|
||||
@@ -52,14 +52,14 @@
|
||||
random_junk
|
||||
|
||||
cheesy_honkers
|
||||
author = "Assistant Editor Carl Ritz"
|
||||
author = "Editor Carl Ritz"
|
||||
channel_name = "The Gibson Gazette"
|
||||
message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations
|
||||
say so!"}
|
||||
round_time = 60 * 15
|
||||
|
||||
net_block
|
||||
author = "Assistant Editor Carl Ritz"
|
||||
author = "Editor Carl Ritz"
|
||||
channel_name = "The Gibson Gazette"
|
||||
message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators
|
||||
claiming violation of net laws."}
|
||||
@@ -129,19 +129,10 @@ proc/check_for_newscaster_updates(type)
|
||||
announce_newscaster_news(news)
|
||||
|
||||
proc/announce_newscaster_news(datum/news_announcement/news)
|
||||
var/datum/feed_channel/sendto
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
if(FC.channel_name == news.channel_name)
|
||||
sendto = FC
|
||||
break
|
||||
|
||||
var/datum/feed_channel/sendto = SSnews.GetFeedChannel(news.channel_name)
|
||||
if(!sendto)
|
||||
sendto = new /datum/feed_channel
|
||||
sendto.channel_name = news.channel_name
|
||||
sendto.author = news.author
|
||||
sendto.locked = 1
|
||||
sendto.is_admin_channel = 1
|
||||
news_network.network_channels += sendto
|
||||
SSnews.CreateFeedChannel(news.channel_name, news.author, 1, 1)
|
||||
|
||||
var/author = news.author ? news.author : sendto.author
|
||||
news_network.SubmitArticle(news.message, author, news.channel_name, null, !news.can_be_redacted, news.message_type)
|
||||
var/datum/feed_channel/ch = SSnews.GetFeedChannel(news.channel_name)
|
||||
SSnews.SubmitArticle(news.message, author, ch, null, !news.can_be_redacted, news.message_type)
|
||||
|
||||
@@ -1,9 +1,4 @@
|
||||
//Config stuff
|
||||
#define SUPPLY_DOCKZ 3 //Z-level of the Dock.
|
||||
#define SUPPLY_STATIONZ 1 //Z-level of the Station.
|
||||
#define SUPPLY_STATION_AREATYPE /area/supply/station //Type of the supply shuttle area for station
|
||||
#define SUPPLY_DOCK_AREATYPE /area/supply/dock //Type of the supply shuttle area for dock
|
||||
|
||||
//Supply packs are in /code/defines/obj/supplypacks.dm
|
||||
//Computers are in /code/game/machinery/computer/supply.dm
|
||||
|
||||
|
||||
+33
-29
@@ -350,7 +350,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
<BR>Feed channels and stories entered through here will be uneditable and handled as official news by the rest of the units.
|
||||
<BR>Note that this panel allows full freedom over the news network, there are no constrictions except the few basic ones. Don't break things!
|
||||
"}
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
dat+= "<HR><A href='?src=\ref[src];ac_view_wanted=1'>Read Wanted Issue</A>"
|
||||
|
||||
dat+= {"<HR><BR><A href='?src=\ref[src];ac_create_channel=1'>Create Feed Channel</A>
|
||||
@@ -360,7 +360,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
"}
|
||||
|
||||
var/wanted_already = 0
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
wanted_already = 1
|
||||
|
||||
dat+={"<HR><B>Feed Security functions:</B><BR>
|
||||
@@ -371,14 +371,15 @@ proc/admin_notice(var/message, var/rights)
|
||||
"}
|
||||
if(1)
|
||||
dat+= "Station Feed Channels<HR>"
|
||||
if( isemptylist(news_network.network_channels) )
|
||||
if( isemptylist(SSnews.network_channels) )
|
||||
dat+="<I>No active channels found...</I>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
if(CHANNEL.is_admin_channel)
|
||||
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen'><A href='?src=\ref[src];ac_show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A></FONT></B><BR>"
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.is_admin_channel)
|
||||
dat+="<B><FONT style='BACKGROUND-COLOR: LightGreen'><A href='?src=\ref[src];ac_show_channel=\ref[FC]'>[FC.channel_name]</A></FONT></B><BR>"
|
||||
else
|
||||
dat+="<B><A href='?src=\ref[src];ac_show_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR></B>"
|
||||
dat+="<B><A href='?src=\ref[src];ac_show_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR></B>"
|
||||
dat+={"<BR><HR><A href='?src=\ref[src];ac_refresh=1'>Refresh</A>
|
||||
<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A>
|
||||
"}
|
||||
@@ -421,7 +422,8 @@ proc/admin_notice(var/message, var/rights)
|
||||
if(src.admincaster_feed_channel.channel_name =="" || src.admincaster_feed_channel.channel_name == "\[REDACTED\]")
|
||||
dat+="<FONT COLOR='maroon'>Invalid channel name.</FONT><BR>"
|
||||
var/check = 0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.channel_name == src.admincaster_feed_channel.channel_name)
|
||||
check = 1
|
||||
break
|
||||
@@ -458,11 +460,12 @@ proc/admin_notice(var/message, var/rights)
|
||||
Keep in mind that users attempting to view a censored feed will instead see the \[REDACTED\] tag above it.</FONT>
|
||||
<HR>Select Feed channel to get Stories from:<BR>
|
||||
"}
|
||||
if(isemptylist(news_network.network_channels))
|
||||
if(isemptylist(SSnews.network_channels))
|
||||
dat+="<I>No feed channels found active...</I><BR>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
dat+="<A href='?src=\ref[src];ac_pick_censor_channel=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
dat+="<A href='?src=\ref[src];ac_pick_censor_channel=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Cancel</A>"
|
||||
if(11)
|
||||
dat+={"
|
||||
@@ -471,11 +474,12 @@ proc/admin_notice(var/message, var/rights)
|
||||
morale, integrity or disciplinary behaviour. A D-Notice will render a channel unable to be updated by anyone, without deleting any feed
|
||||
stories it might contain at the time. You can lift a D-Notice if you have the required access at any time.</FONT><HR>
|
||||
"}
|
||||
if(isemptylist(news_network.network_channels))
|
||||
if(isemptylist(SSnews.network_channels))
|
||||
dat+="<I>No feed channels found active...</I><BR>"
|
||||
else
|
||||
for(var/datum/feed_channel/CHANNEL in news_network.network_channels)
|
||||
dat+="<A href='?src=\ref[src];ac_pick_d_notice=\ref[CHANNEL]'>[CHANNEL.channel_name]</A> [(CHANNEL.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
dat+="<A href='?src=\ref[src];ac_pick_d_notice=\ref[FC]'>[FC.channel_name]</A> [(FC.censored) ? ("<FONT COLOR='red'>***</FONT>") : ()]<BR>"
|
||||
|
||||
dat+="<BR><A href='?src=\ref[src];ac_setScreen=[0]'>Back</A>"
|
||||
if(12)
|
||||
@@ -514,7 +518,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
dat+="<B>Wanted Issue Handler:</B>"
|
||||
var/wanted_already = 0
|
||||
var/end_param = 1
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
wanted_already = 1
|
||||
end_param = 2
|
||||
if(wanted_already)
|
||||
@@ -525,7 +529,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
<A href='?src=\ref[src];ac_set_wanted_desc=1'>Description</A>: [src.admincaster_feed_message.body] <BR>
|
||||
"}
|
||||
if(wanted_already)
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [news_network.wanted_issue.backup_author]</FONT><BR>"
|
||||
dat+="<B>Wanted Issue created by:</B><FONT COLOR='green'> [SSnews.wanted_issue.backup_author]</FONT><BR>"
|
||||
else
|
||||
dat+="<B>Wanted Issue will be created under prosecutor:</B><FONT COLOR='green'> [src.admincaster_signature]</FONT><BR>"
|
||||
dat+="<BR><A href='?src=\ref[src];ac_submit_wanted=[end_param]'>[(wanted_already) ? ("Edit Issue") : ("Submit")]</A>"
|
||||
@@ -551,13 +555,13 @@ proc/admin_notice(var/message, var/rights)
|
||||
"}
|
||||
if(18)
|
||||
dat+={"
|
||||
<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[news_network.wanted_issue.backup_author]</FONT>\]</FONT><HR>
|
||||
<B>Criminal</B>: [news_network.wanted_issue.author]<BR>
|
||||
<B>Description</B>: [news_network.wanted_issue.body]<BR>
|
||||
<B><FONT COLOR ='maroon'>-- STATIONWIDE WANTED ISSUE --</B></FONT><BR><FONT SIZE=2>\[Submitted by: <FONT COLOR='green'>[SSnews.wanted_issue.backup_author]</FONT>\]</FONT><HR>
|
||||
<B>Criminal</B>: [SSnews.wanted_issue.author]<BR>
|
||||
<B>Description</B>: [SSnews.wanted_issue.body]<BR>
|
||||
<B>Photo:</B>:
|
||||
"}
|
||||
if(news_network.wanted_issue.img)
|
||||
usr << browse_rsc(news_network.wanted_issue.img, "tmp_photow.png")
|
||||
if(SSnews.wanted_issue.img)
|
||||
usr << browse_rsc(SSnews.wanted_issue.img, "tmp_photow.png")
|
||||
dat+="<BR><img src='tmp_photow.png' width = '180'>"
|
||||
else
|
||||
dat+="None"
|
||||
@@ -1204,7 +1208,7 @@ proc/admin_notice(var/message, var/rights)
|
||||
H.regenerate_icons()
|
||||
|
||||
|
||||
/proc/get_options_bar(whom, detail = 2, name = 0, link = 1, highlight_special = 1, var/datum/ticket/ticket = null)
|
||||
/proc/get_options_bar(whom, detail = 2, name = 0, link = 1, highlight_special = 1, var/datum/ticket/ticket = null)
|
||||
if(!whom)
|
||||
return "<b>(*null*)</b>"
|
||||
var/mob/M
|
||||
@@ -1216,25 +1220,25 @@ proc/admin_notice(var/message, var/rights)
|
||||
M = whom
|
||||
C = M.client
|
||||
else
|
||||
return "<b>(*not a mob*)</b>"
|
||||
return "<b>(*not a mob*)</b>"
|
||||
switch(detail)
|
||||
if(0)
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)]</b>"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)]</b>"
|
||||
|
||||
if(1) //Private Messages
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)](<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)</b>"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)](<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>)</b>"
|
||||
|
||||
if(2) //Admins
|
||||
var/ref_mob = "\ref[M]"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(M, src)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)](<A HREF='?_src_=holder;adminmoreinfo=[ref_mob]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(M, src)]) (<A HREF='?_src_=holder;check_antagonist=1'>CA</A>)</b>"
|
||||
|
||||
if(3) //Devs
|
||||
if(3) //Devs
|
||||
var/ref_mob = "\ref[M]"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)](<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>)([admin_jump_link(M, src)])</b>"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)](<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>)([admin_jump_link(M, src)])</b>"
|
||||
|
||||
if(4) //Mentors
|
||||
var/ref_mob = "\ref[M]"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(M, src)])</b>"
|
||||
return "<b>[key_name(C, link, name, highlight_special, ticket)] (<A HREF='?_src_=holder;adminmoreinfo=\ref[M]'>?</A>) (<A HREF='?_src_=holder;adminplayeropts=[ref_mob]'>PP</A>) (<A HREF='?_src_=vars;Vars=[ref_mob]'>VV</A>) (<A HREF='?_src_=holder;subtlemessage=[ref_mob]'>SM</A>) ([admin_jump_link(M, src)])</b>"
|
||||
|
||||
//
|
||||
//ALL DONE
|
||||
|
||||
+16
-13
@@ -1312,7 +1312,8 @@
|
||||
|
||||
else if(href_list["ac_submit_new_channel"])
|
||||
var/check = 0
|
||||
for(var/datum/feed_channel/FC in news_network.network_channels)
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
if(FC.channel_name == src.admincaster_feed_channel.channel_name)
|
||||
check = 1
|
||||
break
|
||||
@@ -1321,7 +1322,7 @@
|
||||
else
|
||||
var/choice = alert("Please confirm Feed channel creation","Network Channel Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
news_network.CreateFeedChannel(admincaster_feed_channel.channel_name, admincaster_signature, admincaster_feed_channel.locked, 1)
|
||||
SSnews.CreateFeedChannel(admincaster_feed_channel.channel_name, admincaster_signature, admincaster_feed_channel.locked, 1)
|
||||
feedback_inc("newscaster_channels",1) //Adding channel to the global network
|
||||
log_admin("[key_name_admin(usr)] created command feed channel: [src.admincaster_feed_channel.channel_name]!",admin_key=key_name(usr))
|
||||
src.admincaster_screen=5
|
||||
@@ -1329,8 +1330,9 @@
|
||||
|
||||
else if(href_list["ac_set_channel_receiving"])
|
||||
var/list/available_channels = list()
|
||||
for(var/datum/feed_channel/F in news_network.network_channels)
|
||||
available_channels += F.channel_name
|
||||
for(var/channel in SSnews.network_channels)
|
||||
var/datum/feed_channel/FC = SSnews.GetFeedChannel(channel)
|
||||
available_channels += FC.channel_name
|
||||
src.admincaster_feed_channel.channel_name = sanitizeSafe(input(usr, "Choose receiving Feed Channel", "Network Channel Handler") in available_channels )
|
||||
src.access_news_network()
|
||||
|
||||
@@ -1343,7 +1345,8 @@
|
||||
src.admincaster_screen = 6
|
||||
else
|
||||
feedback_inc("newscaster_stories",1)
|
||||
news_network.SubmitArticle(src.admincaster_feed_message.body, src.admincaster_signature, src.admincaster_feed_channel.channel_name, null, 1)
|
||||
var/datum/feed_channel/ch = SSnews.GetFeedChannel(src.admincaster_feed_channel.channel_name)
|
||||
SSnews.SubmitArticle(src.admincaster_feed_message.body, src.admincaster_signature, ch, null, 1)
|
||||
src.admincaster_screen=4
|
||||
|
||||
log_admin("[key_name_admin(usr)] submitted a feed story to channel: [src.admincaster_feed_channel.channel_name]!",admin_key=key_name(usr))
|
||||
@@ -1367,12 +1370,12 @@
|
||||
|
||||
else if(href_list["ac_menu_wanted"])
|
||||
var/already_wanted = 0
|
||||
if(news_network.wanted_issue)
|
||||
if(SSnews.wanted_issue)
|
||||
already_wanted = 1
|
||||
|
||||
if(already_wanted)
|
||||
src.admincaster_feed_message.author = news_network.wanted_issue.author
|
||||
src.admincaster_feed_message.body = news_network.wanted_issue.body
|
||||
src.admincaster_feed_message.author = SSnews.wanted_issue.author
|
||||
src.admincaster_feed_message.body = SSnews.wanted_issue.body
|
||||
src.admincaster_screen = 14
|
||||
src.access_news_network()
|
||||
|
||||
@@ -1397,15 +1400,15 @@
|
||||
WANTED.body = src.admincaster_feed_message.body //Wanted desc
|
||||
WANTED.backup_author = src.admincaster_signature //Submitted by
|
||||
WANTED.is_admin_message = 1
|
||||
news_network.wanted_issue = WANTED
|
||||
SSnews.wanted_issue = WANTED
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.newsAlert()
|
||||
NEWSCASTER.update_icon()
|
||||
src.admincaster_screen = 15
|
||||
else
|
||||
news_network.wanted_issue.author = src.admincaster_feed_message.author
|
||||
news_network.wanted_issue.body = src.admincaster_feed_message.body
|
||||
news_network.wanted_issue.backup_author = src.admincaster_feed_message.backup_author
|
||||
SSnews.wanted_issue.author = src.admincaster_feed_message.author
|
||||
SSnews.wanted_issue.body = src.admincaster_feed_message.body
|
||||
SSnews.wanted_issue.backup_author = src.admincaster_feed_message.backup_author
|
||||
src.admincaster_screen = 19
|
||||
log_admin("[key_name_admin(usr)] issued a Station-wide Wanted Notification for [src.admincaster_feed_message.author]!",admin_key=key_name(usr))
|
||||
src.access_news_network()
|
||||
@@ -1413,7 +1416,7 @@
|
||||
else if(href_list["ac_cancel_wanted"])
|
||||
var/choice = alert("Please confirm Wanted Issue removal","Network Security Handler","Confirm","Cancel")
|
||||
if(choice=="Confirm")
|
||||
news_network.wanted_issue = null
|
||||
SSnews.wanted_issue = null
|
||||
for(var/obj/machinery/newscaster/NEWSCASTER in allCasters)
|
||||
NEWSCASTER.update_icon()
|
||||
src.admincaster_screen=17
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
#ifdef AO_USE_LIGHTING_OPACITY
|
||||
#define AO_TURF_CHECK(T) (!T.has_opaque_atom || !T.permit_ao)
|
||||
#define AO_SELF_CHECK(T) (!T.has_opaque_atom)
|
||||
#else
|
||||
#define AO_TURF_CHECK(T) (!T.density || !T.opacity || !T.permit_ao)
|
||||
#define AO_SELF_CHECK(T) (!T.density && !T.opacity)
|
||||
#endif
|
||||
|
||||
/turf
|
||||
@@ -29,7 +31,7 @@
|
||||
var/turf/T
|
||||
if (flags & MIMIC_BELOW)
|
||||
CALCULATE_NEIGHBORS(src, ao_neighbors_mimic, T, (T.flags & MIMIC_BELOW))
|
||||
if (!has_opaque_atom && !(flags & MIMIC_NO_AO))
|
||||
if (AO_SELF_CHECK(src) && !(flags & MIMIC_NO_AO))
|
||||
CALCULATE_NEIGHBORS(src, ao_neighbors, T, AO_TURF_CHECK(T))
|
||||
|
||||
/proc/make_ao_image(corner, i, px = 0, py = 0, pz = 0, pw = 0)
|
||||
@@ -41,6 +43,7 @@
|
||||
I.alpha = WALL_AO_ALPHA
|
||||
I.blend_mode = BLEND_OVERLAY
|
||||
I.appearance_flags = RESET_ALPHA|RESET_COLOR|TILE_BOUND
|
||||
I.layer = AO_LAYER
|
||||
// If there's an offset, counteract it.
|
||||
if (px || py || pz || pw)
|
||||
I.pixel_x = -px
|
||||
@@ -109,3 +112,5 @@
|
||||
|
||||
#undef REGEN_AO
|
||||
#undef PROCESS_AO_CORNER
|
||||
#undef AO_TURF_CHECK
|
||||
#undef AO_SELF_CHECK
|
||||
|
||||
@@ -58,6 +58,8 @@ var/global/stockname = ""
|
||||
*/
|
||||
|
||||
var/list/global/random_stock_common = list(
|
||||
"backpack" = 1,
|
||||
"drawing" = 1,
|
||||
"toolbox" = 4,
|
||||
"meds" = 5,
|
||||
"steel" = 7,
|
||||
@@ -74,8 +76,6 @@ var/list/global/random_stock_common = list(
|
||||
"light" = 1.8,
|
||||
"aid" = 4,
|
||||
"flame" = 2,
|
||||
"crayons" = 1.5,
|
||||
"figure" = 1,
|
||||
"bombsupply" = 4.5,
|
||||
"tech" = 5,
|
||||
"smokes" = 2,
|
||||
@@ -85,13 +85,12 @@ var/list/global/random_stock_common = list(
|
||||
"circuitboard" = 2,
|
||||
"smalloxy" = 3.2,
|
||||
"belts" = 2,
|
||||
"backpack" = 4.5,
|
||||
"weldgear" = 2,
|
||||
"inflatable" = 3,
|
||||
"wheelchair" = 1,
|
||||
"meson" = 1.5,
|
||||
"beartrap" = 2,
|
||||
"trays" = 1.8,
|
||||
"trays" = 0.8,
|
||||
"utensil" = 2,
|
||||
"metalfoam" = 1.5,
|
||||
"nanopaste" = 2,
|
||||
@@ -122,8 +121,7 @@ var/list/global/random_stock_common = list(
|
||||
"hailer" = 1.1,
|
||||
"target" = 2,
|
||||
"snacks" = 4,
|
||||
"oxytank" = 2.5,//
|
||||
"signs" = 4,
|
||||
"oxytank" = 2.5,
|
||||
"posters" = 3,
|
||||
"parts" = 6,
|
||||
"cane" = 2,
|
||||
@@ -134,9 +132,11 @@ var/list/global/random_stock_common = list(
|
||||
"paicard" = 2,
|
||||
"phoronsheets" = 2,
|
||||
"hide" = 1,
|
||||
"arcade" = 2,
|
||||
"nothing" = 0)
|
||||
|
||||
var/list/global/random_stock_uncommon = list(
|
||||
"beekit" = 1,
|
||||
"glowshrooms" = 2,
|
||||
"plasteel" = 3,
|
||||
"silver" = 2,
|
||||
@@ -152,19 +152,17 @@ var/list/global/random_stock_uncommon = list(
|
||||
"monkey" = 2,
|
||||
"specialcrayon" = 1.5,
|
||||
"contraband" = 2,
|
||||
"figure" = 4,
|
||||
"plushie" = 4,
|
||||
"mediumcell" = 3,
|
||||
"chempack" = 5,
|
||||
"robolimbs" = 3,
|
||||
"circuitboards" = 3,
|
||||
"jetpack" = 3,
|
||||
"xenocostume" = 1,
|
||||
"bible" = 1,
|
||||
"inhaler" = 1,
|
||||
"advwelder" = 2,
|
||||
"sord" = 1,
|
||||
"policebaton" = 1.5,
|
||||
"stunbaton" = 0.75,//batons spawn with no powercell
|
||||
"stunbaton" = 0.75, //batons spawn with no powercell
|
||||
"firingpin" = 3,
|
||||
"watches" = 3,
|
||||
"MMI" = 1.5,
|
||||
@@ -183,7 +181,6 @@ var/list/global/random_stock_uncommon = list(
|
||||
"fireaxe" = 1,
|
||||
"service" = 2,
|
||||
"robot" = 2,
|
||||
"latexb" = 0.5,
|
||||
"taperoll" = 1,
|
||||
"headset" = 2,
|
||||
"bat" = 1.2,
|
||||
@@ -196,7 +193,6 @@ var/list/global/random_stock_uncommon = list(
|
||||
"exoquip" = 2,
|
||||
"laserscalpel" = 1.3,
|
||||
"electropack" = 1,
|
||||
"beesmoker" = 1.5,
|
||||
"monkeyhide" = 0.5,
|
||||
"cathide" = 0.5,
|
||||
"corgihide" = 0.5,
|
||||
@@ -465,6 +461,11 @@ var/list/global/random_stock_large = list(
|
||||
/proc/spawn_stock(var/stock, var/atom/L, var/datum/cargospawner/CS = null)
|
||||
//L is the location we spawn in. Using a single letter as shorthand because its written so often
|
||||
switch(stock)
|
||||
if("arcade")
|
||||
new /obj/random/arcade(L)
|
||||
new /obj/random/arcade(L)
|
||||
new /obj/random/arcade(L)
|
||||
|
||||
if ("toolbox")
|
||||
if (prob(5))
|
||||
new /obj/item/weapon/storage/toolbox/syndicate(L)
|
||||
@@ -562,8 +563,6 @@ var/list/global/random_stock_large = list(
|
||||
new /obj/item/weapon/flame/lighter/random(L)
|
||||
new /obj/item/weapon/storage/fancy/candle_box(L)
|
||||
new /obj/item/weapon/storage/fancy/candle_box(L)
|
||||
if ("crayons")
|
||||
new /obj/item/weapon/storage/fancy/crayons(L)
|
||||
|
||||
if("bombsupply")
|
||||
new /obj/random/bomb_supply(L)
|
||||
@@ -640,9 +639,6 @@ var/list/global/random_stock_large = list(
|
||||
if("belts")
|
||||
new /obj/random/belt(L)
|
||||
new /obj/random/belt(L)
|
||||
if("backpack")
|
||||
new /obj/random/backpack(L)
|
||||
new /obj/random/backpack(L)
|
||||
if("weldgear")
|
||||
if (prob(50))
|
||||
new /obj/item/clothing/glasses/welding(L)
|
||||
@@ -708,6 +704,7 @@ var/list/global/random_stock_large = list(
|
||||
//A random scanning device, most are useless
|
||||
var/list/possible = list(
|
||||
/obj/item/device/healthanalyzer = 5,
|
||||
/obj/item/device/breath_analyzer = 1,
|
||||
/obj/item/device/analyzer = 0.5,
|
||||
/obj/item/device/mass_spectrometer = 0.5,
|
||||
/obj/item/device/mass_spectrometer/adv = 0.5,
|
||||
@@ -976,13 +973,11 @@ var/list/global/random_stock_large = list(
|
||||
new type(L)
|
||||
|
||||
if ("cleanernades")
|
||||
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
|
||||
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
|
||||
if (prob(50))
|
||||
if(prob(90))
|
||||
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
|
||||
new /obj/item/weapon/grenade/chem_grenade/cleaner(L)
|
||||
|
||||
|
||||
else
|
||||
new /obj/item/weapon/grenade/chem_grenade/large/phoroncleaner(L)
|
||||
|
||||
if ("mining")
|
||||
if (prob(50))
|
||||
@@ -1007,12 +1002,35 @@ var/list/global/random_stock_large = list(
|
||||
if ("hide")
|
||||
new /obj/item/stack/material/animalhide(L, rand(5,50))
|
||||
|
||||
if("drawing")
|
||||
var/list/drawing = list(
|
||||
/obj/item/weapon/pen/crayon/rainbow = 2,
|
||||
/obj/item/weapon/pen/crayon/mime = 2,
|
||||
/obj/item/weapon/storage/fancy/crayons = 4,
|
||||
/obj/item/weapon/pen/chameleon = 1,
|
||||
/obj/item/weapon/pen/invisible = 2,
|
||||
/obj/item/weapon/pen/multi = 2
|
||||
)
|
||||
var/type = pickweight(drawing)
|
||||
new type(L)
|
||||
|
||||
if("backpack")
|
||||
var/obj/item/weapon/storage/pack = new /obj/random/backpack(src)
|
||||
if(istype(pack) && prob(75))
|
||||
new /obj/random/loot(pack)
|
||||
new /obj/random/loot(pack)
|
||||
new /obj/random/loot(pack)
|
||||
|
||||
|
||||
//Uncommon items below here
|
||||
//=============================================================
|
||||
//=============================================================
|
||||
//=============================================================
|
||||
if ("glowshrooms")
|
||||
if("beekit")
|
||||
new /obj/item/bee_pack(src)
|
||||
new /obj/item/weapon/bee_net(src)
|
||||
new /obj/item/weapon/bee_smoker(src)
|
||||
if("glowshrooms")
|
||||
new /obj/item/seeds/glowshroom(L)
|
||||
new /obj/item/seeds/glowshroom(L)
|
||||
new /obj/item/seeds/glowshroom(L)
|
||||
@@ -1059,12 +1077,6 @@ var/list/global/random_stock_large = list(
|
||||
while (number > 0)
|
||||
new /obj/random/contraband(L)
|
||||
number--
|
||||
if("figure")
|
||||
new /obj/random/action_figure(L)
|
||||
new /obj/random/action_figure(L)
|
||||
new /obj/random/action_figure(L)
|
||||
if("plushie")
|
||||
new /obj/random/plushie(L)
|
||||
if("firingpin")
|
||||
new /obj/item/weapon/storage/box/firingpins(L)
|
||||
if("mediumcell")
|
||||
@@ -1130,11 +1142,6 @@ var/list/global/random_stock_large = list(
|
||||
if ("xenocostume")
|
||||
new /obj/item/clothing/suit/xenos(L)
|
||||
new /obj/item/clothing/head/xenos(L)
|
||||
if ("bible")
|
||||
if (prob(25))
|
||||
new /obj/item/weapon/storage/bible/booze(L)
|
||||
else
|
||||
new /obj/item/weapon/storage/bible(L)
|
||||
if ("advwelder")
|
||||
new /obj/item/weapon/weldingtool/hugetank(L)
|
||||
|
||||
@@ -1157,22 +1164,6 @@ var/list/global/random_stock_large = list(
|
||||
if ("voidsuit")
|
||||
new /obj/random/voidsuit(L,1)
|
||||
|
||||
if ("signs")
|
||||
var/list/allsigns = subtypesof(/obj/structure/sign)
|
||||
allsigns -= typesof(/obj/structure/sign/double)
|
||||
allsigns -= typesof(/obj/structure/sign/poster)
|
||||
allsigns -= /obj/structure/sign/directions
|
||||
allsigns -= typesof(/obj/structure/sign/christmas)
|
||||
allsigns -= typesof(/obj/structure/sign/flag)
|
||||
|
||||
var/number = rand(1,5)
|
||||
|
||||
while (number > 0)
|
||||
var/newsign = pick(allsigns)
|
||||
if (newsign != /obj/structure/sign)//Dont want to spawn the generic parent class
|
||||
var/obj/structure/sign/S = new newsign(L)
|
||||
S.unfasten()
|
||||
number--
|
||||
if ("posters")
|
||||
new /obj/item/weapon/contraband/poster(L)
|
||||
if (prob(50))
|
||||
@@ -1244,8 +1235,6 @@ var/list/global/random_stock_large = list(
|
||||
newbot.on = 0//Deactivated
|
||||
if (prob(10))
|
||||
newbot.emag_act(9999,null)
|
||||
if ("latexb")
|
||||
new /obj/item/latexballon(L)
|
||||
|
||||
//Random headsets for low-security department
|
||||
//No command or sec
|
||||
@@ -1372,9 +1361,6 @@ var/list/global/random_stock_large = list(
|
||||
cr.rigged = 1//Boobytrapped crate, will electrocute when you attempt to open it
|
||||
//Can be disarmed with wirecutters or ignored with insulated gloves
|
||||
|
||||
if ("beesmoker")
|
||||
new /obj/item/weapon/bee_smoker(L)
|
||||
|
||||
if("monkeyhide")
|
||||
new /obj/item/stack/material/animalhide/monkey(L, 50)
|
||||
|
||||
@@ -1390,7 +1376,6 @@ var/list/global/random_stock_large = list(
|
||||
if ("wintercoat")
|
||||
new /obj/random/hoodie(L)
|
||||
|
||||
|
||||
if("cookingoil")
|
||||
var/turf/T = get_turf(L)
|
||||
if (!turf_clear(T))
|
||||
@@ -1539,6 +1524,35 @@ var/list/global/random_stock_large = list(
|
||||
if ("contraband")
|
||||
new /obj/random/contraband(L)
|
||||
|
||||
if ("inhaler")
|
||||
if(prob(33))
|
||||
if(prob(10))
|
||||
new/obj/item/weapon/storage/box/inhalers_large(src)
|
||||
else
|
||||
new /obj/item/weapon/storage/box/inhalers(src)
|
||||
else
|
||||
var/number = rand(2,3)
|
||||
var/list/inhalers = list(
|
||||
/obj/item/weapon/reagent_containers/inhaler/dexalin = 8,
|
||||
/obj/item/weapon/reagent_containers/inhaler/hyperzine = 2,
|
||||
/obj/item/weapon/reagent_containers/inhaler/phoron = 2,
|
||||
/obj/item/weapon/reagent_containers/inhaler/soporific = 1,
|
||||
/obj/item/weapon/reagent_containers/inhaler/space_drugs = 3
|
||||
)
|
||||
while(number > 0)
|
||||
var/type = pickweight(inhalers)
|
||||
var/obj/item/weapon/reagent_containers/inhaler/spawned = new type(L)
|
||||
if(prob(10) || istype(spawned,/obj/item/weapon/reagent_containers/inhaler/space_drugs))
|
||||
spawned.name = "unlabeled inhaler"
|
||||
spawned.desc = "A rapid and safe way to administer small amounts of drugs into the lungs by untrained or trained personnel. This one is unlabeled."
|
||||
number -= 1
|
||||
|
||||
if(prob(33))
|
||||
new /obj/item/device/breath_analyzer(L)
|
||||
|
||||
|
||||
|
||||
|
||||
//Large items go below here
|
||||
//=============================================================
|
||||
//=============================================================
|
||||
|
||||
@@ -51,6 +51,15 @@
|
||||
ties["blue tie"] = /obj/item/clothing/accessory/blue
|
||||
ties["red tie"] = /obj/item/clothing/accessory/red
|
||||
ties["horrible tie"] = /obj/item/clothing/accessory/horrible
|
||||
ties["blue tie with a clip"] = /obj/item/clothing/accessory/tie/blue_clip
|
||||
ties["blue long tie"] = /obj/item/clothing/accessory/tie/blue_long
|
||||
ties["red tie with a clip"] = /obj/item/clothing/accessory/tie/red_clip
|
||||
ties["red long tie"] = /obj/item/clothing/accessory/tie/red_long
|
||||
ties["black tie"] = /obj/item/clothing/accessory/tie/black
|
||||
ties["dark green tie"] = /obj/item/clothing/accessory/tie/darkgreen
|
||||
ties["yellow tie"] = /obj/item/clothing/accessory/tie/yellow
|
||||
ties["navy tie"] = /obj/item/clothing/accessory/tie/navy
|
||||
ties["white tie"] = /obj/item/clothing/accessory/tie/white
|
||||
gear_tweaks += new/datum/gear_tweak/path(ties)
|
||||
|
||||
/datum/gear/accessory/brown_vest
|
||||
@@ -97,6 +106,18 @@
|
||||
display_name = "silver locket"
|
||||
path = /obj/item/clothing/accessory/locket
|
||||
|
||||
/datum/gear/accessory/locket
|
||||
display_name = "silver locket"
|
||||
path = /obj/item/clothing/accessory/locket
|
||||
|
||||
/datum/gear/accessory/sweater
|
||||
display_name = "sweater"
|
||||
path = /obj/item/clothing/accessory/sweater
|
||||
|
||||
/datum/gear/accessory/sweater/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/accessory/scarf
|
||||
display_name = "scarf selection"
|
||||
path = /obj/item/clothing/accessory/scarf
|
||||
|
||||
@@ -94,4 +94,8 @@
|
||||
display_name = "HUDpatch, Welding"
|
||||
path = /obj/item/clothing/glasses/eyepatch/hud/welder
|
||||
allowed_roles = list("Station Engineer","Atmospheric Technician","Chief Engineer","Engineering Apprentice","Research Director","Roboticist")
|
||||
cost = 2
|
||||
cost = 2
|
||||
|
||||
/datum/gear/eyes/spiffygogs
|
||||
display_name = "Orange Goggles"
|
||||
path = /obj/item/clothing/glasses/spiffygogs
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
|
||||
/datum/gear/flask/New()
|
||||
..()
|
||||
gear_tweaks += new/datum/gear_tweak/reagents(lunchables_ethanol_reagents())
|
||||
gear_tweaks += new/datum/gear_tweak/reagents(lunchables_alcohol_reagents())
|
||||
|
||||
/datum/gear/vacflask
|
||||
display_name = "vacuum-flask"
|
||||
|
||||
@@ -173,3 +173,11 @@
|
||||
surgical["surgical cap, green"] = /obj/item/clothing/head/surgery/green
|
||||
surgical["surgical cap, black"] = /obj/item/clothing/head/surgery/black
|
||||
gear_tweaks += new/datum/gear_tweak/path(surgical)
|
||||
|
||||
/datum/gear/head/headbando
|
||||
display_name = "Basic Headband"
|
||||
path = /obj/item/clothing/head/headbando
|
||||
|
||||
/datum/gear/head/headbando/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
@@ -54,4 +54,32 @@
|
||||
shoes["dress flats, blue"] = /obj/item/clothing/shoes/flats/blue
|
||||
shoes["dress flats, green"] = /obj/item/clothing/shoes/flats/green
|
||||
shoes["dress flats, purple"] = /obj/item/clothing/shoes/flats/purple
|
||||
gear_tweaks += new/datum/gear_tweak/path(shoes)
|
||||
gear_tweaks += new/datum/gear_tweak/path(shoes)
|
||||
|
||||
/datum/gear/shoes/cowboy
|
||||
display_name = "cowboy boots selection"
|
||||
path = /obj/item/clothing/shoes/cowboy
|
||||
|
||||
/datum/gear/shoes/cowboy/New()
|
||||
..()
|
||||
var/shoes = list()
|
||||
shoes["cowboy boots"] = /obj/item/clothing/shoes/cowboy
|
||||
shoes["classic cowboy boots"] = /obj/item/clothing/shoes/cowboy/classic
|
||||
shoes["snakeskin cowboy boots"] = /obj/item/clothing/shoes/cowboy/snakeskin
|
||||
gear_tweaks += new/datum/gear_tweak/path(shoes)
|
||||
|
||||
/datum/gear/shoes/heels
|
||||
display_name = "high heels"
|
||||
path = /obj/item/clothing/shoes/heels
|
||||
|
||||
/datum/gear/shoes/heels/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
|
||||
/datum/gear/shoes/tongs
|
||||
display_name = "flip flops"
|
||||
path = /obj/item/clothing/shoes/sandal/flipflop
|
||||
|
||||
/datum/gear/shoes/tongs/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
@@ -25,6 +25,10 @@
|
||||
jackets["flannel jacket, grey"] = /obj/item/clothing/suit/storage/toggle/flannel/gray
|
||||
jackets["flannel jacket, purple"] = /obj/item/clothing/suit/storage/toggle/flannel/purple
|
||||
jackets["flannel jacket, yellow"] = /obj/item/clothing/suit/storage/toggle/flannel/yellow
|
||||
jackets["black vest"] = /obj/item/clothing/suit/storage/toggle/leather_vest
|
||||
jackets["brown vest"] = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless
|
||||
jackets["leather coat"] = /obj/item/clothing/suit/leathercoat
|
||||
|
||||
gear_tweaks += new/datum/gear_tweak/path(jackets)
|
||||
|
||||
/datum/gear/suit/hazard_vest
|
||||
@@ -172,4 +176,18 @@
|
||||
/datum/gear/suit/secjackethos
|
||||
display_name = "navy security jacket (Head of Security)"
|
||||
path = /obj/item/clothing/suit/security/navyhos
|
||||
allowed_roles = list("Head of Security")
|
||||
allowed_roles = list("Head of Security")
|
||||
|
||||
/datum/gear/suit/dominia
|
||||
display_name = "dominia great coat selection"
|
||||
path = /obj/item/clothing/suit/storage/toggle/dominia
|
||||
|
||||
/datum/gear/suit/dominia/New()
|
||||
..()
|
||||
var/coat = list()
|
||||
coat["dominia great coat"] = /obj/item/clothing/suit/storage/toggle/dominia
|
||||
coat["dominia great coat, alternative"] = /obj/item/clothing/suit/storage/toggle/dominia/alt
|
||||
coat["dominia cape"] = /obj/item/clothing/suit/storage/dominia
|
||||
coat["dominia great coat, black"] = /obj/item/clothing/suit/storage/toggle/dominia/black
|
||||
coat["dominia great coat, alternative black"] = /obj/item/clothing/suit/storage/toggle/dominia/black/alt
|
||||
gear_tweaks += new/datum/gear_tweak/path(coat)
|
||||
@@ -40,16 +40,23 @@
|
||||
|
||||
/datum/gear/uniform/skirt
|
||||
display_name = "skirt selection"
|
||||
path = /obj/item/clothing/under/dress/plaid_blue
|
||||
path = /obj/item/clothing/under/skirt/
|
||||
|
||||
/datum/gear/uniform/skirt/New()
|
||||
..()
|
||||
var/skirts = list()
|
||||
skirts["plaid skirt, blue"] = /obj/item/clothing/under/dress/plaid_blue
|
||||
skirts["plaid skirt, purple"] = /obj/item/clothing/under/dress/plaid_purple
|
||||
skirts["plaid skirt, red"] = /obj/item/clothing/under/dress/plaid_red
|
||||
skirts["jumpskirt, black"] = /obj/item/clothing/under/blackjumpskirt
|
||||
skirts["skirt, black"] = /obj/item/clothing/under/blackskirt
|
||||
skirts["plaid skirt, blue"] = /obj/item/clothing/under/skirt/plaid_blue
|
||||
skirts["plaid skirt, purple"] = /obj/item/clothing/under/skirt/plaid_purple
|
||||
skirts["plaid skirt, red"] = /obj/item/clothing/under/skirt/plaid_red
|
||||
skirts["jumpskirt, black"] = /obj/item/clothing/under/skirt/blackjumpskirt
|
||||
skirts["skirt, black"] = /obj/item/clothing/under/skirt/
|
||||
skirts["skirt, khaki"] = /obj/item/clothing/under/skirt/khaki
|
||||
skirts["short skirt, black"] = /obj/item/clothing/under/skirt/short_black
|
||||
skirts["short skirt, blue"] = /obj/item/clothing/under/skirt/blue
|
||||
skirts["short skirt, red"] = /obj/item/clothing/under/skirt/red
|
||||
skirts["skirt, swept"] = /obj/item/clothing/under/skirt/swept
|
||||
|
||||
|
||||
gear_tweaks += new/datum/gear_tweak/path(skirts)
|
||||
|
||||
/datum/gear/uniform/suit
|
||||
@@ -168,17 +175,39 @@
|
||||
pants["khaki pants"] = /obj/item/clothing/under/pants/khaki
|
||||
pants["track pants"] = /obj/item/clothing/under/pants/track
|
||||
pants["camo pants"] = /obj/item/clothing/under/pants/camo
|
||||
pants["athletic shorts, black"] = /obj/item/clothing/under/shorts
|
||||
pants["athletic shorts, red"] = /obj/item/clothing/under/shorts/red
|
||||
pants["athletic shorts, green"] = /obj/item/clothing/under/shorts/green
|
||||
pants["athletic shorts, black"] = /obj/item/clothing/under/shorts/black
|
||||
pants["athletic shorts, grey"] = /obj/item/clothing/under/shorts/grey
|
||||
pants["jean shorts"] = /obj/item/clothing/under/shorts/jeans
|
||||
pants["jean short shorts"] = /obj/item/clothing/under/shorts/jeans/female
|
||||
pants["classic jeans shorts"] = /obj/item/clothing/under/shorts/jeans/classic
|
||||
pants["classic jeans shorts shorts"] = /obj/item/clothing/under/shorts/jeans/classic/female
|
||||
pants["mustang jeans shorts"] = /obj/item/clothing/under/shorts/jeans/mustang
|
||||
pants["mustang jeans shorts shorts"] = /obj/item/clothing/under/shorts/jeans/mustang/female
|
||||
pants["young folks jeans shorts"] = /obj/item/clothing/under/shorts/jeans/youngfolks
|
||||
pants["young folks jeans shorts shorts"] = /obj/item/clothing/under/shorts/jeans/youngfolks/female
|
||||
pants["black jeans shorts"] = /obj/item/clothing/under/shorts/jeans/black
|
||||
pants["black jeans shorts shorts"] = /obj/item/clothing/under/shorts/jeans/black/female
|
||||
pants["grey jeans shorts"] = /obj/item/clothing/under/shorts/jeans/grey
|
||||
pants["grey jeans shorts shorts"] = /obj/item/clothing/under/shorts/jeans
|
||||
pants["khaki shorts"] = /obj/item/clothing/under/shorts/khaki
|
||||
pants["khaki shorts shorts"] = /obj/item/clothing/under/shorts/khaki/female
|
||||
gear_tweaks += new/datum/gear_tweak/path(pants)
|
||||
|
||||
/datum/gear/uniform/turtleneck
|
||||
display_name = "tacticool turtleneck"
|
||||
path = /obj/item/clothing/under/syndicate/tacticool
|
||||
|
||||
/datum/gear/uniform/dominia
|
||||
display_name = "dominia suit selection"
|
||||
path = /obj/item/clothing/under/dominia
|
||||
|
||||
/datum/gear/uniform/sweater
|
||||
display_name = "sweater"
|
||||
path = /obj/item/clothing/under/sweater
|
||||
|
||||
/datum/gear/uniform/sweater/New()
|
||||
/datum/gear/uniform/dominia/New()
|
||||
..()
|
||||
gear_tweaks = list(gear_tweak_free_color_choice)
|
||||
var/suit = list()
|
||||
suit["dominia suit"] = /obj/item/clothing/under/dominia
|
||||
suit["dominia suit, black"] = /obj/item/clothing/under/dominia/black
|
||||
suit["lyodsuit"] = /obj/item/clothing/under/dom_thermal
|
||||
gear_tweaks += new/datum/gear_tweak/path(suit)
|
||||
@@ -140,11 +140,19 @@
|
||||
gear_tweaks += new/datum/gear_tweak/path(taj_gloves)
|
||||
|
||||
/datum/gear/suit/tajara_coat
|
||||
display_name = "tajaran naval coat (Tajara)"
|
||||
display_name = "tajara coat selection (Tajara)"
|
||||
path = /obj/item/clothing/suit/storage/tajaran
|
||||
whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/suit/tajara_coat/New()
|
||||
..()
|
||||
var/coat = list()
|
||||
coat["tajaran naval coat"] = /obj/item/clothing/suit/storage/tajaran
|
||||
coat["commoner cloak"] = /obj/item/clothing/suit/storage/tajaran/cloak
|
||||
coat["royal cloak"] = /obj/item/clothing/suit/storage/tajaran/cloak/fancy
|
||||
gear_tweaks += new/datum/gear_tweak/path(coat)
|
||||
|
||||
/datum/gear/suit/tajaran_labcoat
|
||||
display_name = "PRA medical coat (Tajara)"
|
||||
path = /obj/item/clothing/suit/storage/toggle/labcoat/tajaran
|
||||
@@ -152,6 +160,70 @@
|
||||
allowed_roles = list("Chief Medical Officer", "Medical Doctor", "Chemist", "Geneticist", "Paramedic", "Medical Resident")
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/tajara
|
||||
display_name = "tajaran uniform selection (Tajara)"
|
||||
path = /obj/item/clothing/under/tajaran
|
||||
whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/tajara/New()
|
||||
..()
|
||||
var/uniform = list()
|
||||
uniform["laborers clothes"] = /obj/item/clothing/under/tajaran
|
||||
uniform["fancy uniform"] = /obj/item/clothing/under/tajaran/fancy
|
||||
uniform["NanoTrasen overalls"] = /obj/item/clothing/under/tajaran/nt
|
||||
gear_tweaks += new/datum/gear_tweak/path(uniform)
|
||||
|
||||
/datum/gear/uniform/tajara_dress
|
||||
display_name = "tajaran dress selection (Tajara)"
|
||||
path = /obj/item/clothing/under/dress/tajaran
|
||||
whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/uniform/tajara_dress/New()
|
||||
..()
|
||||
var/dress = list()
|
||||
dress["white fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran
|
||||
dress["blue fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/blue
|
||||
dress["green fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/green
|
||||
dress["red fancy adhomian dress"] = /obj/item/clothing/under/dress/tajaran/red
|
||||
dress["red noble adhomian dress"] = /obj/item/clothing/under/dress/tajaran/fancy
|
||||
dress["black noble adhomian dress"] = /obj/item/clothing/under/dress/tajaran/fancy/black
|
||||
gear_tweaks += new/datum/gear_tweak/path(dress)
|
||||
|
||||
/datum/gear/accessory/tajara
|
||||
display_name = "fur scarf (Tajara)"
|
||||
path = /obj/item/clothing/accessory/tajaran
|
||||
whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/accessory/tajara/New()
|
||||
..()
|
||||
var/scarf = list()
|
||||
scarf["brown fur scarf"] = /obj/item/clothing/accessory/tajaran
|
||||
scarf["light brown fur scarf"] = /obj/item/clothing/accessory/tajaran/lbrown
|
||||
scarf["cinnamon fur scarf"] = /obj/item/clothing/accessory/tajaran/cinnamon
|
||||
scarf["blue fur scarf"] = /obj/item/clothing/accessory/tajaran/blue
|
||||
scarf["silver fur scarf"] = /obj/item/clothing/accessory/tajaran/silver
|
||||
scarf["black fur scarf"] = /obj/item/clothing/accessory/tajaran/black
|
||||
scarf["ruddy fur scarf"] = /obj/item/clothing/accessory/tajaran/ruddy
|
||||
scarf["orange fur scarf"] = /obj/item/clothing/accessory/tajaran/orange
|
||||
scarf["cream fur scarf"] = /obj/item/clothing/accessory/tajaran/cream
|
||||
gear_tweaks += new/datum/gear_tweak/path(scarf)
|
||||
|
||||
/datum/gear/head/tajara
|
||||
display_name = "dress circlet selection (Tajara)"
|
||||
path = /obj/item/clothing/head/tajaran/circlet
|
||||
whitelisted = list("Tajara", "Zhan-Khazan Tajara", "M'sai Tajara")
|
||||
sort_category = "Xenowear"
|
||||
|
||||
/datum/gear/head/tajara/New()
|
||||
..()
|
||||
var/circlet = list()
|
||||
circlet["golden dress circlet"] = /obj/item/clothing/head/tajaran/circlet
|
||||
circlet["silver dress circlet"] = /obj/item/clothing/head/tajaran/circlet/silver
|
||||
gear_tweaks += new/datum/gear_tweak/path(circlet)
|
||||
|
||||
//other things
|
||||
|
||||
/datum/gear/uniform/gearharness
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user