Merge branch 'master' into fuckatmos
This commit is contained in:
@@ -27901,8 +27901,8 @@
|
||||
pixel_x = 30
|
||||
},
|
||||
/obj/machinery/light,
|
||||
/mob/living/simple_animal/bot/cleanbot{
|
||||
name = "C.L.E.A.N."
|
||||
/obj/machinery/computer/crew{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
@@ -31596,7 +31596,7 @@
|
||||
/area/medical/sleeper)
|
||||
"bwC" = (
|
||||
/obj/machinery/computer/med_data{
|
||||
dir = 4
|
||||
dir = 3
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/sleeper)
|
||||
@@ -46022,6 +46022,9 @@
|
||||
},
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/shower{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cek" = (
|
||||
@@ -46030,6 +46033,9 @@
|
||||
name = "engineering security door"
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/machinery/shower{
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"cel" = (
|
||||
@@ -56876,6 +56882,12 @@
|
||||
/obj/item/pen,
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/science/circuit)
|
||||
"ium" = (
|
||||
/mob/living/simple_animal/bot/cleanbot{
|
||||
name = "C.L.E.A.N."
|
||||
},
|
||||
/turf/open/floor/plasteel/white,
|
||||
/area/medical/medbay/central)
|
||||
"izv" = (
|
||||
/obj/machinery/vending/clothing,
|
||||
/obj/machinery/light/small{
|
||||
@@ -94176,7 +94188,7 @@ blm
|
||||
bmL
|
||||
boi
|
||||
bpw
|
||||
bhh
|
||||
ium
|
||||
bsx
|
||||
btX
|
||||
bvj
|
||||
|
||||
@@ -44325,7 +44325,9 @@
|
||||
dir = 1;
|
||||
pixel_y = -22
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/obj/machinery/shower{
|
||||
dir = 4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"bWF" = (
|
||||
@@ -44352,7 +44354,10 @@
|
||||
dir = 6
|
||||
},
|
||||
/obj/effect/turf_decal/delivery,
|
||||
/obj/structure/closet/radiation,
|
||||
/obj/machinery/shower{
|
||||
dir = 8;
|
||||
pixel_y = -4
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/break_room)
|
||||
"bWH" = (
|
||||
@@ -44932,6 +44937,7 @@
|
||||
/obj/effect/turf_decal/stripes/line{
|
||||
dir = 1
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"bYn" = (
|
||||
@@ -44956,6 +44962,7 @@
|
||||
/obj/machinery/light{
|
||||
dir = 4
|
||||
},
|
||||
/obj/structure/closet/radiation,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/engine/engineering)
|
||||
"bYp" = (
|
||||
@@ -53780,7 +53787,7 @@
|
||||
"eSB" = (
|
||||
/obj/machinery/computer/cryopod{
|
||||
dir = 1;
|
||||
pixel_y = -26;
|
||||
pixel_y = -26
|
||||
},
|
||||
/turf/open/floor/plasteel/dark,
|
||||
/area/security/prison)
|
||||
|
||||
@@ -35,3 +35,8 @@
|
||||
|
||||
//Overthrow time to update heads obj
|
||||
#define OBJECTIVE_UPDATING_TIME 300
|
||||
|
||||
//Gangshit
|
||||
#define NOT_DOMINATING -1
|
||||
#define MAX_LEADERS_GANG 3
|
||||
#define INITIAL_DOM_ATTEMPTS 3
|
||||
|
||||
@@ -33,8 +33,8 @@
|
||||
#define BALLS_VOLUME_MULT 1
|
||||
|
||||
#define BALLS_SIZE_MIN 1
|
||||
#define BALLS_SIZE_DEF 3
|
||||
#define BALLS_SIZE_MAX 7
|
||||
#define BALLS_SIZE_DEF 2
|
||||
#define BALLS_SIZE_MAX 3
|
||||
|
||||
#define BALLS_SACK_SIZE_MIN 1
|
||||
#define BALLS_SACK_SIZE_DEF 8
|
||||
|
||||
@@ -142,8 +142,9 @@
|
||||
#define COMSIG_CARBON_SOUNDBANG "carbon_soundbang" //from base of mob/living/carbon/soundbang_act(): (list(intensity))
|
||||
|
||||
// /obj signals
|
||||
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
|
||||
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
|
||||
#define COMSIG_OBJ_DECONSTRUCT "obj_deconstruct" //from base of obj/deconstruct(): (disassembled)
|
||||
#define COMSIG_OBJ_BREAK "obj_break" //from base of /obj/obj_break(): (damage_flag)
|
||||
#define COMSIG_OBJ_SETANCHORED "obj_setanchored" //called in /obj/structure/setAnchored(): (value)
|
||||
|
||||
// /obj/item signals
|
||||
#define COMSIG_ITEM_ATTACK "item_attack" //from base of obj/item/attack(): (/mob/living/target, /mob/living/user)
|
||||
|
||||
@@ -33,7 +33,8 @@
|
||||
#define ROLE_DRONE "drone"
|
||||
#define ROLE_DEATHSQUAD "deathsquad"
|
||||
#define ROLE_LAVALAND "lavaland"
|
||||
#define ROLE_INTERNAL_AFFAIRS "internal affairs agent"
|
||||
#define ROLE_INTERNAL_AFFAIRS "internal affairs agent"
|
||||
#define ROLE_GANG "gangster"
|
||||
|
||||
//Missing assignment means it's not a gamemode specific role, IT'S NOT A BUG OR ERROR.
|
||||
//The gamemode specific ones are just so the gamemodes can query whether a player is old enough
|
||||
@@ -58,7 +59,8 @@ GLOBAL_LIST_INIT(special_roles, list(
|
||||
ROLE_SERVANT_OF_RATVAR = /datum/game_mode/clockwork_cult,
|
||||
ROLE_OVERTHROW = /datum/game_mode/overthrow,
|
||||
ROLE_INTERNAL_AFFAIRS = /datum/game_mode/traitor/internal_affairs,
|
||||
ROLE_SENTIENCE
|
||||
ROLE_SENTIENCE,
|
||||
ROLE_GANG = /datum/game_mode/gang
|
||||
))
|
||||
|
||||
//Job defines for what happens when you fail to qualify for any job during job selection
|
||||
|
||||
@@ -71,6 +71,8 @@
|
||||
#define TRAIT_MUSICIAN "musician"
|
||||
#define TRAIT_CROCRIN_IMMUNE "crocin_immune"
|
||||
#define TRAIT_NYMPHO "nymphomania"
|
||||
#define TRAIT_MASO "masochism"
|
||||
#define TRAIT_ASSBLASTUSA "assblastusa"
|
||||
|
||||
// common trait sources
|
||||
#define TRAIT_GENERIC "generic"
|
||||
|
||||
@@ -58,8 +58,11 @@ GLOBAL_LIST_EMPTY(ipc_antennas_list)
|
||||
//Genitals and Arousal Lists
|
||||
GLOBAL_LIST_EMPTY(cock_shapes_list)//global_lists.dm for the list initializations //Now also _DATASTRUCTURES globals.dm
|
||||
GLOBAL_LIST_EMPTY(cock_shapes_icons) //Associated list for names->icon_states for cockshapes.
|
||||
GLOBAL_LIST_EMPTY(balls_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(balls_shapes_icons)
|
||||
GLOBAL_LIST_EMPTY(breasts_size_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_shapes_list)
|
||||
GLOBAL_LIST_EMPTY(breasts_shapes_icons)
|
||||
GLOBAL_LIST_EMPTY(vagina_shapes_list)
|
||||
GLOBAL_LIST_INIT(cum_into_containers_list, list(/obj/item/reagent_containers/food/snacks/pie)) //Yer fuggin snowflake name list jfc
|
||||
GLOBAL_LIST_INIT(dick_nouns, list("dick","cock","member","shaft"))
|
||||
@@ -123,36 +126,36 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
/mob/living/carbon/proc/has_penis()
|
||||
if(getorganslot("penis"))//slot shared with ovipositor
|
||||
if(istype(getorganslot("penis"), /obj/item/organ/genital/penis))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_balls()
|
||||
if(getorganslot("balls"))
|
||||
if(istype(getorganslot("balls"), /obj/item/organ/genital/testicles))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_vagina()
|
||||
if(getorganslot("vagina"))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_breasts()
|
||||
if(getorganslot("breasts"))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/proc/has_ovipositor()
|
||||
if(getorganslot("penis"))//shared slot
|
||||
if(istype(getorganslot("penis"), /obj/item/organ/genital/ovipositor))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/has_eggsack()
|
||||
if(getorganslot("balls"))
|
||||
if(istype(getorganslot("balls"), /obj/item/organ/genital/eggsack))
|
||||
return 1
|
||||
return 0
|
||||
return TRUE
|
||||
return FALSE
|
||||
|
||||
/mob/living/carbon/human/proc/is_bodypart_exposed(bodypart)
|
||||
|
||||
@@ -161,16 +164,16 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
L = get_equipped_items()
|
||||
for(var/obj/item/I in L)
|
||||
if(I.body_parts_covered & GROIN)
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
/mob/living/carbon/proc/is_chest_exposed(var/list/L)
|
||||
if(!L)
|
||||
L = get_equipped_items()
|
||||
for(var/obj/item/I in L)
|
||||
if(I.body_parts_covered & CHEST)
|
||||
return 0
|
||||
return 1
|
||||
return FALSE
|
||||
return TRUE
|
||||
|
||||
////////////////////////
|
||||
//DANGER | DEBUG PROCS//
|
||||
@@ -191,40 +194,3 @@ GLOBAL_VAR_INIT(miscreants_allowed, FALSE)
|
||||
H.give_vagina()
|
||||
H.give_womb()
|
||||
H.give_breasts()
|
||||
|
||||
/client/proc/test_mammal_overlays()
|
||||
set name = "Mass Give Mammalitus"
|
||||
set category = "Dangerous"
|
||||
set desc = "Turns every human into a mammal with tails, ears, etc. WARNING: NOT FOR LIVE SERVER USAGE!!"
|
||||
|
||||
log_admin("[src] turned everyone into mammals.")
|
||||
message_admins("[src] turned everyone into mammals.")
|
||||
for(var/mob/living/carbon/human/H in GLOB.mob_list)
|
||||
if(!H.dna)
|
||||
continue
|
||||
var/datum/dna/hdna = H.dna
|
||||
H.set_species(/datum/species/mammal)
|
||||
var/subspec = pick("Fox","Wolf","Fennec")
|
||||
switch(subspec)
|
||||
if("Wolf")
|
||||
hdna.features["mam_tail"] = "Wolf"
|
||||
hdna.features["mam_ears"] = "Wolf"
|
||||
hdna.features["mam_snouts"] = "Wolf"
|
||||
hdna.features["mam_body_markings"] = "Wolf"
|
||||
hdna.features["mcolor"] = "555"
|
||||
hdna.features["mcolor2"] = "999"
|
||||
hdna.features["mcolor3"] = "999"
|
||||
if("Fox")
|
||||
hdna.features["mam_tail"] = "Fox"
|
||||
hdna.features["mam_ears"] = "Fox"
|
||||
hdna.features["mam_snouts"] = "Fox, Long"
|
||||
hdna.features["mam_body_markings"] = "Fox"
|
||||
hdna.features["mcolor"] = "f60"
|
||||
hdna.features["mcolor2"] = "fff"
|
||||
hdna.features["mcolor3"] = "fff"
|
||||
if("Fennec")
|
||||
hdna.features["mam_tail"] = "Fennec"
|
||||
hdna.features["mam_ears"] = "Fennec"
|
||||
hdna.features["mam_snouts"] = "Fox, Short"
|
||||
hdna.features["mam_body_markings"] = "Fox"
|
||||
H.regenerate_icons()
|
||||
|
||||
@@ -46,7 +46,6 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/xeno_dorsal, GLOB.xeno_dorsal_list)
|
||||
//genitals
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
|
||||
|
||||
for(var/K in GLOB.cock_shapes_list)
|
||||
var/datum/sprite_accessory/penis/value = GLOB.cock_shapes_list[K]
|
||||
GLOB.cock_shapes_icons[K] = value.icon_state
|
||||
@@ -54,6 +53,14 @@
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/breasts, GLOB.breasts_shapes_list)
|
||||
GLOB.breasts_size_list = list("a","b","c","d","e") //We need the list to choose from initialized, but it's no longer a sprite_accessory thing.
|
||||
for(var/K in GLOB.breasts_shapes_list)
|
||||
var/datum/sprite_accessory/breasts/value = GLOB.breasts_shapes_list[K]
|
||||
GLOB.breasts_shapes_icons[K] = value.icon_state
|
||||
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||
for(var/K in GLOB.balls_shapes_list)
|
||||
var/datum/sprite_accessory/testicles/value = GLOB.balls_shapes_list[K]
|
||||
GLOB.balls_shapes_icons[K] = value.icon_state
|
||||
//END OF CIT CHANGES
|
||||
|
||||
//Species
|
||||
|
||||
@@ -77,6 +77,8 @@
|
||||
//CIT CHANGES - genitals and such
|
||||
if(!GLOB.cock_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/penis, GLOB.cock_shapes_list)
|
||||
if(!GLOB.balls_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/testicles, GLOB.balls_shapes_list)
|
||||
if(!GLOB.vagina_shapes_list.len)
|
||||
init_sprite_accessory_subtypes(/datum/sprite_accessory/vagina, GLOB.vagina_shapes_list)
|
||||
if(!GLOB.breasts_shapes_list.len)
|
||||
@@ -168,6 +170,7 @@
|
||||
"balls_amount" = 2,
|
||||
"balls_sack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"balls_size" = BALLS_SIZE_DEF,
|
||||
"balls_shape" = "Pair",
|
||||
"balls_cum_rate" = CUM_RATE,
|
||||
"balls_cum_mult" = CUM_RATE_MULT,
|
||||
"balls_efficiency" = CUM_EFFICIENCY,
|
||||
@@ -185,7 +188,7 @@
|
||||
"has_breasts" = FALSE,
|
||||
"breasts_color" = pick("FFFFFF","7F7F7F", "7FFF7F", "7F7FFF", "FF7F7F", "7FFFFF", "FF7FFF", "FFFF7F"),
|
||||
"breasts_size" = pick(GLOB.breasts_size_list),
|
||||
"breasts_shape" = pick(GLOB.breasts_shapes_list),
|
||||
"breasts_shape" = "Pair",
|
||||
"breasts_fluid" = "milk",
|
||||
"has_vag" = FALSE,
|
||||
"vag_shape" = pick(GLOB.vagina_shapes_list),
|
||||
@@ -294,7 +297,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
else
|
||||
return "unknown"
|
||||
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null)
|
||||
/proc/do_mob(mob/user , mob/target, time = 30, uninterruptible = 0, progress = 1, datum/callback/extra_checks = null, ignorehelditem = 0)
|
||||
if(!user || !target)
|
||||
return 0
|
||||
var/user_loc = user.loc
|
||||
@@ -327,7 +330,7 @@ GLOBAL_LIST_EMPTY(species_list)
|
||||
drifting = 0
|
||||
user_loc = user.loc
|
||||
|
||||
if((!drifting && user.loc != user_loc) || target.loc != target_loc || user.get_active_held_item() != holding || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
|
||||
if((!drifting && user.loc != user_loc) || target.loc != target_loc || (!ignorehelditem && user.get_active_held_item() != holding) || user.incapacitated() || user.lying || (extra_checks && !extra_checks.Invoke()))
|
||||
. = 0
|
||||
break
|
||||
if (progress)
|
||||
|
||||
@@ -94,6 +94,8 @@
|
||||
// Used to get a properly sanitized multiline input, of max_length
|
||||
/proc/stripped_multiline_input(mob/user, message = "", title = "", default = "", max_length=MAX_MESSAGE_LEN, no_trim=FALSE)
|
||||
var/name = input(user, message, title, default) as message|null
|
||||
if(isnull(name)) // Return null if canceled.
|
||||
return null
|
||||
if(no_trim)
|
||||
return copytext(html_encode(name), 1, max_length)
|
||||
else
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
/datum/component/storage/concrete
|
||||
var/drop_all_on_deconstruct = TRUE
|
||||
var/drop_all_on_destroy = FALSE
|
||||
var/drop_all_on_break = FALSE
|
||||
var/unlock_on_break = FALSE
|
||||
var/transfer_contents_on_component_transfer = FALSE
|
||||
var/list/datum/component/storage/slaves = list()
|
||||
|
||||
@@ -16,6 +18,7 @@
|
||||
. = ..()
|
||||
RegisterSignal(parent, COMSIG_ATOM_CONTENTS_DEL, .proc/on_contents_del)
|
||||
RegisterSignal(parent, COMSIG_OBJ_DECONSTRUCT, .proc/on_deconstruct)
|
||||
RegisterSignal(parent, COMSIG_OBJ_BREAK, .proc/on_break)
|
||||
|
||||
/datum/component/storage/concrete/Destroy()
|
||||
var/atom/real_location = real_location()
|
||||
@@ -100,6 +103,12 @@
|
||||
if(drop_all_on_deconstruct)
|
||||
do_quick_empty()
|
||||
|
||||
/datum/component/storage/concrete/proc/on_break(datum/source, damage_flag)
|
||||
if(drop_all_on_break)
|
||||
do_quick_empty()
|
||||
if(unlock_on_break)
|
||||
set_locked(source, FALSE)
|
||||
|
||||
/datum/component/storage/concrete/can_see_contents()
|
||||
. = ..()
|
||||
for(var/i in slaves)
|
||||
|
||||
@@ -0,0 +1,22 @@
|
||||
/datum/component/storage/concrete/emergency
|
||||
drop_all_on_break = TRUE
|
||||
unlock_on_break = TRUE
|
||||
locked = TRUE
|
||||
|
||||
/datum/component/storage/concrete/emergency/Initialize()
|
||||
. = ..()
|
||||
RegisterSignal(parent, COMSIG_ATOM_EMAG_ACT, .proc/unlock_me)
|
||||
|
||||
/datum/component/storage/concrete/emergency/signal_insertion_attempt(datum/source, obj/item/I, mob/M, silent = FALSE, force = FALSE)
|
||||
if(!silent && istype(I, /obj/item/card/emag))
|
||||
silent = TRUE // suppresses the message
|
||||
return ..()
|
||||
|
||||
/datum/component/storage/concrete/check_locked(datum/source, mob/user, message = FALSE)
|
||||
. = locked && GLOB.security_level < SEC_LEVEL_RED
|
||||
if(message && . && user)
|
||||
to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.")
|
||||
|
||||
/datum/component/storage/concrete/emergency/proc/unlock_me(datum/source)
|
||||
if(locked)
|
||||
set_locked(source, FALSE)
|
||||
@@ -156,8 +156,7 @@
|
||||
next += slave.parent
|
||||
|
||||
/datum/component/storage/proc/attack_self(datum/source, mob/M)
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(source, M, TRUE))
|
||||
return FALSE
|
||||
if((M.get_active_held_item() == parent) && allow_quick_empty)
|
||||
quick_empty(M)
|
||||
@@ -166,8 +165,7 @@
|
||||
if(!isitem(O) || !click_gather || SEND_SIGNAL(O, COMSIG_CONTAINS_STORAGE))
|
||||
return FALSE
|
||||
. = COMPONENT_NO_ATTACK
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(source, M, TRUE))
|
||||
return FALSE
|
||||
var/atom/A = parent
|
||||
var/obj/item/I = O
|
||||
@@ -238,8 +236,7 @@
|
||||
var/atom/A = parent
|
||||
if((!ishuman(M) && (A.loc != M)) || (M.stat != CONSCIOUS) || M.restrained() || !M.canmove)
|
||||
return
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(null, M, TRUE))
|
||||
return FALSE
|
||||
A.add_fingerprint(M)
|
||||
to_chat(M, "<span class='notice'>You start dumping out [parent].</span>")
|
||||
@@ -281,7 +278,7 @@
|
||||
|
||||
/datum/component/storage/proc/set_locked(datum/source, new_state)
|
||||
locked = new_state
|
||||
if(locked)
|
||||
if(check_locked())
|
||||
close_all()
|
||||
|
||||
/datum/component/storage/proc/_process_numerical_display()
|
||||
@@ -456,8 +453,7 @@
|
||||
var/atom/A = parent
|
||||
var/atom/dump_destination = dest_object.get_dumping_location()
|
||||
if(A.Adjacent(M) && dump_destination && M.Adjacent(dump_destination))
|
||||
if(locked)
|
||||
to_chat(M, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(null, M, TRUE))
|
||||
return FALSE
|
||||
if(dump_destination.storage_contents_dump_act(src, M))
|
||||
playsound(A, "rustle", 50, 1, -5)
|
||||
@@ -563,10 +559,9 @@
|
||||
var/atom/host = parent
|
||||
if(real_location == I.loc)
|
||||
return FALSE //Means the item is already in the storage item
|
||||
if(locked)
|
||||
if(check_locked(null, M, !stop_messages))
|
||||
if(M && !stop_messages)
|
||||
host.add_fingerprint(M)
|
||||
to_chat(M, "<span class='warning'>[host] seems to be locked!</span>")
|
||||
return FALSE
|
||||
if(real_location.contents.len >= max_items)
|
||||
if(!stop_messages)
|
||||
@@ -659,8 +654,10 @@
|
||||
/datum/component/storage/proc/on_check()
|
||||
return TRUE
|
||||
|
||||
/datum/component/storage/proc/check_locked()
|
||||
return locked
|
||||
/datum/component/storage/proc/check_locked(datum/source, mob/user, message = FALSE)
|
||||
. = locked
|
||||
if(message && . && user)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
|
||||
/datum/component/storage/proc/signal_take_type(datum/source, type, atom/destination, amount = INFINITY, check_adjacent = FALSE, force = FALSE, mob/user, list/inserted)
|
||||
if(!force)
|
||||
@@ -720,9 +717,7 @@
|
||||
|
||||
if(A.loc == user)
|
||||
. = COMPONENT_NO_ATTACK_HAND
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
else
|
||||
if(!check_locked(source, user, TRUE))
|
||||
show_to(user)
|
||||
A.do_jiggle()
|
||||
|
||||
@@ -747,8 +742,7 @@
|
||||
/datum/component/storage/proc/on_alt_click(datum/source, mob/user)
|
||||
if(!isliving(user) || !user.CanReach(parent))
|
||||
return
|
||||
if(locked)
|
||||
to_chat(user, "<span class='warning'>[parent] seems to be locked!</span>")
|
||||
if(check_locked(source, user, TRUE))
|
||||
return
|
||||
|
||||
var/atom/A = parent
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
/datum/ert/amber
|
||||
code = "Amber"
|
||||
leader_role = /datum/antagonist/ert/commander/red
|
||||
roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red)
|
||||
|
||||
/datum/ert/red
|
||||
leader_role = /datum/antagonist/ert/commander/red
|
||||
|
||||
@@ -93,3 +93,12 @@
|
||||
gain_text = "<span class='notice'>You feel more prudish.</span>"
|
||||
lose_text = "<span class='notice'>You don't feel as prudish as before.</span>"
|
||||
medical_record_text = "Patient exhibits a special gene that makes them immune to Crocin and Hexacrocin."
|
||||
|
||||
/datum/quirk/assblastusa
|
||||
name = "Buns of Steel"
|
||||
desc = "You've never skipped ass day. With this trait, you are completely immune to all forms of ass slapping and anyone who tries to slap your rock hard ass usually gets a broken hand."
|
||||
mob_trait = TRAIT_ASSBLASTUSA
|
||||
value = 0
|
||||
medical_record_text = "Patient never skipped ass day."
|
||||
gain_text = "<span class='notice'>Your ass rivals those of golems.</span>"
|
||||
lose_text = "<span class='notice'>Your butt feels more squishy and slappable.</span>"
|
||||
@@ -80,9 +80,21 @@
|
||||
|
||||
/obj/machinery/computer/atmos_alert/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
|
||||
var/overlay_state = icon_screen
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
add_overlay("[icon_keyboard]_off")
|
||||
return
|
||||
add_overlay(icon_keyboard)
|
||||
if(priority_alarms.len)
|
||||
overlay_state = "alert:2"
|
||||
add_overlay("alert:2")
|
||||
else if(minor_alarms.len)
|
||||
overlay_state = "alert:1"
|
||||
add_overlay("alert:1")
|
||||
else
|
||||
overlay_state = "alert:0"
|
||||
add_overlay("alert:0")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir)
|
||||
SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128)
|
||||
|
||||
@@ -103,7 +103,9 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
if(data_by_z["[z]"] && last_update["[z]"] && world.time <= last_update["[z]"] + SENSORS_UPDATE_PERIOD)
|
||||
return data_by_z["[z]"]
|
||||
|
||||
var/list/results = list()
|
||||
var/list/results_damaged = list()
|
||||
var/list/results_undamaged = list()
|
||||
|
||||
var/obj/item/clothing/under/U
|
||||
var/obj/item/card/id/I
|
||||
var/turf/pos
|
||||
@@ -114,6 +116,7 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
var/toxdam
|
||||
var/burndam
|
||||
var/brutedam
|
||||
var/totaldam
|
||||
var/area
|
||||
var/pos_x
|
||||
var/pos_y
|
||||
@@ -157,11 +160,13 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
toxdam = round(H.getToxLoss(),1)
|
||||
burndam = round(H.getFireLoss(),1)
|
||||
brutedam = round(H.getBruteLoss(),1)
|
||||
totaldam = oxydam + toxdam + burndam + brutedam
|
||||
else
|
||||
oxydam = null
|
||||
toxdam = null
|
||||
burndam = null
|
||||
brutedam = null
|
||||
totaldam = 0
|
||||
|
||||
if (nanite_sensors || U.sensor_mode >= SENSOR_COORDS)
|
||||
if (!pos)
|
||||
@@ -174,16 +179,26 @@ GLOBAL_DATUM_INIT(crewmonitor, /datum/crewmonitor, new)
|
||||
pos_x = null
|
||||
pos_y = null
|
||||
|
||||
results[++results.len] = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
|
||||
var/total_list = list("name" = name, "assignment" = assignment, "ijob" = ijob, "life_status" = life_status, "oxydam" = oxydam, "toxdam" = toxdam, "burndam" = burndam, "brutedam" = brutedam, "totaldam" = totaldam, "area" = area, "pos_x" = pos_x, "pos_y" = pos_y, "can_track" = H.can_track(null))
|
||||
|
||||
data_by_z["[z]"] = sortTim(results,/proc/sensor_compare)
|
||||
if(totaldam)
|
||||
results_damaged[++results_damaged.len] = total_list
|
||||
else
|
||||
results_undamaged[++results_undamaged.len] = total_list
|
||||
|
||||
var/list/returning = sortTim(results_damaged,/proc/damage_compare) + sortTim(results_undamaged,/proc/ijob_compare)
|
||||
|
||||
data_by_z["[z]"] = returning
|
||||
last_update["[z]"] = world.time
|
||||
|
||||
return results
|
||||
return returning
|
||||
|
||||
/proc/sensor_compare(list/a,list/b)
|
||||
/proc/ijob_compare(list/a,list/b)
|
||||
return a["ijob"] - b["ijob"]
|
||||
|
||||
/proc/damage_compare(list/a,list/b)
|
||||
return b["totaldam"] - a["totaldam"]
|
||||
|
||||
/datum/crewmonitor/ui_act(action,params)
|
||||
var/mob/living/silicon/ai/AI = usr
|
||||
if(!istype(AI))
|
||||
|
||||
@@ -76,12 +76,23 @@
|
||||
|
||||
/obj/machinery/computer/station_alert/update_icon()
|
||||
..()
|
||||
cut_overlays()
|
||||
SSvis_overlays.remove_vis_overlay(src, managed_vis_overlays)
|
||||
var/overlay_state = icon_screen
|
||||
if(stat & (NOPOWER|BROKEN))
|
||||
add_overlay("[icon_keyboard]_off")
|
||||
return
|
||||
add_overlay(icon_keyboard)
|
||||
var/active_alarms = FALSE
|
||||
for(var/cat in alarms)
|
||||
var/list/L = alarms[cat]
|
||||
if(L.len)
|
||||
active_alarms = TRUE
|
||||
if(active_alarms)
|
||||
overlay_state = "alert:2"
|
||||
add_overlay("alert:2")
|
||||
else
|
||||
overlay_state = "alert:0"
|
||||
add_overlay("alert:0")
|
||||
SSvis_overlays.add_vis_overlay(src, icon, overlay_state, layer, plane, dir)
|
||||
SSvis_overlays.add_vis_overlay(src, icon, overlay_state, ABOVE_LIGHTING_LAYER, ABOVE_LIGHTING_PLANE, dir, alpha=128)
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
desc = "Graffiti. Damn kids."
|
||||
icon = 'icons/effects/crayondecal.dmi'
|
||||
icon_state = "rune1"
|
||||
plane = GAME_PLANE //makes the graffiti visible over a wall.
|
||||
gender = NEUTER
|
||||
mergeable_decal = FALSE
|
||||
var/do_icon_rotate = TRUE
|
||||
|
||||
@@ -449,7 +449,11 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
|
||||
return 0
|
||||
|
||||
/obj/item/proc/eyestab(mob/living/carbon/M, mob/living/carbon/user)
|
||||
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm [M]!</span>")
|
||||
return
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
M = user
|
||||
var/is_human_victim = 0
|
||||
var/obj/item/bodypart/affecting = M.get_bodypart(BODY_ZONE_HEAD)
|
||||
if(ishuman(M))
|
||||
|
||||
@@ -105,7 +105,7 @@
|
||||
|
||||
if(isturf(A))
|
||||
return
|
||||
if(istype(A,/obj/item/storage/lockbox))
|
||||
if(istype(A,/obj/item/storage/lockbox) || istype(A, /obj/item/storage/pod))
|
||||
A.emag_act(user)
|
||||
uses = max(uses - 1, 0)
|
||||
if(!uses)
|
||||
|
||||
@@ -68,6 +68,8 @@
|
||||
var/pre_noise = FALSE
|
||||
var/post_noise = FALSE
|
||||
|
||||
var/datum/team/gang/gang //For marking territory.
|
||||
var/gang_tag_delay = 30 //this is the delay for gang mode tag applications on anything that gang = true on.
|
||||
|
||||
/obj/item/toy/crayon/suicide_act(mob/user)
|
||||
user.visible_message("<span class='suicide'>[user] is jamming [src] up [user.p_their()] nose and into [user.p_their()] brain. It looks like [user.p_theyre()] trying to commit suicide!</span>")
|
||||
@@ -288,6 +290,13 @@
|
||||
else if(drawing in numerals)
|
||||
temp = "number"
|
||||
|
||||
// If a gang member is using a gang spraycan, it'll behave differently
|
||||
var/gang_mode = FALSE
|
||||
if(gang && user.mind && user.mind.has_antag_datum(/datum/antagonist/gang)) //Heres a check.
|
||||
gang_mode = TRUE // No more runtimes if a non-gang member sprays a gang can, it just works like normal cans.
|
||||
// discontinue if the area isn't valid for tagging because gang "honour"
|
||||
if(gang_mode && (!can_claim_for_gang(user, target)))
|
||||
return
|
||||
|
||||
var/graf_rot
|
||||
if(drawing in oriented)
|
||||
@@ -310,20 +319,22 @@
|
||||
clicky = CLAMP(text2num(click_params["icon-y"]) - 16, -(world.icon_size/2), world.icon_size/2)
|
||||
|
||||
if(!instant)
|
||||
to_chat(user, "<span class='notice'>You start drawing a [temp] on the [target.name]...</span>")
|
||||
to_chat(user, "<span class='notice'>You start drawing a [temp] on the [target.name]...</span>")
|
||||
|
||||
if(pre_noise)
|
||||
audible_message("<span class='notice'>You hear spraying.</span>")
|
||||
playsound(user.loc, 'sound/effects/spray.ogg', 5, 1, 5)
|
||||
|
||||
var/takes_time = !instant
|
||||
var/takes_time = !instant //For order purposes, since I'm maximum bad.
|
||||
if(gang_mode)
|
||||
takes_time = TRUE
|
||||
|
||||
var/wait_time = 50
|
||||
if(paint_mode == PAINT_LARGE_HORIZONTAL)
|
||||
wait_time *= 3
|
||||
|
||||
if(takes_time)
|
||||
if(!do_after(user, 50, target = target))
|
||||
if(takes_time) //This is what deteremines the time it takes to spray a tag in gang mode. 50 is Default.
|
||||
if(!do_after(user, gang_tag_delay, target = target)) //25 is a good number, but we have gang_tag_delay var now.
|
||||
return
|
||||
|
||||
if(length(text_buffer))
|
||||
@@ -332,26 +343,34 @@
|
||||
|
||||
var/list/turf/affected_turfs = list()
|
||||
|
||||
|
||||
if(actually_paints)
|
||||
switch(paint_mode)
|
||||
if(PAINT_NORMAL)
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot)
|
||||
C.add_hiddenprint(user)
|
||||
C.pixel_x = clickx
|
||||
C.pixel_y = clicky
|
||||
affected_turfs += target
|
||||
if(PAINT_LARGE_HORIZONTAL)
|
||||
var/turf/left = locate(target.x-1,target.y,target.z)
|
||||
var/turf/right = locate(target.x+1,target.y,target.z)
|
||||
if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
|
||||
if(gang_mode)
|
||||
// Double check it wasn't tagged in the meanwhile.
|
||||
if(!can_claim_for_gang(user, target))
|
||||
return
|
||||
tag_for_gang(user, target)
|
||||
affected_turfs += target
|
||||
else
|
||||
switch(paint_mode)
|
||||
if(PAINT_NORMAL)
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(target, paint_color, drawing, temp, graf_rot)
|
||||
C.add_hiddenprint(user)
|
||||
affected_turfs += left
|
||||
affected_turfs += right
|
||||
C.pixel_x = clickx
|
||||
C.pixel_y = clicky
|
||||
affected_turfs += target
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There isn't enough space to paint!</span>")
|
||||
return
|
||||
if(PAINT_LARGE_HORIZONTAL)
|
||||
var/turf/left = locate(target.x-1,target.y,target.z)
|
||||
var/turf/right = locate(target.x+1,target.y,target.z)
|
||||
if(is_type_in_list(left, validSurfaces) && is_type_in_list(right, validSurfaces))
|
||||
var/obj/effect/decal/cleanable/crayon/C = new(left, paint_color, drawing, temp, graf_rot, PAINT_LARGE_HORIZONTAL_ICON)
|
||||
C.add_hiddenprint(user)
|
||||
affected_turfs += left
|
||||
affected_turfs += right
|
||||
affected_turfs += target
|
||||
else
|
||||
to_chat(user, "<span class='warning'>There isn't enough space to paint!</span>")
|
||||
return
|
||||
|
||||
if(!instant)
|
||||
to_chat(user, "<span class='notice'>You finish drawing \the [temp].</span>")
|
||||
@@ -373,6 +392,52 @@
|
||||
reagents.trans_to(t, ., volume_multiplier)
|
||||
check_empty(user)
|
||||
|
||||
|
||||
//////////////Gang mode stuff/////////////////
|
||||
/obj/item/toy/crayon/proc/can_claim_for_gang(mob/user, atom/target)
|
||||
// Check area validity.
|
||||
// Reject space, player-created areas, and non-station z-levels.
|
||||
var/area/A = get_area(target)
|
||||
if(!A || (!is_station_level(A.z)) || !A.valid_territory)
|
||||
to_chat(user, "<span class='warning'>[A] is unsuitable for tagging.</span>")
|
||||
return FALSE
|
||||
|
||||
var/spraying_over = FALSE
|
||||
for(var/G in target)
|
||||
var/obj/effect/decal/cleanable/crayon/gang/gangtag = G
|
||||
if(istype(gangtag))
|
||||
var/datum/antagonist/gang/GA = user.mind.has_antag_datum(/datum/antagonist/gang)
|
||||
if(gangtag.gang != GA.gang)
|
||||
spraying_over = TRUE
|
||||
break
|
||||
|
||||
var/occupying_gang = territory_claimed(A, user)
|
||||
if(occupying_gang && !spraying_over)
|
||||
to_chat(user, "<span class='danger'>[A] has already been tagged by the [occupying_gang] gang! You must get rid of or spray over the old tag first!</span>")
|
||||
return FALSE
|
||||
|
||||
// If you pass the gauntlet of checks, you're good to proceed
|
||||
return TRUE
|
||||
|
||||
/obj/item/toy/crayon/proc/territory_claimed(area/territory, mob/user)
|
||||
for(var/datum/team/gang/G in GLOB.gangs)
|
||||
if(territory.type in (G.territories|G.new_territories))
|
||||
. = G.name
|
||||
break
|
||||
|
||||
/obj/item/toy/crayon/proc/tag_for_gang(mob/user, atom/target)
|
||||
//Delete any old markings on this tile, including other gang tags
|
||||
for(var/obj/effect/decal/cleanable/crayon/old_marking in target)
|
||||
qdel(old_marking)
|
||||
|
||||
var/datum/antagonist/gang/G = user.mind.has_antag_datum(/datum/antagonist/gang)
|
||||
var/area/territory = get_area(target)
|
||||
|
||||
new /obj/effect/decal/cleanable/crayon/gang(target,G.gang,"graffiti",0,user) // Heres the gang tag.
|
||||
to_chat(user, "<span class='notice'>You tagged [territory] for your gang!</span>")
|
||||
/////////////////Gang end////////////////////
|
||||
|
||||
|
||||
/obj/item/toy/crayon/attack(mob/M, mob/user)
|
||||
if(edible && (M == user))
|
||||
to_chat(user, "You take a bite of the [src.name]. Delicious!")
|
||||
@@ -524,6 +589,7 @@
|
||||
is_capped = TRUE
|
||||
self_contained = FALSE // Don't disappear when they're empty
|
||||
can_change_colour = TRUE
|
||||
gang = TRUE //Gang check is true for all things upon the honored hierarchy of spraycans, except those that are FALSE.
|
||||
|
||||
validSurfaces = list(/turf/open/floor, /turf/closed/wall)
|
||||
reagent_contents = list("welding_fuel" = 1, "ethanol" = 1)
|
||||
@@ -669,6 +735,7 @@
|
||||
icon_capped = "deathcan2_cap"
|
||||
icon_uncapped = "deathcan2"
|
||||
use_overlays = FALSE
|
||||
gang = FALSE
|
||||
|
||||
volume_multiplier = 25
|
||||
charges = 100
|
||||
@@ -683,6 +750,7 @@
|
||||
icon_capped = "clowncan2_cap"
|
||||
icon_uncapped = "clowncan2"
|
||||
use_overlays = FALSE
|
||||
gang = FALSE
|
||||
|
||||
reagent_contents = list("lube" = 1, "banana" = 1)
|
||||
volume_multiplier = 5
|
||||
@@ -695,6 +763,7 @@
|
||||
icon_capped = "mimecan_cap"
|
||||
icon_uncapped = "mimecan"
|
||||
use_overlays = FALSE
|
||||
gang = FALSE
|
||||
|
||||
can_change_colour = FALSE
|
||||
paint_color = "#FFFFFF" //RGB
|
||||
@@ -703,6 +772,26 @@
|
||||
post_noise = FALSE
|
||||
reagent_contents = list("nothing" = 1, "mutetoxin" = 1)
|
||||
|
||||
/obj/item/toy/crayon/spraycan/gang
|
||||
charges = 20 // Charges back to 20, which is the default value for them.
|
||||
gang = TRUE
|
||||
gang_tag_delay = 15 //Its 50% faster than a regular spraycan, for tagging. After-all they did spend points/meet the boss.
|
||||
|
||||
pre_noise = FALSE
|
||||
post_noise = TRUE // Its even more stealthy just a tad.
|
||||
|
||||
/obj/item/toy/crayon/spraycan/gang/Initialize(loc, datum/team/gang/G)
|
||||
..()
|
||||
if(G)
|
||||
gang = G
|
||||
paint_color = G.color
|
||||
update_icon()
|
||||
|
||||
/obj/item/toy/crayon/spraycan/gang/examine(mob/user)
|
||||
. = ..()
|
||||
if(user.mind && user.mind.has_antag_datum(/datum/antagonist/gang) || isobserver(user))
|
||||
to_chat(user, "This spraycan has been specially modified with a stage 2 nozzle kit, making it faster.")
|
||||
|
||||
#undef RANDOM_GRAFFITI
|
||||
#undef RANDOM_LETTER
|
||||
#undef RANDOM_NUMBER
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
if(target.mind.has_antag_datum(/datum/antagonist/brainwashed))
|
||||
target.mind.remove_antag_datum(/datum/antagonist/brainwashed)
|
||||
|
||||
if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable)
|
||||
if(target.mind.has_antag_datum(/datum/antagonist/rev/head) || target.mind.unconvertable || target.mind.has_antag_datum(/datum/antagonist/gang/boss))
|
||||
if(!silent)
|
||||
target.visible_message("<span class='warning'>[target] seems to resist the implant!</span>", "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
var/obj/item/implanter/I = loc
|
||||
@@ -38,9 +38,12 @@
|
||||
I.update_icon()
|
||||
return FALSE
|
||||
|
||||
var/datum/antagonist/gang/gang = target.mind.has_antag_datum(/datum/antagonist/gang)
|
||||
var/datum/antagonist/rev/rev = target.mind.has_antag_datum(/datum/antagonist/rev)
|
||||
if(rev)
|
||||
rev.remove_revolutionary(FALSE, user)
|
||||
if(gang)
|
||||
target.mind.remove_antag_datum(/datum/antagonist/gang)
|
||||
if(!silent)
|
||||
if(target.mind in SSticker.mode.cult)
|
||||
to_chat(target, "<span class='warning'>You feel something interfering with your mental conditioning, but you resist it!</span>")
|
||||
|
||||
@@ -49,8 +49,6 @@
|
||||
forkload = null
|
||||
|
||||
else if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
else
|
||||
return ..()
|
||||
@@ -79,8 +77,6 @@
|
||||
|
||||
/obj/item/kitchen/knife/attack(mob/living/carbon/M, mob/living/carbon/user)
|
||||
if(user.zone_selected == BODY_ZONE_PRECISE_EYES)
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
else
|
||||
return ..()
|
||||
|
||||
@@ -283,7 +283,7 @@
|
||||
else
|
||||
var/turf/T = get_turf(src)
|
||||
if(!isspaceturf(T))
|
||||
consume_turf(T)
|
||||
shard.consume_turf(T)
|
||||
|
||||
/obj/item/melee/supermatter_sword/afterattack(target, mob/user, proximity_flag)
|
||||
. = ..()
|
||||
@@ -330,18 +330,7 @@
|
||||
else if(!isturf(target))
|
||||
shard.Bumped(target)
|
||||
else
|
||||
consume_turf(target)
|
||||
|
||||
/obj/item/melee/supermatter_sword/proc/consume_turf(turf/T)
|
||||
var/oldtype = T.type
|
||||
var/turf/newT = T.ScrapeAway()
|
||||
if(newT.type == oldtype)
|
||||
return
|
||||
playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
|
||||
T.visible_message("<span class='danger'>[T] smacks into [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
shard.Consume()
|
||||
T.CalculateAdjacentTurfs()
|
||||
shard.consume_turf(target)
|
||||
|
||||
/obj/item/melee/supermatter_sword/add_blood_DNA(list/blood_dna)
|
||||
return FALSE
|
||||
|
||||
@@ -635,6 +635,13 @@
|
||||
attack_verb = list("lit", "flickered", "flashed")
|
||||
squeak_override = list('sound/weapons/magout.ogg' = 1)
|
||||
|
||||
/obj/item/toy/plush/box
|
||||
name = "cardboard plushie"
|
||||
desc = "A toy box plushie, it holds cotten. Only a baddie would place a bomb through the postal system..."
|
||||
icon_state = "box"
|
||||
item_state = "box"
|
||||
attack_verb = list("open", "closed", "packed", "hidden", "rigged", "bombed", "sent", "gave")
|
||||
|
||||
/obj/item/toy/plush/borgplushie
|
||||
name = "robot plushie"
|
||||
desc = "An adorable stuffed toy of a robot."
|
||||
@@ -659,6 +666,12 @@
|
||||
icon_state = "neeb"
|
||||
item_state = "neeb"
|
||||
|
||||
/obj/item/toy/plush/borgplushie/bhijn
|
||||
desc = "An adorable stuffed toy of a IPC."
|
||||
icon_state = "bhijn"
|
||||
item_state = "bhijn"
|
||||
attack_verb = list("closed", "reworked", "merged")
|
||||
|
||||
/obj/item/toy/plush/bird
|
||||
name = "bird plushie"
|
||||
desc = "An adorable stuffed plushie that resembles an avian."
|
||||
@@ -743,6 +756,7 @@
|
||||
/obj/item/toy/plush/mammal/edgar
|
||||
icon_state = "edgar"
|
||||
item_state = "edgar"
|
||||
attack_verb = list("collared", "tricked", "headpatted")
|
||||
|
||||
/obj/item/toy/plush/mammal/frank
|
||||
icon_state = "frank"
|
||||
@@ -777,6 +791,16 @@
|
||||
icon_state = "zed"
|
||||
item_state = "zed"
|
||||
|
||||
/obj/item/toy/plush/mammal/justin
|
||||
icon_state = "justin"
|
||||
item_state = "justin"
|
||||
attack_verb = list("buttslapped", "fixed")
|
||||
|
||||
/obj/item/toy/plush/mammal/reece
|
||||
icon_state = "reece"
|
||||
item_state = "reece"
|
||||
attack_verb = list("healed", "cured", "demoted")
|
||||
|
||||
/obj/item/toy/plush/mammal/dog
|
||||
desc = "An adorable stuffed toy that resembles a canine."
|
||||
icon_state = "katlin"
|
||||
@@ -840,6 +864,12 @@
|
||||
icon_state = "drew"
|
||||
item_state = "drew"
|
||||
|
||||
/obj/item/toy/plush/catgirl/trilby
|
||||
desc = "A masked stuffed toy that resembles a feline scientist."
|
||||
icon_state = "trilby"
|
||||
item_state = "trilby"
|
||||
attack_verb = list("pred", "coded", "remembered")
|
||||
|
||||
/obj/item/toy/plush/catgirl/fermis
|
||||
name = "medcat plushie"
|
||||
desc = "An affectionate stuffed toy that resembles a certain medcat, comes complete with battery operated wagging tail!! You get the impression she's cheering you on to to find happiness and be kind to people."
|
||||
|
||||
@@ -153,3 +153,16 @@
|
||||
slot_flags = null
|
||||
to_chat(user, "<span class='notice'>[src] can now be concealed.</span>")
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/shield/makeshift
|
||||
name = "metal shield"
|
||||
desc = "A large shield made of wired and welded sheets of metal. The handle is made of cloth and leather making it unwieldy."
|
||||
armor = list("melee" = 25, "bullet" = 25, "laser" = 5, "energy" = 0, "bomb" = 30, "bio" = 0, "rad" = 0, "fire" = 70, "acid" = 80)
|
||||
lefthand_file = 'icons/mob/inhands/equipment/shields_lefthand.dmi'
|
||||
righthand_file = 'icons/mob/inhands/equipment/shields_righthand.dmi'
|
||||
item_state = "makeshift_shield"
|
||||
materials = list(MAT_METAL = 18000)
|
||||
slot_flags = null
|
||||
block_chance = 25
|
||||
force = 5
|
||||
throwforce = 7
|
||||
|
||||
@@ -252,7 +252,8 @@ GLOBAL_LIST_INIT(cloth_recipes, list ( \
|
||||
new/datum/stack_recipe("bedsheet", /obj/item/bedsheet, 3), \
|
||||
new/datum/stack_recipe("empty sandbag", /obj/item/emptysandbag, 4), \
|
||||
null, \
|
||||
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1), \
|
||||
new/datum/stack_recipe("fingerless gloves", /obj/item/clothing/gloves/fingerless, 1),\
|
||||
new/datum/stack_recipe("white gloves", /obj/item/clothing/gloves/color/white, 1),\
|
||||
new/datum/stack_recipe("black gloves", /obj/item/clothing/gloves/color/black, 3), \
|
||||
null, \
|
||||
new/datum/stack_recipe("blindfold", /obj/item/clothing/glasses/sunglasses/blindfold, 2), \
|
||||
@@ -284,6 +285,13 @@ GLOBAL_LIST_INIT(cardboard_recipes, list ( \
|
||||
new/datum/stack_recipe("light tubes", /obj/item/storage/box/lights/tubes), \
|
||||
new/datum/stack_recipe("light bulbs", /obj/item/storage/box/lights/bulbs), \
|
||||
new/datum/stack_recipe("mouse traps", /obj/item/storage/box/mousetraps), \
|
||||
new/datum/stack_recipe("lethal ammo box", /obj/item/storage/box/lethalshot), \
|
||||
new/datum/stack_recipe("rubber shot ammo box", /obj/item/storage/box/rubbershot), \
|
||||
new/datum/stack_recipe("bean bag ammo box", /obj/item/storage/box/beanbag), \
|
||||
new/datum/stack_recipe("12g ammo box", /obj/item/storage/box/lethalslugs), \
|
||||
new/datum/stack_recipe("stun slug ammo box", /obj/item/storage/box/stunslug), \
|
||||
new/datum/stack_recipe("tech shell ammo box", /obj/item/storage/box/techsslug), \
|
||||
new/datum/stack_recipe("incendiary ammo box", /obj/item/storage/box/fireshot), \
|
||||
new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3), \
|
||||
new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg), \
|
||||
new/datum/stack_recipe("pizza box", /obj/item/pizzabox), \
|
||||
|
||||
@@ -14,8 +14,9 @@
|
||||
* ID and security PDA cart boxes,
|
||||
* Handcuff, mousetrap, and pillbottle boxes,
|
||||
* Snap-pops and matchboxes,
|
||||
* Replacement light boxes.
|
||||
* Action Figure Boxes
|
||||
* Replacement light boxes,
|
||||
* Shotgun Ammo boxes,
|
||||
* Action Figure Boxes,
|
||||
* Various paper bags.
|
||||
*
|
||||
* For syndicate call-ins see uplink_kits.dm
|
||||
@@ -84,7 +85,6 @@
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/disk/data(src)
|
||||
|
||||
|
||||
/obj/item/storage/box/disks_plantgene
|
||||
name = "plant data disks box"
|
||||
illustration = "disk_kit"
|
||||
@@ -117,7 +117,6 @@
|
||||
new /obj/item/crowbar/red(src)
|
||||
new /obj/item/reagent_containers/hypospray/medipen(src)
|
||||
|
||||
|
||||
// Engineer survival box
|
||||
/obj/item/storage/box/engineer/PopulateContents()
|
||||
new /obj/item/clothing/mask/breath(src)
|
||||
@@ -261,7 +260,6 @@
|
||||
new /obj/item/assembly/flash/handheld(src)
|
||||
new /obj/item/screwdriver(src)
|
||||
|
||||
|
||||
/obj/item/storage/box/teargas
|
||||
name = "box of tear gas grenades (WARNING)"
|
||||
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness and skin irritation.</B>"
|
||||
@@ -615,7 +613,6 @@
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/light/bulb(src)
|
||||
|
||||
|
||||
/obj/item/storage/box/deputy
|
||||
name = "box of deputy armbands"
|
||||
desc = "To be issued to those authorized to act as deputy of security."
|
||||
@@ -721,6 +718,46 @@
|
||||
for(var/i in 1 to 6)
|
||||
new /obj/item/ammo_casing/shotgun/beanbag(src)
|
||||
|
||||
/obj/item/storage/box/lethalslugs
|
||||
name = "box of 12g shotgun slugs"
|
||||
desc = "A box full of lethal 12g slug, designed for riot shotguns."
|
||||
icon_state = "12g_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/lethalslugs/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/projectile/bullet/shotgun_slug(src)
|
||||
|
||||
/obj/item/storage/box/stunslug
|
||||
name = "box of stun slugs"
|
||||
desc = "A box full of stun 12g slugs."
|
||||
icon_state = "stunslug_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/stunslug/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/projectile/bullet/shotgun_stunslug(src)
|
||||
|
||||
/obj/item/storage/box/techsslug
|
||||
name = "box of tech shotgun shells"
|
||||
desc = "A box full of tech shotgun shells."
|
||||
icon_state = "techslug_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/techsslug/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/techshell(src)
|
||||
|
||||
/obj/item/storage/box/fireshot
|
||||
name = "box of incendiary ammo"
|
||||
desc = "A box full of tech incendiary ammo."
|
||||
icon_state = "fireshot_box"
|
||||
illustration = null
|
||||
|
||||
/obj/item/storage/box/techsslug/PopulateContents()
|
||||
for(var/i in 1 to 7)
|
||||
new /obj/item/ammo_casing/shotgun/incendiary(src)
|
||||
|
||||
/obj/item/storage/box/actionfigure
|
||||
name = "box of action figures"
|
||||
desc = "The latest set of collectable action figures."
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
#define STUNBATON_CHARGE_LENIENCY 0.3
|
||||
|
||||
/obj/item/melee/baton
|
||||
name = "stunbaton"
|
||||
desc = "A stun baton for incapacitating people with."
|
||||
@@ -13,7 +15,7 @@
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 50, "bio" = 0, "rad" = 0, "fire" = 80, "acid" = 80)
|
||||
|
||||
var/stunforce = 140
|
||||
var/status = 0
|
||||
var/status = FALSE
|
||||
var/obj/item/stock_parts/cell/cell
|
||||
var/hitcost = 1000
|
||||
var/throw_hit_chance = 35
|
||||
@@ -44,17 +46,30 @@
|
||||
/obj/item/melee/baton/loaded //this one starts with a cell pre-installed.
|
||||
preload_cell_type = /obj/item/stock_parts/cell/high
|
||||
|
||||
/obj/item/melee/baton/proc/deductcharge(chrgdeductamt)
|
||||
if(cell)
|
||||
//Note this value returned is significant, as it will determine
|
||||
//if a stun is applied or not
|
||||
. = cell.use(chrgdeductamt)
|
||||
if(status && cell.charge < hitcost)
|
||||
//we're below minimum, turn off
|
||||
status = 0
|
||||
update_icon()
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
/obj/item/melee/baton/proc/deductcharge(chrgdeductamt, chargecheck = TRUE)
|
||||
if(!cell)
|
||||
switch_status(FALSE, TRUE)
|
||||
return FALSE
|
||||
//Note this value returned is significant, as it will determine
|
||||
//if a stun is applied or not
|
||||
. = cell.use(chrgdeductamt)
|
||||
if(status && (!. || (chargecheck && cell.charge < hitcost * STUNBATON_CHARGE_LENIENCY)))
|
||||
//we're below minimum, turn off
|
||||
switch_status(FALSE)
|
||||
|
||||
/obj/item/melee/baton/proc/switch_status(new_status = FALSE, silent = FALSE)
|
||||
if(status != new_status)
|
||||
status = new_status
|
||||
if(!silent)
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
if(status)
|
||||
START_PROCESSING(SSobj, src)
|
||||
else
|
||||
STOP_PROCESSING(SSobj, src)
|
||||
update_icon()
|
||||
|
||||
/obj/item/melee/baton/process()
|
||||
deductcharge(hitcost * 0.004, FALSE)
|
||||
|
||||
/obj/item/melee/baton/update_icon()
|
||||
if(status)
|
||||
@@ -77,7 +92,7 @@
|
||||
if(cell)
|
||||
to_chat(user, "<span class='notice'>[src] already has a cell.</span>")
|
||||
else
|
||||
if(C.maxcharge < hitcost)
|
||||
if(C.maxcharge < hitcost * STUNBATON_CHARGE_LENIENCY)
|
||||
to_chat(user, "<span class='notice'>[src] requires a higher capacity cell.</span>")
|
||||
return
|
||||
if(!user.transferItemToLoc(W, src))
|
||||
@@ -92,31 +107,25 @@
|
||||
cell.forceMove(get_turf(src))
|
||||
cell = null
|
||||
to_chat(user, "<span class='notice'>You remove the cell from [src].</span>")
|
||||
status = 0
|
||||
update_icon()
|
||||
switch_status(FALSE, TRUE)
|
||||
else
|
||||
return ..()
|
||||
|
||||
/obj/item/melee/baton/attack_self(mob/user)
|
||||
if(cell && cell.charge > hitcost)
|
||||
status = !status
|
||||
if(cell && cell.charge > hitcost * STUNBATON_CHARGE_LENIENCY)
|
||||
switch_status(!status)
|
||||
to_chat(user, "<span class='notice'>[src] is now [status ? "on" : "off"].</span>")
|
||||
playsound(loc, "sparks", 75, 1, -1)
|
||||
else
|
||||
status = 0
|
||||
switch_status(FALSE, TRUE)
|
||||
if(!cell)
|
||||
to_chat(user, "<span class='warning'>[src] does not have a power source!</span>")
|
||||
else
|
||||
to_chat(user, "<span class='warning'>[src] is out of charge.</span>")
|
||||
update_icon()
|
||||
add_fingerprint(user)
|
||||
|
||||
/obj/item/melee/baton/attack(mob/M, mob/living/carbon/human/user)
|
||||
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits [user.p_them()]self with [src]!</span>", \
|
||||
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
|
||||
user.Knockdown(stunforce*3)
|
||||
deductcharge(hitcost)
|
||||
clowning_around(user)
|
||||
return
|
||||
|
||||
if(user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes it impossible to baton in stamina softcrit
|
||||
@@ -153,17 +162,21 @@
|
||||
var/mob/living/carbon/human/H = L
|
||||
if(H.check_shields(src, 0, "[user]'s [name]", MELEE_ATTACK)) //No message; check_shields() handles that
|
||||
playsound(L, 'sound/weapons/genhit.ogg', 50, 1)
|
||||
return 0
|
||||
return FALSE
|
||||
var/stunpwr = stunforce
|
||||
if(iscyborg(loc))
|
||||
var/mob/living/silicon/robot/R = loc
|
||||
if(!R || !R.cell || !R.cell.use(hitcost))
|
||||
return 0
|
||||
if(!istype(R) || !R.cell || !R.cell.use(hitcost))
|
||||
return FALSE
|
||||
else
|
||||
if(!deductcharge(hitcost))
|
||||
return 0
|
||||
var/stuncharge = cell.charge
|
||||
if(!deductcharge(hitcost, FALSE))
|
||||
stunpwr *= round(stuncharge/hitcost)
|
||||
if(stunpwr < stunforce * STUNBATON_CHARGE_LENIENCY)
|
||||
return FALSE
|
||||
|
||||
L.Knockdown(stunforce)
|
||||
L.adjustStaminaLoss(stunforce*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
|
||||
L.Knockdown(stunpwr)
|
||||
L.adjustStaminaLoss(stunpwr*0.1, affected_zone = (istype(user) ? user.zone_selected : BODY_ZONE_CHEST))//CIT CHANGE - makes stunbatons deal extra staminaloss. Todo: make this also deal pain when pain gets implemented.
|
||||
L.apply_effect(EFFECT_STUTTER, stunforce)
|
||||
SEND_SIGNAL(L, COMSIG_LIVING_MINOR_SHOCK)
|
||||
if(user)
|
||||
@@ -180,11 +193,18 @@
|
||||
H.forcesay(GLOB.hit_appends)
|
||||
|
||||
|
||||
return 1
|
||||
return TRUE
|
||||
|
||||
/obj/item/melee/baton/proc/clowning_around(mob/living/user)
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits [user.p_them()]self with [src]!</span>", \
|
||||
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
|
||||
user.Knockdown(stunforce*3)
|
||||
deductcharge(hitcost)
|
||||
|
||||
/obj/item/melee/baton/emp_act(severity)
|
||||
. = ..()
|
||||
if (!(. & EMP_PROTECT_SELF))
|
||||
switch_status(FALSE)
|
||||
deductcharge(1000 / severity)
|
||||
|
||||
//Makeshift stun baton. Replacement for stun gloves.
|
||||
@@ -211,3 +231,5 @@
|
||||
/obj/item/melee/baton/cattleprod/baton_stun()
|
||||
if(sparkler.activate())
|
||||
..()
|
||||
|
||||
#undef STUNBATON_CHARGE_LENIENCY
|
||||
|
||||
@@ -6,27 +6,23 @@
|
||||
item_state = "teleprod"
|
||||
slot_flags = null
|
||||
|
||||
/obj/item/melee/baton/cattleprod/teleprod/attack(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
|
||||
..()
|
||||
if(status && user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits [user.p_them()]self with [src]!</span>", \
|
||||
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
|
||||
if(do_teleport(user, get_turf(user), 50))//honk honk
|
||||
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
|
||||
user.Knockdown(stunforce*3)
|
||||
deductcharge(hitcost)
|
||||
else
|
||||
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
|
||||
user.Knockdown(stunforce*3)
|
||||
deductcharge(hitcost/4)
|
||||
/obj/item/melee/baton/cattleprod/teleprod/baton_stun(mob/living/carbon/M, mob/living/carbon/user)//handles making things teleport when hit
|
||||
. = ..()
|
||||
if(!. || !istype(M) || M.anchored)
|
||||
return
|
||||
else
|
||||
if(status)
|
||||
if(!istype(M) && M.anchored)
|
||||
return .
|
||||
else
|
||||
SEND_SIGNAL(M, COMSIG_LIVING_MINOR_SHOCK)
|
||||
do_teleport(M, get_turf(M), 15)
|
||||
SEND_SIGNAL(M, COMSIG_LIVING_MINOR_SHOCK)
|
||||
do_teleport(M, get_turf(M), 15)
|
||||
|
||||
/obj/item/melee/baton/cattleprod/teleprod/clowning_around(mob/living/user)
|
||||
user.visible_message("<span class='danger'>[user] accidentally hits [user.p_them()]self with [src]!</span>", \
|
||||
"<span class='userdanger'>You accidentally hit yourself with [src]!</span>")
|
||||
SEND_SIGNAL(user, COMSIG_LIVING_MINOR_SHOCK)
|
||||
user.Knockdown(stunforce*3)
|
||||
if(do_teleport(user, get_turf(user), 50))
|
||||
deductcharge(hitcost)
|
||||
else
|
||||
deductcharge(hitcost * 0.25)
|
||||
|
||||
/obj/item/melee/baton/cattleprod/attackby(obj/item/I, mob/user, params)//handles sticking a crystal onto a stunprod to make a teleprod
|
||||
if(istype(I, /obj/item/stack/ore/bluespace_crystal))
|
||||
|
||||
@@ -75,11 +75,6 @@
|
||||
return ..()
|
||||
if(user.zone_selected != BODY_ZONE_PRECISE_EYES && user.zone_selected != BODY_ZONE_HEAD)
|
||||
return ..()
|
||||
if(user.has_trait(TRAIT_PACIFISM))
|
||||
to_chat(user, "<span class='warning'>You don't want to harm [M]!</span>")
|
||||
return
|
||||
if(user.has_trait(TRAIT_CLUMSY) && prob(50))
|
||||
M = user
|
||||
return eyestab(M,user)
|
||||
|
||||
/obj/item/screwdriver/brass
|
||||
@@ -103,7 +98,7 @@
|
||||
|
||||
/obj/item/screwdriver/abductor/get_belt_overlay()
|
||||
return mutable_appearance('icons/obj/clothing/belt_overlays.dmi', "screwdriver_nuke")
|
||||
|
||||
|
||||
/obj/item/screwdriver/power
|
||||
name = "hand drill"
|
||||
desc = "A simple powered hand drill. It's fitted with a screw bit."
|
||||
|
||||
@@ -241,6 +241,7 @@ GLOBAL_DATUM_INIT(acid_overlay, /mutable_appearance, mutable_appearance('icons/e
|
||||
|
||||
//what happens when the obj's health is below integrity_failure level.
|
||||
/obj/proc/obj_break(damage_flag)
|
||||
SEND_SIGNAL(src, COMSIG_OBJ_BREAK, damage_flag)
|
||||
return
|
||||
|
||||
//what happens when the obj's integrity reaches zero.
|
||||
|
||||
@@ -77,6 +77,19 @@
|
||||
|
||||
return ..()
|
||||
|
||||
/turf/closed/wall/clockwork/try_destroy(obj/item/I, mob/user, turf/T)
|
||||
if(!heated)
|
||||
return ..()
|
||||
if(!istype(I, /obj/item/pickaxe/drill/jackhammer))
|
||||
return FALSE
|
||||
to_chat(user, "<span class='notice'>You begin to smash though [src]...</span>")
|
||||
if(!do_after(user, 70, TRUE, src))
|
||||
return FALSE
|
||||
I.play_tool_sound(src)
|
||||
visible_message("<span class='warning'>[user] smashes through [src] with [I]!</span>", "<span class='italics'>You hear the grinding of metal.</span>")
|
||||
dismantle_wall()
|
||||
return TRUE
|
||||
|
||||
/turf/closed/wall/clockwork/ReplaceWithLattice()
|
||||
..()
|
||||
for(var/obj/structure/lattice/L in src)
|
||||
|
||||
@@ -903,6 +903,13 @@
|
||||
else
|
||||
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=alien;jobban4=[REF(M)]'>Alien</a></td>"
|
||||
|
||||
//Gang
|
||||
if(jobban_isbanned(M, ROLE_GANG) || isbanned_dept)
|
||||
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=gang;jobban4=[REF(M)]'><font color=red>Gang</font></a></td>"
|
||||
else
|
||||
dat += "<td width='20%'><a href='?src=[REF(src)];[HrefToken()];jobban3=gang;jobban4=[REF(M)]'>Gang</a></td>"
|
||||
|
||||
|
||||
//Other Roles (black)
|
||||
dat += "<table cellpadding='1' cellspacing='0' width='100%'>"
|
||||
dat += "<tr bgcolor='000000'><th colspan='5'><a href='?src=[REF(src)];[HrefToken()];jobban3=otherroles;jobban4=[REF(M)]' style='color: white;'>Other Roles</a></th></tr><tr align='center'>"
|
||||
@@ -974,7 +981,7 @@
|
||||
if("ghostroles")
|
||||
joblist += list(ROLE_PAI, ROLE_POSIBRAIN, ROLE_DRONE , ROLE_DEATHSQUAD, ROLE_LAVALAND, ROLE_SENTIENCE)
|
||||
if("teamantags")
|
||||
joblist += list(ROLE_OPERATIVE, ROLE_REV, ROLE_CULTIST, ROLE_SERVANT_OF_RATVAR, ROLE_ABDUCTOR, ROLE_ALIEN)
|
||||
joblist += list(ROLE_OPERATIVE, ROLE_REV, ROLE_CULTIST, ROLE_SERVANT_OF_RATVAR, ROLE_ABDUCTOR, ROLE_ALIEN, ROLE_GANG)
|
||||
if("convertantags")
|
||||
joblist += list(ROLE_REV, ROLE_CULTIST, ROLE_SERVANT_OF_RATVAR, ROLE_ALIEN)
|
||||
if("otherroles")
|
||||
|
||||
@@ -13,7 +13,7 @@
|
||||
var/give_equipment = FALSE
|
||||
var/datum/team/cult/cult_team
|
||||
|
||||
|
||||
|
||||
/datum/antagonist/cult/get_team()
|
||||
return cult_team
|
||||
|
||||
@@ -115,7 +115,7 @@
|
||||
cult_team.rise(current)
|
||||
if(cult_team.cult_ascendent)
|
||||
cult_team.ascend(current)
|
||||
|
||||
|
||||
/datum/antagonist/cult/remove_innate_effects(mob/living/mob_override)
|
||||
. = ..()
|
||||
var/mob/living/current = owner.current
|
||||
@@ -220,7 +220,7 @@
|
||||
throwing.Remove(current)
|
||||
current.update_action_buttons_icon()
|
||||
current.remove_status_effect(/datum/status_effect/cult_master)
|
||||
|
||||
|
||||
if(ishuman(current))
|
||||
var/mob/living/carbon/human/H = current
|
||||
H.eye_color = initial(H.eye_color)
|
||||
@@ -241,7 +241,31 @@
|
||||
var/reckoning_complete = FALSE
|
||||
var/cult_risen = FALSE
|
||||
var/cult_ascendent = FALSE
|
||||
|
||||
|
||||
/datum/team/cult/New()
|
||||
. = ..()
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
|
||||
/datum/team/cult/Destroy()
|
||||
STOP_PROCESSING(SSprocessing, src)
|
||||
return ..()
|
||||
|
||||
/datum/team/cult/process()
|
||||
if(SSticker.current_state == GAME_STATE_FINISHED)
|
||||
return
|
||||
var/datum/objective/sacrifice/sac_objective = locate() in objectives
|
||||
if(!sac_objective || sac_objective.check_completion())
|
||||
return
|
||||
var/datum/mind/sacrificial = sac_objective.get_target()
|
||||
var/mob/living/sac_current = sacrificial.current
|
||||
if(!sacrificial || !sac_current) //target is gone for good but not sacrified.
|
||||
sort_sacrifice(TRUE)
|
||||
return
|
||||
if(QDELETED(sac_objective.target_current) || sac_objective.target_current != sac_current) //target is now a different mob (monkey, simple mob)
|
||||
sac_objective.sac_image = sac_current.get_sac_image()
|
||||
sac_objective.target_current = sac_current
|
||||
sac_objective.update_explanation_text()
|
||||
|
||||
/datum/team/cult/proc/check_size()
|
||||
if(cult_ascendent)
|
||||
return
|
||||
@@ -262,7 +286,7 @@
|
||||
to_chat(B.current, "<span class='cultlarge'>The veil weakens as your cult grows, your eyes begin to glow...")
|
||||
addtimer(CALLBACK(src, .proc/rise, B.current), 200)
|
||||
cult_risen = TRUE
|
||||
|
||||
|
||||
if(ratio > CULT_ASCENDENT && !cult_ascendent)
|
||||
for(var/datum/mind/B in members)
|
||||
if(B.current)
|
||||
@@ -270,8 +294,8 @@
|
||||
to_chat(B.current, "<span class='cultlarge'>Your cult is ascendent and the red harvest approaches - you cannot hide your true nature for much longer!!")
|
||||
addtimer(CALLBACK(src, .proc/ascend, B.current), 200)
|
||||
cult_ascendent = TRUE
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/team/cult/proc/rise(cultist)
|
||||
if(ishuman(cultist))
|
||||
var/mob/living/carbon/human/H = cultist
|
||||
@@ -279,7 +303,7 @@
|
||||
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
|
||||
H.add_trait(CULT_EYES)
|
||||
H.update_body()
|
||||
|
||||
|
||||
/datum/team/cult/proc/ascend(cultist)
|
||||
if(ishuman(cultist))
|
||||
var/mob/living/carbon/human/H = cultist
|
||||
@@ -289,48 +313,68 @@
|
||||
|
||||
/datum/team/cult/proc/setup_objectives()
|
||||
//SAC OBJECTIVE , todo: move this to objective internals
|
||||
sort_sacrifice()
|
||||
//SUMMON OBJECTIVE
|
||||
var/datum/objective/eldergod/summon_objective = new()
|
||||
summon_objective.team = src
|
||||
objectives += summon_objective
|
||||
|
||||
/datum/team/cult/proc/sort_sacrifice(replacement = FALSE)
|
||||
|
||||
var/list/target_candidates = list()
|
||||
var/datum/objective/sacrifice/sac_objective = new
|
||||
sac_objective.team = src
|
||||
|
||||
var/datum/objective/sacrifice/sac_objective = locate() in GLOB.objectives
|
||||
if(!sac_objective)
|
||||
sac_objective = new
|
||||
sac_objective.team = src
|
||||
|
||||
for(var/mob/living/carbon/human/player in GLOB.player_list)
|
||||
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && !is_convertable_to_cult(player) && player.stat != DEAD)
|
||||
target_candidates += player.mind
|
||||
|
||||
if(target_candidates.len == 0)
|
||||
if(!length(target_candidates))
|
||||
message_admins("Cult Sacrifice: Could not find unconvertible target, checking for convertible target.")
|
||||
for(var/mob/living/carbon/human/player in GLOB.player_list)
|
||||
if(player.mind && !player.mind.has_antag_datum(/datum/antagonist/cult) && player.stat != DEAD)
|
||||
target_candidates += player.mind
|
||||
|
||||
listclearnulls(target_candidates)
|
||||
if(LAZYLEN(target_candidates))
|
||||
sac_objective.target = pick(target_candidates)
|
||||
sac_objective.update_explanation_text()
|
||||
if(!LAZYLEN(target_candidates))
|
||||
message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. Proceeding to next stage!")
|
||||
sac_objective.sacced = TRUE
|
||||
return
|
||||
var/datum/mind/new_target = pick(target_candidates)
|
||||
if(replacement)
|
||||
for(var/datum/mind/H in members)
|
||||
if(H.current)
|
||||
to_chat(H.current, "<span class='danger'>Nar'Sie</span> murmurs, <span class='cultlarge'>[sac_objective.target] is beyond your reach. Sacrifice [new_target] instead...</span></span>")
|
||||
sac_objective.target = new_target
|
||||
sac_objective.target_current = new_target.current
|
||||
sac_objective.update_explanation_text()
|
||||
|
||||
var/datum/job/sacjob = SSjob.GetJob(sac_objective.target.assigned_role)
|
||||
var/datum/preferences/sacface = sac_objective.target.current.client.prefs
|
||||
var/icon/reshape = get_flat_human_icon(null, sacjob, sacface, list(SOUTH))
|
||||
reshape.Shift(SOUTH, 4)
|
||||
reshape.Shift(EAST, 1)
|
||||
reshape.Crop(7,4,26,31)
|
||||
reshape.Crop(-5,-3,26,30)
|
||||
sac_objective.sac_image = reshape
|
||||
sac_objective.sac_image = sac_objective.target_current.get_sac_image()
|
||||
objectives += sac_objective
|
||||
|
||||
objectives += sac_objective
|
||||
else
|
||||
message_admins("Cult Sacrifice: Could not find unconvertible or convertible target. WELP!")
|
||||
/mob/proc/get_sac_image()
|
||||
var/icon/reshape = icon(icon, icon_state, SOUTH)
|
||||
reshape.Shift(SOUTH, 4)
|
||||
reshape.Shift(EAST, 1)
|
||||
reshape.Crop(7,4,26,31)
|
||||
reshape.Crop(-5,-3,26,30)
|
||||
|
||||
/mob/living/carbon/human/get_sac_image()
|
||||
var/datum/job/sacjob = SSjob.GetJob(mind.assigned_role)
|
||||
var/datum/preferences/sacface = client.prefs
|
||||
var/icon/reshape = get_flat_human_icon(null, sacjob, sacface, list(SOUTH))
|
||||
reshape.Shift(SOUTH, 4)
|
||||
reshape.Shift(EAST, 1)
|
||||
reshape.Crop(7,4,26,31)
|
||||
reshape.Crop(-5,-3,26,30)
|
||||
|
||||
//SUMMON OBJECTIVE
|
||||
|
||||
var/datum/objective/eldergod/summon_objective = new()
|
||||
summon_objective.team = src
|
||||
objectives += summon_objective
|
||||
|
||||
|
||||
/datum/objective/sacrifice
|
||||
var/sacced = FALSE
|
||||
var/sac_image
|
||||
var/mob/living/target_current
|
||||
|
||||
/datum/objective/sacrifice/check_completion()
|
||||
return sacced || completed
|
||||
|
||||
@@ -246,7 +246,7 @@ structure_check() searches for nearby cultist structures required for the invoca
|
||||
return 0
|
||||
to_chat(convertee, "<span class='cult italic'><b>Your blood pulses. Your head throbs. The world goes red. All at once you are aware of a horrible, horrible, truth. The veil of reality has been ripped away \
|
||||
and something evil takes root.</b></span>")
|
||||
to_chat(convertee, "<span class='cult italic'>Do you wish to embrace the Geometer of Blood? <a href='?src=\ref[src];signmeup=1'>Click here to stop resisting the truth.</a> Or you could choose to continue resisting...</span>")
|
||||
to_chat(convertee, "<span class='cult italic'>Do you wish to embrace the Geometer of Blood? <a href='?src=\ref[src];signmeup=1'>Click here to become a follower of Nar'sie.</a> Or you could choose to continue resisting and suffer a fate worse than death...</span>")
|
||||
currentconversionman = convertee
|
||||
conversiontimeout = world.time + (10 SECONDS)
|
||||
convertee.Stun(100)
|
||||
|
||||
@@ -130,6 +130,7 @@
|
||||
if(!owner.current||owner.current.stat==DEAD)
|
||||
return
|
||||
to_chat(owner.current, "<span class='userdanger'> Target eliminated: [victim.name]</span>")
|
||||
LAZYINITLIST(targets_stolen)
|
||||
for(var/objective_ in victim.objectives)
|
||||
if(istype(objective_, /datum/objective/assassinate/internal))
|
||||
var/datum/objective/assassinate/internal/objective = objective_
|
||||
|
||||
@@ -27,7 +27,26 @@ Thus, the two variables affect pump operation are set in New():
|
||||
|
||||
construction_type = /obj/item/pipe/directional
|
||||
pipe_state = "pump"
|
||||
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/pump/CtrlClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
on = !on
|
||||
update_icon()
|
||||
investigate_log("Pump, [src.name], turned on by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/pump/AltClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
to_chat(user,"<span class='notice'>You maximize the pressure on the [src].</span>")
|
||||
investigate_log("Pump, [src.name], was maximized by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/pump/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
|
||||
@@ -28,6 +28,16 @@ Thus, the two variables affect pump operation are set in New():
|
||||
construction_type = /obj/item/pipe/directional
|
||||
pipe_state = "volumepump"
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/volume_pump/CtrlClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
on = !on
|
||||
update_icon()
|
||||
investigate_log("Pump, [src.name], turned on by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/binary/volume_pump/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
@@ -192,4 +202,4 @@ Thus, the two variables affect pump operation are set in New():
|
||||
else
|
||||
investigate_log("Pump, [src.name], was unwrenched by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], was unwrenched by [ADMIN_LOOKUPFLW(user)] at [A]")
|
||||
return TRUE
|
||||
return TRUE
|
||||
|
||||
@@ -1,236 +1,255 @@
|
||||
/obj/machinery/atmospherics/components/trinary/filter
|
||||
name = "gas filter"
|
||||
icon_state = "filter_off"
|
||||
desc = "Very useful for filtering gasses."
|
||||
density = FALSE
|
||||
can_unwrench = TRUE
|
||||
var/target_pressure = ONE_ATMOSPHERE
|
||||
var/filter_type = null
|
||||
var/frequency = 0
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
construction_type = /obj/item/pipe/trinary/flippable
|
||||
pipe_state = "filter"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
pixel_y = -PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/layer3
|
||||
piping_layer = PIPING_LAYER_MAX
|
||||
pixel_x = PIPING_LAYER_P_X
|
||||
pixel_y = PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped
|
||||
icon_state = "filter_off_f"
|
||||
flipped = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
pixel_y = -PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped/layer3
|
||||
piping_layer = PIPING_LAYER_MAX
|
||||
pixel_x = PIPING_LAYER_P_X
|
||||
pixel_y = PIPING_LAYER_P_Y
|
||||
|
||||
// These two filter types have critical_machine flagged to on and thus causes the area they are in to be exempt from the Grid Check event.
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/critical
|
||||
critical_machine = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped/critical
|
||||
critical_machine = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/proc/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
if(frequency)
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/Destroy()
|
||||
SSradio.remove_object(src,frequency)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos //Used for atmos waste loops
|
||||
on = TRUE
|
||||
icon_state = "filter_on"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/n2
|
||||
name = "nitrogen filter"
|
||||
filter_type = "n2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/o2
|
||||
name = "oxygen filter"
|
||||
filter_type = "o2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/co2
|
||||
name = "carbon dioxide filter"
|
||||
filter_type = "co2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o
|
||||
name = "nitrous oxide filter"
|
||||
filter_type = "n2o"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma
|
||||
name = "plasma filter"
|
||||
filter_type = "plasma"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped //This feels wrong, I know
|
||||
icon_state = "filter_on_f"
|
||||
flipped = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2
|
||||
name = "nitrogen filter"
|
||||
filter_type = "n2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2
|
||||
name = "oxygen filter"
|
||||
filter_type = "o2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2
|
||||
name = "carbon dioxide filter"
|
||||
filter_type = "co2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o
|
||||
name = "nitrous oxide filter"
|
||||
filter_type = "n2o"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma
|
||||
name = "plasma filter"
|
||||
filter_type = "plasma"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/update_icon()
|
||||
cut_overlays()
|
||||
for(var/direction in GLOB.cardinals)
|
||||
if(direction & initialize_directions)
|
||||
var/obj/machinery/atmospherics/node = findConnecting(direction)
|
||||
if(node)
|
||||
add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction, node.pipe_color))
|
||||
continue
|
||||
add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction))
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes()
|
||||
if(on && nodes[1] && nodes[2] && nodes[3] && is_operational())
|
||||
icon_state = "filter_on[flipped?"_f":""]"
|
||||
return
|
||||
icon_state = "filter_off[flipped?"_f":""]"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/power_change()
|
||||
var/old_stat = stat
|
||||
..()
|
||||
if(stat != old_stat)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/process_atmos()
|
||||
..()
|
||||
if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational())
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[1]
|
||||
var/datum/gas_mixture/air2 = airs[2]
|
||||
var/datum/gas_mixture/air3 = airs[3]
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
|
||||
if(output_starting_pressure >= target_pressure)
|
||||
//No need to transfer if target is already full!
|
||||
return
|
||||
|
||||
//Calculate necessary moles to transfer using PV=nRT
|
||||
|
||||
var/pressure_delta = target_pressure - output_starting_pressure
|
||||
var/transfer_moles
|
||||
|
||||
if(air1.temperature > 0)
|
||||
transfer_moles = pressure_delta*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
//Actually transfer the gas
|
||||
|
||||
if(transfer_moles > 0)
|
||||
var/datum/gas_mixture/removed = air1.remove(transfer_moles)
|
||||
|
||||
if(!removed)
|
||||
return
|
||||
|
||||
var/filtering = TRUE
|
||||
if(!ispath(filter_type))
|
||||
if(filter_type)
|
||||
filter_type = gas_id2path(filter_type) //support for mappers so they don't need to type out paths
|
||||
else
|
||||
filtering = FALSE
|
||||
|
||||
if(filtering && removed.gases[filter_type])
|
||||
var/datum/gas_mixture/filtered_out = new
|
||||
|
||||
filtered_out.temperature = removed.temperature
|
||||
filtered_out.gases[filter_type] = removed.gases[filter_type]
|
||||
|
||||
removed.gases[filter_type] = 0
|
||||
GAS_GARBAGE_COLLECT(removed.gases)
|
||||
|
||||
var/datum/gas_mixture/target = (air2.return_pressure() < target_pressure ? air2 : air1) //if there's no room for the filtered gas; just leave it in air1
|
||||
target.merge(filtered_out)
|
||||
|
||||
air3.merge(removed)
|
||||
|
||||
update_parents()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmosinit()
|
||||
set_frequency(frequency)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_filter", name, 475, 195, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/ui_data()
|
||||
var/data = list()
|
||||
data["on"] = on
|
||||
data["pressure"] = round(target_pressure)
|
||||
data["max_pressure"] = round(MAX_OUTPUT_PRESSURE)
|
||||
|
||||
data["filter_types"] = list()
|
||||
data["filter_types"] += list(list("name" = "Nothing", "path" = "", "selected" = !filter_type))
|
||||
for(var/path in GLOB.meta_gas_ids)
|
||||
data["filter_types"] += list(list("name" = GLOB.meta_gas_names[path], "id" = GLOB.meta_gas_ids[path], "selected" = (path == gas_id2path(filter_type))))
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("power")
|
||||
on = !on
|
||||
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
. = TRUE
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "max")
|
||||
pressure = MAX_OUTPUT_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", name, target_pressure) as num|null
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
if("filter")
|
||||
filter_type = null
|
||||
var/filter_name = "nothing"
|
||||
var/gas = gas_id2path(params["mode"])
|
||||
if(gas in GLOB.meta_gas_names)
|
||||
filter_type = gas
|
||||
filter_name = GLOB.meta_gas_names[gas]
|
||||
investigate_log("was set to filter [filter_name] by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/can_unwrench(mob/user)
|
||||
. = ..()
|
||||
if(. && on && is_operational())
|
||||
to_chat(user, "<span class='warning'>You cannot unwrench [src], turn it off first!</span>")
|
||||
return FALSE
|
||||
/obj/machinery/atmospherics/components/trinary/filter
|
||||
name = "gas filter"
|
||||
icon_state = "filter_off"
|
||||
desc = "Very useful for filtering gasses."
|
||||
density = FALSE
|
||||
can_unwrench = TRUE
|
||||
var/target_pressure = ONE_ATMOSPHERE
|
||||
var/filter_type = null
|
||||
var/frequency = 0
|
||||
var/datum/radio_frequency/radio_connection
|
||||
|
||||
construction_type = /obj/item/pipe/trinary/flippable
|
||||
pipe_state = "filter"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/CtrlClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
on = !on
|
||||
update_icon()
|
||||
investigate_log("Pump, [src.name], turned on by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/AltClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
to_chat(user,"<span class='notice'>You maximize the pressure on the [src].</span>")
|
||||
investigate_log("Pump, [src.name], was maximized by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
pixel_y = -PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/layer3
|
||||
piping_layer = PIPING_LAYER_MAX
|
||||
pixel_x = PIPING_LAYER_P_X
|
||||
pixel_y = PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped
|
||||
icon_state = "filter_off_f"
|
||||
flipped = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
pixel_y = -PIPING_LAYER_P_Y
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped/layer3
|
||||
piping_layer = PIPING_LAYER_MAX
|
||||
pixel_x = PIPING_LAYER_P_X
|
||||
pixel_y = PIPING_LAYER_P_Y
|
||||
|
||||
// These two filter types have critical_machine flagged to on and thus causes the area they are in to be exempt from the Grid Check event.
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/critical
|
||||
critical_machine = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/flipped/critical
|
||||
critical_machine = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/proc/set_frequency(new_frequency)
|
||||
SSradio.remove_object(src, frequency)
|
||||
frequency = new_frequency
|
||||
if(frequency)
|
||||
radio_connection = SSradio.add_object(src, frequency, RADIO_ATMOSIA)
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/Destroy()
|
||||
SSradio.remove_object(src,frequency)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos //Used for atmos waste loops
|
||||
on = TRUE
|
||||
icon_state = "filter_on"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/n2
|
||||
name = "nitrogen filter"
|
||||
filter_type = "n2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/o2
|
||||
name = "oxygen filter"
|
||||
filter_type = "o2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/co2
|
||||
name = "carbon dioxide filter"
|
||||
filter_type = "co2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/n2o
|
||||
name = "nitrous oxide filter"
|
||||
filter_type = "n2o"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/plasma
|
||||
name = "plasma filter"
|
||||
filter_type = "plasma"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped //This feels wrong, I know
|
||||
icon_state = "filter_on_f"
|
||||
flipped = TRUE
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2
|
||||
name = "nitrogen filter"
|
||||
filter_type = "n2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/o2
|
||||
name = "oxygen filter"
|
||||
filter_type = "o2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/co2
|
||||
name = "carbon dioxide filter"
|
||||
filter_type = "co2"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/n2o
|
||||
name = "nitrous oxide filter"
|
||||
filter_type = "n2o"
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmos/flipped/plasma
|
||||
name = "plasma filter"
|
||||
filter_type = "plasma"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/update_icon()
|
||||
cut_overlays()
|
||||
for(var/direction in GLOB.cardinals)
|
||||
if(direction & initialize_directions)
|
||||
var/obj/machinery/atmospherics/node = findConnecting(direction)
|
||||
if(node)
|
||||
add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction, node.pipe_color))
|
||||
continue
|
||||
add_overlay(getpipeimage('icons/obj/atmospherics/components/trinary_devices.dmi', "cap", direction))
|
||||
..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/update_icon_nopipes()
|
||||
if(on && nodes[1] && nodes[2] && nodes[3] && is_operational())
|
||||
icon_state = "filter_on[flipped?"_f":""]"
|
||||
return
|
||||
icon_state = "filter_off[flipped?"_f":""]"
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/power_change()
|
||||
var/old_stat = stat
|
||||
..()
|
||||
if(stat != old_stat)
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/process_atmos()
|
||||
..()
|
||||
if(!on || !(nodes[1] && nodes[2] && nodes[3]) || !is_operational())
|
||||
return
|
||||
|
||||
var/datum/gas_mixture/air1 = airs[1]
|
||||
var/datum/gas_mixture/air2 = airs[2]
|
||||
var/datum/gas_mixture/air3 = airs[3]
|
||||
|
||||
var/output_starting_pressure = air3.return_pressure()
|
||||
|
||||
if(output_starting_pressure >= target_pressure)
|
||||
//No need to transfer if target is already full!
|
||||
return
|
||||
|
||||
//Calculate necessary moles to transfer using PV=nRT
|
||||
|
||||
var/pressure_delta = target_pressure - output_starting_pressure
|
||||
var/transfer_moles
|
||||
|
||||
if(air1.temperature > 0)
|
||||
transfer_moles = pressure_delta*air3.volume/(air1.temperature * R_IDEAL_GAS_EQUATION)
|
||||
|
||||
//Actually transfer the gas
|
||||
|
||||
if(transfer_moles > 0)
|
||||
var/datum/gas_mixture/removed = air1.remove(transfer_moles)
|
||||
|
||||
if(!removed)
|
||||
return
|
||||
|
||||
var/filtering = TRUE
|
||||
if(!ispath(filter_type))
|
||||
if(filter_type)
|
||||
filter_type = gas_id2path(filter_type) //support for mappers so they don't need to type out paths
|
||||
else
|
||||
filtering = FALSE
|
||||
|
||||
if(filtering && removed.gases[filter_type])
|
||||
var/datum/gas_mixture/filtered_out = new
|
||||
|
||||
filtered_out.temperature = removed.temperature
|
||||
filtered_out.gases[filter_type] = removed.gases[filter_type]
|
||||
|
||||
removed.gases[filter_type] = 0
|
||||
GAS_GARBAGE_COLLECT(removed.gases)
|
||||
|
||||
var/datum/gas_mixture/target = (air2.return_pressure() < target_pressure ? air2 : air1) //if there's no room for the filtered gas; just leave it in air1
|
||||
target.merge(filtered_out)
|
||||
|
||||
air3.merge(removed)
|
||||
|
||||
update_parents()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/atmosinit()
|
||||
set_frequency(frequency)
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, \
|
||||
datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
|
||||
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
|
||||
if(!ui)
|
||||
ui = new(user, src, ui_key, "atmos_filter", name, 475, 195, master_ui, state)
|
||||
ui.open()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/ui_data()
|
||||
var/data = list()
|
||||
data["on"] = on
|
||||
data["pressure"] = round(target_pressure)
|
||||
data["max_pressure"] = round(MAX_OUTPUT_PRESSURE)
|
||||
|
||||
data["filter_types"] = list()
|
||||
data["filter_types"] += list(list("name" = "Nothing", "path" = "", "selected" = !filter_type))
|
||||
for(var/path in GLOB.meta_gas_ids)
|
||||
data["filter_types"] += list(list("name" = GLOB.meta_gas_names[path], "id" = GLOB.meta_gas_ids[path], "selected" = (path == gas_id2path(filter_type))))
|
||||
|
||||
return data
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/ui_act(action, params)
|
||||
if(..())
|
||||
return
|
||||
switch(action)
|
||||
if("power")
|
||||
on = !on
|
||||
investigate_log("was turned [on ? "on" : "off"] by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
. = TRUE
|
||||
if("pressure")
|
||||
var/pressure = params["pressure"]
|
||||
if(pressure == "max")
|
||||
pressure = MAX_OUTPUT_PRESSURE
|
||||
. = TRUE
|
||||
else if(pressure == "input")
|
||||
pressure = input("New output pressure (0-[MAX_OUTPUT_PRESSURE] kPa):", name, target_pressure) as num|null
|
||||
if(!isnull(pressure) && !..())
|
||||
. = TRUE
|
||||
else if(text2num(pressure) != null)
|
||||
pressure = text2num(pressure)
|
||||
. = TRUE
|
||||
if(.)
|
||||
target_pressure = CLAMP(pressure, 0, MAX_OUTPUT_PRESSURE)
|
||||
investigate_log("was set to [target_pressure] kPa by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
if("filter")
|
||||
filter_type = null
|
||||
var/filter_name = "nothing"
|
||||
var/gas = gas_id2path(params["mode"])
|
||||
if(gas in GLOB.meta_gas_names)
|
||||
filter_type = gas
|
||||
filter_name = GLOB.meta_gas_names[gas]
|
||||
investigate_log("was set to filter [filter_name] by [key_name(usr)]", INVESTIGATE_ATMOS)
|
||||
. = TRUE
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/filter/can_unwrench(mob/user)
|
||||
. = ..()
|
||||
if(. && on && is_operational())
|
||||
to_chat(user, "<span class='warning'>You cannot unwrench [src], turn it off first!</span>")
|
||||
return FALSE
|
||||
|
||||
@@ -14,7 +14,25 @@
|
||||
pipe_state = "mixer"
|
||||
|
||||
//node 3 is the outlet, nodes 1 & 2 are intakes
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/CtrlClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
on = !on
|
||||
update_icon()
|
||||
investigate_log("Pump, [src.name], turned on by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], turned [on ? "on" : "off"] by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
return ..()
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/AltClick(mob/user)
|
||||
var/area/A = get_area(src)
|
||||
var/turf/T = get_turf(src)
|
||||
if(user.canUseTopic(src, BE_CLOSE, FALSE,))
|
||||
target_pressure = MAX_OUTPUT_PRESSURE
|
||||
to_chat(user,"<span class='notice'>You maximize the pressure on the [src].</span>")
|
||||
investigate_log("Pump, [src.name], was maximized by [key_name(usr)] at [x], [y], [z], [A]", INVESTIGATE_ATMOS)
|
||||
message_admins("Pump, [src.name], was maximized by [ADMIN_LOOKUPFLW(usr)] at [ADMIN_COORDJMP(T)], [A]")
|
||||
|
||||
/obj/machinery/atmospherics/components/trinary/mixer/layer1
|
||||
piping_layer = PIPING_LAYER_MIN
|
||||
pixel_x = -PIPING_LAYER_P_X
|
||||
|
||||
@@ -873,8 +873,7 @@
|
||||
/datum/supply_pack/engineering/shield_sat
|
||||
name = "Shield Generator Satellite"
|
||||
desc = "Protect the very existence of this station with these Anti-Meteor defenses. Contains three Shield Generator Satellites."
|
||||
cost = 3000
|
||||
special = TRUE
|
||||
cost = 4000
|
||||
contains = list(
|
||||
/obj/machinery/satellite/meteor_shield,
|
||||
/obj/machinery/satellite/meteor_shield,
|
||||
@@ -886,8 +885,7 @@
|
||||
/datum/supply_pack/engineering/shield_sat_control
|
||||
name = "Shield System Control Board"
|
||||
desc = "A control system for the Shield Generator Satellite system."
|
||||
cost = 5000
|
||||
special = TRUE
|
||||
cost = 4000
|
||||
contains = list(/obj/item/circuitboard/computer/sat_control)
|
||||
crate_name= "shield control board crate"
|
||||
|
||||
|
||||
@@ -117,6 +117,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
"balls_color" = "fff",
|
||||
"balls_amount" = 2,
|
||||
"balls_sack_size" = BALLS_SACK_SIZE_DEF,
|
||||
"balls_shape" = "Single",
|
||||
"balls_size" = BALLS_SIZE_DEF,
|
||||
"balls_cum_rate" = CUM_RATE,
|
||||
"balls_cum_mult" = CUM_RATE_MULT,
|
||||
@@ -701,6 +702,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
dat += "<b>Testicles Color:</b>"
|
||||
dat += "<span style='border: 1px solid #161616; background-color: #[features["balls_color"]];'> </span> <a href='?_src_=prefs;preference=balls_color;task=input'>Change</a><br>"
|
||||
dat += "<b>Testicles showing:</b><a style='display:block;width:50px' href='?_src_=prefs;preference=balls_shape;task=input'>[features["balls_shape"]]</a>"
|
||||
dat += APPEARANCE_CATEGORY_COLUMN
|
||||
dat += "<b>Has Vagina:</b>"
|
||||
dat += "<a style='display:block;width:50px' href='?_src_=prefs;preference=has_vag'>[features["has_vag"] == TRUE ? "Yes" : "No"]</a>"
|
||||
@@ -1458,7 +1460,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
age = max(min( round(text2num(new_age)), AGE_MAX),AGE_MIN)
|
||||
|
||||
if("flavor_text")
|
||||
var/msg = stripped_multiline_input(usr,"Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!","Flavor Text",html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE) as null|message
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(features["flavor_text"]), MAX_MESSAGE_LEN*2, TRUE)
|
||||
if(!isnull(msg))
|
||||
msg = copytext(msg, 1, MAX_MESSAGE_LEN*2)
|
||||
features["flavor_text"] = msg
|
||||
@@ -1836,7 +1838,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3])
|
||||
features["cock_color"] = sanitize_hexcolor(new_cockcolor)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("cock_length")
|
||||
var/new_length = input(user, "Penis length in inches:\n([COCK_SIZE_MIN]-[COCK_SIZE_MAX])", "Character Preference") as num|null
|
||||
@@ -1858,7 +1860,13 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3])
|
||||
features["balls_color"] = sanitize_hexcolor(new_ballscolor)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("balls_shape")
|
||||
var/new_shape
|
||||
new_shape = input(user, "Testicle Type:", "Character Preference") as null|anything in GLOB.balls_shapes_list
|
||||
if(new_shape)
|
||||
features["balls_shape"] = new_shape
|
||||
|
||||
if("egg_size")
|
||||
var/new_size
|
||||
@@ -1874,7 +1882,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3])
|
||||
features["eggsack_egg_color"] = sanitize_hexcolor(new_egg_color)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("breasts_size")
|
||||
var/new_size
|
||||
@@ -1897,7 +1905,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3])
|
||||
features["breasts_color"] = sanitize_hexcolor(new_breasts_color)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("vag_shape")
|
||||
var/new_shape
|
||||
@@ -1914,7 +1922,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else if((MUTCOLORS_PARTSONLY in pref_species.species_traits) || ReadHSV(temp_hsv)[3] >= ReadHSV("#202020")[3])
|
||||
features["vag_color"] = sanitize_hexcolor(new_vagcolor)
|
||||
else
|
||||
user << "<span class='danger'>Invalid color. Your color is not bright enough.</span>"
|
||||
to_chat(user,"<span class='danger'>Invalid color. Your color is not bright enough.</span>")
|
||||
|
||||
if("ooccolor")
|
||||
var/new_ooccolor = input(user, "Choose your OOC colour:", "Game Preference",ooccolor) as color|null
|
||||
|
||||
@@ -330,6 +330,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["feature_has_balls"] >> features["has_balls"]
|
||||
S["feature_balls_color"] >> features["balls_color"]
|
||||
S["feature_balls_size"] >> features["balls_size"]
|
||||
S["feature_balls_shape"] >> features["balls_shape"]
|
||||
S["feature_balls_sack_size"] >> features["balls_sack_size"]
|
||||
S["feature_balls_fluid"] >> features["balls_fluid"]
|
||||
//breasts features
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
/obj/item/clothing/gloves/combat
|
||||
name = "combat gloves"
|
||||
desc = "These tactical gloves are fireproof and shock resistant."
|
||||
icon_state = "black"
|
||||
icon_state = "combat"
|
||||
item_state = "blackgloves"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
@@ -46,7 +46,8 @@
|
||||
|
||||
/datum/outfit/ert/commander/alert
|
||||
name = "ERT Commander - High Alert"
|
||||
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert
|
||||
glasses = /obj/item/clothing/glasses/thermal/eyepatch
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
@@ -80,7 +81,8 @@
|
||||
|
||||
/datum/outfit/ert/security/alert
|
||||
name = "ERT Security - High Alert"
|
||||
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/sec
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/storage/box/handcuffs=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
@@ -117,6 +119,7 @@
|
||||
/datum/outfit/ert/medic/alert
|
||||
name = "ERT Medic - High Alert"
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/med
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
@@ -153,6 +156,7 @@
|
||||
/datum/outfit/ert/engineer/alert
|
||||
name = "ERT Engineer - High Alert"
|
||||
|
||||
suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/engi
|
||||
backpack_contents = list(/obj/item/storage/box/engineer=1,\
|
||||
/obj/item/melee/baton/loaded=1,\
|
||||
/obj/item/clothing/mask/gas/sechailer/swat=1,\
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
/obj/item/clothing/shoes/clown_shoes/taeclowndo
|
||||
var/list/spelltypes = list (
|
||||
/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie,
|
||||
/obj/effect/proc_holder/spell/aimed/banana_peel,
|
||||
/obj/effect/proc_holder/spell/targeted/touch/megahonk,
|
||||
/obj/effect/proc_holder/spell/targeted/touch/bspie,
|
||||
)
|
||||
var/list/spells = list()
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/taeclowndo/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(!(H.has_trait(TRAIT_CLUMSY)) && !(H.mind && H.mind.assigned_role == "Clown"))
|
||||
return
|
||||
if(slot == SLOT_SHOES)
|
||||
spells = new
|
||||
for(var/spell in spelltypes)
|
||||
var/obj/effect/proc_holder/spell/S = new spell
|
||||
spells += S
|
||||
S.charge_counter = 0
|
||||
S.start_recharge()
|
||||
H.mind.AddSpell(S)
|
||||
|
||||
/obj/item/clothing/shoes/clown_shoes/taeclowndo/dropped(mob/user)
|
||||
. = ..()
|
||||
if(!ishuman(user))
|
||||
return
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.get_item_by_slot(SLOT_SHOES) == src)
|
||||
for(var/spell in spells)
|
||||
var/obj/effect/proc_holder/spell/S = spell
|
||||
H.mind.spell_list.Remove(S)
|
||||
qdel(S)
|
||||
@@ -8,7 +8,8 @@ Contains:
|
||||
- NASA Voidsuit
|
||||
- Father Christmas' magical clothes
|
||||
- Pirate's spacesuit
|
||||
- ERT hardsuit: command, sec, engi, med
|
||||
- ERT hardsuit: Command, Sec, Engi, Med
|
||||
- ERT High Alarm - Command, Sec, Engi, Med
|
||||
- EVA spacesuit
|
||||
- Freedom's spacesuit (freedom from vacuum's oppression)
|
||||
- Carp hardsuit
|
||||
@@ -185,6 +186,7 @@ Contains:
|
||||
slowdown = 0
|
||||
strip_delay = 130
|
||||
resistance_flags = ACID_PROOF
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//ERT Security
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/sec
|
||||
@@ -198,7 +200,6 @@ Contains:
|
||||
icon_state = "ert_security"
|
||||
item_state = "ert_security"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/sec
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//ERT Engineering
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/engi
|
||||
@@ -212,7 +213,6 @@ Contains:
|
||||
icon_state = "ert_engineer"
|
||||
item_state = "ert_engineer"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/engi
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//ERT Medical
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/med
|
||||
@@ -227,8 +227,73 @@ Contains:
|
||||
item_state = "ert_medical"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/med
|
||||
species_exception = list(/datum/species/angel)
|
||||
|
||||
//Red alert ERT
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/alert
|
||||
name = "emergency response unit helmet"
|
||||
desc = "Red alert command helmet for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "hardsuit0-ert_commander-alert"
|
||||
item_state = "hardsuit0-ert_commander-alert"
|
||||
item_color = "ert_commander-alert"
|
||||
armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
strip_delay = 130
|
||||
item_flags = NODROP
|
||||
brightness_on = 8
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/alert
|
||||
name = "emergency response team suit"
|
||||
desc = "Red alert command suit for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "ert_command-alert"
|
||||
item_state = "ert_command-alert"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert
|
||||
allowed = list(/obj/item/gun, /obj/item/ammo_box, /obj/item/ammo_casing, /obj/item/melee/baton, /obj/item/restraints/handcuffs, /obj/item/tank/internals)
|
||||
armor = list("melee" = 70, "bullet" = 55, "laser" = 50, "energy" = 50, "bomb" = 65, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100)
|
||||
strip_delay = 130
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
tauric = TRUE //Citadel Add for tauric hardsuits
|
||||
|
||||
//ERT Security
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec
|
||||
desc = "Red alert security helmet for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "hardsuit0-ert_security-alert"
|
||||
item_state = "hardsuit0-ert_security-alert"
|
||||
item_color = "ert_security-alert"
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/alert/sec
|
||||
desc = "Red alert security suit for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "ert_security-alert"
|
||||
item_state = "ert_security-alert"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/sec
|
||||
|
||||
//ERT Engineering
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/engi
|
||||
desc = "Red alert engineer helmet for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "hardsuit0-ert_engineer-alert"
|
||||
item_state = "hardsuit0-ert_engineer-alert"
|
||||
item_color = "ert_engineer-alert"
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/alert/engi
|
||||
desc = "Red alert engineer suit for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "ert_engineer-alert"
|
||||
item_state = "ert_engineer-alert"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/engi
|
||||
|
||||
//ERT Medical
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
|
||||
desc = "Red alert medical helmet for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "hardsuit0-ert_medical-alert"
|
||||
item_state = "hardsuit0-ert_medical-alert"
|
||||
item_color = "ert_medical-alert"
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/ert/alert/med
|
||||
desc = "Red alert medical suit for the ERT. This one is more armored than its standard version."
|
||||
icon_state = "ert_medical-alert"
|
||||
item_state = "ert_medical-alert"
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ert/alert/med
|
||||
species_exception = list(/datum/species/angel)
|
||||
|
||||
/obj/item/clothing/suit/space/eva
|
||||
name = "EVA suit"
|
||||
icon_state = "space"
|
||||
@@ -280,7 +345,6 @@ Contains:
|
||||
item_flags = NODROP
|
||||
mutantrace_variation = NO_MUTANTRACE_VARIATION
|
||||
|
||||
|
||||
/obj/item/clothing/suit/space/hardsuit/carp
|
||||
name = "carp space suit"
|
||||
desc = "A slimming piece of dubious space carp technology, you suspect it won't stand up to hand-to-hand blows."
|
||||
@@ -291,7 +355,6 @@ Contains:
|
||||
allowed = list(/obj/item/tank/internals, /obj/item/gun/ballistic/automatic/speargun) //I'm giving you a hint here
|
||||
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/carp
|
||||
|
||||
|
||||
/obj/item/clothing/head/helmet/space/hardsuit/ert/paranormal
|
||||
name = "paranormal response unit helmet"
|
||||
desc = "A helmet worn by those who deal with paranormal threats for a living."
|
||||
|
||||
@@ -36,7 +36,7 @@
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
dimension_x = 64
|
||||
else if(H.dna.features["taur"] in list("Fox","Wolf","Otie","Drake","Lab","Shepherd","Husky","Eevee","Panther","Horse","Cow","Tiger"))
|
||||
else if(H.dna.features["taur"] in list("Fox","Wolf","Otie","Drake","Lab","Shepherd","Husky","Eevee","Panther","Horse","Cow","Tiger","Deer"))
|
||||
taurmode = PAW_TAURIC
|
||||
if(tauric == TRUE)
|
||||
center = TRUE
|
||||
|
||||
@@ -24,11 +24,11 @@
|
||||
ToggleHood()
|
||||
|
||||
/obj/item/clothing/suit/hooded/item_action_slot_check(slot, mob/user)
|
||||
if(slot == SLOT_WEAR_SUIT)
|
||||
if(slot == SLOT_WEAR_SUIT || slot == SLOT_NECK)
|
||||
return 1
|
||||
|
||||
/obj/item/clothing/suit/hooded/equipped(mob/user, slot)
|
||||
if(slot != SLOT_WEAR_SUIT)
|
||||
if(slot != SLOT_WEAR_SUIT && slot != SLOT_NECK)
|
||||
RemoveHood()
|
||||
..()
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
var/category = CAT_NONE //where it shows up in the crafting UI
|
||||
var/subcategory = CAT_NONE
|
||||
|
||||
|
||||
/datum/crafting_recipe/pin_removal
|
||||
name = "Pin Removal"
|
||||
result = /obj/item/gun
|
||||
@@ -54,6 +53,18 @@
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/makeshiftshield
|
||||
name = "Makeshift Metal Shield"
|
||||
result = /obj/item/shield/makeshift
|
||||
reqs = list(/obj/item/stack/cable_coil = 30,
|
||||
/obj/item/stack/sheet/metal = 10,
|
||||
/obj/item/stack/sheet/cloth = 2,
|
||||
/obj/item/stack/sheet/leather = 3)
|
||||
tools = list(TOOL_WELDER, TOOL_SCREWDRIVER, TOOL_WIRECUTTER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/molotov
|
||||
name = "Molotov"
|
||||
result = /obj/item/reagent_containers/food/drinks/bottle/molotov
|
||||
@@ -312,6 +323,18 @@
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/irifle
|
||||
name = "Improvised Rifle(7.62mm)"
|
||||
result = /obj/item/gun/ballistic/shotgun/boltaction/improvised
|
||||
reqs = list(/obj/item/weaponcrafting/receiver = 1,
|
||||
/obj/item/pipe = 2,
|
||||
/obj/item/weaponcrafting/stock = 1,
|
||||
/obj/item/stack/packageWrap = 5)
|
||||
tools = list(TOOL_SCREWDRIVER)
|
||||
time = 100
|
||||
category = CAT_WEAPONRY
|
||||
subcategory = CAT_WEAPON
|
||||
|
||||
/datum/crafting_recipe/chainsaw
|
||||
name = "Chainsaw"
|
||||
result = /obj/item/twohanded/required/chainsaw
|
||||
@@ -395,7 +418,6 @@
|
||||
reqs = list(/obj/item/paper = 5)
|
||||
category = CAT_MISC
|
||||
|
||||
|
||||
/datum/crafting_recipe/flashlight_eyes
|
||||
name = "Flashlight Eyes"
|
||||
result = /obj/item/organ/eyes/robotic/flashlight
|
||||
@@ -611,7 +633,6 @@
|
||||
/obj/item/assembly/igniter = 1)
|
||||
category = CAT_MISC
|
||||
|
||||
|
||||
/datum/crafting_recipe/rcl
|
||||
name = "Makeshift Rapid Cable Layer"
|
||||
result = /obj/item/twohanded/rcl/ghetto
|
||||
@@ -735,7 +756,10 @@
|
||||
name = "Improvised Jetpack"
|
||||
result = /obj/item/tank/jetpack/improvised
|
||||
time = 30
|
||||
reqs = list(/obj/item/tank/internals/oxygen = 2, /obj/item/extinguisher = 1, /obj/item/pipe = 3, /obj/item/stack/cable_coil = 30)//red oxygen tank so it looks right
|
||||
reqs = list(/obj/item/tank/internals/oxygen = 2,
|
||||
/obj/item/extinguisher = 1,
|
||||
/obj/item/pipe = 3,
|
||||
/obj/item/stack/cable_coil = 30)
|
||||
category = CAT_MISC
|
||||
tools = list(TOOL_WRENCH, TOOL_WELDER, TOOL_WIRECUTTER)
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@
|
||||
|
||||
var/mob/living/carbon/human/H = target
|
||||
var/headarmor = 0 // Target's head armor
|
||||
armor_block = H.run_armor_check(affecting, "melee","","",armour_penetration) // For normal attack damage
|
||||
armor_block = H.run_armor_check(affecting, "melee", null, null,armour_penetration) // For normal attack damage
|
||||
|
||||
//If they have a hat/helmet and the user is targeting their head.
|
||||
if(istype(H.head, /obj/item/clothing/head) && affecting == BODY_ZONE_HEAD)
|
||||
|
||||
@@ -108,9 +108,9 @@ All foods are distributed among various categories. Use common sense.
|
||||
else if(fullness > 150 && fullness < 500)
|
||||
user.visible_message("<span class='notice'>[user] takes a [eatverb] from \the [src].</span>", "<span class='notice'>You take a [eatverb] from \the [src].</span>")
|
||||
else if(fullness > 500 && fullness < 600)
|
||||
user.visible_message("<span class='notice'>[user] unwillingly takes a [eatverb] of a bit of \the [src].</span>", "<span class='notice'>You unwillingly take a [eatverb] of a bit of \the [src].</span>")
|
||||
user.visible_message("<span class='notice'>[user] unwillingly takes a [eatverb] of a bit of \the [src].</span>", "<span class='warning'>You unwillingly take a [eatverb] of a bit of \the [src].</span>")
|
||||
else if(fullness > (600 * (1 + M.overeatduration / 2000))) // The more you eat - the more you can eat
|
||||
user.visible_message("<span class='warning'>[user] cannot force any more of \the [src] to go down [user.p_their()] throat!</span>", "<span class='warning'>You cannot force any more of \the [src] to go down your throat!</span>")
|
||||
user.visible_message("<span class='warning'>[user] cannot force any more of \the [src] to go down [user.p_their()] throat!</span>", "<span class='danger'>You cannot force any more of \the [src] to go down your throat!</span>")
|
||||
return 0
|
||||
if(M.has_trait(TRAIT_VORACIOUS))
|
||||
M.changeNext_move(CLICK_CD_MELEE * 0.5) //nom nom nom
|
||||
|
||||
@@ -203,7 +203,7 @@
|
||||
list_reagents = list("nutriment" = 1)
|
||||
filling_color = "#F0E68C"
|
||||
tastes = list("cookie" = 1)
|
||||
foodtype = GRAIN | SUGAR
|
||||
foodtype = SUGAR
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/donkpocket
|
||||
name = "\improper Donk-pocket"
|
||||
|
||||
@@ -62,6 +62,28 @@
|
||||
/obj/item/reagent_containers/food/snacks/pie/cream/nostun
|
||||
stunning = FALSE
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/cream/body
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/cream/body/Destroy()
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/A in contents)
|
||||
A.forceMove(T)
|
||||
A.throw_at(T, 1, 1)
|
||||
. = ..()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/cream/body/On_Consume(mob/living/carbon/M)
|
||||
if(!reagents.total_volume) //so that it happens on the last bite
|
||||
if(iscarbon(M) && contents.len)
|
||||
var/turf/T = get_turf(src)
|
||||
for(var/atom/movable/A in contents)
|
||||
A.forceMove(T)
|
||||
A.throw_at(T, 1, 1)
|
||||
M.visible_message("[src] bursts out of [M]!</span>")
|
||||
M.emote("scream")
|
||||
M.Knockdown(40)
|
||||
M.adjustBruteLoss(60)
|
||||
return ..()
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/pie/berryclafoutis
|
||||
name = "berry clafoutis"
|
||||
desc = "No black birds, this is a good sign."
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
// Save modified name
|
||||
if(initial(name) != name)
|
||||
assembly_params["name"] = name
|
||||
|
||||
|
||||
// Save modified description
|
||||
if(initial(desc) != desc)
|
||||
assembly_params["desc"] = desc
|
||||
@@ -144,7 +144,7 @@
|
||||
return "Bad assembly name."
|
||||
if(assembly_params["desc"] && !reject_bad_text(assembly_params["desc"]))
|
||||
return "Bad assembly description."
|
||||
if(assembly_params["detail_color"] && !(assembly_params["detail_color"] in color_whitelist))
|
||||
if(assembly_params["detail_color"] && !reject_bad_text(assembly_params["detail_color"], 7))
|
||||
return "Bad assembly color."
|
||||
|
||||
// Loads assembly parameters from a list
|
||||
@@ -153,7 +153,7 @@
|
||||
// Load modified name, if any.
|
||||
if(assembly_params["name"])
|
||||
name = assembly_params["name"]
|
||||
|
||||
|
||||
// Load modified description, if any.
|
||||
if(assembly_params["desc"])
|
||||
desc = assembly_params["desc"]
|
||||
|
||||
@@ -215,7 +215,7 @@
|
||||
The 'fire' activator will cause the mechanism to attempt to launch objects at the coordinates, if possible. Note that the \
|
||||
projectile needs to be inside the machine, or on an adjacent tile, and must be medium sized or smaller. The assembly \
|
||||
must also be a gun if you wish to launch something while the assembly is in hand."
|
||||
complexity = 75
|
||||
complexity = 50
|
||||
w_class = WEIGHT_CLASS_SMALL
|
||||
size = 4
|
||||
cooldown_per_use = 30
|
||||
@@ -306,7 +306,7 @@
|
||||
desc = "Used to stun a target holding the device via electricity."
|
||||
icon_state = "power_relay"
|
||||
extended_desc = "Attempts to stun the holder of this device, with the strength input being the strength of the stun, from 1 to 70."
|
||||
complexity = 60
|
||||
complexity = 30
|
||||
size = 4
|
||||
inputs = list("strength" = IC_PINTYPE_NUMBER)
|
||||
activators = list("stun" = IC_PINTYPE_PULSE_IN, "on success" = IC_PINTYPE_PULSE_OUT, "on fail" = IC_PINTYPE_PULSE_OUT)
|
||||
@@ -340,4 +340,4 @@
|
||||
var/mob/living/carbon/human/H = L
|
||||
H.forcesay(GLOB.hit_appends)
|
||||
|
||||
return 1
|
||||
return 1
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
ask_verb = "warbles"
|
||||
exclaim_verb = "warbles"
|
||||
key = "k"
|
||||
flags = TONGUELESS_SPEECH
|
||||
syllables = list("qr","qrr","xuq","qil","quum","xuqm","vol","xrim","zaoo","qu-uu","qix","qoo","zix","*","!")
|
||||
default_priority = 70
|
||||
|
||||
|
||||
@@ -8,10 +8,10 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/mining_righthand.dmi'
|
||||
desc = "A handheld device that creates small fields of energy that resonate until they detonate, crushing rock. It does increased damage in low pressure."
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
force = 15
|
||||
force = 18
|
||||
throwforce = 10
|
||||
var/burst_time = 30
|
||||
var/fieldlimit = 4
|
||||
var/fieldlimit = 6
|
||||
var/list/fields = list()
|
||||
var/quick_burst_mod = 0.8
|
||||
|
||||
@@ -20,7 +20,8 @@
|
||||
desc = "An upgraded version of the resonator that can produce more fields at once, as well as having no damage penalty for bursting a resonance field early."
|
||||
icon_state = "resonator_u"
|
||||
item_state = "resonator_u"
|
||||
fieldlimit = 6
|
||||
force = 20
|
||||
fieldlimit = 8
|
||||
quick_burst_mod = 1
|
||||
|
||||
/obj/item/resonator/attack_self(mob/user)
|
||||
|
||||
@@ -78,7 +78,7 @@
|
||||
name = "Boxer Briefs - Black"
|
||||
icon_state = "boxer_briefs_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_pink
|
||||
/datum/sprite_accessory/underwear/female_pinkalt
|
||||
name = "Boxer Briefs - Pink"
|
||||
icon_state = "boxer_briefs_pink"
|
||||
|
||||
@@ -95,6 +95,10 @@
|
||||
name = "Panties - Black"
|
||||
icon_state = "panties_black"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_pink
|
||||
name = "Panties - Pink"
|
||||
icon_state = "panties_pink"
|
||||
|
||||
/datum/sprite_accessory/underwear/female_blue
|
||||
name = "Panties - Blue"
|
||||
icon_state = "panties_blue"
|
||||
|
||||
@@ -260,7 +260,7 @@
|
||||
else
|
||||
return
|
||||
|
||||
if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator)) //placing an item into the pocket is 4 times faster
|
||||
if(do_mob(usr, src, POCKET_STRIP_DELAY/delay_denominator, ignorehelditem = TRUE)) //placing an item into the pocket is 4 times faster
|
||||
if(pocket_item)
|
||||
if(pocket_item == (pocket_id == SLOT_R_STORE ? r_store : l_store)) //item still in the pocket we search
|
||||
dropItemToGround(pocket_item)
|
||||
|
||||
@@ -256,7 +256,7 @@
|
||||
var/obj/item/bodypart/affecting = get_bodypart(ran_zone(M.zone_selected))
|
||||
if(!affecting)
|
||||
affecting = get_bodypart(BODY_ZONE_CHEST)
|
||||
var/armor_block = run_armor_check(affecting, "melee","","",10)
|
||||
var/armor_block = run_armor_check(affecting, "melee", null, null,10)
|
||||
|
||||
playsound(loc, 'sound/weapons/slice.ogg', 25, 1, -1)
|
||||
visible_message("<span class='danger'>[M] has slashed at [src]!</span>", \
|
||||
|
||||
@@ -1475,9 +1475,9 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
else if(aim_for_mouth && ( target_on_help || target_restrained || target_aiming_for_mouth))
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] slaps [target] in the face!</span>",
|
||||
"<span class='notice'>You slap [user == target ? "yourself" : target] in the face! </span>",\
|
||||
user.visible_message(\
|
||||
"<span class='danger'>\The [user] slaps \the [target] in the face!</span>",\
|
||||
"<span class='notice'>You slap [user == target ? "yourself" : "\the [target]"] in the face! </span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
@@ -1486,20 +1486,37 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
return FALSE
|
||||
else if(aim_for_groin && (target == user || target.lying || same_dir) && (target_on_help || target_restrained || target_aiming_for_groin))
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
if(target.has_trait(TRAIT_ASSBLASTUSA))
|
||||
var/hit_zone = (user.held_index_to_dir(user.active_hand_index) == "l" ? "l_":"r_") + "arm"
|
||||
user.adjustStaminaLoss(50, affected_zone = hit_zone)
|
||||
var/obj/item/bodypart/affecting = user.get_bodypart(hit_zone)
|
||||
if(affecting)
|
||||
if(affecting.receive_damage(5, 0))
|
||||
user.update_damage_overlays()
|
||||
user.visible_message(\
|
||||
"<span class='danger'>\The [user] slaps \the [target]'s ass, but their hand bounces off like they hit metal!</span>",\
|
||||
"<span class='danger'>You slap [user == target ? "your" : "\the [target]'s"] ass, but feel an intense amount of pain as you realise their buns are harder than steel!</span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
playsound(target.loc, 'sound/weapons/tap.ogg', 50, 1, -1)
|
||||
user.emote("scream")
|
||||
return FALSE
|
||||
|
||||
playsound(target.loc, 'sound/weapons/slap.ogg', 50, 1, -1)
|
||||
user.visible_message(
|
||||
"<span class='danger'>[user] slaps [target]'s ass!</span>",
|
||||
"<span class='notice'>You slap [user == target ? "your" : target + "'s"] ass! </span>",\
|
||||
user.visible_message(\
|
||||
"<span class='danger'>\The [user] slaps \the [target]'s ass!</span>",\
|
||||
"<span class='notice'>You slap [user == target ? "your" : "\the [target]'s"] ass!</span>",\
|
||||
"You hear a slap."
|
||||
)
|
||||
if (target.canbearoused)
|
||||
target.adjustArousalLoss(5)
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_NYMPHO) && target.has_dna())
|
||||
if (target.getArousalLoss() >= 100 && ishuman(target) && target.has_trait(TRAIT_MASO) && target.has_dna())
|
||||
target.mob_climax(forced_climax=TRUE)
|
||||
if (!target.has_trait(TRAIT_NYMPHO))
|
||||
stop_wagging_tail(target)
|
||||
user.do_attack_animation(target, ATTACK_EFFECT_ASS_SLAP)
|
||||
user.adjustStaminaLossBuffered(3)
|
||||
|
||||
return FALSE
|
||||
else if(attacker_style && attacker_style.disarm_act(user,target))
|
||||
return 1
|
||||
@@ -1666,8 +1683,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
|
||||
if(H.stat == CONSCIOUS && H != user && prob(I.force + ((100 - H.health) * 0.5))) // rev deconversion through blunt trauma.
|
||||
var/datum/antagonist/rev/rev = H.mind.has_antag_datum(/datum/antagonist/rev)
|
||||
var/datum/antagonist/gang/gang = H.mind.has_antag_datum(/datum/antagonist/gang/)
|
||||
if(rev)
|
||||
rev.remove_revolutionary(FALSE, user)
|
||||
if(gang)
|
||||
H.mind.remove_antag_datum(/datum/antagonist/gang)
|
||||
|
||||
if(bloody) //Apply blood
|
||||
if(H.wear_mask)
|
||||
@@ -1727,6 +1747,11 @@ GLOBAL_LIST_EMPTY(roundstart_races)
|
||||
if(BP)
|
||||
if(damage > 0 ? BP.receive_damage(damage * hit_percent * brutemod * H.physiology.brute_mod, 0) : BP.heal_damage(abs(damage * hit_percent * brutemod * H.physiology.brute_mod), 0))
|
||||
H.update_damage_overlays()
|
||||
if(H.has_trait(TRAIT_MASO))
|
||||
H.adjustArousalLoss(damage * brutemod * H.physiology.brute_mod)
|
||||
if (H.getArousalLoss() >= 100 && ishuman(H) && H.has_dna())
|
||||
H.mob_climax(forced_climax=TRUE)
|
||||
|
||||
else//no bodypart, we deal damage with a more general method.
|
||||
H.adjustBruteLoss(damage * hit_percent * brutemod * H.physiology.brute_mod)
|
||||
if(BURN)
|
||||
|
||||
@@ -97,6 +97,7 @@
|
||||
brutemod = 0.9
|
||||
|
||||
/datum/species/lizard/ashwalker/on_species_gain(mob/living/carbon/human/C, datum/species/old_species)
|
||||
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
|
||||
C.dna.features["tail"] = "Smooth"
|
||||
if((C.dna.features["spines"] != "None" ) && (C.dna.features["tail_lizard"] == "None")) //tbh, it's kinda ugly for them not to have a tail yet have floating spines
|
||||
C.dna.features["tail_lizard"] = "Smooth"
|
||||
C.update_body()
|
||||
return ..()
|
||||
|
||||
@@ -660,6 +660,8 @@ generate/load female uniform sprites matching all previously decided variables
|
||||
. += "-[BP.dmg_overlay_type]"
|
||||
if(BP.body_markings)
|
||||
. += "-[BP.body_markings]"
|
||||
else
|
||||
. += "-no_marking"
|
||||
|
||||
if(has_trait(TRAIT_HUSK))
|
||||
. += "-husk"
|
||||
|
||||
@@ -103,21 +103,23 @@
|
||||
|
||||
//CIT CHANGES START HERE - makes it so resting stops you from moving through standing folks without a short delay
|
||||
if(resting && !L.resting)
|
||||
if(attemptingcrawl)
|
||||
return TRUE
|
||||
if(getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(src, "<span class='warning'>You're too exhausted to crawl under [L].</span>")
|
||||
return TRUE
|
||||
attemptingcrawl = TRUE
|
||||
var/origtargetloc = L.loc
|
||||
visible_message("<span class='notice'>[src] is attempting to crawl under [L].</span>", "<span class='notice'>You are now attempting to crawl under [L].</span>")
|
||||
if(do_after(src, CRAWLUNDER_DELAY, target = src))
|
||||
if(resting)
|
||||
var/src_passmob = (pass_flags & PASSMOB)
|
||||
pass_flags |= PASSMOB
|
||||
Move(origtargetloc)
|
||||
if(!src_passmob)
|
||||
pass_flags &= ~PASSMOB
|
||||
if(!pulledby)
|
||||
if(attemptingcrawl)
|
||||
return TRUE
|
||||
if(getStaminaLoss() >= STAMINA_SOFTCRIT)
|
||||
to_chat(src, "<span class='warning'>You're too exhausted to crawl under [L].</span>")
|
||||
return TRUE
|
||||
attemptingcrawl = TRUE
|
||||
visible_message("<span class='notice'>[src] is attempting to crawl under [L].</span>", "<span class='notice'>You are now attempting to crawl under [L].</span>")
|
||||
if(!do_after(src, CRAWLUNDER_DELAY, target = src) || !resting)
|
||||
attemptingcrawl = FALSE
|
||||
return TRUE
|
||||
var/src_passmob = (pass_flags & PASSMOB)
|
||||
pass_flags |= PASSMOB
|
||||
Move(origtargetloc)
|
||||
if(!src_passmob)
|
||||
pass_flags &= ~PASSMOB
|
||||
attemptingcrawl = FALSE
|
||||
return TRUE
|
||||
//END OF CIT CHANGES
|
||||
@@ -698,7 +700,7 @@
|
||||
who.visible_message("<span class='danger'>[src] tries to remove [who]'s [what.name].</span>", \
|
||||
"<span class='userdanger'>[src] tries to remove [who]'s [what.name].</span>")
|
||||
what.add_fingerprint(src)
|
||||
if(do_mob(src, who, what.strip_delay))
|
||||
if(do_mob(src, who, what.strip_delay, ignorehelditem = TRUE))
|
||||
if(what && Adjacent(who))
|
||||
if(islist(where))
|
||||
var/list/L = where
|
||||
|
||||
@@ -1,24 +1,18 @@
|
||||
|
||||
/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = null, soften_text = null, armour_penetration, penetrated_text)
|
||||
/mob/living/proc/run_armor_check(def_zone = null, attack_flag = "melee", absorb_text = "Your armor absorbs the blow!", soften_text = "Your armor softens the blow!", armour_penetration, penetrated_text = "Your armor was penetrated!")
|
||||
var/armor = getarmor(def_zone, attack_flag)
|
||||
|
||||
//the if "armor" check is because this is used for everything on /living, including humans
|
||||
if(armor && armour_penetration)
|
||||
armor = max(0, armor - armour_penetration)
|
||||
if(penetrated_text)
|
||||
to_chat(src, "<span class='userdanger'>[penetrated_text]</span>")
|
||||
else
|
||||
to_chat(src, "<span class='userdanger'>Your armor was penetrated!</span>")
|
||||
to_chat(src, "<span class='danger'>[penetrated_text]</span>")
|
||||
else if(armor >= 100)
|
||||
if(absorb_text)
|
||||
to_chat(src, "<span class='userdanger'>[absorb_text]</span>")
|
||||
else
|
||||
to_chat(src, "<span class='userdanger'>Your armor absorbs the blow!</span>")
|
||||
to_chat(src, "<span class='danger'>[absorb_text]</span>")
|
||||
else if(armor > 0)
|
||||
if(soften_text)
|
||||
to_chat(src, "<span class='userdanger'>[soften_text]</span>")
|
||||
else
|
||||
to_chat(src, "<span class='userdanger'>Your armor softens the blow!</span>")
|
||||
to_chat(src, "<span class='danger'>[soften_text]</span>")
|
||||
return armor
|
||||
|
||||
|
||||
@@ -43,7 +37,7 @@
|
||||
return
|
||||
|
||||
/mob/living/bullet_act(obj/item/projectile/P, def_zone)
|
||||
var/armor = run_armor_check(def_zone, P.flag, "","",P.armour_penetration)
|
||||
var/armor = run_armor_check(def_zone, P.flag, null, null, P.armour_penetration, null)
|
||||
if(!P.nodamage)
|
||||
apply_damage(P.damage, P.damage_type, def_zone, armor)
|
||||
if(P.dismemberment)
|
||||
|
||||
@@ -8,9 +8,9 @@
|
||||
set src in usr
|
||||
if(usr != src)
|
||||
usr << "No."
|
||||
var/msg = input(usr,"Set the flavor text in your 'examine' verb. Can also be used for OOC notes about your character.","Flavor Text",html_decode(flavor_text)) as message|null
|
||||
|
||||
if(msg != null)
|
||||
var/msg = stripped_multiline_input(usr, "Set the flavor text in your 'examine' verb. This can also be used for OOC notes and preferences!", "Flavor Text", html_decode(flavor_text), MAX_MESSAGE_LEN*2, TRUE)
|
||||
|
||||
if(!isnull(msg))
|
||||
msg = copytext(msg, 1, MAX_MESSAGE_LEN)
|
||||
msg = html_encode(msg)
|
||||
|
||||
@@ -23,11 +23,12 @@
|
||||
|
||||
/mob/proc/print_flavor_text()
|
||||
if(flavor_text && flavor_text != "")
|
||||
var/msg = replacetext(flavor_text, "\n", " ")
|
||||
// We are decoding and then encoding to not only get correct amount of characters, but also to prevent partial escaping characters being shown.
|
||||
var/msg = html_decode(replacetext(flavor_text, "\n", " "))
|
||||
if(lentext(msg) <= 40)
|
||||
return "<span class='notice'>[msg]</span>"
|
||||
return "<span class='notice'>[html_encode(msg)]</span>"
|
||||
else
|
||||
return "<span class='notice'>[copytext(msg, 1, 37)]... <a href='?src=[REF(src)];flavor_more=1'>More...</span></a>"
|
||||
return "<span class='notice'>[html_encode(copytext(msg, 1, 37))]... <a href='?src=[REF(src)];flavor_more=1'>More...</span></a>"
|
||||
|
||||
/mob/proc/get_top_level_mob()
|
||||
if(istype(src.loc,/mob)&&src.loc!=src)
|
||||
@@ -116,6 +117,73 @@ proc/get_top_level_mob(var/mob/S)
|
||||
message = null
|
||||
emote_type = EMOTE_VISIBLE
|
||||
|
||||
///////////////// SUBTLE 2: NO GHOST BOOGALOO
|
||||
|
||||
/datum/emote/living/subtler
|
||||
key = "subtler"
|
||||
key_third_person = "subtler"
|
||||
message = null
|
||||
mob_type_blacklist_typecache = list(/mob/living/brain)
|
||||
|
||||
|
||||
/datum/emote/living/subtler/proc/check_invalid(mob/user, input)
|
||||
. = TRUE
|
||||
if(copytext(input,1,5) == "says")
|
||||
to_chat(user, "<span class='danger'>Invalid emote.</span>")
|
||||
else if(copytext(input,1,9) == "exclaims")
|
||||
to_chat(user, "<span class='danger'>Invalid emote.</span>")
|
||||
else if(copytext(input,1,6) == "yells")
|
||||
to_chat(user, "<span class='danger'>Invalid emote.</span>")
|
||||
else if(copytext(input,1,5) == "asks")
|
||||
to_chat(user, "<span class='danger'>Invalid emote.</span>")
|
||||
else
|
||||
. = FALSE
|
||||
|
||||
/datum/emote/living/subtler/run_emote(mob/user, params, type_override = null)
|
||||
if(jobban_isbanned(user, "emote"))
|
||||
to_chat(user, "You cannot send subtle emotes (banned).")
|
||||
return FALSE
|
||||
else if(user.client && user.client.prefs.muted & MUTE_IC)
|
||||
to_chat(user, "You cannot send IC messages (muted).")
|
||||
return FALSE
|
||||
else if(!params)
|
||||
var/subtle_emote = copytext(sanitize(input("Choose an emote to display.") as message|null), 1, MAX_MESSAGE_LEN)
|
||||
if(subtle_emote && !check_invalid(user, subtle_emote))
|
||||
var/type = input("Is this a visible or hearable emote?") as null|anything in list("Visible", "Hearable")
|
||||
switch(type)
|
||||
if("Visible")
|
||||
emote_type = EMOTE_VISIBLE
|
||||
if("Hearable")
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
else
|
||||
alert("Unable to use this emote, must be either hearable or visible.")
|
||||
return
|
||||
message = subtle_emote
|
||||
else
|
||||
return FALSE
|
||||
else
|
||||
message = params
|
||||
if(type_override)
|
||||
emote_type = type_override
|
||||
. = TRUE
|
||||
if(!can_run_emote(user))
|
||||
return FALSE
|
||||
|
||||
user.log_message(message, INDIVIDUAL_EMOTE_LOG)
|
||||
message = "<b>[user]</b> " + "<i>[message]</i>"
|
||||
|
||||
for(var/mob/M)
|
||||
if(M in list(/mob/living))
|
||||
M.show_message(message)
|
||||
|
||||
if(emote_type == EMOTE_AUDIBLE)
|
||||
user.audible_message(message=message,hearing_distance=1)
|
||||
else
|
||||
user.visible_message(message=message,self_message=message,vision_distance=1)
|
||||
log_emote("[key_name(user)] : [message]")
|
||||
|
||||
message = null
|
||||
|
||||
///////////////// VERB CODE
|
||||
/mob/living/verb/subtle()
|
||||
set name = "Subtle"
|
||||
@@ -124,3 +192,12 @@ proc/get_top_level_mob(var/mob/S)
|
||||
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
|
||||
return
|
||||
usr.emote("subtle")
|
||||
|
||||
///////////////// VERB CODE 2
|
||||
/mob/living/verb/subtler()
|
||||
set name = "Subtler"
|
||||
set category = "IC"
|
||||
if(GLOB.say_disabled) //This is here to try to identify lag problems
|
||||
to_chat(usr, "<span class='danger'>Speech is currently admin-disabled.</span>")
|
||||
return
|
||||
usr.emote("subtler")
|
||||
|
||||
@@ -295,6 +295,16 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
E.energy = power
|
||||
qdel(src)
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/proc/consume_turf(turf/T)
|
||||
var/oldtype = T.type
|
||||
var/turf/newT = T.ScrapeAway()
|
||||
if(newT.type == oldtype)
|
||||
return
|
||||
playsound(T, 'sound/effects/supermatter.ogg', 50, 1)
|
||||
T.visible_message("<span class='danger'>[T] smacks into [src] and rapidly flashes to ash.</span>",\
|
||||
"<span class='italics'>You hear a loud crack as you are washed with a wave of heat.</span>")
|
||||
T.CalculateAdjacentTurfs()
|
||||
|
||||
/obj/machinery/power/supermatter_crystal/process_atmos()
|
||||
var/turf/T = loc
|
||||
|
||||
@@ -303,6 +313,8 @@ GLOBAL_DATUM(main_supermatter_engine, /obj/machinery/power/supermatter_crystal)
|
||||
|
||||
if(!istype(T)) //We are in a crate or somewhere that isn't turf, if we return to turf resume processing but for now.
|
||||
return //Yeah just stop.
|
||||
if(istype(T, /turf/closed))
|
||||
consume_turf(T)
|
||||
|
||||
if(power)
|
||||
soundloop.volume = min(40, (round(power/100)/50)+1) // 5 +1 volume per 20 power. 2500 power is max
|
||||
|
||||
@@ -6,10 +6,12 @@
|
||||
max_ammo = 5
|
||||
multiload = 1
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/boltaction/improvised
|
||||
max_ammo = 1
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/boltaction/enchanted
|
||||
max_ammo = 1
|
||||
ammo_type = /obj/item/ammo_casing/a762/enchanted
|
||||
|
||||
/obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage
|
||||
ammo_type = /obj/item/ammo_casing/magic/arcane_barrage
|
||||
|
||||
|
||||
@@ -268,8 +268,6 @@
|
||||
empty_alarm()
|
||||
return
|
||||
|
||||
|
||||
|
||||
// L6 SAW //
|
||||
|
||||
/obj/item/gun/ballistic/automatic/l6_saw
|
||||
@@ -292,13 +290,11 @@
|
||||
/obj/item/gun/ballistic/automatic/l6_saw/unrestricted
|
||||
pin = /obj/item/firing_pin
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/l6_saw/examine(mob/user)
|
||||
..()
|
||||
if(cover_open && magazine)
|
||||
to_chat(user, "<span class='notice'>It seems like you could use an <b>empty hand</b> to remove the magazine.</span>")
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/l6_saw/attack_self(mob/user)
|
||||
cover_open = !cover_open
|
||||
to_chat(user, "<span class='notice'>You [cover_open ? "open" : "close"] [src]'s cover.</span>")
|
||||
@@ -308,12 +304,10 @@
|
||||
playsound(user, 'sound/weapons/sawclose.ogg', 60, 1)
|
||||
update_icon()
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/l6_saw/update_icon()
|
||||
icon_state = "l6[cover_open ? "open" : "closed"][magazine ? CEILING(get_ammo(0)/12.5, 1)*25 : "-empty"][suppressed ? "-suppressed" : ""]"
|
||||
item_state = "l6[cover_open ? "openmag" : "closedmag"]"
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/l6_saw/afterattack(atom/target as mob|obj|turf, mob/living/user as mob|obj, flag, params) //what I tried to do here is just add a check to see if the cover is open or not and add an icon_state change because I can't figure out how c-20rs do it with overlays
|
||||
if(cover_open)
|
||||
to_chat(user, "<span class='warning'>[src]'s cover is open! Close it before firing!</span>")
|
||||
@@ -344,8 +338,6 @@
|
||||
return
|
||||
..()
|
||||
|
||||
|
||||
|
||||
// SNIPER //
|
||||
|
||||
/obj/item/gun/ballistic/automatic/sniper_rifle
|
||||
@@ -367,14 +359,12 @@
|
||||
slot_flags = ITEM_SLOT_BACK
|
||||
actions_types = list()
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/sniper_rifle/update_icon()
|
||||
if(magazine)
|
||||
icon_state = "sniper-mag"
|
||||
else
|
||||
icon_state = "sniper"
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/automatic/sniper_rifle/syndicate
|
||||
name = "syndicate sniper rifle"
|
||||
desc = "An illegally modified .50 cal sniper rifle with suppression compatibility. Quickscoping still doesn't work."
|
||||
@@ -403,7 +393,6 @@
|
||||
else
|
||||
icon_state = "surplus-e"
|
||||
|
||||
|
||||
// Laser rifle (rechargeable magazine) //
|
||||
|
||||
/obj/item/gun/ballistic/automatic/laser
|
||||
|
||||
@@ -71,7 +71,6 @@
|
||||
var/obj/item/ammo_casing/AC = magazine.get_round() //load next casing.
|
||||
chambered = AC
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/examine(mob/user)
|
||||
..()
|
||||
if (chambered)
|
||||
@@ -117,6 +116,14 @@
|
||||
knife_x_offset = 27
|
||||
knife_y_offset = 13
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/boltaction/improvised
|
||||
name = "Makeshift 7.62mm Rifle"
|
||||
icon_state = "ishotgun"
|
||||
item_state = "shotgun"
|
||||
desc = "A large zip gun more or less that takes a single 7.62mm bullet"
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/improvised
|
||||
can_bayonet = FALSE
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/boltaction/pump(mob/M)
|
||||
playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1)
|
||||
if(bolt_open)
|
||||
@@ -137,7 +144,6 @@
|
||||
..()
|
||||
to_chat(user, "The bolt is [bolt_open ? "open" : "closed"].")
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/boltaction/enchanted
|
||||
name = "enchanted bolt action rifle"
|
||||
desc = "Careful not to lose your head."
|
||||
@@ -153,10 +159,8 @@
|
||||
icon_state = "arcane_barrage"
|
||||
item_state = "arcane_barrage"
|
||||
can_bayonet = FALSE
|
||||
|
||||
item_flags = NEEDS_PERMIT | DROPDEL
|
||||
flags_1 = NONE
|
||||
|
||||
mag_type = /obj/item/ammo_box/magazine/internal/boltaction/enchanted/arcane_barrage
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/boltaction/enchanted/Initialize()
|
||||
@@ -207,7 +211,6 @@
|
||||
"Slick" = "cshotgun_slick"
|
||||
)
|
||||
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/automatic/combat/compact
|
||||
name = "compact combat shotgun"
|
||||
desc = "A compact version of the semi automatic combat shotgun. For close encounters."
|
||||
@@ -218,7 +221,6 @@
|
||||
"Slick" = "cshotgunc_slick"
|
||||
)
|
||||
|
||||
|
||||
//Dual Feed Shotgun
|
||||
|
||||
/obj/item/gun/ballistic/shotgun/automatic/dual_tube
|
||||
@@ -261,5 +263,4 @@
|
||||
return
|
||||
pump()
|
||||
|
||||
|
||||
// DOUBLE BARRELED SHOTGUN and IMPROVISED SHOTGUN are in revolver.dm
|
||||
|
||||
@@ -424,7 +424,7 @@
|
||||
M.gets_drilled(K.firer)
|
||||
if(modifier)
|
||||
for(var/mob/living/L in range(1, target_turf) - K.firer - target)
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armour_penetration)
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, null, null, K.armour_penetration)
|
||||
L.apply_damage(K.damage*modifier, K.damage_type, K.def_zone, armor)
|
||||
to_chat(L, "<span class='userdanger'>You're struck by a [K.name]!</span>")
|
||||
|
||||
@@ -530,7 +530,7 @@
|
||||
var/kill_modifier = 1
|
||||
if(K.pressure_decrease_active)
|
||||
kill_modifier *= K.pressure_decrease
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, "", "", K.armour_penetration)
|
||||
var/armor = L.run_armor_check(K.def_zone, K.flag, null, null, K.armour_penetration)
|
||||
L.apply_damage(bounties_reaped[L.type]*kill_modifier, K.damage_type, K.def_zone, armor)
|
||||
|
||||
/obj/item/borg/upgrade/modkit/bounty/proc/get_kill(mob/living/L)
|
||||
|
||||
@@ -319,7 +319,7 @@
|
||||
victim.blind_eyes(2)
|
||||
victim.confused = max(M.confused, 3)
|
||||
victim.damageoverlaytemp = 60
|
||||
victim.Knockdown(60)
|
||||
victim.Knockdown(60, override_stamdmg = min(reac_volume * 3, 15))
|
||||
return
|
||||
else if ( eyes_covered ) // Eye cover is better than mouth cover
|
||||
victim.blur_eyes(3)
|
||||
@@ -332,7 +332,7 @@
|
||||
victim.blind_eyes(3)
|
||||
victim.confused = max(M.confused, 6)
|
||||
victim.damageoverlaytemp = 75
|
||||
victim.Knockdown(100)
|
||||
victim.Knockdown(100, override_stamdmg = min(reac_volume * 5, 25))
|
||||
victim.update_damage_hud()
|
||||
|
||||
/datum/reagent/consumable/condensedcapsaicin/on_mob_life(mob/living/carbon/M)
|
||||
|
||||
@@ -18,6 +18,7 @@
|
||||
var/spray_range = 3 //the range of tiles the sprayer will reach when in spray mode.
|
||||
var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode.
|
||||
var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
|
||||
var/spray_delay = 3 //The amount of sleep() delay between each chempuff step.
|
||||
var/can_fill_from_container = TRUE
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 250
|
||||
@@ -64,7 +65,7 @@
|
||||
|
||||
|
||||
/obj/item/reagent_containers/spray/proc/spray(atom/A)
|
||||
var/range = max(min(current_range, get_dist(src, A)), 1)
|
||||
var/range = CLAMP(get_dist(src, A), 1, current_range)
|
||||
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
|
||||
D.create_reagents(amount_per_transfer_from_this)
|
||||
var/puff_reagent_left = range //how many turf, mob or dense objet we can react with before we consider the chem puff consumed
|
||||
@@ -74,7 +75,7 @@
|
||||
else
|
||||
reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
|
||||
D.color = mix_color_from_reagents(D.reagents.reagent_list)
|
||||
var/wait_step = max(round(2+3/range), 2)
|
||||
var/wait_step = max(round(2+ spray_delay * INVERSE(range)), 2)
|
||||
do_spray(A, wait_step, D, range, puff_reagent_left)
|
||||
|
||||
/obj/item/reagent_containers/spray/proc/do_spray(atom/A, wait_step, obj/effect/decal/chempuff/D, range, puff_reagent_left)
|
||||
@@ -166,7 +167,7 @@
|
||||
user.visible_message("<span class='suicide'>[user] decided life was worth living.</span>")
|
||||
return
|
||||
|
||||
//Drying Agent
|
||||
//Drying Agent
|
||||
/obj/item/reagent_containers/spray/drying_agent
|
||||
name = "drying agent spray"
|
||||
desc = "A spray bottle for drying agent."
|
||||
@@ -194,6 +195,7 @@
|
||||
righthand_file = 'icons/mob/inhands/equipment/security_righthand.dmi'
|
||||
volume = 40
|
||||
stream_range = 4
|
||||
spray_delay = 1
|
||||
amount_per_transfer_from_this = 5
|
||||
list_reagents = list("condensedcapsaicin" = 40)
|
||||
|
||||
|
||||
@@ -59,6 +59,14 @@
|
||||
build_path = /obj/item/reagent_containers/food/snacks/monkeycube
|
||||
category = list("initial", "Food")
|
||||
|
||||
/datum/design/smeat
|
||||
name = "Biomass Meat Slab"
|
||||
id = "smeat"
|
||||
build_type = BIOGENERATOR
|
||||
materials = list(MAT_BIOMASS = 175)
|
||||
build_path = /obj/item/reagent_containers/food/snacks/meat/slab/synthmeat
|
||||
category = list("initial", "Food")
|
||||
|
||||
/datum/design/ez_nut
|
||||
name = "E-Z Nutrient"
|
||||
id = "ez_nut"
|
||||
|
||||
@@ -1,305 +0,0 @@
|
||||
///////////////////Computer Boards///////////////////////////////////
|
||||
|
||||
/datum/design/board
|
||||
name = "Computer Design ( NULL ENTRY )"
|
||||
desc = "I promise this doesn't give you syndicate goodies!"
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000)
|
||||
|
||||
/datum/design/board/arcade_battle
|
||||
name = "Computer Design (Battle Arcade Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
|
||||
id = "arcade_battle"
|
||||
build_path = /obj/item/circuitboard/computer/arcade/battle
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/orion_trail
|
||||
name = "Computer Design (Orion Trail Arcade Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
|
||||
id = "arcade_orion"
|
||||
build_path = /obj/item/circuitboard/computer/arcade/orion_trail
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/seccamera
|
||||
name = "Computer Design (Security Camera)"
|
||||
desc = "Allows for the construction of circuit boards used to build security camera computers."
|
||||
id = "seccamera"
|
||||
build_path = /obj/item/circuitboard/computer/security
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/rdcamera
|
||||
name = "Computer Design (Research Monitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build research camera computers."
|
||||
id = "rdcamera"
|
||||
build_path = /obj/item/circuitboard/computer/research
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/xenobiocamera
|
||||
name = "Computer Design (Xenobiology Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build xenobiology camera computers."
|
||||
id = "xenobioconsole"
|
||||
build_path = /obj/item/circuitboard/computer/xenobiology
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/aiupload
|
||||
name = "Computer Design (AI Upload)"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
|
||||
id = "aiupload"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/aiupload
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/borgupload
|
||||
name = "Computer Design (Cyborg Upload)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
|
||||
id = "borgupload"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/borgupload
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/med_data
|
||||
name = "Computer Design (Medical Records)"
|
||||
desc = "Allows for the construction of circuit boards used to build a medical records console."
|
||||
id = "med_data"
|
||||
build_path = /obj/item/circuitboard/computer/med_data
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/operating
|
||||
name = "Computer Design (Operating Computer)"
|
||||
desc = "Allows for the construction of circuit boards used to build an operating computer console."
|
||||
id = "operating"
|
||||
build_path = /obj/item/circuitboard/computer/operating
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/pandemic
|
||||
name = "Computer Design (PanD.E.M.I.C. 2200)"
|
||||
desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console."
|
||||
id = "pandemic"
|
||||
build_path = /obj/item/circuitboard/computer/pandemic
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/scan_console
|
||||
name = "Computer Design (DNA Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new DNA scanning console."
|
||||
id = "scan_console"
|
||||
build_path = /obj/item/circuitboard/computer/scan_consolenew
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/comconsole
|
||||
name = "Computer Design (Communications)"
|
||||
desc = "Allows for the construction of circuit boards used to build a communications console."
|
||||
id = "comconsole"
|
||||
build_path = /obj/item/circuitboard/computer/communications
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY //Honestly should have a bridge techfab for this sometime.
|
||||
|
||||
/datum/design/board/idcardconsole
|
||||
name = "Computer Design (ID Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build an ID computer."
|
||||
id = "idcardconsole"
|
||||
build_path = /obj/item/circuitboard/computer/card
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SECURITY //Honestly should have a bridge techfab for this sometime.
|
||||
|
||||
/datum/design/board/crewconsole
|
||||
name = "Computer Design (Crew monitoring computer)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
|
||||
id = "crewconsole"
|
||||
build_path = /obj/item/circuitboard/computer/crew
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/secdata
|
||||
name = "Computer Design (Security Records Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a security records console."
|
||||
id = "secdata"
|
||||
build_path = /obj/item/circuitboard/computer/secure_data
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/atmosalerts
|
||||
name = "Computer Design (Atmosphere Alert)"
|
||||
desc = "Allows for the construction of circuit boards used to build an atmosphere alert console."
|
||||
id = "atmosalerts"
|
||||
build_path = /obj/item/circuitboard/computer/atmos_alert
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/atmos_control
|
||||
name = "Computer Design (Atmospheric Monitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
|
||||
id = "atmos_control"
|
||||
build_path = /obj/item/circuitboard/computer/atmos_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/robocontrol
|
||||
name = "Computer Design (Robotics Control Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
|
||||
id = "robocontrol"
|
||||
build_path = /obj/item/circuitboard/computer/robotics
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/slot_machine
|
||||
name = "Computer Design (Slot Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new slot machine."
|
||||
id = "slotmachine"
|
||||
build_path = /obj/item/circuitboard/computer/slot_machine
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/powermonitor
|
||||
name = "Computer Design (Power Monitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new power monitor."
|
||||
id = "powermonitor"
|
||||
build_path = /obj/item/circuitboard/computer/powermonitor
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/solarcontrol
|
||||
name = "Computer Design (Solar Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a solar control console."
|
||||
id = "solarcontrol"
|
||||
build_path = /obj/item/circuitboard/computer/solar_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/prisonmanage
|
||||
name = "Computer Design (Prisoner Management Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a prisoner management console."
|
||||
id = "prisonmanage"
|
||||
build_path = /obj/item/circuitboard/computer/prisoner
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/mechacontrol
|
||||
name = "Computer Design (Exosuit Control Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build an exosuit control console."
|
||||
id = "mechacontrol"
|
||||
build_path = /obj/item/circuitboard/computer/mecha_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mechapower
|
||||
name = "Computer Design (Mech Bay Power Control Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a mech bay power control console."
|
||||
id = "mechapower"
|
||||
build_path = /obj/item/circuitboard/computer/mech_bay_power_console
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdconsole
|
||||
name = "Computer Design (R&D Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new R&D console."
|
||||
id = "rdconsole"
|
||||
build_path = /obj/item/circuitboard/computer/rdconsole
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/cargo
|
||||
name = "Computer Design (Supply Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Supply Console."
|
||||
id = "cargo"
|
||||
build_path = /obj/item/circuitboard/computer/cargo
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/cargorequest
|
||||
name = "Computer Design (Supply Request Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Supply Request Console."
|
||||
id = "cargorequest"
|
||||
build_path = /obj/item/circuitboard/computer/cargo/request
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/bounty
|
||||
name = "Computer Design (Bounty Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Bounty Console."
|
||||
id = "bounty"
|
||||
build_path = /obj/item/circuitboard/computer/bounty
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/mining
|
||||
name = "Computer Design (Outpost Status Display)"
|
||||
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
|
||||
id = "mining"
|
||||
build_path = /obj/item/circuitboard/computer/mining
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/comm_monitor
|
||||
name = "Computer Design (Telecommunications Monitoring Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a telecommunications monitor."
|
||||
id = "comm_monitor"
|
||||
build_path = /obj/item/circuitboard/computer/comm_monitor
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/comm_server
|
||||
name = "Computer Design (Telecommunications Server Monitoring Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor."
|
||||
id = "comm_server"
|
||||
build_path = /obj/item/circuitboard/computer/comm_server
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/message_monitor
|
||||
name = "Computer Design (Messaging Monitor Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
|
||||
id = "message_monitor"
|
||||
build_path = /obj/item/circuitboard/computer/message_monitor
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/aifixer
|
||||
name = "Computer Design (AI Integrity Restorer)"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
|
||||
id = "aifixer"
|
||||
build_path = /obj/item/circuitboard/computer/aifixer
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/libraryconsole
|
||||
name = "Computer Design (Library Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new library console."
|
||||
id = "libraryconsole"
|
||||
build_path = /obj/item/circuitboard/computer/libraryconsole
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/apc_control
|
||||
name = "Computer Design (APC Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new APC control console."
|
||||
id = "apc_control"
|
||||
build_path = /obj/item/circuitboard/computer/apc_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/nanite_chamber_control
|
||||
name = "Computer Design (Nanite Chamber Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new nanite chamber control console."
|
||||
id = "nanite_chamber_control"
|
||||
build_path = /obj/item/circuitboard/computer/nanite_chamber_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_cloud_control
|
||||
name = "Computer Design (Nanite Cloud Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new nanite cloud control console."
|
||||
id = "nanite_cloud_control"
|
||||
build_path = /obj/item/circuitboard/computer/nanite_cloud_controller
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -0,0 +1,38 @@
|
||||
///////////////////Computer Boards///////////////////////////////////
|
||||
/datum/design/board
|
||||
name = "Computer Design ( NULL ENTRY )"
|
||||
desc = "A blank compurter board!"
|
||||
build_type = IMPRINTER
|
||||
materials = list(MAT_GLASS = 1000)
|
||||
|
||||
/datum/design/board/arcade_battle
|
||||
name = "Computer Design (Battle Arcade Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new arcade machine."
|
||||
id = "arcade_battle"
|
||||
build_path = /obj/item/circuitboard/computer/arcade/battle
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/orion_trail
|
||||
name = "Computer Design (Orion Trail Arcade Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new Orion Trail machine."
|
||||
id = "arcade_orion"
|
||||
build_path = /obj/item/circuitboard/computer/arcade/orion_trail
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/slot_machine
|
||||
name = "Computer Design (Slot Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new slot machine."
|
||||
id = "slotmachine"
|
||||
build_path = /obj/item/circuitboard/computer/slot_machine
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/libraryconsole
|
||||
name = "Computer Design (Library Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new library console."
|
||||
id = "libraryconsole"
|
||||
build_path = /obj/item/circuitboard/computer/libraryconsole
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
@@ -0,0 +1,35 @@
|
||||
///////////////////
|
||||
///CARGO Boards////
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/cargo
|
||||
name = "Computer Design (Supply Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Supply Console."
|
||||
id = "cargo"
|
||||
build_path = /obj/item/circuitboard/computer/cargo
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/cargorequest
|
||||
name = "Computer Design (Supply Request Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Supply Request Console."
|
||||
id = "cargorequest"
|
||||
build_path = /obj/item/circuitboard/computer/cargo/request
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/bounty
|
||||
name = "Computer Design (Bounty Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Bounty Console."
|
||||
id = "bounty"
|
||||
build_path = /obj/item/circuitboard/computer/bounty
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/mining
|
||||
name = "Computer Design (Outpost Status Display)"
|
||||
desc = "Allows for the construction of circuit boards used to build an outpost status display console."
|
||||
id = "mining"
|
||||
build_path = /obj/item/circuitboard/computer/mining
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SECURITY
|
||||
@@ -0,0 +1,75 @@
|
||||
///////////////////
|
||||
///ENGINE Boards///
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/comm_monitor
|
||||
name = "Computer Design (Telecommunications Monitoring Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a telecommunications monitor."
|
||||
id = "comm_monitor"
|
||||
build_path = /obj/item/circuitboard/computer/comm_monitor
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/comm_server
|
||||
name = "Computer Design (Telecommunications Server Monitoring Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a telecommunication server browser and monitor."
|
||||
id = "comm_server"
|
||||
build_path = /obj/item/circuitboard/computer/comm_server
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/message_monitor
|
||||
name = "Computer Design (Messaging Monitor Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a messaging monitor console."
|
||||
id = "message_monitor"
|
||||
build_path = /obj/item/circuitboard/computer/message_monitor
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/apc_control
|
||||
name = "Computer Design (APC Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new APC control console."
|
||||
id = "apc_control"
|
||||
build_path = /obj/item/circuitboard/computer/apc_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/meteor_console
|
||||
name = "Computer Design (Meteor Satellite Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new Meteor Satellite monitor console."
|
||||
id = "meteor_console"
|
||||
build_path = /obj/item/circuitboard/computer/sat_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/atmosalerts
|
||||
name = "Computer Design (Atmosphere Alert)"
|
||||
desc = "Allows for the construction of circuit boards used to build an atmosphere alert console."
|
||||
id = "atmosalerts"
|
||||
build_path = /obj/item/circuitboard/computer/atmos_alert
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/atmos_control
|
||||
name = "Computer Design (Atmospheric Monitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build an Atmospheric Monitor."
|
||||
id = "atmos_control"
|
||||
build_path = /obj/item/circuitboard/computer/atmos_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/powermonitor
|
||||
name = "Computer Design (Power Monitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new power monitor."
|
||||
id = "powermonitor"
|
||||
build_path = /obj/item/circuitboard/computer/powermonitor
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/solarcontrol
|
||||
name = "Computer Design (Solar Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a solar control console."
|
||||
id = "solarcontrol"
|
||||
build_path = /obj/item/circuitboard/computer/solar_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
@@ -0,0 +1,43 @@
|
||||
///////////////////
|
||||
///MEDICAL Boards//
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/pandemic
|
||||
name = "Computer Design (PanD.E.M.I.C. 2200)"
|
||||
desc = "Allows for the construction of circuit boards used to build a PanD.E.M.I.C. 2200 console."
|
||||
id = "pandemic"
|
||||
build_path = /obj/item/circuitboard/computer/pandemic
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/operating
|
||||
name = "Computer Design (Operating Computer)"
|
||||
desc = "Allows for the construction of circuit boards used to build an operating computer console."
|
||||
id = "operating"
|
||||
build_path = /obj/item/circuitboard/computer/operating
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/scan_console
|
||||
name = "Computer Design (DNA Machine)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new DNA scanning console."
|
||||
id = "scan_console"
|
||||
build_path = /obj/item/circuitboard/computer/scan_consolenew
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/crewconsole
|
||||
name = "Computer Design (Crew monitoring computer)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Crew monitoring computer."
|
||||
id = "crewconsole"
|
||||
build_path = /obj/item/circuitboard/computer/crew
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/med_data
|
||||
name = "Computer Design (Medical Records)"
|
||||
desc = "Allows for the construction of circuit boards used to build a medical records console."
|
||||
id = "med_data"
|
||||
build_path = /obj/item/circuitboard/computer/med_data
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SECURITY
|
||||
@@ -0,0 +1,93 @@
|
||||
///////////////////
|
||||
///SCI Boards//////
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/rdcamera
|
||||
name = "Computer Design (Research Monitor)"
|
||||
desc = "Allows for the construction of circuit boards used to build research camera computers."
|
||||
id = "rdcamera"
|
||||
build_path = /obj/item/circuitboard/computer/research
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/xenobiocamera
|
||||
name = "Computer Design (Xenobiology Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build xenobiology camera computers."
|
||||
id = "xenobioconsole"
|
||||
build_path = /obj/item/circuitboard/computer/xenobiology
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/aiupload
|
||||
name = "Computer Design (AI Upload)"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Upload Console."
|
||||
id = "aiupload"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/aiupload
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/borgupload
|
||||
name = "Computer Design (Cyborg Upload)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cyborg Upload Console."
|
||||
id = "borgupload"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/computer/borgupload
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/robocontrol
|
||||
name = "Computer Design (Robotics Control Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Robotics Control console."
|
||||
id = "robocontrol"
|
||||
build_path = /obj/item/circuitboard/computer/robotics
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mechacontrol
|
||||
name = "Computer Design (Exosuit Control Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build an exosuit control console."
|
||||
id = "mechacontrol"
|
||||
build_path = /obj/item/circuitboard/computer/mecha_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mechapower
|
||||
name = "Computer Design (Mech Bay Power Control Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a mech bay power control console."
|
||||
id = "mechapower"
|
||||
build_path = /obj/item/circuitboard/computer/mech_bay_power_console
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdconsole
|
||||
name = "Computer Design (R&D Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new R&D console."
|
||||
id = "rdconsole"
|
||||
build_path = /obj/item/circuitboard/computer/rdconsole
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_chamber_control
|
||||
name = "Computer Design (Nanite Chamber Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new nanite chamber control console."
|
||||
id = "nanite_chamber_control"
|
||||
build_path = /obj/item/circuitboard/computer/nanite_chamber_control
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_cloud_control
|
||||
name = "Computer Design (Nanite Cloud Control)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new nanite cloud control console."
|
||||
id = "nanite_cloud_control"
|
||||
build_path = /obj/item/circuitboard/computer/nanite_cloud_controller
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/aifixer
|
||||
name = "Computer Design (AI Integrity Restorer)"
|
||||
desc = "Allows for the construction of circuit boards used to build an AI Integrity Restorer."
|
||||
id = "aifixer"
|
||||
build_path = /obj/item/circuitboard/computer/aifixer
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -0,0 +1,43 @@
|
||||
///////////////////
|
||||
///SECURITY Boards/
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/seccamera
|
||||
name = "Computer Design (Security Camera)"
|
||||
desc = "Allows for the construction of circuit boards used to build security camera computers."
|
||||
id = "seccamera"
|
||||
build_path = /obj/item/circuitboard/computer/security
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/secdata
|
||||
name = "Computer Design (Security Records Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a security records console."
|
||||
id = "secdata"
|
||||
build_path = /obj/item/circuitboard/computer/secure_data
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/prisonmanage
|
||||
name = "Computer Design (Prisoner Management Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a prisoner management console."
|
||||
id = "prisonmanage"
|
||||
build_path = /obj/item/circuitboard/computer/prisoner
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY
|
||||
|
||||
/datum/design/board/comconsole
|
||||
name = "Computer Design (Communications)"
|
||||
desc = "Allows for the construction of circuit boards used to build a communications console."
|
||||
id = "comconsole"
|
||||
build_path = /obj/item/circuitboard/computer/communications
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_ENGINEERING //Honestly should have a bridge techfab for this sometime.
|
||||
|
||||
/datum/design/board/idcardconsole
|
||||
name = "Computer Design (ID Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build an ID computer."
|
||||
id = "idcardconsole"
|
||||
build_path = /obj/item/circuitboard/computer/card
|
||||
category = list("Computer Boards")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_ENGINEERING //Honestly should have a bridge techfab for this sometime.
|
||||
@@ -1,572 +0,0 @@
|
||||
////////////////////////////////////////
|
||||
//////////////MISC Boards///////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
/datum/design/board/smes
|
||||
name = "Machine Design (SMES Board)"
|
||||
desc = "The circuit board for a SMES."
|
||||
id = "smes"
|
||||
build_path = /obj/item/circuitboard/machine/smes
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/circulator
|
||||
name = "Machine Design (Circulator Board)"
|
||||
desc = "The circuit board for a circulator."
|
||||
id = "circulator"
|
||||
build_path = /obj/item/circuitboard/machine/circulator
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/teg
|
||||
name = "Machine Design (TEG Board)"
|
||||
desc = "The circuit board for a TEG."
|
||||
id = "teg"
|
||||
build_path = /obj/item/circuitboard/machine/generator
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/announcement_system
|
||||
name = "Machine Design (Automated Announcement System Board)"
|
||||
desc = "The circuit board for an automated announcement system."
|
||||
id = "automated_announcement"
|
||||
build_path = /obj/item/circuitboard/machine/announcement_system
|
||||
category = list("Subspace Telecomms")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/turbine_computer
|
||||
name = "Computer Design (Power Turbine Console Board)"
|
||||
desc = "The circuit board for a power turbine console."
|
||||
id = "power_turbine_console"
|
||||
build_path = /obj/item/circuitboard/computer/turbine_computer
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/emitter
|
||||
name = "Machine Design (Emitter Board)"
|
||||
desc = "The circuit board for an emitter."
|
||||
id = "emitter"
|
||||
build_path = /obj/item/circuitboard/machine/emitter
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/power_compressor
|
||||
name = "Machine Design (Power Compressor Board)"
|
||||
desc = "The circuit board for a power compressor."
|
||||
id = "power_compressor"
|
||||
build_path = /obj/item/circuitboard/machine/power_compressor
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/power_turbine
|
||||
name = "Machine Design (Power Turbine Board)"
|
||||
desc = "The circuit board for a power turbine."
|
||||
id = "power_turbine"
|
||||
build_path = /obj/item/circuitboard/machine/power_turbine
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/thermomachine
|
||||
name = "Machine Design (Freezer/Heater Board)"
|
||||
desc = "The circuit board for a freezer/heater."
|
||||
id = "thermomachine"
|
||||
build_path = /obj/item/circuitboard/machine/thermomachine
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/space_heater
|
||||
name = "Machine Design (Space Heater Board)"
|
||||
desc = "The circuit board for a space heater."
|
||||
id = "space_heater"
|
||||
build_path = /obj/item/circuitboard/machine/space_heater
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = ALL
|
||||
|
||||
/datum/design/board/teleport_station
|
||||
name = "Machine Design (Teleportation Station Board)"
|
||||
desc = "The circuit board for a teleportation station."
|
||||
id = "tele_station"
|
||||
build_path = /obj/item/circuitboard/machine/teleporter_station
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/teleport_hub
|
||||
name = "Machine Design (Teleportation Hub Board)"
|
||||
desc = "The circuit board for a teleportation hub."
|
||||
id = "tele_hub"
|
||||
build_path = /obj/item/circuitboard/machine/teleporter_hub
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/quantumpad
|
||||
name = "Machine Design (Quantum Pad Board)"
|
||||
desc = "The circuit board for a quantum telepad."
|
||||
id = "quantumpad"
|
||||
build_path = /obj/item/circuitboard/machine/quantumpad
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/launchpad
|
||||
name = "Machine Design (Bluespace Launchpad Board)"
|
||||
desc = "The circuit board for a bluespace Launchpad."
|
||||
id = "launchpad"
|
||||
build_path = /obj/item/circuitboard/machine/launchpad
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/launchpad_console
|
||||
name = "Machine Design (Bluespace Launchpad Console Board)"
|
||||
desc = "The circuit board for a bluespace launchpad Console."
|
||||
id = "launchpad_console"
|
||||
build_path = /obj/item/circuitboard/computer/launchpad_console
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/teleconsole
|
||||
name = "Computer Design (Teleporter Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a teleporter control console."
|
||||
id = "teleconsole"
|
||||
build_path = /obj/item/circuitboard/computer/teleporter
|
||||
category = list("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/sleeper
|
||||
name = "Machine Design (Sleeper Board)"
|
||||
desc = "The circuit board for a sleeper."
|
||||
id = "sleeper"
|
||||
build_path = /obj/item/circuitboard/machine/sleeper
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/vr_sleeper
|
||||
name = "Machine Design (VR Sleeper Board)"
|
||||
desc = "The circuit board for a VR sleeper."
|
||||
id = "vr_sleeper"
|
||||
build_path = /obj/item/circuitboard/machine/vr_sleeper
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/cryotube
|
||||
name = "Machine Design (Cryotube Board)"
|
||||
desc = "The circuit board for a cryotube."
|
||||
id = "cryotube"
|
||||
build_path = /obj/item/circuitboard/machine/cryo_tube
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/chem_dispenser
|
||||
name = "Machine Design (Portable Chem Dispenser Board)"
|
||||
desc = "The circuit board for a portable chem dispenser."
|
||||
id = "chem_dispenser"
|
||||
build_path = /obj/item/circuitboard/machine/chem_dispenser
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/chem_master
|
||||
name = "Machine Design (Chem Master Board)"
|
||||
desc = "The circuit board for a Chem Master 3000."
|
||||
id = "chem_master"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
|
||||
build_path = /obj/item/circuitboard/machine/chem_master
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/chem_heater
|
||||
name = "Machine Design (Chemical Heater Board)"
|
||||
desc = "The circuit board for a chemical heater."
|
||||
id = "chem_heater"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_MEDICAL
|
||||
build_path = /obj/item/circuitboard/machine/chem_heater
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/smoke_machine
|
||||
name = "Machine Design (Smoke Machine)"
|
||||
desc = "The circuit board for a smoke machine."
|
||||
id = "smoke_machine"
|
||||
build_path = /obj/item/circuitboard/machine/smoke_machine
|
||||
category = list ("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/reagentgrinder
|
||||
name = "Machine Design (All-In-One Grinder)"
|
||||
desc = "The circuit board for an All-In-One Grinder."
|
||||
id = "reagentgrinder"
|
||||
build_path = /obj/item/circuitboard/machine/reagentgrinder
|
||||
category = list ("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/clonecontrol
|
||||
name = "Computer Design (Cloning Machine Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console."
|
||||
id = "clonecontrol"
|
||||
build_path = /obj/item/circuitboard/computer/cloning
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/clonepod
|
||||
name = "Machine Design (Clone Pod)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
|
||||
id = "clonepod"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
build_path = /obj/item/circuitboard/machine/clonepod
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/clonescanner
|
||||
name = "Machine Design (Cloning Scanner)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cloning Scanner."
|
||||
id = "clonescanner"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
build_path = /obj/item/circuitboard/machine/clonescanner
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/biogenerator
|
||||
name = "Machine Design (Biogenerator Board)"
|
||||
desc = "The circuit board for a biogenerator."
|
||||
id = "biogenerator"
|
||||
build_path = /obj/item/circuitboard/machine/biogenerator
|
||||
category = list ("Hydroponics Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/hydroponics
|
||||
name = "Machine Design (Hydroponics Tray Board)"
|
||||
desc = "The circuit board for a hydroponics tray."
|
||||
id = "hydro_tray"
|
||||
build_path = /obj/item/circuitboard/machine/hydroponics
|
||||
category = list ("Hydroponics Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/destructive_analyzer
|
||||
name = "Machine Design (Destructive Analyzer Board)"
|
||||
desc = "The circuit board for a destructive analyzer."
|
||||
id = "destructive_analyzer"
|
||||
build_path = /obj/item/circuitboard/machine/destructive_analyzer
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/experimentor
|
||||
name = "Machine Design (E.X.P.E.R.I-MENTOR Board)"
|
||||
desc = "The circuit board for an E.X.P.E.R.I-MENTOR."
|
||||
id = "experimentor"
|
||||
build_path = /obj/item/circuitboard/machine/experimentor
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/protolathe
|
||||
name = "Machine Design (Protolathe Board)"
|
||||
desc = "The circuit board for a protolathe."
|
||||
id = "protolathe"
|
||||
build_path = /obj/item/circuitboard/machine/protolathe
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/circuit_imprinter
|
||||
name = "Machine Design (Circuit Imprinter Board)"
|
||||
desc = "The circuit board for a circuit imprinter."
|
||||
id = "circuit_imprinter"
|
||||
build_path = /obj/item/circuitboard/machine/circuit_imprinter
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdservercontrol
|
||||
name = "Computer Design (R&D Server Control Console Board)"
|
||||
desc = "The circuit board for an R&D Server Control Console."
|
||||
id = "rdservercontrol"
|
||||
build_path = /obj/item/circuitboard/computer/rdservercontrol
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdserver
|
||||
name = "Machine Design (R&D Server Board)"
|
||||
desc = "The circuit board for an R&D Server."
|
||||
id = "rdserver"
|
||||
build_path = /obj/item/circuitboard/machine/rdserver
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mechfab
|
||||
name = "Machine Design (Exosuit Fabricator Board)"
|
||||
desc = "The circuit board for an Exosuit Fabricator."
|
||||
id = "mechfab"
|
||||
build_path = /obj/item/circuitboard/machine/mechfab
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/cyborgrecharger
|
||||
name = "Machine Design (Cyborg Recharger Board)"
|
||||
desc = "The circuit board for a Cyborg Recharger."
|
||||
id = "cyborgrecharger"
|
||||
build_path = /obj/item/circuitboard/machine/cyborgrecharger
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mech_recharger
|
||||
name = "Machine Design (Mechbay Recharger Board)"
|
||||
desc = "The circuit board for a Mechbay Recharger."
|
||||
id = "mech_recharger"
|
||||
build_path = /obj/item/circuitboard/machine/mech_recharger
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_chamber
|
||||
name = "Machine Design (Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Nanite Chamber."
|
||||
id = "nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/public_nanite_chamber
|
||||
name = "Machine Design (Public Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Public Nanite Chamber."
|
||||
id = "public_nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/public_nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_programmer
|
||||
name = "Machine Design (Nanite Programmer Board)"
|
||||
desc = "The circuit board for a Nanite Programmer."
|
||||
id = "nanite_programmer"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_programmer
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_program_hub
|
||||
name = "Machine Design (Nanite Program Hub Board)"
|
||||
desc = "The circuit board for a Nanite Program Hub."
|
||||
id = "nanite_program_hub"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_program_hub
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/microwave
|
||||
name = "Machine Design (Microwave Board)"
|
||||
desc = "The circuit board for a microwave."
|
||||
id = "microwave"
|
||||
build_path = /obj/item/circuitboard/machine/microwave
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/gibber
|
||||
name = "Machine Design (Gibber Board)"
|
||||
desc = "The circuit board for a gibber."
|
||||
id = "gibber"
|
||||
build_path = /obj/item/circuitboard/machine/gibber
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/smartfridge
|
||||
name = "Machine Design (Smartfridge Board)"
|
||||
desc = "The circuit board for a smartfridge."
|
||||
id = "smartfridge"
|
||||
build_path = /obj/item/circuitboard/machine/smartfridge
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/monkey_recycler
|
||||
name = "Machine Design (Monkey Recycler Board)"
|
||||
desc = "The circuit board for a monkey recycler."
|
||||
id = "monkey_recycler"
|
||||
build_path = /obj/item/circuitboard/machine/monkey_recycler
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/seed_extractor
|
||||
name = "Machine Design (Seed Extractor Board)"
|
||||
desc = "The circuit board for a seed extractor."
|
||||
id = "seed_extractor"
|
||||
build_path = /obj/item/circuitboard/machine/seed_extractor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/processor
|
||||
name = "Machine Design (Food/Slime Processor Board)"
|
||||
desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing."
|
||||
id = "processor"
|
||||
build_path = /obj/item/circuitboard/machine/processor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/soda_dispenser
|
||||
name = "Machine Design (Portable Soda Dispenser Board)"
|
||||
desc = "The circuit board for a portable soda dispenser."
|
||||
id = "soda_dispenser"
|
||||
build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
category = list ("Misc. Machinery")
|
||||
|
||||
/datum/design/board/beer_dispenser
|
||||
name = "Machine Design (Portable Booze Dispenser Board)"
|
||||
desc = "The circuit board for a portable booze dispenser."
|
||||
id = "beer_dispenser"
|
||||
build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
category = list ("Misc. Machinery")
|
||||
|
||||
/datum/design/board/recycler
|
||||
name = "Machine Design (Recycler Board)"
|
||||
desc = "The circuit board for a recycler."
|
||||
id = "recycler"
|
||||
build_path = /obj/item/circuitboard/machine/recycler
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/holopad
|
||||
name = "Machine Design (AI Holopad Board)"
|
||||
desc = "The circuit board for a holopad."
|
||||
id = "holopad"
|
||||
build_path = /obj/item/circuitboard/machine/holopad
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/autolathe
|
||||
name = "Machine Design (Autolathe Board)"
|
||||
desc = "The circuit board for an autolathe."
|
||||
id = "autolathe"
|
||||
build_path = /obj/item/circuitboard/machine/autolathe
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL //Lets be honest here half the maps have public ones.
|
||||
|
||||
/datum/design/board/recharger
|
||||
name = "Machine Design (Weapon Recharger Board)"
|
||||
desc = "The circuit board for a Weapon Recharger."
|
||||
id = "recharger"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/machine/recharger
|
||||
category = list("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/vendor
|
||||
name = "Machine Design (Vendor Board)"
|
||||
desc = "The circuit board for a Vendor."
|
||||
id = "vendor"
|
||||
build_path = /obj/item/circuitboard/machine/vendor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/ore_redemption
|
||||
name = "Machine Design (Ore Redemption Board)"
|
||||
desc = "The circuit board for an Ore Redemption machine."
|
||||
id = "ore_redemption"
|
||||
build_path = /obj/item/circuitboard/machine/ore_redemption
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/mining_equipment_vendor
|
||||
name = "Machine Design (Mining Rewards Vender Board)"
|
||||
desc = "The circuit board for a Mining Rewards Vender."
|
||||
id = "mining_equipment_vendor"
|
||||
build_path = /obj/item/circuitboard/machine/mining_equipment_vendor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/tesla_coil
|
||||
name = "Machine Design (Tesla Coil Board)"
|
||||
desc = "The circuit board for a tesla coil."
|
||||
id = "tesla_coil"
|
||||
build_path = /obj/item/circuitboard/machine/tesla_coil
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rad_collector
|
||||
name = "Machine Design (Radiation Collector Board)"
|
||||
desc = "The circuit board for a radiation collector array."
|
||||
id = "rad_collector"
|
||||
build_path = /obj/item/circuitboard/machine/rad_collector
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/grounding_rod
|
||||
name = "Machine Design (Grounding Rod Board)"
|
||||
desc = "The circuit board for a grounding rod."
|
||||
id = "grounding_rod"
|
||||
build_path = /obj/item/circuitboard/machine/grounding_rod
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/plantgenes
|
||||
name = "Machine Design (Plant DNA Manipulator Board)"
|
||||
desc = "The circuit board for a plant DNA manipulator."
|
||||
id = "plantgenes"
|
||||
build_path = /obj/item/circuitboard/machine/plantgenes
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/ntnet_relay
|
||||
name = "Machine Design (NTNet Relay Board)"
|
||||
desc = "The circuit board for a wireless network relay."
|
||||
id = "ntnet_relay"
|
||||
build_path = /obj/item/circuitboard/machine/ntnet_relay
|
||||
category = list("Subspace Telecomms")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/limbgrower
|
||||
name = "Machine Design (Limb Grower Board)"
|
||||
desc = "The circuit board for a limb grower."
|
||||
id = "limbgrower"
|
||||
build_path = /obj/item/circuitboard/machine/limbgrower
|
||||
category = list("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/harvester
|
||||
name = "Machine Design (Organ Harvester Board)"
|
||||
desc = "The circuit board for an organ harvester."
|
||||
id = "harvester"
|
||||
build_path = /obj/item/circuitboard/machine/harvester
|
||||
category = list("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/deepfryer
|
||||
name = "Machine Design (Deep Fryer)"
|
||||
desc = "The circuit board for a Deep Fryer."
|
||||
id = "deepfryer"
|
||||
build_path = /obj/item/circuitboard/machine/deep_fryer
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/donksofttoyvendor
|
||||
name = "Machine Design (Donksoft Toy Vendor Board)"
|
||||
desc = "The circuit board for a Donksoft Toy Vendor."
|
||||
id = "donksofttoyvendor"
|
||||
build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL //Toys!!
|
||||
|
||||
/datum/design/board/cell_charger
|
||||
name = "Machine Design (Cell Charger Board)"
|
||||
desc = "The circuit board for a cell charger."
|
||||
id = "cell_charger"
|
||||
build_path = /obj/item/circuitboard/machine/cell_charger
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/dish_drive
|
||||
name = "Machine Design (Dish Drive)"
|
||||
desc = "The circuit board for a dish drive."
|
||||
id = "dish_drive"
|
||||
build_path = /obj/item/circuitboard/machine/dish_drive
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/stacking_unit_console
|
||||
name = "Machine Design (Stacking Machine Console)"
|
||||
desc = "The circuit board for a Stacking Machine Console."
|
||||
id = "stack_console"
|
||||
build_path = /obj/item/circuitboard/machine/stacking_unit_console
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/stacking_machine
|
||||
name = "Machine Design (Stacking Machine)"
|
||||
desc = "The circuit board for a Stacking Machine."
|
||||
id = "stack_machine"
|
||||
build_path = /obj/item/circuitboard/machine/stacking_machine
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/ore_silo
|
||||
name = "Machine Design (Ore Silo)"
|
||||
desc = "The circuit board for an ore silo."
|
||||
id = "ore_silo"
|
||||
build_path = /obj/item/circuitboard/machine/ore_silo
|
||||
category = list ("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
@@ -0,0 +1,100 @@
|
||||
////////////////////////////////////////
|
||||
//////////////MISC Boards///////////////
|
||||
////////////////////////////////////////
|
||||
|
||||
/datum/design/board/recycler
|
||||
name = "Machine Design (Recycler Board)"
|
||||
desc = "The circuit board for a recycler."
|
||||
id = "recycler"
|
||||
build_path = /obj/item/circuitboard/machine/recycler
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/holopad
|
||||
name = "Machine Design (AI Holopad Board)"
|
||||
desc = "The circuit board for a holopad."
|
||||
id = "holopad"
|
||||
build_path = /obj/item/circuitboard/machine/holopad
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/autolathe
|
||||
name = "Machine Design (Autolathe Board)"
|
||||
desc = "The circuit board for an autolathe."
|
||||
id = "autolathe"
|
||||
build_path = /obj/item/circuitboard/machine/autolathe
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/recharger
|
||||
name = "Machine Design (Weapon Recharger Board)"
|
||||
desc = "The circuit board for a Weapon Recharger."
|
||||
id = "recharger"
|
||||
materials = list(MAT_GLASS = 1000, MAT_GOLD = 2000)
|
||||
build_path = /obj/item/circuitboard/machine/recharger
|
||||
category = list("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/vendor
|
||||
name = "Machine Design (Vendor Board)"
|
||||
desc = "The circuit board for a Vendor."
|
||||
id = "vendor"
|
||||
build_path = /obj/item/circuitboard/machine/vendor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/donksofttoyvendor
|
||||
name = "Machine Design (Donksoft Toy Vendor Board)"
|
||||
desc = "The circuit board for a Donksoft Toy Vendor."
|
||||
id = "donksofttoyvendor"
|
||||
build_path = /obj/item/circuitboard/machine/vending/donksofttoyvendor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/space_heater
|
||||
name = "Machine Design (Space Heater Board)"
|
||||
desc = "The circuit board for a space heater."
|
||||
id = "space_heater"
|
||||
build_path = /obj/item/circuitboard/machine/space_heater
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/reagentgrinder
|
||||
name = "Machine Design (All-In-One Grinder)"
|
||||
desc = "The circuit board for an All-In-One Grinder."
|
||||
id = "reagentgrinder"
|
||||
build_path = /obj/item/circuitboard/machine/reagentgrinder
|
||||
category = list ("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/microwave
|
||||
name = "Machine Design (Microwave Board)"
|
||||
desc = "The circuit board for a microwave."
|
||||
id = "microwave"
|
||||
build_path = /obj/item/circuitboard/machine/microwave
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/smartfridge
|
||||
name = "Machine Design (Smartfridge Board)"
|
||||
desc = "The circuit board for a smartfridge."
|
||||
id = "smartfridge"
|
||||
build_path = /obj/item/circuitboard/machine/smartfridge
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/cell_charger
|
||||
name = "Machine Design (Cell Charger Board)"
|
||||
desc = "The circuit board for a cell charger."
|
||||
id = "cell_charger"
|
||||
build_path = /obj/item/circuitboard/machine/cell_charger
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
|
||||
/datum/design/board/vr_sleeper
|
||||
name = "Machine Design (VR Sleeper Board)"
|
||||
desc = "The circuit board for a VR sleeper."
|
||||
id = "vr_sleeper"
|
||||
build_path = /obj/item/circuitboard/machine/vr_sleeper
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL
|
||||
category = list ("Medical Machinery")
|
||||
@@ -0,0 +1,42 @@
|
||||
///////////////////
|
||||
///CARGO Boards//
|
||||
///////////////////
|
||||
/datum/design/board/ore_silo
|
||||
name = "Machine Design (Ore Silo)"
|
||||
desc = "The circuit board for an ore silo."
|
||||
id = "ore_silo"
|
||||
build_path = /obj/item/circuitboard/machine/ore_silo
|
||||
category = list ("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO
|
||||
|
||||
/datum/design/board/mining_equipment_vendor
|
||||
name = "Machine Design (Mining Rewards Vender Board)"
|
||||
desc = "The circuit board for a Mining Rewards Vender."
|
||||
id = "mining_equipment_vendor"
|
||||
build_path = /obj/item/circuitboard/machine/mining_equipment_vendor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/stacking_unit_console
|
||||
name = "Machine Design (Stacking Machine Console)"
|
||||
desc = "The circuit board for a Stacking Machine Console."
|
||||
id = "stack_console"
|
||||
build_path = /obj/item/circuitboard/machine/stacking_unit_console
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/stacking_machine
|
||||
name = "Machine Design (Stacking Machine)"
|
||||
desc = "The circuit board for a Stacking Machine."
|
||||
id = "stack_machine"
|
||||
build_path = /obj/item/circuitboard/machine/stacking_machine
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/ore_redemption
|
||||
name = "Machine Design (Ore Redemption Board)"
|
||||
desc = "The circuit board for an Ore Redemption machine."
|
||||
id = "ore_redemption"
|
||||
build_path = /obj/item/circuitboard/machine/ore_redemption
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
@@ -0,0 +1,106 @@
|
||||
///////////////////
|
||||
///ENGINE Boards///
|
||||
///////////////////
|
||||
/datum/design/board/smes
|
||||
name = "Machine Design (SMES Board)"
|
||||
desc = "The circuit board for a SMES."
|
||||
id = "smes"
|
||||
build_path = /obj/item/circuitboard/machine/smes
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/circulator
|
||||
name = "Machine Design (Circulator Board)"
|
||||
desc = "The circuit board for a circulator."
|
||||
id = "circulator"
|
||||
build_path = /obj/item/circuitboard/machine/circulator
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/teg
|
||||
name = "Machine Design (TEG Board)"
|
||||
desc = "The circuit board for a TEG."
|
||||
id = "teg"
|
||||
build_path = /obj/item/circuitboard/machine/generator
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/announcement_system
|
||||
name = "Machine Design (Automated Announcement System Board)"
|
||||
desc = "The circuit board for an automated announcement system."
|
||||
id = "automated_announcement"
|
||||
build_path = /obj/item/circuitboard/machine/announcement_system
|
||||
category = list("Subspace Telecomms")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/turbine_computer
|
||||
name = "Computer Design (Power Turbine Console Board)"
|
||||
desc = "The circuit board for a power turbine console."
|
||||
id = "power_turbine_console"
|
||||
build_path = /obj/item/circuitboard/computer/turbine_computer
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/emitter
|
||||
name = "Machine Design (Emitter Board)"
|
||||
desc = "The circuit board for an emitter."
|
||||
id = "emitter"
|
||||
build_path = /obj/item/circuitboard/machine/emitter
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/power_compressor
|
||||
name = "Machine Design (Power Compressor Board)"
|
||||
desc = "The circuit board for a power compressor."
|
||||
id = "power_compressor"
|
||||
build_path = /obj/item/circuitboard/machine/power_compressor
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/power_turbine
|
||||
name = "Machine Design (Power Turbine Board)"
|
||||
desc = "The circuit board for a power turbine."
|
||||
id = "power_turbine"
|
||||
build_path = /obj/item/circuitboard/machine/power_turbine
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/tesla_coil
|
||||
name = "Machine Design (Tesla Coil Board)"
|
||||
desc = "The circuit board for a tesla coil."
|
||||
id = "tesla_coil"
|
||||
build_path = /obj/item/circuitboard/machine/tesla_coil
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rad_collector
|
||||
name = "Machine Design (Radiation Collector Board)"
|
||||
desc = "The circuit board for a radiation collector array."
|
||||
id = "rad_collector"
|
||||
build_path = /obj/item/circuitboard/machine/rad_collector
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/grounding_rod
|
||||
name = "Machine Design (Grounding Rod Board)"
|
||||
desc = "The circuit board for a grounding rod."
|
||||
id = "grounding_rod"
|
||||
build_path = /obj/item/circuitboard/machine/grounding_rod
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/ntnet_relay
|
||||
name = "Machine Design (NTNet Relay Board)"
|
||||
desc = "The circuit board for a wireless network relay."
|
||||
id = "ntnet_relay"
|
||||
build_path = /obj/item/circuitboard/machine/ntnet_relay
|
||||
category = list("Subspace Telecomms")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/thermomachine
|
||||
name = "Machine Design (Freezer/Heater Board)"
|
||||
desc = "The circuit board for a freezer/heater."
|
||||
id = "thermomachine"
|
||||
build_path = /obj/item/circuitboard/machine/thermomachine
|
||||
category = list ("Engineering Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING | DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -0,0 +1,91 @@
|
||||
///////////////////
|
||||
///MEDICAL Boards//
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/limbgrower
|
||||
name = "Machine Design (Limb Grower Board)"
|
||||
desc = "The circuit board for a limb grower."
|
||||
id = "limbgrower"
|
||||
build_path = /obj/item/circuitboard/machine/limbgrower
|
||||
category = list("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/harvester
|
||||
name = "Machine Design (Organ Harvester Board)"
|
||||
desc = "The circuit board for an organ harvester."
|
||||
id = "harvester"
|
||||
build_path = /obj/item/circuitboard/machine/harvester
|
||||
category = list("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/board/sleeper
|
||||
name = "Machine Design (Sleeper Board)"
|
||||
desc = "The circuit board for a sleeper."
|
||||
id = "sleeper"
|
||||
build_path = /obj/item/circuitboard/machine/sleeper
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/cryotube
|
||||
name = "Machine Design (Cryotube Board)"
|
||||
desc = "The circuit board for a cryotube."
|
||||
id = "cryotube"
|
||||
build_path = /obj/item/circuitboard/machine/cryo_tube
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/chem_dispenser
|
||||
name = "Machine Design (Portable Chem Dispenser Board)"
|
||||
desc = "The circuit board for a portable chem dispenser."
|
||||
id = "chem_dispenser"
|
||||
build_path = /obj/item/circuitboard/machine/chem_dispenser
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/chem_master
|
||||
name = "Machine Design (Chem Master Board)"
|
||||
desc = "The circuit board for a Chem Master 3000."
|
||||
id = "chem_master"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
build_path = /obj/item/circuitboard/machine/chem_master
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/chem_heater
|
||||
name = "Machine Design (Chemical Heater Board)"
|
||||
desc = "The circuit board for a chemical heater."
|
||||
id = "chem_heater"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
build_path = /obj/item/circuitboard/machine/chem_heater
|
||||
category = list ("Medical Machinery")
|
||||
|
||||
/datum/design/board/smoke_machine
|
||||
name = "Machine Design (Smoke Machine)"
|
||||
desc = "The circuit board for a smoke machine."
|
||||
id = "smoke_machine"
|
||||
build_path = /obj/item/circuitboard/machine/smoke_machine
|
||||
category = list ("Medical Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/board/clonecontrol
|
||||
name = "Computer Design (Cloning Machine Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a new Cloning Machine console."
|
||||
id = "clonecontrol"
|
||||
build_path = /obj/item/circuitboard/computer/cloning
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/clonepod
|
||||
name = "Machine Design (Clone Pod)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cloning Pod."
|
||||
id = "clonepod"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
build_path = /obj/item/circuitboard/machine/clonepod
|
||||
category = list("Medical Machinery")
|
||||
|
||||
/datum/design/board/clonescanner
|
||||
name = "Machine Design (Cloning Scanner)"
|
||||
desc = "Allows for the construction of circuit boards used to build a Cloning Scanner."
|
||||
id = "clonescanner"
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
build_path = /obj/item/circuitboard/machine/clonescanner
|
||||
category = list("Medical Machinery")
|
||||
@@ -0,0 +1,155 @@
|
||||
///////////////////
|
||||
///SCI Boards//////
|
||||
///////////////////
|
||||
|
||||
/datum/design/board/teleport_station
|
||||
name = "Machine Design (Teleportation Station Board)"
|
||||
desc = "The circuit board for a teleportation station."
|
||||
id = "tele_station"
|
||||
build_path = /obj/item/circuitboard/machine/teleporter_station
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/teleport_hub
|
||||
name = "Machine Design (Teleportation Hub Board)"
|
||||
desc = "The circuit board for a teleportation hub."
|
||||
id = "tele_hub"
|
||||
build_path = /obj/item/circuitboard/machine/teleporter_hub
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/quantumpad
|
||||
name = "Machine Design (Quantum Pad Board)"
|
||||
desc = "The circuit board for a quantum telepad."
|
||||
id = "quantumpad"
|
||||
build_path = /obj/item/circuitboard/machine/quantumpad
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/launchpad
|
||||
name = "Machine Design (Bluespace Launchpad Board)"
|
||||
desc = "The circuit board for a bluespace Launchpad."
|
||||
id = "launchpad"
|
||||
build_path = /obj/item/circuitboard/machine/launchpad
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/launchpad_console
|
||||
name = "Machine Design (Bluespace Launchpad Console Board)"
|
||||
desc = "The circuit board for a bluespace launchpad Console."
|
||||
id = "launchpad_console"
|
||||
build_path = /obj/item/circuitboard/computer/launchpad_console
|
||||
category = list ("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/teleconsole
|
||||
name = "Computer Design (Teleporter Console)"
|
||||
desc = "Allows for the construction of circuit boards used to build a teleporter control console."
|
||||
id = "teleconsole"
|
||||
build_path = /obj/item/circuitboard/computer/teleporter
|
||||
category = list("Teleportation Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/destructive_analyzer
|
||||
name = "Machine Design (Destructive Analyzer Board)"
|
||||
desc = "The circuit board for a destructive analyzer."
|
||||
id = "destructive_analyzer"
|
||||
build_path = /obj/item/circuitboard/machine/destructive_analyzer
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/experimentor
|
||||
name = "Machine Design (E.X.P.E.R.I-MENTOR Board)"
|
||||
desc = "The circuit board for an E.X.P.E.R.I-MENTOR."
|
||||
id = "experimentor"
|
||||
build_path = /obj/item/circuitboard/machine/experimentor
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/protolathe
|
||||
name = "Machine Design (Protolathe Board)"
|
||||
desc = "The circuit board for a protolathe."
|
||||
id = "protolathe"
|
||||
build_path = /obj/item/circuitboard/machine/protolathe
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdservercontrol
|
||||
name = "Computer Design (R&D Server Control Console Board)"
|
||||
desc = "The circuit board for an R&D Server Control Console."
|
||||
id = "rdservercontrol"
|
||||
build_path = /obj/item/circuitboard/computer/rdservercontrol
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/rdserver
|
||||
name = "Machine Design (R&D Server Board)"
|
||||
desc = "The circuit board for an R&D Server."
|
||||
id = "rdserver"
|
||||
build_path = /obj/item/circuitboard/machine/rdserver
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mechfab
|
||||
name = "Machine Design (Exosuit Fabricator Board)"
|
||||
desc = "The circuit board for an Exosuit Fabricator."
|
||||
id = "mechfab"
|
||||
build_path = /obj/item/circuitboard/machine/mechfab
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/cyborgrecharger
|
||||
name = "Machine Design (Cyborg Recharger Board)"
|
||||
desc = "The circuit board for a Cyborg Recharger."
|
||||
id = "cyborgrecharger"
|
||||
build_path = /obj/item/circuitboard/machine/cyborgrecharger
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/mech_recharger
|
||||
name = "Machine Design (Mechbay Recharger Board)"
|
||||
desc = "The circuit board for a Mechbay Recharger."
|
||||
id = "mech_recharger"
|
||||
build_path = /obj/item/circuitboard/machine/mech_recharger
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_chamber
|
||||
name = "Machine Design (Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Nanite Chamber."
|
||||
id = "nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/public_nanite_chamber
|
||||
name = "Machine Design (Public Nanite Chamber Board)"
|
||||
desc = "The circuit board for a Public Nanite Chamber."
|
||||
id = "public_nanite_chamber"
|
||||
build_path = /obj/item/circuitboard/machine/public_nanite_chamber
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_programmer
|
||||
name = "Machine Design (Nanite Programmer Board)"
|
||||
desc = "The circuit board for a Nanite Programmer."
|
||||
id = "nanite_programmer"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_programmer
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/nanite_program_hub
|
||||
name = "Machine Design (Nanite Program Hub Board)"
|
||||
desc = "The circuit board for a Nanite Program Hub."
|
||||
id = "nanite_program_hub"
|
||||
build_path = /obj/item/circuitboard/machine/nanite_program_hub
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/circuit_imprinter
|
||||
name = "Machine Design (Circuit Imprinter Board)"
|
||||
desc = "The circuit board for a circuit imprinter."
|
||||
id = "circuit_imprinter"
|
||||
build_path = /obj/item/circuitboard/machine/circuit_imprinter
|
||||
category = list("Research Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
@@ -0,0 +1,90 @@
|
||||
///////////////////
|
||||
///CIV Boards///
|
||||
///////////////////
|
||||
/datum/design/board/gibber
|
||||
name = "Machine Design (Gibber Board)"
|
||||
desc = "The circuit board for a gibber."
|
||||
id = "gibber"
|
||||
build_path = /obj/item/circuitboard/machine/gibber
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/seed_extractor
|
||||
name = "Machine Design (Seed Extractor Board)"
|
||||
desc = "The circuit board for a seed extractor."
|
||||
id = "seed_extractor"
|
||||
build_path = /obj/item/circuitboard/machine/seed_extractor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/soda_dispenser
|
||||
name = "Machine Design (Portable Soda Dispenser Board)"
|
||||
desc = "The circuit board for a portable soda dispenser."
|
||||
id = "soda_dispenser"
|
||||
build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
category = list ("Misc. Machinery")
|
||||
|
||||
/datum/design/board/beer_dispenser
|
||||
name = "Machine Design (Portable Booze Dispenser Board)"
|
||||
desc = "The circuit board for a portable booze dispenser."
|
||||
id = "beer_dispenser"
|
||||
build_path = /obj/item/circuitboard/machine/chem_dispenser/drinks/beer
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
category = list ("Misc. Machinery")
|
||||
|
||||
/datum/design/board/plantgenes
|
||||
name = "Machine Design (Plant DNA Manipulator Board)"
|
||||
desc = "The circuit board for a plant DNA manipulator."
|
||||
id = "plantgenes"
|
||||
build_path = /obj/item/circuitboard/machine/plantgenes
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/deepfryer
|
||||
name = "Machine Design (Deep Fryer)"
|
||||
desc = "The circuit board for a Deep Fryer."
|
||||
id = "deepfryer"
|
||||
build_path = /obj/item/circuitboard/machine/deep_fryer
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/dish_drive
|
||||
name = "Machine Design (Dish Drive)"
|
||||
desc = "The circuit board for a dish drive."
|
||||
id = "dish_drive"
|
||||
build_path = /obj/item/circuitboard/machine/dish_drive
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/biogenerator
|
||||
name = "Machine Design (Biogenerator Board)"
|
||||
desc = "The circuit board for a biogenerator."
|
||||
id = "biogenerator"
|
||||
build_path = /obj/item/circuitboard/machine/biogenerator
|
||||
category = list ("Hydroponics Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/hydroponics
|
||||
name = "Machine Design (Hydroponics Tray Board)"
|
||||
desc = "The circuit board for a hydroponics tray."
|
||||
id = "hydro_tray"
|
||||
build_path = /obj/item/circuitboard/machine/hydroponics
|
||||
category = list ("Hydroponics Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/board/monkey_recycler
|
||||
name = "Machine Design (Monkey Recycler Board)"
|
||||
desc = "The circuit board for a monkey recycler."
|
||||
id = "monkey_recycler"
|
||||
build_path = /obj/item/circuitboard/machine/monkey_recycler
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/board/processor
|
||||
name = "Machine Design (Food/Slime Processor Board)"
|
||||
desc = "The circuit board for a processing unit. Screwdriver the circuit to switch between food (default) or slime processing."
|
||||
id = "processor"
|
||||
build_path = /obj/item/circuitboard/machine/processor
|
||||
category = list ("Misc. Machinery")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE | DEPARTMENTAL_FLAG_SCIENCE
|
||||
@@ -44,16 +44,6 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/medicalkit
|
||||
name = "Empty Medkit"
|
||||
desc = "A plastic medical kit for storging medical items."
|
||||
id = "medicalkit"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 5000)
|
||||
build_path = /obj/item/storage/firstaid //So we dont spawn medical items in it
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/xlarge_beaker
|
||||
name = "X-large Beaker"
|
||||
id = "xlarge_beaker"
|
||||
@@ -82,16 +72,6 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/cloning_disk
|
||||
name = "Cloning Data Disk"
|
||||
desc = "Produce additional disks for storing genetic data."
|
||||
id = "cloning_disk"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
|
||||
build_path = /obj/item/disk/data
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/noreactsyringe
|
||||
name = "Cryo Syringe"
|
||||
desc = "An advanced syringe that stops reagents inside from reacting. It can hold up to 20 units."
|
||||
@@ -162,6 +142,16 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/medicalkit
|
||||
name = "Empty Medkit"
|
||||
desc = "A plastic medical kit for storging medical items."
|
||||
id = "medicalkit"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_PLASTIC = 5000)
|
||||
build_path = /obj/item/storage/firstaid //So we dont spawn medical items in it
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/blood_bag
|
||||
name = "Empty Blood Bag"
|
||||
desc = "A small sterilized plastic bag for blood."
|
||||
@@ -172,6 +162,16 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/cloning_disk
|
||||
name = "Cloning Data Disk"
|
||||
desc = "Produce additional disks for storing genetic data."
|
||||
id = "cloning_disk"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 300, MAT_GLASS = 100, MAT_SILVER=50)
|
||||
build_path = /obj/item/disk/data
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
////////////////////////////////////////
|
||||
//////////Defibrillator Tech////////////
|
||||
////////////////////////////////////////
|
||||
@@ -239,72 +239,6 @@
|
||||
category = list("Misc")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Alien Surgery Tools////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/alienscalpel
|
||||
name = "Alien Scalpel"
|
||||
desc = "An advanced scalpel obtained through Abductor technology."
|
||||
id = "alien_scalpel"
|
||||
build_path = /obj/item/scalpel/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/alienhemostat
|
||||
name = "Alien Hemostat"
|
||||
desc = "An advanced hemostat obtained through Abductor technology."
|
||||
id = "alien_hemostat"
|
||||
build_path = /obj/item/hemostat/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/alienretractor
|
||||
name = "Alien Retractor"
|
||||
desc = "An advanced retractor obtained through Abductor technology."
|
||||
id = "alien_retractor"
|
||||
build_path = /obj/item/retractor/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/aliensaw
|
||||
name = "Alien Circular Saw"
|
||||
desc = "An advanced surgical saw obtained through Abductor technology."
|
||||
id = "alien_saw"
|
||||
build_path = /obj/item/circular_saw/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/aliendrill
|
||||
name = "Alien Drill"
|
||||
desc = "An advanced drill obtained through Abductor technology."
|
||||
id = "alien_drill"
|
||||
build_path = /obj/item/surgicaldrill/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/aliencautery
|
||||
name = "Alien Cautery"
|
||||
desc = "An advanced cautery obtained through Abductor technology."
|
||||
id = "alien_cautery"
|
||||
build_path = /obj/item/cautery/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Cybernetic Implants////////////
|
||||
/////////////////////////////////////////
|
||||
@@ -654,9 +588,74 @@
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////Alien Surgery Tools////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/alienscalpel
|
||||
name = "Alien Scalpel"
|
||||
desc = "An advanced scalpel obtained through Abductor technology."
|
||||
id = "alien_scalpel"
|
||||
build_path = /obj/item/scalpel/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/alienhemostat
|
||||
name = "Alien Hemostat"
|
||||
desc = "An advanced hemostat obtained through Abductor technology."
|
||||
id = "alien_hemostat"
|
||||
build_path = /obj/item/hemostat/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/alienretractor
|
||||
name = "Alien Retractor"
|
||||
desc = "An advanced retractor obtained through Abductor technology."
|
||||
id = "alien_retractor"
|
||||
build_path = /obj/item/retractor/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/aliensaw
|
||||
name = "Alien Circular Saw"
|
||||
desc = "An advanced surgical saw obtained through Abductor technology."
|
||||
id = "alien_saw"
|
||||
build_path = /obj/item/circular_saw/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/aliendrill
|
||||
name = "Alien Drill"
|
||||
desc = "An advanced drill obtained through Abductor technology."
|
||||
id = "alien_drill"
|
||||
build_path = /obj/item/surgicaldrill/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 10000, MAT_SILVER = 2500, MAT_PLASMA = 1000, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/datum/design/aliencautery
|
||||
name = "Alien Cautery"
|
||||
desc = "An advanced cautery obtained through Abductor technology."
|
||||
id = "alien_cautery"
|
||||
build_path = /obj/item/cautery/alien
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2000, MAT_SILVER = 1500, MAT_PLASMA = 500, MAT_TITANIUM = 1500)
|
||||
category = list("Medical Designs")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_MEDICAL
|
||||
|
||||
/////////////////////
|
||||
///Surgery Designs///
|
||||
/////////////////////
|
||||
|
||||
/datum/design/surgery
|
||||
name = "Surgery Design"
|
||||
desc = "what"
|
||||
|
||||
@@ -94,39 +94,15 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Misc///////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/welding_mask
|
||||
name = "Welding Gas Mask"
|
||||
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
|
||||
id = "weldingmask"
|
||||
/datum/design/sci_goggles
|
||||
name = "Science Goggles"
|
||||
desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
|
||||
id = "scigoggles"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/clothing/mask/gas/welding
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/glasses/science
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/portaseeder
|
||||
name = "Portable Seed Extractor"
|
||||
desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
|
||||
id = "portaseeder"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = 400)
|
||||
build_path = /obj/item/storage/bag/plants/portaseeder
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/air_horn
|
||||
name = "Air Horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
id = "air_horn"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
|
||||
build_path = /obj/item/bikehorn/airhorn
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK!
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/mesons
|
||||
name = "Optical Meson Scanners"
|
||||
@@ -218,6 +194,40 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_SECURITY | DEPARTMENTAL_FLAG_MEDICAL | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/////////////////////////////////////////
|
||||
//////////////////Misc///////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/welding_mask
|
||||
name = "Welding Gas Mask"
|
||||
desc = "A gas mask with built in welding goggles and face shield. Looks like a skull, clearly designed by a nerd."
|
||||
id = "weldingmask"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 3000, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/clothing/mask/gas/welding
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/portaseeder
|
||||
name = "Portable Seed Extractor"
|
||||
desc = "For the enterprising botanist on the go. Less efficient than the stationary model, it creates one seed per plant."
|
||||
id = "portaseeder"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 1000, MAT_GLASS = 400)
|
||||
build_path = /obj/item/storage/bag/plants/portaseeder
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/datum/design/air_horn
|
||||
name = "Air Horn"
|
||||
desc = "Damn son, where'd you find this?"
|
||||
id = "air_horn"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 4000, MAT_BANANIUM = 1000)
|
||||
build_path = /obj/item/bikehorn/airhorn
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ALL //HONK!
|
||||
|
||||
/datum/design/magboots
|
||||
name = "Magnetic Boots"
|
||||
desc = "Magnetic boots, often used during extravehicular activity to ensure the user remains safely attached to the vehicle."
|
||||
@@ -228,26 +238,6 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/forcefield_projector
|
||||
name = "Forcefield Projector"
|
||||
desc = "A device which can project temporary forcefields to seal off an area."
|
||||
id = "forcefield_projector"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2500, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/forcefield_projector
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/datum/design/sci_goggles
|
||||
name = "Science Goggles"
|
||||
desc = "Goggles fitted with a portable analyzer capable of determining the research worth of an item or components of a machine."
|
||||
id = "scigoggles"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 500, MAT_GLASS = 500)
|
||||
build_path = /obj/item/clothing/glasses/science
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE
|
||||
|
||||
/datum/design/diskplantgene
|
||||
name = "Plant Data Disk"
|
||||
desc = "A disk for storing plant genetic data."
|
||||
@@ -312,6 +302,10 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SERVICE
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Holosign Designs/////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/holosign
|
||||
name = "Holographic Sign Projector"
|
||||
desc = "A holograpic projector used to project various warning signs."
|
||||
@@ -352,9 +346,19 @@
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/////////////////////////////////////////
|
||||
/datum/design/forcefield_projector
|
||||
name = "Forcefield Projector"
|
||||
desc = "A device which can project temporary forcefields to seal off an area."
|
||||
id = "forcefield_projector"
|
||||
build_type = PROTOLATHE
|
||||
materials = list(MAT_METAL = 2500, MAT_GLASS = 1000)
|
||||
build_path = /obj/item/forcefield_projector
|
||||
category = list("Equipment")
|
||||
departmental_flags = DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
///////////////////////////////
|
||||
////////////Tools//////////////
|
||||
/////////////////////////////////////////
|
||||
///////////////////////////////
|
||||
|
||||
/datum/design/exwelder
|
||||
name = "Experimental Welding Tool"
|
||||
@@ -457,7 +461,7 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
|
||||
/////////////////////////////////////////
|
||||
////////////Armour//////////////
|
||||
////////////Armour///////////////////////
|
||||
/////////////////////////////////////////
|
||||
|
||||
/datum/design/reactive_armour
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
departmental_flags = DEPARTMENTAL_FLAG_CARGO | DEPARTMENTAL_FLAG_SCIENCE | DEPARTMENTAL_FLAG_ENGINEERING
|
||||
maxstack = 50
|
||||
|
||||
|
||||
/datum/design/plastitanium_alloy
|
||||
name = "Plasma + Titanium alloy"
|
||||
id = "plastitanium"
|
||||
|
||||
@@ -516,10 +516,10 @@
|
||||
name = "emergency space suits"
|
||||
desc = "A wall mounted safe containing space suits. Will only open in emergencies."
|
||||
anchored = TRUE
|
||||
density = FALSE
|
||||
icon = 'icons/obj/storage.dmi'
|
||||
icon_state = "safe"
|
||||
var/unlocked = FALSE
|
||||
integrity_failure = 100
|
||||
component_type = /datum/component/storage/concrete/emergency
|
||||
|
||||
/obj/item/storage/pod/PopulateContents()
|
||||
new /obj/item/clothing/head/helmet/space/orange(src)
|
||||
@@ -535,26 +535,6 @@
|
||||
new /obj/item/survivalcapsule(src)
|
||||
new /obj/item/storage/toolbox/emergency(src)
|
||||
|
||||
/obj/item/storage/pod/attackby(obj/item/W, mob/user, params)
|
||||
if (can_interact(user))
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/pod/attack_hand(mob/user)
|
||||
if (can_interact(user))
|
||||
SEND_SIGNAL(src, COMSIG_TRY_STORAGE_SHOW, user)
|
||||
return TRUE
|
||||
|
||||
/obj/item/storage/pod/MouseDrop(over_object, src_location, over_location)
|
||||
if(can_interact(usr))
|
||||
return ..()
|
||||
|
||||
/obj/item/storage/pod/can_interact(mob/user)
|
||||
if(!..())
|
||||
return FALSE
|
||||
if(GLOB.security_level == SEC_LEVEL_RED || GLOB.security_level == SEC_LEVEL_DELTA || unlocked)
|
||||
return TRUE
|
||||
to_chat(user, "The storage unit will only unlock during a Red or Delta security alert.")
|
||||
|
||||
/obj/docking_port/mobile/emergency/backup
|
||||
name = "backup shuttle"
|
||||
id = "backup"
|
||||
|
||||
@@ -290,7 +290,8 @@ All ShuttleMove procs go here
|
||||
// ignores the movement of the shuttle from the staging area on CentCom to
|
||||
// the station as it is loaded in.
|
||||
if (oldT && !is_centcom_level(oldT.z))
|
||||
unlocked = TRUE
|
||||
GET_COMPONENT(STR, /datum/component/storage/concrete/emergency)
|
||||
STR?.unlock_me()
|
||||
|
||||
/************************************Mob move procs************************************/
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/proc/fire_projectile(mob/living/user, atom/target)
|
||||
current_amount--
|
||||
if(!projectile_type)
|
||||
return
|
||||
for(var/i in 1 to projectiles_per_fire)
|
||||
var/obj/item/projectile/P = new projectile_type(user.loc)
|
||||
P.firer = user
|
||||
|
||||
@@ -94,3 +94,87 @@
|
||||
M.Stun(40)
|
||||
M.petrify()
|
||||
return ..()
|
||||
|
||||
|
||||
/obj/item/melee/touch_attack/megahonk
|
||||
name = "\improper honkmother's blessing"
|
||||
desc = "You've got a feeling they won't be laughing after this one. Honk honk."
|
||||
catchphrase = "HONKDOOOOUKEN!"
|
||||
on_use_sound = 'sound/items/airhorn.ogg'
|
||||
icon = 'icons/mecha/mecha_equipment.dmi'
|
||||
icon_state = "mecha_honker"
|
||||
|
||||
/obj/item/melee/touch_attack/megahonk/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed)
|
||||
return
|
||||
user.say(catchphrase, forced = "spell")
|
||||
playsound(get_turf(target), on_use_sound,100,1)
|
||||
for(var/mob/living/carbon/M in (hearers(1, target) - user)) //3x3 around the target, not affecting the user
|
||||
if(ishuman(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
if(istype(H.ears, /obj/item/clothing/ears/earmuffs))
|
||||
continue
|
||||
var/mul = (M==target ? 1 : 0.5)
|
||||
to_chat(M, "<font color='red' size='7'>HONK</font>")
|
||||
M.SetSleeping(0)
|
||||
M.stuttering += 20*mul
|
||||
M.adjustEarDamage(0, 30*mul)
|
||||
M.Knockdown(60*mul)
|
||||
if(prob(40))
|
||||
M.Knockdown(200*mul)
|
||||
else
|
||||
M.Jitter(500*mul)
|
||||
|
||||
charges--
|
||||
if(charges <= 0)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/melee/touch_attack/megahonk/attack_self(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>\The [src] disappears, to honk another day.</span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/melee/touch_attack/bspie
|
||||
name = "\improper bluespace pie"
|
||||
desc = "A thing you can barely comprehend as you hold it in your hand. You're fairly sure you could fit an entire body inside."
|
||||
on_use_sound = 'sound/magic/demon_consume.ogg'
|
||||
icon = 'icons/obj/food/piecake.dmi'
|
||||
icon_state = "frostypie"
|
||||
color = "#000077"
|
||||
|
||||
/obj/item/melee/touch_attack/bspie/attack_self(mob/user)
|
||||
. = ..()
|
||||
to_chat(user, "<span class='notice'>You smear \the [src] on your chest! </span>")
|
||||
qdel(src)
|
||||
|
||||
/obj/item/melee/touch_attack/bspie/afterattack(atom/target, mob/living/carbon/user, proximity)
|
||||
if(!proximity || !iscarbon(target) || !iscarbon(user) || user.handcuffed)
|
||||
return
|
||||
if(target == user)
|
||||
to_chat(user, "<span class='notice'>You smear \the [src] on your chest!</span>")
|
||||
qdel(src)
|
||||
return
|
||||
var/mob/living/carbon/M = target
|
||||
|
||||
user.visible_message("<span class='warning'>[user] is trying to stuff [M]\s body into \the [src]!</span>")
|
||||
if(do_mob(user, M, 250))
|
||||
var/name = M.real_name
|
||||
var/obj/item/reagent_containers/food/snacks/pie/cream/body/pie = new(get_turf(M))
|
||||
pie.name = "\improper [name] [pie.name]"
|
||||
|
||||
playsound(get_turf(target), on_use_sound, 50, 1)
|
||||
|
||||
/*
|
||||
var/obj/item/bodypart/head = M.get_bodypart("head")
|
||||
if(head)
|
||||
head.drop_limb()
|
||||
head.throw_at(get_turf(head), 1, 1)
|
||||
qdel(M)
|
||||
*/
|
||||
M.forceMove(pie)
|
||||
|
||||
|
||||
charges--
|
||||
|
||||
if(charges <= 0)
|
||||
qdel(src)
|
||||
|
||||
@@ -0,0 +1,86 @@
|
||||
/obj/effect/proc_holder/spell/targeted/conjure_item/summon_pie
|
||||
name = "Summon Creampie"
|
||||
desc = "A clown's weapon of choice. Use this to summon a fresh pie, just waiting to acquaintain itself with someone's face."
|
||||
invocation_type = "none"
|
||||
include_user = 1
|
||||
range = -1
|
||||
clothes_req = 0
|
||||
item_type = /obj/item/reagent_containers/food/snacks/pie/cream
|
||||
|
||||
charge_max = 30
|
||||
cooldown_min = 30
|
||||
action_icon = 'icons/obj/food/piecake.dmi'
|
||||
action_icon_state = "pie"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/banana_peel
|
||||
name = "Conjure Banana Peel"
|
||||
desc = "Make a banana peel appear out of thin air right under someone's feet!"
|
||||
charge_type = "recharge"
|
||||
charge_max = 100
|
||||
cooldown_min = 100
|
||||
clothes_req = 0
|
||||
invocation_type = "none"
|
||||
range = 7
|
||||
selection_type = "view"
|
||||
projectile_type = null
|
||||
|
||||
active_msg = "You focus, your mind reaching to the clown dimension, ready to make a peel matrialize wherever you want!"
|
||||
deactive_msg = "You relax, the peel remaining right in the \"thin air\" it would appear out of."
|
||||
action_icon = 'icons/obj/hydroponics/harvest.dmi'
|
||||
base_icon_state = "banana_peel"
|
||||
action_icon_state = "banana"
|
||||
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/banana_peel/cast(list/targets, mob/user = usr)
|
||||
var/target = get_turf(targets[1])
|
||||
|
||||
if(get_dist(user,target)>range)
|
||||
to_chat(user, "<span class='notice'>\The [target] is too far away!</span>")
|
||||
return
|
||||
|
||||
. = ..()
|
||||
new /obj/item/grown/bananapeel(target)
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/banana_peel/update_icon()
|
||||
if(!action)
|
||||
return
|
||||
if(active)
|
||||
action.button_icon_state = base_icon_state
|
||||
else
|
||||
action.button_icon_state = action_icon_state
|
||||
|
||||
action.UpdateButtonIcon()
|
||||
return
|
||||
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/megahonk
|
||||
name = "Mega HoNk"
|
||||
desc = "This spell channels your inner clown powers, concentrating them into one massive HONK."
|
||||
hand_path = /obj/item/melee/touch_attack/megahonk
|
||||
|
||||
charge_max = 100
|
||||
clothes_req = 0
|
||||
cooldown_min = 100
|
||||
|
||||
action_icon = 'icons/mecha/mecha_equipment.dmi'
|
||||
action_icon_state = "mecha_honker"
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/obj/effect/proc_holder/spell/targeted/touch/bspie
|
||||
name = "Bluespace Banana Pie"
|
||||
desc = "An entire body would fit in there!"
|
||||
hand_path = /obj/item/melee/touch_attack/bspie
|
||||
|
||||
charge_max = 450
|
||||
clothes_req = 0
|
||||
cooldown_min = 450
|
||||
|
||||
action_icon = 'icons/obj/food/piecake.dmi'
|
||||
action_icon_state = "frostypie"
|
||||
|
||||
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user