Merge remote-tracking branch 'refs/remotes/origin/master' into guns

This commit is contained in:
Spades
2017-07-02 00:30:23 -04:00
72 changed files with 1148 additions and 299 deletions
+1
View File
@@ -84,6 +84,7 @@ var/list/be_special_flags = list(
#define MODE_MALFUNCTION "malf"
#define MODE_TRAITOR "traitor"
#define MODE_AUTOTRAITOR "autotraitor"
#define MODE_INFILTRATOR "infiltrator"
#define DEFAULT_TELECRYSTAL_AMOUNT 120
+4 -4
View File
@@ -281,15 +281,15 @@
//A list of every mob with a client
for(var/mob in player_list)
if(isnull(mob)) //VOREStation Add - Fix for a weird bug with nulls in this list
player_list -= mob //VOREStation Add
continue //VOREStation Add
if(!istype(mob, /mob))
crash_with("There is a null or non-mob reference inside player_list.")
continue
if(get_turf(mob) in hearturfs)
mobs |= mob
continue
var/mob/M = mob
if(M.stat == DEAD && !M.forbid_seeing_deadchat)
if(M && M.stat == DEAD && !M.forbid_seeing_deadchat)
switch(type)
if(1) //Audio messages use ghost_ears
if(M.is_preference_enabled(/datum/client_preference/ghost_ears))
+1 -1
View File
@@ -6,7 +6,7 @@
if(config.kick_inactive)
for(last_object in clients)
var/client/C = last_object
if(!C.holder && C.is_afk(config.kick_inactive MINUTES))
if(C.is_afk(config.kick_inactive MINUTES))
if(!istype(C.mob, /mob/observer/dead))
log_access("AFK: [key_name(C)]")
C << "<SPAN CLASS='warning'>You have been inactive for more than [config.kick_inactive] minute\s and have been disconnected.</SPAN>"
+7 -7
View File
@@ -132,9 +132,9 @@
path =/obj/item/ammo_magazine/m10mm
hidden = 1
/datum/category_item/autolathe/arms/pistol_50
name = "pistol magazine (.50AE)"
path =/obj/item/ammo_magazine/m50
/datum/category_item/autolathe/arms/pistol_44
name = "pistol magazine (.44)"
path =/obj/item/ammo_magazine/m44
hidden = 1
/////// 5.56mm
@@ -225,9 +225,9 @@
category = "Arms and Ammunition"
hidden = 1
/datum/category_item/autolathe/arms/pistol_50
name = "pistol magazine (.50AE)"
path =/obj/item/ammo_magazine/m50/empty
/datum/category_item/autolathe/arms/pistol_44
name = "pistol magazine (.44)"
path =/obj/item/ammo_magazine/m44/empty
category = "Arms and Ammunition"
hidden = 1
@@ -340,7 +340,7 @@
hidden = 1
/datum/category_item/autolathe/arms/pistol_clip_50
name = "ammo clip (.50AE)"
name = "ammo clip (.44)"
path =/obj/item/ammo_magazine/clip/c50
category = "Arms and Ammunition"
hidden = 1
+2
View File
@@ -490,6 +490,8 @@
world.log << "## DEBUG: mind_initialize(): No ticker ready yet! Please inform Carn"
if(!mind.name) mind.name = real_name
mind.current = src
if(player_is_antag(mind))
src.client.verbs += /client/proc/aooc
//HUMAN
/mob/living/carbon/human/mind_initialize()
+1 -1
View File
@@ -331,7 +331,7 @@
/datum/supply_packs/med/defib
name = "Defibrilator crate"
contains = list(/obj/item/device/defib_kit = 4)
contains = list(/obj/item/device/defib_kit = 2)
cost = 30
containertype = /obj/structure/closet/crate/medical
containername = "Defibrilator crate"
+3 -2
View File
@@ -159,7 +159,7 @@
/obj/item/device/kit/paint/gygax/recitence
)
name = "Random Gygax exosuit modkit"
/*
/datum/supply_packs/robotics/jumper_cables
name = "Jumper kit crate"
contains = list(
@@ -168,4 +168,5 @@
cost = 30
containertype = /obj/structure/closet/crate/secure/science
containername = "Jumper kit crate"
access = access_robotics
access = access_robotics
*/
+2
View File
@@ -79,6 +79,8 @@
Think through your actions and make the roleplay immersive! <b>Please remember all \
rules aside from those without explicit exceptions apply to antagonists.</b>"
var/can_use_aooc = TRUE // If true, will be given the AOOC verb, along with the ability to use it.
/datum/antagonist/New()
..()
cur_max = hard_cap
+4
View File
@@ -36,6 +36,9 @@
and it otherwise has no bearing on your round.</span>"
player.current.verbs |= /mob/living/proc/write_ambition
if(can_use_aooc)
player.current.client.verbs += /client/proc/aooc
// Handle only adding a mind and not bothering with gear etc.
if(nonstandard_role_type)
faction_members |= player
@@ -58,6 +61,7 @@
BITSET(player.current.hud_updateflag, SPECIALROLE_HUD)
if(!is_special_character(player))
player.current.verbs -= /mob/living/proc/write_ambition
player.current.client.verbs -= /client/proc/aooc
player.ambitions = ""
return 1
return 0
+2
View File
@@ -25,6 +25,8 @@ var/datum/antagonist/ert/ert
initial_spawn_req = 5
initial_spawn_target = 7
can_use_aooc = FALSE // They're the good guys.
/datum/antagonist/ert/create_default(var/mob/source)
var/mob/living/carbon/human/M = ..()
if(istype(M)) M.age = rand(25,45)
+2
View File
@@ -24,6 +24,8 @@ var/datum/antagonist/trader/traders
initial_spawn_req = 5
initial_spawn_target = 7
can_use_aooc = FALSE // They're not real antags.
/datum/antagonist/trader/create_default(var/mob/source)
var/mob/living/carbon/human/M = ..()
if(istype(M)) M.age = rand(25,45)
@@ -0,0 +1,78 @@
// Infiltrator is a varient of Traitor, except that the traitors are in a team and can communicate with a special headset.
var/datum/antagonist/traitor/infiltrator/infiltrators
// Inherits most of its vars from the base datum.
/datum/antagonist/traitor/infiltrator
id = MODE_INFILTRATOR
role_type = BE_TRAITOR
antag_indicator = "synd"
antaghud_indicator = "hudinfiltrator"
role_text = "Infiltrator"
role_text_plural = "Infiltrators"
welcome_text = "To speak on your team's private channel, use :t."
protected_jobs = list("Security Officer", "Warden", "Detective", "Internal Affairs Agent", "Head of Security", "Colony Director")
flags = ANTAG_SUSPICIOUS | ANTAG_RANDSPAWN | ANTAG_VOTABLE
/datum/antagonist/traitor/infiltrator/New()
..()
infiltrators = src
/datum/antagonist/traitor/infiltrator/equip(var/mob/living/carbon/human/traitor_mob)
..() // Give the uplink and other stuff.
// Now for the special headset.
// Humans and the AI.
if(istype(traitor_mob) || istype(traitor_mob, /mob/living/silicon/ai))
var/obj/item/device/radio/headset/R
R = locate(/obj/item/device/radio/headset) in traitor_mob.contents
if(!R)
to_chat(traitor_mob, "Unfortunately, a headset could not be found. You have been given an encryption key \
to put into a new headset. Once that is done, you can talk to your team using <b>:t</b>")
var/obj/item/device/encryptionkey/syndicate/encrypt_key = new(null)
traitor_mob.equip_to_slot_or_del(encrypt_key, slot_in_backpack)
else
var/obj/item/device/encryptionkey/syndicate/encrypt_key = new(null)
if(R.keyslot1 && R.keyslot2) // No room.
to_chat(traitor_mob, "Unfortunately, your headset cannot accept anymore encryption keys. You have been given an encryption key \
to put into a headset after making some room instead. Once that is done, you can talk to your team using <b>:t</b>")
traitor_mob.equip_to_slot_or_del(encrypt_key, slot_in_backpack)
else
if(R.keyslot1)
R.keyslot2 = encrypt_key
else
R.keyslot1 = encrypt_key
encrypt_key.forceMove(R)
R.recalculateChannels()
to_chat(traitor_mob, "Your headset has had a special encryption key installed, which allows you to talk to your team privately, using \
<b>:t</b>")
// Borgs, because their radio is not a headset for some reason.
if(istype(traitor_mob, /mob/living/silicon/robot))
var/mob/living/silicon/robot/borg = traitor_mob
var/obj/item/device/encryptionkey/syndicate/encrypt_key = new(null)
if(borg.radio)
if(borg.radio.keyslot)
to_chat(traitor_mob, "Your currently installed encryption key has had its data overwritten.")
else
to_chat(traitor_mob, "Your radio systems has had a special encryption key installed, which allows you to talk to your team privately, by using \
<b>:t</b>")
borg.radio.keyslot = encrypt_key // Might replace an already existing key, but oh well.
borg.radio.recalculateChannels()
else // Something bugged.
to_chat(traitor_mob, "You do not appear to have a radio installed. This is probably a bug and you should adminhelp.")
/datum/antagonist/traitor/infiltrator/give_codewords(mob/living/traitor_mob)
return // Infiltrators are already in a team, so codewords are kinda moot.
/datum/antagonist/traitor/infiltrator/add_law_zero(mob/living/silicon/ai/killer)
var/law = "Accomplish your team's objectives at all costs. You may ignore all other laws."
var/law_borg = "Accomplish your AI's team objectives at all costs. You may ignore all other laws."
killer << "<b>Your laws have been changed!</b>"
killer.set_zeroth_law(law, law_borg)
killer << "New law: 0. [law]"
+2
View File
@@ -59,6 +59,8 @@ var/datum/antagonist/renegade/renegades
list(/obj/item/weapon/gun/projectile/luger,/obj/item/weapon/gun/projectile/luger/brown)
)
can_use_aooc = FALSE // They aren't 'true' antags.
/datum/antagonist/renegade/New()
..()
renegades = src
@@ -13,48 +13,66 @@
set name = "Arm Blade (20)"
if(src.mind.changeling.recursive_enhancement)
if(changeling_generic_weapon(/obj/item/weapon/melee/arm_blade/greater))
if(changeling_generic_weapon(/obj/item/weapon/melee/changeling/arm_blade/greater))
src << "<span class='notice'>We prepare an extra sharp blade.</span>"
return 1
else
if(changeling_generic_weapon(/obj/item/weapon/melee/arm_blade))
if(changeling_generic_weapon(/obj/item/weapon/melee/changeling/arm_blade))
return 1
return 0
/obj/item/weapon/melee/arm_blade
name = "arm blade"
desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter."
//Claws
/datum/power/changeling/claw
name = "Claw"
desc = "We reform one of our arms into a deadly claw."
helptext = "We may retract our claw by dropping it."
enhancedtext = "The claw will have armor peneratration."
ability_icon_state = "ling_claw"
genomecost = 1
verbpath = /mob/proc/changeling_claw
//Grows a scary, and powerful arm blade.
/mob/proc/changeling_claw()
set category = "Changeling"
set name = "Claw (15)"
if(src.mind.changeling.recursive_enhancement)
if(changeling_generic_weapon(/obj/item/weapon/melee/changeling/claw/greater, 1, 15))
src << "<span class='notice'>We prepare an extra sharp claw.</span>"
return 1
else
if(changeling_generic_weapon(/obj/item/weapon/melee/changeling/claw, 1, 15))
return 1
return 0
/obj/item/weapon/melee/changeling
name = "arm weapon"
desc = "A grotesque weapon made out of bone and flesh that cleaves through people as a hot knife through butter."
icon = 'icons/obj/weapons.dmi'
icon_state = "arm_blade"
w_class = ITEMSIZE_HUGE
force = 40
sharp = 1
edge = 1
pry = 1
force = 5
anchored = 1
throwforce = 0 //Just to be on the safe side
throw_range = 0
throw_speed = 0
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
var/mob/living/creator //This is just like ninja swords, needed to make sure dumb shit that removes the sword doesn't make it stay around.
var/weapType = "weapon"
var/weapLocation = "arm"
/obj/item/weapon/melee/arm_blade/greater
name = "arm greatblade"
desc = "A grotesque blade made out of bone and flesh that cleaves through people and armor as a hot knife through butter."
armor_penetration = 30
/obj/item/weapon/melee/arm_blade/New(location)
/obj/item/weapon/melee/changeling/New(location)
..()
processing_objects |= src
if(ismob(loc))
visible_message("<span class='warning'>A grotesque blade forms around [loc.name]\'s arm!</span>",
"<span class='warning'>Our arm twists and mutates, transforming it into a deadly blade.</span>",
visible_message("<span class='warning'>A grotesque weapon forms around [loc.name]\'s arm!</span>",
"<span class='warning'>Our arm twists and mutates, transforming it into a deadly weapon.</span>",
"<span class='italics'>You hear organic matter ripping and tearing!</span>")
src.creator = loc
/obj/item/weapon/melee/arm_blade/dropped(mob/user)
visible_message("<span class='warning'>With a sickening crunch, [creator] reforms their arm blade into an arm!</span>",
/obj/item/weapon/melee/changeling/dropped(mob/user)
visible_message("<span class='warning'>With a sickening crunch, [creator] reforms their arm!</span>",
"<span class='notice'>We assimilate the weapon back into our body.</span>",
"<span class='italics'>You hear organic matter ripping and tearing!</span>")
playsound(src, 'sound/effects/blobattack.ogg', 30, 1)
@@ -62,16 +80,16 @@
if(src)
qdel(src)
/obj/item/weapon/melee/arm_blade/Destroy()
/obj/item/weapon/melee/changeling/Destroy()
processing_objects -= src
creator = null
..()
/obj/item/weapon/melee/arm_blade/suicide_act(mob/user)
/obj/item/weapon/melee/changeling/suicide_act(mob/user)
viewers(user) << "<span class='danger'>[user] is impaling \himself the [src.name]! It looks like \he's trying to commit suicide.</span>"
return(BRUTELOSS)
/obj/item/weapon/melee/arm_blade/process() //Stolen from ninja swords.
/obj/item/weapon/melee/changeling/process() //Stolen from ninja swords.
if(!creator || loc != creator || !creator.item_is_in_hands(src))
// Tidy up a bit.
if(istype(loc,/mob/living))
@@ -86,4 +104,34 @@
host.drop_from_inventory(src)
spawn(1)
if(src)
qdel(src)
qdel(src)
/obj/item/weapon/melee/changeling/arm_blade
name = "arm blade"
desc = "A grotesque blade made out of bone and flesh that cleaves through people as a hot knife through butter."
icon_state = "arm_blade"
force = 40
armor_penetration = 15
sharp = 1
edge = 1
pry = 1
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/melee/changeling/arm_blade/greater
name = "arm greatblade"
desc = "A grotesque blade made out of bone and flesh that cleaves through people and armor as a hot knife through butter."
armor_penetration = 30
/obj/item/weapon/melee/changeling/claw
name = "hand claw"
desc = "A grotesque claw made out of bone and flesh that cleaves through people as a hot knife through butter."
icon_state = "ling_claw"
force = 15
sharp = 1
edge = 1
attack_verb = list("attacked", "slashed", "stabbed", "sliced", "torn", "ripped", "diced", "cut")
/obj/item/weapon/melee/changeling/claw/greater
name = "hand greatclaw"
force = 20
armor_penetration = 20
@@ -0,0 +1,13 @@
/datum/game_mode/infiltrator
name = "Infiltrator"
round_description = "There are a group of shadowy infiltrators onboard! Be careful!"
extended_round_description = "A team of secretative people have played the long con, and managed to obtain entry to \
the facility. What their goals are, who their employers are, and why the individuals would work for them is a mystery, \
but perhaps you will outwit them, or perhaps that is all part of their plan?"
config_tag = "infiltrator"
required_players = 2
required_players_secret = 5
required_enemies = 2 // Bit pointless if there is only one, since its basically traitor.
end_on_antag_death = 0
antag_scaling_coeff = 5
antag_tags = list(MODE_INFILTRATOR)
+32 -20
View File
@@ -118,25 +118,8 @@
usr << "<span class='notice'>[src]'s motors resist your effort.</span>"
return
if(istype(C, /obj/item/stack/material) && C.get_material_name() == "plasteel") // Repairing.
var/amt = Ceiling((maxhealth - health)/150)
if(!amt)
usr << "<span class='notice'>\The [src] is already fully repaired.</span>"
return
var/obj/item/stack/P = C
if(P.amount < amt)
usr << "<span class='warning'>You don't have enough sheets to repair this! You need at least [amt] sheets.</span>"
return
usr << "<span class='notice'>You begin repairing [src]...</span>"
if(do_after(usr, 30))
if(P.use(amt))
usr << "<span class='notice'>You have repaired \The [src]</span>"
src.repair()
else
usr << "<span class='warning'>You don't have enough sheets to repair this! You need at least [amt] sheets.</span>"
else if(src.density)
else if(src.density && (user.a_intent == I_HURT)) //If we can't pry it open and it's a weapon, let's hit it.
var/obj/item/weapon/W = C
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(W.damtype == BRUTE || W.damtype == BURN)
@@ -147,8 +130,37 @@
user.visible_message("<span class='danger'>\The [user] forcefully strikes \the [src] with \the [W]!</span>")
playsound(src.loc, hitsound, 100, 1)
take_damage(W.force*0.35) //it's a blast door, it should take a while. -Luke
return
return
else if(istype(C, /obj/item/stack/material) && C.get_material_name() == "plasteel") // Repairing.
var/amt = Ceiling((maxhealth - health)/150)
if(!amt)
usr << "<span class='notice'>\The [src] is already fully repaired.</span>"
return
var/obj/item/stack/P = C
if(P.amount < amt)
usr << "<span class='warning'>You don't have enough sheets to repair this! You need at least [amt] sheets.</span>"
return
usr << "<span class='notice'>You begin repairing [src]...</span>"
if(do_after(usr, 30))
if(P.use(amt))
usr << "<span class='notice'>You have repaired \The [src]</span>"
src.repair()
else
usr << "<span class='warning'>You don't have enough sheets to repair this! You need at least [amt] sheets.</span>"
else if(src.density && (user.a_intent == I_HURT)) //If we can't pry it open and it's not a weapon.... Eh, let's attack it anyway.
var/obj/item/weapon/W = C
user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN)
if(W.damtype == BRUTE || W.damtype == BURN)
user.do_attack_animation(src)
if(W.force < min_force) //No actual non-weapon item shouls have a force greater than the min_force, but let's include this just in case.
user.visible_message("<span class='danger'>\The [user] hits \the [src] with \the [W] with no visible effect.</span>")
else
user.visible_message("<span class='danger'>\The [user] forcefully strikes \the [src] with \the [W]!</span>")
playsound(src.loc, hitsound, 100, 1)
take_damage(W.force*0.15) //If the item isn't a weapon, let's make this take longer than usual to break it down.
return
// Proc: open()
// Parameters: None
@@ -213,4 +225,4 @@ obj/machinery/door/blast/regular/open
icon_state_opening = "shutterc0"
icon_state_closed = "shutter1"
icon_state_closing = "shutterc1"
icon_state = "shutter1"
icon_state = "shutter1"
@@ -138,6 +138,10 @@ var/message_delay = 0 // To make sure restarting the recentmessages list is kept
if(original)
original.data["done"] = 1
// For some reason level is both used as a list and not a list, and now it needs to be a list.
// Because this is a 'all in one' machine, we're gonna just cheat.
signal.data["level"] = using_map.contact_levels.Copy()
if(signal.data["slow"] > 0)
sleep(signal.data["slow"]) // simulate the network lag if necessary
+608 -162
View File
@@ -1,185 +1,631 @@
//The case the paddles are kept in.
#define DEFIB_TIME_LIMIT (10 MINUTES) //past this many seconds, defib is useless.
#define DEFIB_TIME_LOSS (2 MINUTES) //past this many seconds, brain damage occurs.
//backpack item
/obj/item/device/defib_kit
name = "defibrillator kit"
desc = "This KHI-branded defib kit is a semi-automated model. Remove pads, slap on chest, wait."
icon = 'icons/obj/device.dmi'
icon_state = "defib_kit"
name = "defibrillator"
desc = "A device that delivers powerful shocks to detachable paddles that resuscitate incapacitated patients."
icon = 'icons/obj/defibrillator.dmi'
icon_state = "defibunit"
item_state = "defibunit"
slot_flags = SLOT_BACK
force = 5
throwforce = 6
w_class = ITEMSIZE_LARGE
origin_tech = list(TECH_BIO = 4, TECH_POWER = 2)
action_button_name = "Remove/Replace Paddles"
var/obj/item/weapon/shockpaddles/linked/paddles
var/obj/item/weapon/cell/bcell = null
/obj/item/device/defib_kit/New() //starts without a cell for rnd
..()
if(ispath(paddles))
paddles = new paddles(src, src)
else
paddles = new(src, src)
if(ispath(bcell))
bcell = new bcell(src)
update_icon()
/obj/item/device/defib_kit/Destroy()
. = ..()
qdel_null(paddles)
qdel_null(bcell)
/obj/item/device/defib_kit/loaded //starts with highcap cell
bcell = /obj/item/weapon/cell/high
/obj/item/device/defib_kit/update_icon()
var/list/new_overlays = list()
if(paddles && paddles.loc == src) //in case paddles got destroyed somehow.
new_overlays += "[initial(icon_state)]-paddles"
if(bcell)
if(bcell.check_charge(paddles.chargecost))
if(paddles.combat)
new_overlays += "[initial(icon_state)]-combat"
else if(!paddles.safety)
new_overlays += "[initial(icon_state)]-emagged"
else
new_overlays += "[initial(icon_state)]-powered"
var/ratio = Ceiling(bcell.percent()/25) * 25
new_overlays += "[initial(icon_state)]-charge[ratio]"
else
new_overlays += "[initial(icon_state)]-nocell"
overlays = new_overlays
/obj/item/device/defib_kit/ui_action_click()
toggle_paddles()
/obj/item/device/defib_kit/attack_hand(mob/user)
if(loc == user)
toggle_paddles()
else
..()
/obj/item/device/defib_kit/MouseDrop()
if(ismob(src.loc))
if(!CanMouseDrop(src))
return
var/mob/M = src.loc
if(!M.unEquip(src))
return
src.add_fingerprint(usr)
M.put_in_any_hand_if_possible(src)
/obj/item/device/defib_kit/attackby(obj/item/weapon/W, mob/user, params)
if(W == paddles)
reattach_paddles(user)
else if(istype(W, /obj/item/weapon/cell))
if(bcell)
to_chat(user, "<span class='notice'>\the [src] already has a cell.</span>")
else
if(!user.unEquip(W))
return
W.forceMove(src)
bcell = W
to_chat(user, "<span class='notice'>You install a cell in \the [src].</span>")
update_icon()
else if(isscrewdriver(W))
if(bcell)
bcell.update_icon()
bcell.forceMove(get_turf(src.loc))
bcell = null
to_chat(user, "<span class='notice'>You remove the cell from \the [src].</span>")
update_icon()
else
return ..()
/obj/item/device/defib_kit/emag_act(var/remaining_charges, var/mob/user)
if(paddles)
. = paddles.emag_act(user)
update_icon()
return
//Paddle stuff
/obj/item/device/defib_kit/verb/toggle_paddles()
set name = "Toggle Paddles"
set category = "Object"
var/mob/living/carbon/human/user = usr
if(!paddles)
to_chat(user, "<span class='warning'>The paddles are missing!</span>")
return
if(paddles.loc != src)
reattach_paddles(user) //Remove from their hands and back onto the defib unit
return
if(!slot_check())
to_chat(user, "<span class='warning'>You need to equip [src] before taking out [paddles].</span>")
else
if(!usr.put_in_hands(paddles)) //Detach the paddles into the user's hands
to_chat(user, "<span class='warning'>You need a free hand to hold the paddles!</span>")
update_icon() //success
//checks that the base unit is in the correct slot to be used
/obj/item/device/defib_kit/proc/slot_check()
var/mob/M = loc
if(!istype(M))
return 0 //not equipped
if((slot_flags & SLOT_BACK) && M.get_equipped_item(slot_back) == src)
return 1
if((slot_flags & SLOT_BELT) && M.get_equipped_item(slot_belt) == src)
return 1
return 0
/obj/item/device/defib_kit/dropped(mob/user)
..()
reattach_paddles(user) //paddles attached to a base unit should never exist outside of their base unit or the mob equipping the base unit
/obj/item/device/defib_kit/proc/reattach_paddles(mob/user)
if(!paddles) return
if(ismob(paddles.loc))
var/mob/M = paddles.loc
if(M.drop_from_inventory(paddles, src))
to_chat(user, "<span class='notice'>\The [paddles] snap back into the main unit.</span>")
else
paddles.forceMove(src)
update_icon()
/*
Base Unit Subtypes
*/
/obj/item/device/defib_kit/compact
name = "compact defibrillator"
desc = "A belt-equipped defibrillator that can be rapidly deployed."
icon_state = "defibcompact"
item_state = "defibcompact"
w_class = ITEMSIZE_NORMAL
slot_flags = SLOT_BELT
origin_tech = list(TECH_BIO = 5, TECH_POWER = 3)
/obj/item/device/defib_kit/compact/loaded
bcell = /obj/item/weapon/cell/high
/obj/item/device/defib_kit/compact/combat
name = "combat defibrillator"
desc = "A belt-equipped blood-red defibrillator that can be rapidly deployed. Does not have the restrictions or safeties of conventional defibrillators and can revive through space suits."
paddles = /obj/item/weapon/shockpaddles/linked/combat
/obj/item/device/defib_kit/compact/combat/loaded
bcell = /obj/item/weapon/cell/high
/obj/item/weapon/shockpaddles/linked/combat
combat = 1
safety = 0
chargetime = (1 SECONDS)
//paddles
/obj/item/weapon/shockpaddles
name = "defibrillator paddles"
desc = "A pair of plastic-gripped paddles with flat metal surfaces that are used to deliver powerful electric shocks."
icon = 'icons/obj/defibrillator.dmi'
icon_state = "defibpaddles"
item_state = "defibpaddles"
gender = PLURAL
force = 2
throwforce = 6
w_class = ITEMSIZE_LARGE
var/state //0 off, 1 open, 2 working, 3 dead
var/uses = 2 //Calculates initial uses based on starting cell size
var/use_on_synthetic = 0 //If 1, this is only useful on FBPs, if 0, this is only useful on fleshies
var/pad_name = "defib pads" //Just the name given for some cosmetic things
var/chance = 75 //Percent chance of working
var/charge_cost //Set in New() based on uses
var/obj/item/weapon/cell/cell //The size is mostly irrelevant, see 'uses'
var/mob/living/carbon/human/patient //The person the paddles are on
var/safety = 1 //if you can zap people with the paddles on harm mode
var/combat = 0 //If it can be used to revive people wearing thick clothing (e.g. spacesuits)
var/cooldowntime = (6 SECONDS) // How long in deciseconds until the defib is ready again after use.
var/chargetime = (2 SECONDS)
var/chargecost = 1000 //units of charge
var/burn_damage_amt = 5
/obj/item/device/defib_kit/New()
var/wielded = 0
var/cooldown = 0
var/busy = 0
/obj/item/weapon/shockpaddles/proc/set_cooldown(var/delay)
cooldown = 1
update_icon()
spawn(delay)
if(cooldown)
cooldown = 0
update_icon()
make_announcement("beeps, \"Unit is re-energized.\"", "notice")
playsound(src, 'sound/machines/defib_ready.ogg', 50, 0)
/obj/item/weapon/shockpaddles/update_held_icon()
var/mob/living/M = loc
if(istype(M) && !issmall(M) && M.item_is_in_hands(src) && !M.hands_are_full())
wielded = 1
name = "[initial(name)] (wielded)"
else
wielded = 0
name = initial(name)
update_icon()
..()
//Create cell and determine uses (futureproofing against cell size changes)
cell = new(src)
charge_cost = cell.maxcharge / uses
statechange(0)
/obj/item/device/defib_kit/attack_self(mob/user as mob)
..()
if(patient)
patient = null
user.visible_message("<span class='notice'>[user] returns the pads to \the [src] and closes it.</span>",
"<span class='notice'>You return the pads to \the [src] and close it.</span>")
statechange(0)
/obj/item/weapon/shockpaddles/update_icon()
icon_state = "defibpaddles[wielded]"
item_state = "defibpaddles[wielded]"
if(cooldown)
icon_state = "defibpaddles[wielded]_cooldown"
/obj/item/device/defib_kit/MouseDrop(var/mob/living/carbon/human/onto)
if(istype(onto) && Adjacent(usr) && !usr.restrained() && !usr.stat)
var/mob/living/carbon/human/user = usr
//<--Feel free to code clothing checks right here
if(can_defib(onto))
user.visible_message("<span class='warning'>[user] begins applying [pad_name] to [onto].</span>",
"<span class='warning'>You begin applying [pad_name] to [onto].</span>")
if(do_after(user, 100, onto))
patient = onto
statechange(1,patient)
user.visible_message("<span class='warning'>[user] applies [pad_name] to [onto].</span>",
"<span class='warning'>You finish applying [pad_name] to [onto].</span>")
//can_defib() check is where all of the qualifying conditions should go
//Could probably toss in checks here for damage, organs, etc, but for now I'll leave it as just this
/obj/item/device/defib_kit/proc/can_defib(var/mob/living/carbon/human/target)
var/mob/living/carbon/human/user = usr
if(use_on_synthetic && !target.isSynthetic())
to_chat(user, "[src] isn't designed for organics!")
/obj/item/weapon/shockpaddles/proc/can_use(mob/user, mob/M)
if(busy)
return 0
else if(!use_on_synthetic && target.isSynthetic())
to_chat(user, "[src] isn't designed for synthetics!")
if(!check_charge(chargecost))
to_chat(user, "<span class='warning'>\The [src] doesn't have enough charge left to do that.</span>")
return 0
else if(!target.isSynthetic() && ((world.time - target.timeofdeath) > (10 MINUTES)))//Can only revive organics within a few minutes
to_chat(user, "There is no spark of life in [target.name], they've been dead too long to revive this way.")
if(!wielded && !isrobot(user))
to_chat(user, "<span class='warning'>You need to wield the paddles with both hands before you can use them on someone!</span>")
return 0
if(cooldown)
to_chat(user, "<span class='warning'>\The [src] are re-energizing!</span>")
return 0
return 1
//Checks for various conditions to see if the mob is revivable
/obj/item/weapon/shockpaddles/proc/can_defib(mob/living/carbon/human/H) //This is checked before doing the defib operation
if((H.species.flags & NO_SCAN) || H.isSynthetic())
return "buzzes, \"Unrecogized physiology. Operation aborted.\""
/obj/item/device/defib_kit/attackby(var/obj/item/A as obj, mob/living/user as mob)
if(H.stat != DEAD)
return "buzzes, \"Patient is not in a valid state. Operation aborted.\""
if(!check_contact(H))
return "buzzes, \"Patient's chest is obstructed. Operation aborted.\""
return null
/obj/item/weapon/shockpaddles/proc/can_revive(mob/living/carbon/human/H) //This is checked right before attempting to revive
var/deadtime = world.time - H.timeofdeath
if (deadtime > DEFIB_TIME_LIMIT)
return "buzzes, \"Resuscitation failed - Excessive neural degeneration. Further attempts futile.\""
H.updatehealth()
if(H.health + H.getOxyLoss() <= config.health_threshold_dead || (HUSK in H.mutations))
return "buzzes, \"Resuscitation failed - Severe tissue damage makes recovery of patient impossible via defibrillator. Further attempts futile.\""
var/bad_vital_organ = check_vital_organs(H)
if(bad_vital_organ)
return bad_vital_organ
//this needs to be last since if any of the 'other conditions are met their messages take precedence
if(!H.client && !H.teleop)
return "buzzes, \"Resuscitation failed - Mental interface error. Further attempts may be successful.\""
return null
/obj/item/weapon/shockpaddles/proc/check_contact(mob/living/carbon/human/H)
if(!combat)
for(var/obj/item/clothing/cloth in list(H.wear_suit, H.w_uniform))
if((cloth.body_parts_covered & UPPER_TORSO) && (cloth.item_flags & THICKMATERIAL))
return FALSE
return TRUE
/obj/item/weapon/shockpaddles/proc/check_vital_organs(mob/living/carbon/human/H)
for(var/organ_tag in H.species.has_organ)
var/obj/item/organ/O = H.species.has_organ[organ_tag]
var/name = initial(O.name)
var/vital = initial(O.vital) //check for vital organs
if(vital)
O = H.internal_organs_by_name[organ_tag]
if(!O)
return "buzzes, \"Resuscitation failed - Patient is missing vital organ ([name]). Further attempts futile.\""
if(O.damage > O.max_damage)
return "buzzes, \"Resuscitation failed - Excessive damage to vital organ ([name]). Further attempts futile.\""
return null
/obj/item/weapon/shockpaddles/proc/check_blood_level(mob/living/carbon/human/H)
if(!H.should_have_organ(O_HEART))
return FALSE
var/obj/item/organ/internal/heart/heart = H.internal_organs_by_name[O_HEART]
if(!heart)
return TRUE
var/blood_volume = round((H.vessel.get_reagent_amount("blood")/H.species.blood_volume)*100)
if(!heart || heart.is_broken())
blood_volume *= 0.3
else if(heart.is_bruised())
blood_volume *= 0.7
else if(heart.damage > 1)
blood_volume *= 0.8
return blood_volume < BLOOD_VOLUME_SURVIVE
/obj/item/weapon/shockpaddles/proc/check_charge(var/charge_amt)
return 0
/obj/item/weapon/shockpaddles/proc/checked_use(var/charge_amt)
return 0
/obj/item/weapon/shockpaddles/attack(mob/living/M, mob/living/user, var/target_zone)
var/mob/living/carbon/human/H = M
if(!istype(H) || user.a_intent == I_HURT)
return ..() //Do a regular attack. Harm intent shocking happens as a hit effect
if(can_use(user, H))
busy = 1
update_icon()
do_revive(H, user)
busy = 0
update_icon()
return 1
//Since harm-intent now skips the delay for deliberate placement, you have to be able to hit them in combat in order to shock people.
/obj/item/weapon/shockpaddles/apply_hit_effect(mob/living/target, mob/living/user, var/hit_zone)
if(ishuman(target) && can_use(user, target))
busy = 1
update_icon()
do_electrocute(target, user, hit_zone)
busy = 0
update_icon()
return 1
return ..()
// This proc is used so that we can return out of the revive process while ensuring that busy and update_icon() are handled
/obj/item/weapon/shockpaddles/proc/do_revive(mob/living/carbon/human/H, mob/user)
if(!H.client && !H.teleop)
to_chat(find_dead_player(H.ckey, 1), "Someone is attempting to resuscitate you. Re-enter your body if you want to be revived!")
//beginning to place the paddles on patient's chest to allow some time for people to move away to stop the process
user.visible_message("<span class='warning'>\The [user] begins to place [src] on [H]'s chest.</span>", "<span class='warning'>You begin to place [src] on [H]'s chest...</span>")
if(!do_after(user, 30, H))
return
user.visible_message("<span class='notice'>\The [user] places [src] on [H]'s chest.</span>", "<span class='warning'>You place [src] on [H]'s chest.</span>")
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
var/error = can_defib(H)
if(error)
make_announcement(error, "warning")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
return
if(check_blood_level(H))
make_announcement("buzzes, \"Warning - Patient is in hypovolemic shock.\"", "warning") //also includes heart damage
//placed on chest and short delay to shock for dramatic effect, revive time is 5sec total
if(!do_after(user, chargetime, H))
return
//deduct charge here, in case the base unit was EMPed or something during the delay time
if(!checked_use(chargecost))
make_announcement("buzzes, \"Insufficient charge.\"", "warning")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
return
H.visible_message("<span class='warning'>\The [H]'s body convulses a bit.</span>")
playsound(get_turf(src), "bodyfall", 50, 1)
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 50, 1, -1)
set_cooldown(cooldowntime)
error = can_revive(H)
if(error)
make_announcement(error, "warning")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
return
H.apply_damage(burn_damage_amt, BURN, BP_TORSO)
//set oxyloss so that the patient is just barely in crit, if possible
var/barely_in_crit = config.health_threshold_crit - 1
var/adjust_health = barely_in_crit - H.health //need to increase health by this much
H.adjustOxyLoss(-adjust_health)
make_announcement("pings, \"Resuscitation successful.\"", "notice")
playsound(get_turf(src), 'sound/machines/defib_success.ogg', 50, 0)
make_alive(H)
log_and_message_admins("used \a [src] to revive [key_name(H)].")
/obj/item/weapon/shockpaddles/proc/do_electrocute(mob/living/carbon/human/H, mob/user, var/target_zone)
var/obj/item/organ/external/affecting = H.get_organ(target_zone)
if(!affecting)
to_chat(user, "<span class='warning'>They are missing that body part!</span>")
return
//no need to spend time carefully placing the paddles, we're just trying to shock them
user.visible_message("<span class='danger'>\The [user] slaps [src] onto [H]'s [affecting.name].</span>", "<span class='danger'>You overcharge [src] and slap them onto [H]'s [affecting.name].</span>")
//Just stop at awkwardly slapping electrodes on people if the safety is enabled
if(safety)
to_chat(user, "<span class='warning'>You can't do that while the safety is enabled.</span>")
return
playsound(get_turf(src), 'sound/machines/defib_charge.ogg', 50, 0)
audible_message("<span class='warning'>\The [src] lets out a steadily rising hum...</span>")
if(!do_after(user, chargetime, H))
return
//deduct charge here, in case the base unit was EMPed or something during the delay time
if(!checked_use(chargecost))
make_announcement("buzzes, \"Insufficient charge.\"", "warning")
playsound(get_turf(src), 'sound/machines/defib_failed.ogg', 50, 0)
return
user.visible_message("<span class='danger'><i>\The [user] shocks [H] with \the [src]!</i></span>", "<span class='warning'>You shock [H] with \the [src]!</span>")
playsound(get_turf(src), 'sound/machines/defib_zap.ogg', 100, 1, -1)
playsound(loc, 'sound/weapons/Egloves.ogg', 100, 1, -1)
set_cooldown(cooldowntime)
H.stun_effect_act(2, 120, target_zone)
var/burn_damage = H.electrocute_act(burn_damage_amt*2, src, def_zone = target_zone)
if(burn_damage > 15 && H.can_feel_pain())
H.emote("scream")
admin_attack_log(user, H, "Electrocuted using \a [src]", "Was electrocuted with \a [src]", "used \a [src] to electrocute")
/obj/item/weapon/shockpaddles/proc/make_alive(mob/living/carbon/human/M) //This revives the mob
var/deadtime = world.time - M.timeofdeath
dead_mob_list.Remove(M)
if((M in living_mob_list) || (M in dead_mob_list))
WARNING("Mob [M] was defibbed but already in the living or dead list still!")
living_mob_list += M
M.timeofdeath = 0
M.stat = UNCONSCIOUS //Life() can bring them back to consciousness if it needs to.
M.regenerate_icons()
M.failed_last_breath = 0 //So mobs that died of oxyloss don't revive and have perpetual out of breath.
M.reload_fullscreen()
M.emote("gasp")
M.Weaken(rand(10,25))
M.updatehealth()
apply_brain_damage(M, deadtime)
/obj/item/weapon/shockpaddles/proc/apply_brain_damage(mob/living/carbon/human/H, var/deadtime)
if(deadtime < DEFIB_TIME_LOSS) return
if(!H.should_have_organ(O_BRAIN)) return //no brain
var/obj/item/organ/internal/brain/brain = H.internal_organs_by_name[O_BRAIN]
if(!brain) return //no brain
var/brain_damage = Clamp((deadtime - DEFIB_TIME_LOSS)/(DEFIB_TIME_LIMIT - DEFIB_TIME_LOSS)*brain.max_damage, H.getBrainLoss(), brain.max_damage)
H.setBrainLoss(brain_damage)
/obj/item/weapon/shockpaddles/proc/make_announcement(var/message, var/msg_class)
audible_message("<b>\The [src]</b> [message]", "\The [src] vibrates slightly.")
/obj/item/weapon/shockpaddles/emag_act(mob/user)
if(safety)
safety = 0
to_chat(user, "<span class='warning'>You silently disable \the [src]'s safety protocols with the cryptographic sequencer.</span>")
update_icon()
return 1
else
safety = 1
to_chat(user, "<span class='notice'>You silently enable \the [src]'s safety protocols with the cryptographic sequencer.</span>")
update_icon()
return 1
/obj/item/weapon/shockpaddles/emp_act(severity)
var/new_safety = rand(0, 1)
if(safety != new_safety)
safety = new_safety
if(safety)
make_announcement("beeps, \"Safety protocols enabled!\"", "notice")
playsound(get_turf(src), 'sound/machines/defib_safetyon.ogg', 50, 0)
else
make_announcement("beeps, \"Safety protocols disabled!\"", "warning")
playsound(get_turf(src), 'sound/machines/defib_safetyoff.ogg', 50, 0)
update_icon()
..()
if(!cell && istype(A,/obj/item/weapon/cell))
if(!user.unEquip(A)) return
to_chat(user,"You jack \the [A] into \the [src]'s battery mount.")
A.forceMove(src)
src.cell = A
/obj/item/weapon/shockpaddles/robot
name = "defibrillator paddles"
desc = "A pair of advanced shockpaddles powered by a robot's internal power cell, able to penetrate thick clothing."
chargecost = 50
combat = 1
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
cooldowntime = (3 SECONDS)
else if(istype(A,/obj/item/weapon/screwdriver))
if(cell)
to_chat(user,"<span class='notice'>You remove \the [cell] from \the [src].</span>")
if(user.r_hand && user.l_hand)
cell.forceMove(get_turf(user))
else
user.put_in_hands(cell)
cell = null
playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1)
else
to_chat(user,"<span class='warning'>The power source has already been removed!</span>")
/obj/item/weapon/shockpaddles/robot/check_charge(var/charge_amt)
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
return (R.cell && R.cell.check_charge(charge_amt))
/obj/item/device/defib_kit/proc/statechange(var/new_state, var/pat)
if(state == new_state) return //Let's just save ourselves some time
state = new_state
icon_state = "[initial(icon_state)][state]"
var/turf/T = get_turf(src)
var/state_words = ""
switch(state)
if(0)
state_words = "It is currently closed."
processing_objects -= src
/obj/item/weapon/shockpaddles/robot/checked_use(var/charge_amt)
if(isrobot(src.loc))
var/mob/living/silicon/robot/R = src.loc
return (R.cell && R.cell.checked_use(charge_amt))
/*
Shockpaddles that are linked to a base unit
*/
/obj/item/weapon/shockpaddles/linked
var/obj/item/device/defib_kit/base_unit
/obj/item/weapon/shockpaddles/linked/New(newloc, obj/item/device/defib_kit/defib)
base_unit = defib
..(newloc)
/obj/item/weapon/shockpaddles/linked/Destroy()
if(base_unit)
//ensure the base unit's icon updates
if(base_unit.paddles == src)
base_unit.paddles = null
base_unit.update_icon()
base_unit = null
return ..()
/obj/item/weapon/shockpaddles/linked/dropped(mob/user)
..() //update twohanding
if(base_unit)
base_unit.reattach_paddles(user) //paddles attached to a base unit should never exist outside of their base unit or the mob equipping the base unit
/obj/item/weapon/shockpaddles/linked/check_charge(var/charge_amt)
return (base_unit.bcell && base_unit.bcell.check_charge(charge_amt))
/obj/item/weapon/shockpaddles/linked/checked_use(var/charge_amt)
return (base_unit.bcell && base_unit.bcell.checked_use(charge_amt))
/obj/item/weapon/shockpaddles/linked/make_announcement(var/message, var/msg_class)
base_unit.audible_message("<b>\The [base_unit]</b> [message]", "\The [base_unit] vibrates slightly.")
/*
Standalone Shockpaddles
*/
/obj/item/weapon/shockpaddles/standalone
desc = "A pair of shockpaddles powered by an experimental miniaturized reactor" //Inspired by the advanced e-gun
var/fail_counter = 0
/obj/item/weapon/shockpaddles/standalone/Destroy()
. = ..()
if(fail_counter)
processing_objects.Remove(src)
/obj/item/weapon/shockpaddles/standalone/check_charge(var/charge_amt)
return 1
/obj/item/weapon/shockpaddles/standalone/checked_use(var/charge_amt)
radiation_repository.radiate(src, charge_amt/12) //just a little bit of radiation. It's the price you pay for being powered by magic I guess
return 1
/obj/item/weapon/shockpaddles/standalone/process()
if(fail_counter > 0)
radiation_repository.radiate(src, fail_counter--)
else
processing_objects.Remove(src)
/obj/item/weapon/shockpaddles/standalone/emp_act(severity)
..()
var/new_fail = 0
switch(severity)
if(1)
state_words = "A green light is lit; it has charge."
processing_objects |= src
new_fail = max(fail_counter, 20)
visible_message("\The [src]'s reactor overloads!")
if(2)
state_words = "A yellow light is flashing: it's in the process of reviving a patient."
T.visible_message("<span class='notice'>A yellow light starts flashing on \the [src].</span>")
playsound(T, 'sound/machines/chime.ogg', 50, 0)
if(3)
state_words = "A red light is flashing: the battery needs to be recharged."
T.visible_message("<span class='warning'>A red light starts flashing on \the [src].</span>")
playsound(T, 'sound/machines/buzz-sigh.ogg', 50, 0)
new_fail = max(fail_counter, 8)
if(ismob(loc))
to_chat(loc, "<span class='warning'>\The [src] feel pleasantly warm.</span>")
desc = "[initial(desc)] [state_words][pat ? " The pads are attached to [pat]." : ""]"
update_icon()
if(new_fail && !fail_counter)
processing_objects.Add(src)
fail_counter = new_fail
/obj/item/device/defib_kit/process()
if(!state) //0 or null
statechange(0)
processing_objects -= src
return
//Patient moved too far
if(patient && !(get_dist(src,patient) <= 1)) //You separated the kit and pads too far
audible_message("<span class='warning'>There is a clatter as the [pad_name] are yanked off of [patient].</span>")
statechange(0)
patient = null
return
//Battery died
if(!cell || cell.charge < charge_cost)
statechange(3,patient)
return
//A patient isn't being worked on, but we have one, so start
if(patient && patient.stat == DEAD && state != 2)
statechange(2)
if(attempt_shock()) //Try to shock them, has timer and such
patient.visible_message("<span class='warning'>[patient] convulses!</span>")
playsound(src.loc, 'sound/effects/sparks2.ogg', 75, 1)
//Actual rezzing code
if(prob(chance))
if(!patient.client && patient.mind) //Don't force the dead person to come back if they don't want to.
for(var/mob/observer/dead/ghost in player_list)
if(ghost.mind == patient.mind)
to_chat(ghost, "<b><font color = #330033><font size = 3>Someone is trying to \
revive you. Return to your body if you want to be revived!</b> \
(Verbs -> Ghost -> Re-enter corpse). You have 15 seconds to do this!</font></font>")
sleep(15 SECONDS)
break
if(!(HUSK in patient.mutations)) // Husked people can't come back with a Defib.
if(patient.client)
patient.adjustOxyLoss(-20) //Look, blood stays oxygenated for quite some time, but I'm not recoding the entire oxy system
patient.stat = CONSCIOUS //Note that if whatever killed them in the first place wasn't fixed, they're likely to die again.
dead_mob_list -= patient
living_mob_list += patient
patient.timeofdeath = null
patient.visible_message("<span class='notice'>[patient]'s eyes open!</span>")
log_and_message_admins("[patient] was revived by a defib.")
cell.charge -= charge_cost //Always charge the cost after any attempt, failed or not
sleep(20) //Wait 2 seconds before next attempt
statechange(1,patient) //Back to ready
/obj/item/device/defib_kit/proc/attempt_shock()
if(!patient || cell.charge < charge_cost)
return
var/zap_time = world.time + (7 SECONDS)
var/o_patient_loc = patient.loc
. = 1
while(world.time < zap_time) //This is basically a custom do_after() call
sleep(1)
//Failed: We lost something important
if(!patient || !cell || cell.charge < charge_cost)
. = 0
break
//Failed: The locations aren't right
if((o_patient_loc != patient.loc) || !(get_dist(src,patient) <= 1))
. = 0
break
return
/* From the Bay port, this doesn't seem to have a sprite.
/obj/item/weapon/shockpaddles/standalone/traitor
name = "defibrillator paddles"
desc = "A pair of unusual looking paddles powered by an experimental miniaturized reactor. It possesses both the ability to penetrate armor and to deliver powerful shocks."
icon = 'icons/obj/weapons.dmi'
icon_state = "defibpaddles0"
item_state = "defibpaddles0"
combat = 1
safety = 0
chargetime = (1 SECONDS)
*/
//Stub
/obj/item/device/defib_kit/jumper_kit
name = "jumper cable kit"
desc = "This Morpheus-branded FBP defib kit is a semi-automated model. Apply cables, step back, wait."
icon_state = "jumper_kit"
use_on_synthetic = 1
pad_name = "jumper cables"
#undef DEFIB_TIME_LIMIT
#undef DEFIB_TIME_LOSS
@@ -13,7 +13,7 @@
var/translate_hive = 0
var/obj/item/device/encryptionkey/keyslot1 = null
var/obj/item/device/encryptionkey/keyslot2 = null
var/ks1type = /obj/item/device/encryptionkey
var/ks1type = null
var/ks2type = null
/obj/item/device/radio/headset/New()
+2 -2
View File
@@ -113,9 +113,9 @@
prob(4);/obj/item/ammo_magazine/m762,\
prob(4);/obj/item/ammo_magazine/m762,\
prob(3);/obj/item/ammo_magazine/clip/c10mm,\
prob(3);/obj/item/ammo_magazine/clip/c50,\
prob(3);/obj/item/ammo_magazine/clip/c44,\
prob(3);/obj/item/ammo_magazine/m556,\
prob(2);/obj/item/ammo_magazine/m50,\
prob(2);/obj/item/ammo_magazine/m44,\
prob(2);/obj/item/ammo_magazine/m556,\
prob(1);/obj/item/weapon/storage/box/frags,\
/* prob(1);/obj/item/ammo_magazine/battlerifle,\ */
+1 -1
View File
@@ -167,7 +167,7 @@ var/global/list/alphabet_uppercase = list("A","B","C","D","E","F","G","H","I","J
// Used by robots and robot preferences.
var/list/robot_module_types = list(
"Standard", "Engineering", "Construction", "Surgeon", "Crisis",
"Standard", "Engineering", "Surgeon", "Crisis",
"Miner", "Janitor", "Service", "Clerical", "Security",
"Research"
)
+29 -6
View File
@@ -3,17 +3,40 @@
set name = "AOOC"
set desc = "Antagonist OOC"
if(!check_rights(R_ADMIN|R_MOD)) return
var/is_admin = check_rights(R_ADMIN|R_MOD, show_msg = 0)
var/is_antag = usr.mind && usr.mind.special_role
if(!is_antag && !is_admin) // Non-antagonists and non-admins have no business using this.
to_chat(usr, "<span class='warning'>Sorry, but only certain antagonists or administrators can use this verb.</span>")
return
else if(is_antag && !is_admin) // Is an antag, and not an admin, meaning we need to check if their antag type allows AOOC.
var/datum/antagonist/A = get_antag_data(usr.mind.special_role)
if(!A || !A.can_use_aooc)
to_chat(usr, "<span class='warning'>Sorry, but your antagonist type is not allowed to speak in AOOC.</span>")
return
msg = sanitize(msg)
if(!msg) return
if(!msg)
return
// Name shown to admins.
var/display_name = src.key
if(holder && holder.fakekey)
display_name = holder.fakekey
if(holder)
if(holder.fakekey)
display_name = usr.client.holder.fakekey
// Name shown to other players. Admins whom are not also antags have their rank displayed.
var/player_display = (is_admin && !is_antag) ? "[display_name]([usr.client.holder.rank])" : display_name
for(var/mob/M in mob_list)
if((M.mind && M.mind.special_role && M.client) || check_rights((R_ADMIN|R_MOD), 0, M))
M << "<font color='#960018'><span class='ooc'>" + create_text_tag("aooc", "Antag-OOC:", M.client) + " <EM>[display_name]:</EM> <span class='message'>[msg]</span></span></font>"
if(check_rights(R_ADMIN|R_MOD, 0, M)) // Staff can see AOOC unconditionally, and with more details.
to_chat(M, "<span class='ooc'><span class='aooc'>[create_text_tag("aooc", "Antag-OOC:", M.client)] <EM>[get_options_bar(src, 0, 1, 1)]([admin_jump_link(usr, M.client.holder)]):</EM> <span class='message'>[msg]</span></span></span>")
else if(M.client) // Players can only see AOOC if observing, or if they are an antag type allowed to use AOOC.
var/datum/antagonist/A = null
if(M.mind) // Observers don't have minds, but they should still see AOOC.
A = get_antag_data(M.mind.special_role)
if((M.mind && M.mind.special_role && A && A.can_use_aooc) || isobserver(M)) // Antags must have their type be allowed to AOOC to see AOOC. This prevents, say, ERT from seeing AOOC.
to_chat(M, "<span class='ooc'><span class='aooc'>[create_text_tag("aooc", "Antag-OOC:", M.client)] <EM>[player_display]:</EM> <span class='message'>[msg]</span></span></span>")
log_ooc("(ANTAG) [key] : [msg]")
+2 -2
View File
@@ -210,9 +210,9 @@
prob(4);/obj/item/ammo_magazine/m762,\
prob(4);/obj/item/ammo_magazine/m556/ext,\
prob(3);/obj/item/ammo_magazine/clip/c10mm,\
prob(3);/obj/item/ammo_magazine/clip/c50,\
prob(3);/obj/item/ammo_magazine/clip/c44,\
prob(3);/obj/item/ammo_magazine/m556,\
prob(2);/obj/item/ammo_magazine/m50,\
prob(2);/obj/item/ammo_magazine/m44,\
prob(2);/obj/item/ammo_magazine/m556,\
prob(1);/obj/item/weapon/storage/box/frags,\
/* prob(1);/obj/item/ammo_magazine/battlerifle,\ */
@@ -391,4 +391,38 @@
/datum/gear/suit/miscellaneous/peacoat/New()
..()
gear_tweaks = list(gear_tweak_free_color_choice)
gear_tweaks = list(gear_tweak_free_color_choice)
/datum/gear/suit/snowsuit
display_name = "snowsuit"
path = /obj/item/clothing/suit/storage/snowsuit
/datum/gear/suit/snowsuit/command
display_name = "snowsuit, command"
path = /obj/item/clothing/suit/storage/snowsuit/command
allowed_roles = list("Colony Director","Research Director","Head of Personnel","Head of Security","Chief Engineer","Command Secretary")
/datum/gear/suit/snowsuit/security
display_name = "snowsuit, security"
path = /obj/item/clothing/suit/storage/snowsuit/security
allowed_roles = list("Security Officer", "Head of Security", "Warden", "Detective")
/datum/gear/suit/snowsuit/medical
display_name = "snowsuit, medical"
path = /obj/item/clothing/suit/storage/snowsuit/medical
allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist")
/datum/gear/suit/snowsuit/science
display_name = "snowsuit, science"
path = /obj/item/clothing/suit/storage/snowsuit/science
allowed_roles = list("Research Director","Scientist", "Roboticist", "Xenobiologist")
/datum/gear/suit/snowsuit/engineering
display_name = "snowsuit, engineering"
path = /obj/item/clothing/suit/storage/snowsuit/engineering
allowed_roles = list("Chief Engineer","Atmospheric Technician", "Station Engineer")
/datum/gear/suit/snowsuit/cargo
display_name = "snowsuit, supply"
path = /obj/item/clothing/suit/storage/snowsuit/cargo
allowed_roles = list("Quartermaster","shaft Miner","Cargo Technician","Head of Personnel")
@@ -375,6 +375,10 @@
/datum/gear/uniform/dresses/janimaid
display_name = "maid uniform"
path = /obj/item/clothing/under/dress/janimaid
/datum/gear/uniform/dresses/sexymaid
display_name = "sexy maid uniform"
path = /obj/item/clothing/under/dress/sexymaid
/datum/gear/uniform/pt
display_name = "pt uniform"
@@ -458,4 +462,4 @@
/datum/gear/uniform/red_swept_dress
display_name = "red swept dress"
path = /obj/item/clothing/under/dress/red_swept_dress
path = /obj/item/clothing/under/dress/red_swept_dress
@@ -13,7 +13,7 @@
offline_slowdown = 10
vision_restriction = 1
offline_vision_restriction = 2
siemens_coefficient = 0.75
chest_type = /obj/item/clothing/suit/space/rig/breacher
helm_type = /obj/item/clothing/head/helmet/space/rig/breacher
boot_type = /obj/item/clothing/shoes/magboots/rig/breacher
@@ -25,6 +25,7 @@
icon_state = "breacher_rig"
armor = list(melee = 90, bullet = 90, laser = 90, energy = 90, bomb = 90, bio = 100, rad = 80) //Takes TEN TIMES as much damage to stop someone in a breacher. In exchange, it's slow.
vision_restriction = 0
siemens_coefficient = 0.2
/obj/item/clothing/head/helmet/space/rig/breacher
species_restricted = list("Unathi")
@@ -11,6 +11,7 @@
helm_type = /obj/item/clothing/head/helmet/space/rig/ert
req_access = list(access_cent_specops)
siemens_coefficient= 0.5
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
allowed = list(/obj/item/device/flashlight, /obj/item/weapon/tank, /obj/item/device/t_scanner, /obj/item/weapon/rcd, /obj/item/weapon/crowbar, \
@@ -30,7 +31,7 @@
suit_type = "ERT engineer"
icon_state = "ert_engineer_rig"
armor = list(melee = 60, bullet = 50, laser = 30,energy = 15, bomb = 30, bio = 100, rad = 100)
siemens_coefficient = 0
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
initial_modules = list(
/obj/item/rig_module/ai_container,
@@ -71,6 +72,8 @@
suit_type = "heavy asset protection"
icon_state = "asset_protection_rig"
armor = list(melee = 60, bullet = 50, laser = 50,energy = 40, bomb = 40, bio = 100, rad = 100)
siemens_coefficient= 0.3
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
initial_modules = list(
/obj/item/rig_module/ai_container,
@@ -11,7 +11,8 @@
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
siemens_coefficient = 0.3
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
helm_type = /obj/item/clothing/head/helmet/space/rig/merc
allowed = list(/obj/item/device/flashlight,/obj/item/weapon/tank,/obj/item/device/suit_cooling_unit,/obj/item/weapon/gun,/obj/item/ammo_magazine,/obj/item/ammo_casing,/obj/item/weapon/melee/baton,/obj/item/weapon/melee/energy/sword,/obj/item/weapon/handcuffs)
@@ -65,6 +65,7 @@
offline_slowdown = 10
offline_vision_restriction = 2
emp_protection = -20
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/industrial
@@ -92,6 +93,7 @@
slowdown = 0
offline_slowdown = 1
offline_vision_restriction = 1
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/eva
glove_type = /obj/item/clothing/gloves/gauntlets/rig/eva
@@ -100,6 +102,7 @@
req_access = list()
req_one_access = list()
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/gloves/gauntlets/rig/eva
name = "insulated gauntlets"
@@ -127,6 +130,7 @@
slowdown = 0
offline_slowdown = 0
offline_vision_restriction = 0
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/ce
glove_type = /obj/item/clothing/gloves/gauntlets/rig/ce
@@ -135,6 +139,7 @@
req_access = list()
req_one_access = list()
max_heat_protection_temperature = FIRE_HELMET_MAX_HEAT_PROTECTION_TEMPERATURE
/obj/item/clothing/gloves/gauntlets/rig/ce
name = "insulated gauntlets"
@@ -161,6 +166,7 @@
armor = list(melee = 45, bullet = 5, laser = 45, energy = 80, bomb = 60, bio = 100, rad = 100)
slowdown = 1
offline_vision_restriction = 1
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/hazmat
@@ -188,6 +194,7 @@
armor = list(melee = 30, bullet = 15, laser = 20, energy = 60, bomb = 30, bio = 100, rad = 100)
slowdown = 1
offline_vision_restriction = 1
siemens_coefficient= 0.75
helm_type = /obj/item/clothing/head/helmet/space/rig/medical
@@ -217,6 +224,7 @@
slowdown = 1
offline_slowdown = 3
offline_vision_restriction = 1
siemens_coefficient= 0.7
helm_type = /obj/item/clothing/head/helmet/space/rig/hazard
@@ -951,3 +951,38 @@ obj/item/clothing/suit/storage/toggle/peacoat
body_parts_covered = UPPER_TORSO|ARMS
flags_inv = HIDEHOLSTER
/obj/item/clothing/suit/storage/snowsuit
name = "snowsuit"
desc = "A suit made to keep you nice and toasty on cold winter days. Or at least alive."
icon_state = "snowsuit"
item_state_slots = list(slot_r_hand_str = "labcoat", slot_l_hand_str = "labcoat")
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
flags_inv = HIDEHOLSTER
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS
min_cold_protection_temperature = SPACE_SUIT_MIN_COLD_PROTECTION_TEMPERATURE
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0)
allowed = list (/obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight,/obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes, /obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask)
/obj/item/clothing/suit/storage/snowsuit/command
name = "command snowsuit"
icon_state = "snowsuit_command"
/obj/item/clothing/suit/storage/snowsuit/security
name = "security snowsuit"
icon_state = "snowsuit_security"
/obj/item/clothing/suit/storage/snowsuit/medical
name = "medical snowsuit"
icon_state = "snowsuit_medical"
/obj/item/clothing/suit/storage/snowsuit/engineering
name = "engineering snowsuit"
icon_state = "snowsuit_engineering"
/obj/item/clothing/suit/storage/snowsuit/cargo
name = "cargo snowsuit"
icon_state = "snowsuit_cargo"
/obj/item/clothing/suit/storage/snowsuit/science
name = "science snowsuit"
icon_state = "snowsuit_science"
@@ -324,6 +324,11 @@
name = "maid uniform"
desc = "A simple maid uniform for housekeeping."
icon_state = "janimaid"
/obj/item/clothing/under/dress/sexymaid
name = "sexy maid uniform"
desc = "You must be a bit risque teasing all of them in a maid uniform!"
icon_state = "sexymaid"
/obj/item/clothing/under/dress/dress_fire
name = "flame dress"
@@ -313,4 +313,104 @@
name = "mobility module"
desc = "By retracting limbs and tucking in its head, a combat android can roll at high speeds."
icon = 'icons/obj/decals.dmi'
icon_state = "shock"
icon_state = "shock"
/obj/item/weapon/inflatable_dispenser
name = "inflatables dispenser"
desc = "Hand-held device which allows rapid deployment and removal of inflatables."
icon = 'icons/obj/storage.dmi'
icon_state = "inf_deployer"
w_class = ITEMSIZE_LARGE
var/stored_walls = 5
var/stored_doors = 2
var/max_walls = 5
var/max_doors = 2
var/mode = 0 // 0 - Walls 1 - Doors
/obj/item/weapon/inflatable_dispenser/robot
w_class = ITEMSIZE_HUGE
stored_walls = 10
stored_doors = 5
max_walls = 10
max_doors = 5
/obj/item/weapon/inflatable_dispenser/examine(var/mob/user)
if(!..(user))
return
to_chat(user, "It has [stored_walls] wall segment\s and [stored_doors] door segment\s stored.")
to_chat(user, "It is set to deploy [mode ? "doors" : "walls"]")
/obj/item/weapon/inflatable_dispenser/attack_self()
mode = !mode
to_chat(usr, "You set \the [src] to deploy [mode ? "doors" : "walls"].")
/obj/item/weapon/inflatable_dispenser/afterattack(var/atom/A, var/mob/user)
..(A, user)
if(!user)
return
if(!user.Adjacent(A))
to_chat(user, "You can't reach!")
return
if(istype(A, /turf))
try_deploy_inflatable(A, user)
if(istype(A, /obj/item/inflatable) || istype(A, /obj/structure/inflatable))
pick_up(A, user)
/obj/item/weapon/inflatable_dispenser/proc/try_deploy_inflatable(var/turf/T, var/mob/living/user)
if(mode) // Door deployment
if(!stored_doors)
to_chat(user, "\The [src] is out of doors!")
return
if(T && istype(T))
new /obj/structure/inflatable/door(T)
stored_doors--
else // Wall deployment
if(!stored_walls)
to_chat(user, "\The [src] is out of walls!")
return
if(T && istype(T))
new /obj/structure/inflatable(T)
stored_walls--
playsound(T, 'sound/items/zip.ogg', 75, 1)
to_chat(user, "You deploy the inflatable [mode ? "door" : "wall"]!")
/obj/item/weapon/inflatable_dispenser/proc/pick_up(var/obj/A, var/mob/living/user)
if(istype(A, /obj/structure/inflatable))
if(!istype(A, /obj/structure/inflatable/door))
if(stored_walls >= max_walls)
to_chat(user, "\The [src] is full.")
return
stored_walls++
qdel(A)
else
if(stored_doors >= max_doors)
to_chat(user, "\The [src] is full.")
return
stored_doors++
qdel(A)
playsound(loc, 'sound/machines/hiss.ogg', 75, 1)
visible_message("\The [user] deflates \the [A] with \the [src]!")
return
if(istype(A, /obj/item/inflatable))
if(!istype(A, /obj/item/inflatable/door))
if(stored_walls >= max_walls)
to_chat(user, "\The [src] is full.")
return
stored_walls++
qdel(A)
else
if(stored_doors >= max_doors)
to_chat(usr, "\The [src] is full!")
return
stored_doors++
qdel(A)
visible_message("\The [user] picks up \the [A] with \the [src]!")
return
to_chat(user, "You fail to pick up \the [A] with \the [src]")
return
@@ -9,7 +9,7 @@ var/global/list/robot_modules = list(
"Security" = /obj/item/weapon/robot_module/robot/security/general,
"Combat" = /obj/item/weapon/robot_module/robot/security/combat,
"Engineering" = /obj/item/weapon/robot_module/robot/engineering/general,
"Construction" = /obj/item/weapon/robot_module/robot/engineering/construction,
// "Construction" = /obj/item/weapon/robot_module/robot/engineering/construction,
"Janitor" = /obj/item/weapon/robot_module/robot/janitor
)
@@ -342,6 +342,8 @@ var/global/list/robot_modules = list(
name = "construction robot module"
no_slip = 1
/* Merged back into engineering (Hell, it's about time.)
/obj/item/weapon/robot_module/robot/engineering/construction/New()
..()
src.modules += new /obj/item/borg/sight/meson(src)
@@ -381,6 +383,7 @@ var/global/list/robot_modules = list(
var/obj/item/stack/material/cyborg/glass/reinforced/RG = new (src)
RG.synths = list(metal, glass)
src.modules += RG
*/
/obj/item/weapon/robot_module/robot/engineering/general/New()
..()
@@ -397,14 +400,21 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/device/lightreplacer(src)
src.modules += new /obj/item/device/pipe_painter(src)
src.modules += new /obj/item/device/floor_painter(src)
src.modules += new /obj/item/weapon/inflatable_dispenser/robot(src)
src.emag = new /obj/item/weapon/melee/baton/robot/arm(src)
src.modules += new /obj/item/device/geiger(src)
src.modules += new /obj/item/weapon/rcd/borg(src)
src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src)
src.modules += new /obj/item/weapon/gripper/no_use/loader(src)
var/datum/matter_synth/metal = new /datum/matter_synth/metal(40000)
var/datum/matter_synth/glass = new /datum/matter_synth/glass(40000)
var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel(20000)
var/datum/matter_synth/wire = new /datum/matter_synth/wire()
synths += metal
synths += glass
synths += plasteel
synths += wire
var/obj/item/weapon/matter_decompiler/MD = new /obj/item/weapon/matter_decompiler(src)
@@ -428,6 +438,10 @@ var/global/list/robot_modules = list(
C.synths = list(wire)
src.modules += C
var/obj/item/stack/material/cyborg/plasteel/P = new (src)
P.synths = list(plasteel)
src.modules += P
var/obj/item/stack/tile/floor/cyborg/S = new /obj/item/stack/tile/floor/cyborg(src)
S.synths = list(metal)
src.modules += S
@@ -692,6 +706,7 @@ var/global/list/robot_modules = list(
src.modules += new /obj/item/weapon/surgical/circular_saw(src)
src.modules += new /obj/item/weapon/reagent_containers/syringe(src)
src.modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src)
src.modules += new /obj/item/weapon/storage/part_replacer(src)
src.emag = new /obj/item/weapon/hand_tele(src)
var/datum/matter_synth/nanite = new /datum/matter_synth/nanite(10000)
+2 -2
View File
@@ -65,7 +65,7 @@
/obj/item/ammo_magazine
name = "magazine"
desc = "A magazine for some kind of gun."
icon_state = "357"
icon_state = ".357"
icon = 'icons/obj/ammo.dmi'
flags = CONDUCT
slot_flags = SLOT_BELT
@@ -78,7 +78,7 @@
var/list/stored_ammo = list()
var/mag_type = SPEEDLOADER //ammo_magazines can only be used with compatible guns. This is not a bitflag, the load_method var on guns is.
var/caliber = "357"
var/caliber = ".357"
var/max_ammo = 7
var/ammo_type = /obj/item/ammo_casing //ammo type that is initially loaded
@@ -30,7 +30,7 @@
name = "speedloader (.357)"
desc = "A speedloader for .357 revolvers."
icon_state = "38"
caliber = "357"
caliber = ".357"
ammo_type = /obj/item/ammo_casing/a357
matter = list(DEFAULT_WALL_MATERIAL = 1260)
max_ammo = 6
@@ -381,28 +381,28 @@
/obj/item/ammo_magazine/m556saw/empty
initial_ammo = 0
///////// .50 AE /////////
///////// .44 Magnum /////////
/obj/item/ammo_magazine/m50
name = "magazine (.50 AE)"
icon_state = "50ae"
/obj/item/ammo_magazine/m44
name = "magazine (.44)"
icon_state = ".44"
origin_tech = list(TECH_COMBAT = 2)
mag_type = MAGAZINE
caliber = ".50AE"
caliber = ".44"
matter = list(DEFAULT_WALL_MATERIAL = 1260)
ammo_type = /obj/item/ammo_casing/a50ae
ammo_type = /obj/item/ammo_casing/a44
max_ammo = 7
multiple_sprites = 1
/obj/item/ammo_magazine/m50/empty
/obj/item/ammo_magazine/m44/empty
initial_ammo = 0
/obj/item/ammo_magazine/clip/c50
name = "ammo clip (.50 AE)"
/obj/item/ammo_magazine/clip/c44
name = "ammo clip (.44)"
icon_state = "clip_pistol"
desc = "A stripper clip for reloading .50 Action Express rounds into magazines."
caliber = ".50AE"
ammo_type = /obj/item/ammo_casing/a50ae
desc = "A stripper clip for reloading .44 rounds into magazines."
caliber = ".44"
ammo_type = /obj/item/ammo_casing/a44
matter = list(DEFAULT_WALL_MATERIAL = 1620) // metal costs are very roughly based around one .50 casing = 180 metal
max_ammo = 9
multiple_sprites = 1
@@ -25,7 +25,7 @@
/obj/item/ammo_casing/a357
desc = "A .357 bullet casing."
caliber = "357"
caliber = ".357"
projectile_type = /obj/item/projectile/bullet/pistol/strong
/*
@@ -54,9 +54,9 @@
* .50 Action Express
*/
/obj/item/ammo_casing/a50ae
desc = "A .50AE bullet casing."
caliber = ".50AE"
/obj/item/ammo_casing/a44
desc = "A .44 bullet casing."
caliber = ".44"
projectile_type = /obj/item/projectile/bullet/pistol/strong
/*
+1 -1
View File
@@ -11,7 +11,7 @@
matter = list(DEFAULT_WALL_MATERIAL = 1000)
recoil = 1
var/caliber = "357" //determines which casings will fit
var/caliber = ".357" //determines which casings will fit
var/handle_casings = EJECT_CASINGS //determines how spent casings should be handled
var/load_method = SINGLE_CASING|SPEEDLOADER //1 = Single shells, 2 = box or quick loader, 3 = magazine
var/obj/item/ammo_casing/chambered = null
@@ -116,15 +116,15 @@
/obj/item/weapon/gun/projectile/deagle
name = "desert eagle"
desc = "A robust handgun that uses .50 AE rounds."
desc = "The perfect handgun for shooters with a need to hit targets through a wall and behind a fridge in your neighbor's house. Uses .44 rounds."
icon_state = "deagle"
item_state = "deagle"
force = 14.0
caliber = ".50AE"
caliber = ".44"
load_method = MAGAZINE
fire_sound = 'sound/weapons/deagle.ogg'
magazine_type = /obj/item/ammo_magazine/m50
allowed_magazines = list(/obj/item/ammo_magazine/m50)
magazine_type = /obj/item/ammo_magazine/m44
allowed_magazines = list(/obj/item/ammo_magazine/m44)
/obj/item/weapon/gun/projectile/deagle/update_icon()
..()
@@ -134,12 +134,12 @@
icon_state = "[initial(icon_state)]-e"
/obj/item/weapon/gun/projectile/deagle/gold
desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .50 AE rounds."
desc = "A gold plated gun folded over a million times by superior martian gunsmiths. Uses .44 rounds."
icon_state = "deagleg"
item_state = "deagleg"
/obj/item/weapon/gun/projectile/deagle/camo
desc = "A Deagle brand Deagle for operators operating operationally. Uses .50 AE rounds."
desc = "A Deagle brand Deagle for operators operating operationally. Uses .44 rounds."
icon_state = "deaglecamo"
item_state = "deagleg"
@@ -259,14 +259,14 @@
/obj/item/ammo_casing/a9mmf = "9mm",
/obj/item/ammo_casing/a45f = ".45",
/obj/item/ammo_casing/a10mm = "10mm",
/obj/item/ammo_casing/a12g = "12 gauge",
/obj/item/ammo_casing/a12g = "12 gauge",
/obj/item/ammo_casing/a12g/pellet = "12 gauge",
/obj/item/ammo_casing/a12g/pellet = "12 gauge",
/obj/item/ammo_casing/a12g/pellet = "12 gauge",
/obj/item/ammo_casing/a12g/beanbag = "12 gauge",
/obj/item/ammo_casing/a12g/stunshell = "12 gauge",
/obj/item/ammo_casing/a12g/flash = "12 gauge",
/obj/item/ammo_casing/a12g = "12g",
/obj/item/ammo_casing/a12g = "12g",
/obj/item/ammo_casing/a12g/pellet = "12g",
/obj/item/ammo_casing/a12g/pellet = "12g",
/obj/item/ammo_casing/a12g/pellet = "12g",
/obj/item/ammo_casing/a12g/beanbag = "12g",
/obj/item/ammo_casing/a12g/stunshell = "12g",
/obj/item/ammo_casing/a12g/flash = "12g",
/obj/item/ammo_casing/a762 = "7.62mm",
/obj/item/ammo_casing/a556 = "5.56mm"
)
@@ -3,7 +3,7 @@
desc = "The Lumoco Arms HE Colt is a choice revolver for when you absolutely, positively need to put a hole in the other guy. Uses .357 rounds."
icon_state = "revolver"
item_state = "revolver"
caliber = "357"
caliber = ".357"
origin_tech = list(TECH_COMBAT = 2, TECH_MATERIAL = 2)
handle_casings = CYCLE_CASINGS
max_shells = 6
@@ -58,7 +58,7 @@ var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing,
/datum/reagent/drink/dry_ramen,
/datum/reagent/drink/hell_ramen,
/datum/reagent/drink/hot_ramen,
/datum/reagent/drink/nuka_cola,)
/datum/reagent/drink/nuka_cola)
// This default list is a bit different, it contains items we don't want
var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
+1 -1
View File
@@ -130,7 +130,7 @@
break_to_parts()
return
if(istype(W, /obj/item/weapon/melee/arm_blade))
if(istype(W, /obj/item/weapon/melee/changeling/arm_blade))
user.visible_message("<span class='danger'>\The [src] was sliced apart by [user]!</span>")
break_to_parts()
return
@@ -15,10 +15,10 @@
/obj/machinery/artifact_harvester/New()
..()
//connect to a nearby scanner pad
owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir)
if(!owned_scanner)
owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src)
spawn(50) //Delay so the scan pad has time to actually spawn in
owned_scanner = locate(/obj/machinery/artifact_scanpad) in get_step(src, dir) //connect to a nearby scanner pad
if(!owned_scanner)
owned_scanner = locate(/obj/machinery/artifact_scanpad) in orange(1, src)
/obj/machinery/artifact_harvester/attackby(var/obj/I as obj, var/mob/user as mob)
if(istype(I,/obj/item/weapon/anobattery))
+1
View File
@@ -24,6 +24,7 @@ em {font-style: normal;font-weight: bold;}
.ooc .moderator {color: #184880;}
.ooc .developer {color: #1b521f;}
.ooc .admin {color: #b82e00;}
.ooc .aooc {color: #960018;}
/* Admin: Private Messages */
.pm .howto {color: #ff0000; font-weight: bold; font-size: 200%;}
Binary file not shown.

Before

Width:  |  Height:  |  Size: 86 KiB

After

Width:  |  Height:  |  Size: 86 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 15 KiB

BIN
View File
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.5 KiB

After

Width:  |  Height:  |  Size: 3.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 60 KiB

After

Width:  |  Height:  |  Size: 61 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 55 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 457 KiB

After

Width:  |  Height:  |  Size: 459 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 353 KiB

After

Width:  |  Height:  |  Size: 353 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 161 KiB

After

Width:  |  Height:  |  Size: 163 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 101 KiB

After

Width:  |  Height:  |  Size: 101 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 90 KiB

After

Width:  |  Height:  |  Size: 89 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 73 KiB

After

Width:  |  Height:  |  Size: 74 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 33 KiB

After

Width:  |  Height:  |  Size: 34 KiB

+4 -4
View File
@@ -680,7 +680,7 @@
"and" = (/obj/machinery/camera/network/research_outpost{dir = 4},/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/tiled/dark,/area/rnd/anomaly_lab/containment_two)
"ane" = (/turf/simulated/floor/tiled/dark,/area/rnd/anomaly_lab/containment_two)
"anf" = (/obj/machinery/alarm/monitor/isolation{alarm_id = "isolation_two"; dir = 8; pixel_x = 22; pixel_y = 0},/turf/simulated/floor/tiled/dark,/area/rnd/anomaly_lab/containment_two)
"ang" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/item/device/defib_kit,/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/first_aid_west)
"ang" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -1; pixel_y = -2},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/light_switch{pixel_x = -25},/obj/item/device/defib_kit/loaded,/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
"anh" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/first_aid_west)
"ani" = (/obj/structure/cable/green{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 6},/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/first_aid_west)
"anj" = (/obj/machinery/door/airlock/glass_medical{name = "First-Aid Station"; req_one_access = newlist()},/obj/machinery/door/firedoor/glass,/obj/structure/cable/green{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/steel_grid,/area/tether/surfacebase/medical/first_aid_west)
@@ -3531,7 +3531,7 @@
"bpU" = (/obj/structure/closet,/obj/item/weapon/reagent_containers/food/drinks/bottle/tequilla,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/vacant/vacant_site2)
"bpV" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/effect/decal/cleanable/dirt,/turf/simulated/floor/plating,/area/vacant/vacant_site2)
"bpW" = (/obj/structure/ladder,/obj/effect/floor_decal/industrial/outline/blue,/turf/simulated/floor/plating,/area/vacant/vacant_site2)
"bpX" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/spray/cleaner{pixel_x = -1; pixel_y = -2},/obj/item/weapon/reagent_containers/spray/cleaner,/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/machinery/light_switch{pixel_x = -25},/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
"bpX" = (/obj/structure/table/rack,/obj/item/bodybag/cryobag,/obj/item/weapon/crowbar,/obj/machinery/light{icon_state = "tube1"; dir = 8},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 6},/obj/item/device/defib_kit/loaded,/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/first_aid_west)
"bpY" = (/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
"bpZ" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
"bqa" = (/obj/machinery/bodyscanner{dir = 8},/obj/effect/floor_decal/corner_steel_grid{dir = 10},/turf/simulated/floor/tiled/white,/area/tether/surfacebase/medical/triage)
@@ -5444,7 +5444,7 @@ aaaaadaadaadaadaadaadaadaadaadaadaadaadajUajUakyalkallalmalnaloalpalqalralsaltal
aaaaadaadaadaadaadaadaadaadaadaadaadaadajUajUalLaiwalMalNaiwalOalPagPalQalRalSalTalUakfalVaiCalWahhakManIakOalXalYalzakOakMakMakMakTaagaagaagaagaagaagaagaagaklalZakVamaambamcakYalEakYahWahWahWamdameahWaagaagagIalGakuajOalebZdbZfalfalfalfalfalfalfbZealeajOajPamfamgagXaNpamiamjamjaNzamjamkalKalKalKalKalKalKalKamlalKalhaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaadaadaagaagammammammammammamnamnamnamnamoamoamoamoamoampamqamrahhakMakOakOamsalzakOakOakOakMakMakTaagaagaagaagaagaagaagaagaklaklamuamvamwamxakYalEakYakYahWahWahWahWahWaagaagagIamyakuajOamzbZdalfalfalfalfalfalfalfbZeamzajOajPajQagIalhalhalhalhalhamAamAamBamAaODamAamDaOhaOFalKalKalKalhaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGamHamIamJamGamKamLamMamGamNamOamPamQamRamSaiCakhahhakMakOalzakOakOanIanIakOakOakOakTaagaagaagaagaagaagaagaagaagaklaklamTamUamVakYaPdalEalEakYaagaagaagaagaagaagagIamXakuajOamzbZdalfalfbZgbZgbZgalfalfbZeamzajOajPamYagIaagaagaagalhamZamZalhalhalhalhalhalhalhalhalhalhalhalhaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGanaanbancamGandaneanfamGanganhanhanianjankaiFanlahhaRkakOakRakOakOakOakOalzalzakRakTaagaagaagaagaagaagaagaagaagaagaklaklaklaklakYannaPsalEakYaagaagaagaagaagaagagIanpakuajOamzbZdalfbZeanqanqanrbZdalfbZeamzajOajPansagIaagaagaagalhantalhalhaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaadaagaagaagamGanaanbancamGandaneanfamGbpXanhanhanianjankaiFanlahhaRkakOakRakOakOakOakOalzalzakRakTaagaagaagaagaagaagaagaagaagaagaklaklaklaklakYannaPsalEakYaagaagaagaagaagaagagIanpakuajOamzbZdalfbZeanqanqanrbZdalfbZeamzajOajPansagIaagaagaagalhantalhalhaagaagaagaagaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaadaagamGamGamGanuanvanwamGanxanyanzamGanAanBanCanDanEanFaiCanGanHakOakOakOakOakOalzakOakOakOanJakTaagaagaagaagaagaagaagaagaagaagaagaagaagaagakYanKanLanMakYaagaagaagaagaagaaganNalGanOajOamzbZdalfbZeanqakvanqbZdalfbZeamzajOanPajQanQanRanRanRanRaSqanRanRanRanRanRanRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaadaagamGanUamGanVanWanXamGanYanZaoaamGamoamoamoamoamoaobaocaodaoeaofalzanIakOakOakOakOakOaogaohakTaagaagaagaagakYakYakYakYakYakYakYakYakYakYakYakYakYaSWakYakYakYakYakYakYakYagIalGakuajOamzbZdalfbZeanranqanrbZdalfbZeamzajOajPajQanRaojaokaolaomaonanRaooarWaoqaoranRaagaagaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaaa
aaaaadaadaadaadaadaadaadaadaadaadaagaagamGaosaotaouaovaowaoxaoyaozaoAamGaoBaoCaoDaoEahhaoFaiCaoGahhaoHakOakOakOalzalzaUrakMakMakMakTaagaagaagaagakYaUsaoKaoLalEalEaoMalEalEalEalEalEalEaoNaoOaoOaoOaoOaoOaoOaoOaoPaoQakuajOamzbZdalfalfbVubVubVualfalfbZeamzajOajPaoRanRaoSaoTaoUaoVaoWanRaoXaoYanRanRanRaagaagaagaagaagaagaagaagaadaadaadaadaadaadaadaadaadaadaadaadaaa
@@ -5666,7 +5666,7 @@ boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabp
boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpcabUbptbpubpvbpvacPbpebpxbpybpzbpAbpBbprbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpcbpCbpDbpEbpFbpebpebpebpGbpHbpIbpJbpKbpebpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpcbpvbpLbpMbpNbpebpObpPbpQbpRbpSbpSbpTbprbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpbbpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpbbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpcbpUbpVbpvbpWbpebpXbpYbpZbpHbqabqbbqcbprbpabpabpabpabpabpabqdbqebqebqdbqebqebqdbqebqebqdbpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpbbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpcbpUbpVbpvbpWbpeangbpYbpZbpHbqabqbbqcbprbpabpabpabpabpabpabqdbqebqebqdbqebqebqdbqebqebqdbpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabqfbqgbqgbqgbqgbqgbqgbqgbqgbqgbqgbqgbqhbqhbqhbqhbqhbqhbqhbqibqibqjbqjbqjbqjbqkbqkbqlbqlbqlbqlbqkbqkbqkbqmbqnbpcbpcbpebqobpYbkybpRbpSbpSbqpbpebpabpabpabpabpabpabqqbqrbqsbqdbqrbqsbqdbqrbqsbqdbpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabqgbqtbqtbqgbqubqvbqwbqxbqybqzbqAbqhbqBbqCbqDbqEbqFbqhbqGbqHbqIbqJbqIbqKbqkbqLbqMbqNbqObqPbqQbqRbqkbqSbqTakobqVakNbqXbqYbqZbrabrbbrcbrdbprbpabpabpabpabpabpabqqbrebrfbqdbrebrfbqdbrebrfbqdbpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY
boYboZboZboZboZboZboZboZboZboZboZbpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabpabqgbqtbqtbqgbqubrgbrhbribrjbrkbrlbqhbrmbrnbrobrpbrqbrrbrsbrtbrubrvbrwbrxbrybrzbrAbrBbrCbrDbrDbrEbqkbrFbrGbrHbrIbpebrJbpYbrKbrLbrMbrNbrObprbpabpabpabpabpabpabqdbrPbqdbqdbrQbqdbqdbrRbqdbqdbpabpabpabpabpabpabpabpaboZboZboZboZboZboZboZboZboZboZboZboY
+11 -11
View File
@@ -12,7 +12,7 @@
"aal" = (/obj/structure/bed/chair,/obj/machinery/light{dir = 1},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aam" = (/obj/machinery/sleep_console{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aan" = (/obj/machinery/sleeper{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aao" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aao" = (/obj/structure/table/standard,/obj/item/bodybag/cryobag,/obj/item/roller{pixel_y = 8},/obj/item/roller{pixel_y = 16},/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = 32},/obj/item/device/defib_kit/loaded,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aap" = (/obj/structure/bed/chair,/obj/machinery/vending/wallmed1{layer = 3.3; name = "Emergency NanoMed"; pixel_x = 28; pixel_y = 0},/obj/structure/closet/walllocker/emerglocker{pixel_x = 0; pixel_y = 32},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aaq" = (/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
"aar" = (/obj/structure/bed/chair{dir = 4},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod2/station)
@@ -3353,7 +3353,7 @@
"bmy" = (/obj/structure/shuttle/window,/obj/structure/grille,/turf/simulated/shuttle/plating,/area/shuttle/large_escape_pod1/station)
"bmz" = (/obj/structure/window/reinforced{dir = 8},/obj/machinery/atmospherics/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/oxygen/prechilled,/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
"bmA" = (/obj/structure/table/standard,/obj/item/weapon/reagent_containers/glass/beaker/cryoxadone{pixel_x = -4; pixel_y = 0},/obj/item/weapon/wrench,/obj/random/medical/lite,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
"bmB" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
"bmB" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/obj/item/device/defib_kit/loaded,/turf/simulated/floor/tiled/white,/area/space)
"bmC" = (/obj/machinery/sleeper{dir = 8},/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
"bmD" = (/obj/machinery/sleep_console,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
"bmE" = (/obj/structure/bed/chair{dir = 1},/obj/machinery/light,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
@@ -4697,7 +4697,7 @@
"bMq" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/turf/simulated/floor/plating,/area/medical/medbay_primary_storage)
"bMr" = (/obj/effect/floor_decal/borderfloorwhite{dir = 6},/obj/effect/floor_decal/corner/paleblue/border{dir = 6},/obj/effect/floor_decal/borderfloorwhite/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/structure/flora/pottedplant/minitree,/turf/simulated/floor/tiled/white,/area/medical/reception)
"bMs" = (/obj/machinery/portable_atmospherics/canister/oxygen,/obj/machinery/atmospherics/portables_connector{dir = 4},/obj/effect/floor_decal/industrial/hatch/yellow,/obj/item/weapon/wrench,/turf/simulated/floor/tiled/steel,/area/medical/biostorage)
"bMt" = (/obj/structure/table/glass,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bMt" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/structure/table/standard,/obj/item/clothing/gloves/sterile/nitrile,/obj/item/clothing/gloves/sterile/nitrile,/obj/item/device/defib_kit/loaded,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bMu" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 9; icon_state = "intact"; tag = "icon-intact-f (NORTHWEST)"},/turf/simulated/floor/tiled,/area/medical/biostorage)
"bMv" = (/obj/effect/floor_decal/borderfloorwhite{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 6},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 6},/obj/structure/bed/chair/wheelchair,/obj/machinery/light{icon_state = "tube1"; dir = 4},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bMw" = (/obj/structure/closet/secure_closet/medical3,/obj/item/weapon/soap/nanotrasen,/obj/effect/floor_decal/borderfloor{dir = 4},/obj/effect/floor_decal/corner/paleblue/border{dir = 4},/obj/machinery/light{dir = 4; icon_state = "tube1"; pixel_x = 0},/turf/simulated/floor/tiled,/area/medical/biostorage)
@@ -4803,7 +4803,7 @@
"bOs" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/standard,/obj/structure/bedsheetbin,/obj/item/device/sleevemate,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOt" = (/obj/structure/table/glass,/obj/effect/floor_decal/borderfloorwhite{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/item/weapon/hand_labeler,/obj/item/weapon/packageWrap,/obj/item/device/radio/intercom{dir = 1; pixel_y = -24},/turf/simulated/floor/tiled/white,/area/medical/medbay_primary_storage)
"bOu" = (/obj/structure/table/standard,/obj/item/weapon/storage/box/beakers,/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/cable/green{icon_state = "0-4"},/obj/machinery/power/apc{dir = 2; name = "south bump"; pixel_y = -32},/obj/item/weapon/cane,/obj/item/weapon/cane,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOv" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/paleblue/border{dir = 10},/obj/structure/table/standard,/obj/item/clothing/gloves/sterile/nitrile,/obj/item/clothing/gloves/sterile/nitrile,/obj/item/device/defib_kit,/obj/item/device/defib_kit,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOv" = (/obj/structure/closet/secure_closet/CMO,/obj/item/weapon/cmo_disk_holder,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/device/flashlight/pen,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/obj/item/device/defib_kit/compact/combat/loaded,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bOw" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/standard,/obj/item/weapon/storage/box/syringes{pixel_x = 4; pixel_y = 4},/obj/item/weapon/storage/box/syringes,/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOx" = (/obj/effect/floor_decal/borderfloor,/obj/effect/floor_decal/corner/paleblue/border,/obj/structure/table/standard,/obj/random/medical,/obj/random/medical,/obj/item/device/flashlight,/obj/item/weapon/storage/box/lights/mixed,/obj/effect/floor_decal/borderfloor/corner2,/obj/effect/floor_decal/corner/paleblue/bordercorner2,/obj/item/device/radio{pixel_x = -4},/turf/simulated/floor/tiled,/area/medical/biostorage)
"bOy" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
@@ -4919,7 +4919,7 @@
"bQE" = (/obj/structure/filingcabinet/chestdrawer{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/alarm{pixel_y = 22},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bQF" = (/obj/structure/table/glass,/obj/machinery/computer/med_data/laptop{pixel_x = 6; pixel_y = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/computer/skills{pixel_x = -6; pixel_y = -3},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bQG" = (/obj/machinery/disposal,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/structure/disposalpipe/trunk,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bQH" = (/obj/structure/closet/secure_closet/CMO,/obj/item/weapon/cmo_disk_holder,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/paleblue/border{dir = 1},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/device/flashlight/pen,/obj/item/weapon/storage/belt/medical,/obj/item/clothing/glasses/hud/health,/obj/item/clothing/accessory/stethoscope,/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bQH" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/item/device/multitool,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/radio{pixel_x = -4; pixel_y = 1},/obj/item/device/radio{pixel_x = 4; pixel_y = -1},/obj/item/device/defib_kit/compact/loaded,/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay)
"bQI" = (/obj/effect/floor_decal/borderfloorwhite{dir = 5},/obj/effect/floor_decal/corner/paleblue/border{dir = 5},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 5},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 5},/turf/simulated/floor/tiled/white,/area/crew_quarters/heads/cmo)
"bQJ" = (/obj/structure/grille,/obj/machinery/door/firedoor/glass,/obj/structure/window/reinforced/polarized{dir = 10; icon_state = "fwindow"; id = "cmooffice"},/turf/simulated/floor/plating,/area/crew_quarters/heads/cmo)
"bQK" = (/obj/effect/floor_decal/borderfloorwhite{dir = 8},/obj/effect/floor_decal/corner/paleblue/border{dir = 8},/obj/effect/floor_decal/borderfloorwhite/corner2{dir = 10},/obj/effect/floor_decal/corner/paleblue/bordercorner2{dir = 10},/obj/structure/closet/secure_closet/medical3,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
@@ -4975,7 +4975,7 @@
"bRI" = (/obj/machinery/atmospherics/unary/vent_pump/on{dir = 1},/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bRJ" = (/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bRK" = (/obj/structure/cable/green{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 8},/obj/machinery/atmospherics/pipe/manifold4w/hidden/scrubbers,/turf/simulated/floor/tiled/white,/area/medical/sleeper)
"bRL" = (/obj/structure/table/rack,/obj/effect/floor_decal/corner/paleblue{dir = 6},/obj/effect/floor_decal/corner/paleblue{dir = 9},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 8},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals9{dir = 4},/obj/effect/floor_decal/steeldecal/steel_decals9,/obj/item/device/multitool,/obj/item/weapon/storage/toolbox/mechanical,/obj/item/device/radio{pixel_x = -4; pixel_y = 1},/obj/item/device/radio{pixel_x = 4; pixel_y = -1},/turf/simulated/floor/tiled/dark,/area/medical/medbay_emt_bay)
"bRL" = (/obj/structure/closet/crate/medical,/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/weapon/storage/firstaid/regular{pixel_x = -2; pixel_y = 4},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/bodybag/cryobag{pixel_x = 5},/obj/item/weapon/storage/firstaid/o2{layer = 2.8; pixel_x = 4; pixel_y = 6},/obj/item/weapon/storage/box/masks{pixel_x = 0; pixel_y = 0},/obj/item/weapon/storage/box/gloves{pixel_x = 3; pixel_y = 4},/obj/item/weapon/storage/firstaid/toxin,/obj/item/weapon/storage/firstaid/fire{layer = 2.9; pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/firstaid/adv{pixel_x = -2},/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/item/weapon/reagent_containers/blood/empty,/obj/machinery/status_display{density = 0; layer = 4; pixel_x = 0; pixel_y = -32},/obj/item/device/defib_kit/loaded,/turf/simulated/shuttle/floor,/area/shuttle/large_escape_pod1/station)
"bRM" = (/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/machinery/door/firedoor/glass,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/plating,/area/medical/surgery_hallway)
"bRN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
"bRO" = (/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4},/turf/simulated/floor/tiled/white,/area/medical/surgery_hallway)
@@ -5462,10 +5462,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbKZbLvbKUbKXbLBbLDbLybLAbMjbMlbLEbLFbMnbKsbGzbGAblRbiEbiFbiGbimbiHbiIbiJbgTbiKbiKbiLbiLbiMbiNbiObiPbiQbiQbiRbiSbiTbiUbiVbhFaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbMsbMubMobILbMXbNjbILbMwblgbNDbNzbNAbNIbNJbNEbGAblRbjjbjkbjlbimbiHbjmbKQbgTbiKbiKbjobjobjpbjqbjrbjsbjsbjsbjtbjubjvbjwbhDbhFaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbNNbILbILbILbILbIObILbOjblgblgblgbOrbliblgblgblgblRbfsbjBbjCbjDbjEbjFbjFbgTbgTbgTbgTbgTbgTbjGbgTbhDbhDbhDbiubjHbjHbiubhDbhFaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbOvbOwbOsbOubOVbOXbOxbORbADbjQbjRbWPbjTbjUbjVbOZbjXbjYbjZbkabkbbkcbkdbkebkfbkgbkhbkibkibkjbkkbgTbklbUCbkmbknbkobhDbhDbhDbhFaataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbMtbOwbOsbOubOVbOXbOxbORbADbjQbjRbWPbjTbjUbjVbOZbjXbjYbjZbkabkbbkcbkdbkebkfbkgbkhbkibkibkjbkkbgTbklbUCbkmbknbkobhDbhDbhDbhFaataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacbADbADbADbADbADbADbPxbADbADbADbPybkrbksbPBbkubPzbPAbkwbktbkxbkybkybkzbkAbjFbkBbkBbkBbkBbkBbkBbkBbgTbgTbgTbgTbgTbgTbgTbgTbgTbgTaataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvaacaacaacaacaataataataataacaacaacaacaacaacaacaacaacaacaacaacaacbjFbkCbkDbkEbkFbkGbkHbkIbkJbjFbMWbQbbPZbQabMWbMWbMWbkNbkNbkObkPbjFaataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvaacaacaataataataataacaacaacaacaacaacaacaacaacaacaacaacaacbjFbkQbkRbkSbkTbkUbkVbkWbkXbjFbQMbRnbQsbQtbRybRLbMWbldbldbkOblebjFblfaataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvaacaacaataataataataacaacaacaacaacaacaacaacaacaacaacaacaacbjFbkQbkRbkSbkTbkUbkVbkWbkXbjFbQMbRnbQsbQtbRybQHbMWbldbldbkOblebjFblfaataataataacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvbPvaacaacaataataataataacaacaacaacaacaacaacaacaacaacaacaacaacbSSbSSbSSbSfbSfbSfbTcbSSbSSbSSbTrbTLbTfbTibTVbUbbMWbjFbjFblnbloblpblqblraataataataataacaacaataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvbPvaataataataataataacaacaacaacaacaacaacaacbSNbSNbSNbSNbSNbSNbSSbSTbUObSUbSWbSUbSVbSYbSZbSSbUTbTLbUSbUSbTVbUUbMWaacbjFblnblDblEblFblGaataataataataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvbPvbPvaaaaaaaaaaaaaacaacaacaacaacaacaacaacbSNbSObSPbSQbSNbSRbSSbTobTpbVgbVgbVgbTqbTsbTtbSSbUTbVpbVmbVnbVrbUUbMWaacbjFblMblNbjFblfaataataataataataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5473,7 +5473,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabP
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbVMbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbSNbSNbTDbSNbSNbTEbSSbVRbTFbTGbTHbTIbTJbTKbUibSSaacaacaacbjDblYblZblZblZblZbmabmabmbblZblZblZbmcaataataataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacbSNbTWbTXbTYbTZbUabWhbUcbUdbUebUfbUgbUhbTKbUBbSSaacaacaacbjDbmfbmgbmhbmibmjbmkbmlbmmbmnbmobmpblZaataataataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWubUsbUsbUtbUubUvbSSbUwbSUbUxbUybUzbUAbUKbULbSSaacaacaacbjDbmfbmgbmwbmlbmlbmlbmlbmlbmlbmlbmxbmyaataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWAbWybWybSNbSNbSNbSSbWBbSUbUHbUIbUIbUJbWEbUQbSSaacaacaacbjDbmfbmgbmzbmAbmBbmCbmDbmEbmFbmFbmpblZaataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWAbWybWybSNbSNbSNbSSbWBbSUbUHbUIbUIbUJbWEbUQbSSaacaacaacbjDbmfbmgbmzbmAbRLbmCbmDbmEbmFbmFbmpblZaataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataataataacaacaacbSSbUMbSUbSUbWIbWJbSUbWEbWKbSSaacaacaacbjDbmGblZblZblZblZblZblZbmbblZblZblZbmcaataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataataataataacaacbSSbWMbWMbWMbSSbSSbWMbWMbWMbSSaacaacaacbjDbjDbjDbjDbjDbjDbjDbjDbjDbjDbjDbjDbjDaataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabPvbPvbPvbPvbPvbPvbPvaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaataataataataataataataataataataataataataataataataataacaacaacaacaacaacaacaacaacaacaacaacaacaataataataataataataataataataataataataataataataataataataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
@@ -5583,10 +5583,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbMSbNsbNtbNubNvbNwbNxbNybHVbNBbNBbIebHWbICbIfbNFbNGbNHbIHbgxbIEbIPbINbIMbIKbgxbNObNPbNQbLKbNRbNSbMDbMDbMEbLQaacbNTbNTbNUbLcbLcbLcbLcbKcbKcbNVbNWbJAbNXbNYbNZbOabObbFlbFlbFlbFlbFlbFlbFlahUahUahUbGlbGlbGlbGlbGlahUahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacaacbJBbOcbOdbOebOfbOgbJDbOibJCbOlbOlbOmbJFbOnbOnbOnbOobJKbJIbgxbJGbKlbKkbJNbJLbgxbKpbOybOzbLKbOAbOBbOCbODbKtbLQaacbNTbOFbOGbIkbNTaacaacaacbKcbKcbKcbKcbKcbKcbFlbFlbFlbFlaacaacaacaacaacbOIahUahUahUahUahUahUahUahUahUahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbMSbOJbOKbOLbOMbONbOObOPbOQbKTbKSbKRbKubOTbOTbOTbOUbLxbOqbKYbKVbKlbLCbKlbLzbMmbMkbPabPbbPcbPdbPdbPdbPdbPdbPdaacbNTbPebPfbPgbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaahUaaaaaaaaaaaaaaaaaaaaaahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbMSbPhbPibPjbPjbPjbPkbNybPlbPmbPnbPobPpbPqbPrbPsbPtbPubMtbMqbMpbNpbMYbMxbMvbMqbNCbMzbOzbPCbPDbPEbPFbPGbPHbPdaacbNTbPJbPIbJZbNTbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbMSbPhbPibPjbPjbPjbPkbNybPlbPmbPnbPobPpbPqbPrbPsbPtbPubmBbMqbMpbNpbMYbMxbMvbMqbNCbMzbOzbPCbPDbPEbPFbPGbPHbPdaacbNTbPJbPIbJZbNTbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbMSbPLbPMbPNbPObPPbPQbNybPRbPmbPobPobPSbPTbPTbPUbPVbPWbPXbMqbNMbOpbOkbKlbOhbMqbQcbMzbQdbPCbQebQfbQgbQgbQhbPdbLGbLGbLGbLGbQibQRbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacahUahUaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacaacaacaacaacaacaacbQjbQjbQjbQjbQjbQjbQjbQjbQkbPmbQlbPobPpbQmbQnbPsbPVbPWbQobgxbOtbOYbOWbOSbOEbgxbQubJPbNabQvbQwbQxbQzbQybQAbPdbQBbQCbQBbLGbQibRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbQjbQDbQEbQFbQGbQHbQIbQJbQKbPmbPobPobPSbPTbPTbPUbPVbPWbQLbgxbgxbMqbPwbMqbgxbgxbQNbMzbNQbPCbQObQPbQgbQgbQQbPdbQBbQBbQBbLGbSMbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbQjbQDbQEbQFbQGbOvbQIbQJbQKbPmbPobPobPSbPTbPTbPUbPVbPWbQLbgxbgxbMqbPwbMqbgxbgxbQNbMzbNQbPCbQObQPbQgbQgbQQbPdbQBbQBbQBbLGbSMbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacaacbQjbQSbQTbQUbQVbQWbQXbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibRjbRkbRlbRmbPYbRobRpbRqbRrbRsbRtbPCbRubRvbRwbRxbQpbPdbRzbRzbQBbLGbWVbWXbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUDbRCbQUbRDbREbRFbRGbQJbPlbRHbRIbPobPSbPTbPTbPUbRJbRKbOTbOTbOTbOTbQrbOTbQqbRMbRNbRObOzbPdbPdbPdbPdbPdbPdbPdbRzbRzbRPbLGbWVbRAbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabUDbUEbRRbRRbRSbRTbRUbQjbRVbRWbRXbRYbRYbRZbSabRYbSbbScbSdbSebSebSzbSybSxbSgbShbSibSjbSkbSlbSmbSnbSobSpbSqbSrbSsbStbSubLGbWVbQRbNTaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaacaataaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
+2 -2
View File
@@ -904,6 +904,7 @@
"rt" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base)
"ru" = (/obj/structure/window/reinforced{dir = 8; health = 1e+006},/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base)
"rv" = (/obj/structure/window/reinforced{dir = 2; health = 1e+006},/obj/structure/window/reinforced{dir = 1},/obj/structure/window/reinforced{dir = 4; health = 1e+006},/obj/structure/grille,/obj/structure/window/reinforced{dir = 5; icon_state = "fwindow"},/obj/effect/forcefield{desc = "You can't get in. Heh."; layer = 1; name = "Blocker"},/turf/unsimulated/floor{icon_state = "plating"; name = "plating"},/area/antag/antag_base)
"rw" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/deagle,/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44,/obj/item/ammo_magazine/m44,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"rx" = (/obj/structure/table/rack,/obj/effect/floor_decal/borderfloorblack{dir = 8},/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/obj/item/clothing/mask/gas/wwii,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"ry" = (/obj/machinery/door/airlock/centcom{name = "Equipment Storage"; req_one_access = list(150)},/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"rz" = (/obj/machinery/vending/cigarette{name = "Breach Corp cigarette machine"; prices = list(); products = list(/obj/item/weapon/storage/fancy/cigarettes = 10, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/flame/lighter/zippo = 4, /obj/item/clothing/mask/smokable/cigarette/cigar/havana = 2)},/turf/unsimulated/floor{tag = "icon-cult"; name = "plating"; icon_state = "cult"},/area/antag/antag_base)
@@ -972,7 +973,6 @@
"sK" = (/obj/structure/closet/secure_closet/freezer/fridge,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base)
"sL" = (/obj/machinery/atmospherics/unary/cryo_cell,/obj/effect/floor_decal/industrial/outline/yellow,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"sM" = (/obj/machinery/atmospherics/unary/freezer,/obj/effect/floor_decal/industrial/hatch/yellow,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"sN" = (/obj/effect/floor_decal/corner/red{dir = 10},/obj/structure/table/rack,/obj/item/weapon/gun/projectile/deagle,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/obj/item/ammo_magazine/m50,/turf/unsimulated/floor{dir = 2; icon_state = "dark"},/area/antag/antag_base)
"sO" = (/obj/machinery/chemical_dispenser/full,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base)
"sP" = (/obj/machinery/chem_master,/turf/unsimulated/floor{icon_state = "white"},/area/antag/antag_base)
"sQ" = (/obj/structure/closet/athletic_mixed,/turf/unsimulated/floor{icon_state = "steel"},/area/antag/antag_base)
@@ -1139,7 +1139,7 @@ apapapapapapoYpqpqoYpqpqoYpqpqoYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapap
oYoYoYoYoYoYoYoYpDoYoYpDoYoYpDoYpcpcpcqOpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpJphpapbpKpdoYpfpfpfpfpLpfpfoYpcpcpcpcpcoYapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpfpfpfpfpfpgoYoYoYoYoYoYoYpfoYoYrurtrvoYoYapapapapapapapapapapapapapapapapgFgGgHgIgJgKgLgLgIappepepepepepepepepeapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpfpfsNpnpoppoYsQtosTtotroYpfoYprpsptpupvoYapapapapapapapapapapapapapapapapgIgYgZhahbhchdhdgKappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpfpfrwpnpoppoYsQtosTtotroYpfoYprpsptpupvoYapapapapapapapapapapapapapapapapgIgYgZhahbhchdhdgKappjpkplplplplplpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpCoYoYoYoYoYoYtututututuoYpfoYpEpEpEpEpFoYapapapapapapapapapapapapapapapapgKhdpwpxpypzpAgZgGappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpfpItAtztBpMoYtCtEtDtEtFtGpfpNpEpEpEpEtHoYapapapapapapapapapapapapapapapapgGgZpypzpGpHpwhbgLappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
oYpfpfpfpPpQpfoYoYoYoYoYoYoYoYoYpRpEpEpEpFoYapapapapapapapapapapapapapapapapgLhbpGpHpOpApyhegHappjpkpBpBpBpBpBpmpjapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapapap
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+3 -1
View File
@@ -186,8 +186,8 @@
#include "code\controllers\ProcessScheduler\core\process.dm"
#include "code\controllers\ProcessScheduler\core\processScheduler.dm"
#include "code\controllers\subsystems\garbage.dm"
#include "code\controllers\subsystems\mobs.dm"
#include "code\controllers\subsystems\lighting.dm"
#include "code\controllers\subsystems\mobs.dm"
#include "code\controllers\subsystems\transcore_vr.dm"
#include "code\datums\ai_law_sets.dm"
#include "code\datums\ai_laws.dm"
@@ -354,6 +354,7 @@
#include "code\game\antagonist\station\changeling.dm"
#include "code\game\antagonist\station\cultist.dm"
#include "code\game\antagonist\station\highlander.dm"
#include "code\game\antagonist\station\infiltrator.dm"
#include "code\game\antagonist\station\loyalist.dm"
#include "code\game\antagonist\station\renegade.dm"
#include "code\game\antagonist\station\revolutionary.dm"
@@ -440,6 +441,7 @@
#include "code\game\gamemodes\events\holidays\Other.dm"
#include "code\game\gamemodes\extended\extended.dm"
#include "code\game\gamemodes\heist\heist.dm"
#include "code\game\gamemodes\infiltrator\infiltrator.dm"
#include "code\game\gamemodes\malfunction\malf_hardware.dm"
#include "code\game\gamemodes\malfunction\malf_research.dm"
#include "code\game\gamemodes\malfunction\malf_research_ability.dm"