Merge branch 'master' of https://github.com/PolarisSS13/Polaris into steals_more_armor

This commit is contained in:
Anewbe
2018-02-21 23:33:17 -06:00
134 changed files with 3176 additions and 1889 deletions
+42 -68
View File
@@ -241,15 +241,7 @@
overlays.Cut()
if(!node1 && !node2)
var/turf/T = get_turf(src)
new /obj/item/pipe(loc, make_from=src)
for (var/obj/machinery/meter/meter in T)
if (meter.target == src)
new /obj/item/pipe_meter(T)
qdel(meter)
qdel(src)
else if(node1 && node2)
if(node1 && node2)
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]intact[icon_connect_type]")
else
overlays += icon_manager.get_atmos_icon("pipe", , pipe_color, "[pipe_icon]exposed[node1?1:0][node2?1:0][icon_connect_type]")
@@ -489,34 +481,25 @@
alpha = 255
if(!node1 && !node2 && !node3)
var/turf/T = get_turf(src)
new /obj/item/pipe(loc, make_from=src)
for (var/obj/machinery/meter/meter in T)
if (meter.target == src)
new /obj/item/pipe_meter(T)
qdel(meter)
qdel(src)
else
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
underlays.Cut()
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "core" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps" + icon_connect_type)
underlays.Cut()
var/turf/T = get_turf(src)
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
var/turf/T = get_turf(src)
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
directions -= dir
directions -= dir
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
/obj/machinery/atmospherics/pipe/manifold/update_underlays()
@@ -744,49 +727,40 @@
alpha = 255
if(!node1 && !node2 && !node3 && !node4)
var/turf/T = get_turf(src)
new /obj/item/pipe(loc, make_from=src)
for (var/obj/machinery/meter/meter in T)
if (meter.target == src)
new /obj/item/pipe_meter(T)
qdel(meter)
qdel(src)
else
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
underlays.Cut()
overlays.Cut()
overlays += icon_manager.get_atmos_icon("manifold", , pipe_color, "4way" + icon_connect_type)
overlays += icon_manager.get_atmos_icon("manifold", , , "clamps_4way" + icon_connect_type)
underlays.Cut()
/*
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
/*
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
directions -= add_underlay(node1)
directions -= add_underlay(node2)
directions -= add_underlay(node3)
directions -= add_underlay(node4)
directions -= add_underlay(node1)
directions -= add_underlay(node2)
directions -= add_underlay(node3)
directions -= add_underlay(node4)
for(var/D in directions)
add_underlay(,D)
*/
for(var/D in directions)
add_underlay(,D)
*/
var/turf/T = get_turf(src)
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
var/node4_direction = get_dir(src, node4)
var/turf/T = get_turf(src)
var/list/directions = list(NORTH, SOUTH, EAST, WEST)
var/node1_direction = get_dir(src, node1)
var/node2_direction = get_dir(src, node2)
var/node3_direction = get_dir(src, node3)
var/node4_direction = get_dir(src, node4)
directions -= dir
directions -= dir
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
directions -= add_underlay(T,node4,node4_direction,icon_connect_type)
directions -= add_underlay(T,node1,node1_direction,icon_connect_type)
directions -= add_underlay(T,node2,node2_direction,icon_connect_type)
directions -= add_underlay(T,node3,node3_direction,icon_connect_type)
directions -= add_underlay(T,node4,node4_direction,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
for(var/D in directions)
add_underlay(T,,D,icon_connect_type)
/obj/machinery/atmospherics/pipe/manifold4w/update_underlays()
+1
View File
@@ -60,6 +60,7 @@ What is the naming convention for planes or layers?
//#define TURF_LAYER 2 //For easy recordkeeping; this is a byond define
#define DECALS_LAYER 2.01
#define OVERTURF_LAYER 2.1
#define HIDING_LAYER 2.45 //Layer at which mobs hide to be under things like tables
#define DOOR_OPEN_LAYER 2.7 //Under all objects if opened. 2.7 due to tables being at 2.6
//#define OBJ_LAYER 3 //For easy recordkeeping; this is a byond define
#define DOOR_CLOSED_LAYER 3.1 //Above most items if closed
+6 -1
View File
@@ -169,7 +169,12 @@ SUBSYSTEM_DEF(garbage)
#endif
var/type = D.type
var/datum/qdel_item/I = items[type]
testing("GC: -- \ref[D] | [type] was unable to be GC'd --")
var/extrainfo = "--"
if(istype(D,/image))
var/image/img = D
var/icon/ico = img.icon
extrainfo = "L:[img.loc] -- I:[ico] -- IS:[img.icon_state] --"
testing("GC: -- \ref[D] | [type] was unable to be GC'd [extrainfo]")
I.failures++
if (GC_QUEUE_HARDDELETE)
HardDelete(D)
+4
View File
@@ -40,6 +40,10 @@ var/global/list/all_exonet_connections = list()
src.holder = holder
..()
/datum/exonet_protocol/Destroy()
remove_address()
holder = null
return ..()
// Proc: make_address()
// Parameters: 1 (string - used to make into a hash that will be part of the new address)
+46 -34
View File
@@ -1,34 +1,46 @@
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/datum/data
var/name = "data"
var/size = 1.0
/datum/data/function
name = "function"
size = 2.0
/datum/data/function/data_control
name = "data control"
/datum/data/function/id_changer
name = "id changer"
/datum/data/record
name = "record"
size = 5.0
var/list/fields = list( )
/datum/data/text
name = "text"
var/data = null
/datum/debug
var/list/debuglist
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
/datum/data
var/name = "data"
var/size = 1.0
/datum/data/function
name = "function"
size = 2.0
/datum/data/function/data_control
name = "data control"
/datum/data/function/id_changer
name = "id changer"
/datum/data/record
name = "record"
size = 5.0
var/list/fields = list( )
// Mostly used for data_core records, but unfortuantely used some other places too. But mostly here, so lets make a good effort.
// TODO - Some machines/computers might be holding references to us. Lets look into that, but at least for now lets make sure that the manifest is cleaned up.
/datum/data/record/Destroy(var/force)
if(data_core.locked.Find(src))
if(!force)
crash_with("Someone tried to qdel a record that was in data_core.locked [log_info_line(src)]")
return QDEL_HINT_LETMELIVE
data_core.locked -= src
data_core.medical -= src
data_core.general -= src
data_core.security -= src
. = ..()
/datum/data/text
name = "text"
var/data = null
/datum/debug
var/list/debuglist
+1
View File
@@ -20,6 +20,7 @@
/decl/hierarchy/outfit/job/cargo/mining
name = OUTFIT_JOB_NAME("Shaft miner")
uniform = /obj/item/clothing/under/rank/miner
l_ear = /obj/item/device/radio/headset/headset_mine
backpack = /obj/item/weapon/storage/backpack/industrial
satchel_one = /obj/item/weapon/storage/backpack/satchel/eng
id_type = /obj/item/weapon/card/id/cargo/mining
+4 -2
View File
@@ -22,8 +22,10 @@
/datum/progressbar/Destroy()
if (client)
client.images -= bar
qdel(bar)
. = ..()
qdel_null(bar)
user = null
client = null
return ..()
/datum/progressbar/proc/update(progress)
//world << "Update [progress] - [goal] - [(progress / goal)] - [((progress / goal) * 100)] - [round(((progress / goal) * 100), 5)]"
+1 -1
View File
@@ -49,7 +49,7 @@
cost = 15
contains = list(
/obj/fiftyspawner/carpet,
/obj/fiftyspawner/bluecarpet
/obj/fiftyspawner/tealcarpet
)
+7
View File
@@ -70,3 +70,10 @@
cost = 10
containertype = "/obj/structure/closet/crate"
containername = "Webbing crate"
/datum/supply_packs/misc/holoplant
name = "Holoplant Pot"
contains = list()
cost = 15
containertype = /obj/machinery/holoplant/shipped
containername = "holoplant"
@@ -30,7 +30,7 @@
melee_damage_lower = 30 // It has a built in esword.
melee_damage_upper = 30
attack_sound = 'sound/weapons/blade1.ogg'
attacktext = "slashed"
attacktext = list("slashed")
friendly = "hugs"
resistance = 0
melee_miss_chance = 0
+1
View File
@@ -9,6 +9,7 @@
idle_power_usage = 1
active_power_usage = 5
surgery_odds = 100
throwpass = 1
var/mob/living/carbon/human/victim = null
var/strapped = 0.0
var/obj/machinery/computer/operating/computer = null
+241
View File
@@ -0,0 +1,241 @@
#define TANK_MAX_RELEASE_PRESSURE (3*ONE_ATMOSPHERE)
#define TANK_DEFAULT_RELEASE_PRESSURE ONE_ATMOSPHERE
/obj/machinery/oxygen_pump
name = "emergency oxygen pump"
icon = 'icons/obj/walllocker.dmi'
desc = "A wall mounted oxygen pump with a retractable face mask that you can pull over your face in case of emergencies."
icon_state = "oxygen_tank"
anchored = TRUE
var/obj/item/weapon/tank/tank
var/mob/living/carbon/breather
var/obj/item/clothing/mask/breath/contained
var/spawn_type = /obj/item/weapon/tank/emergency/oxygen/engi
var/mask_type = /obj/item/clothing/mask/breath/emergency
var/icon_state_open = "oxygen_tank_open"
var/icon_state_closed = "oxygen_tank"
power_channel = ENVIRON
idle_power_usage = 10
active_power_usage = 120 // No idea what the realistic amount would be.
/obj/machinery/oxygen_pump/initialize()
. = ..()
tank = new spawn_type (src)
contained = new mask_type (src)
/obj/machinery/oxygen_pump/Destroy()
if(breather)
breather.internal = null
if(breather.internals)
breather.internals.icon_state = "internal0"
breather.remove_from_mob(contained)
visible_message("<span class='notice'>The mask rapidly retracts just before /the [src] is destroyed!</span>")
breather = null
qdel_null(tank)
qdel_null(contained)
return ..()
/obj/machinery/oxygen_pump/MouseDrop(var/mob/living/carbon/human/target, src_location, over_location)
..()
if(istype(target) && CanMouseDrop(target))
if(!can_apply_to_target(target, usr)) // There is no point in attempting to apply a mask if it's impossible.
return
usr.visible_message("\The [usr] begins placing the mask onto [target]..")
if(!do_mob(usr, target, 25) || !can_apply_to_target(target, usr))
return
// place mask and add fingerprints
usr.visible_message("\The [usr] has placed \the mask on [target]'s mouth.")
attach_mask(target)
src.add_fingerprint(usr)
/obj/machinery/oxygen_pump/attack_hand(mob/user as mob)
if((stat & MAINT) && tank)
user.visible_message("<span class='notice'>\The [user] removes \the [tank] from \the [src].</span>", "<span class='notice'>You remove \the [tank] from \the [src].</span>")
user.put_in_hands(tank)
src.add_fingerprint(user)
tank.add_fingerprint(user)
tank = null
return
if (!tank)
to_chat(user, "<span class='warning'>There is no tank in \the [src]!</span>")
return
if(breather)
if(tank)
tank.forceMove(src)
breather.remove_from_mob(contained)
contained.forceMove(src)
src.visible_message("<span class='notice'>\The [user] makes \The [contained] rapidly retracts back into \the [src]!</span>")
if(breather.internals)
breather.internals.icon_state = "internal0"
breather = null
use_power = 1
/obj/machinery/oxygen_pump/attack_ai(mob/user as mob)
ui_interact(user)
/obj/machinery/oxygen_pump/proc/attach_mask(var/mob/living/carbon/C)
if(C && istype(C))
contained.forceMove(get_turf(C))
C.equip_to_slot(contained, slot_wear_mask)
if(tank)
tank.forceMove(C)
breather = C
spawn(1)
if(!breather.internal && tank)
breather.internal = tank
if(breather.internals)
breather.internals.icon_state = "internal1"
use_power = 2
/obj/machinery/oxygen_pump/proc/can_apply_to_target(var/mob/living/carbon/human/target, mob/user as mob)
if(!user)
user = target
// Check target validity
if(!target.organs_by_name[BP_HEAD])
to_chat(user, "<span class='warning'>\The [target] doesn't have a head.</span>")
return
if(!target.check_has_mouth())
to_chat(user, "<span class='warning'>\The [target] doesn't have a mouth.</span>")
return
if(target.wear_mask && target != breather)
to_chat(user, "<span class='warning'>\The [target] is already wearing a mask.</span>")
return
if(target.head && (target.head.body_parts_covered & FACE))
to_chat(user, "<span class='warning'>Remove their [target.head] first.</span>")
return
if(!tank)
to_chat(user, "<span class='warning'>There is no tank in \the [src].</span>")
return
if(stat & MAINT)
to_chat(user, "<span class='warning'>Please close \the maintenance hatch first.</span>")
return
if(!Adjacent(target))
to_chat(user, "<span class='warning'>Please stay close to \the [src].</span>")
return
//when there is a breather:
if(breather && target != breather)
to_chat(user, "<span class='warning'>\The pump is already in use.</span>")
return
//Checking if breather is still valid
if(target == breather && target.wear_mask != contained)
to_chat(user, "<span class='warning'>\The [target] is not using the supplied mask.</span>")
return
return 1
/obj/machinery/oxygen_pump/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/screwdriver))
stat ^= MAINT
user.visible_message("<span class='notice'>\The [user] [stat & MAINT ? "opens" : "closes"] \the [src].</span>", "<span class='notice'>You [stat & MAINT ? "open" : "close"] \the [src].</span>")
if(stat & MAINT)
icon_state = icon_state_open
if(!stat)
icon_state = icon_state_closed
//TO-DO: Open icon
if(istype(W, /obj/item/weapon/tank) && (stat & MAINT))
if(tank)
to_chat(user, "<span class='warning'>\The [src] already has a tank installed!</span>")
else
user.drop_item()
W.forceMove(src)
tank = W
user.visible_message("<span class='notice'>\The [user] installs \the [tank] into \the [src].</span>", "<span class='notice'>You install \the [tank] into \the [src].</span>")
src.add_fingerprint(user)
if(istype(W, /obj/item/weapon/tank) && !stat)
to_chat(user, "<span class='warning'>Please open the maintenance hatch first.</span>")
/obj/machinery/oxygen_pump/examine(var/mob/user)
. = ..()
if(tank)
to_chat(user, "The meter shows [round(tank.air_contents.return_pressure())]")
else
to_chat(user, "<span class='warning'>It is missing a tank!</span>")
/obj/machinery/oxygen_pump/process()
if(breather)
if(!can_apply_to_target(breather))
if(tank)
tank.forceMove(src)
breather.remove_from_mob(contained)
contained.forceMove(src)
src.visible_message("<span class='notice'>\The [contained] rapidly retracts back into \the [src]!</span>")
breather = null
use_power = 1
else if(!breather.internal && tank)
breather.internal = tank
if(breather.internals)
breather.internals.icon_state = "internal0"
//Create rightclick to view tank settings
/obj/machinery/oxygen_pump/verb/settings()
set src in oview(1)
set category = "Object"
set name = "Show Tank Settings"
ui_interact(usr)
//GUI Tank Setup
/obj/machinery/oxygen_pump/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1)
var/data[0]
if(!tank)
to_chat(usr, "<span class='warning'>It is missing a tank!</span>")
data["tankPressure"] = 0
data["releasePressure"] = 0
data["defaultReleasePressure"] = 0
data["maxReleasePressure"] = 0
data["maskConnected"] = 0
data["tankInstalled"] = 0
// this is the data which will be sent to the ui
if(tank)
data["tankPressure"] = round(tank.air_contents.return_pressure() ? tank.air_contents.return_pressure() : 0)
data["releasePressure"] = round(tank.distribute_pressure ? tank.distribute_pressure : 0)
data["defaultReleasePressure"] = round(TANK_DEFAULT_RELEASE_PRESSURE)
data["maxReleasePressure"] = round(TANK_MAX_RELEASE_PRESSURE)
data["maskConnected"] = 0
data["tankInstalled"] = 1
if(!breather)
data["maskConnected"] = 0
if(breather)
data["maskConnected"] = 1
// update the ui if it exists, returns null if no ui is passed/found
ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open)
if (!ui)
// the ui does not exist, so we'll create a new() one
// for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm
ui = new(user, src, ui_key, "Oxygen_pump.tmpl", "Tank", 500, 300)
// when the ui is first opened this is the data it will use
ui.set_initial_data(data)
// open the new ui window
ui.open()
// auto update every Master Controller tick
ui.set_auto_update(1)
/obj/machinery/oxygen_pump/Topic(href, href_list)
if(..())
return 1
if (href_list["dist_p"])
if (href_list["dist_p"] == "reset")
tank.distribute_pressure = TANK_DEFAULT_RELEASE_PRESSURE
else if (href_list["dist_p"] == "max")
tank.distribute_pressure = TANK_MAX_RELEASE_PRESSURE
else
var/cp = text2num(href_list["dist_p"])
tank.distribute_pressure += cp
tank.distribute_pressure = min(max(round(tank.distribute_pressure), 0), TANK_MAX_RELEASE_PRESSURE)
return 1
/obj/machinery/oxygen_pump/anesthetic
name = "anesthetic pump"
spawn_type = /obj/item/weapon/tank/anesthetic
icon_state = "anesthetic_tank"
icon_state_closed = "anesthetic_tank"
icon_state_open = "anesthetic_tank_open"
mask_type = /obj/item/clothing/mask/breath/anesthetic
+2 -1
View File
@@ -862,7 +862,8 @@
/obj/item/weapon/reagent_containers/glass/bottle/stoxin = 4,/obj/item/weapon/reagent_containers/glass/bottle/toxin = 4,
/obj/item/weapon/reagent_containers/syringe/antiviral = 4,/obj/item/weapon/reagent_containers/syringe = 12,
/obj/item/device/healthanalyzer = 5,/obj/item/weapon/reagent_containers/glass/beaker = 4, /obj/item/weapon/reagent_containers/dropper = 2,
/obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2)
/obj/item/stack/medical/advanced/bruise_pack = 3, /obj/item/stack/medical/advanced/ointment = 3, /obj/item/stack/medical/splint = 2,
/obj/item/weapon/storage/pill_bottle/carbon = 2)
contraband = list(/obj/item/weapon/reagent_containers/pill/tox = 3,/obj/item/weapon/reagent_containers/pill/stox = 4,/obj/item/weapon/reagent_containers/pill/antitox = 6)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
req_log_access = access_cmo
@@ -26,12 +26,12 @@
/datum/poster/pol_6
icon_state="polposter6"
name = "Walk!"
desc = "This poster depicts a man walking, presumably to encourage you to not run in the halls."
desc = "This poster depicts a man walking, presumably to encourage you not to run in the halls."
/datum/poster/pol_7
icon_state="polposter7"
name = "Place your signs!"
desc = "A safety poster reminding custodial stuff to place wet floor signs where needed. This reminder's rarely heeded."
desc = "A safety poster reminding custodial staff to place wet floor signs where needed. This reminder's rarely heeded."
/datum/poster/pol_8
icon_state="polposter8"
+1 -1
View File
@@ -145,7 +145,7 @@
var/obj/item/weapon/reagent_containers/syringe/syringe
/obj/structure/closet/body_bag/cryobag/New()
tank = new /obj/item/weapon/tank/emergency/oxygen(null) //It's in nullspace to prevent ejection when the bag is opened.
tank = new /obj/item/weapon/tank/emergency/oxygen/double(null) //It's in nullspace to prevent ejection when the bag is opened.
..()
/obj/structure/closet/body_bag/cryobag/Destroy()
@@ -287,17 +287,20 @@ var/global/list/obj/item/device/communicator/all_communicators = list()
to_chat(voice, "<span class='danger'>\icon[src] Connection timed out with remote host.</span>")
qdel(voice)
close_connection(reason = "Connection timed out")
//Clean up all references we might have to others
communicating.Cut()
voice_requests.Cut()
voice_invites.Cut()
node = null
//Clean up references that might point at us
all_communicators -= src
processing_objects -= src
listening_objects.Remove(src)
qdel(camera)
camera = null
if(exonet)
exonet.remove_address()
exonet = null
qdel_null(camera)
qdel_null(exonet)
return ..()
// Proc: update_icon()
@@ -92,77 +92,66 @@
name = "security radio headset"
desc = "This is used by your elite security force."
icon_state = "sec_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_sec
/obj/item/device/radio/headset/headset_sec/alt
name = "security bowman headset"
desc = "This is used by your elite security force."
icon_state = "sec_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_sec
/obj/item/device/radio/headset/headset_eng
name = "engineering radio headset"
desc = "When the engineers wish to chat like girls."
icon_state = "eng_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_eng
/obj/item/device/radio/headset/headset_eng/alt
name = "engineering bowman headset"
desc = "When the engineers wish to chat like girls."
icon_state = "eng_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_eng
/obj/item/device/radio/headset/headset_rob
name = "robotics radio headset"
desc = "Made specifically for the roboticists who cannot decide between departments."
icon_state = "rob_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_rob
/obj/item/device/radio/headset/headset_med
name = "medical radio headset"
desc = "A headset for the trained staff of the medbay."
icon_state = "med_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_med
/obj/item/device/radio/headset/headset_med/alt
name = "medical bowman headset"
desc = "A headset for the trained staff of the medbay."
icon_state = "med_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_med
/obj/item/device/radio/headset/headset_sci
name = "science radio headset"
desc = "A sciency headset. Like usual."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_sci
/obj/item/device/radio/headset/headset_medsci
name = "medical research radio headset"
desc = "A headset that is a result of the mating between medical and science."
icon_state = "med_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_medsci
/obj/item/device/radio/headset/headset_com
name = "command radio headset"
desc = "A headset with a commanding channel."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_com
/obj/item/device/radio/headset/headset_com/alt
name = "command bowman headset"
desc = "A headset with a commanding channel."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_com
@@ -170,21 +159,18 @@
name = "colony director's headset"
desc = "The headset of the boss."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/captain/alt
name = "colony director's bowman headset"
desc = "The headset of the boss."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/captain/sfr
name = "SFR headset"
desc = "A headset belonging to a Sif Free Radio DJ. SFR, best tunes in the wilderness."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/captain
/obj/item/device/radio/headset/heads/ai_integrated //No need to care about icons, it should be hidden inside the AI anyway.
@@ -206,105 +192,91 @@
name = "research director's headset"
desc = "Headset of the researching God."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/rd
/obj/item/device/radio/headset/heads/rd/alt
name = "research director's bowman headset"
desc = "Headset of the researching God."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/rd
/obj/item/device/radio/headset/heads/hos
name = "head of security's headset"
desc = "The headset of the man who protects your worthless lifes."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hos
/obj/item/device/radio/headset/heads/hos/alt
name = "head of security's bowman headset"
desc = "The headset of the man who protects your worthless lifes."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hos
/obj/item/device/radio/headset/heads/ce
name = "chief engineer's headset"
desc = "The headset of the guy who is in charge of morons"
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/ce
/obj/item/device/radio/headset/heads/ce/alt
name = "chief engineer's bowman headset"
desc = "The headset of the guy who is in charge of morons"
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/ce
/obj/item/device/radio/headset/heads/cmo
name = "chief medical officer's headset"
desc = "The headset of the highly trained medical chief."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/cmo
/obj/item/device/radio/headset/heads/cmo/alt
name = "chief medical officer's bowman headset"
desc = "The headset of the highly trained medical chief."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/cmo
/obj/item/device/radio/headset/heads/hop
name = "head of personnel's headset"
desc = "The headset of the guy who will one day be Colony Director."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hop
/obj/item/device/radio/headset/heads/hop/alt
name = "head of personnel's bowman headset"
desc = "The headset of the guy who will one day be Colony Director."
icon_state = "com_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hop
/*
/obj/item/device/radio/headset/headset_mine
name = "mining radio headset"
desc = "Headset used by miners. How useless. To access the mining channel, use :d."
desc = "Headset used by miners. Has inbuilt short-band radio for when comms are down."
icon_state = "mine_headset"
item_state = "headset"
keyslot2 = new /obj/item/device/encryptionkey/headset_mine
*/
adhoc_fallback = TRUE
ks2type = /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_cargo
name = "supply radio headset"
desc = "A headset used by the QM and his slaves."
icon_state = "cargo_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_cargo/alt
name = "supply bowman headset"
desc = "A bowman headset used by the QM and his slaves."
icon_state = "cargo_headset_alt"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_cargo
/obj/item/device/radio/headset/headset_service
name = "service radio headset"
desc = "Headset used by the service staff, tasked with keeping the station full, happy and clean."
icon_state = "srv_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/headset_service
/obj/item/device/radio/headset/ert
name = "emergency response team radio headset"
desc = "The headset of the boss's boss."
icon_state = "com_headset"
item_state = "headset"
centComm = 1
// freerange = 1
ks2type = /obj/item/device/encryptionkey/ert
@@ -313,7 +285,6 @@
name = "emergency response team bowman headset"
desc = "The headset of the boss's boss."
icon_state = "com_headset_alt"
item_state = "headset"
// freerange = 1
ks2type = /obj/item/device/encryptionkey/ert
@@ -324,7 +295,6 @@
name = "internal affair's headset"
desc = "The headset of your worst enemy."
icon_state = "com_headset"
item_state = "headset"
ks2type = /obj/item/device/encryptionkey/heads/hos
/obj/item/device/radio/headset/mmi_radio
+4 -4
View File
@@ -266,15 +266,15 @@ REAGENT SCANNER
if(0)
to_chat(usr, "The scanner will now perform a basic analysis.")
/obj/item/device/healthanalyzer/advanced //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
name = "advanced health analyzer"
/obj/item/device/healthanalyzer/improved //reports bone fractures, IB, quantity of beneficial reagents in stomach; also regular health analyzer stuff
name = "improved health analyzer"
desc = "A miracle of medical technology, this handheld scanner can produce an accurate and specific report of a patient's biosigns."
advscan = 1
origin_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
icon_state = "health1"
/obj/item/device/healthanalyzer/enhanced //reports all of the above, as well as radiation severity and minor brain damage
name = "enhanced health analyzer"
/obj/item/device/healthanalyzer/advanced //reports all of the above, as well as radiation severity and minor brain damage
name = "advanced health analyzer"
desc = "An even more advanced handheld health scanner, complete with a full biosign monitor and on-board radiation and neurological analysis suites."
advscan = 2
origin_tech = list(TECH_MAGNET = 6, TECH_BIO = 7)
+4 -2
View File
@@ -16,11 +16,12 @@
// var/obj/item/device/radio/bug/radio
var/obj/machinery/camera/bug/camera
var/camtype = /obj/machinery/camera/bug
/obj/item/device/camerabug/New()
..()
// radio = new(src)
camera = new(src)
camera = new camtype(src)
/obj/item/device/camerabug/attack_self(mob/user)
if(user.a_intent == I_HURT)
@@ -40,7 +41,7 @@
linkedmonitor.unpair(src)
linkedmonitor = null
qdel(camera)
camera = new(src)
camera = new camtype(src)
to_chat(usr, "<span class='notice'>You turn the [src] off and on again, delinking it from any monitors.")
/obj/item/brokenbug
@@ -83,6 +84,7 @@
w_class = ITEMSIZE_TINY
slot_flags = SLOT_EARS
origin_tech = list(TECH_DATA = 1, TECH_ENGINEERING = 1, TECH_ILLEGAL = 3)
camtype = /obj/machinery/camera/bug/spy
/obj/item/device/camerabug/examine(mob/user)
. = ..(user, 0)
@@ -134,7 +134,7 @@
return 1
/obj/item/borg/upgrade/jetpack
name = "mining robot jetpack"
name = "robot jetpack"
desc = "A carbon dioxide jetpack suitable for low-gravity operations."
icon_state = "cyborg_upgrade3"
item_state = "cyborg_upgrade"
@@ -149,7 +149,7 @@
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide
R.module.modules += new/obj/item/weapon/tank/jetpack/carbondioxide(R.module)
for(var/obj/item/weapon/tank/jetpack/carbondioxide in R.module.modules)
R.internals = src
return 1
@@ -174,7 +174,7 @@
if(!T)
T = locate() in R.module.modules
if(!T)
R.module.modules += new/obj/item/device/healthanalyzer/advanced
R.module.modules += new/obj/item/device/healthanalyzer/advanced(R.module)
return 1
if(T)
to_chat(R, "Upgrade mounting error! No suitable hardpoint detected!")
@@ -215,4 +215,4 @@
R.add_language(LANGUAGE_SCHECHI, 1)
R.add_language(LANGUAGE_ROOTLOCAL, 1)
return 1
return 1
+1 -2
View File
@@ -61,8 +61,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
return
if (istype(W, /obj/item/weapon/tape_roll))
var/obj/item/stack/medical/splint/ghetto/new_splint = new(user.loc)
new_splint.loc = src.loc
var/obj/item/stack/medical/splint/ghetto/new_splint = new(get_turf(user))
new_splint.add_fingerprint(user)
user.visible_message("<span class='notice'>\The [user] constructs \a [new_splint] out of a [singular_name].</span>", \
@@ -8,13 +8,17 @@
name = "stack of wood"
type_to_spawn = /obj/item/stack/tile/wood
/obj/fiftyspawner/wood/sif
name = "stack of alien wood"
type_to_spawn = /obj/item/stack/tile/sifwood
/obj/fiftyspawner/carpet
name = "stack of carpet"
type_to_spawn = /obj/item/stack/tile/carpet
/obj/fiftyspawner/bluecarpet
name = "stack of blue carpet"
type_to_spawn = /obj/item/stack/tile/carpet/blue
/obj/fiftyspawner/tealcarpet
name = "stack of teal carpet"
type_to_spawn = /obj/item/stack/tile/carpet/teal
/obj/fiftyspawner/floor
name = "stack of floor tiles"
@@ -55,9 +55,24 @@
flags = 0
no_variants = FALSE
/obj/item/stack/tile/sifwood
name = "alien wood tile"
singular_name = "alien wood tile"
desc = "An easy to fit wooden floor tile. It's blue!"
icon_state = "tile-sifwood"
force = 1.0
throwforce = 1.0
throw_speed = 5
throw_range = 20
flags = 0
no_variants = FALSE
/obj/item/stack/tile/wood/fifty
amount = 50
/obj/item/stack/tile/sifwood/fifty
amount = 50
/obj/item/stack/tile/wood/cyborg
name = "wood floor tile synthesizer"
desc = "A device that makes wood floor tiles."
@@ -81,11 +96,11 @@
flags = 0
no_variants = FALSE
/obj/item/stack/tile/carpet/blue
name = "blue carpet"
singular_name = "blue carpet"
desc = "A piece of blue carpet. It is the same size as a normal floor tile!"
icon_state = "tile-bluecarpet"
/obj/item/stack/tile/carpet/teal
name = "teal carpet"
singular_name = "teal carpet"
desc = "A piece of teal carpet. It is the same size as a normal floor tile!"
icon_state = "tile-tealcarpet"
no_variants = FALSE
// TODO - Add descriptions to these
@@ -107,7 +122,7 @@
/obj/item/stack/tile/floor
name = "floor tile"
singular_name = "floor tile"
desc = "Those could work as a pretty decent throwing weapon" //why?
desc = "A metal tile fit for covering a section of floor."
icon_state = "tile"
force = 6.0
matter = list(DEFAULT_WALL_MATERIAL = SHEET_MATERIAL_AMOUNT / 4)
@@ -52,7 +52,9 @@
/obj/item/weapon/implant/Destroy()
if(part)
part.implants.Remove(src)
listening_objects.Remove(src)
part = null
imp_in = null
return ..()
/obj/item/weapon/implant/attackby(obj/item/I, mob/user)
@@ -82,7 +84,6 @@
/obj/item/weapon/implant/tracking/implanted(var/mob/source)
processing_objects.Add(src)
listening_objects |= src
return 1
/obj/item/weapon/implant/tracking/Destroy()
@@ -14,3 +14,34 @@
var/datum/gender/T = gender_datums[user.get_visible_gender()]
user.visible_message(span("danger", "\The [user] [T.is] strangling [T.himself] with \the [src]! It looks like [T.he] [T.is] trying to commit suicide."), span("danger", "You start to strangle yourself with \the [src]!"), span("danger", "You hear the sound of someone choking!"))
return (OXYLOSS)
/obj/item/weapon/melee/umbrella
name = "umbrella"
desc = "To keep the rain off you. Use with caution on windy days."
icon = 'icons/obj/items.dmi'
icon_state = "umbrella_closed"
flags = CONDUCT
slot_flags = SLOT_BELT
force = 5
throwforce = 5
w_class = ITEMSIZE_NORMAL
var/open = FALSE
/obj/item/weapon/melee/umbrella/New()
..()
color = "#"+get_random_colour()
update_icon()
/obj/item/weapon/melee/umbrella/attack_self()
src.toggle_umbrella()
/obj/item/weapon/melee/umbrella/proc/toggle_umbrella()
open = !open
icon_state = "umbrella_[open ? "open" : "closed"]"
item_state = icon_state
update_icon()
if(ishuman(src.loc))
var/mob/living/carbon/human/H = src.loc
H.update_inv_l_hand(0)
H.update_inv_r_hand()
..()
@@ -47,22 +47,18 @@
max_storage_space = ITEMSIZE_COST_NORMAL * 14 // 56
storage_cost = INVENTORY_STANDARD_SPACE + 1
New()
..()
/obj/item/weapon/storage/backpack/holding/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/storage/backpack/holding))
user << "<span class='warning'>The Bluespace interfaces of the two devices conflict and malfunction.</span>"
qdel(W)
return
. = ..()
attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/storage/backpack/holding))
user << "<span class='warning'>The Bluespace interfaces of the two devices conflict and malfunction.</span>"
qdel(W)
return
..()
//Please don't clutter the parent storage item with stupid hacks.
can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(istype(W, /obj/item/weapon/storage/backpack/holding))
return 1
return ..()
//Please don't clutter the parent storage item with stupid hacks.
/obj/item/weapon/storage/backpack/holding/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(istype(W, /obj/item/weapon/storage/backpack/holding))
return 1
return ..()
/obj/item/weapon/storage/backpack/santabag
name = "\improper Santa's gift bag"
@@ -197,9 +193,7 @@
item_state_slots = list(slot_r_hand_str = "briefcase", slot_l_hand_str = "briefcase")
/obj/item/weapon/storage/backpack/satchel/withwallet
New()
..()
new /obj/item/weapon/storage/wallet/random( src )
starts_with = list(/obj/item/weapon/storage/wallet/random)
/obj/item/weapon/storage/backpack/satchel/norm
name = "satchel"
+167 -96
View File
@@ -68,6 +68,9 @@
// -----------------------------
// Mining Satchel
// -----------------------------
/*
* Mechoid - Orebags are the most common quick-gathering thing, and also have tons of lag associated with it. Their checks are going to be hyper-simplified due to this, and their INCREDIBLY singular target contents.
*/
/obj/item/weapon/storage/bag/ore
name = "mining satchel"
@@ -79,7 +82,80 @@
max_storage_space = ITEMSIZE_COST_NORMAL * 25
max_w_class = ITEMSIZE_NORMAL
can_hold = list(/obj/item/weapon/ore)
var/stored_ore = list()
var/last_update = 0
/obj/item/weapon/storage/bag/ore/remove_from_storage(obj/item/W as obj, atom/new_location)
if(!istype(W)) return 0
if(new_location)
if(ismob(loc))
W.dropped(usr)
if(ismob(new_location))
W.hud_layerise()
else
W.reset_plane_and_layer()
W.forceMove(new_location)
else
W.forceMove(get_turf(src))
W.on_exit_storage(src)
update_icon()
return 1
/obj/item/weapon/storage/bag/ore/gather_all(turf/T as turf, mob/user as mob, var/silent = 0)
var/success = 0
var/failure = 0
for(var/obj/item/weapon/ore/I in T) //Only ever grabs ores. Doesn't do any extraneous checks, as all ore is the same size. Tons of checks means it causes hanging for up to three seconds.
if(contents.len >= max_storage_space)
failure = 1
break
I.forceMove(src)
success = 1
if(success && !failure && !silent)
to_chat(user, "<span class='notice'>You put everything in [src].</span>")
else if(success && (!silent || (silent && contents.len >= max_storage_space)))
to_chat(user, "<span class='notice'>You fill the [src].</span>")
else if(!silent)
to_chat(user, "<span class='notice'>You fail to pick anything up with \the [src].</span>")
/obj/item/weapon/storage/bag/ore/examine(mob/user)
..()
if(!Adjacent(user)) //Can only check the contents of ore bags if you can physically reach them.
return
if(istype(user, /mob/living))
add_fingerprint(user)
if(!contents.len)
to_chat(user, "It is empty.")
return
if(world.time > last_update + 10)
update_ore_count()
last_update = world.time
to_chat(user, "<span class='notice'>It holds:</span>")
for(var/ore in stored_ore)
to_chat(user, "<span class='notice'>- [stored_ore[ore]] [ore]</span>")
return
/obj/item/weapon/storage/bag/ore/open(mob/user as mob) //No opening it for the weird UI of having shit-tons of ore inside it.
if(world.time > last_update + 10)
update_ore_count()
last_update = world.time
examine(user)
/obj/item/weapon/storage/bag/ore/proc/update_ore_count() //Stolen from ore boxes.
stored_ore = list()
for(var/obj/item/weapon/ore/O in contents)
if(stored_ore[O.name])
stored_ore[O.name]++
else
stored_ore[O.name] = 1
// -----------------------------
// Plant bag
@@ -112,121 +188,116 @@
storage_slots = 7
allow_quick_empty = 1 // this function is superceded
New()
..()
//verbs -= /obj/item/weapon/storage/verb/quick_empty
//verbs += /obj/item/weapon/storage/bag/sheetsnatcher/quick_empty
can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W,/obj/item/stack/material))
if(!stop_messages)
usr << "The snatcher does not accept [W]."
return 0
var/current = 0
for(var/obj/item/stack/material/S in contents)
current += S.amount
if(capacity == current)//If it's full, you're done
if(!stop_messages)
usr << "<span class='warning'>The snatcher is full.</span>"
return 0
return 1
/obj/item/weapon/storage/bag/sheetsnatcher/can_be_inserted(obj/item/W as obj, stop_messages = 0)
if(!istype(W,/obj/item/stack/material))
if(!stop_messages)
usr << "The snatcher does not accept [W]."
return 0
var/current = 0
for(var/obj/item/stack/material/S in contents)
current += S.amount
if(capacity == current)//If it's full, you're done
if(!stop_messages)
usr << "<span class='warning'>The snatcher is full.</span>"
return 0
return 1
// Modified handle_item_insertion. Would prefer not to, but...
handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
var/obj/item/stack/material/S = W
if(!istype(S)) return 0
/obj/item/weapon/storage/bag/sheetsnatcher/handle_item_insertion(obj/item/W as obj, prevent_warning = 0)
var/obj/item/stack/material/S = W
if(!istype(S)) return 0
var/amount
var/inserted = 0
var/current = 0
for(var/obj/item/stack/material/S2 in contents)
current += S2.amount
if(capacity < current + S.amount)//If the stack will fill it up
amount = capacity - current
var/amount
var/inserted = 0
var/current = 0
for(var/obj/item/stack/material/S2 in contents)
current += S2.amount
if(capacity < current + S.amount)//If the stack will fill it up
amount = capacity - current
else
amount = S.amount
for(var/obj/item/stack/material/sheet in contents)
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
S.amount -= amount
inserted = 1
break
if(!inserted || !S.amount)
usr.remove_from_mob(S)
usr.update_icons() //update our overlays
if (usr.client && usr.s_active != src)
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
qdel(S)
else
amount = S.amount
S.loc = src
for(var/obj/item/stack/material/sheet in contents)
if(S.type == sheet.type) // we are violating the amount limitation because these are not sane objects
sheet.amount += amount // they should only be removed through procs in this file, which split them up.
S.amount -= amount
inserted = 1
break
if(!inserted || !S.amount)
usr.remove_from_mob(S)
usr.update_icons() //update our overlays
if (usr.client && usr.s_active != src)
usr.client.screen -= S
S.dropped(usr)
if(!S.amount)
qdel(S)
else
S.loc = src
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
return 1
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
return 1
// Sets up numbered display to show the stack size of each stored mineral
// NOTE: numbered display is turned off currently because it's broken
orient2hud(mob/user as mob)
var/adjusted_contents = contents.len
/obj/item/weapon/storage/bag/sheetsnatcher/orient2hud(mob/user as mob)
var/adjusted_contents = contents.len
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
if(display_contents_with_number)
numbered_contents = list()
adjusted_contents = 0
for(var/obj/item/stack/material/I in contents)
adjusted_contents++
var/datum/numbered_display/D = new/datum/numbered_display(I)
D.number = I.amount
numbered_contents.Add( D )
var/row_num = 0
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.slot_orient_objs(row_num, col_count, numbered_contents)
return
//Numbered contents display
var/list/datum/numbered_display/numbered_contents
if(display_contents_with_number)
numbered_contents = list()
adjusted_contents = 0
for(var/obj/item/stack/material/I in contents)
adjusted_contents++
var/datum/numbered_display/D = new/datum/numbered_display(I)
D.number = I.amount
numbered_contents.Add( D )
var/row_num = 0
var/col_count = min(7,storage_slots) -1
if (adjusted_contents > 7)
row_num = round((adjusted_contents-1) / 7) // 7 is the maximum allowed width.
src.slot_orient_objs(row_num, col_count, numbered_contents)
return
// Modified quick_empty verb drops appropriate sized stacks
quick_empty()
var/location = get_turf(src)
for(var/obj/item/stack/material/S in contents)
while(S.amount)
var/obj/item/stack/material/N = new S.type(location)
var/stacksize = min(S.amount,N.max_amount)
N.amount = stacksize
S.amount -= stacksize
if(!S.amount)
qdel(S) // todo: there's probably something missing here
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
/obj/item/weapon/storage/bag/sheetsnatcher/quick_empty()
var/location = get_turf(src)
for(var/obj/item/stack/material/S in contents)
while(S.amount)
var/obj/item/stack/material/N = new S.type(location)
var/stacksize = min(S.amount,N.max_amount)
N.amount = stacksize
S.amount -= stacksize
if(!S.amount)
qdel(S) // todo: there's probably something missing here
orient2hud(usr)
if(usr.s_active)
usr.s_active.show_to(usr)
update_icon()
// Instead of removing
remove_from_storage(obj/item/W as obj, atom/new_location)
var/obj/item/stack/material/S = W
if(!istype(S)) return 0
/obj/item/weapon/storage/bag/sheetsnatcher/remove_from_storage(obj/item/W as obj, atom/new_location)
var/obj/item/stack/material/S = W
if(!istype(S)) return 0
//I would prefer to drop a new stack, but the item/attack_hand code
// that calls this can't recieve a different object than you clicked on.
//Therefore, make a new stack internally that has the remainder.
// -Sayu
//I would prefer to drop a new stack, but the item/attack_hand code
// that calls this can't recieve a different object than you clicked on.
//Therefore, make a new stack internally that has the remainder.
// -Sayu
if(S.amount > S.max_amount)
var/obj/item/stack/material/temp = new S.type(src)
temp.amount = S.amount - S.max_amount
S.amount = S.max_amount
if(S.amount > S.max_amount)
var/obj/item/stack/material/temp = new S.type(src)
temp.amount = S.amount - S.max_amount
S.amount = S.max_amount
return ..(S,new_location)
return ..(S,new_location)
// -----------------------------
// Sheet Snatcher (Cyborg)
+51 -52
View File
@@ -59,23 +59,25 @@
/obj/item/device/integrated_electronics/wirer,
)
/obj/item/weapon/storage/belt/utility/full/New()
..()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
/obj/item/weapon/storage/belt/utility/full
starts_with = list(
/obj/item/weapon/screwdriver,
/obj/item/weapon/wrench,
/obj/item/weapon/weldingtool,
/obj/item/weapon/crowbar,
/obj/item/weapon/wirecutters,
/obj/item/stack/cable_coil/random_belt
)
/obj/item/weapon/storage/belt/utility/atmostech/New()
..()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
/obj/item/weapon/storage/belt/utility/atmostech
starts_with = list(
/obj/item/weapon/screwdriver,
/obj/item/weapon/wrench,
/obj/item/weapon/weldingtool,
/obj/item/weapon/crowbar,
/obj/item/weapon/wirecutters,
/obj/item/device/t_scanner
)
/obj/item/weapon/storage/belt/utility/chief
name = "chief engineer's toolbelt"
@@ -83,15 +85,16 @@
icon_state = "utilitybelt_ce"
item_state = "utility_ce"
/obj/item/weapon/storage/belt/utility/chief/full/New()
..()
new /obj/item/weapon/screwdriver/power(src)
new /obj/item/weapon/crowbar/power(src)
new /obj/item/weapon/weldingtool/experimental(src)
new /obj/item/device/multitool(src)
new /obj/item/stack/cable_coil(src,30,pick("red","yellow","orange"))
new /obj/item/weapon/extinguisher/mini(src)
new /obj/item/device/analyzer(src)
/obj/item/weapon/storage/belt/utility/chief/full
starts_with = list(
/obj/item/weapon/screwdriver/power,
/obj/item/weapon/crowbar/power,
/obj/item/weapon/weldingtool/experimental,
/obj/item/device/multitool,
/obj/item/stack/cable_coil/random_belt,
/obj/item/weapon/extinguisher/mini,
/obj/item/device/analyzer
)
/obj/item/weapon/storage/belt/medical
name = "medical belt"
@@ -216,14 +219,8 @@
/obj/item/device/soulstone
)
/obj/item/weapon/storage/belt/soulstone/full/New()
..()
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
new /obj/item/device/soulstone(src)
/obj/item/weapon/storage/belt/soulstone/full
starts_with = list(/obj/item/device/soulstone = 6)
/obj/item/weapon/storage/belt/utility/alien
name = "alien belt"
@@ -232,15 +229,16 @@
icon_state = "belt"
item_state = "security"
/obj/item/weapon/storage/belt/utility/alien/full/New()
..()
new /obj/item/weapon/screwdriver/alien(src)
new /obj/item/weapon/wrench/alien(src)
new /obj/item/weapon/weldingtool/alien(src)
new /obj/item/weapon/crowbar/alien(src)
new /obj/item/weapon/wirecutters/alien(src)
new /obj/item/device/multitool/alien(src)
new /obj/item/stack/cable_coil/alien(src)
/obj/item/weapon/storage/belt/utility/alien/full
starts_with = list(
/obj/item/weapon/screwdriver/alien,
/obj/item/weapon/wrench/alien,
/obj/item/weapon/weldingtool/alien,
/obj/item/weapon/crowbar/alien,
/obj/item/weapon/wirecutters/alien,
/obj/item/device/multitool/alien,
/obj/item/stack/cable_coil/alien
)
/obj/item/weapon/storage/belt/medical/alien
name = "alien belt"
@@ -277,16 +275,17 @@
/obj/item/weapon/surgical
)
/obj/item/weapon/storage/belt/medical/alien/New()
..()
new /obj/item/weapon/surgical/scalpel/alien(src)
new /obj/item/weapon/surgical/hemostat/alien(src)
new /obj/item/weapon/surgical/retractor/alien(src)
new /obj/item/weapon/surgical/circular_saw/alien(src)
new /obj/item/weapon/surgical/FixOVein/alien(src)
new /obj/item/weapon/surgical/bone_clamp/alien(src)
new /obj/item/weapon/surgical/cautery/alien(src)
new /obj/item/weapon/surgical/surgicaldrill/alien(src)
/obj/item/weapon/storage/belt/medical/alien
starts_with = list(
/obj/item/weapon/surgical/scalpel/alien,
/obj/item/weapon/surgical/hemostat/alien,
/obj/item/weapon/surgical/retractor/alien,
/obj/item/weapon/surgical/circular_saw/alien,
/obj/item/weapon/surgical/FixOVein/alien,
/obj/item/weapon/surgical/bone_clamp/alien,
/obj/item/weapon/surgical/cautery/alien,
/obj/item/weapon/surgical/surgicaldrill/alien
)
/obj/item/weapon/storage/belt/champion
name = "championship belt"
@@ -14,12 +14,13 @@
icon_state ="bible"
/obj/item/weapon/storage/bible/booze/New()
..()
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
new /obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer(src)
new /obj/item/weapon/spacecash/c100(src)
new /obj/item/weapon/spacecash/c100(src)
new /obj/item/weapon/spacecash/c100(src)
starts_with = list(
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,
/obj/item/weapon/reagent_containers/food/drinks/bottle/small/beer,
/obj/item/weapon/spacecash/c100,
/obj/item/weapon/spacecash/c100,
/obj/item/weapon/spacecash/c100
)
/obj/item/weapon/storage/bible/afterattack(atom/A, mob/user as mob, proximity)
if(!proximity) return
+88 -297
View File
@@ -75,393 +75,250 @@
name = "box of latex gloves"
desc = "Contains white gloves."
icon_state = "latex"
/obj/item/weapon/storage/box/gloves/New()
..()
for(var/i = 1 to 7)
new /obj/item/clothing/gloves/sterile/latex(src)
starts_with = list(/obj/item/clothing/gloves/sterile/latex = 7)
/obj/item/weapon/storage/box/masks
name = "box of sterile masks"
desc = "This box contains masks of sterility."
icon_state = "sterile"
/obj/item/weapon/storage/box/masks/New()
..()
for(var/i = 1 to 7)
new /obj/item/clothing/mask/surgical(src)
starts_with = list(/obj/item/clothing/mask/surgical = 7)
/obj/item/weapon/storage/box/syringes
name = "box of syringes"
desc = "A box full of syringes."
icon_state = "syringe"
/obj/item/weapon/storage/box/syringes/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/syringe(src)
starts_with = list(/obj/item/weapon/reagent_containers/syringe = 7)
/obj/item/weapon/storage/box/syringegun
name = "box of syringe gun cartridges"
desc = "A box full of compressed gas cartridges."
icon_state = "syringe"
/obj/item/weapon/storage/box/syringegun/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/syringe_cartridge(src)
starts_with = list(/obj/item/weapon/syringe_cartridge = 7)
/obj/item/weapon/storage/box/beakers
name = "box of beakers"
icon_state = "beaker"
/obj/item/weapon/storage/box/beakers/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/glass/beaker(src)
starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker = 7)
/obj/item/weapon/storage/box/injectors
name = "box of DNA injectors"
desc = "This box contains injectors it seems."
/obj/item/weapon/storage/box/injectors/New()
..()
for(var/i = 1 to 3)
new /obj/item/weapon/dnainjector/h2m(src)
for(var/i = 1 to 3)
new /obj/item/weapon/dnainjector/m2h(src)
starts_with = list(
/obj/item/weapon/dnainjector/h2m = 3,
/obj/item/weapon/dnainjector/m2h = 3
)
/obj/item/weapon/storage/box/blanks
name = "box of blank shells"
desc = "It has a picture of a gun and several warning symbols on the front."
icon_state = "blankshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/blank = 8)
/obj/item/weapon/storage/box/blanks/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/blank(src)
/obj/item/weapon/storage/box/blanks/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/blank(src)
/obj/item/weapon/storage/box/blanks/large
starts_with = list(/obj/item/ammo_casing/a12g/blank = 16)
/obj/item/weapon/storage/box/beanbags
name = "box of beanbag shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "beanshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/beanbags/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/beanbag(src)
starts_with = list(/obj/item/ammo_casing/a12g/beanbag = 8)
/obj/item/weapon/storage/box/beanbags/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/beanbag(src)
starts_with = list(/obj/item/ammo_casing/a12g/beanbag = 16)
/obj/item/weapon/storage/box/shotgunammo
name = "box of shotgun slugs"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "lethalshellshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g = 8)
/obj/item/weapon/storage/box/shotgunammo/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g(src)
/obj/item/weapon/storage/box/shotgunammo/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g(src)
/obj/item/weapon/storage/box/shotgunammo/large
starts_with = list(/obj/item/ammo_casing/a12g = 16)
/obj/item/weapon/storage/box/shotgunshells
name = "box of shotgun shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "lethalslug_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/pellet = 8)
/obj/item/weapon/storage/box/shotgunshells/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/pellet(src)
/obj/item/weapon/storage/box/shotgunshells/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/pellet(src)
/obj/item/weapon/storage/box/shotgunshells/large
starts_with = list(/obj/item/ammo_casing/a12g/pellet = 16)
/obj/item/weapon/storage/box/flashshells
name = "box of illumination shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "illumshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/flash = 8)
/obj/item/weapon/storage/box/flashshells/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/flash(src)
/obj/item/weapon/storage/box/flashshells/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/flash(src)
/obj/item/weapon/storage/box/flashshells/large
starts_with = list(/obj/item/ammo_casing/a12g/flash = 16)
/obj/item/weapon/storage/box/stunshells
name = "box of stun shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "stunshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/stunshell = 8)
/obj/item/weapon/storage/box/stunshells/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/stunshell(src)
/obj/item/weapon/storage/box/stunshells/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/stunshell(src)
/obj/item/weapon/storage/box/stunshells/large
starts_with = list(/obj/item/ammo_casing/a12g/stunshell = 16)
/obj/item/weapon/storage/box/practiceshells
name = "box of practice shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
icon_state = "blankshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/practice = 8)
/obj/item/weapon/storage/box/practiceshells/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/practice(src)
/obj/item/weapon/storage/box/practiceshells/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/practice(src)
/obj/item/weapon/storage/box/practiceshells/large
starts_with = list(/obj/item/ammo_casing/a12g/practice = 16)
/obj/item/weapon/storage/box/empshells
name = "box of emp shells"
desc = "It has a picture of a gun and several warning symbols on the front."
icon_state = "empshot_box"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
starts_with = list(/obj/item/ammo_casing/a12g/emp = 8)
/obj/item/weapon/storage/box/empshells/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/emp(src)
/obj/item/weapon/storage/box/empshells/large/New()
..()
for(var/i = 1 to 8)
new /obj/item/ammo_casing/a12g/emp(src)
/obj/item/weapon/storage/box/empshells/large
starts_with = list(/obj/item/ammo_casing/a12g/emp = 16)
/obj/item/weapon/storage/box/sniperammo
name = "box of 14.5mm shells"
desc = "It has a picture of a gun and several warning symbols on the front.<br>WARNING: Live ammunition. Misuse may result in serious injury or death."
/obj/item/weapon/storage/box/sniperammo/New()
..()
for(var/i = 1 to 7)
new /obj/item/ammo_casing/a145(src)
starts_with = list(/obj/item/ammo_casing/a145 = 7)
/obj/item/weapon/storage/box/flashbangs
name = "box of flashbangs (WARNING)"
desc = "<B>WARNING: These devices are extremely dangerous and can cause blindness or deafness in repeated use.</B>"
icon_state = "flashbang"
/obj/item/weapon/storage/box/flashbangs/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/flashbang(src)
starts_with = list(/obj/item/weapon/grenade/flashbang = 7)
/obj/item/weapon/storage/box/emps
name = "box of emp grenades"
desc = "A box containing 5 military grade EMP grenades.<br> WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur."
icon_state = "emp"
/obj/item/weapon/storage/box/emps/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/empgrenade(src)
starts_with = list(/obj/item/weapon/grenade/empgrenade = 7)
/obj/item/weapon/storage/box/empslite
name = "box of low yield emp grenades"
desc = "A box containing 5 low yield EMP grenades.<br> WARNING: Do not use near unshielded electronics or biomechanical augmentations, death or permanent paralysis may occur."
icon_state = "emp"
/obj/item/weapon/storage/box/empslite/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/empgrenade/low_yield(src)
starts_with = list(/obj/item/weapon/grenade/empgrenade/low_yield = 7)
/obj/item/weapon/storage/box/smokes
name = "box of smoke bombs"
desc = "A box containing 7 smoke bombs."
icon_state = "flashbang"
/obj/item/weapon/storage/box/smokes/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/smokebomb(src)
starts_with = list(/obj/item/weapon/grenade/smokebomb = 7)
/obj/item/weapon/storage/box/anti_photons
name = "box of anti-photon grenades"
desc = "A box containing 7 experimental photon disruption grenades."
icon_state = "flashbang"
/obj/item/weapon/storage/box/anti_photons/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/anti_photon(src)
starts_with = list(/obj/item/weapon/grenade/anti_photon = 7)
/obj/item/weapon/storage/box/frags
name = "box of fragmentation grenades (WARNING)"
desc = "A box containing 7 military grade fragmentation grenades.<br> WARNING: These devices are extremely dangerous and can cause limb loss or death in repeated use."
icon_state = "frag"
/obj/item/weapon/storage/box/frags/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/explosive(src)
starts_with = list(/obj/item/weapon/grenade/explosive = 7)
/obj/item/weapon/storage/box/frags_half_box
name = "box of fragmentation grenades (WARNING)"
desc = "A box containing 4 military grade fragmentation grenades.<br> WARNING: These devices are extremely dangerous and can cause limb loss or death in repeated use."
icon_state = "frag"
/obj/item/weapon/storage/box/frags_half_box/New()
..()
for(var/i = 1 to 4)
new /obj/item/weapon/grenade/explosive(src)
starts_with = list(/obj/item/weapon/grenade/explosive = 4)
/obj/item/weapon/storage/box/metalfoam
name = "box of metal foam grenades."
desc = "A box containing 7 metal foam grenades."
icon_state = "flashbang"
/obj/item/weapon/storage/box/metalfoam/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/chem_grenade/metalfoam(src)
starts_with = list(/obj/item/weapon/grenade/chem_grenade/metalfoam = 7)
/obj/item/weapon/storage/box/teargas
name = "box of teargas grenades"
desc = "A box containing 7 teargas grenades."
icon_state = "flashbang"
/obj/item/weapon/storage/box/teargas/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/grenade/chem_grenade/teargas(src)
starts_with = list(/obj/item/weapon/grenade/chem_grenade/teargas = 7)
/obj/item/weapon/storage/box/flare
name = "box of flares"
desc = "A box containing 4 flares."
/obj/item/weapon/storage/box/flare/New()
..()
for(var/i = 1 to 4)
new /obj/item/device/flashlight/flare(src)
starts_with = list(/obj/item/device/flashlight/flare = 4)
/obj/item/weapon/storage/box/trackimp
name = "boxed tracking implant kit"
desc = "Box full of scum-bag tracking utensils."
icon_state = "implant"
/obj/item/weapon/storage/box/trackimp/New()
..()
for(var/i = 1 to 4)
new /obj/item/weapon/implantcase/tracking(src)
new /obj/item/weapon/implanter(src)
new /obj/item/weapon/implantpad(src)
new /obj/item/weapon/locator(src)
starts_with = list(
/obj/item/weapon/implantcase/tracking = 4,
/obj/item/weapon/implanter,
/obj/item/weapon/implantpad,
/obj/item/weapon/locator
)
/obj/item/weapon/storage/box/chemimp
name = "boxed chemical implant kit"
desc = "Box of stuff used to implant chemicals."
icon_state = "implant"
/obj/item/weapon/storage/box/chemimp/New()
..()
for(var/i = 1 to 5)
new /obj/item/weapon/implantcase/chem(src)
new /obj/item/weapon/implanter(src)
new /obj/item/weapon/implantpad(src)
starts_with = list(
/obj/item/weapon/implantcase/chem = 5,
/obj/item/weapon/implanter,
/obj/item/weapon/implantpad
)
/obj/item/weapon/storage/box/camerabug
name = "mobile camera pod box"
desc = "A box containing some mobile camera pods."
icon_state = "pda"
/obj/item/weapon/storage/box/camerabug/New()
..()
for(var/i = 1 to 6)
new /obj/item/device/camerabug(src)
new /obj/item/device/bug_monitor(src)
starts_with = list(
/obj/item/device/camerabug = 6,
/obj/item/device/bug_monitor
)
/obj/item/weapon/storage/box/rxglasses
name = "box of prescription glasses"
desc = "This box contains nerd glasses."
icon_state = "glasses"
/obj/item/weapon/storage/box/rxglasses/New()
..()
for(var/i = 1 to 7)
new /obj/item/clothing/glasses/regular(src)
starts_with = list(/obj/item/clothing/glasses/regular = 7)
/obj/item/weapon/storage/box/cdeathalarm_kit
name = "death alarm kit"
desc = "Box of stuff used to implant death alarms."
icon_state = "implant"
item_state_slots = list(slot_r_hand_str = "syringe_kit", slot_l_hand_str = "syringe_kit")
/obj/item/weapon/storage/box/cdeathalarm_kit/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/implantcase/death_alarm(src)
new /obj/item/weapon/implanter(src)
starts_with = list(
/obj/item/weapon/implantcase/death_alarm = 7,
/obj/item/weapon/implanter
)
/obj/item/weapon/storage/box/condimentbottles
name = "box of condiment bottles"
desc = "It has a large ketchup smear on it."
/obj/item/weapon/storage/box/condimentbottles/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/condiment(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/condiment = 7)
/obj/item/weapon/storage/box/cups
name = "box of paper cups"
desc = "It has pictures of paper cups on the front."
/obj/item/weapon/storage/box/cups/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/drinks/sillycup(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/drinks/sillycup = 7)
/obj/item/weapon/storage/box/donkpockets
name = "box of donk-pockets"
desc = "<B>Instructions:</B> <I>Heat in microwave. Product will cool if not eaten within seven minutes.</I>"
icon_state = "donk_kit"
/obj/item/weapon/storage/box/donkpockets/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket = 7)
/obj/item/weapon/storage/box/sinpockets
name = "box of sin-pockets"
desc = "<B>Instructions:</B> <I>Crush bottom of package to initiate chemical heating. Wait for 20 seconds before consumption. Product will cool if not eaten within seven minutes.</I>"
icon_state = "donk_kit"
/obj/item/weapon/storage/box/sinpockets/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donkpocket/sinpocket = 7)
/obj/item/weapon/storage/box/monkeycubes
name = "monkey cube box"
@@ -469,88 +326,51 @@
icon = 'icons/obj/food.dmi'
icon_state = "monkeycubebox"
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube)
/obj/item/weapon/storage/box/monkeycubes/New()
..()
if(type == /obj/item/weapon/storage/box/monkeycubes)
for(var/i = 1 to 4)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped = 4)
/obj/item/weapon/storage/box/monkeycubes/farwacubes
name = "farwa cube box"
desc = "Drymate brand farwa cubes, shipped from Meralar. Just add water!"
/obj/item/weapon/storage/box/monkeycubes/farwacubes/New()
..()
for(var/i = 1 to 4)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube = 4)
/obj/item/weapon/storage/box/monkeycubes/stokcubes
name = "stok cube box"
desc = "Drymate brand stok cubes, shipped from Moghes. Just add water!"
/obj/item/weapon/storage/box/monkeycubes/stokcubes/New()
..()
for(var/i = 1 to 4)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube = 4)
/obj/item/weapon/storage/box/monkeycubes/neaeracubes
name = "neaera cube box"
desc = "Drymate brand neaera cubes, shipped from Jargon 4. Just add water!"
/obj/item/weapon/storage/box/monkeycubes/neaeracubes/New()
..()
for(var/i = 1 to 4)
new /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube(src)
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/neaeracube = 4)
/obj/item/weapon/storage/box/ids
name = "box of spare IDs"
desc = "Has so many empty IDs."
icon_state = "id"
/obj/item/weapon/storage/box/ids/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/card/id(src)
starts_with = list(/obj/item/weapon/card/id = 7)
/obj/item/weapon/storage/box/seccarts
name = "box of spare R.O.B.U.S.T. Cartridges"
desc = "A box full of R.O.B.U.S.T. Cartridges, used by Security."
icon_state = "pda"
/obj/item/weapon/storage/box/seccarts/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/cartridge/security(src)
starts_with = list(/obj/item/weapon/cartridge/security = 7)
/obj/item/weapon/storage/box/handcuffs
name = "box of spare handcuffs"
desc = "A box full of handcuffs."
icon_state = "handcuff"
/obj/item/weapon/storage/box/handcuffs/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/handcuffs(src)
starts_with = list(/obj/item/weapon/handcuffs = 7)
/obj/item/weapon/storage/box/mousetraps
name = "box of Pest-B-Gon mousetraps"
desc = "<B><FONT color='red'>WARNING:</FONT></B> <I>Keep out of reach of children</I>."
icon_state = "mousetraps"
/obj/item/weapon/storage/box/mousetraps/New()
..()
for(var/i = 1 to 7)
new /obj/item/device/assembly/mousetrap(src)
starts_with = list(/obj/item/device/assembly/mousetrap = 7)
/obj/item/weapon/storage/box/pillbottles
name = "box of pill bottles"
desc = "It has pictures of pill bottles on its front."
/obj/item/weapon/storage/box/pillbottles/New()
..()
for(var/i = 1 to 7)
new /obj/item/weapon/storage/pill_bottle(src)
starts_with = list(/obj/item/weapon/storage/pill_bottle = 7)
/obj/item/weapon/storage/box/snappops
name = "snap pop box"
@@ -558,11 +378,7 @@
icon = 'icons/obj/toy.dmi'
icon_state = "spbox"
can_hold = list(/obj/item/toy/snappop)
/obj/item/weapon/storage/box/snappops/New()
..()
for(var/i = 1 to 8)
new /obj/item/toy/snappop(src)
starts_with = list(/obj/item/toy/snappop = 8)
/obj/item/weapon/storage/box/matches
name = "matchbox"
@@ -572,11 +388,7 @@
w_class = ITEMSIZE_TINY
slot_flags = SLOT_BELT
can_hold = list(/obj/item/weapon/flame/match)
/obj/item/weapon/storage/box/matches/New()
..()
for(var/i=1 to 10)
new /obj/item/weapon/flame/match(src)
starts_with = list(/obj/item/weapon/flame/match = 10)
/obj/item/weapon/storage/box/matches/attackby(obj/item/weapon/flame/match/W as obj, mob/user as mob)
if(istype(W) && !W.lit && !W.burnt)
@@ -591,11 +403,7 @@
name = "box of injectors"
desc = "Contains autoinjectors."
icon_state = "syringe"
/obj/item/weapon/storage/box/autoinjectors/New()
..()
for (var/i = 1 to 7)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector(src)
starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector = 7)
/obj/item/weapon/storage/box/lights
name = "box of replacement bulbs"
@@ -608,30 +416,21 @@
max_storage_space = ITEMSIZE_COST_SMALL * 24 //holds 24 items of w_class 2
use_to_pickup = 1 // for picking up broken bulbs, not that most people will try
/obj/item/weapon/storage/box/lights/bulbs/New()
..()
for(var/i = 1 to 24)
new /obj/item/weapon/light/bulb(src)
/obj/item/weapon/storage/box/lights/bulbs
starts_with = list(/obj/item/weapon/light/bulb = 24)
/obj/item/weapon/storage/box/lights/tubes
name = "box of replacement tubes"
icon_state = "lighttube"
/obj/item/weapon/storage/box/lights/tubes/New()
..()
for(var/i = 1 to 24)
new /obj/item/weapon/light/tube(src)
starts_with = list(/obj/item/weapon/light/tube = 24)
/obj/item/weapon/storage/box/lights/mixed
name = "box of replacement lights"
icon_state = "lightmixed"
/obj/item/weapon/storage/box/lights/mixed/New()
..()
for(var/i = 1 to 16)
new /obj/item/weapon/light/tube(src)
for(var/i = 1 to 8)
new /obj/item/weapon/light/bulb(src)
starts_with = list(
/obj/item/weapon/light/tube = 16,
/obj/item/weapon/light/bulb = 8
)
/obj/item/weapon/storage/box/freezer
name = "portable freezer"
@@ -664,17 +463,9 @@
/obj/item/weapon/storage/box/ambrosia
name = "ambrosia seeds box"
desc = "Contains the seeds you need to get a little high."
/obj/item/weapon/storage/box/ambrosia/New()
..()
for(var/i = 1 to 7)
new /obj/item/seeds/ambrosiavulgarisseed(src)
starts_with = list(/obj/item/seeds/ambrosiavulgarisseed = 7)
/obj/item/weapon/storage/box/ambrosiadeus
name = "ambrosia deus seeds box"
desc = "Contains the seeds you need to get a proper healthy high."
/obj/item/weapon/storage/box/ambrosiadeus/New()
..()
for(var/i = 1 to 7)
new /obj/item/seeds/ambrosiadeusseed(src)
starts_with = list(/obj/item/seeds/ambrosiadeusseed = 7)
@@ -52,12 +52,7 @@
/obj/item/weapon/reagent_containers/food/snacks/egg,
/obj/item/weapon/reagent_containers/food/snacks/boiledegg
)
/obj/item/weapon/storage/fancy/egg_box/New()
..()
for(var/i=1 to storage_slots)
new /obj/item/weapon/reagent_containers/food/snacks/egg(src)
return
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/egg = 12)
/*
* Candle Box
@@ -72,12 +67,7 @@
item_state = "candlebox5"
throwforce = 2
slot_flags = SLOT_BELT
/obj/item/weapon/storage/fancy/candle_box/New()
..()
for(var/i=1 to 5)
new /obj/item/weapon/flame/candle(src)
return
starts_with = list(/obj/item/weapon/flame/candle = 5)
/*
* Crayon Box
@@ -93,31 +83,36 @@
can_hold = list(
/obj/item/weapon/pen/crayon
)
starts_with = list(
/obj/item/weapon/pen/crayon/red,
/obj/item/weapon/pen/crayon/orange,
/obj/item/weapon/pen/crayon/yellow,
/obj/item/weapon/pen/crayon/green,
/obj/item/weapon/pen/crayon/blue,
/obj/item/weapon/pen/crayon/purple
)
/obj/item/weapon/storage/fancy/crayons/New()
..()
new /obj/item/weapon/pen/crayon/red(src)
new /obj/item/weapon/pen/crayon/orange(src)
new /obj/item/weapon/pen/crayon/yellow(src)
new /obj/item/weapon/pen/crayon/green(src)
new /obj/item/weapon/pen/crayon/blue(src)
new /obj/item/weapon/pen/crayon/purple(src)
/obj/item/weapon/storage/fancy/crayons/initialize()
. = ..()
update_icon()
/obj/item/weapon/storage/fancy/crayons/update_icon()
overlays = list() //resets list
overlays += image('icons/obj/crayons.dmi',"crayonbox")
var/mutable_appearance/ma = new(src)
ma.plane = plane
ma.layer = layer
ma.overlays = list()
for(var/obj/item/weapon/pen/crayon/crayon in contents)
overlays += image('icons/obj/crayons.dmi',crayon.colourName)
ma.overlays += image('icons/obj/crayons.dmi',crayon.colourName)
appearance = ma
/obj/item/weapon/storage/fancy/crayons/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W,/obj/item/weapon/pen/crayon))
switch(W:colourName)
if("mime")
usr << "This crayon is too sad to be contained in this box."
to_chat(usr,"This crayon is too sad to be contained in this box.")
return
if("rainbow")
usr << "This crayon is too powerful to be contained in this box."
to_chat(usr,"This crayon is too powerful to be contained in this box.")
return
..()
@@ -136,13 +131,12 @@
storage_slots = 6
can_hold = list(/obj/item/clothing/mask/smokable/cigarette, /obj/item/weapon/flame/lighter)
icon_type = "cigarette"
starts_with = list(/obj/item/clothing/mask/smokable/cigarette = 6)
var/brand = "\improper Trans-Stellar Duty-free"
/obj/item/weapon/storage/fancy/cigarettes/New()
..()
/obj/item/weapon/storage/fancy/cigarettes/initialize()
. = ..()
flags |= NOREACT
for(var/i = 1 to storage_slots)
new /obj/item/clothing/mask/smokable/cigarette(src)
create_reagents(15 * storage_slots)//so people can inject cigarettes without opening a packet, now with being able to inject the whole one
flags |= OPENCONTAINER
if(brand)
@@ -201,10 +195,6 @@
icon_state = "Bpacket"
brand = "\improper Acme Co. cigarette"
// New()
// ..()
// fill_cigarre_package(src,list("fuel" = 15))
// New exciting ways to kill your lungs! - Earthcrusher //
/obj/item/weapon/storage/fancy/cigarettes/luckystars
@@ -248,12 +238,11 @@
storage_slots = 7
can_hold = list(/obj/item/clothing/mask/smokable/cigarette/cigar)
icon_type = "cigar"
starts_with = list(/obj/item/clothing/mask/smokable/cigarette/cigar = 7)
/obj/item/weapon/storage/fancy/cigar/New()
..()
/obj/item/weapon/storage/fancy/cigar/initialize()
. = ..()
flags |= NOREACT
for(var/i = 1 to storage_slots)
new /obj/item/clothing/mask/smokable/cigarette/cigar(src)
create_reagents(15 * storage_slots)
/obj/item/weapon/storage/fancy/cigar/update_icon()
@@ -261,10 +250,10 @@
return
/obj/item/weapon/storage/fancy/cigar/remove_from_storage(obj/item/W as obj, atom/new_location)
var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W
if(!istype(C)) return
reagents.trans_to_obj(C, (reagents.total_volume/contents.len))
..()
var/obj/item/clothing/mask/smokable/cigarette/cigar/C = W
if(!istype(C)) return
reagents.trans_to_obj(C, (reagents.total_volume/contents.len))
..()
/*
* Vial Box
@@ -277,12 +266,7 @@
name = "vial storage box"
storage_slots = 6
can_hold = list(/obj/item/weapon/reagent_containers/glass/beaker/vial)
/obj/item/weapon/storage/fancy/vials/New()
..()
for(var/i=1 to 6)
new /obj/item/weapon/reagent_containers/glass/beaker/vial(src)
return
starts_with = list(/obj/item/weapon/reagent_containers/glass/beaker/vial = 6)
/obj/item/weapon/storage/lockbox/vials
name = "secure vial storage box"
@@ -296,8 +280,8 @@
storage_slots = 6
req_access = list(access_virology)
/obj/item/weapon/storage/lockbox/vials/New()
..()
/obj/item/weapon/storage/lockbox/vials/initialize()
. = ..()
update_icon()
/obj/item/weapon/storage/lockbox/vials/update_icon(var/itemremoved = 0)
@@ -330,19 +314,19 @@
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
)
starts_with = list(
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white,
/obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle
)
/obj/item/weapon/storage/fancy/heartbox/New()
..()
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/white(src)
new /obj/item/weapon/reagent_containers/food/snacks/chocolatepiece/truffle(src)
/obj/item/weapon/storage/fancy/heartbox/initialize()
. = ..()
update_icon()
return
/obj/item/weapon/storage/fancy/heartbox/update_icon(var/itemremoved = 0)
if (contents.len == 0)
icon_state = "heartbox_empty"
return
@@ -13,158 +13,147 @@
icon_state = "firstaid"
throw_speed = 2
throw_range = 8
var/empty = 0
max_storage_space = ITEMSIZE_COST_SMALL * 7 // 14
var/list/icon_variety
/obj/item/weapon/storage/firstaid/initialize()
. = ..()
if(icon_variety)
icon_state = pick(icon_variety)
icon_variety = null
/obj/item/weapon/storage/firstaid/fire
name = "fire first aid kit"
desc = "It's an emergency medical kit for when the toxins lab <i>spontaneously</i> burns down."
icon_state = "ointment"
item_state_slots = list(slot_r_hand_str = "firstaid-ointment", slot_l_hand_str = "firstaid-ointment")
New()
..()
if (empty) return
icon_state = pick("ointment","firefirstaid")
new /obj/item/device/healthanalyzer( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/stack/medical/ointment( src )
new /obj/item/stack/medical/ointment( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src )
new /obj/item/weapon/reagent_containers/pill/kelotane( src ) //Replaced ointment with these since they actually work --Errorage
return
icon_variety = list("ointment","firefirstaid")
starts_with = list(
/obj/item/device/healthanalyzer,
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/stack/medical/ointment,
/obj/item/stack/medical/ointment,
/obj/item/weapon/reagent_containers/pill/kelotane,
/obj/item/weapon/reagent_containers/pill/kelotane,
/obj/item/weapon/reagent_containers/pill/kelotane
)
/obj/item/weapon/storage/firstaid/regular
icon_state = "firstaid"
New()
..()
if (empty) return
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/bruise_pack(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/stack/medical/ointment(src)
new /obj/item/device/healthanalyzer(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
return
starts_with = list(
/obj/item/stack/medical/bruise_pack,
/obj/item/stack/medical/bruise_pack,
/obj/item/stack/medical/bruise_pack,
/obj/item/stack/medical/ointment,
/obj/item/stack/medical/ointment,
/obj/item/device/healthanalyzer,
/obj/item/weapon/reagent_containers/hypospray/autoinjector
)
/obj/item/weapon/storage/firstaid/toxin
name = "poison first aid kit" //IRL the term used would be poison first aid kit.
desc = "Used to treat when one has a high amount of toxins in their body."
icon_state = "antitoxin"
item_state_slots = list(slot_r_hand_str = "firstaid-toxin", slot_l_hand_str = "firstaid-toxin")
New()
..()
if (empty) return
icon_state = pick("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
new /obj/item/weapon/reagent_containers/syringe/antitoxin( src )
new /obj/item/weapon/reagent_containers/pill/antitox( src )
new /obj/item/weapon/reagent_containers/pill/antitox( src )
new /obj/item/weapon/reagent_containers/pill/antitox( src )
new /obj/item/device/healthanalyzer( src )
return
icon_variety = list("antitoxin","antitoxfirstaid","antitoxfirstaid2","antitoxfirstaid3")
starts_with = list(
/obj/item/weapon/reagent_containers/syringe/antitoxin,
/obj/item/weapon/reagent_containers/syringe/antitoxin,
/obj/item/weapon/reagent_containers/syringe/antitoxin,
/obj/item/weapon/reagent_containers/pill/antitox,
/obj/item/weapon/reagent_containers/pill/antitox,
/obj/item/weapon/reagent_containers/pill/antitox,
/obj/item/device/healthanalyzer
)
/obj/item/weapon/storage/firstaid/o2
name = "oxygen deprivation first aid kit"
desc = "A box full of oxygen goodies."
icon_state = "o2"
item_state_slots = list(slot_r_hand_str = "firstaid-o2", slot_l_hand_str = "firstaid-o2")
New()
..()
if (empty) return
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/pill/dexalin( src )
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/weapon/reagent_containers/syringe/inaprovaline( src )
new /obj/item/device/healthanalyzer( src )
return
starts_with = list(
/obj/item/weapon/reagent_containers/pill/dexalin,
/obj/item/weapon/reagent_containers/pill/dexalin,
/obj/item/weapon/reagent_containers/pill/dexalin,
/obj/item/weapon/reagent_containers/pill/dexalin,
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/weapon/reagent_containers/syringe/inaprovaline,
/obj/item/device/healthanalyzer
)
/obj/item/weapon/storage/firstaid/adv
name = "advanced first aid kit"
desc = "Contains advanced medical treatments, for <b>serious</b> boo-boos."
icon_state = "advfirstaid"
item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced")
/obj/item/weapon/storage/firstaid/adv/New()
..()
if (empty) return
new /obj/item/weapon/reagent_containers/hypospray/autoinjector( src )
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/advanced/ointment(src)
new /obj/item/stack/medical/splint(src)
return
starts_with = list(
/obj/item/weapon/reagent_containers/hypospray/autoinjector,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/stack/medical/advanced/ointment,
/obj/item/stack/medical/advanced/ointment,
/obj/item/stack/medical/splint
)
/obj/item/weapon/storage/firstaid/combat
name = "combat medical kit"
desc = "Contains advanced medical treatments."
icon_state = "bezerk"
item_state_slots = list(slot_r_hand_str = "firstaid-advanced", slot_l_hand_str = "firstaid-advanced")
/obj/item/weapon/storage/firstaid/combat/New()
..()
if (empty) return
new /obj/item/weapon/storage/pill_bottle/bicaridine(src)
new /obj/item/weapon/storage/pill_bottle/dermaline(src)
new /obj/item/weapon/storage/pill_bottle/dexalin_plus(src)
new /obj/item/weapon/storage/pill_bottle/dylovene(src)
new /obj/item/weapon/storage/pill_bottle/tramadol(src)
new /obj/item/weapon/storage/pill_bottle/spaceacillin(src)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src)
new /obj/item/stack/medical/splint(src)
new /obj/item/device/healthanalyzer/advanced(src)
return
starts_with = list(
/obj/item/weapon/storage/pill_bottle/bicaridine,
/obj/item/weapon/storage/pill_bottle/dermaline,
/obj/item/weapon/storage/pill_bottle/dexalin_plus,
/obj/item/weapon/storage/pill_bottle/dylovene,
/obj/item/weapon/storage/pill_bottle/tramadol,
/obj/item/weapon/storage/pill_bottle/spaceacillin,
/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting,
/obj/item/stack/medical/splint,
/obj/item/device/healthanalyzer/advanced
)
/obj/item/weapon/storage/firstaid/surgery
name = "surgery kit"
desc = "Contains tools for surgery."
max_storage_space = ITEMSIZE_COST_NORMAL * 6 // Formally 21. Odd numbers should be avoided for a system based on exponents of 2.
desc = "Contains tools for surgery. Has precise foam fitting for safe transport and automatically sterilizes the content between uses."
icon_state = "surgerykit"
item_state = "firstaid-surgery"
max_w_class = ITEMSIZE_NORMAL
/obj/item/weapon/storage/firstaid/surgery/New()
..()
if (empty) return
new /obj/item/weapon/surgical/bonesetter(src)
new /obj/item/weapon/surgical/cautery(src)
new /obj/item/weapon/surgical/circular_saw(src)
new /obj/item/weapon/surgical/hemostat(src)
new /obj/item/weapon/surgical/retractor(src)
new /obj/item/weapon/surgical/scalpel(src)
new /obj/item/weapon/surgical/surgicaldrill(src)
new /obj/item/weapon/surgical/bonegel(src)
new /obj/item/weapon/surgical/FixOVein(src)
new /obj/item/stack/medical/advanced/bruise_pack(src)
new /obj/item/device/healthanalyzer/enhanced(src)
return
can_hold = list(
/obj/item/weapon/surgical/bonesetter,
/obj/item/weapon/surgical/cautery,
/obj/item/weapon/surgical/circular_saw,
/obj/item/weapon/surgical/hemostat,
/obj/item/weapon/surgical/retractor,
/obj/item/weapon/surgical/scalpel,
/obj/item/weapon/surgical/surgicaldrill,
/obj/item/weapon/surgical/bonegel,
/obj/item/weapon/surgical/FixOVein,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/stack/nanopaste,
/obj/item/device/healthanalyzer/advanced
)
starts_with = list(
/obj/item/weapon/surgical/bonesetter,
/obj/item/weapon/surgical/cautery,
/obj/item/weapon/surgical/circular_saw,
/obj/item/weapon/surgical/hemostat,
/obj/item/weapon/surgical/retractor,
/obj/item/weapon/surgical/scalpel,
/obj/item/weapon/surgical/surgicaldrill,
/obj/item/weapon/surgical/bonegel,
/obj/item/weapon/surgical/FixOVein,
/obj/item/stack/medical/advanced/bruise_pack,
/obj/item/device/healthanalyzer/advanced
)
/obj/item/weapon/storage/firstaid/clotting
name = "clotting kit"
desc = "Contains chemicals to stop bleeding."
max_storage_space = ITEMSIZE_COST_SMALL * 7
/obj/item/weapon/storage/firstaid/clotting/New()
..()
if (empty)
return
for(var/i = 1 to 8)
new /obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting(src)
return
starts_with = list(/obj/item/weapon/reagent_containers/hypospray/autoinjector/biginjector/clotting = 8)
/*
* Pill Bottles
@@ -187,167 +176,59 @@
/obj/item/weapon/storage/pill_bottle/antitox
name = "bottle of Dylovene pills"
desc = "Contains pills used to counter toxins."
/obj/item/weapon/storage/pill_bottle/antitox/New() //25u each
..()
new /obj/item/weapon/reagent_containers/pill/antitox(src)
new /obj/item/weapon/reagent_containers/pill/antitox(src)
new /obj/item/weapon/reagent_containers/pill/antitox(src)
new /obj/item/weapon/reagent_containers/pill/antitox(src)
new /obj/item/weapon/reagent_containers/pill/antitox(src)
new /obj/item/weapon/reagent_containers/pill/antitox(src)
new /obj/item/weapon/reagent_containers/pill/antitox(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/antitox = 7)
/obj/item/weapon/storage/pill_bottle/bicaridine
name = "bottle of Bicaridine pills"
desc = "Contains pills used to stabilize the severely injured."
/obj/item/weapon/storage/pill_bottle/bicaridine/New()
..()
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
new /obj/item/weapon/reagent_containers/pill/bicaridine(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/bicaridine = 7)
/obj/item/weapon/storage/pill_bottle/dexalin_plus
name = "bottle of Dexalin Plus pills"
desc = "Contains pills used to treat extreme cases of oxygen deprivation."
/obj/item/weapon/storage/pill_bottle/dexalin_plus/New()
..()
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
new /obj/item/weapon/reagent_containers/pill/dexalin_plus(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/dexalin_plus = 7)
/obj/item/weapon/storage/pill_bottle/dermaline
name = "bottle of Dermaline pills"
desc = "Contains pills used to treat burn wounds."
/obj/item/weapon/storage/pill_bottle/dermaline/New()
..()
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
new /obj/item/weapon/reagent_containers/pill/dermaline(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/dermaline = 7)
/obj/item/weapon/storage/pill_bottle/dylovene
name = "bottle of Dylovene pills"
desc = "Contains pills used to treat toxic substances in the blood."
/obj/item/weapon/storage/pill_bottle/dylovene/New() //15u each
..()
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
new /obj/item/weapon/reagent_containers/pill/dylovene(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/dylovene = 7)
/obj/item/weapon/storage/pill_bottle/inaprovaline
name = "bottle of Inaprovaline pills"
desc = "Contains pills used to stabilize patients."
/obj/item/weapon/storage/pill_bottle/inaprovaline/New()
..()
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
new /obj/item/weapon/reagent_containers/pill/inaprovaline(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/inaprovaline = 7)
/obj/item/weapon/storage/pill_bottle/kelotane
name = "bottle of kelotane pills"
desc = "Contains pills used to treat burns."
/obj/item/weapon/storage/pill_bottle/kelotane/New()
..()
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
new /obj/item/weapon/reagent_containers/pill/kelotane(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/kelotane = 7)
/obj/item/weapon/storage/pill_bottle/spaceacillin
name = "bottle of Spaceacillin pills"
desc = "A theta-lactam antibiotic. Effective against many diseases likely to be encountered in space."
/obj/item/weapon/storage/pill_bottle/spaceacillin/New()
..()
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
new /obj/item/weapon/reagent_containers/pill/spaceacillin(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/spaceacillin = 7)
/obj/item/weapon/storage/pill_bottle/tramadol
name = "bottle of Tramadol pills"
desc = "Contains pills used to relieve pain."
/obj/item/weapon/storage/pill_bottle/tramadol/New()
..()
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
new /obj/item/weapon/reagent_containers/pill/tramadol(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/tramadol = 7)
/obj/item/weapon/storage/pill_bottle/citalopram
name = "bottle of Citalopram pills"
desc = "Contains pills used to stabilize a patient's mood."
/obj/item/weapon/storage/pill_bottle/citalopram/New()
..()
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
new /obj/item/weapon/reagent_containers/pill/citalopram(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/citalopram = 7)
/obj/item/weapon/storage/pill_bottle/carbon
name = "bottle of Carbon pills"
desc = "Contains pills used to neutralise chemicals in the stomach."
/obj/item/weapon/storage/pill_bottle/carbon/New()
..()
new /obj/item/weapon/reagent_containers/pill/carbon(src)
new /obj/item/weapon/reagent_containers/pill/carbon(src)
new /obj/item/weapon/reagent_containers/pill/carbon(src)
new /obj/item/weapon/reagent_containers/pill/carbon(src)
new /obj/item/weapon/reagent_containers/pill/carbon(src)
new /obj/item/weapon/reagent_containers/pill/carbon(src)
new /obj/item/weapon/reagent_containers/pill/carbon(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/carbon = 7)
/obj/item/weapon/storage/pill_bottle/iron
name = "bottle of Iron pills"
desc = "Contains pills used to aid in blood regeneration."
/obj/item/weapon/storage/pill_bottle/iron/New()
..()
new /obj/item/weapon/reagent_containers/pill/iron(src)
new /obj/item/weapon/reagent_containers/pill/iron(src)
new /obj/item/weapon/reagent_containers/pill/iron(src)
new /obj/item/weapon/reagent_containers/pill/iron(src)
new /obj/item/weapon/reagent_containers/pill/iron(src)
new /obj/item/weapon/reagent_containers/pill/iron(src)
new /obj/item/weapon/reagent_containers/pill/iron(src)
starts_with = list(/obj/item/weapon/reagent_containers/pill/iron = 7)
@@ -77,36 +77,28 @@
/obj/item/weapon/storage/lockbox/loyalty
name = "lockbox of loyalty implants"
req_access = list(access_security)
New()
..()
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implantcase/loyalty(src)
new /obj/item/weapon/implanter/loyalty(src)
starts_with = list(
/obj/item/weapon/implantcase/loyalty = 3,
/obj/item/weapon/implanter/loyalty
)
/obj/item/weapon/storage/lockbox/clusterbang
name = "lockbox of clusterbangs"
desc = "You have a bad feeling about opening this."
req_access = list(access_security)
New()
..()
new /obj/item/weapon/grenade/flashbang/clusterbang(src)
starts_with = list(/obj/item/weapon/grenade/flashbang/clusterbang)
/obj/item/weapon/storage/lockbox/medal
name = "lockbox of medals"
desc = "A lockbox filled with commemorative medals, it has the NanoTrasen logo stamped on it."
req_access = list(access_heads)
storage_slots = 7
New()
..()
new /obj/item/clothing/accessory/medal/conduct(src)
new /obj/item/clothing/accessory/medal/bronze_heart(src)
new /obj/item/clothing/accessory/medal/nobel_science(src)
new /obj/item/clothing/accessory/medal/silver/valor(src)
new /obj/item/clothing/accessory/medal/silver/security(src)
new /obj/item/clothing/accessory/medal/gold/captain(src)
new /obj/item/clothing/accessory/medal/gold/heroism(src)
starts_with = list(
/obj/item/clothing/accessory/medal/conduct,
/obj/item/clothing/accessory/medal/bronze_heart,
/obj/item/clothing/accessory/medal/nobel_science,
/obj/item/clothing/accessory/medal/silver/valor,
/obj/item/clothing/accessory/medal/silver/security,
/obj/item/clothing/accessory/medal/gold/captain,
/obj/item/clothing/accessory/medal/gold/heroism
)
@@ -6,17 +6,14 @@
icon = 'icons/obj/food.dmi'
icon_state = "donutbox"
name = "donut box"
var/startswith = 6
max_storage_space = ITEMSIZE_COST_SMALL * 6
can_hold = list(/obj/item/weapon/reagent_containers/food/snacks/donut)
foldable = /obj/item/stack/material/cardboard
starts_with = list(/obj/item/weapon/reagent_containers/food/snacks/donut/normal = 6)
/obj/item/weapon/storage/box/donut/New()
..()
for(var/i=1 to startswith)
new /obj/item/weapon/reagent_containers/food/snacks/donut/normal(src)
/obj/item/weapon/storage/box/donut/initialize()
. = ..()
update_icon()
return
/obj/item/weapon/storage/box/donut/update_icon()
overlays.Cut()
@@ -26,4 +23,4 @@
i++
/obj/item/weapon/storage/box/donut/empty
startswith = 0
empty = TRUE
@@ -184,15 +184,10 @@
anchored = 1.0
density = 0
cant_hold = list(/obj/item/weapon/storage/secure/briefcase)
starts_with = list(
/obj/item/weapon/paper,
/obj/item/weapon/pen
)
New()
..()
new /obj/item/weapon/paper(src)
new /obj/item/weapon/pen(src)
attack_hand(mob/user as mob)
return attack_self(user)
/obj/item/weapon/storage/secure/safe/HoS/New()
..()
//new /obj/item/weapon/storage/lockbox/clusterbang(src) This item is currently broken... and probably shouldnt exist to begin with (even though it's cool)
/obj/item/weapon/storage/secure/safe/attack_hand(mob/user as mob)
return attack_self(user)
@@ -36,6 +36,7 @@
var/collection_mode = 1; //0 = pick one at a time, 1 = pick all on tile
var/use_sound = "rustle" //sound played when used. null for no sound.
var/list/starts_with //Things to spawn on the box on spawn
var/empty //Mapper override to spawn an empty version of a container that usually has stuff
/obj/item/weapon/storage/Destroy()
close_all()
@@ -576,12 +577,13 @@
src.closer.hud_layerise()
orient2hud()
if(LAZYLEN(starts_with))
if(LAZYLEN(starts_with) && !empty)
for(var/newtype in starts_with)
var/count = starts_with[newtype] || 1 //Could have left it blank.
while(count)
count--
new newtype(src)
starts_with = null //Reduce list count.
calibrate_size()
@@ -19,48 +19,50 @@
name = "emergency toolbox"
icon_state = "red"
item_state_slots = list(slot_r_hand_str = "toolbox_red", slot_l_hand_str = "toolbox_red")
/obj/item/weapon/storage/toolbox/emergency/New()
..()
new /obj/item/weapon/crowbar/red(src)
new /obj/item/weapon/extinguisher/mini(src)
starts_with = list(
/obj/item/weapon/crowbar/red,
/obj/item/weapon/extinguisher/mini,
/obj/item/device/radio
)
/obj/item/weapon/storage/toolbox/emergency/initialize()
if(prob(50))
new /obj/item/device/flashlight(src)
else
new /obj/item/device/flashlight/flare(src)
new /obj/item/device/radio(src)
. = ..()
/obj/item/weapon/storage/toolbox/mechanical
name = "mechanical toolbox"
icon_state = "blue"
item_state_slots = list(slot_r_hand_str = "toolbox_blue", slot_l_hand_str = "toolbox_blue")
/obj/item/weapon/storage/toolbox/mechanical/New()
..()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/device/analyzer(src)
new /obj/item/weapon/wirecutters(src)
starts_with = list(
/obj/item/weapon/screwdriver,
/obj/item/weapon/wrench,
/obj/item/weapon/weldingtool,
/obj/item/weapon/crowbar,
/obj/item/device/analyzer,
/obj/item/weapon/wirecutters
)
/obj/item/weapon/storage/toolbox/electrical
name = "electrical toolbox"
icon_state = "yellow"
item_state_slots = list(slot_r_hand_str = "toolbox_yellow", slot_l_hand_str = "toolbox_yellow")
/obj/item/weapon/storage/toolbox/electrical/New()
..()
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/t_scanner(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/stack/cable_coil/random(src,30)
new /obj/item/stack/cable_coil/random(src,30)
starts_with = list(
/obj/item/weapon/screwdriver,
/obj/item/weapon/wirecutters,
/obj/item/device/t_scanner,
/obj/item/weapon/crowbar,
/obj/item/stack/cable_coil/random_belt,
/obj/item/stack/cable_coil/random_belt
)
/obj/item/weapon/storage/toolbox/electrical/initialize()
. = ..()
if(prob(5))
new /obj/item/clothing/gloves/yellow(src)
else
new /obj/item/stack/cable_coil/random(src,30)
calibrate_size()
/obj/item/weapon/storage/toolbox/syndicate
name = "black and red toolbox"
@@ -68,29 +70,26 @@
item_state_slots = list(slot_r_hand_str = "toolbox_syndi", slot_l_hand_str = "toolbox_syndi")
origin_tech = list(TECH_COMBAT = 1, TECH_ILLEGAL = 1)
force = 14
var/powertools = FALSE
starts_with = list(
/obj/item/clothing/gloves/yellow,
/obj/item/weapon/screwdriver,
/obj/item/weapon/wrench,
/obj/item/weapon/weldingtool,
/obj/item/weapon/crowbar,
/obj/item/weapon/wirecutters,
/obj/item/device/multitool
)
/obj/item/weapon/storage/toolbox/syndicate/powertools
powertools = TRUE
/obj/item/weapon/storage/toolbox/syndicate/New() // This is found in maint, so it should have the basics, plus some gloves.
..() //all storage items need this to work properly!
if(powertools)
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/weapon/screwdriver/power(src)
new /obj/item/weapon/weldingtool/experimental(src)
new /obj/item/weapon/crowbar/power(src)
new /obj/item/device/multitool(src)
new /obj/item/stack/cable_coil/random(src,30)
new /obj/item/device/analyzer(src)
else
new /obj/item/clothing/gloves/yellow(src)
new /obj/item/weapon/screwdriver(src)
new /obj/item/weapon/wrench(src)
new /obj/item/weapon/weldingtool(src)
new /obj/item/weapon/crowbar(src)
new /obj/item/weapon/wirecutters(src)
new /obj/item/device/multitool(src)
starts_with = list(
/obj/item/clothing/gloves/yellow,
/obj/item/weapon/screwdriver/power,
/obj/item/weapon/weldingtool/experimental,
/obj/item/weapon/crowbar/power,
/obj/item/device/multitool,
/obj/item/stack/cable_coil/random_belt,
/obj/item/device/analyzer
)
/obj/item/weapon/storage/toolbox/lunchbox
max_storage_space = ITEMSIZE_COST_SMALL * 4 //slightly smaller than a toolbox
@@ -103,8 +102,7 @@
var/filled = FALSE
attack_verb = list("lunched")
/obj/item/weapon/storage/toolbox/lunchbox/New()
..()
/obj/item/weapon/storage/toolbox/lunchbox/initialize()
if(filled)
var/list/lunches = lunchables_lunches()
var/lunch = lunches[pick(lunches)]
@@ -117,6 +115,7 @@
var/list/drinks = lunchables_drinks()
var/drink = drinks[pick(drinks)]
new drink(src)
. = ..()
/obj/item/weapon/storage/toolbox/lunchbox/filled
filled = TRUE
@@ -1,76 +1,66 @@
/obj/item/weapon/storage/box/syndicate/
New()
..()
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1, "smoothoperator" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src)
new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
return
/obj/item/weapon/storage/box/syndicate/initialize()
switch (pickweight(list("bloodyspai" = 1, "stealth" = 1, "screwed" = 1, "guns" = 1, "murder" = 1, "freedom" = 1, "hacker" = 1, "lordsingulo" = 1, "smoothoperator" = 1)))
if("bloodyspai")
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/mask/gas/voice(src)
new /obj/item/weapon/card/id/syndicate(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
if("stealth")
new /obj/item/weapon/gun/energy/crossbow(src)
new /obj/item/weapon/pen/reagent/paralysis(src)
new /obj/item/device/chameleon(src)
return
if("stealth")
new /obj/item/weapon/gun/energy/crossbow(src)
new /obj/item/weapon/pen/reagent/paralysis(src)
new /obj/item/device/chameleon(src)
if("screwed")
new /obj/effect/spawner/newbomb/timer/syndicate(src)
new /obj/effect/spawner/newbomb/timer/syndicate(src)
new /obj/item/device/powersink(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/weapon/tank/emergency/oxygen/double(src)
return
if("screwed")
new /obj/effect/spawner/newbomb/timer/syndicate(src)
new /obj/effect/spawner/newbomb/timer/syndicate(src)
new /obj/item/device/powersink(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/weapon/tank/emergency/oxygen/double(src)
if("guns")
new /obj/item/weapon/gun/projectile/revolver(src)
new /obj/item/ammo_magazine/s357(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/weapon/plastique(src)
new /obj/item/weapon/plastique(src)
return
if("guns")
new /obj/item/weapon/gun/projectile/revolver(src)
new /obj/item/ammo_magazine/s357(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/weapon/plastique(src)
new /obj/item/weapon/plastique(src)
if("murder")
new /obj/item/weapon/melee/energy/sword(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
return
if("murder")
new /obj/item/weapon/melee/energy/sword(src)
new /obj/item/clothing/glasses/thermal/syndi(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/clothing/shoes/syndigaloshes(src)
if("freedom")
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
var/obj/item/weapon/implanter/U = new /obj/item/weapon/implanter(src)
U.imp = new /obj/item/weapon/implant/uplink(U)
return
if("freedom")
var/obj/item/weapon/implanter/O = new /obj/item/weapon/implanter(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
var/obj/item/weapon/implanter/U = new /obj/item/weapon/implanter(src)
U.imp = new /obj/item/weapon/implant/uplink(U)
if("hacker")
new /obj/item/device/encryptionkey/syndicate(src)
new /obj/item/weapon/aiModule/syndicate(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/device/encryptionkey/binary(src)
return
if("hacker")
new /obj/item/device/encryptionkey/syndicate(src)
new /obj/item/weapon/aiModule/syndicate(src)
new /obj/item/weapon/card/emag(src)
new /obj/item/device/encryptionkey/binary(src)
if("lordsingulo")
new /obj/item/device/radio/beacon/syndicate(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/weapon/tank/emergency/oxygen/double(src)
new /obj/item/weapon/card/emag(src)
return
if("lordsingulo")
new /obj/item/device/radio/beacon/syndicate(src)
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/weapon/tank/emergency/oxygen/double(src)
new /obj/item/weapon/card/emag(src)
if("smoothoperator")
new /obj/item/weapon/storage/box/syndie_kit/g9mm(src)
new /obj/item/weapon/storage/bag/trash(src)
new /obj/item/weapon/soap/syndie(src)
new /obj/item/bodybag(src)
new /obj/item/clothing/under/suit_jacket(src)
new /obj/item/clothing/shoes/laceup(src)
return
if("smoothoperator")
new /obj/item/weapon/storage/box/syndie_kit/g9mm(src)
new /obj/item/weapon/storage/bag/trash(src)
new /obj/item/weapon/soap/syndie(src)
new /obj/item/bodybag(src)
new /obj/item/clothing/under/suit_jacket(src)
new /obj/item/clothing/shoes/laceup(src)
. = ..()
/obj/item/weapon/storage/box/syndie_kit
name = "box"
@@ -80,118 +70,97 @@
/obj/item/weapon/storage/box/syndie_kit/imp_freedom
name = "boxed freedom implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_freedom/New()
..()
/obj/item/weapon/storage/box/syndie_kit/imp_freedom/initialize()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/freedom(O)
O.update()
return
. = ..()
/obj/item/weapon/storage/box/syndie_kit/imp_compress
name = "box (C)"
/obj/item/weapon/storage/box/syndie_kit/imp_compress/New()
new /obj/item/weapon/implanter/compressed(src)
..()
return
starts_with = list(/obj/item/weapon/implanter/compressed)
/obj/item/weapon/storage/box/syndie_kit/imp_explosive
name = "box (E)"
/obj/item/weapon/storage/box/syndie_kit/imp_explosive/New()
new /obj/item/weapon/implanter/explosive(src)
..()
return
starts_with = list(/obj/item/weapon/implanter/explosive)
/obj/item/weapon/storage/box/syndie_kit/imp_uplink
name = "boxed uplink implant (with injector)"
/obj/item/weapon/storage/box/syndie_kit/imp_uplink/New()
..()
/obj/item/weapon/storage/box/syndie_kit/imp_uplink/initialize()
var/obj/item/weapon/implanter/O = new(src)
O.imp = new /obj/item/weapon/implant/uplink(O)
O.update()
return
. = ..()
/obj/item/weapon/storage/box/syndie_kit/space
name = "boxed space suit and helmet"
/obj/item/weapon/storage/box/syndie_kit/space/New()
..()
new /obj/item/clothing/suit/space/syndicate(src)
new /obj/item/clothing/head/helmet/space/syndicate(src)
new /obj/item/clothing/mask/gas/syndicate(src)
new /obj/item/weapon/tank/emergency/oxygen/double(src)
return
starts_with = list(
/obj/item/clothing/suit/space/syndicate,
/obj/item/clothing/head/helmet/space/syndicate,
/obj/item/clothing/mask/gas/syndicate,
/obj/item/weapon/tank/emergency/oxygen/double
)
/obj/item/weapon/storage/box/syndie_kit/chameleon
name = "chameleon kit"
desc = "Comes with all the clothes you need to impersonate most people. Acting lessons sold seperately."
/obj/item/weapon/storage/box/syndie_kit/chameleon/New()
..()
new /obj/item/clothing/under/chameleon(src)
new /obj/item/clothing/head/chameleon(src)
new /obj/item/clothing/suit/chameleon(src)
new /obj/item/clothing/shoes/chameleon(src)
new /obj/item/weapon/storage/backpack/chameleon(src)
new /obj/item/clothing/gloves/chameleon(src)
new /obj/item/clothing/mask/chameleon(src)
new /obj/item/clothing/glasses/chameleon(src)
new /obj/item/clothing/accessory/chameleon(src)
new /obj/item/weapon/gun/energy/chameleon(src)
starts_with = list(
/obj/item/clothing/under/chameleon,
/obj/item/clothing/head/chameleon,
/obj/item/clothing/suit/chameleon,
/obj/item/clothing/shoes/chameleon,
/obj/item/weapon/storage/backpack/chameleon,
/obj/item/clothing/gloves/chameleon,
/obj/item/clothing/mask/chameleon,
/obj/item/clothing/glasses/chameleon,
/obj/item/clothing/accessory/chameleon,
/obj/item/weapon/gun/energy/chameleon
)
/obj/item/weapon/storage/box/syndie_kit/clerical
name = "clerical kit"
desc = "Comes with all you need to fake paperwork. Assumes you have passed basic writing lessons."
/obj/item/weapon/storage/box/syndie_kit/clerical/New()
..()
new /obj/item/weapon/stamp/chameleon(src)
new /obj/item/weapon/pen/chameleon(src)
new /obj/item/device/destTagger(src)
new /obj/item/weapon/packageWrap(src)
new /obj/item/weapon/hand_labeler(src)
starts_with = list(
/obj/item/weapon/stamp/chameleon,
/obj/item/weapon/pen/chameleon,
/obj/item/device/destTagger,
/obj/item/weapon/packageWrap,
/obj/item/weapon/hand_labeler
)
/obj/item/weapon/storage/box/syndie_kit/spy
name = "spy kit"
desc = "For when you want to conduct voyeurism from afar."
/obj/item/weapon/storage/box/syndie_kit/spy/New()
..()
new /obj/item/device/camerabug/spy(src)
new /obj/item/device/camerabug/spy(src)
new /obj/item/device/camerabug/spy(src)
new /obj/item/device/camerabug/spy(src)
new /obj/item/device/camerabug/spy(src)
new /obj/item/device/camerabug/spy(src)
new /obj/item/device/bug_monitor/spy(src)
starts_with = list(
/obj/item/device/camerabug/spy = 6,
/obj/item/device/bug_monitor/spy
)
/obj/item/weapon/storage/box/syndie_kit/g9mm
name = "\improper Smooth operator"
desc = "Compact 9mm with silencer kit."
/obj/item/weapon/storage/box/syndie_kit/g9mm/New()
..()
new /obj/item/weapon/gun/projectile/pistol(src)
new /obj/item/weapon/silencer(src)
starts_with = list(
/obj/item/weapon/gun/projectile/pistol,
/obj/item/weapon/silencer
)
/obj/item/weapon/storage/box/syndie_kit/toxin
name = "toxin kit"
desc = "An apple will not be enough to keep the doctor away after this."
/obj/item/weapon/storage/box/syndie_kit/toxin/New()
..()
new /obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin(src)
new /obj/item/weapon/reagent_containers/syringe(src)
starts_with = list(
/obj/item/weapon/reagent_containers/glass/beaker/vial/random/toxin,
/obj/item/weapon/reagent_containers/syringe
)
/obj/item/weapon/storage/box/syndie_kit/cigarette
name = "\improper Tricky smokes"
desc = "Comes with the following brands of cigarettes, in this order: 2xFlash, 2xSmoke, 1xMindBreaker, 1xTricordrazine. Avoid mixing them up."
/obj/item/weapon/storage/box/syndie_kit/cigarette/New()
..()
/obj/item/weapon/storage/box/syndie_kit/cigarette/initialize()
. = ..()
var/obj/item/weapon/storage/fancy/cigarettes/pack
pack = new /obj/item/weapon/storage/fancy/cigarettes(src)
fill_cigarre_package(pack, list("aluminum" = 5, "potassium" = 5, "sulfur" = 5))
pack.desc += " 'F' has been scribbled on it."
@@ -222,6 +191,8 @@
new /obj/item/weapon/flame/lighter/zippo(src)
calibrate_size()
/proc/fill_cigarre_package(var/obj/item/weapon/storage/fancy/cigarettes/C, var/list/reagents)
for(var/reagent in reagents)
C.reagents.add_reagent(reagent, reagents[reagent] * C.storage_slots)
@@ -229,72 +200,52 @@
/obj/item/weapon/storage/box/syndie_kit/ewar_voice
name = "Electrowarfare and Voice Synthesiser kit"
desc = "Kit for confounding organic and synthetic entities alike."
/obj/item/weapon/storage/box/syndie_kit/ewar_voice/New()
..()
new /obj/item/rig_module/electrowarfare_suite(src)
new /obj/item/rig_module/voice(src)
starts_with = list(
/obj/item/rig_module/electrowarfare_suite,
/obj/item/rig_module/voice
)
/obj/item/weapon/storage/secure/briefcase/money
name = "suspicious briefcase"
desc = "An ominous briefcase that has the unmistakeable smell of old, stale, cigarette smoke, and gives those who look at it a bad feeling."
/obj/item/weapon/storage/secure/briefcase/money/New()
..()
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
new /obj/item/weapon/spacecash/c1000(src)
starts_with = list(/obj/item/weapon/spacecash/c1000 = 10)
/obj/item/weapon/storage/box/syndie_kit/combat_armor
name = "combat armor kit"
desc = "Contains a full set of combat armor."
starts_with = list(
/obj/item/clothing/head/helmet/combat,
/obj/item/clothing/suit/armor/combat,
/obj/item/clothing/gloves/arm_guard/combat,
/obj/item/clothing/shoes/leg_guard/combat
)
/obj/item/weapon/storage/box/syndie_kit/combat_armor/New()
..()
new /obj/item/clothing/head/helmet/combat(src)
new /obj/item/clothing/suit/armor/combat(src)
new /obj/item/clothing/gloves/arm_guard/combat(src)
new /obj/item/clothing/shoes/leg_guard/combat(src)
return
/obj/item/weapon/storage/box/syndie_kit/demolitions
starts_with = list(
/obj/item/weapon/syndie/c4explosive,
/obj/item/weapon/screwdriver
)
/obj/item/weapon/storage/box/syndie_kit/demolitions/New()
..()
new /obj/item/weapon/syndie/c4explosive(src)
new /obj/item/weapon/screwdriver(src)
/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy/New()
..()
new /obj/item/weapon/syndie/c4explosive/heavy(src)
new /obj/item/weapon/screwdriver(src)
/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy/New()
..()
new /obj/item/weapon/syndie/c4explosive/heavy/super_heavy(src)
new /obj/item/weapon/screwdriver(src)
/obj/item/weapon/storage/box/syndie_kit/demolitions_heavy
starts_with = list(
/obj/item/weapon/syndie/c4explosive/heavy,
/obj/item/weapon/screwdriver
)
/obj/item/weapon/storage/box/syndie_kit/demolitions_super_heavy
starts_with = list(
/obj/item/weapon/syndie/c4explosive/heavy/super_heavy,
/obj/item/weapon/screwdriver
)
/obj/item/weapon/storage/secure/briefcase/rifle
name = "secure briefcase"
/obj/item/weapon/storage/secure/briefcase/rifle/New()
..()
new /obj/item/sniper_rifle_part/barrel(src)
new /obj/item/sniper_rifle_part/stock(src)
new /obj/item/sniper_rifle_part/trigger_group(src)
for(var/i = 1 to 4)
new /obj/item/ammo_casing/a145(src)
starts_with = list(
/obj/item/sniper_rifle_part/barrel,
/obj/item/sniper_rifle_part/stock,
/obj/item/sniper_rifle_part/trigger_group,
/obj/item/ammo_casing/a145 = 4
)
/obj/item/weapon/storage/secure/briefcase/fuelrod
name = "heavy briefcase"
@@ -303,14 +254,12 @@
description_antag = "This case will likely contain a charged fuel rod gun, and a few fuel rods to go with it. It can only hold the fuel rod gun, fuel rods, batteries, a screwdriver, and stock machine parts."
force = 12 //Anti-rad lined i.e. Lead, probably gonna hurt a bit if you get bashed with it.
can_hold = list(/obj/item/weapon/gun/magnetic/fuelrod, /obj/item/weapon/fuel_assembly, /obj/item/weapon/cell, /obj/item/weapon/stock_parts, /obj/item/weapon/screwdriver)
/obj/item/weapon/storage/secure/briefcase/fuelrod/New()
..()
new /obj/item/weapon/gun/magnetic/fuelrod(src)
new /obj/item/weapon/fuel_assembly/deuterium(src)
new /obj/item/weapon/fuel_assembly/deuterium(src)
new /obj/item/weapon/fuel_assembly/tritium(src)
new /obj/item/weapon/fuel_assembly/tritium(src)
new /obj/item/weapon/fuel_assembly/phoron(src)
new /obj/item/weapon/screwdriver(src)
starts_with = list(
/obj/item/weapon/gun/magnetic/fuelrod,
/obj/item/weapon/fuel_assembly/deuterium,
/obj/item/weapon/fuel_assembly/deuterium,
/obj/item/weapon/fuel_assembly/tritium,
/obj/item/weapon/fuel_assembly/tritium,
/obj/item/weapon/fuel_assembly/phoron,
/obj/item/weapon/screwdriver
)
@@ -118,4 +118,4 @@
name = "women's wallet"
desc = "A stylish wallet typically used by women."
icon_state = "girl_wallet"
item_state_slots = list(slot_r_hand_str = "wowallet", slot_l_hand_str = "wowallet")
item_state_slots = list(slot_r_hand_str = "wowallet", slot_l_hand_str = "wowallet")
+13 -4
View File
@@ -13,20 +13,29 @@
desc = "A small wrapped package."
w_class = ITEMSIZE_NORMAL
var/power = 1 /*Size of the explosion.*/
var/devastate = 0
var/heavy_impact = 1
var/light_impact = 2
var/flash_range = 5
var/size = "small" /*Used for the icon, this one will make c-4small_0 for the off state.*/
/obj/item/weapon/syndie/c4explosive/heavy
icon_state = "c-4large_0"
item_state = "radio"
desc = "A mysterious package, it's quite heavy."
power = 2
devastate = 1
heavy_impact = 2
light_impact = 5
flash_range = 7
size = "large"
/obj/item/weapon/syndie/c4explosive/heavy/super_heavy
name = "large-sized package"
desc = "A mysterious package, it's quite exceptionally heavy."
power = 3
devastate = 2
heavy_impact = 5
light_impact = 7
flash_range = 7
/obj/item/weapon/syndie/c4explosive/New()
var/K = rand(1,2000)
@@ -43,7 +52,7 @@
for(var/mob/O in hearers(src, null))
O.show_message("\icon[src] <span class = 'warning'> The [src.name] beeps! </span>")
sleep(50)
explosion(get_turf(src), power, power*2, power*3, power*4, power*5)
explosion(get_turf(src), devastate, heavy_impact, light_impact, flash_range)
for(var/dirn in cardinal) //This is to guarantee that C4 at least breaks down all immediately adjacent walls and doors.
var/turf/simulated/wall/T = get_step(src,dirn)
if(locate(/obj/machinery/door/airlock) in T)
+332 -12
View File
@@ -907,6 +907,21 @@ something, make sure it's not in one of the other lists.*/
prob(25);/obj/item/device/radio/headset/headset_com/alt,
prob(25);/obj/item/device/radio/headset)
/obj/random/coin
name = "random coin"
desc = "This is a coin spawn."
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
/obj/random/coin/item_to_spawn()
return pick(prob(5);/obj/item/weapon/coin/silver,
prob(3);/obj/item/weapon/coin/iron,
prob(4);/obj/item/weapon/coin/gold,
prob(3);/obj/item/weapon/coin/phoron,
prob(1);/obj/item/weapon/coin/uranium,
prob(2);/obj/item/weapon/coin/platinum,
prob(1);/obj/item/weapon/coin/diamond)
/obj/random/rigsuit
name = "Random rigsuit"
desc = "This is a random rigsuit."
@@ -921,6 +936,20 @@ something, make sure it's not in one of the other lists.*/
prob(3);/obj/item/weapon/rig/hazard,
prob(1);/obj/item/weapon/rig/merc/empty)
/obj/random/landmine
name = "Random Land Mine"
desc = "This is a random land mine."
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
spawn_nothing_percentage = 25
/obj/random/landmine/item_to_spawn()
return pick(prob(30);/obj/effect/mine,
prob(25);/obj/effect/mine/frag,
prob(25);/obj/effect/mine/emp,
prob(10);/obj/effect/mine/stun,
prob(10);/obj/effect/mine/incendiary,)
var/list/random_junk_
var/list/random_useful_
/proc/get_random_useful_type()
@@ -1123,16 +1152,307 @@ var/list/multi_point_spawns
)
)
/obj/random/landmine
name = "Random Land Mine"
desc = "This is a random land mine."
icon = 'icons/obj/weapons.dmi'
icon_state = "uglymine"
spawn_nothing_percentage = 25
/obj/random/multiple/minevault
name = "random vault loot"
desc = "Loot for mine vaults."
icon = 'icons/misc/mark.dmi'
icon_state = "rup"
/obj/random/landmine/item_to_spawn()
return pick(prob(30);/obj/effect/mine,
prob(25);/obj/effect/mine/frag,
prob(25);/obj/effect/mine/emp,
prob(10);/obj/effect/mine/stun,
prob(10);/obj/effect/mine/incendiary,)
/obj/random/multiple/minevault/item_to_spawn()
return pick(
prob(5);list(
/obj/item/clothing/mask/smokable/pipe,
/obj/item/weapon/reagent_containers/food/drinks/bottle/rum,
/obj/item/weapon/reagent_containers/food/drinks/bottle/whiskey,
/obj/item/weapon/reagent_containers/food/snacks/grown/ambrosiadeus,
/obj/item/weapon/flame/lighter/zippo,
/obj/structure/closet/crate/hydroponics
),
prob(5);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/clothing/suit/space/void/mining,
/obj/item/clothing/head/helmet/space/void/mining,
/obj/structure/closet/crate/engineering
),
prob(5);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/clothing/suit/space/void/mining/alt,
/obj/item/clothing/head/helmet/space/void/mining/alt,
/obj/structure/closet/crate/engineering
),
prob(5);list(
/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
/obj/item/weapon/reagent_containers/glass/beaker/bluespace,
/obj/structure/closet/crate/science
),
prob(5);list(
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/diamond,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/item/weapon/ore/gold,
/obj/structure/closet/crate/engineering
),
prob(5);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/clothing/glasses/material,
/obj/structure/ore_box,
/obj/structure/closet/crate
),
prob(5);list(
/obj/item/weapon/reagent_containers/glass/beaker/noreact,
/obj/item/weapon/reagent_containers/glass/beaker/noreact,
/obj/item/weapon/reagent_containers/glass/beaker/noreact,
/obj/structure/closet/crate/science
),
prob(5);list(
/obj/item/weapon/storage/secure/briefcase/money,
/obj/structure/closet/crate/freezer/rations
),
prob(5);list(
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/item/clothing/accessory/tie/horrible,
/obj/structure/closet/crate
),
prob(5);list(
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
/obj/item/weapon/melee/baton,
/obj/structure/closet/crate
),
prob(5);list(
/obj/item/clothing/under/shorts/red,
/obj/item/clothing/under/shorts/blue,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/weapon/melee/baton/cattleprod,
/obj/item/weapon/melee/baton/cattleprod,
/obj/item/weapon/cell/high,
/obj/item/weapon/cell/high,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/latexballon,
/obj/item/latexballon,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/toy/syndicateballoon,
/obj/item/toy/syndicateballoon,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/weapon/rig/industrial/equipped,
/obj/item/weapon/storage/bag/ore,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/kitty,
/obj/item/clothing/head/kitty,
/obj/structure/closet/crate
),
prob(2);list(
/obj/random/coin,
/obj/random/coin,
/obj/random/coin,
/obj/random/coin,
/obj/random/coin,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/random/multiple/voidsuit,
/obj/random/multiple/voidsuit,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/clothing/suit/space/syndicate/black/red,
/obj/item/clothing/head/helmet/space/syndicate/black/red,
/obj/item/clothing/suit/space/syndicate/black/red,
/obj/item/clothing/head/helmet/space/syndicate/black/red,
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
/obj/item/weapon/gun/projectile/automatic/mini_uzi,
/obj/item/ammo_magazine/m45uzi,
/obj/item/ammo_magazine/m45uzi,
/obj/item/ammo_magazine/m45uzi/empty,
/obj/item/ammo_magazine/m45uzi/empty,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/item/clothing/suit/ianshirt,
/obj/item/clothing/suit/ianshirt,
/obj/item/weapon/bedsheet/ian,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/item/clothing/suit/armor/vest,
/obj/item/clothing/suit/armor/vest,
/obj/item/weapon/gun/projectile/garand,
/obj/item/weapon/gun/projectile/garand,
/obj/item/ammo_magazine/m762garand,
/obj/item/ammo_magazine/m762garand,
/obj/structure/closet/crate/plastic
),
prob(2);list(
/obj/mecha/working/ripley/mining
),
prob(2);list(
/obj/mecha/working/hoverpod/combatpod
),
prob(2);list(
/obj/item/weapon/pickaxe/silver,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/drill,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/jackhammer,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/diamond,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/diamonddrill,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/gold,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/pickaxe/plasmacutter,
/obj/item/weapon/storage/bag/ore,
/obj/item/clothing/glasses/material,
/obj/structure/closet/crate/engineering
),
prob(2);list(
/obj/item/weapon/material/sword/katana,
/obj/item/weapon/material/sword/katana,
/obj/structure/closet/crate
),
prob(2);list(
/obj/item/weapon/material/sword,
/obj/item/weapon/material/sword,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/clothing/mask/balaclava,
/obj/item/weapon/material/star,
/obj/item/weapon/material/star,
/obj/item/weapon/material/star,
/obj/item/weapon/material/star,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weed_extract,
/obj/item/xenos_claw,
/obj/structure/closet/crate/science
),
prob(1);list(
/obj/item/clothing/head/bearpelt,
/obj/item/clothing/under/soviet,
/obj/item/clothing/under/soviet,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial,
/obj/item/weapon/gun/projectile/shotgun/pump/rifle/ceremonial,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/gun/projectile/revolver/detective,
/obj/item/weapon/gun/projectile/contender,
/obj/item/weapon/gun/projectile/p92x,
/obj/item/weapon/gun/projectile/derringer,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/melee/cultblade,
/obj/item/clothing/suit/cultrobes,
/obj/item/clothing/head/culthood,
/obj/item/device/soulstone,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/vampiric,
/obj/item/weapon/vampiric,
/obj/structure/closet/crate/science
),
prob(1);list(
/obj/item/weapon/archaeological_find
),
prob(1);list(
/obj/item/weapon/melee/energy/sword,
/obj/item/weapon/melee/energy/sword,
/obj/item/weapon/melee/energy/sword,
/obj/item/weapon/shield/energy,
/obj/item/weapon/shield/energy,
/obj/structure/closet/crate/science
),
prob(1);list(
/obj/item/weapon/storage/backpack/clown,
/obj/item/clothing/under/rank/clown,
/obj/item/clothing/shoes/clown_shoes,
/obj/item/device/pda/clown,
/obj/item/clothing/mask/gas/clown_hat,
/obj/item/weapon/bikehorn,
/obj/item/toy/waterflower,
/obj/item/weapon/pen/crayon/rainbow,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/clothing/under/mime,
/obj/item/clothing/shoes/black,
/obj/item/device/pda/mime,
/obj/item/clothing/gloves/white,
/obj/item/clothing/mask/gas/mime,
/obj/item/clothing/head/beret,
/obj/item/clothing/suit/suspenders,
/obj/item/weapon/pen/crayon/mime,
/obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing,
/obj/structure/closet/crate
),
prob(1);list(
/obj/item/weapon/storage/belt/champion,
/obj/item/clothing/mask/luchador,
/obj/item/clothing/mask/luchador/rudos,
/obj/item/clothing/mask/luchador/tecnicos,
/obj/structure/closet/crate
)
)
+181 -3
View File
@@ -10,6 +10,8 @@
var/next_fuel_consumption = 0 // world.time of when next item in fuel list gets eatten to sustain the fire.
var/grill = FALSE
var/material/material
var/set_temperature = T0C + 30 //K
var/heating_power = 80000
/obj/structure/bonfire/New(newloc, material_name)
..(newloc)
@@ -186,9 +188,9 @@
if(burning)
var/state
switch(get_fuel_amount())
if(0 to 4)
if(0 to 4.5)
state = "bonfire_warm"
if(5 to 10)
if(4.6 to 10)
state = "bonfire_hot"
var/image/I = image(icon, state)
I.appearance_flags = RESET_COLOR
@@ -223,6 +225,23 @@
if(!grill)
burn()
if(burning)
var/W = get_fuel_amount()
if(W >= 5)
var/datum/gas_mixture/env = loc.return_air()
if(env && abs(env.temperature - set_temperature) > 0.1)
var/transfer_moles = 0.25 * env.total_moles
var/datum/gas_mixture/removed = env.remove(transfer_moles)
if(removed)
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
if(heat_transfer > 0)
heat_transfer = min(heat_transfer , heating_power)
removed.add_thermal_energy(heat_transfer)
env.merge(removed)
/obj/structure/bonfire/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
ignite()
@@ -235,4 +254,163 @@
M.pixel_y += 13
else // Just unbuckled someone
M.pixel_y -= 13
update_icon()
update_icon()
/obj/structure/fireplace //more like a space heater than a bonfire. A cozier alternative to both.
name = "fireplace"
desc = "The sound of the crackling hearth reminds you of home."
icon = 'icons/obj/structures.dmi'
icon_state = "fireplace"
density = TRUE
anchored = TRUE
var/burning = FALSE
var/next_fuel_consumption = 0
var/set_temperature = T0C + 20 //K
var/heating_power = 40000
/obj/structure/fireplace/attackby(obj/item/W, mob/user)
if(istype(W, /obj/item/stack/material/wood) || istype(W, /obj/item/stack/material/log) )
add_fuel(W, user)
else if(W.is_hot())
ignite()
else
return ..()
/obj/structure/fireplace/attack_hand(mob/user)
if(get_fuel_amount())
remove_fuel(user)
/obj/structure/fireplace/proc/get_fuel_amount()
var/F = 0
for(var/A in contents)
if(istype(A, /obj/item/stack/material/wood))
F += 0.5
if(istype(A, /obj/item/stack/material/log))
F += 1.0
return F
/obj/structure/fireplace/proc/remove_fuel(mob/user)
if(get_fuel_amount())
var/atom/movable/AM = pop(contents)
AM.forceMove(get_turf(src))
to_chat(user, "<span class='notice'>You take \the [AM] out of \the [src] before it has a chance to burn away.</span>")
update_icon()
/obj/structure/fireplace/proc/add_fuel(atom/movable/new_fuel, mob/user)
if(get_fuel_amount() >= 10)
to_chat(user, "<span class='warning'>\The [src] already has enough fuel!</span>")
return FALSE
if(istype(new_fuel, /obj/item/stack/material/wood) || istype(new_fuel, /obj/item/stack/material/log) )
var/obj/item/stack/F = new_fuel
var/obj/item/stack/S = F.split(1)
if(S)
S.forceMove(src)
to_chat(user, "<span class='warning'>You add \the [new_fuel] to \the [src].</span>")
update_icon()
return TRUE
return FALSE
else
to_chat(user, "<span class='warning'>\The [src] needs raw wood to burn, \a [new_fuel] won't work.</span>")
return FALSE
/obj/structure/fireplace/proc/consume_fuel(var/obj/item/stack/consumed_fuel)
if(!istype(consumed_fuel))
qdel(consumed_fuel) // Don't know, don't care.
return FALSE
if(istype(consumed_fuel, /obj/item/stack/material/log))
next_fuel_consumption = world.time + 2 MINUTES
qdel(consumed_fuel)
update_icon()
return TRUE
else if(istype(consumed_fuel, /obj/item/stack/material/wood)) // One log makes two planks of wood.
next_fuel_consumption = world.time + 1 MINUTE
qdel(consumed_fuel)
update_icon()
return TRUE
return FALSE
/obj/structure/fireplace/proc/check_oxygen()
var/datum/gas_mixture/G = loc.return_air()
if(G.gas["oxygen"] < 1)
return FALSE
return TRUE
/obj/structure/fireplace/proc/extinguish()
if(burning)
burning = FALSE
update_icon()
processing_objects -= src
visible_message("<span class='notice'>\The [src] stops burning.</span>")
/obj/structure/fireplace/proc/ignite()
if(!burning && get_fuel_amount())
burning = TRUE
update_icon()
processing_objects += src
visible_message("<span class='warning'>\The [src] starts burning!</span>")
/obj/structure/fireplace/proc/burn()
var/turf/current_location = get_turf(src)
current_location.hotspot_expose(1000, 500)
for(var/A in current_location)
if(A == src)
continue
if(isobj(A))
var/obj/O = A
O.fire_act(null, 1000, 500)
/obj/structure/fireplace/update_icon()
overlays.Cut()
if(burning)
var/state
switch(get_fuel_amount())
if(0 to 3.5)
state = "fireplace_warm"
if(3.6 to 6.5)
state = "fireplace_hot"
if(6.6 to 10)
state = "fireplace_intense" //don't need to throw a corpse inside to make it burn hotter.
var/image/I = image(icon, state)
I.appearance_flags = RESET_COLOR
overlays += I
var/light_strength = max(get_fuel_amount() / 2, 2)
set_light(light_strength, light_strength, "#FF9933")
else
set_light(0)
/obj/structure/fireplace/process()
if(!check_oxygen())
extinguish()
return
if(world.time >= next_fuel_consumption)
if(!consume_fuel(pop(contents)))
extinguish()
return
if(burning)
var/W = get_fuel_amount()
if(W >= 5)
var/datum/gas_mixture/env = loc.return_air()
if(env && abs(env.temperature - set_temperature) > 0.1)
var/transfer_moles = 0.25 * env.total_moles
var/datum/gas_mixture/removed = env.remove(transfer_moles)
if(removed)
var/heat_transfer = removed.get_thermal_energy_change(set_temperature)
if(heat_transfer > 0)
heat_transfer = min(heat_transfer , heating_power)
removed.add_thermal_energy(heat_transfer)
env.merge(removed)
/obj/structure/fireplace/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
ignite()
/obj/structure/fireplace/water_act(amount)
if(prob(amount * 10))
extinguish()
@@ -85,7 +85,7 @@
new /obj/item/weapon/storage/backpack/industrial(src)
else
new /obj/item/weapon/storage/backpack/satchel/eng(src)
new /obj/item/device/radio/headset/headset_cargo(src)
new /obj/item/device/radio/headset/headset_mine(src)
new /obj/item/clothing/under/rank/miner(src)
new /obj/item/clothing/gloves/black(src)
new /obj/item/clothing/shoes/black(src)
@@ -18,6 +18,10 @@
return ..()
if(is_stump)
if(istype(W,/obj/item/weapon/shovel))
if(do_after(user, 5 SECONDS))
visible_message("<span class='notice'>\The [user] digs up \the [src] stump with \the [W].</span>")
qdel(src)
return
visible_message("<span class='danger'>\The [user] hits \the [src] with \the [W]!</span>")
+105
View File
@@ -0,0 +1,105 @@
/obj/machinery/holoplant
name = "holoplant"
desc = "One of those Ward-Takahashi holoplants! Give your space a bit of the comfort of being outdoors, by buying this blue buddy. A rugged case guarantees that your flower will outlive you, and variety of plant types won't let you to get bored along the way!"
icon = 'icons/obj/holoplants.dmi'
icon_state = "holopot"
light_color = "#3C94C5"
anchored = TRUE
idle_power_usage = 0
active_power_usage = 5
var/interference = FALSE
var/icon/plant = null
var/global/list/possible_plants = list(
"plant-1",
"plant-10",
"plant-09",
"plant-15",
"plant-13"
)
/obj/machinery/holoplant/initialize()
. = ..()
activate()
/obj/machinery/holoplant/attack_hand(var/mob/living/user)
if(!istype(user) || interference)
return
if(!anchored)
to_chat(user,"<span class='warning'>\The [src] must be anchored before activation!</span>")
return
if(!plant)
activate()
else
deactivate()
/obj/machinery/holoplant/attackby(var/obj/item/O as obj, var/mob/user as mob)
if(default_unfasten_wrench(user, O, 10))
deactivate()
return
. = ..()
/obj/machinery/holoplant/proc/activate()
if(!anchored || stat & (NOPOWER|BROKEN))
return
plant = prepare_icon(emagged ? "emagged" : null)
overlays += plant
set_light(2)
use_power = 2
/obj/machinery/holoplant/proc/deactivate()
overlays -= plant
qdel_null(plant)
set_light(0)
use_power = 0
/obj/machinery/holoplant/power_change()
..()
if(stat & NOPOWER)
deactivate()
else
activate()
/obj/machinery/holoplant/proc/flicker()
interference = TRUE
spawn(0)
overlays -= plant
set_light(0)
sleep(rand(2,4))
overlays += plant
set_light(2)
sleep(rand(2,4))
overlays -= plant
set_light(0)
sleep(rand(2,4))
overlays += plant
set_light(2)
interference = FALSE
/obj/machinery/holoplant/proc/prepare_icon(var/state)
if(!state)
state = pick(possible_plants)
var/plant_icon = icon(icon, state)
return getHologramIcon(plant_icon, 0)
/obj/machinery/holoplant/emag_act()
if(emagged)
return
emagged = TRUE
if(plant)
deactivate()
activate()
/obj/machinery/holoplant/Crossed(var/mob/living/L)
if(!interference && plant && istype(L))
flicker()
/obj/machinery/holoplant/shipped
anchored = FALSE
/obj/machinery/holoplant/shipped/initialize()
. = ..()
+54
View File
@@ -294,6 +294,21 @@
if(is_fulltile())
mats.amount = 4
qdel(src)
else if(iscoil(W) && reinf && state == 0 && !istype(src, /obj/structure/window/reinforced/polarized))
var/obj/item/stack/cable_coil/C = W
if (C.use(1))
playsound(src.loc, 'sound/effects/sparks1.ogg', 75, 1)
user.visible_message( \
"<span class='notice'>\The [user] begins to wire \the [src] for electrochromic tinting.</span>", \
"<span class='notice'>You begin to wire \the [src] for electrochromic tinting.</span>", \
"You hear sparks.")
if(do_after(user, 20 * C.toolspeed, src) && state == 0)
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
var/obj/structure/window/reinforced/polarized/P = new(loc, dir)
P.health = health
P.state = state
P.anchored = anchored
qdel(src)
else if(istype(W,/obj/item/frame) && anchored)
var/obj/item/frame/F = W
F.try_build(src)
@@ -551,6 +566,28 @@
desc = "Adjusts its tint with voltage. Might take a few good hits to shatter it."
var/id
/obj/structure/window/reinforced/polarized/full
dir = SOUTHWEST
icon_state = "fwindow"
maxhealth = 80
/obj/structure/window/reinforced/polarized/attackby(obj/item/W as obj, mob/user as mob)
if(ismultitool(W) && !anchored) // Only allow programming if unanchored!
var/obj/item/device/multitool/MT = W
// First check if they have a windowtint button buffered
if(istype(MT.connectable, /obj/machinery/button/windowtint))
var/obj/machinery/button/windowtint/buffered_button = MT.connectable
src.id = buffered_button.id
to_chat(user, "<span class='notice'>\The [src] is linked to \the [buffered_button].</span>")
return TRUE
// Otherwise fall back to asking them
var/t = sanitizeSafe(input(user, "Enter the ID for the window.", src.name, null), MAX_NAME_LEN)
if (!t && user.get_active_hand() != W && in_range(src, user))
src.id = t
to_chat(user, "<span class='notice'>The new ID of \the [src] is [id]</span>")
return TRUE
. = ..()
/obj/structure/window/reinforced/polarized/proc/toggle()
if(opacity)
animate(src, color="#FFFFFF", time=5)
@@ -593,3 +630,20 @@
/obj/machinery/button/windowtint/update_icon()
icon_state = "light[active]"
/obj/machinery/button/windowtint/attackby(obj/item/W as obj, mob/user as mob)
if(ismultitool(W))
var/obj/item/device/multitool/MT = W
if(!id)
// If no ID is set yet (newly built button?) let them select an ID for first-time use!
var/t = sanitizeSafe(input(user, "Enter an ID for \the [src].", src.name, null), MAX_NAME_LEN)
if (t && user.get_active_hand() != W && in_range(src, user))
src.id = t
to_chat(user, "<span class='notice'>The new ID of \the [src] is [id]</span>")
if(id)
// It already has an ID (or they just set one), buffer it for copying to windows.
to_chat(user, "<span class='notice'>You store \the [src] in \the [MT]'s buffer!</span>")
MT.connectable = src
MT.update_icon()
return TRUE
. = ..()
+22
View File
@@ -133,6 +133,11 @@ var/list/flooring_types
icon_base = "oracarpet"
build_type = /obj/item/stack/tile/carpet/oracarpet
/decl/flooring/carpet/tealcarpet
name = "teal carpet"
icon_base = "tealcarpet"
build_type = /obj/item/stack/tile/carpet/teal
/decl/flooring/tiling
name = "floor"
desc = "Scuffed from the passage of countless greyshirts."
@@ -275,6 +280,23 @@ var/list/flooring_types
'sound/effects/footstep/wood4.ogg',
'sound/effects/footstep/wood5.ogg'))
/decl/flooring/sifwood
name = "alien wooden floor"
desc = "Polished alien wood planks."
icon = 'icons/turf/flooring/wood.dmi'
icon_base = "sifwood"
has_damage_range = 6
damage_temperature = T0C+200
descriptor = "planks"
build_type = /obj/item/stack/tile/sifwood
flags = TURF_CAN_BREAK | TURF_IS_FRAGILE | TURF_REMOVE_SCREWDRIVER
footstep_sounds = list("human" = list(
'sound/effects/footstep/wood1.ogg',
'sound/effects/footstep/wood2.ogg',
'sound/effects/footstep/wood3.ogg',
'sound/effects/footstep/wood4.ogg',
'sound/effects/footstep/wood5.ogg'))
/decl/flooring/reinforced
name = "reinforced floor"
desc = "Heavily reinforced with steel rods."
@@ -14,6 +14,11 @@
icon_state = "blucarpet"
initial_flooring = /decl/flooring/carpet/blucarpet
/turf/simulated/floor/carpet/tealcarpet
name = "teal carpet"
icon_state = "tealcarpet"
initial_flooring = /decl/flooring/carpet/tealcarpet
// Legacy support for existing paths for blue carpet
/turf/simulated/floor/carpet/blue
name = "blue carpet"
@@ -63,6 +68,12 @@
icon_state = "wood"
initial_flooring = /decl/flooring/wood
/turf/simulated/floor/sifwood
name = "alien wooden floor"
icon = 'icons/turf/flooring/wood.dmi'
icon_state = "sifwood"
initial_flooring = /decl/flooring/sifwood
/turf/simulated/floor/grass
name = "grass patch"
icon = 'icons/turf/flooring/grass.dmi'
+1 -1
View File
@@ -1228,7 +1228,7 @@
if(ismob(M))
var/take_msg = "<span class='notice'><b>ADMINHELP</b>: <b>[key_name(usr.client)]</b> is attending to <b>[key_name(M)]'s</b> adminhelp, please don't dogpile them.</span>"
for(var/client/X in admins)
if((R_ADMIN|R_MOD|R_EVENT) & X.holder.rights)
if((R_ADMIN|R_MOD|R_EVENT|R_SERVER) & X.holder.rights)
to_chat(X, take_msg)
to_chat(M, "<span class='notice'><b>Your adminhelp is being attended to by [usr.client]. Thanks for your patience!</b></span>")
else
+2 -2
View File
@@ -12,7 +12,7 @@
melee_damage_lower = 2
melee_damage_upper = 4
layer = MOB_LAYER + 0.2 // Over the blob.
attacktext = "slams into"
attacktext = list("slams into")
attack_sound = 'sound/effects/slime_squish.ogg'
emote_see = list("sways", "inflates briefly")
var/mob/living/carbon/human/infested = null // The human this thing is totally not making into a zombie.
@@ -97,7 +97,7 @@
melee_damage_lower += 8 // 10 total.
melee_damage_upper += 11 // 15 total.
emote_see = list("shambles around", "twitches", "stares")
attacktext = "claws"
attacktext = list("claws")
H.forceMove(src)
infested = H
@@ -4,7 +4,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/equip_preview_mob = EQUIP_PREVIEW_ALL
var/icon/bgstate = "000"
var/list/bgstate_options = list("000", "fff", "steel", "white")
var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced")
/datum/category_item/player_setup_item/general/body
name = "Body"
+14
View File
@@ -45,3 +45,17 @@
icon_state = "medical"
item_state_slots = list(slot_r_hand_str = "medical", slot_l_hand_str = "medical")
permeability_coefficient = 0.01
/obj/item/clothing/mask/breath/emergency
desc = "A close-fitting mask that is used by the wallmounted emergency oxygen pump."
name = "emergency mask"
icon_state = "breath"
item_state = "breath"
permeability_coefficient = 0.50
/obj/item/clothing/mask/breath/anesthetic
desc = "A close-fitting sterile mask that is used by the anesthetic wallmounted pump."
name = "anesthetic mask"
icon_state = "medical"
item_state = "medical"
permeability_coefficient = 0.01
-1
View File
@@ -73,7 +73,6 @@
icon_state = "explorer"
item_state_slots = list(slot_r_hand_str = "gas", slot_l_hand_str = "gas")
armor = list(melee = 10, bullet = 5, laser = 5,energy = 5, bomb = 0, bio = 50, rad = 0)
body_parts_covered = HEAD|FACE|EYES
siemens_coefficient = 0.9
/obj/item/clothing/mask/gas/clown_hat
@@ -34,6 +34,10 @@
name = "bar shotgun permit"
desc = "A card indicating that the owner is allowed to carry a shotgun in the bar."
/obj/item/clothing/accessory/permit/gun/planetside
name = "planetside gun permit"
desc = "A card indicating that the owner is allowed to carry a firearm while on the surface."
/obj/item/clothing/accessory/permit/drone
name = "drone identification card"
desc = "A card issued by the EIO, indicating that the owner is a Drone Intelligence. Drones are mandated to carry this card within SolGov space, by law."
+7 -1
View File
@@ -182,4 +182,10 @@
recipes += new/datum/stack_recipe("[display_name] bed", /obj/structure/bed, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] double bed", /obj/structure/bed/double, 4, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder, 2, time = 50, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] ashtray", /obj/item/weapon/material/ashtray, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]")
/material/wood/sif/generate_recipes()
..()
recipes += new/datum/stack_recipe("alien wood floor tile", /obj/item/stack/tile/sifwood, 1, 4, 20)
recipes -= new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20)
recipes -= new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1)
+1 -1
View File
@@ -488,7 +488,7 @@ var/list/mining_overlay_cache = list()
M.flash_eyes()
if(prob(50))
M.Stun(5)
radiation_repository.flat_radiate(src, 25, 200)
radiation_repository.flat_radiate(src, 25, 100)
if(prob(25))
excavate_find(prob(5), finds[1])
else if(rand(1,500) == 1)
+6 -4
View File
@@ -14,12 +14,15 @@
if (istype(W, /obj/item/weapon/ore))
user.remove_from_mob(W)
src.contents += W
if (istype(W, /obj/item/weapon/storage))
else if (istype(W, /obj/item/weapon/storage))
var/obj/item/weapon/storage/S = W
if(!S.contents.len)
return
S.hide_from(usr)
for(var/obj/item/weapon/ore/O in S.contents)
S.remove_from_storage(O, src) //This will move the item to this item's contents
user << "<font color='blue'>You empty the satchel into the box.</font>"
to_chat(user,"<span class='notice'>You empty the satchel into the box.</span>")
update_ore_count()
@@ -62,13 +65,12 @@
user << "- [stored_ore[ore]] [ore]"
return
/obj/structure/ore_box/verb/empty_box()
set name = "Empty Ore Box"
set category = "Object"
set src in view(1)
if(!istype(usr, /mob/living/carbon/human)) //Only living, intelligent creatures with hands can empty ore boxes.
if(!istype(usr, /mob/living/carbon/human) && !istype(usr, /mob/living/silicon/robot)) //Only living, intelligent creatures with gripping aparatti can empty ore boxes.
usr << "<font color='red'>You are physically incapable of emptying the ore box.</font>"
return
+3 -3
View File
@@ -39,7 +39,7 @@
var/haste // If set to 1, the mob will be 'hasted', which makes it ignore slowdown and go really fast.
var/evasion // Positive numbers reduce the odds of being hit. Negative numbers increase the odds.
var/bleeding_rate_percent // Adjusts amount of blood lost when bleeding.
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder. Every 15% is equal to one tile easier or harder, just like evasion.
var/accuracy // Positive numbers makes hitting things with guns easier, negatives make it harder.
var/accuracy_dispersion // Positive numbers make gun firing cover a wider tile range, and therefore more inaccurate. Negatives help negate dispersion penalties.
var/metabolism_percent // Adjusts the mob's metabolic rate, which affects reagent processing. Won't affect mobs without reagent processing.
var/icon_scale_percent // Makes the holder's icon get scaled up or down.
@@ -208,13 +208,13 @@
effects += "You move at maximum speed, and cannot be slowed by any means."
if(!isnull(evasion))
effects += "You are [abs(evasion * 15)]% [evasion > 0 ? "harder" : "easier"] to hit with weapons."
effects += "You are [abs(evasion)]% [evasion > 0 ? "harder" : "easier"] to hit with weapons."
if(!isnull(bleeding_rate_percent))
effects += "You bleed [multipler_to_percentage(bleeding_rate_percent, TRUE)] [bleeding_rate_percent > 1.0 ? "faster" : "slower"]."
if(!isnull(accuracy))
effects += "It is [abs(accuracy * 15)]% [accuracy > 0 ? "easier" : "harder"] for you to hit someone with a ranged weapon."
effects += "It is [abs(accuracy)]% [accuracy > 0 ? "easier" : "harder"] for you to hit someone with a ranged weapon."
if(!isnull(accuracy_dispersion))
effects += "Projectiles you fire are [accuracy_dispersion > 0 ? "more" : "less"] likely to stray from your intended target."
@@ -60,9 +60,9 @@ the artifact triggers the rage.
pain_immunity = TRUE // Avoid falling over from shock (at least until it expires).
// The less good stuff.
accuracy = -5 // Aiming requires focus.
accuracy = -75 // Aiming requires focus.
accuracy_dispersion = 3 // Ditto.
evasion = -3 // Too angry to dodge.
evasion = -45 // Too angry to dodge.
var/nutrition_cost = 150
var/exhaustion_duration = 2 MINUTES // How long the exhaustion modifier lasts after it expires. Set to 0 to not apply one.
@@ -157,7 +157,7 @@ the artifact triggers the rage.
attack_speed_percent = 1.5
outgoing_melee_damage_percent = 0.6
disable_duration_percent = 1.5
evasion = -2
evasion = -30
/datum/modifier/berserk_exhaustion/on_applied()
holder.visible_message("<span class='warning'>\The [holder] looks exhausted.</span>")
@@ -177,6 +177,6 @@ the artifact triggers the rage.
stacks = MODIFIER_STACK_EXTEND
// Just being mad isn't gonna overclock your body when you're a beepboop.
accuracy = -5 // Aiming requires focus.
accuracy = -75 // Aiming requires focus.
accuracy_dispersion = 3 // Ditto.
evasion = -3 // Too angry to dodge.
evasion = -45 // Too angry to dodge.
+10 -7
View File
@@ -1024,10 +1024,10 @@
return
return md5(dna.uni_identity)
/mob/living/carbon/human/clean_blood(var/clean_feet)
/mob/living/carbon/human/clean_blood(var/washshoes)
.=..()
gunshot_residue = null
if(clean_feet && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
if(washshoes && !shoes && istype(feet_blood_DNA, /list) && feet_blood_DNA.len)
feet_blood_color = null
feet_blood_DNA.Cut()
feet_blood_DNA = null
@@ -1546,11 +1546,14 @@
permit.set_name(real_name)
equip_to_appropriate_slot(permit) // If for some reason it can't find room, it'll still be on the floor.
/mob/living/carbon/human/proc/update_icon_special() //For things such as teshari hiding and whatnot.
/mob/living/carbon/human/proc/update_icon_special(var/mutable_appearance/ma, var/update_icons = TRUE) //For things such as teshari hiding and whatnot.
if(hiding) // Hiding? Carry on.
if(stat == DEAD || paralysis || weakened || stunned) //stunned/knocked down by something that isn't the rest verb? Note: This was tried with INCAPACITATION_STUNNED, but that refused to work.
hiding = 0 //No hiding for you. Mob layer should be updated naturally, but it actually doesn't.
hiding = FALSE //No hiding for you. Mob layer should be updated naturally, but it actually doesn't.
else
layer = 2.45
else //Replace this else with other variables if added in the future. Alternatively, could make other things effect this hiding variable.
return
ma.layer = HIDING_LAYER
//Can put special species icon update proc calls here, if any are ever invented.
if(update_icons)
update_icons()
@@ -245,12 +245,13 @@
var/real_damage = rand_damage
var/hit_dam_type = attack.damage_type
real_damage += attack.get_unarmed_damage(H)
if(H.gloves && istype(H.gloves, /obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = H.gloves
real_damage += G.punch_force
hit_dam_type = G.punch_damtype
if(H.pulling_punches) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN
hit_dam_type = AGONY
if(H.gloves)
if(istype(H.gloves, /obj/item/clothing/gloves))
var/obj/item/clothing/gloves/G = H.gloves
real_damage += G.punch_force
hit_dam_type = G.punch_damtype
if(H.pulling_punches) //SO IT IS DECREED: PULLING PUNCHES WILL PREVENT THE ACTUAL DAMAGE FROM RINGS AND KNUCKLES, BUT NOT THE ADDED PAIN
hit_dam_type = AGONY
real_damage *= damage_multiplier
rand_damage *= damage_multiplier
if(HULK in H.mutations)
@@ -327,7 +328,7 @@
/mob/living/carbon/human/proc/afterattack(atom/target as mob|obj|turf|area, mob/living/user as mob|obj, inrange, params)
return
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message)
/mob/living/carbon/human/attack_generic(var/mob/user, var/damage, var/attack_message, var/armor_type = "melee", var/armor_pen = 0, var/a_sharp = 0, var/a_edge = 0)
if(!damage)
return
@@ -339,9 +340,9 @@
var/dam_zone = pick(organs_by_name)
var/obj/item/organ/external/affecting = get_organ(ran_zone(dam_zone))
var/armor_block = run_armor_check(affecting, "melee")
var/armor_soak = get_armor_soak(affecting, "melee")
apply_damage(damage, BRUTE, affecting, armor_block, armor_soak)
var/armor_block = run_armor_check(affecting, armor_type, armor_pen)
var/armor_soak = get_armor_soak(affecting, armor_type, armor_pen)
apply_damage(damage, BRUTE, affecting, armor_block, armor_soak, sharp = a_sharp, edge = a_edge)
updatehealth()
return 1
@@ -149,11 +149,14 @@ var/datum/species/shapeshifter/promethean/prometheans
H.nutrition += rand(15, 45)
// Heal remaining damage.
if(H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
H.adjustBruteLoss(-heal_rate)
H.adjustFireLoss(-heal_rate)
H.adjustOxyLoss(-heal_rate)
H.adjustToxLoss(-heal_rate)
if(H.fire_stacks >= 0)
if(H.getBruteLoss() || H.getFireLoss() || H.getOxyLoss() || H.getToxLoss())
H.adjustBruteLoss(-heal_rate)
H.adjustFireLoss(-heal_rate)
H.adjustOxyLoss(-heal_rate)
H.adjustToxLoss(-heal_rate)
else
H.adjustToxLoss(2*heal_rate) // Doubled because 0.5 is miniscule, and fire_stacks are capped in both directions
/datum/species/shapeshifter/promethean/get_blood_colour(var/mob/living/carbon/human/H)
return (H ? rgb(H.r_skin, H.g_skin, H.b_skin) : ..())
@@ -159,6 +159,8 @@ Please contact me on #coderbus IRC. ~Carn x
//0: We start with their existing appearance (this contains their verbs, important to keep those!)
var/mutable_appearance/ma_compiled = new(src)
ma_compiled.plane = plane //Required because of an override on mutable_appearance/New() that sets it to FLOAT_PLANE...for some reason.
ma_compiled.layer = layer
//1: HUDs because these are hidden behind a backplane. See update_icons_huds()
ma_compiled.overlays = list_huds //The first one can set instead of add
@@ -170,17 +172,14 @@ Please contact me on #coderbus IRC. ~Carn x
ma_compiled.overlays += list_layers
//4: Apply transforms based on situation
update_transform(ma_compiled, FALSE)
update_transform(ma_compiled)
//4.5 Set layer to PLANE_WORLD to make sure its not magically FLOAT_PLANE due to byond madness
ma_compiled.plane = PLANE_WORLD
//5: Do any species specific layering updates, such as when hiding.
update_icon_special(ma_compiled, FALSE)
//5: Set appearance once
//6: Set appearance once
appearance = ma_compiled
//6: Do any species specific layering updates, such as when hiding.
update_icon_special()
/mob/living/carbon/human/update_transform(var/mutable_appearance/passed_ma)
if(QDESTROYING(src))
return
@@ -190,6 +189,8 @@ Please contact me on #coderbus IRC. ~Carn x
ma = passed_ma
else
ma = new(src)
ma.plane = plane //Required because of an override on mutable_appearance/New() that sets it to FLOAT_PLANE...for some reason.
ma.layer = layer
// First, get the correct size.
var/desired_scale = icon_scale
@@ -214,9 +215,9 @@ Please contact me on #coderbus IRC. ~Carn x
M.Translate(0, 16*(desired_scale-1))
ma.transform = M
ma.layer = MOB_LAYER // Fix for a byond bug where turf entry order no longer matters
update_icon_special() //Adjust their layer, like when they are hiding.
if(!passed_ma)
update_icon_special(ma)
appearance = ma
//Update the layers from the defines above
@@ -251,10 +252,9 @@ Please contact me on #coderbus IRC. ~Carn x
list_huds = hud_list.Copy()
list_huds += backplane // Required to mask HUDs in context menus: http://www.byond.com/forum/?post=2336679
//TYPING INDICATOR CODE.
//Typing indicator code
if(client && !stat) //They have a client & aren't dead/KO'd? Continue on!
if(typing_indicator && hud_typing) //They already have the indicator and are still typing
overlays += typing_indicator //This might not be needed? It works, so I'm leaving it.
list_huds += typing_indicator
typing_indicator.invisibility = invisibility
@@ -262,13 +262,11 @@ Please contact me on #coderbus IRC. ~Carn x
typing_indicator = new
typing_indicator.icon = 'icons/mob/talk.dmi'
typing_indicator.icon_state = "[speech_bubble_appearance()]_typing"
overlays += typing_indicator
list_huds += typing_indicator
else if(typing_indicator && !hud_typing) //Did they stop typing?
overlays -= typing_indicator
typing = 0
hud_typing = 0
typing = FALSE
hud_typing = FALSE
if(update_icons)
update_icons()
@@ -419,20 +417,24 @@ var/global/list/damage_icon_parts = list()
var/icon/temp = part.get_icon(skeleton)
//That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST
//And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part)
if(part.icon_position & (LEFT | RIGHT))
if(part.icon_position == RIGHT)
var/icon/temp2 = new('icons/mob/human.dmi',"blank")
var/icon/temp3 = new('icons/mob/human.dmi',"blank")
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
if(!(part.icon_position & LEFT))
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
if(!(part.icon_position & RIGHT))
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
base_icon.Blend(temp2, ICON_OVERLAY)
if(part.icon_position & LEFT)
temp2.Insert(new/icon(temp,dir=EAST),dir=EAST)
if(part.icon_position & RIGHT)
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
base_icon.Blend(temp2, ICON_UNDERLAY)
temp3.Insert(new/icon(temp,dir=WEST),dir=WEST)
base_icon.Blend(temp3, ICON_UNDERLAY)
else if(part.icon_position == LEFT)
var/icon/temp2 = new('icons/mob/human.dmi',"blank")
var/icon/temp3 = new('icons/mob/human.dmi',"blank")
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
temp2.Insert(new/icon(temp,dir=WEST),dir=WEST)
base_icon.Blend(temp2, ICON_OVERLAY)
temp3.Insert(new/icon(temp,dir=EAST),dir=EAST)
base_icon.Blend(temp3, ICON_UNDERLAY)
else if(part.icon_position & UNDER)
base_icon.Blend(temp, ICON_UNDERLAY)
else
@@ -656,7 +658,7 @@ var/global/list/damage_icon_parts = list()
update_fire(0)
update_water(0)
update_surgery(0)
UpdateDamageIcon()
UpdateDamageIcon(0)
update_icons_layers(0)
update_icons_huds(0)
update_icons()
@@ -885,6 +885,18 @@
cleaned_human.update_inv_shoes(0)
cleaned_human.clean_blood(1)
cleaned_human << "<font color='red'>[src] cleans your face!</font>"
if((module_state_1 && istype(module_state_1, /obj/item/weapon/storage/bag/ore)) || (module_state_2 && istype(module_state_2, /obj/item/weapon/storage/bag/ore)) || (module_state_3 && istype(module_state_3, /obj/item/weapon/storage/bag/ore))) //Borgs and drones can use their mining bags ~automagically~ if they're deployed in a slot. Only mining bags, as they're optimized for mass use.
var/obj/item/weapon/storage/bag/ore/B = null
if(istype(module_state_1, /obj/item/weapon/storage/bag/ore)) //First orebag has priority, if they for some reason have multiple.
B = module_state_1
else if(istype(module_state_2, /obj/item/weapon/storage/bag/ore))
B = module_state_2
else if(istype(module_state_3, /obj/item/weapon/storage/bag/ore))
B = module_state_3
var/turf/tile = loc
if(isturf(tile))
B.gather_all(tile, src, 1) //Shhh, unless the bag fills, don't spam the borg's chat with stuff that's going on every time they move!
return
/mob/living/silicon/robot/proc/self_destruct()
@@ -78,6 +78,18 @@ Nurse Family
var/atom/cocoon_target
var/egg_inject_chance = 5
/mob/living/simple_animal/hostile/giant_spider/nurse/medical
desc = "Furry and beige, it makes you shudder to look at it. This one has brilliant green eyes and a tiny nurse hat."
icon_state = "nursemed"
icon_living = "nursemed"
icon_dead = "nursemed_dead"
melee_damage_lower = 8
melee_damage_upper = 16
poison_type = "tramadol"
poison_chance = 15
/mob/living/simple_animal/hostile/giant_spider/nurse/queen
desc = "Absolutely gigantic, this creature is horror itself."
icon = 'icons/mob/64x64.dmi'
@@ -18,7 +18,7 @@
melee_damage_lower = 1
melee_damage_upper = 8
attacktext = "gouged"
attacktext = list("gouged")
cold_damage_per_tick = 0
speak_chance = 5
@@ -17,7 +17,7 @@
melee_damage_lower = 15
melee_damage_upper = 25
attacktext = "mauled"
attacktext = list("mauled")
cold_damage_per_tick = 0
speak_chance = 5
@@ -17,7 +17,7 @@
melee_damage_lower = 3
melee_damage_upper = 12
attacktext = "gouged"
attacktext = list("gouged")
cold_damage_per_tick = 0
speak_chance = 5
@@ -119,6 +119,10 @@
var/melee_miss_chance = 15 // percent chance to miss a melee attack.
var/melee_attack_minDelay = 5 // How long between attacks at least
var/melee_attack_maxDelay = 10 // How long between attacks at most
var/attack_armor_type = "melee" // What armor does this check?
var/attack_armor_pen = 0 // How much armor pen this attack has.
var/attack_sharp = 0 // Is the attack sharp?
var/attack_edge = 0 // Does the attack have an edge?
//Special attacks
var/spattack_prob = 0 // Chance of the mob doing a special attack (0 for never)
@@ -642,7 +646,6 @@
if(istype(O, /obj/item/weapon/material/knife) || istype(O, /obj/item/weapon/material/knife/butch))
harvest(user)
else
O.attack(src, user, user.zone_sel.selecting)
ai_log("attackby() I was weapon'd by: [user]",2)
if(O.force)
react_to_attack(user)
@@ -1275,7 +1278,7 @@
if(H.check_shields(damage = damage_to_do, damage_source = src, attacker = src, def_zone = null, attack_text = "the attack"))
return FALSE
if(A.attack_generic(src, damage_to_do, pick(attacktext)) && attack_sound)
if(A.attack_generic(src, damage_to_do, pick(attacktext), attack_armor_type, attack_armor_pen, attack_sharp, attack_edge) && attack_sound)
playsound(src, attack_sound, 75, 1)
return TRUE
@@ -180,7 +180,7 @@
var/damage_to_do = rand(melee_damage_lower, melee_damage_upper)
var/armor_modifier = abs((L.getarmor(null, "bio") / 100) - 1)
L.attack_generic(src, damage_to_do, attacktext)
L.attack_generic(src, damage_to_do, pick(attacktext))
playsound(src, 'sound/weapons/bite.ogg', 75, 1)
// Give the slime some nutrition, if applicable.
@@ -199,7 +199,7 @@
if(istype(L,/obj/mecha))
var/obj/mecha/M = L
M.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), attacktext)
M.attack_generic(src, rand(melee_damage_lower, melee_damage_upper), pick(attacktext))
/mob/living/simple_animal/slime/proc/post_attack(var/mob/living/L, var/intent = I_HURT)
if(intent != I_HELP)
+3
View File
@@ -94,6 +94,9 @@
var/invis_toggle = FALSE
var/list/sub_planes
/obj/screen/plane_master/New()
..(null) //Never be in anything ever.
/obj/screen/plane_master/proc/set_desired_alpha(var/new_alpha)
if(new_alpha != alpha && new_alpha > 0 && new_alpha <= 255)
desired_alpha = new_alpha
+12 -6
View File
@@ -26,15 +26,18 @@
if(!ishuman(src)) //If they're a mob, use the old code.
set_typing_indicator(1)
if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
else if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
hud_typing = 1
update_icons_huds()
var/message = input("","say (text)") as text
if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
hud_typing = 0
update_icons_huds()
if(!ishuman(src)) //If they're a mob, use the old code.
set_typing_indicator(0)
else if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
hud_typing = 0
update_icons_huds()
if(message)
say_verb(message)
@@ -44,14 +47,17 @@
if(!ishuman(src)) //If they're a mob, use the old code.
set_typing_indicator(1)
if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
else if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
hud_typing = 1
update_icons_huds()
var/message = input("","me (text)") as text
if(is_preference_enabled(/datum/client_preference/show_typing_indicator))
hud_typing = 0
update_icons_huds()
if(!ishuman(src)) //If they're a mob, use the old code.
else if(!ishuman(src)) //If they're a mob, use the old code.
set_typing_indicator(0)
if(message)
me_verb(message)
+4
View File
@@ -5,6 +5,10 @@
/datum/nano_module/New(var/host)
src.host = host
/datum/nano_module/Destroy()
host = null
return ..()
/datum/nano_module/nano_host()
return host ? host : src
+4 -1
View File
@@ -43,8 +43,11 @@
/datum/nano_module/power_monitor/proc/refresh_sensors()
grid_sensors = list()
var/turf/T = get_turf(nano_host())
var/list/levels = list()
if(T)
levels += using_map.get_map_levels(T.z, FALSE)
for(var/obj/machinery/power/sensor/S in machines)
if((T && S.loc.z == T.z) || (S.long_range)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels.
if(T && (S.loc.z == T.z) || (S.loc.z in levels) || (S.long_range)) // Consoles have range on their Z-Level. Sensors with long_range var will work between Z levels.
if(S.name_tag == "#UNKN#") // Default name. Shouldn't happen!
warning("Powernet sensor with unset ID Tag! [S.x]X [S.y]Y [S.z]Z")
else
+3 -2
View File
@@ -95,5 +95,6 @@
return -1
/obj/item/organ/internal/eyes/emp_act(severity)
..() //Returns if the organ isn't robotic
owner.eye_blurry += (4/severity)
..()
if(robotic >= ORGAN_ASSISTED)
owner.eye_blurry += (4/severity)
+7 -7
View File
@@ -83,10 +83,9 @@ var/list/organ_cache = list()
blood_DNA[dna.unique_enzymes] = dna.b_type
/obj/item/organ/proc/die()
if(robotic >= ORGAN_ROBOT)
return
if(robotic < ORGAN_ROBOT)
status |= ORGAN_DEAD
damage = max_damage
status |= ORGAN_DEAD
processing_objects -= src
if(owner && vital)
owner.death()
@@ -107,6 +106,11 @@ var/list/organ_cache = list()
return
if(preserved)
return
//check if we've hit max_damage
if(damage >= max_damage)
die()
//Process infections
if(robotic >= ORGAN_ROBOT || (owner && owner.species && (owner.species.flags & IS_PLANT || (owner.species.flags & NO_INFECT))))
germ_level = 0
@@ -132,10 +136,6 @@ var/list/organ_cache = list()
handle_rejection()
handle_germ_effects()
//check if we've hit max_damage
if(damage >= max_damage)
die()
/obj/item/organ/examine(mob/user)
..(user)
if(status & ORGAN_DEAD)
+2 -2
View File
@@ -18,7 +18,7 @@ var/global/list/limb_icon_cache = list()
h_col = null
if(robotic >= ORGAN_ROBOT)
var/datum/robolimb/franchise = all_robolimbs[model]
if(!(franchise && franchise.lifelike))
if(!(franchise && franchise.skin_tone))
if(human.synth_color)
s_col = list(human.r_synth, human.g_synth, human.b_synth)
return
@@ -36,7 +36,7 @@ var/global/list/limb_icon_cache = list()
h_col = null
if(robotic >= ORGAN_ROBOT)
var/datum/robolimb/franchise = all_robolimbs[model]
if(!(franchise && franchise.lifelike))
if(!(franchise && franchise.skin_tone))
return
if(!isnull(dna.GetUIValue(DNA_UI_SKIN_TONE)) && (species.appearance_flags & HAS_SKIN_TONE))
s_tone = dna.GetUIValue(DNA_UI_SKIN_TONE)
+5 -3
View File
@@ -21,7 +21,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
scroll=ipc_scroll;\
console=ipc_console;\
glider=ipc_gol_glider;\
rainnbow=ipc_rainbow;\
rainbow=ipc_rainbow;\
smiley=ipc_smiley;\
database=ipc_database"
@@ -40,6 +40,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
var/unavailable_at_chargen // If set, not available at chargen.
var/unavailable_to_build // If set, can't be constructed.
var/lifelike // If set, appears organic.
var/skin_tone // If set, applies skin tone rather than part color
var/blood_color = "#030303"
var/list/species_cannot_use = list("Teshari")
var/list/monitor_styles //If empty, the model of limbs offers a head compatible with monitors.
@@ -100,7 +101,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
icon = 'icons/mob/human_races/cyberlimbs/cybersolutions/cybersolutions_alt2.dmi'
unavailable_to_build = 1
parts = list(BP_HEAD)
/datum/robolimb/cybersolutions_alt1
company = "Cyber Solutions - Wight"
desc = "This limb has cheap plastic panels mounted on grey metal."
@@ -198,6 +199,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
icon = 'icons/mob/human_races/cyberlimbs/veymed/veymed_main.dmi'
unavailable_to_build = 1
lifelike = 1
skin_tone = 1
blood_color = "#CCCCCC"
speech_bubble_appearance = "normal"
@@ -220,7 +222,6 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
icon = 'icons/mob/human_races/cyberlimbs/wardtakahashi/wardtakahashi_alt2.dmi'
unavailable_to_build = 1
/datum/robolimb/wardtakahashi_monitor
company = "Ward-Takahashi Monitor"
desc = "Ward-Takahashi's unique spin on a popular prosthetic head model. It looks sleek and modern."
@@ -278,6 +279,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\
desc = "This limb has a rubbery fleshtone covering with visible seams."
icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi'
unavailable_to_build = 1
skin_tone = 1
/obj/item/weapon/disk/limb
name = "Limb Blueprints"
+4
View File
@@ -622,3 +622,7 @@
/obj/item/weapon/paper/crumpled/bloody
icon_state = "scrap_bloodied"
/obj/item/weapon/paper/crumpled/bloody/CrashedMedShuttle
name = "Blackbox Transcript - VMV Aurora's Light"
info = "<I>\[The paper is torn at the top, presumably from the impact. It's oil-stained, but you can just about read it.]</I><BR> <B>mmons 19:52:01:</B> Come on... it's right there in the distance, we're almost there!<BR> <B>Doctor Nazarril 19:52:26:</B> Odysseus online. Orrderrs, sirr?<BR> <B>Captain Simmons 19:52:29:</B> Brace for impact. We're going in full-speed.<BR> <B>Technician Dynasty 19:52:44:</B> Chief, fire's spread to the secondary propulsion systems.<BR> <B>Captain Simmons 19:52:51:</B> Copy. Any word from TraCon? Transponder's down still?<BR> <B>Technician Dynasty 19:53:02:</B> Can't get in touch, sir. Emergency beacon's active, but we're not going t-<BR> <B>Doctor Nazarril 19:53:08:</B> Don't say it. As long as we believe, we'll get through this.<BR> <B>Captain Simmons 19:53:11:</B> Damn right. We're a few klicks out from the port. Rough landing, but we can do it.<BR> <B>V.I.T.A 19:53:26:</B> Vessel diagnostics complete. Engines one, two, three offline. Engine four status: critical. Transponder offline. Fire alarm in the patient bay.<BR> <B>A loud explosion is heard.</B><BR> <B>V.I.T.A 19:53:29:</B> Alert: fuel intake valve open.<BR> <B>Technician Dynasty 19:53:31:</B> ... ah.<BR> <B>Doctor Nazarril 19:53:34:</B> Trrranslate?<BR> <B>V.I.T.A 19:53:37:</B> There is a 16.92% chance of this vessel safely landing at the emergency destination. Note that there is an 83.08% chance of detonation of fuel supplies upon landing.<BR> <B>Technician Dynasty 19:53:48:</B> We'll make it, sure, but we'll explode and take out half the LZ with us. Propulsion's down, we can't slow down. If we land there, everyone in that port dies, no question.<BR> <B>V.I.T.A 19:53:53:</B> The Technician is correct.<BR> <B>Doctor Nazarril 19:54:02:</B> Then... we can't land therrre.<BR> <B>V.I.T.A 19:54:11:</B> Analysing... recommended course of action: attempt emergency landing in isolated area. Chances of survival: negligible. <BR> <B>Captain Simmons 19:54:27:</B> I- alright. I'm bringing us down. You all know what this means.<BR> <B>Doctor Nazarril 19:54:33:</B> Sh... I- I understand. It's been- it's been an honorr, Captain, Dynasty, VITA.<BR> <B>Technician Dynasty 19:54:39:</B> We had a good run. I'm going to miss this.<BR> <B>Captain Simmons 19:54:47:</B> VITA. Tell them we died heroes. Tell them... we did all we could.<BR> <B>V.I.T.A 19:54:48:</B> I will. Impact in five. Four. Three.<BR> <B>Doctor Nazarril 19:54:49:</B> Oh, starrs... I- you werrre all the... best frriends she everr had. Thank you.<BR> <B>Technician Dynasty 19:54:50:</B> Any time, kid. Any time.<BR> <B>V.I.T.A 19:54:41:</B> Two.<BR><B>V.I.T.A 19:54:42:</B> One.<BR> **8/DEC/2561**<BR> <B>V.I.T.A 06:22:16:</B> Backup power restored. Attempting to establish connection with emergency rescue personnel.<BR> <B>V.I.T.A 06:22:17:</B> Unable to establish connection. Transponder destroyed on impact.<BR> <B>V.I.T.A 06:22:18:</B> No lifesigns detected on board.<BR> **1/JAN/2562**<BR> <B>V.I.T.A 00:00:00:</B> Happy New Year, crew.<BR> <B>V.I.T.A 00:00:01:</B> Power reserves: 41%. Diagnostics offline. Cameras offline. Communications offline.<BR> <B>V.I.T.A 00:00:02:</B> Nobody's coming.<BR> **14/FEB/2562**<BR> <B>V.I.T.A 00:00:00:</B> Roses are red.<BR> <B>V.I.T.A 00:00:01:</B> Violets are blue.<BR> <B>V.I.T.A 00:00:02:</B> Won't you come back?<BR> <B>V.I.T.A 00:00:03:</B> I miss you.<BR> **15/FEB/2562**<BR><B>V.I.T.A 22:19:06:</B> Power reserves critical. Transferring remaining power to emergency broadcasting beacon.<BR> <B>V.I.T.A 22:19:07:</B> Should anyone find this, lay them to rest. They deserve a proper burial.<BR> <B>V.I.T.A 22:19:08:</B> Erasing files... shutting down.<BR> <B>A low, monotone beep.</B><BR> **16/FEB/2562**<BR> <B>Something chitters.</B><BR> <B>End of transcript.</B>"
+38
View File
@@ -234,6 +234,18 @@ datum/weather/sif
if(!T.outdoors)
continue // They're indoors, so no need to rain on them.
// If they have an open umbrella, it'll guard from rain
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella</span>")
continue
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
to_chat(L, "<span class='notice'>Rain patters softly onto your umbrella</span>")
continue
L.water_act(1)
to_chat(L, "<span class='warning'>Rain falls on you.</span>")
@@ -258,6 +270,20 @@ datum/weather/sif
if(!T.outdoors)
continue // They're indoors, so no need to rain on them.
// If they have an open umbrella, it'll get stolen by the wind
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
to_chat(L, "<span class='warning'>A gust of wind yanks the umbrella from your hand!</span>")
L.drop_from_inventory(U)
U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L)
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
to_chat(L, "<span class='warning'>A gust of wind yanks the umbrella from your hand!</span>")
L.drop_from_inventory(U)
U.throw_at(get_edge_target_turf(U, pick(alldirs)), 8, 1, L)
L.water_act(2)
to_chat(L, "<span class='warning'>Rain falls on you, drenching you in water.</span>")
@@ -282,6 +308,18 @@ datum/weather/sif
if(!T.outdoors)
continue // They're indoors, so no need to pelt them with ice.
// If they have an open umbrella, it'll guard from rain
if(istype(L.get_active_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_active_hand()
if(U.open)
to_chat(L, "<span class='notice'>Hail patters gently onto your umbrella.</span>")
continue
else if(istype(L.get_inactive_hand(), /obj/item/weapon/melee/umbrella))
var/obj/item/weapon/melee/umbrella/U = L.get_inactive_hand()
if(U.open)
to_chat(L, "<span class='notice'>Hail patters gently onto your umbrella.</span>")
continue
var/target_zone = pick(BP_ALL)
var/amount_blocked = L.run_armor_check(target_zone, "melee")
var/amount_soaked = L.get_armor_soak(target_zone, "melee")
+6
View File
@@ -882,6 +882,12 @@ obj/structure/cable/proc/cableColor(var/colorC)
color = pick(COLOR_RED, COLOR_BLUE, COLOR_LIME, COLOR_WHITE, COLOR_PINK, COLOR_YELLOW, COLOR_CYAN, COLOR_SILVER, COLOR_GRAY, COLOR_BLACK, COLOR_MAROON, COLOR_OLIVE, COLOR_LIME, COLOR_TEAL, COLOR_NAVY, COLOR_PURPLE, COLOR_BEIGE, COLOR_BROWN)
..()
/obj/item/stack/cable_coil/random_belt/New()
stacktype = /obj/item/stack/cable_coil
color = pick(COLOR_RED, COLOR_YELLOW, COLOR_ORANGE)
amount = 30
..()
//Endless alien cable coil
/obj/item/stack/cable_coil/alien
@@ -99,7 +99,7 @@
fire_delay = 20
w_class = ITEMSIZE_LARGE
// one_handed_penalty = 90 // The thing's heavy and huge.
accuracy = 3
accuracy = 45
charge_cost = 600
/obj/item/weapon/gun/energy/lasercannon/mounted
@@ -1,6 +1,6 @@
/obj/item/weapon/gun/energy/gun
name = "energy gun"
desc = "Another bestseller of Lawson Arms and the FTU, the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
desc = "Another bestseller of Lawson Arms and "+TSC_HEPH+", the LAEP90 Perun is a versatile energy based sidearm, capable of switching between low and high capacity projectile settings. In other words: Stun or Kill."
icon_state = "energystun100"
item_state = null //so the human update icon uses the icon_state instead.
fire_delay = 10 // Handguns should be inferior to two-handed weapons.
@@ -64,4 +64,4 @@
firemodes = list(
list(mode_name="stun", projectile_type=/obj/item/projectile/beam/stun, modifystate="nucgunstun", charge_cost = 240),
list(mode_name="lethal", projectile_type=/obj/item/projectile/beam, modifystate="nucgunkill", charge_cost = 480),
)
)
@@ -160,6 +160,18 @@
L.adjust_fire_stacks(-(amount / 5))
remove_self(needed)
/datum/reagent/water/affect_blood(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_SLIME)
M.adjustToxLoss(6 * removed)
else
..()
/datum/reagent/fuel/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed)
if(alien == IS_SLIME)
M.adjustToxLoss(6 * removed)
else
..()
/datum/reagent/fuel
name = "Welding fuel"
id = "fuel"
+1 -1
View File
@@ -93,7 +93,7 @@ using metal and glass, it uses glass and reagents (usually sulphuric acid).
if(materials[f] >= SHEET_MATERIAL_AMOUNT)
var/path = getMaterialType(f)
if(path)
var/obj/item/stack/S = new f(loc)
var/obj/item/stack/S = new path(loc)
S.amount = round(materials[f] / SHEET_MATERIAL_AMOUNT)
..()
+4 -4
View File
@@ -491,13 +491,13 @@ other types of metals and chemistry for reagents).
build_path = /obj/item/roller/adv
sort_string = "MBBAF"
/datum/design/item/medical/enhanced_analyzer
name = "enhanced health analyzer"
/datum/design/item/medical/improved_analyzer
name = "improved health analyzer"
desc = "A prototype version of the regular health analyzer, able to distinguish the location of more serious injuries as well as accurately determine radiation levels."
id = "advanced_analyzer"
id = "improved_analyzer"
req_tech = list(TECH_MAGNET = 5, TECH_BIO = 6)
materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 1000, "silver" = 1000, "gold" = 1500)
build_path = /obj/item/device/healthanalyzer/advanced
build_path = /obj/item/device/healthanalyzer/improved
sort_string = "MBBAG"
/datum/design/item/implant
+1 -1
View File
@@ -258,7 +258,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
qdel(S)
linked_destroy.icon_state = "d_analyzer"
else
if(!(I in linked_destroy.component_parts))
if(I != linked_destroy.circuit && !(I in linked_destroy.component_parts))
qdel(I)
linked_destroy.icon_state = "d_analyzer"
+1 -1
View File
@@ -104,7 +104,7 @@
//see if we can connect to a power net.
var/datum/powernet/PN
var/turf/T = src.loc
var/turf/T = get_turf(src)
var/obj/structure/cable/C = T.get_cable_node()
if (C)
PN = C.powernet
+4 -3
View File
@@ -73,7 +73,7 @@
return
var/is_organ_damaged = 0
for(var/obj/item/organ/I in affected.internal_organs)
if(I.damage > 0)
if(I && (I.damage > 0 || I.status == ORGAN_DEAD))
is_organ_damaged = 1
break
return ..() && is_organ_damaged
@@ -91,7 +91,7 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
for(var/obj/item/organ/I in affected.internal_organs)
if(I && I.damage > 0)
if(I && (I.damage > 0 || I.status == ORGAN_DEAD))
if(!(I.robotic >= ORGAN_ROBOT))
user.visible_message("[user] starts treating damage to [target]'s [I.name] with [tool_name].", \
"You start treating damage to [target]'s [I.name] with [tool_name]." )
@@ -111,11 +111,12 @@
var/obj/item/organ/external/affected = target.get_organ(target_zone)
for(var/obj/item/organ/internal/I in affected.internal_organs)
if(I && I.damage > 0)
if(I && (I.damage > 0 || I.status == ORGAN_DEAD))
if(!(I.robotic >= ORGAN_ROBOT))
user.visible_message("<span class='notice'>[user] treats damage to [target]'s [I.name] with [tool_name].</span>", \
"<span class='notice'>You treat damage to [target]'s [I.name] with [tool_name].</span>" )
I.damage = 0
I.status = 0
if(I.organ_tag == O_EYES)
target.sdisabilities &= ~BLIND
if(I.organ_tag == O_LUNGS)
+1 -1
View File
@@ -22,7 +22,7 @@ Slime definitions, Life and New live here.
var/shiny = 0
move_to_delay = 17 //Slimes shouldn't be able to go faster than humans.
default_chems = list("slimejelly" = 5)
attacktext = "absorbed some of"
attacktext = list("absorbed some of")
response_help = "pats"
response_disarm = "tries to stop"
response_harm = "hits"
+1 -1
View File
@@ -12,7 +12,7 @@ Also includes Life and New
desc = "Something's broken, yell at someone."
melee_damage_lower = 0
melee_damage_upper = 0
attacktext = "hit"
attacktext = list("hit")
attack_sound = null
friendly = "touches"
environment_smash = 0
+18
View File
@@ -53,6 +53,24 @@
-->
<div class="commit sansserif">
<h2 class="date">21 February 2018</h2>
<h3 class="author">Anewbe updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Headsets for jobs that spend a lot of time planetside can now function as local radios when comms are down.</li>
<li class="rscadd">Most headsets now have on-mob sprites.</li>
<li class="rscadd">Added a Planetside Gun Permit item, specifying permission to possess a firearm on the planet's surface. Explorers should spawn with these by default, and a further two can be found in their gun locker.</li>
<li class="rscadd">Prometheans now react to water. Being soaked will stop their regen and deal minor toxin damage. Drinking or being injected with water will deal slightly more toxin damage.</li>
<li class="bugfix">Suit Coolers now properly cool FBPs in slightly burning rooms. If it gets too hot for your suit, you're still dead.</li>
</ul>
<h3 class="author">Leshana updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Makes electrochromatic glass buildable and programmable in game. Use cable and multitool.</li>
</ul>
<h3 class="author">Woodrat updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Additions of 6 new POIs for the cave area.</li>
</ul>
<h2 class="date">17 February 2018</h2>
<h3 class="author">Anewbe updated:</h3>
<ul class="changes bgimages16">
+18
View File
@@ -3900,3 +3900,21 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- rscadd: Added packed snow brick material. Craft it using snow piles.
- recadd: Added snow girders and igloo walls. Craft them using snow bricks.
- rscadd: Added various snowmen. Craft them using snow piles. Punch 'em to destroy.
2018-02-21:
Anewbe:
- rscadd: Headsets for jobs that spend a lot of time planetside can now function
as local radios when comms are down.
- rscadd: Most headsets now have on-mob sprites.
- rscadd: Added a Planetside Gun Permit item, specifying permission to possess a
firearm on the planet's surface. Explorers should spawn with these by default,
and a further two can be found in their gun locker.
- rscadd: Prometheans now react to water. Being soaked will stop their regen and
deal minor toxin damage. Drinking or being injected with water will deal slightly
more toxin damage.
- bugfix: Suit Coolers now properly cool FBPs in slightly burning rooms. If it gets
too hot for your suit, you're still dead.
Leshana:
- rscadd: Makes electrochromatic glass buildable and programmable in game. Use
cable and multitool.
Woodrat:
- rscadd: Additions of 6 new POIs for the cave area.
@@ -22,7 +22,7 @@
#################################
# Your name.
author: Anewbe
author: Atermonera
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
@@ -33,4 +33,4 @@ delete-after: True
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- bugfix: "Suit Coolers now properly cool FBPs in slightly burning rooms. If it gets too hot for your suit, you're still dead."
- rscadd: "Added umbrellas."
@@ -0,0 +1,40 @@
################################
# Example Changelog File
#
# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
#
# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
# When it is, any changes listed below will disappear.
#
# Valid Prefixes:
# bugfix
# wip (For works in progress)
# tweak
# soundadd
# sounddel
# rscadd (general adding of nice things)
# rscdel (general deleting of nice things)
# imageadd
# imagedel
# maptweak
# spellcheck (typo fixes)
# experiment
#################################
# Your name.
author: battlefieldCommander
# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
delete-after: True
# Any changes you've made. See valid prefix list above.
# INDENT WITH TWO SPACES. NOT TABS. SPACES.
# SCREW THIS UP AND IT WON'T WORK.
# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
changes:
- rscadd: "Added fireplaces which operate similarly to bonfires."
- bugfix: "Fixed an oversight that allowed for an in-between state in bonfires where the fire would mysteriously go out after adding wood."
- rscadd: "Added blue sifwood floor tiles."
- bugfix: "Fixed blue carpet, now known as teal carpet"
- rscadd: "Added the ability to dig up tree stumps with a shovel."
Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.6 KiB

After

Width:  |  Height:  |  Size: 4.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 258 KiB

After

Width:  |  Height:  |  Size: 264 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

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