Merge branch 'master' into upstream-merge-29367

This commit is contained in:
LetterJay
2017-07-31 17:19:31 -05:00
committed by GitHub
669 changed files with 9448 additions and 9994 deletions
+6 -6
View File
@@ -1240,7 +1240,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
valid_territory = FALSE
/area/storage/tcom
name = "Telecoms Storage"
name = "Telecomms Storage"
icon_state = "green"
valid_territory = FALSE
@@ -1416,7 +1416,7 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
/area/tcommsat/entrance
name = "Telecoms Teleporter"
name = "Telecomms Teleporter"
icon_state = "tcomsatentrance"
/area/tcommsat/chamber
@@ -1424,12 +1424,12 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
icon_state = "tcomsatcham"
/area/ai_monitored/turret_protected/tcomsat
name = "Telecoms Satellite"
name = "Telecomms Satellite"
icon_state = "tcomsatlob"
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
/area/ai_monitored/turret_protected/tcomfoyer
name = "Telecoms Foyer"
name = "Telecomms Foyer"
icon_state = "tcomsatentrance"
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
@@ -1444,11 +1444,11 @@ NOTE: there are two lists of areas in the end of this file: centcom and station
ambientsounds = list('sound/ambience/ambisin2.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/signal.ogg', 'sound/ambience/ambigen10.ogg')
/area/tcommsat/computer
name = "Telecoms Control Room"
name = "Telecomms Control Room"
icon_state = "tcomsatcomp"
/area/tcommsat/server
name = "Telecoms Server Room"
name = "Telecomms Server Room"
icon_state = "tcomsatcham"
/area/tcommsat/lounge
+2 -2
View File
@@ -432,7 +432,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
// Ambience goes down here -- make sure to list each area seperately for ease of adding things in later, thanks! Note: areas adjacent to each other should have the same sounds to prevent cutoff when possible.- LastyScratch
if(L.client && !L.client.ambience_playing && L.client.prefs.toggles & SOUND_SHIP_AMBIENCE)
L.client.ambience_playing = 1
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = 2)
L << sound('sound/ambience/shipambience.ogg', repeat = 1, wait = 0, volume = 35, channel = CHANNEL_BUZZ)
if(!(L.client && (L.client.prefs.toggles & SOUND_AMBIENCE)))
return //General ambience check is below the ship ambience so one can play without the other
@@ -441,7 +441,7 @@ GLOBAL_LIST_EMPTY(teleportlocs)
var/sound = pick(ambientsounds)
if(!L.client.played)
L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = 1)
L << sound(sound, repeat = 0, wait = 0, volume = 25, channel = CHANNEL_AMBIENCE)
L.client.played = 1
sleep(600) //ewww - this is very very bad
if(L.&& L.client)
+4 -4
View File
@@ -21,28 +21,28 @@
if(!linked)
return 0
var/area/A = get_area(linked)
ASSERT(!istype(A,/area/holodeck))
ASSERT(!istype(A, /area/holodeck))
return A.powered(chan)
/area/holodeck/usage(var/chan)
if(!linked)
return 0
var/area/A = get_area(linked)
ASSERT(!istype(A,/area/holodeck))
ASSERT(!istype(A, /area/holodeck))
return A.usage(chan)
/area/holodeck/addStaticPower(value, powerchannel)
if(!linked)
return
var/area/A = get_area(linked)
ASSERT(!istype(A,/area/holodeck))
ASSERT(!istype(A, /area/holodeck))
return A.addStaticPower(value,powerchannel)
/area/holodeck/use_power(var/amount, var/chan)
if(!linked)
return 0
var/area/A = get_area(linked)
ASSERT(!istype(A,/area/holodeck))
ASSERT(!istype(A, /area/holodeck))
return A.use_power(amount,chan)
+1 -1
View File
@@ -143,7 +143,7 @@
if(T.z != ZLEVEL_CENTCOM)//if not, don't bother
return 0
if(istype(T.loc,/area/shuttle/syndicate) || istype(T.loc,/area/syndicate_mothership))
if(istype(T.loc, /area/shuttle/syndicate) || istype(T.loc, /area/syndicate_mothership))
return 1
return 0
+10
View File
@@ -0,0 +1,10 @@
diff a/code/game/atoms.dm b/code/game/atoms.dm (rejected hunks)
@@ -126,7 +126,7 @@
return TRUE
//finally check for centcom itself
- return istype(T.loc,/area/centcom)
+ return istype(T.loc, /area/centcom)
/atom/proc/onSyndieBase()
var/turf/T = get_turf(src)
+3 -3
View File
@@ -202,17 +202,17 @@
holder = hud_list[i]
holder.icon_state = null
for(var/obj/item/weapon/implant/I in implants)
if(istype(I,/obj/item/weapon/implant/tracking))
if(istype(I, /obj/item/weapon/implant/tracking))
holder = hud_list[IMPTRACK_HUD]
var/icon/IC = icon(icon, icon_state, dir)
holder.pixel_y = IC.Height() - world.icon_size
holder.icon_state = "hud_imp_tracking"
else if(istype(I,/obj/item/weapon/implant/mindshield))
else if(istype(I, /obj/item/weapon/implant/mindshield))
holder = hud_list[IMPLOYAL_HUD]
var/icon/IC = icon(icon, icon_state, dir)
holder.pixel_y = IC.Height() - world.icon_size
holder.icon_state = "hud_imp_loyal"
else if(istype(I,/obj/item/weapon/implant/chem))
else if(istype(I, /obj/item/weapon/implant/chem))
holder = hud_list[IMPCHEM_HUD]
var/icon/IC = icon(icon, icon_state, dir)
holder.pixel_y = IC.Height() - world.icon_size
+1 -1
View File
@@ -62,7 +62,7 @@
return ..()
/datum/game_mode/proc/auto_declare_completion_blob()
if(istype(SSticker.mode,/datum/game_mode/blob) )
if(istype(SSticker.mode, /datum/game_mode/blob) )
var/datum/game_mode/blob/blob_mode = src
if(blob_mode.blob_overminds.len)
var/text = "<FONT size = 2><B>The blob[(blob_mode.blob_overminds.len > 1 ? "s were" : " was")]:</B></FONT>"
@@ -23,7 +23,7 @@
and tearing!</span>")
user.emote("scream")
user.regenerate_limbs(0, list("head"))
user.regenerate_organs()
user.regenerate_organs()
to_chat(user, "<span class='notice'>We have revived ourselves.</span>")
user.mind.changeling.purchasedpowers -= src
return TRUE
+85
View File
@@ -0,0 +1,85 @@
#define MIN_LATE_TARGET_TIME 600 //lower bound of re-rolled timer, 1 min
#define MAX_LATE_TARGET_TIME 6000 //upper bound of re-rolled timer, 10 min
#define LATE_TARGET_HIT_CHANCE 70 //How often would the find_target succeed, otherwise it re-rolls later and tries again.
//Hit chance is here to avoid people checking github and then hovering around new arrivals within the max minute range every round.
/datum/objective/assassinate/late
martyr_compatible = FALSE
/datum/objective/assassinate/late/find_target()
var/list/possible_targets = list()
for(var/mob/M in GLOB.latejoiners)
var/datum/mind/possible_target = M.mind
if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && is_unique_objective(possible_target))
possible_targets += possible_target
if(possible_targets.len > 0 && prob(LATE_TARGET_HIT_CHANCE))
target = pick(possible_targets)
martyr_compatible = TRUE //Might never matter, but I guess if an admin gives another random objective, this should now be compatible
update_explanation_text()
message_admins("[target] has been selected as the assassination target of [owner].")
log_game("[target] has been selected as the assassination target of [owner].")
to_chat(owner, "<span class='italics'>You hear a crackling noise in your ears, as a one-way syndicate message plays:</span>")
to_chat(owner, "<span class='userdanger'><font size=5>You target has been located. To succeed, find and eliminate [target], the [!target_role_type ? target.assigned_role : target.special_role].</font></span>")
return target
else
update_explanation_text()
addtimer(CALLBACK(src, .proc/find_target),rand(MIN_LATE_TARGET_TIME, MAX_LATE_TARGET_TIME))
return null
/datum/objective/assassinate/late/find_target_by_role(role, role_type=0, invert=0)
var/list/possible_targets = list()
for(var/mob/M in GLOB.latejoiners)
var/datum/mind/possible_target = M.mind
if((possible_target != owner) && ishuman(possible_target.current))
var/is_role = 0
if(role_type)
if(possible_target.special_role == role)
is_role++
else
if(possible_target.assigned_role == role)
is_role++
if(invert)
if(is_role)
continue
possible_targets += possible_target
//break
else if(is_role)
possible_targets += possible_target
//break
if(possible_targets && prob(LATE_TARGET_HIT_CHANCE))
target = pick(possible_targets)
update_explanation_text()
message_admins("[target] has been selected as the assassination target of [owner].")
log_game("[target] has been selected as the assassination target of [owner].")
to_chat(owner, "<span class='italics'>You hear a crackling noise in your ears, as a one-way syndicate message plays:</span>")
to_chat(owner, "<span class='userdanger'><font size=5>You target has been located. To succeed, find and eliminate [target], the [!target_role_type ? target.assigned_role : target.special_role].</font></span>")
else
update_explanation_text()
addtimer(CALLBACK(src, .proc/find_target_by_role, role, role_type, invert),rand(MIN_LATE_TARGET_TIME, MAX_LATE_TARGET_TIME))
/datum/objective/assassinate/late/check_completion()
if(target && target.current) //If target WAS assigned
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
return TRUE
return FALSE
else //If no target was ever given
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
return FALSE
if(!is_special_character(owner.current))
return FALSE
return TRUE
/datum/objective/assassinate/late/update_explanation_text()
//..()
if(target && target.current)
explanation_text = "Assassinate [target.name], the [!target_role_type ? target.assigned_role : target.special_role]."
else
explanation_text = "Stay alive until your target arrives on the station, you will be notified when the target has been identified."
@@ -20,7 +20,7 @@
return ..()
/obj/effect/clockwork/sigil/attack_hand(mob/user)
if(iscarbon(user) && !user.stat && (!is_servant_of_ratvar(user) || (is_servant_of_ratvar(user) && user.a_intent == INTENT_HARM)))
if(iscarbon(user) && !user.stat && !is_servant_of_ratvar(user))
user.visible_message("<span class='warning'>[user] stamps out [src]!</span>", "<span class='danger'>You stomp on [src], scattering it into thousands of particles.</span>")
qdel(src)
return 1
@@ -175,7 +175,7 @@
/obj/effect/clockwork/sigil/transmission
name = "suspicious sigil"
desc = "A glowing orange sigil. The air around it feels staticky."
clockwork_desc = "A sigil that will serve as a battery for clockwork structures."
clockwork_desc = "A sigil that serves as power generation and a battery for clockwork structures."
icon_state = "sigiltransmission"
alpha = 50
color = "#EC8A2D"
@@ -183,7 +183,12 @@
resist_string = "glows faintly"
sigil_name = "Sigil of Transmission"
affects_servants = TRUE
var/power_charge = CLOCKCULT_POWER_UNIT //starts with CLOCKCULT_POWER_UNIT by default
var/power_charge = 0 //starts with no power
var/drain_range = 14
/obj/effect/clockwork/sigil/transmission/Initialize()
. = ..()
update_glow()
/obj/effect/clockwork/sigil/transmission/ex_act(severity)
if(severity == 3)
@@ -199,7 +204,8 @@
for(var/obj/structure/destructible/clockwork/powered/P in range(SIGIL_ACCESS_RANGE, src))
structure_number++
to_chat(user, "<span class='[power_charge ? "brass":"alloy"]'>It is storing <b>[GLOB.ratvar_awakens ? "INFINITY":"[power_charge]"]W</b> of power, \
and <b>[structure_number]</b> Clockwork Structure[structure_number == 1 ? "":"s"] [structure_number == 1 ? "is":"are"] in range.</span>")
and <b>[structure_number]</b> Clockwork Structure[structure_number == 1 ? " is":"s are"] in range.</span>")
to_chat(user, "<span class='brass'>While active, it will gradually drain power from nearby electronics. It is currently [isprocessing ? "active":"disabled"].</span>")
if(iscyborg(user))
to_chat(user, "<span class='brass'>You can recharge from the [sigil_name] by crossing it.</span>")
else if(!GLOB.ratvar_awakens)
@@ -218,6 +224,20 @@
return TRUE
return ..()
/obj/effect/clockwork/sigil/transmission/attack_ai(mob/user)
if(is_servant_of_ratvar(user))
attack_hand(user)
/obj/effect/clockwork/sigil/transmission/attack_hand(mob/user)
if(is_servant_of_ratvar(user))
visible_message("<span class='notice'>[user] [isprocessing ? "de":""]activates [src].</span>", "<span class='brass'>You [isprocessing ? "de":""]activate the [sigil_name].</span>")
if(isprocessing)
STOP_PROCESSING(SSobj, src)
else
START_PROCESSING(SSobj, src)
else
return ..()
/obj/effect/clockwork/sigil/transmission/sigil_effects(mob/living/L)
if(is_servant_of_ratvar(L))
if(iscyborg(L))
@@ -225,6 +245,20 @@
else if(power_charge)
to_chat(L, "<span class='brass'>You feel a slight, static shock.</span>")
/obj/effect/clockwork/sigil/transmission/process()
var/power_drained = 0
for(var/t in spiral_range_turfs(drain_range, src))
var/turf/T = t
for(var/M in T)
var/atom/movable/A = M
power_drained += A.power_drain(TRUE)
CHECK_TICK
modify_charge(-Floor(power_drained, MIN_CLOCKCULT_POWER))
new /obj/effect/temp_visual/ratvar/sigil/transmission(loc, 1 + (power_drained * 0.0035))
/obj/effect/clockwork/sigil/transmission/proc/charge_cyborg(mob/living/silicon/robot/cyborg)
if(!cyborg_checks(cyborg))
return
@@ -259,10 +293,6 @@
return FALSE
return TRUE
/obj/effect/clockwork/sigil/transmission/Initialize()
. = ..()
update_glow()
/obj/effect/clockwork/sigil/transmission/proc/modify_charge(amount)
if(GLOB.ratvar_awakens)
update_glow()
@@ -6,7 +6,7 @@
if(cell && cell.charge)
playsound(src, "sparks", 50, 1)
flick("apc-spark", src)
. = min(cell.charge, 250)
. = min(cell.charge, MIN_CLOCKCULT_POWER*3)
cell.use(.) //Better than a power sink!
if(!cell.charge && !shorted)
shorted = 1
@@ -16,7 +16,7 @@
/obj/machinery/power/smes/power_drain(clockcult_user)
if(charge)
. = min(charge, 250)
. = min(charge, MIN_CLOCKCULT_POWER*3)
charge -= . * 50
if(!charge && !panel_open)
panel_open = TRUE
@@ -27,29 +27,18 @@
/obj/item/weapon/stock_parts/cell/power_drain(clockcult_user)
if(charge)
. = min(charge, 250)
. = min(charge, MIN_CLOCKCULT_POWER*3)
charge = use(.)
update_icon()
/obj/machinery/light/power_drain(clockcult_user)
if(on)
playsound(src, 'sound/effects/light_flicker.ogg', 50, 1)
. = 250
if(prob(50))
burn_out()
/mob/living/silicon/robot/power_drain(clockcult_user)
if((!clockcult_user || !is_servant_of_ratvar(src)) && cell && cell.charge)
. = min(cell.charge, 250)
. = min(cell.charge, MIN_CLOCKCULT_POWER*4)
cell.use(.)
if(prob(20))
to_chat(src, "<span class='userdanger'>ERROR: Power loss detected!</span>")
spark_system.start()
/obj/mecha/power_drain(clockcult_user)
if((!clockcult_user || !occupant || occupant && !is_servant_of_ratvar(occupant)) && cell && cell.charge)
. = min(cell.charge, 250)
if((!clockcult_user || (occupant && !is_servant_of_ratvar(occupant))) && cell && cell.charge)
. = min(cell.charge, MIN_CLOCKCULT_POWER*4)
cell.use(.)
if(prob(20))
occupant_message("<span class='userdanger'>Power loss detected!</span>")
spark_system.start()
@@ -49,7 +49,7 @@
/turf/open/floor/plating/ashplanet/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent)
return FALSE
/turf/open/floor/plating/lava/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent)
/turf/open/lava/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent)
return FALSE
/turf/open/floor/clockwork/fabrication_vals(mob/living/user, obj/item/clockwork/replica_fabricator/fabricator, silent)
@@ -6,6 +6,7 @@
Clockwork slabs will only make components if held or if inside an item held by a human, and when making a component will prevent all other slabs held from making components.\n\
Hitting a slab, a Servant with a slab, or a cache will <b>transfer</b> this slab's components into the target, the target's slab, or the global cache, respectively."
icon_state = "dread_ipad"
var/inhand_overlay //If applicable, this overlay will be applied to the slab's inhand
slot_flags = SLOT_BELT
w_class = WEIGHT_CLASS_SMALL
var/list/stored_components = list(BELLIGERENT_EYE = 0, VANGUARD_COGWHEEL = 0, GEIS_CAPACITOR = 0, REPLICANT_ALLOY = 0, HIEROPHANT_ANSIBLE = 0)
@@ -50,9 +51,9 @@
maximum_quickbound = 6 //we usually have one or two unique scriptures, so if ratvar is up let us bind one more
actions_types = list()
/obj/item/clockwork/slab/cyborg/engineer //five scriptures, plus a fabricator
/obj/item/clockwork/slab/cyborg/engineer //four scriptures, plus a fabricator
quickbound = list(/datum/clockwork_scripture/create_object/replicant, /datum/clockwork_scripture/create_object/cogscarab, \
/datum/clockwork_scripture/create_object/soul_vessel, /datum/clockwork_scripture/create_object/sigil_of_transmission, /datum/clockwork_scripture/create_object/interdiction_lens)
/datum/clockwork_scripture/create_object/soul_vessel, /datum/clockwork_scripture/create_object/sigil_of_transmission)
/obj/item/clockwork/slab/cyborg/medical //five scriptures, plus a spear
quickbound = list(/datum/clockwork_scripture/ranged_ability/linked_vanguard, /datum/clockwork_scripture/ranged_ability/sentinels_compromise, \
@@ -105,6 +106,12 @@
. = ..()
addtimer(CALLBACK(src, .proc/check_on_mob, user), 1) //dropped is called before the item is out of the slot, so we need to check slightly later
/obj/item/clockwork/slab/worn_overlays(isinhands = FALSE, icon_file)
. = list()
if(isinhands && item_state && inhand_overlay)
var/mutable_appearance/M = mutable_appearance(icon_file, "slab_[inhand_overlay]")
. += M
/obj/item/clockwork/slab/proc/check_on_mob(mob/user)
if(user && !(src in user.held_items) && slab_ability && slab_ability.ranged_ability_user) //if we happen to check and we AREN'T in user's hands, remove whatever ability we have
slab_ability.remove_ranged_ability()
@@ -415,17 +422,16 @@
dat += "<font color=#BE8700><b>Marauder:</b></font> A clockwork marauder, which is a powerful bodyguard that hides in its owner.<br><br>"
dat += "<font color=#BE8700 size=3>Structures (* = requires power)</font><br>"
dat += "<font color=#BE8700><b>Warden:</b></font> An ocular warden, which is a ranged turret that damages non-Servants that see it.<br>"
dat += "<font color=#BE8700><b>Daemon*:</b></font> A tinkerer's daemon, which quickly creates components.<br>"
dat += "<font color=#BE8700><b>Lens*:</b></font> An interdiction lens, which sabotages machinery in a large area to create power.<br>"
dat += "<font color=#BE8700><b>Obelisk*:</b></font> A clockwork obelisk, which can broadcast large messages and allows limited teleportation.<br>"
dat += "<font color=#BE8700><b>Motor*:</b></font> A mania motor, which serves as area-denial through negative effects and eventual conversion.<br>"
dat += "<font color=#BE8700><b>Prism*:</b></font> A prolonging prism, which delays the shuttle for two minutes at a huge power cost.<br><br>"
dat += "<font color=#BE8700><b>Motor*:</b></font> A mania motor, which serves as area-denial through negative effects and eventual conversion.<br>"
dat += "<font color=#BE8700><b>Daemon*:</b></font> A tinkerer's daemon, which quickly creates components.<br>"
dat += "<font color=#BE8700><b>Obelisk*:</b></font> A clockwork obelisk, which can broadcast large messages and allows limited teleportation.<br>"
dat += "<font color=#BE8700 size=3>Sigils</font><br>"
dat += "<i>Note: Sigils can be stacked on top of one another, making certain sigils very effective when paired!</i><br>"
dat += "<font color=#BE8700><b>Transgression:</b></font> Stuns the first non-Servant to cross it for ten seconds and blinds others nearby. Disappears on use.<br>"
dat += "<font color=#BE8700><b>Submission:</b></font> Converts the first non-Servant to stand on the sigil for seven seconds. Disappears on use.<br>"
dat += "<font color=#BE8700><b>Accession:</b></font> Identical to the Sigil of Submission, but doesn't disappear on use. It can also convert a single mindshielded target, but will disappear after doing this.<br>"
dat += "<font color=#BE8700><b>Transmission:</b></font> Stores power for clockwork structures. Feeding it brass sheets will create power.<br><br>"
dat += "<font color=#BE8700><b>Transmission:</b></font> Drains and stores power for clockwork structures. Feeding it brass sheets will create power.<br><br>"
dat += "<font color=#BE8700 size=3>-=-=-=-=-=-</font>"
if("Components")
var/servants = 0 //Calculate the current production time for slab components
@@ -494,12 +500,11 @@
becomes necessary: <b>power</b>. Almost all clockwork structures require power to function in some way. There is nothing special about this power; it's mere electricity, \
and can be harnessed in several ways.<br><br>"
dat += "To begin with, if there is no other source of power nearby, structures will draw from the area's APC, assuming it has one. This is inefficient and ill-advised as \
anything but a last resort. Instead, it is recommended that a <b>sigil of transmission</b> is created. This sigil serves as a sort of battery for nearby clockwork \
anything but a last resort. Instead, it is recommended that a <b>Sigil of Transmission</b> is created. This sigil serves as both battery and power generator for nearby clockwork \
structures, and those structures will happily draw power from the sigil before they resort to pathetic APCs and other sources of energy.<br><br>"
dat += "Generating power is less easy. The most reliable and efficient way is using brass sheets; attacking a sigil of transmission with brass sheets will convert them \
to power, at a rate of <b>[POWER_FLOOR]W</b> per sheet. (Brass sheets are created from replica fabricators, which are explained more in detail in the <b>Conversion</b> \
section.) There are also structures that <i>generate</i> power instead of consuming it; for instance, the interdiction lens sabotages all non-clockwork machines in a \
very large area and creates power from doing so. This allows Servants to simultaneously cripple an entire department as well as fueling their own machinery.<br><br>"
dat += "The most reliable and efficient way to generate power is by using brass sheets; attacking a sigil of transmission with brass sheets will convert them \
to power, at a rate of <b>[POWER_FLOOR]W</b> per sheet. (Brass sheets are created from replica fabricators, which are explained more in detail in the <b>Conversion</b> section.) \
Activating a sigil of transmission will also cause it to drain power from the nearby area, which, while effective, serves as an obvious tell that there is something wrong.<br><br>"
dat += "Without power, many structures will not function, making a base vulnerable to attack. For this reason, it is critical that you keep an eye on your power reserves and \
ensure that they remain comfortably high.<br><br>"
dat += "<font color=#BE8700 size=3>-=-=-=-=-=-</font>"
@@ -259,7 +259,7 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or
//Uses a ranged slab ability, returning only when the ability no longer exists(ie, when interrupted) or finishes.
/datum/clockwork_scripture/ranged_ability
var/slab_icon = "dread_ipad"
var/slab_overlay
var/ranged_type = /obj/effect/proc_holder/slab
var/ranged_message = "This is a huge goddamn bug, how'd you cast this?"
var/timeout_time = 0
@@ -271,7 +271,10 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or
return ..()
/datum/clockwork_scripture/ranged_ability/scripture_effects()
slab.icon_state = slab_icon
if(slab_overlay)
slab.add_overlay(slab_overlay)
slab.item_state = "clockwork_slab"
slab.inhand_overlay = slab_overlay
slab.slab_ability = new ranged_type(slab)
slab.slab_ability.slab = slab
slab.slab_ability.add_ranged_ability(invoker, ranged_message)
@@ -294,7 +297,9 @@ Judgement: 12 servants, 5 caches, 300 CV, and any existing AIs are converted or
successful = slab.slab_ability.successful
if(!slab.slab_ability.finished)
slab.slab_ability.remove_ranged_ability()
slab.icon_state = "dread_ipad"
slab.cut_overlays()
slab.item_state = initial(slab.item_state)
slab.inhand_overlay = null
if(invoker)
invoker.update_inv_hands()
return successful //slab doesn't look like a word now.
@@ -171,46 +171,24 @@
quickbind_desc = "Creates a Fragment Shell, which produces an Anima Fragment when filled with a Soul Vessel."
//Sigil of Transmission: Creates a sigil of transmission that can store power for clockwork structures.
//Sigil of Transmission: Creates a sigil of transmission that can drain and store power for clockwork structures.
/datum/clockwork_scripture/create_object/sigil_of_transmission
descname = "Structure Battery"
descname = "Structure Power Generator & Battery"
name = "Sigil of Transmission"
desc = "Places a sigil that stores energy to power clockwork structures."
desc = "Places a sigil that can drain and will store energy to power clockwork structures."
invocations = list("Divinity...", "...power our creations!")
channel_time = 70
consumed_components = list(VANGUARD_COGWHEEL = 2, GEIS_CAPACITOR = 2, HIEROPHANT_ANSIBLE = 4)
whispered = TRUE
object_path = /obj/effect/clockwork/sigil/transmission
creator_message = "<span class='brass'>A sigil silently appears below you. It will automatically power clockwork structures near it.</span>"
creator_message = "<span class='brass'>A sigil silently appears below you. It will automatically power clockwork structures near it and will drain power when activated.</span>"
usage_tip = "Cyborgs can charge from this sigil by remaining over it for 5 seconds."
tier = SCRIPTURE_APPLICATION
one_per_tile = TRUE
primary_component = HIEROPHANT_ANSIBLE
sort_priority = 5
quickbind = TRUE
quickbind_desc = "Creates a Sigil of Transmission, which stores power for clockwork structures."
//Interdiction Lens: Creates a powerful totem that disables radios and cameras and drains power into nearby sigils of transmission.
/datum/clockwork_scripture/create_object/interdiction_lens
descname = "Structure, Area Sabotage, Power Generator"
name = "Interdiction Lens"
desc = "Creates a clockwork totem that sabotages nearby machinery and funnels drained power into nearby Sigils of Transmission or the area's APC."
invocations = list("May this totem...", "...shroud the false suns!")
channel_time = 80
consumed_components = list(BELLIGERENT_EYE = 5, REPLICANT_ALLOY = 2, HIEROPHANT_ANSIBLE = 2)
object_path = /obj/structure/destructible/clockwork/powered/interdiction_lens
creator_message = "<span class='brass'>You form an interdiction lens, which disrupts cameras and radios and drains power.</span>"
observer_message = "<span class='warning'>A brass totem rises from the ground, a purple gem appearing in its center!</span>"
invokers_required = 2
multiple_invokers_used = TRUE
usage_tip = "If it fails to funnel power into a nearby Sigil of Transmission or the area's APC and fails to disable even one thing, it will disable itself for two minutes."
tier = SCRIPTURE_APPLICATION
one_per_tile = TRUE
primary_component = BELLIGERENT_EYE
sort_priority = 6
quickbind = TRUE
quickbind_desc = "Creates an Interdiction Lens, which drains power into nearby Sigils of Transmission."
quickbind_desc = "Creates a Sigil of Transmission, which can drain and will store power for clockwork structures."
//Prolonging Prism: Creates a prism that will delay the shuttle at a power cost
@@ -226,7 +204,7 @@
observer_message = "<span class='warning'>An onyx prism forms in midair and sprouts tendrils to support itself!</span>"
invokers_required = 2
multiple_invokers_used = TRUE
usage_tip = "The power cost to delay a shuttle increases based on CV and the number of times activated."
usage_tip = "The power cost to delay a shuttle increases based on the number of times activated."
tier = SCRIPTURE_APPLICATION
one_per_tile = TRUE
primary_component = VANGUARD_COGWHEEL
@@ -9,7 +9,7 @@
channel_time = 30
primary_component = VANGUARD_COGWHEEL
quickbind_desc = "Allows you to grant a Servant and yourself stun immunity, as the Vanguard scripture.<br><b>Click your slab to disable.</b>"
slab_icon = "vanguard"
slab_overlay = "vanguard"
ranged_type = /obj/effect/proc_holder/slab/vanguard
ranged_message = "<span class='inathneq_small'><i>You charge the clockwork slab with defensive strength.</i>\n\
<b>Left-click a fellow Servant or yourself to grant Vanguard!\n\
@@ -38,7 +38,7 @@
channel_time = 30
primary_component = BELLIGERENT_EYE
quickbind_desc = "Allows you to place a Judicial Marker to knock down and damage non-Servants in an area.<br><b>Click your slab to disable.</b>"
slab_icon = "judicial"
slab_overlay = "judicial"
ranged_type = /obj/effect/proc_holder/slab/judicial
ranged_message = "<span class='neovgre_small'><i>You charge the clockwork slab with judicial force.</i>\n\
<b>Left-click a target to place a Judicial Marker!\n\
@@ -90,7 +90,7 @@
sort_priority = 4
quickbind = TRUE
quickbind_desc = "Allows you to convert a Servant's brute, burn, and oxygen damage to half toxin damage.<br><b>Click your slab to disable.</b>"
slab_icon = "compromise"
slab_overlay = "compromise"
ranged_type = /obj/effect/proc_holder/slab/compromise
ranged_message = "<span class='inathneq_small'><i>You charge the clockwork slab with healing power.</i>\n\
<b>Left-click a fellow Servant or yourself to heal!\n\
@@ -111,7 +111,7 @@
sort_priority = 5
quickbind = TRUE
quickbind_desc = "Allows you to bind and start converting an adjacent target non-Servant.<br><b>Click your slab to disable.</b>"
slab_icon = "geis"
slab_overlay = "geis"
ranged_type = /obj/effect/proc_holder/slab/geis
ranged_message = "<span class='sevtug_small'><i>You charge the clockwork slab with divine energy.</i>\n\
<b>Left-click a target within melee range to convert!\n\
@@ -386,7 +386,7 @@
/datum/clockwork_scripture/ranged_ability/volt_ray
name = "Volt Ray"
slab_icon = "volt"
slab_overlay = "volt"
allow_mobility = FALSE
ranged_type = /obj/effect/proc_holder/slab/volt
ranged_message = "<span class='nzcrentr_small'><i>You charge the clockwork slab with shocking might.</i>\n\
@@ -87,13 +87,6 @@
. *= min(max_integrity/max(obj_integrity, 1), 4)
. = round(., 0.01)
/obj/structure/destructible/clockwork/can_be_unfasten_wrench(mob/user, silent)
if(anchored && obj_integrity <= round(max_integrity * 0.25, 1))
if(!silent)
to_chat(user, "<span class='warning'>[src] is too damaged to unsecure!</span>")
return FAILED_UNFASTEN
return ..()
/obj/structure/destructible/clockwork/attack_ai(mob/user)
if(is_servant_of_ratvar(user))
attack_hand(user)
@@ -108,7 +101,7 @@
/obj/structure/destructible/clockwork/attackby(obj/item/I, mob/user, params)
if(is_servant_of_ratvar(user) && istype(I, /obj/item/weapon/wrench) && unanchored_icon)
if(default_unfasten_wrench(user, I, 50) == SUCCESSFUL_UNFASTEN)
update_anchored(user, TRUE)
update_anchored(user)
return 1
return ..()
@@ -125,7 +118,7 @@
if(do_damage)
playsound(src, break_sound, 10 * get_efficiency_mod(TRUE), 1)
take_damage(round(max_integrity * 0.25, 1), BRUTE)
to_chat(user, "<span class='warning'>As you unsecure [src] from the floor, you see cracks appear in its surface!</span>")
to_chat(user, "<span class='warning'>As you unsecure [src] from the floor, you see cracks appear in its surface!</span>")
/obj/structure/destructible/clockwork/emp_act(severity)
if(anchored && unanchored_icon)
@@ -140,7 +133,7 @@
desc = "A very large construction."
layer = MASSIVE_OBJ_LAYER
density = FALSE
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF | FREEZE_PROOF
/obj/structure/destructible/clockwork/massive/Initialize()
. = ..()
@@ -9,7 +9,7 @@
icon_state = "nothing"
density = FALSE
invisibility = INVISIBILITY_MAXIMUM
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE | FREEZE_PROOF
can_be_repaired = FALSE
immune_to_servant_attacks = TRUE
var/progress_in_seconds = 0 //Once this reaches GATEWAY_RATVAR_ARRIVAL, it's game over
@@ -32,16 +32,12 @@
return 25
/obj/structure/destructible/clockwork/ocular_warden/can_be_unfasten_wrench(mob/user, silent)
if(anchored)
if(obj_integrity <= max_integrity * 0.25)
if(!silent)
to_chat(user, "<span class='warning'>[src] is too damaged to unsecure!</span>")
return FAILED_UNFASTEN
else
if(!anchored)
for(var/obj/structure/destructible/clockwork/ocular_warden/W in orange(OCULAR_WARDEN_EXCLUSION_RANGE, src))
if(!silent)
to_chat(user, "<span class='neovgre'>You sense another ocular warden too near this location. Activating this one this close would cause them to fight.</span>")
return FAILED_UNFASTEN
if(W.anchored)
if(!silent)
to_chat(user, "<span class='neovgre'>You sense another ocular warden too near this location. Activating this one this close would cause them to fight.</span>")
return FAILED_UNFASTEN
return SUCCESSFUL_UNFASTEN
/obj/structure/destructible/clockwork/ocular_warden/ratvar_act()
@@ -79,7 +75,7 @@
if(GLOB.ratvar_awakens && L)
L.adjust_fire_stacks(damage_per_tick)
L.IgniteMob()
else if(istype(target,/obj/mecha))
else if(istype(target, /obj/mecha))
var/obj/mecha/M = target
M.take_damage(damage_per_tick * get_efficiency_mod(), BURN, "melee", 1, get_dir(src, M))
@@ -94,7 +90,7 @@
if(isliving(target))
var/mob/living/L = target
to_chat(L, "<span class='heavy_brass'>\"I SEE YOU!\"</span>\n<span class='userdanger'>[src]'s gaze [GLOB.ratvar_awakens ? "melts you alive" : "burns you"]!</span>")
else if(istype(target,/obj/mecha))
else if(istype(target, /obj/mecha))
var/obj/mecha/M = target
to_chat(M.occupant, "<span class='heavy_brass'>\"I SEE YOU!\"</span>" )
else if(prob(0.5)) //Extremely low chance because of how fast the subsystem it uses processes
@@ -15,8 +15,8 @@
/obj/item/clockwork/alloy_shards/large = 1, \
/obj/item/clockwork/component/vanguard_cogwheel/onyx_prism = 1)
var/static/list/component_refund = list(VANGUARD_COGWHEEL = 2, GEIS_CAPACITOR = 1, REPLICANT_ALLOY = 1)
var/static/delay_cost = 2500
var/static/delay_cost_increase = 750
var/static/delay_cost = 3000
var/static/delay_cost_increase = 1250
var/static/delay_remaining = 0
/obj/structure/destructible/clockwork/powered/prolonging_prism/examine(mob/user)
@@ -27,7 +27,7 @@
else
var/efficiency = get_efficiency_mod(TRUE)
to_chat(user, "<span class='inathneq_small'>It requires at least <b>[get_delay_cost()]W</b> of power to attempt to delay the arrival of an emergency shuttle by <b>[2 * efficiency]</b> minutes.</span>")
to_chat(user, "<span class='inathneq_small'>This cost increases by <b>[delay_cost_increase * 0.1]W</b> for every <b>10 CV</b> and <b>[delay_cost_increase]W</b> for every previous activation.</span>")
to_chat(user, "<span class='inathneq_small'>This cost increases by <b>[delay_cost_increase]W</b> for every previous activation.</span>")
/obj/structure/destructible/clockwork/powered/prolonging_prism/forced_disable(bad_effects)
if(active)
@@ -116,7 +116,7 @@
CHECK_TICK //we may be going over a hell of a lot of turfs
/obj/structure/destructible/clockwork/powered/prolonging_prism/proc/get_delay_cost()
return Floor((GLOB.clockwork_construction_value * delay_cost_increase * 0.01) + delay_cost, MIN_CLOCKCULT_POWER)
return Floor(delay_cost, MIN_CLOCKCULT_POWER)
/obj/structure/destructible/clockwork/powered/prolonging_prism/proc/seven_random_hexes(turf/T, efficiency)
var/static/list/hex_states = list("prismhex1", "prismhex2", "prismhex3", "prismhex4", "prismhex5", "prismhex6", "prismhex7")
+5 -5
View File
@@ -90,7 +90,7 @@
icon_state = "cultrobes"
item_state = "cultrobes"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
allowed = list(/obj/item/weapon/tome, /obj/item/weapon/melee/cultblade)
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0, fire = 10, acid = 10)
flags_inv = HIDEJUMPSUIT
cold_protection = CHEST|GROIN|LEGS|ARMS
@@ -133,7 +133,7 @@
icon_state = "magusred"
item_state = "magusred"
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
allowed = list(/obj/item/weapon/tome, /obj/item/weapon/melee/cultblade)
armor = list(melee = 50, bullet = 30, laser = 50,energy = 20, bomb = 25, bio = 10, rad = 0, fire = 10, acid = 10)
flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT
@@ -152,7 +152,7 @@
item_state = "cult_armor"
desc = "A heavily-armored exosuit worn by warriors of the Nar-Sien cult. It can withstand hard vacuum."
w_class = WEIGHT_CLASS_SMALL
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade,/obj/item/weapon/tank/internals/)
allowed = list(/obj/item/weapon/tome, /obj/item/weapon/melee/cultblade, /obj/item/weapon/tank/internals/)
armor = list(melee = 70, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 30, rad = 30, fire = 40, acid = 75)
helmettype = /obj/item/clothing/head/helmet/space/hardsuit/cult
@@ -172,7 +172,7 @@
w_class = WEIGHT_CLASS_BULKY
armor = list(melee = 50, bullet = 40, laser = 50,energy = 30, bomb = 50, bio = 30, rad = 30, fire = 50, acid = 60)
body_parts_covered = CHEST|GROIN|LEGS|ARMS
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
allowed = list(/obj/item/weapon/tome, /obj/item/weapon/melee/cultblade)
var/current_charges = 3
hoodtype = /obj/item/clothing/head/hooded/cult_hoodie
@@ -222,7 +222,7 @@
icon_state = "cultrobes"
item_state = "cultrobes"
flags_inv = HIDEJUMPSUIT
allowed = list(/obj/item/weapon/tome,/obj/item/weapon/melee/cultblade)
allowed = list(/obj/item/weapon/tome, /obj/item/weapon/melee/cultblade)
body_parts_covered = CHEST|GROIN|LEGS|ARMS
armor = list(melee = -50, bullet = -50, laser = -50,energy = -50, bomb = -50, bio = -50, rad = -50, fire = 0, acid = 0)
slowdown = -1
+1 -1
View File
@@ -175,7 +175,7 @@
/turf/closed,
/turf/open/floor/engine/cult,
/turf/open/space,
/turf/open/floor/plating/lava,
/turf/open/lava,
/turf/open/chasm))
if(is_type_in_typecache(T, blacklisted_pylon_turfs))
continue
+2 -2
View File
@@ -26,11 +26,11 @@
src.visible_message("<span class='warning'>[src] seems to have been harmed by the purity of [attacker]'s clothes.</span>", "<span class='notice'>Unsullied white clothing is disrupting your form.</span>")
return whiteness[U.type] + 1
if(BANE_TOOLBOX)
if(istype(weapon,/obj/item/weapon/storage/toolbox))
if(istype(weapon, /obj/item/weapon/storage/toolbox))
src.visible_message("<span class='warning'>The [weapon] seems unusually robust this time.</span>", "<span class='notice'>The [weapon] is your unmaking!</span>")
return 2.5 // Will take four hits with a normal toolbox to crit.
if(BANE_HARVEST)
if(istype(weapon,/obj/item/weapon/reagent_containers/food/snacks/grown/))
if(istype(weapon, /obj/item/weapon/reagent_containers/food/snacks/grown/))
visible_message("<span class='warning'>The spirits of the harvest aid in the exorcism.</span>", "<span class='notice'>The harvest spirits are harming you.</span>")
Knockdown(40)
qdel(weapon)
-1
View File
@@ -1,5 +1,4 @@
/datum/objective/devil
dangerrating = 5
/datum/objective/devil/soulquantity
explanation_text = "You shouldn't see this text. Error:DEVIL1"
+1 -1
View File
@@ -60,7 +60,7 @@
S.update_icon()
S.power_change()
for(var/area/A in world)
if(!istype(A, /area/space) && !istype(A, /area/shuttle) && !istype(A,/area/arrival))
if(!istype(A, /area/space) && !istype(A, /area/shuttle) && !istype(A, /area/arrival))
A.power_light = TRUE
A.power_equip = TRUE
A.power_environ = TRUE
+1 -1
View File
@@ -266,7 +266,7 @@
if(escaped_total > 0)
SSblackbox.set_val("escaped_total",escaped_total)
send2irc("Server", "Round just ended.")
if(cult.len && !istype(SSticker.mode,/datum/game_mode/cult))
if(cult.len && !istype(SSticker.mode, /datum/game_mode/cult))
datum_cult_completion()
+10
View File
@@ -0,0 +1,10 @@
diff a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm (rejected hunks)
@@ -266,7 +266,7 @@
if(escaped_total > 0)
SSblackbox.set_val("escaped_total",escaped_total)
send2irc("Server", "Round just ended.")
- if(cult.len && !istype(SSticker.mode,/datum/game_mode/cult))
+ if(cult.len && !istype(SSticker.mode, /datum/game_mode/cult))
datum_cult_completion()
return 0
+1 -1
View File
@@ -3,7 +3,7 @@
GLOBAL_LIST_INIT(gang_name_pool, list("Clandestine", "Prima", "Zero-G", "Max", "Blasto", "Waffle", "North", "Omni", "Newton", "Cyber", "Donk", "Gene", "Gib", "Tunnel", "Diablo", "Psyke", "Osiron", "Sirius", "Sleeping Carp"))
GLOBAL_LIST_INIT(gang_colors_pool, list("red","orange","yellow","green","blue","purple", "white"))
GLOBAL_LIST_INIT(gang_outfit_pool, list(/obj/item/clothing/suit/jacket/leather,/obj/item/clothing/suit/jacket/leather/overcoat,/obj/item/clothing/suit/jacket/puffer,/obj/item/clothing/suit/jacket/miljacket,/obj/item/clothing/suit/jacket/puffer,/obj/item/clothing/suit/pirate,/obj/item/clothing/suit/poncho,/obj/item/clothing/suit/apron/overalls,/obj/item/clothing/suit/jacket/letterman))
GLOBAL_LIST_INIT(gang_outfit_pool, list(/obj/item/clothing/suit/jacket/leather, /obj/item/clothing/suit/jacket/leather/overcoat, /obj/item/clothing/suit/jacket/puffer, /obj/item/clothing/suit/jacket/miljacket, /obj/item/clothing/suit/jacket/puffer, /obj/item/clothing/suit/pirate, /obj/item/clothing/suit/poncho, /obj/item/clothing/suit/apron/overalls, /obj/item/clothing/suit/jacket/letterman))
/datum/game_mode
var/list/datum/gang/gangs = list()
+1 -1
View File
@@ -188,7 +188,7 @@
if(!gangtools.len || !message)
return
for(var/obj/item/device/gangtool/tool in gangtools)
var/mob/living/mob = get(tool.loc,/mob/living)
var/mob/living/mob = get(tool.loc, /mob/living)
if(mob && mob.mind && mob.stat == CONSCIOUS)
if(mob.mind.gang_datum == src)
to_chat(mob, "<span class='[warning ? "warning" : "notice"]'>[bicon(tool)] [message]</span>")
+4 -1
View File
@@ -185,6 +185,9 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
/obj/effect/meteor/proc/meteor_effect()
if(heavy)
var/sound/meteor_sound = sound(meteorsound)
var/random_frequency = get_rand_frequency()
for(var/mob/M in GLOB.player_list)
if((M.orbiting) && (SSaugury.watchers[M]))
continue
@@ -193,7 +196,7 @@ GLOBAL_LIST_INIT(meteorsC, list(/obj/effect/meteor/dust)) //for space dust event
continue
var/dist = get_dist(M.loc, src.loc)
shake_camera(M, dist > 20 ? 2 : 4, dist > 20 ? 1 : 3)
M.playsound_local(src.loc, meteorsound, 50, 1, get_rand_frequency(), 10)
M.playsound_local(src.loc, null, 50, 1, random_frequency, 10, S = meteor_sound)
///////////////////////
//Meteor types
@@ -1,5 +1,4 @@
/datum/objective/abductee
dangerrating = 5
completed = 1
/datum/objective/abductee/random
@@ -96,9 +96,9 @@
agent_landmarks.len = max_teams
scientist_landmarks.len = max_teams
for(var/obj/effect/landmark/abductor/A in GLOB.landmarks_list)
if(istype(A,/obj/effect/landmark/abductor/agent))
if(istype(A, /obj/effect/landmark/abductor/agent))
agent_landmarks[text2num(A.team)] = A
else if(istype(A,/obj/effect/landmark/abductor/scientist))
else if(istype(A, /obj/effect/landmark/abductor/scientist))
scientist_landmarks[text2num(A.team)] = A
var/team_name = team_names[team_number]
@@ -210,7 +210,6 @@
// OBJECTIVES
/datum/objective/experiment
dangerrating = 10
target_amount = 6
var/team
@@ -271,10 +271,10 @@
var/list/all_items = M.GetAllContents()
for(var/obj/I in all_items)
if(istype(I,/obj/item/device/radio/))
if(istype(I, /obj/item/device/radio/))
var/obj/item/device/radio/r = I
r.listening = 0
if(!istype(I,/obj/item/device/radio/headset))
if(!istype(I, /obj/item/device/radio/headset))
r.broadcasting = 0 //goddamned headset hacks
/obj/item/device/firing_pin/abductor
@@ -1,6 +1,6 @@
/datum/surgery/organ_extraction
name = "experimental dissection"
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin,/datum/surgery_step/incise, /datum/surgery_step/extract_organ ,/datum/surgery_step/gland_insert)
steps = list(/datum/surgery_step/incise, /datum/surgery_step/clamp_bleeders, /datum/surgery_step/retract_skin, /datum/surgery_step/incise, /datum/surgery_step/extract_organ, /datum/surgery_step/gland_insert)
possible_locs = list("chest")
ignore_clothes = 1
@@ -108,7 +108,7 @@
/obj/item/organ/heart/gland/pop/activate()
to_chat(owner, "<span class='notice'>You feel unlike yourself.</span>")
var/species = pick(list(/datum/species/lizard,/datum/species/jelly/slime,/datum/species/pod,/datum/species/fly,/datum/species/jelly))
var/species = pick(list(/datum/species/lizard, /datum/species/jelly/slime, /datum/species/pod, /datum/species/fly, /datum/species/jelly))
owner.set_species(species)
/obj/item/organ/heart/gland/ventcrawling
@@ -229,7 +229,7 @@
/obj/structure/flora/swarmer_act()
return FALSE
/turf/open/floor/plating/lava/swarmer_act()
/turf/open/lava/swarmer_act()
if(!is_safe())
new /obj/structure/lattice/catwalk/swarmer_catwalk(src)
return FALSE
@@ -6,7 +6,7 @@
#define INVISIBILITY_REVENANT 50
/mob/living/simple_animal/revenant
name = "revenant"
name = "\a Revenant"
desc = "A malevolent spirit."
icon = 'icons/mob/mob.dmi'
icon_state = "revenant_idle"
@@ -419,7 +419,6 @@
//objectives
/datum/objective/revenant
dangerrating = 10
var/targetAmount = 100
/datum/objective/revenant/New()
@@ -439,7 +438,6 @@
return TRUE
/datum/objective/revenantFluff
dangerrating = 0
/datum/objective/revenantFluff/New()
var/list/explanationTexts = list("Assist and exacerbate existing threats at critical moments.", \
@@ -1,10 +1,8 @@
/datum/objective/sintouched
dangerrating = 5
completed = 1
/* NO ERP OBJECTIVE FOR YOU.
/datum/objective/sintouched/lust
dangerrating = 3 // it's not AS dangerous.
/datum/objective/sintouched/lust/New()
var/mob/dead/D = pick(dead_mob_list)
+2 -2
View File
@@ -118,7 +118,7 @@
if(foundIDs.len)
for(var/obj/item/weapon/card/id/ID in foundIDs)
ID.name = "lead agent card"
ID.access += GLOB.access_syndicate_leader
ID.access += ACCESS_SYNDICATE_LEADER
else
message_admins("Warning: Nuke Ops spawned without access to leave their spawn area!")
@@ -275,7 +275,7 @@
/datum/game_mode/proc/auto_declare_completion_nuclear()
if( syndicates.len || (SSticker && istype(SSticker.mode,/datum/game_mode/nuclear)) )
if( syndicates.len || (SSticker && istype(SSticker.mode, /datum/game_mode/nuclear)) )
var/text = "<br><FONT size=3><B>The syndicate operatives were:</B></FONT>"
var/purchases = ""
var/TC_uses = 0
+2 -2
View File
@@ -83,7 +83,7 @@
/obj/machinery/nuclearbomb/syndicate/Initialize()
. = ..()
var/obj/machinery/nuclearbomb/existing = locate("syndienuke")
var/obj/machinery/nuclearbomb/existing = locate("syndienuke") in GLOB.nuke_list
if(existing)
qdel(src)
throw EXCEPTION("Attempted to spawn a syndicate nuke while one already exists at [existing.loc.x],[existing.loc.y],[existing.loc.z]")
@@ -442,7 +442,7 @@
off_station = NUKE_MISS_STATION
if((bomb_location.x < (128-NUKERANGE)) || (bomb_location.x > (128+NUKERANGE)) || (bomb_location.y < (128-NUKERANGE)) || (bomb_location.y > (128+NUKERANGE)))
off_station = NUKE_MISS_STATION
else if(istype(A, /area/syndicate_mothership) || (istype(A,/area/shuttle/syndicate) && bomb_location.z == ZLEVEL_CENTCOM))
else if(istype(A, /area/syndicate_mothership) || (istype(A, /area/shuttle/syndicate) && bomb_location.z == ZLEVEL_CENTCOM))
off_station = NUKE_SYNDICATE_BASE
else
off_station = NUKE_NEAR_MISS
+1 -1
View File
@@ -89,7 +89,7 @@
return
switch(mode)
if(TRACK_NUKE_DISK)
var/obj/item/weapon/disk/nuclear/N = locate()
var/obj/item/weapon/disk/nuclear/N = locate() in GLOB.poi_list
target = N
if(TRACK_MALF_AI)
for(var/V in GLOB.ai_list)
+16 -33
View File
@@ -4,7 +4,6 @@
var/datum/mind/target = null //If they are focused on a particular person.
var/target_amount = 0 //If they are focused on a particular number. Steal objectives have their own counter.
var/completed = 0 //currently only used for custom objectives.
var/dangerrating = 0 //How hard the objective is, essentially. Used for dishing out objectives and checking overall victory.
var/martyr_compatible = 0 //If the objective is compatible with martyr objective, i.e. if you can still do it while dead.
/datum/objective/New(var/text)
@@ -43,6 +42,7 @@
return target
/datum/objective/proc/find_target_by_role(role, role_type=0, invert=0)//Option sets either to check assigned role or special role. Default to assigned., invert inverts the check, eg: "Don't choose a Ling"
var/list/candidates = list() //Let's compile a list and THEN pick one randomly, not just first come first serve...
for(var/datum/mind/possible_target in get_crewmember_minds())
if((possible_target != owner) && ishuman(possible_target.current))
var/is_role = 0
@@ -56,12 +56,11 @@
if(invert)
if(is_role)
continue
target = possible_target
break
candidates += possible_target
else if(is_role)
target = possible_target
break
candidates += possible_target
if(candidates)
target = pick(candidates)
update_explanation_text()
/datum/objective/proc/update_explanation_text()
@@ -78,7 +77,6 @@
/datum/objective/assassinate
var/target_role_type=0
dangerrating = 10
martyr_compatible = 1
/datum/objective/assassinate/find_target_by_role(role, role_type=0, invert=0)
@@ -89,7 +87,10 @@
/datum/objective/assassinate/check_completion()
if(target && target.current)
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
var/mob/living/carbon/human/H
if(ishuman(target.current))
H = target.current
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey || (H && H.dna.species.id == "memezombies")) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
return 1
return 0
return 1
@@ -141,7 +142,6 @@
/datum/objective/maroon
var/target_role_type=0
dangerrating = 5
martyr_compatible = 1
/datum/objective/maroon/find_target_by_role(role, role_type=0, invert=0)
@@ -152,7 +152,10 @@
/datum/objective/maroon/check_completion()
if(target && target.current)
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
var/mob/living/carbon/human/H
if(ishuman(target.current))
H = target.current
if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey || (H && H.dna.species.id == "memezombies")) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite
return 1
if(target.current.onCentcom() || target.current.onSyndieBase())
return 0
@@ -168,7 +171,6 @@
/datum/objective/debrain//I want braaaainssss
var/target_role_type=0
dangerrating = 20
/datum/objective/debrain/find_target_by_role(role, role_type=0, invert=0)
if(!invert)
@@ -201,7 +203,6 @@
/datum/objective/protect//The opposite of killing a dude.
var/target_role_type=0
dangerrating = 10
martyr_compatible = 1
/datum/objective/protect/find_target_by_role(role, role_type=0, invert=0)
@@ -230,7 +231,6 @@
/datum/objective/hijack
explanation_text = "Hijack the shuttle to ensure no loyalist Nanotrasen crew escape alive and out of custody."
dangerrating = 25
martyr_compatible = 0 //Technically you won't get both anyway.
/datum/objective/hijack/check_completion()
@@ -240,15 +240,13 @@
return 0
if(issilicon(owner.current))
return 0
if(SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
if(!SSshuttle.emergency.shuttle_areas[get_area(owner.current)])
return 0
return SSshuttle.emergency.is_hijacked()
/datum/objective/hijackclone
explanation_text = "Hijack the emergency shuttle by ensuring only you (or your copies) escape."
dangerrating = 25
martyr_compatible = 0
/datum/objective/hijackclone/check_completion()
@@ -281,7 +279,6 @@
/datum/objective/block
explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive."
dangerrating = 25
martyr_compatible = 1
/datum/objective/block/check_completion()
@@ -303,7 +300,6 @@
/datum/objective/purge
explanation_text = "Ensure no mutant humanoid species are present aboard the escape shuttle."
dangerrating = 25
martyr_compatible = 1
/datum/objective/purge/check_completion()
@@ -321,7 +317,6 @@
/datum/objective/robot_army
explanation_text = "Have at least eight active cyborgs synced to you."
dangerrating = 25
martyr_compatible = 0
/datum/objective/robot_army/check_completion()
@@ -341,7 +336,6 @@
/datum/objective/escape
explanation_text = "Escape on the shuttle or an escape pod alive and without being in custody."
dangerrating = 5
/datum/objective/escape/check_completion()
if(issilicon(owner.current))
@@ -369,7 +363,6 @@
return 0
/datum/objective/escape/escape_with_identity
dangerrating = 10
var/target_real_name // Has to be stored because the target's real_name can change over the course of the round
var/target_missing_id
@@ -408,7 +401,6 @@
/datum/objective/survive
explanation_text = "Stay alive until the end."
dangerrating = 3
/datum/objective/survive/check_completion()
if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current))
@@ -420,7 +412,6 @@
/datum/objective/martyr
explanation_text = "Die a glorious death."
dangerrating = 1
/datum/objective/martyr/check_completion()
if(!owner.current) //Gibbed, etc.
@@ -443,7 +434,6 @@ GLOBAL_LIST_EMPTY(possible_items)
/datum/objective/steal
var/datum/objective_item/targetinfo = null //Save the chosen item datum so we can access it later.
var/obj/item/steal_target = null //Needed for custom objectives (they're just items, not datums).
dangerrating = 5 //Overridden by the individual item's difficulty, but defaults to 5 for custom objectives.
martyr_compatible = 0
/datum/objective/steal/get_target()
@@ -466,8 +456,7 @@ GLOBAL_LIST_EMPTY(possible_items)
targetinfo = item
steal_target = targetinfo.targetitem
explanation_text = "Steal [targetinfo.name]."
dangerrating = targetinfo.difficulty
explanation_text = "Steal [targetinfo.name]"
give_special_equipment(targetinfo.special_equipment)
return steal_target
else
@@ -525,7 +514,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
return set_target(pick(GLOB.possible_items_special))
/datum/objective/steal/exchange
dangerrating = 10
martyr_compatible = 0
/datum/objective/steal/exchange/proc/set_faction(faction,otheragent)
@@ -547,7 +535,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/steal/exchange/backstab
dangerrating = 3
/datum/objective/steal/exchange/backstab/set_faction(faction)
if(faction == "red")
@@ -559,7 +546,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/download
dangerrating = 10
/datum/objective/download/proc/gen_amount_goal()
target_amount = rand(10,20)
@@ -595,7 +581,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/capture
dangerrating = 10
/datum/objective/capture/proc/gen_amount_goal()
target_amount = rand(5,10)
@@ -604,7 +589,7 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/capture/check_completion()//Basically runs through all the mobs in the area to determine how much they are worth.
var/captured_amount = 0
var/area/centcom/holding/A = locate()
var/area/centcom/holding/A = locate() in GLOB.sortedAreas
for(var/mob/living/carbon/human/M in A)//Humans.
if(M.stat==2)//Dead folks are worth less.
captured_amount+=0.5
@@ -635,7 +620,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/absorb
dangerrating = 10
/datum/objective/absorb/proc/gen_amount_goal(lowbound = 4, highbound = 6)
target_amount = rand (lowbound,highbound)
@@ -663,7 +647,6 @@ GLOBAL_LIST_EMPTY(possible_items_special)
/datum/objective/destroy
dangerrating = 10
martyr_compatible = 1
/datum/objective/destroy/find_target()
+29 -29
View File
@@ -12,72 +12,72 @@
return 1
/datum/objective_item/steal/caplaser
name = "the captain's antique laser gun"
name = "the captain's antique laser gun."
targetitem = /obj/item/weapon/gun/energy/laser/captain
difficulty = 5
excludefromjob = list("Captain")
/datum/objective_item/steal/hoslaser
name = "the head of security's personal laser gun"
name = "the head of security's personal laser gun."
targetitem = /obj/item/weapon/gun/energy/e_gun/hos
difficulty = 10
excludefromjob = list("Head Of Security")
/datum/objective_item/steal/handtele
name = "a hand teleporter"
name = "a hand teleporter."
targetitem = /obj/item/weapon/hand_tele
difficulty = 5
excludefromjob = list("Captain")
/datum/objective_item/steal/jetpack
name = "the Captain's jetpack"
name = "the Captain's jetpack."
targetitem = /obj/item/weapon/tank/jetpack/oxygen/captain
difficulty = 5
excludefromjob = list("Captain")
/datum/objective_item/steal/magboots
name = "the chief engineer's advanced magnetic boots"
name = "the chief engineer's advanced magnetic boots."
targetitem = /obj/item/clothing/shoes/magboots/advance
difficulty = 5
excludefromjob = list("Chief Engineer")
/datum/objective_item/steal/capmedal
name = "the medal of captaincy"
name = "the medal of captaincy."
targetitem = /obj/item/clothing/accessory/medal/gold/captain
difficulty = 5
excludefromjob = list("Captain")
/datum/objective_item/steal/hypo
name = "the hypospray"
name = "the hypospray."
targetitem = /obj/item/weapon/reagent_containers/hypospray/CMO
difficulty = 5
excludefromjob = list("Chief Medical Officer")
/datum/objective_item/steal/nukedisc
name = "the nuclear authentication disk"
name = "the nuclear authentication disk."
targetitem = /obj/item/weapon/disk/nuclear
difficulty = 5
excludefromjob = list("Captain")
/datum/objective_item/steal/reflector
name = "a reflector vest"
name = "a reflector vest."
targetitem = /obj/item/clothing/suit/armor/laserproof
difficulty = 3
excludefromjob = list("Head of Security", "Warden")
/datum/objective_item/steal/reactive
name = "the reactive teleport armor"
name = "the reactive teleport armor."
targetitem = /obj/item/clothing/suit/armor/reactive
difficulty = 5
excludefromjob = list("Research Director")
/datum/objective_item/steal/documents
name = "any set of secret documents of any organization"
name = "any set of secret documents of any organization."
targetitem = /obj/item/documents //Any set of secret documents. Doesn't have to be NT's
difficulty = 5
/datum/objective_item/steal/nuke_core
name = "the heavily radioactive plutonium core from the onboard self-destruct. Take care to wear the proper safety equipment when extracting the core"
name = "the heavily radioactive plutonium core from the onboard self-destruct. Take care to wear the proper safety equipment when extracting the core!"
targetitem = /obj/item/nuke_core
difficulty = 15
@@ -96,7 +96,7 @@
//Items with special checks!
/datum/objective_item/steal/plasma
name = "28 moles of plasma (full tank)"
name = "28 moles of plasma (full tank)."
targetitem = /obj/item/weapon/tank
difficulty = 3
excludefromjob = list("Chief Engineer","Research Director","Station Engineer","Scientist","Atmospheric Technician")
@@ -109,7 +109,7 @@
/datum/objective_item/steal/functionalai
name = "a functional AI"
name = "a functional AI."
targetitem = /obj/item/device/aicard
difficulty = 20 //beyond the impossible
@@ -120,7 +120,7 @@
return 0
/datum/objective_item/steal/blueprints
name = "the station blueprints"
name = "the station blueprints."
targetitem = /obj/item/areaeditor/blueprints
difficulty = 10
excludefromjob = list("Chief Engineer")
@@ -136,7 +136,7 @@
return 0
/datum/objective_item/steal/slime
name = "an unused sample of slime extract"
name = "an unused sample of slime extract."
targetitem = /obj/item/slime_extract
difficulty = 3
excludefromjob = list("Research Director","Scientist")
@@ -148,54 +148,54 @@
//Unique Objectives
/datum/objective_item/unique/docs_red
name = "the \"Red\" secret documents"
name = "the \"Red\" secret documents."
targetitem = /obj/item/documents/syndicate/red
difficulty = 10
/datum/objective_item/unique/docs_blue
name = "the \"Blue\" secret documents"
name = "the \"Blue\" secret documents."
targetitem = /obj/item/documents/syndicate/blue
difficulty = 10
//Old ninja objectives.
/datum/objective_item/special/pinpointer
name = "the captain's pinpointer"
name = "the captain's pinpointer."
targetitem = /obj/item/weapon/pinpointer
difficulty = 10
/datum/objective_item/special/aegun
name = "an advanced energy gun"
name = "an advanced energy gun."
targetitem = /obj/item/weapon/gun/energy/e_gun/nuclear
difficulty = 10
/datum/objective_item/special/ddrill
name = "a diamond drill"
name = "a diamond drill."
targetitem = /obj/item/weapon/pickaxe/drill/diamonddrill
difficulty = 10
/datum/objective_item/special/boh
name = "a bag of holding"
name = "a bag of holding."
targetitem = /obj/item/weapon/storage/backpack/holding
difficulty = 10
/datum/objective_item/special/hypercell
name = "a hyper-capacity cell"
name = "a hyper-capacity power cell."
targetitem = /obj/item/weapon/stock_parts/cell/hyper
difficulty = 5
/datum/objective_item/special/laserpointer
name = "a laser pointer"
name = "a laser pointer."
targetitem = /obj/item/device/laser_pointer
difficulty = 5
/datum/objective_item/special/corgimeat
name = "a piece of corgi meat"
name = "a piece of corgi meat."
targetitem = /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi
difficulty = 5
//Stack objectives get their own subtype
/datum/objective_item/stack
name = "5 cardboards"
name = "5 cardboard."
targetitem = /obj/item/stack/sheet/cardboard
difficulty = 9001
@@ -208,16 +208,16 @@
return found_amount>=target_amount
/datum/objective_item/stack/diamond
name = "10 diamonds"
name = "10 diamonds."
targetitem = /obj/item/stack/sheet/mineral/diamond
difficulty = 10
/datum/objective_item/stack/gold
name = "50 gold bars"
name = "50 gold bars."
targetitem = /obj/item/stack/sheet/mineral/gold
difficulty = 15
/datum/objective_item/stack/uranium
name = "25 refined uranium bars"
name = "25 refined uranium bars."
targetitem = /obj/item/stack/sheet/mineral/uranium
difficulty = 10
+3 -3
View File
@@ -360,7 +360,7 @@
/datum/game_mode/proc/auto_declare_completion_revolution()
var/list/targets = list()
if(head_revolutionaries.len || istype(SSticker.mode,/datum/game_mode/revolution))
if(head_revolutionaries.len || istype(SSticker.mode, /datum/game_mode/revolution))
var/num_revs = 0
var/num_survivors = 0
for(var/mob/living/carbon/survivor in GLOB.living_mob_list)
@@ -377,14 +377,14 @@
text += "<br>"
to_chat(world, text)
if(revolutionaries.len || istype(SSticker.mode,/datum/game_mode/revolution))
if(revolutionaries.len || istype(SSticker.mode, /datum/game_mode/revolution))
var/text = "<br><font size=3><b>The revolutionaries were:</b></font>"
for(var/datum/mind/rev in revolutionaries)
text += printplayer(rev, 1)
text += "<br>"
to_chat(world, text)
if( head_revolutionaries.len || revolutionaries.len || istype(SSticker.mode,/datum/game_mode/revolution) )
if( head_revolutionaries.len || revolutionaries.len || istype(SSticker.mode, /datum/game_mode/revolution) )
var/text = "<br><font size=3><b>The heads of staff were:</b></font>"
var/list/heads = get_all_heads()
for(var/datum/mind/head in heads)
+2 -2
View File
@@ -27,9 +27,9 @@ GLOBAL_VAR_INIT(hsboxspawn, TRUE)
//items that shouldn't spawn on the floor because they would bug or act weird
var/global/list/spawn_forbidden = list(
/obj/item/tk_grab, /obj/item/weapon/implant, // not implanter, the actual thing that is inside you
/obj/item/assembly,/obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai,
/obj/item/assembly, /obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai,
/obj/item/device/uplink, /obj/item/smallDelivery, /obj/item/projectile,
/obj/item/borg/sight,/obj/item/borg/stun,/obj/item/weapon/robot_module)
/obj/item/borg/sight, /obj/item/borg/stun, /obj/item/weapon/robot_module)
/datum/hSB/proc/update()
var/global/list/hrefs = list(
+2 -2
View File
@@ -71,9 +71,9 @@
/datum/game_mode/traitor/make_antag_chance(mob/living/carbon/human/character) //Assigns traitor to latejoiners
var/traitorcap = min(round(GLOB.joined_player_list.len / (config.traitor_scaling_coeff * 2)) + 2 + num_modifier, round(GLOB.joined_player_list.len/config.traitor_scaling_coeff) + num_modifier )
if(SSticker.mode.traitors.len >= traitorcap) //Upper cap for number of latejoin antagonists
if((SSticker.mode.traitors.len + pre_traitors.len) >= traitorcap) //Upper cap for number of latejoin antagonists
return
if(SSticker.mode.traitors.len <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * 2)))
if((SSticker.mode.traitors.len + pre_traitors.len) <= (traitorcap - 2) || prob(100 / (config.traitor_scaling_coeff * 2)))
if(ROLE_TRAITOR in character.client.prefs.be_special)
if(!jobban_isbanned(character, ROLE_TRAITOR) && !jobban_isbanned(character, "Syndicate"))
if(age_check(character.client))
+2 -2
View File
@@ -437,7 +437,7 @@
var/obj/item/weapon/card/id/W = new /obj/item/weapon/card/id
W.icon_state = "centcom"
W.access += GLOB.access_maint_tunnels
W.access += ACCESS_MAINT_TUNNELS
W.assignment = "Multiverse Traveller"
W.registered_name = M.real_name
W.update_label(M.real_name)
@@ -468,7 +468,7 @@
to_chat(target, "<span class='userdanger'>You feel a stabbing pain in [parse_zone(user.zone_selected)]!</span>")
target.Knockdown(40)
GiveHint(target)
else if(istype(I,/obj/item/weapon/bikehorn))
else if(istype(I, /obj/item/weapon/bikehorn))
to_chat(target, "<span class='userdanger'>HONK</span>")
target << 'sound/items/airhorn.ogg'
target.adjustEarDamage(0,3)
+2 -2
View File
@@ -76,7 +76,7 @@
return 0
/datum/spellbook_entry/proc/Refund(mob/living/carbon/human/user,obj/item/weapon/spellbook/book) //return point value or -1 for failure
var/area/wizard_station/A = locate()
var/area/wizard_station/A = locate() in GLOB.sortedAreas
if(!(user in A.contents))
to_chat(user, "<span class='warning'>You can only refund spells at the wizard lair</span>")
return -1
@@ -899,7 +899,7 @@
/obj/item/weapon/spellbook/oneuse/random/Initialize()
..()
var/static/banned_spells = list(/obj/item/weapon/spellbook/oneuse/mimery_blockade,/obj/item/weapon/spellbook/oneuse/mimery_guns)
var/static/banned_spells = list(/obj/item/weapon/spellbook/oneuse/mimery_blockade, /obj/item/weapon/spellbook/oneuse/mimery_guns)
var/real_type = pick(subtypesof(/obj/item/weapon/spellbook/oneuse) - banned_spells)
new real_type(loc)
qdel(src)
+1 -1
View File
@@ -11,7 +11,7 @@
var/uses = 20
var/cooldown = 0
var/cooldown_time = 100
req_access = list(GLOB.access_ai_upload)
req_access = list(ACCESS_AI_UPLOAD)
/obj/machinery/ai_slipper/examine(mob/user)
..()
+135
View File
@@ -0,0 +1,135 @@
/obj/machinery/aug_manipulator
name = "\improper augment manipulator"
desc = "A machine for custom fitting augmentations, with in-built spraypainter."
icon = 'icons/obj/pda.dmi'
icon_state = "pdapainter"
density = TRUE
anchored = TRUE
obj_integrity = 200
max_integrity = 200
var/obj/item/bodypart/storedpart
var/initial_icon_state
var/static/list/style_list_icons = list("standard" = 'icons/mob/augmentation/augments.dmi', "engineer" = 'icons/mob/augmentation/augments_engineer.dmi', "security" = 'icons/mob/augmentation/augments_security.dmi', "mining" = 'icons/mob/augmentation/augments_mining.dmi')
/obj/machinery/aug_manipulator/Initialize()
initial_icon_state = initial(icon_state)
return ..()
/obj/machinery/aug_manipulator/update_icon()
cut_overlays()
if(stat & BROKEN)
icon_state = "[initial_icon_state]-broken"
return
if(storedpart)
add_overlay("[initial_icon_state]-closed")
if(powered())
icon_state = initial_icon_state
else
icon_state = "[initial_icon_state]-off"
/obj/machinery/aug_manipulator/Destroy()
QDEL_NULL(storedpart)
return ..()
/obj/machinery/aug_manipulator/on_deconstruction()
if(storedpart)
storedpart.forceMove(loc)
storedpart = null
/obj/machinery/aug_manipulator/contents_explosion(severity, target)
if(storedpart)
storedpart.ex_act(severity, target)
/obj/machinery/aug_manipulator/handle_atom_del(atom/A)
if(A == storedpart)
storedpart = null
update_icon()
/obj/machinery/aug_manipulator/attackby(obj/item/O, mob/user, params)
if(default_unfasten_wrench(user, O))
power_change()
return
else if(istype(O, /obj/item/bodypart))
var/obj/item/bodypart/B = O
if(B.status != BODYPART_ROBOTIC)
to_chat(user, "<span class='warning'>The machine only accepts cybernetics!</span>")
return
if(storedpart)
to_chat(user, "<span class='warning'>There is already something inside!</span>")
return
else
O = user.get_active_held_item()
if(!user.transferItemToLoc(O, src))
return
storedpart = O
O.add_fingerprint(user)
update_icon()
else if(istype(O, /obj/item/weapon/weldingtool) && user.a_intent != INTENT_HARM)
var/obj/item/weapon/weldingtool/WT = O
if(obj_integrity < max_integrity)
if(WT.remove_fuel(0,user))
user.visible_message("[user] begins repairing [src].", \
"<span class='notice'>You begin repairing [src]...</span>", \
"<span class='italics'>You hear welding.</span>")
playsound(src, WT.usesound, 40, 1)
if(do_after(user,40*WT.toolspeed, TRUE, target = src))
if(!WT.isOn() || !(stat & BROKEN))
return
to_chat(user, "<span class='notice'>You repair [src].</span>")
playsound(src, 'sound/items/welder2.ogg', 50, 1)
stat &= ~BROKEN
obj_integrity = max(obj_integrity, max_integrity)
update_icon()
else
to_chat(user, "<span class='notice'>[src] does not need repairs.</span>")
else
return ..()
/obj/machinery/aug_manipulator/obj_break(damage_flag)
if(!(flags & NODECONSTRUCT))
if(!(stat & BROKEN))
stat |= BROKEN
update_icon()
/obj/machinery/aug_manipulator/attack_hand(mob/user)
if(!..())
add_fingerprint(user)
if(storedpart)
var/augstyle = input(user, "Select style.", "Augment Custom Fitting") as null|anything in style_list_icons
if(!augstyle)
return
if(!in_range(src, user))
return
if(!storedpart)
return
storedpart.icon = style_list_icons[augstyle]
eject_part(user)
else
to_chat(user, "<span class='notice'>\The [src] is empty.</span>")
/obj/machinery/aug_manipulator/proc/eject_part(mob/living/user)
if(storedpart)
storedpart.forceMove(get_turf(src))
storedpart = null
update_icon()
else
to_chat(user, "<span class='notice'>[src] is empty.</span>")
/obj/machinery/aug_manipulator/AltClick(mob/living/user)
..()
if(!user.canUseTopic(src))
return
else
eject_part(user)
/obj/machinery/aug_manipulator/power_change()
..()
update_icon()
+3 -3
View File
@@ -152,7 +152,7 @@
busy = TRUE
var/inserted = materials.insert_item(O)
if(inserted)
if(istype(O,/obj/item/stack))
if(istype(O, /obj/item/stack))
if (O.materials[MAT_METAL])
flick("autolathe_o",src)//plays metal insertion animation
if (O.materials[MAT_GLASS])
@@ -361,7 +361,7 @@
if(D.make_reagents.len)
return 0
var/coeff = (ispath(D.build_path,/obj/item/stack) ? 1 : prod_coeff)
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
if(D.materials[MAT_METAL] && (materials.amount(MAT_METAL) < (D.materials[MAT_METAL] * coeff * amount)))
return 0
@@ -370,7 +370,7 @@
return 1
/obj/machinery/autolathe/proc/get_design_cost(datum/design/D)
var/coeff = (ispath(D.build_path,/obj/item/stack) ? 1 : prod_coeff)
var/coeff = (ispath(D.build_path, /obj/item/stack) ? 1 : prod_coeff)
var/dat
if(D.materials[MAT_METAL])
dat += "[D.materials[MAT_METAL] * coeff] metal "
+3 -3
View File
@@ -15,7 +15,7 @@
density = TRUE
icon = 'icons/obj/cloning.dmi'
icon_state = "pod_0"
req_access = list(GLOB.access_cloning) //For premature unlocking.
req_access = list(ACCESS_CLONING) //FOR PREMATURE UNLOCKING.
verb_say = "states"
var/heal_level //The clone is released once its health reaches this level.
var/obj/machinery/computer/cloning/connected = null //So we remember the connected clone machine.
@@ -152,7 +152,7 @@
return FALSE
if(mess || attempting)
return FALSE
clonemind = locate(mindref)
clonemind = locate(mindref) in SSticker.minds
if(!istype(clonemind)) //not a mind
return FALSE
if( clonemind.current && clonemind.current.stat != DEAD ) //mind is associated with a non-dead body
@@ -304,7 +304,7 @@
if(default_deconstruction_crowbar(W))
return
if(istype(W,/obj/item/device/multitool))
if(istype(W, /obj/item/device/multitool))
var/obj/item/device/multitool/P = W
if(istype(P.buffer, /obj/machinery/computer/cloning))
+1 -1
View File
@@ -1,7 +1,7 @@
/obj/machinery/computer/aifixer
name = "\improper AI system integrity restorer"
desc = "Used with intelliCards containing nonfunctioning AIs to restore them to working order."
req_access = list(GLOB.access_captain, GLOB.access_robotics, GLOB.access_heads)
req_access = list(ACCESS_CAPTAIN, ACCESS_ROBOTICS, ACCESS_HEADS)
var/mob/living/silicon/ai/occupier = null
var/active = 0
circuit = /obj/item/weapon/circuitboard/computer/aifixer
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Used to remotely control the flow of power to different parts of the station."
icon_screen = "solar"
icon_keyboard = "power_key"
req_access = list(GLOB.access_engine)
req_access = list(ACCESS_ENGINE)
circuit = /obj/item/weapon/circuitboard/computer/apc_control
light_color = LIGHT_COLOR_YELLOW
var/list/apcs //APCs the computer has access to
@@ -308,7 +308,7 @@
build_path = /obj/machinery/computer/rdconsole/core
/obj/item/weapon/circuitboard/computer/rdconsole/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/screwdriver))
if(istype(I, /obj/item/weapon/screwdriver))
if(build_path == /obj/machinery/computer/rdconsole/core)
name = "R&D Console - Robotics (Computer Board)"
build_path = /obj/machinery/computer/rdconsole/robotics
@@ -343,13 +343,13 @@
var/emagged = FALSE
/obj/item/weapon/circuitboard/computer/cargo/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/device/multitool))
if(istype(I, /obj/item/device/multitool))
if(!emagged)
contraband = !contraband
to_chat(user, "<span class='notice'>Receiver spectrum set to [contraband ? "Broad" : "Standard"].</span>")
else
to_chat(user, "<span class='notice'>The spectrum chip is unresponsive.</span>")
else if(istype(I,/obj/item/weapon/card/emag))
else if(istype(I, /obj/item/weapon/card/emag))
if(!emagged)
contraband = TRUE
emagged = TRUE
@@ -441,7 +441,7 @@
origin_tech = "programming=1"
/obj/item/weapon/circuitboard/computer/libraryconsole/attackby(obj/item/I, mob/user, params)
if(istype(I,/obj/item/weapon/screwdriver))
if(istype(I, /obj/item/weapon/screwdriver))
if(build_path == /obj/machinery/computer/libraryconsole/bookmanagement)
name = "Library Visitor Console (Computer Board)"
build_path = /obj/machinery/computer/libraryconsole
+16 -16
View File
@@ -9,7 +9,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
desc = "You can use this to manage jobs and ID access."
icon_screen = "id"
icon_keyboard = "id_key"
req_one_access = list(GLOB.access_heads, GLOB.access_change_ids)
req_one_access = list(ACCESS_HEADS, ACCESS_CHANGE_IDS)
circuit = /obj/item/weapon/circuitboard/computer/card
var/obj/item/weapon/card/id/scan = null
var/obj/item/weapon/card/id/modify = null
@@ -158,7 +158,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
dat += "<table>"
dat += "<tr><td style='width:25%'><b>Job</b></td><td style='width:25%'><b>Slots</b></td><td style='width:25%'><b>Open job</b></td><td style='width:25%'><b>Close job</b><td style='width:25%'><b>Prioritize</b></td></td></tr>"
var/ID
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
ID = 1
else
ID = 0
@@ -258,7 +258,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
var/jobs_all = ""
var/list/alljobs = list("Unassigned")
alljobs += (istype(src,/obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
alljobs += (istype(src, /obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom"
for(var/job in alljobs)
jobs_all += "<a href='?src=\ref[src];choice=assign;assign_target=[job]'>[replacetext(job, " ", "&nbsp")]</a> " //make sure there isn't a line break in the middle of a job
@@ -303,7 +303,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
jobs += "<b>Assignment:</b> [target_rank] (<a href='?src=\ref[src];choice=demote'>Demote</a>)</span>"
var/accesses = ""
if(istype(src,/obj/machinery/computer/card/centcom))
if(istype(src, /obj/machinery/computer/card/centcom))
accesses += "<h5>Central Command:</h5>"
for(var/A in get_all_centcom_access())
if(A in modify.access)
@@ -392,7 +392,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if (check_access(scan))
region_access = list()
head_subordinates = list()
if(GLOB.access_change_ids in scan.access)
if(ACCESS_CHANGE_IDS in scan.access)
if(target_dept)
head_subordinates = get_all_jobs()
region_access |= target_dept
@@ -402,20 +402,20 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
playsound(src, 'sound/machines/terminal_on.ogg', 50, 0)
else
if((GLOB.access_hop in scan.access) && ((target_dept==1) || !target_dept))
if((ACCESS_HOP in scan.access) && ((target_dept==1) || !target_dept))
region_access |= 1
region_access |= 6
get_subordinates("Head of Personnel")
if((GLOB.access_hos in scan.access) && ((target_dept==2) || !target_dept))
if((ACCESS_HOS in scan.access) && ((target_dept==2) || !target_dept))
region_access |= 2
get_subordinates("Head of Security")
if((GLOB.access_cmo in scan.access) && ((target_dept==3) || !target_dept))
if((ACCESS_CMO in scan.access) && ((target_dept==3) || !target_dept))
region_access |= 3
get_subordinates("Chief Medical Officer")
if((GLOB.access_rd in scan.access) && ((target_dept==4) || !target_dept))
if((ACCESS_RD in scan.access) && ((target_dept==4) || !target_dept))
region_access |= 4
get_subordinates("Research Director")
if((GLOB.access_ce in scan.access) && ((target_dept==5) || !target_dept))
if((ACCESS_CE in scan.access) && ((target_dept==5) || !target_dept))
region_access |= 5
get_subordinates("Chief Engineer")
if(region_access)
@@ -433,7 +433,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if(authenticated)
var/access_type = text2num(href_list["access_target"])
var/access_allowed = text2num(href_list["allowed"])
if(access_type in (istype(src,/obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
if(access_type in (istype(src, /obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses()))
modify.access -= access_type
if(access_allowed == 1)
modify.access += access_type
@@ -460,7 +460,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
to_chat(usr, "<span class='error'>No log exists for this job.</span>")
return
modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
modify.access = ( istype(src, /obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : jobdatum.get_access() )
if (modify)
modify.assignment = t1
playsound(src, 'sound/machines/terminal_prompt_confirm.ogg', 50, 0)
@@ -492,7 +492,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("make_job_available")
// MAKE ANOTHER JOB POSITION AVAILABLE FOR LATE JOINERS
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
@@ -507,7 +507,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if("make_job_unavailable")
// MAKE JOB POSITION UNAVAILABLE FOR LATE JOINERS
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
var/edit_job_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(edit_job_target)
if(!j)
@@ -523,7 +523,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
if ("prioritize_job")
// TOGGLE WHETHER JOB APPEARS AS PRIORITIZED IN THE LOBBY
if(scan && (GLOB.access_change_ids in scan.access) && !target_dept)
if(scan && (ACCESS_CHANGE_IDS in scan.access) && !target_dept)
var/priority_target = href_list["job"]
var/datum/job/j = SSjob.GetJob(priority_target)
if(!j)
@@ -564,7 +564,7 @@ GLOBAL_VAR_INIT(time_last_changed_position, 0)
/obj/machinery/computer/card/centcom
name = "\improper Centcom identification console"
circuit = /obj/item/weapon/circuitboard/computer/card/centcom
req_access = list(GLOB.access_cent_captain)
req_access = list(ACCESS_CENT_CAPTAIN)
/obj/machinery/computer/card/minor
name = "department management console"
+2 -2
View File
@@ -4,7 +4,7 @@
icon_screen = "dna"
icon_keyboard = "med_key"
circuit = /obj/item/weapon/circuitboard/computer/cloning
req_access = list(GLOB.access_heads) //Only used for record deletion right now.
req_access = list(ACCESS_HEADS) //ONLY USED FOR RECORD DELETION RIGHT NOW.
var/obj/machinery/dna_scannernew/scanner = null //Linked scanner. For scanning.
var/list/pods //Linked cloning pods
var/temp = "Inactive"
@@ -124,7 +124,7 @@
to_chat(user, "<span class='notice'>You insert [W].</span>")
playsound(src, 'sound/machines/terminal_insert_disc.ogg', 50, 0)
src.updateUsrDialog()
else if(istype(W,/obj/item/device/multitool))
else if(istype(W, /obj/item/device/multitool))
var/obj/item/device/multitool/P = W
if(istype(P.buffer, /obj/machinery/clonepod))
@@ -4,7 +4,7 @@
desc = "A console used for high-priority announcements and emergencies."
icon_screen = "comm"
icon_keyboard = "tech_key"
req_access = list(GLOB.access_heads)
req_access = list(ACCESS_HEADS)
circuit = /obj/item/weapon/circuitboard/computer/communications
var/authenticated = 0
var/auth_id = "Unknown" //Who is currently logged in?
@@ -101,7 +101,7 @@
var/obj/item/device/pda/pda = I
I = pda.id
if (I && istype(I))
if(GLOB.access_captain in I.access)
if(ACCESS_CAPTAIN in I.access)
var/old_level = GLOB.security_level
if(!tmp_alertlevel) tmp_alertlevel = SEC_LEVEL_GREEN
if(tmp_alertlevel < SEC_LEVEL_GREEN) tmp_alertlevel = SEC_LEVEL_GREEN
@@ -4,7 +4,7 @@
desc = "Used to send criminals to the Labor Camp"
icon_screen = "explosive"
icon_keyboard = "security_key"
req_access = list(GLOB.access_armory)
req_access = list(ACCESS_ARMORY)
circuit = /obj/item/weapon/circuitboard/computer/gulag_teleporter_console
var/default_goal = 200
var/obj/item/weapon/card/id/prisoner/id = null
+1 -1
View File
@@ -5,7 +5,7 @@
desc = "This can be used to check medical records."
icon_screen = "medcomp"
icon_keyboard = "med_key"
req_one_access = list(GLOB.access_medical, GLOB.access_forensics_lockers)
req_one_access = list(ACCESS_MEDICAL, ACCESS_FORENSICS_LOCKERS)
circuit = /obj/item/weapon/circuitboard/computer/med_data
var/obj/item/weapon/card/id/scan = null
var/authenticated = null
+1 -1
View File
@@ -130,7 +130,7 @@
name = "\improper ProComp Executive IIc"
desc = "The Syndicate operate on a tight budget. Operates external airlocks."
title = "External Airlock Controls"
req_access = list(GLOB.access_syndicate)
req_access = list(ACCESS_SYNDICATE)
/obj/machinery/computer/pod/old/syndicate/attack_hand(mob/user)
if(!allowed(user))
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Used to manage tracking implants placed inside criminals."
icon_screen = "explosive"
icon_keyboard = "security_key"
req_access = list(GLOB.access_brig)
req_access = list(ACCESS_BRIG)
var/id = 0
var/temp = null
var/status = 0
+2 -2
View File
@@ -6,7 +6,7 @@
desc = "Used to remotely lockdown or detonate linked Cyborgs."
icon_screen = "robot"
icon_keyboard = "rd_key"
req_access = list(GLOB.access_robotics)
req_access = list(ACCESS_ROBOTICS)
circuit = /obj/item/weapon/circuitboard/computer/robotics
var/temp = null
@@ -158,7 +158,7 @@
else if (href_list["killdrone"])
if(src.allowed(usr))
var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"])
var/mob/living/simple_animal/drone/D = locate(href_list["killdrone"]) in GLOB.mob_list
if(D.hacked)
to_chat(usr, "<span class='danger'>ERROR: [D] is not responding to external commands.</span>")
else
+4 -4
View File
@@ -3,7 +3,7 @@
desc = "Used to view and edit personnel's security records."
icon_screen = "security"
icon_keyboard = "security_key"
req_one_access = list(GLOB.access_security, GLOB.access_forensics_lockers)
req_one_access = list(ACCESS_SECURITY, ACCESS_FORENSICS_LOCKERS)
circuit = /obj/item/weapon/circuitboard/computer/secure_data
var/obj/item/weapon/card/id/scan = null
var/authenticated = null
@@ -576,13 +576,13 @@ What a mess.*/
if(istype(active2, /datum/data/record))
active2.fields["name"] = t1
if("id")
if(istype(active2,/datum/data/record) || istype(active1,/datum/data/record))
if(istype(active2, /datum/data/record) || istype(active1, /datum/data/record))
var/t1 = stripped_input(usr, "Please input id:", "Secure. records", active1.fields["id"], null)
if(!canUseSecurityRecordsConsole(usr, t1, a1))
return
if(istype(active1,/datum/data/record))
if(istype(active1, /datum/data/record))
active1.fields["id"] = t1
if(istype(active2,/datum/data/record))
if(istype(active2, /datum/data/record))
active2.fields["id"] = t1
if("fingerprint")
if(istype(active1, /datum/data/record))
+4 -2
View File
@@ -8,7 +8,7 @@
anchored = FALSE
verb_say = "states"
density = TRUE
req_access = list(GLOB.access_engine)
req_access = list(ACCESS_ENGINE)
var/active = FALSE
var/list/rangers = list()
var/charge = 35
@@ -456,10 +456,12 @@
if(charge<35)
charge += 1
if(world.time < stop && active)
var/sound/song_played = sound(selection.song_path)
for(var/mob/M in range(10,src))
if(!(M in rangers))
rangers[M] = TRUE
M.playsound_local(get_turf(M), selection.song_path, 100, channel = CHANNEL_JUKEBOX)
M.playsound_local(get_turf(M), null, 100, channel = CHANNEL_JUKEBOX, S = song_played)
if(prob(5+(allowed(M)*4)) && M.canmove)
dance(M)
for(var/mob/L in rangers)
@@ -1,6 +1,6 @@
/obj/item/weapon/electronics/airlock
name = "airlock electronics"
req_access = list(GLOB.access_maint_tunnels)
req_access = list(ACCESS_MAINT_TUNNELS)
var/list/accesses = list()
var/one_access = 0
+1 -1
View File
@@ -23,7 +23,7 @@
icon = 'icons/obj/status_display.dmi'
icon_state = "frame"
desc = "A remote control for a door."
req_access = list(GLOB.access_security)
req_access = list(ACCESS_SECURITY)
anchored = TRUE
density = FALSE
var/id = null // id of linked machinery/lockers
+1 -1
View File
@@ -192,7 +192,7 @@
playsound(src.loc, 'sound/items/welder.ogg', 100, 1)
/obj/machinery/door/emp_act(severity)
if(prob(20/severity) && (istype(src,/obj/machinery/door/airlock) || istype(src,/obj/machinery/door/window)) )
if(prob(20/severity) && (istype(src, /obj/machinery/door/airlock) || istype(src, /obj/machinery/door/window)) )
INVOKE_ASYNC(src, .proc/open)
if(prob(40/severity))
if(secondsElectrified == 0)
+73
View File
@@ -309,6 +309,15 @@
reinf = 1
explosion_block = 1
/obj/machinery/door/window/brigdoor/security/cell
name = "cell door"
desc = "For keeping in criminal scum."
req_access = list(ACCESS_BRIG)
/obj/machinery/door/window/brigdoor/security/holding
name = "holding cell door"
req_one_access = list(ACCESS_SEC_DOORS, ACCESS_LAWYER) //love for the lawyer
/obj/machinery/door/window/clockwork
name = "brass windoor"
desc = "A thin door with translucent brass paneling."
@@ -423,3 +432,67 @@
dir = SOUTH
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/cell/northleft
dir = NORTH
/obj/machinery/door/window/brigdoor/security/cell/eastleft
dir = EAST
/obj/machinery/door/window/brigdoor/security/cell/westleft
dir = WEST
/obj/machinery/door/window/brigdoor/security/cell/southleft
dir = SOUTH
/obj/machinery/door/window/brigdoor/security/cell/northright
dir = NORTH
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/cell/eastright
dir = EAST
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/cell/westright
dir = WEST
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/cell/southright
dir = SOUTH
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/holding/northleft
dir = NORTH
/obj/machinery/door/window/brigdoor/security/holding/eastleft
dir = EAST
/obj/machinery/door/window/brigdoor/security/holding/westleft
dir = WEST
/obj/machinery/door/window/brigdoor/security/holding/southleft
dir = SOUTH
/obj/machinery/door/window/brigdoor/security/holding/northright
dir = NORTH
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/holding/eastright
dir = EAST
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/holding/westright
dir = WEST
icon_state = "rightsecure"
base_state = "rightsecure"
/obj/machinery/door/window/brigdoor/security/holding/southright
dir = SOUTH
icon_state = "rightsecure"
base_state = "rightsecure"
+5 -33
View File
@@ -262,39 +262,6 @@
name = "\improper PARTY BUTTON"
desc = "Cuban Pete is in the house!"
/obj/machinery/firealarm/partyalarm/attack_hand(mob/user)
if((user.stat && !IsAdminGhost(user)) || stat & (NOPOWER|BROKEN))
return
if (buildstage != 2)
return
user.set_machine(src)
var/area/A = src.loc
var/d1
var/dat
if(ishuman(user) || user.has_unlimited_silicon_privilege)
A = A.loc
if (A.party)
d1 = text("<A href='?src=\ref[];reset=1'>No Party :(</A>", src)
else
d1 = text("<A href='?src=\ref[];alarm=1'>PARTY!!!</A>", src)
dat = text("<HTML><HEAD></HEAD><BODY><TT><B>Party Button</B> []</BODY></HTML>", d1)
else
A = A.loc
if (A.fire)
d1 = text("<A href='?src=\ref[];reset=1'>[]</A>", src, stars("No Party :("))
else
d1 = text("<A href='?src=\ref[];alarm=1'>[]</A>", src, stars("PARTY!!!"))
dat = text("<HTML><HEAD></HEAD><BODY><TT><B>[]</B> []", stars("Party Button"), d1)
var/datum/browser/popup = new(user, "firealarm", "Party Alarm")
popup.set_content(dat)
popup.set_title_image(user.browse_rsc_icon(src.icon, src.icon_state))
popup.open()
return
/obj/machinery/firealarm/partyalarm/reset()
if (stat & (NOPOWER|BROKEN))
@@ -317,3 +284,8 @@
for(var/area/RA in A.related)
RA.partyalert()
return
/obj/machinery/firealarm/partyalarm/ui_data(mob/user)
. = ..()
var/area/A = get_area(src)
.["alarm"] = A.party
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Used to reclaim your items after you finish your sentence at the labor camp"
icon = 'icons/obj/terminals.dmi'
icon_state = "dorm_taken"
req_access = list(GLOB.access_security) //reqaccess to access all stored items
req_access = list(ACCESS_SECURITY) //REQACCESS TO ACCESS ALL STORED ITEMS
density = FALSE
anchored = TRUE
use_power = IDLE_POWER_USE
+1
View File
@@ -179,3 +179,4 @@ The console is located at computer/gulag_teleporter.dm
desc = "A recieving beacon for bluespace teleportations."
icon = 'icons/turf/floors.dmi'
icon_state = "light_on-w"
resistance_flags = INDESTRUCTIBLE
+1 -1
View File
@@ -20,7 +20,7 @@
var/list/codes // assoc. list of transponder codes
var/codes_txt = "" // codes as set on map: "tag1;tag2" or "tag1=value;tag2=value"
req_access = list(GLOB.access_engine, GLOB.access_robotics)
req_access = list(ACCESS_ENGINE, ACCESS_ROBOTICS)
/obj/machinery/navbeacon/New()
..()
@@ -15,7 +15,7 @@
use_power = IDLE_POWER_USE //this turret uses and requires power
idle_power_usage = 50 //when inactive, this turret takes up constant 50 Equipment power
active_power_usage = 300 //when active, this turret takes up constant 300 Equipment power
req_access = list(GLOB.access_security)
req_access = list(ACCESS_SECURITY)
power_channel = EQUIP //drains power from the EQUIPMENT channel
var/base_icon_state = "standard"
@@ -274,7 +274,7 @@
to_chat(user, "<span class='notice'>Controls are now [locked ? "locked" : "unlocked"].</span>")
else
to_chat(user, "<span class='notice'>Access denied.</span>")
else if(istype(I,/obj/item/device/multitool) && !locked)
else if(istype(I, /obj/item/device/multitool) && !locked)
var/obj/item/device/multitool/M = I
M.buffer = src
to_chat(user, "<span class='notice'>You add [src] to multitool buffer.</span>")
@@ -553,7 +553,7 @@
use_power = NO_POWER_USE
has_cover = 0
scan_range = 9
req_access = list(GLOB.access_syndicate)
req_access = list(ACCESS_SYNDICATE)
stun_projectile = /obj/item/projectile/bullet
lethal_projectile = /obj/item/projectile/bullet
lethal_projectile_sound = 'sound/weapons/gunshot.ogg'
@@ -651,7 +651,7 @@
var/locked = TRUE
var/control_area = null //can be area name, path or nothing.
var/ailock = 0 // AI cannot use this
req_access = list(GLOB.access_ai_upload)
req_access = list(ACCESS_AI_UPLOAD)
var/list/obj/machinery/porta_turret/turrets = list()
resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | UNACIDABLE | ACID_PROOF
@@ -689,9 +689,9 @@
/obj/machinery/turretid/attackby(obj/item/I, mob/user, params)
if(stat & BROKEN) return
if (istype(I,/obj/item/device/multitool))
if (istype(I, /obj/item/device/multitool))
var/obj/item/device/multitool/M = I
if(M.buffer && istype(M.buffer,/obj/machinery/porta_turret))
if(M.buffer && istype(M.buffer, /obj/machinery/porta_turret))
turrets |= M.buffer
to_chat(user, "You link \the [M.buffer] with \the [src]")
return
@@ -862,7 +862,7 @@
. = ..()
/obj/machinery/porta_turret/lasertag
req_access = list(GLOB.access_maint_tunnels, GLOB.access_theatre)
req_access = list(ACCESS_MAINT_TUNNELS, ACCESS_THEATRE)
check_records = 0
criminals = 0
auth_weapons = 1
@@ -151,7 +151,7 @@
var/obj/machinery/porta_turret/turret
//fuck lasertag turrets
if(istype(installed_gun,/obj/item/weapon/gun/energy/laser/bluetag) || istype(installed_gun,/obj/item/weapon/gun/energy/laser/redtag))
if(istype(installed_gun, /obj/item/weapon/gun/energy/laser/bluetag) || istype(installed_gun, /obj/item/weapon/gun/energy/laser/redtag))
turret = new/obj/machinery/porta_turret/lasertag(loc)
else
turret = new/obj/machinery/porta_turret(loc)
@@ -64,7 +64,7 @@
updateUsrDialog()
else
to_chat(user, "<span class='notice'>Access denied.</span>")
else if(istype(I,/obj/item/device/multitool) && !parent_turret.locked)
else if(istype(I, /obj/item/device/multitool) && !parent_turret.locked)
var/obj/item/device/multitool/M = I
M.buffer = parent_turret
to_chat(user, "<span class='notice'>You add [parent_turret] to multitool buffer.</span>")
+1 -1
View File
@@ -8,7 +8,7 @@
idle_power_usage = 4
active_power_usage = 250
var/obj/item/charging = null
var/static/list/allowed_devices = typecacheof(list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/ammo_box/magazine/recharge,/obj/item/device/modular_computer))
var/static/list/allowed_devices = typecacheof(list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/ammo_box/magazine/recharge, /obj/item/device/modular_computer))
var/recharge_coeff = 1
/obj/machinery/recharger/Initialize()
+1 -1
View File
@@ -7,7 +7,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 5
active_power_usage = 1000
req_access = list(GLOB.access_robotics)
req_access = list(ACCESS_ROBOTICS)
var/recharge_speed
var/repairs
state_open = TRUE
+1 -1
View File
@@ -514,7 +514,7 @@ GLOBAL_LIST_EMPTY(allConsoles)
msgVerified = "<font color='green'><b>Verified by [ID.registered_name] ([ID.assignment])</b></font>"
updateUsrDialog()
if(screen == 10)
if (GLOB.access_RC_announce in ID.access)
if (ACCESS_RC_ANNOUNCE in ID.access)
announceAuth = 1
else
announceAuth = 0
+3 -3
View File
@@ -72,7 +72,7 @@
opacity = 0
anchored = FALSE
pressure_resistance = 2*ONE_ATMOSPHERE
req_access = list(GLOB.access_engine)
req_access = list(ACCESS_ENGINE)
max_integrity = 100
var/active = FALSE
var/list/deployed_shields
@@ -209,7 +209,7 @@
icon_state = "Shield_Gen"
anchored = FALSE
density = TRUE
req_access = list(GLOB.access_teleporter)
req_access = list(ACCESS_TELEPORTER)
flags = CONDUCT
use_power = NO_POWER_USE
max_integrity = 300
@@ -224,7 +224,7 @@
name = "xenobiology shield wall generator"
desc = "A shield generator meant for use in xenobiology."
icon_state = "Shield_Gen"
req_access = list(GLOB.access_xenobiology)
req_access = list(ACCESS_XENOBIOLOGY)
/obj/machinery/shieldwallgen/Destroy()
for(var/d in GLOB.cardinals)
+1 -1
View File
@@ -54,7 +54,7 @@
/obj/machinery/power/singularity_beacon/attackby(obj/item/weapon/W, mob/user, params)
if(istype(W,/obj/item/weapon/screwdriver))
if(istype(W, /obj/item/weapon/screwdriver))
if(active)
to_chat(user, "<span class='warning'>You need to deactivate the beacon first!</span>")
return
+5 -5
View File
@@ -297,7 +297,7 @@
message_admins(adminlog)
log_game(adminlog)
explosion(get_turf(src), range_heavy, range_medium, range_light, flame_range = range_flame)
if(loc && istype(loc,/obj/machinery/syndicatebomb/))
if(loc && istype(loc, /obj/machinery/syndicatebomb/))
qdel(loc)
qdel(src)
@@ -394,11 +394,11 @@
/obj/item/weapon/bombcore/chemical
name = "chemical payload"
desc = "An explosive payload designed to spread chemicals, dangerous or otherwise, across a large area. It is able to hold up to four chemical containers, and must be loaded before use."
desc = "An explosive payload designed to spread chemicals, dangerous or otherwise, across a large area. Properties of the core may vary with grenade casing type, and must be loaded before use."
origin_tech = "combat=4;materials=3"
icon_state = "chemcore"
var/list/beakers = list()
var/max_beakers = 1
var/max_beakers = 1 // Read on about grenade casing properties below
var/spread_range = 5
var/temp_boost = 50
var/time_release = 0
@@ -411,7 +411,7 @@
total_volume += RC.reagents.total_volume
if(total_volume < time_release) // If it's empty, the detonation is complete.
if(loc && istype(loc,/obj/machinery/syndicatebomb/))
if(loc && istype(loc, /obj/machinery/syndicatebomb/))
qdel(loc)
qdel(src)
return
@@ -451,7 +451,7 @@
playsound(loc, 'sound/effects/bamf.ogg', 75, 1, 5)
if(loc && istype(loc,/obj/machinery/syndicatebomb/))
if(loc && istype(loc, /obj/machinery/syndicatebomb/))
qdel(loc)
qdel(src)
@@ -13,7 +13,7 @@
var/universal_translate = 0 // set to 1 if it can translate nonhuman speech
req_access = list(GLOB.access_tcomsat)
req_access = list(ACCESS_TCOMSAT)
circuit = /obj/item/weapon/circuitboard/computer/comm_server
/obj/machinery/computer/telecomms/server/attack_hand(mob/user)
+116 -118
View File
@@ -29,7 +29,7 @@
// To be filled out at compile time
var/list/products = list() //For each, use the following pattern:
var/list/contraband = list() //list(/type/path = amount,/type/path2 = amount2)
var/list/contraband = list() //list(/type/path = amount, /type/path2 = amount2)
var/list/premium = list() //No specified amount = only one in stock
var/product_slogans = "" //String of slogans separated by semicolons, optional
@@ -456,7 +456,7 @@
if(issilicon(usr))
if(iscyborg(usr))
var/mob/living/silicon/robot/R = usr
if(!(R.module && istype(R.module,/obj/item/weapon/robot_module/butler) ))
if(!(R.module && istype(R.module, /obj/item/weapon/robot_module/butler) ))
to_chat(usr, "<span class='notice'>The vending machine refuses to interface with you, as you are not in its target demographic!</span>")
return
else
@@ -689,19 +689,18 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
desc = "A technological marvel, supposedly able to mix just the mixture you'd like to drink the moment you ask for one."
icon_state = "boozeomat" //////////////18 drink entities below, plus the glasses, in case someone wants to edit the number of bottles
icon_deny = "boozeomat-deny"
products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5,/obj/item/weapon/reagent_containers/food/drinks/bottle/hcider = 5,
products = list(/obj/item/weapon/reagent_containers/food/drinks/bottle/gin = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/vodka = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/vermouth = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/rum = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/wine = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/cognac = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/kahlua = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/hcider = 5,
/obj/item/weapon/reagent_containers/food/drinks/bottle/absinthe = 5, /obj/item/weapon/reagent_containers/food/drinks/bottle/grappa = 5,
/obj/item/weapon/reagent_containers/food/drinks/ale = 6,/obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 4,/obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 4,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/tonic = 8,
/obj/item/weapon/reagent_containers/food/drinks/ale = 6, /obj/item/weapon/reagent_containers/food/drinks/bottle/orangejuice = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/tomatojuice = 4, /obj/item/weapon/reagent_containers/food/drinks/bottle/limejuice = 4,
/obj/item/weapon/reagent_containers/food/drinks/bottle/cream = 4, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/tonic = 8,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 8, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/sodawater = 15,
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30,/obj/item/weapon/reagent_containers/food/drinks/ice = 10,
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass = 12,
/obj/item/weapon/reagent_containers/food/drinks/flask = 3)
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 30, /obj/item/weapon/reagent_containers/food/drinks/ice = 10,
/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass = 12, /obj/item/weapon/reagent_containers/food/drinks/flask = 3)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/mug/tea = 12)
product_slogans = "I hope nobody asks me for a bloody cup o' tea...;Alcohol is humanity's friend. Would you abandon a friend?;Quite delighted to serve you!;Is nobody thirsty on this station?"
product_ads = "Drink up!;Booze is good for you!;Alcohol is humanity's best friend.;Quite delighted to serve you!;Care for a nice, cold beer?;Nothing cures you like booze!;Have a sip!;Have a drink!;Have a beer!;Beer is good for you!;Only the finest alcohol!;Best quality booze since 2053!;Award-winning wine!;Maximum alcohol!;Man loves beer.;A toast for progress!"
@@ -709,7 +708,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
refill_canister = /obj/item/weapon/vending_refill/boozeomat
/obj/machinery/vending/assist
products = list( /obj/item/device/assembly/prox_sensor = 5,/obj/item/device/assembly/igniter = 3,/obj/item/device/assembly/signaler = 4,
products = list( /obj/item/device/assembly/prox_sensor = 5, /obj/item/device/assembly/igniter = 3, /obj/item/device/assembly/signaler = 4,
/obj/item/weapon/wirecutters = 1, /obj/item/weapon/cartridge/signal = 4)
contraband = list(/obj/item/device/assembly/timer = 2, /obj/item/device/assembly/voice = 2, /obj/item/device/assembly/health = 2)
product_ads = "Only the finest!;Have some tools.;The most robust equipment.;The finest gear in space!"
@@ -722,7 +721,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_ads = "Have a drink!;Drink up!;It's good for you!;Would you like a hot joe?;I'd kill for some coffee!;The best beans in the galaxy.;Only the finest brew for you.;Mmmm. Nothing like a coffee.;I like coffee, don't you?;Coffee helps you work!;Try some tea.;We hope you like the best!;Try our new chocolate!;Admin conspiracies"
icon_state = "coffee"
icon_vend = "coffee-vend"
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25,/obj/item/weapon/reagent_containers/food/drinks/mug/tea = 25,/obj/item/weapon/reagent_containers/food/drinks/mug/coco = 25)
products = list(/obj/item/weapon/reagent_containers/food/drinks/coffee = 25, /obj/item/weapon/reagent_containers/food/drinks/mug/tea = 25, /obj/item/weapon/reagent_containers/food/drinks/mug/coco = 25)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/ice = 12)
refill_canister = /obj/item/weapon/vending_refill/coffee
@@ -732,8 +731,8 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_slogans = "Try our new nougat bar!;Twice the calories for half the price!"
product_ads = "The healthiest!;Award-winning chocolate bars!;Mmm! So good!;Oh my god it's so juicy!;Have a snack.;Snacks are good for you!;Have some more Getmore!;Best quality snacks straight from mars.;We love chocolate!;Try our new jerky!"
icon_state = "snack"
products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 6,/obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6,/obj/item/weapon/reagent_containers/food/snacks/chips =6,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 6,/obj/item/weapon/reagent_containers/food/snacks/no_raisin = 6,/obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 6,
products = list(/obj/item/weapon/reagent_containers/food/snacks/candy = 6, /obj/item/weapon/reagent_containers/food/drinks/dry_ramen = 6, /obj/item/weapon/reagent_containers/food/snacks/chips =6,
/obj/item/weapon/reagent_containers/food/snacks/sosjerky = 6, /obj/item/weapon/reagent_containers/food/snacks/no_raisin = 6, /obj/item/weapon/reagent_containers/food/snacks/spacetwinkie = 6,
/obj/item/weapon/reagent_containers/food/snacks/cheesiehonkers = 6)
contraband = list(/obj/item/weapon/reagent_containers/food/snacks/syndicake = 6)
refill_canister = /obj/item/weapon/vending_refill/snack
@@ -769,8 +768,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "sustenance"
products = list(/obj/item/weapon/reagent_containers/food/snacks/tofu = 24,
/obj/item/weapon/reagent_containers/food/drinks/ice = 12,
/obj/item/weapon/reagent_containers/food/snacks/candy_corn = 6,
/obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10)
/obj/item/weapon/reagent_containers/food/snacks/candy_corn = 6)
contraband = list(/obj/item/weapon/kitchen/knife = 6,
/obj/item/weapon/reagent_containers/food/drinks/coffee = 12,
/obj/item/weapon/tank/internals/emergency_oxygen = 6,
@@ -784,12 +782,12 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "Cola_Machine"
product_slogans = "Robust Softdrinks: More robust than a toolbox to the head!"
product_ads = "Refreshing!;Hope you're thirsty!;Over 1 million drinks sold!;Thirsty? Why not cola?;Please, have a drink!;Drink up!;The best drinks in space."
products = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,/obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko = 6,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/shamblers = 6)
premium = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/air = 1)
products = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, /obj/item/weapon/reagent_containers/glass/beaker/waterbottle = 10)
contraband = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/thirteenloko = 6, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/shamblers = 6)
premium = list(/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/filled/nuka_cola = 1, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/air = 1)
refill_canister = /obj/item/weapon/vending_refill/cola
/obj/machinery/vending/cola/random
@@ -839,10 +837,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
name = "\improper Shambler's Vendor"
desc = "~Shake me up some of that Shambler's Juice!~"
icon_state = "shamblers_juice"
products = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime = 10,/obj/item/weapon/reagent_containers/food/drinks/soda_cans/shamblers = 10)
products = list(/obj/item/weapon/reagent_containers/food/drinks/soda_cans/cola = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_mountain_wind = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/dr_gibb = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/starkist = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/space_up = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/pwr_game = 10,
/obj/item/weapon/reagent_containers/food/drinks/soda_cans/lemon_lime = 10, /obj/item/weapon/reagent_containers/food/drinks/soda_cans/shamblers = 10)
product_slogans = "~Shake me up some of that Shambler's Juice!~"
product_ads = "Refreshing!;Jyrbv dv lg jfdv fw kyrk Jyrdscvi'j Alztv!;Over 1 trillion souls drank!;Thirsty? Nyp efk uizeb kyv uribevjj?;Kyv Jyrdscvi uizebj kyv ezxyk!;Drink up!;Krjkp."
@@ -854,9 +852,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_slogans = "Carts to go!"
icon_state = "cart"
icon_deny = "cart-deny"
products = list(/obj/item/weapon/cartridge/medical = 10,/obj/item/weapon/cartridge/engineering = 10,/obj/item/weapon/cartridge/security = 10,
/obj/item/weapon/cartridge/janitor = 10,/obj/item/weapon/cartridge/signal/toxins = 10,/obj/item/device/pda/heads = 10,
/obj/item/weapon/cartridge/captain = 3,/obj/item/weapon/cartridge/quartermaster = 10)
products = list(/obj/item/weapon/cartridge/medical = 10, /obj/item/weapon/cartridge/engineering = 10, /obj/item/weapon/cartridge/security = 10,
/obj/item/weapon/cartridge/janitor = 10, /obj/item/weapon/cartridge/signal/toxins = 10, /obj/item/device/pda/heads = 10,
/obj/item/weapon/cartridge/captain = 3, /obj/item/weapon/cartridge/quartermaster = 10)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -868,12 +866,12 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_slogans = "Liberation Station: Your one-stop shop for all things second ammendment!;Be a patriot today, pick up a gun!;Quality weapons for cheap prices!;Better dead than red!"
product_ads = "Float like an astronaut, sting like a bullet!;Express your second ammendment today!;Guns don't kill people, but you can!;Who needs responsibilities when you have guns?"
vend_reply = "Remember the name: Liberation Station!"
products = list(/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/gold = 2,/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/camo = 2,
/obj/item/weapon/gun/ballistic/automatic/pistol/m1911 = 2,/obj/item/weapon/gun/ballistic/automatic/proto/unrestricted = 2,
/obj/item/weapon/gun/ballistic/shotgun/automatic/combat = 2,/obj/item/weapon/gun/ballistic/automatic/gyropistol = 1,
/obj/item/weapon/gun/ballistic/shotgun = 2,/obj/item/weapon/gun/ballistic/automatic/ar = 2)
premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2,/obj/item/ammo_box/magazine/m50 = 4,/obj/item/ammo_box/magazine/m45 = 2,/obj/item/ammo_box/magazine/m75 = 2)
contraband = list(/obj/item/clothing/under/patriotsuit = 1,/obj/item/weapon/bedsheet/patriot = 3)
products = list(/obj/item/weapon/gun/ballistic/automatic/pistol/deagle/gold = 2, /obj/item/weapon/gun/ballistic/automatic/pistol/deagle/camo = 2,
/obj/item/weapon/gun/ballistic/automatic/pistol/m1911 = 2, /obj/item/weapon/gun/ballistic/automatic/proto/unrestricted = 2,
/obj/item/weapon/gun/ballistic/shotgun/automatic/combat = 2, /obj/item/weapon/gun/ballistic/automatic/gyropistol = 1,
/obj/item/weapon/gun/ballistic/shotgun = 2, /obj/item/weapon/gun/ballistic/automatic/ar = 2)
premium = list(/obj/item/ammo_box/magazine/smgm9mm = 2, /obj/item/ammo_box/magazine/m50 = 4, /obj/item/ammo_box/magazine/m45 = 2, /obj/item/ammo_box/magazine/m75 = 2)
contraband = list(/obj/item/clothing/under/patriotsuit = 1, /obj/item/weapon/bedsheet/patriot = 3)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -908,12 +906,12 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_deny = "med-deny"
product_ads = "Go save some lives!;The best stuff for your medbay.;Only the finest tools.;Natural chemicals!;This stuff saves lives.;Don't you want some?;Ping!"
req_access_txt = "5"
products = list(/obj/item/weapon/reagent_containers/syringe = 12,/obj/item/weapon/reagent_containers/dropper = 3,/obj/item/stack/medical/gauze = 8,/obj/item/weapon/reagent_containers/pill/patch/styptic = 5, /obj/item/weapon/reagent_containers/pill/insulin = 10,
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 5,/obj/item/weapon/reagent_containers/glass/bottle/charcoal = 4, /obj/item/weapon/reagent_containers/spray/medical/sterilizer = 1,
/obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 4,/obj/item/weapon/reagent_containers/glass/bottle/morphine = 4,/obj/item/weapon/reagent_containers/glass/bottle/salglu_solution = 3,
/obj/item/weapon/reagent_containers/glass/bottle/toxin = 3,/obj/item/weapon/reagent_containers/syringe/antiviral = 6,/obj/item/weapon/reagent_containers/pill/salbutamol = 2,/obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/morphine = 4,/obj/item/weapon/reagent_containers/pill/charcoal = 6)
premium = list(/obj/item/weapon/storage/box/hug/medical = 1,/obj/item/weapon/reagent_containers/hypospray/medipen = 3, /obj/item/weapon/storage/belt/medical = 3, /obj/item/weapon/wrench/medical = 1)
products = list(/obj/item/weapon/reagent_containers/syringe = 12, /obj/item/weapon/reagent_containers/dropper = 3, /obj/item/stack/medical/gauze = 8, /obj/item/weapon/reagent_containers/pill/patch/styptic = 5, /obj/item/weapon/reagent_containers/pill/insulin = 10,
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/weapon/reagent_containers/glass/bottle/charcoal = 4, /obj/item/weapon/reagent_containers/spray/medical/sterilizer = 1,
/obj/item/weapon/reagent_containers/glass/bottle/epinephrine = 4, /obj/item/weapon/reagent_containers/glass/bottle/morphine = 4, /obj/item/weapon/reagent_containers/glass/bottle/salglu_solution = 3,
/obj/item/weapon/reagent_containers/glass/bottle/toxin = 3, /obj/item/weapon/reagent_containers/syringe/antiviral = 6, /obj/item/weapon/reagent_containers/pill/salbutamol = 2, /obj/item/device/healthanalyzer = 4, /obj/item/device/sensor_device = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3, /obj/item/weapon/reagent_containers/pill/morphine = 4, /obj/item/weapon/reagent_containers/pill/charcoal = 6)
premium = list(/obj/item/weapon/storage/box/hug/medical = 1, /obj/item/weapon/reagent_containers/hypospray/medipen = 3, /obj/item/weapon/storage/belt/medical = 3, /obj/item/weapon/wrench/medical = 1)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/weapon/vending_refill/medical
@@ -922,9 +920,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/machinery/vending/plasmaresearch
name = "\improper Toximate 3000"
desc = "All the fine parts you need in one vending machine!"
products = list(/obj/item/clothing/under/rank/scientist = 6,/obj/item/clothing/suit/bio_suit = 6,/obj/item/clothing/head/bio_hood = 6,
/obj/item/device/transfer_valve = 6,/obj/item/device/assembly/timer = 6,/obj/item/device/assembly/signaler = 6,
/obj/item/device/assembly/prox_sensor = 6,/obj/item/device/assembly/igniter = 6)
products = list(/obj/item/clothing/under/rank/scientist = 6, /obj/item/clothing/suit/bio_suit = 6, /obj/item/clothing/head/bio_hood = 6,
/obj/item/device/transfer_valve = 6, /obj/item/device/assembly/timer = 6, /obj/item/device/assembly/signaler = 6,
/obj/item/device/assembly/prox_sensor = 6, /obj/item/device/assembly/igniter = 6)
contraband = list(/obj/item/device/assembly/health = 3)
/obj/machinery/vending/wallmed
@@ -933,10 +931,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "wallmed"
icon_deny = "wallmed-deny"
density = FALSE
products = list(/obj/item/weapon/reagent_containers/syringe = 3,/obj/item/weapon/reagent_containers/pill/patch/styptic = 5,
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 5,/obj/item/weapon/reagent_containers/pill/charcoal = 2,
products = list(/obj/item/weapon/reagent_containers/syringe = 3, /obj/item/weapon/reagent_containers/pill/patch/styptic = 5,
/obj/item/weapon/reagent_containers/pill/patch/silver_sulf = 5, /obj/item/weapon/reagent_containers/pill/charcoal = 2,
/obj/item/weapon/reagent_containers/spray/medical/sterilizer = 1)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2,/obj/item/weapon/reagent_containers/pill/morphine = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 2, /obj/item/weapon/reagent_containers/pill/morphine = 2)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
refill_canister = /obj/item/weapon/vending_refill/medical
@@ -949,9 +947,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "sec"
icon_deny = "sec-deny"
req_access_txt = "1"
products = list(/obj/item/weapon/restraints/handcuffs = 8,/obj/item/weapon/restraints/handcuffs/cable/zipties = 10,/obj/item/weapon/grenade/flashbang = 4,/obj/item/device/assembly/flash/handheld = 5,
/obj/item/weapon/reagent_containers/food/snacks/donut = 12,/obj/item/weapon/storage/box/evidence = 6,/obj/item/device/flashlight/seclite = 4,/obj/item/weapon/restraints/legcuffs/bola/energy = 7)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2,/obj/item/weapon/storage/fancy/donut_box = 2)
products = list(/obj/item/weapon/restraints/handcuffs = 8, /obj/item/weapon/restraints/handcuffs/cable/zipties = 10, /obj/item/weapon/grenade/flashbang = 4, /obj/item/device/assembly/flash/handheld = 5,
/obj/item/weapon/reagent_containers/food/snacks/donut = 12, /obj/item/weapon/storage/box/evidence = 6, /obj/item/device/flashlight/seclite = 4, /obj/item/weapon/restraints/legcuffs/bola/energy = 7)
contraband = list(/obj/item/clothing/glasses/sunglasses = 2, /obj/item/weapon/storage/fancy/donut_box = 2)
premium = list(/obj/item/weapon/coin/antagtoken = 1)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -972,9 +970,9 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_ads = "We like plants!;Don't you want some?;The greenest thumbs ever.;We like big plants.;Soft soil..."
icon_state = "nutri"
icon_deny = "nutri-deny"
products = list(/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez = 30,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z = 20,/obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh = 10,/obj/item/weapon/reagent_containers/spray/pestspray = 20,
/obj/item/weapon/reagent_containers/syringe = 5,/obj/item/weapon/storage/bag/plants = 5,/obj/item/weapon/cultivator = 3,/obj/item/weapon/shovel/spade = 3,/obj/item/device/plant_analyzer = 4)
contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10,/obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
products = list(/obj/item/weapon/reagent_containers/glass/bottle/nutrient/ez = 30, /obj/item/weapon/reagent_containers/glass/bottle/nutrient/l4z = 20, /obj/item/weapon/reagent_containers/glass/bottle/nutrient/rh = 10, /obj/item/weapon/reagent_containers/spray/pestspray = 20,
/obj/item/weapon/reagent_containers/syringe = 5, /obj/item/weapon/storage/bag/plants = 5, /obj/item/weapon/cultivator = 3, /obj/item/weapon/shovel/spade = 3, /obj/item/device/plant_analyzer = 4)
contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/ammonia = 10, /obj/item/weapon/reagent_containers/glass/bottle/diethylamine = 5)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -984,16 +982,16 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_slogans = "THIS'S WHERE TH' SEEDS LIVE! GIT YOU SOME!;Hands down the best seed selection on the station!;Also certain mushroom varieties available, more for experts! Get certified today!"
product_ads = "We like plants!;Grow some crops!;Grow, baby, growww!;Aw h'yeah son!"
icon_state = "seeds"
products = list(/obj/item/seeds/ambrosia = 3,/obj/item/seeds/apple = 3,/obj/item/seeds/banana = 3,/obj/item/seeds/berry = 3,
/obj/item/seeds/cabbage = 3,/obj/item/seeds/carrot = 3,/obj/item/seeds/cherry = 3,/obj/item/seeds/chanter = 3,
/obj/item/seeds/chili = 3,/obj/item/seeds/cocoapod = 3,/obj/item/seeds/coffee = 3,/obj/item/seeds/corn = 3,
/obj/item/seeds/eggplant = 3,/obj/item/seeds/grape = 3,/obj/item/seeds/grass = 3,/obj/item/seeds/lemon = 3,
/obj/item/seeds/lime = 3,/obj/item/seeds/onion = 3,/obj/item/seeds/orange = 3,/obj/item/seeds/potato = 3,/obj/item/seeds/poppy = 3,
/obj/item/seeds/pumpkin = 3,/obj/item/seeds/replicapod = 3,/obj/item/seeds/wheat/rice = 3,/obj/item/seeds/soya = 3,/obj/item/seeds/sunflower = 3,
/obj/item/seeds/tea = 3,/obj/item/seeds/tobacco = 3,/obj/item/seeds/tomato = 3,
/obj/item/seeds/tower = 3,/obj/item/seeds/watermelon = 3,/obj/item/seeds/wheat = 3,/obj/item/seeds/whitebeet = 3)
contraband = list(/obj/item/seeds/amanita = 2,/obj/item/seeds/glowshroom = 2,/obj/item/seeds/liberty = 2,/obj/item/seeds/nettle = 2,
/obj/item/seeds/plump = 2,/obj/item/seeds/reishi = 2,/obj/item/seeds/cannabis = 3,/obj/item/seeds/starthistle = 2,
products = list(/obj/item/seeds/ambrosia = 3, /obj/item/seeds/apple = 3, /obj/item/seeds/banana = 3, /obj/item/seeds/berry = 3,
/obj/item/seeds/cabbage = 3, /obj/item/seeds/carrot = 3, /obj/item/seeds/cherry = 3, /obj/item/seeds/chanter = 3,
/obj/item/seeds/chili = 3, /obj/item/seeds/cocoapod = 3, /obj/item/seeds/coffee = 3, /obj/item/seeds/corn = 3,
/obj/item/seeds/eggplant = 3, /obj/item/seeds/grape = 3, /obj/item/seeds/grass = 3, /obj/item/seeds/lemon = 3,
/obj/item/seeds/lime = 3, /obj/item/seeds/onion = 3, /obj/item/seeds/orange = 3, /obj/item/seeds/potato = 3, /obj/item/seeds/poppy = 3,
/obj/item/seeds/pumpkin = 3, /obj/item/seeds/replicapod = 3, /obj/item/seeds/wheat/rice = 3, /obj/item/seeds/soya = 3, /obj/item/seeds/sunflower = 3,
/obj/item/seeds/tea = 3, /obj/item/seeds/tobacco = 3, /obj/item/seeds/tomato = 3,
/obj/item/seeds/tower = 3, /obj/item/seeds/watermelon = 3, /obj/item/seeds/wheat = 3, /obj/item/seeds/whitebeet = 3)
contraband = list(/obj/item/seeds/amanita = 2, /obj/item/seeds/glowshroom = 2, /obj/item/seeds/liberty = 2, /obj/item/seeds/nettle = 2,
/obj/item/seeds/plump = 2, /obj/item/seeds/reishi = 2, /obj/item/seeds/cannabis = 3, /obj/item/seeds/starthistle = 2,
/obj/item/seeds/random = 2)
premium = list(/obj/item/weapon/reagent_containers/spray/waterflower = 1)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
@@ -1006,7 +1004,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
product_slogans = "Sling spells the proper way with MagiVend!;Be your own Houdini! Use MagiVend!"
vend_reply = "Have an enchanted evening!"
product_ads = "FJKLFJSD;AJKFLBJAKL;1234 LOONIES LOL!;>MFW;Kill them fuckers!;GET DAT FUKKEN DISK;HONK!;EI NATH;Destroy the station!;Admin conspiracies since forever!;Space-time bending hardware!"
products = list(/obj/item/clothing/head/wizard = 1,/obj/item/clothing/suit/wizrobe = 1,/obj/item/clothing/head/wizard/red = 1,/obj/item/clothing/suit/wizrobe/red = 1,/obj/item/clothing/head/wizard/yellow = 1,/obj/item/clothing/suit/wizrobe/yellow = 1,/obj/item/clothing/shoes/sandal/magic = 1,/obj/item/weapon/staff = 2)
products = list(/obj/item/clothing/head/wizard = 1, /obj/item/clothing/suit/wizrobe = 1, /obj/item/clothing/head/wizard/red = 1, /obj/item/clothing/suit/wizrobe/red = 1, /obj/item/clothing/head/wizard/yellow = 1, /obj/item/clothing/suit/wizrobe/yellow = 1, /obj/item/clothing/shoes/sandal/magic = 1, /obj/item/weapon/staff = 2)
contraband = list(/obj/item/weapon/reagent_containers/glass/bottle/wizarditis = 1) //No one can get to the machine to hack it anyways; for the lulz - Microwave
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -1019,30 +1017,30 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
req_access_txt = "46" //Theatre access needed, unless hacked.
product_slogans = "Dress for success!;Suited and booted!;It's show time!;Why leave style up to fate? Use AutoDrobe!"
vend_reply = "Thank you for using AutoDrobe!"
products = list(/obj/item/clothing/suit/chickensuit = 1,/obj/item/clothing/head/chicken = 1,/obj/item/clothing/under/gladiator = 1,
/obj/item/clothing/head/helmet/gladiator = 1,/obj/item/clothing/under/gimmick/rank/captain/suit = 1,/obj/item/clothing/head/flatcap = 1,
/obj/item/clothing/suit/toggle/labcoat/mad = 1,/obj/item/clothing/shoes/jackboots = 1,
/obj/item/clothing/under/schoolgirl = 1,/obj/item/clothing/under/schoolgirl/red = 1,/obj/item/clothing/under/schoolgirl/green = 1,/obj/item/clothing/under/schoolgirl/orange = 1,/obj/item/clothing/head/kitty = 1,/obj/item/clothing/under/skirt/black = 1,/obj/item/clothing/head/beret = 1,
/obj/item/clothing/accessory/waistcoat = 1,/obj/item/clothing/under/suit_jacket = 1,/obj/item/clothing/head/that =1,/obj/item/clothing/under/kilt = 1,/obj/item/clothing/head/beret = 1,/obj/item/clothing/accessory/waistcoat = 1,
/obj/item/clothing/glasses/monocle =1,/obj/item/clothing/head/bowler = 1,/obj/item/weapon/cane = 1,/obj/item/clothing/under/sl_suit = 1,
/obj/item/clothing/mask/fakemoustache = 1,/obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1,/obj/item/clothing/head/plaguedoctorhat = 1,/obj/item/clothing/mask/gas/plaguedoctor = 1,
/obj/item/clothing/suit/toggle/owlwings = 1, /obj/item/clothing/under/owl = 1,/obj/item/clothing/mask/gas/owl_mask = 1,
products = list(/obj/item/clothing/suit/chickensuit = 1, /obj/item/clothing/head/chicken = 1, /obj/item/clothing/under/gladiator = 1,
/obj/item/clothing/head/helmet/gladiator = 1, /obj/item/clothing/under/gimmick/rank/captain/suit = 1, /obj/item/clothing/head/flatcap = 1,
/obj/item/clothing/suit/toggle/labcoat/mad = 1, /obj/item/clothing/shoes/jackboots = 1,
/obj/item/clothing/under/schoolgirl = 1, /obj/item/clothing/under/schoolgirl/red = 1, /obj/item/clothing/under/schoolgirl/green = 1, /obj/item/clothing/under/schoolgirl/orange = 1, /obj/item/clothing/head/kitty = 1, /obj/item/clothing/under/skirt/black = 1, /obj/item/clothing/head/beret = 1,
/obj/item/clothing/accessory/waistcoat = 1, /obj/item/clothing/under/suit_jacket = 1, /obj/item/clothing/head/that =1, /obj/item/clothing/under/kilt = 1, /obj/item/clothing/head/beret = 1, /obj/item/clothing/accessory/waistcoat = 1,
/obj/item/clothing/glasses/monocle =1, /obj/item/clothing/head/bowler = 1, /obj/item/weapon/cane = 1, /obj/item/clothing/under/sl_suit = 1,
/obj/item/clothing/mask/fakemoustache = 1, /obj/item/clothing/suit/bio_suit/plaguedoctorsuit = 1, /obj/item/clothing/head/plaguedoctorhat = 1, /obj/item/clothing/mask/gas/plaguedoctor = 1,
/obj/item/clothing/suit/toggle/owlwings = 1, /obj/item/clothing/under/owl = 1, /obj/item/clothing/mask/gas/owl_mask = 1,
/obj/item/clothing/suit/toggle/owlwings/griffinwings = 1, /obj/item/clothing/under/griffin = 1, /obj/item/clothing/shoes/griffin = 1, /obj/item/clothing/head/griffin = 1,
/obj/item/clothing/suit/apron = 1,/obj/item/clothing/under/waiter = 1,/obj/item/clothing/suit/jacket/miljacket = 1,
/obj/item/clothing/under/pirate = 1,/obj/item/clothing/suit/pirate = 1,/obj/item/clothing/head/pirate = 1,/obj/item/clothing/head/bandana = 1,
/obj/item/clothing/head/bandana = 1,/obj/item/clothing/under/soviet = 1,/obj/item/clothing/head/ushanka = 1,/obj/item/clothing/suit/imperium_monk = 1,
/obj/item/clothing/mask/gas/cyborg = 1,/obj/item/clothing/suit/holidaypriest = 1,/obj/item/clothing/head/wizard/marisa/fake = 1,
/obj/item/clothing/suit/wizrobe/marisa/fake = 1,/obj/item/clothing/under/sundress = 1,/obj/item/clothing/head/witchwig = 1,/obj/item/weapon/staff/broom = 1,
/obj/item/clothing/suit/wizrobe/fake = 1,/obj/item/clothing/head/wizard/fake = 1,/obj/item/weapon/staff = 3,/obj/item/clothing/mask/gas/sexyclown = 1,
/obj/item/clothing/under/rank/clown/sexy = 1,/obj/item/clothing/mask/gas/sexymime = 1,/obj/item/clothing/under/sexymime = 1,/obj/item/clothing/mask/rat/bat = 1,/obj/item/clothing/mask/rat/bee = 1,/obj/item/clothing/mask/rat/bear = 1,/obj/item/clothing/mask/rat/raven = 1,/obj/item/clothing/mask/rat/jackal = 1,/obj/item/clothing/mask/rat/fox = 1,/obj/item/clothing/mask/rat/tribal = 1,/obj/item/clothing/mask/rat = 1,/obj/item/clothing/suit/apron/overalls = 1,
/obj/item/clothing/suit/apron = 1, /obj/item/clothing/under/waiter = 1, /obj/item/clothing/suit/jacket/miljacket = 1,
/obj/item/clothing/under/pirate = 1, /obj/item/clothing/suit/pirate = 1, /obj/item/clothing/head/pirate = 1, /obj/item/clothing/head/bandana = 1,
/obj/item/clothing/head/bandana = 1, /obj/item/clothing/under/soviet = 1, /obj/item/clothing/head/ushanka = 1, /obj/item/clothing/suit/imperium_monk = 1,
/obj/item/clothing/mask/gas/cyborg = 1, /obj/item/clothing/suit/holidaypriest = 1, /obj/item/clothing/head/wizard/marisa/fake = 1,
/obj/item/clothing/suit/wizrobe/marisa/fake = 1, /obj/item/clothing/under/sundress = 1, /obj/item/clothing/head/witchwig = 1, /obj/item/weapon/staff/broom = 1,
/obj/item/clothing/suit/wizrobe/fake = 1, /obj/item/clothing/head/wizard/fake = 1, /obj/item/weapon/staff = 3, /obj/item/clothing/mask/gas/sexyclown = 1,
/obj/item/clothing/under/rank/clown/sexy = 1, /obj/item/clothing/mask/gas/sexymime = 1, /obj/item/clothing/under/sexymime = 1, /obj/item/clothing/mask/rat/bat = 1, /obj/item/clothing/mask/rat/bee = 1, /obj/item/clothing/mask/rat/bear = 1, /obj/item/clothing/mask/rat/raven = 1, /obj/item/clothing/mask/rat/jackal = 1, /obj/item/clothing/mask/rat/fox = 1, /obj/item/clothing/mask/rat/tribal = 1, /obj/item/clothing/mask/rat = 1, /obj/item/clothing/suit/apron/overalls = 1,
/obj/item/clothing/head/rabbitears =1, /obj/item/clothing/head/sombrero = 1, /obj/item/clothing/head/sombrero/green = 1, /obj/item/clothing/suit/poncho = 1,
/obj/item/clothing/suit/poncho/green = 1, /obj/item/clothing/suit/poncho/red = 1,
/obj/item/clothing/under/maid = 1, /obj/item/clothing/under/janimaid = 1,/obj/item/clothing/glasses/cold=1,/obj/item/clothing/glasses/heat=1,
/obj/item/clothing/under/maid = 1, /obj/item/clothing/under/janimaid = 1, /obj/item/clothing/glasses/cold=1, /obj/item/clothing/glasses/heat=1,
/obj/item/clothing/suit/whitedress = 1,
/obj/item/clothing/under/jester = 1, /obj/item/clothing/head/jester = 1,
/obj/item/clothing/under/villain = 1,
/obj/item/clothing/shoes/singery = 1,/obj/item/clothing/under/singery = 1,
/obj/item/clothing/shoes/singerb = 1,/obj/item/clothing/under/singerb = 1,
/obj/item/clothing/shoes/singery = 1, /obj/item/clothing/under/singery = 1,
/obj/item/clothing/shoes/singerb = 1, /obj/item/clothing/under/singerb = 1,
/obj/item/clothing/suit/hooded/carp_costume = 1,
/obj/item/clothing/suit/hooded/ian_costume = 1,
/obj/item/clothing/suit/hooded/bee_costume = 1,
@@ -1053,7 +1051,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
/obj/item/clothing/under/scratch = 1,
/obj/item/clothing/under/sailor = 1,
/obj/item/clothing/ears/headphones = 2)
contraband = list(/obj/item/clothing/suit/judgerobe = 1,/obj/item/clothing/head/powdered_wig = 1,/obj/item/weapon/gun/magic/wand = 2,/obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/sunglasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2)
contraband = list(/obj/item/clothing/suit/judgerobe = 1, /obj/item/clothing/head/powdered_wig = 1, /obj/item/weapon/gun/magic/wand = 2, /obj/item/clothing/glasses/sunglasses/garb = 2, /obj/item/clothing/glasses/sunglasses/blindfold = 1, /obj/item/clothing/mask/muzzle = 2)
premium = list(/obj/item/clothing/suit/pirate/captain = 2, /obj/item/clothing/head/pirate/captain = 2, /obj/item/clothing/head/helmet/roman = 1, /obj/item/clothing/head/helmet/roman/legionaire = 1, /obj/item/clothing/under/roman = 1, /obj/item/clothing/shoes/roman = 1, /obj/item/weapon/shield/riot/roman = 1, /obj/item/weapon/skub = 1)
refill_canister = /obj/item/weapon/vending_refill/autodrobe
@@ -1062,7 +1060,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
desc = "A kitchen and restaurant equipment vendor"
product_ads = "Mm, food stuffs!;Food and food accessories.;Get your plates!;You like forks?;I like forks.;Woo, utensils.;You don't really need these..."
icon_state = "dinnerware"
products = list(/obj/item/weapon/storage/bag/tray = 8,/obj/item/weapon/kitchen/fork = 6,/obj/item/weapon/kitchen/knife = 6,/obj/item/weapon/kitchen/rollingpin = 2,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8,/obj/item/clothing/suit/apron/chef = 2,/obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5,/obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5,/obj/item/weapon/reagent_containers/food/condiment/saltshaker = 5,/obj/item/weapon/reagent_containers/food/condiment/peppermill = 5,/obj/item/weapon/reagent_containers/glass/bowl = 20)
products = list(/obj/item/weapon/storage/bag/tray = 8, /obj/item/weapon/kitchen/fork = 6, /obj/item/weapon/kitchen/knife = 6, /obj/item/weapon/kitchen/rollingpin = 2, /obj/item/weapon/reagent_containers/food/drinks/drinkingglass = 8, /obj/item/clothing/suit/apron/chef = 2, /obj/item/weapon/reagent_containers/food/condiment/pack/ketchup = 5, /obj/item/weapon/reagent_containers/food/condiment/pack/hotsauce = 5, /obj/item/weapon/reagent_containers/food/condiment/saltshaker = 5, /obj/item/weapon/reagent_containers/food/condiment/peppermill = 5, /obj/item/weapon/reagent_containers/glass/bowl = 20)
contraband = list(/obj/item/weapon/kitchen/rollingpin = 2, /obj/item/weapon/kitchen/knife/butcher = 2)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -1109,7 +1107,7 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "engivend"
icon_deny = "engivend-deny"
req_access_txt = "11" //Engineering Equipment access
products = list(/obj/item/clothing/glasses/meson/engine = 2,/obj/item/device/multitool = 4,/obj/item/weapon/electronics/airlock = 10,/obj/item/weapon/electronics/apc = 10,/obj/item/weapon/electronics/airalarm = 10,/obj/item/weapon/stock_parts/cell/high = 10, /obj/item/weapon/construction/rcd/loaded = 3, /obj/item/device/geiger_counter = 5)
products = list(/obj/item/clothing/glasses/meson/engine = 2, /obj/item/device/multitool = 4, /obj/item/weapon/electronics/airlock = 10, /obj/item/weapon/electronics/apc = 10, /obj/item/weapon/electronics/airalarm = 10, /obj/item/weapon/stock_parts/cell/high = 10, /obj/item/weapon/construction/rcd/loaded = 3, /obj/item/device/geiger_counter = 5)
contraband = list(/obj/item/weapon/stock_parts/cell/potato = 3)
premium = list(/obj/item/weapon/storage/belt/utility = 3)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
@@ -1122,12 +1120,12 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "engi"
icon_deny = "engi-deny"
req_access_txt = "11"
products = list(/obj/item/clothing/under/rank/chief_engineer = 4,/obj/item/clothing/under/rank/engineer = 4,/obj/item/clothing/shoes/sneakers/orange = 4,/obj/item/clothing/head/hardhat = 4,
/obj/item/weapon/storage/belt/utility = 4,/obj/item/clothing/glasses/meson/engine = 4,/obj/item/clothing/gloves/color/yellow = 4, /obj/item/weapon/screwdriver = 12,
/obj/item/weapon/crowbar = 12,/obj/item/weapon/wirecutters = 12,/obj/item/device/multitool = 12,/obj/item/weapon/wrench = 12,/obj/item/device/t_scanner = 12,
/obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8,/obj/item/clothing/head/welding = 8,
/obj/item/weapon/light/tube = 10,/obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5,/obj/item/weapon/stock_parts/micro_laser = 5,
/obj/item/weapon/stock_parts/matter_bin = 5,/obj/item/weapon/stock_parts/manipulator = 5,/obj/item/weapon/stock_parts/console_screen = 5)
products = list(/obj/item/clothing/under/rank/chief_engineer = 4, /obj/item/clothing/under/rank/engineer = 4, /obj/item/clothing/shoes/sneakers/orange = 4, /obj/item/clothing/head/hardhat = 4,
/obj/item/weapon/storage/belt/utility = 4, /obj/item/clothing/glasses/meson/engine = 4, /obj/item/clothing/gloves/color/yellow = 4, /obj/item/weapon/screwdriver = 12,
/obj/item/weapon/crowbar = 12, /obj/item/weapon/wirecutters = 12, /obj/item/device/multitool = 12, /obj/item/weapon/wrench = 12, /obj/item/device/t_scanner = 12,
/obj/item/weapon/stock_parts/cell = 8, /obj/item/weapon/weldingtool = 8, /obj/item/clothing/head/welding = 8,
/obj/item/weapon/light/tube = 10, /obj/item/clothing/suit/fire = 4, /obj/item/weapon/stock_parts/scanning_module = 5, /obj/item/weapon/stock_parts/micro_laser = 5,
/obj/item/weapon/stock_parts/matter_bin = 5, /obj/item/weapon/stock_parts/manipulator = 5, /obj/item/weapon/stock_parts/console_screen = 5)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -1138,10 +1136,10 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "robotics"
icon_deny = "robotics-deny"
req_access_txt = "29"
products = list(/obj/item/clothing/suit/toggle/labcoat = 4,/obj/item/clothing/under/rank/roboticist = 4,/obj/item/stack/cable_coil = 4,/obj/item/device/assembly/flash/handheld = 4,
/obj/item/weapon/stock_parts/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3,/obj/item/device/assembly/signaler = 3,/obj/item/device/healthanalyzer = 3,
/obj/item/weapon/scalpel = 2,/obj/item/weapon/circular_saw = 2,/obj/item/weapon/tank/internals/anesthetic = 2,/obj/item/clothing/mask/breath/medical = 5,
/obj/item/weapon/screwdriver = 5,/obj/item/weapon/crowbar = 5)
products = list(/obj/item/clothing/suit/toggle/labcoat = 4, /obj/item/clothing/under/rank/roboticist = 4, /obj/item/stack/cable_coil = 4, /obj/item/device/assembly/flash/handheld = 4,
/obj/item/weapon/stock_parts/cell/high = 12, /obj/item/device/assembly/prox_sensor = 3, /obj/item/device/assembly/signaler = 3, /obj/item/device/healthanalyzer = 3,
/obj/item/weapon/scalpel = 2, /obj/item/weapon/circular_saw = 2, /obj/item/weapon/tank/internals/anesthetic = 2, /obj/item/clothing/mask/breath/medical = 5,
/obj/item/weapon/screwdriver = 5, /obj/item/weapon/crowbar = 5)
armor = list(melee = 100, bullet = 100, laser = 100, energy = 100, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 50)
resistance_flags = FIRE_PROOF
@@ -1152,34 +1150,34 @@ IF YOU MODIFY THE PRODUCTS LIST OF A MACHINE, MAKE SURE TO UPDATE ITS RESUPPLY C
icon_state = "clothes"
product_slogans = "Dress for success!;Prepare to look swagalicious!;Look at all this free swag!;Why leave style up to fate? Use the ClothesMate!"
vend_reply = "Thank you for using the ClothesMate!"
products = list(/obj/item/clothing/head/that=2,/obj/item/clothing/head/fedora=1,/obj/item/clothing/glasses/monocle=1,
products = list(/obj/item/clothing/head/that=2, /obj/item/clothing/head/fedora=1, /obj/item/clothing/glasses/monocle=1,
/obj/item/clothing/suit/jacket=2, /obj/item/clothing/suit/jacket/puffer/vest=2, /obj/item/clothing/suit/jacket/puffer=2,
/obj/item/clothing/under/suit_jacket/navy=1,/obj/item/clothing/under/suit_jacket/really_black=1,/obj/item/clothing/under/suit_jacket/burgundy=1,
/obj/item/clothing/under/suit_jacket/charcoal=1, /obj/item/clothing/under/suit_jacket/white=1,/obj/item/clothing/under/kilt=1,/obj/item/clothing/under/overalls=1,
/obj/item/clothing/under/sl_suit=1,/obj/item/clothing/under/pants/jeans=3,/obj/item/clothing/under/pants/classicjeans=2,
/obj/item/clothing/under/pants/camo = 1,/obj/item/clothing/under/pants/blackjeans=2,/obj/item/clothing/under/pants/khaki=2,
/obj/item/clothing/under/pants/white=2,/obj/item/clothing/under/pants/red=1,/obj/item/clothing/under/pants/black=2,
/obj/item/clothing/under/pants/tan=2,/obj/item/clothing/under/pants/track=1,/obj/item/clothing/suit/jacket/miljacket = 1,
/obj/item/clothing/under/suit_jacket/navy=1, /obj/item/clothing/under/suit_jacket/really_black=1, /obj/item/clothing/under/suit_jacket/burgundy=1,
/obj/item/clothing/under/suit_jacket/charcoal=1, /obj/item/clothing/under/suit_jacket/white=1, /obj/item/clothing/under/kilt=1, /obj/item/clothing/under/overalls=1,
/obj/item/clothing/under/sl_suit=1, /obj/item/clothing/under/pants/jeans=3, /obj/item/clothing/under/pants/classicjeans=2,
/obj/item/clothing/under/pants/camo = 1, /obj/item/clothing/under/pants/blackjeans=2, /obj/item/clothing/under/pants/khaki=2,
/obj/item/clothing/under/pants/white=2, /obj/item/clothing/under/pants/red=1, /obj/item/clothing/under/pants/black=2,
/obj/item/clothing/under/pants/tan=2, /obj/item/clothing/under/pants/track=1, /obj/item/clothing/suit/jacket/miljacket = 1,
/obj/item/clothing/neck/tie/blue=1, /obj/item/clothing/neck/tie/red=1, /obj/item/clothing/neck/tie/black=1, /obj/item/clothing/neck/tie/horrible=1,
/obj/item/clothing/neck/scarf/red=1,/obj/item/clothing/neck/scarf/green=1,/obj/item/clothing/neck/scarf/darkblue=1,
/obj/item/clothing/neck/scarf/purple=1,/obj/item/clothing/neck/scarf/yellow=1,/obj/item/clothing/neck/scarf/orange=1,
/obj/item/clothing/neck/scarf/cyan=1,/obj/item/clothing/neck/scarf=1,/obj/item/clothing/neck/scarf/black=1,
/obj/item/clothing/neck/scarf/zebra=1,/obj/item/clothing/neck/scarf/christmas=1,/obj/item/clothing/neck/stripedredscarf=1,
/obj/item/clothing/neck/stripedbluescarf=1,/obj/item/clothing/neck/stripedgreenscarf=1,/obj/item/clothing/accessory/waistcoat=1,
/obj/item/clothing/under/skirt/black=1,/obj/item/clothing/under/skirt/blue=1,/obj/item/clothing/under/skirt/red=1,/obj/item/clothing/under/skirt/purple=1,
/obj/item/clothing/under/sundress=2,/obj/item/clothing/under/stripeddress=1, /obj/item/clothing/under/sailordress=1, /obj/item/clothing/under/redeveninggown=1, /obj/item/clothing/under/blacktango=1,
/obj/item/clothing/under/plaid_skirt=1,/obj/item/clothing/under/plaid_skirt/blue=1,/obj/item/clothing/under/plaid_skirt/purple=1,/obj/item/clothing/under/plaid_skirt/green=1,
/obj/item/clothing/glasses/regular=1,/obj/item/clothing/glasses/regular/jamjar=1,/obj/item/clothing/head/sombrero=1,/obj/item/clothing/suit/poncho=1,
/obj/item/clothing/suit/ianshirt=1,/obj/item/clothing/shoes/laceup=2,/obj/item/clothing/shoes/sneakers/black=4,
/obj/item/clothing/shoes/sandal=1, /obj/item/clothing/gloves/fingerless=2,/obj/item/clothing/glasses/orange=1,/obj/item/clothing/glasses/red=1,
/obj/item/clothing/neck/scarf/red=1, /obj/item/clothing/neck/scarf/green=1, /obj/item/clothing/neck/scarf/darkblue=1,
/obj/item/clothing/neck/scarf/purple=1, /obj/item/clothing/neck/scarf/yellow=1, /obj/item/clothing/neck/scarf/orange=1,
/obj/item/clothing/neck/scarf/cyan=1, /obj/item/clothing/neck/scarf=1, /obj/item/clothing/neck/scarf/black=1,
/obj/item/clothing/neck/scarf/zebra=1, /obj/item/clothing/neck/scarf/christmas=1, /obj/item/clothing/neck/stripedredscarf=1,
/obj/item/clothing/neck/stripedbluescarf=1, /obj/item/clothing/neck/stripedgreenscarf=1, /obj/item/clothing/accessory/waistcoat=1,
/obj/item/clothing/under/skirt/black=1, /obj/item/clothing/under/skirt/blue=1, /obj/item/clothing/under/skirt/red=1, /obj/item/clothing/under/skirt/purple=1,
/obj/item/clothing/under/sundress=2, /obj/item/clothing/under/stripeddress=1, /obj/item/clothing/under/sailordress=1, /obj/item/clothing/under/redeveninggown=1, /obj/item/clothing/under/blacktango=1,
/obj/item/clothing/under/plaid_skirt=1, /obj/item/clothing/under/plaid_skirt/blue=1, /obj/item/clothing/under/plaid_skirt/purple=1, /obj/item/clothing/under/plaid_skirt/green=1,
/obj/item/clothing/glasses/regular=1, /obj/item/clothing/glasses/regular/jamjar=1, /obj/item/clothing/head/sombrero=1, /obj/item/clothing/suit/poncho=1,
/obj/item/clothing/suit/ianshirt=1, /obj/item/clothing/shoes/laceup=2, /obj/item/clothing/shoes/sneakers/black=4,
/obj/item/clothing/shoes/sandal=1, /obj/item/clothing/gloves/fingerless=2, /obj/item/clothing/glasses/orange=1, /obj/item/clothing/glasses/red=1,
/obj/item/weapon/storage/belt/fannypack=1, /obj/item/weapon/storage/belt/fannypack/blue=1, /obj/item/weapon/storage/belt/fannypack/red=1, /obj/item/clothing/suit/jacket/letterman=2,
/obj/item/clothing/head/beanie=1, /obj/item/clothing/head/beanie/black=1, /obj/item/clothing/head/beanie/red=1, /obj/item/clothing/head/beanie/green=1, /obj/item/clothing/head/beanie/darkblue=1,
/obj/item/clothing/head/beanie/purple=1, /obj/item/clothing/head/beanie/yellow=1, /obj/item/clothing/head/beanie/orange=1, /obj/item/clothing/head/beanie/cyan=1, /obj/item/clothing/head/beanie/christmas=1,
/obj/item/clothing/head/beanie/striped=1, /obj/item/clothing/head/beanie/stripedred=1, /obj/item/clothing/head/beanie/stripedblue=1, /obj/item/clothing/head/beanie/stripedgreen=1,
/obj/item/clothing/suit/jacket/letterman_red=1,
/obj/item/clothing/ears/headphones = 10)
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1,/obj/item/clothing/mask/balaclava=1,/obj/item/clothing/head/ushanka=1,/obj/item/clothing/under/soviet=1,/obj/item/weapon/storage/belt/fannypack/black=2,/obj/item/clothing/suit/jacket/letterman_syndie=1,/obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1)
premium = list(/obj/item/clothing/under/suit_jacket/checkered=1,/obj/item/clothing/head/mailman=1,/obj/item/clothing/under/rank/mailman=1,/obj/item/clothing/suit/jacket/leather=1,/obj/item/clothing/suit/jacket/leather/overcoat=1,/obj/item/clothing/under/pants/mustangjeans=1,/obj/item/clothing/neck/necklace/dope=3,/obj/item/clothing/suit/jacket/letterman_nanotrasen=1)
contraband = list(/obj/item/clothing/under/syndicate/tacticool=1, /obj/item/clothing/mask/balaclava=1, /obj/item/clothing/head/ushanka=1, /obj/item/clothing/under/soviet=1, /obj/item/weapon/storage/belt/fannypack/black=2, /obj/item/clothing/suit/jacket/letterman_syndie=1, /obj/item/clothing/under/jabroni=1, /obj/item/clothing/suit/vapeshirt=1, /obj/item/clothing/under/geisha=1)
premium = list(/obj/item/clothing/under/suit_jacket/checkered=1, /obj/item/clothing/head/mailman=1, /obj/item/clothing/under/rank/mailman=1, /obj/item/clothing/suit/jacket/leather=1, /obj/item/clothing/suit/jacket/leather/overcoat=1, /obj/item/clothing/under/pants/mustangjeans=1, /obj/item/clothing/neck/necklace/dope=3, /obj/item/clothing/suit/jacket/letterman_nanotrasen=1)
refill_canister = /obj/item/weapon/vending_refill/clothing
/obj/machinery/vending/toyliberationstation
+2 -2
View File
@@ -74,7 +74,7 @@
/obj/item/weapon/paper/machine_wash(obj/machinery/washing_machine/WM)
if(WM.color_source)
if(istype(WM.color_source,/obj/item/toy/crayon))
if(istype(WM.color_source, /obj/item/toy/crayon))
var/obj/item/toy/crayon/CR = WM.color_source
add_atom_colour(CR.paint_color, WASHABLE_COLOUR_PRIORITY)
@@ -211,7 +211,7 @@
to_chat(user, "<span class='warning'>\The [W] is stuck to your hand, you cannot put it in the washing machine!</span>")
return 1
if(istype(W,/obj/item/toy/crayon) || istype(W,/obj/item/weapon/stamp))
if(istype(W, /obj/item/toy/crayon) || istype(W, /obj/item/weapon/stamp))
color_source = W
update_icon()
+1 -1
View File
@@ -23,7 +23,7 @@
armor = list(melee = 40, bullet = 40, laser = 50, energy = 35, bomb = 20, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 35000
leg_overload_coeff = 100
operation_req_access = list(GLOB.access_syndicate)
operation_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/gygax/dark
max_equip = 4
+1 -1
View File
@@ -9,7 +9,7 @@
armor = list(melee = -20, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 25000
infra_luminosity = 5
operation_req_access = list(GLOB.access_theatre)
operation_req_access = list(ACCESS_THEATRE)
wreckage = /obj/structure/mecha_wreckage/honker
add_req_access = 0
max_equip = 3
+3 -3
View File
@@ -9,7 +9,7 @@
max_temperature = 60000
resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF
infra_luminosity = 3
operation_req_access = list(GLOB.access_cent_specops)
operation_req_access = list(ACCESS_CENT_SPECOPS)
wreckage = /obj/structure/mecha_wreckage/marauder
add_req_access = 0
internal_damage_threshold = 25
@@ -44,7 +44,7 @@
desc = "Heavy-duty, command-type exosuit. This is a custom model, utilized only by high-ranking military personnel."
name = "\improper Seraph"
icon_state = "seraph"
operation_req_access = list(GLOB.access_cent_specops)
operation_req_access = list(ACCESS_CENT_SPECOPS)
step_in = 3
max_integrity = 550
wreckage = /obj/structure/mecha_wreckage/seraph
@@ -70,7 +70,7 @@
desc = "Heavy-duty, combat exosuit, developed off of the existing Marauder model."
name = "\improper Mauler"
icon_state = "mauler"
operation_req_access = list(GLOB.access_syndicate)
operation_req_access = list(ACCESS_SYNDICATE)
wreckage = /obj/structure/mecha_wreckage/mauler
max_equip = 5
+1 -1
View File
@@ -9,7 +9,7 @@
armor = list(melee = 25, bullet = 20, laser = 30, energy = 15, bomb = 0, bio = 0, rad = 0, fire = 100, acid = 100)
max_temperature = 15000
wreckage = /obj/structure/mecha_wreckage/reticence
operation_req_access = list(GLOB.access_theatre)
operation_req_access = list(ACCESS_THEATRE)
add_req_access = 0
internal_damage_threshold = 25
max_equip = 2
@@ -121,7 +121,7 @@
onclose(chassis.occupant, "msleeper")
return
if(filter.get("inject"))
inject_reagent(filter.getType("inject",/datum/reagent),filter.getObj("source"))
inject_reagent(filter.getType("inject", /datum/reagent),filter.getObj("source"))
return
/obj/item/mecha_parts/mecha_equipment/medical/sleeper/proc/get_patient_stats()
@@ -296,9 +296,9 @@
/obj/item/mecha_parts/mecha_equipment/medical/syringe_gun/action(atom/movable/target)
if(!action_checks(target))
return
if(istype(target,/obj/item/weapon/reagent_containers/syringe))
if(istype(target, /obj/item/weapon/reagent_containers/syringe))
return load_syringe(target)
if(istype(target,/obj/item/weapon/storage))//Loads syringes from boxes
if(istype(target, /obj/item/weapon/storage))//Loads syringes from boxes
for(var/obj/item/weapon/reagent_containers/syringe/S in target.contents)
load_syringe(S)
return
@@ -116,7 +116,7 @@
if(!loc)
STOP_PROCESSING(SSobj, src)
qdel(src)
if(istype(loc,/obj/mecha/working) && scanning_time <= world.time)
if(istype(loc, /obj/mecha/working) && scanning_time <= world.time)
var/obj/mecha/working/mecha = loc
if(!mecha.occupant)
return
+1 -1
View File
@@ -8,7 +8,7 @@
use_power = IDLE_POWER_USE
idle_power_usage = 20
active_power_usage = 5000
req_access = list(GLOB.access_robotics)
req_access = list(ACCESS_ROBOTICS)
var/time_coeff = 1
var/component_coeff = 1
var/datum/material_container/materials
+5 -5
View File
@@ -63,7 +63,7 @@
var/internal_damage = 0 //contains bitflags
var/list/operation_req_access = list()//required access level for mecha operation
var/list/internals_req_access = list(GLOB.access_engine,GLOB.access_robotics)//required access level to open cell compartment
var/list/internals_req_access = list(ACCESS_ENGINE,ACCESS_ROBOTICS)//REQUIRED ACCESS LEVEL TO OPEN CELL COMPARTMENT
var/wreckage
@@ -339,13 +339,13 @@
if(0.75 to INFINITY)
occupant.clear_alert("charge")
if(0.5 to 0.75)
occupant.throw_alert("charge",/obj/screen/alert/lowcell, 1)
occupant.throw_alert("charge", /obj/screen/alert/lowcell, 1)
if(0.25 to 0.5)
occupant.throw_alert("charge",/obj/screen/alert/lowcell, 2)
occupant.throw_alert("charge", /obj/screen/alert/lowcell, 2)
if(0.01 to 0.25)
occupant.throw_alert("charge",/obj/screen/alert/lowcell, 3)
occupant.throw_alert("charge", /obj/screen/alert/lowcell, 3)
else
occupant.throw_alert("charge",/obj/screen/alert/emptycell)
occupant.throw_alert("charge", /obj/screen/alert/emptycell)
var/integrity = obj_integrity/max_integrity*100
switch(integrity)
+45 -45
View File
@@ -74,10 +74,10 @@
/datum/construction/mecha/ripley_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1
list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2
list("key"=/obj/item/mecha_parts/part/ripley_right_arm),//3
list("key"=/obj/item/mecha_parts/part/ripley_left_leg),//4
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso), //1
list("key"=/obj/item/mecha_parts/part/ripley_left_arm), //2
list("key"=/obj/item/mecha_parts/part/ripley_right_arm), //3
list("key"=/obj/item/mecha_parts/part/ripley_left_leg), //4
list("key"=/obj/item/mecha_parts/part/ripley_right_leg)//5
)
@@ -283,11 +283,11 @@
/datum/construction/mecha/gygax_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso),//1
list("key"=/obj/item/mecha_parts/part/gygax_left_arm),//2
list("key"=/obj/item/mecha_parts/part/gygax_right_arm),//3
list("key"=/obj/item/mecha_parts/part/gygax_left_leg),//4
list("key"=/obj/item/mecha_parts/part/gygax_right_leg),//5
steps = list(list("key"=/obj/item/mecha_parts/part/gygax_torso), //1
list("key"=/obj/item/mecha_parts/part/gygax_left_arm), //2
list("key"=/obj/item/mecha_parts/part/gygax_right_arm), //3
list("key"=/obj/item/mecha_parts/part/gygax_left_leg), //4
list("key"=/obj/item/mecha_parts/part/gygax_right_leg), //5
list("key"=/obj/item/mecha_parts/part/gygax_head)
)
@@ -568,11 +568,11 @@
return
/datum/construction/mecha/firefighter_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso),//1
list("key"=/obj/item/mecha_parts/part/ripley_left_arm),//2
list("key"=/obj/item/mecha_parts/part/ripley_right_arm),//3
list("key"=/obj/item/mecha_parts/part/ripley_left_leg),//4
list("key"=/obj/item/mecha_parts/part/ripley_right_leg),//5
steps = list(list("key"=/obj/item/mecha_parts/part/ripley_torso), //1
list("key"=/obj/item/mecha_parts/part/ripley_left_arm), //2
list("key"=/obj/item/mecha_parts/part/ripley_right_arm), //3
list("key"=/obj/item/mecha_parts/part/ripley_left_leg), //4
list("key"=/obj/item/mecha_parts/part/ripley_right_leg), //5
list("key"=/obj/item/clothing/suit/fire)//6
)
@@ -792,11 +792,11 @@
/datum/construction/mecha/honker_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/honker_torso),//1
list("key"=/obj/item/mecha_parts/part/honker_left_arm),//2
list("key"=/obj/item/mecha_parts/part/honker_right_arm),//3
list("key"=/obj/item/mecha_parts/part/honker_left_leg),//4
list("key"=/obj/item/mecha_parts/part/honker_right_leg),//5
steps = list(list("key"=/obj/item/mecha_parts/part/honker_torso), //1
list("key"=/obj/item/mecha_parts/part/honker_left_arm), //2
list("key"=/obj/item/mecha_parts/part/honker_right_arm), //3
list("key"=/obj/item/mecha_parts/part/honker_left_leg), //4
list("key"=/obj/item/mecha_parts/part/honker_right_leg), //5
list("key"=/obj/item/mecha_parts/part/honker_head)
)
@@ -819,17 +819,17 @@
/datum/construction/mecha/honker
result = "/obj/mecha/combat/honker"
steps = list(list("key"=/obj/item/weapon/bikehorn),//1
list("key"=/obj/item/clothing/shoes/clown_shoes),//2
list("key"=/obj/item/weapon/bikehorn),//3
list("key"=/obj/item/clothing/mask/gas/clown_hat),//4
list("key"=/obj/item/weapon/bikehorn),//5
list("key"=/obj/item/weapon/circuitboard/mecha/honker/targeting),//6
list("key"=/obj/item/weapon/bikehorn),//7
list("key"=/obj/item/weapon/circuitboard/mecha/honker/peripherals),//8
list("key"=/obj/item/weapon/bikehorn),//9
list("key"=/obj/item/weapon/circuitboard/mecha/honker/main),//10
list("key"=/obj/item/weapon/bikehorn),//11
steps = list(list("key"=/obj/item/weapon/bikehorn), //1
list("key"=/obj/item/clothing/shoes/clown_shoes), //2
list("key"=/obj/item/weapon/bikehorn), //3
list("key"=/obj/item/clothing/mask/gas/clown_hat), //4
list("key"=/obj/item/weapon/bikehorn), //5
list("key"=/obj/item/weapon/circuitboard/mecha/honker/targeting), //6
list("key"=/obj/item/weapon/bikehorn), //7
list("key"=/obj/item/weapon/circuitboard/mecha/honker/peripherals), //8
list("key"=/obj/item/weapon/bikehorn), //9
list("key"=/obj/item/weapon/circuitboard/mecha/honker/main), //10
list("key"=/obj/item/weapon/bikehorn), //11
)
/datum/construction/mecha/honker/action(atom/used_atom,mob/user)
@@ -868,11 +868,11 @@
return
/datum/construction/mecha/durand_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso),//1
list("key"=/obj/item/mecha_parts/part/durand_left_arm),//2
list("key"=/obj/item/mecha_parts/part/durand_right_arm),//3
list("key"=/obj/item/mecha_parts/part/durand_left_leg),//4
list("key"=/obj/item/mecha_parts/part/durand_right_leg),//5
steps = list(list("key"=/obj/item/mecha_parts/part/durand_torso), //1
list("key"=/obj/item/mecha_parts/part/durand_left_arm), //2
list("key"=/obj/item/mecha_parts/part/durand_right_arm), //3
list("key"=/obj/item/mecha_parts/part/durand_left_leg), //4
list("key"=/obj/item/mecha_parts/part/durand_right_leg), //5
list("key"=/obj/item/mecha_parts/part/durand_head)
)
@@ -1156,11 +1156,11 @@
/datum/construction/mecha/phazon_chassis
result = "/obj/mecha/combat/phazon"
steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso),//1
list("key"=/obj/item/mecha_parts/part/phazon_left_arm),//2
list("key"=/obj/item/mecha_parts/part/phazon_right_arm),//3
list("key"=/obj/item/mecha_parts/part/phazon_left_leg),//4
list("key"=/obj/item/mecha_parts/part/phazon_right_leg),//5
steps = list(list("key"=/obj/item/mecha_parts/part/phazon_torso), //1
list("key"=/obj/item/mecha_parts/part/phazon_left_arm), //2
list("key"=/obj/item/mecha_parts/part/phazon_right_arm), //3
list("key"=/obj/item/mecha_parts/part/phazon_left_leg), //4
list("key"=/obj/item/mecha_parts/part/phazon_right_leg), //5
list("key"=/obj/item/mecha_parts/part/phazon_head)
)
@@ -1487,11 +1487,11 @@
//ODYSSEUS
/datum/construction/mecha/odysseus_chassis
steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso),//1
list("key"=/obj/item/mecha_parts/part/odysseus_head),//2
list("key"=/obj/item/mecha_parts/part/odysseus_left_arm),//3
list("key"=/obj/item/mecha_parts/part/odysseus_right_arm),//4
list("key"=/obj/item/mecha_parts/part/odysseus_left_leg),//5
steps = list(list("key"=/obj/item/mecha_parts/part/odysseus_torso), //1
list("key"=/obj/item/mecha_parts/part/odysseus_head), //2
list("key"=/obj/item/mecha_parts/part/odysseus_left_arm), //3
list("key"=/obj/item/mecha_parts/part/odysseus_right_arm), //4
list("key"=/obj/item/mecha_parts/part/odysseus_left_leg), //5
list("key"=/obj/item/mecha_parts/part/odysseus_right_leg)//6
)
+1 -1
View File
@@ -3,7 +3,7 @@
desc = "Used to remotely locate or lockdown exosuits."
icon_screen = "mecha"
icon_keyboard = "tech_key"
req_access = list(GLOB.access_robotics)
req_access = list(ACCESS_ROBOTICS)
circuit = /obj/item/weapon/circuitboard/computer/mecha_control
var/list/located = list()
var/screen = 0
+1 -1
View File
@@ -10,7 +10,7 @@
density = TRUE
anchored = FALSE
opacity = 0
var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel,/obj/item/stack/sheet/metal,/obj/item/stack/rods)
var/list/welder_salvage = list(/obj/item/stack/sheet/plasteel, /obj/item/stack/sheet/metal, /obj/item/stack/rods)
var/list/wirecutters_salvage = list(/obj/item/stack/cable_coil)
var/list/crowbar_salvage = list()
var/salvage_num = 5
+3 -3
View File
@@ -103,9 +103,9 @@
var/obj/item/mecha_parts/mecha_equipment/drill/D = new
D.attach(src)
else //Add possible plasma cutter if no drill
var/obj/item/mecha_parts/mecha_equipment/M = new
M.attach(src)
else //Add plasma cutter if no drill
var/obj/item/mecha_parts/mecha_equipment/weapon/energy/plasma/P = new
P.attach(src)
//Add ore box to cargo
cargo.Add(new /obj/structure/ore_box(src))
+1 -1
View File
@@ -123,7 +123,7 @@
var/stuff_on_wall = 0
for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff
if(istype(O,/obj/structure/sign/poster))
if(istype(O, /obj/structure/sign/poster))
to_chat(user, "<span class='warning'>The wall is far too cluttered to place a poster!</span>")
return
stuff_on_wall++

Some files were not shown because too many files have changed in this diff Show More